@kushagradhawan/kookie-ui 0.1.37 → 0.1.39

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 (172) hide show
  1. package/components.css +130 -74
  2. package/dist/cjs/components/_internal/base-button.props.d.ts +1 -1
  3. package/dist/cjs/components/_internal/base-button.props.js +1 -1
  4. package/dist/cjs/components/_internal/base-button.props.js.map +2 -2
  5. package/dist/cjs/components/_internal/base-checkbox.props.d.ts +1 -1
  6. package/dist/cjs/components/_internal/base-checkbox.props.js +1 -1
  7. package/dist/cjs/components/_internal/base-checkbox.props.js.map +2 -2
  8. package/dist/cjs/components/avatar.props.d.ts +1 -1
  9. package/dist/cjs/components/avatar.props.js +1 -1
  10. package/dist/cjs/components/avatar.props.js.map +2 -2
  11. package/dist/cjs/components/button.d.ts +40 -2
  12. package/dist/cjs/components/button.d.ts.map +1 -1
  13. package/dist/cjs/components/button.js +1 -1
  14. package/dist/cjs/components/button.js.map +3 -3
  15. package/dist/cjs/components/chatbar.d.ts.map +1 -1
  16. package/dist/cjs/components/chatbar.js +1 -1
  17. package/dist/cjs/components/chatbar.js.map +2 -2
  18. package/dist/cjs/components/checkbox-cards.props.d.ts +2 -2
  19. package/dist/cjs/components/checkbox-cards.props.js +1 -1
  20. package/dist/cjs/components/checkbox-cards.props.js.map +2 -2
  21. package/dist/cjs/components/checkbox-group.d.ts.map +1 -1
  22. package/dist/cjs/components/checkbox-group.js +1 -1
  23. package/dist/cjs/components/checkbox-group.js.map +3 -3
  24. package/dist/cjs/components/checkbox-group.props.d.ts +1 -1
  25. package/dist/cjs/components/dialog.d.ts.map +1 -1
  26. package/dist/cjs/components/dialog.js +1 -1
  27. package/dist/cjs/components/dialog.js.map +3 -3
  28. package/dist/cjs/components/flex.props.d.ts +3 -3
  29. package/dist/cjs/components/grid.props.d.ts +3 -3
  30. package/dist/cjs/components/radio-cards.props.d.ts +2 -2
  31. package/dist/cjs/components/radio-cards.props.js +1 -1
  32. package/dist/cjs/components/radio-cards.props.js.map +2 -2
  33. package/dist/cjs/components/select.d.ts.map +1 -1
  34. package/dist/cjs/components/select.js +1 -1
  35. package/dist/cjs/components/select.js.map +3 -3
  36. package/dist/cjs/components/shell.d.ts.map +1 -1
  37. package/dist/cjs/components/shell.js +1 -1
  38. package/dist/cjs/components/shell.js.map +3 -3
  39. package/dist/cjs/components/sidebar.d.ts +7 -1
  40. package/dist/cjs/components/sidebar.d.ts.map +1 -1
  41. package/dist/cjs/components/sidebar.js +1 -1
  42. package/dist/cjs/components/sidebar.js.map +3 -3
  43. package/dist/cjs/components/sidebar.props.d.ts +6 -0
  44. package/dist/cjs/components/sidebar.props.d.ts.map +1 -1
  45. package/dist/cjs/components/sidebar.props.js +1 -1
  46. package/dist/cjs/components/sidebar.props.js.map +3 -3
  47. package/dist/cjs/components/table.props.d.ts +7 -7
  48. package/dist/cjs/components/text-field.props.d.ts +4 -4
  49. package/dist/cjs/helpers/extract-margin-props.d.ts +7 -7
  50. package/dist/cjs/hooks/index.d.ts +1 -0
  51. package/dist/cjs/hooks/index.d.ts.map +1 -1
  52. package/dist/cjs/hooks/index.js +1 -1
  53. package/dist/cjs/hooks/index.js.map +3 -3
  54. package/dist/cjs/hooks/use-body-pointer-events-cleanup.d.ts +9 -0
  55. package/dist/cjs/hooks/use-body-pointer-events-cleanup.d.ts.map +1 -0
  56. package/dist/cjs/hooks/use-body-pointer-events-cleanup.js +2 -0
  57. package/dist/cjs/hooks/use-body-pointer-events-cleanup.js.map +7 -0
  58. package/dist/cjs/props/gap.props.d.ts +3 -3
  59. package/dist/cjs/props/gap.props.js +1 -1
  60. package/dist/cjs/props/gap.props.js.map +2 -2
  61. package/dist/cjs/props/layout.props.d.ts +7 -7
  62. package/dist/cjs/props/margin.props.d.ts +7 -7
  63. package/dist/cjs/props/margin.props.js +1 -1
  64. package/dist/cjs/props/margin.props.js.map +2 -2
  65. package/dist/cjs/props/padding.props.d.ts +7 -7
  66. package/dist/cjs/props/padding.props.js +1 -1
  67. package/dist/cjs/props/padding.props.js.map +2 -2
  68. package/dist/esm/components/_internal/base-button.props.d.ts +1 -1
  69. package/dist/esm/components/_internal/base-button.props.js +1 -1
  70. package/dist/esm/components/_internal/base-button.props.js.map +2 -2
  71. package/dist/esm/components/_internal/base-checkbox.props.d.ts +1 -1
  72. package/dist/esm/components/_internal/base-checkbox.props.js +1 -1
  73. package/dist/esm/components/_internal/base-checkbox.props.js.map +2 -2
  74. package/dist/esm/components/avatar.props.d.ts +1 -1
  75. package/dist/esm/components/avatar.props.js +1 -1
  76. package/dist/esm/components/avatar.props.js.map +2 -2
  77. package/dist/esm/components/button.d.ts +40 -2
  78. package/dist/esm/components/button.d.ts.map +1 -1
  79. package/dist/esm/components/button.js +1 -1
  80. package/dist/esm/components/button.js.map +3 -3
  81. package/dist/esm/components/chatbar.d.ts.map +1 -1
  82. package/dist/esm/components/chatbar.js +1 -1
  83. package/dist/esm/components/chatbar.js.map +2 -2
  84. package/dist/esm/components/checkbox-cards.props.d.ts +2 -2
  85. package/dist/esm/components/checkbox-cards.props.js +1 -1
  86. package/dist/esm/components/checkbox-cards.props.js.map +2 -2
  87. package/dist/esm/components/checkbox-group.d.ts.map +1 -1
  88. package/dist/esm/components/checkbox-group.js +1 -1
  89. package/dist/esm/components/checkbox-group.js.map +3 -3
  90. package/dist/esm/components/checkbox-group.props.d.ts +1 -1
  91. package/dist/esm/components/dialog.d.ts.map +1 -1
  92. package/dist/esm/components/dialog.js +1 -1
  93. package/dist/esm/components/dialog.js.map +3 -3
  94. package/dist/esm/components/flex.props.d.ts +3 -3
  95. package/dist/esm/components/grid.props.d.ts +3 -3
  96. package/dist/esm/components/radio-cards.props.d.ts +2 -2
  97. package/dist/esm/components/radio-cards.props.js +1 -1
  98. package/dist/esm/components/radio-cards.props.js.map +2 -2
  99. package/dist/esm/components/select.d.ts.map +1 -1
  100. package/dist/esm/components/select.js +1 -1
  101. package/dist/esm/components/select.js.map +3 -3
  102. package/dist/esm/components/shell.d.ts.map +1 -1
  103. package/dist/esm/components/shell.js +1 -1
  104. package/dist/esm/components/shell.js.map +3 -3
  105. package/dist/esm/components/sidebar.d.ts +7 -1
  106. package/dist/esm/components/sidebar.d.ts.map +1 -1
  107. package/dist/esm/components/sidebar.js +1 -1
  108. package/dist/esm/components/sidebar.js.map +3 -3
  109. package/dist/esm/components/sidebar.props.d.ts +6 -0
  110. package/dist/esm/components/sidebar.props.d.ts.map +1 -1
  111. package/dist/esm/components/sidebar.props.js +1 -1
  112. package/dist/esm/components/sidebar.props.js.map +3 -3
  113. package/dist/esm/components/table.props.d.ts +7 -7
  114. package/dist/esm/components/text-field.props.d.ts +4 -4
  115. package/dist/esm/helpers/extract-margin-props.d.ts +7 -7
  116. package/dist/esm/hooks/index.d.ts +1 -0
  117. package/dist/esm/hooks/index.d.ts.map +1 -1
  118. package/dist/esm/hooks/index.js +1 -1
  119. package/dist/esm/hooks/index.js.map +3 -3
  120. package/dist/esm/hooks/use-body-pointer-events-cleanup.d.ts +9 -0
  121. package/dist/esm/hooks/use-body-pointer-events-cleanup.d.ts.map +1 -0
  122. package/dist/esm/hooks/use-body-pointer-events-cleanup.js +2 -0
  123. package/dist/esm/hooks/use-body-pointer-events-cleanup.js.map +7 -0
  124. package/dist/esm/props/gap.props.d.ts +3 -3
  125. package/dist/esm/props/gap.props.js +1 -1
  126. package/dist/esm/props/gap.props.js.map +2 -2
  127. package/dist/esm/props/layout.props.d.ts +7 -7
  128. package/dist/esm/props/margin.props.d.ts +7 -7
  129. package/dist/esm/props/margin.props.js +1 -1
  130. package/dist/esm/props/margin.props.js.map +2 -2
  131. package/dist/esm/props/padding.props.d.ts +7 -7
  132. package/dist/esm/props/padding.props.js +1 -1
  133. package/dist/esm/props/padding.props.js.map +2 -2
  134. package/layout/tokens.css +3 -0
  135. package/layout/utilities.css +1806 -42
  136. package/layout.css +1809 -42
  137. package/package.json +1 -1
  138. package/src/components/_internal/base-button.css +179 -73
  139. package/src/components/_internal/base-button.props.ts +1 -1
  140. package/src/components/_internal/base-checkbox.props.ts +1 -1
  141. package/src/components/avatar.props.tsx +1 -1
  142. package/src/components/button.css +13 -21
  143. package/src/components/button.tsx +79 -2
  144. package/src/components/chatbar.tsx +5 -2
  145. package/src/components/checkbox-cards.props.tsx +1 -1
  146. package/src/components/checkbox-group.tsx +14 -6
  147. package/src/components/dialog.tsx +4 -0
  148. package/src/components/radio-cards.props.tsx +1 -1
  149. package/src/components/select.css +9 -0
  150. package/src/components/select.tsx +11 -1
  151. package/src/components/shell.tsx +34 -3
  152. package/src/components/sidebar.css +15 -3
  153. package/src/components/sidebar.props.tsx +3 -0
  154. package/src/components/sidebar.tsx +27 -0
  155. package/src/hooks/index.ts +2 -1
  156. package/src/hooks/use-body-pointer-events-cleanup.ts +81 -0
  157. package/src/props/gap.props.ts +1 -1
  158. package/src/props/margin.props.ts +1 -1
  159. package/src/props/padding.props.ts +1 -1
  160. package/src/styles/tokens/blur.css +3 -0
  161. package/src/styles/tokens/constants.css +38 -35
  162. package/src/styles/tokens/radius.css +3 -0
  163. package/src/styles/tokens/shadow.css +64 -89
  164. package/src/styles/tokens/space.css +3 -0
  165. package/src/styles/tokens/transition.css +25 -12
  166. package/src/styles/utilities/gap.css +27 -0
  167. package/src/styles/utilities/margin.css +205 -7
  168. package/src/styles/utilities/padding.css +69 -0
  169. package/styles.css +1973 -144
  170. package/tokens/base.css +34 -25
  171. package/tokens.css +37 -28
  172. package/utilities.css +1806 -42
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../src/components/shell.tsx"],
4
- "sourcesContent": ["/**\n * Shell component\n *\n * High-level application layout primitive with optional global header/footer and\n * one or two sidebars. Each sidebar supports two composition patterns:\n *\n * 1) Split pattern (preferred for interactive rails):\n * <Shell.Sidebar>\n * <Shell.Sidebar.Rail />\n * <Shell.Sidebar.Panel />\n * </Shell.Sidebar>\n *\n * 2) Single-markup morphing (compact):\n * <Shell.Sidebar> ...single content that morphs between rail/panel/collapsed </Shell.Sidebar>\n *\n * The component handles:\n * - RTL/LTR ordering for start/end sidebars\n * - Sticky panel intent in split mode (panel stays requested, visibility depends on rail open state)\n * - Controlled/uncontrolled state for both split (rail value) and single-markup (view)\n * - ARIA relationships and inert for hidden regions\n * - CSS custom properties for sizing with sensible defaults\n *\n * Layout guidance:\n * - Use flex/grid and spacing tokens; avoid margins in layout containers.\n * - Width transitions for rail/panel are CSS-driven; content scroll is confined to Content only.\n */\n'use client';\n\nimport * as React from 'react';\nimport classNames from 'classnames';\n\nimport { IconButton } from './icon-button.js';\nimport { ChevronDownIcon } from './icons.js';\nimport { inert } from '../helpers/inert.js';\nimport * as Sheet from './sheet.js';\nimport { VisuallyHidden } from './visually-hidden.js';\n\n/** Logical document direction. Derived from document root unless `rtl` is passed. */\ntype ShellDirection = 'ltr' | 'rtl';\n/** Logical side, independent of physical left/right and aware of RTL. */\ntype ShellSide = 'start' | 'end';\n/** Section slot identifiers inside a sidebar. */\ntype SidebarSection = 'rail' | 'panel';\n\n/** Split-mode rail state. */\ntype RailValue = 'open' | 'collapsed';\n/** Single-markup view for morphing sidebars. */\ntype SingleView = 'panel' | 'rail' | 'collapsed';\n\n/**\n * Shared shell state across all subcomponents.\n *\n * We centralize both split-mode and single-markup state to allow triggers,\n * meters, and other UI to observe/modify layout consistently.\n */\ntype ShellContextValue = {\n dir: ShellDirection;\n headerHeight: string;\n zHeader?: number;\n // Split pattern state (rail + panel)\n railBySide: Record<ShellSide, RailValue>;\n setRailBySide: (side: ShellSide, value: RailValue) => void;\n toggleRail: (side: ShellSide) => void;\n panelRequestedBySide: Record<ShellSide, boolean>;\n setPanelRequestedBySide: (side: ShellSide, requested: boolean) => void;\n // Pattern detection per side so triggers behave correctly\n patternBySide: Record<ShellSide, 'single' | 'split'>;\n setPatternForSide: (side: ShellSide, pattern: 'single' | 'split') => void;\n // Single-markup morph state (panel/rail/collapsed)\n singleViewBySide: Record<ShellSide, SingleView>;\n setSingleViewBySide: (side: ShellSide, view: SingleView) => void;\n cycleSingleView: (side: ShellSide) => void;\n // Active tool coordination state\n activeToolBySide: Record<ShellSide, string | null>;\n setActiveTool: (side: ShellSide, tool: string | null) => void;\n onItemSelected: (side: ShellSide, item: string) => void;\n // Context (panel-level) coordination state\n activeContextBySide: Record<ShellSide, string | null>;\n setActiveContext: (side: ShellSide, context: string | null) => void;\n getRegionId: (side: ShellSide) => string;\n getPanelId: (side: ShellSide) => string;\n getRailId: (side: ShellSide) => string;\n};\n\nconst ShellContext = React.createContext<ShellContextValue | null>(null);\n\n/** Access the shell context (internal wiring for subcomponents). */\nfunction useShell() {\n const ctx = React.useContext(ShellContext);\n if (!ctx) throw new Error('Shell components must be used within <Shell.Root>.');\n return ctx;\n}\n\n// Local context to communicate section (rail/panel) and side to presentational children\ntype SidebarSectionContextValue = {\n side: ShellSide;\n section: SidebarSection;\n};\nconst SidebarSectionContext = React.createContext<SidebarSectionContextValue | null>(null);\nfunction useSidebarSection() {\n return React.useContext(SidebarSectionContext);\n}\n\n// Rail context for event emission pattern\ntype RailContextValue = {\n onItemSelected: (item: string) => void;\n};\nconst RailContext = React.createContext<RailContextValue | null>(null);\n\n/** Hook to emit rail selection events. Use this in Rail children to emit item selection. */\nfunction useRailEvents() {\n const ctx = React.useContext(RailContext);\n if (!ctx) throw new Error('useRailEvents must be used within <Shell.Sidebar.Rail>');\n return ctx;\n}\n\n// Panel context for active tool consumption\ntype PanelContextValue = {\n activeTool: string | null;\n activeContext: string | null;\n};\nconst PanelContext = React.createContext<PanelContextValue | null>(null);\n\n/** Hook to access active tool state. Use this in Panel children to render based on active tool. */\nfunction usePanelState() {\n const ctx = React.useContext(PanelContext);\n if (!ctx) throw new Error('usePanelState must be used within <Shell.Sidebar.Panel>');\n return ctx;\n}\n\n// Utilities\n/**\n * Read the document `dir` attribute. Defaults to `ltr` on server.\n */\nfunction getDocumentDirection(): ShellDirection {\n if (typeof document === 'undefined') return 'ltr';\n const dir = document.documentElement.getAttribute('dir');\n return dir === 'rtl' ? 'rtl' : 'ltr';\n}\n\n// Root\n/**\n * Props for `Shell.Root`.\n *\n * - `minContentWidth`: CSS length to enforce a minimum inline-size for content\n * area. This prevents content from collapsing too far when sidebars are open.\n * - `rtl`: Force RTL/LTR independent of document; otherwise derived from root.\n * - `headerHeight`: Sticky header block-size.\n * - `zHeader`: z-index for sticky header stacking.\n */\ninterface ShellRootProps extends React.ComponentPropsWithoutRef<'div'> {\n minContentWidth?: string;\n rtl?: boolean;\n headerHeight?: string;\n zHeader?: number;\n cascadeSide?: ShellSide;\n activeTool?: string | null;\n onToolChange?: (id: string | null) => void;\n activeContext?: string | null;\n onContextChange?: (id: string | null) => void;\n}\n\nconst Root = React.forwardRef<HTMLDivElement, ShellRootProps>(\n (\n {\n minContentWidth = '640px',\n rtl,\n headerHeight = '64px',\n zHeader,\n cascadeSide = 'start',\n activeTool: activeToolProp,\n onToolChange,\n activeContext: activeContextProp,\n onContextChange,\n className,\n style,\n children,\n ...props\n },\n ref,\n ) => {\n // Determine logical direction once, overriding document if `rtl` provided\n const computedDir = React.useMemo<ShellDirection>(() => {\n if (typeof rtl === 'boolean') return rtl ? 'rtl' : 'ltr';\n return getDocumentDirection();\n }, [rtl]);\n\n // === Split-mode and single-markup state model ===\n // In split-mode, a sidebar has both Rail and Panel slots. We track:\n // - rail open/collapsed state per side\n // - a sticky panel intent per side (requested or not)\n // In single-markup, we track a single `view` morphing between panel/rail/collapsed\n const [railBySide, setRailBySideState] = React.useState<Record<ShellSide, RailValue>>({\n start: 'open',\n end: 'collapsed',\n });\n const setRailBySide = React.useCallback((side: ShellSide, value: RailValue) => {\n setRailBySideState((prev) => (prev[side] === value ? prev : { ...prev, [side]: value }));\n }, []);\n const toggleRail = React.useCallback((side: ShellSide) => {\n setRailBySideState((prev) => {\n const next = prev[side] === 'open' ? 'collapsed' : 'open';\n return { ...prev, [side]: next };\n });\n // Keep panelRequested sticky across rail collapse/expand\n }, []);\n const [panelRequestedBySide, setPanelRequestedBySideState] = React.useState<\n Record<ShellSide, boolean>\n >({ start: false, end: false });\n const setPanelRequestedBySide = React.useCallback((side: ShellSide, requested: boolean) => {\n setPanelRequestedBySideState((prev) =>\n prev[side] === requested ? prev : { ...prev, [side]: requested },\n );\n }, []);\n // Pattern per side and single-markup state\n // We detect pattern per side based on presence of slots (registered by Sidebar)\n const [patternBySide, setPatternBySide] = React.useState<Record<ShellSide, 'single' | 'split'>>(\n {\n start: 'single',\n end: 'single',\n },\n );\n const setPatternForSide = React.useCallback((side: ShellSide, pattern: 'single' | 'split') => {\n setPatternBySide((prev) => (prev[side] === pattern ? prev : { ...prev, [side]: pattern }));\n }, []);\n const [singleViewBySide, setSingleViewBySideState] = React.useState<\n Record<ShellSide, SingleView>\n >({\n start: 'panel',\n end: 'collapsed',\n });\n const setSingleViewBySide = React.useCallback((side: ShellSide, view: SingleView) => {\n setSingleViewBySideState((prev) => (prev[side] === view ? prev : { ...prev, [side]: view }));\n }, []);\n const cycleSingleView = React.useCallback(\n (side: ShellSide) => {\n const order: SingleView[] = ['panel', 'rail', 'collapsed'];\n const current = singleViewBySide[side];\n const idx = order.indexOf(current);\n const next = order[(idx + 1) % order.length];\n setSingleViewBySide(side, next);\n },\n [singleViewBySide, setSingleViewBySide],\n );\n\n // === Active tool coordination state ===\n // Track which tool/mode is active per side for coordinated rail/panel communication\n const [activeToolBySide, setActiveToolBySideState] = React.useState<\n Record<ShellSide, string | null>\n >({\n start: null,\n end: null,\n });\n const setActiveTool = React.useCallback(\n (side: ShellSide, tool: string | null) => {\n setActiveToolBySideState((prev) =>\n prev[side] === tool ? prev : { ...prev, [side]: tool },\n );\n // Auto-hide panel when no tool is active\n if (tool === null) {\n setPanelRequestedBySide(side, false);\n }\n },\n [setPanelRequestedBySide],\n );\n const onItemSelected = React.useCallback(\n (side: ShellSide, item: string) => {\n setActiveTool(side, item);\n // Auto-show panel when item is selected\n setPanelRequestedBySide(side, true);\n },\n [setActiveTool, setPanelRequestedBySide],\n );\n\n // === Active context coordination state ===\n const [activeContextBySide, setActiveContextBySideState] = React.useState<\n Record<ShellSide, string | null>\n >({ start: null, end: null });\n const setActiveContext = React.useCallback(\n (side: ShellSide, context: string | null) => {\n setActiveContextBySideState((prev) =>\n prev[side] === context ? prev : { ...prev, [side]: context },\n );\n if (side === cascadeSide) onContextChange?.(context);\n },\n [cascadeSide, onContextChange],\n );\n\n // === Controlled prop sync (cascade side) ===\n React.useEffect(() => {\n if (activeToolProp !== undefined && activeToolBySide[cascadeSide] !== activeToolProp) {\n setActiveToolBySideState((prev) => ({ ...prev, [cascadeSide]: activeToolProp }));\n }\n }, [activeToolProp, cascadeSide, activeToolBySide]);\n React.useEffect(() => {\n if (\n activeContextProp !== undefined &&\n activeContextBySide[cascadeSide] !== activeContextProp\n ) {\n setActiveContextBySideState((prev) => ({ ...prev, [cascadeSide]: activeContextProp }));\n }\n }, [activeContextProp, cascadeSide, activeContextBySide]);\n\n // === Stable ids per side ===\n // These IDs are used to wire aria-controls and aria-expanded for triggers,\n // and to scope region/panel/rail DOM nodes for measurement.\n const startRegionId = React.useId();\n const endRegionId = React.useId();\n const startPanelId = React.useId();\n const endPanelId = React.useId();\n const startRailId = React.useId();\n const endRailId = React.useId();\n const getRegionId = React.useCallback(\n (side: ShellSide) =>\n side === 'start' ? `kui-shell-region-${startRegionId}` : `kui-shell-region-${endRegionId}`,\n [startRegionId, endRegionId],\n );\n const getPanelId = React.useCallback(\n (side: ShellSide) =>\n side === 'start' ? `kui-shell-panel-${startPanelId}` : `kui-shell-panel-${endPanelId}`,\n [startPanelId, endPanelId],\n );\n const getRailId = React.useCallback(\n (side: ShellSide) =>\n side === 'start' ? `kui-shell-rail-${startRailId}` : `kui-shell-rail-${endRailId}`,\n [startRailId, endRailId],\n );\n\n const ctx = React.useMemo<ShellContextValue>(\n () => ({\n dir: computedDir,\n headerHeight,\n zHeader,\n railBySide,\n setRailBySide,\n toggleRail,\n panelRequestedBySide,\n setPanelRequestedBySide,\n patternBySide,\n setPatternForSide,\n singleViewBySide,\n setSingleViewBySide,\n cycleSingleView,\n activeToolBySide,\n setActiveTool,\n onItemSelected,\n activeContextBySide,\n setActiveContext,\n getRegionId,\n getPanelId,\n getRailId,\n }),\n [\n computedDir,\n headerHeight,\n zHeader,\n railBySide,\n setRailBySide,\n toggleRail,\n panelRequestedBySide,\n setPanelRequestedBySide,\n patternBySide,\n setPatternForSide,\n singleViewBySide,\n setSingleViewBySide,\n cycleSingleView,\n activeToolBySide,\n setActiveTool,\n onItemSelected,\n activeContextBySide,\n setActiveContext,\n getRegionId,\n getPanelId,\n getRailId,\n ],\n );\n\n // === Composition: order children based on direction ===\n const childArray = React.Children.toArray(children) as React.ReactElement[];\n const isType = (el: React.ReactElement, comp: any) =>\n React.isValidElement(el) && el.type === comp;\n const headerEls = childArray.filter((el) => isType(el, Header));\n const footerEls = childArray.filter((el) => isType(el, Footer));\n const contentEls = childArray.filter((el) => isType(el, Content));\n const sidebarEls = childArray.filter((el) => isType(el, Sidebar));\n\n // Partition sidebars by side\n const startSidebars = sidebarEls.filter((el) => (el.props as any).side === 'start');\n const endSidebars = sidebarEls.filter((el) => (el.props as any).side === 'end');\n\n const bodyChildren =\n computedDir === 'rtl'\n ? [...endSidebars, ...contentEls, ...startSidebars]\n : [...startSidebars, ...contentEls, ...endSidebars];\n\n return (\n <div\n {...props}\n ref={ref}\n className={classNames('rt-ShellRoot', className)}\n style={{\n ...style,\n // Internal CSS custom props for sizing\n ['--shell-min-content-width' as any]: minContentWidth,\n ['--shell-header-height' as any]: headerHeight,\n }}\n dir={computedDir}\n >\n <ShellContext.Provider value={ctx}>\n {headerEls}\n <div className=\"rt-ShellBody\">{bodyChildren}</div>\n {footerEls}\n </ShellContext.Provider>\n </div>\n );\n },\n);\nRoot.displayName = 'Shell.Root';\n\n// Global Header\n/** Props for `Shell.Header`. Sticky by default and respects `--shell-header-height`. */\ninterface ShellHeaderProps extends React.ComponentPropsWithoutRef<'header'> {}\nconst Header = React.forwardRef<HTMLElement, ShellHeaderProps>(\n ({ className, style, ...props }, ref) => {\n const { headerHeight, zHeader } = useShell();\n return (\n <header\n {...props}\n ref={ref}\n role=\"banner\"\n className={classNames('rt-ShellHeader', className)}\n style={{\n ['--shell-header-height' as any]: headerHeight,\n ['--shell-z-header' as any]: zHeader,\n ...style,\n }}\n />\n );\n },\n);\nHeader.displayName = 'Shell.Header';\n\n// Global Footer\n/** Props for `Shell.Footer`. Rendered after body and outside the content scroll. */\ninterface ShellFooterProps extends React.ComponentPropsWithoutRef<'footer'> {}\nconst Footer = React.forwardRef<HTMLElement, ShellFooterProps>(({ className, ...props }, ref) => (\n <footer\n {...props}\n ref={ref}\n role=\"contentinfo\"\n className={classNames('rt-ShellFooter', className)}\n />\n));\nFooter.displayName = 'Shell.Footer';\n\n// Content\n/** Props for `Shell.Content`. The only scrollable area of the Shell. */\ninterface ShellContentProps extends React.ComponentPropsWithoutRef<'main'> {}\nconst ContentBase = React.forwardRef<HTMLElement, ShellContentProps>(\n ({ className, ...props }, ref) => (\n <main {...props} ref={ref} className={classNames('rt-ShellContent', className)} />\n ),\n);\nContentBase.displayName = 'Shell.Content';\n\nconst Content = ContentBase;\n\n// Sidebar (stateful owner)\n/**\n * `Shell.Sidebar` controls one logical side. It supports two patterns:\n * - Split pattern by providing both `Sidebar.Rail` and `Sidebar.Panel` children\n * - Single-markup morphing when no slots are provided\n *\n * Controlled/uncontrolled:\n * - Split: `value`/`defaultValue` reflect rail `open|collapsed`\n * - Single: `view`/`defaultView` reflect `panel|rail|collapsed`\n */\ninterface ShellSidebarProps extends React.ComponentPropsWithoutRef<'div'> {\n side: ShellSide;\n // Overlay: render as a top sheet rather than inline. Responsiveness handled separately.\n overlay?: boolean | Partial<Record<'initial' | 'xs' | 'sm' | 'md' | 'lg' | 'xl', boolean>>;\n overlaySide?: 'start' | 'end' | 'top' | 'bottom';\n // Split: rail control\n value?: RailValue;\n defaultValue?: RailValue;\n onValueChange?: (value: RailValue) => void;\n // Single-markup view control\n view?: SingleView;\n defaultView?: SingleView;\n onViewChange?: (view: SingleView) => void;\n as?: 'nav' | 'aside' | 'div';\n 'aria-label'?: string;\n}\n\n// Rail\n/** Rail component that provides event emission context for stateless navigation. */\ninterface RailProps extends React.ComponentPropsWithoutRef<'div'> {}\nconst Rail = Object.assign(\n React.forwardRef<HTMLDivElement, RailProps>(({ children }, _ref) => {\n const sidebarSection = useSidebarSection();\n const shell = useShell();\n const side = sidebarSection?.side ?? 'start';\n\n const railContext = React.useMemo<RailContextValue>(\n () => ({\n onItemSelected: (item: string) => shell.onItemSelected(side, item),\n }),\n [shell, side],\n );\n\n return <RailContext.Provider value={railContext}>{children}</RailContext.Provider>;\n }),\n { displayName: 'Shell.Sidebar.Rail', __shellSlot: 'rail' as const },\n);\n\n// Panel\n/** Panel component that provides active tool context for stateless content rendering. */\ninterface PanelProps extends React.ComponentPropsWithoutRef<'div'> {}\nconst Panel = Object.assign(\n React.forwardRef<HTMLDivElement, PanelProps>(({ children }, _ref) => {\n const sidebarSection = useSidebarSection();\n const shell = useShell();\n const side = sidebarSection?.side ?? 'start';\n\n const panelContext = React.useMemo<PanelContextValue>(\n () => ({\n activeTool: shell.activeToolBySide[side],\n activeContext: shell.activeContextBySide[side],\n }),\n [shell.activeToolBySide, shell.activeContextBySide, side],\n );\n\n return <PanelContext.Provider value={panelContext}>{children}</PanelContext.Provider>;\n }),\n { displayName: 'Shell.Sidebar.Panel', __shellSlot: 'panel' as const },\n);\n\ntype ShellSidebarComponent = React.ForwardRefExoticComponent<\n ShellSidebarProps & React.RefAttributes<HTMLDivElement>\n> & {\n Rail: typeof Rail;\n Panel: typeof Panel;\n Trigger: typeof LocalTrigger;\n};\n\nconst SidebarInner = (\n {\n side,\n overlay,\n overlaySide,\n value,\n defaultValue,\n onValueChange,\n view,\n defaultView,\n onViewChange,\n as = 'nav',\n className,\n style,\n children,\n ...props\n }: ShellSidebarProps,\n ref: React.ForwardedRef<HTMLDivElement>,\n) => {\n const shell = useShell();\n const Comp = as as any;\n\n const regionId = shell.getRegionId(side);\n const panelId = shell.getPanelId(side);\n const railId = shell.getRailId(side);\n\n const railChildren = childrenArrayOf(children, 'rail');\n const panelChildren = childrenArrayOf(children, 'panel');\n const hasRail = railChildren.length > 0;\n const hasPanel = panelChildren.length > 0;\n const hasSlots = hasRail || hasPanel;\n\n // Pattern registration per side\n React.useEffect(() => {\n shell.setPatternForSide(side, hasSlots && hasRail && hasPanel ? 'split' : 'single');\n }, [shell, side, hasSlots, hasRail, hasPanel]);\n\n // Initialize defaults (run once)\n const didInitRef = React.useRef(false);\n React.useEffect(() => {\n if (didInitRef.current) return;\n didInitRef.current = true;\n if (hasSlots) {\n // split: rail value\n const initial = value ?? defaultValue ?? (overlay ? 'collapsed' : 'open');\n shell.setRailBySide(side, initial);\n if (overlay) shell.setPanelRequestedBySide(side, false);\n } else {\n // single: view\n const initialView = view ?? defaultView ?? (overlay ? 'collapsed' : 'panel');\n shell.setSingleViewBySide(side, initialView);\n }\n }, [hasSlots, value, defaultValue, view, defaultView, shell, side, overlay]);\n\n // Keep context in sync for controlled\n React.useEffect(() => {\n if (!hasSlots) return;\n if (value !== undefined && shell.railBySide[side] !== value) {\n shell.setRailBySide(side, value);\n }\n }, [value, hasSlots, shell, side]);\n React.useEffect(() => {\n if (hasSlots) return;\n if (view !== undefined && shell.singleViewBySide[side] !== view) {\n shell.setSingleViewBySide(side, view);\n }\n }, [view, hasSlots, shell, side]);\n\n const railValue = shell.railBySide[side];\n const panelRequested = shell.panelRequestedBySide[side];\n const singleView = shell.singleViewBySide[side];\n const activeTool = shell.activeToolBySide[side];\n\n // Emit changes for uncontrolled\n const prevRailRef = React.useRef<RailValue | null>(null);\n React.useEffect(() => {\n if (!hasSlots) return;\n if (value !== undefined) return;\n if (prevRailRef.current !== railValue) {\n prevRailRef.current = railValue;\n onValueChange?.(railValue);\n }\n }, [hasSlots, railValue, value, onValueChange]);\n const prevViewRef = React.useRef<SingleView | null>(null);\n React.useEffect(() => {\n if (hasSlots) return;\n if (view !== undefined) return;\n if (prevViewRef.current !== singleView) {\n prevViewRef.current = singleView;\n onViewChange?.(singleView);\n }\n }, [hasSlots, singleView, view, onViewChange]);\n\n // Derived visibility:\n // - Split (rail+panel): panel shows when rail is open, panel is requested, and a tool is active\n // - Panel-only (no rail): panel shows unconditionally (no tool gating)\n // - Single-markup: shows when view === 'panel' and a tool is active\n const railVisible = hasSlots ? hasRail && railValue === 'open' : singleView === 'rail';\n const panelVisible = hasSlots\n ? hasPanel && (hasRail ? railValue === 'open' && panelRequested && activeTool !== null : true)\n : singleView === 'panel';\n\n // Overlay behavior (non-inline): mount as a Sheet from the top (default)\n // Resolve overlay responsively: built-in defaults overruled by prop\n // Defaults: overlay on initial/xs/sm; inline on md+\n const defaultOverlay = { initial: true, xs: true, sm: true, md: false, lg: false, xl: false };\n const mergedOverlay = React.useMemo(() => {\n if (typeof overlay === 'boolean') {\n return { initial: overlay } as Partial<\n Record<'initial' | 'xs' | 'sm' | 'md' | 'lg' | 'xl', boolean>\n >;\n }\n return { ...defaultOverlay, ...(overlay || {}) } as Partial<\n Record<'initial' | 'xs' | 'sm' | 'md' | 'lg' | 'xl', boolean>\n >;\n }, [overlay, defaultOverlay]);\n\n const [currentBp, setCurrentBp] = React.useState<'initial' | 'xs' | 'sm' | 'md' | 'lg' | 'xl'>(\n 'initial',\n );\n\n React.useEffect(() => {\n if (typeof window === 'undefined') return;\n const queries: [key: 'xs' | 'sm' | 'md' | 'lg' | 'xl', query: string][] = [\n ['xs', '(min-width: 520px)'],\n ['sm', '(min-width: 768px)'],\n ['md', '(min-width: 1024px)'],\n ['lg', '(min-width: 1280px)'],\n ['xl', '(min-width: 1640px)'],\n ];\n const mqls = queries.map(([k, q]) => [k, window.matchMedia(q)] as const);\n const compute = () => {\n // Highest matched wins\n const matched = mqls.filter(([, m]) => m.matches).map(([k]) => k);\n const next = (matched[matched.length - 1] as typeof currentBp | undefined) ?? 'initial';\n setCurrentBp(next);\n };\n compute();\n mqls.forEach(([, m]) => m.addEventListener('change', compute));\n return () => {\n mqls.forEach(([, m]) => m.removeEventListener('change', compute));\n };\n }, []);\n\n const isOverlay = (() => {\n const val = mergedOverlay[currentBp];\n if (typeof val === 'boolean') return val;\n // Fallback cascade: if current not set, try smaller breakpoints, then initial\n const order: (typeof currentBp)[] = ['xl', 'lg', 'md', 'sm', 'xs', 'initial'];\n const idx = order.indexOf(currentBp);\n for (let i = idx + 1; i < order.length; i++) {\n const v = mergedOverlay[order[i]];\n if (typeof v === 'boolean') return v;\n }\n return mergedOverlay.initial ?? false;\n })();\n\n if (isOverlay) {\n const open = hasSlots ? railValue === 'open' || panelRequested : singleView !== 'collapsed';\n const onOpenChange = (next: boolean) => {\n if (hasSlots) {\n if (!next) {\n shell.setRailBySide(side, 'collapsed');\n shell.setPanelRequestedBySide(side, false);\n } else {\n shell.setRailBySide(side, 'open');\n }\n } else {\n if (!next) shell.setSingleViewBySide(side, 'collapsed');\n else shell.setSingleViewBySide(side, 'panel');\n }\n };\n\n const sheetSide = overlaySide ?? side;\n\n // Choose what to render in overlay\n // Split pattern: default to combined (rail + panel). Panel visibility follows panel intent and active tool.\n // Single-markup: render the provided children as-is.\n const overlayPanelVisible = hasSlots\n ? hasPanel && (hasRail ? panelRequested && activeTool !== null : true)\n : false;\n const overlayContent = hasSlots ? (\n <div style={{ display: 'flex', height: '100%', minBlockSize: 0 }}>\n {hasRail ? (\n <div\n id={railId}\n className=\"rt-ShellSidebarRail\"\n data-section=\"rail\"\n data-visible\n style={{ inlineSize: 'var(--shell-sidebar-rail-width, 64px)', overflow: 'hidden' }}\n >\n {railChildren}\n </div>\n ) : null}\n {hasPanel ? (\n <div\n id={panelId}\n className=\"rt-ShellSidebarPanel\"\n data-section=\"panel\"\n data-visible={overlayPanelVisible || undefined}\n aria-hidden={overlayPanelVisible ? undefined : true}\n {...(overlayPanelVisible ? {} : { inert })}\n style={{\n inlineSize: overlayPanelVisible ? 'var(--shell-sidebar-panel-width, 288px)' : '0px',\n overflow: 'hidden',\n }}\n >\n {panelChildren}\n </div>\n ) : null}\n </div>\n ) : (\n children\n );\n\n // Compute sheet width based on split/single pattern using CSS tokens\n const computedWidth =\n sheetSide === 'start' || sheetSide === 'end'\n ? hasSlots\n ? overlayPanelVisible\n ? 'var(--shell-sidebar-combined-width)'\n : 'var(--shell-sidebar-rail-width)'\n : singleView === 'rail'\n ? 'var(--shell-sidebar-rail-width)'\n : 'var(--shell-sidebar-panel-width)'\n : '100vw';\n\n return (\n <>\n <Sheet.Root open={open} onOpenChange={onOpenChange}>\n <Sheet.Content\n id={regionId}\n side={sheetSide}\n height={{ initial: '100vh' }}\n width={{ initial: computedWidth }}\n style={{ ['--dialog-content-padding' as any]: '0px' }}\n >\n <Sheet.Title>\n <VisuallyHidden>Sidebar</VisuallyHidden>\n </Sheet.Title>\n {overlayContent}\n </Sheet.Content>\n </Sheet.Root>\n </>\n );\n }\n\n return (\n <Comp\n {...props}\n ref={ref}\n id={regionId}\n className={classNames('rt-ShellSidebar', className)}\n data-side={side}\n data-rail={hasSlots ? railValue : undefined}\n data-panel={hasSlots ? (panelVisible ? 'visible' : 'hidden') : undefined}\n data-state={!hasSlots ? singleView : undefined}\n aria-label={props['aria-label']}\n style={{ ...style }}\n >\n {hasSlots ? (\n <>\n <SidebarSectionContext.Provider value={{ side, section: 'rail' }}>\n {hasRail ? (\n <div\n id={railId}\n className=\"rt-ShellSidebarRail\"\n data-section=\"rail\"\n data-visible={railVisible || undefined}\n aria-hidden={railVisible ? undefined : true}\n {...(railVisible ? {} : { inert })}\n style={{\n inlineSize: railVisible ? 'var(--shell-sidebar-rail-width, 64px)' : '0px',\n overflow: 'hidden',\n }}\n >\n {railChildren}\n </div>\n ) : null}\n </SidebarSectionContext.Provider>\n <SidebarSectionContext.Provider value={{ side, section: 'panel' }}>\n {hasPanel ? (\n <div\n id={panelId}\n className=\"rt-ShellSidebarPanel\"\n data-section=\"panel\"\n data-visible={panelVisible || undefined}\n aria-hidden={panelVisible ? undefined : true}\n {...(panelVisible ? {} : { inert })}\n style={{\n inlineSize: panelVisible ? 'var(--shell-sidebar-panel-width, 288px)' : '0px',\n overflow: 'hidden',\n }}\n >\n {panelChildren}\n </div>\n ) : null}\n </SidebarSectionContext.Provider>\n </>\n ) : (\n // Single-markup morphing\n <div\n className=\"rt-ShellSidebarSingle\"\n data-visible={singleView !== 'collapsed' || undefined}\n aria-hidden={singleView === 'collapsed' ? true : undefined}\n style={{\n inlineSize:\n singleView === 'collapsed'\n ? '0px'\n : singleView === 'rail'\n ? 'var(--shell-sidebar-rail-width, 64px)'\n : 'var(--shell-sidebar-panel-width, 288px)',\n overflow: 'hidden',\n }}\n >\n {children}\n </div>\n )}\n </Comp>\n );\n};\n\nconst Sidebar = React.forwardRef<HTMLDivElement, ShellSidebarProps>(\n SidebarInner,\n) as ShellSidebarComponent;\nSidebar.displayName = 'Shell.Sidebar';\n\n// Helper to pick rail/panel children by marker components\nfunction childrenArrayOf(children: React.ReactNode, slot: 'rail' | 'panel') {\n const arr = React.Children.toArray(children) as React.ReactElement[];\n return arr.filter((el) => React.isValidElement(el) && (el.type as any)?.['__shellSlot'] === slot);\n}\n\nSidebar.Rail = Rail;\nSidebar.Panel = Panel;\n\n// Local Trigger (inside a sidebar)\nimport type { IconButtonProps } from './icon-button.js';\ntype LocalTriggerProps = IconButtonProps<'button'>;\n/**\n * `Shell.Sidebar.Trigger` toggles the sidebar where it is rendered.\n * - In split-mode: toggles rail open/collapsed\n * - In single-markup: cycles through panel \u2192 rail \u2192 collapsed\n */\nconst LocalTrigger = React.forwardRef<React.ElementRef<typeof IconButton>, LocalTriggerProps>(\n ({ onClick, children, ...props }, ref) => {\n const section = useSidebarSection();\n const shell = useShell();\n const side = section?.side ?? 'start';\n const controlsId = shell.getRegionId(side);\n const expanded =\n shell.patternBySide[side] === 'split'\n ? shell.railBySide[side] === 'open'\n : shell.singleViewBySide[side] !== 'collapsed';\n return (\n <IconButton\n {...props}\n ref={ref}\n variant=\"soft\"\n aria-controls={controlsId}\n aria-expanded={expanded}\n onClick={(e) => {\n onClick?.(e);\n if (shell.patternBySide[side] === 'split') shell.toggleRail(side);\n else shell.cycleSingleView(side);\n }}\n >\n {children || <ChevronDownIcon />}\n </IconButton>\n );\n },\n);\nLocalTrigger.displayName = 'Shell.Sidebar.Trigger';\n\n// Global Trigger\ntype GlobalTriggerProps = IconButtonProps<'button'> & { side: ShellSide };\n/**\n * `Shell.Trigger` controls a specific `side` from anywhere inside `Shell.Root`.\n * Mirrors behavior of the local trigger, but with explicit side.\n */\nconst Trigger = React.forwardRef<React.ElementRef<typeof IconButton>, GlobalTriggerProps>(\n ({ side, onClick, children, ...props }, ref) => {\n const shell = useShell();\n const controlsId = shell.getRegionId(side);\n const expanded =\n shell.patternBySide[side] === 'split'\n ? shell.railBySide[side] === 'open'\n : shell.singleViewBySide[side] !== 'collapsed';\n return (\n <IconButton\n {...props}\n ref={ref}\n variant=\"soft\"\n aria-controls={controlsId}\n aria-expanded={expanded}\n onClick={(e) => {\n onClick?.(e);\n if (shell.patternBySide[side] === 'split') shell.toggleRail(side);\n else shell.cycleSingleView(side);\n }}\n >\n {children || <ChevronDownIcon />}\n </IconButton>\n );\n },\n);\nTrigger.displayName = 'Shell.Trigger';\n\n// Attach slots to Sidebar for namespaced API\n(Sidebar as any).Rail = Rail;\n(Sidebar as any).Panel = Panel;\n(Sidebar as any).Trigger = LocalTrigger;\n\nexport { Root, Header, Footer, Content, Sidebar, Trigger, useShell, useRailEvents, usePanelState };\n// Convenience per-side API\n/**\n * Convenience hook to interrogate and control one sidebar.\n * - `rail`: open/collapsed helpers for split pattern\n * - `panel`: show/hide helpers; visibility is conditional on rail open in split pattern\n * - `single`: view control for single-markup pattern\n * - `activeTool`: active tool coordination state\n */\nfunction useSidebar(side: ShellSide): {\n side: ShellSide;\n isSplit: boolean;\n rail: {\n value: RailValue;\n isOpen: boolean;\n open: () => void;\n close: () => void;\n toggle: () => void;\n onItemSelected: (item: string) => void;\n };\n panel: {\n isVisible: boolean;\n show: () => void;\n hide: () => void;\n activeTool: string | null;\n activeContext: string | null;\n };\n single: { view: SingleView; setView: (view: SingleView) => void; cycle: () => void };\n activeTool: string | null;\n setActiveTool: (tool: string | null) => void;\n activeContext: string | null;\n setActiveContext: (context: string | null) => void;\n} {\n const shell = useShell();\n const isSplit = shell.patternBySide[side] === 'split';\n const railValue = shell.railBySide[side];\n const activeTool = shell.activeToolBySide[side];\n\n const panelVisible =\n shell.panelRequestedBySide[side] && railValue === 'open' && activeTool !== null;\n return {\n side,\n isSplit,\n rail: {\n value: railValue,\n isOpen: railValue === 'open',\n open: () => shell.setRailBySide(side, 'open'),\n close: () => {\n shell.setRailBySide(side, 'collapsed');\n shell.setPanelRequestedBySide(side, false);\n },\n toggle: () => shell.toggleRail(side),\n onItemSelected: (item: string) => shell.onItemSelected(side, item),\n },\n panel: {\n isVisible: panelVisible,\n show: () => shell.setPanelRequestedBySide(side, true),\n hide: () => shell.setPanelRequestedBySide(side, false),\n activeTool: shell.activeToolBySide[side],\n activeContext: shell.activeContextBySide[side],\n },\n single: {\n view: shell.singleViewBySide[side],\n setView: (view: SingleView) => shell.setSingleViewBySide(side, view),\n cycle: () => shell.cycleSingleView(side),\n },\n activeTool: shell.activeToolBySide[side],\n setActiveTool: (tool: string | null) => shell.setActiveTool(side, tool),\n activeContext: shell.activeContextBySide[side],\n setActiveContext: (context: string | null) => shell.setActiveContext(side, context),\n };\n}\n\nexport { useSidebar };\n"],
5
- "mappings": "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",
6
- "names": ["shell_exports", "__export", "Content", "Footer", "Header", "Root", "Sidebar", "Trigger", "usePanelState", "useRailEvents", "useShell", "useSidebar", "__toCommonJS", "React", "import_classnames", "import_icon_button", "import_icons", "import_inert", "Sheet", "import_visually_hidden", "ShellContext", "ctx", "SidebarSectionContext", "useSidebarSection", "RailContext", "PanelContext", "getDocumentDirection", "minContentWidth", "rtl", "headerHeight", "zHeader", "cascadeSide", "activeToolProp", "onToolChange", "activeContextProp", "onContextChange", "className", "style", "children", "props", "ref", "computedDir", "railBySide", "setRailBySideState", "setRailBySide", "side", "value", "prev", "toggleRail", "next", "panelRequestedBySide", "setPanelRequestedBySideState", "setPanelRequestedBySide", "requested", "patternBySide", "setPatternBySide", "setPatternForSide", "pattern", "singleViewBySide", "setSingleViewBySideState", "setSingleViewBySide", "view", "cycleSingleView", "order", "current", "idx", "activeToolBySide", "setActiveToolBySideState", "setActiveTool", "tool", "onItemSelected", "item", "activeContextBySide", "setActiveContextBySideState", "setActiveContext", "context", "startRegionId", "endRegionId", "startPanelId", "endPanelId", "startRailId", "endRailId", "getRegionId", "getPanelId", "getRailId", "childArray", "isType", "el", "comp", "headerEls", "footerEls", "contentEls", "sidebarEls", "startSidebars", "endSidebars", "bodyChildren", "classNames", "ContentBase", "Rail", "_ref", "sidebarSection", "shell", "railContext", "Panel", "panelContext", "SidebarInner", "overlay", "overlaySide", "defaultValue", "onValueChange", "defaultView", "onViewChange", "as", "Comp", "regionId", "panelId", "railId", "railChildren", "childrenArrayOf", "panelChildren", "hasRail", "hasPanel", "hasSlots", "didInitRef", "initial", "initialView", "railValue", "panelRequested", "singleView", "activeTool", "prevRailRef", "prevViewRef", "railVisible", "panelVisible", "defaultOverlay", "mergedOverlay", "currentBp", "setCurrentBp", "mqls", "k", "q", "compute", "matched", "m", "val", "i", "v", "open", "onOpenChange", "sheetSide", "overlayPanelVisible", "overlayContent", "computedWidth", "slot", "LocalTrigger", "onClick", "section", "controlsId", "expanded", "e", "isSplit"]
4
+ "sourcesContent": ["/**\n * Shell component\n *\n * High-level application layout primitive with optional global header/footer and\n * one or two sidebars. Each sidebar supports two composition patterns:\n *\n * 1) Split pattern (preferred for interactive rails):\n * <Shell.Sidebar>\n * <Shell.Sidebar.Rail />\n * <Shell.Sidebar.Panel />\n * </Shell.Sidebar>\n *\n * 2) Single-markup morphing (compact):\n * <Shell.Sidebar> ...single content that morphs between rail/panel/collapsed </Shell.Sidebar>\n *\n * The component handles:\n * - RTL/LTR ordering for start/end sidebars\n * - Sticky panel intent in split mode (panel stays requested, visibility depends on rail open state)\n * - Controlled/uncontrolled state for both split (rail value) and single-markup (view)\n * - ARIA relationships and inert for hidden regions\n * - CSS custom properties for sizing with sensible defaults\n *\n * Layout guidance:\n * - Use flex/grid and spacing tokens; avoid margins in layout containers.\n * - Width transitions for rail/panel are CSS-driven; content scroll is confined to Content only.\n */\n'use client';\n\nimport * as React from 'react';\nimport classNames from 'classnames';\n\nimport { IconButton } from './icon-button.js';\nimport { ChevronDownIcon } from './icons.js';\nimport { inert } from '../helpers/inert.js';\nimport * as Sheet from './sheet.js';\nimport { VisuallyHidden } from './visually-hidden.js';\nimport { ShellSidebarSectionContext } from './sidebar.js';\n\nimport type { ShellSidebarSectionContextValue } from './sidebar.js';\n\n/** Logical document direction. Derived from document root unless `rtl` is passed. */\ntype ShellDirection = 'ltr' | 'rtl';\n/** Logical side, independent of physical left/right and aware of RTL. */\ntype ShellSide = 'start' | 'end';\n/** Section slot identifiers inside a sidebar. */\ntype SidebarSection = 'rail' | 'panel';\n\n/** Split-mode rail state. */\ntype RailValue = 'open' | 'collapsed';\n/** Single-markup view for morphing sidebars. */\ntype SingleView = 'panel' | 'rail' | 'collapsed';\n\n/**\n * Shared shell state across all subcomponents.\n *\n * We centralize both split-mode and single-markup state to allow triggers,\n * meters, and other UI to observe/modify layout consistently.\n */\ntype ShellContextValue = {\n dir: ShellDirection;\n headerHeight: string;\n zHeader?: number;\n // Split pattern state (rail + panel)\n railBySide: Record<ShellSide, RailValue>;\n setRailBySide: (side: ShellSide, value: RailValue) => void;\n toggleRail: (side: ShellSide) => void;\n panelRequestedBySide: Record<ShellSide, boolean>;\n setPanelRequestedBySide: (side: ShellSide, requested: boolean) => void;\n // Pattern detection per side so triggers behave correctly\n patternBySide: Record<ShellSide, 'single' | 'split'>;\n setPatternForSide: (side: ShellSide, pattern: 'single' | 'split') => void;\n // Single-markup morph state (panel/rail/collapsed)\n singleViewBySide: Record<ShellSide, SingleView>;\n setSingleViewBySide: (side: ShellSide, view: SingleView) => void;\n cycleSingleView: (side: ShellSide) => void;\n // Active tool coordination state\n activeToolBySide: Record<ShellSide, string | null>;\n setActiveTool: (side: ShellSide, tool: string | null) => void;\n onItemSelected: (side: ShellSide, item: string) => void;\n // Context (panel-level) coordination state\n activeContextBySide: Record<ShellSide, string | null>;\n setActiveContext: (side: ShellSide, context: string | null) => void;\n getRegionId: (side: ShellSide) => string;\n getPanelId: (side: ShellSide) => string;\n getRailId: (side: ShellSide) => string;\n};\n\nconst ShellContext = React.createContext<ShellContextValue | null>(null);\n\n/** Access the shell context (internal wiring for subcomponents). */\nfunction useShell() {\n const ctx = React.useContext(ShellContext);\n if (!ctx) throw new Error('Shell components must be used within <Shell.Root>.');\n return ctx;\n}\n\n// Local context to communicate section (rail/panel) and side to presentational children\ntype SidebarSectionContextValue = {\n side: ShellSide;\n section: SidebarSection;\n};\nconst SidebarSectionContext = React.createContext<SidebarSectionContextValue | null>(null);\nfunction useSidebarSection() {\n return React.useContext(SidebarSectionContext);\n}\n\n// Rail context for event emission pattern\ntype RailContextValue = {\n onItemSelected: (item: string) => void;\n};\nconst RailContext = React.createContext<RailContextValue | null>(null);\n\n/** Hook to emit rail selection events. Use this in Rail children to emit item selection. */\nfunction useRailEvents() {\n const ctx = React.useContext(RailContext);\n if (!ctx) throw new Error('useRailEvents must be used within <Shell.Sidebar.Rail>');\n return ctx;\n}\n\n// Panel context for active tool consumption\ntype PanelContextValue = {\n activeTool: string | null;\n activeContext: string | null;\n};\nconst PanelContext = React.createContext<PanelContextValue | null>(null);\n\n/** Hook to access active tool state. Use this in Panel children to render based on active tool. */\nfunction usePanelState() {\n const ctx = React.useContext(PanelContext);\n if (!ctx) throw new Error('usePanelState must be used within <Shell.Sidebar.Panel>');\n return ctx;\n}\n\n// Utilities\n/**\n * Read the document `dir` attribute. Defaults to `ltr` on server.\n */\nfunction getDocumentDirection(): ShellDirection {\n if (typeof document === 'undefined') return 'ltr';\n const dir = document.documentElement.getAttribute('dir');\n return dir === 'rtl' ? 'rtl' : 'ltr';\n}\n\n// Root\n/**\n * Props for `Shell.Root`.\n *\n * - `minContentWidth`: CSS length to enforce a minimum inline-size for content\n * area. This prevents content from collapsing too far when sidebars are open.\n * - `rtl`: Force RTL/LTR independent of document; otherwise derived from root.\n * - `headerHeight`: Sticky header block-size.\n * - `zHeader`: z-index for sticky header stacking.\n */\ninterface ShellRootProps extends React.ComponentPropsWithoutRef<'div'> {\n minContentWidth?: string;\n rtl?: boolean;\n headerHeight?: string;\n zHeader?: number;\n cascadeSide?: ShellSide;\n activeTool?: string | null;\n onToolChange?: (id: string | null) => void;\n activeContext?: string | null;\n onContextChange?: (id: string | null) => void;\n}\n\nconst Root = React.forwardRef<HTMLDivElement, ShellRootProps>(\n (\n {\n minContentWidth = '640px',\n rtl,\n headerHeight = '64px',\n zHeader,\n cascadeSide = 'start',\n activeTool: activeToolProp,\n onToolChange,\n activeContext: activeContextProp,\n onContextChange,\n className,\n style,\n children,\n ...props\n },\n ref,\n ) => {\n // Determine logical direction once, overriding document if `rtl` provided\n const computedDir = React.useMemo<ShellDirection>(() => {\n if (typeof rtl === 'boolean') return rtl ? 'rtl' : 'ltr';\n return getDocumentDirection();\n }, [rtl]);\n\n // === Split-mode and single-markup state model ===\n // In split-mode, a sidebar has both Rail and Panel slots. We track:\n // - rail open/collapsed state per side\n // - a sticky panel intent per side (requested or not)\n // In single-markup, we track a single `view` morphing between panel/rail/collapsed\n const [railBySide, setRailBySideState] = React.useState<Record<ShellSide, RailValue>>({\n start: 'open',\n end: 'collapsed',\n });\n const setRailBySide = React.useCallback((side: ShellSide, value: RailValue) => {\n setRailBySideState((prev) => (prev[side] === value ? prev : { ...prev, [side]: value }));\n }, []);\n const toggleRail = React.useCallback((side: ShellSide) => {\n setRailBySideState((prev) => {\n const next = prev[side] === 'open' ? 'collapsed' : 'open';\n return { ...prev, [side]: next };\n });\n // Keep panelRequested sticky across rail collapse/expand\n }, []);\n const [panelRequestedBySide, setPanelRequestedBySideState] = React.useState<\n Record<ShellSide, boolean>\n >({ start: false, end: false });\n const setPanelRequestedBySide = React.useCallback((side: ShellSide, requested: boolean) => {\n setPanelRequestedBySideState((prev) =>\n prev[side] === requested ? prev : { ...prev, [side]: requested },\n );\n }, []);\n // Pattern per side and single-markup state\n // We detect pattern per side based on presence of slots (registered by Sidebar)\n const [patternBySide, setPatternBySide] = React.useState<Record<ShellSide, 'single' | 'split'>>(\n {\n start: 'single',\n end: 'single',\n },\n );\n const setPatternForSide = React.useCallback((side: ShellSide, pattern: 'single' | 'split') => {\n setPatternBySide((prev) => (prev[side] === pattern ? prev : { ...prev, [side]: pattern }));\n }, []);\n const [singleViewBySide, setSingleViewBySideState] = React.useState<\n Record<ShellSide, SingleView>\n >({\n start: 'panel',\n end: 'collapsed',\n });\n const setSingleViewBySide = React.useCallback((side: ShellSide, view: SingleView) => {\n setSingleViewBySideState((prev) => (prev[side] === view ? prev : { ...prev, [side]: view }));\n }, []);\n const cycleSingleView = React.useCallback(\n (side: ShellSide) => {\n const order: SingleView[] = ['panel', 'rail', 'collapsed'];\n const current = singleViewBySide[side];\n const idx = order.indexOf(current);\n const next = order[(idx + 1) % order.length];\n setSingleViewBySide(side, next);\n },\n [singleViewBySide, setSingleViewBySide],\n );\n\n // === Active tool coordination state ===\n // Track which tool/mode is active per side for coordinated rail/panel communication\n const [activeToolBySide, setActiveToolBySideState] = React.useState<\n Record<ShellSide, string | null>\n >({\n start: null,\n end: null,\n });\n const setActiveTool = React.useCallback(\n (side: ShellSide, tool: string | null) => {\n setActiveToolBySideState((prev) =>\n prev[side] === tool ? prev : { ...prev, [side]: tool },\n );\n // Auto-hide panel when no tool is active\n if (tool === null) {\n setPanelRequestedBySide(side, false);\n }\n },\n [setPanelRequestedBySide],\n );\n const onItemSelected = React.useCallback(\n (side: ShellSide, item: string) => {\n setActiveTool(side, item);\n // Auto-show panel when item is selected\n setPanelRequestedBySide(side, true);\n },\n [setActiveTool, setPanelRequestedBySide],\n );\n\n // === Active context coordination state ===\n const [activeContextBySide, setActiveContextBySideState] = React.useState<\n Record<ShellSide, string | null>\n >({ start: null, end: null });\n const setActiveContext = React.useCallback(\n (side: ShellSide, context: string | null) => {\n setActiveContextBySideState((prev) =>\n prev[side] === context ? prev : { ...prev, [side]: context },\n );\n if (side === cascadeSide) onContextChange?.(context);\n },\n [cascadeSide, onContextChange],\n );\n\n // === Controlled prop sync (cascade side) ===\n React.useEffect(() => {\n if (activeToolProp !== undefined && activeToolBySide[cascadeSide] !== activeToolProp) {\n setActiveToolBySideState((prev) => ({ ...prev, [cascadeSide]: activeToolProp }));\n }\n }, [activeToolProp, cascadeSide, activeToolBySide]);\n React.useEffect(() => {\n if (\n activeContextProp !== undefined &&\n activeContextBySide[cascadeSide] !== activeContextProp\n ) {\n setActiveContextBySideState((prev) => ({ ...prev, [cascadeSide]: activeContextProp }));\n }\n }, [activeContextProp, cascadeSide, activeContextBySide]);\n\n // === Stable ids per side ===\n // These IDs are used to wire aria-controls and aria-expanded for triggers,\n // and to scope region/panel/rail DOM nodes for measurement.\n const startRegionId = React.useId();\n const endRegionId = React.useId();\n const startPanelId = React.useId();\n const endPanelId = React.useId();\n const startRailId = React.useId();\n const endRailId = React.useId();\n const getRegionId = React.useCallback(\n (side: ShellSide) =>\n side === 'start' ? `kui-shell-region-${startRegionId}` : `kui-shell-region-${endRegionId}`,\n [startRegionId, endRegionId],\n );\n const getPanelId = React.useCallback(\n (side: ShellSide) =>\n side === 'start' ? `kui-shell-panel-${startPanelId}` : `kui-shell-panel-${endPanelId}`,\n [startPanelId, endPanelId],\n );\n const getRailId = React.useCallback(\n (side: ShellSide) =>\n side === 'start' ? `kui-shell-rail-${startRailId}` : `kui-shell-rail-${endRailId}`,\n [startRailId, endRailId],\n );\n\n const ctx = React.useMemo<ShellContextValue>(\n () => ({\n dir: computedDir,\n headerHeight,\n zHeader,\n railBySide,\n setRailBySide,\n toggleRail,\n panelRequestedBySide,\n setPanelRequestedBySide,\n patternBySide,\n setPatternForSide,\n singleViewBySide,\n setSingleViewBySide,\n cycleSingleView,\n activeToolBySide,\n setActiveTool,\n onItemSelected,\n activeContextBySide,\n setActiveContext,\n getRegionId,\n getPanelId,\n getRailId,\n }),\n [\n computedDir,\n headerHeight,\n zHeader,\n railBySide,\n setRailBySide,\n toggleRail,\n panelRequestedBySide,\n setPanelRequestedBySide,\n patternBySide,\n setPatternForSide,\n singleViewBySide,\n setSingleViewBySide,\n cycleSingleView,\n activeToolBySide,\n setActiveTool,\n onItemSelected,\n activeContextBySide,\n setActiveContext,\n getRegionId,\n getPanelId,\n getRailId,\n ],\n );\n\n // === Composition: order children based on direction ===\n const childArray = React.Children.toArray(children) as React.ReactElement[];\n const isType = (el: React.ReactElement, comp: any) =>\n React.isValidElement(el) && el.type === comp;\n const headerEls = childArray.filter((el) => isType(el, Header));\n const footerEls = childArray.filter((el) => isType(el, Footer));\n const contentEls = childArray.filter((el) => isType(el, Content));\n const sidebarEls = childArray.filter((el) => isType(el, Sidebar));\n\n // Partition sidebars by side\n const startSidebars = sidebarEls.filter((el) => (el.props as any).side === 'start');\n const endSidebars = sidebarEls.filter((el) => (el.props as any).side === 'end');\n\n const bodyChildren =\n computedDir === 'rtl'\n ? [...endSidebars, ...contentEls, ...startSidebars]\n : [...startSidebars, ...contentEls, ...endSidebars];\n\n return (\n <div\n {...props}\n ref={ref}\n className={classNames('rt-ShellRoot', className)}\n style={{\n ...style,\n // Internal CSS custom props for sizing\n ['--shell-min-content-width' as any]: minContentWidth,\n ['--shell-header-height' as any]: headerHeight,\n }}\n dir={computedDir}\n >\n <ShellContext.Provider value={ctx}>\n {headerEls}\n <div className=\"rt-ShellBody\">{bodyChildren}</div>\n {footerEls}\n </ShellContext.Provider>\n </div>\n );\n },\n);\nRoot.displayName = 'Shell.Root';\n\n// Global Header\n/** Props for `Shell.Header`. Sticky by default and respects `--shell-header-height`. */\ninterface ShellHeaderProps extends React.ComponentPropsWithoutRef<'header'> {}\nconst Header = React.forwardRef<HTMLElement, ShellHeaderProps>(\n ({ className, style, ...props }, ref) => {\n const { headerHeight, zHeader } = useShell();\n return (\n <header\n {...props}\n ref={ref}\n role=\"banner\"\n className={classNames('rt-ShellHeader', className)}\n style={{\n ['--shell-header-height' as any]: headerHeight,\n ['--shell-z-header' as any]: zHeader,\n ...style,\n }}\n />\n );\n },\n);\nHeader.displayName = 'Shell.Header';\n\n// Global Footer\n/** Props for `Shell.Footer`. Rendered after body and outside the content scroll. */\ninterface ShellFooterProps extends React.ComponentPropsWithoutRef<'footer'> {}\nconst Footer = React.forwardRef<HTMLElement, ShellFooterProps>(({ className, ...props }, ref) => (\n <footer\n {...props}\n ref={ref}\n role=\"contentinfo\"\n className={classNames('rt-ShellFooter', className)}\n />\n));\nFooter.displayName = 'Shell.Footer';\n\n// Content\n/** Props for `Shell.Content`. The only scrollable area of the Shell. */\ninterface ShellContentProps extends React.ComponentPropsWithoutRef<'main'> {}\nconst ContentBase = React.forwardRef<HTMLElement, ShellContentProps>(\n ({ className, ...props }, ref) => (\n <main {...props} ref={ref} className={classNames('rt-ShellContent', className)} />\n ),\n);\nContentBase.displayName = 'Shell.Content';\n\nconst Content = ContentBase;\n\n// Sidebar (stateful owner)\n/**\n * `Shell.Sidebar` controls one logical side. It supports two patterns:\n * - Split pattern by providing both `Sidebar.Rail` and `Sidebar.Panel` children\n * - Single-markup morphing when no slots are provided\n *\n * Controlled/uncontrolled:\n * - Split: `value`/`defaultValue` reflect rail `open|collapsed`\n * - Single: `view`/`defaultView` reflect `panel|rail|collapsed`\n */\ninterface ShellSidebarProps extends React.ComponentPropsWithoutRef<'div'> {\n side: ShellSide;\n // Overlay: render as a top sheet rather than inline. Responsiveness handled separately.\n overlay?: boolean | Partial<Record<'initial' | 'xs' | 'sm' | 'md' | 'lg' | 'xl', boolean>>;\n overlaySide?: 'start' | 'end' | 'top' | 'bottom';\n // Split: rail control\n value?: RailValue;\n defaultValue?: RailValue;\n onValueChange?: (value: RailValue) => void;\n // Single-markup view control\n view?: SingleView;\n defaultView?: SingleView;\n onViewChange?: (view: SingleView) => void;\n as?: 'nav' | 'aside' | 'div';\n 'aria-label'?: string;\n}\n\n// Rail\n/** Rail component that provides event emission context for stateless navigation. */\ninterface RailProps extends React.ComponentPropsWithoutRef<'div'> {}\nconst Rail = Object.assign(\n React.forwardRef<HTMLDivElement, RailProps>(({ children }, _ref) => {\n const sidebarSection = useSidebarSection();\n const shell = useShell();\n const side = sidebarSection?.side ?? 'start';\n\n const railContext = React.useMemo<RailContextValue>(\n () => ({\n onItemSelected: (item: string) => shell.onItemSelected(side, item),\n }),\n [shell, side],\n );\n\n const sidebarSectionContext = React.useMemo<ShellSidebarSectionContextValue>(\n () => ({\n side,\n section: 'rail',\n }),\n [side],\n );\n\n return (\n <RailContext.Provider value={railContext}>\n <ShellSidebarSectionContext.Provider value={sidebarSectionContext}>\n {children}\n </ShellSidebarSectionContext.Provider>\n </RailContext.Provider>\n );\n }),\n { displayName: 'Shell.Sidebar.Rail', __shellSlot: 'rail' as const },\n);\n\n// Panel\n/** Panel component that provides active tool context for stateless content rendering. */\ninterface PanelProps extends React.ComponentPropsWithoutRef<'div'> {}\nconst Panel = Object.assign(\n React.forwardRef<HTMLDivElement, PanelProps>(({ children }, _ref) => {\n const sidebarSection = useSidebarSection();\n const shell = useShell();\n const side = sidebarSection?.side ?? 'start';\n\n const panelContext = React.useMemo<PanelContextValue>(\n () => ({\n activeTool: shell.activeToolBySide[side],\n activeContext: shell.activeContextBySide[side],\n }),\n [shell.activeToolBySide, shell.activeContextBySide, side],\n );\n\n const sidebarSectionContext = React.useMemo<ShellSidebarSectionContextValue>(\n () => ({\n side,\n section: 'panel',\n }),\n [side],\n );\n\n return (\n <PanelContext.Provider value={panelContext}>\n <ShellSidebarSectionContext.Provider value={sidebarSectionContext}>\n {children}\n </ShellSidebarSectionContext.Provider>\n </PanelContext.Provider>\n );\n }),\n { displayName: 'Shell.Sidebar.Panel', __shellSlot: 'panel' as const },\n);\n\ntype ShellSidebarComponent = React.ForwardRefExoticComponent<\n ShellSidebarProps & React.RefAttributes<HTMLDivElement>\n> & {\n Rail: typeof Rail;\n Panel: typeof Panel;\n Trigger: typeof LocalTrigger;\n};\n\nconst SidebarInner = (\n {\n side,\n overlay,\n overlaySide,\n value,\n defaultValue,\n onValueChange,\n view,\n defaultView,\n onViewChange,\n as = 'nav',\n className,\n style,\n children,\n ...props\n }: ShellSidebarProps,\n ref: React.ForwardedRef<HTMLDivElement>,\n) => {\n const shell = useShell();\n const Comp = as as any;\n\n const regionId = shell.getRegionId(side);\n const panelId = shell.getPanelId(side);\n const railId = shell.getRailId(side);\n\n const railChildren = childrenArrayOf(children, 'rail');\n const panelChildren = childrenArrayOf(children, 'panel');\n const hasRail = railChildren.length > 0;\n const hasPanel = panelChildren.length > 0;\n const hasSlots = hasRail || hasPanel;\n\n // Pattern registration per side\n React.useEffect(() => {\n shell.setPatternForSide(side, hasSlots && hasRail && hasPanel ? 'split' : 'single');\n }, [shell, side, hasSlots, hasRail, hasPanel]);\n\n // Initialize defaults (run once)\n const didInitRef = React.useRef(false);\n React.useEffect(() => {\n if (didInitRef.current) return;\n didInitRef.current = true;\n if (hasSlots) {\n // split: rail value\n const initial = value ?? defaultValue ?? (overlay ? 'collapsed' : 'open');\n shell.setRailBySide(side, initial);\n if (overlay) shell.setPanelRequestedBySide(side, false);\n } else {\n // single: view\n const initialView = view ?? defaultView ?? (overlay ? 'collapsed' : 'panel');\n shell.setSingleViewBySide(side, initialView);\n }\n }, [hasSlots, value, defaultValue, view, defaultView, shell, side, overlay]);\n\n // Keep context in sync for controlled\n React.useEffect(() => {\n if (!hasSlots) return;\n if (value !== undefined && shell.railBySide[side] !== value) {\n shell.setRailBySide(side, value);\n }\n }, [value, hasSlots, shell, side]);\n React.useEffect(() => {\n if (hasSlots) return;\n if (view !== undefined && shell.singleViewBySide[side] !== view) {\n shell.setSingleViewBySide(side, view);\n }\n }, [view, hasSlots, shell, side]);\n\n const railValue = shell.railBySide[side];\n const panelRequested = shell.panelRequestedBySide[side];\n const singleView = shell.singleViewBySide[side];\n const activeTool = shell.activeToolBySide[side];\n\n // Emit changes for uncontrolled\n const prevRailRef = React.useRef<RailValue | null>(null);\n React.useEffect(() => {\n if (!hasSlots) return;\n if (value !== undefined) return;\n if (prevRailRef.current !== railValue) {\n prevRailRef.current = railValue;\n onValueChange?.(railValue);\n }\n }, [hasSlots, railValue, value, onValueChange]);\n const prevViewRef = React.useRef<SingleView | null>(null);\n React.useEffect(() => {\n if (hasSlots) return;\n if (view !== undefined) return;\n if (prevViewRef.current !== singleView) {\n prevViewRef.current = singleView;\n onViewChange?.(singleView);\n }\n }, [hasSlots, singleView, view, onViewChange]);\n\n // Derived visibility:\n // - Split (rail+panel): panel shows when rail is open, panel is requested, and a tool is active\n // - Panel-only (no rail): panel shows unconditionally (no tool gating)\n // - Single-markup: shows when view === 'panel' and a tool is active\n const railVisible = hasSlots ? hasRail && railValue === 'open' : singleView === 'rail';\n const panelVisible = hasSlots\n ? hasPanel && (hasRail ? railValue === 'open' && panelRequested && activeTool !== null : true)\n : singleView === 'panel';\n\n // Overlay behavior (non-inline): mount as a Sheet from the top (default)\n // Resolve overlay responsively: built-in defaults overruled by prop\n // Defaults: overlay on initial/xs/sm; inline on md+\n const defaultOverlay = { initial: true, xs: true, sm: true, md: false, lg: false, xl: false };\n const mergedOverlay = React.useMemo(() => {\n if (typeof overlay === 'boolean') {\n return { initial: overlay } as Partial<\n Record<'initial' | 'xs' | 'sm' | 'md' | 'lg' | 'xl', boolean>\n >;\n }\n return { ...defaultOverlay, ...(overlay || {}) } as Partial<\n Record<'initial' | 'xs' | 'sm' | 'md' | 'lg' | 'xl', boolean>\n >;\n }, [overlay, defaultOverlay]);\n\n const [currentBp, setCurrentBp] = React.useState<'initial' | 'xs' | 'sm' | 'md' | 'lg' | 'xl'>(\n 'initial',\n );\n\n React.useEffect(() => {\n if (typeof window === 'undefined') return;\n const queries: [key: 'xs' | 'sm' | 'md' | 'lg' | 'xl', query: string][] = [\n ['xs', '(min-width: 520px)'],\n ['sm', '(min-width: 768px)'],\n ['md', '(min-width: 1024px)'],\n ['lg', '(min-width: 1280px)'],\n ['xl', '(min-width: 1640px)'],\n ];\n const mqls = queries.map(([k, q]) => [k, window.matchMedia(q)] as const);\n const compute = () => {\n // Highest matched wins\n const matched = mqls.filter(([, m]) => m.matches).map(([k]) => k);\n const next = (matched[matched.length - 1] as typeof currentBp | undefined) ?? 'initial';\n setCurrentBp(next);\n };\n compute();\n mqls.forEach(([, m]) => m.addEventListener('change', compute));\n return () => {\n mqls.forEach(([, m]) => m.removeEventListener('change', compute));\n };\n }, []);\n\n const isOverlay = (() => {\n const val = mergedOverlay[currentBp];\n if (typeof val === 'boolean') return val;\n // Fallback cascade: if current not set, try smaller breakpoints, then initial\n const order: (typeof currentBp)[] = ['xl', 'lg', 'md', 'sm', 'xs', 'initial'];\n const idx = order.indexOf(currentBp);\n for (let i = idx + 1; i < order.length; i++) {\n const v = mergedOverlay[order[i]];\n if (typeof v === 'boolean') return v;\n }\n return mergedOverlay.initial ?? false;\n })();\n\n if (isOverlay) {\n const open = hasSlots ? railValue === 'open' || panelRequested : singleView !== 'collapsed';\n const onOpenChange = (next: boolean) => {\n if (hasSlots) {\n if (!next) {\n shell.setRailBySide(side, 'collapsed');\n shell.setPanelRequestedBySide(side, false);\n } else {\n shell.setRailBySide(side, 'open');\n }\n } else {\n if (!next) shell.setSingleViewBySide(side, 'collapsed');\n else shell.setSingleViewBySide(side, 'panel');\n }\n };\n\n const sheetSide = overlaySide ?? side;\n\n // Choose what to render in overlay\n // Split pattern: default to combined (rail + panel). Panel visibility follows panel intent and active tool.\n // Single-markup: render the provided children as-is.\n const overlayPanelVisible = hasSlots\n ? hasPanel && (hasRail ? panelRequested && activeTool !== null : true)\n : false;\n const overlayContent = hasSlots ? (\n <div style={{ display: 'flex', height: '100%', minBlockSize: 0 }}>\n {hasRail ? (\n <div\n id={railId}\n className=\"rt-ShellSidebarRail\"\n data-section=\"rail\"\n data-visible\n style={{ inlineSize: 'var(--shell-sidebar-rail-width, 64px)', overflow: 'hidden' }}\n >\n {railChildren}\n </div>\n ) : null}\n {hasPanel ? (\n <div\n id={panelId}\n className=\"rt-ShellSidebarPanel\"\n data-section=\"panel\"\n data-visible={overlayPanelVisible || undefined}\n aria-hidden={overlayPanelVisible ? undefined : true}\n {...(overlayPanelVisible ? {} : { inert })}\n style={{\n inlineSize: overlayPanelVisible ? 'var(--shell-sidebar-panel-width, 288px)' : '0px',\n overflow: 'hidden',\n }}\n >\n {panelChildren}\n </div>\n ) : null}\n </div>\n ) : (\n children\n );\n\n // Compute sheet width based on split/single pattern using CSS tokens\n const computedWidth =\n sheetSide === 'start' || sheetSide === 'end'\n ? hasSlots\n ? overlayPanelVisible\n ? 'var(--shell-sidebar-combined-width)'\n : 'var(--shell-sidebar-rail-width)'\n : singleView === 'rail'\n ? 'var(--shell-sidebar-rail-width)'\n : 'var(--shell-sidebar-panel-width)'\n : '100vw';\n\n return (\n <>\n <Sheet.Root open={open} onOpenChange={onOpenChange}>\n <Sheet.Content\n id={regionId}\n side={sheetSide}\n height={{ initial: '100vh' }}\n width={{ initial: computedWidth }}\n style={{ ['--dialog-content-padding' as any]: '0px' }}\n >\n <Sheet.Title>\n <VisuallyHidden>Sidebar</VisuallyHidden>\n </Sheet.Title>\n {overlayContent}\n </Sheet.Content>\n </Sheet.Root>\n </>\n );\n }\n\n return (\n <Comp\n {...props}\n ref={ref}\n id={regionId}\n className={classNames('rt-ShellSidebar', className)}\n data-side={side}\n data-rail={hasSlots ? railValue : undefined}\n data-panel={hasSlots ? (panelVisible ? 'visible' : 'hidden') : undefined}\n data-state={!hasSlots ? singleView : undefined}\n aria-label={props['aria-label']}\n style={{ ...style }}\n >\n {hasSlots ? (\n <>\n <SidebarSectionContext.Provider value={{ side, section: 'rail' }}>\n {hasRail ? (\n <div\n id={railId}\n className=\"rt-ShellSidebarRail\"\n data-section=\"rail\"\n data-visible={railVisible || undefined}\n aria-hidden={railVisible ? undefined : true}\n {...(railVisible ? {} : { inert })}\n style={{\n inlineSize: railVisible ? 'var(--shell-sidebar-rail-width, 64px)' : '0px',\n overflow: 'hidden',\n }}\n >\n {railChildren}\n </div>\n ) : null}\n </SidebarSectionContext.Provider>\n <SidebarSectionContext.Provider value={{ side, section: 'panel' }}>\n {hasPanel ? (\n <div\n id={panelId}\n className=\"rt-ShellSidebarPanel\"\n data-section=\"panel\"\n data-visible={panelVisible || undefined}\n aria-hidden={panelVisible ? undefined : true}\n {...(panelVisible ? {} : { inert })}\n style={{\n inlineSize: panelVisible ? 'var(--shell-sidebar-panel-width, 288px)' : '0px',\n overflow: 'hidden',\n }}\n >\n {panelChildren}\n </div>\n ) : null}\n </SidebarSectionContext.Provider>\n </>\n ) : (\n // Single-markup morphing\n <div\n className=\"rt-ShellSidebarSingle\"\n data-visible={singleView !== 'collapsed' || undefined}\n aria-hidden={singleView === 'collapsed' ? true : undefined}\n style={{\n inlineSize:\n singleView === 'collapsed'\n ? '0px'\n : singleView === 'rail'\n ? 'var(--shell-sidebar-rail-width, 64px)'\n : 'var(--shell-sidebar-panel-width, 288px)',\n overflow: 'hidden',\n }}\n >\n {children}\n </div>\n )}\n </Comp>\n );\n};\n\nconst Sidebar = React.forwardRef<HTMLDivElement, ShellSidebarProps>(\n SidebarInner,\n) as ShellSidebarComponent;\nSidebar.displayName = 'Shell.Sidebar';\n\n// Helper to pick rail/panel children by marker components\nfunction childrenArrayOf(children: React.ReactNode, slot: 'rail' | 'panel') {\n const arr = React.Children.toArray(children) as React.ReactElement[];\n return arr.filter((el) => React.isValidElement(el) && (el.type as any)?.['__shellSlot'] === slot);\n}\n\nSidebar.Rail = Rail;\nSidebar.Panel = Panel;\n\n// Local Trigger (inside a sidebar)\nimport type { IconButtonProps } from './icon-button.js';\ntype LocalTriggerProps = IconButtonProps<'button'>;\n/**\n * `Shell.Sidebar.Trigger` toggles the sidebar where it is rendered.\n * - In split-mode: toggles rail open/collapsed\n * - In single-markup: cycles through panel \u2192 rail \u2192 collapsed\n */\nconst LocalTrigger = React.forwardRef<React.ElementRef<typeof IconButton>, LocalTriggerProps>(\n ({ onClick, children, ...props }, ref) => {\n const section = useSidebarSection();\n const shell = useShell();\n const side = section?.side ?? 'start';\n const controlsId = shell.getRegionId(side);\n const expanded =\n shell.patternBySide[side] === 'split'\n ? shell.railBySide[side] === 'open'\n : shell.singleViewBySide[side] !== 'collapsed';\n return (\n <IconButton\n {...props}\n ref={ref}\n variant=\"soft\"\n aria-controls={controlsId}\n aria-expanded={expanded}\n onClick={(e) => {\n onClick?.(e);\n if (shell.patternBySide[side] === 'split') shell.toggleRail(side);\n else shell.cycleSingleView(side);\n }}\n >\n {children || <ChevronDownIcon />}\n </IconButton>\n );\n },\n);\nLocalTrigger.displayName = 'Shell.Sidebar.Trigger';\n\n// Global Trigger\ntype GlobalTriggerProps = IconButtonProps<'button'> & { side: ShellSide };\n/**\n * `Shell.Trigger` controls a specific `side` from anywhere inside `Shell.Root`.\n * Mirrors behavior of the local trigger, but with explicit side.\n */\nconst Trigger = React.forwardRef<React.ElementRef<typeof IconButton>, GlobalTriggerProps>(\n ({ side, onClick, children, ...props }, ref) => {\n const shell = useShell();\n const controlsId = shell.getRegionId(side);\n const expanded =\n shell.patternBySide[side] === 'split'\n ? shell.railBySide[side] === 'open'\n : shell.singleViewBySide[side] !== 'collapsed';\n return (\n <IconButton\n {...props}\n ref={ref}\n variant=\"ghost\"\n aria-controls={controlsId}\n aria-expanded={expanded}\n onClick={(e) => {\n onClick?.(e);\n if (shell.patternBySide[side] === 'split') shell.toggleRail(side);\n else shell.cycleSingleView(side);\n }}\n >\n {children || <ChevronDownIcon />}\n </IconButton>\n );\n },\n);\nTrigger.displayName = 'Shell.Trigger';\n\n// Attach slots to Sidebar for namespaced API\n(Sidebar as any).Rail = Rail;\n(Sidebar as any).Panel = Panel;\n(Sidebar as any).Trigger = LocalTrigger;\n\nexport { Root, Header, Footer, Content, Sidebar, Trigger, useShell, useRailEvents, usePanelState };\n// Convenience per-side API\n/**\n * Convenience hook to interrogate and control one sidebar.\n * - `rail`: open/collapsed helpers for split pattern\n * - `panel`: show/hide helpers; visibility is conditional on rail open in split pattern\n * - `single`: view control for single-markup pattern\n * - `activeTool`: active tool coordination state\n */\nfunction useSidebar(side: ShellSide): {\n side: ShellSide;\n isSplit: boolean;\n rail: {\n value: RailValue;\n isOpen: boolean;\n open: () => void;\n close: () => void;\n toggle: () => void;\n onItemSelected: (item: string) => void;\n };\n panel: {\n isVisible: boolean;\n show: () => void;\n hide: () => void;\n activeTool: string | null;\n activeContext: string | null;\n };\n single: { view: SingleView; setView: (view: SingleView) => void; cycle: () => void };\n activeTool: string | null;\n setActiveTool: (tool: string | null) => void;\n activeContext: string | null;\n setActiveContext: (context: string | null) => void;\n} {\n const shell = useShell();\n const isSplit = shell.patternBySide[side] === 'split';\n const railValue = shell.railBySide[side];\n const activeTool = shell.activeToolBySide[side];\n\n const panelVisible =\n shell.panelRequestedBySide[side] && railValue === 'open' && activeTool !== null;\n return {\n side,\n isSplit,\n rail: {\n value: railValue,\n isOpen: railValue === 'open',\n open: () => shell.setRailBySide(side, 'open'),\n close: () => {\n shell.setRailBySide(side, 'collapsed');\n shell.setPanelRequestedBySide(side, false);\n },\n toggle: () => shell.toggleRail(side),\n onItemSelected: (item: string) => shell.onItemSelected(side, item),\n },\n panel: {\n isVisible: panelVisible,\n show: () => shell.setPanelRequestedBySide(side, true),\n hide: () => shell.setPanelRequestedBySide(side, false),\n activeTool: shell.activeToolBySide[side],\n activeContext: shell.activeContextBySide[side],\n },\n single: {\n view: shell.singleViewBySide[side],\n setView: (view: SingleView) => shell.setSingleViewBySide(side, view),\n cycle: () => shell.cycleSingleView(side),\n },\n activeTool: shell.activeToolBySide[side],\n setActiveTool: (tool: string | null) => shell.setActiveTool(side, tool),\n activeContext: shell.activeContextBySide[side],\n setActiveContext: (context: string | null) => shell.setActiveContext(side, context),\n };\n}\n\nexport { useSidebar };\n"],
5
+ "mappings": "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",
6
+ "names": ["shell_exports", "__export", "Content", "Footer", "Header", "Root", "Sidebar", "Trigger", "usePanelState", "useRailEvents", "useShell", "useSidebar", "__toCommonJS", "React", "import_classnames", "import_icon_button", "import_icons", "import_inert", "Sheet", "import_visually_hidden", "import_sidebar", "ShellContext", "ctx", "SidebarSectionContext", "useSidebarSection", "RailContext", "PanelContext", "getDocumentDirection", "minContentWidth", "rtl", "headerHeight", "zHeader", "cascadeSide", "activeToolProp", "onToolChange", "activeContextProp", "onContextChange", "className", "style", "children", "props", "ref", "computedDir", "railBySide", "setRailBySideState", "setRailBySide", "side", "value", "prev", "toggleRail", "next", "panelRequestedBySide", "setPanelRequestedBySideState", "setPanelRequestedBySide", "requested", "patternBySide", "setPatternBySide", "setPatternForSide", "pattern", "singleViewBySide", "setSingleViewBySideState", "setSingleViewBySide", "view", "cycleSingleView", "order", "current", "idx", "activeToolBySide", "setActiveToolBySideState", "setActiveTool", "tool", "onItemSelected", "item", "activeContextBySide", "setActiveContextBySideState", "setActiveContext", "context", "startRegionId", "endRegionId", "startPanelId", "endPanelId", "startRailId", "endRailId", "getRegionId", "getPanelId", "getRailId", "childArray", "isType", "el", "comp", "headerEls", "footerEls", "contentEls", "sidebarEls", "startSidebars", "endSidebars", "bodyChildren", "classNames", "ContentBase", "Rail", "_ref", "sidebarSection", "shell", "railContext", "sidebarSectionContext", "Panel", "panelContext", "SidebarInner", "overlay", "overlaySide", "defaultValue", "onValueChange", "defaultView", "onViewChange", "as", "Comp", "regionId", "panelId", "railId", "railChildren", "childrenArrayOf", "panelChildren", "hasRail", "hasPanel", "hasSlots", "didInitRef", "initial", "initialView", "railValue", "panelRequested", "singleView", "activeTool", "prevRailRef", "prevViewRef", "railVisible", "panelVisible", "defaultOverlay", "mergedOverlay", "currentBp", "setCurrentBp", "mqls", "k", "q", "compute", "matched", "m", "val", "i", "v", "open", "onOpenChange", "sheetSide", "overlayPanelVisible", "overlayContent", "computedWidth", "slot", "LocalTrigger", "onClick", "section", "controlsId", "expanded", "e", "isSplit"]
7
7
  }
@@ -13,6 +13,11 @@ type BadgeConfig = {
13
13
  highContrast?: BadgeProps['highContrast'];
14
14
  radius?: BadgeProps['radius'];
15
15
  };
16
+ type ShellSidebarSectionContextValue = {
17
+ side: 'start' | 'end';
18
+ section: 'rail' | 'panel';
19
+ };
20
+ declare const ShellSidebarSectionContext: React.Context<ShellSidebarSectionContextValue | null>;
16
21
  type SidebarOwnProps = GetPropDefTypes<typeof sidebarPropDefs>;
17
22
  interface SidebarProps extends ComponentPropsWithout<'div', RemovedProps>, SidebarOwnProps {
18
23
  }
@@ -129,5 +134,6 @@ export { Sidebar as Root, SidebarContent as Content, SidebarHeader as Header, Si
129
134
  * - Justification: rt-justify-between, rt-justify-center, rt-justify-start, rt-justify-end
130
135
  * - Gap: rt-gap-1, rt-gap-2, rt-gap-3, rt-gap-4
131
136
  */
132
- export type { SidebarProps as RootProps, SidebarContentProps as ContentProps, SidebarHeaderProps as HeaderProps, SidebarFooterProps as FooterProps, BadgeConfig, };
137
+ export type { SidebarProps as RootProps, SidebarContentProps as ContentProps, SidebarHeaderProps as HeaderProps, SidebarFooterProps as FooterProps, BadgeConfig, ShellSidebarSectionContextValue, };
138
+ export { ShellSidebarSectionContext };
133
139
  //# sourceMappingURL=sidebar.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"sidebar.d.ts","sourceRoot":"","sources":["../../../src/components/sidebar.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"sidebar.d.ts","sourceRoot":"","sources":["../../../src/components/sidebar.tsx"],"names":[],"mappings":"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"}
@@ -1,2 +1,2 @@
1
- "use strict";"use client";var X=Object.create;var P=Object.defineProperty;var Y=Object.getOwnPropertyDescriptor;var Z=Object.getOwnPropertyNames;var ee=Object.getPrototypeOf,re=Object.prototype.hasOwnProperty;var te=(r,t)=>{for(var o in t)P(r,o,{get:t[o],enumerable:!0})},k=(r,t,o,a)=>{if(t&&typeof t=="object"||typeof t=="function")for(let n of Z(t))!re.call(r,n)&&n!==o&&P(r,n,{get:()=>t[n],enumerable:!(a=Y(t,n))||a.enumerable});return r};var F=(r,t,o)=>(o=r!=null?X(ee(r)):{},k(t||!r||!r.__esModule?P(o,"default",{value:r,enumerable:!0}):o,r)),oe=r=>k(P({},"__esModule",{value:!0}),r);var ae={};te(ae,{Content:()=>H,Footer:()=>L,Group:()=>D,GroupContent:()=>A,GroupLabel:()=>W,Header:()=>R,Menu:()=>E,MenuButton:()=>w,MenuItem:()=>z,MenuSub:()=>G,MenuSubContent:()=>V,MenuSubTrigger:()=>I,Root:()=>B,Separator:()=>x});module.exports=oe(ae);var e=F(require("react")),i=F(require("classnames")),N=require("./slot.js"),b=require("radix-ui"),c=require("./sidebar.props.js"),j=require("./theme.js"),K=require("./scroll-area.js"),O=require("./separator.js"),_=require("./icons.js"),q=require("../helpers/extract-props.js"),U=require("./kbd.js"),T=require("./badge.js");const $=e.createContext(null);function v(){return e.useContext($)}const B=e.forwardRef((r,t)=>{const o=(0,j.useThemeContext)(),{size:a=c.sidebarPropDefs.size.default,variant:n=c.sidebarPropDefs.variant.default,menuVariant:s=c.sidebarPropDefs.menuVariant.default,panelBackground:u,color:m,highContrast:l=c.sidebarPropDefs.highContrast.default}=r,{className:p,children:M,...h}=(0,q.extractProps)(r,c.sidebarPropDefs),{asChild:y,panelBackground:J,...S}=h,g=m||o.accentColor,f=typeof a=="object"?a.initial||"2":a;return e.createElement("div",{...S,ref:t,"data-accent-color":g,className:(0,i.default)("rt-SidebarRoot",p)},e.createElement($.Provider,{value:{size:f,menuVariant:s}},e.createElement("div",{className:(0,i.default)("rt-SidebarContainer",`rt-variant-${n}`,`rt-r-size-${f}`,`rt-menu-variant-${s}`),"data-accent-color":g,"data-high-contrast":l||void 0,"data-panel-background":u},M)))});B.displayName="Sidebar.Root";const H=e.forwardRef(({className:r,children:t,role:o="navigation","aria-label":a="Main navigation",id:n,...s},u)=>{const m=v(),l=m?.size??"2",p=m?.menuVariant??"soft";return e.createElement(K.ScrollArea,{type:"hover"},e.createElement("div",{...s,ref:u,id:n,role:o,"aria-label":a,className:(0,i.default)("rt-BaseMenuContent","rt-SidebarContent",`rt-r-size-${l}`,`rt-menu-variant-${p}`,r)},t))});H.displayName="Sidebar.Content";const R=e.forwardRef(({className:r,asContainer:t=!0,...o},a)=>{const n=v(),s=n?.size??"2",u=n?.menuVariant??"soft";return e.createElement("div",{...o,ref:a,className:(0,i.default)("rt-SidebarHeader",`rt-r-size-${s}`,`rt-menu-variant-${u}`,{"rt-SidebarHeader--container":t},r)})});R.displayName="Sidebar.Header";const L=e.forwardRef(({className:r,asContainer:t=!0,...o},a)=>{const n=v(),s=n?.size??"2",u=n?.menuVariant??"soft";return e.createElement("div",{...o,ref:a,className:(0,i.default)("rt-SidebarFooter",`rt-r-size-${s}`,`rt-menu-variant-${u}`,{"rt-SidebarFooter--container":t},r)})});L.displayName="Sidebar.Footer";const x=e.forwardRef(({className:r,...t},o)=>e.createElement(O.Separator,{...t,ref:o,className:(0,i.default)("rt-SidebarSeparator",r)}));x.displayName="Sidebar.Separator";const E=e.forwardRef(({className:r,...t},o)=>e.createElement("ul",{...t,ref:o,role:"menu",className:(0,i.default)("rt-BaseMenuViewport","rt-SidebarMenu",r)}));E.displayName="Sidebar.Menu";const z=e.forwardRef(({className:r,...t},o)=>e.createElement("li",{...t,ref:o,className:(0,i.default)("rt-SidebarMenuItem",r)}));z.displayName="Sidebar.MenuItem";const w=e.forwardRef(({asChild:r=!1,isActive:t=!1,shortcut:o,badge:a,className:n,children:s,onMouseEnter:u,onMouseLeave:m,onKeyDown:l,...p},M)=>{const[h,y]=e.useState(!1),S=v()?.size??"2",g=r?N.Slot:"button",{onClick:f}=p,Q=e.useCallback(d=>{switch(d.key){case"Enter":case" ":d.preventDefault(),f&&f(d);break;case"ArrowDown":{d.preventDefault();const C=d.currentTarget.nextElementSibling?.querySelector('[role="menuitem"]');C&&C.focus();break}case"ArrowUp":{d.preventDefault();const C=d.currentTarget.previousElementSibling?.querySelector('[role="menuitem"]');C&&C.focus();break}}l?.(d)},[f,l]);return e.createElement(g,{...p,ref:M,role:"menuitem","aria-current":t?"page":void 0,className:(0,i.default)("rt-reset","rt-BaseMenuItem","rt-SidebarMenuButton",n),"data-active":t||void 0,"data-highlighted":h||void 0,onKeyDown:Q,onMouseEnter:d=>{y(!0),u?.(d)},onMouseLeave:d=>{y(!1),m?.(d)}},r?s:e.createElement(e.Fragment,null,s,a&&e.createElement("div",{className:"rt-SidebarMenuBadge"},typeof a=="string"?e.createElement(T.Badge,{size:S,variant:"soft"},a):e.createElement(T.Badge,{size:a.size||S,variant:a.variant||"soft",color:a.color,highContrast:a.highContrast,radius:a.radius},a.content)),o&&e.createElement("div",{className:"rt-BaseMenuShortcut rt-SidebarMenuShortcut"},e.createElement(U.Kbd,{size:S},o))))});w.displayName="Sidebar.MenuButton";const G=e.forwardRef(({defaultOpen:r=!1,children:t,...o},a)=>e.createElement("div",{...o,ref:a},e.createElement(b.Accordion.Root,{type:"single",collapsible:!0,defaultValue:r?"item":void 0},e.createElement(b.Accordion.Item,{value:"item"},t))));G.displayName="Sidebar.MenuSub";const I=e.forwardRef(({asChild:r=!1,className:t,children:o,onMouseEnter:a,onMouseLeave:n,...s},u)=>{const[m,l]=e.useState(!1);return e.createElement(b.Accordion.Header,{asChild:!0},e.createElement("div",null,e.createElement(b.Accordion.Trigger,{...s,ref:u,asChild:r,role:"menuitem","aria-haspopup":"true",className:(0,i.default)("rt-reset","rt-BaseMenuItem","rt-SidebarMenuButton","rt-SidebarMenuSubTrigger",t),"data-highlighted":m||void 0,onMouseEnter:p=>{l(!0),a?.(p)},onMouseLeave:p=>{l(!1),n?.(p)}},r?o:e.createElement(e.Fragment,null,o,e.createElement(_.ThickChevronRightIcon,{className:(0,i.default)("rt-BaseMenuSubTriggerIcon","rt-SidebarMenuSubTriggerIcon")})))))});I.displayName="Sidebar.MenuSubTrigger";const V=e.forwardRef(({className:r,children:t,...o},a)=>e.createElement(b.Accordion.Content,{...o,ref:a,className:(0,i.default)("rt-SidebarMenuSubContent",r)},e.createElement("div",{className:"rt-SidebarMenuSubList"},t)));V.displayName="Sidebar.MenuSubContent";const D=e.forwardRef(({className:r,...t},o)=>e.createElement("div",{...t,ref:o,className:(0,i.default)("rt-BaseMenuGroup","rt-SidebarGroup",r)}));D.displayName="Sidebar.Group";const W=e.forwardRef(({asChild:r=!1,className:t,...o},a)=>e.createElement(r?N.Slot:"div",{...o,ref:a,role:"group",className:(0,i.default)("rt-BaseMenuLabel","rt-SidebarGroupLabel",t)}));W.displayName="Sidebar.GroupLabel";const A=e.forwardRef(({className:r,...t},o)=>e.createElement("div",{...t,ref:o,className:(0,i.default)("rt-SidebarGroupContent",r)}));A.displayName="Sidebar.GroupContent";
1
+ "use strict";"use client";var Y=Object.create;var v=Object.defineProperty;var Z=Object.getOwnPropertyDescriptor;var ee=Object.getOwnPropertyNames;var re=Object.getPrototypeOf,te=Object.prototype.hasOwnProperty;var oe=(r,t)=>{for(var o in t)v(r,o,{get:t[o],enumerable:!0})},F=(r,t,o,a)=>{if(t&&typeof t=="object"||typeof t=="function")for(let n of ee(t))!te.call(r,n)&&n!==o&&v(r,n,{get:()=>t[n],enumerable:!(a=Z(t,n))||a.enumerable});return r};var j=(r,t,o)=>(o=r!=null?Y(re(r)):{},F(t||!r||!r.__esModule?v(o,"default",{value:r,enumerable:!0}):o,r)),ae=r=>F(v({},"__esModule",{value:!0}),r);var ie={};oe(ie,{Content:()=>L,Footer:()=>E,Group:()=>A,GroupContent:()=>$,GroupLabel:()=>k,Header:()=>R,Menu:()=>w,MenuButton:()=>G,MenuItem:()=>V,MenuSub:()=>I,MenuSubContent:()=>W,MenuSubTrigger:()=>D,Root:()=>H,Separator:()=>z,ShellSidebarSectionContext:()=>B});module.exports=ae(ie);var e=j(require("react")),s=j(require("classnames")),x=require("./slot.js"),f=require("radix-ui"),m=require("./sidebar.props.js"),O=require("./theme.js"),_=require("./scroll-area.js"),q=require("./separator.js"),U=require("./icons.js"),J=require("../helpers/extract-props.js"),Q=require("./kbd.js"),T=require("./badge.js");const K=e.createContext(null);function P(){return e.useContext(K)}const B=e.createContext(null);function ne(){return e.useContext(B)}const H=e.forwardRef((r,t)=>{const o=(0,O.useThemeContext)(),{size:a=m.sidebarPropDefs.size.default,variant:n=m.sidebarPropDefs.variant.default,menuVariant:d=m.sidebarPropDefs.menuVariant.default,layout:u=m.sidebarPropDefs.layout.default,panelBackground:S,color:p,highContrast:l=m.sidebarPropDefs.highContrast.default}=r,{className:M,children:h,...C}=(0,J.extractProps)(r,m.sidebarPropDefs),{asChild:X,panelBackground:g,...y}=C,b=p||o.accentColor,N=ne(),i=u||N?.section||"panel",c=typeof a=="object"?a.initial||"2":a;return e.createElement("div",{...y,ref:t,"data-accent-color":b,className:(0,s.default)("rt-SidebarRoot",M)},e.createElement(K.Provider,{value:{size:c,menuVariant:d}},e.createElement("div",{className:(0,s.default)("rt-SidebarContainer",`rt-variant-${n}`,`rt-r-size-${c}`,`rt-menu-variant-${d}`,i&&`rt-layout-${i}`),"data-accent-color":b,"data-high-contrast":l||void 0,"data-panel-background":S,"data-layout":i},h)))});H.displayName="Sidebar.Root";const L=e.forwardRef(({className:r,children:t,role:o="navigation","aria-label":a="Main navigation",id:n,...d},u)=>{const S=P(),p=S?.size??"2",l=S?.menuVariant??"soft";return e.createElement(_.ScrollArea,{type:"hover"},e.createElement("div",{...d,ref:u,id:n,role:o,"aria-label":a,className:(0,s.default)("rt-BaseMenuContent","rt-SidebarContent",`rt-r-size-${p}`,`rt-menu-variant-${l}`,r)},t))});L.displayName="Sidebar.Content";const R=e.forwardRef(({className:r,asContainer:t=!0,...o},a)=>{const n=P(),d=n?.size??"2",u=n?.menuVariant??"soft";return e.createElement("div",{...o,ref:a,className:(0,s.default)("rt-SidebarHeader",`rt-r-size-${d}`,`rt-menu-variant-${u}`,{"rt-SidebarHeader--container":t},r)})});R.displayName="Sidebar.Header";const E=e.forwardRef(({className:r,asContainer:t=!0,...o},a)=>{const n=P(),d=n?.size??"2",u=n?.menuVariant??"soft";return e.createElement("div",{...o,ref:a,className:(0,s.default)("rt-SidebarFooter",`rt-r-size-${d}`,`rt-menu-variant-${u}`,{"rt-SidebarFooter--container":t},r)})});E.displayName="Sidebar.Footer";const z=e.forwardRef(({className:r,...t},o)=>e.createElement(q.Separator,{...t,ref:o,className:(0,s.default)("rt-SidebarSeparator",r)}));z.displayName="Sidebar.Separator";const w=e.forwardRef(({className:r,...t},o)=>e.createElement("ul",{...t,ref:o,role:"menu",className:(0,s.default)("rt-BaseMenuViewport","rt-SidebarMenu",r)}));w.displayName="Sidebar.Menu";const V=e.forwardRef(({className:r,...t},o)=>e.createElement("li",{...t,ref:o,className:(0,s.default)("rt-SidebarMenuItem",r)}));V.displayName="Sidebar.MenuItem";const G=e.forwardRef(({asChild:r=!1,isActive:t=!1,shortcut:o,badge:a,className:n,children:d,onMouseEnter:u,onMouseLeave:S,onKeyDown:p,...l},M)=>{const[h,C]=e.useState(!1),g=P()?.size??"2",y=r?x.Slot:"button",{onClick:b}=l,N=e.useCallback(i=>{switch(i.key){case"Enter":case" ":i.preventDefault(),b&&b(i);break;case"ArrowDown":{i.preventDefault();const c=i.currentTarget.nextElementSibling?.querySelector('[role="menuitem"]');c&&c.focus();break}case"ArrowUp":{i.preventDefault();const c=i.currentTarget.previousElementSibling?.querySelector('[role="menuitem"]');c&&c.focus();break}}p?.(i)},[b,p]);return e.createElement(y,{...l,ref:M,role:"menuitem","aria-current":t?"page":void 0,className:(0,s.default)("rt-reset","rt-BaseMenuItem","rt-SidebarMenuButton",n),"data-active":t||void 0,"data-highlighted":h||void 0,onKeyDown:N,onMouseEnter:i=>{C(!0),u?.(i)},onMouseLeave:i=>{C(!1),S?.(i)}},r?d:e.createElement(e.Fragment,null,d,a&&e.createElement("div",{className:"rt-SidebarMenuBadge"},typeof a=="string"?e.createElement(T.Badge,{size:g,variant:"soft"},a):e.createElement(T.Badge,{size:a.size||g,variant:a.variant||"soft",color:a.color,highContrast:a.highContrast,radius:a.radius},a.content)),o&&e.createElement("div",{className:"rt-BaseMenuShortcut rt-SidebarMenuShortcut"},e.createElement(Q.Kbd,{size:g},o))))});G.displayName="Sidebar.MenuButton";const I=e.forwardRef(({defaultOpen:r=!1,children:t,...o},a)=>e.createElement("div",{...o,ref:a},e.createElement(f.Accordion.Root,{type:"single",collapsible:!0,defaultValue:r?"item":void 0},e.createElement(f.Accordion.Item,{value:"item"},t))));I.displayName="Sidebar.MenuSub";const D=e.forwardRef(({asChild:r=!1,className:t,children:o,onMouseEnter:a,onMouseLeave:n,...d},u)=>{const[S,p]=e.useState(!1);return e.createElement(f.Accordion.Header,{asChild:!0},e.createElement("div",null,e.createElement(f.Accordion.Trigger,{...d,ref:u,asChild:r,role:"menuitem","aria-haspopup":"true",className:(0,s.default)("rt-reset","rt-BaseMenuItem","rt-SidebarMenuButton","rt-SidebarMenuSubTrigger",t),"data-highlighted":S||void 0,onMouseEnter:l=>{p(!0),a?.(l)},onMouseLeave:l=>{p(!1),n?.(l)}},r?o:e.createElement(e.Fragment,null,o,e.createElement(U.ThickChevronRightIcon,{className:(0,s.default)("rt-BaseMenuSubTriggerIcon","rt-SidebarMenuSubTriggerIcon")})))))});D.displayName="Sidebar.MenuSubTrigger";const W=e.forwardRef(({className:r,children:t,...o},a)=>e.createElement(f.Accordion.Content,{...o,ref:a,className:(0,s.default)("rt-SidebarMenuSubContent",r)},e.createElement("div",{className:"rt-SidebarMenuSubList"},t)));W.displayName="Sidebar.MenuSubContent";const A=e.forwardRef(({className:r,...t},o)=>e.createElement("div",{...t,ref:o,className:(0,s.default)("rt-BaseMenuGroup","rt-SidebarGroup",r)}));A.displayName="Sidebar.Group";const k=e.forwardRef(({asChild:r=!1,className:t,...o},a)=>e.createElement(r?x.Slot:"div",{...o,ref:a,role:"group",className:(0,s.default)("rt-BaseMenuLabel","rt-SidebarGroupLabel",t)}));k.displayName="Sidebar.GroupLabel";const $=e.forwardRef(({className:r,...t},o)=>e.createElement("div",{...t,ref:o,className:(0,s.default)("rt-SidebarGroupContent",r)}));$.displayName="Sidebar.GroupContent";
2
2
  //# sourceMappingURL=sidebar.js.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../src/components/sidebar.tsx"],
4
- "sourcesContent": ["'use client';\n\nimport * as React from 'react';\nimport classNames from 'classnames';\nimport { Slot } from './slot.js';\nimport { Accordion } from 'radix-ui';\n\nimport { sidebarPropDefs } from './sidebar.props.js';\nimport { useThemeContext } from './theme.js';\n// import { IconButton } from './icon-button.js';\nimport { ScrollArea } from './scroll-area.js';\nimport { Separator } from './separator.js';\nimport { ThickChevronRightIcon } from './icons.js';\nimport { extractProps } from '../helpers/extract-props.js';\nimport { Kbd } from './kbd.js';\nimport { Badge } from './badge.js';\n\nimport type { ComponentPropsWithout, RemovedProps } from '../helpers/component-props.js';\nimport type { GetPropDefTypes } from '../props/prop-def.js';\nimport type { BadgeProps } from './badge.js';\n\n// Badge configuration type for sidebar menu buttons\ntype BadgeConfig = {\n content: React.ReactNode;\n variant?: BadgeProps['variant'];\n size?: BadgeProps['size'];\n color?: BadgeProps['color'];\n highContrast?: BadgeProps['highContrast'];\n radius?: BadgeProps['radius'];\n};\n\n// Internal presentational context (not exported) for size/menu variant\ntype SidebarVisualContextValue = {\n size: '1' | '2';\n menuVariant: 'solid' | 'soft';\n};\nconst SidebarVisualContext = React.createContext<SidebarVisualContextValue | null>(null);\nfunction useSidebarVisual() {\n return React.useContext(SidebarVisualContext);\n}\n\n// Main Sidebar component\ntype SidebarOwnProps = GetPropDefTypes<typeof sidebarPropDefs>;\ninterface SidebarProps extends ComponentPropsWithout<'div', RemovedProps>, SidebarOwnProps {}\n\nconst Sidebar = React.forwardRef<HTMLDivElement, SidebarProps>((props, forwardedRef) => {\n const themeContext = useThemeContext();\n\n const {\n size = sidebarPropDefs.size.default,\n variant = sidebarPropDefs.variant.default,\n menuVariant = sidebarPropDefs.menuVariant.default,\n // type = sidebarPropDefs.type.default,\n // side = sidebarPropDefs.side.default,\n // collapsible = sidebarPropDefs.collapsible.default,\n panelBackground,\n color,\n highContrast = sidebarPropDefs.highContrast.default,\n } = props;\n\n const { className, children, ...rootProps } = extractProps(props, sidebarPropDefs);\n const { asChild: _, panelBackground: __, ...safeRootProps } = rootProps; // Remove asChild and panelBackground from DOM props\n const resolvedColor = color || themeContext.accentColor;\n\n // Update context with current props - we'll pass the resolved values\n const resolvedSize = typeof size === 'object' ? size.initial || '2' : size;\n return (\n <div\n {...safeRootProps}\n ref={forwardedRef}\n data-accent-color={resolvedColor}\n className={classNames('rt-SidebarRoot', className)}\n >\n <SidebarVisualContext.Provider value={{ size: resolvedSize, menuVariant }}>\n <div\n className={classNames(\n 'rt-SidebarContainer',\n `rt-variant-${variant}`,\n `rt-r-size-${resolvedSize}`,\n `rt-menu-variant-${menuVariant}`,\n )}\n data-accent-color={resolvedColor}\n data-high-contrast={highContrast || undefined}\n data-panel-background={panelBackground}\n >\n {children}\n </div>\n </SidebarVisualContext.Provider>\n </div>\n );\n});\nSidebar.displayName = 'Sidebar.Root';\n\n// Sidebar content area\ninterface SidebarContentProps extends React.ComponentPropsWithoutRef<'div'> {\n id?: string;\n role?: 'navigation' | 'none';\n 'aria-label'?: string;\n}\n\nconst SidebarContent = React.forwardRef<HTMLDivElement, SidebarContentProps>(\n (\n {\n className,\n children,\n role = 'navigation',\n 'aria-label': ariaLabel = 'Main navigation',\n id,\n ...props\n },\n forwardedRef,\n ) => {\n const visual = useSidebarVisual();\n const size = visual?.size ?? '2';\n const menuVariant = visual?.menuVariant ?? 'soft';\n\n return (\n <ScrollArea type=\"hover\">\n <div\n {...props}\n ref={forwardedRef}\n id={id}\n role={role}\n aria-label={ariaLabel}\n className={classNames(\n 'rt-BaseMenuContent',\n 'rt-SidebarContent',\n `rt-r-size-${size}`,\n `rt-menu-variant-${menuVariant}`,\n className,\n )}\n >\n {children}\n </div>\n </ScrollArea>\n );\n },\n);\nSidebarContent.displayName = 'Sidebar.Content';\n\n// Sidebar header\ninterface SidebarHeaderProps extends React.ComponentPropsWithoutRef<'div'> {\n /**\n * Whether to use the default flex container layout.\n * @default true\n */\n asContainer?: boolean;\n}\n\nconst SidebarHeader = React.forwardRef<HTMLDivElement, SidebarHeaderProps>(\n ({ className, asContainer = true, ...props }, forwardedRef) => {\n const visual = useSidebarVisual();\n const size = visual?.size ?? '2';\n const menuVariant = visual?.menuVariant ?? 'soft';\n\n return (\n <div\n {...props}\n ref={forwardedRef}\n className={classNames(\n 'rt-SidebarHeader',\n `rt-r-size-${size}`,\n `rt-menu-variant-${menuVariant}`,\n {\n 'rt-SidebarHeader--container': asContainer,\n },\n className,\n )}\n />\n );\n },\n);\nSidebarHeader.displayName = 'Sidebar.Header';\n\n// Sidebar footer\ninterface SidebarFooterProps extends React.ComponentPropsWithoutRef<'div'> {\n /**\n * Whether to use the default flex container layout.\n * @default true\n */\n asContainer?: boolean;\n}\n\nconst SidebarFooter = React.forwardRef<HTMLDivElement, SidebarFooterProps>(\n ({ className, asContainer = true, ...props }, forwardedRef) => {\n const visual = useSidebarVisual();\n const size = visual?.size ?? '2';\n const menuVariant = visual?.menuVariant ?? 'soft';\n\n return (\n <div\n {...props}\n ref={forwardedRef}\n className={classNames(\n 'rt-SidebarFooter',\n `rt-r-size-${size}`,\n `rt-menu-variant-${menuVariant}`,\n {\n 'rt-SidebarFooter--container': asContainer,\n },\n className,\n )}\n />\n );\n },\n);\nSidebarFooter.displayName = 'Sidebar.Footer';\n\n// Sidebar trigger button\n// removed Trigger in presentational-only Sidebar\n\n// Removed SidebarInset - not needed\n\n// Sidebar separator\ninterface SidebarSeparatorProps extends ComponentPropsWithout<typeof Separator, RemovedProps> {}\n\nconst SidebarSeparator = React.forwardRef<\n React.ComponentRef<typeof Separator>,\n SidebarSeparatorProps\n>(({ className, ...props }, forwardedRef) => (\n <Separator\n {...props}\n ref={forwardedRef}\n className={classNames('rt-SidebarSeparator', className)}\n />\n));\nSidebarSeparator.displayName = 'Sidebar.Separator';\n\n// Menu components - reusing dropdown menu structure\ninterface SidebarMenuProps extends React.ComponentPropsWithoutRef<'ul'> {}\n\nconst SidebarMenu = React.forwardRef<HTMLUListElement, SidebarMenuProps>(\n ({ className, ...props }, forwardedRef) => (\n <ul\n {...props}\n ref={forwardedRef}\n role=\"menu\"\n className={classNames('rt-BaseMenuViewport', 'rt-SidebarMenu', className)}\n />\n ),\n);\nSidebarMenu.displayName = 'Sidebar.Menu';\n\ninterface SidebarMenuItemProps extends React.ComponentPropsWithoutRef<'li'> {}\n\nconst SidebarMenuItem = React.forwardRef<HTMLLIElement, SidebarMenuItemProps>(\n ({ className, ...props }, forwardedRef) => (\n <li {...props} ref={forwardedRef} className={classNames('rt-SidebarMenuItem', className)} />\n ),\n);\nSidebarMenuItem.displayName = 'Sidebar.MenuItem';\n\ninterface SidebarMenuButtonProps extends React.ComponentPropsWithoutRef<'button'> {\n asChild?: boolean;\n isActive?: boolean;\n shortcut?: React.ReactNode;\n badge?: string | BadgeConfig;\n}\n\nconst SidebarMenuButton = React.forwardRef<HTMLButtonElement, SidebarMenuButtonProps>(\n (\n {\n asChild = false,\n isActive = false,\n shortcut,\n badge,\n className,\n children,\n onMouseEnter,\n onMouseLeave,\n onKeyDown,\n ...props\n },\n forwardedRef,\n ) => {\n const [isHighlighted, setIsHighlighted] = React.useState(false);\n const visual = useSidebarVisual();\n const sidebarSize = visual?.size ?? '2';\n\n const Comp = asChild ? Slot : 'button';\n\n const { onClick } = props;\n const handleKeyDown = React.useCallback(\n (event: React.KeyboardEvent<HTMLButtonElement>) => {\n switch (event.key) {\n case 'Enter':\n case ' ':\n event.preventDefault();\n if (onClick) onClick(event as any);\n break;\n case 'ArrowDown': {\n event.preventDefault();\n // Focus next menu item\n const nextItem = (event.currentTarget as HTMLElement).nextElementSibling?.querySelector(\n '[role=\"menuitem\"]',\n ) as HTMLElement;\n if (nextItem) nextItem.focus();\n break;\n }\n case 'ArrowUp': {\n event.preventDefault();\n // Focus previous menu item\n const prevItem = (\n event.currentTarget as HTMLElement\n ).previousElementSibling?.querySelector('[role=\"menuitem\"]') as HTMLElement;\n if (prevItem) prevItem.focus();\n break;\n }\n }\n onKeyDown?.(event);\n },\n [onClick, onKeyDown],\n );\n\n return (\n <Comp\n {...props}\n ref={forwardedRef}\n role=\"menuitem\"\n aria-current={isActive ? 'page' : undefined}\n className={classNames('rt-reset', 'rt-BaseMenuItem', 'rt-SidebarMenuButton', className)}\n data-active={isActive || undefined}\n data-highlighted={isHighlighted || undefined}\n onKeyDown={handleKeyDown}\n onMouseEnter={(event) => {\n setIsHighlighted(true);\n onMouseEnter?.(event);\n }}\n onMouseLeave={(event) => {\n setIsHighlighted(false);\n onMouseLeave?.(event);\n }}\n >\n {asChild ? (\n children\n ) : (\n <>\n {children}\n {/* Badge with soft variant default and size mapping to sidebar size */}\n {badge && (\n <div className=\"rt-SidebarMenuBadge\">\n {typeof badge === 'string' ? (\n <Badge size={sidebarSize} variant=\"soft\">\n {badge}\n </Badge>\n ) : (\n <Badge\n size={badge.size || sidebarSize}\n variant={badge.variant || 'soft'}\n color={badge.color}\n highContrast={badge.highContrast}\n radius={badge.radius}\n >\n {badge.content}\n </Badge>\n )}\n </div>\n )}\n {shortcut && (\n <div className=\"rt-BaseMenuShortcut rt-SidebarMenuShortcut\">\n <Kbd size={sidebarSize}>{shortcut}</Kbd>\n </div>\n )}\n </>\n )}\n </Comp>\n );\n },\n);\nSidebarMenuButton.displayName = 'Sidebar.MenuButton';\n\n// Sub-menu components using Radix Accordion\ninterface SidebarMenuSubProps extends React.ComponentPropsWithoutRef<'div'> {\n defaultOpen?: boolean;\n}\n\nconst SidebarMenuSub = React.forwardRef<HTMLDivElement, SidebarMenuSubProps>(\n ({ defaultOpen = false, children, ...props }, forwardedRef) => {\n return (\n <div {...props} ref={forwardedRef}>\n <Accordion.Root type=\"single\" collapsible defaultValue={defaultOpen ? 'item' : undefined}>\n <Accordion.Item value=\"item\">{children}</Accordion.Item>\n </Accordion.Root>\n </div>\n );\n },\n);\nSidebarMenuSub.displayName = 'Sidebar.MenuSub';\n\ninterface SidebarMenuSubTriggerProps\n extends React.ComponentPropsWithoutRef<typeof Accordion.Trigger> {\n asChild?: boolean;\n}\n\nconst SidebarMenuSubTrigger = React.forwardRef<\n React.ElementRef<typeof Accordion.Trigger>,\n SidebarMenuSubTriggerProps\n>(\n (\n { asChild = false, className, children, onMouseEnter, onMouseLeave, ...props },\n forwardedRef,\n ) => {\n const [isHighlighted, setIsHighlighted] = React.useState(false);\n\n return (\n <Accordion.Header asChild>\n <div>\n <Accordion.Trigger\n {...props}\n ref={forwardedRef}\n asChild={asChild}\n role=\"menuitem\"\n aria-haspopup=\"true\"\n className={classNames(\n 'rt-reset',\n 'rt-BaseMenuItem',\n 'rt-SidebarMenuButton',\n 'rt-SidebarMenuSubTrigger',\n className,\n )}\n data-highlighted={isHighlighted || undefined}\n onMouseEnter={(event) => {\n setIsHighlighted(true);\n onMouseEnter?.(event);\n }}\n onMouseLeave={(event) => {\n setIsHighlighted(false);\n onMouseLeave?.(event);\n }}\n >\n {asChild ? (\n children\n ) : (\n <>\n {children}\n <ThickChevronRightIcon\n className={classNames(\n 'rt-BaseMenuSubTriggerIcon',\n 'rt-SidebarMenuSubTriggerIcon',\n )}\n />\n </>\n )}\n </Accordion.Trigger>\n </div>\n </Accordion.Header>\n );\n },\n);\nSidebarMenuSubTrigger.displayName = 'Sidebar.MenuSubTrigger';\n\ninterface SidebarMenuSubContentProps\n extends React.ComponentPropsWithoutRef<typeof Accordion.Content> {}\n\nconst SidebarMenuSubContent = React.forwardRef<\n React.ElementRef<typeof Accordion.Content>,\n SidebarMenuSubContentProps\n>(({ className, children, ...props }, forwardedRef) => {\n return (\n <Accordion.Content\n {...props}\n ref={forwardedRef}\n className={classNames('rt-SidebarMenuSubContent', className)}\n >\n <div className=\"rt-SidebarMenuSubList\">{children}</div>\n </Accordion.Content>\n );\n});\nSidebarMenuSubContent.displayName = 'Sidebar.MenuSubContent';\n\n// Group components\ninterface SidebarGroupProps extends React.ComponentPropsWithoutRef<'div'> {}\n\nconst SidebarGroup = React.forwardRef<HTMLDivElement, SidebarGroupProps>(\n ({ className, ...props }, forwardedRef) => (\n <div\n {...props}\n ref={forwardedRef}\n className={classNames('rt-BaseMenuGroup', 'rt-SidebarGroup', className)}\n />\n ),\n);\nSidebarGroup.displayName = 'Sidebar.Group';\n\ninterface SidebarGroupLabelProps extends React.ComponentPropsWithoutRef<'div'> {\n asChild?: boolean;\n}\n\nconst SidebarGroupLabel = React.forwardRef<HTMLDivElement, SidebarGroupLabelProps>(\n ({ asChild = false, className, ...props }, forwardedRef) => {\n const Comp = asChild ? Slot : 'div';\n\n return (\n <Comp\n {...props}\n ref={forwardedRef}\n role=\"group\"\n className={classNames('rt-BaseMenuLabel', 'rt-SidebarGroupLabel', className)}\n />\n );\n },\n);\nSidebarGroupLabel.displayName = 'Sidebar.GroupLabel';\n\ninterface SidebarGroupContentProps extends React.ComponentPropsWithoutRef<'div'> {}\n\nconst SidebarGroupContent = React.forwardRef<HTMLDivElement, SidebarGroupContentProps>(\n ({ className, ...props }, forwardedRef) => (\n <div\n {...props}\n ref={forwardedRef}\n className={classNames('rt-SidebarGroupContent', className)}\n />\n ),\n);\nSidebarGroupContent.displayName = 'Sidebar.GroupContent';\n\n// Export all components following shadcn's pattern\nexport {\n Sidebar as Root,\n SidebarContent as Content,\n SidebarHeader as Header,\n SidebarFooter as Footer,\n SidebarSeparator as Separator,\n SidebarMenu as Menu,\n SidebarMenuItem as MenuItem,\n SidebarMenuButton as MenuButton,\n SidebarMenuSub as MenuSub,\n SidebarMenuSubTrigger as MenuSubTrigger,\n SidebarMenuSubContent as MenuSubContent,\n SidebarGroup as Group,\n SidebarGroupLabel as GroupLabel,\n SidebarGroupContent as GroupContent,\n};\n\n/**\n * Enhanced Sidebar Header and Footer Usage Examples:\n *\n * 1. Simple default container (backwards compatible):\n * <Sidebar.Header>\n * <Logo />\n * <span>App Name</span>\n * </Sidebar.Header>\n *\n * 2. Custom flex layout:\n * <Sidebar.Header className=\"rt-justify-between rt-gap-3\">\n * <Logo />\n * <Sidebar.MenuButton>\n * <SettingsIcon />\n * </Sidebar.MenuButton>\n * </Sidebar.Header>\n *\n * 3. Column layout for multiple rows:\n * <Sidebar.Header className=\"rt-flex-col rt-gap-2\" asContainer={false}>\n * <div className=\"rt-flex rt-items-center rt-gap-2\">\n * <Logo />\n * <span>App Name</span>\n * </div>\n * <Sidebar.MenuButton>\n * <UserAvatar />\n * <span>John Doe</span>\n * </Sidebar.MenuButton>\n * </Sidebar.Header>\n *\n * 4. Interactive footer with menu button:\n * <Sidebar.Footer>\n * <Sidebar.MenuButton>\n * <UserIcon />\n * <span>Settings</span>\n * <ChevronUpIcon />\n * </Sidebar.MenuButton>\n * </Sidebar.Footer>\n *\n * 5. Custom footer layout:\n * <Sidebar.Footer className=\"rt-justify-between\">\n * <span>v1.0.0</span>\n * <Sidebar.MenuButton>\n * <HelpIcon />\n * </Sidebar.MenuButton>\n * </Sidebar.Footer>\n *\n * Available utility classes:\n * - Layout: rt-flex-row, rt-flex-col\n * - Alignment: rt-items-center, rt-items-start, rt-items-end\n * - Justification: rt-justify-between, rt-justify-center, rt-justify-start, rt-justify-end\n * - Gap: rt-gap-1, rt-gap-2, rt-gap-3, rt-gap-4\n */\n\nexport type {\n SidebarProps as RootProps,\n SidebarContentProps as ContentProps,\n SidebarHeaderProps as HeaderProps,\n SidebarFooterProps as FooterProps,\n BadgeConfig,\n};\n"],
5
- "mappings": "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",
6
- "names": ["sidebar_exports", "__export", "SidebarContent", "SidebarFooter", "SidebarGroup", "SidebarGroupContent", "SidebarGroupLabel", "SidebarHeader", "SidebarMenu", "SidebarMenuButton", "SidebarMenuItem", "SidebarMenuSub", "SidebarMenuSubContent", "SidebarMenuSubTrigger", "Sidebar", "SidebarSeparator", "__toCommonJS", "React", "import_classnames", "import_slot", "import_radix_ui", "import_sidebar_props", "import_theme", "import_scroll_area", "import_separator", "import_icons", "import_extract_props", "import_kbd", "import_badge", "SidebarVisualContext", "useSidebarVisual", "props", "forwardedRef", "themeContext", "size", "variant", "menuVariant", "panelBackground", "color", "highContrast", "className", "children", "rootProps", "_", "__", "safeRootProps", "resolvedColor", "resolvedSize", "classNames", "role", "ariaLabel", "id", "visual", "asContainer", "asChild", "isActive", "shortcut", "badge", "onMouseEnter", "onMouseLeave", "onKeyDown", "isHighlighted", "setIsHighlighted", "sidebarSize", "Comp", "onClick", "handleKeyDown", "event", "nextItem", "prevItem", "defaultOpen"]
4
+ "sourcesContent": ["'use client';\n\nimport * as React from 'react';\nimport classNames from 'classnames';\nimport { Slot } from './slot.js';\nimport { Accordion } from 'radix-ui';\n\nimport { sidebarPropDefs } from './sidebar.props.js';\nimport { useThemeContext } from './theme.js';\n// import { IconButton } from './icon-button.js';\nimport { ScrollArea } from './scroll-area.js';\nimport { Separator } from './separator.js';\nimport { ThickChevronRightIcon } from './icons.js';\nimport { extractProps } from '../helpers/extract-props.js';\nimport { Kbd } from './kbd.js';\nimport { Badge } from './badge.js';\n\nimport type { ComponentPropsWithout, RemovedProps } from '../helpers/component-props.js';\nimport type { GetPropDefTypes } from '../props/prop-def.js';\nimport type { BadgeProps } from './badge.js';\n\n// Badge configuration type for sidebar menu buttons\ntype BadgeConfig = {\n content: React.ReactNode;\n variant?: BadgeProps['variant'];\n size?: BadgeProps['size'];\n color?: BadgeProps['color'];\n highContrast?: BadgeProps['highContrast'];\n radius?: BadgeProps['radius'];\n};\n\n// Internal presentational context (not exported) for size/menu variant\ntype SidebarVisualContextValue = {\n size: '1' | '2';\n menuVariant: 'solid' | 'soft';\n};\nconst SidebarVisualContext = React.createContext<SidebarVisualContextValue | null>(null);\nfunction useSidebarVisual() {\n return React.useContext(SidebarVisualContext);\n}\n\n// Context detection for Shell.Sidebar integration\ntype ShellSidebarSectionContextValue = {\n side: 'start' | 'end';\n section: 'rail' | 'panel';\n};\n\n// Create a context that Shell.Sidebar can provide\nconst ShellSidebarSectionContext = React.createContext<ShellSidebarSectionContextValue | null>(\n null,\n);\n\n// This context comes from Shell.Sidebar when Sidebar is used within Shell\nfunction useShellSidebarSection(): ShellSidebarSectionContextValue | null {\n return React.useContext(ShellSidebarSectionContext);\n}\n\n// Main Sidebar component\ntype SidebarOwnProps = GetPropDefTypes<typeof sidebarPropDefs>;\ninterface SidebarProps extends ComponentPropsWithout<'div', RemovedProps>, SidebarOwnProps {}\n\nconst Sidebar = React.forwardRef<HTMLDivElement, SidebarProps>((props, forwardedRef) => {\n const themeContext = useThemeContext();\n\n const {\n size = sidebarPropDefs.size.default,\n variant = sidebarPropDefs.variant.default,\n menuVariant = sidebarPropDefs.menuVariant.default,\n layout = sidebarPropDefs.layout.default,\n // type = sidebarPropDefs.type.default,\n // side = sidebarPropDefs.side.default,\n // collapsible = sidebarPropDefs.collapsible.default,\n panelBackground,\n color,\n highContrast = sidebarPropDefs.highContrast.default,\n } = props;\n\n const { className, children, ...rootProps } = extractProps(props, sidebarPropDefs);\n const { asChild: _, panelBackground: __, ...safeRootProps } = rootProps; // Remove asChild and panelBackground from DOM props\n const resolvedColor = color || themeContext.accentColor;\n\n // Detect Shell.Sidebar context to auto-resolve layout\n const shellSection = useShellSidebarSection();\n const resolvedLayout = layout || shellSection?.section || 'panel'; // Default to 'panel' if no context\n\n // Update context with current props - we'll pass the resolved values\n const resolvedSize = typeof size === 'object' ? size.initial || '2' : size;\n return (\n <div\n {...safeRootProps}\n ref={forwardedRef}\n data-accent-color={resolvedColor}\n className={classNames('rt-SidebarRoot', className)}\n >\n <SidebarVisualContext.Provider value={{ size: resolvedSize, menuVariant }}>\n <div\n className={classNames(\n 'rt-SidebarContainer',\n `rt-variant-${variant}`,\n `rt-r-size-${resolvedSize}`,\n `rt-menu-variant-${menuVariant}`,\n resolvedLayout && `rt-layout-${resolvedLayout}`,\n )}\n data-accent-color={resolvedColor}\n data-high-contrast={highContrast || undefined}\n data-panel-background={panelBackground}\n data-layout={resolvedLayout}\n >\n {children}\n </div>\n </SidebarVisualContext.Provider>\n </div>\n );\n});\nSidebar.displayName = 'Sidebar.Root';\n\n// Sidebar content area\ninterface SidebarContentProps extends React.ComponentPropsWithoutRef<'div'> {\n id?: string;\n role?: 'navigation' | 'none';\n 'aria-label'?: string;\n}\n\nconst SidebarContent = React.forwardRef<HTMLDivElement, SidebarContentProps>(\n (\n {\n className,\n children,\n role = 'navigation',\n 'aria-label': ariaLabel = 'Main navigation',\n id,\n ...props\n },\n forwardedRef,\n ) => {\n const visual = useSidebarVisual();\n const size = visual?.size ?? '2';\n const menuVariant = visual?.menuVariant ?? 'soft';\n\n return (\n <ScrollArea type=\"hover\">\n <div\n {...props}\n ref={forwardedRef}\n id={id}\n role={role}\n aria-label={ariaLabel}\n className={classNames(\n 'rt-BaseMenuContent',\n 'rt-SidebarContent',\n `rt-r-size-${size}`,\n `rt-menu-variant-${menuVariant}`,\n className,\n )}\n >\n {children}\n </div>\n </ScrollArea>\n );\n },\n);\nSidebarContent.displayName = 'Sidebar.Content';\n\n// Sidebar header\ninterface SidebarHeaderProps extends React.ComponentPropsWithoutRef<'div'> {\n /**\n * Whether to use the default flex container layout.\n * @default true\n */\n asContainer?: boolean;\n}\n\nconst SidebarHeader = React.forwardRef<HTMLDivElement, SidebarHeaderProps>(\n ({ className, asContainer = true, ...props }, forwardedRef) => {\n const visual = useSidebarVisual();\n const size = visual?.size ?? '2';\n const menuVariant = visual?.menuVariant ?? 'soft';\n\n return (\n <div\n {...props}\n ref={forwardedRef}\n className={classNames(\n 'rt-SidebarHeader',\n `rt-r-size-${size}`,\n `rt-menu-variant-${menuVariant}`,\n {\n 'rt-SidebarHeader--container': asContainer,\n },\n className,\n )}\n />\n );\n },\n);\nSidebarHeader.displayName = 'Sidebar.Header';\n\n// Sidebar footer\ninterface SidebarFooterProps extends React.ComponentPropsWithoutRef<'div'> {\n /**\n * Whether to use the default flex container layout.\n * @default true\n */\n asContainer?: boolean;\n}\n\nconst SidebarFooter = React.forwardRef<HTMLDivElement, SidebarFooterProps>(\n ({ className, asContainer = true, ...props }, forwardedRef) => {\n const visual = useSidebarVisual();\n const size = visual?.size ?? '2';\n const menuVariant = visual?.menuVariant ?? 'soft';\n\n return (\n <div\n {...props}\n ref={forwardedRef}\n className={classNames(\n 'rt-SidebarFooter',\n `rt-r-size-${size}`,\n `rt-menu-variant-${menuVariant}`,\n {\n 'rt-SidebarFooter--container': asContainer,\n },\n className,\n )}\n />\n );\n },\n);\nSidebarFooter.displayName = 'Sidebar.Footer';\n\n// Sidebar trigger button\n// removed Trigger in presentational-only Sidebar\n\n// Removed SidebarInset - not needed\n\n// Sidebar separator\ninterface SidebarSeparatorProps extends ComponentPropsWithout<typeof Separator, RemovedProps> {}\n\nconst SidebarSeparator = React.forwardRef<\n React.ComponentRef<typeof Separator>,\n SidebarSeparatorProps\n>(({ className, ...props }, forwardedRef) => (\n <Separator\n {...props}\n ref={forwardedRef}\n className={classNames('rt-SidebarSeparator', className)}\n />\n));\nSidebarSeparator.displayName = 'Sidebar.Separator';\n\n// Menu components - reusing dropdown menu structure\ninterface SidebarMenuProps extends React.ComponentPropsWithoutRef<'ul'> {}\n\nconst SidebarMenu = React.forwardRef<HTMLUListElement, SidebarMenuProps>(\n ({ className, ...props }, forwardedRef) => (\n <ul\n {...props}\n ref={forwardedRef}\n role=\"menu\"\n className={classNames('rt-BaseMenuViewport', 'rt-SidebarMenu', className)}\n />\n ),\n);\nSidebarMenu.displayName = 'Sidebar.Menu';\n\ninterface SidebarMenuItemProps extends React.ComponentPropsWithoutRef<'li'> {}\n\nconst SidebarMenuItem = React.forwardRef<HTMLLIElement, SidebarMenuItemProps>(\n ({ className, ...props }, forwardedRef) => (\n <li {...props} ref={forwardedRef} className={classNames('rt-SidebarMenuItem', className)} />\n ),\n);\nSidebarMenuItem.displayName = 'Sidebar.MenuItem';\n\ninterface SidebarMenuButtonProps extends React.ComponentPropsWithoutRef<'button'> {\n asChild?: boolean;\n isActive?: boolean;\n shortcut?: React.ReactNode;\n badge?: string | BadgeConfig;\n}\n\nconst SidebarMenuButton = React.forwardRef<HTMLButtonElement, SidebarMenuButtonProps>(\n (\n {\n asChild = false,\n isActive = false,\n shortcut,\n badge,\n className,\n children,\n onMouseEnter,\n onMouseLeave,\n onKeyDown,\n ...props\n },\n forwardedRef,\n ) => {\n const [isHighlighted, setIsHighlighted] = React.useState(false);\n const visual = useSidebarVisual();\n const sidebarSize = visual?.size ?? '2';\n\n const Comp = asChild ? Slot : 'button';\n\n const { onClick } = props;\n const handleKeyDown = React.useCallback(\n (event: React.KeyboardEvent<HTMLButtonElement>) => {\n switch (event.key) {\n case 'Enter':\n case ' ':\n event.preventDefault();\n if (onClick) onClick(event as any);\n break;\n case 'ArrowDown': {\n event.preventDefault();\n // Focus next menu item\n const nextItem = (event.currentTarget as HTMLElement).nextElementSibling?.querySelector(\n '[role=\"menuitem\"]',\n ) as HTMLElement;\n if (nextItem) nextItem.focus();\n break;\n }\n case 'ArrowUp': {\n event.preventDefault();\n // Focus previous menu item\n const prevItem = (\n event.currentTarget as HTMLElement\n ).previousElementSibling?.querySelector('[role=\"menuitem\"]') as HTMLElement;\n if (prevItem) prevItem.focus();\n break;\n }\n }\n onKeyDown?.(event);\n },\n [onClick, onKeyDown],\n );\n\n return (\n <Comp\n {...props}\n ref={forwardedRef}\n role=\"menuitem\"\n aria-current={isActive ? 'page' : undefined}\n className={classNames('rt-reset', 'rt-BaseMenuItem', 'rt-SidebarMenuButton', className)}\n data-active={isActive || undefined}\n data-highlighted={isHighlighted || undefined}\n onKeyDown={handleKeyDown}\n onMouseEnter={(event) => {\n setIsHighlighted(true);\n onMouseEnter?.(event);\n }}\n onMouseLeave={(event) => {\n setIsHighlighted(false);\n onMouseLeave?.(event);\n }}\n >\n {asChild ? (\n children\n ) : (\n <>\n {children}\n {/* Badge with soft variant default and size mapping to sidebar size */}\n {badge && (\n <div className=\"rt-SidebarMenuBadge\">\n {typeof badge === 'string' ? (\n <Badge size={sidebarSize} variant=\"soft\">\n {badge}\n </Badge>\n ) : (\n <Badge\n size={badge.size || sidebarSize}\n variant={badge.variant || 'soft'}\n color={badge.color}\n highContrast={badge.highContrast}\n radius={badge.radius}\n >\n {badge.content}\n </Badge>\n )}\n </div>\n )}\n {shortcut && (\n <div className=\"rt-BaseMenuShortcut rt-SidebarMenuShortcut\">\n <Kbd size={sidebarSize}>{shortcut}</Kbd>\n </div>\n )}\n </>\n )}\n </Comp>\n );\n },\n);\nSidebarMenuButton.displayName = 'Sidebar.MenuButton';\n\n// Sub-menu components using Radix Accordion\ninterface SidebarMenuSubProps extends React.ComponentPropsWithoutRef<'div'> {\n defaultOpen?: boolean;\n}\n\nconst SidebarMenuSub = React.forwardRef<HTMLDivElement, SidebarMenuSubProps>(\n ({ defaultOpen = false, children, ...props }, forwardedRef) => {\n return (\n <div {...props} ref={forwardedRef}>\n <Accordion.Root type=\"single\" collapsible defaultValue={defaultOpen ? 'item' : undefined}>\n <Accordion.Item value=\"item\">{children}</Accordion.Item>\n </Accordion.Root>\n </div>\n );\n },\n);\nSidebarMenuSub.displayName = 'Sidebar.MenuSub';\n\ninterface SidebarMenuSubTriggerProps\n extends React.ComponentPropsWithoutRef<typeof Accordion.Trigger> {\n asChild?: boolean;\n}\n\nconst SidebarMenuSubTrigger = React.forwardRef<\n React.ElementRef<typeof Accordion.Trigger>,\n SidebarMenuSubTriggerProps\n>(\n (\n { asChild = false, className, children, onMouseEnter, onMouseLeave, ...props },\n forwardedRef,\n ) => {\n const [isHighlighted, setIsHighlighted] = React.useState(false);\n\n return (\n <Accordion.Header asChild>\n <div>\n <Accordion.Trigger\n {...props}\n ref={forwardedRef}\n asChild={asChild}\n role=\"menuitem\"\n aria-haspopup=\"true\"\n className={classNames(\n 'rt-reset',\n 'rt-BaseMenuItem',\n 'rt-SidebarMenuButton',\n 'rt-SidebarMenuSubTrigger',\n className,\n )}\n data-highlighted={isHighlighted || undefined}\n onMouseEnter={(event) => {\n setIsHighlighted(true);\n onMouseEnter?.(event);\n }}\n onMouseLeave={(event) => {\n setIsHighlighted(false);\n onMouseLeave?.(event);\n }}\n >\n {asChild ? (\n children\n ) : (\n <>\n {children}\n <ThickChevronRightIcon\n className={classNames(\n 'rt-BaseMenuSubTriggerIcon',\n 'rt-SidebarMenuSubTriggerIcon',\n )}\n />\n </>\n )}\n </Accordion.Trigger>\n </div>\n </Accordion.Header>\n );\n },\n);\nSidebarMenuSubTrigger.displayName = 'Sidebar.MenuSubTrigger';\n\ninterface SidebarMenuSubContentProps\n extends React.ComponentPropsWithoutRef<typeof Accordion.Content> {}\n\nconst SidebarMenuSubContent = React.forwardRef<\n React.ElementRef<typeof Accordion.Content>,\n SidebarMenuSubContentProps\n>(({ className, children, ...props }, forwardedRef) => {\n return (\n <Accordion.Content\n {...props}\n ref={forwardedRef}\n className={classNames('rt-SidebarMenuSubContent', className)}\n >\n <div className=\"rt-SidebarMenuSubList\">{children}</div>\n </Accordion.Content>\n );\n});\nSidebarMenuSubContent.displayName = 'Sidebar.MenuSubContent';\n\n// Group components\ninterface SidebarGroupProps extends React.ComponentPropsWithoutRef<'div'> {}\n\nconst SidebarGroup = React.forwardRef<HTMLDivElement, SidebarGroupProps>(\n ({ className, ...props }, forwardedRef) => (\n <div\n {...props}\n ref={forwardedRef}\n className={classNames('rt-BaseMenuGroup', 'rt-SidebarGroup', className)}\n />\n ),\n);\nSidebarGroup.displayName = 'Sidebar.Group';\n\ninterface SidebarGroupLabelProps extends React.ComponentPropsWithoutRef<'div'> {\n asChild?: boolean;\n}\n\nconst SidebarGroupLabel = React.forwardRef<HTMLDivElement, SidebarGroupLabelProps>(\n ({ asChild = false, className, ...props }, forwardedRef) => {\n const Comp = asChild ? Slot : 'div';\n\n return (\n <Comp\n {...props}\n ref={forwardedRef}\n role=\"group\"\n className={classNames('rt-BaseMenuLabel', 'rt-SidebarGroupLabel', className)}\n />\n );\n },\n);\nSidebarGroupLabel.displayName = 'Sidebar.GroupLabel';\n\ninterface SidebarGroupContentProps extends React.ComponentPropsWithoutRef<'div'> {}\n\nconst SidebarGroupContent = React.forwardRef<HTMLDivElement, SidebarGroupContentProps>(\n ({ className, ...props }, forwardedRef) => (\n <div\n {...props}\n ref={forwardedRef}\n className={classNames('rt-SidebarGroupContent', className)}\n />\n ),\n);\nSidebarGroupContent.displayName = 'Sidebar.GroupContent';\n\n// Export all components following shadcn's pattern\nexport {\n Sidebar as Root,\n SidebarContent as Content,\n SidebarHeader as Header,\n SidebarFooter as Footer,\n SidebarSeparator as Separator,\n SidebarMenu as Menu,\n SidebarMenuItem as MenuItem,\n SidebarMenuButton as MenuButton,\n SidebarMenuSub as MenuSub,\n SidebarMenuSubTrigger as MenuSubTrigger,\n SidebarMenuSubContent as MenuSubContent,\n SidebarGroup as Group,\n SidebarGroupLabel as GroupLabel,\n SidebarGroupContent as GroupContent,\n};\n\n/**\n * Enhanced Sidebar Header and Footer Usage Examples:\n *\n * 1. Simple default container (backwards compatible):\n * <Sidebar.Header>\n * <Logo />\n * <span>App Name</span>\n * </Sidebar.Header>\n *\n * 2. Custom flex layout:\n * <Sidebar.Header className=\"rt-justify-between rt-gap-3\">\n * <Logo />\n * <Sidebar.MenuButton>\n * <SettingsIcon />\n * </Sidebar.MenuButton>\n * </Sidebar.Header>\n *\n * 3. Column layout for multiple rows:\n * <Sidebar.Header className=\"rt-flex-col rt-gap-2\" asContainer={false}>\n * <div className=\"rt-flex rt-items-center rt-gap-2\">\n * <Logo />\n * <span>App Name</span>\n * </div>\n * <Sidebar.MenuButton>\n * <UserAvatar />\n * <span>John Doe</span>\n * </Sidebar.MenuButton>\n * </Sidebar.Header>\n *\n * 4. Interactive footer with menu button:\n * <Sidebar.Footer>\n * <Sidebar.MenuButton>\n * <UserIcon />\n * <span>Settings</span>\n * <ChevronUpIcon />\n * </Sidebar.MenuButton>\n * </Sidebar.Footer>\n *\n * 5. Custom footer layout:\n * <Sidebar.Footer className=\"rt-justify-between\">\n * <span>v1.0.0</span>\n * <Sidebar.MenuButton>\n * <HelpIcon />\n * </Sidebar.MenuButton>\n * </Sidebar.Footer>\n *\n * Available utility classes:\n * - Layout: rt-flex-row, rt-flex-col\n * - Alignment: rt-items-center, rt-items-start, rt-items-end\n * - Justification: rt-justify-between, rt-justify-center, rt-justify-start, rt-justify-end\n * - Gap: rt-gap-1, rt-gap-2, rt-gap-3, rt-gap-4\n */\n\nexport type {\n SidebarProps as RootProps,\n SidebarContentProps as ContentProps,\n SidebarHeaderProps as HeaderProps,\n SidebarFooterProps as FooterProps,\n BadgeConfig,\n ShellSidebarSectionContextValue,\n};\n\n// Export context for Shell.Sidebar integration\nexport { ShellSidebarSectionContext };\n"],
5
+ "mappings": "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",
6
+ "names": ["sidebar_exports", "__export", "SidebarContent", "SidebarFooter", "SidebarGroup", "SidebarGroupContent", "SidebarGroupLabel", "SidebarHeader", "SidebarMenu", "SidebarMenuButton", "SidebarMenuItem", "SidebarMenuSub", "SidebarMenuSubContent", "SidebarMenuSubTrigger", "Sidebar", "SidebarSeparator", "ShellSidebarSectionContext", "__toCommonJS", "React", "import_classnames", "import_slot", "import_radix_ui", "import_sidebar_props", "import_theme", "import_scroll_area", "import_separator", "import_icons", "import_extract_props", "import_kbd", "import_badge", "SidebarVisualContext", "useSidebarVisual", "useShellSidebarSection", "props", "forwardedRef", "themeContext", "size", "variant", "menuVariant", "layout", "panelBackground", "color", "highContrast", "className", "children", "rootProps", "_", "__", "safeRootProps", "resolvedColor", "shellSection", "resolvedLayout", "resolvedSize", "classNames", "role", "ariaLabel", "id", "visual", "asContainer", "asChild", "isActive", "shortcut", "badge", "onMouseEnter", "onMouseLeave", "onKeyDown", "isHighlighted", "setIsHighlighted", "sidebarSize", "Comp", "onClick", "handleKeyDown", "event", "nextItem", "prevItem", "defaultOpen"]
7
7
  }
@@ -47,6 +47,12 @@ declare const sidebarPropDefs: {
47
47
  values: readonly ["offcanvas", "icon", "none"];
48
48
  default: "offcanvas";
49
49
  };
50
+ layout: {
51
+ type: "enum";
52
+ className: string;
53
+ values: readonly ["rail", "panel"];
54
+ default: undefined;
55
+ };
50
56
  panelBackground: {
51
57
  type: "enum";
52
58
  values: ("solid" | "translucent")[];
@@ -1 +1 @@
1
- {"version":3,"file":"sidebar.props.d.ts","sourceRoot":"","sources":["../../../src/components/sidebar.props.tsx"],"names":[],"mappings":"AAOA,OAAO,EACL,uBAAuB,IAAI,sBAAsB,EACjD,oBAAoB,IAAI,mBAAmB,EAC3C,4BAA4B,IAAI,2BAA2B,EAC3D,yBAAyB,IAAI,wBAAwB,GACtD,MAAM,gCAAgC,CAAC;AAUxC,QAAA,MAAM,eAAe;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA6BpB,CAAC;AAEF,OAAO,EAAE,eAAe,EAAE,CAAC"}
1
+ {"version":3,"file":"sidebar.props.d.ts","sourceRoot":"","sources":["../../../src/components/sidebar.props.tsx"],"names":[],"mappings":"AAOA,OAAO,EACL,uBAAuB,IAAI,sBAAsB,EACjD,oBAAoB,IAAI,mBAAmB,EAC3C,4BAA4B,IAAI,2BAA2B,EAC3D,yBAAyB,IAAI,wBAAwB,GACtD,MAAM,gCAAgC,CAAC;AAWxC,QAAA,MAAM,eAAe;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA+BpB,CAAC;AAEF,OAAO,EAAE,eAAe,EAAE,CAAC"}
@@ -1,2 +1,2 @@
1
- "use strict";var r=Object.defineProperty;var u=Object.getOwnPropertyDescriptor;var m=Object.getOwnPropertyNames;var c=Object.prototype.hasOwnProperty;var d=(a,e)=>{for(var o in e)r(a,o,{get:e[o],enumerable:!0})},b=(a,e,o,n)=>{if(e&&typeof e=="object"||typeof e=="function")for(let t of m(e))!c.call(a,t)&&t!==o&&r(a,t,{get:()=>e[t],enumerable:!(n=u(e,t))||n.enumerable});return a};var D=a=>b(r({},"__esModule",{value:!0}),a);var I={};d(I,{sidebarCheckboxItemPropDefs:()=>s.baseMenuCheckboxItemPropDefs,sidebarContentPropDefs:()=>s.baseMenuContentPropDefs,sidebarItemPropDefs:()=>s.baseMenuItemPropDefs,sidebarPropDefs:()=>l,sidebarRadioItemPropDefs:()=>s.baseMenuRadioItemPropDefs});module.exports=D(I);var p=require("../props/as-child.prop.js"),f=require("../props/color.prop.js"),i=require("../props/high-contrast.prop.js"),s=require("./_internal/base-menu.props.js");const P=["1","2"],y=["soft","outline","surface","ghost"],v=["solid","soft"],h=["sidebar","floating"],g=["left","right"],C=["offcanvas","icon","none"],l={...p.asChildPropDef,size:{type:"enum",className:"rt-r-size",values:P,default:"2",responsive:!0},variant:{type:"enum",className:"rt-variant",values:y,default:"outline"},menuVariant:{type:"enum",className:"rt-menu-variant",values:v,default:"soft"},type:{type:"enum",className:"rt-type",values:h,default:"sidebar"},side:{type:"enum",className:"rt-side",values:g,default:"left"},collapsible:{type:"enum",className:"rt-collapsible",values:C,default:"offcanvas"},panelBackground:{type:"enum",values:["solid","translucent"],default:void 0},...f.colorPropDef,...i.highContrastPropDef};
1
+ "use strict";var r=Object.defineProperty;var i=Object.getOwnPropertyDescriptor;var m=Object.getOwnPropertyNames;var c=Object.prototype.hasOwnProperty;var d=(a,e)=>{for(var o in e)r(a,o,{get:e[o],enumerable:!0})},y=(a,e,o,n)=>{if(e&&typeof e=="object"||typeof e=="function")for(let t of m(e))!c.call(a,t)&&t!==o&&r(a,t,{get:()=>e[t],enumerable:!(n=i(e,t))||n.enumerable});return a};var b=a=>y(r({},"__esModule",{value:!0}),a);var I={};d(I,{sidebarCheckboxItemPropDefs:()=>s.baseMenuCheckboxItemPropDefs,sidebarContentPropDefs:()=>s.baseMenuContentPropDefs,sidebarItemPropDefs:()=>s.baseMenuItemPropDefs,sidebarPropDefs:()=>u,sidebarRadioItemPropDefs:()=>s.baseMenuRadioItemPropDefs});module.exports=b(I);var p=require("../props/as-child.prop.js"),l=require("../props/color.prop.js"),f=require("../props/high-contrast.prop.js"),s=require("./_internal/base-menu.props.js");const D=["1","2"],P=["soft","outline","surface","ghost"],v=["solid","soft"],h=["sidebar","floating"],N=["left","right"],g=["offcanvas","icon","none"],C=["rail","panel"],u={...p.asChildPropDef,size:{type:"enum",className:"rt-r-size",values:D,default:"2",responsive:!0},variant:{type:"enum",className:"rt-variant",values:P,default:"outline"},menuVariant:{type:"enum",className:"rt-menu-variant",values:v,default:"soft"},type:{type:"enum",className:"rt-type",values:h,default:"sidebar"},side:{type:"enum",className:"rt-side",values:N,default:"left"},collapsible:{type:"enum",className:"rt-collapsible",values:g,default:"offcanvas"},layout:{type:"enum",className:"rt-layout",values:C,default:void 0},panelBackground:{type:"enum",values:["solid","translucent"],default:void 0},...l.colorPropDef,...f.highContrastPropDef};
2
2
  //# sourceMappingURL=sidebar.props.js.map