@fragments-sdk/ui 0.12.0 → 0.13.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (123) hide show
  1. package/dist/components/Accordion/index.cjs +11 -4
  2. package/dist/components/Accordion/index.cjs.map +1 -1
  3. package/dist/components/Accordion/index.d.ts +3 -3
  4. package/dist/components/Accordion/index.d.ts.map +1 -1
  5. package/dist/components/Accordion/index.js +11 -4
  6. package/dist/components/Accordion/index.js.map +1 -1
  7. package/dist/components/Collapsible/index.cjs +45 -10
  8. package/dist/components/Collapsible/index.cjs.map +1 -1
  9. package/dist/components/Collapsible/index.d.ts +6 -12
  10. package/dist/components/Collapsible/index.d.ts.map +1 -1
  11. package/dist/components/Collapsible/index.js +45 -10
  12. package/dist/components/Collapsible/index.js.map +1 -1
  13. package/dist/components/Combobox/index.cjs +18 -9
  14. package/dist/components/Combobox/index.cjs.map +1 -1
  15. package/dist/components/Combobox/index.d.ts +8 -12
  16. package/dist/components/Combobox/index.d.ts.map +1 -1
  17. package/dist/components/Combobox/index.js +18 -9
  18. package/dist/components/Combobox/index.js.map +1 -1
  19. package/dist/components/Command/index.cjs +54 -21
  20. package/dist/components/Command/index.cjs.map +1 -1
  21. package/dist/components/Command/index.d.ts +2 -2
  22. package/dist/components/Command/index.d.ts.map +1 -1
  23. package/dist/components/Command/index.js +54 -21
  24. package/dist/components/Command/index.js.map +1 -1
  25. package/dist/components/DataTable/index.cjs +13 -1
  26. package/dist/components/DataTable/index.cjs.map +1 -1
  27. package/dist/components/DataTable/index.d.ts.map +1 -1
  28. package/dist/components/DataTable/index.js +13 -1
  29. package/dist/components/DataTable/index.js.map +1 -1
  30. package/dist/components/DatePicker/index.d.ts +2 -3
  31. package/dist/components/DatePicker/index.d.ts.map +1 -1
  32. package/dist/components/Dialog/index.cjs +12 -9
  33. package/dist/components/Dialog/index.cjs.map +1 -1
  34. package/dist/components/Dialog/index.d.ts +8 -12
  35. package/dist/components/Dialog/index.d.ts.map +1 -1
  36. package/dist/components/Dialog/index.js +12 -9
  37. package/dist/components/Dialog/index.js.map +1 -1
  38. package/dist/components/Drawer/index.cjs +12 -9
  39. package/dist/components/Drawer/index.cjs.map +1 -1
  40. package/dist/components/Drawer/index.d.ts +8 -12
  41. package/dist/components/Drawer/index.d.ts.map +1 -1
  42. package/dist/components/Drawer/index.js +12 -9
  43. package/dist/components/Drawer/index.js.map +1 -1
  44. package/dist/components/Menu/index.cjs +30 -16
  45. package/dist/components/Menu/index.cjs.map +1 -1
  46. package/dist/components/Menu/index.d.ts +17 -25
  47. package/dist/components/Menu/index.d.ts.map +1 -1
  48. package/dist/components/Menu/index.js +30 -16
  49. package/dist/components/Menu/index.js.map +1 -1
  50. package/dist/components/NavigationMenu/NavigationMenuContext.cjs.map +1 -1
  51. package/dist/components/NavigationMenu/NavigationMenuContext.d.ts +1 -0
  52. package/dist/components/NavigationMenu/NavigationMenuContext.d.ts.map +1 -1
  53. package/dist/components/NavigationMenu/NavigationMenuContext.js.map +1 -1
  54. package/dist/components/NavigationMenu/index.cjs +43 -11
  55. package/dist/components/NavigationMenu/index.cjs.map +1 -1
  56. package/dist/components/NavigationMenu/index.d.ts.map +1 -1
  57. package/dist/components/NavigationMenu/index.js +43 -11
  58. package/dist/components/NavigationMenu/index.js.map +1 -1
  59. package/dist/components/NavigationMenu/useNavigationMenu.cjs +2 -0
  60. package/dist/components/NavigationMenu/useNavigationMenu.cjs.map +1 -1
  61. package/dist/components/NavigationMenu/useNavigationMenu.d.ts +1 -0
  62. package/dist/components/NavigationMenu/useNavigationMenu.d.ts.map +1 -1
  63. package/dist/components/NavigationMenu/useNavigationMenu.js +2 -0
  64. package/dist/components/NavigationMenu/useNavigationMenu.js.map +1 -1
  65. package/dist/components/Popover/index.cjs +11 -10
  66. package/dist/components/Popover/index.cjs.map +1 -1
  67. package/dist/components/Popover/index.d.ts +8 -12
  68. package/dist/components/Popover/index.d.ts.map +1 -1
  69. package/dist/components/Popover/index.js +11 -10
  70. package/dist/components/Popover/index.js.map +1 -1
  71. package/dist/components/Select/index.cjs +7 -6
  72. package/dist/components/Select/index.cjs.map +1 -1
  73. package/dist/components/Select/index.d.ts +6 -9
  74. package/dist/components/Select/index.d.ts.map +1 -1
  75. package/dist/components/Select/index.js +7 -6
  76. package/dist/components/Select/index.js.map +1 -1
  77. package/dist/components/Sidebar/index.cjs +71 -24
  78. package/dist/components/Sidebar/index.cjs.map +1 -1
  79. package/dist/components/Sidebar/index.d.ts +21 -33
  80. package/dist/components/Sidebar/index.d.ts.map +1 -1
  81. package/dist/components/Sidebar/index.js +71 -24
  82. package/dist/components/Sidebar/index.js.map +1 -1
  83. package/dist/components/Tooltip/index.cjs +12 -6
  84. package/dist/components/Tooltip/index.cjs.map +1 -1
  85. package/dist/components/Tooltip/index.d.ts.map +1 -1
  86. package/dist/components/Tooltip/index.js +12 -6
  87. package/dist/components/Tooltip/index.js.map +1 -1
  88. package/dist/datepicker.cjs +24 -10
  89. package/dist/datepicker.cjs.map +1 -1
  90. package/dist/datepicker.js +24 -10
  91. package/dist/datepicker.js.map +1 -1
  92. package/fragments.json +1 -1
  93. package/package.json +2 -2
  94. package/src/components/Accordion/Accordion.test.tsx +33 -0
  95. package/src/components/Accordion/index.tsx +10 -3
  96. package/src/components/Collapsible/Collapsible.test.tsx +41 -0
  97. package/src/components/Collapsible/index.tsx +53 -16
  98. package/src/components/Combobox/Combobox.test.tsx +55 -0
  99. package/src/components/Combobox/index.tsx +23 -17
  100. package/src/components/Command/Command.test.tsx +93 -0
  101. package/src/components/Command/index.tsx +61 -18
  102. package/src/components/DataTable/DataTable.test.tsx +11 -2
  103. package/src/components/DataTable/index.tsx +22 -2
  104. package/src/components/DatePicker/DatePicker.test.tsx +79 -0
  105. package/src/components/DatePicker/index.tsx +29 -14
  106. package/src/components/Dialog/Dialog.test.tsx +23 -0
  107. package/src/components/Dialog/index.tsx +15 -16
  108. package/src/components/Drawer/Drawer.test.tsx +27 -0
  109. package/src/components/Drawer/index.tsx +15 -16
  110. package/src/components/Menu/index.tsx +35 -30
  111. package/src/components/NavigationMenu/NavigationMenu.fragment.tsx +1 -1
  112. package/src/components/NavigationMenu/NavigationMenu.test.tsx +40 -4
  113. package/src/components/NavigationMenu/NavigationMenuContext.ts +3 -0
  114. package/src/components/NavigationMenu/index.tsx +49 -13
  115. package/src/components/NavigationMenu/useNavigationMenu.ts +4 -0
  116. package/src/components/Popover/Popover.test.tsx +23 -0
  117. package/src/components/Popover/index.tsx +15 -18
  118. package/src/components/Select/Select.test.tsx +41 -0
  119. package/src/components/Select/index.tsx +10 -12
  120. package/src/components/Sidebar/Sidebar.test.tsx +83 -4
  121. package/src/components/Sidebar/index.tsx +87 -45
  122. package/src/components/Tooltip/Tooltip.test.tsx +17 -0
  123. package/src/components/Tooltip/index.tsx +46 -32
@@ -1 +1 @@
1
- {"version":3,"file":"index.cjs","sources":["../../../src/components/Sidebar/index.tsx"],"sourcesContent":["'use client';\n\nimport * as React from 'react';\nimport styles from './Sidebar.module.scss';\nimport { Tooltip } from '../Tooltip';\nimport { Skeleton } from '../Skeleton';\nimport { Collapsible } from '../Collapsible';\nimport { ScrollArea } from '../ScrollArea';\nimport { useFocusTrap } from '../../utils/a11y';\nimport { useKeyboardShortcut } from '../../utils/keyboard-shortcuts';\n\n// ============================================\n// Types\n// ============================================\n\n/** Collapse behavior mode */\nexport type SidebarCollapsible = 'icon' | 'offcanvas' | 'none';\n\nexport interface SidebarProviderProps {\n children: React.ReactNode;\n /** Icon-only mode (desktop) - controlled */\n collapsed?: boolean;\n /** Initial collapsed state (uncontrolled) */\n defaultCollapsed?: boolean;\n /** Callback when collapsed state changes */\n onCollapsedChange?: (collapsed: boolean) => void;\n /** Mobile drawer state - controlled */\n open?: boolean;\n /** Initial open state (uncontrolled) */\n defaultOpen?: boolean;\n /** Callback when open state changes */\n onOpenChange?: (open: boolean) => void;\n /** Width of expanded sidebar */\n width?: string;\n /** Width when collapsed */\n collapsedWidth?: string;\n /** Sidebar position */\n position?: 'left' | 'right';\n /** Collapse behavior: 'icon' (default), 'offcanvas', or 'none' */\n collapsible?: SidebarCollapsible;\n /** Enable Cmd/Ctrl+B keyboard shortcut to toggle sidebar */\n enableKeyboardShortcut?: boolean;\n}\n\nexport interface SidebarProps extends React.HTMLAttributes<HTMLElement> {\n children: React.ReactNode;\n /** Icon-only mode (desktop) - controlled */\n collapsed?: boolean;\n /** Initial collapsed state (uncontrolled) */\n defaultCollapsed?: boolean;\n /** Callback when collapsed state changes */\n onCollapsedChange?: (collapsed: boolean) => void;\n /** Mobile drawer state - controlled */\n open?: boolean;\n /** Initial open state (uncontrolled) */\n defaultOpen?: boolean;\n /** Callback when open state changes */\n onOpenChange?: (open: boolean) => void;\n /** Width of expanded sidebar */\n width?: string;\n /** Width when collapsed */\n collapsedWidth?: string;\n /** Sidebar position */\n position?: 'left' | 'right';\n /** Collapse behavior: 'icon' (default), 'offcanvas', or 'none' */\n collapsible?: SidebarCollapsible;\n}\n\nexport interface SidebarHeaderProps {\n children: React.ReactNode;\n /** Content to show when sidebar is collapsed (e.g., just logo icon) */\n collapsedContent?: React.ReactNode;\n className?: string;\n}\n\nexport interface SidebarNavProps {\n children: React.ReactNode;\n /** Accessible label for navigation */\n 'aria-label'?: string;\n className?: string;\n}\n\nexport interface SidebarSectionProps {\n children: React.ReactNode;\n /** Optional section label */\n label?: string;\n /** Action element to display in the section header (e.g., \"Add\" button) */\n action?: React.ReactNode;\n /** Enable collapsible behavior */\n collapsible?: boolean;\n /** Default expanded state (only applies when collapsible is true) */\n defaultOpen?: boolean;\n className?: string;\n}\n\nexport interface SidebarSectionActionProps {\n children: React.ReactNode;\n /** Click handler */\n onClick?: () => void;\n /** Accessible label */\n 'aria-label'?: string;\n className?: string;\n}\n\nexport interface SidebarItemProps extends Omit<React.HTMLAttributes<HTMLElement>, 'onClick'> {\n children: React.ReactNode;\n /** Icon element (required for collapsed mode visibility) */\n icon?: React.ReactNode;\n /** Whether item is currently active/selected */\n active?: boolean;\n /** Disabled state */\n disabled?: boolean;\n /** Badge content (e.g., notification count) */\n badge?: React.ReactNode;\n /** Renders as anchor if provided */\n href?: string;\n /** Click handler (renders as button) */\n onClick?: () => void;\n /** Whether this item has a submenu */\n hasSubmenu?: boolean;\n /** Whether submenu is expanded (controlled) */\n expanded?: boolean;\n /** Initial expanded state (uncontrolled) */\n defaultExpanded?: boolean;\n /** Callback when expanded state changes */\n onExpandedChange?: (expanded: boolean) => void;\n /**\n * Render as child element (polymorphic). When true, clones the single child\n * and merges sidebar item props. Useful for rendering as Next.js Link, etc.\n */\n asChild?: boolean;\n}\n\nexport interface SidebarSubItemProps extends Omit<React.HTMLAttributes<HTMLElement>, 'onClick'> {\n children: React.ReactNode;\n /** Whether item is currently active/selected */\n active?: boolean;\n /** Disabled state */\n disabled?: boolean;\n /** Renders as anchor if provided */\n href?: string;\n /** Click handler (renders as button) */\n onClick?: () => void;\n}\n\nexport interface SidebarFooterProps {\n children: React.ReactNode;\n className?: string;\n}\n\nexport interface SidebarTriggerProps {\n /** Custom trigger element (uses render prop pattern) */\n children?: React.ReactNode;\n /** Accessible label */\n 'aria-label'?: string;\n className?: string;\n}\n\nexport interface SidebarOverlayProps {\n className?: string;\n}\n\nexport interface SidebarCollapseToggleProps {\n /** Accessible label */\n 'aria-label'?: string;\n className?: string;\n}\n\nexport interface SidebarRailProps {\n className?: string;\n}\n\nexport interface SidebarMenuSkeletonProps {\n /** Number of skeleton items to render */\n count?: number;\n /** Show icons in skeleton items */\n showIcon?: boolean;\n className?: string;\n}\n\n// ============================================\n// Icons\n// ============================================\n\nfunction MenuIcon() {\n return (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 256 256\"\n fill=\"currentColor\"\n aria-hidden=\"true\"\n >\n <path d=\"M224,128a8,8,0,0,1-8,8H40a8,8,0,0,1,0-16H216A8,8,0,0,1,224,128ZM40,72H216a8,8,0,0,0,0-16H40a8,8,0,0,0,0,16ZM216,184H40a8,8,0,0,0,0,16H216a8,8,0,0,0,0-16Z\" />\n </svg>\n );\n}\n\nfunction CloseIcon() {\n return (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 256 256\"\n fill=\"currentColor\"\n aria-hidden=\"true\"\n >\n <path d=\"M205.66,194.34a8,8,0,0,1-11.32,11.32L128,139.31,61.66,205.66a8,8,0,0,1-11.32-11.32L116.69,128,50.34,61.66A8,8,0,0,1,61.66,50.34L128,116.69l66.34-66.35a8,8,0,0,1,11.32,11.32L139.31,128Z\" />\n </svg>\n );\n}\n\nfunction CollapsePanelIcon() {\n return (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"20\"\n height=\"20\"\n viewBox=\"0 0 256 256\"\n fill=\"currentColor\"\n aria-hidden=\"true\"\n >\n <path d=\"M216,40H40A16,16,0,0,0,24,56V200a16,16,0,0,0,16,16H216a16,16,0,0,0,16-16V56A16,16,0,0,0,216,40ZM40,56H80V200H40ZM216,200H96V56H216V200Z\" />\n </svg>\n );\n}\n\nfunction ChevronRightIcon() {\n return (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 256 256\"\n fill=\"currentColor\"\n aria-hidden=\"true\"\n >\n <path d=\"M181.66,133.66l-80,80a8,8,0,0,1-11.32-11.32L164.69,128,90.34,53.66a8,8,0,0,1,11.32-11.32l80,80A8,8,0,0,1,181.66,133.66Z\" />\n </svg>\n );\n}\n\n// ============================================\n// Context\n// ============================================\n\ninterface SidebarContextValue {\n collapsed: boolean;\n setCollapsed: (collapsed: boolean) => void;\n open: boolean;\n setOpen: (open: boolean) => void;\n isMobile: boolean;\n position: 'left' | 'right';\n width: string;\n collapsedWidth: string;\n collapsible: SidebarCollapsible;\n hasIcons: boolean;\n toggleSidebar: () => void;\n sidebarId: string;\n}\n\nconst SidebarContext = React.createContext<SidebarContextValue | null>(null);\n\n/**\n * Hook to access sidebar state and controls.\n * Returns safe defaults if used outside a SidebarProvider/Sidebar.\n */\nfunction useSidebar() {\n const context = React.useContext(SidebarContext);\n if (!context) {\n // Return safe defaults when used outside provider\n return {\n collapsed: false,\n setCollapsed: () => {},\n open: false,\n setOpen: () => {},\n isMobile: false,\n position: 'left' as const,\n width: '240px',\n collapsedWidth: '56px',\n collapsible: 'icon' as SidebarCollapsible,\n hasIcons: true,\n toggleSidebar: () => {},\n sidebarId: 'sidebar',\n state: 'expanded' as 'expanded' | 'collapsed' | 'open' | 'closed',\n };\n }\n return {\n ...context,\n state: context.isMobile\n ? (context.open ? 'open' : 'closed')\n : (context.collapsed ? 'collapsed' : 'expanded'),\n };\n}\n\n/**\n * @deprecated Use `useSidebar` instead. This will be removed in a future version.\n */\nfunction useSidebarContext() {\n const context = React.useContext(SidebarContext);\n if (!context) {\n throw new Error('Sidebar compound components must be used within a Sidebar');\n }\n return context;\n}\n\n// ============================================\n// Hooks\n// ============================================\n\nfunction useIsMobile() {\n const [isMobile, setIsMobile] = React.useState(false);\n\n React.useEffect(() => {\n const mq = window.matchMedia('(max-width: 767px)');\n setIsMobile(mq.matches);\n const handler = (e: MediaQueryListEvent) => setIsMobile(e.matches);\n mq.addEventListener('change', handler);\n return () => mq.removeEventListener('change', handler);\n }, []);\n\n return isMobile;\n}\n\nfunction useControllableState<T>(\n controlledValue: T | undefined,\n defaultValue: T,\n onChange?: (value: T) => void\n): [T, (value: T) => void] {\n const [uncontrolledValue, setUncontrolledValue] = React.useState(defaultValue);\n const isControlled = controlledValue !== undefined;\n const value = isControlled ? controlledValue : uncontrolledValue;\n\n const setValue = React.useCallback(\n (newValue: T) => {\n if (!isControlled) {\n setUncontrolledValue(newValue);\n }\n onChange?.(newValue);\n },\n [isControlled, onChange]\n );\n\n return [value, setValue];\n}\n\nfunction hasSidebarItemIcons(children: React.ReactNode): boolean {\n let found = false;\n\n const visit = (nodes: React.ReactNode) => {\n React.Children.forEach(nodes, child => {\n if (found || !React.isValidElement(child)) return;\n\n if (child.type === SidebarItem) {\n const props = child.props as SidebarItemProps;\n if (props.icon) {\n found = true;\n return;\n }\n }\n\n const childProps = child.props as { children?: React.ReactNode };\n if (childProps?.children) {\n visit(childProps.children);\n }\n });\n };\n\n visit(children);\n return found;\n}\n\n// ============================================\n// Components\n// ============================================\n\n/**\n * SidebarProvider - Wrap your app layout to provide sidebar state to children.\n * This enables external triggers and keyboard shortcuts.\n */\nfunction SidebarProvider({\n children,\n collapsed: controlledCollapsed,\n defaultCollapsed = false,\n onCollapsedChange,\n open: controlledOpen,\n defaultOpen = false,\n onOpenChange,\n width = '240px',\n collapsedWidth = '56px',\n position = 'left',\n collapsible = 'icon',\n enableKeyboardShortcut = true,\n}: SidebarProviderProps) {\n const isMobile = useIsMobile();\n const sidebarId = React.useId();\n\n const [collapsed, setCollapsed] = useControllableState(\n controlledCollapsed,\n defaultCollapsed,\n onCollapsedChange\n );\n\n const [open, setOpen] = useControllableState(\n controlledOpen,\n defaultOpen,\n onOpenChange\n );\n\n const toggleSidebar = React.useCallback(() => {\n if (collapsible === 'none') return;\n if (isMobile) {\n setOpen(!open);\n } else {\n setCollapsed(!collapsed);\n }\n }, [isMobile, open, collapsed, setOpen, setCollapsed, collapsible]);\n\n // Handle Cmd/Ctrl+B keyboard shortcut (skips editable elements like Editor)\n useKeyboardShortcut({\n name: 'SIDEBAR_TOGGLE',\n handler: toggleSidebar,\n enabled: enableKeyboardShortcut && collapsible !== 'none',\n });\n\n // Handle escape key for mobile drawer\n React.useEffect(() => {\n if (!isMobile || !open) return;\n\n const handleEscape = (e: KeyboardEvent) => {\n if (e.key === 'Escape') {\n setOpen(false);\n }\n };\n\n document.addEventListener('keydown', handleEscape);\n return () => document.removeEventListener('keydown', handleEscape);\n }, [isMobile, open, setOpen]);\n\n // Lock body scroll when mobile drawer is open\n React.useEffect(() => {\n if (!isMobile) return;\n\n if (open) {\n document.body.style.overflow = 'hidden';\n } else {\n document.body.style.overflow = '';\n }\n\n return () => {\n document.body.style.overflow = '';\n };\n }, [isMobile, open]);\n\n const contextValue: SidebarContextValue = {\n collapsed,\n setCollapsed,\n open,\n setOpen,\n isMobile,\n position,\n width,\n collapsedWidth,\n collapsible,\n hasIcons: true,\n toggleSidebar,\n sidebarId,\n };\n\n return (\n <SidebarContext.Provider value={contextValue}>\n {children}\n </SidebarContext.Provider>\n );\n}\n\nfunction SidebarRoot({\n children,\n collapsed: controlledCollapsed,\n defaultCollapsed = false,\n onCollapsedChange,\n open: controlledOpen,\n defaultOpen = false,\n onOpenChange,\n width = '240px',\n collapsedWidth = '56px',\n position = 'left',\n collapsible = 'icon',\n className,\n style: styleProp,\n 'aria-label': ariaLabel,\n ...htmlProps\n}: SidebarProps) {\n // Check if we're inside a SidebarProvider\n const existingContext = React.useContext(SidebarContext);\n const isMobile = useIsMobile();\n\n const [internalCollapsed, setInternalCollapsed] = useControllableState(\n controlledCollapsed,\n defaultCollapsed,\n onCollapsedChange\n );\n\n const [internalOpen, setInternalOpen] = useControllableState(\n controlledOpen,\n defaultOpen,\n onOpenChange\n );\n\n // Use existing context values if inside a provider, otherwise use internal state\n const collapsed = existingContext ? existingContext.collapsed : internalCollapsed;\n const setCollapsed = existingContext ? existingContext.setCollapsed : setInternalCollapsed;\n const open = existingContext ? existingContext.open : internalOpen;\n const setOpen = existingContext ? existingContext.setOpen : setInternalOpen;\n const resolvedPosition = existingContext ? existingContext.position : position;\n const resolvedWidth = existingContext ? existingContext.width : width;\n const resolvedCollapsedWidth = existingContext ? existingContext.collapsedWidth : collapsedWidth;\n const resolvedCollapsible = existingContext ? existingContext.collapsible : collapsible;\n const hasIcons = React.useMemo(() => hasSidebarItemIcons(children), [children]);\n const shouldCollapseToZero = !isMobile && resolvedCollapsible === 'icon' && collapsed && !hasIcons;\n const isOffcanvasCollapsed = !isMobile && resolvedCollapsible === 'offcanvas' && collapsed;\n const effectiveCollapsedWidth = (shouldCollapseToZero || isOffcanvasCollapsed) ? '0px' : resolvedCollapsedWidth;\n const sidebarId = React.useId();\n const resolvedSidebarId = existingContext ? existingContext.sidebarId : sidebarId;\n const sidebarRef = React.useRef<HTMLElement>(null);\n\n useFocusTrap(sidebarRef, isMobile && open);\n\n const toggleSidebar = React.useCallback(() => {\n if (resolvedCollapsible === 'none') return;\n if (isMobile) {\n setOpen(!open);\n } else {\n setCollapsed(!collapsed);\n }\n }, [isMobile, open, collapsed, setOpen, setCollapsed, resolvedCollapsible]);\n\n // Handle escape key for mobile drawer (only if no provider)\n React.useEffect(() => {\n if (existingContext) return; // Provider handles this\n if (!isMobile || !open) return;\n\n const handleEscape = (e: KeyboardEvent) => {\n if (e.key === 'Escape') {\n setOpen(false);\n }\n };\n\n document.addEventListener('keydown', handleEscape);\n return () => document.removeEventListener('keydown', handleEscape);\n }, [existingContext, isMobile, open, setOpen]);\n\n // Lock body scroll when mobile drawer is open (only if no provider)\n React.useEffect(() => {\n if (existingContext) return; // Provider handles this\n if (!isMobile) return;\n\n if (open) {\n document.body.style.overflow = 'hidden';\n } else {\n document.body.style.overflow = '';\n }\n\n return () => {\n document.body.style.overflow = '';\n };\n }, [existingContext, isMobile, open]);\n\n const contextValue: SidebarContextValue = {\n ...(existingContext || {\n collapsed,\n setCollapsed,\n open,\n setOpen,\n isMobile,\n position: resolvedPosition,\n width: resolvedWidth,\n collapsedWidth: resolvedCollapsedWidth,\n collapsible: resolvedCollapsible,\n hasIcons,\n toggleSidebar,\n sidebarId: resolvedSidebarId,\n }),\n hasIcons,\n };\n\n const isCollapsedForStyle = resolvedCollapsible === 'icon' && collapsed;\n\n const classes = [\n styles.root,\n isMobile && styles.mobile,\n !isMobile && isCollapsedForStyle && styles.collapsed,\n !isMobile && isCollapsedForStyle && shouldCollapseToZero && styles.collapsedNoIcons,\n isOffcanvasCollapsed && styles.offcanvasCollapsed,\n resolvedPosition === 'right' && styles.positionRight,\n className,\n ].filter(Boolean).join(' ');\n\n const style: React.CSSProperties = {\n '--sidebar-width': resolvedWidth,\n '--sidebar-collapsed-width': resolvedCollapsedWidth,\n '--sidebar-effective-collapsed-width': effectiveCollapsedWidth,\n ...styleProp,\n } as React.CSSProperties;\n\n const content = (\n <aside\n ref={sidebarRef}\n id={resolvedSidebarId}\n {...htmlProps}\n className={classes}\n style={style}\n role={isMobile ? 'dialog' : undefined}\n aria-modal={isMobile && open ? true : undefined}\n aria-hidden={isMobile && !open ? true : undefined}\n aria-label={isMobile ? (ariaLabel || 'Sidebar navigation') : ariaLabel}\n data-state={isMobile ? (open ? 'open' : 'closed') : (collapsed ? 'collapsed' : 'expanded')}\n data-position={resolvedPosition}\n data-collapsible={resolvedCollapsible}\n data-icon-collapse={resolvedCollapsible === 'icon' ? (hasIcons ? 'icons' : 'none') : undefined}\n >\n {children}\n </aside>\n );\n\n return (\n <SidebarContext.Provider value={contextValue}>\n {content}\n </SidebarContext.Provider>\n );\n}\n\nfunction SidebarHeader({ children, collapsedContent, className }: SidebarHeaderProps) {\n const { collapsed, isMobile } = useSidebarContext();\n const isCollapsed = collapsed && !isMobile;\n const classes = [styles.header, className].filter(Boolean).join(' ');\n\n // Show collapsed content when sidebar is collapsed (and we have it), otherwise show children\n const content = isCollapsed && collapsedContent ? collapsedContent : children;\n\n return <div className={classes}>{content}</div>;\n}\n\nfunction SidebarNav({ children, 'aria-label': ariaLabel = 'Main navigation', className }: SidebarNavProps) {\n const classes = [styles.nav, className].filter(Boolean).join(' ');\n return (\n <nav className={classes} aria-label={ariaLabel}>\n <ScrollArea orientation=\"vertical\" showFades className={styles.navScrollArea}>\n {children}\n </ScrollArea>\n </nav>\n );\n}\n\nfunction SidebarSection({\n children,\n label,\n action,\n collapsible: isCollapsibleProp = false,\n defaultOpen = true,\n className\n}: SidebarSectionProps) {\n const { collapsed, isMobile } = useSidebarContext();\n\n const classes = [\n styles.section,\n className\n ].filter(Boolean).join(' ');\n\n const showLabel = label && (!collapsed || isMobile);\n const showAction = action && (!collapsed || isMobile);\n const isCollapsible = isCollapsibleProp && showLabel;\n\n // Non-collapsible section\n if (!isCollapsible) {\n return (\n <div className={classes} role=\"group\" aria-label={label}>\n {(showLabel || showAction) && (\n <div className={styles.sectionHeader}>\n {showLabel && <div className={styles.sectionLabel}>{label}</div>}\n {showAction && <div className={styles.sectionActionWrapper}>{action}</div>}\n </div>\n )}\n <ul className={styles.sectionList}>\n {children}\n </ul>\n </div>\n );\n }\n\n // Collapsible section using Collapsible component\n return (\n <div className={classes} role=\"group\" aria-label={label}>\n <Collapsible defaultOpen={defaultOpen} className={styles.sectionCollapsible}>\n <div className={styles.sectionHeader}>\n <Collapsible.Trigger\n className={styles.sectionTrigger}\n chevronPosition=\"end\"\n >\n <span className={styles.sectionLabel}>{label}</span>\n </Collapsible.Trigger>\n {showAction && <div className={styles.sectionActionWrapper}>{action}</div>}\n </div>\n <Collapsible.Content className={styles.sectionContent}>\n <ul className={styles.sectionList}>\n {children}\n </ul>\n </Collapsible.Content>\n </Collapsible>\n </div>\n );\n}\n\nfunction SidebarSectionAction({\n children,\n onClick,\n 'aria-label': ariaLabel,\n className,\n}: SidebarSectionActionProps) {\n const classes = [styles.sectionAction, className].filter(Boolean).join(' ');\n\n return (\n <button\n type=\"button\"\n className={classes}\n onClick={onClick}\n aria-label={ariaLabel}\n >\n {children}\n </button>\n );\n}\n\nfunction SidebarItem({\n children,\n icon,\n active = false,\n disabled = false,\n badge,\n href,\n onClick,\n hasSubmenu = false,\n expanded: controlledExpanded,\n defaultExpanded = false,\n onExpandedChange,\n asChild = false,\n className,\n ...rest\n}: SidebarItemProps) {\n const { collapsed, isMobile } = useSidebarContext();\n const [expanded, setExpanded] = useControllableState(\n controlledExpanded,\n defaultExpanded,\n onExpandedChange\n );\n\n const isCollapsed = collapsed && !isMobile;\n const showLabel = !isCollapsed;\n\n const classes = [\n styles.item,\n active && styles.itemActive,\n disabled && styles.itemDisabled,\n hasSubmenu && styles.itemHasSubmenu,\n expanded && styles.itemExpanded,\n className,\n ].filter(Boolean).join(' ');\n\n const handleClick = (e: React.MouseEvent) => {\n if (disabled) {\n e.preventDefault();\n return;\n }\n if (hasSubmenu) {\n e.preventDefault();\n setExpanded(!expanded);\n }\n onClick?.();\n };\n\n // Extract text content from children for aria-label when collapsed\n // For asChild, try to extract from the child's children prop\n let labelText: string | undefined;\n if (asChild && React.isValidElement(children)) {\n const childProps = children.props as { children?: React.ReactNode };\n labelText = typeof childProps.children === 'string' ? childProps.children : undefined;\n } else {\n labelText = typeof children === 'string' ? children : undefined;\n }\n\n const itemContent = (\n <>\n {icon && <span className={styles.itemIcon}>{icon}</span>}\n {showLabel && <span className={styles.itemLabel}>{asChild && React.isValidElement(children) ? (children.props as { children?: React.ReactNode }).children : children}</span>}\n {showLabel && badge && <span className={styles.itemBadge}>{badge}</span>}\n {showLabel && hasSubmenu && (\n <span className={styles.itemChevron}>\n <ChevronRightIcon />\n </span>\n )}\n </>\n );\n\n const itemProps = {\n className: classes,\n onClick: handleClick,\n 'aria-current': active ? 'page' as const : undefined,\n 'aria-disabled': disabled || undefined,\n 'aria-expanded': hasSubmenu ? expanded : undefined,\n 'aria-label': isCollapsed ? labelText : undefined,\n tabIndex: disabled ? -1 : 0,\n };\n\n let itemElement: React.ReactElement;\n\n if (asChild && React.isValidElement(children)) {\n // Clone the child element and merge props\n itemElement = React.cloneElement(children, {\n ...itemProps,\n ...rest,\n // Merge classNames\n className: [classes, (children.props as { className?: string }).className].filter(Boolean).join(' '),\n children: itemContent,\n } as React.HTMLAttributes<HTMLElement>);\n } else if (href) {\n itemElement = (\n <a {...itemProps} {...rest} href={href}>\n {itemContent}\n </a>\n );\n } else {\n itemElement = (\n <button {...itemProps} {...rest} type=\"button\">\n {itemContent}\n </button>\n );\n }\n\n // Wrap in tooltip when collapsed\n const wrappedItem = isCollapsed ? (\n <Tooltip content={labelText || children} side=\"right\" delay={100}>\n {itemElement}\n </Tooltip>\n ) : (\n itemElement\n );\n\n const wrapperClasses = [\n styles.itemWrapper,\n expanded && styles.itemExpanded,\n ].filter(Boolean).join(' ');\n\n return <li className={wrapperClasses}>{wrappedItem}</li>;\n}\n\nfunction SidebarSubItem({\n children,\n active = false,\n disabled = false,\n href,\n onClick,\n className,\n ...rest\n}: SidebarSubItemProps) {\n const { collapsed, isMobile } = useSidebarContext();\n\n // Don't render sub-items when collapsed (unless mobile)\n if (collapsed && !isMobile) {\n return null;\n }\n\n const classes = [\n styles.subItem,\n active && styles.subItemActive,\n disabled && styles.subItemDisabled,\n className,\n ].filter(Boolean).join(' ');\n\n const handleClick = (e: React.MouseEvent) => {\n if (disabled) {\n e.preventDefault();\n return;\n }\n onClick?.();\n };\n\n const itemProps = {\n className: classes,\n onClick: handleClick,\n 'aria-current': active ? 'page' as const : undefined,\n 'aria-disabled': disabled,\n tabIndex: disabled ? -1 : 0,\n };\n\n const itemElement = href ? (\n <a {...itemProps} {...rest} href={href}>\n {children}\n </a>\n ) : (\n <button {...itemProps} {...rest} type=\"button\">\n {children}\n </button>\n );\n\n return <li className={styles.subItemWrapper}>{itemElement}</li>;\n}\n\nfunction SidebarSubmenu({ children }: { children: React.ReactNode }) {\n return (\n <li className={styles.submenuWrapper}>\n <ul className={styles.submenu}>\n {children}\n </ul>\n </li>\n );\n}\n\nfunction SidebarFooter({ children, className }: SidebarFooterProps) {\n const classes = [styles.footer, className].filter(Boolean).join(' ');\n return <div className={classes}>{children}</div>;\n}\n\nfunction SidebarTrigger({ children, 'aria-label': ariaLabel = 'Toggle navigation', className }: SidebarTriggerProps) {\n const { open, setOpen, isMobile, sidebarId } = useSidebarContext();\n\n // Only render trigger on mobile\n if (!isMobile) {\n return null;\n }\n\n const classes = [styles.trigger, className].filter(Boolean).join(' ');\n\n return (\n <button\n type=\"button\"\n className={classes}\n onClick={() => setOpen(!open)}\n aria-label={ariaLabel}\n aria-expanded={open}\n aria-controls={sidebarId}\n >\n {children || (open ? <CloseIcon /> : <MenuIcon />)}\n </button>\n );\n}\n\nfunction SidebarOverlay({ className }: SidebarOverlayProps) {\n const { open, setOpen, isMobile } = useSidebarContext();\n\n // Only render overlay on mobile when open\n if (!isMobile || !open) {\n return null;\n }\n\n const classes = [styles.overlay, className].filter(Boolean).join(' ');\n\n return (\n <div\n className={classes}\n onClick={() => setOpen(false)}\n aria-hidden=\"true\"\n data-state={open ? 'open' : 'closed'}\n />\n );\n}\n\nfunction SidebarCollapseToggle({ 'aria-label': ariaLabel, className }: SidebarCollapseToggleProps) {\n const { collapsed, setCollapsed, isMobile, collapsible, hasIcons } = useSidebarContext();\n\n // Don't show on mobile or when collapsing is disabled\n if (isMobile || collapsible === 'none') {\n return null;\n }\n\n const shouldFloat = collapsed && (\n (collapsible === 'icon' && !hasIcons) ||\n collapsible === 'offcanvas'\n );\n const classes = [\n styles.collapseToggle,\n shouldFloat && styles.collapseToggleFloating,\n className,\n ].filter(Boolean).join(' ');\n const label = ariaLabel || (collapsed ? 'Expand sidebar' : 'Collapse sidebar');\n\n return (\n <button\n type=\"button\"\n className={classes}\n onClick={() => setCollapsed(!collapsed)}\n aria-label={label}\n >\n <CollapsePanelIcon />\n </button>\n );\n}\n\nfunction SidebarRail({ className }: SidebarRailProps) {\n const { collapsed, setCollapsed, isMobile, collapsible } = useSidebarContext();\n\n // Don't show on mobile or when collapsing is disabled\n if (isMobile || collapsible === 'none') {\n return null;\n }\n\n const classes = [\n styles.rail,\n collapsed && styles.railCollapsed,\n className,\n ].filter(Boolean).join(' ');\n\n return (\n <button\n type=\"button\"\n className={classes}\n onClick={() => setCollapsed(!collapsed)}\n aria-label={collapsed ? 'Expand sidebar' : 'Collapse sidebar'}\n title={collapsed ? 'Expand sidebar' : 'Collapse sidebar'}\n />\n );\n}\n\nfunction SidebarMenuSkeleton({\n count = 5,\n showIcon = true,\n className,\n}: SidebarMenuSkeletonProps) {\n const { collapsed, isMobile } = useSidebarContext();\n const isCollapsed = collapsed && !isMobile;\n\n const classes = [styles.menuSkeleton, className].filter(Boolean).join(' ');\n const labelWidths = ['64%', '72%', '68%', '79%', '74%', '66%', '83%', '70%'];\n\n return (\n <div className={classes} aria-hidden=\"true\">\n {Array.from({ length: count }).map((_, i) => (\n <div key={i} className={styles.skeletonItem}>\n {showIcon && <Skeleton variant=\"avatar\" size=\"sm\" />}\n {!isCollapsed && (\n <Skeleton\n variant=\"text\"\n className={styles.skeletonLabel}\n width={labelWidths[i % labelWidths.length]}\n />\n )}\n </div>\n ))}\n </div>\n );\n}\n\n// ============================================\n// Export compound component\n// ============================================\n\nexport const Sidebar = Object.assign(SidebarRoot, {\n Header: SidebarHeader,\n Nav: SidebarNav,\n Section: SidebarSection,\n SectionAction: SidebarSectionAction,\n Item: SidebarItem,\n SubItem: SidebarSubItem,\n Submenu: SidebarSubmenu,\n Footer: SidebarFooter,\n Trigger: SidebarTrigger,\n Overlay: SidebarOverlay,\n CollapseToggle: SidebarCollapseToggle,\n Rail: SidebarRail,\n MenuSkeleton: SidebarMenuSkeleton,\n});\n\n// Re-export individual components\nexport {\n SidebarProvider,\n SidebarRoot,\n SidebarHeader,\n SidebarNav,\n SidebarSection,\n SidebarSectionAction,\n SidebarItem,\n SidebarSubItem,\n SidebarSubmenu,\n SidebarFooter,\n SidebarTrigger,\n SidebarOverlay,\n SidebarCollapseToggle,\n SidebarRail,\n SidebarMenuSkeleton,\n};\n\n// Export hooks\nexport { useSidebar };\n\n// Export context hook for backwards compatibility (deprecated)\nexport { useSidebarContext };\n"],"names":["jsx","React","useKeyboardShortcut","useFocusTrap","styles","ScrollArea","jsxs","Collapsible","Fragment","Tooltip","Skeleton"],"mappings":"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"}
1
+ {"version":3,"file":"index.cjs","sources":["../../../src/components/Sidebar/index.tsx"],"sourcesContent":["'use client';\n\nimport * as React from 'react';\nimport styles from './Sidebar.module.scss';\nimport { Tooltip } from '../Tooltip';\nimport { Skeleton } from '../Skeleton';\nimport { Collapsible } from '../Collapsible';\nimport { ScrollArea } from '../ScrollArea';\nimport { useFocusTrap } from '../../utils/a11y';\nimport { useKeyboardShortcut } from '../../utils/keyboard-shortcuts';\n\nfunction composeEventHandlers<E extends { defaultPrevented: boolean }>(\n userHandler: ((event: E) => void) | undefined,\n internalHandler: (event: E) => void\n) {\n return (event: E) => {\n userHandler?.(event);\n if (event.defaultPrevented) return;\n internalHandler(event);\n };\n}\n\n// ============================================\n// Types\n// ============================================\n\n/** Collapse behavior mode */\nexport type SidebarCollapsible = 'icon' | 'offcanvas' | 'none';\n\nexport interface SidebarProviderProps {\n children: React.ReactNode;\n /** Icon-only mode (desktop) - controlled */\n collapsed?: boolean;\n /** Initial collapsed state (uncontrolled) */\n defaultCollapsed?: boolean;\n /** Callback when collapsed state changes */\n onCollapsedChange?: (collapsed: boolean) => void;\n /** Mobile drawer state - controlled */\n open?: boolean;\n /** Initial open state (uncontrolled) */\n defaultOpen?: boolean;\n /** Callback when open state changes */\n onOpenChange?: (open: boolean) => void;\n /** Width of expanded sidebar */\n width?: string;\n /** Width when collapsed */\n collapsedWidth?: string;\n /** Sidebar position */\n position?: 'left' | 'right';\n /** Collapse behavior: 'icon' (default), 'offcanvas', or 'none' */\n collapsible?: SidebarCollapsible;\n /** Enable Cmd/Ctrl+B keyboard shortcut to toggle sidebar */\n enableKeyboardShortcut?: boolean;\n}\n\nexport interface SidebarProps extends React.HTMLAttributes<HTMLElement> {\n children: React.ReactNode;\n /** Icon-only mode (desktop) - controlled */\n collapsed?: boolean;\n /** Initial collapsed state (uncontrolled) */\n defaultCollapsed?: boolean;\n /** Callback when collapsed state changes */\n onCollapsedChange?: (collapsed: boolean) => void;\n /** Mobile drawer state - controlled */\n open?: boolean;\n /** Initial open state (uncontrolled) */\n defaultOpen?: boolean;\n /** Callback when open state changes */\n onOpenChange?: (open: boolean) => void;\n /** Width of expanded sidebar */\n width?: string;\n /** Width when collapsed */\n collapsedWidth?: string;\n /** Sidebar position */\n position?: 'left' | 'right';\n /** Collapse behavior: 'icon' (default), 'offcanvas', or 'none' */\n collapsible?: SidebarCollapsible;\n}\n\nexport interface SidebarHeaderProps extends React.HTMLAttributes<HTMLDivElement> {\n children: React.ReactNode;\n /** Content to show when sidebar is collapsed (e.g., just logo icon) */\n collapsedContent?: React.ReactNode;\n}\n\nexport interface SidebarNavProps extends React.HTMLAttributes<HTMLElement> {\n children: React.ReactNode;\n /** Accessible label for navigation */\n 'aria-label'?: string;\n}\n\nexport interface SidebarSectionProps extends React.HTMLAttributes<HTMLDivElement> {\n children: React.ReactNode;\n /** Optional section label */\n label?: string;\n /** Action element to display in the section header (e.g., \"Add\" button) */\n action?: React.ReactNode;\n /** Enable collapsible behavior */\n collapsible?: boolean;\n /** Default expanded state (only applies when collapsible is true) */\n defaultOpen?: boolean;\n}\n\nexport interface SidebarSectionActionProps extends Omit<React.ButtonHTMLAttributes<HTMLButtonElement>, 'onClick'> {\n children: React.ReactNode;\n /** Click handler */\n onClick?: (event?: React.MouseEvent<HTMLButtonElement>) => void;\n /** Accessible label */\n 'aria-label'?: string;\n}\n\nexport interface SidebarItemProps extends Omit<React.HTMLAttributes<HTMLElement>, 'onClick'> {\n children: React.ReactNode;\n /** Icon element (required for collapsed mode visibility) */\n icon?: React.ReactNode;\n /** Whether item is currently active/selected */\n active?: boolean;\n /** Disabled state */\n disabled?: boolean;\n /** Badge content (e.g., notification count) */\n badge?: React.ReactNode;\n /** Renders as anchor if provided */\n href?: string;\n /** Click handler (renders as button) */\n onClick?: () => void;\n /** Whether this item has a submenu */\n hasSubmenu?: boolean;\n /** Whether submenu is expanded (controlled) */\n expanded?: boolean;\n /** Initial expanded state (uncontrolled) */\n defaultExpanded?: boolean;\n /** Callback when expanded state changes */\n onExpandedChange?: (expanded: boolean) => void;\n /**\n * Render as child element (polymorphic). When true, clones the single child\n * and merges sidebar item props. Useful for rendering as Next.js Link, etc.\n */\n asChild?: boolean;\n}\n\nexport interface SidebarSubItemProps extends Omit<React.HTMLAttributes<HTMLElement>, 'onClick'> {\n children: React.ReactNode;\n /** Whether item is currently active/selected */\n active?: boolean;\n /** Disabled state */\n disabled?: boolean;\n /** Renders as anchor if provided */\n href?: string;\n /** Click handler (renders as button) */\n onClick?: () => void;\n}\n\nexport interface SidebarFooterProps extends React.HTMLAttributes<HTMLDivElement> {\n children: React.ReactNode;\n}\n\nexport interface SidebarTriggerProps extends React.ButtonHTMLAttributes<HTMLButtonElement> {\n /** Custom trigger element (uses render prop pattern) */\n children?: React.ReactNode;\n /** Accessible label */\n 'aria-label'?: string;\n}\n\nexport type SidebarOverlayProps = React.HTMLAttributes<HTMLDivElement>;\n\nexport interface SidebarCollapseToggleProps extends React.ButtonHTMLAttributes<HTMLButtonElement> {\n /** Accessible label */\n 'aria-label'?: string;\n}\n\nexport type SidebarRailProps = React.ButtonHTMLAttributes<HTMLButtonElement>;\n\nexport interface SidebarMenuSkeletonProps extends React.HTMLAttributes<HTMLDivElement> {\n /** Number of skeleton items to render */\n count?: number;\n /** Show icons in skeleton items */\n showIcon?: boolean;\n}\n\n// ============================================\n// Icons\n// ============================================\n\nfunction MenuIcon() {\n return (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 256 256\"\n fill=\"currentColor\"\n aria-hidden=\"true\"\n >\n <path d=\"M224,128a8,8,0,0,1-8,8H40a8,8,0,0,1,0-16H216A8,8,0,0,1,224,128ZM40,72H216a8,8,0,0,0,0-16H40a8,8,0,0,0,0,16ZM216,184H40a8,8,0,0,0,0,16H216a8,8,0,0,0,0-16Z\" />\n </svg>\n );\n}\n\nfunction CloseIcon() {\n return (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 256 256\"\n fill=\"currentColor\"\n aria-hidden=\"true\"\n >\n <path d=\"M205.66,194.34a8,8,0,0,1-11.32,11.32L128,139.31,61.66,205.66a8,8,0,0,1-11.32-11.32L116.69,128,50.34,61.66A8,8,0,0,1,61.66,50.34L128,116.69l66.34-66.35a8,8,0,0,1,11.32,11.32L139.31,128Z\" />\n </svg>\n );\n}\n\nfunction CollapsePanelIcon() {\n return (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"20\"\n height=\"20\"\n viewBox=\"0 0 256 256\"\n fill=\"currentColor\"\n aria-hidden=\"true\"\n >\n <path d=\"M216,40H40A16,16,0,0,0,24,56V200a16,16,0,0,0,16,16H216a16,16,0,0,0,16-16V56A16,16,0,0,0,216,40ZM40,56H80V200H40ZM216,200H96V56H216V200Z\" />\n </svg>\n );\n}\n\nfunction ChevronRightIcon() {\n return (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 256 256\"\n fill=\"currentColor\"\n aria-hidden=\"true\"\n >\n <path d=\"M181.66,133.66l-80,80a8,8,0,0,1-11.32-11.32L164.69,128,90.34,53.66a8,8,0,0,1,11.32-11.32l80,80A8,8,0,0,1,181.66,133.66Z\" />\n </svg>\n );\n}\n\n// ============================================\n// Context\n// ============================================\n\ninterface SidebarContextValue {\n collapsed: boolean;\n setCollapsed: (collapsed: boolean) => void;\n open: boolean;\n setOpen: (open: boolean) => void;\n isMobile: boolean;\n position: 'left' | 'right';\n width: string;\n collapsedWidth: string;\n collapsible: SidebarCollapsible;\n hasIcons: boolean;\n toggleSidebar: () => void;\n sidebarId: string;\n}\n\nconst SidebarContext = React.createContext<SidebarContextValue | null>(null);\n\n/**\n * Hook to access sidebar state and controls.\n * Returns safe defaults if used outside a SidebarProvider/Sidebar.\n */\nfunction useSidebar() {\n const context = React.useContext(SidebarContext);\n if (!context) {\n // Return safe defaults when used outside provider\n return {\n collapsed: false,\n setCollapsed: () => {},\n open: false,\n setOpen: () => {},\n isMobile: false,\n position: 'left' as const,\n width: '240px',\n collapsedWidth: '56px',\n collapsible: 'icon' as SidebarCollapsible,\n hasIcons: true,\n toggleSidebar: () => {},\n sidebarId: 'sidebar',\n state: 'expanded' as 'expanded' | 'collapsed' | 'open' | 'closed',\n };\n }\n return {\n ...context,\n state: context.isMobile\n ? (context.open ? 'open' : 'closed')\n : (context.collapsed ? 'collapsed' : 'expanded'),\n };\n}\n\n/**\n * @deprecated Use `useSidebar` instead. This will be removed in a future version.\n */\nfunction useSidebarContext() {\n const context = React.useContext(SidebarContext);\n if (!context) {\n throw new Error('Sidebar compound components must be used within a Sidebar');\n }\n return context;\n}\n\n// ============================================\n// Hooks\n// ============================================\n\nfunction useIsMobile() {\n const [isMobile, setIsMobile] = React.useState(false);\n\n React.useEffect(() => {\n const mq = window.matchMedia('(max-width: 767px)');\n setIsMobile(mq.matches);\n const handler = (e: MediaQueryListEvent) => setIsMobile(e.matches);\n mq.addEventListener('change', handler);\n return () => mq.removeEventListener('change', handler);\n }, []);\n\n return isMobile;\n}\n\nfunction useControllableState<T>(\n controlledValue: T | undefined,\n defaultValue: T,\n onChange?: (value: T) => void\n): [T, (value: T) => void] {\n const [uncontrolledValue, setUncontrolledValue] = React.useState(defaultValue);\n const isControlled = controlledValue !== undefined;\n const value = isControlled ? controlledValue : uncontrolledValue;\n\n const setValue = React.useCallback(\n (newValue: T) => {\n if (!isControlled) {\n setUncontrolledValue(newValue);\n }\n onChange?.(newValue);\n },\n [isControlled, onChange]\n );\n\n return [value, setValue];\n}\n\nfunction hasSidebarItemIcons(children: React.ReactNode): boolean {\n let found = false;\n\n const visit = (nodes: React.ReactNode) => {\n React.Children.forEach(nodes, child => {\n if (found || !React.isValidElement(child)) return;\n\n if (child.type === SidebarItem) {\n const props = child.props as SidebarItemProps;\n if (props.icon) {\n found = true;\n return;\n }\n }\n\n const childProps = child.props as { children?: React.ReactNode };\n if (childProps?.children) {\n visit(childProps.children);\n }\n });\n };\n\n visit(children);\n return found;\n}\n\n// ============================================\n// Components\n// ============================================\n\n/**\n * SidebarProvider - Wrap your app layout to provide sidebar state to children.\n * This enables external triggers and keyboard shortcuts.\n */\nfunction SidebarProvider({\n children,\n collapsed: controlledCollapsed,\n defaultCollapsed = false,\n onCollapsedChange,\n open: controlledOpen,\n defaultOpen = false,\n onOpenChange,\n width = '240px',\n collapsedWidth = '56px',\n position = 'left',\n collapsible = 'icon',\n enableKeyboardShortcut = true,\n}: SidebarProviderProps) {\n const isMobile = useIsMobile();\n const sidebarId = React.useId();\n\n const [collapsed, setCollapsed] = useControllableState(\n controlledCollapsed,\n defaultCollapsed,\n onCollapsedChange\n );\n\n const [open, setOpen] = useControllableState(\n controlledOpen,\n defaultOpen,\n onOpenChange\n );\n\n const toggleSidebar = React.useCallback(() => {\n if (collapsible === 'none') return;\n if (isMobile) {\n setOpen(!open);\n } else {\n setCollapsed(!collapsed);\n }\n }, [isMobile, open, collapsed, setOpen, setCollapsed, collapsible]);\n\n // Handle Cmd/Ctrl+B keyboard shortcut (skips editable elements like Editor)\n useKeyboardShortcut({\n name: 'SIDEBAR_TOGGLE',\n handler: toggleSidebar,\n enabled: enableKeyboardShortcut && collapsible !== 'none',\n });\n\n // Handle escape key for mobile drawer\n React.useEffect(() => {\n if (!isMobile || !open) return;\n\n const handleEscape = (e: KeyboardEvent) => {\n if (e.key === 'Escape') {\n setOpen(false);\n }\n };\n\n document.addEventListener('keydown', handleEscape);\n return () => document.removeEventListener('keydown', handleEscape);\n }, [isMobile, open, setOpen]);\n\n // Lock body scroll when mobile drawer is open\n React.useEffect(() => {\n if (!isMobile) return;\n\n if (open) {\n document.body.style.overflow = 'hidden';\n } else {\n document.body.style.overflow = '';\n }\n\n return () => {\n document.body.style.overflow = '';\n };\n }, [isMobile, open]);\n\n const contextValue: SidebarContextValue = {\n collapsed,\n setCollapsed,\n open,\n setOpen,\n isMobile,\n position,\n width,\n collapsedWidth,\n collapsible,\n hasIcons: true,\n toggleSidebar,\n sidebarId,\n };\n\n return (\n <SidebarContext.Provider value={contextValue}>\n {children}\n </SidebarContext.Provider>\n );\n}\n\nfunction SidebarRoot({\n children,\n collapsed: controlledCollapsed,\n defaultCollapsed = false,\n onCollapsedChange,\n open: controlledOpen,\n defaultOpen = false,\n onOpenChange,\n width = '240px',\n collapsedWidth = '56px',\n position = 'left',\n collapsible = 'icon',\n className,\n style: styleProp,\n 'aria-label': ariaLabel,\n ...htmlProps\n}: SidebarProps) {\n // Check if we're inside a SidebarProvider\n const existingContext = React.useContext(SidebarContext);\n const isMobile = useIsMobile();\n\n const [internalCollapsed, setInternalCollapsed] = useControllableState(\n controlledCollapsed,\n defaultCollapsed,\n onCollapsedChange\n );\n\n const [internalOpen, setInternalOpen] = useControllableState(\n controlledOpen,\n defaultOpen,\n onOpenChange\n );\n\n // Use existing context values if inside a provider, otherwise use internal state\n const collapsed = existingContext ? existingContext.collapsed : internalCollapsed;\n const setCollapsed = existingContext ? existingContext.setCollapsed : setInternalCollapsed;\n const open = existingContext ? existingContext.open : internalOpen;\n const setOpen = existingContext ? existingContext.setOpen : setInternalOpen;\n const resolvedPosition = existingContext ? existingContext.position : position;\n const resolvedWidth = existingContext ? existingContext.width : width;\n const resolvedCollapsedWidth = existingContext ? existingContext.collapsedWidth : collapsedWidth;\n const resolvedCollapsible = existingContext ? existingContext.collapsible : collapsible;\n const hasIcons = React.useMemo(() => hasSidebarItemIcons(children), [children]);\n const shouldCollapseToZero = !isMobile && resolvedCollapsible === 'icon' && collapsed && !hasIcons;\n const isOffcanvasCollapsed = !isMobile && resolvedCollapsible === 'offcanvas' && collapsed;\n const effectiveCollapsedWidth = (shouldCollapseToZero || isOffcanvasCollapsed) ? '0px' : resolvedCollapsedWidth;\n const sidebarId = React.useId();\n const resolvedSidebarId = existingContext ? existingContext.sidebarId : sidebarId;\n const sidebarRef = React.useRef<HTMLElement>(null);\n\n useFocusTrap(sidebarRef, isMobile && open);\n\n const toggleSidebar = React.useCallback(() => {\n if (resolvedCollapsible === 'none') return;\n if (isMobile) {\n setOpen(!open);\n } else {\n setCollapsed(!collapsed);\n }\n }, [isMobile, open, collapsed, setOpen, setCollapsed, resolvedCollapsible]);\n\n // Handle escape key for mobile drawer (only if no provider)\n React.useEffect(() => {\n if (existingContext) return; // Provider handles this\n if (!isMobile || !open) return;\n\n const handleEscape = (e: KeyboardEvent) => {\n if (e.key === 'Escape') {\n setOpen(false);\n }\n };\n\n document.addEventListener('keydown', handleEscape);\n return () => document.removeEventListener('keydown', handleEscape);\n }, [existingContext, isMobile, open, setOpen]);\n\n // Lock body scroll when mobile drawer is open (only if no provider)\n React.useEffect(() => {\n if (existingContext) return; // Provider handles this\n if (!isMobile) return;\n\n if (open) {\n document.body.style.overflow = 'hidden';\n } else {\n document.body.style.overflow = '';\n }\n\n return () => {\n document.body.style.overflow = '';\n };\n }, [existingContext, isMobile, open]);\n\n const contextValue: SidebarContextValue = {\n ...(existingContext || {\n collapsed,\n setCollapsed,\n open,\n setOpen,\n isMobile,\n position: resolvedPosition,\n width: resolvedWidth,\n collapsedWidth: resolvedCollapsedWidth,\n collapsible: resolvedCollapsible,\n hasIcons,\n toggleSidebar,\n sidebarId: resolvedSidebarId,\n }),\n hasIcons,\n };\n\n const isCollapsedForStyle = resolvedCollapsible === 'icon' && collapsed;\n\n const classes = [\n styles.root,\n isMobile && styles.mobile,\n !isMobile && isCollapsedForStyle && styles.collapsed,\n !isMobile && isCollapsedForStyle && shouldCollapseToZero && styles.collapsedNoIcons,\n isOffcanvasCollapsed && styles.offcanvasCollapsed,\n resolvedPosition === 'right' && styles.positionRight,\n className,\n ].filter(Boolean).join(' ');\n\n const style: React.CSSProperties = {\n '--sidebar-width': resolvedWidth,\n '--sidebar-collapsed-width': resolvedCollapsedWidth,\n '--sidebar-effective-collapsed-width': effectiveCollapsedWidth,\n ...styleProp,\n } as React.CSSProperties;\n\n const content = (\n <aside\n ref={sidebarRef}\n id={resolvedSidebarId}\n {...htmlProps}\n className={classes}\n style={style}\n role={isMobile ? 'dialog' : undefined}\n aria-modal={isMobile && open ? true : undefined}\n aria-hidden={isMobile && !open ? true : undefined}\n aria-label={isMobile ? (ariaLabel || 'Sidebar navigation') : ariaLabel}\n data-state={isMobile ? (open ? 'open' : 'closed') : (collapsed ? 'collapsed' : 'expanded')}\n data-position={resolvedPosition}\n data-collapsible={resolvedCollapsible}\n data-icon-collapse={resolvedCollapsible === 'icon' ? (hasIcons ? 'icons' : 'none') : undefined}\n >\n {children}\n </aside>\n );\n\n return (\n <SidebarContext.Provider value={contextValue}>\n {content}\n </SidebarContext.Provider>\n );\n}\n\nfunction SidebarHeader({\n children,\n collapsedContent,\n className,\n ...htmlProps\n}: SidebarHeaderProps) {\n const { collapsed, isMobile } = useSidebarContext();\n const isCollapsed = collapsed && !isMobile;\n const classes = [styles.header, className].filter(Boolean).join(' ');\n\n // Show collapsed content when sidebar is collapsed (and we have it), otherwise show children\n const content = isCollapsed && collapsedContent ? collapsedContent : children;\n\n return <div {...htmlProps} className={classes}>{content}</div>;\n}\n\nfunction SidebarNav({\n children,\n 'aria-label': ariaLabel = 'Main navigation',\n className,\n ...htmlProps\n}: SidebarNavProps) {\n const classes = [styles.nav, className].filter(Boolean).join(' ');\n return (\n <nav {...htmlProps} className={classes} aria-label={ariaLabel}>\n <ScrollArea orientation=\"vertical\" showFades className={styles.navScrollArea}>\n {children}\n </ScrollArea>\n </nav>\n );\n}\n\nfunction SidebarSection({\n children,\n label,\n action,\n collapsible: isCollapsibleProp = false,\n defaultOpen = true,\n className,\n ...htmlProps\n}: SidebarSectionProps) {\n const { collapsed, isMobile } = useSidebarContext();\n\n const classes = [\n styles.section,\n className\n ].filter(Boolean).join(' ');\n\n const showLabel = label && (!collapsed || isMobile);\n const showAction = action && (!collapsed || isMobile);\n const isCollapsible = isCollapsibleProp && showLabel;\n\n // Non-collapsible section\n if (!isCollapsible) {\n return (\n <div {...htmlProps} className={classes} role=\"group\" aria-label={label}>\n {(showLabel || showAction) && (\n <div className={styles.sectionHeader}>\n {showLabel && <div className={styles.sectionLabel}>{label}</div>}\n {showAction && <div className={styles.sectionActionWrapper}>{action}</div>}\n </div>\n )}\n <ul className={styles.sectionList}>\n {children}\n </ul>\n </div>\n );\n }\n\n // Collapsible section using Collapsible component\n return (\n <div {...htmlProps} className={classes} role=\"group\" aria-label={label}>\n <Collapsible defaultOpen={defaultOpen} className={styles.sectionCollapsible}>\n <div className={styles.sectionHeader}>\n <Collapsible.Trigger\n className={styles.sectionTrigger}\n chevronPosition=\"end\"\n >\n <span className={styles.sectionLabel}>{label}</span>\n </Collapsible.Trigger>\n {showAction && <div className={styles.sectionActionWrapper}>{action}</div>}\n </div>\n <Collapsible.Content className={styles.sectionContent}>\n <ul className={styles.sectionList}>\n {children}\n </ul>\n </Collapsible.Content>\n </Collapsible>\n </div>\n );\n}\n\nfunction SidebarSectionAction({\n children,\n onClick,\n 'aria-label': ariaLabel,\n className,\n ...htmlProps\n}: SidebarSectionActionProps) {\n const classes = [styles.sectionAction, className].filter(Boolean).join(' ');\n\n return (\n <button\n type=\"button\"\n {...htmlProps}\n className={classes}\n onClick={(event) => onClick?.(event)}\n aria-label={ariaLabel}\n >\n {children}\n </button>\n );\n}\n\nfunction SidebarItem({\n children,\n icon,\n active = false,\n disabled = false,\n badge,\n href,\n onClick,\n hasSubmenu = false,\n expanded: controlledExpanded,\n defaultExpanded = false,\n onExpandedChange,\n asChild = false,\n className,\n ...rest\n}: SidebarItemProps) {\n const { collapsed, isMobile } = useSidebarContext();\n const [expanded, setExpanded] = useControllableState(\n controlledExpanded,\n defaultExpanded,\n onExpandedChange\n );\n\n const isCollapsed = collapsed && !isMobile;\n const showLabel = !isCollapsed;\n\n const classes = [\n styles.item,\n active && styles.itemActive,\n disabled && styles.itemDisabled,\n hasSubmenu && styles.itemHasSubmenu,\n expanded && styles.itemExpanded,\n className,\n ].filter(Boolean).join(' ');\n\n const handleClick = (e: React.MouseEvent) => {\n if (disabled) {\n e.preventDefault();\n return;\n }\n if (hasSubmenu) {\n e.preventDefault();\n setExpanded(!expanded);\n }\n onClick?.();\n };\n\n // Extract text content from children for aria-label when collapsed\n // For asChild, try to extract from the child's children prop\n let labelText: string | undefined;\n if (asChild && React.isValidElement(children)) {\n const childProps = children.props as { children?: React.ReactNode };\n labelText = typeof childProps.children === 'string' ? childProps.children : undefined;\n } else {\n labelText = typeof children === 'string' ? children : undefined;\n }\n\n const itemContent = (\n <>\n {icon && <span className={styles.itemIcon}>{icon}</span>}\n {showLabel && <span className={styles.itemLabel}>{asChild && React.isValidElement(children) ? (children.props as { children?: React.ReactNode }).children : children}</span>}\n {showLabel && badge && <span className={styles.itemBadge}>{badge}</span>}\n {showLabel && hasSubmenu && (\n <span className={styles.itemChevron}>\n <ChevronRightIcon />\n </span>\n )}\n </>\n );\n\n const itemProps = {\n className: classes,\n onClick: handleClick,\n 'aria-current': active ? 'page' as const : undefined,\n 'aria-disabled': disabled || undefined,\n 'aria-expanded': hasSubmenu ? expanded : undefined,\n 'aria-label': isCollapsed ? labelText : undefined,\n tabIndex: disabled ? -1 : 0,\n };\n\n let itemElement: React.ReactElement;\n\n if (asChild && React.isValidElement(children)) {\n // Clone the child element and merge props\n const childProps = children.props as {\n className?: string;\n onClick?: (event: React.MouseEvent<HTMLElement>) => void;\n };\n itemElement = React.cloneElement(children, {\n ...itemProps,\n ...rest,\n onClick: composeEventHandlers(\n childProps.onClick,\n (event: React.MouseEvent<HTMLElement>) => handleClick(event)\n ),\n // Merge classNames\n className: [classes, childProps.className].filter(Boolean).join(' '),\n children: itemContent,\n } as React.HTMLAttributes<HTMLElement>);\n } else if (href) {\n itemElement = (\n <a {...itemProps} {...rest} href={href}>\n {itemContent}\n </a>\n );\n } else {\n itemElement = (\n <button {...itemProps} {...rest} type=\"button\">\n {itemContent}\n </button>\n );\n }\n\n // Wrap in tooltip when collapsed\n const wrappedItem = isCollapsed ? (\n <Tooltip content={labelText || children} side=\"right\" delay={100}>\n {itemElement}\n </Tooltip>\n ) : (\n itemElement\n );\n\n const wrapperClasses = [\n styles.itemWrapper,\n expanded && styles.itemExpanded,\n ].filter(Boolean).join(' ');\n\n return <li className={wrapperClasses}>{wrappedItem}</li>;\n}\n\nfunction SidebarSubItem({\n children,\n active = false,\n disabled = false,\n href,\n onClick,\n className,\n ...rest\n}: SidebarSubItemProps) {\n const { collapsed, isMobile } = useSidebarContext();\n\n // Don't render sub-items when collapsed (unless mobile)\n if (collapsed && !isMobile) {\n return null;\n }\n\n const classes = [\n styles.subItem,\n active && styles.subItemActive,\n disabled && styles.subItemDisabled,\n className,\n ].filter(Boolean).join(' ');\n\n const handleClick = (e: React.MouseEvent) => {\n if (disabled) {\n e.preventDefault();\n return;\n }\n onClick?.();\n };\n\n const itemProps = {\n className: classes,\n onClick: handleClick,\n 'aria-current': active ? 'page' as const : undefined,\n 'aria-disabled': disabled,\n tabIndex: disabled ? -1 : 0,\n };\n\n const itemElement = href ? (\n <a {...itemProps} {...rest} href={href}>\n {children}\n </a>\n ) : (\n <button {...itemProps} {...rest} type=\"button\">\n {children}\n </button>\n );\n\n return <li className={styles.subItemWrapper}>{itemElement}</li>;\n}\n\nfunction SidebarSubmenu({ children }: { children: React.ReactNode }) {\n return (\n <li className={styles.submenuWrapper}>\n <ul className={styles.submenu}>\n {children}\n </ul>\n </li>\n );\n}\n\nfunction SidebarFooter({ children, className, ...htmlProps }: SidebarFooterProps) {\n const classes = [styles.footer, className].filter(Boolean).join(' ');\n return <div {...htmlProps} className={classes}>{children}</div>;\n}\n\nfunction SidebarTrigger({\n children,\n 'aria-label': ariaLabel = 'Toggle navigation',\n className,\n onClick,\n ...htmlProps\n}: SidebarTriggerProps) {\n const { open, setOpen, isMobile, sidebarId } = useSidebarContext();\n\n // Only render trigger on mobile\n if (!isMobile) {\n return null;\n }\n\n const classes = [styles.trigger, className].filter(Boolean).join(' ');\n\n return (\n <button\n {...htmlProps}\n type=\"button\"\n className={classes}\n onClick={composeEventHandlers(onClick, () => setOpen(!open))}\n aria-label={ariaLabel}\n aria-expanded={open}\n aria-controls={sidebarId}\n >\n {children || (open ? <CloseIcon /> : <MenuIcon />)}\n </button>\n );\n}\n\nfunction SidebarOverlay({ className, onClick, ...htmlProps }: SidebarOverlayProps) {\n const { open, setOpen, isMobile } = useSidebarContext();\n\n // Only render overlay on mobile when open\n if (!isMobile || !open) {\n return null;\n }\n\n const classes = [styles.overlay, className].filter(Boolean).join(' ');\n\n return (\n <div\n {...htmlProps}\n className={classes}\n onClick={composeEventHandlers(onClick, () => setOpen(false))}\n aria-hidden=\"true\"\n data-state={open ? 'open' : 'closed'}\n />\n );\n}\n\nfunction SidebarCollapseToggle({\n 'aria-label': ariaLabel,\n className,\n onClick,\n ...htmlProps\n}: SidebarCollapseToggleProps) {\n const { collapsed, setCollapsed, isMobile, collapsible, hasIcons } = useSidebarContext();\n\n // Don't show on mobile or when collapsing is disabled\n if (isMobile || collapsible === 'none') {\n return null;\n }\n\n const shouldFloat = collapsed && (\n (collapsible === 'icon' && !hasIcons) ||\n collapsible === 'offcanvas'\n );\n const classes = [\n styles.collapseToggle,\n shouldFloat && styles.collapseToggleFloating,\n className,\n ].filter(Boolean).join(' ');\n const label = ariaLabel || (collapsed ? 'Expand sidebar' : 'Collapse sidebar');\n\n return (\n <button\n {...htmlProps}\n type=\"button\"\n className={classes}\n onClick={composeEventHandlers(onClick, () => setCollapsed(!collapsed))}\n aria-label={label}\n >\n <CollapsePanelIcon />\n </button>\n );\n}\n\nfunction SidebarRail({\n className,\n onClick,\n title,\n 'aria-label': ariaLabel,\n ...htmlProps\n}: SidebarRailProps) {\n const { collapsed, setCollapsed, isMobile, collapsible } = useSidebarContext();\n\n // Don't show on mobile or when collapsing is disabled\n if (isMobile || collapsible === 'none') {\n return null;\n }\n\n const classes = [\n styles.rail,\n collapsed && styles.railCollapsed,\n className,\n ].filter(Boolean).join(' ');\n\n return (\n <button\n {...htmlProps}\n type=\"button\"\n className={classes}\n onClick={composeEventHandlers(onClick, () => setCollapsed(!collapsed))}\n aria-label={ariaLabel ?? (collapsed ? 'Expand sidebar' : 'Collapse sidebar')}\n title={title ?? (collapsed ? 'Expand sidebar' : 'Collapse sidebar')}\n />\n );\n}\n\nfunction SidebarMenuSkeleton({\n count = 5,\n showIcon = true,\n className,\n ...htmlProps\n}: SidebarMenuSkeletonProps) {\n const { collapsed, isMobile } = useSidebarContext();\n const isCollapsed = collapsed && !isMobile;\n\n const classes = [styles.menuSkeleton, className].filter(Boolean).join(' ');\n const labelWidths = ['64%', '72%', '68%', '79%', '74%', '66%', '83%', '70%'];\n\n return (\n <div {...htmlProps} className={classes} aria-hidden=\"true\">\n {Array.from({ length: count }).map((_, i) => (\n <div key={i} className={styles.skeletonItem}>\n {showIcon && <Skeleton variant=\"avatar\" size=\"sm\" />}\n {!isCollapsed && (\n <Skeleton\n variant=\"text\"\n className={styles.skeletonLabel}\n width={labelWidths[i % labelWidths.length]}\n />\n )}\n </div>\n ))}\n </div>\n );\n}\n\n// ============================================\n// Export compound component\n// ============================================\n\nexport const Sidebar = Object.assign(SidebarRoot, {\n Header: SidebarHeader,\n Nav: SidebarNav,\n Section: SidebarSection,\n SectionAction: SidebarSectionAction,\n Item: SidebarItem,\n SubItem: SidebarSubItem,\n Submenu: SidebarSubmenu,\n Footer: SidebarFooter,\n Trigger: SidebarTrigger,\n Overlay: SidebarOverlay,\n CollapseToggle: SidebarCollapseToggle,\n Rail: SidebarRail,\n MenuSkeleton: SidebarMenuSkeleton,\n});\n\n// Re-export individual components\nexport {\n SidebarProvider,\n SidebarRoot,\n SidebarHeader,\n SidebarNav,\n SidebarSection,\n SidebarSectionAction,\n SidebarItem,\n SidebarSubItem,\n SidebarSubmenu,\n SidebarFooter,\n SidebarTrigger,\n SidebarOverlay,\n SidebarCollapseToggle,\n SidebarRail,\n SidebarMenuSkeleton,\n};\n\n// Export hooks\nexport { useSidebar };\n\n// Export context hook for backwards compatibility (deprecated)\nexport { useSidebarContext };\n"],"names":["jsx","React","useKeyboardShortcut","useFocusTrap","styles","ScrollArea","jsxs","Collapsible","Fragment","Tooltip","Skeleton"],"mappings":"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"}
@@ -49,19 +49,17 @@ export interface SidebarProps extends React.HTMLAttributes<HTMLElement> {
49
49
  /** Collapse behavior: 'icon' (default), 'offcanvas', or 'none' */
50
50
  collapsible?: SidebarCollapsible;
51
51
  }
52
- export interface SidebarHeaderProps {
52
+ export interface SidebarHeaderProps extends React.HTMLAttributes<HTMLDivElement> {
53
53
  children: React.ReactNode;
54
54
  /** Content to show when sidebar is collapsed (e.g., just logo icon) */
55
55
  collapsedContent?: React.ReactNode;
56
- className?: string;
57
56
  }
58
- export interface SidebarNavProps {
57
+ export interface SidebarNavProps extends React.HTMLAttributes<HTMLElement> {
59
58
  children: React.ReactNode;
60
59
  /** Accessible label for navigation */
61
60
  'aria-label'?: string;
62
- className?: string;
63
61
  }
64
- export interface SidebarSectionProps {
62
+ export interface SidebarSectionProps extends React.HTMLAttributes<HTMLDivElement> {
65
63
  children: React.ReactNode;
66
64
  /** Optional section label */
67
65
  label?: string;
@@ -71,15 +69,13 @@ export interface SidebarSectionProps {
71
69
  collapsible?: boolean;
72
70
  /** Default expanded state (only applies when collapsible is true) */
73
71
  defaultOpen?: boolean;
74
- className?: string;
75
72
  }
76
- export interface SidebarSectionActionProps {
73
+ export interface SidebarSectionActionProps extends Omit<React.ButtonHTMLAttributes<HTMLButtonElement>, 'onClick'> {
77
74
  children: React.ReactNode;
78
75
  /** Click handler */
79
- onClick?: () => void;
76
+ onClick?: (event?: React.MouseEvent<HTMLButtonElement>) => void;
80
77
  /** Accessible label */
81
78
  'aria-label'?: string;
82
- className?: string;
83
79
  }
84
80
  export interface SidebarItemProps extends Omit<React.HTMLAttributes<HTMLElement>, 'onClick'> {
85
81
  children: React.ReactNode;
@@ -120,34 +116,26 @@ export interface SidebarSubItemProps extends Omit<React.HTMLAttributes<HTMLEleme
120
116
  /** Click handler (renders as button) */
121
117
  onClick?: () => void;
122
118
  }
123
- export interface SidebarFooterProps {
119
+ export interface SidebarFooterProps extends React.HTMLAttributes<HTMLDivElement> {
124
120
  children: React.ReactNode;
125
- className?: string;
126
121
  }
127
- export interface SidebarTriggerProps {
122
+ export interface SidebarTriggerProps extends React.ButtonHTMLAttributes<HTMLButtonElement> {
128
123
  /** Custom trigger element (uses render prop pattern) */
129
124
  children?: React.ReactNode;
130
125
  /** Accessible label */
131
126
  'aria-label'?: string;
132
- className?: string;
133
- }
134
- export interface SidebarOverlayProps {
135
- className?: string;
136
127
  }
137
- export interface SidebarCollapseToggleProps {
128
+ export type SidebarOverlayProps = React.HTMLAttributes<HTMLDivElement>;
129
+ export interface SidebarCollapseToggleProps extends React.ButtonHTMLAttributes<HTMLButtonElement> {
138
130
  /** Accessible label */
139
131
  'aria-label'?: string;
140
- className?: string;
141
- }
142
- export interface SidebarRailProps {
143
- className?: string;
144
132
  }
145
- export interface SidebarMenuSkeletonProps {
133
+ export type SidebarRailProps = React.ButtonHTMLAttributes<HTMLButtonElement>;
134
+ export interface SidebarMenuSkeletonProps extends React.HTMLAttributes<HTMLDivElement> {
146
135
  /** Number of skeleton items to render */
147
136
  count?: number;
148
137
  /** Show icons in skeleton items */
149
138
  showIcon?: boolean;
150
- className?: string;
151
139
  }
152
140
  interface SidebarContextValue {
153
141
  collapsed: boolean;
@@ -192,21 +180,21 @@ declare function useSidebarContext(): SidebarContextValue;
192
180
  */
193
181
  declare function SidebarProvider({ children, collapsed: controlledCollapsed, defaultCollapsed, onCollapsedChange, open: controlledOpen, defaultOpen, onOpenChange, width, collapsedWidth, position, collapsible, enableKeyboardShortcut, }: SidebarProviderProps): import("react/jsx-runtime").JSX.Element;
194
182
  declare function SidebarRoot({ children, collapsed: controlledCollapsed, defaultCollapsed, onCollapsedChange, open: controlledOpen, defaultOpen, onOpenChange, width, collapsedWidth, position, collapsible, className, style: styleProp, 'aria-label': ariaLabel, ...htmlProps }: SidebarProps): import("react/jsx-runtime").JSX.Element;
195
- declare function SidebarHeader({ children, collapsedContent, className }: SidebarHeaderProps): import("react/jsx-runtime").JSX.Element;
196
- declare function SidebarNav({ children, 'aria-label': ariaLabel, className }: SidebarNavProps): import("react/jsx-runtime").JSX.Element;
197
- declare function SidebarSection({ children, label, action, collapsible: isCollapsibleProp, defaultOpen, className }: SidebarSectionProps): import("react/jsx-runtime").JSX.Element;
198
- declare function SidebarSectionAction({ children, onClick, 'aria-label': ariaLabel, className, }: SidebarSectionActionProps): import("react/jsx-runtime").JSX.Element;
183
+ declare function SidebarHeader({ children, collapsedContent, className, ...htmlProps }: SidebarHeaderProps): import("react/jsx-runtime").JSX.Element;
184
+ declare function SidebarNav({ children, 'aria-label': ariaLabel, className, ...htmlProps }: SidebarNavProps): import("react/jsx-runtime").JSX.Element;
185
+ declare function SidebarSection({ children, label, action, collapsible: isCollapsibleProp, defaultOpen, className, ...htmlProps }: SidebarSectionProps): import("react/jsx-runtime").JSX.Element;
186
+ declare function SidebarSectionAction({ children, onClick, 'aria-label': ariaLabel, className, ...htmlProps }: SidebarSectionActionProps): import("react/jsx-runtime").JSX.Element;
199
187
  declare function SidebarItem({ children, icon, active, disabled, badge, href, onClick, hasSubmenu, expanded: controlledExpanded, defaultExpanded, onExpandedChange, asChild, className, ...rest }: SidebarItemProps): import("react/jsx-runtime").JSX.Element;
200
188
  declare function SidebarSubItem({ children, active, disabled, href, onClick, className, ...rest }: SidebarSubItemProps): import("react/jsx-runtime").JSX.Element | null;
201
189
  declare function SidebarSubmenu({ children }: {
202
190
  children: React.ReactNode;
203
191
  }): import("react/jsx-runtime").JSX.Element;
204
- declare function SidebarFooter({ children, className }: SidebarFooterProps): import("react/jsx-runtime").JSX.Element;
205
- declare function SidebarTrigger({ children, 'aria-label': ariaLabel, className }: SidebarTriggerProps): import("react/jsx-runtime").JSX.Element | null;
206
- declare function SidebarOverlay({ className }: SidebarOverlayProps): import("react/jsx-runtime").JSX.Element | null;
207
- declare function SidebarCollapseToggle({ 'aria-label': ariaLabel, className }: SidebarCollapseToggleProps): import("react/jsx-runtime").JSX.Element | null;
208
- declare function SidebarRail({ className }: SidebarRailProps): import("react/jsx-runtime").JSX.Element | null;
209
- declare function SidebarMenuSkeleton({ count, showIcon, className, }: SidebarMenuSkeletonProps): import("react/jsx-runtime").JSX.Element;
192
+ declare function SidebarFooter({ children, className, ...htmlProps }: SidebarFooterProps): import("react/jsx-runtime").JSX.Element;
193
+ declare function SidebarTrigger({ children, 'aria-label': ariaLabel, className, onClick, ...htmlProps }: SidebarTriggerProps): import("react/jsx-runtime").JSX.Element | null;
194
+ declare function SidebarOverlay({ className, onClick, ...htmlProps }: SidebarOverlayProps): import("react/jsx-runtime").JSX.Element | null;
195
+ declare function SidebarCollapseToggle({ 'aria-label': ariaLabel, className, onClick, ...htmlProps }: SidebarCollapseToggleProps): import("react/jsx-runtime").JSX.Element | null;
196
+ declare function SidebarRail({ className, onClick, title, 'aria-label': ariaLabel, ...htmlProps }: SidebarRailProps): import("react/jsx-runtime").JSX.Element | null;
197
+ declare function SidebarMenuSkeleton({ count, showIcon, className, ...htmlProps }: SidebarMenuSkeletonProps): import("react/jsx-runtime").JSX.Element;
210
198
  export declare const Sidebar: typeof SidebarRoot & {
211
199
  Header: typeof SidebarHeader;
212
200
  Nav: typeof SidebarNav;
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/Sidebar/index.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/Sidebar/index.tsx"],"names":[],"mappings":"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"}
@@ -7,6 +7,13 @@ import { Collapsible } from "../Collapsible/index.js";
7
7
  import { ScrollArea } from "../ScrollArea/index.js";
8
8
  import { useFocusTrap } from "../../utils/a11y.js";
9
9
  import { useKeyboardShortcut } from "../../utils/keyboard-shortcuts.js";
10
+ function composeEventHandlers(userHandler, internalHandler) {
11
+ return (event) => {
12
+ userHandler == null ? void 0 : userHandler(event);
13
+ if (event.defaultPrevented) return;
14
+ internalHandler(event);
15
+ };
16
+ }
10
17
  function MenuIcon() {
11
18
  return /* @__PURE__ */ jsx(
12
19
  "svg",
@@ -351,16 +358,26 @@ function SidebarRoot({
351
358
  );
352
359
  return /* @__PURE__ */ jsx(SidebarContext.Provider, { value: contextValue, children: content });
353
360
  }
354
- function SidebarHeader({ children, collapsedContent, className }) {
361
+ function SidebarHeader({
362
+ children,
363
+ collapsedContent,
364
+ className,
365
+ ...htmlProps
366
+ }) {
355
367
  const { collapsed, isMobile } = useSidebarContext();
356
368
  const isCollapsed = collapsed && !isMobile;
357
369
  const classes = [styles.header, className].filter(Boolean).join(" ");
358
370
  const content = isCollapsed && collapsedContent ? collapsedContent : children;
359
- return /* @__PURE__ */ jsx("div", { className: classes, children: content });
371
+ return /* @__PURE__ */ jsx("div", { ...htmlProps, className: classes, children: content });
360
372
  }
361
- function SidebarNav({ children, "aria-label": ariaLabel = "Main navigation", className }) {
373
+ function SidebarNav({
374
+ children,
375
+ "aria-label": ariaLabel = "Main navigation",
376
+ className,
377
+ ...htmlProps
378
+ }) {
362
379
  const classes = [styles.nav, className].filter(Boolean).join(" ");
363
- return /* @__PURE__ */ jsx("nav", { className: classes, "aria-label": ariaLabel, children: /* @__PURE__ */ jsx(ScrollArea, { orientation: "vertical", showFades: true, className: styles.navScrollArea, children }) });
380
+ return /* @__PURE__ */ jsx("nav", { ...htmlProps, className: classes, "aria-label": ariaLabel, children: /* @__PURE__ */ jsx(ScrollArea, { orientation: "vertical", showFades: true, className: styles.navScrollArea, children }) });
364
381
  }
365
382
  function SidebarSection({
366
383
  children,
@@ -368,7 +385,8 @@ function SidebarSection({
368
385
  action,
369
386
  collapsible: isCollapsibleProp = false,
370
387
  defaultOpen = true,
371
- className
388
+ className,
389
+ ...htmlProps
372
390
  }) {
373
391
  const { collapsed, isMobile } = useSidebarContext();
374
392
  const classes = [
@@ -379,7 +397,7 @@ function SidebarSection({
379
397
  const showAction = action && (!collapsed || isMobile);
380
398
  const isCollapsible = isCollapsibleProp && showLabel;
381
399
  if (!isCollapsible) {
382
- return /* @__PURE__ */ jsxs("div", { className: classes, role: "group", "aria-label": label, children: [
400
+ return /* @__PURE__ */ jsxs("div", { ...htmlProps, className: classes, role: "group", "aria-label": label, children: [
383
401
  (showLabel || showAction) && /* @__PURE__ */ jsxs("div", { className: styles.sectionHeader, children: [
384
402
  showLabel && /* @__PURE__ */ jsx("div", { className: styles.sectionLabel, children: label }),
385
403
  showAction && /* @__PURE__ */ jsx("div", { className: styles.sectionActionWrapper, children: action })
@@ -387,7 +405,7 @@ function SidebarSection({
387
405
  /* @__PURE__ */ jsx("ul", { className: styles.sectionList, children })
388
406
  ] });
389
407
  }
390
- return /* @__PURE__ */ jsx("div", { className: classes, role: "group", "aria-label": label, children: /* @__PURE__ */ jsxs(Collapsible, { defaultOpen, className: styles.sectionCollapsible, children: [
408
+ return /* @__PURE__ */ jsx("div", { ...htmlProps, className: classes, role: "group", "aria-label": label, children: /* @__PURE__ */ jsxs(Collapsible, { defaultOpen, className: styles.sectionCollapsible, children: [
391
409
  /* @__PURE__ */ jsxs("div", { className: styles.sectionHeader, children: [
392
410
  /* @__PURE__ */ jsx(
393
411
  Collapsible.Trigger,
@@ -406,15 +424,17 @@ function SidebarSectionAction({
406
424
  children,
407
425
  onClick,
408
426
  "aria-label": ariaLabel,
409
- className
427
+ className,
428
+ ...htmlProps
410
429
  }) {
411
430
  const classes = [styles.sectionAction, className].filter(Boolean).join(" ");
412
431
  return /* @__PURE__ */ jsx(
413
432
  "button",
414
433
  {
415
434
  type: "button",
435
+ ...htmlProps,
416
436
  className: classes,
417
- onClick,
437
+ onClick: (event) => onClick == null ? void 0 : onClick(event),
418
438
  "aria-label": ariaLabel,
419
439
  children
420
440
  }
@@ -487,11 +507,16 @@ function SidebarItem({
487
507
  };
488
508
  let itemElement;
489
509
  if (asChild && React.isValidElement(children)) {
510
+ const childProps = children.props;
490
511
  itemElement = React.cloneElement(children, {
491
512
  ...itemProps,
492
513
  ...rest,
514
+ onClick: composeEventHandlers(
515
+ childProps.onClick,
516
+ (event) => handleClick(event)
517
+ ),
493
518
  // Merge classNames
494
- className: [classes, children.props.className].filter(Boolean).join(" "),
519
+ className: [classes, childProps.className].filter(Boolean).join(" "),
495
520
  children: itemContent
496
521
  });
497
522
  } else if (href) {
@@ -545,11 +570,17 @@ function SidebarSubItem({
545
570
  function SidebarSubmenu({ children }) {
546
571
  return /* @__PURE__ */ jsx("li", { className: styles.submenuWrapper, children: /* @__PURE__ */ jsx("ul", { className: styles.submenu, children }) });
547
572
  }
548
- function SidebarFooter({ children, className }) {
573
+ function SidebarFooter({ children, className, ...htmlProps }) {
549
574
  const classes = [styles.footer, className].filter(Boolean).join(" ");
550
- return /* @__PURE__ */ jsx("div", { className: classes, children });
575
+ return /* @__PURE__ */ jsx("div", { ...htmlProps, className: classes, children });
551
576
  }
552
- function SidebarTrigger({ children, "aria-label": ariaLabel = "Toggle navigation", className }) {
577
+ function SidebarTrigger({
578
+ children,
579
+ "aria-label": ariaLabel = "Toggle navigation",
580
+ className,
581
+ onClick,
582
+ ...htmlProps
583
+ }) {
553
584
  const { open, setOpen, isMobile, sidebarId } = useSidebarContext();
554
585
  if (!isMobile) {
555
586
  return null;
@@ -558,9 +589,10 @@ function SidebarTrigger({ children, "aria-label": ariaLabel = "Toggle navigation
558
589
  return /* @__PURE__ */ jsx(
559
590
  "button",
560
591
  {
592
+ ...htmlProps,
561
593
  type: "button",
562
594
  className: classes,
563
- onClick: () => setOpen(!open),
595
+ onClick: composeEventHandlers(onClick, () => setOpen(!open)),
564
596
  "aria-label": ariaLabel,
565
597
  "aria-expanded": open,
566
598
  "aria-controls": sidebarId,
@@ -568,7 +600,7 @@ function SidebarTrigger({ children, "aria-label": ariaLabel = "Toggle navigation
568
600
  }
569
601
  );
570
602
  }
571
- function SidebarOverlay({ className }) {
603
+ function SidebarOverlay({ className, onClick, ...htmlProps }) {
572
604
  const { open, setOpen, isMobile } = useSidebarContext();
573
605
  if (!isMobile || !open) {
574
606
  return null;
@@ -577,14 +609,20 @@ function SidebarOverlay({ className }) {
577
609
  return /* @__PURE__ */ jsx(
578
610
  "div",
579
611
  {
612
+ ...htmlProps,
580
613
  className: classes,
581
- onClick: () => setOpen(false),
614
+ onClick: composeEventHandlers(onClick, () => setOpen(false)),
582
615
  "aria-hidden": "true",
583
616
  "data-state": open ? "open" : "closed"
584
617
  }
585
618
  );
586
619
  }
587
- function SidebarCollapseToggle({ "aria-label": ariaLabel, className }) {
620
+ function SidebarCollapseToggle({
621
+ "aria-label": ariaLabel,
622
+ className,
623
+ onClick,
624
+ ...htmlProps
625
+ }) {
588
626
  const { collapsed, setCollapsed, isMobile, collapsible, hasIcons } = useSidebarContext();
589
627
  if (isMobile || collapsible === "none") {
590
628
  return null;
@@ -599,15 +637,22 @@ function SidebarCollapseToggle({ "aria-label": ariaLabel, className }) {
599
637
  return /* @__PURE__ */ jsx(
600
638
  "button",
601
639
  {
640
+ ...htmlProps,
602
641
  type: "button",
603
642
  className: classes,
604
- onClick: () => setCollapsed(!collapsed),
643
+ onClick: composeEventHandlers(onClick, () => setCollapsed(!collapsed)),
605
644
  "aria-label": label,
606
645
  children: /* @__PURE__ */ jsx(CollapsePanelIcon, {})
607
646
  }
608
647
  );
609
648
  }
610
- function SidebarRail({ className }) {
649
+ function SidebarRail({
650
+ className,
651
+ onClick,
652
+ title,
653
+ "aria-label": ariaLabel,
654
+ ...htmlProps
655
+ }) {
611
656
  const { collapsed, setCollapsed, isMobile, collapsible } = useSidebarContext();
612
657
  if (isMobile || collapsible === "none") {
613
658
  return null;
@@ -620,24 +665,26 @@ function SidebarRail({ className }) {
620
665
  return /* @__PURE__ */ jsx(
621
666
  "button",
622
667
  {
668
+ ...htmlProps,
623
669
  type: "button",
624
670
  className: classes,
625
- onClick: () => setCollapsed(!collapsed),
626
- "aria-label": collapsed ? "Expand sidebar" : "Collapse sidebar",
627
- title: collapsed ? "Expand sidebar" : "Collapse sidebar"
671
+ onClick: composeEventHandlers(onClick, () => setCollapsed(!collapsed)),
672
+ "aria-label": ariaLabel ?? (collapsed ? "Expand sidebar" : "Collapse sidebar"),
673
+ title: title ?? (collapsed ? "Expand sidebar" : "Collapse sidebar")
628
674
  }
629
675
  );
630
676
  }
631
677
  function SidebarMenuSkeleton({
632
678
  count = 5,
633
679
  showIcon = true,
634
- className
680
+ className,
681
+ ...htmlProps
635
682
  }) {
636
683
  const { collapsed, isMobile } = useSidebarContext();
637
684
  const isCollapsed = collapsed && !isMobile;
638
685
  const classes = [styles.menuSkeleton, className].filter(Boolean).join(" ");
639
686
  const labelWidths = ["64%", "72%", "68%", "79%", "74%", "66%", "83%", "70%"];
640
- return /* @__PURE__ */ jsx("div", { className: classes, "aria-hidden": "true", children: Array.from({ length: count }).map((_, i) => /* @__PURE__ */ jsxs("div", { className: styles.skeletonItem, children: [
687
+ return /* @__PURE__ */ jsx("div", { ...htmlProps, className: classes, "aria-hidden": "true", children: Array.from({ length: count }).map((_, i) => /* @__PURE__ */ jsxs("div", { className: styles.skeletonItem, children: [
641
688
  showIcon && /* @__PURE__ */ jsx(Skeleton, { variant: "avatar", size: "sm" }),
642
689
  !isCollapsed && /* @__PURE__ */ jsx(
643
690
  Skeleton,