@epilot/zenith-react 0.2.0-next.5 → 0.2.0-next.6

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 (175) hide show
  1. package/dist/_virtual/_zenith-runtime-family_accordion.js +1 -1
  2. package/dist/_virtual/_zenith-runtime-family_alert-dialog.js +1 -1
  3. package/dist/_virtual/_zenith-runtime-family_avatar.js +1 -1
  4. package/dist/_virtual/_zenith-runtime-family_button.js +1 -1
  5. package/dist/_virtual/_zenith-runtime-family_checkbox.js +1 -1
  6. package/dist/_virtual/_zenith-runtime-family_csp-provider.js +1 -1
  7. package/dist/_virtual/_zenith-runtime-family_dialog.js +1 -1
  8. package/dist/_virtual/_zenith-runtime-family_direction-provider.js +1 -1
  9. package/dist/_virtual/_zenith-runtime-family_menu.js +1 -1
  10. package/dist/_virtual/_zenith-runtime-family_merge-props.js +1 -1
  11. package/dist/_virtual/_zenith-runtime-family_popover.js +1 -1
  12. package/dist/_virtual/_zenith-runtime-family_radio-group.js +1 -1
  13. package/dist/_virtual/_zenith-runtime-family_radio.js +1 -1
  14. package/dist/_virtual/_zenith-runtime-family_scroll-area.js +1 -1
  15. package/dist/_virtual/_zenith-runtime-family_select.js +1 -1
  16. package/dist/_virtual/_zenith-runtime-family_separator.js +1 -1
  17. package/dist/_virtual/_zenith-runtime-family_switch.js +1 -1
  18. package/dist/_virtual/_zenith-runtime-family_tabs.js +1 -1
  19. package/dist/_virtual/_zenith-runtime-family_toast.js +1 -1
  20. package/dist/_virtual/_zenith-runtime-family_toggle-group.js +1 -1
  21. package/dist/_virtual/_zenith-runtime-family_toggle.js +1 -1
  22. package/dist/_virtual/_zenith-runtime-family_tooltip.js +1 -1
  23. package/dist/_virtual/_zenith-runtime-family_use-render.js +1 -1
  24. package/dist/components/accordion/accordion.js +1 -1
  25. package/dist/components/accordion/accordion.js.map +1 -1
  26. package/dist/components/alert-dialog/alert-dialog.js +1 -1
  27. package/dist/components/alert-dialog/alert-dialog.js.map +1 -1
  28. package/dist/components/appearance-boundary/appearance-boundary.js +1 -1
  29. package/dist/components/appearance-boundary/appearance-boundary.js.map +1 -1
  30. package/dist/components/avatar/avatar-group.js +1 -1
  31. package/dist/components/avatar/avatar-group.js.map +1 -1
  32. package/dist/components/avatar/avatar.js +1 -1
  33. package/dist/components/avatar/avatar.js.map +1 -1
  34. package/dist/components/badge/badge.js +1 -1
  35. package/dist/components/badge/badge.js.map +1 -1
  36. package/dist/components/breadcrumb/breadcrumb.js +1 -1
  37. package/dist/components/breadcrumb/breadcrumb.js.map +1 -1
  38. package/dist/components/button/button.js +1 -1
  39. package/dist/components/button/button.js.map +1 -1
  40. package/dist/components/button-group/button-group.js +1 -1
  41. package/dist/components/button-group/button-group.js.map +1 -1
  42. package/dist/components/callout/callout.js +1 -1
  43. package/dist/components/callout/callout.js.map +1 -1
  44. package/dist/components/card/card.js +1 -1
  45. package/dist/components/card/card.js.map +1 -1
  46. package/dist/components/checkbox/checkbox.js +1 -1
  47. package/dist/components/checkbox/checkbox.js.map +1 -1
  48. package/dist/components/code-block/code-block.js +1 -1
  49. package/dist/components/code-block/code-block.js.map +1 -1
  50. package/dist/components/code-editor/code-editor.js +1 -1
  51. package/dist/components/code-editor/code-editor.js.map +1 -1
  52. package/dist/components/collapsible-sidebar/collapsible-sidebar.js +1 -1
  53. package/dist/components/collapsible-sidebar/collapsible-sidebar.js.map +1 -1
  54. package/dist/components/command/command.js +1 -1
  55. package/dist/components/command/command.js.map +1 -1
  56. package/dist/components/data-table/data-table-body.js +1 -1
  57. package/dist/components/data-table/data-table-body.js.map +1 -1
  58. package/dist/components/data-table/data-table-column-header.js +1 -1
  59. package/dist/components/data-table/data-table-column-header.js.map +1 -1
  60. package/dist/components/data-table/data-table-column-order.js +1 -1
  61. package/dist/components/data-table/data-table-column-order.js.map +1 -1
  62. package/dist/components/data-table/data-table-column-visibility.js +1 -1
  63. package/dist/components/data-table/data-table-column-visibility.js.map +1 -1
  64. package/dist/components/data-table/data-table-content.js +1 -1
  65. package/dist/components/data-table/data-table-content.js.map +1 -1
  66. package/dist/components/data-table/data-table-error.js +1 -1
  67. package/dist/components/data-table/data-table-error.js.map +1 -1
  68. package/dist/components/data-table/data-table-footer.js +1 -1
  69. package/dist/components/data-table/data-table-footer.js.map +1 -1
  70. package/dist/components/data-table/data-table-header-draggable.js +1 -1
  71. package/dist/components/data-table/data-table-header-draggable.js.map +1 -1
  72. package/dist/components/data-table/data-table-header.js +1 -1
  73. package/dist/components/data-table/data-table-header.js.map +1 -1
  74. package/dist/components/data-table/data-table-loading.js +1 -1
  75. package/dist/components/data-table/data-table-loading.js.map +1 -1
  76. package/dist/components/data-table/data-table-resize-handle.js +1 -1
  77. package/dist/components/data-table/data-table-resize-handle.js.map +1 -1
  78. package/dist/components/data-table/data-table-row.js +1 -1
  79. package/dist/components/data-table/data-table-row.js.map +1 -1
  80. package/dist/components/data-table/data-table-toolbar.js +1 -1
  81. package/dist/components/data-table/data-table-toolbar.js.map +1 -1
  82. package/dist/components/data-table/data-table.js +1 -1
  83. package/dist/components/data-table/data-table.js.map +1 -1
  84. package/dist/components/date-range-picker/date-range-picker.js +1 -1
  85. package/dist/components/date-range-picker/date-range-picker.js.map +1 -1
  86. package/dist/components/date-range-picker/range-calendar.js +1 -1
  87. package/dist/components/date-range-picker/range-calendar.js.map +1 -1
  88. package/dist/components/date-time-picker/calendar.js +1 -1
  89. package/dist/components/date-time-picker/calendar.js.map +1 -1
  90. package/dist/components/date-time-picker/date-time-picker-input.js +1 -1
  91. package/dist/components/date-time-picker/date-time-picker-input.js.map +1 -1
  92. package/dist/components/date-time-picker/date-time-picker-panel.js +1 -1
  93. package/dist/components/date-time-picker/date-time-picker-panel.js.map +1 -1
  94. package/dist/components/date-time-picker/date-time-picker.js +1 -1
  95. package/dist/components/date-time-picker/date-time-picker.js.map +1 -1
  96. package/dist/components/date-time-picker/time-picker.js +1 -1
  97. package/dist/components/date-time-picker/time-picker.js.map +1 -1
  98. package/dist/components/density-provider/density-provider.js +1 -1
  99. package/dist/components/dialog/dialog.js +1 -1
  100. package/dist/components/dialog/dialog.js.map +1 -1
  101. package/dist/components/drawer/drawer.js +1 -1
  102. package/dist/components/drawer/drawer.js.map +1 -1
  103. package/dist/components/dropdown-menu/dropdown-menu.js +1 -1
  104. package/dist/components/dropdown-menu/dropdown-menu.js.map +1 -1
  105. package/dist/components/field/field-combobox.js +1 -1
  106. package/dist/components/field/field-combobox.js.map +1 -1
  107. package/dist/components/field/field-select.js +1 -1
  108. package/dist/components/field/field-select.js.map +1 -1
  109. package/dist/components/field/field.js +1 -1
  110. package/dist/components/field/field.js.map +1 -1
  111. package/dist/components/label/label.js +1 -1
  112. package/dist/components/label/label.js.map +1 -1
  113. package/dist/components/list/list.js +1 -1
  114. package/dist/components/list/list.js.map +1 -1
  115. package/dist/components/option-card/option-card.js +1 -1
  116. package/dist/components/option-card/option-card.js.map +1 -1
  117. package/dist/components/pill/pill.js +1 -1
  118. package/dist/components/pill/pill.js.map +1 -1
  119. package/dist/components/popover/popover.js +1 -1
  120. package/dist/components/popover/popover.js.map +1 -1
  121. package/dist/components/radio/radio.js +1 -1
  122. package/dist/components/radio/radio.js.map +1 -1
  123. package/dist/components/scroll-area/scroll-area.js +1 -1
  124. package/dist/components/scroll-area/scroll-area.js.map +1 -1
  125. package/dist/components/scroll-area/scrollbar-styles.js +1 -1
  126. package/dist/components/scroll-area/scrollbar-styles.js.map +1 -1
  127. package/dist/components/scroll-overflow/scroll-overflow.js +1 -1
  128. package/dist/components/scroll-overflow/scroll-overflow.js.map +1 -1
  129. package/dist/components/segmented-control/segmented-control.js +133 -122
  130. package/dist/components/segmented-control/segmented-control.js.map +1 -1
  131. package/dist/components/select/select.js +1 -1
  132. package/dist/components/select/select.js.map +1 -1
  133. package/dist/components/separator/separator.js +1 -1
  134. package/dist/components/separator/separator.js.map +1 -1
  135. package/dist/components/skeleton/skeleton.js +1 -1
  136. package/dist/components/skeleton/skeleton.js.map +1 -1
  137. package/dist/components/slot/compose-as-child.js +1 -1
  138. package/dist/components/slot/compose-as-child.js.map +1 -1
  139. package/dist/components/spinner/spinner.js +1 -1
  140. package/dist/components/spinner/spinner.js.map +1 -1
  141. package/dist/components/surface/surface.js +1 -1
  142. package/dist/components/surface/surface.js.map +1 -1
  143. package/dist/components/switch/switch.js +1 -1
  144. package/dist/components/switch/switch.js.map +1 -1
  145. package/dist/components/table/table-pagination.js +1 -1
  146. package/dist/components/table/table-pagination.js.map +1 -1
  147. package/dist/components/table/table.js +1 -1
  148. package/dist/components/table/table.js.map +1 -1
  149. package/dist/components/tabs/tabs.js +1 -1
  150. package/dist/components/tabs/tabs.js.map +1 -1
  151. package/dist/components/text/text.js +1 -1
  152. package/dist/components/text/text.js.map +1 -1
  153. package/dist/components/toast/toast.js +1 -1
  154. package/dist/components/toast/toast.js.map +1 -1
  155. package/dist/components/toggle/toggle-group.js +1 -1
  156. package/dist/components/toggle/toggle-group.js.map +1 -1
  157. package/dist/components/toggle/toggle.js +1 -1
  158. package/dist/components/toggle/toggle.js.map +1 -1
  159. package/dist/components/tooltip/tooltip.js +1 -1
  160. package/dist/components/tooltip/tooltip.js.map +1 -1
  161. package/dist/index.js +1 -1
  162. package/dist/lib/clear-button.js +1 -1
  163. package/dist/lib/clear-button.js.map +1 -1
  164. package/dist/packages/tokens/dist/delivery/index.js +1 -1
  165. package/dist/packages/tokens/dist/delivery/index.js.map +1 -1
  166. package/dist/packages/tokens/dist/install.js +1 -1
  167. package/dist/packages/tokens/dist/install.js.map +1 -1
  168. package/dist/renderer/served.js +1 -1
  169. package/dist/renderer/served.js.map +1 -1
  170. package/dist/styles/host-reset.js.map +1 -1
  171. package/dist/styles/make-styles.js +1 -1
  172. package/dist/styles/make-styles.js.map +1 -1
  173. package/dist/styles/text-box.js.map +1 -1
  174. package/dist/tokens.json +1 -1
  175. package/package.json +4 -3
@@ -1 +1 @@
1
- {"version":3,"file":"collapsible-sidebar.js","sources":["../../../src/components/collapsible-sidebar/collapsible-sidebar.tsx"],"sourcesContent":["import * as React from \"react\"\n\nimport { mergeClasses, shorthands } from \"@epilot/zenith-runtime/v1\"\n\nimport { SLOT_ATTR } from \"../../renderer/contract\"\nimport { makeZenithStyles } from \"../../styles/make-styles\"\nimport { boxModel, nativeControl } from \"../../styles/host-reset\"\nimport * as tokens from \"../../tokens\"\n\n// --- Context ---\n\nexport interface CollapsibleSidebarContextValue {\n collapsed: boolean\n onCollapsedChange: (collapsed: boolean) => void\n width: number | string\n collapsedWidth: number | string\n isHovered: boolean\n expandOnHover: boolean\n skipTransition: boolean\n}\n\nconst CollapsibleSidebarContext =\n React.createContext<CollapsibleSidebarContextValue | null>(null)\n\nexport function useCollapsibleSidebar() {\n const ctx = React.useContext(CollapsibleSidebarContext)\n\n if (!ctx) {\n throw new Error(\n \"CollapsibleSidebar sub-components must be used within CollapsibleSidebar\"\n )\n }\n\n return ctx\n}\n\n// --- Styles ---\n\nconst useStyles = makeZenithStyles({\n root: {\n ...boxModel,\n position: \"relative\",\n height: \"100%\",\n display: \"flex\",\n flexDirection: \"column\",\n },\n content: {\n ...boxModel,\n display: \"flex\",\n flexDirection: \"column\",\n height: \"100%\",\n flexGrow: 1,\n flexShrink: 1,\n flexBasis: \"0%\",\n },\n floating: {\n ...boxModel,\n position: \"absolute\",\n top: 0,\n left: 0,\n height: \"100%\",\n // v1 z-50; floating panel layer above collapsed sidebar.\n zIndex: 50,\n ...shorthands.borderRadius(tokens.radius2xl),\n backgroundColor: tokens.body,\n // v1 shadow-[0_4px_20px_rgba(0,0,0,0.15)]; no shadow token exists in this package.\n boxShadow: \"0 4px 20px rgba(0, 0, 0, 0.15)\",\n display: \"flex\",\n flexDirection: \"column\",\n opacity: 0,\n transform: \"translateX(-50%)\",\n pointerEvents: \"none\",\n transitionProperty: \"all\",\n transitionDuration: \"200ms\",\n transitionTimingFunction: \"cubic-bezier(0.25, 0.46, 0.45, 0.94)\",\n \"&[data-visible]\": {\n opacity: 1,\n transform: \"translateX(0)\",\n pointerEvents: \"auto\",\n },\n },\n transitionNone: {\n transitionProperty: \"none\",\n },\n condensed: {\n ...boxModel,\n display: \"flex\",\n flexDirection: \"column\",\n alignItems: \"center\",\n paddingTop: tokens.spacingGroup2,\n // v1 gap-3 is 0.75rem; no spacing token for 0.75rem exists in this package.\n ...shorthands.gap(tokens.spacingElement3),\n flexGrow: 1,\n flexShrink: 1,\n flexBasis: \"0%\",\n },\n toggle: {\n ...nativeControl,\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"flex-end\",\n ...shorthands.padding(tokens.spacingGroup2),\n cursor: \"pointer\",\n backgroundColor: \"transparent\",\n ...shorthands.border(\"0\"),\n },\n})\n\n// --- CollapsibleSidebar (root) ---\n\nexport type CollapsibleSidebarProps = React.ComponentProps<\"div\"> & {\n collapsed?: boolean\n defaultCollapsed?: boolean\n onCollapsedChange?: (collapsed: boolean) => void\n width?: number | string\n collapsedWidth?: number | string\n expandOnHover?: boolean\n hoverDelay?: number\n}\n\nexport const CollapsibleSidebar = React.forwardRef<\n HTMLDivElement,\n CollapsibleSidebarProps\n>(function CollapsibleSidebar(\n {\n collapsed: controlledCollapsed,\n defaultCollapsed = false,\n onCollapsedChange,\n width = 264,\n collapsedWidth = 64,\n expandOnHover = true,\n hoverDelay = 100,\n className,\n children,\n ...props\n },\n ref\n) {\n const styles = useStyles()\n\n const [internalCollapsed, setInternalCollapsed] =\n React.useState(defaultCollapsed)\n const isControlled = controlledCollapsed !== undefined\n const collapsed = isControlled ? controlledCollapsed : internalCollapsed\n\n // Skip floating panel transition when expanding (to avoid overlap with inline panel)\n const [skipTransition, setSkipTransition] = React.useState(false)\n\n const handleCollapsedChange = React.useCallback(\n (value: boolean) => {\n if (!value) setSkipTransition(true)\n if (!isControlled) setInternalCollapsed(value)\n onCollapsedChange?.(value)\n },\n [isControlled, onCollapsedChange]\n )\n\n // Hover state for floating panel\n const [isHovered, setIsHovered] = React.useState(false)\n const hoverTimeoutRef = React.useRef<ReturnType<typeof setTimeout>>(undefined)\n\n const handleMouseEnter = React.useCallback(() => {\n if (!collapsed || !expandOnHover) return\n if (hoverTimeoutRef.current) clearTimeout(hoverTimeoutRef.current)\n hoverTimeoutRef.current = setTimeout(() => setIsHovered(true), hoverDelay)\n }, [collapsed, expandOnHover, hoverDelay])\n\n const handleMouseLeave = React.useCallback(() => {\n if (hoverTimeoutRef.current) clearTimeout(hoverTimeoutRef.current)\n setIsHovered(false)\n }, [])\n\n // Reset hover when collapse state changes\n React.useEffect(() => {\n setIsHovered(false)\n // Reset skipTransition after the render so future hover exits animate normally\n const raf = requestAnimationFrame(() => setSkipTransition(false))\n return () => cancelAnimationFrame(raf)\n }, [collapsed])\n\n // Cleanup timeout on unmount\n React.useEffect(() => {\n return () => {\n if (hoverTimeoutRef.current) clearTimeout(hoverTimeoutRef.current)\n }\n }, [])\n\n const contextValue = React.useMemo(\n () => ({\n collapsed,\n onCollapsedChange: handleCollapsedChange,\n width,\n collapsedWidth,\n isHovered,\n expandOnHover,\n skipTransition,\n }),\n [\n collapsed,\n handleCollapsedChange,\n width,\n collapsedWidth,\n isHovered,\n expandOnHover,\n skipTransition,\n ]\n )\n\n return (\n <CollapsibleSidebarContext.Provider value={contextValue}>\n <div\n ref={ref}\n data-slot=\"collapsible-sidebar\"\n {...{ [SLOT_ATTR]: \"collapsible-sidebar\" }}\n data-collapsed={collapsed ? \"\" : undefined}\n className={mergeClasses(styles.root, className)}\n onMouseEnter={handleMouseEnter}\n onMouseLeave={handleMouseLeave}\n {...props}\n >\n {children}\n </div>\n </CollapsibleSidebarContext.Provider>\n )\n})\n\n// --- CollapsibleSidebarContent ---\n\nexport type CollapsibleSidebarContentProps = React.ComponentProps<\"aside\"> & {\n floatingClassName?: string\n}\n\nexport const CollapsibleSidebarContent = React.forwardRef<\n HTMLElement,\n CollapsibleSidebarContentProps\n>(function CollapsibleSidebarContent(\n { className, floatingClassName, children, style, ...props },\n ref\n) {\n const styles = useStyles()\n const { collapsed, width, isHovered, expandOnHover, skipTransition } =\n useCollapsibleSidebar()\n\n const widthValue = typeof width === \"number\" ? `${width}px` : width\n\n return (\n <>\n {/* Inline panel: only rendered when expanded */}\n {!collapsed && (\n <aside\n ref={ref}\n data-slot=\"collapsible-sidebar-content\"\n {...{ [SLOT_ATTR]: \"collapsible-sidebar-content\" }}\n className={mergeClasses(styles.content, className)}\n style={{ width: widthValue, ...style }}\n {...props}\n >\n {children}\n </aside>\n )}\n\n {/* Floating panel: visible on hover when collapsed (only if expandOnHover is enabled) */}\n {expandOnHover && (\n <div\n data-slot=\"collapsible-sidebar-floating\"\n {...{ [SLOT_ATTR]: \"collapsible-sidebar-floating\" }}\n data-visible={collapsed && isHovered ? \"\" : undefined}\n className={mergeClasses(\n styles.floating,\n skipTransition && styles.transitionNone,\n floatingClassName\n )}\n style={{ width: widthValue }}\n >\n {collapsed && isHovered && children}\n </div>\n )}\n </>\n )\n})\n\n// --- CollapsibleSidebarCondensed ---\n\nexport type CollapsibleSidebarCondensedProps = React.ComponentProps<\"div\">\n\nexport const CollapsibleSidebarCondensed = React.forwardRef<\n HTMLDivElement,\n CollapsibleSidebarCondensedProps\n>(function CollapsibleSidebarCondensed(\n { className, children, style, ...props },\n ref\n) {\n const styles = useStyles()\n const { collapsed, collapsedWidth } = useCollapsibleSidebar()\n\n if (!collapsed) return null\n\n const collapsedWidthValue =\n typeof collapsedWidth === \"number\" ? `${collapsedWidth}px` : collapsedWidth\n\n return (\n <div\n ref={ref}\n data-slot=\"collapsible-sidebar-condensed\"\n {...{ [SLOT_ATTR]: \"collapsible-sidebar-condensed\" }}\n className={mergeClasses(styles.condensed, className)}\n style={{ width: collapsedWidthValue, ...style }}\n {...props}\n >\n {children}\n </div>\n )\n})\n\n// --- CollapsibleSidebarToggle ---\n\nexport type CollapsibleSidebarToggleProps = Omit<\n React.ComponentProps<\"button\">,\n \"onClick\" | \"children\"\n> & {\n children?:\n React.ReactNode | ((props: { collapsed: boolean }) => React.ReactNode)\n}\n\nexport const CollapsibleSidebarToggle = React.forwardRef<\n HTMLButtonElement,\n CollapsibleSidebarToggleProps\n>(function CollapsibleSidebarToggle({ className, children, ...props }, ref) {\n const styles = useStyles()\n const { collapsed, onCollapsedChange } = useCollapsibleSidebar()\n\n return (\n <button\n ref={ref}\n data-slot=\"collapsible-sidebar-toggle\"\n {...{ [SLOT_ATTR]: \"collapsible-sidebar-toggle\" }}\n data-collapsed={collapsed ? \"\" : undefined}\n type=\"button\"\n aria-expanded={!collapsed}\n aria-label={collapsed ? \"Expand sidebar\" : \"Collapse sidebar\"}\n className={mergeClasses(styles.toggle, className)}\n onClick={() => onCollapsedChange(!collapsed)}\n {...props}\n >\n {typeof children === \"function\" ? children({ collapsed }) : children}\n </button>\n )\n})\n"],"names":["CollapsibleSidebarContext","React","useCollapsibleSidebar","ctx","useStyles","makeZenithStyles","boxModel","shorthands","tokens.radius2xl","tokens.body","tokens.spacingGroup2","tokens.spacingElement3","nativeControl","CollapsibleSidebar","controlledCollapsed","defaultCollapsed","onCollapsedChange","width","collapsedWidth","expandOnHover","hoverDelay","className","children","props","ref","styles","internalCollapsed","setInternalCollapsed","isControlled","collapsed","skipTransition","setSkipTransition","handleCollapsedChange","value","isHovered","setIsHovered","hoverTimeoutRef","handleMouseEnter","handleMouseLeave","raf","contextValue","jsx","SLOT_ATTR","mergeClasses","CollapsibleSidebarContent","floatingClassName","style","widthValue","jsxs","Fragment","CollapsibleSidebarCondensed","collapsedWidthValue","CollapsibleSidebarToggle"],"mappings":"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"}
1
+ {"version":3,"file":"collapsible-sidebar.js","sources":["../../../src/components/collapsible-sidebar/collapsible-sidebar.tsx"],"sourcesContent":["import * as React from \"react\"\n\nimport { mergeClasses, shorthands } from \"@epilot/zenith-runtime/v1/core\"\n\nimport { SLOT_ATTR } from \"../../renderer/contract\"\nimport { makeZenithStyles } from \"../../styles/make-styles\"\nimport { boxModel, nativeControl } from \"../../styles/host-reset\"\nimport * as tokens from \"../../tokens\"\n\n// --- Context ---\n\nexport interface CollapsibleSidebarContextValue {\n collapsed: boolean\n onCollapsedChange: (collapsed: boolean) => void\n width: number | string\n collapsedWidth: number | string\n isHovered: boolean\n expandOnHover: boolean\n skipTransition: boolean\n}\n\nconst CollapsibleSidebarContext =\n React.createContext<CollapsibleSidebarContextValue | null>(null)\n\nexport function useCollapsibleSidebar() {\n const ctx = React.useContext(CollapsibleSidebarContext)\n\n if (!ctx) {\n throw new Error(\n \"CollapsibleSidebar sub-components must be used within CollapsibleSidebar\"\n )\n }\n\n return ctx\n}\n\n// --- Styles ---\n\nconst useStyles = makeZenithStyles({\n root: {\n ...boxModel,\n position: \"relative\",\n height: \"100%\",\n display: \"flex\",\n flexDirection: \"column\",\n },\n content: {\n ...boxModel,\n display: \"flex\",\n flexDirection: \"column\",\n height: \"100%\",\n flexGrow: 1,\n flexShrink: 1,\n flexBasis: \"0%\",\n },\n floating: {\n ...boxModel,\n position: \"absolute\",\n top: 0,\n left: 0,\n height: \"100%\",\n // v1 z-50; floating panel layer above collapsed sidebar.\n zIndex: 50,\n ...shorthands.borderRadius(tokens.radius2xl),\n backgroundColor: tokens.body,\n // v1 shadow-[0_4px_20px_rgba(0,0,0,0.15)]; no shadow token exists in this package.\n boxShadow: \"0 4px 20px rgba(0, 0, 0, 0.15)\",\n display: \"flex\",\n flexDirection: \"column\",\n opacity: 0,\n transform: \"translateX(-50%)\",\n pointerEvents: \"none\",\n transitionProperty: \"all\",\n transitionDuration: \"200ms\",\n transitionTimingFunction: \"cubic-bezier(0.25, 0.46, 0.45, 0.94)\",\n \"&[data-visible]\": {\n opacity: 1,\n transform: \"translateX(0)\",\n pointerEvents: \"auto\",\n },\n },\n transitionNone: {\n transitionProperty: \"none\",\n },\n condensed: {\n ...boxModel,\n display: \"flex\",\n flexDirection: \"column\",\n alignItems: \"center\",\n paddingTop: tokens.spacingGroup2,\n // v1 gap-3 is 0.75rem; no spacing token for 0.75rem exists in this package.\n ...shorthands.gap(tokens.spacingElement3),\n flexGrow: 1,\n flexShrink: 1,\n flexBasis: \"0%\",\n },\n toggle: {\n ...nativeControl,\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"flex-end\",\n ...shorthands.padding(tokens.spacingGroup2),\n cursor: \"pointer\",\n backgroundColor: \"transparent\",\n ...shorthands.border(\"0\"),\n },\n})\n\n// --- CollapsibleSidebar (root) ---\n\nexport type CollapsibleSidebarProps = React.ComponentProps<\"div\"> & {\n collapsed?: boolean\n defaultCollapsed?: boolean\n onCollapsedChange?: (collapsed: boolean) => void\n width?: number | string\n collapsedWidth?: number | string\n expandOnHover?: boolean\n hoverDelay?: number\n}\n\nexport const CollapsibleSidebar = React.forwardRef<\n HTMLDivElement,\n CollapsibleSidebarProps\n>(function CollapsibleSidebar(\n {\n collapsed: controlledCollapsed,\n defaultCollapsed = false,\n onCollapsedChange,\n width = 264,\n collapsedWidth = 64,\n expandOnHover = true,\n hoverDelay = 100,\n className,\n children,\n ...props\n },\n ref\n) {\n const styles = useStyles()\n\n const [internalCollapsed, setInternalCollapsed] =\n React.useState(defaultCollapsed)\n const isControlled = controlledCollapsed !== undefined\n const collapsed = isControlled ? controlledCollapsed : internalCollapsed\n\n // Skip floating panel transition when expanding (to avoid overlap with inline panel)\n const [skipTransition, setSkipTransition] = React.useState(false)\n\n const handleCollapsedChange = React.useCallback(\n (value: boolean) => {\n if (!value) setSkipTransition(true)\n if (!isControlled) setInternalCollapsed(value)\n onCollapsedChange?.(value)\n },\n [isControlled, onCollapsedChange]\n )\n\n // Hover state for floating panel\n const [isHovered, setIsHovered] = React.useState(false)\n const hoverTimeoutRef = React.useRef<ReturnType<typeof setTimeout>>(undefined)\n\n const handleMouseEnter = React.useCallback(() => {\n if (!collapsed || !expandOnHover) return\n if (hoverTimeoutRef.current) clearTimeout(hoverTimeoutRef.current)\n hoverTimeoutRef.current = setTimeout(() => setIsHovered(true), hoverDelay)\n }, [collapsed, expandOnHover, hoverDelay])\n\n const handleMouseLeave = React.useCallback(() => {\n if (hoverTimeoutRef.current) clearTimeout(hoverTimeoutRef.current)\n setIsHovered(false)\n }, [])\n\n // Reset hover when collapse state changes\n React.useEffect(() => {\n setIsHovered(false)\n // Reset skipTransition after the render so future hover exits animate normally\n const raf = requestAnimationFrame(() => setSkipTransition(false))\n return () => cancelAnimationFrame(raf)\n }, [collapsed])\n\n // Cleanup timeout on unmount\n React.useEffect(() => {\n return () => {\n if (hoverTimeoutRef.current) clearTimeout(hoverTimeoutRef.current)\n }\n }, [])\n\n const contextValue = React.useMemo(\n () => ({\n collapsed,\n onCollapsedChange: handleCollapsedChange,\n width,\n collapsedWidth,\n isHovered,\n expandOnHover,\n skipTransition,\n }),\n [\n collapsed,\n handleCollapsedChange,\n width,\n collapsedWidth,\n isHovered,\n expandOnHover,\n skipTransition,\n ]\n )\n\n return (\n <CollapsibleSidebarContext.Provider value={contextValue}>\n <div\n ref={ref}\n data-slot=\"collapsible-sidebar\"\n {...{ [SLOT_ATTR]: \"collapsible-sidebar\" }}\n data-collapsed={collapsed ? \"\" : undefined}\n className={mergeClasses(styles.root, className)}\n onMouseEnter={handleMouseEnter}\n onMouseLeave={handleMouseLeave}\n {...props}\n >\n {children}\n </div>\n </CollapsibleSidebarContext.Provider>\n )\n})\n\n// --- CollapsibleSidebarContent ---\n\nexport type CollapsibleSidebarContentProps = React.ComponentProps<\"aside\"> & {\n floatingClassName?: string\n}\n\nexport const CollapsibleSidebarContent = React.forwardRef<\n HTMLElement,\n CollapsibleSidebarContentProps\n>(function CollapsibleSidebarContent(\n { className, floatingClassName, children, style, ...props },\n ref\n) {\n const styles = useStyles()\n const { collapsed, width, isHovered, expandOnHover, skipTransition } =\n useCollapsibleSidebar()\n\n const widthValue = typeof width === \"number\" ? `${width}px` : width\n\n return (\n <>\n {/* Inline panel: only rendered when expanded */}\n {!collapsed && (\n <aside\n ref={ref}\n data-slot=\"collapsible-sidebar-content\"\n {...{ [SLOT_ATTR]: \"collapsible-sidebar-content\" }}\n className={mergeClasses(styles.content, className)}\n style={{ width: widthValue, ...style }}\n {...props}\n >\n {children}\n </aside>\n )}\n\n {/* Floating panel: visible on hover when collapsed (only if expandOnHover is enabled) */}\n {expandOnHover && (\n <div\n data-slot=\"collapsible-sidebar-floating\"\n {...{ [SLOT_ATTR]: \"collapsible-sidebar-floating\" }}\n data-visible={collapsed && isHovered ? \"\" : undefined}\n className={mergeClasses(\n styles.floating,\n skipTransition && styles.transitionNone,\n floatingClassName\n )}\n style={{ width: widthValue }}\n >\n {collapsed && isHovered && children}\n </div>\n )}\n </>\n )\n})\n\n// --- CollapsibleSidebarCondensed ---\n\nexport type CollapsibleSidebarCondensedProps = React.ComponentProps<\"div\">\n\nexport const CollapsibleSidebarCondensed = React.forwardRef<\n HTMLDivElement,\n CollapsibleSidebarCondensedProps\n>(function CollapsibleSidebarCondensed(\n { className, children, style, ...props },\n ref\n) {\n const styles = useStyles()\n const { collapsed, collapsedWidth } = useCollapsibleSidebar()\n\n if (!collapsed) return null\n\n const collapsedWidthValue =\n typeof collapsedWidth === \"number\" ? `${collapsedWidth}px` : collapsedWidth\n\n return (\n <div\n ref={ref}\n data-slot=\"collapsible-sidebar-condensed\"\n {...{ [SLOT_ATTR]: \"collapsible-sidebar-condensed\" }}\n className={mergeClasses(styles.condensed, className)}\n style={{ width: collapsedWidthValue, ...style }}\n {...props}\n >\n {children}\n </div>\n )\n})\n\n// --- CollapsibleSidebarToggle ---\n\nexport type CollapsibleSidebarToggleProps = Omit<\n React.ComponentProps<\"button\">,\n \"onClick\" | \"children\"\n> & {\n children?:\n React.ReactNode | ((props: { collapsed: boolean }) => React.ReactNode)\n}\n\nexport const CollapsibleSidebarToggle = React.forwardRef<\n HTMLButtonElement,\n CollapsibleSidebarToggleProps\n>(function CollapsibleSidebarToggle({ className, children, ...props }, ref) {\n const styles = useStyles()\n const { collapsed, onCollapsedChange } = useCollapsibleSidebar()\n\n return (\n <button\n ref={ref}\n data-slot=\"collapsible-sidebar-toggle\"\n {...{ [SLOT_ATTR]: \"collapsible-sidebar-toggle\" }}\n data-collapsed={collapsed ? \"\" : undefined}\n type=\"button\"\n aria-expanded={!collapsed}\n aria-label={collapsed ? \"Expand sidebar\" : \"Collapse sidebar\"}\n className={mergeClasses(styles.toggle, className)}\n onClick={() => onCollapsedChange(!collapsed)}\n {...props}\n >\n {typeof children === \"function\" ? children({ collapsed }) : children}\n </button>\n )\n})\n"],"names":["CollapsibleSidebarContext","React","useCollapsibleSidebar","ctx","useStyles","makeZenithStyles","boxModel","shorthands","tokens.radius2xl","tokens.body","tokens.spacingGroup2","tokens.spacingElement3","nativeControl","CollapsibleSidebar","controlledCollapsed","defaultCollapsed","onCollapsedChange","width","collapsedWidth","expandOnHover","hoverDelay","className","children","props","ref","styles","internalCollapsed","setInternalCollapsed","isControlled","collapsed","skipTransition","setSkipTransition","handleCollapsedChange","value","isHovered","setIsHovered","hoverTimeoutRef","handleMouseEnter","handleMouseLeave","raf","contextValue","jsx","SLOT_ATTR","mergeClasses","CollapsibleSidebarContent","floatingClassName","style","widthValue","jsxs","Fragment","CollapsibleSidebarCondensed","collapsedWidthValue","CollapsibleSidebarToggle"],"mappings":"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"}
@@ -1,7 +1,7 @@
1
1
  import { jsx as a, jsxs as S } from "react/jsx-runtime";
2
2
  import * as l from "react";
3
3
  import { Command as g } from "../../vendor/.bun/cmdk@1.1.1_2b23df507bdda662/vendor/cmdk/dist/index.js";
4
- import { mergeClasses as i, SLOT_ATTR as m, shorthands as p } from "@epilot/zenith-runtime/v1";
4
+ import { mergeClasses as i, SLOT_ATTR as m, shorthands as p } from "@epilot/zenith-runtime/v1/core.js";
5
5
  import { makeZenithStyles as q } from "../../styles/make-styles.js";
6
6
  import { boxModel as s } from "../../styles/host-reset.js";
7
7
  import { spacingElement3 as f, spacingElement2 as r, fontWeightMedium as v, grayA11 as u, leadingXs as T, textXs as L, accentA3 as b, grayA12 as C, leadingSm as x, textSm as R, spacingElement1 as w, graySoft as I, focusRing as B, body as D, radiusSm as E, radiusMd as k, grayA3 as W } from "../../tokens/index.js";
@@ -1 +1 @@
1
- {"version":3,"file":"command.js","sources":["../../../src/components/command/command.tsx"],"sourcesContent":["import * as React from \"react\"\nimport { Command as CommandPrimitive } from \"cmdk\"\nimport { mergeClasses, shorthands } from \"@epilot/zenith-runtime/v1\"\n\nimport { SLOT_ATTR } from \"../../renderer/contract\"\nimport { makeZenithStyles } from \"../../styles/make-styles\"\nimport { boxModel } from \"../../styles/host-reset\"\nimport * as tokens from \"../../tokens\"\nimport {\n Dialog,\n DialogContent,\n DialogDescription,\n DialogHeader,\n DialogTitle,\n} from \"../dialog/dialog\"\n\nconst SearchIcon = (props: React.SVGProps<SVGSVGElement>) => (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n height=\"24px\"\n viewBox=\"0 -960 960 960\"\n width=\"24px\"\n fill=\"currentColor\"\n {...props}\n >\n <path d=\"M380-320q-109 0-184.5-75.5T120-580q0-109 75.5-184.5T380-840q109 0 184.5 75.5T640-580q0 44-14 83t-38 69l224 224q11 11 11 28t-11 28q-11 11-28 11t-28-11L532-372q-30 24-69 38t-83 14Zm0-80q75 0 127.5-52.5T560-580q0-75-52.5-127.5T380-760q-75 0-127.5 52.5T200-580q0 75 52.5 127.5T380-400Z\" />\n </svg>\n)\n\nconst useStyles = makeZenithStyles({\n root: {\n ...boxModel,\n backgroundColor: tokens.body,\n color: tokens.grayA12,\n display: \"flex\",\n height: \"100%\",\n width: \"100%\",\n flexDirection: \"column\",\n overflowX: \"hidden\",\n overflowY: \"hidden\",\n ...shorthands.borderRadius(tokens.radiusMd),\n },\n inputWrapper: {\n ...boxModel,\n display: \"flex\",\n alignItems: \"center\",\n ...shorthands.gap(tokens.spacingElement2),\n ...shorthands.borderBottom(\"1px\", \"solid\", tokens.grayA3),\n paddingLeft: tokens.spacingElement3,\n paddingRight: tokens.spacingElement3,\n },\n searchIcon: {\n ...boxModel,\n width: \"1.25rem\",\n height: \"1.25rem\",\n flexShrink: 0,\n opacity: 0.5,\n },\n input: {\n ...boxModel,\n height: \"3rem\",\n display: \"flex\",\n width: \"100%\",\n ...shorthands.borderRadius(tokens.radiusMd),\n backgroundColor: \"transparent\",\n paddingTop: tokens.spacingElement3,\n paddingBottom: tokens.spacingElement3,\n fontSize: tokens.textSm,\n lineHeight: tokens.leadingSm,\n outlineStyle: \"none\",\n \":focus-visible\": {\n outlineWidth: \"2px\",\n outlineStyle: \"solid\",\n // Inset (negative), not the outward +2px every other audited control uses: this input sits\n // flush against the top edge of the Command root, which clips overflow for its rounded\n // corners.\n outlineOffset: \"-2px\",\n outlineColor: tokens.focusRing,\n },\n \"::placeholder\": {\n color: tokens.grayA11,\n },\n \":disabled\": {\n cursor: \"not-allowed\",\n opacity: 0.5,\n },\n },\n list: {\n overflowX: \"hidden\",\n overflowY: \"auto\",\n scrollPaddingTop: tokens.spacingElement1,\n scrollPaddingBottom: tokens.spacingElement1,\n },\n empty: {\n ...boxModel,\n paddingTop: \"1.5rem\",\n paddingBottom: \"1.5rem\",\n textAlign: \"center\",\n fontSize: tokens.textSm,\n lineHeight: tokens.leadingSm,\n color: tokens.grayA11,\n },\n group: {\n ...boxModel,\n color: tokens.grayA12,\n overflowX: \"hidden\",\n overflowY: \"hidden\",\n ...shorthands.padding(tokens.spacingElement1),\n \"& [cmdk-group-heading]\": {\n color: tokens.grayA11,\n paddingLeft: tokens.spacingElement2,\n paddingRight: tokens.spacingElement2,\n paddingTop: \"0.375rem\",\n paddingBottom: \"0.375rem\",\n fontSize: tokens.textXs,\n lineHeight: tokens.leadingXs,\n fontWeight: tokens.fontWeightMedium,\n },\n },\n separator: {\n ...boxModel,\n backgroundColor: tokens.graySoft,\n marginLeft: `calc(-1 * ${tokens.spacingElement1})`,\n marginRight: `calc(-1 * ${tokens.spacingElement1})`,\n height: \"1px\",\n },\n item: {\n ...boxModel,\n position: \"relative\",\n display: \"flex\",\n cursor: \"default\",\n alignItems: \"center\",\n ...shorthands.gap(tokens.spacingElement2),\n ...shorthands.borderRadius(tokens.radiusSm),\n paddingLeft: tokens.spacingElement2,\n paddingRight: tokens.spacingElement2,\n paddingTop: \"0.375rem\",\n paddingBottom: \"0.375rem\",\n fontSize: tokens.textSm,\n lineHeight: tokens.leadingSm,\n outlineStyle: \"none\",\n userSelect: \"none\",\n color: tokens.grayA12,\n \"&[data-selected='true'], &[aria-selected='true']\": {\n backgroundColor: tokens.accentA3,\n },\n \":hover\": {\n backgroundColor: tokens.accentA3,\n },\n \"&[data-disabled='true'], &[aria-disabled='true']\": {\n pointerEvents: \"none\",\n opacity: 0.5,\n },\n \"& svg\": {\n pointerEvents: \"none\",\n flexShrink: 0,\n width: \"1rem\",\n height: \"1rem\",\n },\n \"& svg:not([class*='text-'])\": {\n color: tokens.grayA11,\n },\n },\n shortcut: {\n color: tokens.grayA11,\n marginLeft: \"auto\",\n fontSize: tokens.textXs,\n lineHeight: tokens.leadingXs,\n letterSpacing: \"0.1em\",\n },\n loading: {\n color: tokens.grayA11,\n },\n dialogContent: {\n ...boxModel,\n overflowX: \"hidden\",\n overflowY: \"hidden\",\n ...shorthands.padding(0),\n },\n dialogCommand: {\n \"& [cmdk-group-heading]\": {\n color: tokens.grayA11,\n paddingLeft: tokens.spacingElement2,\n paddingRight: tokens.spacingElement2,\n fontWeight: tokens.fontWeightMedium,\n },\n [`& [${SLOT_ATTR}=\"command-input-wrapper\"]`]: {\n height: \"3rem\",\n },\n \"& [cmdk-group]\": {\n paddingLeft: tokens.spacingElement2,\n paddingRight: tokens.spacingElement2,\n },\n \"& [cmdk-item]\": {\n paddingLeft: tokens.spacingElement2,\n paddingRight: tokens.spacingElement2,\n paddingTop: tokens.spacingElement3,\n paddingBottom: tokens.spacingElement3,\n },\n \"& [cmdk-item] svg\": {\n width: \"1.25rem\",\n height: \"1.25rem\",\n },\n \"& [cmdk-input-wrapper] svg\": {\n width: \"1.25rem\",\n height: \"1.25rem\",\n },\n \"& [cmdk-input]\": {\n height: \"3rem\",\n },\n },\n srOnly: {\n ...boxModel,\n position: \"absolute\",\n width: \"1px\",\n height: \"1px\",\n paddingTop: 0,\n paddingBottom: 0,\n paddingLeft: 0,\n paddingRight: 0,\n marginTop: \"-1px\",\n marginBottom: \"-1px\",\n marginLeft: \"-1px\",\n marginRight: \"-1px\",\n overflowX: \"hidden\",\n overflowY: \"hidden\",\n clip: \"rect(0, 0, 0, 0)\",\n whiteSpace: \"nowrap\",\n ...shorthands.borderWidth(0),\n },\n})\n\n/**\n * never exported it and its only consumer is `field/field-combobox.tsx`, which builds its listbox\n * out of these pieces. This was a decision, not an oversight: a public Command is a surface nobody\n * has reviewed as public API, and exporting it after 0.1 is additive and non-breaking, whereas un-\n * exporting it would not be.\n * @internal not part of the 0.1 public API. Command is fully implemented and tested, but the barrel\n */\nexport type CommandProps = React.ComponentProps<typeof CommandPrimitive> & {\n \"data-slot\"?: string\n}\n\nexport const Command = React.forwardRef<\n React.ElementRef<typeof CommandPrimitive>,\n CommandProps\n>(function Command(\n { className, \"data-slot\": dataSlot = \"command\", ...props },\n ref\n) {\n const styles = useStyles()\n\n return (\n <CommandPrimitive\n ref={ref}\n data-slot={dataSlot}\n {...{ [SLOT_ATTR]: dataSlot }}\n className={mergeClasses(styles.root, className)}\n {...props}\n />\n )\n})\n\nexport type CommandDialogProps = Omit<\n React.ComponentProps<typeof Dialog>,\n \"children\"\n> & {\n children?: React.ReactNode\n title?: string\n description?: string\n className?: string\n showCloseButton?: boolean\n}\n\nexport const CommandDialog = React.forwardRef<HTMLElement, CommandDialogProps>(\n function CommandDialog(\n {\n title = \"Command Palette\",\n description = \"Search for a command to run...\",\n children,\n className,\n showCloseButton = true,\n ...props\n },\n _ref\n ) {\n const styles = useStyles()\n\n return (\n <Dialog {...props}>\n <DialogHeader className={styles.srOnly}>\n <DialogTitle>{title}</DialogTitle>\n <DialogDescription>{description}</DialogDescription>\n </DialogHeader>\n <DialogContent\n className={mergeClasses(styles.dialogContent, className)}\n showCloseButton={showCloseButton}\n >\n <Command className={styles.dialogCommand}>{children}</Command>\n </DialogContent>\n </Dialog>\n )\n }\n)\n\nexport type CommandInputProps = React.ComponentProps<\n typeof CommandPrimitive.Input\n> & {\n wrapperClassName?: string\n}\n\nexport const CommandInput = React.forwardRef<\n React.ElementRef<typeof CommandPrimitive.Input>,\n CommandInputProps\n>(function CommandInput({ className, wrapperClassName, ...props }, ref) {\n const styles = useStyles()\n\n return (\n <div\n data-slot=\"command-input-wrapper\"\n {...{ [SLOT_ATTR]: \"command-input-wrapper\" }}\n className={mergeClasses(styles.inputWrapper, wrapperClassName)}\n >\n <SearchIcon className={styles.searchIcon} />\n <CommandPrimitive.Input\n ref={ref}\n data-slot=\"command-input\"\n {...{ [SLOT_ATTR]: \"command-input\" }}\n className={mergeClasses(styles.input, className)}\n {...props}\n />\n </div>\n )\n})\n\nexport type CommandListProps = React.ComponentProps<\n typeof CommandPrimitive.List\n>\n\nexport const CommandList = React.forwardRef<\n React.ElementRef<typeof CommandPrimitive.List>,\n CommandListProps\n>(function CommandList({ className, ...props }, ref) {\n const styles = useStyles()\n\n return (\n <CommandPrimitive.List\n ref={ref}\n data-slot=\"command-list\"\n {...{ [SLOT_ATTR]: \"command-list\" }}\n className={mergeClasses(styles.list, className)}\n {...props}\n />\n )\n})\n\nexport type CommandEmptyProps = React.ComponentProps<\n typeof CommandPrimitive.Empty\n>\n\nexport const CommandEmpty = React.forwardRef<\n React.ElementRef<typeof CommandPrimitive.Empty>,\n CommandEmptyProps\n>(function CommandEmpty({ className, ...props }, ref) {\n const styles = useStyles()\n\n return (\n <CommandPrimitive.Empty\n ref={ref}\n data-slot=\"command-empty\"\n {...{ [SLOT_ATTR]: \"command-empty\" }}\n className={mergeClasses(styles.empty, className)}\n {...props}\n />\n )\n})\n\nexport type CommandGroupProps = React.ComponentProps<\n typeof CommandPrimitive.Group\n>\n\nexport const CommandGroup = React.forwardRef<\n React.ElementRef<typeof CommandPrimitive.Group>,\n CommandGroupProps\n>(function CommandGroup({ className, ...props }, ref) {\n const styles = useStyles()\n\n return (\n <CommandPrimitive.Group\n ref={ref}\n data-slot=\"command-group\"\n {...{ [SLOT_ATTR]: \"command-group\" }}\n className={mergeClasses(styles.group, className)}\n {...props}\n />\n )\n})\n\nexport type CommandSeparatorProps = React.ComponentProps<\n typeof CommandPrimitive.Separator\n>\n\nexport const CommandSeparator = React.forwardRef<\n React.ElementRef<typeof CommandPrimitive.Separator>,\n CommandSeparatorProps\n>(function CommandSeparator({ className, ...props }, ref) {\n const styles = useStyles()\n\n return (\n <CommandPrimitive.Separator\n ref={ref}\n data-slot=\"command-separator\"\n {...{ [SLOT_ATTR]: \"command-separator\" }}\n className={mergeClasses(styles.separator, className)}\n {...props}\n />\n )\n})\n\nexport type CommandItemProps = React.ComponentProps<\n typeof CommandPrimitive.Item\n>\n\nexport const CommandItem = React.forwardRef<\n React.ElementRef<typeof CommandPrimitive.Item>,\n CommandItemProps\n>(function CommandItem({ className, ...props }, ref) {\n const styles = useStyles()\n\n return (\n <CommandPrimitive.Item\n ref={ref}\n data-slot=\"command-item\"\n {...{ [SLOT_ATTR]: \"command-item\" }}\n className={mergeClasses(styles.item, className)}\n {...props}\n />\n )\n})\n\nexport type CommandShortcutProps = React.ComponentProps<\"span\">\n\nexport const CommandShortcut = React.forwardRef<\n HTMLSpanElement,\n CommandShortcutProps\n>(function CommandShortcut({ className, ...props }, ref) {\n const styles = useStyles()\n\n return (\n <span\n ref={ref}\n data-slot=\"command-shortcut\"\n {...{ [SLOT_ATTR]: \"command-shortcut\" }}\n className={mergeClasses(styles.shortcut, className)}\n {...props}\n />\n )\n})\n\nexport type CommandLoadingProps = React.ComponentProps<\n typeof CommandPrimitive.Loading\n>\n\nexport const CommandLoading = React.forwardRef<\n React.ElementRef<typeof CommandPrimitive.Loading>,\n CommandLoadingProps\n>(function CommandLoading({ className, ...props }, ref) {\n const styles = useStyles()\n\n return (\n <CommandPrimitive.Loading\n ref={ref}\n data-slot=\"command-loading\"\n {...{ [SLOT_ATTR]: \"command-loading\" }}\n className={mergeClasses(styles.loading, className)}\n {...props}\n />\n )\n})\n\nexport { Command as CommandRoot }\n"],"names":["SearchIcon","props","jsx","useStyles","makeZenithStyles","boxModel","tokens.body","tokens.grayA12","shorthands","tokens.radiusMd","tokens.spacingElement2","tokens.grayA3","tokens.spacingElement3","tokens.textSm","tokens.leadingSm","tokens.focusRing","tokens.grayA11","tokens.spacingElement1","tokens.textXs","tokens.leadingXs","tokens.fontWeightMedium","tokens.graySoft","tokens.radiusSm","tokens.accentA3","SLOT_ATTR","Command","React","className","dataSlot","ref","styles","CommandPrimitive","mergeClasses","title","description","children","showCloseButton","_ref","jsxs","Dialog","DialogHeader","DialogTitle","DialogDescription","DialogContent","CommandInput","wrapperClassName","CommandList","CommandEmpty","CommandGroup","CommandSeparator","CommandItem","CommandLoading"],"mappings":"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"}
1
+ {"version":3,"file":"command.js","sources":["../../../src/components/command/command.tsx"],"sourcesContent":["import * as React from \"react\"\nimport { Command as CommandPrimitive } from \"cmdk\"\nimport { mergeClasses, shorthands } from \"@epilot/zenith-runtime/v1/core\"\n\nimport { SLOT_ATTR } from \"../../renderer/contract\"\nimport { makeZenithStyles } from \"../../styles/make-styles\"\nimport { boxModel } from \"../../styles/host-reset\"\nimport * as tokens from \"../../tokens\"\nimport {\n Dialog,\n DialogContent,\n DialogDescription,\n DialogHeader,\n DialogTitle,\n} from \"../dialog/dialog\"\n\nconst SearchIcon = (props: React.SVGProps<SVGSVGElement>) => (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n height=\"24px\"\n viewBox=\"0 -960 960 960\"\n width=\"24px\"\n fill=\"currentColor\"\n {...props}\n >\n <path d=\"M380-320q-109 0-184.5-75.5T120-580q0-109 75.5-184.5T380-840q109 0 184.5 75.5T640-580q0 44-14 83t-38 69l224 224q11 11 11 28t-11 28q-11 11-28 11t-28-11L532-372q-30 24-69 38t-83 14Zm0-80q75 0 127.5-52.5T560-580q0-75-52.5-127.5T380-760q-75 0-127.5 52.5T200-580q0 75 52.5 127.5T380-400Z\" />\n </svg>\n)\n\nconst useStyles = makeZenithStyles({\n root: {\n ...boxModel,\n backgroundColor: tokens.body,\n color: tokens.grayA12,\n display: \"flex\",\n height: \"100%\",\n width: \"100%\",\n flexDirection: \"column\",\n overflowX: \"hidden\",\n overflowY: \"hidden\",\n ...shorthands.borderRadius(tokens.radiusMd),\n },\n inputWrapper: {\n ...boxModel,\n display: \"flex\",\n alignItems: \"center\",\n ...shorthands.gap(tokens.spacingElement2),\n ...shorthands.borderBottom(\"1px\", \"solid\", tokens.grayA3),\n paddingLeft: tokens.spacingElement3,\n paddingRight: tokens.spacingElement3,\n },\n searchIcon: {\n ...boxModel,\n width: \"1.25rem\",\n height: \"1.25rem\",\n flexShrink: 0,\n opacity: 0.5,\n },\n input: {\n ...boxModel,\n height: \"3rem\",\n display: \"flex\",\n width: \"100%\",\n ...shorthands.borderRadius(tokens.radiusMd),\n backgroundColor: \"transparent\",\n paddingTop: tokens.spacingElement3,\n paddingBottom: tokens.spacingElement3,\n fontSize: tokens.textSm,\n lineHeight: tokens.leadingSm,\n outlineStyle: \"none\",\n \":focus-visible\": {\n outlineWidth: \"2px\",\n outlineStyle: \"solid\",\n // Inset (negative), not the outward +2px every other audited control uses: this input sits\n // flush against the top edge of the Command root, which clips overflow for its rounded\n // corners.\n outlineOffset: \"-2px\",\n outlineColor: tokens.focusRing,\n },\n \"::placeholder\": {\n color: tokens.grayA11,\n },\n \":disabled\": {\n cursor: \"not-allowed\",\n opacity: 0.5,\n },\n },\n list: {\n overflowX: \"hidden\",\n overflowY: \"auto\",\n scrollPaddingTop: tokens.spacingElement1,\n scrollPaddingBottom: tokens.spacingElement1,\n },\n empty: {\n ...boxModel,\n paddingTop: \"1.5rem\",\n paddingBottom: \"1.5rem\",\n textAlign: \"center\",\n fontSize: tokens.textSm,\n lineHeight: tokens.leadingSm,\n color: tokens.grayA11,\n },\n group: {\n ...boxModel,\n color: tokens.grayA12,\n overflowX: \"hidden\",\n overflowY: \"hidden\",\n ...shorthands.padding(tokens.spacingElement1),\n \"& [cmdk-group-heading]\": {\n color: tokens.grayA11,\n paddingLeft: tokens.spacingElement2,\n paddingRight: tokens.spacingElement2,\n paddingTop: \"0.375rem\",\n paddingBottom: \"0.375rem\",\n fontSize: tokens.textXs,\n lineHeight: tokens.leadingXs,\n fontWeight: tokens.fontWeightMedium,\n },\n },\n separator: {\n ...boxModel,\n backgroundColor: tokens.graySoft,\n marginLeft: `calc(-1 * ${tokens.spacingElement1})`,\n marginRight: `calc(-1 * ${tokens.spacingElement1})`,\n height: \"1px\",\n },\n item: {\n ...boxModel,\n position: \"relative\",\n display: \"flex\",\n cursor: \"default\",\n alignItems: \"center\",\n ...shorthands.gap(tokens.spacingElement2),\n ...shorthands.borderRadius(tokens.radiusSm),\n paddingLeft: tokens.spacingElement2,\n paddingRight: tokens.spacingElement2,\n paddingTop: \"0.375rem\",\n paddingBottom: \"0.375rem\",\n fontSize: tokens.textSm,\n lineHeight: tokens.leadingSm,\n outlineStyle: \"none\",\n userSelect: \"none\",\n color: tokens.grayA12,\n \"&[data-selected='true'], &[aria-selected='true']\": {\n backgroundColor: tokens.accentA3,\n },\n \":hover\": {\n backgroundColor: tokens.accentA3,\n },\n \"&[data-disabled='true'], &[aria-disabled='true']\": {\n pointerEvents: \"none\",\n opacity: 0.5,\n },\n \"& svg\": {\n pointerEvents: \"none\",\n flexShrink: 0,\n width: \"1rem\",\n height: \"1rem\",\n },\n \"& svg:not([class*='text-'])\": {\n color: tokens.grayA11,\n },\n },\n shortcut: {\n color: tokens.grayA11,\n marginLeft: \"auto\",\n fontSize: tokens.textXs,\n lineHeight: tokens.leadingXs,\n letterSpacing: \"0.1em\",\n },\n loading: {\n color: tokens.grayA11,\n },\n dialogContent: {\n ...boxModel,\n overflowX: \"hidden\",\n overflowY: \"hidden\",\n ...shorthands.padding(0),\n },\n dialogCommand: {\n \"& [cmdk-group-heading]\": {\n color: tokens.grayA11,\n paddingLeft: tokens.spacingElement2,\n paddingRight: tokens.spacingElement2,\n fontWeight: tokens.fontWeightMedium,\n },\n [`& [${SLOT_ATTR}=\"command-input-wrapper\"]`]: {\n height: \"3rem\",\n },\n \"& [cmdk-group]\": {\n paddingLeft: tokens.spacingElement2,\n paddingRight: tokens.spacingElement2,\n },\n \"& [cmdk-item]\": {\n paddingLeft: tokens.spacingElement2,\n paddingRight: tokens.spacingElement2,\n paddingTop: tokens.spacingElement3,\n paddingBottom: tokens.spacingElement3,\n },\n \"& [cmdk-item] svg\": {\n width: \"1.25rem\",\n height: \"1.25rem\",\n },\n \"& [cmdk-input-wrapper] svg\": {\n width: \"1.25rem\",\n height: \"1.25rem\",\n },\n \"& [cmdk-input]\": {\n height: \"3rem\",\n },\n },\n srOnly: {\n ...boxModel,\n position: \"absolute\",\n width: \"1px\",\n height: \"1px\",\n paddingTop: 0,\n paddingBottom: 0,\n paddingLeft: 0,\n paddingRight: 0,\n marginTop: \"-1px\",\n marginBottom: \"-1px\",\n marginLeft: \"-1px\",\n marginRight: \"-1px\",\n overflowX: \"hidden\",\n overflowY: \"hidden\",\n clip: \"rect(0, 0, 0, 0)\",\n whiteSpace: \"nowrap\",\n ...shorthands.borderWidth(0),\n },\n})\n\n/**\n * never exported it and its only consumer is `field/field-combobox.tsx`, which builds its listbox\n * out of these pieces. This was a decision, not an oversight: a public Command is a surface nobody\n * has reviewed as public API, and exporting it after 0.1 is additive and non-breaking, whereas un-\n * exporting it would not be.\n * @internal not part of the 0.1 public API. Command is fully implemented and tested, but the barrel\n */\nexport type CommandProps = React.ComponentProps<typeof CommandPrimitive> & {\n \"data-slot\"?: string\n}\n\nexport const Command = React.forwardRef<\n React.ElementRef<typeof CommandPrimitive>,\n CommandProps\n>(function Command(\n { className, \"data-slot\": dataSlot = \"command\", ...props },\n ref\n) {\n const styles = useStyles()\n\n return (\n <CommandPrimitive\n ref={ref}\n data-slot={dataSlot}\n {...{ [SLOT_ATTR]: dataSlot }}\n className={mergeClasses(styles.root, className)}\n {...props}\n />\n )\n})\n\nexport type CommandDialogProps = Omit<\n React.ComponentProps<typeof Dialog>,\n \"children\"\n> & {\n children?: React.ReactNode\n title?: string\n description?: string\n className?: string\n showCloseButton?: boolean\n}\n\nexport const CommandDialog = React.forwardRef<HTMLElement, CommandDialogProps>(\n function CommandDialog(\n {\n title = \"Command Palette\",\n description = \"Search for a command to run...\",\n children,\n className,\n showCloseButton = true,\n ...props\n },\n _ref\n ) {\n const styles = useStyles()\n\n return (\n <Dialog {...props}>\n <DialogHeader className={styles.srOnly}>\n <DialogTitle>{title}</DialogTitle>\n <DialogDescription>{description}</DialogDescription>\n </DialogHeader>\n <DialogContent\n className={mergeClasses(styles.dialogContent, className)}\n showCloseButton={showCloseButton}\n >\n <Command className={styles.dialogCommand}>{children}</Command>\n </DialogContent>\n </Dialog>\n )\n }\n)\n\nexport type CommandInputProps = React.ComponentProps<\n typeof CommandPrimitive.Input\n> & {\n wrapperClassName?: string\n}\n\nexport const CommandInput = React.forwardRef<\n React.ElementRef<typeof CommandPrimitive.Input>,\n CommandInputProps\n>(function CommandInput({ className, wrapperClassName, ...props }, ref) {\n const styles = useStyles()\n\n return (\n <div\n data-slot=\"command-input-wrapper\"\n {...{ [SLOT_ATTR]: \"command-input-wrapper\" }}\n className={mergeClasses(styles.inputWrapper, wrapperClassName)}\n >\n <SearchIcon className={styles.searchIcon} />\n <CommandPrimitive.Input\n ref={ref}\n data-slot=\"command-input\"\n {...{ [SLOT_ATTR]: \"command-input\" }}\n className={mergeClasses(styles.input, className)}\n {...props}\n />\n </div>\n )\n})\n\nexport type CommandListProps = React.ComponentProps<\n typeof CommandPrimitive.List\n>\n\nexport const CommandList = React.forwardRef<\n React.ElementRef<typeof CommandPrimitive.List>,\n CommandListProps\n>(function CommandList({ className, ...props }, ref) {\n const styles = useStyles()\n\n return (\n <CommandPrimitive.List\n ref={ref}\n data-slot=\"command-list\"\n {...{ [SLOT_ATTR]: \"command-list\" }}\n className={mergeClasses(styles.list, className)}\n {...props}\n />\n )\n})\n\nexport type CommandEmptyProps = React.ComponentProps<\n typeof CommandPrimitive.Empty\n>\n\nexport const CommandEmpty = React.forwardRef<\n React.ElementRef<typeof CommandPrimitive.Empty>,\n CommandEmptyProps\n>(function CommandEmpty({ className, ...props }, ref) {\n const styles = useStyles()\n\n return (\n <CommandPrimitive.Empty\n ref={ref}\n data-slot=\"command-empty\"\n {...{ [SLOT_ATTR]: \"command-empty\" }}\n className={mergeClasses(styles.empty, className)}\n {...props}\n />\n )\n})\n\nexport type CommandGroupProps = React.ComponentProps<\n typeof CommandPrimitive.Group\n>\n\nexport const CommandGroup = React.forwardRef<\n React.ElementRef<typeof CommandPrimitive.Group>,\n CommandGroupProps\n>(function CommandGroup({ className, ...props }, ref) {\n const styles = useStyles()\n\n return (\n <CommandPrimitive.Group\n ref={ref}\n data-slot=\"command-group\"\n {...{ [SLOT_ATTR]: \"command-group\" }}\n className={mergeClasses(styles.group, className)}\n {...props}\n />\n )\n})\n\nexport type CommandSeparatorProps = React.ComponentProps<\n typeof CommandPrimitive.Separator\n>\n\nexport const CommandSeparator = React.forwardRef<\n React.ElementRef<typeof CommandPrimitive.Separator>,\n CommandSeparatorProps\n>(function CommandSeparator({ className, ...props }, ref) {\n const styles = useStyles()\n\n return (\n <CommandPrimitive.Separator\n ref={ref}\n data-slot=\"command-separator\"\n {...{ [SLOT_ATTR]: \"command-separator\" }}\n className={mergeClasses(styles.separator, className)}\n {...props}\n />\n )\n})\n\nexport type CommandItemProps = React.ComponentProps<\n typeof CommandPrimitive.Item\n>\n\nexport const CommandItem = React.forwardRef<\n React.ElementRef<typeof CommandPrimitive.Item>,\n CommandItemProps\n>(function CommandItem({ className, ...props }, ref) {\n const styles = useStyles()\n\n return (\n <CommandPrimitive.Item\n ref={ref}\n data-slot=\"command-item\"\n {...{ [SLOT_ATTR]: \"command-item\" }}\n className={mergeClasses(styles.item, className)}\n {...props}\n />\n )\n})\n\nexport type CommandShortcutProps = React.ComponentProps<\"span\">\n\nexport const CommandShortcut = React.forwardRef<\n HTMLSpanElement,\n CommandShortcutProps\n>(function CommandShortcut({ className, ...props }, ref) {\n const styles = useStyles()\n\n return (\n <span\n ref={ref}\n data-slot=\"command-shortcut\"\n {...{ [SLOT_ATTR]: \"command-shortcut\" }}\n className={mergeClasses(styles.shortcut, className)}\n {...props}\n />\n )\n})\n\nexport type CommandLoadingProps = React.ComponentProps<\n typeof CommandPrimitive.Loading\n>\n\nexport const CommandLoading = React.forwardRef<\n React.ElementRef<typeof CommandPrimitive.Loading>,\n CommandLoadingProps\n>(function CommandLoading({ className, ...props }, ref) {\n const styles = useStyles()\n\n return (\n <CommandPrimitive.Loading\n ref={ref}\n data-slot=\"command-loading\"\n {...{ [SLOT_ATTR]: \"command-loading\" }}\n className={mergeClasses(styles.loading, className)}\n {...props}\n />\n )\n})\n\nexport { Command as CommandRoot }\n"],"names":["SearchIcon","props","jsx","useStyles","makeZenithStyles","boxModel","tokens.body","tokens.grayA12","shorthands","tokens.radiusMd","tokens.spacingElement2","tokens.grayA3","tokens.spacingElement3","tokens.textSm","tokens.leadingSm","tokens.focusRing","tokens.grayA11","tokens.spacingElement1","tokens.textXs","tokens.leadingXs","tokens.fontWeightMedium","tokens.graySoft","tokens.radiusSm","tokens.accentA3","SLOT_ATTR","Command","React","className","dataSlot","ref","styles","CommandPrimitive","mergeClasses","title","description","children","showCloseButton","_ref","jsxs","Dialog","DialogHeader","DialogTitle","DialogDescription","DialogContent","CommandInput","wrapperClassName","CommandList","CommandEmpty","CommandGroup","CommandSeparator","CommandItem","CommandLoading"],"mappings":"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"}
@@ -1,6 +1,6 @@
1
1
  import { jsx as t, jsxs as k } from "react/jsx-runtime";
2
2
  import * as A from "react";
3
- import { SLOT_ATTR as l, shorthands as h } from "@epilot/zenith-runtime/v1";
3
+ import { SLOT_ATTR as l, shorthands as h } from "@epilot/zenith-runtime/v1/core.js";
4
4
  import { makeZenithStyles as E } from "../../styles/make-styles.js";
5
5
  import { boxModel as u } from "../../styles/host-reset.js";
6
6
  import { grayA11 as H } from "../../tokens/index.js";
@@ -1 +1 @@
1
- {"version":3,"file":"data-table-body.js","sources":["../../../src/components/data-table/data-table-body.tsx"],"sourcesContent":["import * as React from \"react\"\nimport type { ReactNode } from \"react\"\nimport { shorthands } from \"@epilot/zenith-runtime/v1\"\n\nimport { SLOT_ATTR } from \"../../renderer/contract\"\nimport { makeZenithStyles } from \"../../styles/make-styles\"\nimport { boxModel } from \"../../styles/host-reset\"\nimport * as tokens from \"../../tokens\"\nimport { TableBody, TableRow, TableCell } from \"../table/table\"\nimport {\n useDataTable,\n useDataTableContent,\n useDataTableVirtualizer,\n} from \"./hooks\"\nimport { DataTableRow } from \"./data-table-row\"\nimport { DataTableLoading } from \"./data-table-loading\"\n\nconst useStyles = makeZenithStyles({\n stateCell: {\n ...boxModel,\n height: \"12rem\",\n color: tokens.grayA11,\n },\n paddingRow: {\n ...boxModel,\n ...shorthands.borderWidth(0),\n \"&:hover\": {\n backgroundColor: \"transparent\",\n },\n },\n paddingCell: {\n ...boxModel,\n ...shorthands.padding(0),\n ...shorthands.borderWidth(0),\n },\n})\n\nexport type DataTableBodyProps = {\n /** Additional class name */\n className?: string\n /** Custom empty state content */\n emptyState?: ReactNode\n /** Loading state content (shown when isLoading is true) */\n loadingState?: ReactNode\n /** Whether the table is in loading state */\n isLoading?: boolean\n /** Error state content (shown when isError is true) */\n errorState?: ReactNode\n /** Whether the table is in error state */\n isError?: boolean\n}\n\n/**\n * Internal component for padding rows in virtualized tables.\n */\nfunction PaddingRow({ height, colSpan }: { height: number; colSpan: number }) {\n const styles = useStyles()\n return (\n <TableRow noHover className={styles.paddingRow}>\n <TableCell\n colSpan={colSpan}\n className={styles.paddingCell}\n style={{ height, padding: 0, border: 0 }}\n />\n </TableRow>\n )\n}\n\n/**\n * Internal component for state display (loading/error/empty).\n */\nfunction DataTableStateDisplay({\n colSpan,\n children,\n}: {\n colSpan: number\n children?: ReactNode\n}) {\n const styles = useStyles()\n\n return (\n <TableRow noHover>\n <TableCell colSpan={colSpan} align=\"center\" className={styles.stateCell}>\n {children}\n </TableCell>\n </TableRow>\n )\n}\n\n/**\n * Renders the table body with rows.\n * Automatically handles virtualization when used within a DataTableContent with virtualization enabled.\n * Must be used within a DataTable component.\n */\nexport const DataTableBody = React.forwardRef<\n HTMLTableSectionElement,\n DataTableBodyProps\n>(function DataTableBody(\n {\n className,\n emptyState,\n loadingState,\n isLoading = false,\n errorState,\n isError = false,\n },\n ref\n) {\n const { table } = useDataTable()\n const virtualizerContext = useDataTableVirtualizer()\n const contentContext = useDataTableContent()\n const spacerWidth = contentContext?.spacerWidth ?? 0\n\n const rows = table.getRowModel().rows\n const visibleColumns = table.getVisibleLeafColumns()\n const colSpan = visibleColumns.length + (spacerWidth > 0 ? 1 : 0)\n\n // Warn if isError is true but no errorState is provided\n if (process.env.NODE_ENV !== \"production\" && isError && !errorState) {\n console.warn(\n \"DataTableBody: isError is true but no errorState was provided. \" +\n \"Please provide an errorState prop to display error content.\"\n )\n }\n\n // Priority: Error > Loading > Empty > Data\n\n // Error state\n if (isError && errorState) {\n return (\n <TableBody\n ref={ref}\n data-slot=\"data-table-body\"\n {...{ [SLOT_ATTR]: \"data-table-body\" }}\n data-fs-element=\"DataTable-Body\"\n data-state=\"error\"\n className={className}\n >\n <DataTableStateDisplay colSpan={colSpan}>\n {errorState}\n </DataTableStateDisplay>\n </TableBody>\n )\n }\n\n // Loading state\n if (isLoading) {\n return (\n <TableBody\n ref={ref}\n data-slot=\"data-table-body\"\n {...{ [SLOT_ATTR]: \"data-table-body\" }}\n data-fs-element=\"DataTable-Body\"\n data-state=\"loading\"\n className={className}\n aria-busy=\"true\"\n >\n <DataTableStateDisplay colSpan={colSpan}>\n {loadingState ?? <DataTableLoading />}\n </DataTableStateDisplay>\n </TableBody>\n )\n }\n\n // Empty state\n if (!rows.length) {\n return (\n <TableBody\n ref={ref}\n data-slot=\"data-table-body\"\n {...{ [SLOT_ATTR]: \"data-table-body\" }}\n data-fs-element=\"DataTable-Body\"\n data-state=\"empty\"\n className={className}\n >\n <DataTableStateDisplay colSpan={colSpan}>\n {emptyState}\n </DataTableStateDisplay>\n </TableBody>\n )\n }\n\n // Virtualized rendering\n if (virtualizerContext?.virtualizer) {\n const { virtualizer } = virtualizerContext\n const virtualRows = virtualizer.getVirtualItems()\n const totalSize = virtualizer.getTotalSize()\n const paddingTop = virtualRows[0]?.start ?? 0\n const paddingBottom =\n totalSize - (virtualRows[virtualRows.length - 1]?.end ?? 0)\n\n return (\n <TableBody\n ref={ref}\n data-slot=\"data-table-body\"\n {...{ [SLOT_ATTR]: \"data-table-body\" }}\n data-fs-element=\"DataTable-Body\"\n className={className}\n >\n {paddingTop > 0 && <PaddingRow height={paddingTop} colSpan={colSpan} />}\n {virtualRows.map((virtualRow) => (\n <DataTableRow\n key={rows[virtualRow.index].id}\n row={rows[virtualRow.index]}\n style={{ height: `${virtualRow.size}px` }}\n />\n ))}\n {paddingBottom > 0 && (\n <PaddingRow height={paddingBottom} colSpan={colSpan} />\n )}\n </TableBody>\n )\n }\n\n // Standard rendering\n return (\n <TableBody\n ref={ref}\n data-slot=\"data-table-body\"\n {...{ [SLOT_ATTR]: \"data-table-body\" }}\n data-fs-element=\"DataTable-Body\"\n className={className}\n >\n {rows.map((row) => (\n <DataTableRow key={row.id} row={row} />\n ))}\n </TableBody>\n )\n})\n"],"names":["useStyles","makeZenithStyles","boxModel","tokens.grayA11","shorthands","PaddingRow","height","colSpan","styles","TableRow","jsx","TableCell","DataTableStateDisplay","children","DataTableBody","React","className","emptyState","loadingState","isLoading","errorState","isError","ref","table","useDataTable","virtualizerContext","useDataTableVirtualizer","contentContext","useDataTableContent","spacerWidth","rows","TableBody","SLOT_ATTR","DataTableLoading","virtualizer","virtualRows","totalSize","paddingTop","_a","paddingBottom","_b","jsxs","virtualRow","DataTableRow","row"],"mappings":";;;;;;;;;;;;AAiBA,MAAMA,IAAYC,EAAiB;AAAA,EACjC,WAAW;AAAA,IACT,GAAGC;AAAA,IACH,QAAQ;AAAA,IACR,OAAOC;AAAAA,EAAO;AAAA,EAEhB,YAAY;AAAA,IACV,GAAGD;AAAA,IACH,GAAGE,EAAW,YAAY,CAAC;AAAA,IAC3B,WAAW;AAAA,MACT,iBAAiB;AAAA,IAAA;AAAA,EACnB;AAAA,EAEF,aAAa;AAAA,IACX,GAAGF;AAAA,IACH,GAAGE,EAAW,QAAQ,CAAC;AAAA,IACvB,GAAGA,EAAW,YAAY,CAAC;AAAA,EAAA;AAE/B,CAAC;AAoBD,SAASC,EAAW,EAAE,QAAAC,GAAQ,SAAAC,KAAgD;AAC5E,QAAMC,IAASR,EAAA;AACf,2BACGS,GAAA,EAAS,SAAO,IAAC,WAAWD,EAAO,YAClC,UAAA,gBAAAE;AAAA,IAACC;AAAA,IAAA;AAAA,MACC,SAAAJ;AAAA,MACA,WAAWC,EAAO;AAAA,MAClB,OAAO,EAAE,QAAAF,GAAQ,SAAS,GAAG,QAAQ,EAAA;AAAA,IAAE;AAAA,EAAA,GAE3C;AAEJ;AAKA,SAASM,EAAsB;AAAA,EAC7B,SAAAL;AAAA,EACA,UAAAM;AACF,GAGG;AACD,QAAML,IAASR,EAAA;AAEf,SACE,gBAAAU,EAACD,GAAA,EAAS,SAAO,IACf,UAAA,gBAAAC,EAACC,GAAA,EAAU,SAAAJ,GAAkB,OAAM,UAAS,WAAWC,EAAO,WAC3D,UAAAK,GACH,GACF;AAEJ;AAOO,MAAMC,IAAgBC,EAAM,WAGjC,SACA;AAAA,EACE,WAAAC;AAAA,EACA,YAAAC;AAAA,EACA,cAAAC;AAAA,EACA,WAAAC,IAAY;AAAA,EACZ,YAAAC;AAAA,EACA,SAAAC,IAAU;AACZ,GACAC,GACA;;AACA,QAAM,EAAE,OAAAC,EAAA,IAAUC,EAAA,GACZC,IAAqBC,EAAA,GACrBC,IAAiBC,EAAA,GACjBC,KAAcF,KAAA,gBAAAA,EAAgB,gBAAe,GAE7CG,IAAOP,EAAM,YAAA,EAAc,MAE3BhB,IADiBgB,EAAM,sBAAA,EACE,UAAUM,IAAc,IAAI,IAAI;AAa/D,MAVI,QAAQ,IAAI,aAAa,gBAAgBR,KAAW,CAACD,KACvD,QAAQ;AAAA,IACN;AAAA,EAAA,GAQAC,KAAWD;AACb,WACE,gBAAAV;AAAA,MAACqB;AAAA,MAAA;AAAA,QACC,KAAAT;AAAA,QACA,aAAU;AAAA,QACJ,CAACU,CAAS,GAAG;AAAA,QACnB,mBAAgB;AAAA,QAChB,cAAW;AAAA,QACX,WAAAhB;AAAA,QAEA,UAAA,gBAAAN,EAACE,GAAA,EAAsB,SAAAL,GACpB,UAAAa,EAAA,CACH;AAAA,MAAA;AAAA,IAAA;AAMN,MAAID;AACF,WACE,gBAAAT;AAAA,MAACqB;AAAA,MAAA;AAAA,QACC,KAAAT;AAAA,QACA,aAAU;AAAA,QACJ,CAACU,CAAS,GAAG;AAAA,QACnB,mBAAgB;AAAA,QAChB,cAAW;AAAA,QACX,WAAAhB;AAAA,QACA,aAAU;AAAA,QAEV,4BAACJ,GAAA,EAAsB,SAAAL,GACpB,UAAAW,KAAgB,gBAAAR,EAACuB,KAAiB,EAAA,CACrC;AAAA,MAAA;AAAA,IAAA;AAMN,MAAI,CAACH,EAAK;AACR,WACE,gBAAApB;AAAA,MAACqB;AAAA,MAAA;AAAA,QACC,KAAAT;AAAA,QACA,aAAU;AAAA,QACJ,CAACU,CAAS,GAAG;AAAA,QACnB,mBAAgB;AAAA,QAChB,cAAW;AAAA,QACX,WAAAhB;AAAA,QAEA,UAAA,gBAAAN,EAACE,GAAA,EAAsB,SAAAL,GACpB,UAAAU,EAAA,CACH;AAAA,MAAA;AAAA,IAAA;AAMN,MAAIQ,KAAA,QAAAA,EAAoB,aAAa;AACnC,UAAM,EAAE,aAAAS,MAAgBT,GAClBU,IAAcD,EAAY,gBAAA,GAC1BE,IAAYF,EAAY,aAAA,GACxBG,MAAaC,IAAAH,EAAY,CAAC,MAAb,gBAAAG,EAAgB,UAAS,GACtCC,IACJH,OAAaI,IAAAL,EAAYA,EAAY,SAAS,CAAC,MAAlC,gBAAAK,EAAqC,QAAO;AAE3D,WACE,gBAAAC;AAAA,MAACV;AAAA,MAAA;AAAA,QACC,KAAAT;AAAA,QACA,aAAU;AAAA,QACJ,CAACU,CAAS,GAAG;AAAA,QACnB,mBAAgB;AAAA,QAChB,WAAAhB;AAAA,QAEC,UAAA;AAAA,UAAAqB,IAAa,KAAK,gBAAA3B,EAACL,GAAA,EAAW,QAAQgC,GAAY,SAAA9B,GAAkB;AAAA,UACpE4B,EAAY,IAAI,CAACO,MAChB,gBAAAhC;AAAA,YAACiC;AAAA,YAAA;AAAA,cAEC,KAAKb,EAAKY,EAAW,KAAK;AAAA,cAC1B,OAAO,EAAE,QAAQ,GAAGA,EAAW,IAAI,KAAA;AAAA,YAAK;AAAA,YAFnCZ,EAAKY,EAAW,KAAK,EAAE;AAAA,UAAA,CAI/B;AAAA,UACAH,IAAgB,KACf,gBAAA7B,EAACL,GAAA,EAAW,QAAQkC,GAAe,SAAAhC,EAAA,CAAkB;AAAA,QAAA;AAAA,MAAA;AAAA,IAAA;AAAA,EAI7D;AAGA,SACE,gBAAAG;AAAA,IAACqB;AAAA,IAAA;AAAA,MACC,KAAAT;AAAA,MACA,aAAU;AAAA,MACJ,CAACU,CAAS,GAAG;AAAA,MACnB,mBAAgB;AAAA,MAChB,WAAAhB;AAAA,MAEC,UAAAc,EAAK,IAAI,CAACc,wBACRD,GAAA,EAA0B,KAAAC,EAAA,GAARA,EAAI,EAAc,CACtC;AAAA,IAAA;AAAA,EAAA;AAGP,CAAC;"}
1
+ {"version":3,"file":"data-table-body.js","sources":["../../../src/components/data-table/data-table-body.tsx"],"sourcesContent":["import * as React from \"react\"\nimport type { ReactNode } from \"react\"\nimport { shorthands } from \"@epilot/zenith-runtime/v1/core\"\n\nimport { SLOT_ATTR } from \"../../renderer/contract\"\nimport { makeZenithStyles } from \"../../styles/make-styles\"\nimport { boxModel } from \"../../styles/host-reset\"\nimport * as tokens from \"../../tokens\"\nimport { TableBody, TableRow, TableCell } from \"../table/table\"\nimport {\n useDataTable,\n useDataTableContent,\n useDataTableVirtualizer,\n} from \"./hooks\"\nimport { DataTableRow } from \"./data-table-row\"\nimport { DataTableLoading } from \"./data-table-loading\"\n\nconst useStyles = makeZenithStyles({\n stateCell: {\n ...boxModel,\n height: \"12rem\",\n color: tokens.grayA11,\n },\n paddingRow: {\n ...boxModel,\n ...shorthands.borderWidth(0),\n \"&:hover\": {\n backgroundColor: \"transparent\",\n },\n },\n paddingCell: {\n ...boxModel,\n ...shorthands.padding(0),\n ...shorthands.borderWidth(0),\n },\n})\n\nexport type DataTableBodyProps = {\n /** Additional class name */\n className?: string\n /** Custom empty state content */\n emptyState?: ReactNode\n /** Loading state content (shown when isLoading is true) */\n loadingState?: ReactNode\n /** Whether the table is in loading state */\n isLoading?: boolean\n /** Error state content (shown when isError is true) */\n errorState?: ReactNode\n /** Whether the table is in error state */\n isError?: boolean\n}\n\n/**\n * Internal component for padding rows in virtualized tables.\n */\nfunction PaddingRow({ height, colSpan }: { height: number; colSpan: number }) {\n const styles = useStyles()\n return (\n <TableRow noHover className={styles.paddingRow}>\n <TableCell\n colSpan={colSpan}\n className={styles.paddingCell}\n style={{ height, padding: 0, border: 0 }}\n />\n </TableRow>\n )\n}\n\n/**\n * Internal component for state display (loading/error/empty).\n */\nfunction DataTableStateDisplay({\n colSpan,\n children,\n}: {\n colSpan: number\n children?: ReactNode\n}) {\n const styles = useStyles()\n\n return (\n <TableRow noHover>\n <TableCell colSpan={colSpan} align=\"center\" className={styles.stateCell}>\n {children}\n </TableCell>\n </TableRow>\n )\n}\n\n/**\n * Renders the table body with rows.\n * Automatically handles virtualization when used within a DataTableContent with virtualization enabled.\n * Must be used within a DataTable component.\n */\nexport const DataTableBody = React.forwardRef<\n HTMLTableSectionElement,\n DataTableBodyProps\n>(function DataTableBody(\n {\n className,\n emptyState,\n loadingState,\n isLoading = false,\n errorState,\n isError = false,\n },\n ref\n) {\n const { table } = useDataTable()\n const virtualizerContext = useDataTableVirtualizer()\n const contentContext = useDataTableContent()\n const spacerWidth = contentContext?.spacerWidth ?? 0\n\n const rows = table.getRowModel().rows\n const visibleColumns = table.getVisibleLeafColumns()\n const colSpan = visibleColumns.length + (spacerWidth > 0 ? 1 : 0)\n\n // Warn if isError is true but no errorState is provided\n if (process.env.NODE_ENV !== \"production\" && isError && !errorState) {\n console.warn(\n \"DataTableBody: isError is true but no errorState was provided. \" +\n \"Please provide an errorState prop to display error content.\"\n )\n }\n\n // Priority: Error > Loading > Empty > Data\n\n // Error state\n if (isError && errorState) {\n return (\n <TableBody\n ref={ref}\n data-slot=\"data-table-body\"\n {...{ [SLOT_ATTR]: \"data-table-body\" }}\n data-fs-element=\"DataTable-Body\"\n data-state=\"error\"\n className={className}\n >\n <DataTableStateDisplay colSpan={colSpan}>\n {errorState}\n </DataTableStateDisplay>\n </TableBody>\n )\n }\n\n // Loading state\n if (isLoading) {\n return (\n <TableBody\n ref={ref}\n data-slot=\"data-table-body\"\n {...{ [SLOT_ATTR]: \"data-table-body\" }}\n data-fs-element=\"DataTable-Body\"\n data-state=\"loading\"\n className={className}\n aria-busy=\"true\"\n >\n <DataTableStateDisplay colSpan={colSpan}>\n {loadingState ?? <DataTableLoading />}\n </DataTableStateDisplay>\n </TableBody>\n )\n }\n\n // Empty state\n if (!rows.length) {\n return (\n <TableBody\n ref={ref}\n data-slot=\"data-table-body\"\n {...{ [SLOT_ATTR]: \"data-table-body\" }}\n data-fs-element=\"DataTable-Body\"\n data-state=\"empty\"\n className={className}\n >\n <DataTableStateDisplay colSpan={colSpan}>\n {emptyState}\n </DataTableStateDisplay>\n </TableBody>\n )\n }\n\n // Virtualized rendering\n if (virtualizerContext?.virtualizer) {\n const { virtualizer } = virtualizerContext\n const virtualRows = virtualizer.getVirtualItems()\n const totalSize = virtualizer.getTotalSize()\n const paddingTop = virtualRows[0]?.start ?? 0\n const paddingBottom =\n totalSize - (virtualRows[virtualRows.length - 1]?.end ?? 0)\n\n return (\n <TableBody\n ref={ref}\n data-slot=\"data-table-body\"\n {...{ [SLOT_ATTR]: \"data-table-body\" }}\n data-fs-element=\"DataTable-Body\"\n className={className}\n >\n {paddingTop > 0 && <PaddingRow height={paddingTop} colSpan={colSpan} />}\n {virtualRows.map((virtualRow) => (\n <DataTableRow\n key={rows[virtualRow.index].id}\n row={rows[virtualRow.index]}\n style={{ height: `${virtualRow.size}px` }}\n />\n ))}\n {paddingBottom > 0 && (\n <PaddingRow height={paddingBottom} colSpan={colSpan} />\n )}\n </TableBody>\n )\n }\n\n // Standard rendering\n return (\n <TableBody\n ref={ref}\n data-slot=\"data-table-body\"\n {...{ [SLOT_ATTR]: \"data-table-body\" }}\n data-fs-element=\"DataTable-Body\"\n className={className}\n >\n {rows.map((row) => (\n <DataTableRow key={row.id} row={row} />\n ))}\n </TableBody>\n )\n})\n"],"names":["useStyles","makeZenithStyles","boxModel","tokens.grayA11","shorthands","PaddingRow","height","colSpan","styles","TableRow","jsx","TableCell","DataTableStateDisplay","children","DataTableBody","React","className","emptyState","loadingState","isLoading","errorState","isError","ref","table","useDataTable","virtualizerContext","useDataTableVirtualizer","contentContext","useDataTableContent","spacerWidth","rows","TableBody","SLOT_ATTR","DataTableLoading","virtualizer","virtualRows","totalSize","paddingTop","_a","paddingBottom","_b","jsxs","virtualRow","DataTableRow","row"],"mappings":"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"}
@@ -1,6 +1,6 @@
1
1
  import { jsx as o, jsxs as n } from "react/jsx-runtime";
2
2
  import * as h from "react";
3
- import { mergeClasses as g, SLOT_ATTR as p, shorthands as s } from "@epilot/zenith-runtime/v1";
3
+ import { mergeClasses as g, SLOT_ATTR as p, shorthands as s } from "@epilot/zenith-runtime/v1/core.js";
4
4
  import { makeZenithStyles as m } from "../../styles/make-styles.js";
5
5
  import { boxModel as a } from "../../styles/host-reset.js";
6
6
  import { accent11 as u, accentA8 as w, accentSoft as k, spacingElement1 as l, radiusLg as f } from "../../tokens/index.js";
@@ -1 +1 @@
1
- {"version":3,"file":"data-table-column-header.js","sources":["../../../src/components/data-table/data-table-column-header.tsx"],"sourcesContent":["import * as React from \"react\"\nimport type { SVGProps } from \"react\"\nimport type { Column } from \"@tanstack/react-table\"\nimport { mergeClasses, shorthands } from \"@epilot/zenith-runtime/v1\"\n\nimport { SLOT_ATTR } from \"../../renderer/contract\"\nimport { makeZenithStyles } from \"../../styles/make-styles\"\nimport { boxModel } from \"../../styles/host-reset\"\nimport * as tokens from \"../../tokens\"\n\n// Sort icons\nconst IconArrowUp = (props: SVGProps<SVGSVGElement>) => (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n {...props}\n >\n <path d=\"m5 12 7-7 7 7\" />\n <path d=\"M12 19V5\" />\n </svg>\n)\n\nconst IconArrowDown = (props: SVGProps<SVGSVGElement>) => (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n {...props}\n >\n <path d=\"M12 5v14\" />\n <path d=\"m19 12-7 7-7-7\" />\n </svg>\n)\n\nconst IconArrowsSort = (props: SVGProps<SVGSVGElement>) => (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n {...props}\n >\n <path d=\"m7 15 5 5 5-5\" />\n <path d=\"m7 9 5-5 5 5\" />\n </svg>\n)\n\nconst useStyles = makeZenithStyles({\n button: {\n ...boxModel,\n display: \"inline-flex\",\n alignItems: \"center\",\n gap: tokens.spacingElement1,\n ...shorthands.paddingBlock(\"0.125rem\"),\n ...shorthands.paddingInline(tokens.spacingElement1),\n ...shorthands.borderRadius(tokens.radiusLg),\n cursor: \"pointer\",\n transitionProperty: \"color, background-color, border-color\",\n transitionDuration: \"150ms\",\n \":hover\": {\n backgroundColor: tokens.accentSoft,\n },\n \":focus-visible\": {\n outlineWidth: \"2px\",\n outlineStyle: \"solid\",\n outlineOffset: \"2px\",\n outlineColor: tokens.accentA8,\n },\n },\n iconActive: {\n ...boxModel,\n width: \"1rem\",\n height: \"1rem\",\n color: tokens.accent11,\n flexShrink: 0,\n },\n iconUnsorted: {\n ...boxModel,\n width: \"1rem\",\n height: \"1rem\",\n opacity: 0.4,\n flexShrink: 0,\n },\n})\n\nexport type DataTableColumnHeaderProps<TData = unknown, TValue = unknown> = {\n /** The column instance from Tanstack Table */\n column: Column<TData, TValue>\n /** The header title to display */\n title: string\n /** Additional class name */\n className?: string\n}\n\nfunction DataTableColumnHeaderInner<TData, TValue>(\n { column, title, className }: DataTableColumnHeaderProps<TData, TValue>,\n ref: React.ForwardedRef<HTMLSpanElement>\n) {\n const styles = useStyles()\n\n if (!column.getCanSort()) {\n return (\n <span ref={ref} className={className}>\n {title}\n </span>\n )\n }\n\n return (\n <span\n ref={ref}\n role=\"button\"\n tabIndex={0}\n data-slot=\"data-table-column-header\"\n {...{ [SLOT_ATTR]: \"data-table-column-header\" }}\n data-fs-element=\"DataTable-SortButton\"\n onClick={() => column.toggleSorting()}\n onKeyDown={(e) => {\n if (e.key === \"Enter\" || e.key === \" \") {\n e.preventDefault()\n column.toggleSorting()\n }\n }}\n aria-label={\n column.getIsSorted() === \"asc\"\n ? `${title}, sorted ascending. Click to sort descending.`\n : column.getIsSorted() === \"desc\"\n ? `${title}, sorted descending. Click to remove sorting.`\n : `${title}. Click to sort ascending.`\n }\n className={mergeClasses(styles.button, className)}\n >\n {title}\n {column.getIsSorted() === \"asc\" && (\n <IconArrowUp className={styles.iconActive} />\n )}\n {column.getIsSorted() === \"desc\" && (\n <IconArrowDown className={styles.iconActive} />\n )}\n {!column.getIsSorted() && (\n <IconArrowsSort className={styles.iconUnsorted} />\n )}\n </span>\n )\n}\n\nexport const DataTableColumnHeader = React.forwardRef(\n DataTableColumnHeaderInner\n) as <TData = unknown, TValue = unknown>(\n props: DataTableColumnHeaderProps<TData, TValue> & {\n ref?: React.Ref<HTMLSpanElement>\n }\n) => React.ReactElement | null\n"],"names":["IconArrowUp","props","jsxs","jsx","IconArrowDown","IconArrowsSort","useStyles","makeZenithStyles","boxModel","tokens.spacingElement1","shorthands","tokens.radiusLg","tokens.accentSoft","tokens.accentA8","tokens.accent11","DataTableColumnHeaderInner","column","title","className","ref","styles","SLOT_ATTR","e","mergeClasses","DataTableColumnHeader","React"],"mappings":"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"}
1
+ {"version":3,"file":"data-table-column-header.js","sources":["../../../src/components/data-table/data-table-column-header.tsx"],"sourcesContent":["import * as React from \"react\"\nimport type { SVGProps } from \"react\"\nimport type { Column } from \"@tanstack/react-table\"\nimport { mergeClasses, shorthands } from \"@epilot/zenith-runtime/v1/core\"\n\nimport { SLOT_ATTR } from \"../../renderer/contract\"\nimport { makeZenithStyles } from \"../../styles/make-styles\"\nimport { boxModel } from \"../../styles/host-reset\"\nimport * as tokens from \"../../tokens\"\n\n// Sort icons\nconst IconArrowUp = (props: SVGProps<SVGSVGElement>) => (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n {...props}\n >\n <path d=\"m5 12 7-7 7 7\" />\n <path d=\"M12 19V5\" />\n </svg>\n)\n\nconst IconArrowDown = (props: SVGProps<SVGSVGElement>) => (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n {...props}\n >\n <path d=\"M12 5v14\" />\n <path d=\"m19 12-7 7-7-7\" />\n </svg>\n)\n\nconst IconArrowsSort = (props: SVGProps<SVGSVGElement>) => (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n {...props}\n >\n <path d=\"m7 15 5 5 5-5\" />\n <path d=\"m7 9 5-5 5 5\" />\n </svg>\n)\n\nconst useStyles = makeZenithStyles({\n button: {\n ...boxModel,\n display: \"inline-flex\",\n alignItems: \"center\",\n gap: tokens.spacingElement1,\n ...shorthands.paddingBlock(\"0.125rem\"),\n ...shorthands.paddingInline(tokens.spacingElement1),\n ...shorthands.borderRadius(tokens.radiusLg),\n cursor: \"pointer\",\n transitionProperty: \"color, background-color, border-color\",\n transitionDuration: \"150ms\",\n \":hover\": {\n backgroundColor: tokens.accentSoft,\n },\n \":focus-visible\": {\n outlineWidth: \"2px\",\n outlineStyle: \"solid\",\n outlineOffset: \"2px\",\n outlineColor: tokens.accentA8,\n },\n },\n iconActive: {\n ...boxModel,\n width: \"1rem\",\n height: \"1rem\",\n color: tokens.accent11,\n flexShrink: 0,\n },\n iconUnsorted: {\n ...boxModel,\n width: \"1rem\",\n height: \"1rem\",\n opacity: 0.4,\n flexShrink: 0,\n },\n})\n\nexport type DataTableColumnHeaderProps<TData = unknown, TValue = unknown> = {\n /** The column instance from Tanstack Table */\n column: Column<TData, TValue>\n /** The header title to display */\n title: string\n /** Additional class name */\n className?: string\n}\n\nfunction DataTableColumnHeaderInner<TData, TValue>(\n { column, title, className }: DataTableColumnHeaderProps<TData, TValue>,\n ref: React.ForwardedRef<HTMLSpanElement>\n) {\n const styles = useStyles()\n\n if (!column.getCanSort()) {\n return (\n <span ref={ref} className={className}>\n {title}\n </span>\n )\n }\n\n return (\n <span\n ref={ref}\n role=\"button\"\n tabIndex={0}\n data-slot=\"data-table-column-header\"\n {...{ [SLOT_ATTR]: \"data-table-column-header\" }}\n data-fs-element=\"DataTable-SortButton\"\n onClick={() => column.toggleSorting()}\n onKeyDown={(e) => {\n if (e.key === \"Enter\" || e.key === \" \") {\n e.preventDefault()\n column.toggleSorting()\n }\n }}\n aria-label={\n column.getIsSorted() === \"asc\"\n ? `${title}, sorted ascending. Click to sort descending.`\n : column.getIsSorted() === \"desc\"\n ? `${title}, sorted descending. Click to remove sorting.`\n : `${title}. Click to sort ascending.`\n }\n className={mergeClasses(styles.button, className)}\n >\n {title}\n {column.getIsSorted() === \"asc\" && (\n <IconArrowUp className={styles.iconActive} />\n )}\n {column.getIsSorted() === \"desc\" && (\n <IconArrowDown className={styles.iconActive} />\n )}\n {!column.getIsSorted() && (\n <IconArrowsSort className={styles.iconUnsorted} />\n )}\n </span>\n )\n}\n\nexport const DataTableColumnHeader = React.forwardRef(\n DataTableColumnHeaderInner\n) as <TData = unknown, TValue = unknown>(\n props: DataTableColumnHeaderProps<TData, TValue> & {\n ref?: React.Ref<HTMLSpanElement>\n }\n) => React.ReactElement | null\n"],"names":["IconArrowUp","props","jsxs","jsx","IconArrowDown","IconArrowsSort","useStyles","makeZenithStyles","boxModel","tokens.spacingElement1","shorthands","tokens.radiusLg","tokens.accentSoft","tokens.accentA8","tokens.accent11","DataTableColumnHeaderInner","column","title","className","ref","styles","SLOT_ATTR","e","mergeClasses","DataTableColumnHeader","React"],"mappings":"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"}
@@ -4,7 +4,7 @@ import { useCallback as M } from "react";
4
4
  import { useSensors as E, useSensor as T, DndContext as L, closestCenter as R, KeyboardSensor as k, PointerSensor as B } from "../../vendor/.bun/@dnd-kit_core@6.3.1_6f4b9a1cfb20c0ae/vendor/@dnd-kit/core/dist/core.esm.js";
5
5
  import { arrayMove as _, SortableContext as G, verticalListSortingStrategy as z, sortableKeyboardCoordinates as Z, useSortable as j } from "../../vendor/.bun/@dnd-kit_sortable@10.0.0_1d291640e1250bbe/vendor/@dnd-kit/sortable/dist/sortable.esm.js";
6
6
  import { CSS as F } from "../../vendor/.bun/@dnd-kit_utilities@3.2.2_62547eec5a2188e3/vendor/@dnd-kit/utilities/dist/utilities.esm.js";
7
- import { SLOT_ATTR as x, shorthands as d, mergeClasses as K } from "@epilot/zenith-runtime/v1";
7
+ import { SLOT_ATTR as x, shorthands as d, mergeClasses as K } from "@epilot/zenith-runtime/v1/core.js";
8
8
  import { makeZenithStyles as V } from "../../styles/make-styles.js";
9
9
  import { nativeControl as W, boxModel as C } from "../../styles/host-reset.js";
10
10
  import { accentA8 as X, grayA12 as H, grayA8 as P, grayA3 as $, leadingSm as q, textSm as J, spacingElement2 as w, radiusSm as Q } from "../../tokens/index.js";
@@ -1 +1 @@
1
- {"version":3,"file":"data-table-column-order.js","sources":["../../../src/components/data-table/data-table-column-order.tsx"],"sourcesContent":["import * as React from \"react\"\nimport { useCallback } from \"react\"\nimport type { ComponentProps, ReactNode, SVGProps } from \"react\"\nimport { type Column } from \"@tanstack/react-table\"\nimport {\n DndContext,\n closestCenter,\n KeyboardSensor,\n PointerSensor,\n useSensor,\n useSensors,\n type Announcements,\n type DragEndEvent,\n type ScreenReaderInstructions,\n} from \"@dnd-kit/core\"\nimport {\n SortableContext,\n verticalListSortingStrategy,\n arrayMove,\n useSortable,\n sortableKeyboardCoordinates,\n} from \"@dnd-kit/sortable\"\nimport { CSS } from \"@dnd-kit/utilities\"\nimport { mergeClasses, shorthands } from \"@epilot/zenith-runtime/v1\"\n\nimport { SLOT_ATTR } from \"../../renderer/contract\"\nimport { makeZenithStyles } from \"../../styles/make-styles\"\nimport { boxModel, nativeControl } from \"../../styles/host-reset\"\nimport * as tokens from \"../../tokens\"\nimport { Button } from \"../button/button\"\nimport {\n DropdownMenu,\n DropdownMenuContent,\n DropdownMenuLabel,\n DropdownMenuSeparator,\n DropdownMenuTrigger,\n} from \"../dropdown-menu/dropdown-menu\"\nimport { useDataTable } from \"./hooks/use-data-table\"\n\n// Swap vertical icon (default trigger icon)\nconst IconSwapVertical = (props: SVGProps<SVGSVGElement>) => (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"20\"\n height=\"20\"\n viewBox=\"0 -960 960 960\"\n fill=\"currentColor\"\n {...props}\n >\n <path d=\"M320-440v-287l-76 76-44-44 150-150 150 150-44 44-76-76v287h-60ZM560-155 410-305l44-44 76 76v-287h60v287l76-76 44 44L560-155Z\" />\n </svg>\n)\n\n// Grip vertical icon (drag handle)\nconst IconGripVertical = (props: SVGProps<SVGSVGElement>) => (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 24 24\"\n fill=\"currentColor\"\n {...props}\n >\n <circle cx=\"9\" cy=\"5\" r=\"1.5\" />\n <circle cx=\"15\" cy=\"5\" r=\"1.5\" />\n <circle cx=\"9\" cy=\"12\" r=\"1.5\" />\n <circle cx=\"15\" cy=\"12\" r=\"1.5\" />\n <circle cx=\"9\" cy=\"19\" r=\"1.5\" />\n <circle cx=\"15\" cy=\"19\" r=\"1.5\" />\n </svg>\n)\n\nconst useStyles = makeZenithStyles({\n icon: {\n ...boxModel,\n width: \"1rem\",\n height: \"1rem\",\n },\n gripIcon: {\n ...boxModel,\n width: \"14px\",\n height: \"14px\",\n },\n srOnly: {\n ...boxModel,\n position: \"absolute\",\n width: \"1px\",\n height: \"1px\",\n ...shorthands.padding(0),\n ...shorthands.margin(\"-1px\"),\n ...shorthands.overflow(\"hidden\"),\n clip: \"rect(0, 0, 0, 0)\",\n whiteSpace: \"nowrap\",\n },\n item: {\n ...boxModel,\n display: \"flex\",\n alignItems: \"center\",\n ...shorthands.gap(tokens.spacingElement2),\n ...shorthands.borderRadius(tokens.radiusSm),\n paddingLeft: tokens.spacingElement2,\n paddingRight: tokens.spacingElement2,\n paddingTop: \"6px\",\n paddingBottom: \"6px\",\n fontSize: tokens.textSm,\n lineHeight: tokens.leadingSm,\n },\n itemDragging: {\n zIndex: 50,\n backgroundColor: tokens.grayA3,\n opacity: 0.8,\n },\n dragHandle: {\n ...nativeControl,\n display: \"inline-flex\",\n flexShrink: 0,\n cursor: \"grab\",\n touchAction: \"none\",\n alignItems: \"center\",\n color: tokens.grayA8,\n backgroundColor: \"transparent\",\n ...shorthands.borderWidth(0),\n ...shorthands.padding(0),\n \"&:hover\": {\n color: tokens.grayA12,\n },\n \"&:focus-visible\": {\n outlineWidth: \"2px\",\n outlineStyle: \"solid\",\n outlineOffset: \"2px\",\n outlineColor: tokens.accentA8,\n },\n \"&:active\": {\n cursor: \"grabbing\",\n },\n },\n itemLabel: {\n userSelect: \"none\",\n },\n})\n\nexport type DataTableColumnOrderProps = {\n /** Custom icon for the default trigger button. Falls back to swap-vertical icon. */\n icon?: ReactNode\n /** Custom trigger element. Defaults to an icon button. */\n trigger?: ReactNode\n /** Label shown at top of dropdown and as screen reader text for default trigger. Required for i18n. */\n label: string\n /** Accessible label for the drag handle buttons. Recommended for i18n and accessibility. Receives column label as parameter. */\n dragHandleLabel?: string | ((columnLabel: string) => string)\n /** Custom screen reader announcements for drag-and-drop operations. */\n announcements?: Announcements\n /** Custom screen reader instructions for draggable items. */\n screenReaderInstructions?: ScreenReaderInstructions\n /** Additional class name for the dropdown content */\n contentClassName?: string\n /** Alignment of dropdown relative to trigger. Default: \"end\" */\n align?: \"start\" | \"center\" | \"end\"\n} & Omit<ComponentProps<typeof DropdownMenu>, \"children\">\n\n/** Sortable item inside the column order dropdown */\nfunction DataTableColumnOrderItem({\n column,\n dragHandleLabel,\n}: {\n column: Column<unknown, unknown>\n dragHandleLabel?: string | ((columnLabel: string) => string)\n}) {\n const styles = useStyles()\n const {\n attributes,\n listeners,\n setNodeRef,\n transform,\n transition,\n isDragging,\n } = useSortable({ id: column.id })\n\n const meta = column.columnDef.meta as { visibilityLabel?: string } | undefined\n const label =\n meta?.visibilityLabel ??\n (typeof column.columnDef.header === \"string\"\n ? column.columnDef.header\n : column.id)\n\n const resolvedDragHandleLabel = dragHandleLabel\n ? typeof dragHandleLabel === \"function\"\n ? dragHandleLabel(label)\n : dragHandleLabel\n : `Drag to reorder ${label}`\n\n return (\n <div\n ref={setNodeRef}\n style={{\n transform: CSS.Transform.toString(transform),\n transition,\n }}\n className={mergeClasses(styles.item, isDragging && styles.itemDragging)}\n data-slot=\"data-table-column-order-item\"\n {...{ [SLOT_ATTR]: \"data-table-column-order-item\" }}\n data-fs-element=\"DataTable-ColumnOrder-Item\"\n >\n <button\n type=\"button\"\n className={styles.dragHandle}\n data-slot=\"data-table-column-order-drag-handle\"\n {...{ [SLOT_ATTR]: \"data-table-column-order-drag-handle\" }}\n aria-label={resolvedDragHandleLabel}\n {...attributes}\n {...listeners}\n >\n <IconGripVertical className={styles.gripIcon} />\n </button>\n <span\n className={styles.itemLabel}\n data-slot=\"data-table-column-order-item-label\"\n {...{ [SLOT_ATTR]: \"data-table-column-order-item-label\" }}\n >\n {label}\n </span>\n </div>\n )\n}\n\n/**\n * Inner list component that provides the DnD context.\n * Separated to avoid hook rules issues with early returns.\n */\nfunction DataTableColumnOrderList({\n columns,\n currentOrder,\n table,\n dragHandleLabel,\n announcements,\n screenReaderInstructions,\n}: {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n columns: Column<any, unknown>[]\n currentOrder: string[]\n table: { setColumnOrder: (order: string[]) => void }\n dragHandleLabel?: string | ((columnLabel: string) => string)\n announcements?: Announcements\n screenReaderInstructions?: ScreenReaderInstructions\n}) {\n const sensors = useSensors(\n useSensor(PointerSensor, {\n activationConstraint: { distance: 3 },\n }),\n useSensor(KeyboardSensor, {\n coordinateGetter: sortableKeyboardCoordinates,\n })\n )\n\n const handleDragEnd = useCallback(\n (event: DragEndEvent) => {\n const { active, over } = event\n if (!over || active.id === over.id) return\n\n const oldIndex = currentOrder.indexOf(active.id as string)\n const newIndex = currentOrder.indexOf(over.id as string)\n\n if (oldIndex === -1 || newIndex === -1) return\n\n const newOrder = arrayMove(currentOrder, oldIndex, newIndex)\n table.setColumnOrder(newOrder)\n },\n [currentOrder, table]\n )\n\n return (\n <DndContext\n sensors={sensors}\n collisionDetection={closestCenter}\n onDragEnd={handleDragEnd}\n accessibility={{\n announcements,\n screenReaderInstructions,\n }}\n >\n <SortableContext\n items={columns.map((c) => c.id)}\n strategy={verticalListSortingStrategy}\n >\n {columns.map((col) => (\n <DataTableColumnOrderItem\n key={col.id}\n column={col}\n dragHandleLabel={dragHandleLabel}\n />\n ))}\n </SortableContext>\n </DndContext>\n )\n}\n\n/**\n * A dropdown menu for reordering columns in DataTable via drag-and-drop.\n * Shows a draggable list of columns that can be rearranged.\n * Place in DataTableToolbar for consistent layout.\n */\nexport const DataTableColumnOrder = React.forwardRef<\n HTMLElement,\n DataTableColumnOrderProps\n>(function DataTableColumnOrder(\n {\n icon,\n trigger,\n label,\n dragHandleLabel,\n announcements,\n screenReaderInstructions,\n contentClassName,\n align = \"end\",\n ...props\n },\n ref\n) {\n const styles = useStyles()\n const { table } = useDataTable()\n\n // Get reorderable columns (exclude selection column, respect meta.enableOrdering)\n const allColumns = table.getAllLeafColumns()\n const reorderableColumns = allColumns.filter((col) => {\n if (col.id === \"select\") return false\n const meta = col.columnDef.meta as { enableOrdering?: boolean } | undefined\n return meta?.enableOrdering !== false\n })\n\n // If no reorderable columns, don't render\n if (reorderableColumns.length === 0) {\n return null\n }\n\n // Current order (derive from columns if columnOrder state is empty)\n const currentOrder =\n table.getState().columnOrder && table.getState().columnOrder.length > 0\n ? table.getState().columnOrder\n : allColumns.map((c) => c.id)\n\n // Sort reorderable columns by their position in currentOrder\n const orderedColumns = [...reorderableColumns].sort((a, b) => {\n const indexA = currentOrder.indexOf(a.id)\n const indexB = currentOrder.indexOf(b.id)\n return (\n (indexA === -1 ? Number.MAX_SAFE_INTEGER : indexA) -\n (indexB === -1 ? Number.MAX_SAFE_INTEGER : indexB)\n )\n })\n\n return (\n <DropdownMenu ref={ref} {...props}>\n <DropdownMenuTrigger asChild>\n {trigger ?? (\n <Button\n variant=\"tertiary\"\n size=\"sm\"\n data-slot=\"data-table-column-order-trigger\"\n {...{ [SLOT_ATTR]: \"data-table-column-order-trigger\" }}\n data-fs-element=\"DataTable-ColumnOrder-Trigger\"\n >\n {icon ?? <IconSwapVertical className={styles.icon} />}\n <span className={styles.srOnly}>{label}</span>\n </Button>\n )}\n </DropdownMenuTrigger>\n <DropdownMenuContent\n align={align}\n className={contentClassName}\n data-slot=\"data-table-column-order-content\"\n {...{ [SLOT_ATTR]: \"data-table-column-order-content\" }}\n data-fs-element=\"DataTable-ColumnOrder-Content\"\n >\n <DropdownMenuLabel>{label}</DropdownMenuLabel>\n <DropdownMenuSeparator />\n <DataTableColumnOrderList\n columns={orderedColumns}\n currentOrder={currentOrder}\n table={table}\n dragHandleLabel={dragHandleLabel}\n announcements={announcements}\n screenReaderInstructions={screenReaderInstructions}\n />\n </DropdownMenuContent>\n </DropdownMenu>\n )\n})\n"],"names":["IconSwapVertical","props","jsx","IconGripVertical","jsxs","useStyles","makeZenithStyles","boxModel","shorthands","tokens.spacingElement2","tokens.radiusSm","tokens.textSm","tokens.leadingSm","tokens.grayA3","nativeControl","tokens.grayA8","tokens.grayA12","tokens.accentA8","DataTableColumnOrderItem","column","dragHandleLabel","styles","attributes","listeners","setNodeRef","transform","transition","isDragging","useSortable","meta","label","resolvedDragHandleLabel","CSS","mergeClasses","SLOT_ATTR","DataTableColumnOrderList","columns","currentOrder","table","announcements","screenReaderInstructions","sensors","useSensors","useSensor","PointerSensor","KeyboardSensor","sortableKeyboardCoordinates","handleDragEnd","useCallback","event","active","over","oldIndex","newIndex","newOrder","arrayMove","DndContext","closestCenter","SortableContext","c","verticalListSortingStrategy","col","DataTableColumnOrder","React","icon","trigger","contentClassName","align","ref","useDataTable","allColumns","reorderableColumns","orderedColumns","a","b","indexA","indexB","DropdownMenu","DropdownMenuTrigger","Button","DropdownMenuContent","DropdownMenuLabel","DropdownMenuSeparator"],"mappings":"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"}
1
+ {"version":3,"file":"data-table-column-order.js","sources":["../../../src/components/data-table/data-table-column-order.tsx"],"sourcesContent":["import * as React from \"react\"\nimport { useCallback } from \"react\"\nimport type { ComponentProps, ReactNode, SVGProps } from \"react\"\nimport { type Column } from \"@tanstack/react-table\"\nimport {\n DndContext,\n closestCenter,\n KeyboardSensor,\n PointerSensor,\n useSensor,\n useSensors,\n type Announcements,\n type DragEndEvent,\n type ScreenReaderInstructions,\n} from \"@dnd-kit/core\"\nimport {\n SortableContext,\n verticalListSortingStrategy,\n arrayMove,\n useSortable,\n sortableKeyboardCoordinates,\n} from \"@dnd-kit/sortable\"\nimport { CSS } from \"@dnd-kit/utilities\"\nimport { mergeClasses, shorthands } from \"@epilot/zenith-runtime/v1/core\"\n\nimport { SLOT_ATTR } from \"../../renderer/contract\"\nimport { makeZenithStyles } from \"../../styles/make-styles\"\nimport { boxModel, nativeControl } from \"../../styles/host-reset\"\nimport * as tokens from \"../../tokens\"\nimport { Button } from \"../button/button\"\nimport {\n DropdownMenu,\n DropdownMenuContent,\n DropdownMenuLabel,\n DropdownMenuSeparator,\n DropdownMenuTrigger,\n} from \"../dropdown-menu/dropdown-menu\"\nimport { useDataTable } from \"./hooks/use-data-table\"\n\n// Swap vertical icon (default trigger icon)\nconst IconSwapVertical = (props: SVGProps<SVGSVGElement>) => (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"20\"\n height=\"20\"\n viewBox=\"0 -960 960 960\"\n fill=\"currentColor\"\n {...props}\n >\n <path d=\"M320-440v-287l-76 76-44-44 150-150 150 150-44 44-76-76v287h-60ZM560-155 410-305l44-44 76 76v-287h60v287l76-76 44 44L560-155Z\" />\n </svg>\n)\n\n// Grip vertical icon (drag handle)\nconst IconGripVertical = (props: SVGProps<SVGSVGElement>) => (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 24 24\"\n fill=\"currentColor\"\n {...props}\n >\n <circle cx=\"9\" cy=\"5\" r=\"1.5\" />\n <circle cx=\"15\" cy=\"5\" r=\"1.5\" />\n <circle cx=\"9\" cy=\"12\" r=\"1.5\" />\n <circle cx=\"15\" cy=\"12\" r=\"1.5\" />\n <circle cx=\"9\" cy=\"19\" r=\"1.5\" />\n <circle cx=\"15\" cy=\"19\" r=\"1.5\" />\n </svg>\n)\n\nconst useStyles = makeZenithStyles({\n icon: {\n ...boxModel,\n width: \"1rem\",\n height: \"1rem\",\n },\n gripIcon: {\n ...boxModel,\n width: \"14px\",\n height: \"14px\",\n },\n srOnly: {\n ...boxModel,\n position: \"absolute\",\n width: \"1px\",\n height: \"1px\",\n ...shorthands.padding(0),\n ...shorthands.margin(\"-1px\"),\n ...shorthands.overflow(\"hidden\"),\n clip: \"rect(0, 0, 0, 0)\",\n whiteSpace: \"nowrap\",\n },\n item: {\n ...boxModel,\n display: \"flex\",\n alignItems: \"center\",\n ...shorthands.gap(tokens.spacingElement2),\n ...shorthands.borderRadius(tokens.radiusSm),\n paddingLeft: tokens.spacingElement2,\n paddingRight: tokens.spacingElement2,\n paddingTop: \"6px\",\n paddingBottom: \"6px\",\n fontSize: tokens.textSm,\n lineHeight: tokens.leadingSm,\n },\n itemDragging: {\n zIndex: 50,\n backgroundColor: tokens.grayA3,\n opacity: 0.8,\n },\n dragHandle: {\n ...nativeControl,\n display: \"inline-flex\",\n flexShrink: 0,\n cursor: \"grab\",\n touchAction: \"none\",\n alignItems: \"center\",\n color: tokens.grayA8,\n backgroundColor: \"transparent\",\n ...shorthands.borderWidth(0),\n ...shorthands.padding(0),\n \"&:hover\": {\n color: tokens.grayA12,\n },\n \"&:focus-visible\": {\n outlineWidth: \"2px\",\n outlineStyle: \"solid\",\n outlineOffset: \"2px\",\n outlineColor: tokens.accentA8,\n },\n \"&:active\": {\n cursor: \"grabbing\",\n },\n },\n itemLabel: {\n userSelect: \"none\",\n },\n})\n\nexport type DataTableColumnOrderProps = {\n /** Custom icon for the default trigger button. Falls back to swap-vertical icon. */\n icon?: ReactNode\n /** Custom trigger element. Defaults to an icon button. */\n trigger?: ReactNode\n /** Label shown at top of dropdown and as screen reader text for default trigger. Required for i18n. */\n label: string\n /** Accessible label for the drag handle buttons. Recommended for i18n and accessibility. Receives column label as parameter. */\n dragHandleLabel?: string | ((columnLabel: string) => string)\n /** Custom screen reader announcements for drag-and-drop operations. */\n announcements?: Announcements\n /** Custom screen reader instructions for draggable items. */\n screenReaderInstructions?: ScreenReaderInstructions\n /** Additional class name for the dropdown content */\n contentClassName?: string\n /** Alignment of dropdown relative to trigger. Default: \"end\" */\n align?: \"start\" | \"center\" | \"end\"\n} & Omit<ComponentProps<typeof DropdownMenu>, \"children\">\n\n/** Sortable item inside the column order dropdown */\nfunction DataTableColumnOrderItem({\n column,\n dragHandleLabel,\n}: {\n column: Column<unknown, unknown>\n dragHandleLabel?: string | ((columnLabel: string) => string)\n}) {\n const styles = useStyles()\n const {\n attributes,\n listeners,\n setNodeRef,\n transform,\n transition,\n isDragging,\n } = useSortable({ id: column.id })\n\n const meta = column.columnDef.meta as { visibilityLabel?: string } | undefined\n const label =\n meta?.visibilityLabel ??\n (typeof column.columnDef.header === \"string\"\n ? column.columnDef.header\n : column.id)\n\n const resolvedDragHandleLabel = dragHandleLabel\n ? typeof dragHandleLabel === \"function\"\n ? dragHandleLabel(label)\n : dragHandleLabel\n : `Drag to reorder ${label}`\n\n return (\n <div\n ref={setNodeRef}\n style={{\n transform: CSS.Transform.toString(transform),\n transition,\n }}\n className={mergeClasses(styles.item, isDragging && styles.itemDragging)}\n data-slot=\"data-table-column-order-item\"\n {...{ [SLOT_ATTR]: \"data-table-column-order-item\" }}\n data-fs-element=\"DataTable-ColumnOrder-Item\"\n >\n <button\n type=\"button\"\n className={styles.dragHandle}\n data-slot=\"data-table-column-order-drag-handle\"\n {...{ [SLOT_ATTR]: \"data-table-column-order-drag-handle\" }}\n aria-label={resolvedDragHandleLabel}\n {...attributes}\n {...listeners}\n >\n <IconGripVertical className={styles.gripIcon} />\n </button>\n <span\n className={styles.itemLabel}\n data-slot=\"data-table-column-order-item-label\"\n {...{ [SLOT_ATTR]: \"data-table-column-order-item-label\" }}\n >\n {label}\n </span>\n </div>\n )\n}\n\n/**\n * Inner list component that provides the DnD context.\n * Separated to avoid hook rules issues with early returns.\n */\nfunction DataTableColumnOrderList({\n columns,\n currentOrder,\n table,\n dragHandleLabel,\n announcements,\n screenReaderInstructions,\n}: {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n columns: Column<any, unknown>[]\n currentOrder: string[]\n table: { setColumnOrder: (order: string[]) => void }\n dragHandleLabel?: string | ((columnLabel: string) => string)\n announcements?: Announcements\n screenReaderInstructions?: ScreenReaderInstructions\n}) {\n const sensors = useSensors(\n useSensor(PointerSensor, {\n activationConstraint: { distance: 3 },\n }),\n useSensor(KeyboardSensor, {\n coordinateGetter: sortableKeyboardCoordinates,\n })\n )\n\n const handleDragEnd = useCallback(\n (event: DragEndEvent) => {\n const { active, over } = event\n if (!over || active.id === over.id) return\n\n const oldIndex = currentOrder.indexOf(active.id as string)\n const newIndex = currentOrder.indexOf(over.id as string)\n\n if (oldIndex === -1 || newIndex === -1) return\n\n const newOrder = arrayMove(currentOrder, oldIndex, newIndex)\n table.setColumnOrder(newOrder)\n },\n [currentOrder, table]\n )\n\n return (\n <DndContext\n sensors={sensors}\n collisionDetection={closestCenter}\n onDragEnd={handleDragEnd}\n accessibility={{\n announcements,\n screenReaderInstructions,\n }}\n >\n <SortableContext\n items={columns.map((c) => c.id)}\n strategy={verticalListSortingStrategy}\n >\n {columns.map((col) => (\n <DataTableColumnOrderItem\n key={col.id}\n column={col}\n dragHandleLabel={dragHandleLabel}\n />\n ))}\n </SortableContext>\n </DndContext>\n )\n}\n\n/**\n * A dropdown menu for reordering columns in DataTable via drag-and-drop.\n * Shows a draggable list of columns that can be rearranged.\n * Place in DataTableToolbar for consistent layout.\n */\nexport const DataTableColumnOrder = React.forwardRef<\n HTMLElement,\n DataTableColumnOrderProps\n>(function DataTableColumnOrder(\n {\n icon,\n trigger,\n label,\n dragHandleLabel,\n announcements,\n screenReaderInstructions,\n contentClassName,\n align = \"end\",\n ...props\n },\n ref\n) {\n const styles = useStyles()\n const { table } = useDataTable()\n\n // Get reorderable columns (exclude selection column, respect meta.enableOrdering)\n const allColumns = table.getAllLeafColumns()\n const reorderableColumns = allColumns.filter((col) => {\n if (col.id === \"select\") return false\n const meta = col.columnDef.meta as { enableOrdering?: boolean } | undefined\n return meta?.enableOrdering !== false\n })\n\n // If no reorderable columns, don't render\n if (reorderableColumns.length === 0) {\n return null\n }\n\n // Current order (derive from columns if columnOrder state is empty)\n const currentOrder =\n table.getState().columnOrder && table.getState().columnOrder.length > 0\n ? table.getState().columnOrder\n : allColumns.map((c) => c.id)\n\n // Sort reorderable columns by their position in currentOrder\n const orderedColumns = [...reorderableColumns].sort((a, b) => {\n const indexA = currentOrder.indexOf(a.id)\n const indexB = currentOrder.indexOf(b.id)\n return (\n (indexA === -1 ? Number.MAX_SAFE_INTEGER : indexA) -\n (indexB === -1 ? Number.MAX_SAFE_INTEGER : indexB)\n )\n })\n\n return (\n <DropdownMenu ref={ref} {...props}>\n <DropdownMenuTrigger asChild>\n {trigger ?? (\n <Button\n variant=\"tertiary\"\n size=\"sm\"\n data-slot=\"data-table-column-order-trigger\"\n {...{ [SLOT_ATTR]: \"data-table-column-order-trigger\" }}\n data-fs-element=\"DataTable-ColumnOrder-Trigger\"\n >\n {icon ?? <IconSwapVertical className={styles.icon} />}\n <span className={styles.srOnly}>{label}</span>\n </Button>\n )}\n </DropdownMenuTrigger>\n <DropdownMenuContent\n align={align}\n className={contentClassName}\n data-slot=\"data-table-column-order-content\"\n {...{ [SLOT_ATTR]: \"data-table-column-order-content\" }}\n data-fs-element=\"DataTable-ColumnOrder-Content\"\n >\n <DropdownMenuLabel>{label}</DropdownMenuLabel>\n <DropdownMenuSeparator />\n <DataTableColumnOrderList\n columns={orderedColumns}\n currentOrder={currentOrder}\n table={table}\n dragHandleLabel={dragHandleLabel}\n announcements={announcements}\n screenReaderInstructions={screenReaderInstructions}\n />\n </DropdownMenuContent>\n </DropdownMenu>\n )\n})\n"],"names":["IconSwapVertical","props","jsx","IconGripVertical","jsxs","useStyles","makeZenithStyles","boxModel","shorthands","tokens.spacingElement2","tokens.radiusSm","tokens.textSm","tokens.leadingSm","tokens.grayA3","nativeControl","tokens.grayA8","tokens.grayA12","tokens.accentA8","DataTableColumnOrderItem","column","dragHandleLabel","styles","attributes","listeners","setNodeRef","transform","transition","isDragging","useSortable","meta","label","resolvedDragHandleLabel","CSS","mergeClasses","SLOT_ATTR","DataTableColumnOrderList","columns","currentOrder","table","announcements","screenReaderInstructions","sensors","useSensors","useSensor","PointerSensor","KeyboardSensor","sortableKeyboardCoordinates","handleDragEnd","useCallback","event","active","over","oldIndex","newIndex","newOrder","arrayMove","DndContext","closestCenter","SortableContext","c","verticalListSortingStrategy","col","DataTableColumnOrder","React","icon","trigger","contentClassName","align","ref","useDataTable","allColumns","reorderableColumns","orderedColumns","a","b","indexA","indexB","DropdownMenu","DropdownMenuTrigger","Button","DropdownMenuContent","DropdownMenuLabel","DropdownMenuSeparator"],"mappings":"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"}
@@ -1,6 +1,6 @@
1
1
  import { jsxs as l, jsx as t } from "react/jsx-runtime";
2
2
  import * as w from "react";
3
- import { shorthands as n } from "@epilot/zenith-runtime/v1";
3
+ import { shorthands as n } from "@epilot/zenith-runtime/v1/core.js";
4
4
  import { makeZenithStyles as D } from "../../styles/make-styles.js";
5
5
  import { boxModel as d } from "../../styles/host-reset.js";
6
6
  import { Button as y } from "../button/button.js";
@@ -1 +1 @@
1
- {"version":3,"file":"data-table-column-visibility.js","sources":["../../../src/components/data-table/data-table-column-visibility.tsx"],"sourcesContent":["import * as React from \"react\"\nimport type { ComponentProps, ReactNode, SVGProps } from \"react\"\nimport { shorthands } from \"@epilot/zenith-runtime/v1\"\n\nimport { makeZenithStyles } from \"../../styles/make-styles\"\nimport { boxModel } from \"../../styles/host-reset\"\nimport { Button } from \"../button/button\"\nimport {\n DropdownMenu,\n DropdownMenuCheckboxItem,\n DropdownMenuContent,\n DropdownMenuLabel,\n DropdownMenuSeparator,\n DropdownMenuTrigger,\n} from \"../dropdown-menu/dropdown-menu\"\nimport { useDataTable } from \"./hooks/use-data-table\"\n\n// Settings/gear icon (default)\nconst IconSettings = (props: SVGProps<SVGSVGElement>) => (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"20\"\n height=\"20\"\n viewBox=\"0 -960 960 960\"\n fill=\"currentColor\"\n {...props}\n >\n <path d=\"M413.09-65.87q-16.26 0-28.68-9.85Q372-85.56 370-101.83l-15-94.56q-15.61-5.31-34.07-15.89-18.45-10.59-31.63-21.33l-85.43 40q-15.7 6.57-31.96 1.78-16.26-4.78-24.82-20.04l-65.92-118.7q-9.13-14.13-5.34-30.1 3.78-15.98 17.47-26.11l79.44-59q-1.44-7.31-1.94-17.11-.5-9.81-.5-17.11 0-7.3.5-17.11.5-9.8 1.94-17.11L93.3-572.65q-14.26-10.13-17.76-26.11-3.5-15.98 5.63-30.67l65.92-118.7q8.56-14.13 24.54-19.48 15.98-5.35 31.67 1.22l87.13 40q12.61-10.18 30.79-20.48 18.17-10.3 33.78-15.17l15-95.57q2-16.83 14.41-26.96 12.42-10.13 28.68-10.13h133.82q16.26 0 28.68 10.13Q588-874.44 590-857.61l15 94.57q15.61 5.87 34.28 15.67 18.68 9.8 31.42 20.98l85.43-40q15.7-6.57 31.46-1.22 15.76 5.35 24.32 19.48l67.48 118.7q8.57 14.69 5.07 31.17-3.5 16.48-17.76 25.61l-80 56.43q1.43 8.31 2.21 18.11.79 9.81.79 18.11 0 8.3-.79 17.61-.78 9.3-2.21 17.61l80 57.43q14.26 9.13 17.76 25.61 3.5 16.48-5.07 31.17l-66.48 118.7q-8.56 14.7-24.54 19.76-15.98 5.07-31.67-1.5l-86.57-40q-13.17 10.74-30.85 21.55-17.67 10.8-34.28 15.67l-15 94.56q-2 16.27-14.41 26.11-12.42 9.85-28.68 9.85H413.09Zm27.43-79.22h78.39l14.57-111.43q33.56-8 63.91-25 30.35-17 54.35-42.7l106 46 34.91-64.65-92.87-67.87q4-17.56 6.78-34.63 2.79-17.06 2.79-34.63 0-17.57-2.29-34.63-2.28-17.07-7.28-34.63l93.44-67.87-35.48-64.65-105.44 46q-23-27.13-53.13-45.48-30.13-18.35-65.69-22.78l-14-110.87h-78.96l-13.43 110.87q-35.13 6.43-65.76 24.28-30.63 17.85-54.2 43.98l-104.87-46-35.48 64.65 92.31 67.3q-4 17.57-6.79 34.92-2.78 17.34-2.78 34.91 0 17.57 2.78 35.2 2.79 17.63 6.79 34.63l-92.31 67.3 35.48 64.65 104.87-46q24.57 25.13 55.2 42.7 30.63 17.56 64.76 25.56l13.43 110.87ZM478.87-350q54 0 92-38t38-92q0-54-38-92t-92-38q-54 0-92 38t-38 92q0 54 38 92t92 38ZM480-480Z\" />\n </svg>\n)\n\nconst useStyles = makeZenithStyles({\n icon: {\n ...boxModel,\n width: \"1rem\",\n height: \"1rem\",\n },\n srOnly: {\n ...boxModel,\n position: \"absolute\",\n width: \"1px\",\n height: \"1px\",\n ...shorthands.padding(0),\n ...shorthands.margin(\"-1px\"),\n ...shorthands.overflow(\"hidden\"),\n clip: \"rect(0, 0, 0, 0)\",\n whiteSpace: \"nowrap\",\n },\n})\n\nexport type DataTableColumnVisibilityProps = {\n /** Custom icon for the default trigger button. Falls back to settings gear icon. */\n icon?: ReactNode\n /** Custom trigger element. Defaults to a settings icon button. */\n trigger?: ReactNode\n /** Label shown at top of dropdown and as screen reader text for default trigger. Required for i18n. */\n label: string\n /** Additional class name for the dropdown content */\n contentClassName?: string\n /** Alignment of dropdown relative to trigger. Default: \"end\" */\n align?: \"start\" | \"center\" | \"end\"\n} & Omit<ComponentProps<typeof DropdownMenu>, \"children\">\n\n/**\n * A dropdown menu for toggling column visibility in DataTable.\n * Shows checkboxes for each column that can be hidden.\n * Place in DataTableToolbar for consistent layout.\n */\nexport const DataTableColumnVisibility = React.forwardRef<\n HTMLElement,\n DataTableColumnVisibilityProps\n>(function DataTableColumnVisibility(\n { icon, trigger, label, contentClassName, align = \"end\", ...props },\n ref\n) {\n const { table } = useDataTable()\n const styles = useStyles()\n\n // Get columns that can be hidden (excludes selection column, etc.)\n const columns = table.getAllColumns().filter((column) => column.getCanHide())\n\n // If no hideable columns, don't render anything\n if (columns.length === 0) {\n return null\n }\n\n return (\n <DropdownMenu ref={ref} {...props}>\n <DropdownMenuTrigger asChild>\n {trigger ?? (\n <Button\n variant=\"tertiary\"\n size=\"sm\"\n data-fs-element=\"DataTable-ColumnVisibility-Trigger\"\n >\n {icon ?? <IconSettings className={styles.icon} />}\n <span className={styles.srOnly}>{label}</span>\n </Button>\n )}\n </DropdownMenuTrigger>\n <DropdownMenuContent\n align={align}\n className={contentClassName}\n data-fs-element=\"DataTable-ColumnVisibility-Content\"\n >\n <DropdownMenuLabel>{label}</DropdownMenuLabel>\n <DropdownMenuSeparator />\n {columns.map((column) => {\n // Get column header text for display\n // Priority: meta.visibilityLabel > string header > column.id\n const columnMeta = column.columnDef.meta as\n { visibilityLabel?: string } | undefined\n const headerText =\n columnMeta?.visibilityLabel ??\n (typeof column.columnDef.header === \"string\"\n ? column.columnDef.header\n : column.id)\n\n return (\n <DropdownMenuCheckboxItem\n key={column.id}\n checked={column.getIsVisible()}\n onCheckedChange={(value) => column.toggleVisibility(!!value)}\n data-fs-element=\"DataTable-ColumnVisibility-Item\"\n >\n {headerText}\n </DropdownMenuCheckboxItem>\n )\n })}\n </DropdownMenuContent>\n </DropdownMenu>\n )\n})\n"],"names":["IconSettings","props","jsx","useStyles","makeZenithStyles","boxModel","shorthands","DataTableColumnVisibility","React","icon","trigger","label","contentClassName","align","ref","table","useDataTable","styles","columns","column","jsxs","DropdownMenu","DropdownMenuTrigger","Button","DropdownMenuContent","DropdownMenuLabel","DropdownMenuSeparator","columnMeta","headerText","DropdownMenuCheckboxItem","value"],"mappings":";;;;;;;;AAkBA,MAAMA,IAAe,CAACC,MACpB,gBAAAC;AAAA,EAAC;AAAA,EAAA;AAAA,IACC,OAAM;AAAA,IACN,OAAM;AAAA,IACN,QAAO;AAAA,IACP,SAAQ;AAAA,IACR,MAAK;AAAA,IACJ,GAAGD;AAAA,IAEJ,UAAA,gBAAAC,EAAC,QAAA,EAAK,GAAE,iqDAAA,CAAiqD;AAAA,EAAA;AAC3qD,GAGIC,IAAYC,EAAiB;AAAA,EACjC,MAAM;AAAA,IACJ,GAAGC;AAAA,IACH,OAAO;AAAA,IACP,QAAQ;AAAA,EAAA;AAAA,EAEV,QAAQ;AAAA,IACN,GAAGA;AAAA,IACH,UAAU;AAAA,IACV,OAAO;AAAA,IACP,QAAQ;AAAA,IACR,GAAGC,EAAW,QAAQ,CAAC;AAAA,IACvB,GAAGA,EAAW,OAAO,MAAM;AAAA,IAC3B,GAAGA,EAAW,SAAS,QAAQ;AAAA,IAC/B,MAAM;AAAA,IACN,YAAY;AAAA,EAAA;AAEhB,CAAC,GAoBYC,IAA4BC,EAAM,WAG7C,SACA,EAAE,MAAAC,GAAM,SAAAC,GAAS,OAAAC,GAAO,kBAAAC,GAAkB,OAAAC,IAAQ,OAAO,GAAGZ,EAAA,GAC5Da,GACA;AACA,QAAM,EAAE,OAAAC,EAAA,IAAUC,EAAA,GACZC,IAASd,EAAA,GAGTe,IAAUH,EAAM,cAAA,EAAgB,OAAO,CAACI,MAAWA,EAAO,YAAY;AAG5E,SAAID,EAAQ,WAAW,IACd,OAIP,gBAAAE,EAACC,GAAA,EAAa,KAAAP,GAAW,GAAGb,GAC1B,UAAA;AAAA,IAAA,gBAAAC,EAACoB,GAAA,EAAoB,SAAO,IACzB,UAAAZ,KACC,gBAAAU;AAAA,MAACG;AAAA,MAAA;AAAA,QACC,SAAQ;AAAA,QACR,MAAK;AAAA,QACL,mBAAgB;AAAA,QAEf,UAAA;AAAA,UAAAd,KAAQ,gBAAAP,EAACF,GAAA,EAAa,WAAWiB,EAAO,MAAM;AAAA,UAC/C,gBAAAf,EAAC,QAAA,EAAK,WAAWe,EAAO,QAAS,UAAAN,EAAA,CAAM;AAAA,QAAA;AAAA,MAAA;AAAA,IAAA,GAG7C;AAAA,IACA,gBAAAS;AAAA,MAACI;AAAA,MAAA;AAAA,QACC,OAAAX;AAAA,QACA,WAAWD;AAAA,QACX,mBAAgB;AAAA,QAEhB,UAAA;AAAA,UAAA,gBAAAV,EAACuB,KAAmB,UAAAd,EAAA,CAAM;AAAA,4BACzBe,GAAA,EAAsB;AAAA,UACtBR,EAAQ,IAAI,CAACC,MAAW;AAGvB,kBAAMQ,IAAaR,EAAO,UAAU,MAE9BS,KACJD,KAAA,gBAAAA,EAAY,qBACX,OAAOR,EAAO,UAAU,UAAW,WAChCA,EAAO,UAAU,SACjBA,EAAO;AAEb,mBACE,gBAAAjB;AAAA,cAAC2B;AAAA,cAAA;AAAA,gBAEC,SAASV,EAAO,aAAA;AAAA,gBAChB,iBAAiB,CAACW,MAAUX,EAAO,iBAAiB,CAAC,CAACW,CAAK;AAAA,gBAC3D,mBAAgB;AAAA,gBAEf,UAAAF;AAAA,cAAA;AAAA,cALIT,EAAO;AAAA,YAAA;AAAA,UAQlB,CAAC;AAAA,QAAA;AAAA,MAAA;AAAA,IAAA;AAAA,EACH,GACF;AAEJ,CAAC;"}
1
+ {"version":3,"file":"data-table-column-visibility.js","sources":["../../../src/components/data-table/data-table-column-visibility.tsx"],"sourcesContent":["import * as React from \"react\"\nimport type { ComponentProps, ReactNode, SVGProps } from \"react\"\nimport { shorthands } from \"@epilot/zenith-runtime/v1/core\"\n\nimport { makeZenithStyles } from \"../../styles/make-styles\"\nimport { boxModel } from \"../../styles/host-reset\"\nimport { Button } from \"../button/button\"\nimport {\n DropdownMenu,\n DropdownMenuCheckboxItem,\n DropdownMenuContent,\n DropdownMenuLabel,\n DropdownMenuSeparator,\n DropdownMenuTrigger,\n} from \"../dropdown-menu/dropdown-menu\"\nimport { useDataTable } from \"./hooks/use-data-table\"\n\n// Settings/gear icon (default)\nconst IconSettings = (props: SVGProps<SVGSVGElement>) => (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"20\"\n height=\"20\"\n viewBox=\"0 -960 960 960\"\n fill=\"currentColor\"\n {...props}\n >\n <path d=\"M413.09-65.87q-16.26 0-28.68-9.85Q372-85.56 370-101.83l-15-94.56q-15.61-5.31-34.07-15.89-18.45-10.59-31.63-21.33l-85.43 40q-15.7 6.57-31.96 1.78-16.26-4.78-24.82-20.04l-65.92-118.7q-9.13-14.13-5.34-30.1 3.78-15.98 17.47-26.11l79.44-59q-1.44-7.31-1.94-17.11-.5-9.81-.5-17.11 0-7.3.5-17.11.5-9.8 1.94-17.11L93.3-572.65q-14.26-10.13-17.76-26.11-3.5-15.98 5.63-30.67l65.92-118.7q8.56-14.13 24.54-19.48 15.98-5.35 31.67 1.22l87.13 40q12.61-10.18 30.79-20.48 18.17-10.3 33.78-15.17l15-95.57q2-16.83 14.41-26.96 12.42-10.13 28.68-10.13h133.82q16.26 0 28.68 10.13Q588-874.44 590-857.61l15 94.57q15.61 5.87 34.28 15.67 18.68 9.8 31.42 20.98l85.43-40q15.7-6.57 31.46-1.22 15.76 5.35 24.32 19.48l67.48 118.7q8.57 14.69 5.07 31.17-3.5 16.48-17.76 25.61l-80 56.43q1.43 8.31 2.21 18.11.79 9.81.79 18.11 0 8.3-.79 17.61-.78 9.3-2.21 17.61l80 57.43q14.26 9.13 17.76 25.61 3.5 16.48-5.07 31.17l-66.48 118.7q-8.56 14.7-24.54 19.76-15.98 5.07-31.67-1.5l-86.57-40q-13.17 10.74-30.85 21.55-17.67 10.8-34.28 15.67l-15 94.56q-2 16.27-14.41 26.11-12.42 9.85-28.68 9.85H413.09Zm27.43-79.22h78.39l14.57-111.43q33.56-8 63.91-25 30.35-17 54.35-42.7l106 46 34.91-64.65-92.87-67.87q4-17.56 6.78-34.63 2.79-17.06 2.79-34.63 0-17.57-2.29-34.63-2.28-17.07-7.28-34.63l93.44-67.87-35.48-64.65-105.44 46q-23-27.13-53.13-45.48-30.13-18.35-65.69-22.78l-14-110.87h-78.96l-13.43 110.87q-35.13 6.43-65.76 24.28-30.63 17.85-54.2 43.98l-104.87-46-35.48 64.65 92.31 67.3q-4 17.57-6.79 34.92-2.78 17.34-2.78 34.91 0 17.57 2.78 35.2 2.79 17.63 6.79 34.63l-92.31 67.3 35.48 64.65 104.87-46q24.57 25.13 55.2 42.7 30.63 17.56 64.76 25.56l13.43 110.87ZM478.87-350q54 0 92-38t38-92q0-54-38-92t-92-38q-54 0-92 38t-38 92q0 54 38 92t92 38ZM480-480Z\" />\n </svg>\n)\n\nconst useStyles = makeZenithStyles({\n icon: {\n ...boxModel,\n width: \"1rem\",\n height: \"1rem\",\n },\n srOnly: {\n ...boxModel,\n position: \"absolute\",\n width: \"1px\",\n height: \"1px\",\n ...shorthands.padding(0),\n ...shorthands.margin(\"-1px\"),\n ...shorthands.overflow(\"hidden\"),\n clip: \"rect(0, 0, 0, 0)\",\n whiteSpace: \"nowrap\",\n },\n})\n\nexport type DataTableColumnVisibilityProps = {\n /** Custom icon for the default trigger button. Falls back to settings gear icon. */\n icon?: ReactNode\n /** Custom trigger element. Defaults to a settings icon button. */\n trigger?: ReactNode\n /** Label shown at top of dropdown and as screen reader text for default trigger. Required for i18n. */\n label: string\n /** Additional class name for the dropdown content */\n contentClassName?: string\n /** Alignment of dropdown relative to trigger. Default: \"end\" */\n align?: \"start\" | \"center\" | \"end\"\n} & Omit<ComponentProps<typeof DropdownMenu>, \"children\">\n\n/**\n * A dropdown menu for toggling column visibility in DataTable.\n * Shows checkboxes for each column that can be hidden.\n * Place in DataTableToolbar for consistent layout.\n */\nexport const DataTableColumnVisibility = React.forwardRef<\n HTMLElement,\n DataTableColumnVisibilityProps\n>(function DataTableColumnVisibility(\n { icon, trigger, label, contentClassName, align = \"end\", ...props },\n ref\n) {\n const { table } = useDataTable()\n const styles = useStyles()\n\n // Get columns that can be hidden (excludes selection column, etc.)\n const columns = table.getAllColumns().filter((column) => column.getCanHide())\n\n // If no hideable columns, don't render anything\n if (columns.length === 0) {\n return null\n }\n\n return (\n <DropdownMenu ref={ref} {...props}>\n <DropdownMenuTrigger asChild>\n {trigger ?? (\n <Button\n variant=\"tertiary\"\n size=\"sm\"\n data-fs-element=\"DataTable-ColumnVisibility-Trigger\"\n >\n {icon ?? <IconSettings className={styles.icon} />}\n <span className={styles.srOnly}>{label}</span>\n </Button>\n )}\n </DropdownMenuTrigger>\n <DropdownMenuContent\n align={align}\n className={contentClassName}\n data-fs-element=\"DataTable-ColumnVisibility-Content\"\n >\n <DropdownMenuLabel>{label}</DropdownMenuLabel>\n <DropdownMenuSeparator />\n {columns.map((column) => {\n // Get column header text for display\n // Priority: meta.visibilityLabel > string header > column.id\n const columnMeta = column.columnDef.meta as\n { visibilityLabel?: string } | undefined\n const headerText =\n columnMeta?.visibilityLabel ??\n (typeof column.columnDef.header === \"string\"\n ? column.columnDef.header\n : column.id)\n\n return (\n <DropdownMenuCheckboxItem\n key={column.id}\n checked={column.getIsVisible()}\n onCheckedChange={(value) => column.toggleVisibility(!!value)}\n data-fs-element=\"DataTable-ColumnVisibility-Item\"\n >\n {headerText}\n </DropdownMenuCheckboxItem>\n )\n })}\n </DropdownMenuContent>\n </DropdownMenu>\n )\n})\n"],"names":["IconSettings","props","jsx","useStyles","makeZenithStyles","boxModel","shorthands","DataTableColumnVisibility","React","icon","trigger","label","contentClassName","align","ref","table","useDataTable","styles","columns","column","jsxs","DropdownMenu","DropdownMenuTrigger","Button","DropdownMenuContent","DropdownMenuLabel","DropdownMenuSeparator","columnMeta","headerText","DropdownMenuCheckboxItem","value"],"mappings":";;;;;;;;AAkBA,MAAMA,IAAe,CAACC,MACpB,gBAAAC;AAAA,EAAC;AAAA,EAAA;AAAA,IACC,OAAM;AAAA,IACN,OAAM;AAAA,IACN,QAAO;AAAA,IACP,SAAQ;AAAA,IACR,MAAK;AAAA,IACJ,GAAGD;AAAA,IAEJ,UAAA,gBAAAC,EAAC,QAAA,EAAK,GAAE,iqDAAA,CAAiqD;AAAA,EAAA;AAC3qD,GAGIC,IAAYC,EAAiB;AAAA,EACjC,MAAM;AAAA,IACJ,GAAGC;AAAA,IACH,OAAO;AAAA,IACP,QAAQ;AAAA,EAAA;AAAA,EAEV,QAAQ;AAAA,IACN,GAAGA;AAAA,IACH,UAAU;AAAA,IACV,OAAO;AAAA,IACP,QAAQ;AAAA,IACR,GAAGC,EAAW,QAAQ,CAAC;AAAA,IACvB,GAAGA,EAAW,OAAO,MAAM;AAAA,IAC3B,GAAGA,EAAW,SAAS,QAAQ;AAAA,IAC/B,MAAM;AAAA,IACN,YAAY;AAAA,EAAA;AAEhB,CAAC,GAoBYC,IAA4BC,EAAM,WAG7C,SACA,EAAE,MAAAC,GAAM,SAAAC,GAAS,OAAAC,GAAO,kBAAAC,GAAkB,OAAAC,IAAQ,OAAO,GAAGZ,EAAA,GAC5Da,GACA;AACA,QAAM,EAAE,OAAAC,EAAA,IAAUC,EAAA,GACZC,IAASd,EAAA,GAGTe,IAAUH,EAAM,cAAA,EAAgB,OAAO,CAACI,MAAWA,EAAO,YAAY;AAG5E,SAAID,EAAQ,WAAW,IACd,OAIP,gBAAAE,EAACC,GAAA,EAAa,KAAAP,GAAW,GAAGb,GAC1B,UAAA;AAAA,IAAA,gBAAAC,EAACoB,GAAA,EAAoB,SAAO,IACzB,UAAAZ,KACC,gBAAAU;AAAA,MAACG;AAAA,MAAA;AAAA,QACC,SAAQ;AAAA,QACR,MAAK;AAAA,QACL,mBAAgB;AAAA,QAEf,UAAA;AAAA,UAAAd,KAAQ,gBAAAP,EAACF,GAAA,EAAa,WAAWiB,EAAO,MAAM;AAAA,UAC/C,gBAAAf,EAAC,QAAA,EAAK,WAAWe,EAAO,QAAS,UAAAN,EAAA,CAAM;AAAA,QAAA;AAAA,MAAA;AAAA,IAAA,GAG7C;AAAA,IACA,gBAAAS;AAAA,MAACI;AAAA,MAAA;AAAA,QACC,OAAAX;AAAA,QACA,WAAWD;AAAA,QACX,mBAAgB;AAAA,QAEhB,UAAA;AAAA,UAAA,gBAAAV,EAACuB,KAAmB,UAAAd,EAAA,CAAM;AAAA,4BACzBe,GAAA,EAAsB;AAAA,UACtBR,EAAQ,IAAI,CAACC,MAAW;AAGvB,kBAAMQ,IAAaR,EAAO,UAAU,MAE9BS,KACJD,KAAA,gBAAAA,EAAY,qBACX,OAAOR,EAAO,UAAU,UAAW,WAChCA,EAAO,UAAU,SACjBA,EAAO;AAEb,mBACE,gBAAAjB;AAAA,cAAC2B;AAAA,cAAA;AAAA,gBAEC,SAASV,EAAO,aAAA;AAAA,gBAChB,iBAAiB,CAACW,MAAUX,EAAO,iBAAiB,CAAC,CAACW,CAAK;AAAA,gBAC3D,mBAAgB;AAAA,gBAEf,UAAAF;AAAA,cAAA;AAAA,cALIT,EAAO;AAAA,YAAA;AAAA,UAQlB,CAAC;AAAA,QAAA;AAAA,MAAA;AAAA,IAAA;AAAA,EACH,GACF;AAEJ,CAAC;"}
@@ -3,7 +3,7 @@ import * as P from "react";
3
3
  import { useRef as T, useState as v, useCallback as y, useEffect as q, useMemo as u } from "react";
4
4
  import { flushSync as G } from "react-dom";
5
5
  import { useVirtualizer as Z } from "../../vendor/.bun/@tanstack_react-virtual@3.11.2_6f4b9a1cfb20c0ae/vendor/@tanstack/react-virtual/dist/esm/index.js";
6
- import { SLOT_ATTR as x, mergeClasses as J, shorthands as K } from "@epilot/zenith-runtime/v1";
6
+ import { SLOT_ATTR as x, mergeClasses as J, shorthands as K } from "@epilot/zenith-runtime/v1/core.js";
7
7
  import { makeZenithStyles as Q } from "../../styles/make-styles.js";
8
8
  import { boxModel as D } from "../../styles/host-reset.js";
9
9
  import { leadingSm as X, textSm as Y } from "../../tokens/index.js";
@@ -1 +1 @@
1
- {"version":3,"file":"data-table-content.js","sources":["../../../src/components/data-table/data-table-content.tsx"],"sourcesContent":["import * as React from \"react\"\nimport { useRef, useMemo, useCallback, useState, useEffect } from \"react\"\nimport { flushSync } from \"react-dom\"\nimport type { ReactNode } from \"react\"\nimport { useVirtualizer } from \"@tanstack/react-virtual\"\nimport { mergeClasses, shorthands } from \"@epilot/zenith-runtime/v1\"\n\nimport { SLOT_ATTR } from \"../../renderer/contract\"\nimport { makeZenithStyles } from \"../../styles/make-styles\"\nimport { boxModel } from \"../../styles/host-reset\"\nimport * as tokens from \"../../tokens\"\nimport { useDataTable } from \"./hooks\"\nimport {\n DataTableContentContext,\n DataTableVirtualizerContext,\n DEFAULT_ROW_HEIGHT,\n DEFAULT_OVERSCAN,\n} from \"./data-table-context\"\nimport { DataTableHeader } from \"./data-table-header\"\nimport { DataTableBody } from \"./data-table-body\"\n\n// TanStack Table's default column width\nconst DEFAULT_COLUMN_WIDTH = 150\n\nconst useStyles = makeZenithStyles({\n container: {\n ...boxModel,\n position: \"relative\",\n width: \"100%\",\n ...shorthands.overflow(\"auto\"),\n },\n resizing: {\n cursor: \"col-resize\",\n userSelect: \"none\",\n },\n table: {\n ...boxModel,\n tableLayout: \"fixed\",\n borderCollapse: \"separate\",\n borderSpacing: 0,\n fontSize: tokens.textSm,\n lineHeight: tokens.leadingSm,\n },\n})\n\nexport type DataTableContentProps = {\n /** Children to render inside the table (DataTableHeader, DataTableBody) */\n children?: ReactNode\n /** Additional class name */\n className?: string\n /** Additional style */\n style?: React.CSSProperties\n}\n\n/**\n * Container component for DataTable that handles the table structure and virtualization.\n * When virtualization is enabled, this component manages the scroll container.\n *\n * If no children are provided, renders DataTableHeader and DataTableBody by default.\n */\nexport const DataTableContent = React.forwardRef<\n HTMLDivElement,\n DataTableContentProps\n>(function DataTableContent({ children, className, style }, ref) {\n const styles = useStyles()\n const { table, config, disableColumnResizing } = useDataTable()\n const enableColumnResizing = !disableColumnResizing\n\n const isResizing =\n enableColumnResizing && table.getState().columnSizingInfo?.isResizingColumn\n const internalContainerRef = useRef<HTMLDivElement>(null!)\n const tableRef = useRef<HTMLTableElement>(null)\n const [hasSyncedWidths, setHasSyncedWidths] = useState(false)\n const [containerWidth, setContainerWidth] = useState(0)\n const rows = table.getRowModel().rows\n\n // Attach ref to internal ref or forwarded ref\n const handleRef = useCallback(\n (node: HTMLDivElement | null) => {\n internalContainerRef.current = node!\n if (typeof ref === \"function\") {\n ref(node)\n } else if (ref) {\n ;(ref as React.MutableRefObject<HTMLDivElement | null>).current = node\n }\n },\n [ref]\n )\n\n // Track container width for spacer calculation\n useEffect(() => {\n const container = internalContainerRef.current\n if (!container || typeof ResizeObserver === \"undefined\") return\n\n const observer = new ResizeObserver((entries) => {\n setContainerWidth(entries[0].contentRect.width)\n })\n observer.observe(container)\n return () => observer.disconnect()\n }, [])\n\n // Sync visual column widths to stored widths BEFORE resize starts\n const syncColumnWidthsBeforeResize = useCallback(() => {\n if (tableRef.current && !hasSyncedWidths) {\n const headerCells = tableRef.current.querySelectorAll(\n \"th:not([data-spacer])\"\n )\n const columns = table.getVisibleLeafColumns()\n\n if (headerCells.length === columns.length) {\n const newSizing: Record<string, number> = {}\n\n headerCells.forEach((cell, index) => {\n const column = columns[index]\n if (column) {\n newSizing[column.id] = Math.round(\n cell.getBoundingClientRect().width\n )\n }\n })\n\n flushSync(() => {\n setHasSyncedWidths(true)\n table.setColumnSizing((prev) => ({ ...prev, ...newSizing }))\n })\n }\n }\n }, [table, hasSyncedWidths])\n\n const isVirtual = Boolean(config?.enableVirtualization)\n\n // Always call useVirtualizer to follow React hooks rules\n // When virtualization is disabled, count=0 makes it effectively a no-op\n const virtualizer = useVirtualizer({\n count: isVirtual ? rows.length : 0,\n getScrollElement: () => internalContainerRef.current,\n estimateSize: () => config?.estimateRowHeight ?? DEFAULT_ROW_HEIGHT,\n overscan: config?.overscan ?? DEFAULT_OVERSCAN,\n enabled: isVirtual,\n })\n\n // Get column sizing and visibility state to trigger recalculation\n const columnSizing = table.getState().columnSizing\n const columnVisibility = table.getState().columnVisibility\n\n // Calculate total column width from visible columns\n const calculatedColumnSum = useMemo(() => {\n const totalWidth = table.getVisibleLeafColumns().reduce((sum, col) => {\n return sum + (col.getSize() ?? DEFAULT_COLUMN_WIDTH)\n }, 0)\n return totalWidth\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [table, columnSizing, columnVisibility])\n\n const WIDTH_BUFFER = 4\n const tableWidth = useMemo(() => {\n if (!hasSyncedWidths) {\n return `calc(100% - ${WIDTH_BUFFER}px)`\n }\n return calculatedColumnSum\n ? `${calculatedColumnSum}px`\n : `calc(100% - ${WIDTH_BUFFER}px)`\n }, [hasSyncedWidths, calculatedColumnSum])\n\n // Calculate spacer width to fill remaining container space after resize\n const spacerWidth = useMemo(() => {\n if (!hasSyncedWidths || !containerWidth) return 0\n return Math.max(0, containerWidth - calculatedColumnSum)\n }, [hasSyncedWidths, containerWidth, calculatedColumnSum])\n\n // If no children, render default header + body\n const content = children ?? (\n <>\n <DataTableHeader />\n <DataTableBody />\n </>\n )\n\n const contentContextValue = useMemo(\n () => ({ syncColumnWidthsBeforeResize, spacerWidth }),\n [syncColumnWidthsBeforeResize, spacerWidth]\n )\n\n const virtualizerContextValue = useMemo(\n () =>\n isVirtual\n ? { virtualizer, scrollContainerRef: internalContainerRef }\n : null,\n [isVirtual, virtualizer]\n )\n\n return (\n <DataTableContentContext.Provider value={contentContextValue}>\n <DataTableVirtualizerContext.Provider value={virtualizerContextValue}>\n <div\n ref={handleRef}\n data-slot=\"data-table-content\"\n {...{ [SLOT_ATTR]: \"data-table-content\" }}\n data-fs-element=\"DataTable-Content\"\n className={mergeClasses(\n styles.container,\n isResizing && styles.resizing,\n className\n )}\n style={{\n height: isVirtual ? config?.containerHeight : undefined,\n ...style,\n }}\n >\n <table\n ref={tableRef}\n data-slot=\"table\"\n {...{ [SLOT_ATTR]: \"table\" }}\n className={styles.table}\n style={{ width: tableWidth }}\n >\n {content}\n </table>\n </div>\n </DataTableVirtualizerContext.Provider>\n </DataTableContentContext.Provider>\n )\n})\n"],"names":["DEFAULT_COLUMN_WIDTH","useStyles","makeZenithStyles","boxModel","shorthands","tokens.textSm","tokens.leadingSm","DataTableContent","React","children","className","style","ref","styles","table","config","disableColumnResizing","useDataTable","isResizing","_a","internalContainerRef","useRef","tableRef","hasSyncedWidths","setHasSyncedWidths","useState","containerWidth","setContainerWidth","rows","handleRef","useCallback","node","useEffect","container","observer","entries","syncColumnWidthsBeforeResize","headerCells","columns","newSizing","cell","index","column","flushSync","prev","isVirtual","virtualizer","useVirtualizer","DEFAULT_ROW_HEIGHT","DEFAULT_OVERSCAN","columnSizing","columnVisibility","calculatedColumnSum","useMemo","sum","col","WIDTH_BUFFER","tableWidth","spacerWidth","content","jsxs","Fragment","jsx","DataTableHeader","DataTableBody","contentContextValue","virtualizerContextValue","DataTableContentContext","DataTableVirtualizerContext","SLOT_ATTR","mergeClasses"],"mappings":";;;;;;;;;;;;;AAsBA,MAAMA,KAAuB,KAEvBC,KAAYC,EAAiB;AAAA,EACjC,WAAW;AAAA,IACT,GAAGC;AAAA,IACH,UAAU;AAAA,IACV,OAAO;AAAA,IACP,GAAGC,EAAW,SAAS,MAAM;AAAA,EAAA;AAAA,EAE/B,UAAU;AAAA,IACR,QAAQ;AAAA,IACR,YAAY;AAAA,EAAA;AAAA,EAEd,OAAO;AAAA,IACL,GAAGD;AAAA,IACH,aAAa;AAAA,IACb,gBAAgB;AAAA,IAChB,eAAe;AAAA,IACf,UAAUE;AAAAA,IACV,YAAYC;AAAAA,EAAO;AAEvB,CAAC,GAiBYC,KAAmBC,EAAM,WAGpC,SAA0B,EAAE,UAAAC,GAAU,WAAAC,GAAW,OAAAC,EAAA,GAASC,GAAK;;AAC/D,QAAMC,IAASZ,GAAA,GACT,EAAE,OAAAa,GAAO,QAAAC,GAAQ,uBAAAC,EAAA,IAA0BC,GAAA,GAG3CC,IAFuB,CAACF,OAGJG,IAAAL,EAAM,SAAA,EAAW,qBAAjB,gBAAAK,EAAmC,mBACvDC,IAAuBC,EAAuB,IAAK,GACnDC,IAAWD,EAAyB,IAAI,GACxC,CAACE,GAAiBC,CAAkB,IAAIC,EAAS,EAAK,GACtD,CAACC,GAAgBC,CAAiB,IAAIF,EAAS,CAAC,GAChDG,IAAOd,EAAM,YAAA,EAAc,MAG3Be,IAAYC;AAAA,IAChB,CAACC,MAAgC;AAC/B,MAAAX,EAAqB,UAAUW,GAC3B,OAAOnB,KAAQ,aACjBA,EAAImB,CAAI,IACCnB,MACPA,EAAsD,UAAUmB;AAAA,IAEtE;AAAA,IACA,CAACnB,CAAG;AAAA,EAAA;AAIN,EAAAoB,EAAU,MAAM;AACd,UAAMC,IAAYb,EAAqB;AACvC,QAAI,CAACa,KAAa,OAAO,iBAAmB,IAAa;AAEzD,UAAMC,IAAW,IAAI,eAAe,CAACC,MAAY;AAC/C,MAAAR,EAAkBQ,EAAQ,CAAC,EAAE,YAAY,KAAK;AAAA,IAChD,CAAC;AACD,WAAAD,EAAS,QAAQD,CAAS,GACnB,MAAMC,EAAS,WAAA;AAAA,EACxB,GAAG,CAAA,CAAE;AAGL,QAAME,IAA+BN,EAAY,MAAM;AACrD,QAAIR,EAAS,WAAW,CAACC,GAAiB;AACxC,YAAMc,IAAcf,EAAS,QAAQ;AAAA,QACnC;AAAA,MAAA,GAEIgB,IAAUxB,EAAM,sBAAA;AAEtB,UAAIuB,EAAY,WAAWC,EAAQ,QAAQ;AACzC,cAAMC,IAAoC,CAAA;AAE1C,QAAAF,EAAY,QAAQ,CAACG,GAAMC,MAAU;AACnC,gBAAMC,IAASJ,EAAQG,CAAK;AAC5B,UAAIC,MACFH,EAAUG,EAAO,EAAE,IAAI,KAAK;AAAA,YAC1BF,EAAK,wBAAwB;AAAA,UAAA;AAAA,QAGnC,CAAC,GAEDG,EAAU,MAAM;AACd,UAAAnB,EAAmB,EAAI,GACvBV,EAAM,gBAAgB,CAAC8B,OAAU,EAAE,GAAGA,GAAM,GAAGL,IAAY;AAAA,QAC7D,CAAC;AAAA,MACH;AAAA,IACF;AAAA,EACF,GAAG,CAACzB,GAAOS,CAAe,CAAC,GAErBsB,IAAY,GAAQ9B,KAAA,QAAAA,EAAQ,uBAI5B+B,IAAcC,EAAe;AAAA,IACjC,OAAOF,IAAYjB,EAAK,SAAS;AAAA,IACjC,kBAAkB,MAAMR,EAAqB;AAAA,IAC7C,cAAc,OAAML,KAAA,gBAAAA,EAAQ,sBAAqBiC;AAAA,IACjD,WAAUjC,KAAA,gBAAAA,EAAQ,aAAYkC;AAAA,IAC9B,SAASJ;AAAA,EAAA,CACV,GAGKK,IAAepC,EAAM,SAAA,EAAW,cAChCqC,IAAmBrC,EAAM,SAAA,EAAW,kBAGpCsC,IAAsBC,EAAQ,MACfvC,EAAM,sBAAA,EAAwB,OAAO,CAACwC,GAAKC,MACrDD,KAAOC,EAAI,QAAA,KAAavD,KAC9B,CAAC,GAGH,CAACc,GAAOoC,GAAcC,CAAgB,CAAC,GAEpCK,IAAe,GACfC,IAAaJ,EAAQ,MACpB9B,IAGE6B,IACH,GAAGA,CAAmB,OACtB,eAAeI,CAAY,QAJtB,eAAeA,CAAY,OAKnC,CAACjC,GAAiB6B,CAAmB,CAAC,GAGnCM,IAAcL,EAAQ,MACtB,CAAC9B,KAAmB,CAACG,IAAuB,IACzC,KAAK,IAAI,GAAGA,IAAiB0B,CAAmB,GACtD,CAAC7B,GAAiBG,GAAgB0B,CAAmB,CAAC,GAGnDO,IAAUlD,KACd,gBAAAmD,EAAAC,GAAA,EACE,UAAA;AAAA,IAAA,gBAAAC,EAACC,IAAA,EAAgB;AAAA,sBAChBC,IAAA,CAAA,CAAc;AAAA,EAAA,GACjB,GAGIC,IAAsBZ;AAAA,IAC1B,OAAO,EAAE,8BAAAjB,GAA8B,aAAAsB;IACvC,CAACtB,GAA8BsB,CAAW;AAAA,EAAA,GAGtCQ,IAA0Bb;AAAA,IAC9B,MACER,IACI,EAAE,aAAAC,GAAa,oBAAoB1B,MACnC;AAAA,IACN,CAACyB,GAAWC,CAAW;AAAA,EAAA;AAGzB,SACE,gBAAAgB,EAACK,GAAwB,UAAxB,EAAiC,OAAOF,GACvC,UAAA,gBAAAH,EAACM,GAA4B,UAA5B,EAAqC,OAAOF,GAC3C,UAAA,gBAAAJ;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,KAAKjC;AAAA,MACL,aAAU;AAAA,MACJ,CAACwC,CAAS,GAAG;AAAA,MACnB,mBAAgB;AAAA,MAChB,WAAWC;AAAA,QACTzD,EAAO;AAAA,QACPK,KAAcL,EAAO;AAAA,QACrBH;AAAA,MAAA;AAAA,MAEF,OAAO;AAAA,QACL,QAAQmC,IAAY9B,KAAA,gBAAAA,EAAQ,kBAAkB;AAAA,QAC9C,GAAGJ;AAAA,MAAA;AAAA,MAGL,UAAA,gBAAAmD;AAAA,QAAC;AAAA,QAAA;AAAA,UACC,KAAKxC;AAAA,UACL,aAAU;AAAA,UACJ,CAAC+C,CAAS,GAAG;AAAA,UACnB,WAAWxD,EAAO;AAAA,UAClB,OAAO,EAAE,OAAO4C,EAAA;AAAA,UAEf,UAAAE;AAAA,QAAA;AAAA,MAAA;AAAA,IACH;AAAA,EAAA,GAEJ,EAAA,CACF;AAEJ,CAAC;"}
1
+ {"version":3,"file":"data-table-content.js","sources":["../../../src/components/data-table/data-table-content.tsx"],"sourcesContent":["import * as React from \"react\"\nimport { useRef, useMemo, useCallback, useState, useEffect } from \"react\"\nimport { flushSync } from \"react-dom\"\nimport type { ReactNode } from \"react\"\nimport { useVirtualizer } from \"@tanstack/react-virtual\"\nimport { mergeClasses, shorthands } from \"@epilot/zenith-runtime/v1/core\"\n\nimport { SLOT_ATTR } from \"../../renderer/contract\"\nimport { makeZenithStyles } from \"../../styles/make-styles\"\nimport { boxModel } from \"../../styles/host-reset\"\nimport * as tokens from \"../../tokens\"\nimport { useDataTable } from \"./hooks\"\nimport {\n DataTableContentContext,\n DataTableVirtualizerContext,\n DEFAULT_ROW_HEIGHT,\n DEFAULT_OVERSCAN,\n} from \"./data-table-context\"\nimport { DataTableHeader } from \"./data-table-header\"\nimport { DataTableBody } from \"./data-table-body\"\n\n// TanStack Table's default column width\nconst DEFAULT_COLUMN_WIDTH = 150\n\nconst useStyles = makeZenithStyles({\n container: {\n ...boxModel,\n position: \"relative\",\n width: \"100%\",\n ...shorthands.overflow(\"auto\"),\n },\n resizing: {\n cursor: \"col-resize\",\n userSelect: \"none\",\n },\n table: {\n ...boxModel,\n tableLayout: \"fixed\",\n borderCollapse: \"separate\",\n borderSpacing: 0,\n fontSize: tokens.textSm,\n lineHeight: tokens.leadingSm,\n },\n})\n\nexport type DataTableContentProps = {\n /** Children to render inside the table (DataTableHeader, DataTableBody) */\n children?: ReactNode\n /** Additional class name */\n className?: string\n /** Additional style */\n style?: React.CSSProperties\n}\n\n/**\n * Container component for DataTable that handles the table structure and virtualization.\n * When virtualization is enabled, this component manages the scroll container.\n *\n * If no children are provided, renders DataTableHeader and DataTableBody by default.\n */\nexport const DataTableContent = React.forwardRef<\n HTMLDivElement,\n DataTableContentProps\n>(function DataTableContent({ children, className, style }, ref) {\n const styles = useStyles()\n const { table, config, disableColumnResizing } = useDataTable()\n const enableColumnResizing = !disableColumnResizing\n\n const isResizing =\n enableColumnResizing && table.getState().columnSizingInfo?.isResizingColumn\n const internalContainerRef = useRef<HTMLDivElement>(null!)\n const tableRef = useRef<HTMLTableElement>(null)\n const [hasSyncedWidths, setHasSyncedWidths] = useState(false)\n const [containerWidth, setContainerWidth] = useState(0)\n const rows = table.getRowModel().rows\n\n // Attach ref to internal ref or forwarded ref\n const handleRef = useCallback(\n (node: HTMLDivElement | null) => {\n internalContainerRef.current = node!\n if (typeof ref === \"function\") {\n ref(node)\n } else if (ref) {\n ;(ref as React.MutableRefObject<HTMLDivElement | null>).current = node\n }\n },\n [ref]\n )\n\n // Track container width for spacer calculation\n useEffect(() => {\n const container = internalContainerRef.current\n if (!container || typeof ResizeObserver === \"undefined\") return\n\n const observer = new ResizeObserver((entries) => {\n setContainerWidth(entries[0].contentRect.width)\n })\n observer.observe(container)\n return () => observer.disconnect()\n }, [])\n\n // Sync visual column widths to stored widths BEFORE resize starts\n const syncColumnWidthsBeforeResize = useCallback(() => {\n if (tableRef.current && !hasSyncedWidths) {\n const headerCells = tableRef.current.querySelectorAll(\n \"th:not([data-spacer])\"\n )\n const columns = table.getVisibleLeafColumns()\n\n if (headerCells.length === columns.length) {\n const newSizing: Record<string, number> = {}\n\n headerCells.forEach((cell, index) => {\n const column = columns[index]\n if (column) {\n newSizing[column.id] = Math.round(\n cell.getBoundingClientRect().width\n )\n }\n })\n\n flushSync(() => {\n setHasSyncedWidths(true)\n table.setColumnSizing((prev) => ({ ...prev, ...newSizing }))\n })\n }\n }\n }, [table, hasSyncedWidths])\n\n const isVirtual = Boolean(config?.enableVirtualization)\n\n // Always call useVirtualizer to follow React hooks rules\n // When virtualization is disabled, count=0 makes it effectively a no-op\n const virtualizer = useVirtualizer({\n count: isVirtual ? rows.length : 0,\n getScrollElement: () => internalContainerRef.current,\n estimateSize: () => config?.estimateRowHeight ?? DEFAULT_ROW_HEIGHT,\n overscan: config?.overscan ?? DEFAULT_OVERSCAN,\n enabled: isVirtual,\n })\n\n // Get column sizing and visibility state to trigger recalculation\n const columnSizing = table.getState().columnSizing\n const columnVisibility = table.getState().columnVisibility\n\n // Calculate total column width from visible columns\n const calculatedColumnSum = useMemo(() => {\n const totalWidth = table.getVisibleLeafColumns().reduce((sum, col) => {\n return sum + (col.getSize() ?? DEFAULT_COLUMN_WIDTH)\n }, 0)\n return totalWidth\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [table, columnSizing, columnVisibility])\n\n const WIDTH_BUFFER = 4\n const tableWidth = useMemo(() => {\n if (!hasSyncedWidths) {\n return `calc(100% - ${WIDTH_BUFFER}px)`\n }\n return calculatedColumnSum\n ? `${calculatedColumnSum}px`\n : `calc(100% - ${WIDTH_BUFFER}px)`\n }, [hasSyncedWidths, calculatedColumnSum])\n\n // Calculate spacer width to fill remaining container space after resize\n const spacerWidth = useMemo(() => {\n if (!hasSyncedWidths || !containerWidth) return 0\n return Math.max(0, containerWidth - calculatedColumnSum)\n }, [hasSyncedWidths, containerWidth, calculatedColumnSum])\n\n // If no children, render default header + body\n const content = children ?? (\n <>\n <DataTableHeader />\n <DataTableBody />\n </>\n )\n\n const contentContextValue = useMemo(\n () => ({ syncColumnWidthsBeforeResize, spacerWidth }),\n [syncColumnWidthsBeforeResize, spacerWidth]\n )\n\n const virtualizerContextValue = useMemo(\n () =>\n isVirtual\n ? { virtualizer, scrollContainerRef: internalContainerRef }\n : null,\n [isVirtual, virtualizer]\n )\n\n return (\n <DataTableContentContext.Provider value={contentContextValue}>\n <DataTableVirtualizerContext.Provider value={virtualizerContextValue}>\n <div\n ref={handleRef}\n data-slot=\"data-table-content\"\n {...{ [SLOT_ATTR]: \"data-table-content\" }}\n data-fs-element=\"DataTable-Content\"\n className={mergeClasses(\n styles.container,\n isResizing && styles.resizing,\n className\n )}\n style={{\n height: isVirtual ? config?.containerHeight : undefined,\n ...style,\n }}\n >\n <table\n ref={tableRef}\n data-slot=\"table\"\n {...{ [SLOT_ATTR]: \"table\" }}\n className={styles.table}\n style={{ width: tableWidth }}\n >\n {content}\n </table>\n </div>\n </DataTableVirtualizerContext.Provider>\n </DataTableContentContext.Provider>\n )\n})\n"],"names":["DEFAULT_COLUMN_WIDTH","useStyles","makeZenithStyles","boxModel","shorthands","tokens.textSm","tokens.leadingSm","DataTableContent","React","children","className","style","ref","styles","table","config","disableColumnResizing","useDataTable","isResizing","_a","internalContainerRef","useRef","tableRef","hasSyncedWidths","setHasSyncedWidths","useState","containerWidth","setContainerWidth","rows","handleRef","useCallback","node","useEffect","container","observer","entries","syncColumnWidthsBeforeResize","headerCells","columns","newSizing","cell","index","column","flushSync","prev","isVirtual","virtualizer","useVirtualizer","DEFAULT_ROW_HEIGHT","DEFAULT_OVERSCAN","columnSizing","columnVisibility","calculatedColumnSum","useMemo","sum","col","WIDTH_BUFFER","tableWidth","spacerWidth","content","jsxs","Fragment","jsx","DataTableHeader","DataTableBody","contentContextValue","virtualizerContextValue","DataTableContentContext","DataTableVirtualizerContext","SLOT_ATTR","mergeClasses"],"mappings":"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"}
@@ -1,6 +1,6 @@
1
1
  import { jsx as t, jsxs as d, Fragment as p } from "react/jsx-runtime";
2
2
  import * as h from "react";
3
- import { mergeClasses as T, SLOT_ATTR as q, shorthands as r } from "@epilot/zenith-runtime/v1";
3
+ import { mergeClasses as T, SLOT_ATTR as q, shorthands as r } from "@epilot/zenith-runtime/v1/core.js";
4
4
  import { makeZenithStyles as f } from "../../styles/make-styles.js";
5
5
  import { boxModel as o } from "../../styles/host-reset.js";
6
6
  import { spacingGroup1 as x, grayA11 as u, leadingSm as y, textSm as w, grayA12 as v, fontWeightMedium as S, leadingBase as B, textBase as Z, spacingElement2 as b, errorA11 as A, spacingElement1 as E, spacingLayout2 as N } from "../../tokens/index.js";