@kushagradhawan/kookie-ui 0.1.73 → 0.1.75

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (63) hide show
  1. package/components.css +0 -5
  2. package/dist/cjs/components/_internal/shell-bottom.d.ts.map +1 -1
  3. package/dist/cjs/components/_internal/shell-bottom.js +1 -1
  4. package/dist/cjs/components/_internal/shell-bottom.js.map +3 -3
  5. package/dist/cjs/components/_internal/shell-handles.d.ts.map +1 -1
  6. package/dist/cjs/components/_internal/shell-handles.js +1 -1
  7. package/dist/cjs/components/_internal/shell-handles.js.map +3 -3
  8. package/dist/cjs/components/_internal/shell-inspector.d.ts.map +1 -1
  9. package/dist/cjs/components/_internal/shell-inspector.js +1 -1
  10. package/dist/cjs/components/_internal/shell-inspector.js.map +3 -3
  11. package/dist/cjs/components/_internal/shell-sidebar.d.ts.map +1 -1
  12. package/dist/cjs/components/_internal/shell-sidebar.js +1 -1
  13. package/dist/cjs/components/_internal/shell-sidebar.js.map +3 -3
  14. package/dist/cjs/components/shell.d.ts.map +1 -1
  15. package/dist/cjs/components/shell.js +1 -1
  16. package/dist/cjs/components/shell.js.map +3 -3
  17. package/dist/cjs/helpers/index.d.ts +1 -0
  18. package/dist/cjs/helpers/index.d.ts.map +1 -1
  19. package/dist/cjs/helpers/index.js +1 -1
  20. package/dist/cjs/helpers/index.js.map +2 -2
  21. package/dist/cjs/helpers/normalize-to-px.d.ts +10 -0
  22. package/dist/cjs/helpers/normalize-to-px.d.ts.map +1 -0
  23. package/dist/cjs/helpers/normalize-to-px.js +2 -0
  24. package/dist/cjs/helpers/normalize-to-px.js.map +7 -0
  25. package/dist/esm/components/_internal/shell-bottom.d.ts.map +1 -1
  26. package/dist/esm/components/_internal/shell-bottom.js +1 -1
  27. package/dist/esm/components/_internal/shell-bottom.js.map +3 -3
  28. package/dist/esm/components/_internal/shell-handles.d.ts.map +1 -1
  29. package/dist/esm/components/_internal/shell-handles.js +1 -1
  30. package/dist/esm/components/_internal/shell-handles.js.map +3 -3
  31. package/dist/esm/components/_internal/shell-inspector.d.ts.map +1 -1
  32. package/dist/esm/components/_internal/shell-inspector.js +1 -1
  33. package/dist/esm/components/_internal/shell-inspector.js.map +3 -3
  34. package/dist/esm/components/_internal/shell-sidebar.d.ts.map +1 -1
  35. package/dist/esm/components/_internal/shell-sidebar.js +1 -1
  36. package/dist/esm/components/_internal/shell-sidebar.js.map +3 -3
  37. package/dist/esm/components/shell.d.ts.map +1 -1
  38. package/dist/esm/components/shell.js +1 -1
  39. package/dist/esm/components/shell.js.map +3 -3
  40. package/dist/esm/helpers/index.d.ts +1 -0
  41. package/dist/esm/helpers/index.d.ts.map +1 -1
  42. package/dist/esm/helpers/index.js +1 -1
  43. package/dist/esm/helpers/index.js.map +2 -2
  44. package/dist/esm/helpers/normalize-to-px.d.ts +10 -0
  45. package/dist/esm/helpers/normalize-to-px.d.ts.map +1 -0
  46. package/dist/esm/helpers/normalize-to-px.js +2 -0
  47. package/dist/esm/helpers/normalize-to-px.js.map +7 -0
  48. package/package.json +1 -1
  49. package/schemas/base-button.json +1 -1
  50. package/schemas/button.json +1 -1
  51. package/schemas/icon-button.json +1 -1
  52. package/schemas/index.json +6 -6
  53. package/schemas/toggle-button.json +1 -1
  54. package/schemas/toggle-icon-button.json +1 -1
  55. package/src/components/_internal/shell-bottom.tsx +32 -28
  56. package/src/components/_internal/shell-handles.tsx +6 -1
  57. package/src/components/_internal/shell-inspector.tsx +32 -28
  58. package/src/components/_internal/shell-sidebar.tsx +31 -28
  59. package/src/components/shell.css +1 -6
  60. package/src/components/shell.tsx +37 -30
  61. package/src/helpers/index.ts +1 -0
  62. package/src/helpers/normalize-to-px.ts +42 -0
  63. package/styles.css +0 -5
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../src/components/_internal/shell-bottom.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 { BottomHandle, PaneHandle } from './shell-handles.js';\nimport { _BREAKPOINTS } from '../shell.types.js';\nimport type { Breakpoint, PaneMode, PaneSizePersistence, ResponsivePresentation, PaneBaseProps } from '../shell.types.js';\nimport { extractPaneDomProps, mapResponsiveBooleanToPaneMode } from './shell-prop-helpers.js';\n\ntype BottomOpenChangeMeta = { reason: 'init' | 'toggle' | 'responsive' };\ntype BottomControlledProps = { open: boolean | Partial<Record<Breakpoint, boolean>>; onOpenChange?: (open: boolean, meta: BottomOpenChangeMeta) => void; defaultOpen?: never };\ntype BottomUncontrolledProps = { defaultOpen?: boolean; onOpenChange?: (open: boolean, meta: BottomOpenChangeMeta) => void; open?: never };\ntype BottomSizeControlledProps = { size: number | string; defaultSize?: never };\ntype BottomSizeUncontrolledProps = { defaultSize?: number | string; size?: never };\ntype BottomSizeChangeMeta = { reason: 'init' | 'resize' | 'controlled' };\ntype BottomPublicProps = PaneBaseProps &\n (BottomControlledProps | BottomUncontrolledProps) &\n (BottomSizeControlledProps | BottomSizeUncontrolledProps) & {\n onSizeChange?: (size: number, meta: BottomSizeChangeMeta) => void;\n sizeUpdate?: 'throttle' | 'debounce';\n sizeUpdateMs?: number;\n };\n\ntype BottomComponent = React.ForwardRefExoticComponent<BottomPublicProps & React.RefAttributes<HTMLDivElement>> & { Handle: typeof BottomHandle };\n\nconst BOTTOM_DOM_PROP_KEYS = [\n 'className',\n 'children',\n 'defaultOpen',\n 'open',\n 'onOpenChange',\n 'size',\n 'defaultSize',\n 'onSizeChange',\n 'sizeUpdate',\n 'sizeUpdateMs',\n 'style',\n] as const satisfies readonly (keyof BottomPublicProps)[];\n\nexport const Bottom = React.forwardRef<HTMLDivElement, BottomPublicProps>((initialProps, ref) => {\n const {\n className,\n presentation = 'fixed',\n defaultOpen,\n open,\n onOpenChange,\n expandedSize = 200,\n minSize = 100,\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 size,\n defaultSize,\n onSizeChange,\n sizeUpdate,\n sizeUpdateMs = 50,\n } = initialProps;\n const bottomDomProps = extractPaneDomProps(initialProps, BOTTOM_DOM_PROP_KEYS);\n const shell = useShell();\n const resolvedPresentation = useResponsivePresentation(presentation);\n const isOverlay = resolvedPresentation === 'overlay';\n const isStacked = resolvedPresentation === 'stacked';\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 === BottomHandle);\n const contentChildren = childArray.filter((el: React.ReactElement) => !(React.isValidElement(el) && el.type === BottomHandle));\n\n // Throttled/debounced emitter for onSizeChange\n const normalizedControlledOpen = React.useMemo(() => mapResponsiveBooleanToPaneMode(open), [open]);\n const normalizedDefaultOpen = React.useMemo(() => mapResponsiveBooleanToPaneMode(defaultOpen), [defaultOpen]);\n const openIsResponsive = typeof open === 'object' && open !== null;\n useResponsiveInitialState<PaneMode>({\n controlledValue: normalizedControlledOpen,\n defaultValue: normalizedDefaultOpen,\n currentValue: shell.bottomMode,\n setValue: shell.setBottomMode,\n breakpointReady: shell.currentBreakpointReady,\n controlledIsResponsive: openIsResponsive,\n onResponsiveChange: (next) => onOpenChange?.(next === 'expanded', { reason: 'responsive' }),\n onInit: (initial) => {\n if (typeof open === 'undefined') {\n onOpenChange?.(initial === 'expanded', { reason: 'init' });\n }\n },\n });\n\n const emitSizeChange = React.useMemo(() => {\n const cb = onSizeChange as undefined | ((s: number, meta: BottomSizeChangeMeta) => 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: BottomSizeChangeMeta) => {\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: BottomSizeChangeMeta) => {\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: BottomSizeChangeMeta) => cb(s, meta);\n }, [onSizeChange, sizeUpdate, sizeUpdateMs]);\n\n // Dev guards\n const wasControlledRef = React.useRef<boolean | null>(null);\n if (process.env.NODE_ENV !== 'production') {\n if (typeof open !== 'undefined' && typeof defaultOpen !== 'undefined') {\n console.error('Shell.Bottom: Do not pass both `open` and `defaultOpen`. Choose one.');\n }\n if (typeof size !== 'undefined' && typeof defaultSize !== 'undefined') {\n console.error('Shell.Bottom: Do not pass both `size` and `defaultSize`. Choose one.');\n }\n }\n\n React.useEffect(() => {\n const isControlled = typeof open !== 'undefined';\n if (wasControlledRef.current === null) {\n wasControlledRef.current = isControlled;\n return;\n }\n if (wasControlledRef.current !== isControlled) {\n console.warn('Shell.Bottom: Switching between controlled and uncontrolled `open` is not supported.');\n wasControlledRef.current = isControlled;\n }\n }, [open]);\n\n const initNotifiedRef = React.useRef(false);\n const lastBottomModeRef = React.useRef<PaneMode | null>(null);\n React.useEffect(() => {\n if (!initNotifiedRef.current && typeof open === 'undefined' && defaultOpen && shell.bottomMode === 'expanded') {\n onOpenChange?.(true, { reason: 'init' });\n initNotifiedRef.current = true;\n }\n if (typeof open === 'undefined') {\n if (lastBottomModeRef.current !== null && lastBottomModeRef.current !== shell.bottomMode) {\n onOpenChange?.(shell.bottomMode === 'expanded', { reason: 'toggle' });\n }\n lastBottomModeRef.current = shell.bottomMode;\n }\n }, [shell.bottomMode, open, defaultOpen, onOpenChange]);\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 prevBottomModeRef = React.useRef<PaneMode | null>(null);\n const hasInitializedRef = React.useRef(false);\n React.useEffect(() => {\n const currentMode = shell.bottomMode;\n\n // Wait for breakpoint to be ready before enabling callbacks\n if (!shell.currentBreakpointReady) {\n prevBottomModeRef.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 prevBottomModeRef.current = currentMode;\n return;\n }\n\n const prevMode = prevBottomModeRef.current;\n\n // Only fire on actual state transitions\n if (prevMode !== null && prevMode !== currentMode) {\n if (currentMode === 'expanded') {\n onExpand?.();\n } else if (currentMode === 'collapsed') {\n onCollapse?.();\n }\n prevBottomModeRef.current = currentMode;\n }\n }, [shell.bottomMode, shell.currentBreakpointReady, onExpand, onCollapse]);\n\n const isExpanded = shell.bottomMode === 'expanded';\n\n const persistenceAdapter = React.useMemo(() => {\n if (!paneId || persistence) return persistence;\n const key = `kookie-ui:shell:bottom:${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.Bottom: 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.Bottom: 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 if (!resizable || !persistenceAdapter?.load || isOverlay) return undefined;\n const loaded = persistenceAdapter.load();\n const applyLoaded = (value?: number) => {\n if (!mounted || typeof value !== 'number' || !localRef.current) return;\n localRef.current.style.setProperty('--bottom-size', `${value}px`);\n onResize?.(value);\n };\n if (loaded instanceof Promise) {\n loaded.then(applyLoaded).catch((err) => {\n if (process.env.NODE_ENV !== 'production') {\n console.warn('Shell.Bottom: failed to load persisted size', err);\n }\n });\n } else {\n applyLoaded(loaded);\n }\n return () => {\n mounted = false;\n };\n }, [resizable, persistenceAdapter, onResize, isOverlay]);\n\n const handleEl =\n resizable && !isOverlay && isExpanded ? (\n <PaneResizeContext.Provider\n value={{\n containerRef: localRef,\n cssVarName: '--bottom-size',\n minSize,\n maxSize,\n defaultSize: expandedSize,\n orientation: 'horizontal',\n edge: 'start',\n computeNext: (client, startClient, startSize) => {\n const delta = client - startClient;\n return startSize - delta;\n },\n onResize,\n onResizeStart,\n onResizeEnd: (size) => {\n onResizeEnd?.(size);\n emitSizeChange(size, { reason: 'resize' });\n persistenceAdapter?.save?.(size);\n },\n target: 'bottom',\n collapsible,\n snapPoints,\n snapTolerance: snapTolerance ?? 8,\n collapseThreshold,\n requestCollapse: () => shell.setBottomMode('collapsed'),\n requestToggle: () => shell.togglePane('bottom'),\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 // Strip control/size props from DOM spread (moved above overlay return to keep hook order consistent)\n // Normalize CSS lengths to px (moved above overlay return to keep hook order consistent)\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.clientHeight || window.innerHeight || 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 (moved above overlay return)\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('--bottom-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 (moved above overlay return)\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('--bottom-size', `${clamped}px`);\n emitSizeChange(clamped, { reason: 'controlled' });\n }\n }, [controlledSize, minSize, maxSize, normalizeToPx, emitSizeChange]);\n\n if (isOverlay) {\n const open = shell.bottomMode === 'expanded';\n return (\n <Sheet.Root open={open} onOpenChange={(o) => shell.setBottomMode(o ? 'expanded' : 'collapsed')}>\n <Sheet.Content side=\"bottom\" style={{ padding: 0 }} height={{ initial: `${expandedSize}px` }}>\n <VisuallyHidden>\n <Sheet.Title>Bottom panel</Sheet.Title>\n </VisuallyHidden>\n {contentChildren}\n </Sheet.Content>\n </Sheet.Root>\n );\n }\n\n return (\n <div\n {...bottomDomProps}\n ref={setRef}\n className={classNames('rt-ShellBottom', className)}\n data-mode={shell.bottomMode}\n data-peek={shell.peekTarget === 'bottom' || undefined}\n data-presentation={shell.currentBreakpointReady ? resolvedPresentation : undefined}\n data-open={(shell.currentBreakpointReady && isStacked && isExpanded) || undefined}\n style={{\n ...style,\n ['--bottom-size' as any]: `${expandedSize}px`,\n ['--bottom-min-size' as any]: `${minSize}px`,\n ['--bottom-max-size' as any]: `${maxSize}px`,\n }}\n >\n <div className=\"rt-ShellBottomContent\" data-visible={isExpanded || undefined}>\n {contentChildren}\n </div>\n {handleEl}\n </div>\n );\n}) as BottomComponent;\nBottom.displayName = 'Shell.Bottom';\nBottom.Handle = BottomHandle;\n"],
5
- "mappings": "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",
6
- "names": ["React", "classNames", "Sheet", "VisuallyHidden", "useShell", "useResponsivePresentation", "useResponsiveInitialState", "PaneResizeContext", "BottomHandle", "PaneHandle", "extractPaneDomProps", "mapResponsiveBooleanToPaneMode", "BOTTOM_DOM_PROP_KEYS", "Bottom", "initialProps", "ref", "className", "presentation", "defaultOpen", "open", "onOpenChange", "expandedSize", "minSize", "maxSize", "resizable", "collapsible", "onExpand", "onCollapse", "onResize", "onResizeStart", "onResizeEnd", "snapPoints", "snapTolerance", "collapseThreshold", "paneId", "persistence", "children", "style", "size", "defaultSize", "onSizeChange", "sizeUpdate", "sizeUpdateMs", "bottomDomProps", "shell", "resolvedPresentation", "isOverlay", "isStacked", "localRef", "setRef", "node", "childArray", "handleChildren", "el", "contentChildren", "normalizedControlledOpen", "normalizedDefaultOpen", "openIsResponsive", "next", "initial", "emitSizeChange", "cb", "strategy", "ms", "t", "s", "meta", "last", "now", "wasControlledRef", "isControlled", "initNotifiedRef", "lastBottomModeRef", "prevBottomModeRef", "hasInitializedRef", "currentMode", "prevMode", "isExpanded", "persistenceAdapter", "key", "v", "mounted", "loaded", "applyLoaded", "value", "err", "handleEl", "client", "startClient", "startSize", "delta", "i", "normalizeToPx", "str", "rem", "pct", "base", "n", "px", "clamped", "controlledSize"]
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 { BottomHandle, PaneHandle } from './shell-handles.js';\nimport { _BREAKPOINTS } from '../shell.types.js';\nimport type { Breakpoint, PaneMode, PaneSizePersistence, ResponsivePresentation, PaneBaseProps } from '../shell.types.js';\nimport { extractPaneDomProps, mapResponsiveBooleanToPaneMode } from './shell-prop-helpers.js';\nimport { normalizeToPx } from '../../helpers/normalize-to-px.js';\n\ntype BottomOpenChangeMeta = { reason: 'init' | 'toggle' | 'responsive' };\ntype BottomControlledProps = { open: boolean | Partial<Record<Breakpoint, boolean>>; onOpenChange?: (open: boolean, meta: BottomOpenChangeMeta) => void; defaultOpen?: never };\ntype BottomUncontrolledProps = { defaultOpen?: boolean; onOpenChange?: (open: boolean, meta: BottomOpenChangeMeta) => void; open?: never };\ntype BottomSizeControlledProps = { size: number | string; defaultSize?: never };\ntype BottomSizeUncontrolledProps = { defaultSize?: number | string; size?: never };\ntype BottomSizeChangeMeta = { reason: 'init' | 'resize' | 'controlled' };\ntype BottomPublicProps = PaneBaseProps &\n (BottomControlledProps | BottomUncontrolledProps) &\n (BottomSizeControlledProps | BottomSizeUncontrolledProps) & {\n onSizeChange?: (size: number, meta: BottomSizeChangeMeta) => void;\n sizeUpdate?: 'throttle' | 'debounce';\n sizeUpdateMs?: number;\n };\n\ntype BottomComponent = React.ForwardRefExoticComponent<BottomPublicProps & React.RefAttributes<HTMLDivElement>> & { Handle: typeof BottomHandle };\n\nconst BOTTOM_DOM_PROP_KEYS = [\n 'className',\n 'children',\n 'defaultOpen',\n 'open',\n 'onOpenChange',\n 'size',\n 'defaultSize',\n 'onSizeChange',\n 'sizeUpdate',\n 'sizeUpdateMs',\n 'style',\n] as const satisfies readonly (keyof BottomPublicProps)[];\n\nexport const Bottom = React.forwardRef<HTMLDivElement, BottomPublicProps>((initialProps, ref) => {\n const {\n className,\n presentation = 'fixed',\n defaultOpen,\n open,\n onOpenChange,\n expandedSize = 200,\n minSize = 100,\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 size,\n defaultSize,\n onSizeChange,\n sizeUpdate,\n sizeUpdateMs = 50,\n } = initialProps;\n const bottomDomProps = extractPaneDomProps(initialProps, BOTTOM_DOM_PROP_KEYS);\n const shell = useShell();\n const resolvedPresentation = useResponsivePresentation(presentation);\n const isOverlay = resolvedPresentation === 'overlay';\n const isStacked = resolvedPresentation === 'stacked';\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 === BottomHandle);\n const contentChildren = childArray.filter((el: React.ReactElement) => !(React.isValidElement(el) && el.type === BottomHandle));\n\n // Throttled/debounced emitter for onSizeChange\n const normalizedControlledOpen = React.useMemo(() => mapResponsiveBooleanToPaneMode(open), [open]);\n const normalizedDefaultOpen = React.useMemo(() => mapResponsiveBooleanToPaneMode(defaultOpen), [defaultOpen]);\n const openIsResponsive = typeof open === 'object' && open !== null;\n useResponsiveInitialState<PaneMode>({\n controlledValue: normalizedControlledOpen,\n defaultValue: normalizedDefaultOpen,\n currentValue: shell.bottomMode,\n setValue: shell.setBottomMode,\n breakpointReady: shell.currentBreakpointReady,\n controlledIsResponsive: openIsResponsive,\n onResponsiveChange: (next) => onOpenChange?.(next === 'expanded', { reason: 'responsive' }),\n onInit: (initial) => {\n if (typeof open === 'undefined') {\n onOpenChange?.(initial === 'expanded', { reason: 'init' });\n }\n },\n });\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: BottomSizeChangeMeta) => 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: BottomSizeChangeMeta) => {\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: BottomSizeChangeMeta) => {\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: BottomSizeChangeMeta) => cb(s, meta);\n }, [onSizeChange, sizeUpdate, sizeUpdateMs]);\n\n // Dev guards\n const wasControlledRef = React.useRef<boolean | null>(null);\n if (process.env.NODE_ENV !== 'production') {\n if (typeof open !== 'undefined' && typeof defaultOpen !== 'undefined') {\n console.error('Shell.Bottom: Do not pass both `open` and `defaultOpen`. Choose one.');\n }\n if (typeof size !== 'undefined' && typeof defaultSize !== 'undefined') {\n console.error('Shell.Bottom: Do not pass both `size` and `defaultSize`. Choose one.');\n }\n }\n\n React.useEffect(() => {\n const isControlled = typeof open !== 'undefined';\n if (wasControlledRef.current === null) {\n wasControlledRef.current = isControlled;\n return;\n }\n if (wasControlledRef.current !== isControlled) {\n console.warn('Shell.Bottom: Switching between controlled and uncontrolled `open` is not supported.');\n wasControlledRef.current = isControlled;\n }\n }, [open]);\n\n const initNotifiedRef = React.useRef(false);\n const lastBottomModeRef = React.useRef<PaneMode | null>(null);\n React.useEffect(() => {\n if (!initNotifiedRef.current && typeof open === 'undefined' && defaultOpen && shell.bottomMode === 'expanded') {\n onOpenChange?.(true, { reason: 'init' });\n initNotifiedRef.current = true;\n }\n if (typeof open === 'undefined') {\n if (lastBottomModeRef.current !== null && lastBottomModeRef.current !== shell.bottomMode) {\n onOpenChange?.(shell.bottomMode === 'expanded', { reason: 'toggle' });\n }\n lastBottomModeRef.current = shell.bottomMode;\n }\n }, [shell.bottomMode, open, defaultOpen, onOpenChange]);\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 prevBottomModeRef = React.useRef<PaneMode | null>(null);\n const hasInitializedRef = React.useRef(false);\n React.useEffect(() => {\n const currentMode = shell.bottomMode;\n\n // Wait for breakpoint to be ready before enabling callbacks\n if (!shell.currentBreakpointReady) {\n prevBottomModeRef.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 prevBottomModeRef.current = currentMode;\n return;\n }\n\n const prevMode = prevBottomModeRef.current;\n\n // Only fire on actual state transitions\n if (prevMode !== null && prevMode !== currentMode) {\n if (currentMode === 'expanded') {\n onExpandRef.current?.();\n } else if (currentMode === 'collapsed') {\n onCollapseRef.current?.();\n }\n prevBottomModeRef.current = currentMode;\n }\n }, [shell.bottomMode, shell.currentBreakpointReady]);\n\n const isExpanded = shell.bottomMode === 'expanded';\n\n const persistenceAdapter = React.useMemo(() => {\n if (!paneId || persistence) return persistence;\n const key = `kookie-ui:shell:bottom:${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.Bottom: 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.Bottom: 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 if (!resizable || !persistenceAdapter?.load || isOverlay) return undefined;\n const loaded = persistenceAdapter.load();\n const applyLoaded = (value?: number) => {\n if (!mounted || typeof value !== 'number' || !localRef.current) return;\n localRef.current.style.setProperty('--bottom-size', `${value}px`);\n onResize?.(value);\n };\n if (loaded instanceof Promise) {\n loaded.then(applyLoaded).catch((err) => {\n if (process.env.NODE_ENV !== 'production') {\n console.warn('Shell.Bottom: failed to load persisted size', err);\n }\n });\n } else {\n applyLoaded(loaded);\n }\n return () => {\n mounted = false;\n };\n }, [resizable, persistenceAdapter, onResize, isOverlay]);\n\n const handleEl =\n resizable && !isOverlay && isExpanded ? (\n <PaneResizeContext.Provider\n value={{\n containerRef: localRef,\n cssVarName: '--bottom-size',\n minSize,\n maxSize,\n defaultSize: expandedSize,\n orientation: 'horizontal',\n edge: 'start',\n computeNext: (client, startClient, startSize) => {\n const delta = client - startClient;\n return startSize - delta;\n },\n onResize,\n onResizeStart,\n onResizeEnd: (size) => {\n onResizeEnd?.(size);\n emitSizeChange(size, { reason: 'resize' });\n persistenceAdapter?.save?.(size);\n },\n target: 'bottom',\n collapsible,\n snapPoints,\n snapTolerance: snapTolerance ?? 8,\n collapseThreshold,\n requestCollapse: () => shell.setBottomMode('collapsed'),\n requestToggle: () => shell.togglePane('bottom'),\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 // Strip control/size props from DOM spread (moved above overlay return to keep hook order consistent)\n // Normalize CSS lengths to px helper\n const normalizeSizeToPx = React.useCallback((value: number | string | undefined) => normalizeToPx(value, 'vertical'), []);\n\n // Apply defaultSize on mount when uncontrolled (moved above overlay return)\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('--bottom-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 (moved above overlay return)\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('--bottom-size', `${clamped}px`);\n emitSizeChange(clamped, { reason: 'controlled' });\n }\n }, [controlledSize, minSize, maxSize, normalizeSizeToPx, emitSizeChange]);\n\n if (isOverlay) {\n const open = shell.bottomMode === 'expanded';\n return (\n <Sheet.Root open={open} onOpenChange={(o) => shell.setBottomMode(o ? 'expanded' : 'collapsed')}>\n <Sheet.Content side=\"bottom\" style={{ padding: 0 }} height={{ initial: `${expandedSize}px` }}>\n <VisuallyHidden>\n <Sheet.Title>Bottom panel</Sheet.Title>\n </VisuallyHidden>\n {contentChildren}\n </Sheet.Content>\n </Sheet.Root>\n );\n }\n\n return (\n <div\n {...bottomDomProps}\n ref={setRef}\n className={classNames('rt-ShellBottom', className)}\n data-mode={shell.bottomMode}\n data-peek={shell.peekTarget === 'bottom' || undefined}\n data-presentation={shell.currentBreakpointReady ? resolvedPresentation : undefined}\n data-open={(shell.currentBreakpointReady && isStacked && isExpanded) || undefined}\n style={{\n ...style,\n ['--bottom-size' as any]: `${expandedSize}px`,\n ['--bottom-min-size' as any]: `${minSize}px`,\n ['--bottom-max-size' as any]: `${maxSize}px`,\n }}\n >\n <div className=\"rt-ShellBottomContent\" data-visible={isExpanded || undefined}>\n {contentChildren}\n </div>\n {handleEl}\n </div>\n );\n}) as BottomComponent;\nBottom.displayName = 'Shell.Bottom';\nBottom.Handle = BottomHandle;\n"],
5
+ "mappings": "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",
6
+ "names": ["React", "classNames", "Sheet", "VisuallyHidden", "useShell", "useResponsivePresentation", "useResponsiveInitialState", "PaneResizeContext", "BottomHandle", "PaneHandle", "extractPaneDomProps", "mapResponsiveBooleanToPaneMode", "normalizeToPx", "BOTTOM_DOM_PROP_KEYS", "Bottom", "initialProps", "ref", "className", "presentation", "defaultOpen", "open", "onOpenChange", "expandedSize", "minSize", "maxSize", "resizable", "collapsible", "onExpand", "onCollapse", "onResize", "onResizeStart", "onResizeEnd", "snapPoints", "snapTolerance", "collapseThreshold", "paneId", "persistence", "children", "style", "size", "defaultSize", "onSizeChange", "sizeUpdate", "sizeUpdateMs", "bottomDomProps", "shell", "resolvedPresentation", "isOverlay", "isStacked", "localRef", "setRef", "node", "childArray", "handleChildren", "el", "contentChildren", "normalizedControlledOpen", "normalizedDefaultOpen", "openIsResponsive", "next", "initial", "debounceTimeoutRef", "emitSizeChange", "cb", "strategy", "ms", "s", "meta", "last", "now", "wasControlledRef", "isControlled", "initNotifiedRef", "lastBottomModeRef", "onExpandRef", "onCollapseRef", "prevBottomModeRef", "hasInitializedRef", "currentMode", "prevMode", "isExpanded", "persistenceAdapter", "key", "v", "mounted", "loaded", "applyLoaded", "value", "err", "handleEl", "client", "startClient", "startSize", "delta", "i", "normalizeSizeToPx", "px", "clamped", "controlledSize", "o"]
7
7
  }
@@ -1 +1 @@
1
- {"version":3,"file":"shell-handles.d.ts","sourceRoot":"","sources":["../../../../src/components/_internal/shell-handles.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAI/B,eAAO,MAAM,UAAU,mKAwMrB,CAAC;AAGH,eAAO,MAAM,WAAW,mKAA+H,CAAC;AAGxJ,eAAO,MAAM,aAAa,mKAA+H,CAAC;AAG1J,eAAO,MAAM,eAAe,mKAA+H,CAAC;AAG5J,eAAO,MAAM,YAAY,mKAA+H,CAAC"}
1
+ {"version":3,"file":"shell-handles.d.ts","sourceRoot":"","sources":["../../../../src/components/_internal/shell-handles.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAI/B,eAAO,MAAM,UAAU,mKA6MrB,CAAC;AAGH,eAAO,MAAM,WAAW,mKAA+H,CAAC;AAGxJ,eAAO,MAAM,aAAa,mKAA+H,CAAC;AAG1J,eAAO,MAAM,eAAe,mKAA+H,CAAC;AAG5J,eAAO,MAAM,YAAY,mKAA+H,CAAC"}
@@ -1,2 +1,2 @@
1
- import*as i from"react";import B from"classnames";import{usePaneResize as X}from"./shell-resize.js";const P=i.forwardRef(({className:c,children:d,...I},W)=>{const{containerRef:R,cssVarName:u,minSize:x,maxSize:H,defaultSize:C,orientation:y,edge:T,computeNext:F,onResize:h,onResizeStart:M,onResizeEnd:g,snapPoints:D,snapTolerance:K,collapseThreshold:z,collapsible:A,target:G,requestCollapse:V,requestToggle:U}=X(),S=i.useRef(null);i.useEffect(()=>()=>{try{S.current?.()}catch{}S.current=null},[]);const q=y;return i.createElement("div",{...I,ref:W,className:B("rt-ShellResizer",c),"data-orientation":y,"data-edge":T,role:"slider","aria-orientation":q,"aria-valuemin":x,"aria-valuemax":H,"aria-valuenow":C,tabIndex:0,onPointerDown:e=>{if(!R.current)return;e.preventDefault();const n=R.current,l=e.currentTarget,b=e.pointerId;try{S.current?.()}catch{}n.setAttribute("data-resizing","");try{l.setPointerCapture(b)}catch{}const w=y==="vertical"?e.clientX:e.clientY,p=parseFloat(getComputedStyle(n).getPropertyValue(u)||`${C}`),m=s=>Math.min(Math.max(s,x),H),r=document.body,t=r.style.cursor,v=r.style.userSelect;r.style.cursor=y==="vertical"?"col-resize":"row-resize",r.style.userSelect="none",M?.(p);const a=s=>{const f=y==="vertical"?s.clientX:s.clientY,L=m(F(f,w,p));n.style.setProperty(u,`${L}px`),l.setAttribute("aria-valuenow",String(L)),h?.(L)},E=()=>{try{l.releasePointerCapture(b)}catch{}window.removeEventListener("pointermove",a),document.removeEventListener("pointermove",a),window.removeEventListener("mousemove",a),document.removeEventListener("mousemove",a),l.removeEventListener("pointermove",a),window.removeEventListener("pointerup",o),document.removeEventListener("pointerup",o),window.removeEventListener("mouseup",o),document.removeEventListener("mouseup",o),window.removeEventListener("pointercancel",o),document.removeEventListener("pointercancel",o),window.removeEventListener("keydown",N),l.removeEventListener("lostpointercapture",o),n.removeAttribute("data-resizing"),r.style.cursor=t,r.style.userSelect=v,S.current=null},o=()=>{const s=parseFloat(getComputedStyle(n).getPropertyValue(u)||`${C}`);let f=s;if(D&&D.length){const L=D.reduce((k,$)=>Math.abs($-s)<Math.abs(k-s)?$:k,D[0]);Math.abs(L-s)<=(K??8)&&(f=L,n.style.setProperty(u,`${f}px`),l.setAttribute("aria-valuenow",String(f)),h?.(f))}A&&typeof z=="number"&&s<=z&&V?.(),g?.(f),E()},N=s=>{s.key==="Escape"&&(n.style.setProperty(u,`${p}px`),l.setAttribute("aria-valuenow",String(p)),g?.(p),E())};window.addEventListener("pointermove",a),document.addEventListener("pointermove",a),window.addEventListener("mousemove",a),document.addEventListener("mousemove",a),l.addEventListener("pointermove",a),window.addEventListener("pointerup",o),document.addEventListener("pointerup",o),window.addEventListener("mouseup",o),document.addEventListener("mouseup",o),window.addEventListener("pointercancel",o),document.addEventListener("pointercancel",o),window.addEventListener("keydown",N),l.addEventListener("lostpointercapture",o),S.current=E},onDoubleClick:()=>{A&&U?.()},onKeyDown:e=>{if(!R.current)return;const n=R.current,l=getComputedStyle(n).getPropertyValue(u),b=Number.parseFloat(l.trim()),w=Number.isFinite(b)?b:C,p=t=>Math.min(Math.max(t,x),H),m=e.shiftKey?32:8;let r=0;if(y==="vertical"){const t=typeof document<"u"?document.dir:void 0,v=getComputedStyle(n).direction,a=!!(n.closest&&n.closest('[dir="rtl"]')),E=t==="rtl"||v==="rtl"||a;e.key==="ArrowRight"?r=E?-m:m:e.key==="ArrowLeft"&&(r=E?m:-m)}else e.key==="ArrowDown"?r=m:e.key==="ArrowUp"&&(r=-m);if(e.key==="Home"){e.preventDefault(),M?.(w);const t=p(x);n.style.setProperty(u,`${t}px`),e.currentTarget.setAttribute("aria-valuenow",String(t)),h?.(t),g?.(t);return}if(e.key==="End"){e.preventDefault(),M?.(w);const t=p(H);n.style.setProperty(u,`${t}px`),e.currentTarget.setAttribute("aria-valuenow",String(t)),h?.(t),g?.(t);return}if(r!==0){e.preventDefault(),M?.(w);const t=y==="vertical"&&T==="start"?-r:r,v=p(w+t);n.style.setProperty(u,`${v}px`),e.currentTarget.setAttribute("aria-valuenow",String(v)),h?.(v),g?.(v)}}},d)});P.displayName="Shell.Handle";const Y=i.forwardRef((c,d)=>i.createElement(P,{...c,ref:d}));Y.displayName="Shell.Panel.Handle";const O=i.forwardRef((c,d)=>i.createElement(P,{...c,ref:d}));O.displayName="Shell.Sidebar.Handle";const _=i.forwardRef((c,d)=>i.createElement(P,{...c,ref:d}));_.displayName="Shell.Inspector.Handle";const j=i.forwardRef((c,d)=>i.createElement(P,{...c,ref:d}));j.displayName="Shell.Bottom.Handle";export{j as BottomHandle,_ as InspectorHandle,P as PaneHandle,Y as PanelHandle,O as SidebarHandle};
1
+ import*as i from"react";import Y from"classnames";import{usePaneResize as O}from"./shell-resize.js";const P=i.forwardRef(({className:c,children:d,...W},F)=>{const{containerRef:R,cssVarName:u,minSize:x,maxSize:H,defaultSize:C,orientation:y,edge:T,computeNext:K,onResize:h,onResizeStart:M,onResizeEnd:g,snapPoints:D,snapTolerance:U,collapseThreshold:z,collapsible:A,target:N,requestCollapse:V,requestToggle:q}=O(),b=i.useRef(null);i.useEffect(()=>()=>{try{b.current?.()}catch{}b.current=null},[]);const B=y,X=`Resize ${N.charAt(0).toUpperCase()+N.slice(1)} pane`;return i.createElement("div",{...W,ref:F,className:Y("rt-ShellResizer",c),"data-orientation":y,"data-edge":T,role:"slider","aria-label":X,"aria-orientation":B,"aria-valuemin":x,"aria-valuemax":H,"aria-valuenow":C,tabIndex:0,onPointerDown:e=>{if(!R.current)return;e.preventDefault();const n=R.current,l=e.currentTarget,S=e.pointerId;try{b.current?.()}catch{}n.setAttribute("data-resizing","");try{l.setPointerCapture(S)}catch{}const w=y==="vertical"?e.clientX:e.clientY,p=parseFloat(getComputedStyle(n).getPropertyValue(u)||`${C}`),m=s=>Math.min(Math.max(s,x),H),r=document.body,t=r.style.cursor,v=r.style.userSelect;r.style.cursor=y==="vertical"?"col-resize":"row-resize",r.style.userSelect="none",M?.(p);const o=s=>{const f=y==="vertical"?s.clientX:s.clientY,L=m(K(f,w,p));n.style.setProperty(u,`${L}px`),l.setAttribute("aria-valuenow",String(L)),h?.(L)},E=()=>{try{l.releasePointerCapture(S)}catch{}window.removeEventListener("pointermove",o),document.removeEventListener("pointermove",o),window.removeEventListener("mousemove",o),document.removeEventListener("mousemove",o),l.removeEventListener("pointermove",o),window.removeEventListener("pointerup",a),document.removeEventListener("pointerup",a),window.removeEventListener("mouseup",a),document.removeEventListener("mouseup",a),window.removeEventListener("pointercancel",a),document.removeEventListener("pointercancel",a),window.removeEventListener("keydown",k),l.removeEventListener("lostpointercapture",a),n.removeAttribute("data-resizing"),r.style.cursor=t,r.style.userSelect=v,b.current=null},a=()=>{const s=parseFloat(getComputedStyle(n).getPropertyValue(u)||`${C}`);let f=s;if(D&&D.length){const L=D.reduce(($,I)=>Math.abs(I-s)<Math.abs($-s)?I:$,D[0]);Math.abs(L-s)<=(U??8)&&(f=L,n.style.setProperty(u,`${f}px`),l.setAttribute("aria-valuenow",String(f)),h?.(f))}A&&typeof z=="number"&&s<=z&&V?.(),g?.(f),E()},k=s=>{s.key==="Escape"&&(n.style.setProperty(u,`${p}px`),l.setAttribute("aria-valuenow",String(p)),g?.(p),E())};window.addEventListener("pointermove",o),document.addEventListener("pointermove",o),window.addEventListener("mousemove",o),document.addEventListener("mousemove",o),l.addEventListener("pointermove",o),window.addEventListener("pointerup",a),document.addEventListener("pointerup",a),window.addEventListener("mouseup",a),document.addEventListener("mouseup",a),window.addEventListener("pointercancel",a),document.addEventListener("pointercancel",a),window.addEventListener("keydown",k),l.addEventListener("lostpointercapture",a),b.current=E},onDoubleClick:()=>{A&&q?.()},onKeyDown:e=>{if(!R.current)return;const n=R.current,l=getComputedStyle(n).getPropertyValue(u),S=Number.parseFloat(l.trim()),w=Number.isFinite(S)?S:C,p=t=>Math.min(Math.max(t,x),H),m=e.shiftKey?32:8;let r=0;if(y==="vertical"){const t=typeof document<"u"?document.dir:void 0,v=getComputedStyle(n).direction,o=!!(n.closest&&n.closest('[dir="rtl"]')),E=t==="rtl"||v==="rtl"||o;e.key==="ArrowRight"?r=E?-m:m:e.key==="ArrowLeft"&&(r=E?m:-m)}else e.key==="ArrowDown"?r=m:e.key==="ArrowUp"&&(r=-m);if(e.key==="Home"){e.preventDefault(),M?.(w);const t=p(x);n.style.setProperty(u,`${t}px`),e.currentTarget.setAttribute("aria-valuenow",String(t)),h?.(t),g?.(t);return}if(e.key==="End"){e.preventDefault(),M?.(w);const t=p(H);n.style.setProperty(u,`${t}px`),e.currentTarget.setAttribute("aria-valuenow",String(t)),h?.(t),g?.(t);return}if(r!==0){e.preventDefault(),M?.(w);const t=y==="vertical"&&T==="start"?-r:r,v=p(w+t);n.style.setProperty(u,`${v}px`),e.currentTarget.setAttribute("aria-valuenow",String(v)),h?.(v),g?.(v)}}},d)});P.displayName="Shell.Handle";const j=i.forwardRef((c,d)=>i.createElement(P,{...c,ref:d}));j.displayName="Shell.Panel.Handle";const G=i.forwardRef((c,d)=>i.createElement(P,{...c,ref:d}));G.displayName="Shell.Sidebar.Handle";const J=i.forwardRef((c,d)=>i.createElement(P,{...c,ref:d}));J.displayName="Shell.Inspector.Handle";const Q=i.forwardRef((c,d)=>i.createElement(P,{...c,ref:d}));Q.displayName="Shell.Bottom.Handle";export{Q as BottomHandle,J as InspectorHandle,P as PaneHandle,j as PanelHandle,G as SidebarHandle};
2
2
  //# sourceMappingURL=shell-handles.js.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../src/components/_internal/shell-handles.tsx"],
4
- "sourcesContent": ["import * as React from 'react';\nimport classNames from 'classnames';\nimport { usePaneResize } from './shell-resize.js';\n\nexport const PaneHandle = React.forwardRef<HTMLDivElement, React.ComponentPropsWithoutRef<'div'>>(({ className, children, ...props }, ref) => {\n const {\n containerRef,\n cssVarName,\n minSize,\n maxSize,\n defaultSize,\n orientation,\n edge,\n computeNext,\n onResize,\n onResizeStart,\n onResizeEnd,\n snapPoints,\n snapTolerance,\n collapseThreshold,\n collapsible,\n target: _target,\n requestCollapse,\n requestToggle,\n } = usePaneResize();\n\n const activeCleanupRef = React.useRef<(() => void) | null>(null);\n React.useEffect(\n () => () => {\n try {\n activeCleanupRef.current?.();\n } catch {}\n activeCleanupRef.current = null;\n },\n [],\n );\n\n const ariaOrientation = orientation;\n\n return (\n <div\n {...props}\n ref={ref}\n className={classNames('rt-ShellResizer', className)}\n data-orientation={orientation}\n data-edge={edge}\n role=\"slider\"\n aria-orientation={ariaOrientation}\n aria-valuemin={minSize}\n aria-valuemax={maxSize}\n aria-valuenow={defaultSize}\n tabIndex={0}\n onPointerDown={(e) => {\n if (!containerRef.current) return;\n e.preventDefault();\n const container = containerRef.current;\n const handleEl = e.currentTarget as HTMLElement;\n const pointerId = e.pointerId;\n try {\n activeCleanupRef.current?.();\n } catch {}\n container.setAttribute('data-resizing', '');\n try {\n handleEl.setPointerCapture(pointerId);\n } catch {}\n const startClient = orientation === 'vertical' ? e.clientX : e.clientY;\n const startSize = parseFloat(getComputedStyle(container).getPropertyValue(cssVarName) || `${defaultSize}`);\n const clamp = (v: number) => Math.min(Math.max(v, minSize), maxSize);\n const body = document.body;\n const prevCursor = body.style.cursor;\n const prevUserSelect = body.style.userSelect;\n body.style.cursor = orientation === 'vertical' ? 'col-resize' : 'row-resize';\n body.style.userSelect = 'none';\n onResizeStart?.(startSize);\n const handleMove = (ev: PointerEvent) => {\n const client = orientation === 'vertical' ? ev.clientX : ev.clientY;\n const next = clamp(computeNext(client, startClient, startSize));\n container.style.setProperty(cssVarName, `${next}px`);\n handleEl.setAttribute('aria-valuenow', String(next));\n onResize?.(next);\n };\n const cleanup = () => {\n try {\n handleEl.releasePointerCapture(pointerId);\n } catch {}\n window.removeEventListener('pointermove', handleMove as any);\n document.removeEventListener('pointermove', handleMove as any);\n window.removeEventListener('mousemove', handleMove as any);\n document.removeEventListener('mousemove', handleMove as any);\n handleEl.removeEventListener('pointermove', handleMove as any);\n window.removeEventListener('pointerup', handleUp as any);\n document.removeEventListener('pointerup', handleUp as any);\n window.removeEventListener('mouseup', handleUp as any);\n document.removeEventListener('mouseup', handleUp as any);\n window.removeEventListener('pointercancel', handleUp as any);\n document.removeEventListener('pointercancel', handleUp as any);\n window.removeEventListener('keydown', handleKey as any);\n handleEl.removeEventListener('lostpointercapture', handleUp as any);\n container.removeAttribute('data-resizing');\n body.style.cursor = prevCursor;\n body.style.userSelect = prevUserSelect;\n activeCleanupRef.current = null;\n };\n const handleUp = () => {\n const finalSize = parseFloat(getComputedStyle(container).getPropertyValue(cssVarName) || `${defaultSize}`);\n let snapped = finalSize;\n if (snapPoints && snapPoints.length) {\n const nearest = snapPoints.reduce((acc, p) => (Math.abs(p - finalSize) < Math.abs(acc - finalSize) ? p : acc), snapPoints[0]);\n if (Math.abs(nearest - finalSize) <= (snapTolerance ?? 8)) {\n snapped = nearest;\n container.style.setProperty(cssVarName, `${snapped}px`);\n handleEl.setAttribute('aria-valuenow', String(snapped));\n onResize?.(snapped);\n }\n }\n if (collapsible && typeof collapseThreshold === 'number' && finalSize <= collapseThreshold) {\n requestCollapse?.();\n }\n onResizeEnd?.(snapped);\n cleanup();\n };\n const handleKey = (kev: KeyboardEvent) => {\n if (kev.key === 'Escape') {\n container.style.setProperty(cssVarName, `${startSize}px`);\n handleEl.setAttribute('aria-valuenow', String(startSize));\n onResizeEnd?.(startSize);\n cleanup();\n }\n };\n window.addEventListener('pointermove', handleMove as any);\n document.addEventListener('pointermove', handleMove as any);\n // Fallbacks for environments that don't fully support PointerEvent on window\n window.addEventListener('mousemove', handleMove as any);\n document.addEventListener('mousemove', handleMove as any);\n handleEl.addEventListener('pointermove', handleMove as any);\n window.addEventListener('pointerup', handleUp as any);\n document.addEventListener('pointerup', handleUp as any);\n window.addEventListener('mouseup', handleUp as any);\n document.addEventListener('mouseup', handleUp as any);\n window.addEventListener('pointercancel', handleUp as any);\n document.addEventListener('pointercancel', handleUp as any);\n window.addEventListener('keydown', handleKey as any);\n handleEl.addEventListener('lostpointercapture', handleUp as any);\n activeCleanupRef.current = cleanup;\n }}\n onDoubleClick={() => {\n if (collapsible) requestToggle?.();\n }}\n onKeyDown={(e) => {\n if (!containerRef.current) return;\n const container = containerRef.current;\n const rawCurrent = getComputedStyle(container).getPropertyValue(cssVarName);\n const parsedCurrent = Number.parseFloat(rawCurrent.trim());\n const current = Number.isFinite(parsedCurrent) ? parsedCurrent : defaultSize;\n const clamp = (v: number) => Math.min(Math.max(v, minSize), maxSize);\n const step = e.shiftKey ? 32 : 8;\n let delta = 0;\n if (orientation === 'vertical') {\n const docDir = typeof document !== 'undefined' ? document.dir : undefined;\n const cssDir = getComputedStyle(container).direction;\n const hasRtlAncestor = !!(container.closest && container.closest('[dir=\"rtl\"]'));\n const isRtl = docDir === 'rtl' || cssDir === 'rtl' || hasRtlAncestor;\n if (e.key === 'ArrowRight')\n delta = isRtl ? -step : step; // inline-end\n else if (e.key === 'ArrowLeft') delta = isRtl ? step : -step; // inline-start\n } else {\n if (e.key === 'ArrowDown') delta = step;\n else if (e.key === 'ArrowUp') delta = -step;\n }\n if (e.key === 'Home') {\n e.preventDefault();\n onResizeStart?.(current);\n const next = clamp(minSize);\n container.style.setProperty(cssVarName, `${next}px`);\n (e.currentTarget as HTMLElement).setAttribute('aria-valuenow', String(next));\n onResize?.(next);\n onResizeEnd?.(next);\n return;\n }\n if (e.key === 'End') {\n e.preventDefault();\n onResizeStart?.(current);\n const next = clamp(maxSize);\n container.style.setProperty(cssVarName, `${next}px`);\n (e.currentTarget as HTMLElement).setAttribute('aria-valuenow', String(next));\n onResize?.(next);\n onResizeEnd?.(next);\n return;\n }\n if (delta !== 0) {\n e.preventDefault();\n onResizeStart?.(current);\n const signedDelta = orientation === 'vertical' ? (edge === 'start' ? -delta : delta) : delta;\n const next = clamp(current + signedDelta);\n container.style.setProperty(cssVarName, `${next}px`);\n (e.currentTarget as HTMLElement).setAttribute('aria-valuenow', String(next));\n onResize?.(next);\n onResizeEnd?.(next);\n }\n }}\n >\n {children}\n </div>\n );\n});\nPaneHandle.displayName = 'Shell.Handle';\n\nexport const PanelHandle = React.forwardRef<HTMLDivElement, React.ComponentPropsWithoutRef<'div'>>((props, ref) => <PaneHandle {...props} ref={ref} />);\nPanelHandle.displayName = 'Shell.Panel.Handle';\n\nexport const SidebarHandle = React.forwardRef<HTMLDivElement, React.ComponentPropsWithoutRef<'div'>>((props, ref) => <PaneHandle {...props} ref={ref} />);\nSidebarHandle.displayName = 'Shell.Sidebar.Handle';\n\nexport const InspectorHandle = React.forwardRef<HTMLDivElement, React.ComponentPropsWithoutRef<'div'>>((props, ref) => <PaneHandle {...props} ref={ref} />);\nInspectorHandle.displayName = 'Shell.Inspector.Handle';\n\nexport const BottomHandle = React.forwardRef<HTMLDivElement, React.ComponentPropsWithoutRef<'div'>>((props, ref) => <PaneHandle {...props} ref={ref} />);\nBottomHandle.displayName = 'Shell.Bottom.Handle';\n"],
5
- "mappings": "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",
6
- "names": ["React", "classNames", "usePaneResize", "PaneHandle", "className", "children", "props", "ref", "containerRef", "cssVarName", "minSize", "maxSize", "defaultSize", "orientation", "edge", "computeNext", "onResize", "onResizeStart", "onResizeEnd", "snapPoints", "snapTolerance", "collapseThreshold", "collapsible", "_target", "requestCollapse", "requestToggle", "activeCleanupRef", "ariaOrientation", "container", "handleEl", "pointerId", "startClient", "startSize", "clamp", "v", "body", "prevCursor", "prevUserSelect", "handleMove", "ev", "client", "next", "cleanup", "handleUp", "handleKey", "finalSize", "snapped", "nearest", "acc", "p", "kev", "rawCurrent", "parsedCurrent", "current", "step", "delta", "docDir", "cssDir", "hasRtlAncestor", "isRtl", "signedDelta", "PanelHandle", "SidebarHandle", "InspectorHandle", "BottomHandle"]
4
+ "sourcesContent": ["import * as React from 'react';\nimport classNames from 'classnames';\nimport { usePaneResize } from './shell-resize.js';\n\nexport const PaneHandle = React.forwardRef<HTMLDivElement, React.ComponentPropsWithoutRef<'div'>>(({ className, children, ...props }, ref) => {\n const {\n containerRef,\n cssVarName,\n minSize,\n maxSize,\n defaultSize,\n orientation,\n edge,\n computeNext,\n onResize,\n onResizeStart,\n onResizeEnd,\n snapPoints,\n snapTolerance,\n collapseThreshold,\n collapsible,\n target,\n requestCollapse,\n requestToggle,\n } = usePaneResize();\n\n const activeCleanupRef = React.useRef<(() => void) | null>(null);\n React.useEffect(\n () => () => {\n try {\n activeCleanupRef.current?.();\n } catch {}\n activeCleanupRef.current = null;\n },\n [],\n );\n\n const ariaOrientation = orientation;\n\n // Generate accessible label from target\n const targetLabel = target.charAt(0).toUpperCase() + target.slice(1);\n const ariaLabel = `Resize ${targetLabel} pane`;\n\n return (\n <div\n {...props}\n ref={ref}\n className={classNames('rt-ShellResizer', className)}\n data-orientation={orientation}\n data-edge={edge}\n role=\"slider\"\n aria-label={ariaLabel}\n aria-orientation={ariaOrientation}\n aria-valuemin={minSize}\n aria-valuemax={maxSize}\n aria-valuenow={defaultSize}\n tabIndex={0}\n onPointerDown={(e) => {\n if (!containerRef.current) return;\n e.preventDefault();\n const container = containerRef.current;\n const handleEl = e.currentTarget as HTMLElement;\n const pointerId = e.pointerId;\n try {\n activeCleanupRef.current?.();\n } catch {}\n container.setAttribute('data-resizing', '');\n try {\n handleEl.setPointerCapture(pointerId);\n } catch {}\n const startClient = orientation === 'vertical' ? e.clientX : e.clientY;\n const startSize = parseFloat(getComputedStyle(container).getPropertyValue(cssVarName) || `${defaultSize}`);\n const clamp = (v: number) => Math.min(Math.max(v, minSize), maxSize);\n const body = document.body;\n const prevCursor = body.style.cursor;\n const prevUserSelect = body.style.userSelect;\n body.style.cursor = orientation === 'vertical' ? 'col-resize' : 'row-resize';\n body.style.userSelect = 'none';\n onResizeStart?.(startSize);\n const handleMove = (ev: PointerEvent) => {\n const client = orientation === 'vertical' ? ev.clientX : ev.clientY;\n const next = clamp(computeNext(client, startClient, startSize));\n container.style.setProperty(cssVarName, `${next}px`);\n handleEl.setAttribute('aria-valuenow', String(next));\n onResize?.(next);\n };\n const cleanup = () => {\n try {\n handleEl.releasePointerCapture(pointerId);\n } catch {}\n window.removeEventListener('pointermove', handleMove as any);\n document.removeEventListener('pointermove', handleMove as any);\n window.removeEventListener('mousemove', handleMove as any);\n document.removeEventListener('mousemove', handleMove as any);\n handleEl.removeEventListener('pointermove', handleMove as any);\n window.removeEventListener('pointerup', handleUp as any);\n document.removeEventListener('pointerup', handleUp as any);\n window.removeEventListener('mouseup', handleUp as any);\n document.removeEventListener('mouseup', handleUp as any);\n window.removeEventListener('pointercancel', handleUp as any);\n document.removeEventListener('pointercancel', handleUp as any);\n window.removeEventListener('keydown', handleKey as any);\n handleEl.removeEventListener('lostpointercapture', handleUp as any);\n container.removeAttribute('data-resizing');\n body.style.cursor = prevCursor;\n body.style.userSelect = prevUserSelect;\n activeCleanupRef.current = null;\n };\n const handleUp = () => {\n const finalSize = parseFloat(getComputedStyle(container).getPropertyValue(cssVarName) || `${defaultSize}`);\n let snapped = finalSize;\n if (snapPoints && snapPoints.length) {\n const nearest = snapPoints.reduce((acc, p) => (Math.abs(p - finalSize) < Math.abs(acc - finalSize) ? p : acc), snapPoints[0]);\n if (Math.abs(nearest - finalSize) <= (snapTolerance ?? 8)) {\n snapped = nearest;\n container.style.setProperty(cssVarName, `${snapped}px`);\n handleEl.setAttribute('aria-valuenow', String(snapped));\n onResize?.(snapped);\n }\n }\n if (collapsible && typeof collapseThreshold === 'number' && finalSize <= collapseThreshold) {\n requestCollapse?.();\n }\n onResizeEnd?.(snapped);\n cleanup();\n };\n const handleKey = (kev: KeyboardEvent) => {\n if (kev.key === 'Escape') {\n container.style.setProperty(cssVarName, `${startSize}px`);\n handleEl.setAttribute('aria-valuenow', String(startSize));\n onResizeEnd?.(startSize);\n cleanup();\n }\n };\n window.addEventListener('pointermove', handleMove as any);\n document.addEventListener('pointermove', handleMove as any);\n // Fallbacks for environments that don't fully support PointerEvent on window\n window.addEventListener('mousemove', handleMove as any);\n document.addEventListener('mousemove', handleMove as any);\n handleEl.addEventListener('pointermove', handleMove as any);\n window.addEventListener('pointerup', handleUp as any);\n document.addEventListener('pointerup', handleUp as any);\n window.addEventListener('mouseup', handleUp as any);\n document.addEventListener('mouseup', handleUp as any);\n window.addEventListener('pointercancel', handleUp as any);\n document.addEventListener('pointercancel', handleUp as any);\n window.addEventListener('keydown', handleKey as any);\n handleEl.addEventListener('lostpointercapture', handleUp as any);\n activeCleanupRef.current = cleanup;\n }}\n onDoubleClick={() => {\n if (collapsible) requestToggle?.();\n }}\n onKeyDown={(e) => {\n if (!containerRef.current) return;\n const container = containerRef.current;\n const rawCurrent = getComputedStyle(container).getPropertyValue(cssVarName);\n const parsedCurrent = Number.parseFloat(rawCurrent.trim());\n const current = Number.isFinite(parsedCurrent) ? parsedCurrent : defaultSize;\n const clamp = (v: number) => Math.min(Math.max(v, minSize), maxSize);\n const step = e.shiftKey ? 32 : 8;\n let delta = 0;\n if (orientation === 'vertical') {\n const docDir = typeof document !== 'undefined' ? document.dir : undefined;\n const cssDir = getComputedStyle(container).direction;\n const hasRtlAncestor = !!(container.closest && container.closest('[dir=\"rtl\"]'));\n const isRtl = docDir === 'rtl' || cssDir === 'rtl' || hasRtlAncestor;\n if (e.key === 'ArrowRight')\n delta = isRtl ? -step : step; // inline-end\n else if (e.key === 'ArrowLeft') delta = isRtl ? step : -step; // inline-start\n } else {\n if (e.key === 'ArrowDown') delta = step;\n else if (e.key === 'ArrowUp') delta = -step;\n }\n if (e.key === 'Home') {\n e.preventDefault();\n onResizeStart?.(current);\n const next = clamp(minSize);\n container.style.setProperty(cssVarName, `${next}px`);\n (e.currentTarget as HTMLElement).setAttribute('aria-valuenow', String(next));\n onResize?.(next);\n onResizeEnd?.(next);\n return;\n }\n if (e.key === 'End') {\n e.preventDefault();\n onResizeStart?.(current);\n const next = clamp(maxSize);\n container.style.setProperty(cssVarName, `${next}px`);\n (e.currentTarget as HTMLElement).setAttribute('aria-valuenow', String(next));\n onResize?.(next);\n onResizeEnd?.(next);\n return;\n }\n if (delta !== 0) {\n e.preventDefault();\n onResizeStart?.(current);\n const signedDelta = orientation === 'vertical' ? (edge === 'start' ? -delta : delta) : delta;\n const next = clamp(current + signedDelta);\n container.style.setProperty(cssVarName, `${next}px`);\n (e.currentTarget as HTMLElement).setAttribute('aria-valuenow', String(next));\n onResize?.(next);\n onResizeEnd?.(next);\n }\n }}\n >\n {children}\n </div>\n );\n});\nPaneHandle.displayName = 'Shell.Handle';\n\nexport const PanelHandle = React.forwardRef<HTMLDivElement, React.ComponentPropsWithoutRef<'div'>>((props, ref) => <PaneHandle {...props} ref={ref} />);\nPanelHandle.displayName = 'Shell.Panel.Handle';\n\nexport const SidebarHandle = React.forwardRef<HTMLDivElement, React.ComponentPropsWithoutRef<'div'>>((props, ref) => <PaneHandle {...props} ref={ref} />);\nSidebarHandle.displayName = 'Shell.Sidebar.Handle';\n\nexport const InspectorHandle = React.forwardRef<HTMLDivElement, React.ComponentPropsWithoutRef<'div'>>((props, ref) => <PaneHandle {...props} ref={ref} />);\nInspectorHandle.displayName = 'Shell.Inspector.Handle';\n\nexport const BottomHandle = React.forwardRef<HTMLDivElement, React.ComponentPropsWithoutRef<'div'>>((props, ref) => <PaneHandle {...props} ref={ref} />);\nBottomHandle.displayName = 'Shell.Bottom.Handle';\n"],
5
+ "mappings": "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",
6
+ "names": ["React", "classNames", "usePaneResize", "PaneHandle", "className", "children", "props", "ref", "containerRef", "cssVarName", "minSize", "maxSize", "defaultSize", "orientation", "edge", "computeNext", "onResize", "onResizeStart", "onResizeEnd", "snapPoints", "snapTolerance", "collapseThreshold", "collapsible", "target", "requestCollapse", "requestToggle", "activeCleanupRef", "ariaOrientation", "ariaLabel", "container", "handleEl", "pointerId", "startClient", "startSize", "clamp", "v", "body", "prevCursor", "prevUserSelect", "handleMove", "ev", "client", "next", "cleanup", "handleUp", "handleKey", "finalSize", "snapped", "nearest", "acc", "p", "kev", "rawCurrent", "parsedCurrent", "current", "step", "delta", "docDir", "cssDir", "hasRtlAncestor", "isRtl", "signedDelta", "PanelHandle", "SidebarHandle", "InspectorHandle", "BottomHandle"]
7
7
  }
@@ -1 +1 @@
1
- {"version":3,"file":"shell-inspector.d.ts","sourceRoot":"","sources":["../../../../src/components/_internal/shell-inspector.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAO/B,OAAO,EAAE,eAAe,EAAc,MAAM,oBAAoB,CAAC;AAEjE,OAAO,KAAK,EAAE,UAAU,EAAyD,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAG1H,KAAK,uBAAuB,GAAG;IAAE,MAAM,EAAE,MAAM,GAAG,QAAQ,GAAG,YAAY,CAAA;CAAE,CAAC;AAC5E,KAAK,wBAAwB,GAAG;IAAE,IAAI,EAAE,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC,CAAC;IAAC,YAAY,CAAC,EAAE,CAAC,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,uBAAuB,KAAK,IAAI,CAAC;IAAC,WAAW,CAAC,EAAE,KAAK,CAAA;CAAE,CAAC;AACrL,KAAK,0BAA0B,GAAG;IAAE,WAAW,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC,CAAC;IAAC,YAAY,CAAC,EAAE,CAAC,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,uBAAuB,KAAK,IAAI,CAAC;IAAC,IAAI,CAAC,EAAE,KAAK,CAAA;CAAE,CAAC;AACxL,KAAK,uBAAuB,GAAG;IAAE,MAAM,EAAE,MAAM,GAAG,QAAQ,GAAG,YAAY,CAAA;CAAE,CAAC;AAC5E,KAAK,4BAA4B,GAAG;IAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CAAC;IAAC,WAAW,CAAC,EAAE,KAAK,CAAA;CAAE,CAAC;AACnF,KAAK,8BAA8B,GAAG;IAAE,WAAW,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,KAAK,CAAA;CAAE,CAAC;AACtF,KAAK,oBAAoB,GAAG,aAAa,GACvC,CAAC,wBAAwB,GAAG,0BAA0B,CAAC,GACvD,CAAC,4BAA4B,GAAG,8BAA8B,CAAC,GAAG;IAChE,YAAY,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,uBAAuB,KAAK,IAAI,CAAC;IACrE,UAAU,CAAC,EAAE,UAAU,GAAG,UAAU,CAAC;IACrC,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB,CAAC;AAEJ,KAAK,kBAAkB,GAAG,KAAK,CAAC,yBAAyB,CAAC,oBAAoB,GAAG,KAAK,CAAC,aAAa,CAAC,cAAc,CAAC,CAAC,GAAG;IAAE,MAAM,EAAE,OAAO,eAAe,CAAA;CAAE,CAAC;AAgB3J,eAAO,MAAM,SAAS,EA0VhB,kBAAkB,CAAC"}
1
+ {"version":3,"file":"shell-inspector.d.ts","sourceRoot":"","sources":["../../../../src/components/_internal/shell-inspector.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAO/B,OAAO,EAAE,eAAe,EAAc,MAAM,oBAAoB,CAAC;AAEjE,OAAO,KAAK,EAAE,UAAU,EAAyD,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAI1H,KAAK,uBAAuB,GAAG;IAAE,MAAM,EAAE,MAAM,GAAG,QAAQ,GAAG,YAAY,CAAA;CAAE,CAAC;AAC5E,KAAK,wBAAwB,GAAG;IAAE,IAAI,EAAE,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC,CAAC;IAAC,YAAY,CAAC,EAAE,CAAC,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,uBAAuB,KAAK,IAAI,CAAC;IAAC,WAAW,CAAC,EAAE,KAAK,CAAA;CAAE,CAAC;AACrL,KAAK,0BAA0B,GAAG;IAAE,WAAW,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC,CAAC;IAAC,YAAY,CAAC,EAAE,CAAC,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,uBAAuB,KAAK,IAAI,CAAC;IAAC,IAAI,CAAC,EAAE,KAAK,CAAA;CAAE,CAAC;AACxL,KAAK,uBAAuB,GAAG;IAAE,MAAM,EAAE,MAAM,GAAG,QAAQ,GAAG,YAAY,CAAA;CAAE,CAAC;AAC5E,KAAK,4BAA4B,GAAG;IAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CAAC;IAAC,WAAW,CAAC,EAAE,KAAK,CAAA;CAAE,CAAC;AACnF,KAAK,8BAA8B,GAAG;IAAE,WAAW,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,KAAK,CAAA;CAAE,CAAC;AACtF,KAAK,oBAAoB,GAAG,aAAa,GACvC,CAAC,wBAAwB,GAAG,0BAA0B,CAAC,GACvD,CAAC,4BAA4B,GAAG,8BAA8B,CAAC,GAAG;IAChE,YAAY,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,uBAAuB,KAAK,IAAI,CAAC;IACrE,UAAU,CAAC,EAAE,UAAU,GAAG,UAAU,CAAC;IACrC,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB,CAAC;AAEJ,KAAK,kBAAkB,GAAG,KAAK,CAAC,yBAAyB,CAAC,oBAAoB,GAAG,KAAK,CAAC,aAAa,CAAC,cAAc,CAAC,CAAC,GAAG;IAAE,MAAM,EAAE,OAAO,eAAe,CAAA;CAAE,CAAC;AAgB3J,eAAO,MAAM,SAAS,EA6VhB,kBAAkB,CAAC"}
@@ -1,2 +1,2 @@
1
- import*as n from"react";import ce from"classnames";import*as O from"../sheet.js";import{VisuallyHidden as ue}from"../visually-hidden.js";import{useShell as fe}from"../shell.context.js";import{useResponsivePresentation as me,useResponsiveInitialState as ye}from"../shell.hooks.js";import{PaneResizeContext as he}from"./shell-resize.js";import{InspectorHandle as w,PaneHandle as Pe}from"./shell-handles.js";import"../shell.types.js";import{extractPaneDomProps as be,mapResponsiveBooleanToPaneMode as q}from"./shell-prop-helpers.js";const ze=["className","children","defaultOpen","open","onOpenChange","size","defaultSize","onSizeChange","sizeUpdate","sizeUpdateMs","style"],K=n.forwardRef((k,c)=>{const{className:Y,presentation:G={initial:"overlay",lg:"fixed"},defaultOpen:f,open:i,onOpenChange:u,expandedSize:z=320,minSize:p=200,maxSize:d=500,resizable:S=!1,collapsible:J=!0,onExpand:T,onCollapse:D,onResize:I,onResizeStart:Q,onResizeEnd:X,snapPoints:Z,snapTolerance:ee,collapseThreshold:ne,paneId:M,persistence:R,children:te,style:oe,onSizeChange:V,sizeUpdate:B,sizeUpdateMs:H=50,size:F,defaultSize:U}=k,re=be(k,ze),r=fe(),g=me(G),m=g==="overlay",se=g==="stacked",l=n.useRef(null),ie=n.useCallback(e=>{l.current=e,typeof c=="function"?c(e):c&&(c.current=e)},[c]),_=n.Children.toArray(te),$=_.filter(e=>n.isValidElement(e)&&e.type===w),L=_.filter(e=>!(n.isValidElement(e)&&e.type===w)),ae=n.useMemo(()=>q(i),[i]),le=n.useMemo(()=>q(f),[f]),pe=typeof i=="object"&&i!==null;ye({controlledValue:ae,defaultValue:le,currentValue:r.inspectorMode,setValue:r.setInspectorMode,breakpointReady:r.currentBreakpointReady,controlledIsResponsive:pe,onResponsiveChange:e=>u?.(e==="expanded",{reason:"responsive"}),onInit:e=>{typeof i>"u"&&u?.(e==="expanded",{reason:"init"})}});const y=n.useMemo(()=>{const e=V,t=B,s=H??50;if(!e)return()=>{};if(t==="debounce"){let o=null;return(a,N)=>{o&&clearTimeout(o),o=setTimeout(()=>{e(a,N)},s)}}if(t==="throttle"){let o=0;return(a,N)=>{const j=Date.now();j-o>=s&&(o=j,e(a,N))}}return(o,a)=>e(o,a)},[V,B,H]),h=n.useRef(null);n.useEffect(()=>{const e=typeof i<"u";if(h.current===null){h.current=e;return}h.current!==e&&(console.warn("Shell.Inspector: Switching between controlled and uncontrolled `open` is not supported."),h.current=e)},[i]);const A=n.useRef(!1),x=n.useRef(null);n.useEffect(()=>{!A.current&&typeof i>"u"&&f&&r.inspectorMode==="expanded"&&(u?.(!0,{reason:"init"}),A.current=!0),typeof i>"u"&&(x.current!==null&&x.current!==r.inspectorMode&&u?.(r.inspectorMode==="expanded",{reason:"toggle"}),x.current=r.inspectorMode)},[r.inspectorMode,i,f,u]);const P=n.useRef(null),W=n.useRef(!1);n.useEffect(()=>{const e=r.inspectorMode;if(!r.currentBreakpointReady){P.current=e;return}if(!W.current){W.current=!0,P.current=e;return}const t=P.current;t!==null&&t!==e&&(e==="expanded"?T?.():e==="collapsed"&&D?.(),P.current=e)},[r.inspectorMode,r.currentBreakpointReady,T,D]);const C=r.inspectorMode==="expanded",b=n.useMemo(()=>{if(!M||R)return R;const e=`kookie-ui:shell:inspector:${M}`;return{load:()=>{if(!(typeof window>"u"))try{const s=window.localStorage.getItem(e);return s?Number(s):void 0}catch{return}},save:s=>{if(!(typeof window>"u"))try{window.localStorage.setItem(e,String(s))}catch{}}}},[M,R]);n.useEffect(()=>{let e=!0;if(!S||!b?.load||m)return;const t=b.load(),s=o=>{!e||typeof o!="number"||!l.current||(l.current.style.setProperty("--inspector-size",`${o}px`),I?.(o))};return t instanceof Promise?t.then(s).catch(o=>{}):s(t),()=>{e=!1}},[S,b,I,m]);const de=S&&!m&&C?n.createElement(he.Provider,{value:{containerRef:l,cssVarName:"--inspector-size",minSize:p,maxSize:d,defaultSize:z,orientation:"vertical",edge:"start",computeNext:(e,t,s)=>{const o=getComputedStyle(l.current).direction==="rtl",a=e-t;return s+(o?a:-a)},onResize:I,onResizeStart:Q,onResizeEnd:e=>{X?.(e),y(e,{reason:"resize"}),b?.save?.(e)},target:"inspector",collapsible:J,snapPoints:Z,snapTolerance:ee??8,collapseThreshold:ne,requestCollapse:()=>r.setInspectorMode("collapsed"),requestToggle:()=>r.togglePane("inspector")}},$.length>0?$.map((e,t)=>n.cloneElement(e,{key:e.key??t})):n.createElement(Pe,null)):null,v=n.useCallback(e=>{if(e==null)return;if(typeof e=="number"&&Number.isFinite(e))return e;const t=String(e).trim();if(!t)return;if(t.endsWith("px"))return Number.parseFloat(t);if(t.endsWith("rem")){const o=Number.parseFloat(getComputedStyle(document.documentElement).fontSize||"16")||16;return Number.parseFloat(t)*o}if(t.endsWith("%")){const o=Number.parseFloat(t),a=document.documentElement.clientWidth||window.innerWidth||0;return o/100*a}const s=Number.parseFloat(t);return Number.isFinite(s)?s:void 0},[]);n.useEffect(()=>{if(l.current&&typeof F>"u"&&typeof U<"u"){const e=v(U);if(typeof e=="number"&&Number.isFinite(e)){const o=Math.min((typeof d=="number"?d:void 0)??e,Math.max((typeof p=="number"?p:void 0)??e,e));l.current.style.setProperty("--inspector-size",`${o}px`),y(o,{reason:"init"})}}},[]);const E=F;if(n.useEffect(()=>{if(!l.current||typeof E>"u")return;const e=v(E);if(typeof e=="number"&&Number.isFinite(e)){const o=Math.min((typeof d=="number"?d:void 0)??e,Math.max((typeof p=="number"?p:void 0)??e,e));l.current.style.setProperty("--inspector-size",`${o}px`),y(o,{reason:"controlled"})}},[E,p,d,v,y]),m){const e=r.inspectorMode==="expanded";return n.createElement(O.Root,{open:e,onOpenChange:t=>r.setInspectorMode(t?"expanded":"collapsed")},n.createElement(O.Content,{side:"end",style:{padding:0},width:{initial:`${z}px`}},n.createElement(ue,null,n.createElement(O.Title,null,"Inspector")),L))}return n.createElement("div",{...re,ref:ie,className:ce("rt-ShellInspector",Y),"data-mode":r.inspectorMode,"data-peek":r.peekTarget==="inspector"||void 0,"data-presentation":r.currentBreakpointReady?g:void 0,"data-open":r.currentBreakpointReady&&se&&C||void 0,style:{...oe,"--inspector-size":`${z}px`,"--inspector-min-size":`${p}px`,"--inspector-max-size":`${d}px`}},n.createElement("div",{className:"rt-ShellInspectorContent","data-visible":C||void 0},L),de)});K.displayName="Shell.Inspector",K.Handle=w;export{K as Inspector};
1
+ import*as n from"react";import me from"classnames";import*as w from"../sheet.js";import{VisuallyHidden as ye}from"../visually-hidden.js";import{useShell as he}from"../shell.context.js";import{useResponsivePresentation as Pe,useResponsiveInitialState as ze}from"../shell.hooks.js";import{PaneResizeContext as Re}from"./shell-resize.js";import{InspectorHandle as D,PaneHandle as Ie}from"./shell-handles.js";import"../shell.types.js";import{extractPaneDomProps as Me,mapResponsiveBooleanToPaneMode as G}from"./shell-prop-helpers.js";import{normalizeToPx as Se}from"../../helpers/normalize-to-px.js";const be=["className","children","defaultOpen","open","onOpenChange","size","defaultSize","onSizeChange","sizeUpdate","sizeUpdateMs","style"],J=n.forwardRef((V,u)=>{const{className:Q,presentation:W={initial:"overlay",lg:"fixed"},defaultOpen:m,open:i,onOpenChange:f,expandedSize:I=320,minSize:c=200,maxSize:p=500,resizable:M=!1,collapsible:X=!0,onExpand:B,onCollapse:H,onResize:S,onResizeStart:Z,onResizeEnd:ee,snapPoints:ne,snapTolerance:te,collapseThreshold:oe,paneId:b,persistence:x,children:re,style:se,onSizeChange:C,sizeUpdate:g,sizeUpdateMs:v=50,size:U,defaultSize:_}=V,ie=Me(V,be),t=he(),E=Pe(W),y=E==="overlay",ae=E==="stacked",a=n.useRef(null),le=n.useCallback(e=>{a.current=e,typeof u=="function"?u(e):u&&(u.current=e)},[u]),$=n.Children.toArray(re),L=$.filter(e=>n.isValidElement(e)&&e.type===D),A=$.filter(e=>!(n.isValidElement(e)&&e.type===D)),ce=n.useMemo(()=>G(i),[i]),pe=n.useMemo(()=>G(m),[m]),de=typeof i=="object"&&i!==null;ze({controlledValue:ce,defaultValue:pe,currentValue:t.inspectorMode,setValue:t.setInspectorMode,breakpointReady:t.currentBreakpointReady,controlledIsResponsive:de,onResponsiveChange:e=>f?.(e==="expanded",{reason:"responsive"}),onInit:e=>{typeof i>"u"&&f?.(e==="expanded",{reason:"init"})}});const d=n.useRef(null);n.useEffect(()=>()=>{d.current&&(clearTimeout(d.current),d.current=null)},[C,g,v]);const h=n.useMemo(()=>{const e=C,r=g,s=v??50;if(!e)return()=>{};if(r==="debounce")return(o,l)=>{d.current&&clearTimeout(d.current),d.current=setTimeout(()=>{e(o,l),d.current=null},s)};if(r==="throttle"){let o=0;return(l,fe)=>{const Y=Date.now();Y-o>=s&&(o=Y,e(l,fe))}}return(o,l)=>e(o,l)},[C,g,v]),P=n.useRef(null);n.useEffect(()=>{const e=typeof i<"u";if(P.current===null){P.current=e;return}P.current!==e&&(console.warn("Shell.Inspector: Switching between controlled and uncontrolled `open` is not supported."),P.current=e)},[i]);const j=n.useRef(!1),O=n.useRef(null);n.useEffect(()=>{!j.current&&typeof i>"u"&&m&&t.inspectorMode==="expanded"&&(f?.(!0,{reason:"init"}),j.current=!0),typeof i>"u"&&(O.current!==null&&O.current!==t.inspectorMode&&f?.(t.inspectorMode==="expanded",{reason:"toggle"}),O.current=t.inspectorMode)},[t.inspectorMode,i,m,f]);const F=n.useRef(B),q=n.useRef(H);n.useLayoutEffect(()=>{F.current=B,q.current=H});const z=n.useRef(null),K=n.useRef(!1);n.useEffect(()=>{const e=t.inspectorMode;if(!t.currentBreakpointReady){z.current=e;return}if(!K.current){K.current=!0,z.current=e;return}const r=z.current;r!==null&&r!==e&&(e==="expanded"?F.current?.():e==="collapsed"&&q.current?.(),z.current=e)},[t.inspectorMode,t.currentBreakpointReady]);const T=t.inspectorMode==="expanded",R=n.useMemo(()=>{if(!b||x)return x;const e=`kookie-ui:shell:inspector:${b}`;return{load:()=>{if(!(typeof window>"u"))try{const s=window.localStorage.getItem(e);return s?Number(s):void 0}catch{return}},save:s=>{if(!(typeof window>"u"))try{window.localStorage.setItem(e,String(s))}catch{}}}},[b,x]);n.useEffect(()=>{let e=!0;if(!M||!R?.load||y)return;const r=R.load(),s=o=>{!e||typeof o!="number"||!a.current||(a.current.style.setProperty("--inspector-size",`${o}px`),S?.(o))};return r instanceof Promise?r.then(s).catch(o=>{}):s(r),()=>{e=!1}},[M,R,S,y]);const ue=M&&!y&&T?n.createElement(Re.Provider,{value:{containerRef:a,cssVarName:"--inspector-size",minSize:c,maxSize:p,defaultSize:I,orientation:"vertical",edge:"start",computeNext:(e,r,s)=>{const o=getComputedStyle(a.current).direction==="rtl",l=e-r;return s+(o?l:-l)},onResize:S,onResizeStart:Z,onResizeEnd:e=>{ee?.(e),h(e,{reason:"resize"}),R?.save?.(e)},target:"inspector",collapsible:X,snapPoints:ne,snapTolerance:te??8,collapseThreshold:oe,requestCollapse:()=>t.setInspectorMode("collapsed"),requestToggle:()=>t.togglePane("inspector")}},L.length>0?L.map((e,r)=>n.cloneElement(e,{key:e.key??r})):n.createElement(Ie,null)):null,N=n.useCallback(e=>Se(e,"horizontal"),[]);n.useEffect(()=>{if(a.current&&typeof U>"u"&&typeof _<"u"){const e=N(_);if(typeof e=="number"&&Number.isFinite(e)){const o=Math.min((typeof p=="number"?p:void 0)??e,Math.max((typeof c=="number"?c:void 0)??e,e));a.current.style.setProperty("--inspector-size",`${o}px`),h(o,{reason:"init"})}}},[]);const k=U;if(n.useEffect(()=>{if(!a.current||typeof k>"u")return;const e=N(k);if(typeof e=="number"&&Number.isFinite(e)){const o=Math.min((typeof p=="number"?p:void 0)??e,Math.max((typeof c=="number"?c:void 0)??e,e));a.current.style.setProperty("--inspector-size",`${o}px`),h(o,{reason:"controlled"})}},[k,c,p,N,h]),y){const e=t.inspectorMode==="expanded";return n.createElement(w.Root,{open:e,onOpenChange:r=>t.setInspectorMode(r?"expanded":"collapsed")},n.createElement(w.Content,{side:"end",style:{padding:0},width:{initial:`${I}px`}},n.createElement(ye,null,n.createElement(w.Title,null,"Inspector")),A))}return n.createElement("div",{...ie,ref:le,className:me("rt-ShellInspector",Q),"data-mode":t.inspectorMode,"data-peek":t.peekTarget==="inspector"||void 0,"data-presentation":t.currentBreakpointReady?E:void 0,"data-open":t.currentBreakpointReady&&ae&&T||void 0,style:{...se,"--inspector-size":`${I}px`,"--inspector-min-size":`${c}px`,"--inspector-max-size":`${p}px`}},n.createElement("div",{className:"rt-ShellInspectorContent","data-visible":T||void 0},A),ue)});J.displayName="Shell.Inspector",J.Handle=D;export{J as Inspector};
2
2
  //# sourceMappingURL=shell-inspector.js.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../src/components/_internal/shell-inspector.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 { InspectorHandle, PaneHandle } from './shell-handles.js';\nimport { _BREAKPOINTS } from '../shell.types.js';\nimport type { Breakpoint, PaneMode, PaneSizePersistence, ResponsivePresentation, PaneBaseProps } from '../shell.types.js';\nimport { extractPaneDomProps, mapResponsiveBooleanToPaneMode } from './shell-prop-helpers.js';\n\ntype InspectorOpenChangeMeta = { reason: 'init' | 'toggle' | 'responsive' };\ntype InspectorControlledProps = { open: boolean | Partial<Record<Breakpoint, boolean>>; onOpenChange?: (open: boolean, meta: InspectorOpenChangeMeta) => void; defaultOpen?: never };\ntype InspectorUncontrolledProps = { defaultOpen?: boolean | Partial<Record<Breakpoint, boolean>>; onOpenChange?: (open: boolean, meta: InspectorOpenChangeMeta) => void; open?: never };\ntype InspectorSizeChangeMeta = { reason: 'init' | 'resize' | 'controlled' };\ntype InspectorSizeControlledProps = { size: number | string; defaultSize?: never };\ntype InspectorSizeUncontrolledProps = { defaultSize?: number | string; size?: never };\ntype InspectorPublicProps = PaneBaseProps &\n (InspectorControlledProps | InspectorUncontrolledProps) &\n (InspectorSizeControlledProps | InspectorSizeUncontrolledProps) & {\n onSizeChange?: (size: number, meta: InspectorSizeChangeMeta) => void;\n sizeUpdate?: 'throttle' | 'debounce';\n sizeUpdateMs?: number;\n };\n\ntype InspectorComponent = React.ForwardRefExoticComponent<InspectorPublicProps & React.RefAttributes<HTMLDivElement>> & { Handle: typeof InspectorHandle };\n\nconst INSPECTOR_DOM_PROP_KEYS = [\n 'className',\n 'children',\n 'defaultOpen',\n 'open',\n 'onOpenChange',\n 'size',\n 'defaultSize',\n 'onSizeChange',\n 'sizeUpdate',\n 'sizeUpdateMs',\n 'style',\n] as const satisfies readonly (keyof InspectorPublicProps)[];\n\nexport const Inspector = React.forwardRef<HTMLDivElement, InspectorPublicProps>((initialProps, ref) => {\n const {\n className,\n presentation = { initial: 'overlay', lg: 'fixed' },\n defaultOpen,\n open,\n onOpenChange,\n expandedSize = 320,\n minSize = 200,\n maxSize = 500,\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 onSizeChange,\n sizeUpdate,\n sizeUpdateMs = 50,\n size,\n defaultSize,\n } = initialProps;\n const inspectorDomProps = extractPaneDomProps(initialProps, INSPECTOR_DOM_PROP_KEYS);\n const shell = useShell();\n const resolvedPresentation = useResponsivePresentation(presentation);\n const isOverlay = resolvedPresentation === 'overlay';\n const isStacked = resolvedPresentation === 'stacked';\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 === InspectorHandle);\n const contentChildren = childArray.filter((el: React.ReactElement) => !(React.isValidElement(el) && el.type === InspectorHandle));\n\n // Throttled/debounced emitter for onSizeChange\n const normalizedControlledOpen = React.useMemo(() => mapResponsiveBooleanToPaneMode(open), [open]);\n const normalizedDefaultOpen = React.useMemo(() => mapResponsiveBooleanToPaneMode(defaultOpen), [defaultOpen]);\n const openIsResponsive = typeof open === 'object' && open !== null;\n useResponsiveInitialState<PaneMode>({\n controlledValue: normalizedControlledOpen,\n defaultValue: normalizedDefaultOpen,\n currentValue: shell.inspectorMode,\n setValue: shell.setInspectorMode,\n breakpointReady: shell.currentBreakpointReady,\n controlledIsResponsive: openIsResponsive,\n onResponsiveChange: (next) => onOpenChange?.(next === 'expanded', { reason: 'responsive' }),\n onInit: (initial) => {\n if (typeof open === 'undefined') {\n onOpenChange?.(initial === 'expanded', { reason: 'init' });\n }\n },\n });\n\n const emitSizeChange = React.useMemo(() => {\n const cb = onSizeChange as undefined | ((s: number, meta: InspectorSizeChangeMeta) => 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: InspectorSizeChangeMeta) => {\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: InspectorSizeChangeMeta) => {\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: InspectorSizeChangeMeta) => cb(s, meta);\n }, [onSizeChange, sizeUpdate, sizeUpdateMs]);\n\n // Dev guards\n const wasControlledRef = React.useRef<boolean | null>(null);\n if (process.env.NODE_ENV !== 'production') {\n if (typeof open !== 'undefined' && typeof defaultOpen !== 'undefined') {\n console.error('Shell.Inspector: Do not pass both `open` and `defaultOpen`. Choose one.');\n }\n }\n\n // Warn on controlled/uncontrolled mode switch\n React.useEffect(() => {\n const isControlled = typeof open !== 'undefined';\n if (wasControlledRef.current === null) {\n wasControlledRef.current = isControlled;\n return;\n }\n if (wasControlledRef.current !== isControlled) {\n console.warn('Shell.Inspector: Switching between controlled and uncontrolled `open` is not supported.');\n wasControlledRef.current = isControlled;\n }\n }, [open]);\n\n const initNotifiedRef = React.useRef(false);\n const lastInspectorModeRef = React.useRef<PaneMode | null>(null);\n React.useEffect(() => {\n // Notify init open\n if (!initNotifiedRef.current && typeof open === 'undefined' && defaultOpen && shell.inspectorMode === 'expanded') {\n onOpenChange?.(true, { reason: 'init' });\n initNotifiedRef.current = true;\n }\n\n // Notify toggles when uncontrolled (avoid double-notify after responsive change)\n if (typeof open === 'undefined') {\n if (lastInspectorModeRef.current !== null && lastInspectorModeRef.current !== shell.inspectorMode) {\n onOpenChange?.(shell.inspectorMode === 'expanded', { reason: 'toggle' });\n }\n lastInspectorModeRef.current = shell.inspectorMode;\n }\n }, [shell.inspectorMode, open, defaultOpen, onOpenChange]);\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 prevInspectorModeRef = React.useRef<PaneMode | null>(null);\n const hasInitializedRef = React.useRef(false);\n React.useEffect(() => {\n const currentMode = shell.inspectorMode;\n\n // Wait for breakpoint to be ready before enabling callbacks\n if (!shell.currentBreakpointReady) {\n prevInspectorModeRef.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 prevInspectorModeRef.current = currentMode;\n return;\n }\n\n const prevMode = prevInspectorModeRef.current;\n\n // Only fire on actual state transitions\n if (prevMode !== null && prevMode !== currentMode) {\n if (currentMode === 'expanded') {\n onExpand?.();\n } else if (currentMode === 'collapsed') {\n onCollapse?.();\n }\n prevInspectorModeRef.current = currentMode;\n }\n }, [shell.inspectorMode, shell.currentBreakpointReady, onExpand, onCollapse]);\n\n const isExpanded = shell.inspectorMode === 'expanded';\n\n const persistenceAdapter = React.useMemo(() => {\n if (!paneId || persistence) return persistence;\n const key = `kookie-ui:shell:inspector:${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.Inspector: 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.Inspector: 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 if (!resizable || !persistenceAdapter?.load || isOverlay) return undefined;\n const loaded = persistenceAdapter.load();\n const applyLoaded = (value?: number) => {\n if (!mounted || typeof value !== 'number' || !localRef.current) return;\n localRef.current.style.setProperty('--inspector-size', `${value}px`);\n onResize?.(value);\n };\n if (loaded instanceof Promise) {\n loaded.then(applyLoaded).catch((err) => {\n if (process.env.NODE_ENV !== 'production') {\n console.warn('Shell.Inspector: failed to load persisted size', err);\n }\n });\n } else {\n applyLoaded(loaded);\n }\n return () => {\n mounted = false;\n };\n }, [resizable, persistenceAdapter, onResize, isOverlay]);\n\n const handleEl =\n resizable && !isOverlay && isExpanded ? (\n <PaneResizeContext.Provider\n value={{\n containerRef: localRef,\n cssVarName: '--inspector-size',\n minSize,\n maxSize,\n defaultSize: expandedSize,\n orientation: 'vertical',\n edge: 'start',\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: 'inspector',\n collapsible,\n snapPoints,\n snapTolerance: snapTolerance ?? 8,\n collapseThreshold,\n requestCollapse: () => shell.setInspectorMode('collapsed'),\n requestToggle: () => shell.togglePane('inspector'),\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('--inspector-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('--inspector-size', `${clamped}px`);\n emitSizeChange(clamped, { reason: 'controlled' });\n }\n }, [controlledSize, minSize, maxSize, normalizeToPx, emitSizeChange]);\n\n if (isOverlay) {\n const open = shell.inspectorMode === 'expanded';\n return (\n <Sheet.Root open={open} onOpenChange={(o) => shell.setInspectorMode(o ? 'expanded' : 'collapsed')}>\n <Sheet.Content side=\"end\" style={{ padding: 0 }} width={{ initial: `${expandedSize}px` }}>\n <VisuallyHidden>\n <Sheet.Title>Inspector</Sheet.Title>\n </VisuallyHidden>\n {contentChildren}\n </Sheet.Content>\n </Sheet.Root>\n );\n }\n\n // Strip control/size props from DOM spread\n return (\n <div\n {...inspectorDomProps}\n ref={setRef}\n className={classNames('rt-ShellInspector', className)}\n data-mode={shell.inspectorMode}\n data-peek={shell.peekTarget === 'inspector' || undefined}\n data-presentation={shell.currentBreakpointReady ? resolvedPresentation : undefined}\n data-open={(shell.currentBreakpointReady && isStacked && isExpanded) || undefined}\n style={{\n ...style,\n ['--inspector-size' as any]: `${expandedSize}px`,\n ['--inspector-min-size' as any]: `${minSize}px`,\n ['--inspector-max-size' as any]: `${maxSize}px`,\n }}\n >\n <div className=\"rt-ShellInspectorContent\" data-visible={isExpanded || undefined}>\n {contentChildren}\n </div>\n {handleEl}\n </div>\n );\n}) as InspectorComponent;\n\nInspector.displayName = 'Shell.Inspector';\nInspector.Handle = InspectorHandle;\n"],
5
- "mappings": "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",
6
- "names": ["React", "classNames", "Sheet", "VisuallyHidden", "useShell", "useResponsivePresentation", "useResponsiveInitialState", "PaneResizeContext", "InspectorHandle", "PaneHandle", "extractPaneDomProps", "mapResponsiveBooleanToPaneMode", "INSPECTOR_DOM_PROP_KEYS", "Inspector", "initialProps", "ref", "className", "presentation", "defaultOpen", "open", "onOpenChange", "expandedSize", "minSize", "maxSize", "resizable", "collapsible", "onExpand", "onCollapse", "onResize", "onResizeStart", "onResizeEnd", "snapPoints", "snapTolerance", "collapseThreshold", "paneId", "persistence", "children", "style", "onSizeChange", "sizeUpdate", "sizeUpdateMs", "size", "defaultSize", "inspectorDomProps", "shell", "resolvedPresentation", "isOverlay", "isStacked", "localRef", "setRef", "node", "childArray", "handleChildren", "el", "contentChildren", "normalizedControlledOpen", "normalizedDefaultOpen", "openIsResponsive", "next", "initial", "emitSizeChange", "cb", "strategy", "ms", "t", "s", "meta", "last", "now", "wasControlledRef", "isControlled", "initNotifiedRef", "lastInspectorModeRef", "prevInspectorModeRef", "hasInitializedRef", "currentMode", "prevMode", "isExpanded", "persistenceAdapter", "key", "v", "mounted", "loaded", "applyLoaded", "value", "err", "handleEl", "client", "startClient", "startSize", "isRtl", "delta", "i", "normalizeToPx", "str", "rem", "pct", "base", "n", "px", "clamped", "controlledSize", "o"]
4
+ "sourcesContent": ["import * as React from 'react';\nimport classNames from 'classnames';\nimport * as Sheet from '../sheet.js';\nimport { VisuallyHidden } from '../visually-hidden.js';\nimport { useShell } from '../shell.context.js';\nimport { useResponsivePresentation, useResponsiveInitialState } from '../shell.hooks.js';\nimport { PaneResizeContext } from './shell-resize.js';\nimport { InspectorHandle, PaneHandle } from './shell-handles.js';\nimport { _BREAKPOINTS } from '../shell.types.js';\nimport type { Breakpoint, PaneMode, PaneSizePersistence, ResponsivePresentation, PaneBaseProps } from '../shell.types.js';\nimport { extractPaneDomProps, mapResponsiveBooleanToPaneMode } from './shell-prop-helpers.js';\nimport { normalizeToPx } from '../../helpers/normalize-to-px.js';\n\ntype InspectorOpenChangeMeta = { reason: 'init' | 'toggle' | 'responsive' };\ntype InspectorControlledProps = { open: boolean | Partial<Record<Breakpoint, boolean>>; onOpenChange?: (open: boolean, meta: InspectorOpenChangeMeta) => void; defaultOpen?: never };\ntype InspectorUncontrolledProps = { defaultOpen?: boolean | Partial<Record<Breakpoint, boolean>>; onOpenChange?: (open: boolean, meta: InspectorOpenChangeMeta) => void; open?: never };\ntype InspectorSizeChangeMeta = { reason: 'init' | 'resize' | 'controlled' };\ntype InspectorSizeControlledProps = { size: number | string; defaultSize?: never };\ntype InspectorSizeUncontrolledProps = { defaultSize?: number | string; size?: never };\ntype InspectorPublicProps = PaneBaseProps &\n (InspectorControlledProps | InspectorUncontrolledProps) &\n (InspectorSizeControlledProps | InspectorSizeUncontrolledProps) & {\n onSizeChange?: (size: number, meta: InspectorSizeChangeMeta) => void;\n sizeUpdate?: 'throttle' | 'debounce';\n sizeUpdateMs?: number;\n };\n\ntype InspectorComponent = React.ForwardRefExoticComponent<InspectorPublicProps & React.RefAttributes<HTMLDivElement>> & { Handle: typeof InspectorHandle };\n\nconst INSPECTOR_DOM_PROP_KEYS = [\n 'className',\n 'children',\n 'defaultOpen',\n 'open',\n 'onOpenChange',\n 'size',\n 'defaultSize',\n 'onSizeChange',\n 'sizeUpdate',\n 'sizeUpdateMs',\n 'style',\n] as const satisfies readonly (keyof InspectorPublicProps)[];\n\nexport const Inspector = React.forwardRef<HTMLDivElement, InspectorPublicProps>((initialProps, ref) => {\n const {\n className,\n presentation = { initial: 'overlay', lg: 'fixed' },\n defaultOpen,\n open,\n onOpenChange,\n expandedSize = 320,\n minSize = 200,\n maxSize = 500,\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 onSizeChange,\n sizeUpdate,\n sizeUpdateMs = 50,\n size,\n defaultSize,\n } = initialProps;\n const inspectorDomProps = extractPaneDomProps(initialProps, INSPECTOR_DOM_PROP_KEYS);\n const shell = useShell();\n const resolvedPresentation = useResponsivePresentation(presentation);\n const isOverlay = resolvedPresentation === 'overlay';\n const isStacked = resolvedPresentation === 'stacked';\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 === InspectorHandle);\n const contentChildren = childArray.filter((el: React.ReactElement) => !(React.isValidElement(el) && el.type === InspectorHandle));\n\n // Throttled/debounced emitter for onSizeChange\n const normalizedControlledOpen = React.useMemo(() => mapResponsiveBooleanToPaneMode(open), [open]);\n const normalizedDefaultOpen = React.useMemo(() => mapResponsiveBooleanToPaneMode(defaultOpen), [defaultOpen]);\n const openIsResponsive = typeof open === 'object' && open !== null;\n useResponsiveInitialState<PaneMode>({\n controlledValue: normalizedControlledOpen,\n defaultValue: normalizedDefaultOpen,\n currentValue: shell.inspectorMode,\n setValue: shell.setInspectorMode,\n breakpointReady: shell.currentBreakpointReady,\n controlledIsResponsive: openIsResponsive,\n onResponsiveChange: (next) => onOpenChange?.(next === 'expanded', { reason: 'responsive' }),\n onInit: (initial) => {\n if (typeof open === 'undefined') {\n onOpenChange?.(initial === 'expanded', { reason: 'init' });\n }\n },\n });\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: InspectorSizeChangeMeta) => 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: InspectorSizeChangeMeta) => {\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: InspectorSizeChangeMeta) => {\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: InspectorSizeChangeMeta) => cb(s, meta);\n }, [onSizeChange, sizeUpdate, sizeUpdateMs]);\n\n // Dev guards\n const wasControlledRef = React.useRef<boolean | null>(null);\n if (process.env.NODE_ENV !== 'production') {\n if (typeof open !== 'undefined' && typeof defaultOpen !== 'undefined') {\n console.error('Shell.Inspector: Do not pass both `open` and `defaultOpen`. Choose one.');\n }\n }\n\n // Warn on controlled/uncontrolled mode switch\n React.useEffect(() => {\n const isControlled = typeof open !== 'undefined';\n if (wasControlledRef.current === null) {\n wasControlledRef.current = isControlled;\n return;\n }\n if (wasControlledRef.current !== isControlled) {\n console.warn('Shell.Inspector: Switching between controlled and uncontrolled `open` is not supported.');\n wasControlledRef.current = isControlled;\n }\n }, [open]);\n\n const initNotifiedRef = React.useRef(false);\n const lastInspectorModeRef = React.useRef<PaneMode | null>(null);\n React.useEffect(() => {\n // Notify init open\n if (!initNotifiedRef.current && typeof open === 'undefined' && defaultOpen && shell.inspectorMode === 'expanded') {\n onOpenChange?.(true, { reason: 'init' });\n initNotifiedRef.current = true;\n }\n\n // Notify toggles when uncontrolled (avoid double-notify after responsive change)\n if (typeof open === 'undefined') {\n if (lastInspectorModeRef.current !== null && lastInspectorModeRef.current !== shell.inspectorMode) {\n onOpenChange?.(shell.inspectorMode === 'expanded', { reason: 'toggle' });\n }\n lastInspectorModeRef.current = shell.inspectorMode;\n }\n }, [shell.inspectorMode, open, defaultOpen, onOpenChange]);\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 prevInspectorModeRef = React.useRef<PaneMode | null>(null);\n const hasInitializedRef = React.useRef(false);\n React.useEffect(() => {\n const currentMode = shell.inspectorMode;\n\n // Wait for breakpoint to be ready before enabling callbacks\n if (!shell.currentBreakpointReady) {\n prevInspectorModeRef.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 prevInspectorModeRef.current = currentMode;\n return;\n }\n\n const prevMode = prevInspectorModeRef.current;\n\n // Only fire on actual state transitions\n if (prevMode !== null && prevMode !== currentMode) {\n if (currentMode === 'expanded') {\n onExpandRef.current?.();\n } else if (currentMode === 'collapsed') {\n onCollapseRef.current?.();\n }\n prevInspectorModeRef.current = currentMode;\n }\n }, [shell.inspectorMode, shell.currentBreakpointReady]);\n\n const isExpanded = shell.inspectorMode === 'expanded';\n\n const persistenceAdapter = React.useMemo(() => {\n if (!paneId || persistence) return persistence;\n const key = `kookie-ui:shell:inspector:${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.Inspector: 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.Inspector: 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 if (!resizable || !persistenceAdapter?.load || isOverlay) return undefined;\n const loaded = persistenceAdapter.load();\n const applyLoaded = (value?: number) => {\n if (!mounted || typeof value !== 'number' || !localRef.current) return;\n localRef.current.style.setProperty('--inspector-size', `${value}px`);\n onResize?.(value);\n };\n if (loaded instanceof Promise) {\n loaded.then(applyLoaded).catch((err) => {\n if (process.env.NODE_ENV !== 'production') {\n console.warn('Shell.Inspector: failed to load persisted size', err);\n }\n });\n } else {\n applyLoaded(loaded);\n }\n return () => {\n mounted = false;\n };\n }, [resizable, persistenceAdapter, onResize, isOverlay]);\n\n const handleEl =\n resizable && !isOverlay && isExpanded ? (\n <PaneResizeContext.Provider\n value={{\n containerRef: localRef,\n cssVarName: '--inspector-size',\n minSize,\n maxSize,\n defaultSize: expandedSize,\n orientation: 'vertical',\n edge: 'start',\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: 'inspector',\n collapsible,\n snapPoints,\n snapTolerance: snapTolerance ?? 8,\n collapseThreshold,\n requestCollapse: () => shell.setInspectorMode('collapsed'),\n requestToggle: () => shell.togglePane('inspector'),\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('--inspector-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('--inspector-size', `${clamped}px`);\n emitSizeChange(clamped, { reason: 'controlled' });\n }\n }, [controlledSize, minSize, maxSize, normalizeSizeToPx, emitSizeChange]);\n\n if (isOverlay) {\n const open = shell.inspectorMode === 'expanded';\n return (\n <Sheet.Root open={open} onOpenChange={(o) => shell.setInspectorMode(o ? 'expanded' : 'collapsed')}>\n <Sheet.Content side=\"end\" style={{ padding: 0 }} width={{ initial: `${expandedSize}px` }}>\n <VisuallyHidden>\n <Sheet.Title>Inspector</Sheet.Title>\n </VisuallyHidden>\n {contentChildren}\n </Sheet.Content>\n </Sheet.Root>\n );\n }\n\n // Strip control/size props from DOM spread\n return (\n <div\n {...inspectorDomProps}\n ref={setRef}\n className={classNames('rt-ShellInspector', className)}\n data-mode={shell.inspectorMode}\n data-peek={shell.peekTarget === 'inspector' || undefined}\n data-presentation={shell.currentBreakpointReady ? resolvedPresentation : undefined}\n data-open={(shell.currentBreakpointReady && isStacked && isExpanded) || undefined}\n style={{\n ...style,\n ['--inspector-size' as any]: `${expandedSize}px`,\n ['--inspector-min-size' as any]: `${minSize}px`,\n ['--inspector-max-size' as any]: `${maxSize}px`,\n }}\n >\n <div className=\"rt-ShellInspectorContent\" data-visible={isExpanded || undefined}>\n {contentChildren}\n </div>\n {handleEl}\n </div>\n );\n}) as InspectorComponent;\n\nInspector.displayName = 'Shell.Inspector';\nInspector.Handle = InspectorHandle;\n"],
5
+ "mappings": "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",
6
+ "names": ["React", "classNames", "Sheet", "VisuallyHidden", "useShell", "useResponsivePresentation", "useResponsiveInitialState", "PaneResizeContext", "InspectorHandle", "PaneHandle", "extractPaneDomProps", "mapResponsiveBooleanToPaneMode", "normalizeToPx", "INSPECTOR_DOM_PROP_KEYS", "Inspector", "initialProps", "ref", "className", "presentation", "defaultOpen", "open", "onOpenChange", "expandedSize", "minSize", "maxSize", "resizable", "collapsible", "onExpand", "onCollapse", "onResize", "onResizeStart", "onResizeEnd", "snapPoints", "snapTolerance", "collapseThreshold", "paneId", "persistence", "children", "style", "onSizeChange", "sizeUpdate", "sizeUpdateMs", "size", "defaultSize", "inspectorDomProps", "shell", "resolvedPresentation", "isOverlay", "isStacked", "localRef", "setRef", "node", "childArray", "handleChildren", "el", "contentChildren", "normalizedControlledOpen", "normalizedDefaultOpen", "openIsResponsive", "next", "initial", "debounceTimeoutRef", "emitSizeChange", "cb", "strategy", "ms", "s", "meta", "last", "now", "wasControlledRef", "isControlled", "initNotifiedRef", "lastInspectorModeRef", "onExpandRef", "onCollapseRef", "prevInspectorModeRef", "hasInitializedRef", "currentMode", "prevMode", "isExpanded", "persistenceAdapter", "key", "v", "mounted", "loaded", "applyLoaded", "value", "err", "handleEl", "client", "startClient", "startSize", "isRtl", "delta", "i", "normalizeSizeToPx", "px", "clamped", "controlledSize", "o"]
7
7
  }
@@ -1 +1 @@
1
- {"version":3,"file":"shell-sidebar.d.ts","sourceRoot":"","sources":["../../../../src/components/_internal/shell-sidebar.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAQ/B,OAAO,EAAE,aAAa,EAAc,MAAM,oBAAoB,CAAC;AAC/D,OAAO,KAAK,EAAE,UAAU,EAAE,QAAQ,EAA+C,WAAW,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAGnJ,KAAK,gBAAgB,GAAG,aAAa,GAAG;IACtC,IAAI,CAAC,EAAE,QAAQ,CAAC;IAChB,WAAW,CAAC,EAAE,GAAG,CAAC;IAClB,YAAY,CAAC,EAAE,CAAC,IAAI,EAAE,QAAQ,GAAG,WAAW,KAAK,IAAI,CAAC;CACvD,CAAC;AAEF,KAAK,sBAAsB,GAAG;IAAE,MAAM,EAAE,MAAM,GAAG,QAAQ,GAAG,YAAY,CAAA;CAAE,CAAC;AAC3E,KAAK,sBAAsB,GAAG;IAAE,KAAK,EAAE,UAAU,CAAC,WAAW,CAAC,CAAC;IAAC,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE,WAAW,EAAE,IAAI,EAAE,sBAAsB,KAAK,IAAI,CAAC;IAAC,YAAY,CAAC,EAAE,KAAK,CAAA;CAAE,CAAC;AACnK,KAAK,wBAAwB,GAAG;IAAE,YAAY,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,MAAM,CAAC,UAAU,EAAE,WAAW,CAAC,CAAC,CAAC;IAAC,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE,WAAW,EAAE,IAAI,EAAE,sBAAsB,KAAK,IAAI,CAAC;IAAC,KAAK,CAAC,EAAE,KAAK,CAAA;CAAE,CAAC;AACrM,KAAK,kBAAkB,GAAG,IAAI,CAAC,gBAAgB,EAAE,MAAM,GAAG,aAAa,GAAG,cAAc,CAAC,GAAG;IAE1F,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,GAAG,QAAQ,CAAC;IAEhC,IAAI,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IACvB,WAAW,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IAC9B,YAAY,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE;QAAE,MAAM,EAAE,MAAM,GAAG,QAAQ,GAAG,YAAY,CAAA;KAAE,KAAK,IAAI,CAAC;IAC1F,UAAU,CAAC,EAAE,UAAU,GAAG,UAAU,CAAC;IACrC,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB,GAAG,CAAC,sBAAsB,GAAG,wBAAwB,CAAC,CAAC;AAExD,KAAK,gBAAgB,GAAG,KAAK,CAAC,yBAAyB,CAAC,kBAAkB,GAAG,KAAK,CAAC,aAAa,CAAC,cAAc,CAAC,CAAC,GAAG;IAAE,MAAM,EAAE,OAAO,aAAa,CAAA;CAAE,CAAC;AAkBrJ,eAAO,MAAM,OAAO,EA6Zd,gBAAgB,CAAC"}
1
+ {"version":3,"file":"shell-sidebar.d.ts","sourceRoot":"","sources":["../../../../src/components/_internal/shell-sidebar.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAQ/B,OAAO,EAAE,aAAa,EAAc,MAAM,oBAAoB,CAAC;AAC/D,OAAO,KAAK,EAAE,UAAU,EAAE,QAAQ,EAA+C,WAAW,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAInJ,KAAK,gBAAgB,GAAG,aAAa,GAAG;IACtC,IAAI,CAAC,EAAE,QAAQ,CAAC;IAChB,WAAW,CAAC,EAAE,GAAG,CAAC;IAClB,YAAY,CAAC,EAAE,CAAC,IAAI,EAAE,QAAQ,GAAG,WAAW,KAAK,IAAI,CAAC;CACvD,CAAC;AAEF,KAAK,sBAAsB,GAAG;IAAE,MAAM,EAAE,MAAM,GAAG,QAAQ,GAAG,YAAY,CAAA;CAAE,CAAC;AAC3E,KAAK,sBAAsB,GAAG;IAAE,KAAK,EAAE,UAAU,CAAC,WAAW,CAAC,CAAC;IAAC,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE,WAAW,EAAE,IAAI,EAAE,sBAAsB,KAAK,IAAI,CAAC;IAAC,YAAY,CAAC,EAAE,KAAK,CAAA;CAAE,CAAC;AACnK,KAAK,wBAAwB,GAAG;IAAE,YAAY,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,MAAM,CAAC,UAAU,EAAE,WAAW,CAAC,CAAC,CAAC;IAAC,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE,WAAW,EAAE,IAAI,EAAE,sBAAsB,KAAK,IAAI,CAAC;IAAC,KAAK,CAAC,EAAE,KAAK,CAAA;CAAE,CAAC;AACrM,KAAK,kBAAkB,GAAG,IAAI,CAAC,gBAAgB,EAAE,MAAM,GAAG,aAAa,GAAG,cAAc,CAAC,GAAG;IAE1F,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,GAAG,QAAQ,CAAC;IAEhC,IAAI,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IACvB,WAAW,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IAC9B,YAAY,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE;QAAE,MAAM,EAAE,MAAM,GAAG,QAAQ,GAAG,YAAY,CAAA;KAAE,KAAK,IAAI,CAAC;IAC1F,UAAU,CAAC,EAAE,UAAU,GAAG,UAAU,CAAC;IACrC,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB,GAAG,CAAC,sBAAsB,GAAG,wBAAwB,CAAC,CAAC;AAExD,KAAK,gBAAgB,GAAG,KAAK,CAAC,yBAAyB,CAAC,kBAAkB,GAAG,KAAK,CAAC,aAAa,CAAC,cAAc,CAAC,CAAC,GAAG;IAAE,MAAM,EAAE,OAAO,aAAa,CAAA;CAAE,CAAC;AAkBrJ,eAAO,MAAM,OAAO,EA+Zd,gBAAgB,CAAC"}
@@ -1,2 +1,2 @@
1
- import*as t from"react";import Se from"classnames";import*as H from"../sheet.js";import{VisuallyHidden as he}from"../visually-hidden.js";import{useShell as Q}from"../shell.context.js";import{useResponsivePresentation as ye,useResponsiveInitialState as Me}from"../shell.hooks.js";import{PaneResizeContext as ge}from"./shell-resize.js";import{extractPaneDomProps as Pe}from"./shell-prop-helpers.js";import{SidebarHandle as V,PaneHandle as ze}from"./shell-handles.js";import"../shell.types.js";const Re=["className","children","state","defaultState","onStateChange","thinSize","toggleModes","size","defaultSize","onSizeChange","sizeUpdate","sizeUpdateMs","style"],X=t.forwardRef((I,p)=>{const{className:Z,presentation:ee={initial:"overlay",md:"fixed"},expandedSize:d=288,minSize:l=200,maxSize:u=400,resizable:R=!1,collapsible:te=!0,onExpand:O,onCollapse:B,onResize:x,onResizeStart:ne,onResizeEnd:re,snapPoints:oe,snapTolerance:ae,collapseThreshold:ie,paneId:v,persistence:C,children:se,style:de,thinSize:f=64,toggleModes:E,state:c,defaultState:m,onStateChange:S,size:F,defaultSize:$,onSizeChange:U,sizeUpdate:_,sizeUpdateMs:A=50}=I,le=Pe(I,Re),r=Q(),N=ye(ee),b=N==="overlay",ue=N==="stacked",s=t.useRef(null),ce=t.useCallback(e=>{s.current=e,typeof p=="function"?p(e):p&&(p.current=e)},[p]),W=t.Children.toArray(se),L=W.filter(e=>t.isValidElement(e)&&e.type===V),j=W.filter(e=>!(t.isValidElement(e)&&e.type===V)),h=t.useMemo(()=>{const e=U,n=_,o=A??50;if(!e)return()=>{};if(n==="debounce"){let a=null;return(i,D)=>{a&&clearTimeout(a),a=setTimeout(()=>{e(i,D)},o)}}if(n==="throttle"){let a=0;return(i,D)=>{const J=Date.now();J-a>=o&&(a=J,e(i,D))}}return(a,i)=>e(a,i)},[U,_,A]),pe=t.useId();t.useEffect(()=>(r.setHasSidebar(!0),()=>{r.setHasSidebar(!1)}),[r,pe]);const y=t.useRef(null);t.useEffect(()=>{const e=typeof c<"u";if(y.current===null){y.current=e;return}y.current!==e&&(console.warn("Shell.Sidebar: Switching between controlled and uncontrolled `state` is not supported."),y.current=e)},[c]);const fe=typeof c=="object"&&c!==null,{resolvedDefault:q}=Me({controlledValue:c,defaultValue:m,currentValue:r.sidebarMode,setValue:r.setSidebarMode,breakpointReady:r.currentBreakpointReady,controlledIsResponsive:fe,onResponsiveChange:e=>S?.(e,{reason:"responsive"}),onInit:e=>S?.(e,{reason:"init"})}),M=t.useRef(null);t.useEffect(()=>{typeof c>"u"&&(M.current===null?M.current=r.sidebarMode:M.current!==r.sidebarMode&&(M.current=r.sidebarMode,S?.(r.sidebarMode,{reason:"toggle"})))},[r.sidebarMode,c,S]);const g=t.useRef(null),K=t.useRef(!1);t.useEffect(()=>{const e=r.sidebarMode;if(!r.currentBreakpointReady){g.current=e;return}if(!K.current){K.current=!0,g.current=e;return}const n=g.current;n!==null&&n!==e&&(n==="collapsed"&&e!=="collapsed"?O?.():e==="collapsed"&&B?.(),g.current=e)},[r.sidebarMode,r.currentBreakpointReady,O,B]);const Y=r.sidebarMode!=="collapsed",P=t.useMemo(()=>{if(!v||C)return C;const e=`kookie-ui:shell:sidebar:${v}`;return{load:()=>{if(!(typeof window>"u"))try{const o=window.localStorage.getItem(e);return o?Number(o):void 0}catch{return}},save:o=>{if(!(typeof window>"u"))try{window.localStorage.setItem(e,String(o))}catch{}}}},[v,C]);t.useEffect(()=>{let e=!0;return(async()=>{if(!R||!P?.load||b)return;const n=await P.load();e&&typeof n=="number"&&s.current&&(s.current.style.setProperty("--sidebar-size",`${n}px`),x?.(n))})(),()=>{e=!1}},[R,P,x,b]);const z=Q(),k=t.useCallback(()=>{const e=q??(typeof m=="string"?m:void 0)??"expanded";return e==="thin"||e==="expanded"?e:"expanded"},[q,m]);t.useEffect(()=>{if(!z.setSidebarToggleComputer)return;const e=E??"both",n=o=>{if(e==="both")return o==="collapsed"?"thin":o==="thin"?"expanded":"collapsed";const a=k();return o==="collapsed"?a:o===a?"collapsed":a};return z.setSidebarToggleComputer(n),()=>{z.setSidebarToggleComputer?.(o=>o==="collapsed"?"thin":o==="thin"?"expanded":"collapsed")}},[z,E,k]);const G=t.useRef(d),be=t.useRef("expanded");t.useEffect(()=>{r.sidebarMode!=="collapsed"&&(be.current=r.sidebarMode,G.current=r.sidebarMode==="thin"?f:d)},[r.sidebarMode,f,d]);const me=R&&!b&&r.sidebarMode==="expanded"?t.createElement(ge.Provider,{value:{containerRef:s,cssVarName:"--sidebar-size",minSize:l,maxSize:u,defaultSize:d,orientation:"vertical",edge:"end",computeNext:(e,n,o)=>{const a=getComputedStyle(s.current).direction==="rtl",i=e-n;return o+(a?-i:i)},onResize:x,onResizeStart:ne,onResizeEnd:e=>{re?.(e),h(e,{reason:"resize"}),P?.save?.(e)},target:"sidebar",collapsible:te,snapPoints:oe,snapTolerance:ae??8,collapseThreshold:ie,requestCollapse:()=>r.setSidebarMode("collapsed"),requestToggle:()=>r.togglePane("sidebar")}},L.length>0?L.map((e,n)=>t.cloneElement(e,{key:e.key??n})):t.createElement(ze,null)):null,w=t.useCallback(e=>{if(e==null)return;if(typeof e=="number"&&Number.isFinite(e))return e;const n=String(e).trim();if(!n)return;if(n.endsWith("px"))return Number.parseFloat(n);if(n.endsWith("rem")){const a=Number.parseFloat(getComputedStyle(document.documentElement).fontSize||"16")||16;return Number.parseFloat(n)*a}if(n.endsWith("%")){const a=Number.parseFloat(n),i=document.documentElement.clientWidth||window.innerWidth||0;return a/100*i}const o=Number.parseFloat(n);return Number.isFinite(o)?o:void 0},[]);t.useEffect(()=>{if(s.current&&typeof F>"u"&&typeof $<"u"){const e=w($);if(typeof e=="number"&&Number.isFinite(e)){const a=Math.min((typeof u=="number"?u:void 0)??e,Math.max((typeof l=="number"?l:void 0)??e,e));s.current.style.setProperty("--sidebar-size",`${a}px`),h(a,{reason:"init"})}}},[]);const T=F;if(t.useEffect(()=>{if(!s.current||typeof T>"u")return;const e=w(T);if(typeof e=="number"&&Number.isFinite(e)){const a=Math.min((typeof u=="number"?u:void 0)??e,Math.max((typeof l=="number"?l:void 0)??e,e));s.current.style.setProperty("--sidebar-size",`${a}px`),h(a,{reason:"controlled"})}},[T,l,u,w,h]),b){const e=r.sidebarMode!=="collapsed";return t.createElement(H.Root,{open:e,onOpenChange:n=>r.setSidebarMode(n?"expanded":"collapsed")},t.createElement(H.Content,{side:"start",style:{padding:0},width:{initial:`${e?r.sidebarMode==="thin"?f:d:G.current}px`}},t.createElement(he,null,t.createElement(H.Title,null,"Navigation")),j))}return t.createElement("div",{...le,ref:ce,className:Se("rt-ShellSidebar",Z),"data-mode":r.sidebarMode,"data-peek":r.peekTarget==="sidebar"||void 0,"data-presentation":r.currentBreakpointReady?N:void 0,"data-open":r.currentBreakpointReady&&ue&&Y||void 0,style:{...de,"--sidebar-size":`${d}px`,"--sidebar-thin-size":`${f}px`,"--sidebar-min-size":`${l}px`,"--sidebar-max-size":`${u}px`,...r.peekTarget==="sidebar"&&r.sidebarMode==="collapsed"&&!b?(()=>{const e=E??"both",n=r.sidebarMode;let o;if(e==="both")o=n==="collapsed"?"thin":n==="thin"?"expanded":"collapsed";else{const a=k();o=n==="collapsed"?a:"collapsed"}return o==="thin"?{"--peek-sidebar-width":`${f}px`}:{"--peek-sidebar-width":`var(--sidebar-size, ${d}px)`}})():{}}},t.createElement("div",{className:"rt-ShellSidebarContent","data-visible":Y||void 0},j),me)});X.displayName="Shell.Sidebar",X.Handle=V;export{X as Sidebar};
1
+ import*as t from"react";import Me from"classnames";import*as O from"../sheet.js";import{VisuallyHidden as ge}from"../visually-hidden.js";import{useShell as Z}from"../shell.context.js";import{useResponsivePresentation as ze,useResponsiveInitialState as Pe}from"../shell.hooks.js";import{PaneResizeContext as Re}from"./shell-resize.js";import{extractPaneDomProps as ve}from"./shell-prop-helpers.js";import{SidebarHandle as B,PaneHandle as xe}from"./shell-handles.js";import"../shell.types.js";import{normalizeToPx as Ce}from"../../helpers/normalize-to-px.js";const Ee=["className","children","state","defaultState","onStateChange","thinSize","toggleModes","size","defaultSize","onSizeChange","sizeUpdate","sizeUpdateMs","style"],ee=t.forwardRef(($,f)=>{const{className:te,presentation:ne={initial:"overlay",md:"fixed"},expandedSize:d=288,minSize:l=200,maxSize:u=400,resizable:v=!1,collapsible:re=!0,onExpand:U,onCollapse:_,onResize:x,onResizeStart:oe,onResizeEnd:ae,snapPoints:ie,snapTolerance:se,collapseThreshold:de,paneId:C,persistence:E,children:le,style:ue,thinSize:b=64,toggleModes:T,state:c,defaultState:m,onStateChange:h,size:A,defaultSize:L,onSizeChange:k,sizeUpdate:w,sizeUpdateMs:N=50}=$,ce=ve($,Ee),n=Z(),D=ze(ne),S=D==="overlay",pe=D==="stacked",i=t.useRef(null),fe=t.useCallback(e=>{i.current=e,typeof f=="function"?f(e):f&&(f.current=e)},[f]),F=t.Children.toArray(le),j=F.filter(e=>t.isValidElement(e)&&e.type===B),q=F.filter(e=>!(t.isValidElement(e)&&e.type===B)),p=t.useRef(null);t.useEffect(()=>()=>{p.current&&(clearTimeout(p.current),p.current=null)},[k,w,N]);const y=t.useMemo(()=>{const e=k,r=w,o=N??50;if(!e)return()=>{};if(r==="debounce")return(a,s)=>{p.current&&clearTimeout(p.current),p.current=setTimeout(()=>{e(a,s),p.current=null},o)};if(r==="throttle"){let a=0;return(s,ye)=>{const X=Date.now();X-a>=o&&(a=X,e(s,ye))}}return(a,s)=>e(a,s)},[k,w,N]),be=t.useId();t.useEffect(()=>(n.setHasSidebar(!0),()=>{n.setHasSidebar(!1)}),[n,be]);const M=t.useRef(null);t.useEffect(()=>{const e=typeof c<"u";if(M.current===null){M.current=e;return}M.current!==e&&(console.warn("Shell.Sidebar: Switching between controlled and uncontrolled `state` is not supported."),M.current=e)},[c]);const Se=typeof c=="object"&&c!==null,{resolvedDefault:K}=Pe({controlledValue:c,defaultValue:m,currentValue:n.sidebarMode,setValue:n.setSidebarMode,breakpointReady:n.currentBreakpointReady,controlledIsResponsive:Se,onResponsiveChange:e=>h?.(e,{reason:"responsive"}),onInit:e=>h?.(e,{reason:"init"})}),g=t.useRef(null);t.useEffect(()=>{typeof c>"u"&&(g.current===null?g.current=n.sidebarMode:g.current!==n.sidebarMode&&(g.current=n.sidebarMode,h?.(n.sidebarMode,{reason:"toggle"})))},[n.sidebarMode,c,h]);const W=t.useRef(U),Y=t.useRef(_);t.useLayoutEffect(()=>{W.current=U,Y.current=_});const z=t.useRef(null),G=t.useRef(!1);t.useEffect(()=>{const e=n.sidebarMode;if(!n.currentBreakpointReady){z.current=e;return}if(!G.current){G.current=!0,z.current=e;return}const r=z.current;r!==null&&r!==e&&(r==="collapsed"&&e!=="collapsed"?W.current?.():e==="collapsed"&&Y.current?.(),z.current=e)},[n.sidebarMode,n.currentBreakpointReady]);const J=n.sidebarMode!=="collapsed",P=t.useMemo(()=>{if(!C||E)return E;const e=`kookie-ui:shell:sidebar:${C}`;return{load:()=>{if(!(typeof window>"u"))try{const o=window.localStorage.getItem(e);return o?Number(o):void 0}catch{return}},save:o=>{if(!(typeof window>"u"))try{window.localStorage.setItem(e,String(o))}catch{}}}},[C,E]);t.useEffect(()=>{let e=!0;return(async()=>{if(!v||!P?.load||S)return;const r=await P.load();e&&typeof r=="number"&&i.current&&(i.current.style.setProperty("--sidebar-size",`${r}px`),x?.(r))})(),()=>{e=!1}},[v,P,x,S]);const R=Z(),H=t.useCallback(()=>{const e=K??(typeof m=="string"?m:void 0)??"expanded";return e==="thin"||e==="expanded"?e:"expanded"},[K,m]);t.useEffect(()=>{if(!R.setSidebarToggleComputer)return;const e=T??"both",r=o=>{if(e==="both")return o==="collapsed"?"thin":o==="thin"?"expanded":"collapsed";const a=H();return o==="collapsed"?a:o===a?"collapsed":a};return R.setSidebarToggleComputer(r),()=>{R.setSidebarToggleComputer?.(o=>o==="collapsed"?"thin":o==="thin"?"expanded":"collapsed")}},[R,T,H]);const Q=t.useRef(d),me=t.useRef("expanded");t.useEffect(()=>{n.sidebarMode!=="collapsed"&&(me.current=n.sidebarMode,Q.current=n.sidebarMode==="thin"?b:d)},[n.sidebarMode,b,d]);const he=v&&!S&&n.sidebarMode==="expanded"?t.createElement(Re.Provider,{value:{containerRef:i,cssVarName:"--sidebar-size",minSize:l,maxSize:u,defaultSize:d,orientation:"vertical",edge:"end",computeNext:(e,r,o)=>{const a=getComputedStyle(i.current).direction==="rtl",s=e-r;return o+(a?-s:s)},onResize:x,onResizeStart:oe,onResizeEnd:e=>{ae?.(e),y(e,{reason:"resize"}),P?.save?.(e)},target:"sidebar",collapsible:re,snapPoints:ie,snapTolerance:se??8,collapseThreshold:de,requestCollapse:()=>n.setSidebarMode("collapsed"),requestToggle:()=>n.togglePane("sidebar")}},j.length>0?j.map((e,r)=>t.cloneElement(e,{key:e.key??r})):t.createElement(xe,null)):null,V=t.useCallback(e=>Ce(e,"horizontal"),[]);t.useEffect(()=>{if(i.current&&typeof A>"u"&&typeof L<"u"){const e=V(L);if(typeof e=="number"&&Number.isFinite(e)){const a=Math.min((typeof u=="number"?u:void 0)??e,Math.max((typeof l=="number"?l:void 0)??e,e));i.current.style.setProperty("--sidebar-size",`${a}px`),y(a,{reason:"init"})}}},[]);const I=A;if(t.useEffect(()=>{if(!i.current||typeof I>"u")return;const e=V(I);if(typeof e=="number"&&Number.isFinite(e)){const a=Math.min((typeof u=="number"?u:void 0)??e,Math.max((typeof l=="number"?l:void 0)??e,e));i.current.style.setProperty("--sidebar-size",`${a}px`),y(a,{reason:"controlled"})}},[I,l,u,V,y]),S){const e=n.sidebarMode!=="collapsed";return t.createElement(O.Root,{open:e,onOpenChange:r=>n.setSidebarMode(r?"expanded":"collapsed")},t.createElement(O.Content,{side:"start",style:{padding:0},width:{initial:`${e?n.sidebarMode==="thin"?b:d:Q.current}px`}},t.createElement(ge,null,t.createElement(O.Title,null,"Navigation")),q))}return t.createElement("div",{...ce,ref:fe,className:Me("rt-ShellSidebar",te),"data-mode":n.sidebarMode,"data-peek":n.peekTarget==="sidebar"||void 0,"data-presentation":n.currentBreakpointReady?D:void 0,"data-open":n.currentBreakpointReady&&pe&&J||void 0,style:{...ue,"--sidebar-size":`${d}px`,"--sidebar-thin-size":`${b}px`,"--sidebar-min-size":`${l}px`,"--sidebar-max-size":`${u}px`,...n.peekTarget==="sidebar"&&n.sidebarMode==="collapsed"&&!S?(()=>{const e=T??"both",r=n.sidebarMode;let o;if(e==="both")o=r==="collapsed"?"thin":r==="thin"?"expanded":"collapsed";else{const a=H();o=r==="collapsed"?a:"collapsed"}return o==="thin"?{"--peek-sidebar-width":`${b}px`}:{"--peek-sidebar-width":`var(--sidebar-size, ${d}px)`}})():{}}},t.createElement("div",{className:"rt-ShellSidebarContent","data-visible":J||void 0},q),he)});ee.displayName="Shell.Sidebar",ee.Handle=B;export{ee as Sidebar};
2
2
  //# sourceMappingURL=shell-sidebar.js.map