@kushagradhawan/kookie-ui 0.1.72 → 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/components.css +6 -2
- 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 +60 -30
- package/src/components/_internal/shell-handles.tsx +6 -1
- package/src/components/_internal/shell-inspector.tsx +60 -30
- package/src/components/_internal/shell-sidebar.tsx +62 -31
- package/src/components/shell.css +10 -11
- package/src/components/shell.tsx +83 -32
- package/src/helpers/index.ts +1 -0
- package/src/helpers/normalize-to-px.ts +42 -0
- package/styles.css +6 -2
|
@@ -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 // Emit expand/collapse events\n React.useEffect(() => {\n if (shell.sidebarMode === 'expanded') {\n onExpand?.();\n } else {\n onCollapse?.();\n }\n }, [shell.sidebarMode, 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 K from"classnames";import*as fe from"./sheet.js";import{VisuallyHidden as ke}from"./visually-hidden.js";import{useResponsivePresentation as he,useResponsiveInitialState as Ne}from"./shell.hooks.js";import{PaneResizeContext as _e}from"./_internal/shell-resize.js";import{PaneHandle as De,PanelHandle as me}from"./_internal/shell-handles.js";import{omitPaneProps as we,extractPaneDomProps as Ae,mapResponsiveBooleanToPaneMode as Be}from"./_internal/shell-prop-helpers.js";import{Sidebar as de}from"./_internal/shell-sidebar.js";import{Bottom as Me}from"./_internal/shell-bottom.js";import{Inspector as ye}from"./_internal/shell-inspector.js";import{_BREAKPOINTS as He}from"./shell.types.js";import{ShellProvider as Ve,useShell as le,LeftModeContext as Ie,PanelModeContext as Fe,SidebarModeContext as Ue,InspectorModeContext as We,BottomModeContext as $e,PresentationContext as qe,PeekContext as Ge,ActionsContext as Qe,CompositionContext as je}from"./shell.context.js";function Ke(){const[t,l]=e.useState("initial"),[d,C]=e.useState(!1);return e.useEffect(()=>{if(typeof window>"u")return;const v=Object.entries(He).map(([c,r])=>[c,window.matchMedia(r)]),P=()=>{const c=v.filter(([,u])=>u.matches).map(([u])=>u),r=c[c.length-1]??"initial";l(r),C(!0)};P();const b=[];return v.forEach(([,c])=>{const r=c;typeof r.addEventListener=="function"&&typeof r.removeEventListener=="function"?(r.addEventListener("change",P),b.push(()=>r.removeEventListener?.("change",P))):typeof r.addListener=="function"&&typeof r.removeListener=="function"&&(r.addListener(P),b.push(()=>r.removeListener?.(P)))}),()=>{b.forEach(c=>{try{c()}catch{}})}},[]),{bp:t,ready:d}}const ie=Symbol("rtShellSlot");function X(t,l){return t[ie]=l,t}function cn(t,l){if(!e.isValidElement(t))return!1;const d=t.type;if(d===l)return!0;const C=l?.[ie];return!!(d?.[ie]&&C&&d[ie]===C)}X(de,"Shell.Sidebar"),X(ye,"Shell.Inspector"),X(Me,"Shell.Bottom");function Xe(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 d=t.sidebarMode==="collapsed"?"expanded":t.sidebarMode==="expanded"?"collapsed":"expanded";return{...t,sidebarMode:d}}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 be=e.forwardRef(({className:t,children:l,height:d="full",...C},h)=>{const{bp:v,ready:P}=Ke(),b=e.Children.toArray(l),c=b.some(n=>e.isValidElement(n)&&n.type?.displayName==="Shell.Panel"&&!!n.props?.defaultOpen),r=b.some(n=>e.isValidElement(n)&&n.type?.displayName==="Shell.Rail"&&!!n.props?.defaultOpen),u=b.some(n=>e.isValidElement(n)&&n.type?.displayName==="Shell.Inspector"&&!!n.props?.defaultOpen),T=b.some(n=>e.isValidElement(n)&&n.type?.displayName==="Shell.Inspector"&&typeof n.props?.open<"u"&&!!n.props?.open),[i,x]=e.useReducer(Xe,{leftMode:c||r?"expanded":"collapsed",panelMode:c?"expanded":"collapsed",sidebarMode:"expanded",inspectorMode:u||T?"expanded":"collapsed",bottomMode:"collapsed"}),a=e.useCallback(n=>x({type:"SET_LEFT_MODE",mode:n}),[]),E=e.useCallback(n=>x({type:"SET_PANEL_MODE",mode:n}),[]),R=e.useCallback(n=>x({type:"SET_SIDEBAR_MODE",mode:n}),[]),O=e.useCallback(n=>x({type:"SET_INSPECTOR_MODE",mode:n}),[]),U=e.useCallback(n=>x({type:"SET_BOTTOM_MODE",mode:n}),[]),[_,V]=e.useState(!1),[D,I]=e.useState(!1),J=e.useRef(n=>n==="collapsed"?"thin":n==="thin"?"expanded":"collapsed"),q=e.useCallback(n=>{J.current=n},[]);e.useEffect(()=>{D&&_&&console.warn("Shell: Sidebar cannot coexist with Rail or Panel. Use either Rail+Panel OR Sidebar.")},[D,_]);const[S,w]=e.useState(void 0),L=e.useCallback(n=>w(n),[]),z=e.useRef(64),g=e.useRef(288),s=e.useCallback(n=>{z.current=n},[]),W=e.useCallback(n=>{g.current=n},[]),G=e.useMemo(()=>{const n=e.Children.toArray(l),B=(N,ae)=>e.isValidElement(N)&&(N.type===ae||N.type?.displayName===ae.displayName);return n.some(N=>B(N,Y)||B(N,H))},[l]),Q=e.useMemo(()=>{const n=e.Children.toArray(l),B=(N,ae)=>e.isValidElement(N)&&(N.type===ae||N.type?.displayName===ae.displayName);return n.some(N=>B(N,de))},[l]),m=e.useCallback(n=>{if(n==="sidebar"){const B=J.current(i.sidebarMode);R(B);return}x({type:"TOGGLE_PANE",target:n})},[i.sidebarMode,R]),M=e.useCallback(n=>{if(n==="sidebar")return R("expanded");x({type:"EXPAND_PANE",target:n})},[R]),A=e.useCallback(n=>{if(n==="sidebar")return R("collapsed");x({type:"COLLAPSE_PANE",target:n})},[R]),ne=e.useMemo(()=>({leftMode:i.leftMode,setLeftMode:a,panelMode:i.panelMode,setPanelMode:E,sidebarMode:i.sidebarMode,setSidebarMode:R,inspectorMode:i.inspectorMode,setInspectorMode:O,bottomMode:i.bottomMode,setBottomMode:U,hasLeft:_,setHasLeft:V,hasSidebar:D,setHasSidebar:I,currentBreakpoint:v,currentBreakpointReady:P,leftResolvedPresentation:S,togglePane:m,expandPane:M,collapsePane:A,setSidebarToggleComputer:q,onLeftPres:L,onRailDefaults:s,onPanelDefaults:W}),[i.leftMode,a,i.panelMode,E,i.sidebarMode,R,i.inspectorMode,O,i.bottomMode,U,_,D,v,P,S,m,M,A,q,L,s,W]),F=e.Children.toArray(l),k=(n,B)=>e.isValidElement(n)&&(n.type===B||n.type?.displayName===B.displayName),te=F.filter(n=>k(n,Pe)),$=F.filter(n=>k(n,Y)),oe=F.filter(n=>k(n,H)),ue=F.filter(n=>k(n,de)),o=F.filter(n=>k(n,ce)),p=F.filter(n=>k(n,ye)),y=F.filter(n=>k(n,Me)),f=$[0]?.props?.open;e.useEffect(()=>{if(typeof f>"u")return;a(!!f?"expanded":"collapsed")},[f,a]);const Z=e.useMemo(()=>d==="full"?{height:"100vh"}:d==="auto"?{height:"auto"}:typeof d=="string"?{height:d}:typeof d=="number"?{height:`${d}px`}:{},[d]),[j,ee]=e.useState(null),re=e.useCallback(n=>ee(n),[]),se=e.useCallback(()=>ee(null),[]),Se=e.useMemo(()=>({currentBreakpoint:v,currentBreakpointReady:P,leftResolvedPresentation:S}),[v,P,S]),Ce=e.useMemo(()=>({leftMode:i.leftMode,setLeftMode:a}),[i.leftMode,a]),ve=e.useMemo(()=>({panelMode:i.panelMode,setPanelMode:E}),[i.panelMode,E]),xe=e.useMemo(()=>({sidebarMode:i.sidebarMode,setSidebarMode:R}),[i.sidebarMode,R]),Re=e.useMemo(()=>({inspectorMode:i.inspectorMode,setInspectorMode:O}),[i.inspectorMode,O]),ge=e.useMemo(()=>({bottomMode:i.bottomMode,setBottomMode:U}),[i.bottomMode,U]),Te=e.useMemo(()=>({hasLeft:_,setHasLeft:V,hasSidebar:D,setHasSidebar:I}),[_,V,D,I]),Oe=e.useMemo(()=>({peekTarget:j,setPeekTarget:ee,peekPane:re,clearPeek:se}),[j,ee,re,se]),Le=e.useMemo(()=>({togglePane:m,expandPane:M,collapsePane:A,setSidebarToggleComputer:q}),[m,M,A,q]),ze=e.useMemo(()=>({...ne,peekTarget:j,setPeekTarget:ee,peekPane:re,clearPeek:se}),[ne,j,ee,re,se]);return e.createElement("div",{...C,ref:h,className:K("rt-ShellRoot",t),style:{...Z,...C.style}},e.createElement(Ve,{value:ze},e.createElement(qe.Provider,{value:Se},e.createElement(Ie.Provider,{value:Ce},e.createElement(Fe.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(Ge.Provider,{value:Oe},e.createElement(Qe.Provider,{value:Le},te,e.createElement("div",{className:"rt-ShellBody","data-peek-target":j??void 0,style:j==="rail"||j==="panel"?{"--peek-rail-width":`${z.current}px`}:void 0},G&&!Q?(()=>{const n=$[0],B=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(pe,{...B},$,oe)})():ue,o,p),y)))))))))))});be.displayName="Shell.Root";const Pe=e.forwardRef(({className:t,height:l=64,style:d,...C},h)=>e.createElement("header",{...C,ref:h,className:K("rt-ShellHeader",t),style:{...d,"--shell-header-height":`${l}px`}}));Pe.displayName="Shell.Header";const Ye=["open","defaultOpen","onOpenChange","mode","defaultMode","onModeChange"],pe=e.forwardRef((t,l)=>{const{className:d,presentation:C={initial:"fixed",sm:"fixed"},collapsible:h=!0,onExpand:v,onCollapse:P,children:b,style:c,...r}=t,u=r.open,T=r.defaultOpen,i=r.onOpenChange,x=we(r,Ye),a=le(),E=he(C),R=E==="overlay",O=E==="stacked",U=e.useRef(null);e.useEffect(()=>{a.onLeftPres?.(E)},[a,E]);const _=e.useCallback(S=>{U.current=S,typeof l=="function"?l(S):l&&(l.current=S)},[l]);e.useEffect(()=>(a.setHasLeft(!0),()=>a.setHasLeft(!1)),[a]);const V=e.useRef(null),D=e.useRef(!1),I=e.useMemo(()=>{if(!(typeof u>"u"))return u?"expanded":"collapsed"},[u]),J=e.useMemo(()=>Be(T),[T]);Ne({controlledValue:I,defaultValue:J,currentValue:a.leftMode,setValue:a.setLeftMode,breakpointReady:a.currentBreakpointReady,onInit:S=>i?.(S==="expanded",{reason:"init"})}),e.useEffect(()=>{typeof u<"u"||(V.current!==null&&V.current!==a.leftMode&&i?.(a.leftMode==="expanded",{reason:"toggle"}),V.current=a.leftMode)},[a,i,u]),e.useEffect(()=>{a.leftMode==="expanded"?v?.():P?.()},[a.leftMode,v,P]);const q=a.leftMode==="expanded";if(R){const S=a.leftMode==="expanded",w=e.Children.toArray(b),L=(M,A)=>e.isValidElement(M)&&M.type===A,z=w.find(M=>L(M,Y)),g=w.find(M=>L(M,H)),s=typeof z?.props?.expandedSize=="number"?z.props.expandedSize:64,W=typeof g?.props?.expandedSize=="number"?g.props.expandedSize:288,G=!!z,Q=!!g,m=(G?s:0)+(a.panelMode==="expanded"&&Q?W:0);return e.createElement(fe.Root,{open:S,onOpenChange:M=>a.setLeftMode(M?"expanded":"collapsed")},e.createElement(fe.Content,{side:"start",style:{padding:0},width:{initial:`${m}px`}},e.createElement(ke,null,e.createElement(fe.Title,null,"Navigation")),e.createElement("div",{className:"rt-ShellLeft"},b)))}if(O){const S=a.leftMode==="expanded",w=e.Children.toArray(b),L=(M,A)=>e.isValidElement(M)&&M.type===A,z=w.find(M=>L(M,Y)),g=w.find(M=>L(M,H)),s=typeof z?.props?.expandedSize=="number"?z.props.expandedSize:64,W=typeof g?.props?.expandedSize=="number"?g.props.expandedSize:288,G=!!z,m=!!g&&(a.panelMode==="expanded"||a.peekTarget==="panel");return e.createElement("div",{...x,ref:_,className:K("rt-ShellLeft",d),"data-mode":a.leftMode,"data-peek":a.peekTarget==="left"||a.peekTarget==="rail"||a.peekTarget==="panel"||void 0,"data-presentation":E,style:{...c},"data-open":S||void 0},b)}return e.createElement("div",{...x,ref:_,className:K("rt-ShellLeft",d),"data-mode":a.leftMode,"data-peek":a.peekTarget==="left"||a.peekTarget==="rail"||a.peekTarget==="panel"||void 0,"data-presentation":E,style:{...c}},b)});pe.displayName="Shell.Left",X(pe,"Shell.Left");const Y=e.forwardRef((t,l)=>{const{className:d,presentation:C,expandedSize:h=64,collapsible:v,onExpand:P,onCollapse:b,children:c,style:r,open:u,defaultOpen:T,onOpenChange:i,...x}=t,a=le(),E=e.useRef(null);e.useEffect(()=>{const O=typeof u<"u";if(E.current===null){E.current=O;return}E.current!==O&&(console.warn("Shell.Rail: Switching between controlled and uncontrolled `open` is not supported."),E.current=O)},[u]),e.useEffect(()=>{a.onRailDefaults?.(h)},[a,h]);const R=a.leftMode==="expanded";return e.createElement("div",{...x,ref:l,className:K("rt-ShellRail",d),"data-mode":a.leftMode,"data-peek":a.currentBreakpointReady&&a.leftResolvedPresentation!=="overlay"&&a.peekTarget==="rail"||void 0,style:{...r,"--rail-size":`${h}px`}},e.createElement("div",{className:"rt-ShellRailContent","data-visible":a.currentBreakpointReady&&(R||a.leftResolvedPresentation!=="overlay"&&a.peekTarget==="rail")||void 0},c))});Y.displayName="Shell.Rail",X(Y,"Shell.Rail");const Je=["className","children","defaultOpen","open","onOpenChange","size","defaultSize","onSizeChange","sizeUpdate","sizeUpdateMs","style"],H=X(e.forwardRef((t,l)=>{const{className:d,defaultOpen:C,open:h,onOpenChange:v,size:P,defaultSize:b,expandedSize:c=288,minSize:r,maxSize:u,resizable:T,collapsible:i=!0,onExpand:x,onCollapse:a,onResize:E,onResizeStart:R,onResizeEnd:O,snapPoints:U,snapTolerance:_,collapseThreshold:V,paneId:D,persistence:I,children:J,style:q,onSizeChange:S,sizeUpdate:w,sizeUpdateMs:L=50}=t,z=Ae(t,Je),g=e.useMemo(()=>{if(!S)return()=>{};if(w==="debounce"){let o=null;return(y,f)=>{o&&clearTimeout(o),o=setTimeout(()=>{S?.(y,f)},L)}}if(w==="throttle"){let o=0;return(p,y)=>{const f=Date.now();f-o>=L&&(o=f,S?.(p,y))}}return(o,p)=>S?.(o,p)},[S,w,L]),s=le(),W=e.useRef(null),G=e.useRef(null),Q=e.useRef(!1);e.useEffect(()=>{typeof h>"u"&&typeof C=="boolean"&&(C?(s.setLeftMode("expanded"),s.setPanelMode("expanded")):s.setPanelMode("collapsed"))},[]),e.useEffect(()=>{typeof h>"u"||(h?(s.leftMode!=="expanded"&&s.setLeftMode("expanded"),s.panelMode!=="expanded"&&s.setPanelMode("expanded")):s.panelMode!=="collapsed"&&s.setPanelMode("collapsed"))},[s,h]),e.useEffect(()=>{const o=typeof h<"u";H._wasControlled=H._wasControlled??o,H._wasControlled!==o&&(console.warn("Shell.Panel: Switching between controlled and uncontrolled `open` is not supported."),H._wasControlled=o)},[h]),e.useEffect(()=>{Q.current||typeof h>"u"&&C&&s.panelMode==="expanded"&&(v?.(!0,{reason:"init"}),Q.current=!0)},[]),e.useEffect(()=>{s.onPanelDefaults?.(c)},[s,c]);const m=e.useRef(null),M=e.useCallback(o=>{m.current=o,typeof l=="function"?l(o):l&&(l.current=o)},[l]),A=e.Children.toArray(J),ne=A.filter(o=>e.isValidElement(o)&&o.type===me),F=A.filter(o=>!(e.isValidElement(o)&&o.type===me)),k=s.leftResolvedPresentation==="overlay",te=e.useCallback(o=>{if(o==null)return;if(typeof o=="number"&&Number.isFinite(o))return o;const p=String(o).trim();if(!p)return;if(p.endsWith("px"))return Number.parseFloat(p);if(p.endsWith("rem")){const f=Number.parseFloat(getComputedStyle(document.documentElement).fontSize||"16")||16;return Number.parseFloat(p)*f}if(p.endsWith("%")){const f=Number.parseFloat(p),Z=document.documentElement.clientWidth||window.innerWidth||0;return f/100*Z}const y=Number.parseFloat(p);return Number.isFinite(y)?y:void 0},[]),$=e.useMemo(()=>{if(!D||I)return I;const o=`kookie-ui:shell:panel:${D}`;return{load:()=>{if(typeof window>"u")return;const y=window.localStorage.getItem(o);return y?Number(y):void 0},save:y=>{typeof window>"u"||window.localStorage.setItem(o,String(y))}}},[D,I]);e.useEffect(()=>{let o=!0;return(async()=>{if(!T||!$?.load||k)return;const p=await $.load();o&&typeof p=="number"&&m.current&&(m.current.style.setProperty("--panel-size",`${p}px`),E?.(p))})(),()=>{o=!1}},[T,$,E,k]),e.useEffect(()=>{m.current&&k&&m.current.style.setProperty("--panel-size",`${c}px`)},[k,c]),e.useEffect(()=>{if(m.current&&typeof P>"u"&&typeof b<"u"){const o=te(b);if(typeof o=="number"&&Number.isFinite(o)){const f=Math.min((typeof u=="number"?u:void 0)??o,Math.max((typeof r=="number"?r:void 0)??o,o));m.current.style.setProperty("--panel-size",`${f}px`),g(f,{reason:"init"})}}},[]),e.useEffect(()=>{if(!m.current||typeof P>"u")return;const o=te(P);if(typeof o=="number"&&Number.isFinite(o)){const f=Math.min((typeof u=="number"?u:void 0)??o,Math.max((typeof r=="number"?r:void 0)??o,o));m.current.style.setProperty("--panel-size",`${f}px`),g(f,{reason:"controlled"})}},[P,r,u,te,g]),e.useEffect(()=>{if(m.current&&s.leftResolvedPresentation!=="overlay"&&s.leftMode==="expanded"&&s.panelMode==="expanded"){const o=m.current.parentElement||null;try{o?.style.removeProperty("width")}catch{}}},[s.leftResolvedPresentation,s.leftMode,s.panelMode]);const oe=s.leftMode==="expanded"&&s.panelMode==="expanded";e.useEffect(()=>{const o=W.current,p=G.current;if(o!==null&&o!==s.panelMode){const y=s.panelMode==="expanded";let f="toggle";p!==s.leftMode&&s.leftMode==="collapsed"&&!y&&(f="left"),v?.(y,{reason:f})}W.current=s.panelMode,G.current=s.leftMode},[s.panelMode,s.leftMode,v]);const ue=T&&s.leftResolvedPresentation!=="overlay"&&oe?e.createElement(_e.Provider,{value:{containerRef:m,cssVarName:"--panel-size",minSize:typeof r=="number"?r:100,maxSize:typeof u=="number"?u:800,defaultSize:c,orientation:"vertical",edge:"end",computeNext:(o,p,y)=>{const f=getComputedStyle(m.current).direction==="rtl",Z=o-p;return y+(f?-Z:Z)},onResize:E,onResizeStart:o=>{const y=m.current?.parentElement;try{y?.style.removeProperty("width")}catch{}R?.(o)},onResizeEnd:o=>{O?.(o),g(o,{reason:"resize"}),$?.save?.(o)},target:"panel",collapsible:!!i,snapPoints:U,snapTolerance:_??8,collapseThreshold:V,requestCollapse:()=>s.setPanelMode("collapsed"),requestToggle:()=>s.togglePane("panel")}},ne.length>0?ne.map((o,p)=>e.cloneElement(o,{key:o.key??p})):e.createElement(De,null)):null;return e.createElement("div",{...z,ref:M,className:K("rt-ShellPanel",d),"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:{...q,"--panel-size":`${c}px`}},e.createElement("div",{className:"rt-ShellPanelContent","data-visible":oe||void 0},F),ue)}),"Shell.Panel");H.displayName="Shell.Panel",H.Handle=me;const ce=e.forwardRef(({className:t,...l},d)=>e.createElement("main",{...l,ref:d,className:K("rt-ShellContent",t)}));ce.displayName="Shell.Content",X(ce,"Shell.Content");const Ee=e.forwardRef(({target:t,action:l="toggle",peekOnHover:d,onClick:C,onMouseEnter:h,onMouseLeave:v,children:P,...b},c)=>{const r=le(),u=e.useCallback(a=>{switch(C?.(a),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,C]),T=(()=>{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"}})(),i=e.useCallback(a=>{h?.(a),!(!d||!T)&&r.peekPane(t)},[h,d,T,r,t]),x=e.useCallback(a=>{v?.(a),d&&r.peekTarget===t&&r.clearPeek()},[v,d,r,t]);return e.createElement("button",{...b,ref:c,onClick:u,onMouseEnter:i,onMouseLeave:x,"data-shell-trigger":t,"data-shell-action":l},P)});Ee.displayName="Shell.Trigger";export{Me as Bottom,ce as Content,Pe as Header,ye as Inspector,pe as Left,H as Panel,Y as Rail,be as Root,de as Sidebar,Ee as Trigger,he as useResponsivePresentation,le 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
|