@kushagradhawan/kookie-ui 0.1.73 → 0.1.74
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.
- package/dist/cjs/components/_internal/shell-bottom.d.ts.map +1 -1
- package/dist/cjs/components/_internal/shell-bottom.js +1 -1
- package/dist/cjs/components/_internal/shell-bottom.js.map +3 -3
- package/dist/cjs/components/_internal/shell-handles.d.ts.map +1 -1
- package/dist/cjs/components/_internal/shell-handles.js +1 -1
- package/dist/cjs/components/_internal/shell-handles.js.map +3 -3
- package/dist/cjs/components/_internal/shell-inspector.d.ts.map +1 -1
- package/dist/cjs/components/_internal/shell-inspector.js +1 -1
- package/dist/cjs/components/_internal/shell-inspector.js.map +3 -3
- package/dist/cjs/components/_internal/shell-sidebar.d.ts.map +1 -1
- package/dist/cjs/components/_internal/shell-sidebar.js +1 -1
- package/dist/cjs/components/_internal/shell-sidebar.js.map +3 -3
- package/dist/cjs/components/shell.d.ts.map +1 -1
- package/dist/cjs/components/shell.js +1 -1
- package/dist/cjs/components/shell.js.map +3 -3
- package/dist/cjs/helpers/index.d.ts +1 -0
- package/dist/cjs/helpers/index.d.ts.map +1 -1
- package/dist/cjs/helpers/index.js +1 -1
- package/dist/cjs/helpers/index.js.map +2 -2
- package/dist/cjs/helpers/normalize-to-px.d.ts +10 -0
- package/dist/cjs/helpers/normalize-to-px.d.ts.map +1 -0
- package/dist/cjs/helpers/normalize-to-px.js +2 -0
- package/dist/cjs/helpers/normalize-to-px.js.map +7 -0
- package/dist/esm/components/_internal/shell-bottom.d.ts.map +1 -1
- package/dist/esm/components/_internal/shell-bottom.js +1 -1
- package/dist/esm/components/_internal/shell-bottom.js.map +3 -3
- package/dist/esm/components/_internal/shell-handles.d.ts.map +1 -1
- package/dist/esm/components/_internal/shell-handles.js +1 -1
- package/dist/esm/components/_internal/shell-handles.js.map +3 -3
- package/dist/esm/components/_internal/shell-inspector.d.ts.map +1 -1
- package/dist/esm/components/_internal/shell-inspector.js +1 -1
- package/dist/esm/components/_internal/shell-inspector.js.map +3 -3
- package/dist/esm/components/_internal/shell-sidebar.d.ts.map +1 -1
- package/dist/esm/components/_internal/shell-sidebar.js +1 -1
- package/dist/esm/components/_internal/shell-sidebar.js.map +3 -3
- package/dist/esm/components/shell.d.ts.map +1 -1
- package/dist/esm/components/shell.js +1 -1
- package/dist/esm/components/shell.js.map +3 -3
- package/dist/esm/helpers/index.d.ts +1 -0
- package/dist/esm/helpers/index.d.ts.map +1 -1
- package/dist/esm/helpers/index.js +1 -1
- package/dist/esm/helpers/index.js.map +2 -2
- package/dist/esm/helpers/normalize-to-px.d.ts +10 -0
- package/dist/esm/helpers/normalize-to-px.d.ts.map +1 -0
- package/dist/esm/helpers/normalize-to-px.js +2 -0
- package/dist/esm/helpers/normalize-to-px.js.map +7 -0
- package/package.json +1 -1
- package/schemas/base-button.json +1 -1
- package/schemas/button.json +1 -1
- package/schemas/icon-button.json +1 -1
- package/schemas/index.json +6 -6
- package/schemas/toggle-button.json +1 -1
- package/schemas/toggle-icon-button.json +1 -1
- package/src/components/_internal/shell-bottom.tsx +32 -28
- package/src/components/_internal/shell-handles.tsx +6 -1
- package/src/components/_internal/shell-inspector.tsx +32 -28
- package/src/components/_internal/shell-sidebar.tsx +31 -28
- package/src/components/shell.tsx +37 -30
- package/src/helpers/index.ts +1 -0
- package/src/helpers/normalize-to-px.ts +42 -0
|
@@ -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';\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 // 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 let t: any = null;\n return (s: number, meta: { reason: 'init' | 'resize' | 'controlled' }) => {\n if (t) clearTimeout(t);\n t = setTimeout(() => {\n cb(s, meta);\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 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 onExpand?.();\n }\n // onCollapse: when becoming hidden (any \u2192 collapsed)\n else if (currentMode === 'collapsed') {\n onCollapse?.();\n }\n prevSidebarModeRef.current = currentMode;\n }\n }, [shell.sidebarMode, shell.currentBreakpointReady, onExpand, onCollapse]);\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\n const normalizeToPx = React.useCallback((value: number | string | undefined): number | undefined => {\n if (value == null) return undefined;\n if (typeof value === 'number' && Number.isFinite(value)) return value;\n const str = String(value).trim();\n if (!str) return undefined;\n if (str.endsWith('px')) return Number.parseFloat(str);\n if (str.endsWith('rem')) {\n const rem = Number.parseFloat(getComputedStyle(document.documentElement).fontSize || '16') || 16;\n return Number.parseFloat(str) * rem;\n }\n if (str.endsWith('%')) {\n const pct = Number.parseFloat(str);\n const base = document.documentElement.clientWidth || window.innerWidth || 0;\n return (pct / 100) * base;\n }\n const n = Number.parseFloat(str);\n return Number.isFinite(n) ? n : undefined;\n }, []);\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 = normalizeToPx(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 = normalizeToPx(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, normalizeToPx, 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": "AAAA,UAAYA,MAAW,QACvB,OAAOC,OAAgB,aACvB,UAAYC,MAAW,cACvB,OAAS,kBAAAC,OAAsB,wBAC/B,OAAS,YAAAC,MAAgB,sBACzB,OAAS,6BAAAC,GAA2B,6BAAAC,OAAiC,oBACrE,OAAS,qBAAAC,OAAyB,oBAClC,OAAS,uBAAAC,OAA2B,0BACpC,OAAS,iBAAAC,EAAe,cAAAC,OAAkB,qBAE1C,MAA6B,
|
|
6
|
-
"names": ["React", "classNames", "Sheet", "VisuallyHidden", "useShell", "useResponsivePresentation", "useResponsiveInitialState", "PaneResizeContext", "extractPaneDomProps", "SidebarHandle", "PaneHandle", "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", "emitSizeChange", "cb", "strategy", "ms", "
|
|
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"]
|
|
7
7
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"shell.d.ts","sourceRoot":"","sources":["../../../src/components/shell.tsx"],"names":[],"mappings":"AA2BA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAI/B,OAAO,EAAE,yBAAyB,EAA6B,MAAM,kBAAkB,CAAC;AAIxF,OAAO,EAAE,OAAO,EAAE,MAAM,8BAA8B,CAAC;AACvD,OAAO,EAAE,MAAM,EAAE,MAAM,6BAA6B,CAAC;AACrD,OAAO,EAAE,SAAS,EAAE,MAAM,gCAAgC,CAAC;AAC3D,OAAO,KAAK,EAAqB,sBAAsB,EAAE,QAAQ,EAAE,WAAW,EAAmC,UAAU,EAAc,aAAa,EAAE,MAAM,kBAAkB,CAAC;
|
|
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 X from"classnames";import*as me from"./sheet.js";import{VisuallyHidden as _e}from"./visually-hidden.js";import{useResponsivePresentation as he,useResponsiveInitialState as De}from"./shell.hooks.js";import{PaneResizeContext as we}from"./_internal/shell-resize.js";import{PaneHandle as Ae,PanelHandle as Me}from"./_internal/shell-handles.js";import{omitPaneProps as Be,extractPaneDomProps as He,mapResponsiveBooleanToPaneMode as Ve}from"./_internal/shell-prop-helpers.js";import{Sidebar as ie}from"./_internal/shell-sidebar.js";import{Bottom as ye}from"./_internal/shell-bottom.js";import{Inspector as Pe}from"./_internal/shell-inspector.js";import{_BREAKPOINTS as Ie}from"./shell.types.js";import{ShellProvider as Fe,useShell as re,LeftModeContext as Ue,PanelModeContext as We,SidebarModeContext as $e,InspectorModeContext as je,BottomModeContext as qe,PresentationContext as Ge,PeekContext as Qe,ActionsContext as Ke,CompositionContext as Xe}from"./shell.context.js";function Ye(){const[t,l]=e.useState("initial"),[i,h]=e.useState(!1);return e.useEffect(()=>{if(typeof window>"u")return;const v=Object.entries(Ie).map(([c,r])=>[c,window.matchMedia(r)]),y=()=>{const c=v.filter(([,u])=>u.matches).map(([u])=>u),r=c[c.length-1]??"initial";l(r),h(!0)};y();const m=[];return v.forEach(([,c])=>{const r=c;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(c=>{try{c()}catch{}})}},[]),{bp:t,ready:i}}const pe=Symbol("rtShellSlot");function Y(t,l){return t[pe]=l,t}function fn(t,l){if(!e.isValidElement(t))return!1;const i=t.type;if(i===l)return!0;const h=l?.[pe];return!!(i?.[pe]&&h&&i[pe]===h)}Y(ie,"Shell.Sidebar"),Y(Pe,"Shell.Inspector"),Y(ye,"Shell.Bottom");function Je(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:v,ready:y}=Ye(),m=e.Children.toArray(l),c=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),u=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),H=()=>{const n=m.find(C=>e.isValidElement(C)&&C.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"},F=()=>{const n=m.find(C=>e.isValidElement(C)&&C.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,f]=e.useReducer(Je,{leftMode:c||r?"expanded":"collapsed",panelMode:c?"expanded":"collapsed",sidebarMode:H(),inspectorMode:u||L?"expanded":"collapsed",bottomMode:F()}),z=e.useCallback(n=>f({type:"SET_LEFT_MODE",mode:n}),[]),N=e.useCallback(n=>f({type:"SET_PANEL_MODE",mode:n}),[]),g=e.useCallback(n=>f({type:"SET_SIDEBAR_MODE",mode:n}),[]),U=e.useCallback(n=>f({type:"SET_INSPECTOR_MODE",mode:n}),[]),V=e.useCallback(n=>f({type:"SET_BOTTOM_MODE",mode:n}),[]),[_,W]=e.useState(!1),[I,Z]=e.useState(!1),x=e.useRef(n=>n==="collapsed"?"thin":n==="thin"?"expanded":"collapsed"),T=e.useCallback(n=>{x.current=n},[]);e.useEffect(()=>{I&&_&&console.warn("Shell: Sidebar cannot coexist with Rail or Panel. Use either Rail+Panel OR Sidebar.")},[I,_]);const[O,D]=e.useState(void 0),R=e.useCallback(n=>D(n),[]),s=e.useRef(64),q=e.useRef(288),$=e.useCallback(n=>{s.current=n},[]),j=e.useCallback(n=>{q.current=n},[]),S=e.useMemo(()=>{const n=e.Children.toArray(l),d=(C,le)=>e.isValidElement(C)&&(C.type===le||C.type?.displayName===le.displayName);return n.some(C=>d(C,J)||d(C,B))},[l]),E=e.useMemo(()=>{const n=e.Children.toArray(l),d=(C,le)=>e.isValidElement(C)&&(C.type===le||C.type?.displayName===le.displayName);return n.some(C=>d(C,ie))},[l]),w=e.useCallback(n=>{if(n==="sidebar"){const d=x.current(o.sidebarMode);g(d);return}f({type:"TOGGLE_PANE",target:n})},[o.sidebarMode,g]),G=e.useCallback(n=>{if(n==="sidebar")return g("expanded");f({type:"EXPAND_PANE",target:n})},[g]),ee=e.useCallback(n=>{if(n==="sidebar")return g("collapsed");f({type:"COLLAPSE_PANE",target:n})},[g]),Q=e.useMemo(()=>({leftMode:o.leftMode,setLeftMode:z,panelMode:o.panelMode,setPanelMode:N,sidebarMode:o.sidebarMode,setSidebarMode:g,inspectorMode:o.inspectorMode,setInspectorMode:U,bottomMode:o.bottomMode,setBottomMode:V,hasLeft:_,setHasLeft:W,hasSidebar:I,setHasSidebar:Z,currentBreakpoint:v,currentBreakpointReady:y,leftResolvedPresentation:O,togglePane:w,expandPane:G,collapsePane:ee,setSidebarToggleComputer:T,onLeftPres:R,onRailDefaults:$,onPanelDefaults:j}),[o.leftMode,z,o.panelMode,N,o.sidebarMode,g,o.inspectorMode,U,o.bottomMode,V,_,I,v,y,O,w,G,ee,T,R,$,j]),A=e.Children.toArray(l),k=(n,d)=>e.isValidElement(n)&&(n.type===d||n.type?.displayName===d.displayName),oe=A.filter(n=>k(n,be)),ae=A.filter(n=>k(n,J)),a=A.filter(n=>k(n,B)),p=A.filter(n=>k(n,ie)),M=A.filter(n=>k(n,ue)),P=A.filter(n=>k(n,Pe)),ne=A.filter(n=>k(n,ye)),fe=ae[0]?.props?.open;e.useEffect(()=>{if(typeof fe>"u")return;z(!!fe?"expanded":"collapsed")},[fe,z]);const Ce=e.useMemo(()=>i==="full"?{height:"100vh"}:i==="auto"?{height:"auto"}:typeof i=="string"?{height:i}:typeof i=="number"?{height:`${i}px`}:{},[i]),[K,te]=e.useState(null),se=e.useCallback(n=>te(n),[]),de=e.useCallback(()=>te(null),[]),ve=e.useMemo(()=>({currentBreakpoint:v,currentBreakpointReady:y,leftResolvedPresentation:O}),[v,y,O]),xe=e.useMemo(()=>({leftMode:o.leftMode,setLeftMode:z}),[o.leftMode,z]),Re=e.useMemo(()=>({panelMode:o.panelMode,setPanelMode:N}),[o.panelMode,N]),ge=e.useMemo(()=>({sidebarMode:o.sidebarMode,setSidebarMode:g}),[o.sidebarMode,g]),Te=e.useMemo(()=>({inspectorMode:o.inspectorMode,setInspectorMode:U}),[o.inspectorMode,U]),Oe=e.useMemo(()=>({bottomMode:o.bottomMode,setBottomMode:V}),[o.bottomMode,V]),Le=e.useMemo(()=>({hasLeft:_,setHasLeft:W,hasSidebar:I,setHasSidebar:Z}),[_,W,I,Z]),ze=e.useMemo(()=>({peekTarget:K,setPeekTarget:te,peekPane:se,clearPeek:de}),[K,te,se,de]),Ne=e.useMemo(()=>({togglePane:w,expandPane:G,collapsePane:ee,setSidebarToggleComputer:T}),[w,G,ee,T]),ke=e.useMemo(()=>({...Q,peekTarget:K,setPeekTarget:te,peekPane:se,clearPeek:de}),[Q,K,te,se,de]);return e.createElement("div",{...h,ref:b,className:X("rt-ShellRoot",t),style:{...Ce,...h.style}},e.createElement(Fe,{value:ke},e.createElement(Ge.Provider,{value:ve},e.createElement(Ue.Provider,{value:xe},e.createElement(We.Provider,{value:Re},e.createElement($e.Provider,{value:ge},e.createElement(je.Provider,{value:Te},e.createElement(qe.Provider,{value:Oe},e.createElement(Xe.Provider,{value:Le},e.createElement(Qe.Provider,{value:ze},e.createElement(Ke.Provider,{value:Ne},oe,e.createElement("div",{className:"rt-ShellBody","data-peek-target":K??void 0,style:K==="rail"||K==="panel"?{"--peek-rail-width":`${s.current}px`}:void 0},S&&!E?(()=>{const n=ae[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:c?!0:void 0};return e.createElement(ce,{...d},ae,a)})():p,M,P),ne)))))))))))});Se.displayName="Shell.Root";const be=e.forwardRef(({className:t,height:l=64,style:i,...h},b)=>e.createElement("header",{...h,ref:b,className:X("rt-ShellHeader",t),style:{...i,"--shell-header-height":`${l}px`}}));be.displayName="Shell.Header";const Ze=["open","defaultOpen","onOpenChange","mode","defaultMode","onModeChange"],ce=e.forwardRef((t,l)=>{const{className:i,presentation:h={initial:"fixed",sm:"fixed"},collapsible:b=!0,onExpand:v,onCollapse:y,children:m,style:c,...r}=t,u=r.open,L=r.defaultOpen,H=r.onOpenChange,F=Be(r,Ze),o=re(),f=he(h),z=f==="overlay",N=f==="stacked",g=e.useRef(null);e.useEffect(()=>{o.onLeftPres?.(f)},[o,f]);const U=e.useCallback(x=>{g.current=x,typeof l=="function"?l(x):l&&(l.current=x)},[l]);e.useEffect(()=>(o.setHasLeft(!0),()=>o.setHasLeft(!1)),[o]);const V=e.useRef(null),_=e.useRef(!1),W=e.useMemo(()=>{if(!(typeof u>"u"))return u?"expanded":"collapsed"},[u]),I=e.useMemo(()=>Ve(L),[L]);De({controlledValue:W,defaultValue:I,currentValue:o.leftMode,setValue:o.setLeftMode,breakpointReady:o.currentBreakpointReady,onInit:x=>H?.(x==="expanded",{reason:"init"})}),e.useEffect(()=>{typeof u<"u"||(V.current!==null&&V.current!==o.leftMode&&H?.(o.leftMode==="expanded",{reason:"toggle"}),V.current=o.leftMode)},[o,H,u]),e.useEffect(()=>{o.leftMode==="expanded"?v?.():y?.()},[o.leftMode,v,y]);const Z=o.leftMode==="expanded";if(z){const x=o.leftMode==="expanded",T=e.Children.toArray(m),O=(E,w)=>e.isValidElement(E)&&E.type===w,D=T.find(E=>O(E,J)),R=T.find(E=>O(E,B)),s=typeof D?.props?.expandedSize=="number"?D.props.expandedSize:64,q=typeof R?.props?.expandedSize=="number"?R.props.expandedSize:288,$=!!D,j=!!R,S=($?s:0)+(o.panelMode==="expanded"&&j?q:0);return e.createElement(me.Root,{open:x,onOpenChange:E=>o.setLeftMode(E?"expanded":"collapsed")},e.createElement(me.Content,{side:"start",style:{padding:0},width:{initial:`${S}px`}},e.createElement(_e,null,e.createElement(me.Title,null,"Navigation")),e.createElement("div",{className:"rt-ShellLeft"},m)))}if(N){const x=o.leftMode==="expanded",T=e.Children.toArray(m),O=(E,w)=>e.isValidElement(E)&&E.type===w,D=T.find(E=>O(E,J)),R=T.find(E=>O(E,B)),s=typeof D?.props?.expandedSize=="number"?D.props.expandedSize:64,q=typeof R?.props?.expandedSize=="number"?R.props.expandedSize:288,$=!!D,S=!!R&&(o.panelMode==="expanded"||o.peekTarget==="panel");return e.createElement("div",{...F,ref:U,className:X("rt-ShellLeft",i),"data-mode":o.leftMode,"data-peek":o.peekTarget==="left"||o.peekTarget==="rail"||o.peekTarget==="panel"||void 0,"data-presentation":f,style:{...c},"data-open":x||void 0},m)}return e.createElement("div",{...F,ref:U,className:X("rt-ShellLeft",i),"data-mode":o.leftMode,"data-peek":o.peekTarget==="left"||o.peekTarget==="rail"||o.peekTarget==="panel"||void 0,"data-presentation":f,style:{...c}},m)});ce.displayName="Shell.Left",Y(ce,"Shell.Left");const J=e.forwardRef((t,l)=>{const{className:i,presentation:h,expandedSize:b=64,collapsible:v,onExpand:y,onCollapse:m,children:c,style:r,open:u,defaultOpen:L,onOpenChange:H,...F}=t,o=re(),f=e.useRef(null);e.useEffect(()=>{const N=typeof u<"u";if(f.current===null){f.current=N;return}f.current!==N&&(console.warn("Shell.Rail: Switching between controlled and uncontrolled `open` is not supported."),f.current=N)},[u]),e.useEffect(()=>{o.onRailDefaults?.(b)},[o,b]);const z=o.leftMode==="expanded";return e.createElement("div",{...F,ref:l,className:X("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},c))});J.displayName="Shell.Rail",Y(J,"Shell.Rail");const en=["className","children","defaultOpen","open","onOpenChange","size","defaultSize","onSizeChange","sizeUpdate","sizeUpdateMs","style"],B=Y(e.forwardRef((t,l)=>{const{className:i,defaultOpen:h,open:b,onOpenChange:v,size:y,defaultSize:m,expandedSize:c=288,minSize:r,maxSize:u,resizable:L,collapsible:H=!0,onExpand:F,onCollapse:o,onResize:f,onResizeStart:z,onResizeEnd:N,snapPoints:g,snapTolerance:U,collapseThreshold:V,paneId:_,persistence:W,children:I,style:Z,onSizeChange:x,sizeUpdate:T,sizeUpdateMs:O=50}=t,D=He(t,en),R=e.useMemo(()=>{if(!x)return()=>{};if(T==="debounce"){let a=null;return(M,P)=>{a&&clearTimeout(a),a=setTimeout(()=>{x?.(M,P)},O)}}if(T==="throttle"){let a=0;return(p,M)=>{const P=Date.now();P-a>=O&&(a=P,x?.(p,M))}}return(a,p)=>x?.(a,p)},[x,T,O]),s=re(),q=e.useRef(null),$=e.useRef(null),j=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]),e.useEffect(()=>{const a=typeof b<"u";B._wasControlled=B._wasControlled??a,B._wasControlled!==a&&(console.warn("Shell.Panel: Switching between controlled and uncontrolled `open` is not supported."),B._wasControlled=a)},[b]),e.useEffect(()=>{j.current||typeof b>"u"&&h&&s.panelMode==="expanded"&&(v?.(!0,{reason:"init"}),j.current=!0)},[]),e.useEffect(()=>{s.onPanelDefaults?.(c)},[s,c]);const S=e.useRef(null),E=e.useCallback(a=>{S.current=a,typeof l=="function"?l(a):l&&(l.current=a)},[l]),w=e.Children.toArray(I),G=w.filter(a=>e.isValidElement(a)&&a.type===Me),ee=w.filter(a=>!(e.isValidElement(a)&&a.type===Me)),Q=s.leftResolvedPresentation==="overlay",A=e.useCallback(a=>{if(a==null)return;if(typeof a=="number"&&Number.isFinite(a))return a;const p=String(a).trim();if(!p)return;if(p.endsWith("px"))return Number.parseFloat(p);if(p.endsWith("rem")){const P=Number.parseFloat(getComputedStyle(document.documentElement).fontSize||"16")||16;return Number.parseFloat(p)*P}if(p.endsWith("%")){const P=Number.parseFloat(p),ne=document.documentElement.clientWidth||window.innerWidth||0;return P/100*ne}const M=Number.parseFloat(p);return Number.isFinite(M)?M:void 0},[]),k=e.useMemo(()=>{if(!_||W)return W;const a=`kookie-ui:shell:panel:${_}`;return{load:()=>{if(typeof window>"u")return;const M=window.localStorage.getItem(a);return M?Number(M):void 0},save:M=>{typeof window>"u"||window.localStorage.setItem(a,String(M))}}},[_,W]);e.useEffect(()=>{let a=!0;return(async()=>{if(!L||!k?.load||Q)return;const p=await k.load();a&&typeof p=="number"&&S.current&&(S.current.style.setProperty("--panel-size",`${p}px`),f?.(p))})(),()=>{a=!1}},[L,k,f,Q]),e.useEffect(()=>{S.current&&Q&&S.current.style.setProperty("--panel-size",`${c}px`)},[Q,c]),e.useEffect(()=>{if(S.current&&typeof y>"u"&&typeof m<"u"){const a=A(m);if(typeof a=="number"&&Number.isFinite(a)){const P=Math.min((typeof u=="number"?u:void 0)??a,Math.max((typeof r=="number"?r:void 0)??a,a));S.current.style.setProperty("--panel-size",`${P}px`),R(P,{reason:"init"})}}},[]),e.useEffect(()=>{if(!S.current||typeof y>"u")return;const a=A(y);if(typeof a=="number"&&Number.isFinite(a)){const P=Math.min((typeof u=="number"?u:void 0)??a,Math.max((typeof r=="number"?r:void 0)??a,a));S.current.style.setProperty("--panel-size",`${P}px`),R(P,{reason:"controlled"})}},[y,r,u,A,R]),e.useEffect(()=>{if(S.current&&s.leftResolvedPresentation!=="overlay"&&s.leftMode==="expanded"&&s.panelMode==="expanded"){const a=S.current.parentElement||null;try{a?.style.removeProperty("width")}catch{}}},[s.leftResolvedPresentation,s.leftMode,s.panelMode]);const oe=s.leftMode==="expanded"&&s.panelMode==="expanded";e.useEffect(()=>{const a=q.current,p=$.current;if(a!==null&&a!==s.panelMode){const M=s.panelMode==="expanded";let P="toggle";p!==s.leftMode&&s.leftMode==="collapsed"&&!M&&(P="left"),v?.(M,{reason:P})}q.current=s.panelMode,$.current=s.leftMode},[s.panelMode,s.leftMode,v]);const ae=L&&s.leftResolvedPresentation!=="overlay"&&oe?e.createElement(we.Provider,{value:{containerRef:S,cssVarName:"--panel-size",minSize:typeof r=="number"?r:100,maxSize:typeof u=="number"?u:800,defaultSize:c,orientation:"vertical",edge:"end",computeNext:(a,p,M)=>{const P=getComputedStyle(S.current).direction==="rtl",ne=a-p;return M+(P?-ne:ne)},onResize:f,onResizeStart:a=>{const M=S.current?.parentElement;try{M?.style.removeProperty("width")}catch{}z?.(a)},onResizeEnd:a=>{N?.(a),R(a,{reason:"resize"}),k?.save?.(a)},target:"panel",collapsible:!!H,snapPoints:g,snapTolerance:U??8,collapseThreshold:V,requestCollapse:()=>s.setPanelMode("collapsed"),requestToggle:()=>s.togglePane("panel")}},G.length>0?G.map((a,p)=>e.cloneElement(a,{key:a.key??p})):e.createElement(Ae,null)):null;return e.createElement("div",{...D,ref:E,className:X("rt-ShellPanel",i),"data-mode":s.panelMode,"data-visible":s.currentBreakpointReady&&(oe||s.leftResolvedPresentation!=="overlay"&&s.peekTarget==="panel")||void 0,"data-peek":s.currentBreakpointReady&&s.leftResolvedPresentation!=="overlay"&&s.peekTarget==="panel"||void 0,style:{...Z,"--panel-size":`${c}px`}},e.createElement("div",{className:"rt-ShellPanelContent","data-visible":oe||void 0},ee),ae)}),"Shell.Panel");B.displayName="Shell.Panel",B.Handle=Me;const ue=e.forwardRef(({className:t,...l},i)=>e.createElement("main",{...l,ref:i,className:X("rt-ShellContent",t)}));ue.displayName="Shell.Content",Y(ue,"Shell.Content");const Ee=e.forwardRef(({target:t,action:l="toggle",peekOnHover:i,onClick:h,onMouseEnter:b,onMouseLeave:v,children:y,...m},c)=>{const r=re(),u=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"}})(),H=e.useCallback(o=>{b?.(o),!(!i||!L)&&r.peekPane(t)},[b,i,L,r,t]),F=e.useCallback(o=>{v?.(o),i&&r.peekTarget===t&&r.clearPeek()},[v,i,r,t]);return e.createElement("button",{...m,ref:c,onClick:u,onMouseEnter:H,onMouseLeave:F,"data-shell-trigger":t,"data-shell-action":l},y)});Ee.displayName="Shell.Trigger";export{ye as Bottom,ue as Content,be as Header,Pe as Inspector,ce as Left,B as Panel,J as Rail,Se as Root,ie as Sidebar,Ee as Trigger,he as useResponsivePresentation,re as useShell};
|
|
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};
|
|
2
2
|
//# sourceMappingURL=shell.js.map
|