CollapseButton.tsx 1.6 KB

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