@kushagradhawan/kookie-ui 0.1.108 → 0.1.109

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 (56) hide show
  1. package/components.css +72 -51
  2. package/dist/cjs/components/_internal/shell-bottom.d.ts +2 -0
  3. package/dist/cjs/components/_internal/shell-bottom.d.ts.map +1 -1
  4. package/dist/cjs/components/_internal/shell-bottom.js +1 -1
  5. package/dist/cjs/components/_internal/shell-bottom.js.map +3 -3
  6. package/dist/cjs/components/_internal/shell-inspector.d.ts +2 -0
  7. package/dist/cjs/components/_internal/shell-inspector.d.ts.map +1 -1
  8. package/dist/cjs/components/_internal/shell-inspector.js +1 -1
  9. package/dist/cjs/components/_internal/shell-inspector.js.map +3 -3
  10. package/dist/cjs/components/_internal/shell-sidebar.d.ts +2 -0
  11. package/dist/cjs/components/_internal/shell-sidebar.d.ts.map +1 -1
  12. package/dist/cjs/components/_internal/shell-sidebar.js +1 -1
  13. package/dist/cjs/components/_internal/shell-sidebar.js.map +3 -3
  14. package/dist/cjs/components/shell.context.d.ts +13 -0
  15. package/dist/cjs/components/shell.context.d.ts.map +1 -1
  16. package/dist/cjs/components/shell.context.js +1 -1
  17. package/dist/cjs/components/shell.context.js.map +3 -3
  18. package/dist/cjs/components/shell.d.ts +14 -6
  19. package/dist/cjs/components/shell.d.ts.map +1 -1
  20. package/dist/cjs/components/shell.js +1 -1
  21. package/dist/cjs/components/shell.js.map +3 -3
  22. package/dist/esm/components/_internal/shell-bottom.d.ts +2 -0
  23. package/dist/esm/components/_internal/shell-bottom.d.ts.map +1 -1
  24. package/dist/esm/components/_internal/shell-bottom.js +1 -1
  25. package/dist/esm/components/_internal/shell-bottom.js.map +3 -3
  26. package/dist/esm/components/_internal/shell-inspector.d.ts +2 -0
  27. package/dist/esm/components/_internal/shell-inspector.d.ts.map +1 -1
  28. package/dist/esm/components/_internal/shell-inspector.js +1 -1
  29. package/dist/esm/components/_internal/shell-inspector.js.map +3 -3
  30. package/dist/esm/components/_internal/shell-sidebar.d.ts +2 -0
  31. package/dist/esm/components/_internal/shell-sidebar.d.ts.map +1 -1
  32. package/dist/esm/components/_internal/shell-sidebar.js +1 -1
  33. package/dist/esm/components/_internal/shell-sidebar.js.map +3 -3
  34. package/dist/esm/components/shell.context.d.ts +13 -0
  35. package/dist/esm/components/shell.context.d.ts.map +1 -1
  36. package/dist/esm/components/shell.context.js +1 -1
  37. package/dist/esm/components/shell.context.js.map +3 -3
  38. package/dist/esm/components/shell.d.ts +14 -6
  39. package/dist/esm/components/shell.d.ts.map +1 -1
  40. package/dist/esm/components/shell.js +1 -1
  41. package/dist/esm/components/shell.js.map +3 -3
  42. package/package.json +1 -1
  43. package/schemas/base-button.json +1 -1
  44. package/schemas/button.json +1 -1
  45. package/schemas/icon-button.json +1 -1
  46. package/schemas/index.json +6 -6
  47. package/schemas/toggle-button.json +1 -1
  48. package/schemas/toggle-icon-button.json +1 -1
  49. package/src/components/_internal/shell-bottom.tsx +15 -1
  50. package/src/components/_internal/shell-inspector.tsx +15 -1
  51. package/src/components/_internal/shell-sidebar.tsx +15 -1
  52. package/src/components/segmented-control.css +37 -37
  53. package/src/components/shell.context.tsx +14 -0
  54. package/src/components/shell.css +51 -28
  55. package/src/components/shell.tsx +150 -81
  56. package/styles.css +72 -51
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../src/components/_internal/shell-sidebar.tsx"],
4
- "sourcesContent": ["import * as React from 'react';\nimport classNames from 'classnames';\nimport * as Sheet from '../sheet.js';\nimport { VisuallyHidden } from '../visually-hidden.js';\nimport { useShell } from '../shell.context.js';\nimport { useResponsivePresentation, useResponsiveInitialState } from '../shell.hooks.js';\nimport { PaneResizeContext } from './shell-resize.js';\nimport { extractPaneDomProps } from './shell-prop-helpers.js';\nimport { SidebarHandle, PaneHandle } from './shell-handles.js';\nimport type { Breakpoint, PaneMode, PaneSizePersistence, ResponsivePresentation, SidebarMode, Responsive, PaneBaseProps } from '../shell.types.js';\nimport { _BREAKPOINTS } from '../shell.types.js';\nimport { normalizeToPx } from '../../helpers/normalize-to-px.js';\n\ntype SidebarPaneProps = PaneBaseProps & {\n mode?: PaneMode;\n defaultMode?: any;\n onModeChange?: (mode: PaneMode | SidebarMode) => void;\n};\n\ntype SidebarStateChangeMeta = { reason: 'init' | 'toggle' | 'responsive' };\ntype SidebarControlledProps = { state: Responsive<SidebarMode>; onStateChange?: (state: SidebarMode, meta: SidebarStateChangeMeta) => void; defaultState?: never };\ntype SidebarUncontrolledProps = { defaultState?: SidebarMode | Partial<Record<Breakpoint, SidebarMode>>; onStateChange?: (state: SidebarMode, meta: SidebarStateChangeMeta) => void; state?: never };\ntype SidebarPublicProps = Omit<SidebarPaneProps, 'mode' | 'defaultMode' | 'onModeChange'> & {\n // removed legacy mode props\n thinSize?: number;\n toggleModes?: 'both' | 'single';\n // size API (width when expanded)\n size?: number | string;\n defaultSize?: number | string;\n onSizeChange?: (size: number, meta: { reason: 'init' | 'resize' | 'controlled' }) => void;\n sizeUpdate?: 'throttle' | 'debounce';\n sizeUpdateMs?: number;\n} & (SidebarControlledProps | SidebarUncontrolledProps);\n\ntype SidebarComponent = React.ForwardRefExoticComponent<SidebarPublicProps & React.RefAttributes<HTMLDivElement>> & { Handle: typeof SidebarHandle };\n\nconst SIDEBAR_DOM_PROP_KEYS = [\n 'className',\n 'children',\n 'state',\n 'defaultState',\n 'onStateChange',\n 'thinSize',\n 'toggleModes',\n 'size',\n 'defaultSize',\n 'onSizeChange',\n 'sizeUpdate',\n 'sizeUpdateMs',\n 'style',\n] as const satisfies readonly (keyof SidebarPublicProps)[];\n\nexport const Sidebar = React.forwardRef<HTMLDivElement, SidebarPublicProps>((initialProps, ref) => {\n const {\n className,\n presentation = { initial: 'overlay', md: 'fixed' },\n expandedSize = 288,\n minSize = 200,\n maxSize = 400,\n resizable = false,\n collapsible = true,\n onExpand,\n onCollapse,\n onResize,\n onResizeStart,\n onResizeEnd,\n snapPoints,\n snapTolerance,\n collapseThreshold,\n paneId,\n persistence,\n children,\n style,\n thinSize = 64,\n toggleModes,\n state,\n defaultState,\n onStateChange,\n size,\n defaultSize,\n onSizeChange,\n sizeUpdate,\n sizeUpdateMs = 50,\n } = initialProps;\n const sidebarDomProps = extractPaneDomProps(initialProps, SIDEBAR_DOM_PROP_KEYS);\n const shell = useShell();\n const resolvedPresentation = useResponsivePresentation(presentation);\n const isOverlay = resolvedPresentation === 'overlay';\n const isStacked = resolvedPresentation === 'stacked';\n // Phase sequencing is now CSS-driven; no JS-managed phase\n const localRef = React.useRef<HTMLDivElement | null>(null);\n const setRef = React.useCallback(\n (node: HTMLDivElement | null) => {\n localRef.current = node;\n if (typeof ref === 'function') ref(node);\n else if (ref) (ref as React.MutableRefObject<HTMLDivElement | null>).current = node;\n },\n [ref],\n );\n const childArray = React.Children.toArray(children) as React.ReactElement[];\n const handleChildren = childArray.filter((el: React.ReactElement) => React.isValidElement(el) && el.type === SidebarHandle);\n const contentChildren = childArray.filter((el: React.ReactElement) => !(React.isValidElement(el) && el.type === SidebarHandle));\n\n // Ref for debounce cleanup\n const debounceTimeoutRef = React.useRef<ReturnType<typeof setTimeout> | null>(null);\n // Cleanup debounce timeout on unmount or when dependencies change\n React.useEffect(() => {\n return () => {\n if (debounceTimeoutRef.current) {\n clearTimeout(debounceTimeoutRef.current);\n debounceTimeoutRef.current = null;\n }\n };\n }, [onSizeChange, sizeUpdate, sizeUpdateMs]);\n // Throttled/debounced emitter for onSizeChange\n const emitSizeChange = React.useMemo(() => {\n const cb = onSizeChange as undefined | ((s: number, meta: { reason: 'init' | 'resize' | 'controlled' }) => void);\n const strategy = sizeUpdate as undefined | 'throttle' | 'debounce';\n const ms = sizeUpdateMs ?? 50;\n if (!cb) return () => {};\n if (strategy === 'debounce') {\n return (s: number, meta: { reason: 'init' | 'resize' | 'controlled' }) => {\n if (debounceTimeoutRef.current) clearTimeout(debounceTimeoutRef.current);\n debounceTimeoutRef.current = setTimeout(() => {\n cb(s, meta);\n debounceTimeoutRef.current = null;\n }, ms);\n };\n }\n if (strategy === 'throttle') {\n let last = 0;\n return (s: number, meta: { reason: 'init' | 'resize' | 'controlled' }) => {\n const now = Date.now();\n if (now - last >= ms) {\n last = now;\n cb(s, meta);\n }\n };\n }\n return (s: number, meta: { reason: 'init' | 'resize' | 'controlled' }) => cb(s, meta);\n }, [onSizeChange, sizeUpdate, sizeUpdateMs]);\n\n // Register with shell\n const sidebarId = React.useId();\n React.useEffect(() => {\n shell.setHasSidebar(true);\n return () => {\n shell.setHasSidebar(false);\n };\n }, [shell, sidebarId]);\n\n // Dev guards\n const wasControlledRef = React.useRef<boolean | null>(null);\n if (process.env.NODE_ENV !== 'production') {\n if (typeof state !== 'undefined' && typeof defaultState !== 'undefined') {\n console.error('Shell.Sidebar: Do not pass both `state` and `defaultState`. Choose one.');\n }\n if (typeof size !== 'undefined' && typeof defaultSize !== 'undefined') {\n console.error('Shell.Sidebar: Do not pass both `size` and `defaultSize`. Choose one.');\n }\n }\n\n // Warn on mode switch between controlled/uncontrolled\n React.useEffect(() => {\n const isControlled = typeof state !== 'undefined';\n if (wasControlledRef.current === null) {\n wasControlledRef.current = isControlled;\n return;\n }\n if (wasControlledRef.current !== isControlled) {\n console.warn('Shell.Sidebar: Switching between controlled and uncontrolled `state` is not supported.');\n wasControlledRef.current = isControlled;\n }\n }, [state]);\n\n // Resolve responsive controlled state at top level\n const stateIsResponsive = typeof state === 'object' && state !== null;\n const { resolvedDefault: resolvedSidebarDefault } = useResponsiveInitialState<SidebarMode>({\n controlledValue: state,\n defaultValue: defaultState,\n currentValue: shell.sidebarMode as SidebarMode,\n setValue: shell.setSidebarMode,\n breakpointReady: shell.currentBreakpointReady,\n controlledIsResponsive: stateIsResponsive,\n onResponsiveChange: (next) => onStateChange?.(next, { reason: 'responsive' }),\n onInit: (initial) => onStateChange?.(initial, { reason: 'init' }),\n });\n\n // Emit mode changes\n const lastNotifyModeRef = React.useRef<SidebarMode | null>(null);\n React.useEffect(() => {\n // notify new API when uncontrolled; skip first run to avoid masking init\n if (typeof state === 'undefined') {\n if (lastNotifyModeRef.current === null) {\n lastNotifyModeRef.current = shell.sidebarMode as SidebarMode;\n } else if (lastNotifyModeRef.current !== shell.sidebarMode) {\n lastNotifyModeRef.current = shell.sidebarMode as SidebarMode;\n onStateChange?.(shell.sidebarMode as SidebarMode, { reason: 'toggle' });\n }\n }\n }, [shell.sidebarMode, state, onStateChange]);\n\n // Track previous mode to only fire callbacks on actual user-initiated state transitions.\n // We wait for breakpointReady to ensure the initial state sync from useResponsiveInitialState\n // is complete before enabling callbacks. This avoids spurious callbacks during initialization.\n // Use callback refs to avoid re-running effect when inline callbacks change.\n const onExpandRef = React.useRef(onExpand);\n const onCollapseRef = React.useRef(onCollapse);\n React.useLayoutEffect(() => {\n onExpandRef.current = onExpand;\n onCollapseRef.current = onCollapse;\n });\n\n const prevSidebarModeRef = React.useRef<SidebarMode | null>(null);\n const hasInitializedRef = React.useRef(false);\n React.useEffect(() => {\n const currentMode = shell.sidebarMode as SidebarMode;\n\n // Wait for breakpoint to be ready before enabling callbacks\n if (!shell.currentBreakpointReady) {\n prevSidebarModeRef.current = currentMode;\n return;\n }\n\n // Skip the first run after breakpoint is ready - this captures the post-sync state\n if (!hasInitializedRef.current) {\n hasInitializedRef.current = true;\n prevSidebarModeRef.current = currentMode;\n return;\n }\n\n const prevMode = prevSidebarModeRef.current;\n\n // Only fire on actual state transitions\n if (prevMode !== null && prevMode !== currentMode) {\n // onExpand: when becoming visible (collapsed \u2192 thin/expanded)\n if (prevMode === 'collapsed' && currentMode !== 'collapsed') {\n onExpandRef.current?.();\n }\n // onCollapse: when becoming hidden (any \u2192 collapsed)\n else if (currentMode === 'collapsed') {\n onCollapseRef.current?.();\n }\n prevSidebarModeRef.current = currentMode;\n }\n }, [shell.sidebarMode, shell.currentBreakpointReady]);\n\n // Option A: thin is width-only; content remains visible whenever not collapsed\n const isContentVisible = shell.sidebarMode !== 'collapsed';\n\n // Default persistence if paneId provided and none supplied (fixed only)\n const persistenceAdapter = React.useMemo(() => {\n if (!paneId || persistence) return persistence;\n const key = `kookie-ui:shell:sidebar:${paneId}`;\n const adapter: PaneSizePersistence = {\n load: () => {\n if (typeof window === 'undefined') return undefined;\n try {\n const v = window.localStorage.getItem(key);\n return v ? Number(v) : undefined;\n } catch (err) {\n if (process.env.NODE_ENV !== 'production') {\n console.warn('Shell.Sidebar: failed to load persisted size', err);\n }\n return undefined;\n }\n },\n save: (size: number) => {\n if (typeof window === 'undefined') return;\n try {\n window.localStorage.setItem(key, String(size));\n } catch (err) {\n if (process.env.NODE_ENV !== 'production') {\n console.warn('Shell.Sidebar: failed to save persisted size', err);\n }\n }\n },\n };\n return adapter;\n }, [paneId, persistence]);\n\n React.useEffect(() => {\n let mounted = true;\n (async () => {\n if (!resizable || !persistenceAdapter?.load || isOverlay) return;\n const loaded = await persistenceAdapter.load();\n if (mounted && typeof loaded === 'number' && localRef.current) {\n localRef.current.style.setProperty('--sidebar-size', `${loaded}px`);\n onResize?.(loaded);\n }\n })();\n return () => {\n mounted = false;\n };\n }, [resizable, persistenceAdapter, onResize, isOverlay]);\n\n // Register custom toggle behavior based on toggleModes (both|single)\n const shellForToggle = useShell();\n const resolveDefaultSidebarMode = React.useCallback((): SidebarMode => {\n const resolved = resolvedSidebarDefault ?? (typeof defaultState === 'string' ? defaultState : undefined) ?? 'expanded';\n return resolved === 'thin' || resolved === 'expanded' ? resolved : 'expanded';\n }, [resolvedSidebarDefault, defaultState]);\n\n React.useEffect(() => {\n if (!shellForToggle.setSidebarToggleComputer) return;\n const strategy: 'both' | 'single' = toggleModes ?? 'both';\n const compute = (current: SidebarMode): SidebarMode => {\n if (strategy === 'both') {\n if (current === 'collapsed') return 'thin';\n if (current === 'thin') return 'expanded';\n return 'collapsed';\n }\n const target = resolveDefaultSidebarMode();\n if (current === 'collapsed') return target;\n if (current === target) return 'collapsed';\n return target;\n };\n shellForToggle.setSidebarToggleComputer(compute);\n return () => {\n shellForToggle.setSidebarToggleComputer?.((cur) => (cur === 'collapsed' ? 'thin' : cur === 'thin' ? 'expanded' : 'collapsed'));\n };\n }, [shellForToggle, toggleModes, resolveDefaultSidebarMode]);\n\n const lastOverlayWidthRef = React.useRef<number>(expandedSize);\n const lastOverlayModeRef = React.useRef<SidebarMode>('expanded');\n React.useEffect(() => {\n if (shell.sidebarMode !== 'collapsed') {\n lastOverlayModeRef.current = shell.sidebarMode as SidebarMode;\n lastOverlayWidthRef.current = shell.sidebarMode === 'thin' ? thinSize : expandedSize;\n }\n }, [shell.sidebarMode, thinSize, expandedSize]);\n\n // Remove responsive default mode behavior entirely\n\n const handleEl =\n resizable && !isOverlay && shell.sidebarMode === 'expanded' ? (\n <PaneResizeContext.Provider\n value={{\n containerRef: localRef,\n cssVarName: '--sidebar-size',\n minSize,\n maxSize,\n defaultSize: expandedSize,\n orientation: 'vertical',\n edge: 'end',\n computeNext: (client, startClient, startSize) => {\n const isRtl = getComputedStyle(localRef.current!).direction === 'rtl';\n const delta = client - startClient;\n return startSize + (isRtl ? -delta : delta);\n },\n onResize,\n onResizeStart,\n onResizeEnd: (size) => {\n onResizeEnd?.(size);\n emitSizeChange(size, { reason: 'resize' });\n persistenceAdapter?.save?.(size);\n },\n target: 'sidebar',\n collapsible,\n snapPoints,\n snapTolerance: snapTolerance ?? 8,\n collapseThreshold,\n requestCollapse: () => shell.setSidebarMode('collapsed'),\n requestToggle: () => shell.togglePane('sidebar'),\n }}\n >\n {handleChildren.length > 0 ? handleChildren.map((el, i) => React.cloneElement(el, { key: el.key ?? i })) : <PaneHandle />}\n </PaneResizeContext.Provider>\n ) : null;\n\n // Normalize CSS lengths to px helper\n const normalizeSizeToPx = React.useCallback((value: number | string | undefined) => normalizeToPx(value, 'horizontal'), []);\n\n // Apply defaultSize on mount when uncontrolled\n React.useEffect(() => {\n if (!localRef.current) return;\n if (typeof size === 'undefined' && typeof defaultSize !== 'undefined') {\n const px = normalizeSizeToPx(defaultSize);\n if (typeof px === 'number' && Number.isFinite(px)) {\n const minPx = typeof minSize === 'number' ? minSize : undefined;\n const maxPx = typeof maxSize === 'number' ? maxSize : undefined;\n const clamped = Math.min(maxPx ?? px, Math.max(minPx ?? px, px));\n localRef.current.style.setProperty('--sidebar-size', `${clamped}px`);\n emitSizeChange(clamped, { reason: 'init' });\n }\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n // Controlled size sync\n const controlledSize = size;\n React.useEffect(() => {\n if (!localRef.current) return;\n if (typeof controlledSize === 'undefined') return;\n const px = normalizeSizeToPx(controlledSize);\n if (typeof px === 'number' && Number.isFinite(px)) {\n const minPx = typeof minSize === 'number' ? minSize : undefined;\n const maxPx = typeof maxSize === 'number' ? maxSize : undefined;\n const clamped = Math.min(maxPx ?? px, Math.max(minPx ?? px, px));\n localRef.current.style.setProperty('--sidebar-size', `${clamped}px`);\n emitSizeChange(clamped, { reason: 'controlled' });\n }\n }, [controlledSize, minSize, maxSize, normalizeSizeToPx, emitSizeChange]);\n\n if (isOverlay) {\n const open = shell.sidebarMode !== 'collapsed';\n return (\n <Sheet.Root open={open} onOpenChange={(o) => shell.setSidebarMode(o ? 'expanded' : 'collapsed')}>\n <Sheet.Content\n side=\"start\"\n style={{ padding: 0 }}\n width={{\n initial: `${open ? (shell.sidebarMode === 'thin' ? thinSize : expandedSize) : lastOverlayWidthRef.current}px`,\n }}\n >\n <VisuallyHidden>\n <Sheet.Title>Navigation</Sheet.Title>\n </VisuallyHidden>\n {contentChildren}\n </Sheet.Content>\n </Sheet.Root>\n );\n }\n return (\n <div\n {...sidebarDomProps}\n ref={setRef}\n className={classNames('rt-ShellSidebar', className)}\n data-mode={shell.sidebarMode}\n data-peek={shell.peekTarget === 'sidebar' || undefined}\n data-presentation={shell.currentBreakpointReady ? resolvedPresentation : undefined}\n data-open={(shell.currentBreakpointReady && isStacked && isContentVisible) || undefined}\n style={{\n ...style,\n ['--sidebar-size' as any]: `${expandedSize}px`,\n ['--sidebar-thin-size' as any]: `${thinSize}px`,\n ['--sidebar-min-size' as any]: `${minSize}px`,\n ['--sidebar-max-size' as any]: `${maxSize}px`,\n ...(shell.peekTarget === 'sidebar' && shell.sidebarMode === 'collapsed' && !isOverlay\n ? (() => {\n const strategy: 'both' | 'single' = toggleModes ?? 'both';\n const current = shell.sidebarMode as SidebarMode;\n let next: SidebarMode;\n if (strategy === 'both') {\n next = current === 'collapsed' ? 'thin' : current === 'thin' ? 'expanded' : 'collapsed';\n } else {\n const target = resolveDefaultSidebarMode();\n next = current === 'collapsed' ? target : 'collapsed';\n }\n if (next === 'thin') {\n return {\n ['--peek-sidebar-width' as any]: `${thinSize}px`,\n } as React.CSSProperties;\n }\n return {\n ['--peek-sidebar-width' as any]: `var(--sidebar-size, ${expandedSize}px)`,\n } as React.CSSProperties;\n })()\n : {}),\n }}\n >\n <div className=\"rt-ShellSidebarContent\" data-visible={isContentVisible || undefined}>\n {contentChildren}\n </div>\n {handleEl}\n </div>\n );\n}) as SidebarComponent;\n\nSidebar.displayName = 'Shell.Sidebar';\nSidebar.Handle = SidebarHandle;\n"],
5
- "mappings": "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",
6
- "names": ["React", "classNames", "Sheet", "VisuallyHidden", "useShell", "useResponsivePresentation", "useResponsiveInitialState", "PaneResizeContext", "extractPaneDomProps", "SidebarHandle", "PaneHandle", "normalizeToPx", "SIDEBAR_DOM_PROP_KEYS", "Sidebar", "initialProps", "ref", "className", "presentation", "expandedSize", "minSize", "maxSize", "resizable", "collapsible", "onExpand", "onCollapse", "onResize", "onResizeStart", "onResizeEnd", "snapPoints", "snapTolerance", "collapseThreshold", "paneId", "persistence", "children", "style", "thinSize", "toggleModes", "state", "defaultState", "onStateChange", "size", "defaultSize", "onSizeChange", "sizeUpdate", "sizeUpdateMs", "sidebarDomProps", "shell", "resolvedPresentation", "isOverlay", "isStacked", "localRef", "setRef", "node", "childArray", "handleChildren", "el", "contentChildren", "debounceTimeoutRef", "emitSizeChange", "cb", "strategy", "ms", "s", "meta", "last", "now", "sidebarId", "wasControlledRef", "isControlled", "stateIsResponsive", "resolvedSidebarDefault", "next", "initial", "lastNotifyModeRef", "onExpandRef", "onCollapseRef", "prevSidebarModeRef", "hasInitializedRef", "currentMode", "prevMode", "isContentVisible", "persistenceAdapter", "key", "v", "mounted", "loaded", "shellForToggle", "resolveDefaultSidebarMode", "resolved", "compute", "current", "target", "cur", "lastOverlayWidthRef", "lastOverlayModeRef", "handleEl", "client", "startClient", "startSize", "isRtl", "delta", "i", "normalizeSizeToPx", "value", "px", "clamped", "controlledSize", "open", "o"]
4
+ "sourcesContent": ["import * as React from 'react';\nimport classNames from 'classnames';\nimport * as Sheet from '../sheet.js';\nimport { VisuallyHidden } from '../visually-hidden.js';\nimport { useShell, useInset } from '../shell.context.js';\nimport { useResponsivePresentation, useResponsiveInitialState } from '../shell.hooks.js';\nimport { PaneResizeContext } from './shell-resize.js';\nimport { extractPaneDomProps } from './shell-prop-helpers.js';\nimport { SidebarHandle, PaneHandle } from './shell-handles.js';\nimport type { Breakpoint, PaneMode, PaneSizePersistence, ResponsivePresentation, SidebarMode, Responsive, PaneBaseProps } from '../shell.types.js';\nimport { _BREAKPOINTS } from '../shell.types.js';\nimport { normalizeToPx } from '../../helpers/normalize-to-px.js';\n\ntype SidebarPaneProps = PaneBaseProps & {\n mode?: PaneMode;\n defaultMode?: any;\n onModeChange?: (mode: PaneMode | SidebarMode) => void;\n};\n\ntype SidebarStateChangeMeta = { reason: 'init' | 'toggle' | 'responsive' };\ntype SidebarControlledProps = { state: Responsive<SidebarMode>; onStateChange?: (state: SidebarMode, meta: SidebarStateChangeMeta) => void; defaultState?: never };\ntype SidebarUncontrolledProps = { defaultState?: SidebarMode | Partial<Record<Breakpoint, SidebarMode>>; onStateChange?: (state: SidebarMode, meta: SidebarStateChangeMeta) => void; state?: never };\ntype SidebarPublicProps = Omit<SidebarPaneProps, 'mode' | 'defaultMode' | 'onModeChange'> & {\n // removed legacy mode props\n thinSize?: number;\n toggleModes?: 'both' | 'single';\n // size API (width when expanded)\n size?: number | string;\n defaultSize?: number | string;\n onSizeChange?: (size: number, meta: { reason: 'init' | 'resize' | 'controlled' }) => void;\n sizeUpdate?: 'throttle' | 'debounce';\n sizeUpdateMs?: number;\n /** When true, adds margin and triggers gray backdrop on Shell. */\n inset?: boolean;\n} & (SidebarControlledProps | SidebarUncontrolledProps);\n\ntype SidebarComponent = React.ForwardRefExoticComponent<SidebarPublicProps & React.RefAttributes<HTMLDivElement>> & { Handle: typeof SidebarHandle };\n\nconst SIDEBAR_DOM_PROP_KEYS = [\n 'className',\n 'children',\n 'state',\n 'defaultState',\n 'onStateChange',\n 'thinSize',\n 'toggleModes',\n 'size',\n 'defaultSize',\n 'onSizeChange',\n 'sizeUpdate',\n 'sizeUpdateMs',\n 'style',\n 'inset',\n] as const satisfies readonly (keyof SidebarPublicProps)[];\n\nexport const Sidebar = React.forwardRef<HTMLDivElement, SidebarPublicProps>((initialProps, ref) => {\n const {\n className,\n presentation = { initial: 'overlay', md: 'fixed' },\n expandedSize = 288,\n minSize = 200,\n maxSize = 400,\n resizable = false,\n collapsible = true,\n onExpand,\n onCollapse,\n onResize,\n onResizeStart,\n onResizeEnd,\n snapPoints,\n snapTolerance,\n collapseThreshold,\n paneId,\n persistence,\n children,\n style,\n thinSize = 64,\n toggleModes,\n state,\n defaultState,\n onStateChange,\n size,\n defaultSize,\n onSizeChange,\n sizeUpdate,\n sizeUpdateMs = 50,\n inset,\n } = initialProps;\n const sidebarDomProps = extractPaneDomProps(initialProps, SIDEBAR_DOM_PROP_KEYS);\n const shell = useShell();\n const { registerInset, unregisterInset } = useInset();\n\n // Register/unregister inset\n React.useEffect(() => {\n if (inset) {\n registerInset('sidebar');\n return () => unregisterInset('sidebar');\n }\n }, [inset, registerInset, unregisterInset]);\n const resolvedPresentation = useResponsivePresentation(presentation);\n const isOverlay = resolvedPresentation === 'overlay';\n const isStacked = resolvedPresentation === 'stacked';\n // Phase sequencing is now CSS-driven; no JS-managed phase\n const localRef = React.useRef<HTMLDivElement | null>(null);\n const setRef = React.useCallback(\n (node: HTMLDivElement | null) => {\n localRef.current = node;\n if (typeof ref === 'function') ref(node);\n else if (ref) (ref as React.MutableRefObject<HTMLDivElement | null>).current = node;\n },\n [ref],\n );\n const childArray = React.Children.toArray(children) as React.ReactElement[];\n const handleChildren = childArray.filter((el: React.ReactElement) => React.isValidElement(el) && el.type === SidebarHandle);\n const contentChildren = childArray.filter((el: React.ReactElement) => !(React.isValidElement(el) && el.type === SidebarHandle));\n\n // Ref for debounce cleanup\n const debounceTimeoutRef = React.useRef<ReturnType<typeof setTimeout> | null>(null);\n // Cleanup debounce timeout on unmount or when dependencies change\n React.useEffect(() => {\n return () => {\n if (debounceTimeoutRef.current) {\n clearTimeout(debounceTimeoutRef.current);\n debounceTimeoutRef.current = null;\n }\n };\n }, [onSizeChange, sizeUpdate, sizeUpdateMs]);\n // Throttled/debounced emitter for onSizeChange\n const emitSizeChange = React.useMemo(() => {\n const cb = onSizeChange as undefined | ((s: number, meta: { reason: 'init' | 'resize' | 'controlled' }) => void);\n const strategy = sizeUpdate as undefined | 'throttle' | 'debounce';\n const ms = sizeUpdateMs ?? 50;\n if (!cb) return () => {};\n if (strategy === 'debounce') {\n return (s: number, meta: { reason: 'init' | 'resize' | 'controlled' }) => {\n if (debounceTimeoutRef.current) clearTimeout(debounceTimeoutRef.current);\n debounceTimeoutRef.current = setTimeout(() => {\n cb(s, meta);\n debounceTimeoutRef.current = null;\n }, ms);\n };\n }\n if (strategy === 'throttle') {\n let last = 0;\n return (s: number, meta: { reason: 'init' | 'resize' | 'controlled' }) => {\n const now = Date.now();\n if (now - last >= ms) {\n last = now;\n cb(s, meta);\n }\n };\n }\n return (s: number, meta: { reason: 'init' | 'resize' | 'controlled' }) => cb(s, meta);\n }, [onSizeChange, sizeUpdate, sizeUpdateMs]);\n\n // Register with shell\n const sidebarId = React.useId();\n React.useEffect(() => {\n shell.setHasSidebar(true);\n return () => {\n shell.setHasSidebar(false);\n };\n }, [shell, sidebarId]);\n\n // Dev guards\n const wasControlledRef = React.useRef<boolean | null>(null);\n if (process.env.NODE_ENV !== 'production') {\n if (typeof state !== 'undefined' && typeof defaultState !== 'undefined') {\n console.error('Shell.Sidebar: Do not pass both `state` and `defaultState`. Choose one.');\n }\n if (typeof size !== 'undefined' && typeof defaultSize !== 'undefined') {\n console.error('Shell.Sidebar: Do not pass both `size` and `defaultSize`. Choose one.');\n }\n }\n\n // Warn on mode switch between controlled/uncontrolled\n React.useEffect(() => {\n const isControlled = typeof state !== 'undefined';\n if (wasControlledRef.current === null) {\n wasControlledRef.current = isControlled;\n return;\n }\n if (wasControlledRef.current !== isControlled) {\n console.warn('Shell.Sidebar: Switching between controlled and uncontrolled `state` is not supported.');\n wasControlledRef.current = isControlled;\n }\n }, [state]);\n\n // Resolve responsive controlled state at top level\n const stateIsResponsive = typeof state === 'object' && state !== null;\n const { resolvedDefault: resolvedSidebarDefault } = useResponsiveInitialState<SidebarMode>({\n controlledValue: state,\n defaultValue: defaultState,\n currentValue: shell.sidebarMode as SidebarMode,\n setValue: shell.setSidebarMode,\n breakpointReady: shell.currentBreakpointReady,\n controlledIsResponsive: stateIsResponsive,\n onResponsiveChange: (next) => onStateChange?.(next, { reason: 'responsive' }),\n onInit: (initial) => onStateChange?.(initial, { reason: 'init' }),\n });\n\n // Emit mode changes\n const lastNotifyModeRef = React.useRef<SidebarMode | null>(null);\n React.useEffect(() => {\n // notify new API when uncontrolled; skip first run to avoid masking init\n if (typeof state === 'undefined') {\n if (lastNotifyModeRef.current === null) {\n lastNotifyModeRef.current = shell.sidebarMode as SidebarMode;\n } else if (lastNotifyModeRef.current !== shell.sidebarMode) {\n lastNotifyModeRef.current = shell.sidebarMode as SidebarMode;\n onStateChange?.(shell.sidebarMode as SidebarMode, { reason: 'toggle' });\n }\n }\n }, [shell.sidebarMode, state, onStateChange]);\n\n // Track previous mode to only fire callbacks on actual user-initiated state transitions.\n // We wait for breakpointReady to ensure the initial state sync from useResponsiveInitialState\n // is complete before enabling callbacks. This avoids spurious callbacks during initialization.\n // Use callback refs to avoid re-running effect when inline callbacks change.\n const onExpandRef = React.useRef(onExpand);\n const onCollapseRef = React.useRef(onCollapse);\n React.useLayoutEffect(() => {\n onExpandRef.current = onExpand;\n onCollapseRef.current = onCollapse;\n });\n\n const prevSidebarModeRef = React.useRef<SidebarMode | null>(null);\n const hasInitializedRef = React.useRef(false);\n React.useEffect(() => {\n const currentMode = shell.sidebarMode as SidebarMode;\n\n // Wait for breakpoint to be ready before enabling callbacks\n if (!shell.currentBreakpointReady) {\n prevSidebarModeRef.current = currentMode;\n return;\n }\n\n // Skip the first run after breakpoint is ready - this captures the post-sync state\n if (!hasInitializedRef.current) {\n hasInitializedRef.current = true;\n prevSidebarModeRef.current = currentMode;\n return;\n }\n\n const prevMode = prevSidebarModeRef.current;\n\n // Only fire on actual state transitions\n if (prevMode !== null && prevMode !== currentMode) {\n // onExpand: when becoming visible (collapsed \u2192 thin/expanded)\n if (prevMode === 'collapsed' && currentMode !== 'collapsed') {\n onExpandRef.current?.();\n }\n // onCollapse: when becoming hidden (any \u2192 collapsed)\n else if (currentMode === 'collapsed') {\n onCollapseRef.current?.();\n }\n prevSidebarModeRef.current = currentMode;\n }\n }, [shell.sidebarMode, shell.currentBreakpointReady]);\n\n // Option A: thin is width-only; content remains visible whenever not collapsed\n const isContentVisible = shell.sidebarMode !== 'collapsed';\n\n // Default persistence if paneId provided and none supplied (fixed only)\n const persistenceAdapter = React.useMemo(() => {\n if (!paneId || persistence) return persistence;\n const key = `kookie-ui:shell:sidebar:${paneId}`;\n const adapter: PaneSizePersistence = {\n load: () => {\n if (typeof window === 'undefined') return undefined;\n try {\n const v = window.localStorage.getItem(key);\n return v ? Number(v) : undefined;\n } catch (err) {\n if (process.env.NODE_ENV !== 'production') {\n console.warn('Shell.Sidebar: failed to load persisted size', err);\n }\n return undefined;\n }\n },\n save: (size: number) => {\n if (typeof window === 'undefined') return;\n try {\n window.localStorage.setItem(key, String(size));\n } catch (err) {\n if (process.env.NODE_ENV !== 'production') {\n console.warn('Shell.Sidebar: failed to save persisted size', err);\n }\n }\n },\n };\n return adapter;\n }, [paneId, persistence]);\n\n React.useEffect(() => {\n let mounted = true;\n (async () => {\n if (!resizable || !persistenceAdapter?.load || isOverlay) return;\n const loaded = await persistenceAdapter.load();\n if (mounted && typeof loaded === 'number' && localRef.current) {\n localRef.current.style.setProperty('--sidebar-size', `${loaded}px`);\n onResize?.(loaded);\n }\n })();\n return () => {\n mounted = false;\n };\n }, [resizable, persistenceAdapter, onResize, isOverlay]);\n\n // Register custom toggle behavior based on toggleModes (both|single)\n const shellForToggle = useShell();\n const resolveDefaultSidebarMode = React.useCallback((): SidebarMode => {\n const resolved = resolvedSidebarDefault ?? (typeof defaultState === 'string' ? defaultState : undefined) ?? 'expanded';\n return resolved === 'thin' || resolved === 'expanded' ? resolved : 'expanded';\n }, [resolvedSidebarDefault, defaultState]);\n\n React.useEffect(() => {\n if (!shellForToggle.setSidebarToggleComputer) return;\n const strategy: 'both' | 'single' = toggleModes ?? 'both';\n const compute = (current: SidebarMode): SidebarMode => {\n if (strategy === 'both') {\n if (current === 'collapsed') return 'thin';\n if (current === 'thin') return 'expanded';\n return 'collapsed';\n }\n const target = resolveDefaultSidebarMode();\n if (current === 'collapsed') return target;\n if (current === target) return 'collapsed';\n return target;\n };\n shellForToggle.setSidebarToggleComputer(compute);\n return () => {\n shellForToggle.setSidebarToggleComputer?.((cur) => (cur === 'collapsed' ? 'thin' : cur === 'thin' ? 'expanded' : 'collapsed'));\n };\n }, [shellForToggle, toggleModes, resolveDefaultSidebarMode]);\n\n const lastOverlayWidthRef = React.useRef<number>(expandedSize);\n const lastOverlayModeRef = React.useRef<SidebarMode>('expanded');\n React.useEffect(() => {\n if (shell.sidebarMode !== 'collapsed') {\n lastOverlayModeRef.current = shell.sidebarMode as SidebarMode;\n lastOverlayWidthRef.current = shell.sidebarMode === 'thin' ? thinSize : expandedSize;\n }\n }, [shell.sidebarMode, thinSize, expandedSize]);\n\n // Remove responsive default mode behavior entirely\n\n const handleEl =\n resizable && !isOverlay && shell.sidebarMode === 'expanded' ? (\n <PaneResizeContext.Provider\n value={{\n containerRef: localRef,\n cssVarName: '--sidebar-size',\n minSize,\n maxSize,\n defaultSize: expandedSize,\n orientation: 'vertical',\n edge: 'end',\n computeNext: (client, startClient, startSize) => {\n const isRtl = getComputedStyle(localRef.current!).direction === 'rtl';\n const delta = client - startClient;\n return startSize + (isRtl ? -delta : delta);\n },\n onResize,\n onResizeStart,\n onResizeEnd: (size) => {\n onResizeEnd?.(size);\n emitSizeChange(size, { reason: 'resize' });\n persistenceAdapter?.save?.(size);\n },\n target: 'sidebar',\n collapsible,\n snapPoints,\n snapTolerance: snapTolerance ?? 8,\n collapseThreshold,\n requestCollapse: () => shell.setSidebarMode('collapsed'),\n requestToggle: () => shell.togglePane('sidebar'),\n }}\n >\n {handleChildren.length > 0 ? handleChildren.map((el, i) => React.cloneElement(el, { key: el.key ?? i })) : <PaneHandle />}\n </PaneResizeContext.Provider>\n ) : null;\n\n // Normalize CSS lengths to px helper\n const normalizeSizeToPx = React.useCallback((value: number | string | undefined) => normalizeToPx(value, 'horizontal'), []);\n\n // Apply defaultSize on mount when uncontrolled\n React.useEffect(() => {\n if (!localRef.current) return;\n if (typeof size === 'undefined' && typeof defaultSize !== 'undefined') {\n const px = normalizeSizeToPx(defaultSize);\n if (typeof px === 'number' && Number.isFinite(px)) {\n const minPx = typeof minSize === 'number' ? minSize : undefined;\n const maxPx = typeof maxSize === 'number' ? maxSize : undefined;\n const clamped = Math.min(maxPx ?? px, Math.max(minPx ?? px, px));\n localRef.current.style.setProperty('--sidebar-size', `${clamped}px`);\n emitSizeChange(clamped, { reason: 'init' });\n }\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n // Controlled size sync\n const controlledSize = size;\n React.useEffect(() => {\n if (!localRef.current) return;\n if (typeof controlledSize === 'undefined') return;\n const px = normalizeSizeToPx(controlledSize);\n if (typeof px === 'number' && Number.isFinite(px)) {\n const minPx = typeof minSize === 'number' ? minSize : undefined;\n const maxPx = typeof maxSize === 'number' ? maxSize : undefined;\n const clamped = Math.min(maxPx ?? px, Math.max(minPx ?? px, px));\n localRef.current.style.setProperty('--sidebar-size', `${clamped}px`);\n emitSizeChange(clamped, { reason: 'controlled' });\n }\n }, [controlledSize, minSize, maxSize, normalizeSizeToPx, emitSizeChange]);\n\n if (isOverlay) {\n const open = shell.sidebarMode !== 'collapsed';\n return (\n <Sheet.Root open={open} onOpenChange={(o) => shell.setSidebarMode(o ? 'expanded' : 'collapsed')}>\n <Sheet.Content\n side=\"start\"\n style={{ padding: 0 }}\n width={{\n initial: `${open ? (shell.sidebarMode === 'thin' ? thinSize : expandedSize) : lastOverlayWidthRef.current}px`,\n }}\n >\n <VisuallyHidden>\n <Sheet.Title>Navigation</Sheet.Title>\n </VisuallyHidden>\n {contentChildren}\n </Sheet.Content>\n </Sheet.Root>\n );\n }\n return (\n <div\n {...sidebarDomProps}\n ref={setRef}\n className={classNames('rt-ShellSidebar', className)}\n data-mode={shell.sidebarMode}\n data-peek={shell.peekTarget === 'sidebar' || undefined}\n data-presentation={shell.currentBreakpointReady ? resolvedPresentation : undefined}\n data-open={(shell.currentBreakpointReady && isStacked && isContentVisible) || undefined}\n data-inset={inset || undefined}\n style={{\n ...style,\n ['--sidebar-size' as any]: `${expandedSize}px`,\n ['--sidebar-thin-size' as any]: `${thinSize}px`,\n ['--sidebar-min-size' as any]: `${minSize}px`,\n ['--sidebar-max-size' as any]: `${maxSize}px`,\n ...(shell.peekTarget === 'sidebar' && shell.sidebarMode === 'collapsed' && !isOverlay\n ? (() => {\n const strategy: 'both' | 'single' = toggleModes ?? 'both';\n const current = shell.sidebarMode as SidebarMode;\n let next: SidebarMode;\n if (strategy === 'both') {\n next = current === 'collapsed' ? 'thin' : current === 'thin' ? 'expanded' : 'collapsed';\n } else {\n const target = resolveDefaultSidebarMode();\n next = current === 'collapsed' ? target : 'collapsed';\n }\n if (next === 'thin') {\n return {\n ['--peek-sidebar-width' as any]: `${thinSize}px`,\n } as React.CSSProperties;\n }\n return {\n ['--peek-sidebar-width' as any]: `var(--sidebar-size, ${expandedSize}px)`,\n } as React.CSSProperties;\n })()\n : {}),\n }}\n >\n <div className=\"rt-ShellSidebarContent\" data-visible={isContentVisible || undefined}>\n {contentChildren}\n </div>\n {handleEl}\n </div>\n );\n}) as SidebarComponent;\n\nSidebar.displayName = 'Shell.Sidebar';\nSidebar.Handle = SidebarHandle;\n"],
5
+ "mappings": "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",
6
+ "names": ["React", "classNames", "Sheet", "VisuallyHidden", "useShell", "useInset", "useResponsivePresentation", "useResponsiveInitialState", "PaneResizeContext", "extractPaneDomProps", "SidebarHandle", "PaneHandle", "normalizeToPx", "SIDEBAR_DOM_PROP_KEYS", "Sidebar", "initialProps", "ref", "className", "presentation", "expandedSize", "minSize", "maxSize", "resizable", "collapsible", "onExpand", "onCollapse", "onResize", "onResizeStart", "onResizeEnd", "snapPoints", "snapTolerance", "collapseThreshold", "paneId", "persistence", "children", "style", "thinSize", "toggleModes", "state", "defaultState", "onStateChange", "size", "defaultSize", "onSizeChange", "sizeUpdate", "sizeUpdateMs", "inset", "sidebarDomProps", "shell", "registerInset", "unregisterInset", "resolvedPresentation", "isOverlay", "isStacked", "localRef", "setRef", "node", "childArray", "handleChildren", "el", "contentChildren", "debounceTimeoutRef", "emitSizeChange", "cb", "strategy", "ms", "s", "meta", "last", "now", "sidebarId", "wasControlledRef", "isControlled", "stateIsResponsive", "resolvedSidebarDefault", "next", "initial", "lastNotifyModeRef", "onExpandRef", "onCollapseRef", "prevSidebarModeRef", "hasInitializedRef", "currentMode", "prevMode", "isContentVisible", "persistenceAdapter", "key", "v", "mounted", "loaded", "shellForToggle", "resolveDefaultSidebarMode", "resolved", "compute", "current", "target", "cur", "lastOverlayWidthRef", "lastOverlayModeRef", "handleEl", "client", "startClient", "startSize", "isRtl", "delta", "i", "normalizeSizeToPx", "value", "px", "clamped", "controlledSize", "open", "o"]
7
7
  }
@@ -122,5 +122,18 @@ export declare function useComposition(): {
122
122
  hasSidebar: boolean;
123
123
  setHasSidebar: (v: boolean) => void;
124
124
  };
125
+ export type InsetPaneId = 'left' | 'sidebar' | 'content' | 'inspector' | 'bottom';
126
+ export declare const InsetContext: React.Context<{
127
+ insetPanes: Set<InsetPaneId>;
128
+ registerInset: (id: InsetPaneId) => void;
129
+ unregisterInset: (id: InsetPaneId) => void;
130
+ hasAnyInset: boolean;
131
+ } | null>;
132
+ export declare function useInset(): {
133
+ insetPanes: Set<InsetPaneId>;
134
+ registerInset: (id: InsetPaneId) => void;
135
+ unregisterInset: (id: InsetPaneId) => void;
136
+ hasAnyInset: boolean;
137
+ };
125
138
  export {};
126
139
  //# sourceMappingURL=shell.context.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"shell.context.d.ts","sourceRoot":"","sources":["../../../src/components/shell.context.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"shell.context.d.ts","sourceRoot":"","sources":["../../../src/components/shell.context.tsx"],"names":[],"mappings":"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"}
@@ -1,2 +1,2 @@
1
- import*as t from"react";const o=t.createContext(null);function M(){const e=t.useContext(o);if(!e)throw new Error("Shell components must be used within <Shell.Root>");return e}function P({value:e,children:n}){return t.createElement(o.Provider,{value:e},n)}const r=t.createContext(null);function p(){const e=t.useContext(r);if(!e)throw new Error("useLeftMode must be used within Shell.Root");return e}const a=t.createContext(null);function h(){const e=t.useContext(a);if(!e)throw new Error("usePanelMode must be used within Shell.Root");return e}const d=t.createContext(null);function S(){const e=t.useContext(d);if(!e)throw new Error("useSidebarMode must be used within Shell.Root");return e}const s=t.createContext(null);function b(){const e=t.useContext(s);if(!e)throw new Error("useInspectorMode must be used within Shell.Root");return e}const l=t.createContext(null);function f(){const e=t.useContext(l);if(!e)throw new Error("useBottomMode must be used within Shell.Root");return e}const i=t.createContext(null);function C(){const e=t.useContext(i);if(!e)throw new Error("usePresentation must be used within Shell.Root");return e}const u=t.createContext(null);function v(){const e=t.useContext(u);if(!e)throw new Error("usePeek must be used within Shell.Root");return e}const c=t.createContext(null);function m(){const e=t.useContext(c);if(!e)throw new Error("useShellActions must be used within Shell.Root");return e}const x=t.createContext(null);function g(){const e=t.useContext(x);if(!e)throw new Error("useComposition must be used within Shell.Root");return e}export{c as ActionsContext,l as BottomModeContext,x as CompositionContext,s as InspectorModeContext,r as LeftModeContext,a as PanelModeContext,u as PeekContext,i as PresentationContext,P as ShellProvider,d as SidebarModeContext,f as useBottomMode,g as useComposition,b as useInspectorMode,p as useLeftMode,h as usePanelMode,v as usePeek,C as usePresentation,M as useShell,m as useShellActions,S as useSidebarMode};
1
+ import*as t from"react";const o=t.createContext(null);function M(){const e=t.useContext(o);if(!e)throw new Error("Shell components must be used within <Shell.Root>");return e}function p({value:e,children:n}){return t.createElement(o.Provider,{value:e},n)}const r=t.createContext(null);function h(){const e=t.useContext(r);if(!e)throw new Error("useLeftMode must be used within Shell.Root");return e}const a=t.createContext(null);function b(){const e=t.useContext(a);if(!e)throw new Error("usePanelMode must be used within Shell.Root");return e}const s=t.createContext(null);function S(){const e=t.useContext(s);if(!e)throw new Error("useSidebarMode must be used within Shell.Root");return e}const d=t.createContext(null);function f(){const e=t.useContext(d);if(!e)throw new Error("useInspectorMode must be used within Shell.Root");return e}const l=t.createContext(null);function C(){const e=t.useContext(l);if(!e)throw new Error("useBottomMode must be used within Shell.Root");return e}const i=t.createContext(null);function v(){const e=t.useContext(i);if(!e)throw new Error("usePresentation must be used within Shell.Root");return e}const u=t.createContext(null);function m(){const e=t.useContext(u);if(!e)throw new Error("usePeek must be used within Shell.Root");return e}const c=t.createContext(null);function w(){const e=t.useContext(c);if(!e)throw new Error("useShellActions must be used within Shell.Root");return e}const x=t.createContext(null);function g(){const e=t.useContext(x);if(!e)throw new Error("useComposition must be used within Shell.Root");return e}const P=t.createContext(null);function T(){const e=t.useContext(P);if(!e)throw new Error("useInset must be used within Shell.Root");return e}export{c as ActionsContext,l as BottomModeContext,x as CompositionContext,P as InsetContext,d as InspectorModeContext,r as LeftModeContext,a as PanelModeContext,u as PeekContext,i as PresentationContext,p as ShellProvider,s as SidebarModeContext,C as useBottomMode,g as useComposition,T as useInset,f as useInspectorMode,h as useLeftMode,b as usePanelMode,m as usePeek,v as usePresentation,M as useShell,w as useShellActions,S as useSidebarMode};
2
2
  //# sourceMappingURL=shell.context.js.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../src/components/shell.context.tsx"],
4
- "sourcesContent": ["import * as React from 'react';\nimport type { Breakpoint, PresentationValue, SidebarMode, PaneMode, PaneTarget } from './shell.types.js';\n\nexport interface ShellContextValue {\n // Pane states\n leftMode: PaneMode;\n setLeftMode: (mode: PaneMode) => void;\n panelMode: PaneMode; // Panel state within left container\n setPanelMode: (mode: PaneMode) => void;\n sidebarMode: SidebarMode;\n setSidebarMode: (mode: SidebarMode) => void;\n inspectorMode: PaneMode;\n setInspectorMode: (mode: PaneMode) => void;\n bottomMode: PaneMode;\n setBottomMode: (mode: PaneMode) => void;\n\n // Peek state (layout-only, ephemeral)\n peekTarget: PaneTarget | null;\n setPeekTarget: (target: PaneTarget | null) => void;\n peekPane: (target: PaneTarget) => void;\n clearPeek: () => void;\n\n // Composition detection\n hasLeft: boolean;\n setHasLeft: (has: boolean) => void;\n hasSidebar: boolean;\n setHasSidebar: (has: boolean) => void;\n\n // Presentation resolution\n currentBreakpoint: Breakpoint;\n currentBreakpointReady: boolean;\n leftResolvedPresentation?: PresentationValue;\n\n // Actions\n togglePane: (target: PaneTarget) => void;\n expandPane: (target: PaneTarget) => void;\n collapsePane: (target: PaneTarget) => void;\n // Toggle customization\n setSidebarToggleComputer?: (fn: (current: SidebarMode) => SidebarMode) => void;\n // Dev-only hooks for presentation warnings\n onLeftPres?: (p: PresentationValue) => void;\n // Sizing info for overlay grouping\n onLeftDefaults?: (size: number) => void;\n}\n\nconst ShellContext = React.createContext<ShellContextValue | null>(null);\n\n/** @internal Shell root context. Prefer slice hooks (useSidebarMode, useShellActions, etc.). */\nexport function 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\nexport function ShellProvider({ value, children }: { value: ShellContextValue; children: React.ReactNode }) {\n return <ShellContext.Provider value={value}>{children}</ShellContext.Provider>;\n}\n\n// Phase 7: Split contexts for render isolation\n\n// Pane mode slice contexts\ntype ModeSetter<T> = (mode: T) => void;\n\nexport const LeftModeContext = React.createContext<{ leftMode: PaneMode; setLeftMode: ModeSetter<PaneMode> } | null>(null as any);\nexport function useLeftMode() {\n const ctx = React.useContext(LeftModeContext);\n if (!ctx) throw new Error('useLeftMode must be used within Shell.Root');\n return ctx;\n}\n\nexport const PanelModeContext = React.createContext<{ panelMode: PaneMode; setPanelMode: ModeSetter<PaneMode> } | null>(null as any);\nexport function usePanelMode() {\n const ctx = React.useContext(PanelModeContext);\n if (!ctx) throw new Error('usePanelMode must be used within Shell.Root');\n return ctx;\n}\n\nexport const SidebarModeContext = React.createContext<{ sidebarMode: SidebarMode; setSidebarMode: ModeSetter<SidebarMode> } | null>(null as any);\nexport function useSidebarMode() {\n const ctx = React.useContext(SidebarModeContext);\n if (!ctx) throw new Error('useSidebarMode must be used within Shell.Root');\n return ctx;\n}\n\nexport const InspectorModeContext = React.createContext<{ inspectorMode: PaneMode; setInspectorMode: ModeSetter<PaneMode> } | null>(null as any);\nexport function useInspectorMode() {\n const ctx = React.useContext(InspectorModeContext);\n if (!ctx) throw new Error('useInspectorMode must be used within Shell.Root');\n return ctx;\n}\n\nexport const BottomModeContext = React.createContext<{ bottomMode: PaneMode; setBottomMode: ModeSetter<PaneMode> } | null>(null as any);\nexport function useBottomMode() {\n const ctx = React.useContext(BottomModeContext);\n if (!ctx) throw new Error('useBottomMode must be used within Shell.Root');\n return ctx;\n}\n\n// Presentation slice\nexport const PresentationContext = React.createContext<{ currentBreakpoint: Breakpoint; currentBreakpointReady: boolean; leftResolvedPresentation?: PresentationValue } | null>(null as any);\nexport function usePresentation() {\n const ctx = React.useContext(PresentationContext);\n if (!ctx) throw new Error('usePresentation must be used within Shell.Root');\n return ctx;\n}\n\n// Peek slice\nexport const PeekContext = React.createContext<{ peekTarget: PaneTarget | null; setPeekTarget: (t: PaneTarget | null) => void; peekPane: (t: PaneTarget) => void; clearPeek: () => void } | null>(\n null as any,\n);\nexport function usePeek() {\n const ctx = React.useContext(PeekContext);\n if (!ctx) throw new Error('usePeek must be used within Shell.Root');\n return ctx;\n}\n\n// Actions slice (stable callbacks)\nexport const ActionsContext = React.createContext<{\n togglePane: (t: PaneTarget) => void;\n expandPane: (t: PaneTarget) => void;\n collapsePane: (t: PaneTarget) => void;\n setSidebarToggleComputer?: (fn: (current: SidebarMode) => SidebarMode) => void;\n} | null>(null as any);\nexport function useShellActions() {\n const ctx = React.useContext(ActionsContext);\n if (!ctx) throw new Error('useShellActions must be used within Shell.Root');\n return ctx;\n}\n\n// Composition slice\nexport const CompositionContext = React.createContext<{ hasLeft: boolean; setHasLeft: (v: boolean) => void; hasSidebar: boolean; setHasSidebar: (v: boolean) => void } | null>(null as any);\nexport function useComposition() {\n const ctx = React.useContext(CompositionContext);\n if (!ctx) throw new Error('useComposition must be used within Shell.Root');\n return ctx;\n}\n"],
5
- "mappings": "AAAA,UAAYA,MAAW,QA6CvB,MAAMC,EAAeD,EAAM,cAAwC,IAAI,EAGhE,SAASE,GAAW,CACzB,MAAMC,EAAMH,EAAM,WAAWC,CAAY,EACzC,GAAI,CAACE,EAAK,MAAM,IAAI,MAAM,mDAAmD,EAC7E,OAAOA,CACT,CAEO,SAASC,EAAc,CAAE,MAAAC,EAAO,SAAAC,CAAS,EAA4D,CAC1G,OAAON,EAAA,cAACC,EAAa,SAAb,CAAsB,MAAOI,GAAQC,CAAS,CACxD,CAOO,MAAMC,EAAkBP,EAAM,cAAgF,IAAW,EACzH,SAASQ,GAAc,CAC5B,MAAML,EAAMH,EAAM,WAAWO,CAAe,EAC5C,GAAI,CAACJ,EAAK,MAAM,IAAI,MAAM,4CAA4C,EACtE,OAAOA,CACT,CAEO,MAAMM,EAAmBT,EAAM,cAAkF,IAAW,EAC5H,SAASU,GAAe,CAC7B,MAAMP,EAAMH,EAAM,WAAWS,CAAgB,EAC7C,GAAI,CAACN,EAAK,MAAM,IAAI,MAAM,6CAA6C,EACvE,OAAOA,CACT,CAEO,MAAMQ,EAAqBX,EAAM,cAA4F,IAAW,EACxI,SAASY,GAAiB,CAC/B,MAAMT,EAAMH,EAAM,WAAWW,CAAkB,EAC/C,GAAI,CAACR,EAAK,MAAM,IAAI,MAAM,+CAA+C,EACzE,OAAOA,CACT,CAEO,MAAMU,EAAuBb,EAAM,cAA0F,IAAW,EACxI,SAASc,GAAmB,CACjC,MAAMX,EAAMH,EAAM,WAAWa,CAAoB,EACjD,GAAI,CAACV,EAAK,MAAM,IAAI,MAAM,iDAAiD,EAC3E,OAAOA,CACT,CAEO,MAAMY,EAAoBf,EAAM,cAAoF,IAAW,EAC/H,SAASgB,GAAgB,CAC9B,MAAMb,EAAMH,EAAM,WAAWe,CAAiB,EAC9C,GAAI,CAACZ,EAAK,MAAM,IAAI,MAAM,8CAA8C,EACxE,OAAOA,CACT,CAGO,MAAMc,EAAsBjB,EAAM,cAAuI,IAAW,EACpL,SAASkB,GAAkB,CAChC,MAAMf,EAAMH,EAAM,WAAWiB,CAAmB,EAChD,GAAI,CAACd,EAAK,MAAM,IAAI,MAAM,gDAAgD,EAC1E,OAAOA,CACT,CAGO,MAAMgB,EAAcnB,EAAM,cAC/B,IACF,EACO,SAASoB,GAAU,CACxB,MAAMjB,EAAMH,EAAM,WAAWmB,CAAW,EACxC,GAAI,CAAChB,EAAK,MAAM,IAAI,MAAM,wCAAwC,EAClE,OAAOA,CACT,CAGO,MAAMkB,EAAiBrB,EAAM,cAK1B,IAAW,EACd,SAASsB,GAAkB,CAChC,MAAMnB,EAAMH,EAAM,WAAWqB,CAAc,EAC3C,GAAI,CAAClB,EAAK,MAAM,IAAI,MAAM,gDAAgD,EAC1E,OAAOA,CACT,CAGO,MAAMoB,EAAqBvB,EAAM,cAAuI,IAAW,EACnL,SAASwB,GAAiB,CAC/B,MAAMrB,EAAMH,EAAM,WAAWuB,CAAkB,EAC/C,GAAI,CAACpB,EAAK,MAAM,IAAI,MAAM,+CAA+C,EACzE,OAAOA,CACT",
6
- "names": ["React", "ShellContext", "useShell", "ctx", "ShellProvider", "value", "children", "LeftModeContext", "useLeftMode", "PanelModeContext", "usePanelMode", "SidebarModeContext", "useSidebarMode", "InspectorModeContext", "useInspectorMode", "BottomModeContext", "useBottomMode", "PresentationContext", "usePresentation", "PeekContext", "usePeek", "ActionsContext", "useShellActions", "CompositionContext", "useComposition"]
4
+ "sourcesContent": ["import * as React from 'react';\nimport type { Breakpoint, PresentationValue, SidebarMode, PaneMode, PaneTarget } from './shell.types.js';\n\nexport interface ShellContextValue {\n // Pane states\n leftMode: PaneMode;\n setLeftMode: (mode: PaneMode) => void;\n panelMode: PaneMode; // Panel state within left container\n setPanelMode: (mode: PaneMode) => void;\n sidebarMode: SidebarMode;\n setSidebarMode: (mode: SidebarMode) => void;\n inspectorMode: PaneMode;\n setInspectorMode: (mode: PaneMode) => void;\n bottomMode: PaneMode;\n setBottomMode: (mode: PaneMode) => void;\n\n // Peek state (layout-only, ephemeral)\n peekTarget: PaneTarget | null;\n setPeekTarget: (target: PaneTarget | null) => void;\n peekPane: (target: PaneTarget) => void;\n clearPeek: () => void;\n\n // Composition detection\n hasLeft: boolean;\n setHasLeft: (has: boolean) => void;\n hasSidebar: boolean;\n setHasSidebar: (has: boolean) => void;\n\n // Presentation resolution\n currentBreakpoint: Breakpoint;\n currentBreakpointReady: boolean;\n leftResolvedPresentation?: PresentationValue;\n\n // Actions\n togglePane: (target: PaneTarget) => void;\n expandPane: (target: PaneTarget) => void;\n collapsePane: (target: PaneTarget) => void;\n // Toggle customization\n setSidebarToggleComputer?: (fn: (current: SidebarMode) => SidebarMode) => void;\n // Dev-only hooks for presentation warnings\n onLeftPres?: (p: PresentationValue) => void;\n // Sizing info for overlay grouping\n onLeftDefaults?: (size: number) => void;\n}\n\nconst ShellContext = React.createContext<ShellContextValue | null>(null);\n\n/** @internal Shell root context. Prefer slice hooks (useSidebarMode, useShellActions, etc.). */\nexport function 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\nexport function ShellProvider({ value, children }: { value: ShellContextValue; children: React.ReactNode }) {\n return <ShellContext.Provider value={value}>{children}</ShellContext.Provider>;\n}\n\n// Phase 7: Split contexts for render isolation\n\n// Pane mode slice contexts\ntype ModeSetter<T> = (mode: T) => void;\n\nexport const LeftModeContext = React.createContext<{ leftMode: PaneMode; setLeftMode: ModeSetter<PaneMode> } | null>(null as any);\nexport function useLeftMode() {\n const ctx = React.useContext(LeftModeContext);\n if (!ctx) throw new Error('useLeftMode must be used within Shell.Root');\n return ctx;\n}\n\nexport const PanelModeContext = React.createContext<{ panelMode: PaneMode; setPanelMode: ModeSetter<PaneMode> } | null>(null as any);\nexport function usePanelMode() {\n const ctx = React.useContext(PanelModeContext);\n if (!ctx) throw new Error('usePanelMode must be used within Shell.Root');\n return ctx;\n}\n\nexport const SidebarModeContext = React.createContext<{ sidebarMode: SidebarMode; setSidebarMode: ModeSetter<SidebarMode> } | null>(null as any);\nexport function useSidebarMode() {\n const ctx = React.useContext(SidebarModeContext);\n if (!ctx) throw new Error('useSidebarMode must be used within Shell.Root');\n return ctx;\n}\n\nexport const InspectorModeContext = React.createContext<{ inspectorMode: PaneMode; setInspectorMode: ModeSetter<PaneMode> } | null>(null as any);\nexport function useInspectorMode() {\n const ctx = React.useContext(InspectorModeContext);\n if (!ctx) throw new Error('useInspectorMode must be used within Shell.Root');\n return ctx;\n}\n\nexport const BottomModeContext = React.createContext<{ bottomMode: PaneMode; setBottomMode: ModeSetter<PaneMode> } | null>(null as any);\nexport function useBottomMode() {\n const ctx = React.useContext(BottomModeContext);\n if (!ctx) throw new Error('useBottomMode must be used within Shell.Root');\n return ctx;\n}\n\n// Presentation slice\nexport const PresentationContext = React.createContext<{ currentBreakpoint: Breakpoint; currentBreakpointReady: boolean; leftResolvedPresentation?: PresentationValue } | null>(null as any);\nexport function usePresentation() {\n const ctx = React.useContext(PresentationContext);\n if (!ctx) throw new Error('usePresentation must be used within Shell.Root');\n return ctx;\n}\n\n// Peek slice\nexport const PeekContext = React.createContext<{ peekTarget: PaneTarget | null; setPeekTarget: (t: PaneTarget | null) => void; peekPane: (t: PaneTarget) => void; clearPeek: () => void } | null>(\n null as any,\n);\nexport function usePeek() {\n const ctx = React.useContext(PeekContext);\n if (!ctx) throw new Error('usePeek must be used within Shell.Root');\n return ctx;\n}\n\n// Actions slice (stable callbacks)\nexport const ActionsContext = React.createContext<{\n togglePane: (t: PaneTarget) => void;\n expandPane: (t: PaneTarget) => void;\n collapsePane: (t: PaneTarget) => void;\n setSidebarToggleComputer?: (fn: (current: SidebarMode) => SidebarMode) => void;\n} | null>(null as any);\nexport function useShellActions() {\n const ctx = React.useContext(ActionsContext);\n if (!ctx) throw new Error('useShellActions must be used within Shell.Root');\n return ctx;\n}\n\n// Composition slice\nexport const CompositionContext = React.createContext<{ hasLeft: boolean; setHasLeft: (v: boolean) => void; hasSidebar: boolean; setHasSidebar: (v: boolean) => void } | null>(null as any);\nexport function useComposition() {\n const ctx = React.useContext(CompositionContext);\n if (!ctx) throw new Error('useComposition must be used within Shell.Root');\n return ctx;\n}\n\n// Inset slice - tracks which panes have inset for gray backdrop\nexport type InsetPaneId = 'left' | 'sidebar' | 'content' | 'inspector' | 'bottom';\nexport const InsetContext = React.createContext<{\n insetPanes: Set<InsetPaneId>;\n registerInset: (id: InsetPaneId) => void;\n unregisterInset: (id: InsetPaneId) => void;\n hasAnyInset: boolean;\n} | null>(null as any);\nexport function useInset() {\n const ctx = React.useContext(InsetContext);\n if (!ctx) throw new Error('useInset must be used within Shell.Root');\n return ctx;\n}\n"],
5
+ "mappings": "AAAA,UAAYA,MAAW,QA6CvB,MAAMC,EAAeD,EAAM,cAAwC,IAAI,EAGhE,SAASE,GAAW,CACzB,MAAMC,EAAMH,EAAM,WAAWC,CAAY,EACzC,GAAI,CAACE,EAAK,MAAM,IAAI,MAAM,mDAAmD,EAC7E,OAAOA,CACT,CAEO,SAASC,EAAc,CAAE,MAAAC,EAAO,SAAAC,CAAS,EAA4D,CAC1G,OAAON,EAAA,cAACC,EAAa,SAAb,CAAsB,MAAOI,GAAQC,CAAS,CACxD,CAOO,MAAMC,EAAkBP,EAAM,cAAgF,IAAW,EACzH,SAASQ,GAAc,CAC5B,MAAML,EAAMH,EAAM,WAAWO,CAAe,EAC5C,GAAI,CAACJ,EAAK,MAAM,IAAI,MAAM,4CAA4C,EACtE,OAAOA,CACT,CAEO,MAAMM,EAAmBT,EAAM,cAAkF,IAAW,EAC5H,SAASU,GAAe,CAC7B,MAAMP,EAAMH,EAAM,WAAWS,CAAgB,EAC7C,GAAI,CAACN,EAAK,MAAM,IAAI,MAAM,6CAA6C,EACvE,OAAOA,CACT,CAEO,MAAMQ,EAAqBX,EAAM,cAA4F,IAAW,EACxI,SAASY,GAAiB,CAC/B,MAAMT,EAAMH,EAAM,WAAWW,CAAkB,EAC/C,GAAI,CAACR,EAAK,MAAM,IAAI,MAAM,+CAA+C,EACzE,OAAOA,CACT,CAEO,MAAMU,EAAuBb,EAAM,cAA0F,IAAW,EACxI,SAASc,GAAmB,CACjC,MAAMX,EAAMH,EAAM,WAAWa,CAAoB,EACjD,GAAI,CAACV,EAAK,MAAM,IAAI,MAAM,iDAAiD,EAC3E,OAAOA,CACT,CAEO,MAAMY,EAAoBf,EAAM,cAAoF,IAAW,EAC/H,SAASgB,GAAgB,CAC9B,MAAMb,EAAMH,EAAM,WAAWe,CAAiB,EAC9C,GAAI,CAACZ,EAAK,MAAM,IAAI,MAAM,8CAA8C,EACxE,OAAOA,CACT,CAGO,MAAMc,EAAsBjB,EAAM,cAAuI,IAAW,EACpL,SAASkB,GAAkB,CAChC,MAAMf,EAAMH,EAAM,WAAWiB,CAAmB,EAChD,GAAI,CAACd,EAAK,MAAM,IAAI,MAAM,gDAAgD,EAC1E,OAAOA,CACT,CAGO,MAAMgB,EAAcnB,EAAM,cAC/B,IACF,EACO,SAASoB,GAAU,CACxB,MAAMjB,EAAMH,EAAM,WAAWmB,CAAW,EACxC,GAAI,CAAChB,EAAK,MAAM,IAAI,MAAM,wCAAwC,EAClE,OAAOA,CACT,CAGO,MAAMkB,EAAiBrB,EAAM,cAK1B,IAAW,EACd,SAASsB,GAAkB,CAChC,MAAMnB,EAAMH,EAAM,WAAWqB,CAAc,EAC3C,GAAI,CAAClB,EAAK,MAAM,IAAI,MAAM,gDAAgD,EAC1E,OAAOA,CACT,CAGO,MAAMoB,EAAqBvB,EAAM,cAAuI,IAAW,EACnL,SAASwB,GAAiB,CAC/B,MAAMrB,EAAMH,EAAM,WAAWuB,CAAkB,EAC/C,GAAI,CAACpB,EAAK,MAAM,IAAI,MAAM,+CAA+C,EACzE,OAAOA,CACT,CAIO,MAAMsB,EAAezB,EAAM,cAKxB,IAAW,EACd,SAAS0B,GAAW,CACzB,MAAMvB,EAAMH,EAAM,WAAWyB,CAAY,EACzC,GAAI,CAACtB,EAAK,MAAM,IAAI,MAAM,yCAAyC,EACnE,OAAOA,CACT",
6
+ "names": ["React", "ShellContext", "useShell", "ctx", "ShellProvider", "value", "children", "LeftModeContext", "useLeftMode", "PanelModeContext", "usePanelMode", "SidebarModeContext", "useSidebarMode", "InspectorModeContext", "useInspectorMode", "BottomModeContext", "useBottomMode", "PresentationContext", "usePresentation", "PeekContext", "usePeek", "ActionsContext", "useShellActions", "CompositionContext", "useComposition", "InsetContext", "useInset"]
7
7
  }
@@ -3,7 +3,7 @@ import { useResponsivePresentation } from './shell.hooks.js';
3
3
  import { Sidebar } from './_internal/shell-sidebar.js';
4
4
  import { Bottom } from './_internal/shell-bottom.js';
5
5
  import { Inspector } from './_internal/shell-inspector.js';
6
- import type { ResponsivePresentation, PaneMode, SidebarMode, PaneTarget, PaneBaseProps } from './shell.types.js';
6
+ import type { ResponsivePresentation, PaneMode, SidebarMode, Breakpoint, PaneTarget, PaneBaseProps } from './shell.types.js';
7
7
  import { useShell } from './shell.context.js';
8
8
  declare const Root: PanelComponent;
9
9
  interface ShellHeaderProps extends React.ComponentPropsWithoutRef<'header'> {
@@ -24,17 +24,19 @@ interface LeftProps extends React.ComponentPropsWithoutRef<'div'> {
24
24
  mode?: never;
25
25
  defaultMode?: never;
26
26
  onModeChange?: never;
27
+ /** When true, adds margin and triggers gray backdrop on Shell. */
28
+ inset?: boolean;
27
29
  }
28
30
  type LeftOpenChangeMeta = {
29
31
  reason: 'init' | 'toggle' | 'responsive' | 'panel';
30
32
  };
31
33
  type RailControlledProps = {
32
- open: boolean;
34
+ open: boolean | Partial<Record<Breakpoint, boolean>>;
33
35
  onOpenChange?: (open: boolean, meta: LeftOpenChangeMeta) => void;
34
36
  defaultOpen?: never;
35
37
  };
36
38
  type RailUncontrolledProps = {
37
- defaultOpen?: boolean;
39
+ defaultOpen?: boolean | Partial<Record<Breakpoint, boolean>>;
38
40
  onOpenChange?: (open: boolean, meta: LeftOpenChangeMeta) => void;
39
41
  open?: never;
40
42
  };
@@ -44,20 +46,22 @@ type RailProps = React.ComponentPropsWithoutRef<'div'> & {
44
46
  collapsible?: boolean;
45
47
  onExpand?: () => void;
46
48
  onCollapse?: () => void;
49
+ /** When true, adds margin to Rail+Panel and triggers gray backdrop on Shell. */
50
+ inset?: boolean;
47
51
  } & (RailControlledProps | RailUncontrolledProps);
48
52
  declare const Left: React.ForwardRefExoticComponent<LeftProps & React.RefAttributes<HTMLDivElement>>;
49
53
  declare const Rail: React.ForwardRefExoticComponent<RailProps & React.RefAttributes<HTMLDivElement>>;
50
54
  type HandleComponent = React.ForwardRefExoticComponent<React.ComponentPropsWithoutRef<'div'> & React.RefAttributes<HTMLDivElement>>;
51
55
  type PanelOpenChangeMeta = {
52
- reason: 'toggle' | 'left' | 'init';
56
+ reason: 'toggle' | 'left' | 'init' | 'responsive';
53
57
  };
54
58
  type PanelControlledProps = {
55
- open: boolean;
59
+ open: boolean | Partial<Record<Breakpoint, boolean>>;
56
60
  onOpenChange?: (open: boolean, meta: PanelOpenChangeMeta) => void;
57
61
  defaultOpen?: never;
58
62
  };
59
63
  type PanelUncontrolledProps = {
60
- defaultOpen?: boolean;
64
+ defaultOpen?: boolean | Partial<Record<Breakpoint, boolean>>;
61
65
  onOpenChange?: (open: boolean, meta: PanelOpenChangeMeta) => void;
62
66
  open?: never;
63
67
  };
@@ -76,12 +80,16 @@ type PanelPublicProps = Omit<PaneProps, 'presentation' | 'defaultMode'> & (Panel
76
80
  onSizeChange?: (size: number, meta: PanelSizeChangeMeta) => void;
77
81
  sizeUpdate?: 'throttle' | 'debounce';
78
82
  sizeUpdateMs?: number;
83
+ /** When true, adds margin to Rail+Panel and triggers gray backdrop on Shell. */
84
+ inset?: boolean;
79
85
  };
80
86
  type PanelComponent = React.ForwardRefExoticComponent<PanelPublicProps & React.RefAttributes<HTMLDivElement>> & {
81
87
  Handle: HandleComponent;
82
88
  };
83
89
  declare const Panel: PanelComponent;
84
90
  interface ShellContentProps extends React.ComponentPropsWithoutRef<'main'> {
91
+ /** When true, adds margin and triggers gray backdrop on Shell. */
92
+ inset?: boolean;
85
93
  }
86
94
  declare const Content: React.ForwardRefExoticComponent<ShellContentProps & React.RefAttributes<HTMLElement>>;
87
95
  type TriggerAction = 'toggle' | 'expand' | 'collapse';
@@ -1 +1 @@
1
- {"version":3,"file":"shell.d.ts","sourceRoot":"","sources":["../../../src/components/shell.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"shell.d.ts","sourceRoot":"","sources":["../../../src/components/shell.tsx"],"names":[],"mappings":"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"}
@@ -1,2 +1,2 @@
1
- "use client";import*as e from"react";import K from"classnames";import*as Me from"./sheet.js";import{VisuallyHidden as _e}from"./visually-hidden.js";import{useResponsivePresentation as Ee,useResponsiveInitialState as De}from"./shell.hooks.js";import{PaneResizeContext as Ae}from"./_internal/shell-resize.js";import{PaneHandle as Be,PanelHandle as ye}from"./_internal/shell-handles.js";import{omitPaneProps as we,extractPaneDomProps as He,mapResponsiveBooleanToPaneMode as Ve}from"./_internal/shell-prop-helpers.js";import{Sidebar as pe}from"./_internal/shell-sidebar.js";import{Bottom as Pe}from"./_internal/shell-bottom.js";import{Inspector as be}from"./_internal/shell-inspector.js";import{_BREAKPOINTS as Ie}from"./shell.types.js";import{normalizeToPx as Ue}from"../helpers/normalize-to-px.js";import{ShellProvider as Fe,useShell as re,LeftModeContext as $e,PanelModeContext as je,SidebarModeContext as We,InspectorModeContext as qe,BottomModeContext as Ge,PresentationContext as Qe,PeekContext as Ke,ActionsContext as Xe,CompositionContext as Ye}from"./shell.context.js";function Je(){const[t,l]=e.useState("initial"),[i,h]=e.useState(!1);return e.useEffect(()=>{if(typeof window>"u")return;const C=Object.entries(Ie).map(([p,r])=>[p,window.matchMedia(r)]),y=()=>{const p=C.filter(([,c])=>c.matches).map(([c])=>c),r=p[p.length-1]??"initial";l(r),h(!0)};y();const m=[];return C.forEach(([,p])=>{const r=p;typeof r.addEventListener=="function"&&typeof r.removeEventListener=="function"?(r.addEventListener("change",y),m.push(()=>r.removeEventListener?.("change",y))):typeof r.addListener=="function"&&typeof r.removeListener=="function"&&(r.addListener(y),m.push(()=>r.removeListener?.(y)))}),()=>{m.forEach(p=>{try{p()}catch{}})}},[]),{bp:t,ready:i}}const ce=Symbol("rtShellSlot");function X(t,l){return t[ce]=l,t}function Mn(t,l){if(!e.isValidElement(t))return!1;const i=t.type;if(i===l)return!0;const h=l?.[ce];return!!(i?.[ce]&&h&&i[ce]===h)}X(pe,"Shell.Sidebar"),X(be,"Shell.Inspector"),X(Pe,"Shell.Bottom");function Ze(t,l){switch(l.type){case"SET_LEFT_MODE":return l.mode==="collapsed"?{...t,leftMode:"collapsed",panelMode:"collapsed"}:{...t,leftMode:l.mode};case"SET_PANEL_MODE":return l.mode==="expanded"&&t.leftMode!=="expanded"?{...t,leftMode:"expanded",panelMode:"expanded"}:{...t,panelMode:l.mode};case"SET_SIDEBAR_MODE":return{...t,sidebarMode:l.mode};case"SET_INSPECTOR_MODE":return{...t,inspectorMode:l.mode};case"SET_BOTTOM_MODE":return{...t,bottomMode:l.mode};case"TOGGLE_PANE":{switch(l.target){case"left":case"rail":return{...t,leftMode:t.leftMode==="expanded"?"collapsed":"expanded",panelMode:t.leftMode==="expanded"?"collapsed":t.panelMode};case"panel":return t.leftMode==="collapsed"?{...t,leftMode:"expanded",panelMode:"expanded"}:{...t,panelMode:t.panelMode==="expanded"?"collapsed":"expanded"};case"sidebar":{const i=t.sidebarMode==="collapsed"?"expanded":t.sidebarMode==="expanded"?"collapsed":"expanded";return{...t,sidebarMode:i}}case"inspector":return{...t,inspectorMode:t.inspectorMode==="expanded"?"collapsed":"expanded"};case"bottom":return{...t,bottomMode:t.bottomMode==="expanded"?"collapsed":"expanded"};default:return t}return t}case"EXPAND_PANE":{switch(l.target){case"left":case"rail":return{...t,leftMode:"expanded"};case"panel":return{...t,leftMode:"expanded",panelMode:"expanded"};case"sidebar":return{...t,sidebarMode:"expanded"};case"inspector":return{...t,inspectorMode:"expanded"};case"bottom":return{...t,bottomMode:"expanded"};default:return t}return t}case"COLLAPSE_PANE":{switch(l.target){case"left":case"rail":return{...t,leftMode:"collapsed",panelMode:"collapsed"};case"panel":return{...t,panelMode:"collapsed"};case"sidebar":return{...t,sidebarMode:"collapsed"};case"inspector":return{...t,inspectorMode:"collapsed"};case"bottom":return{...t,bottomMode:"collapsed"};default:return t}return t}}return t}const Se=e.forwardRef(({className:t,children:l,height:i="full",...h},b)=>{const{bp:C,ready:y}=Je(),m=e.Children.toArray(l),p=m.some(n=>e.isValidElement(n)&&n.type?.displayName==="Shell.Panel"&&!!n.props?.defaultOpen),r=m.some(n=>e.isValidElement(n)&&n.type?.displayName==="Shell.Rail"&&!!n.props?.defaultOpen),c=m.some(n=>e.isValidElement(n)&&n.type?.displayName==="Shell.Inspector"&&!!n.props?.defaultOpen),L=m.some(n=>e.isValidElement(n)&&n.type?.displayName==="Shell.Inspector"&&typeof n.props?.open<"u"&&!!n.props?.open),A=()=>{const n=m.find(v=>e.isValidElement(v)&&v.type?.displayName==="Shell.Sidebar");if(!n)return"expanded";const d=n.props;if(typeof d?.state<"u"){if(typeof d.state=="string")return d.state;if(typeof d.state=="object")return d.state.initial??Object.values(d.state)[0]??"expanded"}if(typeof d?.defaultState<"u"){if(typeof d.defaultState=="string")return d.defaultState;if(typeof d.defaultState=="object")return d.defaultState.initial??Object.values(d.defaultState)[0]??"expanded"}return"expanded"},V=()=>{const n=m.find(v=>e.isValidElement(v)&&v.type?.displayName==="Shell.Bottom");if(!n)return"collapsed";const d=n.props;if(typeof d?.open<"u"){if(typeof d.open=="boolean")return d.open?"expanded":"collapsed";if(typeof d.open=="object")return d.open.initial??Object.values(d.open)[0]?"expanded":"collapsed"}return typeof d?.defaultOpen<"u"&&d.defaultOpen?"expanded":"collapsed"},[o,u]=e.useReducer(Ze,{leftMode:p||r?"expanded":"collapsed",panelMode:p?"expanded":"collapsed",sidebarMode:A(),inspectorMode:c||L?"expanded":"collapsed",bottomMode:V()}),z=e.useCallback(n=>u({type:"SET_LEFT_MODE",mode:n}),[]),k=e.useCallback(n=>u({type:"SET_PANEL_MODE",mode:n}),[]),O=e.useCallback(n=>u({type:"SET_SIDEBAR_MODE",mode:n}),[]),I=e.useCallback(n=>u({type:"SET_INSPECTOR_MODE",mode:n}),[]),B=e.useCallback(n=>u({type:"SET_BOTTOM_MODE",mode:n}),[]),[_,U]=e.useState(!1),[w,Z]=e.useState(!1),E=e.useRef(n=>n==="collapsed"?"thin":n==="thin"?"expanded":"collapsed"),g=e.useCallback(n=>{E.current=n},[]);e.useEffect(()=>{w&&_&&console.warn("Shell: Sidebar cannot coexist with Rail or Panel. Use either Rail+Panel OR Sidebar.")},[w,_]);const[T,D]=e.useState(void 0),x=e.useCallback(n=>D(n),[]),H=e.useRef(64),s=e.useRef(288),$=e.useCallback(n=>{H.current=n},[]),j=e.useCallback(n=>{s.current=n},[]),q=e.useMemo(()=>{const n=e.Children.toArray(l),d=(v,le)=>e.isValidElement(v)&&(v.type===le||v.type?.displayName===le.displayName);return n.some(v=>d(v,Y)||d(v,J))},[l]),M=e.useMemo(()=>{const n=e.Children.toArray(l),d=(v,le)=>e.isValidElement(v)&&(v.type===le||v.type?.displayName===le.displayName);return n.some(v=>d(v,pe))},[l]),f=e.useCallback(n=>{if(n==="sidebar"){const d=E.current(o.sidebarMode);O(d);return}u({type:"TOGGLE_PANE",target:n})},[o.sidebarMode,O]),ee=e.useCallback(n=>{if(n==="sidebar")return O("expanded");u({type:"EXPAND_PANE",target:n})},[O]),G=e.useCallback(n=>{if(n==="sidebar")return O("collapsed");u({type:"COLLAPSE_PANE",target:n})},[O]),te=e.useMemo(()=>({leftMode:o.leftMode,setLeftMode:z,panelMode:o.panelMode,setPanelMode:k,sidebarMode:o.sidebarMode,setSidebarMode:O,inspectorMode:o.inspectorMode,setInspectorMode:I,bottomMode:o.bottomMode,setBottomMode:B,hasLeft:_,setHasLeft:U,hasSidebar:w,setHasSidebar:Z,currentBreakpoint:C,currentBreakpointReady:y,leftResolvedPresentation:T,togglePane:f,expandPane:ee,collapsePane:G,setSidebarToggleComputer:g,onLeftPres:x,onRailDefaults:$,onPanelDefaults:j}),[o.leftMode,z,o.panelMode,k,o.sidebarMode,O,o.inspectorMode,I,o.bottomMode,B,_,w,C,y,T,f,ee,G,g,x,$,j]),F=e.Children.toArray(l),N=(n,d)=>e.isValidElement(n)&&(n.type===d||n.type?.displayName===d.displayName),oe=F.filter(n=>N(n,he)),W=F.filter(n=>N(n,Y)),ae=F.filter(n=>N(n,J)),me=F.filter(n=>N(n,pe)),a=F.filter(n=>N(n,fe)),P=F.filter(n=>N(n,be)),S=F.filter(n=>N(n,Pe)),R=W[0]?.props?.open;e.useEffect(()=>{if(typeof R>"u")return;z(!!R?"expanded":"collapsed")},[R,z]);const se=e.useMemo(()=>i==="full"?{height:"100vh"}:i==="auto"?{height:"auto"}:typeof i=="string"?{height:i}:typeof i=="number"?{height:`${i}px`}:{},[i]),[Q,ne]=e.useState(null),de=e.useCallback(n=>ne(n),[]),ie=e.useCallback(()=>ne(null),[]),Ce=e.useMemo(()=>({currentBreakpoint:C,currentBreakpointReady:y,leftResolvedPresentation:T}),[C,y,T]),xe=e.useMemo(()=>({leftMode:o.leftMode,setLeftMode:z}),[o.leftMode,z]),Re=e.useMemo(()=>({panelMode:o.panelMode,setPanelMode:k}),[o.panelMode,k]),ge=e.useMemo(()=>({sidebarMode:o.sidebarMode,setSidebarMode:O}),[o.sidebarMode,O]),Te=e.useMemo(()=>({inspectorMode:o.inspectorMode,setInspectorMode:I}),[o.inspectorMode,I]),Oe=e.useMemo(()=>({bottomMode:o.bottomMode,setBottomMode:B}),[o.bottomMode,B]),Le=e.useMemo(()=>({hasLeft:_,setHasLeft:U,hasSidebar:w,setHasSidebar:Z}),[_,U,w,Z]),ze=e.useMemo(()=>({peekTarget:Q,setPeekTarget:ne,peekPane:de,clearPeek:ie}),[Q,ne,de,ie]),ke=e.useMemo(()=>({togglePane:f,expandPane:ee,collapsePane:G,setSidebarToggleComputer:g}),[f,ee,G,g]),Ne=e.useMemo(()=>({...te,peekTarget:Q,setPeekTarget:ne,peekPane:de,clearPeek:ie}),[te,Q,ne,de,ie]);return e.createElement("div",{...h,ref:b,className:K("rt-ShellRoot",t),style:{...se,...h.style}},e.createElement(Fe,{value:Ne},e.createElement(Qe.Provider,{value:Ce},e.createElement($e.Provider,{value:xe},e.createElement(je.Provider,{value:Re},e.createElement(We.Provider,{value:ge},e.createElement(qe.Provider,{value:Te},e.createElement(Ge.Provider,{value:Oe},e.createElement(Ye.Provider,{value:Le},e.createElement(Ke.Provider,{value:ze},e.createElement(Xe.Provider,{value:ke},oe,e.createElement("div",{className:"rt-ShellBody","data-peek-target":Q??void 0,style:Q==="rail"||Q==="panel"?{"--peek-rail-width":`${H.current}px`}:void 0},q&&!M?(()=>{const n=W[0],d=n?{onOpenChange:n.props?.onOpenChange,open:n.props?.open,defaultOpen:n.props?.defaultOpen,presentation:n.props?.presentation,collapsible:n.props?.collapsible,onExpand:n.props?.onExpand,onCollapse:n.props?.onCollapse}:{defaultOpen:p?!0:void 0};return e.createElement(ue,{...d},W,ae)})():me,a,P),S)))))))))))});Se.displayName="Shell.Root";const he=e.forwardRef(({className:t,height:l=64,style:i,...h},b)=>e.createElement("header",{...h,ref:b,className:K("rt-ShellHeader",t),style:{...i,"--shell-header-height":`${l}px`}}));he.displayName="Shell.Header";const en=["open","defaultOpen","onOpenChange","mode","defaultMode","onModeChange"],ue=e.forwardRef((t,l)=>{const{className:i,presentation:h={initial:"fixed",sm:"fixed"},collapsible:b=!0,onExpand:C,onCollapse:y,children:m,style:p,...r}=t,c=r.open,L=r.defaultOpen,A=r.onOpenChange,V=we(r,en),o=re(),u=Ee(h),z=u==="overlay",k=u==="stacked",O=e.useRef(null);e.useEffect(()=>{o.onLeftPres?.(u)},[o,u]);const I=e.useCallback(E=>{O.current=E,typeof l=="function"?l(E):l&&(l.current=E)},[l]);e.useEffect(()=>(o.setHasLeft(!0),()=>o.setHasLeft(!1)),[o]);const B=e.useRef(null),_=e.useRef(!1),U=e.useMemo(()=>{if(!(typeof c>"u"))return c?"expanded":"collapsed"},[c]),w=e.useMemo(()=>Ve(L),[L]);De({controlledValue:U,defaultValue:w,currentValue:o.leftMode,setValue:o.setLeftMode,breakpointReady:o.currentBreakpointReady,onInit:E=>A?.(E==="expanded",{reason:"init"})}),e.useEffect(()=>{typeof c<"u"||(B.current!==null&&B.current!==o.leftMode&&A?.(o.leftMode==="expanded",{reason:"toggle"}),B.current=o.leftMode)},[o,A,c]),e.useEffect(()=>{o.leftMode==="expanded"?C?.():y?.()},[o.leftMode,C,y]);const Z=o.leftMode==="expanded";if(z){const E=o.leftMode==="expanded",g=e.Children.toArray(m),T=(M,f)=>e.isValidElement(M)&&M.type===f,D=g.find(M=>T(M,Y)),x=g.find(M=>T(M,J)),H=typeof D?.props?.expandedSize=="number"?D.props.expandedSize:64,s=typeof x?.props?.expandedSize=="number"?x.props.expandedSize:288,$=!!D,j=!!x,q=($?H:0)+(o.panelMode==="expanded"&&j?s:0);return e.createElement(Me.Root,{open:E,onOpenChange:M=>o.setLeftMode(M?"expanded":"collapsed")},e.createElement(Me.Content,{side:"start",style:{padding:0},width:{initial:`${q}px`}},e.createElement(_e,null,e.createElement(Me.Title,null,"Navigation")),e.createElement("div",{className:"rt-ShellLeft"},m)))}if(k){const E=o.leftMode==="expanded",g=e.Children.toArray(m),T=(M,f)=>e.isValidElement(M)&&M.type===f,D=g.find(M=>T(M,Y)),x=g.find(M=>T(M,J)),H=typeof D?.props?.expandedSize=="number"?D.props.expandedSize:64,s=typeof x?.props?.expandedSize=="number"?x.props.expandedSize:288,$=!!D,q=!!x&&(o.panelMode==="expanded"||o.peekTarget==="panel");return e.createElement("div",{...V,ref:I,className:K("rt-ShellLeft",i),"data-mode":o.leftMode,"data-peek":o.peekTarget==="left"||o.peekTarget==="rail"||o.peekTarget==="panel"||void 0,"data-presentation":u,style:{...p},"data-open":E||void 0},m)}return e.createElement("div",{...V,ref:I,className:K("rt-ShellLeft",i),"data-mode":o.leftMode,"data-peek":o.peekTarget==="left"||o.peekTarget==="rail"||o.peekTarget==="panel"||void 0,"data-presentation":u,style:{...p}},m)});ue.displayName="Shell.Left",X(ue,"Shell.Left");const Y=e.forwardRef((t,l)=>{const{className:i,presentation:h,expandedSize:b=64,collapsible:C,onExpand:y,onCollapse:m,children:p,style:r,open:c,defaultOpen:L,onOpenChange:A,...V}=t,o=re(),u=e.useRef(null);e.useEffect(()=>{const k=typeof c<"u";if(u.current===null){u.current=k;return}u.current!==k&&(console.warn("Shell.Rail: Switching between controlled and uncontrolled `open` is not supported."),u.current=k)},[c]),e.useEffect(()=>{o.onRailDefaults?.(b)},[o,b]);const z=o.leftMode==="expanded";return e.createElement("div",{...V,ref:l,className:K("rt-ShellRail",i),"data-mode":o.leftMode,"data-peek":o.currentBreakpointReady&&o.leftResolvedPresentation!=="overlay"&&o.peekTarget==="rail"||void 0,style:{...r,"--rail-size":`${b}px`}},e.createElement("div",{className:"rt-ShellRailContent","data-visible":o.currentBreakpointReady&&(z||o.leftResolvedPresentation!=="overlay"&&o.peekTarget==="rail")||void 0},p))});Y.displayName="Shell.Rail",X(Y,"Shell.Rail");const nn=["className","children","defaultOpen","open","onOpenChange","size","defaultSize","onSizeChange","sizeUpdate","sizeUpdateMs","style"],J=X(e.forwardRef((t,l)=>{const{className:i,defaultOpen:h,open:b,onOpenChange:C,size:y,defaultSize:m,expandedSize:p=288,minSize:r,maxSize:c,resizable:L,collapsible:A=!0,onExpand:V,onCollapse:o,onResize:u,onResizeStart:z,onResizeEnd:k,snapPoints:O,snapTolerance:I,collapseThreshold:B,paneId:_,persistence:U,children:w,style:Z,onSizeChange:E,sizeUpdate:g,sizeUpdateMs:T=50}=t,D=He(t,nn),x=e.useRef(null);e.useEffect(()=>()=>{x.current&&(clearTimeout(x.current),x.current=null)},[E,g,T]);const H=e.useMemo(()=>{if(!E)return()=>{};if(g==="debounce")return(P,S)=>{x.current&&clearTimeout(x.current),x.current=setTimeout(()=>{E?.(P,S),x.current=null},T)};if(g==="throttle"){let a=0;return(P,S)=>{const R=Date.now();R-a>=T&&(a=R,E?.(P,S))}}return(a,P)=>E?.(a,P)},[E,g,T]),s=re(),$=e.useRef(null),j=e.useRef(null),q=e.useRef(!1);e.useEffect(()=>{typeof b>"u"&&typeof h=="boolean"&&(h?(s.setLeftMode("expanded"),s.setPanelMode("expanded")):s.setPanelMode("collapsed"))},[]),e.useEffect(()=>{typeof b>"u"||(b?(s.leftMode!=="expanded"&&s.setLeftMode("expanded"),s.panelMode!=="expanded"&&s.setPanelMode("expanded")):s.panelMode!=="collapsed"&&s.setPanelMode("collapsed"))},[s,b]);const M=e.useRef(null);e.useEffect(()=>{const a=typeof b<"u";if(M.current===null){M.current=a;return}M.current!==a&&(console.warn("Shell.Panel: Switching between controlled and uncontrolled `open` is not supported."),M.current=a)},[b]),e.useEffect(()=>{q.current||typeof b>"u"&&h&&s.panelMode==="expanded"&&(C?.(!0,{reason:"init"}),q.current=!0)},[]),e.useEffect(()=>{s.onPanelDefaults?.(p)},[s,p]);const f=e.useRef(null),ee=e.useCallback(a=>{f.current=a,typeof l=="function"?l(a):l&&(l.current=a)},[l]),G=e.Children.toArray(w),te=G.filter(a=>e.isValidElement(a)&&a.type===ye),F=G.filter(a=>!(e.isValidElement(a)&&a.type===ye)),N=s.leftResolvedPresentation==="overlay",oe=e.useCallback(a=>Ue(a,"horizontal"),[]),W=e.useMemo(()=>{if(!_||U)return U;const a=`kookie-ui:shell:panel:${_}`;return{load:()=>{if(typeof window>"u")return;const S=window.localStorage.getItem(a);return S?Number(S):void 0},save:S=>{typeof window>"u"||window.localStorage.setItem(a,String(S))}}},[_,U]);e.useEffect(()=>{let a=!0;return(async()=>{if(!L||!W?.load||N)return;const P=await W.load();a&&typeof P=="number"&&f.current&&(f.current.style.setProperty("--panel-size",`${P}px`),u?.(P))})(),()=>{a=!1}},[L,W,u,N]),e.useEffect(()=>{f.current&&N&&f.current.style.setProperty("--panel-size",`${p}px`)},[N,p]),e.useEffect(()=>{if(f.current&&typeof y>"u"&&typeof m<"u"){const a=oe(m);if(typeof a=="number"&&Number.isFinite(a)){const R=Math.min((typeof c=="number"?c:void 0)??a,Math.max((typeof r=="number"?r:void 0)??a,a));f.current.style.setProperty("--panel-size",`${R}px`),H(R,{reason:"init"})}}},[]),e.useEffect(()=>{if(!f.current||typeof y>"u")return;const a=oe(y);if(typeof a=="number"&&Number.isFinite(a)){const R=Math.min((typeof c=="number"?c:void 0)??a,Math.max((typeof r=="number"?r:void 0)??a,a));f.current.style.setProperty("--panel-size",`${R}px`),H(R,{reason:"controlled"})}},[y,r,c,oe,H]),e.useEffect(()=>{if(f.current&&s.leftResolvedPresentation!=="overlay"&&s.leftMode==="expanded"&&s.panelMode==="expanded"){const a=f.current.parentElement||null;try{a?.style.removeProperty("width")}catch{}}},[s.leftResolvedPresentation,s.leftMode,s.panelMode]);const ae=s.leftMode==="expanded"&&s.panelMode==="expanded";e.useEffect(()=>{const a=$.current,P=j.current;if(a!==null&&a!==s.panelMode){const S=s.panelMode==="expanded";let R="toggle";P!==s.leftMode&&s.leftMode==="collapsed"&&!S&&(R="left"),C?.(S,{reason:R})}$.current=s.panelMode,j.current=s.leftMode},[s.panelMode,s.leftMode,C]);const me=L&&s.leftResolvedPresentation!=="overlay"&&ae?e.createElement(Ae.Provider,{value:{containerRef:f,cssVarName:"--panel-size",minSize:typeof r=="number"?r:100,maxSize:typeof c=="number"?c:800,defaultSize:p,orientation:"vertical",edge:"end",computeNext:(a,P,S)=>{const R=getComputedStyle(f.current).direction==="rtl",se=a-P;return S+(R?-se:se)},onResize:u,onResizeStart:a=>{const S=f.current?.parentElement;try{S?.style.removeProperty("width")}catch{}z?.(a)},onResizeEnd:a=>{k?.(a),H(a,{reason:"resize"}),W?.save?.(a)},target:"panel",collapsible:!!A,snapPoints:O,snapTolerance:I??8,collapseThreshold:B,requestCollapse:()=>s.setPanelMode("collapsed"),requestToggle:()=>s.togglePane("panel")}},te.length>0?te.map((a,P)=>e.cloneElement(a,{key:a.key??P})):e.createElement(Be,null)):null;return e.createElement("div",{...D,ref:ee,className:K("rt-ShellPanel",i),"data-mode":s.panelMode,"data-visible":s.currentBreakpointReady&&(ae||s.leftResolvedPresentation!=="overlay"&&s.peekTarget==="panel")||void 0,"data-peek":s.currentBreakpointReady&&s.leftResolvedPresentation!=="overlay"&&s.peekTarget==="panel"||void 0,style:{...Z,"--panel-size":`${p}px`}},e.createElement("div",{className:"rt-ShellPanelContent","data-visible":ae||void 0},F),me)}),"Shell.Panel");J.displayName="Shell.Panel",J.Handle=ye;const fe=e.forwardRef(({className:t,...l},i)=>e.createElement("main",{...l,ref:i,className:K("rt-ShellContent",t)}));fe.displayName="Shell.Content",X(fe,"Shell.Content");const ve=e.forwardRef(({target:t,action:l="toggle",peekOnHover:i,onClick:h,onMouseEnter:b,onMouseLeave:C,children:y,...m},p)=>{const r=re(),c=e.useCallback(o=>{switch(h?.(o),r.peekTarget===t&&r.clearPeek(),l){case"toggle":r.togglePane(t);break;case"expand":r.expandPane(t);break;case"collapse":r.collapsePane(t);break}},[r,t,l,h]),L=(()=>{switch(t){case"left":case"rail":return r.leftMode==="collapsed";case"panel":return r.leftMode==="collapsed"||r.panelMode==="collapsed";case"sidebar":return r.sidebarMode==="collapsed";case"inspector":return r.inspectorMode==="collapsed";case"bottom":return r.bottomMode==="collapsed"}})(),A=e.useCallback(o=>{b?.(o),!(!i||!L)&&r.peekPane(t)},[b,i,L,r,t]),V=e.useCallback(o=>{C?.(o),i&&r.peekTarget===t&&r.clearPeek()},[C,i,r,t]);return e.createElement("button",{...m,ref:p,onClick:c,onMouseEnter:A,onMouseLeave:V,"data-shell-trigger":t,"data-shell-action":l,"aria-expanded":!L},y)});ve.displayName="Shell.Trigger";export{Pe as Bottom,fe as Content,he as Header,be as Inspector,ue as Left,J as Panel,Y as Rail,Se as Root,pe as Sidebar,ve as Trigger,Ee as useResponsivePresentation,re as useShell};
1
+ "use client";import*as e from"react";import X from"classnames";import*as he from"./sheet.js";import{VisuallyHidden as $e}from"./visually-hidden.js";import{useResponsivePresentation as Oe,useResponsiveInitialState as Le}from"./shell.hooks.js";import{PaneResizeContext as We}from"./_internal/shell-resize.js";import{PaneHandle as qe,PanelHandle as Se}from"./_internal/shell-handles.js";import{omitPaneProps as Ge,extractPaneDomProps as Qe,mapResponsiveBooleanToPaneMode as Ee}from"./_internal/shell-prop-helpers.js";import{Sidebar as ue}from"./_internal/shell-sidebar.js";import{Bottom as ve}from"./_internal/shell-bottom.js";import{Inspector as Ce}from"./_internal/shell-inspector.js";import{_BREAKPOINTS as Ke}from"./shell.types.js";import{normalizeToPx as Xe}from"../helpers/normalize-to-px.js";import{ShellProvider as Ye,useShell as ie,LeftModeContext as Je,PanelModeContext as Ze,SidebarModeContext as en,InspectorModeContext as nn,BottomModeContext as tn,PresentationContext as on,PeekContext as an,ActionsContext as ln,CompositionContext as sn,InsetContext as rn,useInset as ke}from"./shell.context.js";function dn(){const[t,a]=e.useState("initial"),[i,C]=e.useState(!1);return e.useEffect(()=>{if(typeof window>"u")return;const P=Object.entries(Ke).map(([f,l])=>[f,window.matchMedia(l)]),S=()=>{const f=P.filter(([,c])=>c.matches).map(([c])=>c),l=f[f.length-1]??"initial";a(l),C(!0)};S();const b=[];return P.forEach(([,f])=>{const l=f;typeof l.addEventListener=="function"&&typeof l.removeEventListener=="function"?(l.addEventListener("change",S),b.push(()=>l.removeEventListener?.("change",S))):typeof l.addListener=="function"&&typeof l.removeListener=="function"&&(l.addListener(S),b.push(()=>l.removeListener?.(S)))}),()=>{b.forEach(f=>{try{f()}catch{}})}},[]),{bp:t,ready:i}}const fe=Symbol("rtShellSlot");function Y(t,a){return t[fe]=a,t}function Rn(t,a){if(!e.isValidElement(t))return!1;const i=t.type;if(i===a)return!0;const C=a?.[fe];return!!(i?.[fe]&&C&&i[fe]===C)}Y(ue,"Shell.Sidebar"),Y(Ce,"Shell.Inspector"),Y(ve,"Shell.Bottom");function pn(t,a){switch(a.type){case"SET_LEFT_MODE":return a.mode==="collapsed"?{...t,leftMode:"collapsed",panelMode:"collapsed"}:{...t,leftMode:a.mode};case"SET_PANEL_MODE":return a.mode==="expanded"&&t.leftMode!=="expanded"?{...t,leftMode:"expanded",panelMode:"expanded"}:{...t,panelMode:a.mode};case"SET_SIDEBAR_MODE":return{...t,sidebarMode:a.mode};case"SET_INSPECTOR_MODE":return{...t,inspectorMode:a.mode};case"SET_BOTTOM_MODE":return{...t,bottomMode:a.mode};case"TOGGLE_PANE":{switch(a.target){case"left":case"rail":return{...t,leftMode:t.leftMode==="expanded"?"collapsed":"expanded",panelMode:t.leftMode==="expanded"?"collapsed":t.panelMode};case"panel":return t.leftMode==="collapsed"?{...t,leftMode:"expanded",panelMode:"expanded"}:{...t,panelMode:t.panelMode==="expanded"?"collapsed":"expanded"};case"sidebar":{const i=t.sidebarMode==="collapsed"?"expanded":t.sidebarMode==="expanded"?"collapsed":"expanded";return{...t,sidebarMode:i}}case"inspector":return{...t,inspectorMode:t.inspectorMode==="expanded"?"collapsed":"expanded"};case"bottom":return{...t,bottomMode:t.bottomMode==="expanded"?"collapsed":"expanded"};default:return t}return t}case"EXPAND_PANE":{switch(a.target){case"left":case"rail":return{...t,leftMode:"expanded"};case"panel":return{...t,leftMode:"expanded",panelMode:"expanded"};case"sidebar":return{...t,sidebarMode:"expanded"};case"inspector":return{...t,inspectorMode:"expanded"};case"bottom":return{...t,bottomMode:"expanded"};default:return t}return t}case"COLLAPSE_PANE":{switch(a.target){case"left":case"rail":return{...t,leftMode:"collapsed",panelMode:"collapsed"};case"panel":return{...t,panelMode:"collapsed"};case"sidebar":return{...t,sidebarMode:"collapsed"};case"inspector":return{...t,inspectorMode:"collapsed"};case"bottom":return{...t,bottomMode:"collapsed"};default:return t}return t}}return t}const ze=e.forwardRef(({className:t,children:a,height:i="full",...C},M)=>{const{bp:P,ready:S}=dn(),b=e.Children.toArray(a),f=b.some(n=>e.isValidElement(n)&&n.type?.displayName==="Shell.Panel"&&!!n.props?.defaultOpen),l=b.find(n=>e.isValidElement(n)&&n.type?.displayName==="Shell.Rail"),c=l?l.props?.defaultOpen:void 0,z=l?c===void 0?!0:typeof c=="boolean"?c:typeof c=="object"?c.initial??Object.values(c)[0]??!0:!0:!1,j=b.some(n=>e.isValidElement(n)&&n.type?.displayName==="Shell.Inspector"&&!!n.props?.defaultOpen),_=b.some(n=>e.isValidElement(n)&&n.type?.displayName==="Shell.Inspector"&&typeof n.props?.open<"u"&&!!n.props?.open),h=()=>{const n=b.find(u=>e.isValidElement(u)&&u.type?.displayName==="Shell.Sidebar");if(!n)return"expanded";const d=n.props;if(typeof d?.state<"u"){if(typeof d.state=="string")return d.state;if(typeof d.state=="object")return d.state.initial??Object.values(d.state)[0]??"expanded"}if(typeof d?.defaultState<"u"){if(typeof d.defaultState=="string")return d.defaultState;if(typeof d.defaultState=="object")return d.defaultState.initial??Object.values(d.defaultState)[0]??"expanded"}return"expanded"},L=()=>{const n=b.find(u=>e.isValidElement(u)&&u.type?.displayName==="Shell.Bottom");if(!n)return"collapsed";const d=n.props;if(typeof d?.open<"u"){if(typeof d.open=="boolean")return d.open?"expanded":"collapsed";if(typeof d.open=="object")return d.open.initial??Object.values(d.open)[0]?"expanded":"collapsed"}return typeof d?.defaultOpen<"u"&&d.defaultOpen?"expanded":"collapsed"},[p,r]=e.useReducer(pn,{leftMode:f||z?"expanded":"collapsed",panelMode:f?"expanded":"collapsed",sidebarMode:h(),inspectorMode:j||_?"expanded":"collapsed",bottomMode:L()}),g=e.useCallback(n=>r({type:"SET_LEFT_MODE",mode:n}),[]),F=e.useCallback(n=>r({type:"SET_PANEL_MODE",mode:n}),[]),k=e.useCallback(n=>r({type:"SET_SIDEBAR_MODE",mode:n}),[]),w=e.useCallback(n=>r({type:"SET_INSPECTOR_MODE",mode:n}),[]),A=e.useCallback(n=>r({type:"SET_BOTTOM_MODE",mode:n}),[]),[D,ee]=e.useState(!1),[T,I]=e.useState(!1),$=e.useRef(n=>n==="collapsed"?"thin":n==="thin"?"expanded":"collapsed"),R=e.useCallback(n=>{$.current=n},[]);e.useEffect(()=>{T&&D&&console.warn("Shell: Sidebar cannot coexist with Rail or Panel. Use either Rail+Panel OR Sidebar.")},[T,D]);const[x,B]=e.useState(void 0),s=e.useCallback(n=>B(n),[]),N=e.useRef(64),W=e.useRef(288),ne=e.useCallback(n=>{N.current=n},[]),q=e.useCallback(n=>{W.current=n},[]),te=e.useMemo(()=>{const n=e.Children.toArray(a),d=(u,K)=>e.isValidElement(u)&&(u.type===K||u.type?.displayName===K.displayName);return n.some(u=>d(u,J)||d(u,Z))},[a]),oe=e.useMemo(()=>{const n=e.Children.toArray(a),d=(u,K)=>e.isValidElement(u)&&(u.type===K||u.type?.displayName===K.displayName);return n.some(u=>d(u,ue))},[a]),m=e.useCallback(n=>{if(n==="sidebar"){const d=$.current(p.sidebarMode);k(d);return}r({type:"TOGGLE_PANE",target:n})},[p.sidebarMode,k]),y=e.useCallback(n=>{if(n==="sidebar")return k("expanded");r({type:"EXPAND_PANE",target:n})},[k]),ae=e.useCallback(n=>{if(n==="sidebar")return k("collapsed");r({type:"COLLAPSE_PANE",target:n})},[k]),re=e.useMemo(()=>({leftMode:p.leftMode,setLeftMode:g,panelMode:p.panelMode,setPanelMode:F,sidebarMode:p.sidebarMode,setSidebarMode:k,inspectorMode:p.inspectorMode,setInspectorMode:w,bottomMode:p.bottomMode,setBottomMode:A,hasLeft:D,setHasLeft:ee,hasSidebar:T,setHasSidebar:I,currentBreakpoint:P,currentBreakpointReady:S,leftResolvedPresentation:x,togglePane:m,expandPane:y,collapsePane:ae,setSidebarToggleComputer:R,onLeftPres:s,onRailDefaults:ne,onPanelDefaults:q}),[p.leftMode,g,p.panelMode,F,p.sidebarMode,k,p.inspectorMode,w,p.bottomMode,A,D,T,P,S,x,m,y,ae,R,s,ne,q]),H=e.Children.toArray(a),U=(n,d)=>e.isValidElement(n)&&(n.type===d||n.type?.displayName===d.displayName),le=H.filter(n=>U(n,xe)),G=H.filter(n=>U(n,J)),Q=H.filter(n=>U(n,Z)),de=H.filter(n=>U(n,ue)),ye=H.filter(n=>U(n,Me)),o=H.filter(n=>U(n,Ce)),E=H.filter(n=>U(n,ve)),v=G[0]?.props?.open;e.useEffect(()=>{if(typeof v>"u")return;g(!!v?"expanded":"collapsed")},[v,g]);const O=e.useMemo(()=>i==="full"?{height:"100vh"}:i==="auto"?{height:"auto"}:typeof i=="string"?{height:i}:typeof i=="number"?{height:`${i}px`}:{},[i]),[V,se]=e.useState(null),pe=e.useCallback(n=>se(n),[]),ce=e.useCallback(()=>se(null),[]),_e=e.useMemo(()=>({currentBreakpoint:P,currentBreakpointReady:S,leftResolvedPresentation:x}),[P,S,x]),De=e.useMemo(()=>({leftMode:p.leftMode,setLeftMode:g}),[p.leftMode,g]),Be=e.useMemo(()=>({panelMode:p.panelMode,setPanelMode:F}),[p.panelMode,F]),Ae=e.useMemo(()=>({sidebarMode:p.sidebarMode,setSidebarMode:k}),[p.sidebarMode,k]),we=e.useMemo(()=>({inspectorMode:p.inspectorMode,setInspectorMode:w}),[p.inspectorMode,w]),Ie=e.useMemo(()=>({bottomMode:p.bottomMode,setBottomMode:A}),[p.bottomMode,A]),He=e.useMemo(()=>({hasLeft:D,setHasLeft:ee,hasSidebar:T,setHasSidebar:I}),[D,ee,T,I]),[Pe,Re]=e.useState(new Set),ge=e.useCallback(n=>{Re(d=>{if(d.has(n))return d;const u=new Set(d);return u.add(n),u})},[]),Te=e.useCallback(n=>{Re(d=>{if(!d.has(n))return d;const u=new Set(d);return u.delete(n),u})},[]),be=Pe.size>0,Ve=e.useMemo(()=>({insetPanes:Pe,registerInset:ge,unregisterInset:Te,hasAnyInset:be}),[Pe,ge,Te,be]),je=e.useMemo(()=>({peekTarget:V,setPeekTarget:se,peekPane:pe,clearPeek:ce}),[V,se,pe,ce]),Ue=e.useMemo(()=>({togglePane:m,expandPane:y,collapsePane:ae,setSidebarToggleComputer:R}),[m,y,ae,R]),Fe=e.useMemo(()=>({...re,peekTarget:V,setPeekTarget:se,peekPane:pe,clearPeek:ce}),[re,V,se,pe,ce]);return e.createElement("div",{...C,ref:M,className:X("rt-ShellRoot",t),style:{...O,...C.style}},e.createElement(Ye,{value:Fe},e.createElement(on.Provider,{value:_e},e.createElement(Je.Provider,{value:De},e.createElement(Ze.Provider,{value:Be},e.createElement(en.Provider,{value:Ae},e.createElement(nn.Provider,{value:we},e.createElement(tn.Provider,{value:Ie},e.createElement(sn.Provider,{value:He},e.createElement(an.Provider,{value:je},e.createElement(ln.Provider,{value:Ue},e.createElement(rn.Provider,{value:Ve},le,e.createElement("div",{className:"rt-ShellBody","data-peek-target":V??void 0,"data-has-inset":be||void 0,style:V==="rail"||V==="panel"?{"--peek-rail-width":`${N.current}px`}:void 0},te&&!oe?(()=>{const n=G[0],d=Q[0],u=!!n?.props?.inset||!!d?.props?.inset,K=n?{onOpenChange:n.props?.onOpenChange,open:n.props?.open,defaultOpen:n.props?.defaultOpen,presentation:n.props?.presentation,collapsible:n.props?.collapsible,onExpand:n.props?.onExpand,onCollapse:n.props?.onCollapse,inset:u}:{defaultOpen:f?!0:void 0,inset:u};return e.createElement(me,{...K},G,Q)})():de,ye,o),E))))))))))))});ze.displayName="Shell.Root";const xe=e.forwardRef(({className:t,height:a=64,style:i,...C},M)=>e.createElement("header",{...C,ref:M,className:X("rt-ShellHeader",t),style:{...i,"--shell-header-height":`${a}px`}}));xe.displayName="Shell.Header";const cn=["open","defaultOpen","onOpenChange","mode","defaultMode","onModeChange"],me=e.forwardRef((t,a)=>{const{className:i,presentation:C={initial:"fixed",sm:"fixed"},collapsible:M=!0,onExpand:P,onCollapse:S,children:b,style:f,inset:l,...c}=t,{registerInset:z,unregisterInset:j}=ke();e.useEffect(()=>{if(l)return z("left"),()=>j("left")},[l,z,j]);const _=c.open,h=c.defaultOpen,L=c.onOpenChange,p=Ge(c,cn),r=ie(),g=Oe(C),F=g==="overlay",k=g==="stacked",w=e.useRef(null);e.useEffect(()=>{r.onLeftPres?.(g)},[r,g]);const A=e.useCallback(R=>{w.current=R,typeof a=="function"?a(R):a&&(a.current=R)},[a]);e.useEffect(()=>(r.setHasLeft(!0),()=>r.setHasLeft(!1)),[r]);const D=e.useRef(null),ee=e.useRef(!1),T=e.useMemo(()=>{if(!(typeof _>"u"))return _?"expanded":"collapsed"},[_]),I=e.useMemo(()=>Ee(h),[h]);Le({controlledValue:T,defaultValue:I,currentValue:r.leftMode,setValue:r.setLeftMode,breakpointReady:r.currentBreakpointReady,onInit:R=>L?.(R==="expanded",{reason:"init"})}),e.useEffect(()=>{typeof _<"u"||(D.current!==null&&D.current!==r.leftMode&&L?.(r.leftMode==="expanded",{reason:"toggle"}),D.current=r.leftMode)},[r,L,_]),e.useEffect(()=>{r.leftMode==="expanded"?P?.():S?.()},[r.leftMode,P,S]);const $=r.leftMode==="expanded";if(F){const R=r.leftMode==="expanded",x=e.Children.toArray(b),B=(m,y)=>e.isValidElement(m)&&m.type===y,s=x.find(m=>B(m,J)),N=x.find(m=>B(m,Z)),W=typeof s?.props?.expandedSize=="number"?s.props.expandedSize:64,ne=typeof N?.props?.expandedSize=="number"?N.props.expandedSize:288,q=!!s,te=!!N,oe=(q?W:0)+(r.panelMode==="expanded"&&te?ne:0);return e.createElement(he.Root,{open:R,onOpenChange:m=>r.setLeftMode(m?"expanded":"collapsed")},e.createElement(he.Content,{side:"start",style:{padding:0},width:{initial:`${oe}px`}},e.createElement($e,null,e.createElement(he.Title,null,"Navigation")),e.createElement("div",{className:"rt-ShellLeft"},b)))}if(k){const R=r.leftMode==="expanded",x=e.Children.toArray(b),B=(m,y)=>e.isValidElement(m)&&m.type===y,s=x.find(m=>B(m,J)),N=x.find(m=>B(m,Z)),W=typeof s?.props?.expandedSize=="number"?s.props.expandedSize:64,ne=typeof N?.props?.expandedSize=="number"?N.props.expandedSize:288,q=!!s,oe=!!N&&(r.panelMode==="expanded"||r.peekTarget==="panel");return e.createElement("div",{...p,ref:A,className:X("rt-ShellLeft",i),"data-mode":r.leftMode,"data-peek":r.peekTarget==="left"||r.peekTarget==="rail"||r.peekTarget==="panel"||void 0,"data-presentation":g,"data-inset":l||void 0,style:{...f},"data-open":R||void 0},b)}return e.createElement("div",{...p,ref:A,className:X("rt-ShellLeft",i),"data-mode":r.leftMode,"data-peek":r.peekTarget==="left"||r.peekTarget==="rail"||r.peekTarget==="panel"||void 0,"data-presentation":g,"data-inset":l||void 0,style:{...f}},b)});me.displayName="Shell.Left",Y(me,"Shell.Left");const J=e.forwardRef((t,a)=>{const{className:i,presentation:C,expandedSize:M=64,collapsible:P,onExpand:S,onCollapse:b,children:f,style:l,open:c,defaultOpen:z,onOpenChange:j,..._}=t,h=ie(),L=e.useRef(null);e.useEffect(()=>{const r=typeof c<"u";if(L.current===null){L.current=r;return}L.current!==r&&(console.warn("Shell.Rail: Switching between controlled and uncontrolled `open` is not supported."),L.current=r)},[c]),e.useEffect(()=>{h.onRailDefaults?.(M)},[h,M]);const p=h.leftMode==="expanded";return e.createElement("div",{..._,ref:a,className:X("rt-ShellRail",i),"data-mode":h.leftMode,"data-peek":h.currentBreakpointReady&&h.leftResolvedPresentation!=="overlay"&&h.peekTarget==="rail"||void 0,style:{...l,"--rail-size":`${M}px`}},e.createElement("div",{className:"rt-ShellRailContent","data-visible":h.currentBreakpointReady&&(p||h.leftResolvedPresentation!=="overlay"&&h.peekTarget==="rail")||void 0},f))});J.displayName="Shell.Rail",Y(J,"Shell.Rail");const un=["className","children","defaultOpen","open","onOpenChange","size","defaultSize","onSizeChange","sizeUpdate","sizeUpdateMs","style"],Z=Y(e.forwardRef((t,a)=>{const{className:i,defaultOpen:C,open:M,onOpenChange:P,size:S,defaultSize:b,expandedSize:f=288,minSize:l,maxSize:c,resizable:z,collapsible:j=!0,onExpand:_,onCollapse:h,onResize:L,onResizeStart:p,onResizeEnd:r,snapPoints:g,snapTolerance:F,collapseThreshold:k,paneId:w,persistence:A,children:D,style:ee,onSizeChange:T,sizeUpdate:I,sizeUpdateMs:$=50}=t,R=Qe(t,un),x=e.useRef(null);e.useEffect(()=>()=>{x.current&&(clearTimeout(x.current),x.current=null)},[T,I,$]);const B=e.useMemo(()=>{if(!T)return()=>{};if(I==="debounce")return(E,v)=>{x.current&&clearTimeout(x.current),x.current=setTimeout(()=>{T?.(E,v),x.current=null},$)};if(I==="throttle"){let o=0;return(E,v)=>{const O=Date.now();O-o>=$&&(o=O,T?.(E,v))}}return(o,E)=>T?.(o,E)},[T,I,$]),s=ie(),N=e.useRef(null),W=e.useRef(null),ne=e.useRef(!1),q=e.useMemo(()=>Ee(M),[M]),te=e.useMemo(()=>Ee(C),[C]),oe=typeof M=="object"&&M!==null;Le({controlledValue:q,defaultValue:te,currentValue:s.panelMode,setValue:o=>{o==="expanded"&&s.leftMode!=="expanded"&&s.setLeftMode("expanded"),s.setPanelMode(o)},breakpointReady:s.currentBreakpointReady,controlledIsResponsive:oe,onResponsiveChange:o=>P?.(o==="expanded",{reason:"responsive"}),onInit:o=>{typeof M>"u"&&P?.(o==="expanded",{reason:"init"})}});const m=e.useRef(null);e.useEffect(()=>{const o=typeof M<"u";if(m.current===null){m.current=o;return}m.current!==o&&(console.warn("Shell.Panel: Switching between controlled and uncontrolled `open` is not supported."),m.current=o)},[M]),e.useEffect(()=>{s.onPanelDefaults?.(f)},[s,f]);const y=e.useRef(null),ae=e.useCallback(o=>{y.current=o,typeof a=="function"?a(o):a&&(a.current=o)},[a]),re=e.Children.toArray(D),H=re.filter(o=>e.isValidElement(o)&&o.type===Se),U=re.filter(o=>!(e.isValidElement(o)&&o.type===Se)),le=s.leftResolvedPresentation==="overlay",G=e.useCallback(o=>Xe(o,"horizontal"),[]),Q=e.useMemo(()=>{if(!w||A)return A;const o=`kookie-ui:shell:panel:${w}`;return{load:()=>{if(typeof window>"u")return;const v=window.localStorage.getItem(o);return v?Number(v):void 0},save:v=>{typeof window>"u"||window.localStorage.setItem(o,String(v))}}},[w,A]);e.useEffect(()=>{let o=!0;return(async()=>{if(!z||!Q?.load||le)return;const E=await Q.load();o&&typeof E=="number"&&y.current&&(y.current.style.setProperty("--panel-size",`${E}px`),L?.(E))})(),()=>{o=!1}},[z,Q,L,le]),e.useEffect(()=>{y.current&&le&&y.current.style.setProperty("--panel-size",`${f}px`)},[le,f]),e.useEffect(()=>{if(y.current&&typeof S>"u"&&typeof b<"u"){const o=G(b);if(typeof o=="number"&&Number.isFinite(o)){const O=Math.min((typeof c=="number"?c:void 0)??o,Math.max((typeof l=="number"?l:void 0)??o,o));y.current.style.setProperty("--panel-size",`${O}px`),B(O,{reason:"init"})}}},[]),e.useEffect(()=>{if(!y.current||typeof S>"u")return;const o=G(S);if(typeof o=="number"&&Number.isFinite(o)){const O=Math.min((typeof c=="number"?c:void 0)??o,Math.max((typeof l=="number"?l:void 0)??o,o));y.current.style.setProperty("--panel-size",`${O}px`),B(O,{reason:"controlled"})}},[S,l,c,G,B]),e.useEffect(()=>{if(y.current&&s.leftResolvedPresentation!=="overlay"&&s.leftMode==="expanded"&&s.panelMode==="expanded"){const o=y.current.parentElement||null;try{o?.style.removeProperty("width")}catch{}}},[s.leftResolvedPresentation,s.leftMode,s.panelMode]);const de=s.leftMode==="expanded"&&s.panelMode==="expanded";e.useEffect(()=>{const o=N.current,E=W.current;if(o!==null&&o!==s.panelMode){const v=s.panelMode==="expanded";let O="toggle";E!==s.leftMode&&s.leftMode==="collapsed"&&!v&&(O="left"),P?.(v,{reason:O})}N.current=s.panelMode,W.current=s.leftMode},[s.panelMode,s.leftMode,P]);const ye=z&&s.leftResolvedPresentation!=="overlay"&&de?e.createElement(We.Provider,{value:{containerRef:y,cssVarName:"--panel-size",minSize:typeof l=="number"?l:100,maxSize:typeof c=="number"?c:800,defaultSize:f,orientation:"vertical",edge:"end",computeNext:(o,E,v)=>{const O=getComputedStyle(y.current).direction==="rtl",V=o-E;return v+(O?-V:V)},onResize:L,onResizeStart:o=>{const v=y.current?.parentElement;try{v?.style.removeProperty("width")}catch{}p?.(o)},onResizeEnd:o=>{r?.(o),B(o,{reason:"resize"}),Q?.save?.(o)},target:"panel",collapsible:!!j,snapPoints:g,snapTolerance:F??8,collapseThreshold:k,requestCollapse:()=>s.setPanelMode("collapsed"),requestToggle:()=>s.togglePane("panel")}},H.length>0?H.map((o,E)=>e.cloneElement(o,{key:o.key??E})):e.createElement(qe,null)):null;return e.createElement("div",{...R,ref:ae,className:X("rt-ShellPanel",i),"data-mode":s.panelMode,"data-visible":s.currentBreakpointReady&&(de||s.leftResolvedPresentation!=="overlay"&&s.peekTarget==="panel")||void 0,"data-peek":s.currentBreakpointReady&&s.leftResolvedPresentation!=="overlay"&&s.peekTarget==="panel"||void 0,style:{...ee,"--panel-size":`${f}px`}},e.createElement("div",{className:"rt-ShellPanelContent","data-visible":de||void 0},U),ye)}),"Shell.Panel");Z.displayName="Shell.Panel",Z.Handle=Se;const Me=e.forwardRef(({className:t,inset:a,...i},C)=>{const{registerInset:M,unregisterInset:P}=ke();return e.useEffect(()=>{if(a)return M("content"),()=>P("content")},[a,M,P]),e.createElement("main",{...i,ref:C,className:X("rt-ShellContent",t),"data-inset":a||void 0})});Me.displayName="Shell.Content",Y(Me,"Shell.Content");const Ne=e.forwardRef(({target:t,action:a="toggle",peekOnHover:i,onClick:C,onMouseEnter:M,onMouseLeave:P,children:S,...b},f)=>{const l=ie(),c=e.useCallback(h=>{switch(C?.(h),l.peekTarget===t&&l.clearPeek(),a){case"toggle":l.togglePane(t);break;case"expand":l.expandPane(t);break;case"collapse":l.collapsePane(t);break}},[l,t,a,C]),z=(()=>{switch(t){case"left":case"rail":return l.leftMode==="collapsed";case"panel":return l.leftMode==="collapsed"||l.panelMode==="collapsed";case"sidebar":return l.sidebarMode==="collapsed";case"inspector":return l.inspectorMode==="collapsed";case"bottom":return l.bottomMode==="collapsed"}})(),j=e.useCallback(h=>{M?.(h),!(!i||!z)&&l.peekPane(t)},[M,i,z,l,t]),_=e.useCallback(h=>{P?.(h),i&&l.peekTarget===t&&l.clearPeek()},[P,i,l,t]);return e.createElement("button",{...b,ref:f,onClick:c,onMouseEnter:j,onMouseLeave:_,"data-shell-trigger":t,"data-shell-action":a,"aria-expanded":!z},S)});Ne.displayName="Shell.Trigger";export{ve as Bottom,Me as Content,xe as Header,Ce as Inspector,me as Left,Z as Panel,J as Rail,ze as Root,ue as Sidebar,Ne as Trigger,Oe as useResponsivePresentation,ie as useShell};
2
2
  //# sourceMappingURL=shell.js.map