mirror of
https://github.com/duckietm/Nitro-V3.git
synced 2026-06-20 15:36:18 +00:00
feat(toolbar): add two edge collapse buttons for the icon clusters
Add a tab button at the left and right outer edges of the desktop toolbar. The left one hides/shows the left action icons, the right one hides/shows the friends/right cluster — each independent, toggled with a chevron that flips direction. Styled as a semi-transparent gray edge tab matching the bar.
This commit is contained in:
@@ -32,6 +32,8 @@ export const ToolbarView: FC<{ isInRoom: boolean }> = props =>
|
|||||||
const { isInRoom } = props;
|
const { isInRoom } = props;
|
||||||
const [ isMeExpanded, setMeExpanded ] = useState(false);
|
const [ isMeExpanded, setMeExpanded ] = useState(false);
|
||||||
const [ isTouchLayout, setIsTouchLayout ] = useState(false);
|
const [ isTouchLayout, setIsTouchLayout ] = useState(false);
|
||||||
|
const [ leftCollapsed, setLeftCollapsed ] = useState(false);
|
||||||
|
const [ rightCollapsed, setRightCollapsed ] = useState(false);
|
||||||
const [ staffStackBottom, setStaffStackBottom ] = useState<number | null>(null);
|
const [ staffStackBottom, setStaffStackBottom ] = useState<number | null>(null);
|
||||||
const [ useGuideTool, setUseGuideTool ] = useState(false);
|
const [ useGuideTool, setUseGuideTool ] = useState(false);
|
||||||
const [ youtubeEnabled, setYoutubeEnabled ] = useState(false);
|
const [ youtubeEnabled, setYoutubeEnabled ] = useState(false);
|
||||||
@@ -197,6 +199,16 @@ export const ToolbarView: FC<{ isInRoom: boolean }> = props =>
|
|||||||
variants={ leftNavVariants }
|
variants={ leftNavVariants }
|
||||||
transition={ NAV_TRANSITION }
|
transition={ NAV_TRANSITION }
|
||||||
className={ `tb-nav-clip fixed bottom-0 left-0 z-40 h-[52px] max-w-[calc(50vw-242px)] items-center pl-3 ${ desktopFlexClasses }` }>
|
className={ `tb-nav-clip fixed bottom-0 left-0 z-40 h-[52px] max-w-[calc(50vw-242px)] items-center pl-3 ${ desktopFlexClasses }` }>
|
||||||
|
<button
|
||||||
|
type="button"
|
||||||
|
onClick={ () => setLeftCollapsed(value => !value) }
|
||||||
|
aria-label="Mostra/Nascondi icone"
|
||||||
|
className="tb-collapse pointer-events-auto mt-[6px] mr-[3px]">
|
||||||
|
<svg className="h-3 w-3" viewBox="0 0 24 24" fill="none" stroke="currentColor">
|
||||||
|
<path strokeLinecap="round" strokeLinejoin="round" strokeWidth={ 3 } d={ leftCollapsed ? 'M15 19l-7-7 7-7' : 'M9 5l7 7-7 7' } />
|
||||||
|
</svg>
|
||||||
|
</button>
|
||||||
|
{ !leftCollapsed &&
|
||||||
<motion.div
|
<motion.div
|
||||||
variants={ containerVariants }
|
variants={ containerVariants }
|
||||||
className="tb-open-shell flex h-[52px] max-w-full items-center gap-2 overflow-visible bg-transparent px-[8px] pt-[10px] pb-[2px]">
|
className="tb-open-shell flex h-[52px] max-w-full items-center gap-2 overflow-visible bg-transparent px-[8px] pt-[10px] pb-[2px]">
|
||||||
@@ -285,7 +297,7 @@ export const ToolbarView: FC<{ isInRoom: boolean }> = props =>
|
|||||||
<motion.div variants={ itemVariants }>
|
<motion.div variants={ itemVariants }>
|
||||||
<ToolbarItemView icon="furnieditor" onClick={ () => CreateLinkEvent('furni-editor/toggle') } className="tb-icon" />
|
<ToolbarItemView icon="furnieditor" onClick={ () => CreateLinkEvent('furni-editor/toggle') } className="tb-icon" />
|
||||||
</motion.div> }
|
</motion.div> }
|
||||||
</motion.div>
|
</motion.div> }
|
||||||
</motion.div>
|
</motion.div>
|
||||||
<motion.div
|
<motion.div
|
||||||
initial="visible"
|
initial="visible"
|
||||||
@@ -293,6 +305,7 @@ export const ToolbarView: FC<{ isInRoom: boolean }> = props =>
|
|||||||
variants={ rightNavVariants }
|
variants={ rightNavVariants }
|
||||||
transition={ NAV_TRANSITION }
|
transition={ NAV_TRANSITION }
|
||||||
className={ `tb-nav-clip fixed bottom-0 z-40 h-[52px] max-w-[calc(50vw-242px)] items-center pr-3 ${ desktopFlexClasses } ${ isInRoom ? 'right-0' : 'right-3' }` }>
|
className={ `tb-nav-clip fixed bottom-0 z-40 h-[52px] max-w-[calc(50vw-242px)] items-center pr-3 ${ desktopFlexClasses } ${ isInRoom ? 'right-0' : 'right-3' }` }>
|
||||||
|
{ !rightCollapsed &&
|
||||||
<motion.div
|
<motion.div
|
||||||
variants={ containerVariants }
|
variants={ containerVariants }
|
||||||
className="tb-open-shell flex h-[52px] max-w-full items-center gap-3 overflow-visible bg-transparent px-[8px] pt-[10px] pb-[2px]">
|
className="tb-open-shell flex h-[52px] max-w-full items-center gap-3 overflow-visible bg-transparent px-[8px] pt-[10px] pb-[2px]">
|
||||||
@@ -313,7 +326,16 @@ export const ToolbarView: FC<{ isInRoom: boolean }> = props =>
|
|||||||
</motion.div> }
|
</motion.div> }
|
||||||
<div className={ `mx-1 h-5 w-[1px] bg-white/20 ${ desktopBlockClasses }` } />
|
<div className={ `mx-1 h-5 w-[1px] bg-white/20 ${ desktopBlockClasses }` } />
|
||||||
<div className={ `h-full shrink-0 ${ desktopBlockClasses }` } id="toolbar-friend-bar-container-desktop" />
|
<div className={ `h-full shrink-0 ${ desktopBlockClasses }` } id="toolbar-friend-bar-container-desktop" />
|
||||||
</motion.div>
|
</motion.div> }
|
||||||
|
<button
|
||||||
|
type="button"
|
||||||
|
onClick={ () => setRightCollapsed(value => !value) }
|
||||||
|
aria-label="Mostra/Nascondi icone"
|
||||||
|
className="tb-collapse pointer-events-auto mt-[6px] ml-[3px]">
|
||||||
|
<svg className="h-3 w-3" viewBox="0 0 24 24" fill="none" stroke="currentColor">
|
||||||
|
<path strokeLinecap="round" strokeLinejoin="round" strokeWidth={ 3 } d={ rightCollapsed ? 'M9 5l7 7-7 7' : 'M15 19l-7-7 7-7' } />
|
||||||
|
</svg>
|
||||||
|
</button>
|
||||||
</motion.div>
|
</motion.div>
|
||||||
<motion.div
|
<motion.div
|
||||||
initial="visible"
|
initial="visible"
|
||||||
@@ -485,6 +507,26 @@ const TOOLBAR_STYLES = `
|
|||||||
transform: translateY(0);
|
transform: translateY(0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.tb-collapse {
|
||||||
|
width: 15px;
|
||||||
|
height: 34px;
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: center;
|
||||||
|
flex-shrink: 0;
|
||||||
|
border-radius: 6px;
|
||||||
|
background: rgba(62, 64, 72, 0.55);
|
||||||
|
border: 1px solid rgba(255, 255, 255, 0.10);
|
||||||
|
color: rgba(255, 255, 255, 0.70);
|
||||||
|
cursor: pointer;
|
||||||
|
transition: color 0.15s, background 0.15s;
|
||||||
|
}
|
||||||
|
|
||||||
|
.tb-collapse:hover {
|
||||||
|
color: #fff;
|
||||||
|
background: rgba(80, 82, 90, 0.65);
|
||||||
|
}
|
||||||
|
|
||||||
.tb-bar-scroll {
|
.tb-bar-scroll {
|
||||||
overflow-x: auto;
|
overflow-x: auto;
|
||||||
overflow-y: visible;
|
overflow-y: visible;
|
||||||
|
|||||||
Reference in New Issue
Block a user