CollapseButton.tsx53 lines · main
1import { useBreakpoint } from 'common'
2import { PanelLeftClose, PanelLeftOpen } from 'lucide-react'
3import { cn, Tooltip, TooltipContent, TooltipTrigger } from 'ui'
4
5import { useAppStateSnapshot } from '@/state/app-state'
6
7export function CollapseButton({ hideTabs }: { hideTabs: boolean }) {
8 const { showSidebar, setShowSidebar, mobileMenuOpen, setMobileMenuOpen } = useAppStateSnapshot()
9 const isMobile = useBreakpoint('md')
10
11 const handleToggle = () => {
12 if (isMobile) {
13 setMobileMenuOpen(!mobileMenuOpen)
14 } else {
15 setShowSidebar(!showSidebar)
16 }
17 }
18
19 return (
20 <Tooltip>
21 <TooltipTrigger asChild>
22 <button
23 className={cn(
24 'hidden md:flex items-center justify-center w-10 h-(--header-height) hover:bg-surface-100 shrink-0',
25 !hideTabs && 'border-b border-b-default'
26 )}
27 onClick={handleToggle}
28 >
29 {showSidebar ? (
30 <>
31 <PanelLeftClose
32 size={16}
33 strokeWidth={1.5}
34 className="text-foreground-lighter hover:text-foreground-light"
35 />
36 <span className="sr-only">Collapse sidebar</span>
37 </>
38 ) : (
39 <>
40 <PanelLeftOpen
41 size={16}
42 strokeWidth={1.5}
43 className="text-foreground-lighter hover:text-foreground-light"
44 />
45 <span className="sr-only">Expand sidebar</span>
46 </>
47 )}
48 </button>
49 </TooltipTrigger>
50 <TooltipContent side="bottom">{showSidebar ? 'Collapse' : 'Expand'} sidebar</TooltipContent>
51 </Tooltip>
52 )
53}