@kushagradhawan/kookie-ui 0.1.49 → 0.1.51

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 (103) hide show
  1. package/components.css +880 -243
  2. package/dist/cjs/components/_internal/shell-bottom.d.ts +31 -5
  3. package/dist/cjs/components/_internal/shell-bottom.d.ts.map +1 -1
  4. package/dist/cjs/components/_internal/shell-bottom.js +1 -1
  5. package/dist/cjs/components/_internal/shell-bottom.js.map +3 -3
  6. package/dist/cjs/components/_internal/shell-handles.d.ts.map +1 -1
  7. package/dist/cjs/components/_internal/shell-handles.js +1 -1
  8. package/dist/cjs/components/_internal/shell-handles.js.map +3 -3
  9. package/dist/cjs/components/_internal/shell-inspector.d.ts +23 -5
  10. package/dist/cjs/components/_internal/shell-inspector.d.ts.map +1 -1
  11. package/dist/cjs/components/_internal/shell-inspector.js +1 -1
  12. package/dist/cjs/components/_internal/shell-inspector.js.map +3 -3
  13. package/dist/cjs/components/_internal/shell-sidebar.d.ts +24 -6
  14. package/dist/cjs/components/_internal/shell-sidebar.d.ts.map +1 -1
  15. package/dist/cjs/components/_internal/shell-sidebar.js +1 -1
  16. package/dist/cjs/components/_internal/shell-sidebar.js.map +3 -3
  17. package/dist/cjs/components/chatbar.d.ts +9 -2
  18. package/dist/cjs/components/chatbar.d.ts.map +1 -1
  19. package/dist/cjs/components/chatbar.js +1 -1
  20. package/dist/cjs/components/chatbar.js.map +3 -3
  21. package/dist/cjs/components/shell.context.d.ts +88 -0
  22. package/dist/cjs/components/shell.context.d.ts.map +1 -1
  23. package/dist/cjs/components/shell.context.js +1 -1
  24. package/dist/cjs/components/shell.context.js.map +3 -3
  25. package/dist/cjs/components/shell.d.ts +51 -13
  26. package/dist/cjs/components/shell.d.ts.map +1 -1
  27. package/dist/cjs/components/shell.hooks.d.ts +7 -1
  28. package/dist/cjs/components/shell.hooks.d.ts.map +1 -1
  29. package/dist/cjs/components/shell.hooks.js +1 -1
  30. package/dist/cjs/components/shell.hooks.js.map +3 -3
  31. package/dist/cjs/components/shell.js +1 -1
  32. package/dist/cjs/components/shell.js.map +3 -3
  33. package/dist/cjs/components/shell.types.d.ts +1 -0
  34. package/dist/cjs/components/shell.types.d.ts.map +1 -1
  35. package/dist/cjs/components/shell.types.js +1 -1
  36. package/dist/cjs/components/shell.types.js.map +2 -2
  37. package/dist/cjs/components/sidebar.d.ts +7 -1
  38. package/dist/cjs/components/sidebar.d.ts.map +1 -1
  39. package/dist/cjs/components/sidebar.js +1 -1
  40. package/dist/cjs/components/sidebar.js.map +3 -3
  41. package/dist/esm/components/_internal/shell-bottom.d.ts +31 -5
  42. package/dist/esm/components/_internal/shell-bottom.d.ts.map +1 -1
  43. package/dist/esm/components/_internal/shell-bottom.js +1 -1
  44. package/dist/esm/components/_internal/shell-bottom.js.map +3 -3
  45. package/dist/esm/components/_internal/shell-handles.d.ts.map +1 -1
  46. package/dist/esm/components/_internal/shell-handles.js +1 -1
  47. package/dist/esm/components/_internal/shell-handles.js.map +3 -3
  48. package/dist/esm/components/_internal/shell-inspector.d.ts +23 -5
  49. package/dist/esm/components/_internal/shell-inspector.d.ts.map +1 -1
  50. package/dist/esm/components/_internal/shell-inspector.js +1 -1
  51. package/dist/esm/components/_internal/shell-inspector.js.map +3 -3
  52. package/dist/esm/components/_internal/shell-sidebar.d.ts +24 -6
  53. package/dist/esm/components/_internal/shell-sidebar.d.ts.map +1 -1
  54. package/dist/esm/components/_internal/shell-sidebar.js +1 -1
  55. package/dist/esm/components/_internal/shell-sidebar.js.map +3 -3
  56. package/dist/esm/components/chatbar.d.ts +9 -2
  57. package/dist/esm/components/chatbar.d.ts.map +1 -1
  58. package/dist/esm/components/chatbar.js +1 -1
  59. package/dist/esm/components/chatbar.js.map +3 -3
  60. package/dist/esm/components/shell.context.d.ts +88 -0
  61. package/dist/esm/components/shell.context.d.ts.map +1 -1
  62. package/dist/esm/components/shell.context.js +1 -1
  63. package/dist/esm/components/shell.context.js.map +3 -3
  64. package/dist/esm/components/shell.d.ts +51 -13
  65. package/dist/esm/components/shell.d.ts.map +1 -1
  66. package/dist/esm/components/shell.hooks.d.ts +7 -1
  67. package/dist/esm/components/shell.hooks.d.ts.map +1 -1
  68. package/dist/esm/components/shell.hooks.js +1 -1
  69. package/dist/esm/components/shell.hooks.js.map +3 -3
  70. package/dist/esm/components/shell.js +1 -1
  71. package/dist/esm/components/shell.js.map +3 -3
  72. package/dist/esm/components/shell.types.d.ts +1 -0
  73. package/dist/esm/components/shell.types.d.ts.map +1 -1
  74. package/dist/esm/components/shell.types.js.map +2 -2
  75. package/dist/esm/components/sidebar.d.ts +7 -1
  76. package/dist/esm/components/sidebar.d.ts.map +1 -1
  77. package/dist/esm/components/sidebar.js +1 -1
  78. package/dist/esm/components/sidebar.js.map +3 -3
  79. package/package.json +14 -3
  80. package/schemas/base-button.json +1 -1
  81. package/schemas/button.json +1 -1
  82. package/schemas/icon-button.json +1 -1
  83. package/schemas/index.json +6 -6
  84. package/schemas/toggle-button.json +1 -1
  85. package/schemas/toggle-icon-button.json +1 -1
  86. package/src/components/_internal/base-menu.css +17 -18
  87. package/src/components/_internal/base-sidebar-menu.css +23 -21
  88. package/src/components/_internal/base-sidebar.css +20 -0
  89. package/src/components/_internal/shell-bottom.tsx +176 -49
  90. package/src/components/_internal/shell-handles.tsx +29 -4
  91. package/src/components/_internal/shell-inspector.tsx +175 -43
  92. package/src/components/_internal/shell-sidebar.tsx +176 -69
  93. package/src/components/chatbar.css +240 -21
  94. package/src/components/chatbar.tsx +246 -290
  95. package/src/components/sheet.css +8 -16
  96. package/src/components/shell.context.tsx +79 -0
  97. package/src/components/shell.css +28 -2
  98. package/src/components/shell.hooks.ts +35 -0
  99. package/src/components/shell.tsx +574 -214
  100. package/src/components/shell.types.ts +2 -0
  101. package/src/components/sidebar.css +233 -33
  102. package/src/components/sidebar.tsx +247 -213
  103. package/styles.css +841 -204
@@ -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,\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 window.removeEventListener('pointerup', handleUp as any);\n window.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 window.addEventListener('pointerup', handleUp as any);\n window.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 current = parseFloat(getComputedStyle(container).getPropertyValue(cssVarName) || `${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 if (e.key === 'ArrowRight') delta = step;\n else if (e.key === 'ArrowLeft') delta = -step;\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 next = clamp(current + (edge === 'start' && orientation === 'vertical' ? -delta : delta));\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", "current", "step", "delta", "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 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"]
7
7
  }
@@ -1,11 +1,8 @@
1
1
  import * as React from 'react';
2
2
  import { InspectorHandle } from './shell-handles.js';
3
- import type { PaneMode, PaneSizePersistence, ResponsivePresentation } from '../shell.types.js';
3
+ import type { Breakpoint, PaneSizePersistence, ResponsivePresentation } from '../shell.types.js';
4
4
  interface PaneProps extends React.ComponentPropsWithoutRef<'div'> {
5
5
  presentation?: ResponsivePresentation;
6
- mode?: PaneMode;
7
- defaultMode?: any;
8
- onModeChange?: (mode: PaneMode) => void;
9
6
  expandedSize?: number;
10
7
  minSize?: number;
11
8
  maxSize?: number;
@@ -23,7 +20,28 @@ interface PaneProps extends React.ComponentPropsWithoutRef<'div'> {
23
20
  paneId?: string;
24
21
  persistence?: PaneSizePersistence;
25
22
  }
26
- type InspectorComponent = React.ForwardRefExoticComponent<PaneProps & React.RefAttributes<HTMLDivElement>> & {
23
+ type InspectorOpenChangeMeta = {
24
+ reason: 'init' | 'toggle' | 'responsive';
25
+ };
26
+ type InspectorControlledProps = {
27
+ open: boolean | Partial<Record<Breakpoint, boolean>>;
28
+ onOpenChange?: (open: boolean, meta: InspectorOpenChangeMeta) => void;
29
+ defaultOpen?: never;
30
+ };
31
+ type InspectorUncontrolledProps = {
32
+ defaultOpen?: boolean | Partial<Record<Breakpoint, boolean>>;
33
+ onOpenChange?: (open: boolean, meta: InspectorOpenChangeMeta) => void;
34
+ open?: never;
35
+ };
36
+ type InspectorSizeChangeMeta = {
37
+ reason: 'init' | 'resize' | 'controlled';
38
+ };
39
+ type InspectorPublicProps = PaneProps & (InspectorControlledProps | InspectorUncontrolledProps) & {
40
+ onSizeChange?: (size: number, meta: InspectorSizeChangeMeta) => void;
41
+ sizeUpdate?: 'throttle' | 'debounce';
42
+ sizeUpdateMs?: number;
43
+ };
44
+ type InspectorComponent = React.ForwardRefExoticComponent<InspectorPublicProps & React.RefAttributes<HTMLDivElement>> & {
27
45
  Handle: typeof InspectorHandle;
28
46
  };
29
47
  export declare const Inspector: InspectorComponent;
@@ -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,EAAc,QAAQ,EAAE,mBAAmB,EAAE,sBAAsB,EAAE,MAAM,mBAAmB,CAAC;AAE3G,UAAU,SAAU,SAAQ,KAAK,CAAC,wBAAwB,CAAC,KAAK,CAAC;IAC/D,YAAY,CAAC,EAAE,sBAAsB,CAAC;IACtC,IAAI,CAAC,EAAE,QAAQ,CAAC;IAChB,WAAW,CAAC,EAAE,GAAG,CAAC;IAClB,YAAY,CAAC,EAAE,CAAC,IAAI,EAAE,QAAQ,KAAK,IAAI,CAAC;IACxC,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,QAAQ,CAAC,EAAE,MAAM,IAAI,CAAC;IACtB,UAAU,CAAC,EAAE,MAAM,IAAI,CAAC;IACxB,QAAQ,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IAClC,OAAO,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAC1B,aAAa,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IACvC,WAAW,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IACrC,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;IACtB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,WAAW,CAAC,EAAE,mBAAmB,CAAC;CACnC;AAED,KAAK,kBAAkB,GAAG,KAAK,CAAC,yBAAyB,CAAC,SAAS,GAAG,KAAK,CAAC,aAAa,CAAC,cAAc,CAAC,CAAC,GAAG;IAAE,MAAM,EAAE,OAAO,eAAe,CAAA;CAAE,CAAC;AAEhJ,eAAO,MAAM,SAAS,EA0MjB,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,EAAY,mBAAmB,EAAE,sBAAsB,EAAE,MAAM,mBAAmB,CAAC;AAE3G,UAAU,SAAU,SAAQ,KAAK,CAAC,wBAAwB,CAAC,KAAK,CAAC;IAC/D,YAAY,CAAC,EAAE,sBAAsB,CAAC;IAEtC,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,QAAQ,CAAC,EAAE,MAAM,IAAI,CAAC;IACtB,UAAU,CAAC,EAAE,MAAM,IAAI,CAAC;IACxB,QAAQ,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IAClC,OAAO,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAC1B,aAAa,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IACvC,WAAW,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IACrC,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;IACtB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,WAAW,CAAC,EAAE,mBAAmB,CAAC;CACnC;AAED,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,oBAAoB,GAAG,SAAS,GACnC,CAAC,wBAAwB,GAAG,0BAA0B,CAAC,GAAG;IACxD,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;AAE3J,eAAO,MAAM,SAAS,EAqUjB,kBAAkB,CAAC"}
@@ -1,2 +1,2 @@
1
- import*as t from"react";import Q from"classnames";import*as M from"../sheet.js";import{VisuallyHidden as U}from"../visually-hidden.js";import{useShell as X}from"../shell.context.js";import{useResponsivePresentation as Y}from"../shell.hooks.js";import{PaneResizeContext as Z}from"./shell-resize.js";import{InspectorHandle as b,PaneHandle as _}from"./shell-handles.js";import{BREAKPOINTS as ee}from"../shell.types.js";const H=t.forwardRef(({className:N,presentation:A={initial:"overlay",lg:"fixed"},mode:s,defaultMode:p="collapsed",onModeChange:h,expandedSize:u=320,minSize:E=200,maxSize:B=500,resizable:f=!1,collapsible:O=!0,onExpand:x,onCollapse:g,onResize:m,onResizeStart:$,onResizeEnd:D,snapPoints:L,snapTolerance:V,collapseThreshold:K,paneId:y,persistence:P,children:j,style:q,...F},a)=>{const n=X(),v=Y(A),c=v==="overlay",W=v==="stacked",l=t.useRef(null),G=t.useCallback(e=>{l.current=e,typeof a=="function"?a(e):a&&(a.current=e)},[a]),I=t.Children.toArray(j),S=I.filter(e=>t.isValidElement(e)&&e.type===b),C=I.filter(e=>!(t.isValidElement(e)&&e.type===b)),z=t.useCallback(()=>{if(typeof p=="string")return p;const e=p;if(e&&e[n.currentBreakpoint])return e[n.currentBreakpoint];const r=[...Object.keys(ee)].reverse().concat("initial"),R=r.indexOf(n.currentBreakpoint);for(let i=R+1;i<r.length;i++){const w=r[i];if(e&&e[w])return e[w]}return"collapsed"},[p,n.currentBreakpoint]),T=t.useRef(null);t.useEffect(()=>{if(s!==void 0||!n.currentBreakpointReady||T.current===n.currentBreakpoint)return;T.current=n.currentBreakpoint;const e=z();e!==n.inspectorMode&&n.setInspectorMode(e)},[s,n.currentBreakpoint,n.currentBreakpointReady,z,n.inspectorMode,n.setInspectorMode]),t.useEffect(()=>{s!==void 0&&n.inspectorMode!==s&&n.setInspectorMode(s)},[s,n]),t.useEffect(()=>{s===void 0&&h?.(n.inspectorMode)},[n.inspectorMode,s,h]),t.useEffect(()=>{n.inspectorMode==="expanded"?x?.():g?.()},[n.inspectorMode,x,g]);const k=n.inspectorMode==="expanded",d=t.useMemo(()=>{if(!y||P)return P;const e=`kookie-ui:shell:inspector:${y}`;return{load:()=>{if(typeof window>"u")return;const r=window.localStorage.getItem(e);return r?Number(r):void 0},save:r=>{typeof window>"u"||window.localStorage.setItem(e,String(r))}}},[y,P]);t.useEffect(()=>{let e=!0;return(async()=>{if(!f||!d?.load||c)return;const o=await d.load();e&&typeof o=="number"&&l.current&&(l.current.style.setProperty("--inspector-size",`${o}px`),m?.(o))})(),()=>{e=!1}},[f,d,m,c]);const J=f&&!c&&k?t.createElement(Z.Provider,{value:{containerRef:l,cssVarName:"--inspector-size",minSize:E,maxSize:B,defaultSize:u,orientation:"vertical",edge:"start",computeNext:(e,o,r)=>{const R=getComputedStyle(l.current).direction==="rtl",i=e-o;return r+(R?i:-i)},onResize:m,onResizeStart:$,onResizeEnd:e=>{D?.(e),d?.save?.(e)},target:"inspector",collapsible:O,snapPoints:L,snapTolerance:V??8,collapseThreshold:K,requestCollapse:()=>n.setInspectorMode("collapsed"),requestToggle:()=>n.togglePane("inspector")}},S.length>0?S.map((e,o)=>t.cloneElement(e,{key:e.key??o})):t.createElement(_,null)):null;if(c){const e=n.inspectorMode==="expanded";return t.createElement(M.Root,{open:e,onOpenChange:o=>n.setInspectorMode(o?"expanded":"collapsed")},t.createElement(M.Content,{side:"end",style:{padding:0},width:{initial:`${u}px`}},t.createElement(U,null,t.createElement(M.Title,null,"Inspector")),C))}return t.createElement("div",{...F,ref:G,className:Q("rt-ShellInspector",N),"data-mode":n.inspectorMode,"data-peek":n.peekTarget==="inspector"||void 0,"data-presentation":v,"data-open":W&&k||void 0,style:{...q,"--inspector-size":`${u}px`,"--inspector-min-size":`${E}px`,"--inspector-max-size":`${B}px`}},t.createElement("div",{className:"rt-ShellInspectorContent","data-visible":k||void 0},C),J)});H.displayName="Shell.Inspector",H.Handle=b;export{H as Inspector};
1
+ import*as n from"react";import re from"classnames";import*as w from"../sheet.js";import{VisuallyHidden as se}from"../visually-hidden.js";import{useShell as ie}from"../shell.context.js";import{useResponsivePresentation as ae,useResponsiveValue as W}from"../shell.hooks.js";import{PaneResizeContext as de}from"./shell-resize.js";import{InspectorHandle as k,PaneHandle as ce}from"./shell-handles.js";import"../shell.types.js";const A=n.forwardRef(({className:L,presentation:j={initial:"overlay",lg:"fixed"},defaultOpen:p,open:c,onOpenChange:f,expandedSize:M=320,minSize:l=200,maxSize:u=500,resizable:g=!1,collapsible:q=!0,onExpand:O,onCollapse:T,onResize:R,onResizeStart:K,onResizeEnd:G,snapPoints:J,snapTolerance:Q,collapseThreshold:X,paneId:z,persistence:I,children:Y,style:Z,...i},m)=>{const t=ie(),v=ae(j),y=v==="overlay",ee=v==="stacked",d=n.useRef(null),ne=n.useCallback(e=>{d.current=e,typeof m=="function"?m(e):m&&(m.current=e)},[m]),D=n.Children.toArray(Y),H=D.filter(e=>n.isValidElement(e)&&e.type===k),F=D.filter(e=>!(n.isValidElement(e)&&e.type===k)),b=n.useMemo(()=>{const e=i.onSizeChange,o=i.sizeUpdate,s=i.sizeUpdateMs??50;if(!e)return()=>{};if(o==="debounce"){let r=null;return(a,N)=>{r&&clearTimeout(r),r=setTimeout(()=>{e(a,N)},s)}}if(o==="throttle"){let r=0;return(a,N)=>{const V=Date.now();V-r>=s&&(r=V,e(a,N))}}return(r,a)=>e(r,a)},[i.onSizeChange,i.sizeUpdate,i.sizeUpdateMs]),h=n.useRef(null);n.useEffect(()=>{const e=typeof c<"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)},[c]);const B=n.useRef(!1),U=n.useRef(!1),_=W(p);n.useEffect(()=>{if(!t.currentBreakpointReady||U.current||typeof c<"u"||typeof p>"u")return;const e=!!_;t.setInspectorMode(e?"expanded":"collapsed"),e&&f?.(!0,{reason:"init"}),U.current=!0},[t.currentBreakpointReady,_,p,c,f]);const x=W(c);n.useEffect(()=>{if(typeof x>"u")return;const e=!!x;e&&t.inspectorMode!=="expanded"&&t.setInspectorMode("expanded"),!e&&t.inspectorMode!=="collapsed"&&t.setInspectorMode("collapsed")},[x,t.inspectorMode]);const $=n.useRef(!1),C=n.useRef(null);n.useEffect(()=>{!$.current&&typeof c>"u"&&p&&t.inspectorMode==="expanded"&&(f?.(!0,{reason:"init"}),$.current=!0),typeof c>"u"&&(C.current!==null&&C.current!==t.inspectorMode&&(B.current||f?.(t.inspectorMode==="expanded",{reason:"toggle"}),B.current=!1),C.current=t.inspectorMode)},[t.inspectorMode,c,p,f]),n.useEffect(()=>{t.inspectorMode==="expanded"?O?.():T?.()},[t.inspectorMode,O,T]);const E=t.inspectorMode==="expanded",P=n.useMemo(()=>{if(!z||I)return I;const e=`kookie-ui:shell:inspector:${z}`;return{load:()=>{if(typeof window>"u")return;const s=window.localStorage.getItem(e);return s?Number(s):void 0},save:s=>{typeof window>"u"||window.localStorage.setItem(e,String(s))}}},[z,I]);n.useEffect(()=>{let e=!0;return(async()=>{if(!g||!P?.load||y)return;const o=await P.load();e&&typeof o=="number"&&d.current&&(d.current.style.setProperty("--inspector-size",`${o}px`),R?.(o))})(),()=>{e=!1}},[g,P,R,y]);const te=g&&!y&&E?n.createElement(de.Provider,{value:{containerRef:d,cssVarName:"--inspector-size",minSize:l,maxSize:u,defaultSize:M,orientation:"vertical",edge:"start",computeNext:(e,o,s)=>{const r=getComputedStyle(d.current).direction==="rtl",a=e-o;return s+(r?a:-a)},onResize:R,onResizeStart:K,onResizeEnd:e=>{G?.(e),b(e,{reason:"resize"}),P?.save?.(e)},target:"inspector",collapsible:q,snapPoints:J,snapTolerance:Q??8,collapseThreshold:X,requestCollapse:()=>t.setInspectorMode("collapsed"),requestToggle:()=>t.togglePane("inspector")}},H.length>0?H.map((e,o)=>n.cloneElement(e,{key:e.key??o})):n.createElement(ce,null)):null,S=n.useCallback(e=>{if(e==null)return;if(typeof e=="number"&&Number.isFinite(e))return e;const o=String(e).trim();if(!o)return;if(o.endsWith("px"))return Number.parseFloat(o);if(o.endsWith("rem")){const r=Number.parseFloat(getComputedStyle(document.documentElement).fontSize||"16")||16;return Number.parseFloat(o)*r}if(o.endsWith("%")){const r=Number.parseFloat(o),a=document.documentElement.clientWidth||window.innerWidth||0;return r/100*a}const s=Number.parseFloat(o);return Number.isFinite(s)?s:void 0},[]);if(n.useEffect(()=>{if(d.current&&typeof i.size>"u"&&typeof i.defaultSize<"u"){const e=S(i.defaultSize);if(typeof e=="number"&&Number.isFinite(e)){const r=Math.min((typeof u=="number"?u:void 0)??e,Math.max((typeof l=="number"?l:void 0)??e,e));d.current.style.setProperty("--inspector-size",`${r}px`),b(r,{reason:"init"})}}},[]),n.useEffect(()=>{if(!d.current||typeof i.size>"u")return;const e=S(i.size);if(typeof e=="number"&&Number.isFinite(e)){const r=Math.min((typeof u=="number"?u:void 0)??e,Math.max((typeof l=="number"?l:void 0)??e,e));d.current.style.setProperty("--inspector-size",`${r}px`),b(r,{reason:"controlled"})}},[i.size,l,u,S,b]),y){const e=t.inspectorMode==="expanded";return n.createElement(w.Root,{open:e,onOpenChange:o=>t.setInspectorMode(o?"expanded":"collapsed")},n.createElement(w.Content,{side:"end",style:{padding:0},width:{initial:`${M}px`}},n.createElement(se,null,n.createElement(w.Title,null,"Inspector")),F))}const{defaultOpen:le,open:ue,onOpenChange:pe,size:fe,defaultSize:me,onSizeChange:ye,sizeUpdate:be,sizeUpdateMs:he,...oe}=i;return n.createElement("div",{...oe,ref:ne,className:re("rt-ShellInspector",L),"data-mode":t.inspectorMode,"data-peek":t.peekTarget==="inspector"||void 0,"data-presentation":t.currentBreakpointReady?v:void 0,"data-open":t.currentBreakpointReady&&ee&&E||void 0,style:{...Z,"--inspector-size":`${M}px`,"--inspector-min-size":`${l}px`,"--inspector-max-size":`${u}px`}},n.createElement("div",{className:"rt-ShellInspectorContent","data-visible":E||void 0},F),te)});A.displayName="Shell.Inspector",A.Handle=k;export{A 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 } 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 } from '../shell.types.js';\n\ninterface PaneProps extends React.ComponentPropsWithoutRef<'div'> {\n presentation?: ResponsivePresentation;\n mode?: PaneMode;\n defaultMode?: any;\n onModeChange?: (mode: PaneMode) => void;\n expandedSize?: number;\n minSize?: number;\n maxSize?: number;\n resizable?: boolean;\n collapsible?: boolean;\n onExpand?: () => void;\n onCollapse?: () => void;\n onResize?: (size: number) => void;\n resizer?: React.ReactNode;\n onResizeStart?: (size: number) => void;\n onResizeEnd?: (size: number) => void;\n snapPoints?: number[];\n snapTolerance?: number;\n collapseThreshold?: number;\n paneId?: string;\n persistence?: PaneSizePersistence;\n}\n\ntype InspectorComponent = React.ForwardRefExoticComponent<PaneProps & React.RefAttributes<HTMLDivElement>> & { Handle: typeof InspectorHandle };\n\nexport const Inspector = React.forwardRef<HTMLDivElement, PaneProps>(\n (\n {\n className,\n presentation = { initial: 'overlay', lg: 'fixed' },\n mode,\n defaultMode = 'collapsed',\n onModeChange,\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 ...props\n },\n ref,\n ) => {\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 const resolveResponsiveMode = React.useCallback((): PaneMode => {\n if (typeof defaultMode === 'string') return defaultMode as PaneMode;\n const dm = defaultMode as Partial<Record<Breakpoint, PaneMode>> | undefined;\n if (dm && dm[shell.currentBreakpoint as Breakpoint]) {\n return dm[shell.currentBreakpoint as Breakpoint] as PaneMode;\n }\n const bpKeys = Object.keys(BREAKPOINTS) as Array<keyof typeof BREAKPOINTS>;\n const order: Breakpoint[] = ([...bpKeys].reverse() as Breakpoint[]).concat('initial' as Breakpoint);\n const startIdx = order.indexOf(shell.currentBreakpoint as Breakpoint);\n for (let i = startIdx + 1; i < order.length; i++) {\n const bp = order[i];\n if (dm && dm[bp]) {\n return dm[bp] as PaneMode;\n }\n }\n return 'collapsed';\n }, [defaultMode, shell.currentBreakpoint]);\n\n const lastInspectorBpRef = React.useRef<Breakpoint | null>(null);\n React.useEffect(() => {\n if (mode !== undefined) return;\n if (!shell.currentBreakpointReady) return;\n if (lastInspectorBpRef.current === shell.currentBreakpoint) return;\n lastInspectorBpRef.current = shell.currentBreakpoint as Breakpoint;\n const next = resolveResponsiveMode();\n if (next !== shell.inspectorMode) {\n shell.setInspectorMode(next);\n }\n }, [mode, shell.currentBreakpoint, shell.currentBreakpointReady, resolveResponsiveMode, shell.inspectorMode, shell.setInspectorMode]);\n\n React.useEffect(() => {\n if (mode !== undefined && shell.inspectorMode !== mode) {\n shell.setInspectorMode(mode);\n }\n }, [mode, shell]);\n\n React.useEffect(() => {\n if (mode === undefined) {\n onModeChange?.(shell.inspectorMode);\n }\n }, [shell.inspectorMode, mode, onModeChange]);\n\n React.useEffect(() => {\n if (shell.inspectorMode === 'expanded') {\n onExpand?.();\n } else {\n onCollapse?.();\n }\n }, [shell.inspectorMode, 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 const v = window.localStorage.getItem(key);\n return v ? Number(v) : undefined;\n },\n save: (size: number) => {\n if (typeof window === 'undefined') return;\n window.localStorage.setItem(key, String(size));\n },\n };\n return adapter;\n }, [paneId, persistence]);\n\n React.useEffect(() => {\n let mounted = true;\n (async () => {\n if (!resizable || !persistenceAdapter?.load || isOverlay) return;\n const loaded = await persistenceAdapter.load();\n if (mounted && typeof loaded === 'number' && localRef.current) {\n localRef.current.style.setProperty('--inspector-size', `${loaded}px`);\n onResize?.(loaded);\n }\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 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 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 return (\n <div\n {...props}\n ref={setRef}\n className={classNames('rt-ShellInspector', className)}\n data-mode={shell.inspectorMode}\n data-peek={shell.peekTarget === 'inspector' || undefined}\n data-presentation={resolvedPresentation}\n data-open={(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 },\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", "PaneResizeContext", "InspectorHandle", "PaneHandle", "BREAKPOINTS", "Inspector", "className", "presentation", "mode", "defaultMode", "onModeChange", "expandedSize", "minSize", "maxSize", "resizable", "collapsible", "onExpand", "onCollapse", "onResize", "onResizeStart", "onResizeEnd", "snapPoints", "snapTolerance", "collapseThreshold", "paneId", "persistence", "children", "style", "props", "ref", "shell", "resolvedPresentation", "isOverlay", "isStacked", "localRef", "setRef", "node", "childArray", "handleChildren", "el", "contentChildren", "resolveResponsiveMode", "dm", "order", "startIdx", "bp", "lastInspectorBpRef", "next", "isExpanded", "persistenceAdapter", "key", "v", "size", "mounted", "loaded", "handleEl", "client", "startClient", "startSize", "isRtl", "delta", "i", "open"]
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, useResponsiveValue } 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 } from '../shell.types.js';\n\ninterface PaneProps extends React.ComponentPropsWithoutRef<'div'> {\n presentation?: ResponsivePresentation;\n // legacy mode removed\n expandedSize?: number;\n minSize?: number;\n maxSize?: number;\n resizable?: boolean;\n collapsible?: boolean;\n onExpand?: () => void;\n onCollapse?: () => void;\n onResize?: (size: number) => void;\n resizer?: React.ReactNode;\n onResizeStart?: (size: number) => void;\n onResizeEnd?: (size: number) => void;\n snapPoints?: number[];\n snapTolerance?: number;\n collapseThreshold?: number;\n paneId?: string;\n persistence?: PaneSizePersistence;\n}\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 InspectorPublicProps = PaneProps &\n (InspectorControlledProps | InspectorUncontrolledProps) & {\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\nexport const Inspector = React.forwardRef<HTMLDivElement, InspectorPublicProps>(\n (\n {\n className,\n presentation = { initial: 'overlay', lg: 'fixed' },\n // removed legacy props\n // new API\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 ...props\n },\n ref,\n ) => {\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 emitSizeChange = React.useMemo(() => {\n const cb = (props as any).onSizeChange as undefined | ((s: number, meta: InspectorSizeChangeMeta) => void);\n const strategy = (props as any).sizeUpdate as undefined | 'throttle' | 'debounce';\n const ms = (props as any).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 }, [(props as any).onSizeChange, (props as any).sizeUpdate, (props as any).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 // eslint-disable-next-line no-console\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 // eslint-disable-next-line no-console\n console.warn('Shell.Inspector: Switching between controlled and uncontrolled `open` is not supported.');\n wasControlledRef.current = isControlled;\n }\n }, [open]);\n\n const responsiveNotifiedRef = React.useRef(false);\n const didInitFromDefaultOpenRef = React.useRef(false);\n const resolvedDefaultOpen = useResponsiveValue(defaultOpen);\n React.useEffect(() => {\n if (!shell.currentBreakpointReady) return;\n if (didInitFromDefaultOpenRef.current) return;\n if (typeof open !== 'undefined') return; // controlled ignores default\n if (typeof defaultOpen === 'undefined') return;\n const initialOpen = Boolean(resolvedDefaultOpen);\n shell.setInspectorMode(initialOpen ? 'expanded' : 'collapsed');\n if (initialOpen) onOpenChange?.(true, { reason: 'init' });\n didInitFromDefaultOpenRef.current = true;\n }, [shell.currentBreakpointReady, resolvedDefaultOpen, defaultOpen, open, onOpenChange]);\n\n // Controlled responsive open\n const resolvedOpen = useResponsiveValue(open);\n React.useEffect(() => {\n if (typeof resolvedOpen === 'undefined') return;\n const shouldExpand = Boolean(resolvedOpen);\n if (shouldExpand && shell.inspectorMode !== 'expanded') shell.setInspectorMode('expanded');\n if (!shouldExpand && shell.inspectorMode !== 'collapsed') shell.setInspectorMode('collapsed');\n }, [resolvedOpen, shell.inspectorMode]);\n\n // Removed boolean-only mount init; handled in responsive init effect above\n\n // Removed: boolean-only controlled sync. Use responsive-resolved effect below instead.\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 if (!responsiveNotifiedRef.current) {\n onOpenChange?.(shell.inspectorMode === 'expanded', { reason: 'toggle' });\n }\n responsiveNotifiedRef.current = false;\n }\n lastInspectorModeRef.current = shell.inspectorMode;\n }\n }, [shell.inspectorMode, open, defaultOpen, onOpenChange]);\n\n React.useEffect(() => {\n if (shell.inspectorMode === 'expanded') {\n onExpand?.();\n } else {\n onCollapse?.();\n }\n }, [shell.inspectorMode, 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 const v = window.localStorage.getItem(key);\n return v ? Number(v) : undefined;\n },\n save: (size: number) => {\n if (typeof window === 'undefined') return;\n window.localStorage.setItem(key, String(size));\n },\n };\n return adapter;\n }, [paneId, persistence]);\n\n React.useEffect(() => {\n let mounted = true;\n (async () => {\n if (!resizable || !persistenceAdapter?.load || isOverlay) return;\n const loaded = await persistenceAdapter.load();\n if (mounted && typeof loaded === 'number' && localRef.current) {\n localRef.current.style.setProperty('--inspector-size', `${loaded}px`);\n onResize?.(loaded);\n }\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 (props as any).size === 'undefined' && typeof (props as any).defaultSize !== 'undefined') {\n const px = normalizeToPx((props as any).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 React.useEffect(() => {\n if (!localRef.current) return;\n if (typeof (props as any).size === 'undefined') return;\n const px = normalizeToPx((props as any).size);\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 }, [(props as any).size, 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 const {\n defaultOpen: _inspectorDefaultOpenIgnored,\n open: _inspectorOpenIgnored,\n onOpenChange: _inspectorOnOpenChangeIgnored,\n size: _sz,\n defaultSize: _dsz,\n onSizeChange: _osc,\n sizeUpdate: _szu,\n sizeUpdateMs: _szums,\n ...inspectorDomProps\n } = props as any;\n\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 },\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", "useResponsiveValue", "PaneResizeContext", "InspectorHandle", "PaneHandle", "Inspector", "className", "presentation", "defaultOpen", "open", "onOpenChange", "expandedSize", "minSize", "maxSize", "resizable", "collapsible", "onExpand", "onCollapse", "onResize", "onResizeStart", "onResizeEnd", "snapPoints", "snapTolerance", "collapseThreshold", "paneId", "persistence", "children", "style", "props", "ref", "shell", "resolvedPresentation", "isOverlay", "isStacked", "localRef", "setRef", "node", "childArray", "handleChildren", "el", "contentChildren", "emitSizeChange", "cb", "strategy", "ms", "t", "s", "meta", "last", "now", "wasControlledRef", "isControlled", "responsiveNotifiedRef", "didInitFromDefaultOpenRef", "resolvedDefaultOpen", "initialOpen", "resolvedOpen", "shouldExpand", "initNotifiedRef", "lastInspectorModeRef", "isExpanded", "persistenceAdapter", "key", "v", "size", "mounted", "loaded", "handleEl", "client", "startClient", "startSize", "isRtl", "delta", "i", "normalizeToPx", "value", "str", "rem", "pct", "base", "n", "px", "clamped", "_inspectorDefaultOpenIgnored", "_inspectorOpenIgnored", "_inspectorOnOpenChangeIgnored", "_sz", "_dsz", "_osc", "_szu", "_szums", "inspectorDomProps"]
7
7
  }
@@ -1,6 +1,6 @@
1
1
  import * as React from 'react';
2
2
  import { SidebarHandle } from './shell-handles.js';
3
- import type { PaneMode, PaneSizePersistence, ResponsivePresentation, ResponsiveSidebarMode, SidebarMode } from '../shell.types.js';
3
+ import type { Breakpoint, PaneMode, PaneSizePersistence, ResponsivePresentation, SidebarMode, Responsive } from '../shell.types.js';
4
4
  interface PaneProps extends React.ComponentPropsWithoutRef<'div'> {
5
5
  presentation?: ResponsivePresentation;
6
6
  mode?: PaneMode;
@@ -23,13 +23,31 @@ interface PaneProps extends React.ComponentPropsWithoutRef<'div'> {
23
23
  paneId?: string;
24
24
  persistence?: PaneSizePersistence;
25
25
  }
26
- type SidebarComponent = React.ForwardRefExoticComponent<Omit<PaneProps, 'mode' | 'defaultMode' | 'onModeChange'> & {
27
- mode?: SidebarMode;
28
- defaultMode?: ResponsiveSidebarMode;
29
- onModeChange?: (mode: SidebarMode) => void;
26
+ type SidebarStateChangeMeta = {
27
+ reason: 'init' | 'toggle' | 'responsive';
28
+ };
29
+ type SidebarControlledProps = {
30
+ state: Responsive<SidebarMode>;
31
+ onStateChange?: (state: SidebarMode, meta: SidebarStateChangeMeta) => void;
32
+ defaultState?: never;
33
+ };
34
+ type SidebarUncontrolledProps = {
35
+ defaultState?: SidebarMode | Partial<Record<Breakpoint, SidebarMode>>;
36
+ onStateChange?: (state: SidebarMode, meta: SidebarStateChangeMeta) => void;
37
+ state?: never;
38
+ };
39
+ type SidebarPublicProps = Omit<PaneProps, 'mode' | 'defaultMode' | 'onModeChange'> & {
30
40
  thinSize?: number;
31
41
  toggleModes?: 'both' | 'single';
32
- } & React.RefAttributes<HTMLDivElement>> & {
42
+ size?: number | string;
43
+ defaultSize?: number | string;
44
+ onSizeChange?: (size: number, meta: {
45
+ reason: 'init' | 'resize' | 'controlled';
46
+ }) => void;
47
+ sizeUpdate?: 'throttle' | 'debounce';
48
+ sizeUpdateMs?: number;
49
+ } & (SidebarControlledProps | SidebarUncontrolledProps);
50
+ type SidebarComponent = React.ForwardRefExoticComponent<SidebarPublicProps & React.RefAttributes<HTMLDivElement>> & {
33
51
  Handle: typeof SidebarHandle;
34
52
  };
35
53
  export declare const Sidebar: SidebarComponent;
@@ -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;AAO/B,OAAO,EAAE,aAAa,EAAc,MAAM,oBAAoB,CAAC;AAC/D,OAAO,KAAK,EAAc,QAAQ,EAAE,mBAAmB,EAAqB,sBAAsB,EAAE,qBAAqB,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAGlK,UAAU,SAAU,SAAQ,KAAK,CAAC,wBAAwB,CAAC,KAAK,CAAC;IAC/D,YAAY,CAAC,EAAE,sBAAsB,CAAC;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;IACtD,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,QAAQ,CAAC,EAAE,MAAM,IAAI,CAAC;IACtB,UAAU,CAAC,EAAE,MAAM,IAAI,CAAC;IACxB,QAAQ,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IAClC,OAAO,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAC1B,aAAa,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IACvC,WAAW,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IACrC,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;IACtB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,WAAW,CAAC,EAAE,mBAAmB,CAAC;CACnC;AAED,KAAK,gBAAgB,GAAG,KAAK,CAAC,yBAAyB,CACrD,IAAI,CAAC,SAAS,EAAE,MAAM,GAAG,aAAa,GAAG,cAAc,CAAC,GAAG;IACzD,IAAI,CAAC,EAAE,WAAW,CAAC;IACnB,WAAW,CAAC,EAAE,qBAAqB,CAAC;IACpC,YAAY,CAAC,EAAE,CAAC,IAAI,EAAE,WAAW,KAAK,IAAI,CAAC;IAC3C,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,GAAG,QAAQ,CAAC;CACjC,GAAG,KAAK,CAAC,aAAa,CAAC,cAAc,CAAC,CACxC,GAAG;IAAE,MAAM,EAAE,OAAO,aAAa,CAAA;CAAE,CAAC;AAErC,eAAO,MAAM,OAAO,EA2Sf,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;AAO/B,OAAO,EAAE,aAAa,EAAc,MAAM,oBAAoB,CAAC;AAC/D,OAAO,KAAK,EAAE,UAAU,EAAE,QAAQ,EAAE,mBAAmB,EAAqB,sBAAsB,EAAyB,WAAW,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAG9K,UAAU,SAAU,SAAQ,KAAK,CAAC,wBAAwB,CAAC,KAAK,CAAC;IAC/D,YAAY,CAAC,EAAE,sBAAsB,CAAC;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;IACtD,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,QAAQ,CAAC,EAAE,MAAM,IAAI,CAAC;IACtB,UAAU,CAAC,EAAE,MAAM,IAAI,CAAC;IACxB,QAAQ,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IAClC,OAAO,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAC1B,aAAa,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IACvC,WAAW,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IACrC,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;IACtB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,WAAW,CAAC,EAAE,mBAAmB,CAAC;CACnC;AAED,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,SAAS,EAAE,MAAM,GAAG,aAAa,GAAG,cAAc,CAAC,GAAG;IAEnF,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;AAErJ,eAAO,MAAM,OAAO,EA+Yf,gBAAgB,CAAC"}
@@ -1,2 +1,2 @@
1
- import*as r from"react";import ne from"classnames";import*as P from"../sheet.js";import{VisuallyHidden as ae}from"../visually-hidden.js";import{useShell as D}from"../shell.context.js";import{useResponsivePresentation as oe}from"../shell.hooks.js";import{PaneResizeContext as ie}from"./shell-resize.js";import{SidebarHandle as C,PaneHandle as se}from"./shell-handles.js";import{BREAKPOINTS as de}from"../shell.types.js";const L=r.forwardRef(({className:K,presentation:j={initial:"overlay",md:"fixed"},mode:o,defaultMode:d="expanded",onModeChange:E,expandedSize:s=288,minSize:x=200,maxSize:B=400,resizable:S=!1,collapsible:q=!0,onExpand:T,onCollapse:w,onResize:h,onResizeStart:F,onResizeEnd:W,snapPoints:G,snapTolerance:J,collapseThreshold:Q,paneId:y,persistence:v,children:U,style:X,thinSize:c=64,toggleModes:R,...Y},u)=>{const t=D(),g=oe(j),p=g==="overlay",Z=g==="stacked",b=r.useRef(null),_=r.useCallback(e=>{b.current=e,typeof u=="function"?u(e):u&&(u.current=e)},[u]),H=r.Children.toArray(U),O=H.filter(e=>r.isValidElement(e)&&e.type===C),z=H.filter(e=>!(r.isValidElement(e)&&e.type===C)),ee=r.useId();r.useEffect(()=>(t.setHasSidebar(!0),()=>{t.setHasSidebar(!1)}),[t,ee]);const N=r.useRef(!1);r.useEffect(()=>{N.current||(N.current=!0,o===void 0&&t.sidebarMode!==d&&t.setSidebarMode(d))},[]),r.useEffect(()=>{o!==void 0&&t.sidebarMode!==o&&t.setSidebarMode(o)},[o,t]),r.useEffect(()=>{o===void 0&&E?.(t.sidebarMode)},[t.sidebarMode,o,E]),r.useEffect(()=>{t.sidebarMode==="expanded"?T?.():w?.()},[t.sidebarMode,T,w]);const $=t.sidebarMode!=="collapsed",f=r.useMemo(()=>{if(!y||v)return v;const e=`kookie-ui:shell:sidebar:${y}`;return{load:()=>{if(typeof window>"u")return;const n=window.localStorage.getItem(e);return n?Number(n):void 0},save:n=>{typeof window>"u"||window.localStorage.setItem(e,String(n))}}},[y,v]);r.useEffect(()=>{let e=!0;return(async()=>{if(!S||!f?.load||p)return;const a=await f.load();e&&typeof a=="number"&&b.current&&(b.current.style.setProperty("--sidebar-size",`${a}px`),h?.(a))})(),()=>{e=!1}},[S,f,h,p]);const m=r.useCallback(()=>{if(typeof d=="string")return d;const e=d;if(e&&e[t.currentBreakpoint])return e[t.currentBreakpoint];const n=[...Object.keys(de)].reverse().concat("initial"),i=n.indexOf(t.currentBreakpoint);for(let l=i+1;l<n.length;l++){const V=n[l];if(e&&e[V])return e[V]}return"collapsed"},[d,t.currentBreakpoint]),M=D(),k=r.useCallback(()=>{const e=m();return e==="thin"||e==="expanded"?e:"expanded"},[m]);r.useEffect(()=>{if(!M.setSidebarToggleComputer)return;const e=R??"both",a=n=>{if(e==="both")return n==="collapsed"?"thin":n==="thin"?"expanded":"collapsed";const i=k();return n==="collapsed"?i:n===i?"collapsed":i};return M.setSidebarToggleComputer(a),()=>{M.setSidebarToggleComputer?.(n=>n==="collapsed"?"thin":n==="thin"?"expanded":"collapsed")}},[M,R,k]);const A=r.useRef(s),te=r.useRef("expanded");r.useEffect(()=>{t.sidebarMode!=="collapsed"&&(te.current=t.sidebarMode,A.current=t.sidebarMode==="thin"?c:s)},[t.sidebarMode,c,s]);const I=r.useRef(null);r.useEffect(()=>{if(o!==void 0||!t.currentBreakpointReady||I.current===t.currentBreakpoint)return;I.current=t.currentBreakpoint;const e=m();e!==t.sidebarMode&&t.setSidebarMode(e)},[o,t.currentBreakpoint,t.currentBreakpointReady,m,t.sidebarMode,t.setSidebarMode]);const re=S&&!p&&t.sidebarMode==="expanded"?r.createElement(ie.Provider,{value:{containerRef:b,cssVarName:"--sidebar-size",minSize:x,maxSize:B,defaultSize:s,orientation:"vertical",edge:"end",computeNext:(e,a,n)=>{const i=getComputedStyle(b.current).direction==="rtl",l=e-a;return n+(i?-l:l)},onResize:h,onResizeStart:F,onResizeEnd:e=>{W?.(e),f?.save?.(e)},target:"sidebar",collapsible:q,snapPoints:G,snapTolerance:J??8,collapseThreshold:Q,requestCollapse:()=>t.setSidebarMode("collapsed"),requestToggle:()=>t.togglePane("sidebar")}},O.length>0?O.map((e,a)=>r.cloneElement(e,{key:e.key??a})):r.createElement(se,null)):null;if(p){const e=t.sidebarMode!=="collapsed";return r.createElement(P.Root,{open:e,onOpenChange:a=>t.setSidebarMode(a?"expanded":"collapsed")},r.createElement(P.Content,{side:"start",style:{padding:0},width:{initial:`${e?t.sidebarMode==="thin"?c:s:A.current}px`}},r.createElement(ae,null,r.createElement(P.Title,null,"Sidebar")),z))}return r.createElement("div",{...Y,ref:_,className:ne("rt-ShellSidebar",K),"data-mode":t.sidebarMode,"data-peek":t.peekTarget==="sidebar"||void 0,"data-presentation":g,"data-open":Z&&$||void 0,style:{...X,"--sidebar-size":`${s}px`,"--sidebar-thin-size":`${c}px`,"--sidebar-min-size":`${x}px`,"--sidebar-max-size":`${B}px`,...t.peekTarget==="sidebar"&&t.sidebarMode==="collapsed"&&!p?(()=>{const e=R??"both",a=t.sidebarMode;let n;if(e==="both")n=a==="collapsed"?"thin":a==="thin"?"expanded":"collapsed";else{const i=k();n=a==="collapsed"?i:"collapsed"}return n==="thin"?{"--peek-sidebar-width":`${c}px`}:{"--peek-sidebar-width":`var(--sidebar-size, ${s}px)`}})():{}}},r.createElement("div",{className:"rt-ShellSidebarContent","data-visible":$||void 0},z),re)});L.displayName="Shell.Sidebar",L.Handle=C;export{L as Sidebar};
1
+ import*as r from"react";import ue from"classnames";import*as D from"../sheet.js";import{VisuallyHidden as ce}from"../visually-hidden.js";import{useShell as j}from"../shell.context.js";import{useResponsivePresentation as fe,useResponsiveValue as q}from"../shell.hooks.js";import{PaneResizeContext as be}from"./shell-resize.js";import{SidebarHandle as F,PaneHandle as pe}from"./shell-handles.js";import"../shell.types.js";const K=r.forwardRef(({className:G,presentation:J={initial:"overlay",md:"fixed"},expandedSize:u=288,minSize:c=200,maxSize:f=400,resizable:C=!1,collapsible:Q=!0,onExpand:$,onCollapse:U,onResize:z,onResizeStart:X,onResizeEnd:Y,snapPoints:Z,snapTolerance:ee,collapseThreshold:te,paneId:x,persistence:E,children:ne,style:re,thinSize:y=64,toggleModes:w,state:b,defaultState:p,onStateChange:N,...s},S)=>{const t=j(),k=fe(J),M=k==="overlay",oe=k==="stacked",d=r.useRef(null),ae=r.useCallback(e=>{d.current=e,typeof S=="function"?S(e):S&&(S.current=e)},[S]),V=r.Children.toArray(ne),_=V.filter(e=>r.isValidElement(e)&&e.type===F),O=V.filter(e=>!(r.isValidElement(e)&&e.type===F)),h=r.useMemo(()=>{const e=s.onSizeChange,n=s.sizeUpdate,o=s.sizeUpdateMs??50;if(!e)return()=>{};if(n==="debounce"){let a=null;return(i,m)=>{a&&clearTimeout(a),a=setTimeout(()=>{e(i,m)},o)}}if(n==="throttle"){let a=0;return(i,m)=>{const L=Date.now();L-a>=o&&(a=L,e(i,m))}}return(a,i)=>e(a,i)},[s.onSizeChange,s.sizeUpdate,s.sizeUpdateMs]),ie=r.useId();r.useEffect(()=>(t.setHasSidebar(!0),()=>{t.setHasSidebar(!1)}),[t,ie]);const g=r.useRef(null);r.useEffect(()=>{const e=typeof b<"u";if(g.current===null){g.current=e;return}g.current!==e&&(console.warn("Shell.Sidebar: Switching between controlled and uncontrolled `state` is not supported."),g.current=e)},[b]);const l=q(b),B=q(p),W=r.useRef(!1);r.useEffect(()=>{if(!W.current&&t.currentBreakpointReady){if(W.current=!0,typeof b<"u"&&l){t.sidebarMode!==l&&t.setSidebarMode(l);return}if(typeof p<"u"){const e=B??p;t.sidebarMode!==e&&t.setSidebarMode(e),N?.(e,{reason:"init"});return}}},[t.currentBreakpointReady,B,l,b,p]),r.useEffect(()=>{l!==void 0&&t.sidebarMode!==l&&t.setSidebarMode(l)},[l,t.sidebarMode]);const P=r.useRef(null);r.useEffect(()=>{typeof b>"u"&&(P.current===null?P.current=t.sidebarMode:P.current!==t.sidebarMode&&(P.current=t.sidebarMode,N?.(t.sidebarMode,{reason:"toggle"})))},[t.sidebarMode,b,N]),r.useEffect(()=>{t.sidebarMode==="expanded"?$?.():U?.()},[t.sidebarMode,$,U]);const A=t.sidebarMode!=="collapsed",v=r.useMemo(()=>{if(!x||E)return E;const e=`kookie-ui:shell:sidebar:${x}`;return{load:()=>{if(typeof window>"u")return;const o=window.localStorage.getItem(e);return o?Number(o):void 0},save:o=>{typeof window>"u"||window.localStorage.setItem(e,String(o))}}},[x,E]);r.useEffect(()=>{let e=!0;return(async()=>{if(!C||!v?.load||M)return;const n=await v.load();e&&typeof n=="number"&&d.current&&(d.current.style.setProperty("--sidebar-size",`${n}px`),z?.(n))})(),()=>{e=!1}},[C,v,z,M]);const R=j(),T=r.useCallback(()=>{const e=p??"expanded";return e==="thin"||e==="expanded"?e:"expanded"},[p]);r.useEffect(()=>{if(!R.setSidebarToggleComputer)return;const e=w??"both",n=o=>{if(e==="both")return o==="collapsed"?"thin":o==="thin"?"expanded":"collapsed";const a=T();return o==="collapsed"?a:o===a?"collapsed":a};return R.setSidebarToggleComputer(n),()=>{R.setSidebarToggleComputer?.(o=>o==="collapsed"?"thin":o==="thin"?"expanded":"collapsed")}},[R,w,T]);const I=r.useRef(u),se=r.useRef("expanded");r.useEffect(()=>{t.sidebarMode!=="collapsed"&&(se.current=t.sidebarMode,I.current=t.sidebarMode==="thin"?y:u)},[t.sidebarMode,y,u]);const de=C&&!M&&t.sidebarMode==="expanded"?r.createElement(be.Provider,{value:{containerRef:d,cssVarName:"--sidebar-size",minSize:c,maxSize:f,defaultSize:u,orientation:"vertical",edge:"end",computeNext:(e,n,o)=>{const a=getComputedStyle(d.current).direction==="rtl",i=e-n;return o+(a?-i:i)},onResize:z,onResizeStart:X,onResizeEnd:e=>{Y?.(e),h(e,{reason:"resize"}),v?.save?.(e)},target:"sidebar",collapsible:Q,snapPoints:Z,snapTolerance:ee??8,collapseThreshold:te,requestCollapse:()=>t.setSidebarMode("collapsed"),requestToggle:()=>t.togglePane("sidebar")}},_.length>0?_.map((e,n)=>r.cloneElement(e,{key:e.key??n})):r.createElement(pe,null)):null,{state:me,defaultState:ye,onStateChange:Se,size:Me,defaultSize:he,onSizeChange:ge,sizeUpdate:Pe,sizeUpdateMs:ve,...le}=s,H=r.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},[]);if(r.useEffect(()=>{if(!d.current)return;const{size:e,defaultSize:n}=s;if(typeof e>"u"&&typeof n<"u"){const o=H(n);if(typeof o=="number"&&Number.isFinite(o)){const m=Math.min((typeof f=="number"?f:void 0)??o,Math.max((typeof c=="number"?c:void 0)??o,o));d.current.style.setProperty("--sidebar-size",`${m}px`),h(m,{reason:"init"})}}},[]),r.useEffect(()=>{if(!d.current)return;const{size:e}=s;if(typeof e>"u")return;const n=H(e);if(typeof n=="number"&&Number.isFinite(n)){const i=Math.min((typeof f=="number"?f:void 0)??n,Math.max((typeof c=="number"?c:void 0)??n,n));d.current.style.setProperty("--sidebar-size",`${i}px`),h(i,{reason:"controlled"})}},[s.size,c,f,H,h]),M){const e=t.sidebarMode!=="collapsed";return r.createElement(D.Root,{open:e,onOpenChange:n=>t.setSidebarMode(n?"expanded":"collapsed")},r.createElement(D.Content,{side:"start",style:{padding:0},width:{initial:`${e?t.sidebarMode==="thin"?y:u:I.current}px`}},r.createElement(ce,null,r.createElement(D.Title,null,"Navigation")),O))}return r.createElement("div",{...le,ref:ae,className:ue("rt-ShellSidebar",G),"data-mode":t.sidebarMode,"data-peek":t.peekTarget==="sidebar"||void 0,"data-presentation":t.currentBreakpointReady?k:void 0,"data-open":t.currentBreakpointReady&&oe&&A||void 0,style:{...re,"--sidebar-size":`${u}px`,"--sidebar-thin-size":`${y}px`,"--sidebar-min-size":`${c}px`,"--sidebar-max-size":`${f}px`,...t.peekTarget==="sidebar"&&t.sidebarMode==="collapsed"&&!M?(()=>{const e=w??"both",n=t.sidebarMode;let o;if(e==="both")o=n==="collapsed"?"thin":n==="thin"?"expanded":"collapsed";else{const a=T();o=n==="collapsed"?a:"collapsed"}return o==="thin"?{"--peek-sidebar-width":`${y}px`}:{"--peek-sidebar-width":`var(--sidebar-size, ${u}px)`}})():{}}},r.createElement("div",{className:"rt-ShellSidebarContent","data-visible":A||void 0},O),de)});K.displayName="Shell.Sidebar",K.Handle=F;export{K as Sidebar};
2
2
  //# sourceMappingURL=shell-sidebar.js.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../src/components/_internal/shell-sidebar.tsx"],
4
- "sourcesContent": ["import * as React from 'react';\nimport classNames from 'classnames';\nimport * as Sheet from '../sheet.js';\nimport { VisuallyHidden } from '../visually-hidden.js';\nimport { useShell } from '../shell.context.js';\nimport { useResponsivePresentation } from '../shell.hooks.js';\nimport { PaneResizeContext } from './shell-resize.js';\nimport { SidebarHandle, PaneHandle } from './shell-handles.js';\nimport type { Breakpoint, PaneMode, PaneSizePersistence, PresentationValue, ResponsivePresentation, ResponsiveSidebarMode, SidebarMode } from '../shell.types.js';\nimport { BREAKPOINTS } from '../shell.types.js';\n\ninterface PaneProps extends React.ComponentPropsWithoutRef<'div'> {\n presentation?: ResponsivePresentation;\n mode?: PaneMode;\n defaultMode?: any;\n onModeChange?: (mode: PaneMode | SidebarMode) => void;\n expandedSize?: number;\n minSize?: number;\n maxSize?: number;\n resizable?: boolean;\n collapsible?: boolean;\n onExpand?: () => void;\n onCollapse?: () => void;\n onResize?: (size: number) => void;\n resizer?: React.ReactNode;\n onResizeStart?: (size: number) => void;\n onResizeEnd?: (size: number) => void;\n snapPoints?: number[];\n snapTolerance?: number;\n collapseThreshold?: number;\n paneId?: string;\n persistence?: PaneSizePersistence;\n}\n\ntype SidebarComponent = React.ForwardRefExoticComponent<\n Omit<PaneProps, 'mode' | 'defaultMode' | 'onModeChange'> & {\n mode?: SidebarMode;\n defaultMode?: ResponsiveSidebarMode;\n onModeChange?: (mode: SidebarMode) => void;\n thinSize?: number;\n toggleModes?: 'both' | 'single';\n } & React.RefAttributes<HTMLDivElement>\n> & { Handle: typeof SidebarHandle };\n\nexport const Sidebar = React.forwardRef<\n HTMLDivElement,\n Omit<PaneProps, 'mode' | 'defaultMode' | 'onModeChange'> & {\n mode?: SidebarMode;\n defaultMode?: ResponsiveSidebarMode;\n onModeChange?: (mode: SidebarMode) => void;\n thinSize?: number;\n toggleModes?: 'both' | 'single';\n }\n>(\n (\n {\n className,\n presentation = { initial: 'overlay', md: 'fixed' },\n mode,\n defaultMode = 'expanded',\n onModeChange,\n expandedSize = 288,\n minSize = 200,\n maxSize = 400,\n resizable = false,\n collapsible = true,\n onExpand,\n onCollapse,\n onResize,\n onResizeStart,\n onResizeEnd,\n snapPoints,\n snapTolerance,\n collapseThreshold,\n paneId,\n persistence,\n children,\n style,\n thinSize = 64,\n toggleModes,\n ...props\n },\n ref,\n ) => {\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 === SidebarHandle);\n const contentChildren = childArray.filter((el: React.ReactElement) => !(React.isValidElement(el) && el.type === SidebarHandle));\n\n // Register with shell\n const sidebarId = React.useId();\n React.useEffect(() => {\n shell.setHasSidebar(true);\n return () => {\n shell.setHasSidebar(false);\n };\n }, [shell, sidebarId]);\n\n // Honor defaultMode on mount when uncontrolled\n const didInitRef = React.useRef(false);\n React.useEffect(() => {\n if (didInitRef.current) return;\n didInitRef.current = true;\n if (mode === undefined && shell.sidebarMode !== (defaultMode as SidebarMode)) {\n shell.setSidebarMode(defaultMode as SidebarMode);\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n // Sync controlled mode\n React.useEffect(() => {\n if (mode !== undefined && shell.sidebarMode !== mode) {\n shell.setSidebarMode(mode);\n }\n }, [mode, shell]);\n\n // Emit mode changes\n React.useEffect(() => {\n if (mode === undefined) {\n onModeChange?.(shell.sidebarMode);\n }\n }, [shell.sidebarMode, mode, onModeChange]);\n\n // Emit expand/collapse events\n React.useEffect(() => {\n if (shell.sidebarMode === 'expanded') {\n onExpand?.();\n } else {\n onCollapse?.();\n }\n }, [shell.sidebarMode, onExpand, onCollapse]);\n\n // Option A: thin is width-only; content remains visible whenever not collapsed\n const isContentVisible = shell.sidebarMode !== 'collapsed';\n\n // Default persistence if paneId provided and none supplied (fixed only)\n const persistenceAdapter = React.useMemo(() => {\n if (!paneId || persistence) return persistence;\n const key = `kookie-ui:shell:sidebar:${paneId}`;\n const adapter: PaneSizePersistence = {\n load: () => {\n if (typeof window === 'undefined') return undefined;\n const v = window.localStorage.getItem(key);\n return v ? Number(v) : undefined;\n },\n save: (size: number) => {\n if (typeof window === 'undefined') return;\n window.localStorage.setItem(key, String(size));\n },\n };\n return adapter;\n }, [paneId, persistence]);\n\n React.useEffect(() => {\n let mounted = true;\n (async () => {\n if (!resizable || !persistenceAdapter?.load || isOverlay) return;\n const loaded = await persistenceAdapter.load();\n if (mounted && typeof loaded === 'number' && localRef.current) {\n localRef.current.style.setProperty('--sidebar-size', `${loaded}px`);\n onResize?.(loaded);\n }\n })();\n return () => {\n mounted = false;\n };\n }, [resizable, persistenceAdapter, onResize, isOverlay]);\n\n // Always-follow responsive defaultMode for uncontrolled Sidebar (on breakpoint change only)\n const resolveResponsiveMode = React.useCallback((): SidebarMode => {\n if (typeof defaultMode === 'string') return defaultMode as SidebarMode;\n const dm = defaultMode as Partial<Record<Breakpoint, SidebarMode>> | undefined;\n if (dm && dm[shell.currentBreakpoint as Breakpoint]) {\n return dm[shell.currentBreakpoint as Breakpoint] as SidebarMode;\n }\n const bpKeys = Object.keys(BREAKPOINTS) as Array<keyof typeof BREAKPOINTS>;\n const order: Breakpoint[] = ([...bpKeys].reverse() as Breakpoint[]).concat('initial' as Breakpoint);\n const startIdx = order.indexOf(shell.currentBreakpoint as Breakpoint);\n for (let i = startIdx + 1; i < order.length; i++) {\n const bp = order[i];\n if (dm && dm[bp]) return dm[bp] as SidebarMode;\n }\n return 'collapsed';\n }, [defaultMode, shell.currentBreakpoint]);\n\n // Register custom toggle behavior based on toggleModes (both|single)\n const shellForToggle = useShell();\n const resolveDefaultSidebarMode = React.useCallback((): SidebarMode => {\n const resolved = resolveResponsiveMode();\n return resolved === 'thin' || resolved === 'expanded' ? resolved : 'expanded';\n }, [resolveResponsiveMode]);\n\n React.useEffect(() => {\n if (!shellForToggle.setSidebarToggleComputer) return;\n const strategy: 'both' | 'single' = toggleModes ?? 'both';\n const compute = (current: SidebarMode): SidebarMode => {\n if (strategy === 'both') {\n if (current === 'collapsed') return 'thin';\n if (current === 'thin') return 'expanded';\n return 'collapsed';\n }\n const target = resolveDefaultSidebarMode();\n if (current === 'collapsed') return target;\n if (current === target) return 'collapsed';\n return target;\n };\n shellForToggle.setSidebarToggleComputer(compute);\n return () => {\n shellForToggle.setSidebarToggleComputer?.((cur) => (cur === 'collapsed' ? 'thin' : cur === 'thin' ? 'expanded' : 'collapsed'));\n };\n }, [shellForToggle, toggleModes, resolveDefaultSidebarMode]);\n\n const lastOverlayWidthRef = React.useRef<number>(expandedSize);\n const lastOverlayModeRef = React.useRef<SidebarMode>('expanded');\n React.useEffect(() => {\n if (shell.sidebarMode !== 'collapsed') {\n lastOverlayModeRef.current = shell.sidebarMode as SidebarMode;\n lastOverlayWidthRef.current = shell.sidebarMode === 'thin' ? thinSize : expandedSize;\n }\n }, [shell.sidebarMode, thinSize, expandedSize]);\n\n const lastSidebarBpRef = React.useRef<Breakpoint | null>(null);\n React.useEffect(() => {\n if (mode !== undefined) return;\n if (!shell.currentBreakpointReady) return;\n if (lastSidebarBpRef.current === shell.currentBreakpoint) return;\n lastSidebarBpRef.current = shell.currentBreakpoint as Breakpoint;\n const next = resolveResponsiveMode();\n if (next !== shell.sidebarMode) shell.setSidebarMode(next);\n }, [mode, shell.currentBreakpoint, shell.currentBreakpointReady, resolveResponsiveMode, shell.sidebarMode, shell.setSidebarMode]);\n\n const handleEl =\n resizable && !isOverlay && shell.sidebarMode === 'expanded' ? (\n <PaneResizeContext.Provider\n value={{\n containerRef: localRef,\n cssVarName: '--sidebar-size',\n minSize,\n maxSize,\n defaultSize: expandedSize,\n orientation: 'vertical',\n edge: 'end',\n computeNext: (client, startClient, startSize) => {\n const isRtl = getComputedStyle(localRef.current!).direction === 'rtl';\n const delta = client - startClient;\n return startSize + (isRtl ? -delta : delta);\n },\n onResize,\n onResizeStart,\n onResizeEnd: (size) => {\n onResizeEnd?.(size);\n persistenceAdapter?.save?.(size);\n },\n target: 'sidebar',\n collapsible,\n snapPoints,\n snapTolerance: snapTolerance ?? 8,\n collapseThreshold,\n requestCollapse: () => shell.setSidebarMode('collapsed'),\n requestToggle: () => shell.togglePane('sidebar'),\n }}\n >\n {handleChildren.length > 0 ? handleChildren.map((el, i) => React.cloneElement(el, { key: el.key ?? i })) : <PaneHandle />}\n </PaneResizeContext.Provider>\n ) : null;\n\n if (isOverlay) {\n const open = shell.sidebarMode !== 'collapsed';\n return (\n <Sheet.Root open={open} onOpenChange={(o) => shell.setSidebarMode(o ? 'expanded' : 'collapsed')}>\n <Sheet.Content\n side=\"start\"\n style={{ padding: 0 }}\n width={{\n initial: `${open ? (shell.sidebarMode === 'thin' ? thinSize : expandedSize) : lastOverlayWidthRef.current}px`,\n }}\n >\n <VisuallyHidden>\n <Sheet.Title>Sidebar</Sheet.Title>\n </VisuallyHidden>\n {contentChildren}\n </Sheet.Content>\n </Sheet.Root>\n );\n }\n\n return (\n <div\n {...props}\n ref={setRef}\n className={classNames('rt-ShellSidebar', className)}\n data-mode={shell.sidebarMode}\n data-peek={shell.peekTarget === 'sidebar' || undefined}\n data-presentation={resolvedPresentation}\n data-open={(isStacked && isContentVisible) || undefined}\n style={{\n ...style,\n ['--sidebar-size' as any]: `${expandedSize}px`,\n ['--sidebar-thin-size' as any]: `${thinSize}px`,\n ['--sidebar-min-size' as any]: `${minSize}px`,\n ['--sidebar-max-size' as any]: `${maxSize}px`,\n ...(shell.peekTarget === 'sidebar' && shell.sidebarMode === 'collapsed' && !isOverlay\n ? (() => {\n const strategy: 'both' | 'single' = toggleModes ?? 'both';\n const current = shell.sidebarMode as SidebarMode;\n let next: SidebarMode;\n if (strategy === 'both') {\n next = current === 'collapsed' ? 'thin' : current === 'thin' ? 'expanded' : 'collapsed';\n } else {\n const target = resolveDefaultSidebarMode();\n next = current === 'collapsed' ? target : 'collapsed';\n }\n if (next === 'thin') {\n return {\n ['--peek-sidebar-width' as any]: `${thinSize}px`,\n } as React.CSSProperties;\n }\n return {\n ['--peek-sidebar-width' as any]: `var(--sidebar-size, ${expandedSize}px)`,\n } as React.CSSProperties;\n })()\n : {}),\n }}\n >\n <div className=\"rt-ShellSidebarContent\" data-visible={isContentVisible || undefined}>\n {contentChildren}\n </div>\n {handleEl}\n </div>\n );\n },\n) as SidebarComponent;\n\nSidebar.displayName = 'Shell.Sidebar';\nSidebar.Handle = SidebarHandle;\n"],
5
- "mappings": "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",
6
- "names": ["React", "classNames", "Sheet", "VisuallyHidden", "useShell", "useResponsivePresentation", "PaneResizeContext", "SidebarHandle", "PaneHandle", "BREAKPOINTS", "Sidebar", "className", "presentation", "mode", "defaultMode", "onModeChange", "expandedSize", "minSize", "maxSize", "resizable", "collapsible", "onExpand", "onCollapse", "onResize", "onResizeStart", "onResizeEnd", "snapPoints", "snapTolerance", "collapseThreshold", "paneId", "persistence", "children", "style", "thinSize", "toggleModes", "props", "ref", "shell", "resolvedPresentation", "isOverlay", "isStacked", "localRef", "setRef", "node", "childArray", "handleChildren", "el", "contentChildren", "sidebarId", "didInitRef", "isContentVisible", "persistenceAdapter", "key", "v", "size", "mounted", "loaded", "resolveResponsiveMode", "dm", "order", "startIdx", "i", "bp", "shellForToggle", "resolveDefaultSidebarMode", "resolved", "strategy", "compute", "current", "target", "cur", "lastOverlayWidthRef", "lastOverlayModeRef", "lastSidebarBpRef", "next", "handleEl", "client", "startClient", "startSize", "isRtl", "delta", "open", "o"]
4
+ "sourcesContent": ["import * as React from 'react';\nimport classNames from 'classnames';\nimport * as Sheet from '../sheet.js';\nimport { VisuallyHidden } from '../visually-hidden.js';\nimport { useShell } from '../shell.context.js';\nimport { useResponsivePresentation, useResponsiveValue } from '../shell.hooks.js';\nimport { PaneResizeContext } from './shell-resize.js';\nimport { SidebarHandle, PaneHandle } from './shell-handles.js';\nimport type { Breakpoint, PaneMode, PaneSizePersistence, PresentationValue, ResponsivePresentation, ResponsiveSidebarMode, SidebarMode, Responsive } from '../shell.types.js';\nimport { BREAKPOINTS } from '../shell.types.js';\n\ninterface PaneProps extends React.ComponentPropsWithoutRef<'div'> {\n presentation?: ResponsivePresentation;\n mode?: PaneMode;\n defaultMode?: any;\n onModeChange?: (mode: PaneMode | SidebarMode) => void;\n expandedSize?: number;\n minSize?: number;\n maxSize?: number;\n resizable?: boolean;\n collapsible?: boolean;\n onExpand?: () => void;\n onCollapse?: () => void;\n onResize?: (size: number) => void;\n resizer?: React.ReactNode;\n onResizeStart?: (size: number) => void;\n onResizeEnd?: (size: number) => void;\n snapPoints?: number[];\n snapTolerance?: number;\n collapseThreshold?: number;\n paneId?: string;\n persistence?: PaneSizePersistence;\n}\n\ntype SidebarStateChangeMeta = { reason: 'init' | 'toggle' | 'responsive' };\ntype SidebarControlledProps = { state: Responsive<SidebarMode>; onStateChange?: (state: SidebarMode, meta: SidebarStateChangeMeta) => void; defaultState?: never };\ntype SidebarUncontrolledProps = { defaultState?: SidebarMode | Partial<Record<Breakpoint, SidebarMode>>; onStateChange?: (state: SidebarMode, meta: SidebarStateChangeMeta) => void; state?: never };\ntype SidebarPublicProps = Omit<PaneProps, 'mode' | 'defaultMode' | 'onModeChange'> & {\n // removed legacy mode props\n thinSize?: number;\n toggleModes?: 'both' | 'single';\n // size API (width when expanded)\n size?: number | string;\n defaultSize?: number | string;\n onSizeChange?: (size: number, meta: { reason: 'init' | 'resize' | 'controlled' }) => void;\n sizeUpdate?: 'throttle' | 'debounce';\n sizeUpdateMs?: number;\n} & (SidebarControlledProps | SidebarUncontrolledProps);\n\ntype SidebarComponent = React.ForwardRefExoticComponent<SidebarPublicProps & React.RefAttributes<HTMLDivElement>> & { Handle: typeof SidebarHandle };\n\nexport const Sidebar = React.forwardRef<HTMLDivElement, SidebarPublicProps>(\n (\n {\n className,\n presentation = { initial: 'overlay', md: 'fixed' },\n // removed legacy props\n expandedSize = 288,\n minSize = 200,\n maxSize = 400,\n resizable = false,\n collapsible = true,\n onExpand,\n onCollapse,\n onResize,\n onResizeStart,\n onResizeEnd,\n snapPoints,\n snapTolerance,\n collapseThreshold,\n paneId,\n persistence,\n children,\n style,\n thinSize = 64,\n toggleModes,\n // new state props (XOR)\n state,\n defaultState,\n onStateChange,\n ...props\n },\n ref,\n ) => {\n const shell = useShell();\n const resolvedPresentation = useResponsivePresentation(presentation);\n const isOverlay = resolvedPresentation === 'overlay';\n const isStacked = resolvedPresentation === 'stacked';\n // Phase sequencing is now CSS-driven; no JS-managed phase\n const localRef = React.useRef<HTMLDivElement | null>(null);\n const setRef = React.useCallback(\n (node: HTMLDivElement | null) => {\n localRef.current = node;\n if (typeof ref === 'function') ref(node);\n else if (ref) (ref as React.MutableRefObject<HTMLDivElement | null>).current = node;\n },\n [ref],\n );\n const childArray = React.Children.toArray(children) as React.ReactElement[];\n const handleChildren = childArray.filter((el: React.ReactElement) => React.isValidElement(el) && el.type === SidebarHandle);\n const contentChildren = childArray.filter((el: React.ReactElement) => !(React.isValidElement(el) && el.type === SidebarHandle));\n\n // Throttled/debounced emitter for onSizeChange\n const emitSizeChange = React.useMemo(() => {\n const cb = (props as any).onSizeChange as undefined | ((s: number, meta: { reason: 'init' | 'resize' | 'controlled' }) => void);\n const strategy = (props as any).sizeUpdate as undefined | 'throttle' | 'debounce';\n const ms = (props as any).sizeUpdateMs ?? 50;\n if (!cb) return () => {};\n if (strategy === 'debounce') {\n let t: any = null;\n return (s: number, meta: { reason: 'init' | 'resize' | 'controlled' }) => {\n if (t) clearTimeout(t);\n t = setTimeout(() => {\n cb(s, meta);\n }, ms);\n };\n }\n if (strategy === 'throttle') {\n let last = 0;\n return (s: number, meta: { reason: 'init' | 'resize' | 'controlled' }) => {\n const now = Date.now();\n if (now - last >= ms) {\n last = now;\n cb(s, meta);\n }\n };\n }\n return (s: number, meta: { reason: 'init' | 'resize' | 'controlled' }) => cb(s, meta);\n }, [(props as any).onSizeChange, (props as any).sizeUpdate, (props as any).sizeUpdateMs]);\n\n // Register with shell\n const sidebarId = React.useId();\n React.useEffect(() => {\n shell.setHasSidebar(true);\n return () => {\n shell.setHasSidebar(false);\n };\n }, [shell, sidebarId]);\n\n // Dev guards\n const wasControlledRef = React.useRef<boolean | null>(null);\n if (process.env.NODE_ENV !== 'production') {\n if (typeof state !== 'undefined' && typeof defaultState !== 'undefined') {\n // eslint-disable-next-line no-console\n console.error('Shell.Sidebar: Do not pass both `state` and `defaultState`. Choose one.');\n }\n if (typeof (props as any).size !== 'undefined' && typeof (props as any).defaultSize !== 'undefined') {\n // eslint-disable-next-line no-console\n console.error('Shell.Sidebar: Do not pass both `size` and `defaultSize`. Choose one.');\n }\n }\n\n // Warn on mode switch between controlled/uncontrolled\n React.useEffect(() => {\n const isControlled = typeof state !== 'undefined';\n if (wasControlledRef.current === null) {\n wasControlledRef.current = isControlled;\n return;\n }\n if (wasControlledRef.current !== isControlled) {\n // eslint-disable-next-line no-console\n console.warn('Shell.Sidebar: Switching between controlled and uncontrolled `state` is not supported.');\n wasControlledRef.current = isControlled;\n }\n }, [state]);\n\n // Resolve responsive controlled state at top level\n const resolvedState = useResponsiveValue(state);\n const resolvedDefaultState = useResponsiveValue(defaultState as any);\n\n // Honor state/defaultState on mount when uncontrolled\n const didInitRef = React.useRef(false);\n React.useEffect(() => {\n if (didInitRef.current) return;\n if (!shell.currentBreakpointReady) return;\n didInitRef.current = true;\n // Controlled state may be responsive; use resolved value\n if (typeof state !== 'undefined' && resolvedState) {\n if (shell.sidebarMode !== resolvedState) shell.setSidebarMode(resolvedState);\n return;\n }\n if (typeof defaultState !== 'undefined') {\n const initialState = (resolvedDefaultState ?? defaultState) as SidebarMode;\n if (shell.sidebarMode !== initialState) {\n shell.setSidebarMode(initialState);\n }\n onStateChange?.(initialState, { reason: 'init' });\n return;\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [shell.currentBreakpointReady, resolvedDefaultState, resolvedState, state, defaultState]);\n\n // Sync controlled state (responsive-aware)\n React.useEffect(() => {\n if (resolvedState === undefined) return;\n if (shell.sidebarMode !== resolvedState) shell.setSidebarMode(resolvedState);\n }, [resolvedState, shell.sidebarMode]);\n\n // Emit mode changes\n const lastNotifyModeRef = React.useRef<SidebarMode | null>(null);\n React.useEffect(() => {\n // notify new API when uncontrolled; skip first run to avoid masking init\n if (typeof state === 'undefined') {\n if (lastNotifyModeRef.current === null) {\n lastNotifyModeRef.current = shell.sidebarMode as SidebarMode;\n } else if (lastNotifyModeRef.current !== shell.sidebarMode) {\n lastNotifyModeRef.current = shell.sidebarMode as SidebarMode;\n onStateChange?.(shell.sidebarMode as SidebarMode, { reason: 'toggle' });\n }\n }\n }, [shell.sidebarMode, state, onStateChange]);\n\n // Emit expand/collapse events\n React.useEffect(() => {\n if (shell.sidebarMode === 'expanded') {\n onExpand?.();\n } else {\n onCollapse?.();\n }\n }, [shell.sidebarMode, onExpand, onCollapse]);\n\n // Option A: thin is width-only; content remains visible whenever not collapsed\n const isContentVisible = shell.sidebarMode !== 'collapsed';\n\n // Default persistence if paneId provided and none supplied (fixed only)\n const persistenceAdapter = React.useMemo(() => {\n if (!paneId || persistence) return persistence;\n const key = `kookie-ui:shell:sidebar:${paneId}`;\n const adapter: PaneSizePersistence = {\n load: () => {\n if (typeof window === 'undefined') return undefined;\n const v = window.localStorage.getItem(key);\n return v ? Number(v) : undefined;\n },\n save: (size: number) => {\n if (typeof window === 'undefined') return;\n window.localStorage.setItem(key, String(size));\n },\n };\n return adapter;\n }, [paneId, persistence]);\n\n React.useEffect(() => {\n let mounted = true;\n (async () => {\n if (!resizable || !persistenceAdapter?.load || isOverlay) return;\n const loaded = await persistenceAdapter.load();\n if (mounted && typeof loaded === 'number' && localRef.current) {\n localRef.current.style.setProperty('--sidebar-size', `${loaded}px`);\n onResize?.(loaded);\n }\n })();\n return () => {\n mounted = false;\n };\n }, [resizable, persistenceAdapter, onResize, isOverlay]);\n\n // Register custom toggle behavior based on toggleModes (both|single)\n const shellForToggle = useShell();\n const resolveDefaultSidebarMode = React.useCallback((): SidebarMode => {\n const resolved = defaultState ?? 'expanded';\n return resolved === 'thin' || resolved === 'expanded' ? resolved : 'expanded';\n }, [defaultState]);\n\n React.useEffect(() => {\n if (!shellForToggle.setSidebarToggleComputer) return;\n const strategy: 'both' | 'single' = toggleModes ?? 'both';\n const compute = (current: SidebarMode): SidebarMode => {\n if (strategy === 'both') {\n if (current === 'collapsed') return 'thin';\n if (current === 'thin') return 'expanded';\n return 'collapsed';\n }\n const target = resolveDefaultSidebarMode();\n if (current === 'collapsed') return target;\n if (current === target) return 'collapsed';\n return target;\n };\n shellForToggle.setSidebarToggleComputer(compute);\n return () => {\n shellForToggle.setSidebarToggleComputer?.((cur) => (cur === 'collapsed' ? 'thin' : cur === 'thin' ? 'expanded' : 'collapsed'));\n };\n }, [shellForToggle, toggleModes, resolveDefaultSidebarMode]);\n\n const lastOverlayWidthRef = React.useRef<number>(expandedSize);\n const lastOverlayModeRef = React.useRef<SidebarMode>('expanded');\n React.useEffect(() => {\n if (shell.sidebarMode !== 'collapsed') {\n lastOverlayModeRef.current = shell.sidebarMode as SidebarMode;\n lastOverlayWidthRef.current = shell.sidebarMode === 'thin' ? thinSize : expandedSize;\n }\n }, [shell.sidebarMode, thinSize, expandedSize]);\n\n // Remove responsive default mode behavior entirely\n\n const handleEl =\n resizable && !isOverlay && shell.sidebarMode === 'expanded' ? (\n <PaneResizeContext.Provider\n value={{\n containerRef: localRef,\n cssVarName: '--sidebar-size',\n minSize,\n maxSize,\n defaultSize: expandedSize,\n orientation: 'vertical',\n edge: 'end',\n computeNext: (client, startClient, startSize) => {\n const isRtl = getComputedStyle(localRef.current!).direction === 'rtl';\n const delta = client - startClient;\n return startSize + (isRtl ? -delta : delta);\n },\n onResize,\n onResizeStart,\n onResizeEnd: (size) => {\n onResizeEnd?.(size);\n emitSizeChange(size, { reason: 'resize' });\n persistenceAdapter?.save?.(size);\n },\n target: 'sidebar',\n collapsible,\n snapPoints,\n snapTolerance: snapTolerance ?? 8,\n collapseThreshold,\n requestCollapse: () => shell.setSidebarMode('collapsed'),\n requestToggle: () => shell.togglePane('sidebar'),\n }}\n >\n {handleChildren.length > 0 ? handleChildren.map((el, i) => React.cloneElement(el, { key: el.key ?? i })) : <PaneHandle />}\n </PaneResizeContext.Provider>\n ) : null;\n\n // Strip new API props from DOM\n const { state: _s, defaultState: _ds, onStateChange: _osc, size: _sz, defaultSize: _dsz, onSizeChange: _onsc, sizeUpdate: _szu, sizeUpdateMs: _szums, ...domProps } = props as any;\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 const { size, defaultSize } = props as any;\n if (typeof size === 'undefined' && typeof defaultSize !== 'undefined') {\n const px = normalizeToPx(defaultSize);\n if (typeof px === 'number' && Number.isFinite(px)) {\n const minPx = typeof minSize === 'number' ? minSize : undefined;\n const maxPx = typeof maxSize === 'number' ? maxSize : undefined;\n const clamped = Math.min(maxPx ?? px, Math.max(minPx ?? px, px));\n localRef.current.style.setProperty('--sidebar-size', `${clamped}px`);\n emitSizeChange(clamped, { reason: 'init' });\n }\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n // Controlled size sync\n React.useEffect(() => {\n if (!localRef.current) return;\n const { size } = props as any;\n if (typeof size === 'undefined') return;\n const px = normalizeToPx(size);\n if (typeof px === 'number' && Number.isFinite(px)) {\n const minPx = typeof minSize === 'number' ? minSize : undefined;\n const maxPx = typeof maxSize === 'number' ? maxSize : undefined;\n const clamped = Math.min(maxPx ?? px, Math.max(minPx ?? px, px));\n localRef.current.style.setProperty('--sidebar-size', `${clamped}px`);\n emitSizeChange(clamped, { reason: 'controlled' });\n }\n }, [(props as any).size, minSize, maxSize, normalizeToPx, emitSizeChange]);\n\n if (isOverlay) {\n const open = shell.sidebarMode !== 'collapsed';\n return (\n <Sheet.Root open={open} onOpenChange={(o) => shell.setSidebarMode(o ? 'expanded' : 'collapsed')}>\n <Sheet.Content\n side=\"start\"\n style={{ padding: 0 }}\n width={{\n initial: `${open ? (shell.sidebarMode === 'thin' ? thinSize : expandedSize) : lastOverlayWidthRef.current}px`,\n }}\n >\n <VisuallyHidden>\n <Sheet.Title>Navigation</Sheet.Title>\n </VisuallyHidden>\n {contentChildren}\n </Sheet.Content>\n </Sheet.Root>\n );\n }\n return (\n <div\n {...domProps}\n ref={setRef}\n className={classNames('rt-ShellSidebar', className)}\n data-mode={shell.sidebarMode}\n data-peek={shell.peekTarget === 'sidebar' || undefined}\n data-presentation={shell.currentBreakpointReady ? resolvedPresentation : undefined}\n data-open={(shell.currentBreakpointReady && isStacked && isContentVisible) || undefined}\n style={{\n ...style,\n ['--sidebar-size' as any]: `${expandedSize}px`,\n ['--sidebar-thin-size' as any]: `${thinSize}px`,\n ['--sidebar-min-size' as any]: `${minSize}px`,\n ['--sidebar-max-size' as any]: `${maxSize}px`,\n ...(shell.peekTarget === 'sidebar' && shell.sidebarMode === 'collapsed' && !isOverlay\n ? (() => {\n const strategy: 'both' | 'single' = toggleModes ?? 'both';\n const current = shell.sidebarMode as SidebarMode;\n let next: SidebarMode;\n if (strategy === 'both') {\n next = current === 'collapsed' ? 'thin' : current === 'thin' ? 'expanded' : 'collapsed';\n } else {\n const target = resolveDefaultSidebarMode();\n next = current === 'collapsed' ? target : 'collapsed';\n }\n if (next === 'thin') {\n return {\n ['--peek-sidebar-width' as any]: `${thinSize}px`,\n } as React.CSSProperties;\n }\n return {\n ['--peek-sidebar-width' as any]: `var(--sidebar-size, ${expandedSize}px)`,\n } as React.CSSProperties;\n })()\n : {}),\n }}\n >\n <div className=\"rt-ShellSidebarContent\" data-visible={isContentVisible || undefined}>\n {contentChildren}\n </div>\n {handleEl}\n </div>\n );\n },\n) as SidebarComponent;\n\nSidebar.displayName = 'Shell.Sidebar';\nSidebar.Handle = SidebarHandle;\n"],
5
+ "mappings": "AAAA,UAAYA,MAAW,QACvB,OAAOC,OAAgB,aACvB,UAAYC,MAAW,cACvB,OAAS,kBAAAC,OAAsB,wBAC/B,OAAS,YAAAC,MAAgB,sBACzB,OAAS,6BAAAC,GAA2B,sBAAAC,MAA0B,oBAC9D,OAAS,qBAAAC,OAAyB,oBAClC,OAAS,iBAAAC,EAAe,cAAAC,OAAkB,qBAE1C,MAA4B,oBA0CrB,MAAMC,EAAUV,EAAM,WAC3B,CACE,CACE,UAAAW,EACA,aAAAC,EAAe,CAAE,QAAS,UAAW,GAAI,OAAQ,EAEjD,aAAAC,EAAe,IACf,QAAAC,EAAU,IACV,QAAAC,EAAU,IACV,UAAAC,EAAY,GACZ,YAAAC,EAAc,GACd,SAAAC,EACA,WAAAC,EACA,SAAAC,EACA,cAAAC,EACA,YAAAC,EACA,WAAAC,EACA,cAAAC,GACA,kBAAAC,GACA,OAAAC,EACA,YAAAC,EACA,SAAAC,GACA,MAAAC,GACA,SAAAC,EAAW,GACX,YAAAC,EAEA,MAAAC,EACA,aAAAC,EACA,cAAAC,EACA,GAAGC,CACL,EACAC,IACG,CACH,MAAMC,EAAQjC,EAAS,EACjBkC,EAAuBjC,GAA0BO,CAAY,EAC7D2B,EAAYD,IAAyB,UACrCE,GAAYF,IAAyB,UAErCG,EAAWzC,EAAM,OAA8B,IAAI,EACnD0C,GAAS1C,EAAM,YAClB2C,GAAgC,CAC/BF,EAAS,QAAUE,EACf,OAAOP,GAAQ,WAAYA,EAAIO,CAAI,EAC9BP,IAAMA,EAAsD,QAAUO,EACjF,EACA,CAACP,CAAG,CACN,EACMQ,EAAa5C,EAAM,SAAS,QAAQ4B,EAAQ,EAC5CiB,EAAiBD,EAAW,OAAQE,GAA2B9C,EAAM,eAAe8C,CAAE,GAAKA,EAAG,OAAStC,CAAa,EACpHuC,EAAkBH,EAAW,OAAQE,GAA2B,EAAE9C,EAAM,eAAe8C,CAAE,GAAKA,EAAG,OAAStC,EAAc,EAGxHwC,EAAiBhD,EAAM,QAAQ,IAAM,CACzC,MAAMiD,EAAMd,EAAc,aACpBe,EAAYf,EAAc,WAC1BgB,EAAMhB,EAAc,cAAgB,GAC1C,GAAI,CAACc,EAAI,MAAO,IAAM,CAAC,EACvB,GAAIC,IAAa,WAAY,CAC3B,IAAIE,EAAS,KACb,MAAO,CAACC,EAAWC,IAAuD,CACpEF,GAAG,aAAaA,CAAC,EACrBA,EAAI,WAAW,IAAM,CACnBH,EAAGI,EAAGC,CAAI,CACZ,EAAGH,CAAE,CACP,CACF,CACA,GAAID,IAAa,WAAY,CAC3B,IAAIK,EAAO,EACX,MAAO,CAACF,EAAWC,IAAuD,CACxE,MAAME,EAAM,KAAK,IAAI,EACjBA,EAAMD,GAAQJ,IAChBI,EAAOC,EACPP,EAAGI,EAAGC,CAAI,EAEd,CACF,CACA,MAAO,CAACD,EAAWC,IAAuDL,EAAGI,EAAGC,CAAI,CACtF,EAAG,CAAEnB,EAAc,aAAeA,EAAc,WAAaA,EAAc,YAAY,CAAC,EAGlFsB,GAAYzD,EAAM,MAAM,EAC9BA,EAAM,UAAU,KACdqC,EAAM,cAAc,EAAI,EACjB,IAAM,CACXA,EAAM,cAAc,EAAK,CAC3B,GACC,CAACA,EAAOoB,EAAS,CAAC,EAGrB,MAAMC,EAAmB1D,EAAM,OAAuB,IAAI,EAa1DA,EAAM,UAAU,IAAM,CACpB,MAAM2D,EAAe,OAAO3B,EAAU,IACtC,GAAI0B,EAAiB,UAAY,KAAM,CACrCA,EAAiB,QAAUC,EAC3B,MACF,CACID,EAAiB,UAAYC,IAE/B,QAAQ,KAAK,wFAAwF,EACrGD,EAAiB,QAAUC,EAE/B,EAAG,CAAC3B,CAAK,CAAC,EAGV,MAAM4B,EAAgBtD,EAAmB0B,CAAK,EACxC6B,EAAuBvD,EAAmB2B,CAAmB,EAG7D6B,EAAa9D,EAAM,OAAO,EAAK,EACrCA,EAAM,UAAU,IAAM,CACpB,GAAI,CAAA8D,EAAW,SACVzB,EAAM,uBAGX,IAFAyB,EAAW,QAAU,GAEjB,OAAO9B,EAAU,KAAe4B,EAAe,CAC7CvB,EAAM,cAAgBuB,GAAevB,EAAM,eAAeuB,CAAa,EAC3E,MACF,CACA,GAAI,OAAO3B,EAAiB,IAAa,CACvC,MAAM8B,EAAgBF,GAAwB5B,EAC1CI,EAAM,cAAgB0B,GACxB1B,EAAM,eAAe0B,CAAY,EAEnC7B,IAAgB6B,EAAc,CAAE,OAAQ,MAAO,CAAC,EAChD,MACF,EAEF,EAAG,CAAC1B,EAAM,uBAAwBwB,EAAsBD,EAAe5B,EAAOC,CAAY,CAAC,EAG3FjC,EAAM,UAAU,IAAM,CAChB4D,IAAkB,QAClBvB,EAAM,cAAgBuB,GAAevB,EAAM,eAAeuB,CAAa,CAC7E,EAAG,CAACA,EAAevB,EAAM,WAAW,CAAC,EAGrC,MAAM2B,EAAoBhE,EAAM,OAA2B,IAAI,EAC/DA,EAAM,UAAU,IAAM,CAEhB,OAAOgC,EAAU,MACfgC,EAAkB,UAAY,KAChCA,EAAkB,QAAU3B,EAAM,YACzB2B,EAAkB,UAAY3B,EAAM,cAC7C2B,EAAkB,QAAU3B,EAAM,YAClCH,IAAgBG,EAAM,YAA4B,CAAE,OAAQ,QAAS,CAAC,GAG5E,EAAG,CAACA,EAAM,YAAaL,EAAOE,CAAa,CAAC,EAG5ClC,EAAM,UAAU,IAAM,CAChBqC,EAAM,cAAgB,WACxBnB,IAAW,EAEXC,IAAa,CAEjB,EAAG,CAACkB,EAAM,YAAanB,EAAUC,CAAU,CAAC,EAG5C,MAAM8C,EAAmB5B,EAAM,cAAgB,YAGzC6B,EAAqBlE,EAAM,QAAQ,IAAM,CAC7C,GAAI,CAAC0B,GAAUC,EAAa,OAAOA,EACnC,MAAMwC,EAAM,2BAA2BzC,CAAM,GAY7C,MAXqC,CACnC,KAAM,IAAM,CACV,GAAI,OAAO,OAAW,IAAa,OACnC,MAAM0C,EAAI,OAAO,aAAa,QAAQD,CAAG,EACzC,OAAOC,EAAI,OAAOA,CAAC,EAAI,MACzB,EACA,KAAOC,GAAiB,CAClB,OAAO,OAAW,KACtB,OAAO,aAAa,QAAQF,EAAK,OAAOE,CAAI,CAAC,CAC/C,CACF,CAEF,EAAG,CAAC3C,EAAQC,CAAW,CAAC,EAExB3B,EAAM,UAAU,IAAM,CACpB,IAAIsE,EAAU,GACd,OAAC,SAAY,CACX,GAAI,CAACtD,GAAa,CAACkD,GAAoB,MAAQ3B,EAAW,OAC1D,MAAMgC,EAAS,MAAML,EAAmB,KAAK,EACzCI,GAAW,OAAOC,GAAW,UAAY9B,EAAS,UACpDA,EAAS,QAAQ,MAAM,YAAY,iBAAkB,GAAG8B,CAAM,IAAI,EAClEnD,IAAWmD,CAAM,EAErB,GAAG,EACI,IAAM,CACXD,EAAU,EACZ,CACF,EAAG,CAACtD,EAAWkD,EAAoB9C,EAAUmB,CAAS,CAAC,EAGvD,MAAMiC,EAAiBpE,EAAS,EAC1BqE,EAA4BzE,EAAM,YAAY,IAAmB,CACrE,MAAM0E,EAAWzC,GAAgB,WACjC,OAAOyC,IAAa,QAAUA,IAAa,WAAaA,EAAW,UACrE,EAAG,CAACzC,CAAY,CAAC,EAEjBjC,EAAM,UAAU,IAAM,CACpB,GAAI,CAACwE,EAAe,yBAA0B,OAC9C,MAAMtB,EAA8BnB,GAAe,OAC7C4C,EAAWC,GAAsC,CACrD,GAAI1B,IAAa,OACf,OAAI0B,IAAY,YAAoB,OAChCA,IAAY,OAAe,WACxB,YAET,MAAMC,EAASJ,EAA0B,EACzC,OAAIG,IAAY,YAAoBC,EAChCD,IAAYC,EAAe,YACxBA,CACT,EACA,OAAAL,EAAe,yBAAyBG,CAAO,EACxC,IAAM,CACXH,EAAe,2BAA4BM,GAASA,IAAQ,YAAc,OAASA,IAAQ,OAAS,WAAa,WAAY,CAC/H,CACF,EAAG,CAACN,EAAgBzC,EAAa0C,CAAyB,CAAC,EAE3D,MAAMM,EAAsB/E,EAAM,OAAea,CAAY,EACvDmE,GAAqBhF,EAAM,OAAoB,UAAU,EAC/DA,EAAM,UAAU,IAAM,CAChBqC,EAAM,cAAgB,cACxB2C,GAAmB,QAAU3C,EAAM,YACnC0C,EAAoB,QAAU1C,EAAM,cAAgB,OAASP,EAAWjB,EAE5E,EAAG,CAACwB,EAAM,YAAaP,EAAUjB,CAAY,CAAC,EAI9C,MAAMoE,GACJjE,GAAa,CAACuB,GAAaF,EAAM,cAAgB,WAC/CrC,EAAA,cAACO,GAAkB,SAAlB,CACC,MAAO,CACL,aAAckC,EACd,WAAY,iBACZ,QAAA3B,EACA,QAAAC,EACA,YAAaF,EACb,YAAa,WACb,KAAM,MACN,YAAa,CAACqE,EAAQC,EAAaC,IAAc,CAC/C,MAAMC,EAAQ,iBAAiB5C,EAAS,OAAQ,EAAE,YAAc,MAC1D6C,EAAQJ,EAASC,EACvB,OAAOC,GAAaC,EAAQ,CAACC,EAAQA,EACvC,EACA,SAAAlE,EACA,cAAAC,EACA,YAAcgD,GAAS,CACrB/C,IAAc+C,CAAI,EAClBrB,EAAeqB,EAAM,CAAE,OAAQ,QAAS,CAAC,EACzCH,GAAoB,OAAOG,CAAI,CACjC,EACA,OAAQ,UACR,YAAApD,EACA,WAAAM,EACA,cAAeC,IAAiB,EAChC,kBAAAC,GACA,gBAAiB,IAAMY,EAAM,eAAe,WAAW,EACvD,cAAe,IAAMA,EAAM,WAAW,SAAS,CACjD,GAECQ,EAAe,OAAS,EAAIA,EAAe,IAAI,CAACC,EAAIyC,IAAMvF,EAAM,aAAa8C,EAAI,CAAE,IAAKA,EAAG,KAAOyC,CAAE,CAAC,CAAC,EAAIvF,EAAA,cAACS,GAAA,IAAW,CACzH,EACE,KAGA,CAAE,MAAO+E,GAAI,aAAcC,GAAK,cAAeC,GAAM,KAAMC,GAAK,YAAaC,GAAM,aAAcC,GAAO,WAAYC,GAAM,aAAcC,GAAQ,GAAGC,EAAS,EAAI7D,EAGhK8D,EAAgBjG,EAAM,YAAakG,GAA2D,CAClG,GAAIA,GAAS,KAAM,OACnB,GAAI,OAAOA,GAAU,UAAY,OAAO,SAASA,CAAK,EAAG,OAAOA,EAChE,MAAMC,EAAM,OAAOD,CAAK,EAAE,KAAK,EAC/B,GAAI,CAACC,EAAK,OACV,GAAIA,EAAI,SAAS,IAAI,EAAG,OAAO,OAAO,WAAWA,CAAG,EACpD,GAAIA,EAAI,SAAS,KAAK,EAAG,CACvB,MAAMC,EAAM,OAAO,WAAW,iBAAiB,SAAS,eAAe,EAAE,UAAY,IAAI,GAAK,GAC9F,OAAO,OAAO,WAAWD,CAAG,EAAIC,CAClC,CACA,GAAID,EAAI,SAAS,GAAG,EAAG,CACrB,MAAME,EAAM,OAAO,WAAWF,CAAG,EAC3BG,EAAO,SAAS,gBAAgB,aAAe,OAAO,YAAc,EAC1E,OAAQD,EAAM,IAAOC,CACvB,CACA,MAAMC,EAAI,OAAO,WAAWJ,CAAG,EAC/B,OAAO,OAAO,SAASI,CAAC,EAAIA,EAAI,MAClC,EAAG,CAAC,CAAC,EAkCL,GA/BAvG,EAAM,UAAU,IAAM,CACpB,GAAI,CAACyC,EAAS,QAAS,OACvB,KAAM,CAAE,KAAA4B,EAAM,YAAAmC,CAAY,EAAIrE,EAC9B,GAAI,OAAOkC,EAAS,KAAe,OAAOmC,EAAgB,IAAa,CACrE,MAAMC,EAAKR,EAAcO,CAAW,EACpC,GAAI,OAAOC,GAAO,UAAY,OAAO,SAASA,CAAE,EAAG,CAGjD,MAAMC,EAAU,KAAK,KADP,OAAO3F,GAAY,SAAWA,EAAU,SACpB0F,EAAI,KAAK,KAF7B,OAAO3F,GAAY,SAAWA,EAAU,SAEE2F,EAAIA,CAAE,CAAC,EAC/DhE,EAAS,QAAQ,MAAM,YAAY,iBAAkB,GAAGiE,CAAO,IAAI,EACnE1D,EAAe0D,EAAS,CAAE,OAAQ,MAAO,CAAC,CAC5C,CACF,CAEF,EAAG,CAAC,CAAC,EAGL1G,EAAM,UAAU,IAAM,CACpB,GAAI,CAACyC,EAAS,QAAS,OACvB,KAAM,CAAE,KAAA4B,CAAK,EAAIlC,EACjB,GAAI,OAAOkC,EAAS,IAAa,OACjC,MAAMoC,EAAKR,EAAc5B,CAAI,EAC7B,GAAI,OAAOoC,GAAO,UAAY,OAAO,SAASA,CAAE,EAAG,CAGjD,MAAMC,EAAU,KAAK,KADP,OAAO3F,GAAY,SAAWA,EAAU,SACpB0F,EAAI,KAAK,KAF7B,OAAO3F,GAAY,SAAWA,EAAU,SAEE2F,EAAIA,CAAE,CAAC,EAC/DhE,EAAS,QAAQ,MAAM,YAAY,iBAAkB,GAAGiE,CAAO,IAAI,EACnE1D,EAAe0D,EAAS,CAAE,OAAQ,YAAa,CAAC,CAClD,CACF,EAAG,CAAEvE,EAAc,KAAMrB,EAASC,EAASkF,EAAejD,CAAc,CAAC,EAErET,EAAW,CACb,MAAMoE,EAAOtE,EAAM,cAAgB,YACnC,OACErC,EAAA,cAACE,EAAM,KAAN,CAAW,KAAMyG,EAAM,aAAeC,GAAMvE,EAAM,eAAeuE,EAAI,WAAa,WAAW,GAC5F5G,EAAA,cAACE,EAAM,QAAN,CACC,KAAK,QACL,MAAO,CAAE,QAAS,CAAE,EACpB,MAAO,CACL,QAAS,GAAGyG,EAAQtE,EAAM,cAAgB,OAASP,EAAWjB,EAAgBkE,EAAoB,OAAO,IAC3G,GAEA/E,EAAA,cAACG,GAAA,KACCH,EAAA,cAACE,EAAM,MAAN,KAAY,YAAU,CACzB,EACC6C,CACH,CACF,CAEJ,CACA,OACE/C,EAAA,cAAC,OACE,GAAGgG,GACJ,IAAKtD,GACL,UAAWzC,GAAW,kBAAmBU,CAAS,EAClD,YAAW0B,EAAM,YACjB,YAAWA,EAAM,aAAe,WAAa,OAC7C,oBAAmBA,EAAM,uBAAyBC,EAAuB,OACzE,YAAYD,EAAM,wBAA0BG,IAAayB,GAAqB,OAC9E,MAAO,CACL,GAAGpC,GACF,iBAA0B,GAAGhB,CAAY,KACzC,sBAA+B,GAAGiB,CAAQ,KAC1C,qBAA8B,GAAGhB,CAAO,KACxC,qBAA8B,GAAGC,CAAO,KACzC,GAAIsB,EAAM,aAAe,WAAaA,EAAM,cAAgB,aAAe,CAACE,GACvE,IAAM,CACL,MAAMW,EAA8BnB,GAAe,OAC7C6C,EAAUvC,EAAM,YACtB,IAAIwE,EACJ,GAAI3D,IAAa,OACf2D,EAAOjC,IAAY,YAAc,OAASA,IAAY,OAAS,WAAa,gBACvE,CACL,MAAMC,EAASJ,EAA0B,EACzCoC,EAAOjC,IAAY,YAAcC,EAAS,WAC5C,CACA,OAAIgC,IAAS,OACJ,CACJ,uBAAgC,GAAG/E,CAAQ,IAC9C,EAEK,CACJ,uBAAgC,uBAAuBjB,CAAY,KACtE,CACF,GAAG,EACH,CAAC,CACP,GAEAb,EAAA,cAAC,OAAI,UAAU,yBAAyB,eAAciE,GAAoB,QACvElB,CACH,EACCkC,EACH,CAEJ,CACF,EAEAvE,EAAQ,YAAc,gBACtBA,EAAQ,OAASF",
6
+ "names": ["React", "classNames", "Sheet", "VisuallyHidden", "useShell", "useResponsivePresentation", "useResponsiveValue", "PaneResizeContext", "SidebarHandle", "PaneHandle", "Sidebar", "className", "presentation", "expandedSize", "minSize", "maxSize", "resizable", "collapsible", "onExpand", "onCollapse", "onResize", "onResizeStart", "onResizeEnd", "snapPoints", "snapTolerance", "collapseThreshold", "paneId", "persistence", "children", "style", "thinSize", "toggleModes", "state", "defaultState", "onStateChange", "props", "ref", "shell", "resolvedPresentation", "isOverlay", "isStacked", "localRef", "setRef", "node", "childArray", "handleChildren", "el", "contentChildren", "emitSizeChange", "cb", "strategy", "ms", "t", "s", "meta", "last", "now", "sidebarId", "wasControlledRef", "isControlled", "resolvedState", "resolvedDefaultState", "didInitRef", "initialState", "lastNotifyModeRef", "isContentVisible", "persistenceAdapter", "key", "v", "size", "mounted", "loaded", "shellForToggle", "resolveDefaultSidebarMode", "resolved", "compute", "current", "target", "cur", "lastOverlayWidthRef", "lastOverlayModeRef", "handleEl", "client", "startClient", "startSize", "isRtl", "delta", "i", "_s", "_ds", "_osc", "_sz", "_dsz", "_onsc", "_szu", "_szums", "domProps", "normalizeToPx", "value", "str", "rem", "pct", "base", "n", "defaultSize", "px", "clamped", "open", "o", "next"]
7
7
  }
@@ -59,6 +59,13 @@ interface ChatbarRootBaseProps {
59
59
  }) => void;
60
60
  size?: '1' | '2' | '3';
61
61
  variant?: 'surface' | 'outline' | 'classic' | 'ghost' | 'soft';
62
+ /** Accent color for the control (matches TextArea) */
63
+ color?: string;
64
+ /** Optional radius override (matches TextArea) */
65
+ radius?: string | number;
66
+ /** Panel/material translucency flags (matches TextArea) */
67
+ panelBackground?: 'solid' | 'translucent';
68
+ material?: 'solid' | 'translucent';
62
69
  width?: React.CSSProperties['width'];
63
70
  maxWidth?: React.CSSProperties['maxWidth'];
64
71
  asChild?: boolean;
@@ -200,6 +207,6 @@ interface SendProps extends Omit<IconButtonProps, 'size'> {
200
207
  clearOnSend?: boolean;
201
208
  }
202
209
  declare const Send: React.ForwardRefExoticComponent<SendProps & React.RefAttributes<HTMLButtonElement>>;
203
- export { Root, Textarea, InlineStart, InlineEnd, AttachmentsRow, Attachment, AttachTrigger, Row, RowStart, RowEnd, Send, };
204
- export type { RootProps as ChatbarRootProps, TextareaProps as ChatbarTextareaProps, RowProps as ChatbarRowProps, SendProps as ChatbarSendProps, ChatbarAttachment, };
210
+ export { Root, Textarea, InlineStart, InlineEnd, AttachmentsRow, Attachment, AttachTrigger, Row, RowStart, RowEnd, Send };
211
+ export type { RootProps as ChatbarRootProps, TextareaProps as ChatbarTextareaProps, RowProps as ChatbarRowProps, SendProps as ChatbarSendProps, ChatbarAttachment };
205
212
  //# sourceMappingURL=chatbar.d.ts.map