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

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 (178) hide show
  1. package/README.md +1 -1
  2. package/dist/_virtual/_zenith-runtime-family_accordion.js +1 -1
  3. package/dist/_virtual/_zenith-runtime-family_alert-dialog.js +1 -1
  4. package/dist/_virtual/_zenith-runtime-family_avatar.js +1 -1
  5. package/dist/_virtual/_zenith-runtime-family_button.js +1 -1
  6. package/dist/_virtual/_zenith-runtime-family_checkbox.js +1 -1
  7. package/dist/_virtual/_zenith-runtime-family_csp-provider.js +1 -1
  8. package/dist/_virtual/_zenith-runtime-family_dialog.js +1 -1
  9. package/dist/_virtual/_zenith-runtime-family_direction-provider.js +1 -1
  10. package/dist/_virtual/_zenith-runtime-family_menu.js +1 -1
  11. package/dist/_virtual/_zenith-runtime-family_merge-props.js +1 -1
  12. package/dist/_virtual/_zenith-runtime-family_popover.js +1 -1
  13. package/dist/_virtual/_zenith-runtime-family_radio-group.js +1 -1
  14. package/dist/_virtual/_zenith-runtime-family_radio.js +1 -1
  15. package/dist/_virtual/_zenith-runtime-family_scroll-area.js +1 -1
  16. package/dist/_virtual/_zenith-runtime-family_select.js +1 -1
  17. package/dist/_virtual/_zenith-runtime-family_separator.js +1 -1
  18. package/dist/_virtual/_zenith-runtime-family_switch.js +1 -1
  19. package/dist/_virtual/_zenith-runtime-family_tabs.js +1 -1
  20. package/dist/_virtual/_zenith-runtime-family_toast.js +1 -1
  21. package/dist/_virtual/_zenith-runtime-family_toggle-group.js +1 -1
  22. package/dist/_virtual/_zenith-runtime-family_toggle.js +1 -1
  23. package/dist/_virtual/_zenith-runtime-family_tooltip.js +1 -1
  24. package/dist/_virtual/_zenith-runtime-family_use-render.js +1 -1
  25. package/dist/components/accordion/accordion.js +1 -1
  26. package/dist/components/accordion/accordion.js.map +1 -1
  27. package/dist/components/alert-dialog/alert-dialog.js +1 -1
  28. package/dist/components/alert-dialog/alert-dialog.js.map +1 -1
  29. package/dist/components/appearance-boundary/appearance-boundary.js +1 -1
  30. package/dist/components/appearance-boundary/appearance-boundary.js.map +1 -1
  31. package/dist/components/avatar/avatar-group.js +1 -1
  32. package/dist/components/avatar/avatar-group.js.map +1 -1
  33. package/dist/components/avatar/avatar.js +1 -1
  34. package/dist/components/avatar/avatar.js.map +1 -1
  35. package/dist/components/badge/badge.js +1 -1
  36. package/dist/components/badge/badge.js.map +1 -1
  37. package/dist/components/breadcrumb/breadcrumb.js +1 -1
  38. package/dist/components/breadcrumb/breadcrumb.js.map +1 -1
  39. package/dist/components/button/button.js +1 -1
  40. package/dist/components/button/button.js.map +1 -1
  41. package/dist/components/button-group/button-group.js +1 -1
  42. package/dist/components/button-group/button-group.js.map +1 -1
  43. package/dist/components/callout/callout.js +1 -1
  44. package/dist/components/callout/callout.js.map +1 -1
  45. package/dist/components/card/card.js +1 -1
  46. package/dist/components/card/card.js.map +1 -1
  47. package/dist/components/checkbox/checkbox.js +41 -39
  48. package/dist/components/checkbox/checkbox.js.map +1 -1
  49. package/dist/components/code-block/code-block.js +1 -1
  50. package/dist/components/code-block/code-block.js.map +1 -1
  51. package/dist/components/code-editor/code-editor.js +1 -1
  52. package/dist/components/code-editor/code-editor.js.map +1 -1
  53. package/dist/components/collapsible-sidebar/collapsible-sidebar.js +1 -1
  54. package/dist/components/collapsible-sidebar/collapsible-sidebar.js.map +1 -1
  55. package/dist/components/command/command.js +1 -1
  56. package/dist/components/command/command.js.map +1 -1
  57. package/dist/components/data-table/data-table-body.js +1 -1
  58. package/dist/components/data-table/data-table-body.js.map +1 -1
  59. package/dist/components/data-table/data-table-column-header.js +1 -1
  60. package/dist/components/data-table/data-table-column-header.js.map +1 -1
  61. package/dist/components/data-table/data-table-column-order.js +1 -1
  62. package/dist/components/data-table/data-table-column-order.js.map +1 -1
  63. package/dist/components/data-table/data-table-column-visibility.js +1 -1
  64. package/dist/components/data-table/data-table-column-visibility.js.map +1 -1
  65. package/dist/components/data-table/data-table-content.js +1 -1
  66. package/dist/components/data-table/data-table-content.js.map +1 -1
  67. package/dist/components/data-table/data-table-error.js +1 -1
  68. package/dist/components/data-table/data-table-error.js.map +1 -1
  69. package/dist/components/data-table/data-table-footer.js +1 -1
  70. package/dist/components/data-table/data-table-footer.js.map +1 -1
  71. package/dist/components/data-table/data-table-header-draggable.js +1 -1
  72. package/dist/components/data-table/data-table-header-draggable.js.map +1 -1
  73. package/dist/components/data-table/data-table-header.js +1 -1
  74. package/dist/components/data-table/data-table-header.js.map +1 -1
  75. package/dist/components/data-table/data-table-loading.js +1 -1
  76. package/dist/components/data-table/data-table-loading.js.map +1 -1
  77. package/dist/components/data-table/data-table-resize-handle.js +1 -1
  78. package/dist/components/data-table/data-table-resize-handle.js.map +1 -1
  79. package/dist/components/data-table/data-table-row.js +1 -1
  80. package/dist/components/data-table/data-table-row.js.map +1 -1
  81. package/dist/components/data-table/data-table-toolbar.js +1 -1
  82. package/dist/components/data-table/data-table-toolbar.js.map +1 -1
  83. package/dist/components/data-table/data-table.js +1 -1
  84. package/dist/components/data-table/data-table.js.map +1 -1
  85. package/dist/components/date-range-picker/date-range-picker.js +1 -1
  86. package/dist/components/date-range-picker/date-range-picker.js.map +1 -1
  87. package/dist/components/date-range-picker/range-calendar.js +1 -1
  88. package/dist/components/date-range-picker/range-calendar.js.map +1 -1
  89. package/dist/components/date-time-picker/calendar.js +1 -1
  90. package/dist/components/date-time-picker/calendar.js.map +1 -1
  91. package/dist/components/date-time-picker/date-time-picker-input.js +1 -1
  92. package/dist/components/date-time-picker/date-time-picker-input.js.map +1 -1
  93. package/dist/components/date-time-picker/date-time-picker-panel.js +1 -1
  94. package/dist/components/date-time-picker/date-time-picker-panel.js.map +1 -1
  95. package/dist/components/date-time-picker/date-time-picker.js +1 -1
  96. package/dist/components/date-time-picker/date-time-picker.js.map +1 -1
  97. package/dist/components/date-time-picker/time-picker.js +1 -1
  98. package/dist/components/date-time-picker/time-picker.js.map +1 -1
  99. package/dist/components/density-provider/density-provider.js +1 -1
  100. package/dist/components/dialog/dialog.js +1 -1
  101. package/dist/components/dialog/dialog.js.map +1 -1
  102. package/dist/components/drawer/drawer.js +1 -1
  103. package/dist/components/drawer/drawer.js.map +1 -1
  104. package/dist/components/dropdown-menu/dropdown-menu.js +1 -1
  105. package/dist/components/dropdown-menu/dropdown-menu.js.map +1 -1
  106. package/dist/components/field/field-combobox.js +1 -1
  107. package/dist/components/field/field-combobox.js.map +1 -1
  108. package/dist/components/field/field-select.js +1 -1
  109. package/dist/components/field/field-select.js.map +1 -1
  110. package/dist/components/field/field.js +1 -1
  111. package/dist/components/field/field.js.map +1 -1
  112. package/dist/components/label/label.js +1 -1
  113. package/dist/components/label/label.js.map +1 -1
  114. package/dist/components/list/list.js +1 -1
  115. package/dist/components/list/list.js.map +1 -1
  116. package/dist/components/option-card/option-card.js +1 -1
  117. package/dist/components/option-card/option-card.js.map +1 -1
  118. package/dist/components/pill/pill.js +1 -1
  119. package/dist/components/pill/pill.js.map +1 -1
  120. package/dist/components/popover/popover.js +1 -1
  121. package/dist/components/popover/popover.js.map +1 -1
  122. package/dist/components/radio/radio.js +15 -12
  123. package/dist/components/radio/radio.js.map +1 -1
  124. package/dist/components/scroll-area/scroll-area.js +1 -1
  125. package/dist/components/scroll-area/scroll-area.js.map +1 -1
  126. package/dist/components/scroll-area/scrollbar-styles.js +1 -1
  127. package/dist/components/scroll-area/scrollbar-styles.js.map +1 -1
  128. package/dist/components/scroll-overflow/scroll-overflow.js +1 -1
  129. package/dist/components/scroll-overflow/scroll-overflow.js.map +1 -1
  130. package/dist/components/segmented-control/segmented-control.js +1 -1
  131. package/dist/components/segmented-control/segmented-control.js.map +1 -1
  132. package/dist/components/select/select.js +178 -176
  133. package/dist/components/select/select.js.map +1 -1
  134. package/dist/components/separator/separator.js +1 -1
  135. package/dist/components/separator/separator.js.map +1 -1
  136. package/dist/components/skeleton/skeleton.js +1 -1
  137. package/dist/components/skeleton/skeleton.js.map +1 -1
  138. package/dist/components/slot/compose-as-child.js +1 -1
  139. package/dist/components/slot/compose-as-child.js.map +1 -1
  140. package/dist/components/spinner/spinner.js +1 -1
  141. package/dist/components/spinner/spinner.js.map +1 -1
  142. package/dist/components/surface/surface.js +1 -1
  143. package/dist/components/surface/surface.js.map +1 -1
  144. package/dist/components/switch/switch.js +59 -57
  145. package/dist/components/switch/switch.js.map +1 -1
  146. package/dist/components/table/table-pagination.js +1 -1
  147. package/dist/components/table/table-pagination.js.map +1 -1
  148. package/dist/components/table/table.js +1 -1
  149. package/dist/components/table/table.js.map +1 -1
  150. package/dist/components/tabs/tabs.js +1 -1
  151. package/dist/components/tabs/tabs.js.map +1 -1
  152. package/dist/components/text/text.js +1 -1
  153. package/dist/components/text/text.js.map +1 -1
  154. package/dist/components/toast/toast.js +1 -1
  155. package/dist/components/toast/toast.js.map +1 -1
  156. package/dist/components/toggle/toggle-group.js +1 -1
  157. package/dist/components/toggle/toggle-group.js.map +1 -1
  158. package/dist/components/toggle/toggle.js +1 -1
  159. package/dist/components/toggle/toggle.js.map +1 -1
  160. package/dist/components/tooltip/tooltip.js +1 -1
  161. package/dist/components/tooltip/tooltip.js.map +1 -1
  162. package/dist/index.js +1 -1
  163. package/dist/lib/clear-button.js +1 -1
  164. package/dist/lib/clear-button.js.map +1 -1
  165. package/dist/lib/hidden-input-box.js +26 -0
  166. package/dist/lib/hidden-input-box.js.map +1 -0
  167. package/dist/packages/tokens/dist/delivery/index.js +1 -1
  168. package/dist/packages/tokens/dist/delivery/index.js.map +1 -1
  169. package/dist/packages/tokens/dist/install.js +1 -1
  170. package/dist/packages/tokens/dist/install.js.map +1 -1
  171. package/dist/renderer/served.js +1 -1
  172. package/dist/renderer/served.js.map +1 -1
  173. package/dist/styles/host-reset.js.map +1 -1
  174. package/dist/styles/make-styles.js +1 -1
  175. package/dist/styles/make-styles.js.map +1 -1
  176. package/dist/styles/text-box.js.map +1 -1
  177. package/dist/tokens.json +1 -1
  178. package/package.json +3 -4
@@ -1 +1 @@
1
- {"version":3,"file":"data-table-resize-handle.js","sources":["../../../src/components/data-table/data-table-resize-handle.tsx"],"sourcesContent":["import * as React from \"react\"\nimport type { Header } 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\"\nimport { useDataTable, useDataTableContent } from \"./hooks\"\n\nconst useStyles = makeZenithStyles({\n handle: {\n ...boxModel,\n position: \"absolute\",\n right: 0,\n top: 0,\n height: \"100%\",\n width: \"2px\",\n cursor: \"col-resize\",\n userSelect: \"none\",\n touchAction: \"none\",\n backgroundColor: tokens.grayA4,\n transitionProperty: \"background-color, opacity\",\n transitionDuration: \"75ms\",\n \"&::before\": {\n position: \"absolute\",\n top: 0,\n bottom: 0,\n left: \"-3px\",\n right: \"-3px\",\n content: '\"\"',\n },\n \"&:hover\": {\n backgroundColor: tokens.accent8,\n },\n \"&:focus-visible\": {\n outlineWidth: \"2px\",\n outlineStyle: \"solid\",\n outlineOffset: \"1px\",\n outlineColor: tokens.accentA8,\n backgroundColor: tokens.accent8,\n },\n },\n resizing: {\n backgroundColor: tokens.accent9,\n \"&::before\": {\n position: \"fixed\",\n ...shorthands.inset(0),\n zIndex: 50,\n cursor: \"col-resize\",\n content: '\"\"',\n },\n },\n hidden: {\n opacity: 0,\n \"&:hover\": {\n opacity: 1,\n },\n \"&:focus-visible\": {\n opacity: 1,\n },\n },\n})\n\nexport type DataTableResizeHandleProps<TData = unknown, TValue = unknown> = {\n /** The TanStack Table header instance */\n header: Header<TData, TValue>\n /** Accessible label for the resize handle. Recommended for i18n and accessibility. Receives column.id as parameter. */\n ariaLabel?: string | ((columnId: string) => string)\n /** Whether the handle is visible. When false, handle is hidden but becomes visible on direct hover or focus. */\n isVisible?: boolean\n /** Step increment in pixels for keyboard resizing. Default: 10 */\n step?: number\n className?: string\n} & Omit<React.ComponentPropsWithoutRef<\"div\">, \"children\">\n\nfunction DataTableResizeHandleInner<TData = unknown, TValue = unknown>(\n {\n header,\n ariaLabel,\n isVisible = true,\n step = 10,\n className,\n onMouseDown,\n onTouchStart,\n onKeyDown,\n ...props\n }: DataTableResizeHandleProps<TData, TValue>,\n ref: React.ForwardedRef<HTMLDivElement>\n) {\n const styles = useStyles()\n const { table } = useDataTable()\n const column = header.column\n const contentContext = useDataTableContent()\n\n const resolvedAriaLabel = ariaLabel\n ? typeof ariaLabel === \"function\"\n ? ariaLabel(column.id)\n : ariaLabel\n : `Resize ${column.id} column`\n\n if (!column.getCanResize()) {\n return null\n }\n\n const isResizing = column.getIsResizing()\n\n // Wrap resize handlers to sync widths before resize starts\n // This prevents snap/jump by syncing visual widths to stored widths\n const handleMouseDown = (e: React.MouseEvent<HTMLDivElement>) => {\n onMouseDown?.(e)\n if (!e.defaultPrevented) {\n contentContext?.syncColumnWidthsBeforeResize()\n header.getResizeHandler()(e)\n }\n }\n\n const handleTouchStart = (e: React.TouchEvent<HTMLDivElement>) => {\n onTouchStart?.(e)\n if (!e.defaultPrevented) {\n contentContext?.syncColumnWidthsBeforeResize()\n header.getResizeHandler()(e)\n }\n }\n\n const handleKeyDown = (e: React.KeyboardEvent<HTMLDivElement>) => {\n onKeyDown?.(e)\n if (e.defaultPrevented) return\n\n if (e.key === \"ArrowLeft\" || e.key === \"ArrowRight\") {\n e.preventDefault()\n\n const currentSize = column.getSize()\n const minSize = column.columnDef.minSize ?? 20\n const maxSize = column.columnDef.maxSize ?? Number.MAX_SAFE_INTEGER\n const delta = e.key === \"ArrowRight\" ? step : -step\n const newSize = Math.min(maxSize, Math.max(minSize, currentSize + delta))\n\n table.setColumnSizing((prev) => ({\n ...prev,\n [column.id]: newSize,\n }))\n } else if (e.key === \"Home\") {\n e.preventDefault()\n\n const minSize = column.columnDef.minSize ?? 20\n table.setColumnSizing((prev) => ({\n ...prev,\n [column.id]: minSize,\n }))\n } else if (e.key === \"End\" && column.columnDef.maxSize !== undefined) {\n e.preventDefault()\n\n const maxSize = column.columnDef.maxSize\n table.setColumnSizing((prev) => ({\n ...prev,\n [column.id]: maxSize,\n }))\n }\n }\n\n const currentSize = Math.round(column.getSize())\n\n return (\n <div\n ref={ref}\n data-slot=\"data-table-resize-handle\"\n {...{ [SLOT_ATTR]: \"data-table-resize-handle\" }}\n data-fs-element=\"DataTable-ResizeHandle\"\n role=\"separator\"\n aria-orientation=\"vertical\"\n aria-label={resolvedAriaLabel}\n aria-valuenow={currentSize}\n aria-valuemin={column.columnDef.minSize ?? 20}\n aria-valuemax={column.columnDef.maxSize}\n tabIndex={0}\n onMouseDown={handleMouseDown}\n onTouchStart={handleTouchStart}\n onKeyDown={handleKeyDown}\n className={mergeClasses(\n styles.handle,\n isResizing && styles.resizing,\n !isVisible && styles.hidden,\n className\n )}\n {...props}\n />\n )\n}\n\n/**\n * Resize handle for column headers.\n * Subtly visible by default, more prominent on hover and during drag.\n * Supports keyboard navigation via Left/Right arrow keys.\n */\nexport const DataTableResizeHandle = React.forwardRef(\n DataTableResizeHandleInner\n) as <TData = unknown, TValue = unknown>(\n props: DataTableResizeHandleProps<TData, TValue> & {\n ref?: React.Ref<HTMLDivElement>\n }\n) => React.ReactElement | null\n"],"names":["useStyles","makeZenithStyles","boxModel","tokens.grayA4","tokens.accent8","tokens.accentA8","tokens.accent9","shorthands","DataTableResizeHandleInner","header","ariaLabel","isVisible","step","className","onMouseDown","onTouchStart","onKeyDown","props","ref","styles","table","useDataTable","column","contentContext","useDataTableContent","resolvedAriaLabel","isResizing","handleMouseDown","handleTouchStart","handleKeyDown","currentSize","minSize","maxSize","delta","newSize","prev","jsx","SLOT_ATTR","mergeClasses","DataTableResizeHandle","React"],"mappings":"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"}
1
+ {"version":3,"file":"data-table-resize-handle.js","sources":["../../../src/components/data-table/data-table-resize-handle.tsx"],"sourcesContent":["import * as React from \"react\"\nimport type { Header } 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\"\nimport { useDataTable, useDataTableContent } from \"./hooks\"\n\nconst useStyles = makeZenithStyles({\n handle: {\n ...boxModel,\n position: \"absolute\",\n right: 0,\n top: 0,\n height: \"100%\",\n width: \"2px\",\n cursor: \"col-resize\",\n userSelect: \"none\",\n touchAction: \"none\",\n backgroundColor: tokens.grayA4,\n transitionProperty: \"background-color, opacity\",\n transitionDuration: \"75ms\",\n \"&::before\": {\n position: \"absolute\",\n top: 0,\n bottom: 0,\n left: \"-3px\",\n right: \"-3px\",\n content: '\"\"',\n },\n \"&:hover\": {\n backgroundColor: tokens.accent8,\n },\n \"&:focus-visible\": {\n outlineWidth: \"2px\",\n outlineStyle: \"solid\",\n outlineOffset: \"1px\",\n outlineColor: tokens.accentA8,\n backgroundColor: tokens.accent8,\n },\n },\n resizing: {\n backgroundColor: tokens.accent9,\n \"&::before\": {\n position: \"fixed\",\n ...shorthands.inset(0),\n zIndex: 50,\n cursor: \"col-resize\",\n content: '\"\"',\n },\n },\n hidden: {\n opacity: 0,\n \"&:hover\": {\n opacity: 1,\n },\n \"&:focus-visible\": {\n opacity: 1,\n },\n },\n})\n\nexport type DataTableResizeHandleProps<TData = unknown, TValue = unknown> = {\n /** The TanStack Table header instance */\n header: Header<TData, TValue>\n /** Accessible label for the resize handle. Recommended for i18n and accessibility. Receives column.id as parameter. */\n ariaLabel?: string | ((columnId: string) => string)\n /** Whether the handle is visible. When false, handle is hidden but becomes visible on direct hover or focus. */\n isVisible?: boolean\n /** Step increment in pixels for keyboard resizing. Default: 10 */\n step?: number\n className?: string\n} & Omit<React.ComponentPropsWithoutRef<\"div\">, \"children\">\n\nfunction DataTableResizeHandleInner<TData = unknown, TValue = unknown>(\n {\n header,\n ariaLabel,\n isVisible = true,\n step = 10,\n className,\n onMouseDown,\n onTouchStart,\n onKeyDown,\n ...props\n }: DataTableResizeHandleProps<TData, TValue>,\n ref: React.ForwardedRef<HTMLDivElement>\n) {\n const styles = useStyles()\n const { table } = useDataTable()\n const column = header.column\n const contentContext = useDataTableContent()\n\n const resolvedAriaLabel = ariaLabel\n ? typeof ariaLabel === \"function\"\n ? ariaLabel(column.id)\n : ariaLabel\n : `Resize ${column.id} column`\n\n if (!column.getCanResize()) {\n return null\n }\n\n const isResizing = column.getIsResizing()\n\n // Wrap resize handlers to sync widths before resize starts\n // This prevents snap/jump by syncing visual widths to stored widths\n const handleMouseDown = (e: React.MouseEvent<HTMLDivElement>) => {\n onMouseDown?.(e)\n if (!e.defaultPrevented) {\n contentContext?.syncColumnWidthsBeforeResize()\n header.getResizeHandler()(e)\n }\n }\n\n const handleTouchStart = (e: React.TouchEvent<HTMLDivElement>) => {\n onTouchStart?.(e)\n if (!e.defaultPrevented) {\n contentContext?.syncColumnWidthsBeforeResize()\n header.getResizeHandler()(e)\n }\n }\n\n const handleKeyDown = (e: React.KeyboardEvent<HTMLDivElement>) => {\n onKeyDown?.(e)\n if (e.defaultPrevented) return\n\n if (e.key === \"ArrowLeft\" || e.key === \"ArrowRight\") {\n e.preventDefault()\n\n const currentSize = column.getSize()\n const minSize = column.columnDef.minSize ?? 20\n const maxSize = column.columnDef.maxSize ?? Number.MAX_SAFE_INTEGER\n const delta = e.key === \"ArrowRight\" ? step : -step\n const newSize = Math.min(maxSize, Math.max(minSize, currentSize + delta))\n\n table.setColumnSizing((prev) => ({\n ...prev,\n [column.id]: newSize,\n }))\n } else if (e.key === \"Home\") {\n e.preventDefault()\n\n const minSize = column.columnDef.minSize ?? 20\n table.setColumnSizing((prev) => ({\n ...prev,\n [column.id]: minSize,\n }))\n } else if (e.key === \"End\" && column.columnDef.maxSize !== undefined) {\n e.preventDefault()\n\n const maxSize = column.columnDef.maxSize\n table.setColumnSizing((prev) => ({\n ...prev,\n [column.id]: maxSize,\n }))\n }\n }\n\n const currentSize = Math.round(column.getSize())\n\n return (\n <div\n ref={ref}\n data-slot=\"data-table-resize-handle\"\n {...{ [SLOT_ATTR]: \"data-table-resize-handle\" }}\n data-fs-element=\"DataTable-ResizeHandle\"\n role=\"separator\"\n aria-orientation=\"vertical\"\n aria-label={resolvedAriaLabel}\n aria-valuenow={currentSize}\n aria-valuemin={column.columnDef.minSize ?? 20}\n aria-valuemax={column.columnDef.maxSize}\n tabIndex={0}\n onMouseDown={handleMouseDown}\n onTouchStart={handleTouchStart}\n onKeyDown={handleKeyDown}\n className={mergeClasses(\n styles.handle,\n isResizing && styles.resizing,\n !isVisible && styles.hidden,\n className\n )}\n {...props}\n />\n )\n}\n\n/**\n * Resize handle for column headers.\n * Subtly visible by default, more prominent on hover and during drag.\n * Supports keyboard navigation via Left/Right arrow keys.\n */\nexport const DataTableResizeHandle = React.forwardRef(\n DataTableResizeHandleInner\n) as <TData = unknown, TValue = unknown>(\n props: DataTableResizeHandleProps<TData, TValue> & {\n ref?: React.Ref<HTMLDivElement>\n }\n) => React.ReactElement | null\n"],"names":["useStyles","makeZenithStyles","boxModel","tokens.grayA4","tokens.accent8","tokens.accentA8","tokens.accent9","shorthands","DataTableResizeHandleInner","header","ariaLabel","isVisible","step","className","onMouseDown","onTouchStart","onKeyDown","props","ref","styles","table","useDataTable","column","contentContext","useDataTableContent","resolvedAriaLabel","isResizing","handleMouseDown","handleTouchStart","handleKeyDown","currentSize","minSize","maxSize","delta","newSize","prev","jsx","SLOT_ATTR","mergeClasses","DataTableResizeHandle","React"],"mappings":"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"}
@@ -1,7 +1,7 @@
1
1
  import { jsxs as A, jsx as p } from "react/jsx-runtime";
2
2
  import * as B from "react";
3
3
  import { flexRender as N } from "../../vendor/.bun/@tanstack_react-table@8.21.3_6f4b9a1cfb20c0ae/vendor/@tanstack/react-table/build/lib/index.js";
4
- import { mergeClasses as w, SLOT_ATTR as u, shorthands as g } from "@epilot/zenith-runtime/v1/core.js";
4
+ import { mergeClasses as w, SLOT_ATTR as u, shorthands as g } from "@epilot/zenith-runtime/v1";
5
5
  import { makeZenithStyles as $ } from "../../styles/make-styles.js";
6
6
  import { boxModel as h } from "../../styles/host-reset.js";
7
7
  import { grayA6 as k, accentA3 as x } from "../../tokens/index.js";
@@ -1 +1 @@
1
- {"version":3,"file":"data-table-row.js","sources":["../../../src/components/data-table/data-table-row.tsx"],"sourcesContent":["import * as React from \"react\"\nimport type { CSSProperties, MouseEvent, KeyboardEvent } from \"react\"\nimport type { Row, Cell } from \"@tanstack/react-table\"\nimport { flexRender } 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\"\nimport { TableRow, TableCell } from \"../table/table\"\nimport { useDataTable, useDataTableContent } from \"./hooks\"\nimport type { DataTableCellOverflow } from \"./data-table-context\"\nimport {\n getPinnedColumnOffset,\n isLastLeftPinnedColumn,\n isFirstRightPinnedColumn,\n} from \"./data-table-pinning-utils\"\n\ntype CellAlign = \"left\" | \"center\" | \"right\"\n\n/**\n * Gets the cell overflow mode, checking column meta first, then falling back to table default.\n */\nfunction getCellOverflow<TData>(\n cell: Cell<TData, unknown>,\n tableDefault: DataTableCellOverflow\n): DataTableCellOverflow {\n const columnMeta = cell.column.columnDef.meta as\n { cellOverflow?: DataTableCellOverflow } | undefined\n return columnMeta?.cellOverflow ?? tableDefault\n}\n\n/**\n * Gets the cell alignment from column meta.\n */\nfunction getCellAlign<TData>(\n cell: Cell<TData, unknown>\n): CellAlign | undefined {\n const columnMeta = cell.column.columnDef.meta as\n { align?: CellAlign } | undefined\n return columnMeta?.align\n}\n\n// Interactive element selectors that should NOT trigger row click\nconst INTERACTIVE_SELECTORS = [\n \"button\",\n \"a\",\n \"input\",\n \"select\",\n \"textarea\",\n '[role=\"button\"]',\n '[role=\"checkbox\"]',\n '[role=\"link\"]',\n '[role=\"menuitem\"]',\n '[role=\"menuitemcheckbox\"]',\n '[role=\"menuitemradio\"]',\n '[role=\"option\"]',\n '[role=\"radio\"]',\n '[role=\"slider\"]',\n '[role=\"spinbutton\"]',\n '[role=\"switch\"]',\n '[role=\"tab\"]',\n \"[data-radix-collection-item]\",\n `[${SLOT_ATTR}=\"checkbox\"]`,\n]\n\nconst useStyles = makeZenithStyles({\n rowClickable: {\n cursor: \"pointer\",\n \":hover\": {\n backgroundColor: tokens.accentA3,\n },\n },\n rowSelected: {\n backgroundColor: tokens.accentA3,\n },\n // The rule is painted on the cells: WebKit draws no box-shadow on a <tr>,\n // and row borders don't paint under DataTableContent's\n // `border-collapse: separate`. A background image also stays clear of the\n // pinned cells' own box-shadow and adds no height.\n rowBorder: {\n \"& > td\": {\n backgroundImage: `linear-gradient(${tokens.grayA6}, ${tokens.grayA6})`,\n backgroundSize: \"100% 1px\",\n backgroundPosition: \"bottom\",\n backgroundRepeat: \"no-repeat\",\n },\n \"&:last-child > td\": {\n backgroundImage: \"none\",\n },\n },\n cellTruncate: {\n ...boxModel,\n maxWidth: 0,\n ...shorthands.overflow(\"hidden\"),\n textOverflow: \"ellipsis\",\n whiteSpace: \"nowrap\",\n },\n cellWrap: {\n ...boxModel,\n maxWidth: 0,\n ...shorthands.overflow(\"hidden\"),\n overflowWrap: \"break-word\",\n wordBreak: \"break-word\",\n },\n shadowLeft: {\n boxShadow: \"2px 0 5px -2px rgba(0,0,0,0.1)\",\n },\n shadowRight: {\n boxShadow: \"-2px 0 5px -2px rgba(0,0,0,0.1)\",\n },\n})\n\nexport type DataTableRowProps<TData> = {\n /** The row instance from TanStack Table */\n row: Row<TData>\n /** Optional style (used for virtualized row heights) */\n style?: CSSProperties\n /** Additional class name */\n className?: string\n}\n\n/**\n * Renders a single table row with its cells.\n * Supports clickable rows when onRowClick is provided via DataTable context.\n */\nfunction DataTableRowInner<TData>(\n { row, style, className }: DataTableRowProps<TData>,\n ref: React.ForwardedRef<HTMLTableRowElement>\n) {\n const styles = useStyles()\n const {\n table,\n onRowClick,\n clickableRowClassName,\n selectedRowClassName,\n cellOverflow: tableCellOverflow = \"truncate\",\n showRowBorders,\n disableColumnResizing,\n } = useDataTable<TData>()\n const contentContext = useDataTableContent()\n const spacerWidth = contentContext?.spacerWidth ?? 0\n\n const enableColumnResizing = !disableColumnResizing\n const isClickable = Boolean(onRowClick)\n\n const handleClick = (event: MouseEvent<HTMLTableRowElement>) => {\n if (!onRowClick) return\n\n // Check if click originated from an interactive element\n const target = event.target as HTMLElement\n const isInteractiveElement = INTERACTIVE_SELECTORS.some((selector) =>\n target.closest(selector)\n )\n\n if (isInteractiveElement) {\n return // Don't trigger row click for interactive elements\n }\n\n onRowClick(row, event)\n }\n\n const handleKeyDown = (event: KeyboardEvent<HTMLTableRowElement>) => {\n if (!onRowClick) return\n\n if (event.key === \"Enter\" || event.key === \" \") {\n // Check if key event originated from an interactive element\n const target = event.target as HTMLElement\n const isInteractiveElement = INTERACTIVE_SELECTORS.some((selector) =>\n target.closest(selector)\n )\n\n if (isInteractiveElement) {\n return // Let the interactive element handle the event\n }\n\n event.preventDefault()\n onRowClick(row, event as unknown as MouseEvent<HTMLTableRowElement>)\n }\n }\n\n return (\n <TableRow\n ref={ref}\n data-slot=\"data-table-row\"\n {...{ [SLOT_ATTR]: \"data-table-row\" }}\n data-fs-element=\"DataTable-Row\"\n data-state={row.getIsSelected() ? \"selected\" : undefined}\n data-clickable={isClickable ? \"true\" : undefined}\n style={style}\n className={mergeClasses(\n showRowBorders !== false && styles.rowBorder,\n isClickable && (clickableRowClassName ?? styles.rowClickable),\n row.getIsSelected() && (selectedRowClassName ?? styles.rowSelected),\n className\n )}\n onClick={isClickable ? handleClick : undefined}\n tabIndex={isClickable ? 0 : undefined}\n onKeyDown={isClickable ? handleKeyDown : undefined}\n >\n {row.getVisibleCells().map((cell) => {\n const overflow = getCellOverflow(cell, tableCellOverflow)\n const align = getCellAlign(cell)\n const isPinned = cell.column.getIsPinned()\n const pinnedOffset = isPinned\n ? getPinnedColumnOffset(cell.column, table)\n : undefined\n const isLastLeft = isLastLeftPinnedColumn(cell.column, table)\n const isFirstRight = isFirstRightPinnedColumn(cell.column, table)\n\n return (\n <TableCell\n key={cell.id}\n data-slot=\"data-table-cell\"\n {...{ [SLOT_ATTR]: \"data-table-cell\" }}\n data-fs-element=\"DataTable-Cell\"\n data-pinned={isPinned || undefined}\n align={align}\n style={{\n width:\n enableColumnResizing || isPinned\n ? cell.column.getSize()\n : undefined,\n left: isPinned === \"left\" ? `${pinnedOffset}px` : undefined,\n right: isPinned === \"right\" ? `${pinnedOffset}px` : undefined,\n }}\n className={mergeClasses(\n overflow === \"truncate\" && styles.cellTruncate,\n overflow === \"wrap\" && styles.cellWrap,\n isLastLeft && styles.shadowLeft,\n isFirstRight && styles.shadowRight\n )}\n >\n {flexRender(cell.column.columnDef.cell, cell.getContext())}\n </TableCell>\n )\n })}\n {/* Spacer cell - matches header spacer column */}\n {spacerWidth > 0 && (\n <TableCell\n data-spacer\n aria-hidden=\"true\"\n style={{ width: spacerWidth, padding: 0 }}\n />\n )}\n </TableRow>\n )\n}\n\nexport const DataTableRow = React.forwardRef(DataTableRowInner) as <TData>(\n props: DataTableRowProps<TData> & {\n ref?: React.Ref<HTMLTableRowElement>\n }\n) => React.ReactElement | null\n"],"names":["getCellOverflow","cell","tableDefault","columnMeta","getCellAlign","INTERACTIVE_SELECTORS","SLOT_ATTR","useStyles","makeZenithStyles","tokens.accentA3","tokens.grayA6","boxModel","shorthands","DataTableRowInner","row","style","className","ref","styles","table","onRowClick","clickableRowClassName","selectedRowClassName","tableCellOverflow","showRowBorders","disableColumnResizing","useDataTable","contentContext","useDataTableContent","spacerWidth","enableColumnResizing","isClickable","handleClick","event","target","selector","handleKeyDown","jsxs","TableRow","mergeClasses","overflow","align","isPinned","pinnedOffset","getPinnedColumnOffset","isLastLeft","isLastLeftPinnedColumn","isFirstRight","isFirstRightPinnedColumn","jsx","TableCell","DataTableRow","React"],"mappings":";;;;;;;;;;;AAwBA,SAASA,EACPC,GACAC,GACuB;AACvB,QAAMC,IAAaF,EAAK,OAAO,UAAU;AAEzC,UAAOE,KAAA,gBAAAA,EAAY,iBAAgBD;AACrC;AAKA,SAASE,EACPH,GACuB;AACvB,QAAME,IAAaF,EAAK,OAAO,UAAU;AAEzC,SAAOE,KAAA,gBAAAA,EAAY;AACrB;AAGA,MAAME,IAAwB;AAAA,EAC5B;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,IAAIC,CAAS;AACf,GAEMC,IAAYC,EAAiB;AAAA,EACjC,cAAc;AAAA,IACZ,QAAQ;AAAA,IACR,UAAU;AAAA,MACR,iBAAiBC;AAAAA,IAAO;AAAA,EAC1B;AAAA,EAEF,aAAa;AAAA,IACX,iBAAiBA;AAAAA,EAAO;AAAA;AAAA;AAAA;AAAA;AAAA,EAM1B,WAAW;AAAA,IACT,UAAU;AAAA,MACR,iBAAiB,mBAAmBC,CAAa,KAAKA,CAAa;AAAA,MACnE,gBAAgB;AAAA,MAChB,oBAAoB;AAAA,MACpB,kBAAkB;AAAA,IAAA;AAAA,IAEpB,qBAAqB;AAAA,MACnB,iBAAiB;AAAA,IAAA;AAAA,EACnB;AAAA,EAEF,cAAc;AAAA,IACZ,GAAGC;AAAA,IACH,UAAU;AAAA,IACV,GAAGC,EAAW,SAAS,QAAQ;AAAA,IAC/B,cAAc;AAAA,IACd,YAAY;AAAA,EAAA;AAAA,EAEd,UAAU;AAAA,IACR,GAAGD;AAAA,IACH,UAAU;AAAA,IACV,GAAGC,EAAW,SAAS,QAAQ;AAAA,IAC/B,cAAc;AAAA,IACd,WAAW;AAAA,EAAA;AAAA,EAEb,YAAY;AAAA,IACV,WAAW;AAAA,EAAA;AAAA,EAEb,aAAa;AAAA,IACX,WAAW;AAAA,EAAA;AAEf,CAAC;AAeD,SAASC,EACP,EAAE,KAAAC,GAAK,OAAAC,GAAO,WAAAC,EAAA,GACdC,GACA;AACA,QAAMC,IAASX,EAAA,GACT;AAAA,IACJ,OAAAY;AAAA,IACA,YAAAC;AAAA,IACA,uBAAAC;AAAA,IACA,sBAAAC;AAAA,IACA,cAAcC,IAAoB;AAAA,IAClC,gBAAAC;AAAA,IACA,uBAAAC;AAAA,EAAA,IACEC,EAAA,GACEC,IAAiBC,EAAA,GACjBC,KAAcF,KAAA,gBAAAA,EAAgB,gBAAe,GAE7CG,IAAuB,CAACL,GACxBM,IAAc,EAAQX,GAEtBY,IAAc,CAACC,MAA2C;AAC9D,QAAI,CAACb,EAAY;AAGjB,UAAMc,IAASD,EAAM;AAKrB,IAJ6B5B,EAAsB;AAAA,MAAK,CAAC8B,MACvDD,EAAO,QAAQC,CAAQ;AAAA,IAAA,KAOzBf,EAAWN,GAAKmB,CAAK;AAAA,EACvB,GAEMG,IAAgB,CAACH,MAA8C;AACnE,QAAKb,MAEDa,EAAM,QAAQ,WAAWA,EAAM,QAAQ,MAAK;AAE9C,YAAMC,IAASD,EAAM;AAKrB,UAJ6B5B,EAAsB;AAAA,QAAK,CAAC8B,MACvDD,EAAO,QAAQC,CAAQ;AAAA,MAAA;AAIvB;AAGF,MAAAF,EAAM,eAAA,GACNb,EAAWN,GAAKmB,CAAmD;AAAA,IACrE;AAAA,EACF;AAEA,SACE,gBAAAI;AAAA,IAACC;AAAA,IAAA;AAAA,MACC,KAAArB;AAAA,MACA,aAAU;AAAA,MACJ,CAACX,CAAS,GAAG;AAAA,MACnB,mBAAgB;AAAA,MAChB,cAAYQ,EAAI,cAAA,IAAkB,aAAa;AAAA,MAC/C,kBAAgBiB,IAAc,SAAS;AAAA,MACvC,OAAAhB;AAAA,MACA,WAAWwB;AAAA,QACTf,MAAmB,MAASN,EAAO;AAAA,QACnCa,MAAgBV,KAAyBH,EAAO;AAAA,QAChDJ,EAAI,cAAA,MAAoBQ,KAAwBJ,EAAO;AAAA,QACvDF;AAAA,MAAA;AAAA,MAEF,SAASe,IAAcC,IAAc;AAAA,MACrC,UAAUD,IAAc,IAAI;AAAA,MAC5B,WAAWA,IAAcK,IAAgB;AAAA,MAExC,UAAA;AAAA,QAAAtB,EAAI,gBAAA,EAAkB,IAAI,CAACb,MAAS;AACnC,gBAAMuC,IAAWxC,EAAgBC,GAAMsB,CAAiB,GAClDkB,IAAQrC,EAAaH,CAAI,GACzByC,IAAWzC,EAAK,OAAO,YAAA,GACvB0C,IAAeD,IACjBE,EAAsB3C,EAAK,QAAQkB,CAAK,IACxC,QACE0B,IAAaC,EAAuB7C,EAAK,QAAQkB,CAAK,GACtD4B,IAAeC,EAAyB/C,EAAK,QAAQkB,CAAK;AAEhE,iBACE,gBAAA8B;AAAA,YAACC;AAAA,YAAA;AAAA,cAEC,aAAU;AAAA,cACJ,CAAC5C,CAAS,GAAG;AAAA,cACnB,mBAAgB;AAAA,cAChB,eAAaoC,KAAY;AAAA,cACzB,OAAAD;AAAA,cACA,OAAO;AAAA,gBACL,OACEX,KAAwBY,IACpBzC,EAAK,OAAO,YACZ;AAAA,gBACN,MAAMyC,MAAa,SAAS,GAAGC,CAAY,OAAO;AAAA,gBAClD,OAAOD,MAAa,UAAU,GAAGC,CAAY,OAAO;AAAA,cAAA;AAAA,cAEtD,WAAWJ;AAAA,gBACTC,MAAa,cAActB,EAAO;AAAA,gBAClCsB,MAAa,UAAUtB,EAAO;AAAA,gBAC9B2B,KAAc3B,EAAO;AAAA,gBACrB6B,KAAgB7B,EAAO;AAAA,cAAA;AAAA,cAGxB,YAAWjB,EAAK,OAAO,UAAU,MAAMA,EAAK,YAAY;AAAA,YAAA;AAAA,YArBpDA,EAAK;AAAA,UAAA;AAAA,QAwBhB,CAAC;AAAA,QAEA4B,IAAc,KACb,gBAAAoB;AAAA,UAACC;AAAA,UAAA;AAAA,YACC,eAAW;AAAA,YACX,eAAY;AAAA,YACZ,OAAO,EAAE,OAAOrB,GAAa,SAAS,EAAA;AAAA,UAAE;AAAA,QAAA;AAAA,MAC1C;AAAA,IAAA;AAAA,EAAA;AAIR;AAEO,MAAMsB,KAAeC,EAAM,WAAWvC,CAAiB;"}
1
+ {"version":3,"file":"data-table-row.js","sources":["../../../src/components/data-table/data-table-row.tsx"],"sourcesContent":["import * as React from \"react\"\nimport type { CSSProperties, MouseEvent, KeyboardEvent } from \"react\"\nimport type { Row, Cell } from \"@tanstack/react-table\"\nimport { flexRender } 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\"\nimport { TableRow, TableCell } from \"../table/table\"\nimport { useDataTable, useDataTableContent } from \"./hooks\"\nimport type { DataTableCellOverflow } from \"./data-table-context\"\nimport {\n getPinnedColumnOffset,\n isLastLeftPinnedColumn,\n isFirstRightPinnedColumn,\n} from \"./data-table-pinning-utils\"\n\ntype CellAlign = \"left\" | \"center\" | \"right\"\n\n/**\n * Gets the cell overflow mode, checking column meta first, then falling back to table default.\n */\nfunction getCellOverflow<TData>(\n cell: Cell<TData, unknown>,\n tableDefault: DataTableCellOverflow\n): DataTableCellOverflow {\n const columnMeta = cell.column.columnDef.meta as\n { cellOverflow?: DataTableCellOverflow } | undefined\n return columnMeta?.cellOverflow ?? tableDefault\n}\n\n/**\n * Gets the cell alignment from column meta.\n */\nfunction getCellAlign<TData>(\n cell: Cell<TData, unknown>\n): CellAlign | undefined {\n const columnMeta = cell.column.columnDef.meta as\n { align?: CellAlign } | undefined\n return columnMeta?.align\n}\n\n// Interactive element selectors that should NOT trigger row click\nconst INTERACTIVE_SELECTORS = [\n \"button\",\n \"a\",\n \"input\",\n \"select\",\n \"textarea\",\n '[role=\"button\"]',\n '[role=\"checkbox\"]',\n '[role=\"link\"]',\n '[role=\"menuitem\"]',\n '[role=\"menuitemcheckbox\"]',\n '[role=\"menuitemradio\"]',\n '[role=\"option\"]',\n '[role=\"radio\"]',\n '[role=\"slider\"]',\n '[role=\"spinbutton\"]',\n '[role=\"switch\"]',\n '[role=\"tab\"]',\n \"[data-radix-collection-item]\",\n `[${SLOT_ATTR}=\"checkbox\"]`,\n]\n\nconst useStyles = makeZenithStyles({\n rowClickable: {\n cursor: \"pointer\",\n \":hover\": {\n backgroundColor: tokens.accentA3,\n },\n },\n rowSelected: {\n backgroundColor: tokens.accentA3,\n },\n // The rule is painted on the cells: WebKit draws no box-shadow on a <tr>,\n // and row borders don't paint under DataTableContent's\n // `border-collapse: separate`. A background image also stays clear of the\n // pinned cells' own box-shadow and adds no height.\n rowBorder: {\n \"& > td\": {\n backgroundImage: `linear-gradient(${tokens.grayA6}, ${tokens.grayA6})`,\n backgroundSize: \"100% 1px\",\n backgroundPosition: \"bottom\",\n backgroundRepeat: \"no-repeat\",\n },\n \"&:last-child > td\": {\n backgroundImage: \"none\",\n },\n },\n cellTruncate: {\n ...boxModel,\n maxWidth: 0,\n ...shorthands.overflow(\"hidden\"),\n textOverflow: \"ellipsis\",\n whiteSpace: \"nowrap\",\n },\n cellWrap: {\n ...boxModel,\n maxWidth: 0,\n ...shorthands.overflow(\"hidden\"),\n overflowWrap: \"break-word\",\n wordBreak: \"break-word\",\n },\n shadowLeft: {\n boxShadow: \"2px 0 5px -2px rgba(0,0,0,0.1)\",\n },\n shadowRight: {\n boxShadow: \"-2px 0 5px -2px rgba(0,0,0,0.1)\",\n },\n})\n\nexport type DataTableRowProps<TData> = {\n /** The row instance from TanStack Table */\n row: Row<TData>\n /** Optional style (used for virtualized row heights) */\n style?: CSSProperties\n /** Additional class name */\n className?: string\n}\n\n/**\n * Renders a single table row with its cells.\n * Supports clickable rows when onRowClick is provided via DataTable context.\n */\nfunction DataTableRowInner<TData>(\n { row, style, className }: DataTableRowProps<TData>,\n ref: React.ForwardedRef<HTMLTableRowElement>\n) {\n const styles = useStyles()\n const {\n table,\n onRowClick,\n clickableRowClassName,\n selectedRowClassName,\n cellOverflow: tableCellOverflow = \"truncate\",\n showRowBorders,\n disableColumnResizing,\n } = useDataTable<TData>()\n const contentContext = useDataTableContent()\n const spacerWidth = contentContext?.spacerWidth ?? 0\n\n const enableColumnResizing = !disableColumnResizing\n const isClickable = Boolean(onRowClick)\n\n const handleClick = (event: MouseEvent<HTMLTableRowElement>) => {\n if (!onRowClick) return\n\n // Check if click originated from an interactive element\n const target = event.target as HTMLElement\n const isInteractiveElement = INTERACTIVE_SELECTORS.some((selector) =>\n target.closest(selector)\n )\n\n if (isInteractiveElement) {\n return // Don't trigger row click for interactive elements\n }\n\n onRowClick(row, event)\n }\n\n const handleKeyDown = (event: KeyboardEvent<HTMLTableRowElement>) => {\n if (!onRowClick) return\n\n if (event.key === \"Enter\" || event.key === \" \") {\n // Check if key event originated from an interactive element\n const target = event.target as HTMLElement\n const isInteractiveElement = INTERACTIVE_SELECTORS.some((selector) =>\n target.closest(selector)\n )\n\n if (isInteractiveElement) {\n return // Let the interactive element handle the event\n }\n\n event.preventDefault()\n onRowClick(row, event as unknown as MouseEvent<HTMLTableRowElement>)\n }\n }\n\n return (\n <TableRow\n ref={ref}\n data-slot=\"data-table-row\"\n {...{ [SLOT_ATTR]: \"data-table-row\" }}\n data-fs-element=\"DataTable-Row\"\n data-state={row.getIsSelected() ? \"selected\" : undefined}\n data-clickable={isClickable ? \"true\" : undefined}\n style={style}\n className={mergeClasses(\n showRowBorders !== false && styles.rowBorder,\n isClickable && (clickableRowClassName ?? styles.rowClickable),\n row.getIsSelected() && (selectedRowClassName ?? styles.rowSelected),\n className\n )}\n onClick={isClickable ? handleClick : undefined}\n tabIndex={isClickable ? 0 : undefined}\n onKeyDown={isClickable ? handleKeyDown : undefined}\n >\n {row.getVisibleCells().map((cell) => {\n const overflow = getCellOverflow(cell, tableCellOverflow)\n const align = getCellAlign(cell)\n const isPinned = cell.column.getIsPinned()\n const pinnedOffset = isPinned\n ? getPinnedColumnOffset(cell.column, table)\n : undefined\n const isLastLeft = isLastLeftPinnedColumn(cell.column, table)\n const isFirstRight = isFirstRightPinnedColumn(cell.column, table)\n\n return (\n <TableCell\n key={cell.id}\n data-slot=\"data-table-cell\"\n {...{ [SLOT_ATTR]: \"data-table-cell\" }}\n data-fs-element=\"DataTable-Cell\"\n data-pinned={isPinned || undefined}\n align={align}\n style={{\n width:\n enableColumnResizing || isPinned\n ? cell.column.getSize()\n : undefined,\n left: isPinned === \"left\" ? `${pinnedOffset}px` : undefined,\n right: isPinned === \"right\" ? `${pinnedOffset}px` : undefined,\n }}\n className={mergeClasses(\n overflow === \"truncate\" && styles.cellTruncate,\n overflow === \"wrap\" && styles.cellWrap,\n isLastLeft && styles.shadowLeft,\n isFirstRight && styles.shadowRight\n )}\n >\n {flexRender(cell.column.columnDef.cell, cell.getContext())}\n </TableCell>\n )\n })}\n {/* Spacer cell - matches header spacer column */}\n {spacerWidth > 0 && (\n <TableCell\n data-spacer\n aria-hidden=\"true\"\n style={{ width: spacerWidth, padding: 0 }}\n />\n )}\n </TableRow>\n )\n}\n\nexport const DataTableRow = React.forwardRef(DataTableRowInner) as <TData>(\n props: DataTableRowProps<TData> & {\n ref?: React.Ref<HTMLTableRowElement>\n }\n) => React.ReactElement | null\n"],"names":["getCellOverflow","cell","tableDefault","columnMeta","getCellAlign","INTERACTIVE_SELECTORS","SLOT_ATTR","useStyles","makeZenithStyles","tokens.accentA3","tokens.grayA6","boxModel","shorthands","DataTableRowInner","row","style","className","ref","styles","table","onRowClick","clickableRowClassName","selectedRowClassName","tableCellOverflow","showRowBorders","disableColumnResizing","useDataTable","contentContext","useDataTableContent","spacerWidth","enableColumnResizing","isClickable","handleClick","event","target","selector","handleKeyDown","jsxs","TableRow","mergeClasses","overflow","align","isPinned","pinnedOffset","getPinnedColumnOffset","isLastLeft","isLastLeftPinnedColumn","isFirstRight","isFirstRightPinnedColumn","jsx","TableCell","DataTableRow","React"],"mappings":";;;;;;;;;;;AAwBA,SAASA,EACPC,GACAC,GACuB;AACvB,QAAMC,IAAaF,EAAK,OAAO,UAAU;AAEzC,UAAOE,KAAA,gBAAAA,EAAY,iBAAgBD;AACrC;AAKA,SAASE,EACPH,GACuB;AACvB,QAAME,IAAaF,EAAK,OAAO,UAAU;AAEzC,SAAOE,KAAA,gBAAAA,EAAY;AACrB;AAGA,MAAME,IAAwB;AAAA,EAC5B;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,IAAIC,CAAS;AACf,GAEMC,IAAYC,EAAiB;AAAA,EACjC,cAAc;AAAA,IACZ,QAAQ;AAAA,IACR,UAAU;AAAA,MACR,iBAAiBC;AAAAA,IAAO;AAAA,EAC1B;AAAA,EAEF,aAAa;AAAA,IACX,iBAAiBA;AAAAA,EAAO;AAAA;AAAA;AAAA;AAAA;AAAA,EAM1B,WAAW;AAAA,IACT,UAAU;AAAA,MACR,iBAAiB,mBAAmBC,CAAa,KAAKA,CAAa;AAAA,MACnE,gBAAgB;AAAA,MAChB,oBAAoB;AAAA,MACpB,kBAAkB;AAAA,IAAA;AAAA,IAEpB,qBAAqB;AAAA,MACnB,iBAAiB;AAAA,IAAA;AAAA,EACnB;AAAA,EAEF,cAAc;AAAA,IACZ,GAAGC;AAAA,IACH,UAAU;AAAA,IACV,GAAGC,EAAW,SAAS,QAAQ;AAAA,IAC/B,cAAc;AAAA,IACd,YAAY;AAAA,EAAA;AAAA,EAEd,UAAU;AAAA,IACR,GAAGD;AAAA,IACH,UAAU;AAAA,IACV,GAAGC,EAAW,SAAS,QAAQ;AAAA,IAC/B,cAAc;AAAA,IACd,WAAW;AAAA,EAAA;AAAA,EAEb,YAAY;AAAA,IACV,WAAW;AAAA,EAAA;AAAA,EAEb,aAAa;AAAA,IACX,WAAW;AAAA,EAAA;AAEf,CAAC;AAeD,SAASC,EACP,EAAE,KAAAC,GAAK,OAAAC,GAAO,WAAAC,EAAA,GACdC,GACA;AACA,QAAMC,IAASX,EAAA,GACT;AAAA,IACJ,OAAAY;AAAA,IACA,YAAAC;AAAA,IACA,uBAAAC;AAAA,IACA,sBAAAC;AAAA,IACA,cAAcC,IAAoB;AAAA,IAClC,gBAAAC;AAAA,IACA,uBAAAC;AAAA,EAAA,IACEC,EAAA,GACEC,IAAiBC,EAAA,GACjBC,KAAcF,KAAA,gBAAAA,EAAgB,gBAAe,GAE7CG,IAAuB,CAACL,GACxBM,IAAc,EAAQX,GAEtBY,IAAc,CAACC,MAA2C;AAC9D,QAAI,CAACb,EAAY;AAGjB,UAAMc,IAASD,EAAM;AAKrB,IAJ6B5B,EAAsB;AAAA,MAAK,CAAC8B,MACvDD,EAAO,QAAQC,CAAQ;AAAA,IAAA,KAOzBf,EAAWN,GAAKmB,CAAK;AAAA,EACvB,GAEMG,IAAgB,CAACH,MAA8C;AACnE,QAAKb,MAEDa,EAAM,QAAQ,WAAWA,EAAM,QAAQ,MAAK;AAE9C,YAAMC,IAASD,EAAM;AAKrB,UAJ6B5B,EAAsB;AAAA,QAAK,CAAC8B,MACvDD,EAAO,QAAQC,CAAQ;AAAA,MAAA;AAIvB;AAGF,MAAAF,EAAM,eAAA,GACNb,EAAWN,GAAKmB,CAAmD;AAAA,IACrE;AAAA,EACF;AAEA,SACE,gBAAAI;AAAA,IAACC;AAAA,IAAA;AAAA,MACC,KAAArB;AAAA,MACA,aAAU;AAAA,MACJ,CAACX,CAAS,GAAG;AAAA,MACnB,mBAAgB;AAAA,MAChB,cAAYQ,EAAI,cAAA,IAAkB,aAAa;AAAA,MAC/C,kBAAgBiB,IAAc,SAAS;AAAA,MACvC,OAAAhB;AAAA,MACA,WAAWwB;AAAA,QACTf,MAAmB,MAASN,EAAO;AAAA,QACnCa,MAAgBV,KAAyBH,EAAO;AAAA,QAChDJ,EAAI,cAAA,MAAoBQ,KAAwBJ,EAAO;AAAA,QACvDF;AAAA,MAAA;AAAA,MAEF,SAASe,IAAcC,IAAc;AAAA,MACrC,UAAUD,IAAc,IAAI;AAAA,MAC5B,WAAWA,IAAcK,IAAgB;AAAA,MAExC,UAAA;AAAA,QAAAtB,EAAI,gBAAA,EAAkB,IAAI,CAACb,MAAS;AACnC,gBAAMuC,IAAWxC,EAAgBC,GAAMsB,CAAiB,GAClDkB,IAAQrC,EAAaH,CAAI,GACzByC,IAAWzC,EAAK,OAAO,YAAA,GACvB0C,IAAeD,IACjBE,EAAsB3C,EAAK,QAAQkB,CAAK,IACxC,QACE0B,IAAaC,EAAuB7C,EAAK,QAAQkB,CAAK,GACtD4B,IAAeC,EAAyB/C,EAAK,QAAQkB,CAAK;AAEhE,iBACE,gBAAA8B;AAAA,YAACC;AAAA,YAAA;AAAA,cAEC,aAAU;AAAA,cACJ,CAAC5C,CAAS,GAAG;AAAA,cACnB,mBAAgB;AAAA,cAChB,eAAaoC,KAAY;AAAA,cACzB,OAAAD;AAAA,cACA,OAAO;AAAA,gBACL,OACEX,KAAwBY,IACpBzC,EAAK,OAAO,YACZ;AAAA,gBACN,MAAMyC,MAAa,SAAS,GAAGC,CAAY,OAAO;AAAA,gBAClD,OAAOD,MAAa,UAAU,GAAGC,CAAY,OAAO;AAAA,cAAA;AAAA,cAEtD,WAAWJ;AAAA,gBACTC,MAAa,cAActB,EAAO;AAAA,gBAClCsB,MAAa,UAAUtB,EAAO;AAAA,gBAC9B2B,KAAc3B,EAAO;AAAA,gBACrB6B,KAAgB7B,EAAO;AAAA,cAAA;AAAA,cAGxB,YAAWjB,EAAK,OAAO,UAAU,MAAMA,EAAK,YAAY;AAAA,YAAA;AAAA,YArBpDA,EAAK;AAAA,UAAA;AAAA,QAwBhB,CAAC;AAAA,QAEA4B,IAAc,KACb,gBAAAoB;AAAA,UAACC;AAAA,UAAA;AAAA,YACC,eAAW;AAAA,YACX,eAAY;AAAA,YACZ,OAAO,EAAE,OAAOrB,GAAa,SAAS,EAAA;AAAA,UAAE;AAAA,QAAA;AAAA,MAC1C;AAAA,IAAA;AAAA,EAAA;AAIR;AAEO,MAAMsB,KAAeC,EAAM,WAAWvC,CAAiB;"}
@@ -1,6 +1,6 @@
1
1
  import { jsx as n } from "react/jsx-runtime";
2
2
  import * as m from "react";
3
- import { mergeClasses as i, SLOT_ATTR as p, shorthands as a } from "@epilot/zenith-runtime/v1/core.js";
3
+ import { mergeClasses as i, SLOT_ATTR as p, shorthands as a } from "@epilot/zenith-runtime/v1";
4
4
  import { makeZenithStyles as d } from "../../styles/make-styles.js";
5
5
  import { boxModel as b } from "../../styles/host-reset.js";
6
6
  import { spacingGroup1 as t, spacingElement1 as f } from "../../tokens/index.js";
@@ -1 +1 @@
1
- {"version":3,"file":"data-table-toolbar.js","sources":["../../../src/components/data-table/data-table-toolbar.tsx"],"sourcesContent":["import * as React from \"react\"\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\nconst useStyles = makeZenithStyles({\n root: {\n ...boxModel,\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"space-between\",\n gap: tokens.spacingGroup1,\n ...shorthands.paddingInline(tokens.spacingElement1),\n ...shorthands.paddingBlock(tokens.spacingGroup1),\n },\n})\n\nexport type DataTableToolbarProps = React.ComponentProps<\"div\">\n\n/**\n * A toolbar wrapper for DataTable that contains filters, search, and actions.\n * Place above the table for consistent layout.\n */\nexport const DataTableToolbar = React.forwardRef<\n HTMLDivElement,\n DataTableToolbarProps\n>(function DataTableToolbar({ className, children, ...props }, ref) {\n const styles = useStyles()\n\n return (\n <div\n ref={ref}\n data-slot=\"data-table-toolbar\"\n {...{ [SLOT_ATTR]: \"data-table-toolbar\" }}\n data-fs-element=\"DataTable-Toolbar\"\n className={mergeClasses(styles.root, className)}\n {...props}\n >\n {children}\n </div>\n )\n})\n"],"names":["useStyles","makeZenithStyles","boxModel","tokens.spacingGroup1","shorthands","tokens.spacingElement1","DataTableToolbar","React","className","children","props","ref","styles","jsx","SLOT_ATTR","mergeClasses"],"mappings":";;;;;;AAQA,MAAMA,IAAYC,EAAiB;AAAA,EACjC,MAAM;AAAA,IACJ,GAAGC;AAAA,IACH,SAAS;AAAA,IACT,YAAY;AAAA,IACZ,gBAAgB;AAAA,IAChB,KAAKC;AAAAA,IACL,GAAGC,EAAW,cAAcC,CAAsB;AAAA,IAClD,GAAGD,EAAW,aAAaD,CAAoB;AAAA,EAAA;AAEnD,CAAC,GAQYG,IAAmBC,EAAM,WAGpC,SAA0B,EAAE,WAAAC,GAAW,UAAAC,GAAU,GAAGC,EAAA,GAASC,GAAK;AAClE,QAAMC,IAASZ,EAAA;AAEf,SACE,gBAAAa;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,KAAAF;AAAA,MACA,aAAU;AAAA,MACJ,CAACG,CAAS,GAAG;AAAA,MACnB,mBAAgB;AAAA,MAChB,WAAWC,EAAaH,EAAO,MAAMJ,CAAS;AAAA,MAC7C,GAAGE;AAAA,MAEH,UAAAD;AAAA,IAAA;AAAA,EAAA;AAGP,CAAC;"}
1
+ {"version":3,"file":"data-table-toolbar.js","sources":["../../../src/components/data-table/data-table-toolbar.tsx"],"sourcesContent":["import * as React from \"react\"\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\nconst useStyles = makeZenithStyles({\n root: {\n ...boxModel,\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"space-between\",\n gap: tokens.spacingGroup1,\n ...shorthands.paddingInline(tokens.spacingElement1),\n ...shorthands.paddingBlock(tokens.spacingGroup1),\n },\n})\n\nexport type DataTableToolbarProps = React.ComponentProps<\"div\">\n\n/**\n * A toolbar wrapper for DataTable that contains filters, search, and actions.\n * Place above the table for consistent layout.\n */\nexport const DataTableToolbar = React.forwardRef<\n HTMLDivElement,\n DataTableToolbarProps\n>(function DataTableToolbar({ className, children, ...props }, ref) {\n const styles = useStyles()\n\n return (\n <div\n ref={ref}\n data-slot=\"data-table-toolbar\"\n {...{ [SLOT_ATTR]: \"data-table-toolbar\" }}\n data-fs-element=\"DataTable-Toolbar\"\n className={mergeClasses(styles.root, className)}\n {...props}\n >\n {children}\n </div>\n )\n})\n"],"names":["useStyles","makeZenithStyles","boxModel","tokens.spacingGroup1","shorthands","tokens.spacingElement1","DataTableToolbar","React","className","children","props","ref","styles","jsx","SLOT_ATTR","mergeClasses"],"mappings":";;;;;;AAQA,MAAMA,IAAYC,EAAiB;AAAA,EACjC,MAAM;AAAA,IACJ,GAAGC;AAAA,IACH,SAAS;AAAA,IACT,YAAY;AAAA,IACZ,gBAAgB;AAAA,IAChB,KAAKC;AAAAA,IACL,GAAGC,EAAW,cAAcC,CAAsB;AAAA,IAClD,GAAGD,EAAW,aAAaD,CAAoB;AAAA,EAAA;AAEnD,CAAC,GAQYG,IAAmBC,EAAM,WAGpC,SAA0B,EAAE,WAAAC,GAAW,UAAAC,GAAU,GAAGC,EAAA,GAASC,GAAK;AAClE,QAAMC,IAASZ,EAAA;AAEf,SACE,gBAAAa;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,KAAAF;AAAA,MACA,aAAU;AAAA,MACJ,CAACG,CAAS,GAAG;AAAA,MACnB,mBAAgB;AAAA,MAChB,WAAWC,EAAaH,EAAO,MAAMJ,CAAS;AAAA,MAC7C,GAAGE;AAAA,MAEH,UAAAD;AAAA,IAAA;AAAA,EAAA;AAGP,CAAC;"}
@@ -2,7 +2,7 @@ import { jsx as n } from "react/jsx-runtime";
2
2
  import * as Je from "react";
3
3
  import { useState as o, useRef as Ke, useEffect as h, useMemo as u, useCallback as Qe } from "react";
4
4
  import { useReactTable as Xe } from "../../vendor/.bun/@tanstack_react-table@8.21.3_6f4b9a1cfb20c0ae/vendor/@tanstack/react-table/build/lib/index.js";
5
- import { mergeClasses as Ye, SLOT_ATTR as $e } from "@epilot/zenith-runtime/v1/core.js";
5
+ import { mergeClasses as Ye, SLOT_ATTR as $e } from "@epilot/zenith-runtime/v1";
6
6
  import { makeZenithStyles as Ce } from "../../styles/make-styles.js";
7
7
  import { boxModel as ze } from "../../styles/host-reset.js";
8
8
  import { Checkbox as ee } from "../checkbox/checkbox.js";
@@ -1 +1 @@
1
- {"version":3,"file":"data-table.js","sources":["../../../src/components/data-table/data-table.tsx"],"sourcesContent":["import * as React from \"react\"\nimport { useState, useRef, useEffect, useCallback, useMemo } from \"react\"\nimport type { ReactNode, MouseEvent } from \"react\"\nimport {\n useReactTable,\n getCoreRowModel,\n getSortedRowModel,\n getFilteredRowModel,\n getPaginationRowModel,\n type SortingState,\n type RowSelectionState,\n type PaginationState,\n type ColumnFiltersState,\n type VisibilityState,\n type ColumnDef,\n type Row,\n type ColumnSizingState,\n type ColumnPinningState,\n type ColumnOrderState,\n type HeaderContext,\n} from \"@tanstack/react-table\"\nimport { mergeClasses } 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 { Checkbox } from \"../checkbox/checkbox\"\nimport { type TableDensity } from \"../table/table\"\nimport {\n canonicalDensity,\n DensityContextBoundary,\n} from \"../density-provider/density-provider\"\nimport {\n DataTableContext,\n type DataTablePaginationConfig,\n type DataTableCellOverflow,\n type DataTableVirtualizationConfig,\n DEFAULT_ROW_HEIGHT,\n DEFAULT_OVERSCAN,\n DEFAULT_CONTAINER_HEIGHT,\n} from \"./data-table-context\"\nimport { DataTableColumnHeader } from \"./data-table-column-header\"\n\n// =============================================================================\n// Types\n// =============================================================================\n\nexport type DataTableProps<TData> = {\n /** Column definitions */\n columns: ColumnDef<TData, unknown>[]\n /** Data array */\n data: TData[]\n /** Children rendered inside the context (DataTableContent, DataTablePagination, etc.) */\n children?: ReactNode\n /** Unique key accessor for each row */\n getRowId?: (row: TData) => string\n /** Enable row selection with checkboxes */\n enableRowSelection?: boolean | ((row: Row<TData>) => boolean)\n /** Enable column sorting */\n enableSorting?: boolean\n /** Skip client-side sorting (for server-side sorting). When true, sorting state is tracked but rows are not sorted client-side. */\n manualSorting?: boolean\n /** Enable column filtering */\n enableFiltering?: boolean\n /** Skip client-side filtering (for server-side filtering). When true, filter state is tracked but rows are not filtered client-side. */\n manualFiltering?: boolean\n /** Enable global search/filter */\n enableGlobalFilter?: boolean\n /** Pagination configuration */\n pagination?: DataTablePaginationConfig\n /** Controlled sorting state */\n sorting?: SortingState\n /** Callback when sorting changes */\n onSortingChange?: (sorting: SortingState) => void\n /** Default sorting state */\n defaultSorting?: SortingState\n /** Controlled row selection state */\n rowSelection?: RowSelectionState\n /** Callback when row selection changes */\n onRowSelectionChange?: (selection: RowSelectionState) => void\n /** Default row selection state */\n defaultRowSelection?: RowSelectionState\n /** Controlled column filters state */\n columnFilters?: ColumnFiltersState\n /** Callback when column filters change */\n onColumnFiltersChange?: (filters: ColumnFiltersState) => void\n /** Controlled column visibility state */\n columnVisibility?: VisibilityState\n /** Callback when column visibility changes */\n onColumnVisibilityChange?: (visibility: VisibilityState) => void\n /** Controlled global filter value */\n globalFilter?: string\n /** Callback when global filter changes */\n onGlobalFilterChange?: (value: string) => void\n /** Handler called when a row is clicked. Enables clickable row mode. */\n onRowClick?: (row: Row<TData>, event: MouseEvent<HTMLTableRowElement>) => void\n /** Custom hover class for clickable rows. Default: 'hover:bg-accent-a3' */\n clickableRowClassName?: string\n /** Custom class for selected rows. Default: 'data-[state=selected]:bg-accent-a3' */\n selectedRowClassName?: string\n /** Controls how cell content handles overflow. 'grow' expands cells (default), 'wrap' wraps text, 'truncate' shows ellipsis. Can be overridden per-column via column meta. */\n cellOverflow?: DataTableCellOverflow\n /** Disable column width resizing (enabled by default) */\n disableColumnResizing?: boolean\n /** Controls when resize handles are visible. 'always' shows handles persistently, 'onHeaderHover' only shows on header row hover. Default: 'onHeaderHover' */\n resizeHandleVisibility?: \"always\" | \"onHeaderHover\"\n /** Resize mode: 'onChange' updates during drag, 'onEnd' updates when drag finishes. Default: 'onChange' */\n columnResizeMode?: \"onChange\" | \"onEnd\"\n /** Controlled column sizing state */\n columnSizing?: ColumnSizingState\n /** Callback when column sizing changes */\n onColumnSizingChange?: (sizing: ColumnSizingState) => void\n /** Default column sizing for uncontrolled mode */\n defaultColumnSizing?: ColumnSizingState\n /** Controlled column pinning state */\n columnPinning?: ColumnPinningState\n /** Callback when column pinning changes */\n onColumnPinningChange?: (pinning: ColumnPinningState) => void\n /** Default column pinning for uncontrolled mode */\n defaultColumnPinning?: ColumnPinningState\n /** Auto-pin selection column to left when rows are selected. Default: false */\n autoPinSelection?: boolean\n /** Show bottom border on header row. Default: true */\n showHeaderBorder?: boolean\n /** Show bottom borders on data rows. Default: true */\n showRowBorders?: boolean\n /** Ensure columns have minimum width to fit header content (prevents hover clipping on sortable headers). Default: false */\n fitHeaderWidth?: boolean\n /** Controlled column order */\n columnOrder?: ColumnOrderState\n /** Callback for column order changes */\n onColumnOrderChange?: (columnOrder: ColumnOrderState) => void\n /** Default column order for uncontrolled mode */\n defaultColumnOrder?: ColumnOrderState\n /** Enable drag-and-drop column reordering in headers. Default: false */\n enableColumnOrdering?: boolean\n /** Virtualization configuration for large datasets (incompatible with pagination) */\n virtualization?: DataTableVirtualizationConfig\n /**\n * Cell density: compact, normal, or comfortable. Omitted inherits ambient CSS density (shell or\n * an outer `DensityProvider`) with no default-normal stamp — explicit only when passed.\n */\n density?: TableDensity\n /** Additional class name */\n className?: string\n}\n\n// =============================================================================\n// Helpers\n// =============================================================================\n\n/**\n * Transforms columns to auto-wrap string headers with DataTableColumnHeader\n * when sorting is enabled at the table level.\n */\nfunction wrapSortableHeaders<TData>(\n columns: ColumnDef<TData, unknown>[],\n enableSorting: boolean | undefined\n): ColumnDef<TData, unknown>[] {\n if (!enableSorting) {\n return columns\n }\n\n return columns.map((column) => {\n // Skip if column explicitly disables sorting\n if (column.enableSorting === false) {\n return column\n }\n\n // Skip if header is not a string (already a function/component)\n if (typeof column.header !== \"string\") {\n return column\n }\n\n const headerTitle = column.header\n\n return {\n ...column,\n header: ({ column: col }: HeaderContext<TData, unknown>) => (\n <DataTableColumnHeader column={col} title={headerTitle} />\n ),\n meta: {\n ...column.meta,\n // Preserve original header for visibility dropdown fallback\n visibilityLabel:\n (column.meta as { visibilityLabel?: string } | undefined)\n ?.visibilityLabel ?? headerTitle,\n // Flag to indicate this header was auto-wrapped with DataTableColumnHeader\n _sortableHeaderWrapped: true,\n },\n } as ColumnDef<TData, unknown>\n })\n}\n\nconst useStyles = makeZenithStyles({\n root: {\n ...boxModel,\n width: \"100%\",\n maxWidth: \"100%\",\n },\n})\n\n// =============================================================================\n// Component\n// =============================================================================\n\nfunction DataTableInner<TData>(\n {\n columns,\n data,\n children,\n getRowId,\n enableRowSelection = false,\n enableSorting = false,\n manualSorting = false,\n enableFiltering = false,\n manualFiltering = false,\n enableGlobalFilter = false,\n pagination,\n sorting: controlledSorting,\n onSortingChange,\n defaultSorting = [],\n rowSelection: controlledRowSelection,\n onRowSelectionChange,\n defaultRowSelection = {},\n columnFilters: controlledColumnFilters,\n onColumnFiltersChange,\n columnVisibility: controlledColumnVisibility,\n onColumnVisibilityChange,\n globalFilter: controlledGlobalFilter,\n onGlobalFilterChange,\n onRowClick,\n clickableRowClassName,\n selectedRowClassName,\n cellOverflow = \"truncate\",\n disableColumnResizing = false,\n resizeHandleVisibility = \"onHeaderHover\",\n columnResizeMode = \"onChange\",\n columnSizing: controlledColumnSizing,\n onColumnSizingChange,\n defaultColumnSizing = {},\n columnPinning: controlledColumnPinning,\n onColumnPinningChange,\n defaultColumnPinning = { left: [], right: [] },\n autoPinSelection,\n showHeaderBorder = true,\n showRowBorders = true,\n fitHeaderWidth = false,\n columnOrder: controlledColumnOrder,\n onColumnOrderChange,\n defaultColumnOrder = [],\n enableColumnOrdering = false,\n virtualization,\n density,\n className,\n }: DataTableProps<TData>,\n ref: React.ForwardedRef<HTMLDivElement>\n) {\n const styles = useStyles()\n\n // Internal state for uncontrolled mode\n const [internalSorting, setInternalSorting] =\n useState<SortingState>(defaultSorting)\n const [internalRowSelection, setInternalRowSelection] =\n useState<RowSelectionState>(defaultRowSelection)\n const [internalColumnFilters, setInternalColumnFilters] =\n useState<ColumnFiltersState>([])\n const [internalColumnVisibility, setInternalColumnVisibility] =\n useState<VisibilityState>({})\n const [internalGlobalFilter, setInternalGlobalFilter] = useState<string>(\"\")\n const [internalColumnSizing, setInternalColumnSizing] =\n useState<ColumnSizingState>(defaultColumnSizing)\n const [internalColumnPinning, setInternalColumnPinning] =\n useState<ColumnPinningState>(defaultColumnPinning)\n const [internalColumnOrder, setInternalColumnOrder] =\n useState<ColumnOrderState>(defaultColumnOrder)\n\n const initialPagination = {\n pageIndex: pagination?.pageIndex ?? 0,\n pageSize: pagination?.pageSize ?? 10,\n }\n const [internalPagination, setInternalPagination] =\n useState<PaginationState>(initialPagination)\n const isInternalPaginationChange = useRef(false)\n\n useEffect(() => {\n if (pagination?.pageIndex === undefined) {\n return\n }\n const pageIndex = pagination.pageIndex\n setInternalPagination((prev) =>\n prev.pageIndex === pageIndex ? prev : { ...prev, pageIndex }\n )\n }, [pagination?.pageIndex])\n\n useEffect(() => {\n if (pagination?.pageSize === undefined) {\n return\n }\n const pageSize = pagination.pageSize\n setInternalPagination((prev) =>\n prev.pageSize === pageSize ? prev : { ...prev, pageSize }\n )\n }, [pagination?.pageSize])\n\n // Derive enableColumnResizing from disableColumnResizing (enabled by default)\n const enableColumnResizing = !disableColumnResizing\n\n // Use controlled or internal state\n const sorting = controlledSorting ?? internalSorting\n const rowSelection = controlledRowSelection ?? internalRowSelection\n const columnFilters = controlledColumnFilters ?? internalColumnFilters\n const columnVisibility =\n controlledColumnVisibility ?? internalColumnVisibility\n const globalFilter = controlledGlobalFilter ?? internalGlobalFilter\n const columnSizing = controlledColumnSizing ?? internalColumnSizing\n const columnPinning = controlledColumnPinning ?? internalColumnPinning\n const columnOrder = controlledColumnOrder ?? internalColumnOrder\n\n // Compute effective pinning with auto-pin selection\n const effectiveColumnPinning = useMemo(() => {\n const shouldAutoPinSelection =\n enableRowSelection &&\n autoPinSelection &&\n Object.keys(rowSelection).length > 0\n\n if (!shouldAutoPinSelection) {\n return columnPinning\n }\n\n // Add \"select\" to left pinned if not already present\n const leftPinned = columnPinning.left ?? []\n if (leftPinned.includes(\"select\")) {\n return columnPinning\n }\n\n return {\n ...columnPinning,\n left: [\"select\", ...leftPinned],\n }\n }, [columnPinning, rowSelection, enableRowSelection, autoPinSelection])\n\n // Build selection column if enabled\n const selectionColumn: ColumnDef<TData, unknown> = useMemo(\n () => ({\n id: \"select\",\n header: ({ table }) => (\n <Checkbox\n data-fs-element=\"DataTable-SelectAll\"\n checked={\n table.getIsAllPageRowsSelected() ||\n (table.getIsSomePageRowsSelected() && \"indeterminate\")\n }\n onCheckedChange={(value) => table.toggleAllPageRowsSelected(!!value)}\n aria-label=\"Select all rows\"\n />\n ),\n cell: ({ row }) => (\n <Checkbox\n data-fs-element=\"DataTable-SelectRow\"\n checked={row.getIsSelected()}\n onCheckedChange={(value) => row.toggleSelected(!!value)}\n disabled={!row.getCanSelect()}\n aria-label=\"Select row\"\n />\n ),\n enableSorting: false,\n enableHiding: false,\n enableResizing: false,\n size: 40,\n }),\n []\n )\n\n // Transform columns to auto-wrap sortable headers\n const processedColumns = useMemo(() => {\n return wrapSortableHeaders(columns, enableSorting)\n }, [columns, enableSorting])\n\n // Prepend selection column if enabled\n const allColumns = useMemo(() => {\n if (enableRowSelection) {\n return [selectionColumn, ...processedColumns]\n }\n return processedColumns\n }, [processedColumns, enableRowSelection, selectionColumn])\n\n const usePagination = Boolean(pagination)\n const useVirtualization = Boolean(virtualization?.enabled && !usePagination)\n const isServerSidePagination =\n usePagination &&\n (pagination?.totalItems !== undefined ||\n pagination?.pageCount !== undefined)\n\n const handlePaginationChange = useCallback(\n (\n updater: PaginationState | ((prev: PaginationState) => PaginationState)\n ) => {\n isInternalPaginationChange.current = true\n setInternalPagination((prev) => {\n const next = typeof updater === \"function\" ? updater(prev) : updater\n return next\n })\n },\n []\n )\n\n // Call user's pagination callback after render completes\n useEffect(() => {\n if (isInternalPaginationChange.current) {\n pagination?.onPaginationChange?.(internalPagination)\n isInternalPaginationChange.current = false\n }\n }, [internalPagination, pagination])\n\n // Create table instance\n const table = useReactTable({\n data,\n columns: allColumns,\n getRowId,\n getCoreRowModel: getCoreRowModel(),\n\n // Default column configuration\n defaultColumn: {\n minSize: 50,\n },\n\n // Sorting\n ...(enableSorting &&\n !manualSorting && {\n getSortedRowModel: getSortedRowModel(),\n }),\n ...(manualSorting && {\n manualSorting: true,\n }),\n state: {\n sorting,\n rowSelection,\n columnFilters,\n columnVisibility,\n globalFilter,\n columnPinning: effectiveColumnPinning,\n columnOrder,\n ...(usePagination && {\n pagination: internalPagination,\n }),\n ...(enableColumnResizing && {\n columnSizing,\n }),\n },\n onSortingChange: (updater) => {\n const newSorting =\n typeof updater === \"function\" ? updater(sorting) : updater\n setInternalSorting(newSorting)\n onSortingChange?.(newSorting)\n },\n\n // Row selection\n enableRowSelection:\n typeof enableRowSelection === \"function\"\n ? (row: Row<TData>) => enableRowSelection(row)\n : enableRowSelection,\n onRowSelectionChange: (updater) => {\n const newSelection =\n typeof updater === \"function\" ? updater(rowSelection) : updater\n setInternalRowSelection(newSelection)\n onRowSelectionChange?.(newSelection)\n },\n\n // Filtering\n ...((enableFiltering || enableGlobalFilter) &&\n !manualFiltering && {\n getFilteredRowModel: getFilteredRowModel(),\n }),\n ...(manualFiltering && {\n manualFiltering: true,\n }),\n onColumnFiltersChange: (updater) => {\n const newFilters =\n typeof updater === \"function\" ? updater(columnFilters) : updater\n setInternalColumnFilters(newFilters)\n onColumnFiltersChange?.(newFilters)\n },\n onColumnVisibilityChange: (updater) => {\n const newVisibility =\n typeof updater === \"function\" ? updater(columnVisibility) : updater\n setInternalColumnVisibility(newVisibility)\n onColumnVisibilityChange?.(newVisibility)\n },\n onGlobalFilterChange: (updater) => {\n const newGlobalFilter =\n typeof updater === \"function\" ? updater(globalFilter) : updater\n setInternalGlobalFilter(newGlobalFilter)\n onGlobalFilterChange?.(newGlobalFilter)\n },\n\n // Column ordering\n onColumnOrderChange: (updater) => {\n const newOrder =\n typeof updater === \"function\" ? updater(columnOrder) : updater\n setInternalColumnOrder(newOrder)\n onColumnOrderChange?.(newOrder)\n },\n\n // Column resizing\n enableColumnResizing,\n columnResizeMode,\n onColumnSizingChange: (updater) => {\n const newSizing =\n typeof updater === \"function\" ? updater(columnSizing) : updater\n setInternalColumnSizing(newSizing)\n onColumnSizingChange?.(newSizing)\n },\n\n // Column pinning\n onColumnPinningChange: (updater) => {\n const newPinning =\n typeof updater === \"function\" ? updater(columnPinning) : updater\n setInternalColumnPinning(newPinning)\n onColumnPinningChange?.(newPinning)\n },\n\n // Pagination\n ...(usePagination &&\n !isServerSidePagination && {\n getPaginationRowModel: getPaginationRowModel(),\n }),\n ...(isServerSidePagination && {\n manualPagination: true,\n pageCount: pagination?.pageCount,\n rowCount: pagination?.totalItems,\n }),\n ...(usePagination && {\n onPaginationChange: handlePaginationChange,\n }),\n })\n\n const contextValue = useMemo(\n () => ({\n table,\n pagination,\n config: {\n enableVirtualization: useVirtualization,\n estimateRowHeight:\n virtualization?.estimateRowHeight ?? DEFAULT_ROW_HEIGHT,\n overscan: virtualization?.overscan ?? DEFAULT_OVERSCAN,\n containerHeight:\n virtualization?.containerHeight ?? DEFAULT_CONTAINER_HEIGHT,\n },\n onRowClick,\n clickableRowClassName,\n selectedRowClassName,\n cellOverflow,\n disableColumnResizing,\n resizeHandleVisibility,\n showHeaderBorder,\n showRowBorders,\n fitHeaderWidth,\n columnSizing,\n enableColumnOrdering,\n columnOrder,\n }),\n [\n table,\n pagination,\n useVirtualization,\n virtualization,\n onRowClick,\n clickableRowClassName,\n selectedRowClassName,\n cellOverflow,\n disableColumnResizing,\n resizeHandleVisibility,\n showHeaderBorder,\n showRowBorders,\n fitHeaderWidth,\n columnSizing,\n enableColumnOrdering,\n columnOrder,\n ]\n )\n\n return (\n <DataTableContext.Provider value={contextValue}>\n <div\n ref={ref}\n data-slot=\"data-table\"\n {...{ [SLOT_ATTR]: \"data-table\" }}\n data-fs-element=\"DataTable\"\n className={mergeClasses(styles.root, className)}\n // Authoritative, normalized, spread last: a raw caller data-density prop must never win\n // over the normalized density prop — same invariant DensityProvider/Table enforce.\n // canonicalDensity is the SAME normalization DensityContextBoundary below applies to the\n // context value, so an invalid density can never make DOM and context disagree.\n {...(density !== undefined\n ? { \"data-density\": canonicalDensity(density) }\n : {})}\n >\n <DensityContextBoundary density={density}>\n {children}\n </DensityContextBoundary>\n </div>\n </DataTableContext.Provider>\n )\n}\n\nexport const DataTable = React.forwardRef(DataTableInner) as <TData>(\n props: DataTableProps<TData> & { ref?: React.Ref<HTMLDivElement> }\n) => React.ReactElement | null\n"],"names":["wrapSortableHeaders","columns","enableSorting","column","headerTitle","col","jsx","DataTableColumnHeader","_a","useStyles","makeZenithStyles","boxModel","DataTableInner","data","children","getRowId","enableRowSelection","manualSorting","enableFiltering","manualFiltering","enableGlobalFilter","pagination","controlledSorting","onSortingChange","defaultSorting","controlledRowSelection","onRowSelectionChange","defaultRowSelection","controlledColumnFilters","onColumnFiltersChange","controlledColumnVisibility","onColumnVisibilityChange","controlledGlobalFilter","onGlobalFilterChange","onRowClick","clickableRowClassName","selectedRowClassName","cellOverflow","disableColumnResizing","resizeHandleVisibility","columnResizeMode","controlledColumnSizing","onColumnSizingChange","defaultColumnSizing","controlledColumnPinning","onColumnPinningChange","defaultColumnPinning","autoPinSelection","showHeaderBorder","showRowBorders","fitHeaderWidth","controlledColumnOrder","onColumnOrderChange","defaultColumnOrder","enableColumnOrdering","virtualization","density","className","ref","styles","internalSorting","setInternalSorting","useState","internalRowSelection","setInternalRowSelection","internalColumnFilters","setInternalColumnFilters","internalColumnVisibility","setInternalColumnVisibility","internalGlobalFilter","setInternalGlobalFilter","internalColumnSizing","setInternalColumnSizing","internalColumnPinning","setInternalColumnPinning","internalColumnOrder","setInternalColumnOrder","initialPagination","internalPagination","setInternalPagination","isInternalPaginationChange","useRef","useEffect","pageIndex","prev","pageSize","enableColumnResizing","sorting","rowSelection","columnFilters","columnVisibility","globalFilter","columnSizing","columnPinning","columnOrder","effectiveColumnPinning","useMemo","leftPinned","selectionColumn","table","Checkbox","value","row","processedColumns","allColumns","usePagination","useVirtualization","isServerSidePagination","handlePaginationChange","useCallback","updater","useReactTable","getCoreRowModel","getSortedRowModel","newSorting","newSelection","getFilteredRowModel","newFilters","newVisibility","newGlobalFilter","newOrder","newSizing","newPinning","getPaginationRowModel","contextValue","DEFAULT_ROW_HEIGHT","DEFAULT_OVERSCAN","DEFAULT_CONTAINER_HEIGHT","DataTableContext","SLOT_ATTR","mergeClasses","canonicalDensity","DensityContextBoundary","DataTable","React"],"mappings":"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"}
1
+ {"version":3,"file":"data-table.js","sources":["../../../src/components/data-table/data-table.tsx"],"sourcesContent":["import * as React from \"react\"\nimport { useState, useRef, useEffect, useCallback, useMemo } from \"react\"\nimport type { ReactNode, MouseEvent } from \"react\"\nimport {\n useReactTable,\n getCoreRowModel,\n getSortedRowModel,\n getFilteredRowModel,\n getPaginationRowModel,\n type SortingState,\n type RowSelectionState,\n type PaginationState,\n type ColumnFiltersState,\n type VisibilityState,\n type ColumnDef,\n type Row,\n type ColumnSizingState,\n type ColumnPinningState,\n type ColumnOrderState,\n type HeaderContext,\n} from \"@tanstack/react-table\"\nimport { mergeClasses } 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 { Checkbox } from \"../checkbox/checkbox\"\nimport { type TableDensity } from \"../table/table\"\nimport {\n canonicalDensity,\n DensityContextBoundary,\n} from \"../density-provider/density-provider\"\nimport {\n DataTableContext,\n type DataTablePaginationConfig,\n type DataTableCellOverflow,\n type DataTableVirtualizationConfig,\n DEFAULT_ROW_HEIGHT,\n DEFAULT_OVERSCAN,\n DEFAULT_CONTAINER_HEIGHT,\n} from \"./data-table-context\"\nimport { DataTableColumnHeader } from \"./data-table-column-header\"\n\n// =============================================================================\n// Types\n// =============================================================================\n\nexport type DataTableProps<TData> = {\n /** Column definitions */\n columns: ColumnDef<TData, unknown>[]\n /** Data array */\n data: TData[]\n /** Children rendered inside the context (DataTableContent, DataTablePagination, etc.) */\n children?: ReactNode\n /** Unique key accessor for each row */\n getRowId?: (row: TData) => string\n /** Enable row selection with checkboxes */\n enableRowSelection?: boolean | ((row: Row<TData>) => boolean)\n /** Enable column sorting */\n enableSorting?: boolean\n /** Skip client-side sorting (for server-side sorting). When true, sorting state is tracked but rows are not sorted client-side. */\n manualSorting?: boolean\n /** Enable column filtering */\n enableFiltering?: boolean\n /** Skip client-side filtering (for server-side filtering). When true, filter state is tracked but rows are not filtered client-side. */\n manualFiltering?: boolean\n /** Enable global search/filter */\n enableGlobalFilter?: boolean\n /** Pagination configuration */\n pagination?: DataTablePaginationConfig\n /** Controlled sorting state */\n sorting?: SortingState\n /** Callback when sorting changes */\n onSortingChange?: (sorting: SortingState) => void\n /** Default sorting state */\n defaultSorting?: SortingState\n /** Controlled row selection state */\n rowSelection?: RowSelectionState\n /** Callback when row selection changes */\n onRowSelectionChange?: (selection: RowSelectionState) => void\n /** Default row selection state */\n defaultRowSelection?: RowSelectionState\n /** Controlled column filters state */\n columnFilters?: ColumnFiltersState\n /** Callback when column filters change */\n onColumnFiltersChange?: (filters: ColumnFiltersState) => void\n /** Controlled column visibility state */\n columnVisibility?: VisibilityState\n /** Callback when column visibility changes */\n onColumnVisibilityChange?: (visibility: VisibilityState) => void\n /** Controlled global filter value */\n globalFilter?: string\n /** Callback when global filter changes */\n onGlobalFilterChange?: (value: string) => void\n /** Handler called when a row is clicked. Enables clickable row mode. */\n onRowClick?: (row: Row<TData>, event: MouseEvent<HTMLTableRowElement>) => void\n /** Custom hover class for clickable rows. Default: 'hover:bg-accent-a3' */\n clickableRowClassName?: string\n /** Custom class for selected rows. Default: 'data-[state=selected]:bg-accent-a3' */\n selectedRowClassName?: string\n /** Controls how cell content handles overflow. 'grow' expands cells (default), 'wrap' wraps text, 'truncate' shows ellipsis. Can be overridden per-column via column meta. */\n cellOverflow?: DataTableCellOverflow\n /** Disable column width resizing (enabled by default) */\n disableColumnResizing?: boolean\n /** Controls when resize handles are visible. 'always' shows handles persistently, 'onHeaderHover' only shows on header row hover. Default: 'onHeaderHover' */\n resizeHandleVisibility?: \"always\" | \"onHeaderHover\"\n /** Resize mode: 'onChange' updates during drag, 'onEnd' updates when drag finishes. Default: 'onChange' */\n columnResizeMode?: \"onChange\" | \"onEnd\"\n /** Controlled column sizing state */\n columnSizing?: ColumnSizingState\n /** Callback when column sizing changes */\n onColumnSizingChange?: (sizing: ColumnSizingState) => void\n /** Default column sizing for uncontrolled mode */\n defaultColumnSizing?: ColumnSizingState\n /** Controlled column pinning state */\n columnPinning?: ColumnPinningState\n /** Callback when column pinning changes */\n onColumnPinningChange?: (pinning: ColumnPinningState) => void\n /** Default column pinning for uncontrolled mode */\n defaultColumnPinning?: ColumnPinningState\n /** Auto-pin selection column to left when rows are selected. Default: false */\n autoPinSelection?: boolean\n /** Show bottom border on header row. Default: true */\n showHeaderBorder?: boolean\n /** Show bottom borders on data rows. Default: true */\n showRowBorders?: boolean\n /** Ensure columns have minimum width to fit header content (prevents hover clipping on sortable headers). Default: false */\n fitHeaderWidth?: boolean\n /** Controlled column order */\n columnOrder?: ColumnOrderState\n /** Callback for column order changes */\n onColumnOrderChange?: (columnOrder: ColumnOrderState) => void\n /** Default column order for uncontrolled mode */\n defaultColumnOrder?: ColumnOrderState\n /** Enable drag-and-drop column reordering in headers. Default: false */\n enableColumnOrdering?: boolean\n /** Virtualization configuration for large datasets (incompatible with pagination) */\n virtualization?: DataTableVirtualizationConfig\n /**\n * Cell density: compact, normal, or comfortable. Omitted inherits ambient CSS density (shell or\n * an outer `DensityProvider`) with no default-normal stamp — explicit only when passed.\n */\n density?: TableDensity\n /** Additional class name */\n className?: string\n}\n\n// =============================================================================\n// Helpers\n// =============================================================================\n\n/**\n * Transforms columns to auto-wrap string headers with DataTableColumnHeader\n * when sorting is enabled at the table level.\n */\nfunction wrapSortableHeaders<TData>(\n columns: ColumnDef<TData, unknown>[],\n enableSorting: boolean | undefined\n): ColumnDef<TData, unknown>[] {\n if (!enableSorting) {\n return columns\n }\n\n return columns.map((column) => {\n // Skip if column explicitly disables sorting\n if (column.enableSorting === false) {\n return column\n }\n\n // Skip if header is not a string (already a function/component)\n if (typeof column.header !== \"string\") {\n return column\n }\n\n const headerTitle = column.header\n\n return {\n ...column,\n header: ({ column: col }: HeaderContext<TData, unknown>) => (\n <DataTableColumnHeader column={col} title={headerTitle} />\n ),\n meta: {\n ...column.meta,\n // Preserve original header for visibility dropdown fallback\n visibilityLabel:\n (column.meta as { visibilityLabel?: string } | undefined)\n ?.visibilityLabel ?? headerTitle,\n // Flag to indicate this header was auto-wrapped with DataTableColumnHeader\n _sortableHeaderWrapped: true,\n },\n } as ColumnDef<TData, unknown>\n })\n}\n\nconst useStyles = makeZenithStyles({\n root: {\n ...boxModel,\n width: \"100%\",\n maxWidth: \"100%\",\n },\n})\n\n// =============================================================================\n// Component\n// =============================================================================\n\nfunction DataTableInner<TData>(\n {\n columns,\n data,\n children,\n getRowId,\n enableRowSelection = false,\n enableSorting = false,\n manualSorting = false,\n enableFiltering = false,\n manualFiltering = false,\n enableGlobalFilter = false,\n pagination,\n sorting: controlledSorting,\n onSortingChange,\n defaultSorting = [],\n rowSelection: controlledRowSelection,\n onRowSelectionChange,\n defaultRowSelection = {},\n columnFilters: controlledColumnFilters,\n onColumnFiltersChange,\n columnVisibility: controlledColumnVisibility,\n onColumnVisibilityChange,\n globalFilter: controlledGlobalFilter,\n onGlobalFilterChange,\n onRowClick,\n clickableRowClassName,\n selectedRowClassName,\n cellOverflow = \"truncate\",\n disableColumnResizing = false,\n resizeHandleVisibility = \"onHeaderHover\",\n columnResizeMode = \"onChange\",\n columnSizing: controlledColumnSizing,\n onColumnSizingChange,\n defaultColumnSizing = {},\n columnPinning: controlledColumnPinning,\n onColumnPinningChange,\n defaultColumnPinning = { left: [], right: [] },\n autoPinSelection,\n showHeaderBorder = true,\n showRowBorders = true,\n fitHeaderWidth = false,\n columnOrder: controlledColumnOrder,\n onColumnOrderChange,\n defaultColumnOrder = [],\n enableColumnOrdering = false,\n virtualization,\n density,\n className,\n }: DataTableProps<TData>,\n ref: React.ForwardedRef<HTMLDivElement>\n) {\n const styles = useStyles()\n\n // Internal state for uncontrolled mode\n const [internalSorting, setInternalSorting] =\n useState<SortingState>(defaultSorting)\n const [internalRowSelection, setInternalRowSelection] =\n useState<RowSelectionState>(defaultRowSelection)\n const [internalColumnFilters, setInternalColumnFilters] =\n useState<ColumnFiltersState>([])\n const [internalColumnVisibility, setInternalColumnVisibility] =\n useState<VisibilityState>({})\n const [internalGlobalFilter, setInternalGlobalFilter] = useState<string>(\"\")\n const [internalColumnSizing, setInternalColumnSizing] =\n useState<ColumnSizingState>(defaultColumnSizing)\n const [internalColumnPinning, setInternalColumnPinning] =\n useState<ColumnPinningState>(defaultColumnPinning)\n const [internalColumnOrder, setInternalColumnOrder] =\n useState<ColumnOrderState>(defaultColumnOrder)\n\n const initialPagination = {\n pageIndex: pagination?.pageIndex ?? 0,\n pageSize: pagination?.pageSize ?? 10,\n }\n const [internalPagination, setInternalPagination] =\n useState<PaginationState>(initialPagination)\n const isInternalPaginationChange = useRef(false)\n\n useEffect(() => {\n if (pagination?.pageIndex === undefined) {\n return\n }\n const pageIndex = pagination.pageIndex\n setInternalPagination((prev) =>\n prev.pageIndex === pageIndex ? prev : { ...prev, pageIndex }\n )\n }, [pagination?.pageIndex])\n\n useEffect(() => {\n if (pagination?.pageSize === undefined) {\n return\n }\n const pageSize = pagination.pageSize\n setInternalPagination((prev) =>\n prev.pageSize === pageSize ? prev : { ...prev, pageSize }\n )\n }, [pagination?.pageSize])\n\n // Derive enableColumnResizing from disableColumnResizing (enabled by default)\n const enableColumnResizing = !disableColumnResizing\n\n // Use controlled or internal state\n const sorting = controlledSorting ?? internalSorting\n const rowSelection = controlledRowSelection ?? internalRowSelection\n const columnFilters = controlledColumnFilters ?? internalColumnFilters\n const columnVisibility =\n controlledColumnVisibility ?? internalColumnVisibility\n const globalFilter = controlledGlobalFilter ?? internalGlobalFilter\n const columnSizing = controlledColumnSizing ?? internalColumnSizing\n const columnPinning = controlledColumnPinning ?? internalColumnPinning\n const columnOrder = controlledColumnOrder ?? internalColumnOrder\n\n // Compute effective pinning with auto-pin selection\n const effectiveColumnPinning = useMemo(() => {\n const shouldAutoPinSelection =\n enableRowSelection &&\n autoPinSelection &&\n Object.keys(rowSelection).length > 0\n\n if (!shouldAutoPinSelection) {\n return columnPinning\n }\n\n // Add \"select\" to left pinned if not already present\n const leftPinned = columnPinning.left ?? []\n if (leftPinned.includes(\"select\")) {\n return columnPinning\n }\n\n return {\n ...columnPinning,\n left: [\"select\", ...leftPinned],\n }\n }, [columnPinning, rowSelection, enableRowSelection, autoPinSelection])\n\n // Build selection column if enabled\n const selectionColumn: ColumnDef<TData, unknown> = useMemo(\n () => ({\n id: \"select\",\n header: ({ table }) => (\n <Checkbox\n data-fs-element=\"DataTable-SelectAll\"\n checked={\n table.getIsAllPageRowsSelected() ||\n (table.getIsSomePageRowsSelected() && \"indeterminate\")\n }\n onCheckedChange={(value) => table.toggleAllPageRowsSelected(!!value)}\n aria-label=\"Select all rows\"\n />\n ),\n cell: ({ row }) => (\n <Checkbox\n data-fs-element=\"DataTable-SelectRow\"\n checked={row.getIsSelected()}\n onCheckedChange={(value) => row.toggleSelected(!!value)}\n disabled={!row.getCanSelect()}\n aria-label=\"Select row\"\n />\n ),\n enableSorting: false,\n enableHiding: false,\n enableResizing: false,\n size: 40,\n }),\n []\n )\n\n // Transform columns to auto-wrap sortable headers\n const processedColumns = useMemo(() => {\n return wrapSortableHeaders(columns, enableSorting)\n }, [columns, enableSorting])\n\n // Prepend selection column if enabled\n const allColumns = useMemo(() => {\n if (enableRowSelection) {\n return [selectionColumn, ...processedColumns]\n }\n return processedColumns\n }, [processedColumns, enableRowSelection, selectionColumn])\n\n const usePagination = Boolean(pagination)\n const useVirtualization = Boolean(virtualization?.enabled && !usePagination)\n const isServerSidePagination =\n usePagination &&\n (pagination?.totalItems !== undefined ||\n pagination?.pageCount !== undefined)\n\n const handlePaginationChange = useCallback(\n (\n updater: PaginationState | ((prev: PaginationState) => PaginationState)\n ) => {\n isInternalPaginationChange.current = true\n setInternalPagination((prev) => {\n const next = typeof updater === \"function\" ? updater(prev) : updater\n return next\n })\n },\n []\n )\n\n // Call user's pagination callback after render completes\n useEffect(() => {\n if (isInternalPaginationChange.current) {\n pagination?.onPaginationChange?.(internalPagination)\n isInternalPaginationChange.current = false\n }\n }, [internalPagination, pagination])\n\n // Create table instance\n const table = useReactTable({\n data,\n columns: allColumns,\n getRowId,\n getCoreRowModel: getCoreRowModel(),\n\n // Default column configuration\n defaultColumn: {\n minSize: 50,\n },\n\n // Sorting\n ...(enableSorting &&\n !manualSorting && {\n getSortedRowModel: getSortedRowModel(),\n }),\n ...(manualSorting && {\n manualSorting: true,\n }),\n state: {\n sorting,\n rowSelection,\n columnFilters,\n columnVisibility,\n globalFilter,\n columnPinning: effectiveColumnPinning,\n columnOrder,\n ...(usePagination && {\n pagination: internalPagination,\n }),\n ...(enableColumnResizing && {\n columnSizing,\n }),\n },\n onSortingChange: (updater) => {\n const newSorting =\n typeof updater === \"function\" ? updater(sorting) : updater\n setInternalSorting(newSorting)\n onSortingChange?.(newSorting)\n },\n\n // Row selection\n enableRowSelection:\n typeof enableRowSelection === \"function\"\n ? (row: Row<TData>) => enableRowSelection(row)\n : enableRowSelection,\n onRowSelectionChange: (updater) => {\n const newSelection =\n typeof updater === \"function\" ? updater(rowSelection) : updater\n setInternalRowSelection(newSelection)\n onRowSelectionChange?.(newSelection)\n },\n\n // Filtering\n ...((enableFiltering || enableGlobalFilter) &&\n !manualFiltering && {\n getFilteredRowModel: getFilteredRowModel(),\n }),\n ...(manualFiltering && {\n manualFiltering: true,\n }),\n onColumnFiltersChange: (updater) => {\n const newFilters =\n typeof updater === \"function\" ? updater(columnFilters) : updater\n setInternalColumnFilters(newFilters)\n onColumnFiltersChange?.(newFilters)\n },\n onColumnVisibilityChange: (updater) => {\n const newVisibility =\n typeof updater === \"function\" ? updater(columnVisibility) : updater\n setInternalColumnVisibility(newVisibility)\n onColumnVisibilityChange?.(newVisibility)\n },\n onGlobalFilterChange: (updater) => {\n const newGlobalFilter =\n typeof updater === \"function\" ? updater(globalFilter) : updater\n setInternalGlobalFilter(newGlobalFilter)\n onGlobalFilterChange?.(newGlobalFilter)\n },\n\n // Column ordering\n onColumnOrderChange: (updater) => {\n const newOrder =\n typeof updater === \"function\" ? updater(columnOrder) : updater\n setInternalColumnOrder(newOrder)\n onColumnOrderChange?.(newOrder)\n },\n\n // Column resizing\n enableColumnResizing,\n columnResizeMode,\n onColumnSizingChange: (updater) => {\n const newSizing =\n typeof updater === \"function\" ? updater(columnSizing) : updater\n setInternalColumnSizing(newSizing)\n onColumnSizingChange?.(newSizing)\n },\n\n // Column pinning\n onColumnPinningChange: (updater) => {\n const newPinning =\n typeof updater === \"function\" ? updater(columnPinning) : updater\n setInternalColumnPinning(newPinning)\n onColumnPinningChange?.(newPinning)\n },\n\n // Pagination\n ...(usePagination &&\n !isServerSidePagination && {\n getPaginationRowModel: getPaginationRowModel(),\n }),\n ...(isServerSidePagination && {\n manualPagination: true,\n pageCount: pagination?.pageCount,\n rowCount: pagination?.totalItems,\n }),\n ...(usePagination && {\n onPaginationChange: handlePaginationChange,\n }),\n })\n\n const contextValue = useMemo(\n () => ({\n table,\n pagination,\n config: {\n enableVirtualization: useVirtualization,\n estimateRowHeight:\n virtualization?.estimateRowHeight ?? DEFAULT_ROW_HEIGHT,\n overscan: virtualization?.overscan ?? DEFAULT_OVERSCAN,\n containerHeight:\n virtualization?.containerHeight ?? DEFAULT_CONTAINER_HEIGHT,\n },\n onRowClick,\n clickableRowClassName,\n selectedRowClassName,\n cellOverflow,\n disableColumnResizing,\n resizeHandleVisibility,\n showHeaderBorder,\n showRowBorders,\n fitHeaderWidth,\n columnSizing,\n enableColumnOrdering,\n columnOrder,\n }),\n [\n table,\n pagination,\n useVirtualization,\n virtualization,\n onRowClick,\n clickableRowClassName,\n selectedRowClassName,\n cellOverflow,\n disableColumnResizing,\n resizeHandleVisibility,\n showHeaderBorder,\n showRowBorders,\n fitHeaderWidth,\n columnSizing,\n enableColumnOrdering,\n columnOrder,\n ]\n )\n\n return (\n <DataTableContext.Provider value={contextValue}>\n <div\n ref={ref}\n data-slot=\"data-table\"\n {...{ [SLOT_ATTR]: \"data-table\" }}\n data-fs-element=\"DataTable\"\n className={mergeClasses(styles.root, className)}\n // Authoritative, normalized, spread last: a raw caller data-density prop must never win\n // over the normalized density prop — same invariant DensityProvider/Table enforce.\n // canonicalDensity is the SAME normalization DensityContextBoundary below applies to the\n // context value, so an invalid density can never make DOM and context disagree.\n {...(density !== undefined\n ? { \"data-density\": canonicalDensity(density) }\n : {})}\n >\n <DensityContextBoundary density={density}>\n {children}\n </DensityContextBoundary>\n </div>\n </DataTableContext.Provider>\n )\n}\n\nexport const DataTable = React.forwardRef(DataTableInner) as <TData>(\n props: DataTableProps<TData> & { ref?: React.Ref<HTMLDivElement> }\n) => React.ReactElement | null\n"],"names":["wrapSortableHeaders","columns","enableSorting","column","headerTitle","col","jsx","DataTableColumnHeader","_a","useStyles","makeZenithStyles","boxModel","DataTableInner","data","children","getRowId","enableRowSelection","manualSorting","enableFiltering","manualFiltering","enableGlobalFilter","pagination","controlledSorting","onSortingChange","defaultSorting","controlledRowSelection","onRowSelectionChange","defaultRowSelection","controlledColumnFilters","onColumnFiltersChange","controlledColumnVisibility","onColumnVisibilityChange","controlledGlobalFilter","onGlobalFilterChange","onRowClick","clickableRowClassName","selectedRowClassName","cellOverflow","disableColumnResizing","resizeHandleVisibility","columnResizeMode","controlledColumnSizing","onColumnSizingChange","defaultColumnSizing","controlledColumnPinning","onColumnPinningChange","defaultColumnPinning","autoPinSelection","showHeaderBorder","showRowBorders","fitHeaderWidth","controlledColumnOrder","onColumnOrderChange","defaultColumnOrder","enableColumnOrdering","virtualization","density","className","ref","styles","internalSorting","setInternalSorting","useState","internalRowSelection","setInternalRowSelection","internalColumnFilters","setInternalColumnFilters","internalColumnVisibility","setInternalColumnVisibility","internalGlobalFilter","setInternalGlobalFilter","internalColumnSizing","setInternalColumnSizing","internalColumnPinning","setInternalColumnPinning","internalColumnOrder","setInternalColumnOrder","initialPagination","internalPagination","setInternalPagination","isInternalPaginationChange","useRef","useEffect","pageIndex","prev","pageSize","enableColumnResizing","sorting","rowSelection","columnFilters","columnVisibility","globalFilter","columnSizing","columnPinning","columnOrder","effectiveColumnPinning","useMemo","leftPinned","selectionColumn","table","Checkbox","value","row","processedColumns","allColumns","usePagination","useVirtualization","isServerSidePagination","handlePaginationChange","useCallback","updater","useReactTable","getCoreRowModel","getSortedRowModel","newSorting","newSelection","getFilteredRowModel","newFilters","newVisibility","newGlobalFilter","newOrder","newSizing","newPinning","getPaginationRowModel","contextValue","DEFAULT_ROW_HEIGHT","DEFAULT_OVERSCAN","DEFAULT_CONTAINER_HEIGHT","DataTableContext","SLOT_ATTR","mergeClasses","canonicalDensity","DensityContextBoundary","DataTable","React"],"mappings":"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"}
@@ -2,7 +2,7 @@ import { jsxs as S, jsx as s } from "react/jsx-runtime";
2
2
  import * as a from "react";
3
3
  import { createElement as oe } from "react";
4
4
  import { Popover as pe } from "../../_virtual/_zenith-runtime-family_popover.js";
5
- import { SLOT_ATTR as c, mergeClasses as J, shorthands as l } from "@epilot/zenith-runtime/v1/core.js";
5
+ import { SLOT_ATTR as c, mergeClasses as J, shorthands as l } from "@epilot/zenith-runtime/v1";
6
6
  import { Field as le, FieldLabel as ce, FieldInputGroup as ue, FieldGroupAddon as ge, FieldError as he } from "../field/field.js";
7
7
  import { Button as me } from "../button/button.js";
8
8
  import { Pill as fe } from "../pill/pill.js";
@@ -1 +1 @@
1
- {"version":3,"file":"date-range-picker.js","sources":["../../../src/components/date-range-picker/date-range-picker.tsx"],"sourcesContent":["import * as React from \"react\"\nimport { Popover as PopoverPrimitive } from \"@base-ui/react/popover\"\nimport { mergeClasses, shorthands } from \"@epilot/zenith-runtime/v1/core\"\n\nimport {\n Field,\n FieldLabel,\n FieldError,\n FieldInputGroup,\n FieldGroupAddon,\n} from \"../field/field\"\nimport { Button } from \"../button/button\"\nimport { Pill } from \"../pill/pill\"\nimport { Popover, PopoverContent } from \"../popover/popover\"\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\nimport { RangeCalendar } from \"./range-calendar\"\nimport type { RangeCalendarProps } from \"./range-calendar\"\nimport type { DateRange, DateTimePickerLocale } from \"./date-range-picker-utils\"\nimport {\n formatDateTimeDisplay,\n parseDateTimeInput,\n} from \"./date-range-picker-utils\"\n\nconst CalendarIcon = (props: React.SVGProps<SVGSVGElement>) => (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n height=\"18px\"\n viewBox=\"0 -960 960 960\"\n width=\"18px\"\n fill=\"currentColor\"\n {...props}\n >\n <path d=\"M200-80q-33 0-56.5-23.5T120-160v-560q0-33 23.5-56.5T200-800h40v-80h80v80h320v-80h80v80h40q33 0 56.5 23.5T840-720v560q0 33-23.5 56.5T760-80H200Zm0-80h560v-400H200v400Zm0-480h560v-80H200v80Zm0 0v-80 80Zm280 240q-17 0-28.5-11.5T440-440q0-17 11.5-28.5T480-480q17 0 28.5 11.5T520-440q0 17-11.5 28.5T480-400Zm-160 0q-17 0-28.5-11.5T280-440q0-17 11.5-28.5T320-480q17 0 28.5 11.5T360-440q0 17-11.5 28.5T320-400Zm320 0q-17 0-28.5-11.5T600-440q0-17 11.5-28.5T640-480q17 0 28.5 11.5T680-440q0 17-11.5 28.5T640-400ZM480-240q-17 0-28.5-11.5T440-280q0-17 11.5-28.5T480-320q17 0 28.5 11.5T520-280q0 17-11.5 28.5T480-240Zm-160 0q-17 0-28.5-11.5T280-280q0-17 11.5-28.5T320-320q17 0 28.5 11.5T360-280q0 17-11.5 28.5T320-240Zm320 0q-17 0-28.5-11.5T600-280q0-17 11.5-28.5T640-320q17 0 28.5 11.5T680-280q0 17-11.5 28.5T640-240Z\" />\n </svg>\n)\n\nconst DEFAULT_FORMAT = \"dd/MM/yyyy\"\n\nexport type DateRangePreset = {\n label: string\n getValue: () => DateRange\n}\n\nexport type DateRangePickerProps = {\n value: DateRange\n onChange: (range: DateRange) => void\n onBlur?: () => void\n disabled?: boolean\n disablePast?: boolean\n label?: string\n error?: string\n startPlaceholder?: string\n endPlaceholder?: string\n format?: string\n locale?: DateTimePickerLocale\n className?: string\n keyboardIcon?: React.ReactNode\n inputAriaLabel?: string\n openPickerAriaLabel?: string\n previousMonthLabel?: string\n nextMonthLabel?: string\n testId?: string\n currentTimeInTimezone?: Date\n showWeekNumbers?: boolean\n presets?: DateRangePreset[]\n}\n\nconst useStyles = makeZenithStyles({\n root: {\n ...boxModel,\n width: \"100%\",\n },\n inputGroup: {\n ...boxModel,\n width: \"100%\",\n },\n /**\n * Reproduces a v1 defect on purpose, the same way Label's line-height is reproduced: v1's `icon-\n * sm` size classes do not reach this button, so v1 renders it content-sized at 18x18 around an\n * unconstrained 18px icon rather than the 28x28-with-14px-icon that `icon-sm` specifies.\n */\n addonButton: {\n ...boxModel,\n width: \"auto\",\n height: \"auto\",\n \"& svg\": { width: \"auto\", height: \"auto\" },\n },\n popoverTrigger: {\n flexGrow: 1,\n flexShrink: 1,\n flexBasis: \"0%\",\n },\n triggerRoot: {\n ...boxModel,\n display: \"flex\",\n alignItems: \"center\",\n ...shorthands.gap(tokens.spacingElement2),\n flexGrow: 1,\n flexShrink: 1,\n flexBasis: \"0%\",\n height: \"1.5rem\",\n cursor: \"pointer\",\n },\n input: {\n ...nativeControl,\n width: \"5.5rem\",\n outlineStyle: \"none\",\n fontSize: tokens.textSm,\n lineHeight: tokens.leadingSm,\n color: tokens.grayA12,\n backgroundColor: \"transparent\",\n textAlign: \"center\",\n ...shorthands.border(\"0\"),\n ...shorthands.padding(\"0\"),\n \"::placeholder\": {\n color: tokens.grayA8,\n },\n \":disabled\": {\n cursor: \"not-allowed\",\n },\n },\n separator: {\n ...boxModel,\n fontSize: tokens.textSm,\n lineHeight: tokens.leadingSm,\n color: tokens.gray9,\n flexShrink: 0,\n userSelect: \"none\",\n ...shorthands.padding(\"0\", \"0.125rem\"), // v1 px-0.5\n },\n popoverContent: {\n ...shorthands.overflow(\"hidden\"),\n },\n content: {\n ...boxModel,\n display: \"flex\",\n flexDirection: \"row\",\n ...shorthands.gap(tokens.spacingGroup1),\n ...shorthands.padding(\"0.75rem\"), // v1 p-3 (0.75rem)\n },\n presets: {\n ...boxModel,\n display: \"flex\",\n flexDirection: \"column\",\n ...shorthands.gap(tokens.spacingElement1),\n width: \"8rem\", // v1 w-32\n borderLeftWidth: \"1px\",\n borderLeftStyle: \"solid\",\n borderLeftColor: tokens.gray6,\n paddingLeft: \"0.75rem\", // v1 pl-3 (0.75rem)\n },\n presetPill: {\n alignSelf: \"flex-start\",\n },\n})\n\nconst RangeInputTrigger = React.forwardRef<\n HTMLDivElement,\n {\n startValue: string\n endValue: string\n startPlaceholder: string\n endPlaceholder: string\n disabled: boolean\n onStartChange: (e: React.ChangeEvent<HTMLInputElement>) => void\n onEndChange: (e: React.ChangeEvent<HTMLInputElement>) => void\n onStartBlur: () => void\n onEndBlur: () => void\n testId?: string\n inputAriaLabel?: string\n /** Ids from DateRangePicker so its visible label can point at and name the inputs (#16). */\n startId?: string\n endId?: string\n labelId?: string\n \"data-slot\"?: string\n } & React.HTMLAttributes<HTMLDivElement>\n>((props, ref) => {\n const {\n startValue,\n endValue,\n startPlaceholder,\n endPlaceholder,\n disabled,\n onStartChange,\n onEndChange,\n onStartBlur,\n onEndBlur,\n testId,\n inputAriaLabel,\n startId,\n endId,\n labelId,\n className,\n \"data-slot\": _dataSlot,\n ...divProps\n } = props\n const styles = useStyles()\n\n return (\n <div\n ref={ref}\n {...divProps}\n className={mergeClasses(styles.triggerRoot, className)}\n data-slot=\"date-range-input\"\n {...{ [SLOT_ATTR]: \"date-range-input\" }}\n >\n <input\n aria-label={inputAriaLabel || \"Start date\"}\n id={startId}\n aria-labelledby={labelId ? `${labelId} ${startId}` : undefined}\n className={styles.input}\n data-slot=\"date-range-start-input\"\n {...{ [SLOT_ATTR]: \"date-range-start-input\" }}\n data-testid={testId ? `${testId}-start` : undefined}\n disabled={disabled}\n onBlur={onStartBlur}\n onChange={onStartChange}\n placeholder={startPlaceholder}\n value={startValue}\n />\n <span\n className={styles.separator}\n data-slot=\"date-range-separator\"\n {...{ [SLOT_ATTR]: \"date-range-separator\" }}\n >\n {\"\\u2013\"}\n </span>\n <input\n aria-label=\"End date\"\n id={endId}\n aria-labelledby={labelId ? `${labelId} ${endId}` : undefined}\n className={styles.input}\n data-slot=\"date-range-end-input\"\n {...{ [SLOT_ATTR]: \"date-range-end-input\" }}\n data-testid={testId ? `${testId}-end` : undefined}\n disabled={disabled}\n onBlur={onEndBlur}\n onChange={onEndChange}\n placeholder={endPlaceholder}\n value={endValue}\n />\n </div>\n )\n})\n\nexport const DateRangePicker = React.forwardRef<\n HTMLDivElement,\n DateRangePickerProps\n>(function DateRangePicker(\n {\n value,\n onChange,\n onBlur,\n disabled = false,\n disablePast = false,\n label,\n error,\n startPlaceholder = \"dd/MM/yyyy\",\n endPlaceholder = \"dd/MM/yyyy\",\n format = DEFAULT_FORMAT,\n locale = \"de\",\n className,\n keyboardIcon,\n inputAriaLabel,\n openPickerAriaLabel = \"Open date picker\",\n previousMonthLabel = \"Previous month\",\n nextMonthLabel = \"Next month\",\n testId,\n currentTimeInTimezone,\n showWeekNumbers = false,\n presets,\n },\n ref\n) {\n const styles = useStyles()\n const [isOpen, setIsOpen] = React.useState(false)\n const [startInputValue, setStartInputValue] = React.useState(() =>\n value.start ? formatDateTimeDisplay(value.start, format, locale) : \"\"\n )\n const [endInputValue, setEndInputValue] = React.useState(() =>\n value.end ? formatDateTimeDisplay(value.end, format, locale) : \"\"\n )\n const [tempRange, setTempRange] = React.useState<DateRange>(value)\n const originalValueRef = React.useRef<DateRange>(value)\n const closeTimerRef = React.useRef<ReturnType<typeof setTimeout> | undefined>(\n undefined\n )\n React.useEffect(\n () => () => {\n if (closeTimerRef.current !== undefined)\n clearTimeout(closeTimerRef.current)\n },\n []\n )\n\n React.useEffect(() => {\n setStartInputValue(\n value.start ? formatDateTimeDisplay(value.start, format, locale) : \"\"\n )\n setEndInputValue(\n value.end ? formatDateTimeDisplay(value.end, format, locale) : \"\"\n )\n setTempRange(value)\n }, [value, format, locale])\n\n React.useEffect(() => {\n if (isOpen) {\n originalValueRef.current = value\n setTempRange(value)\n }\n }, [isOpen, value])\n\n const handleStartInputChange = React.useCallback(\n (e: React.ChangeEvent<HTMLInputElement>) => {\n const newValue = e.target.value\n\n setStartInputValue(newValue)\n\n const parsed = parseDateTimeInput(newValue, format, locale)\n\n if (parsed) {\n const newRange = { ...value, start: parsed }\n\n onChange(newRange)\n }\n },\n [onChange, value, format, locale]\n )\n\n const handleEndInputChange = React.useCallback(\n (e: React.ChangeEvent<HTMLInputElement>) => {\n const newValue = e.target.value\n\n setEndInputValue(newValue)\n\n const parsed = parseDateTimeInput(newValue, format, locale)\n\n if (parsed) {\n const newRange = { ...value, end: parsed }\n\n onChange(newRange)\n }\n },\n [onChange, value, format, locale]\n )\n\n const handleStartInputBlur = React.useCallback(() => {\n const parsed = parseDateTimeInput(startInputValue, format, locale)\n\n if (!parsed) {\n setStartInputValue(\n value.start ? formatDateTimeDisplay(value.start, format, locale) : \"\"\n )\n }\n onBlur?.()\n }, [startInputValue, value.start, format, locale, onBlur])\n\n const handleEndInputBlur = React.useCallback(() => {\n const parsed = parseDateTimeInput(endInputValue, format, locale)\n\n if (!parsed) {\n setEndInputValue(\n value.end ? formatDateTimeDisplay(value.end, format, locale) : \"\"\n )\n }\n onBlur?.()\n }, [endInputValue, value.end, format, locale, onBlur])\n\n const handleRangeChange = React.useCallback(\n (range: DateRange) => {\n setTempRange(range)\n setStartInputValue(\n range.start ? formatDateTimeDisplay(range.start, format, locale) : \"\"\n )\n setEndInputValue(\n range.end ? formatDateTimeDisplay(range.end, format, locale) : \"\"\n )\n },\n [format, locale]\n )\n\n const handleRangeComplete = React.useCallback(\n (range: DateRange) => {\n onChange(range)\n setTempRange(range)\n setStartInputValue(\n range.start ? formatDateTimeDisplay(range.start, format, locale) : \"\"\n )\n setEndInputValue(\n range.end ? formatDateTimeDisplay(range.end, format, locale) : \"\"\n )\n // Small delay to allow the user to see the selection before closing. Tracked and cleared on\n // unmount: an uncleared timer fires into an unmounted tree, which React 18 reports as a\n // state update on an unmounted component and which under jsdom teardown throws\n // `ReferenceError: window is not defined` from the scheduler.\n if (closeTimerRef.current !== undefined)\n clearTimeout(closeTimerRef.current)\n closeTimerRef.current = setTimeout(() => {\n closeTimerRef.current = undefined\n setIsOpen(false)\n }, 150)\n },\n [onChange, format, locale]\n )\n\n const handlePopoverOpenChange = React.useCallback(\n (open: boolean) => {\n if (!open) {\n // If closing without a complete selection, revert\n if (!tempRange.start || !tempRange.end) {\n setTempRange(originalValueRef.current)\n setStartInputValue(\n originalValueRef.current.start\n ? formatDateTimeDisplay(\n originalValueRef.current.start,\n format,\n locale\n )\n : \"\"\n )\n setEndInputValue(\n originalValueRef.current.end\n ? formatDateTimeDisplay(\n originalValueRef.current.end,\n format,\n locale\n )\n : \"\"\n )\n }\n }\n setIsOpen(open)\n },\n [tempRange, format, locale]\n )\n\n const IconComponent = keyboardIcon || <CalendarIcon />\n const fieldVariant = error ? \"destructive\" : \"highlight\"\n // This component renders both the label and the inputs, so it connects them (#16).\n const labelId = React.useId()\n const startId = React.useId()\n const endId = React.useId()\n\n return (\n <Field\n className={mergeClasses(styles.root, className)}\n data-slot=\"daterangepicker\"\n {...{ [SLOT_ATTR]: \"daterangepicker\" }}\n ref={ref}\n variant={fieldVariant}\n >\n {label && (\n <FieldLabel id={labelId} htmlFor={startId}>\n {label}\n </FieldLabel>\n )}\n <Popover modal onOpenChange={handlePopoverOpenChange} open={isOpen}>\n <FieldInputGroup className={styles.inputGroup}>\n {/* RangeInputTrigger is a component rendering a <div>: PopoverTrigger cannot tell,\n since Base UI checks the rendered tag on first mount, so this trigger says so\n itself. The group holds two textboxes, so it drops the role=\"button\" and tab stop\n that brings, as under Radix. */}\n <PopoverPrimitive.Trigger\n nativeButton={false}\n render={\n <RangeInputTrigger\n className={styles.popoverTrigger}\n disabled={disabled}\n endPlaceholder={endPlaceholder}\n endValue={endInputValue}\n inputAriaLabel={inputAriaLabel}\n startId={startId}\n endId={endId}\n labelId={label ? labelId : undefined}\n onEndBlur={handleEndInputBlur}\n onEndChange={handleEndInputChange}\n onStartBlur={handleStartInputBlur}\n onStartChange={handleStartInputChange}\n role={undefined}\n startPlaceholder={startPlaceholder}\n startValue={startInputValue}\n tabIndex={undefined}\n testId={testId}\n />\n }\n />\n <FieldGroupAddon align=\"end\">\n <Button\n aria-label={openPickerAriaLabel}\n disabled={disabled}\n onClick={() => setIsOpen(true)}\n className={styles.addonButton}\n size=\"icon-sm\"\n variant=\"tertiary\"\n >\n {IconComponent}\n </Button>\n </FieldGroupAddon>\n </FieldInputGroup>\n <PopoverContent\n align=\"start\"\n className={styles.popoverContent}\n flush\n side=\"bottom\"\n sideOffset={4}\n >\n <div\n className={styles.content}\n data-slot=\"daterangepicker-content\"\n {...{ [SLOT_ATTR]: \"daterangepicker-content\" }}\n >\n <RangeCalendar\n currentTimeInTimezone={currentTimeInTimezone}\n disablePast={disablePast}\n locale={locale}\n nextMonthLabel={nextMonthLabel}\n onChange={handleRangeChange}\n onRangeComplete={handleRangeComplete}\n previousMonthLabel={previousMonthLabel}\n showWeekNumbers={showWeekNumbers}\n value={tempRange}\n />\n {presets && presets.length > 0 && (\n <aside\n className={styles.presets}\n data-slot=\"daterangepicker-presets\"\n {...{ [SLOT_ATTR]: \"daterangepicker-presets\" }}\n >\n {presets.map((preset) => (\n <Pill\n className={styles.presetPill}\n data-slot=\"daterangepicker-preset\"\n {...{ [SLOT_ATTR]: \"daterangepicker-preset\" }}\n key={preset.label}\n onClick={() => {\n const range = preset.getValue()\n\n handleRangeComplete(range)\n }}\n variant=\"surface\"\n >\n {preset.label}\n </Pill>\n ))}\n </aside>\n )}\n </div>\n </PopoverContent>\n </Popover>\n {error && <FieldError>{error}</FieldError>}\n </Field>\n )\n})\n\nexport { RangeCalendar }\nexport type { RangeCalendarProps, DateRange, DateTimePickerLocale }\n"],"names":["CalendarIcon","props","jsx","DEFAULT_FORMAT","useStyles","makeZenithStyles","boxModel","shorthands","tokens.spacingElement2","nativeControl","tokens.textSm","tokens.leadingSm","tokens.grayA12","tokens.grayA8","tokens.gray9","tokens.spacingGroup1","tokens.spacingElement1","tokens.gray6","RangeInputTrigger","React","ref","startValue","endValue","startPlaceholder","endPlaceholder","disabled","onStartChange","onEndChange","onStartBlur","onEndBlur","testId","inputAriaLabel","startId","endId","labelId","className","_dataSlot","divProps","styles","jsxs","mergeClasses","SLOT_ATTR","DateRangePicker","value","onChange","onBlur","disablePast","label","error","format","locale","keyboardIcon","openPickerAriaLabel","previousMonthLabel","nextMonthLabel","currentTimeInTimezone","showWeekNumbers","presets","isOpen","setIsOpen","startInputValue","setStartInputValue","formatDateTimeDisplay","endInputValue","setEndInputValue","tempRange","setTempRange","originalValueRef","closeTimerRef","handleStartInputChange","e","newValue","parsed","parseDateTimeInput","newRange","handleEndInputChange","handleStartInputBlur","handleEndInputBlur","handleRangeChange","range","handleRangeComplete","handlePopoverOpenChange","open","IconComponent","fieldVariant","Field","FieldLabel","Popover","FieldInputGroup","PopoverPrimitive","FieldGroupAddon","Button","PopoverContent","RangeCalendar","preset","createElement","Pill","FieldError"],"mappings":"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"}
1
+ {"version":3,"file":"date-range-picker.js","sources":["../../../src/components/date-range-picker/date-range-picker.tsx"],"sourcesContent":["import * as React from \"react\"\nimport { Popover as PopoverPrimitive } from \"@base-ui/react/popover\"\nimport { mergeClasses, shorthands } from \"@epilot/zenith-runtime/v1\"\n\nimport {\n Field,\n FieldLabel,\n FieldError,\n FieldInputGroup,\n FieldGroupAddon,\n} from \"../field/field\"\nimport { Button } from \"../button/button\"\nimport { Pill } from \"../pill/pill\"\nimport { Popover, PopoverContent } from \"../popover/popover\"\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\nimport { RangeCalendar } from \"./range-calendar\"\nimport type { RangeCalendarProps } from \"./range-calendar\"\nimport type { DateRange, DateTimePickerLocale } from \"./date-range-picker-utils\"\nimport {\n formatDateTimeDisplay,\n parseDateTimeInput,\n} from \"./date-range-picker-utils\"\n\nconst CalendarIcon = (props: React.SVGProps<SVGSVGElement>) => (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n height=\"18px\"\n viewBox=\"0 -960 960 960\"\n width=\"18px\"\n fill=\"currentColor\"\n {...props}\n >\n <path d=\"M200-80q-33 0-56.5-23.5T120-160v-560q0-33 23.5-56.5T200-800h40v-80h80v80h320v-80h80v80h40q33 0 56.5 23.5T840-720v560q0 33-23.5 56.5T760-80H200Zm0-80h560v-400H200v400Zm0-480h560v-80H200v80Zm0 0v-80 80Zm280 240q-17 0-28.5-11.5T440-440q0-17 11.5-28.5T480-480q17 0 28.5 11.5T520-440q0 17-11.5 28.5T480-400Zm-160 0q-17 0-28.5-11.5T280-440q0-17 11.5-28.5T320-480q17 0 28.5 11.5T360-440q0 17-11.5 28.5T320-400Zm320 0q-17 0-28.5-11.5T600-440q0-17 11.5-28.5T640-480q17 0 28.5 11.5T680-440q0 17-11.5 28.5T640-400ZM480-240q-17 0-28.5-11.5T440-280q0-17 11.5-28.5T480-320q17 0 28.5 11.5T520-280q0 17-11.5 28.5T480-240Zm-160 0q-17 0-28.5-11.5T280-280q0-17 11.5-28.5T320-320q17 0 28.5 11.5T360-280q0 17-11.5 28.5T320-240Zm320 0q-17 0-28.5-11.5T600-280q0-17 11.5-28.5T640-320q17 0 28.5 11.5T680-280q0 17-11.5 28.5T640-240Z\" />\n </svg>\n)\n\nconst DEFAULT_FORMAT = \"dd/MM/yyyy\"\n\nexport type DateRangePreset = {\n label: string\n getValue: () => DateRange\n}\n\nexport type DateRangePickerProps = {\n value: DateRange\n onChange: (range: DateRange) => void\n onBlur?: () => void\n disabled?: boolean\n disablePast?: boolean\n label?: string\n error?: string\n startPlaceholder?: string\n endPlaceholder?: string\n format?: string\n locale?: DateTimePickerLocale\n className?: string\n keyboardIcon?: React.ReactNode\n inputAriaLabel?: string\n openPickerAriaLabel?: string\n previousMonthLabel?: string\n nextMonthLabel?: string\n testId?: string\n currentTimeInTimezone?: Date\n showWeekNumbers?: boolean\n presets?: DateRangePreset[]\n}\n\nconst useStyles = makeZenithStyles({\n root: {\n ...boxModel,\n width: \"100%\",\n },\n inputGroup: {\n ...boxModel,\n width: \"100%\",\n },\n /**\n * Reproduces a v1 defect on purpose, the same way Label's line-height is reproduced: v1's `icon-\n * sm` size classes do not reach this button, so v1 renders it content-sized at 18x18 around an\n * unconstrained 18px icon rather than the 28x28-with-14px-icon that `icon-sm` specifies.\n */\n addonButton: {\n ...boxModel,\n width: \"auto\",\n height: \"auto\",\n \"& svg\": { width: \"auto\", height: \"auto\" },\n },\n popoverTrigger: {\n flexGrow: 1,\n flexShrink: 1,\n flexBasis: \"0%\",\n },\n triggerRoot: {\n ...boxModel,\n display: \"flex\",\n alignItems: \"center\",\n ...shorthands.gap(tokens.spacingElement2),\n flexGrow: 1,\n flexShrink: 1,\n flexBasis: \"0%\",\n height: \"1.5rem\",\n cursor: \"pointer\",\n },\n input: {\n ...nativeControl,\n width: \"5.5rem\",\n outlineStyle: \"none\",\n fontSize: tokens.textSm,\n lineHeight: tokens.leadingSm,\n color: tokens.grayA12,\n backgroundColor: \"transparent\",\n textAlign: \"center\",\n ...shorthands.border(\"0\"),\n ...shorthands.padding(\"0\"),\n \"::placeholder\": {\n color: tokens.grayA8,\n },\n \":disabled\": {\n cursor: \"not-allowed\",\n },\n },\n separator: {\n ...boxModel,\n fontSize: tokens.textSm,\n lineHeight: tokens.leadingSm,\n color: tokens.gray9,\n flexShrink: 0,\n userSelect: \"none\",\n ...shorthands.padding(\"0\", \"0.125rem\"), // v1 px-0.5\n },\n popoverContent: {\n ...shorthands.overflow(\"hidden\"),\n },\n content: {\n ...boxModel,\n display: \"flex\",\n flexDirection: \"row\",\n ...shorthands.gap(tokens.spacingGroup1),\n ...shorthands.padding(\"0.75rem\"), // v1 p-3 (0.75rem)\n },\n presets: {\n ...boxModel,\n display: \"flex\",\n flexDirection: \"column\",\n ...shorthands.gap(tokens.spacingElement1),\n width: \"8rem\", // v1 w-32\n borderLeftWidth: \"1px\",\n borderLeftStyle: \"solid\",\n borderLeftColor: tokens.gray6,\n paddingLeft: \"0.75rem\", // v1 pl-3 (0.75rem)\n },\n presetPill: {\n alignSelf: \"flex-start\",\n },\n})\n\nconst RangeInputTrigger = React.forwardRef<\n HTMLDivElement,\n {\n startValue: string\n endValue: string\n startPlaceholder: string\n endPlaceholder: string\n disabled: boolean\n onStartChange: (e: React.ChangeEvent<HTMLInputElement>) => void\n onEndChange: (e: React.ChangeEvent<HTMLInputElement>) => void\n onStartBlur: () => void\n onEndBlur: () => void\n testId?: string\n inputAriaLabel?: string\n /** Ids from DateRangePicker so its visible label can point at and name the inputs (#16). */\n startId?: string\n endId?: string\n labelId?: string\n \"data-slot\"?: string\n } & React.HTMLAttributes<HTMLDivElement>\n>((props, ref) => {\n const {\n startValue,\n endValue,\n startPlaceholder,\n endPlaceholder,\n disabled,\n onStartChange,\n onEndChange,\n onStartBlur,\n onEndBlur,\n testId,\n inputAriaLabel,\n startId,\n endId,\n labelId,\n className,\n \"data-slot\": _dataSlot,\n ...divProps\n } = props\n const styles = useStyles()\n\n return (\n <div\n ref={ref}\n {...divProps}\n className={mergeClasses(styles.triggerRoot, className)}\n data-slot=\"date-range-input\"\n {...{ [SLOT_ATTR]: \"date-range-input\" }}\n >\n <input\n aria-label={inputAriaLabel || \"Start date\"}\n id={startId}\n aria-labelledby={labelId ? `${labelId} ${startId}` : undefined}\n className={styles.input}\n data-slot=\"date-range-start-input\"\n {...{ [SLOT_ATTR]: \"date-range-start-input\" }}\n data-testid={testId ? `${testId}-start` : undefined}\n disabled={disabled}\n onBlur={onStartBlur}\n onChange={onStartChange}\n placeholder={startPlaceholder}\n value={startValue}\n />\n <span\n className={styles.separator}\n data-slot=\"date-range-separator\"\n {...{ [SLOT_ATTR]: \"date-range-separator\" }}\n >\n {\"\\u2013\"}\n </span>\n <input\n aria-label=\"End date\"\n id={endId}\n aria-labelledby={labelId ? `${labelId} ${endId}` : undefined}\n className={styles.input}\n data-slot=\"date-range-end-input\"\n {...{ [SLOT_ATTR]: \"date-range-end-input\" }}\n data-testid={testId ? `${testId}-end` : undefined}\n disabled={disabled}\n onBlur={onEndBlur}\n onChange={onEndChange}\n placeholder={endPlaceholder}\n value={endValue}\n />\n </div>\n )\n})\n\nexport const DateRangePicker = React.forwardRef<\n HTMLDivElement,\n DateRangePickerProps\n>(function DateRangePicker(\n {\n value,\n onChange,\n onBlur,\n disabled = false,\n disablePast = false,\n label,\n error,\n startPlaceholder = \"dd/MM/yyyy\",\n endPlaceholder = \"dd/MM/yyyy\",\n format = DEFAULT_FORMAT,\n locale = \"de\",\n className,\n keyboardIcon,\n inputAriaLabel,\n openPickerAriaLabel = \"Open date picker\",\n previousMonthLabel = \"Previous month\",\n nextMonthLabel = \"Next month\",\n testId,\n currentTimeInTimezone,\n showWeekNumbers = false,\n presets,\n },\n ref\n) {\n const styles = useStyles()\n const [isOpen, setIsOpen] = React.useState(false)\n const [startInputValue, setStartInputValue] = React.useState(() =>\n value.start ? formatDateTimeDisplay(value.start, format, locale) : \"\"\n )\n const [endInputValue, setEndInputValue] = React.useState(() =>\n value.end ? formatDateTimeDisplay(value.end, format, locale) : \"\"\n )\n const [tempRange, setTempRange] = React.useState<DateRange>(value)\n const originalValueRef = React.useRef<DateRange>(value)\n const closeTimerRef = React.useRef<ReturnType<typeof setTimeout> | undefined>(\n undefined\n )\n React.useEffect(\n () => () => {\n if (closeTimerRef.current !== undefined)\n clearTimeout(closeTimerRef.current)\n },\n []\n )\n\n React.useEffect(() => {\n setStartInputValue(\n value.start ? formatDateTimeDisplay(value.start, format, locale) : \"\"\n )\n setEndInputValue(\n value.end ? formatDateTimeDisplay(value.end, format, locale) : \"\"\n )\n setTempRange(value)\n }, [value, format, locale])\n\n React.useEffect(() => {\n if (isOpen) {\n originalValueRef.current = value\n setTempRange(value)\n }\n }, [isOpen, value])\n\n const handleStartInputChange = React.useCallback(\n (e: React.ChangeEvent<HTMLInputElement>) => {\n const newValue = e.target.value\n\n setStartInputValue(newValue)\n\n const parsed = parseDateTimeInput(newValue, format, locale)\n\n if (parsed) {\n const newRange = { ...value, start: parsed }\n\n onChange(newRange)\n }\n },\n [onChange, value, format, locale]\n )\n\n const handleEndInputChange = React.useCallback(\n (e: React.ChangeEvent<HTMLInputElement>) => {\n const newValue = e.target.value\n\n setEndInputValue(newValue)\n\n const parsed = parseDateTimeInput(newValue, format, locale)\n\n if (parsed) {\n const newRange = { ...value, end: parsed }\n\n onChange(newRange)\n }\n },\n [onChange, value, format, locale]\n )\n\n const handleStartInputBlur = React.useCallback(() => {\n const parsed = parseDateTimeInput(startInputValue, format, locale)\n\n if (!parsed) {\n setStartInputValue(\n value.start ? formatDateTimeDisplay(value.start, format, locale) : \"\"\n )\n }\n onBlur?.()\n }, [startInputValue, value.start, format, locale, onBlur])\n\n const handleEndInputBlur = React.useCallback(() => {\n const parsed = parseDateTimeInput(endInputValue, format, locale)\n\n if (!parsed) {\n setEndInputValue(\n value.end ? formatDateTimeDisplay(value.end, format, locale) : \"\"\n )\n }\n onBlur?.()\n }, [endInputValue, value.end, format, locale, onBlur])\n\n const handleRangeChange = React.useCallback(\n (range: DateRange) => {\n setTempRange(range)\n setStartInputValue(\n range.start ? formatDateTimeDisplay(range.start, format, locale) : \"\"\n )\n setEndInputValue(\n range.end ? formatDateTimeDisplay(range.end, format, locale) : \"\"\n )\n },\n [format, locale]\n )\n\n const handleRangeComplete = React.useCallback(\n (range: DateRange) => {\n onChange(range)\n setTempRange(range)\n setStartInputValue(\n range.start ? formatDateTimeDisplay(range.start, format, locale) : \"\"\n )\n setEndInputValue(\n range.end ? formatDateTimeDisplay(range.end, format, locale) : \"\"\n )\n // Small delay to allow the user to see the selection before closing. Tracked and cleared on\n // unmount: an uncleared timer fires into an unmounted tree, which React 18 reports as a\n // state update on an unmounted component and which under jsdom teardown throws\n // `ReferenceError: window is not defined` from the scheduler.\n if (closeTimerRef.current !== undefined)\n clearTimeout(closeTimerRef.current)\n closeTimerRef.current = setTimeout(() => {\n closeTimerRef.current = undefined\n setIsOpen(false)\n }, 150)\n },\n [onChange, format, locale]\n )\n\n const handlePopoverOpenChange = React.useCallback(\n (open: boolean) => {\n if (!open) {\n // If closing without a complete selection, revert\n if (!tempRange.start || !tempRange.end) {\n setTempRange(originalValueRef.current)\n setStartInputValue(\n originalValueRef.current.start\n ? formatDateTimeDisplay(\n originalValueRef.current.start,\n format,\n locale\n )\n : \"\"\n )\n setEndInputValue(\n originalValueRef.current.end\n ? formatDateTimeDisplay(\n originalValueRef.current.end,\n format,\n locale\n )\n : \"\"\n )\n }\n }\n setIsOpen(open)\n },\n [tempRange, format, locale]\n )\n\n const IconComponent = keyboardIcon || <CalendarIcon />\n const fieldVariant = error ? \"destructive\" : \"highlight\"\n // This component renders both the label and the inputs, so it connects them (#16).\n const labelId = React.useId()\n const startId = React.useId()\n const endId = React.useId()\n\n return (\n <Field\n className={mergeClasses(styles.root, className)}\n data-slot=\"daterangepicker\"\n {...{ [SLOT_ATTR]: \"daterangepicker\" }}\n ref={ref}\n variant={fieldVariant}\n >\n {label && (\n <FieldLabel id={labelId} htmlFor={startId}>\n {label}\n </FieldLabel>\n )}\n <Popover modal onOpenChange={handlePopoverOpenChange} open={isOpen}>\n <FieldInputGroup className={styles.inputGroup}>\n {/* RangeInputTrigger is a component rendering a <div>: PopoverTrigger cannot tell,\n since Base UI checks the rendered tag on first mount, so this trigger says so\n itself. The group holds two textboxes, so it drops the role=\"button\" and tab stop\n that brings, as under Radix. */}\n <PopoverPrimitive.Trigger\n nativeButton={false}\n render={\n <RangeInputTrigger\n className={styles.popoverTrigger}\n disabled={disabled}\n endPlaceholder={endPlaceholder}\n endValue={endInputValue}\n inputAriaLabel={inputAriaLabel}\n startId={startId}\n endId={endId}\n labelId={label ? labelId : undefined}\n onEndBlur={handleEndInputBlur}\n onEndChange={handleEndInputChange}\n onStartBlur={handleStartInputBlur}\n onStartChange={handleStartInputChange}\n role={undefined}\n startPlaceholder={startPlaceholder}\n startValue={startInputValue}\n tabIndex={undefined}\n testId={testId}\n />\n }\n />\n <FieldGroupAddon align=\"end\">\n <Button\n aria-label={openPickerAriaLabel}\n disabled={disabled}\n onClick={() => setIsOpen(true)}\n className={styles.addonButton}\n size=\"icon-sm\"\n variant=\"tertiary\"\n >\n {IconComponent}\n </Button>\n </FieldGroupAddon>\n </FieldInputGroup>\n <PopoverContent\n align=\"start\"\n className={styles.popoverContent}\n flush\n side=\"bottom\"\n sideOffset={4}\n >\n <div\n className={styles.content}\n data-slot=\"daterangepicker-content\"\n {...{ [SLOT_ATTR]: \"daterangepicker-content\" }}\n >\n <RangeCalendar\n currentTimeInTimezone={currentTimeInTimezone}\n disablePast={disablePast}\n locale={locale}\n nextMonthLabel={nextMonthLabel}\n onChange={handleRangeChange}\n onRangeComplete={handleRangeComplete}\n previousMonthLabel={previousMonthLabel}\n showWeekNumbers={showWeekNumbers}\n value={tempRange}\n />\n {presets && presets.length > 0 && (\n <aside\n className={styles.presets}\n data-slot=\"daterangepicker-presets\"\n {...{ [SLOT_ATTR]: \"daterangepicker-presets\" }}\n >\n {presets.map((preset) => (\n <Pill\n className={styles.presetPill}\n data-slot=\"daterangepicker-preset\"\n {...{ [SLOT_ATTR]: \"daterangepicker-preset\" }}\n key={preset.label}\n onClick={() => {\n const range = preset.getValue()\n\n handleRangeComplete(range)\n }}\n variant=\"surface\"\n >\n {preset.label}\n </Pill>\n ))}\n </aside>\n )}\n </div>\n </PopoverContent>\n </Popover>\n {error && <FieldError>{error}</FieldError>}\n </Field>\n )\n})\n\nexport { RangeCalendar }\nexport type { RangeCalendarProps, DateRange, DateTimePickerLocale }\n"],"names":["CalendarIcon","props","jsx","DEFAULT_FORMAT","useStyles","makeZenithStyles","boxModel","shorthands","tokens.spacingElement2","nativeControl","tokens.textSm","tokens.leadingSm","tokens.grayA12","tokens.grayA8","tokens.gray9","tokens.spacingGroup1","tokens.spacingElement1","tokens.gray6","RangeInputTrigger","React","ref","startValue","endValue","startPlaceholder","endPlaceholder","disabled","onStartChange","onEndChange","onStartBlur","onEndBlur","testId","inputAriaLabel","startId","endId","labelId","className","_dataSlot","divProps","styles","jsxs","mergeClasses","SLOT_ATTR","DateRangePicker","value","onChange","onBlur","disablePast","label","error","format","locale","keyboardIcon","openPickerAriaLabel","previousMonthLabel","nextMonthLabel","currentTimeInTimezone","showWeekNumbers","presets","isOpen","setIsOpen","startInputValue","setStartInputValue","formatDateTimeDisplay","endInputValue","setEndInputValue","tempRange","setTempRange","originalValueRef","closeTimerRef","handleStartInputChange","e","newValue","parsed","parseDateTimeInput","newRange","handleEndInputChange","handleStartInputBlur","handleEndInputBlur","handleRangeChange","range","handleRangeComplete","handlePopoverOpenChange","open","IconComponent","fieldVariant","Field","FieldLabel","Popover","FieldInputGroup","PopoverPrimitive","FieldGroupAddon","Button","PopoverContent","RangeCalendar","preset","createElement","Pill","FieldError"],"mappings":"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"}
@@ -1,6 +1,6 @@
1
1
  import { jsxs as B, jsx as l } from "react/jsx-runtime";
2
2
  import * as e from "react";
3
- import { SLOT_ATTR as m, mergeClasses as L, shorthands as z } from "@epilot/zenith-runtime/v1/core.js";
3
+ import { SLOT_ATTR as m, mergeClasses as L, shorthands as z } from "@epilot/zenith-runtime/v1";
4
4
  import { Calendar as H } from "../date-time-picker/calendar.js";
5
5
  import { makeZenithStyles as A } from "../../styles/make-styles.js";
6
6
  import { boxModel as T } from "../../styles/host-reset.js";
@@ -1 +1 @@
1
- {"version":3,"file":"range-calendar.js","sources":["../../../src/components/date-range-picker/range-calendar.tsx"],"sourcesContent":["import * as React from \"react\"\nimport { addMonths, subMonths, startOfDay } from \"date-fns\"\nimport { mergeClasses, shorthands } from \"@epilot/zenith-runtime/v1/core\"\n\nimport { Calendar } from \"../date-time-picker/calendar\"\nimport { SLOT_ATTR } from \"../../renderer/contract\"\nimport { makeZenithStyles } from \"../../styles/make-styles\"\nimport { boxModel } from \"../../styles/host-reset\"\nimport * as tokens from \"../../tokens\"\n\nimport type { DateRange, DateTimePickerLocale } from \"./date-range-picker-utils\"\nimport { normalizeRange } from \"./date-range-picker-utils\"\n\ntype SelectionPhase = \"idle\" | \"selectingEnd\"\n\nexport type RangeCalendarProps = {\n value: DateRange\n onChange: (range: DateRange) => void\n onRangeComplete?: (range: DateRange) => void\n disablePast?: boolean\n locale?: DateTimePickerLocale\n previousMonthLabel?: string\n nextMonthLabel?: string\n currentTimeInTimezone?: Date\n showWeekNumbers?: boolean\n className?: string\n}\n\nconst useStyles = makeZenithStyles({\n root: {\n display: \"flex\",\n flexDirection: \"row\",\n ...shorthands.gap(tokens.spacingLayout1), // v1 gap-6 (1.5rem)\n },\n panel: {\n ...boxModel,\n width: \"280px\",\n flexShrink: 0,\n },\n})\n\nexport const RangeCalendar = React.forwardRef<\n HTMLDivElement,\n RangeCalendarProps\n>(function RangeCalendar(\n {\n value,\n onChange,\n onRangeComplete,\n disablePast = false,\n locale = \"de\",\n previousMonthLabel = \"Previous month\",\n nextMonthLabel = \"Next month\",\n currentTimeInTimezone,\n showWeekNumbers = false,\n className,\n },\n ref\n) {\n const styles = useStyles()\n const [leftViewDate, setLeftViewDate] = React.useState(() => {\n if (value.start) return startOfDay(value.start)\n\n return startOfDay(new Date())\n })\n\n const [selectionPhase, setSelectionPhase] =\n React.useState<SelectionPhase>(\"idle\")\n const [rangeStart, setRangeStart] = React.useState<Date | null>(value.start)\n const [rangeEnd, setRangeEnd] = React.useState<Date | null>(value.end)\n const [hoveredDate, setHoveredDate] = React.useState<Date | null>(null)\n\n React.useEffect(() => {\n if (selectionPhase === \"idle\") {\n setRangeStart(value.start)\n setRangeEnd(value.end)\n }\n }, [value.start, value.end, selectionPhase])\n\n const rightViewDate = React.useMemo(\n () => addMonths(leftViewDate, 1),\n [leftViewDate]\n )\n\n // Shared day click handler (range state machine)\n const handleDayClick = React.useCallback(\n (day: Date) => {\n if (selectionPhase === \"idle\") {\n setRangeStart(day)\n setRangeEnd(null)\n setSelectionPhase(\"selectingEnd\")\n onChange({ start: day, end: null })\n } else {\n const normalized = normalizeRange(rangeStart!, day)\n\n setRangeStart(normalized.start)\n setRangeEnd(normalized.end)\n setSelectionPhase(\"idle\")\n setHoveredDate(null)\n onChange(normalized)\n onRangeComplete?.(normalized)\n }\n },\n [selectionPhase, rangeStart, onChange, onRangeComplete]\n )\n\n // Shared hover handler\n const handleDayHover = React.useCallback(\n (day: Date | null) => {\n if (selectionPhase === \"selectingEnd\") {\n setHoveredDate(day)\n }\n },\n [selectionPhase]\n )\n\n // Left panel navigation\n const handleLeftViewDateChange = React.useCallback((date: Date) => {\n setLeftViewDate(date)\n }, [])\n\n // Right panel navigation: when the right panel moves, shift leftViewDate accordingly\n const handleRightViewDateChange = React.useCallback((date: Date) => {\n // Right panel changed its viewDate, so left should be one month before\n setLeftViewDate(subMonths(date, 1))\n }, [])\n\n // Dummy value for Calendar (required prop but unused in range mode)\n const dummyDate = React.useMemo(\n () => value.start || new Date(),\n [value.start]\n )\n\n return (\n <div\n className={mergeClasses(styles.root, className)}\n data-slot=\"range-calendar\"\n {...{ [SLOT_ATTR]: \"range-calendar\" }}\n ref={ref}\n >\n {/* Left panel */}\n <div\n className={styles.panel}\n data-slot=\"range-calendar-panel\"\n {...{ [SLOT_ATTR]: \"range-calendar-panel\" }}\n >\n <Calendar\n controlledViewDate={leftViewDate}\n currentTimeInTimezone={currentTimeInTimezone}\n disablePast={disablePast}\n hideOutOfMonthDays\n hoveredDate={hoveredDate}\n locale={locale}\n nextMonthLabel={nextMonthLabel}\n onChange={() => {}}\n onDayClick={handleDayClick}\n onDayHover={handleDayHover}\n onViewDateChange={handleLeftViewDateChange}\n previousMonthLabel={previousMonthLabel}\n rangeEnd={rangeEnd}\n rangeStart={rangeStart}\n showNextButton={false}\n showWeekNumbers={showWeekNumbers}\n value={dummyDate}\n />\n </div>\n\n {/* Right panel */}\n <div\n className={styles.panel}\n data-slot=\"range-calendar-panel\"\n {...{ [SLOT_ATTR]: \"range-calendar-panel\" }}\n >\n <Calendar\n controlledViewDate={rightViewDate}\n currentTimeInTimezone={currentTimeInTimezone}\n disablePast={disablePast}\n hideOutOfMonthDays\n hoveredDate={hoveredDate}\n locale={locale}\n nextMonthLabel={nextMonthLabel}\n onChange={() => {}}\n onDayClick={handleDayClick}\n onDayHover={handleDayHover}\n onViewDateChange={handleRightViewDateChange}\n previousMonthLabel={previousMonthLabel}\n rangeEnd={rangeEnd}\n rangeStart={rangeStart}\n showPreviousButton={false}\n showWeekNumbers={showWeekNumbers}\n value={dummyDate}\n />\n </div>\n </div>\n )\n})\n"],"names":["useStyles","makeZenithStyles","shorthands","tokens.spacingLayout1","boxModel","RangeCalendar","React","value","onChange","onRangeComplete","disablePast","locale","previousMonthLabel","nextMonthLabel","currentTimeInTimezone","showWeekNumbers","className","ref","styles","leftViewDate","setLeftViewDate","startOfDay","selectionPhase","setSelectionPhase","rangeStart","setRangeStart","rangeEnd","setRangeEnd","hoveredDate","setHoveredDate","rightViewDate","addMonths","handleDayClick","day","normalized","normalizeRange","handleDayHover","handleLeftViewDateChange","date","handleRightViewDateChange","subMonths","dummyDate","jsxs","mergeClasses","SLOT_ATTR","jsx","Calendar"],"mappings":"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"}
1
+ {"version":3,"file":"range-calendar.js","sources":["../../../src/components/date-range-picker/range-calendar.tsx"],"sourcesContent":["import * as React from \"react\"\nimport { addMonths, subMonths, startOfDay } from \"date-fns\"\nimport { mergeClasses, shorthands } from \"@epilot/zenith-runtime/v1\"\n\nimport { Calendar } from \"../date-time-picker/calendar\"\nimport { SLOT_ATTR } from \"../../renderer/contract\"\nimport { makeZenithStyles } from \"../../styles/make-styles\"\nimport { boxModel } from \"../../styles/host-reset\"\nimport * as tokens from \"../../tokens\"\n\nimport type { DateRange, DateTimePickerLocale } from \"./date-range-picker-utils\"\nimport { normalizeRange } from \"./date-range-picker-utils\"\n\ntype SelectionPhase = \"idle\" | \"selectingEnd\"\n\nexport type RangeCalendarProps = {\n value: DateRange\n onChange: (range: DateRange) => void\n onRangeComplete?: (range: DateRange) => void\n disablePast?: boolean\n locale?: DateTimePickerLocale\n previousMonthLabel?: string\n nextMonthLabel?: string\n currentTimeInTimezone?: Date\n showWeekNumbers?: boolean\n className?: string\n}\n\nconst useStyles = makeZenithStyles({\n root: {\n display: \"flex\",\n flexDirection: \"row\",\n ...shorthands.gap(tokens.spacingLayout1), // v1 gap-6 (1.5rem)\n },\n panel: {\n ...boxModel,\n width: \"280px\",\n flexShrink: 0,\n },\n})\n\nexport const RangeCalendar = React.forwardRef<\n HTMLDivElement,\n RangeCalendarProps\n>(function RangeCalendar(\n {\n value,\n onChange,\n onRangeComplete,\n disablePast = false,\n locale = \"de\",\n previousMonthLabel = \"Previous month\",\n nextMonthLabel = \"Next month\",\n currentTimeInTimezone,\n showWeekNumbers = false,\n className,\n },\n ref\n) {\n const styles = useStyles()\n const [leftViewDate, setLeftViewDate] = React.useState(() => {\n if (value.start) return startOfDay(value.start)\n\n return startOfDay(new Date())\n })\n\n const [selectionPhase, setSelectionPhase] =\n React.useState<SelectionPhase>(\"idle\")\n const [rangeStart, setRangeStart] = React.useState<Date | null>(value.start)\n const [rangeEnd, setRangeEnd] = React.useState<Date | null>(value.end)\n const [hoveredDate, setHoveredDate] = React.useState<Date | null>(null)\n\n React.useEffect(() => {\n if (selectionPhase === \"idle\") {\n setRangeStart(value.start)\n setRangeEnd(value.end)\n }\n }, [value.start, value.end, selectionPhase])\n\n const rightViewDate = React.useMemo(\n () => addMonths(leftViewDate, 1),\n [leftViewDate]\n )\n\n // Shared day click handler (range state machine)\n const handleDayClick = React.useCallback(\n (day: Date) => {\n if (selectionPhase === \"idle\") {\n setRangeStart(day)\n setRangeEnd(null)\n setSelectionPhase(\"selectingEnd\")\n onChange({ start: day, end: null })\n } else {\n const normalized = normalizeRange(rangeStart!, day)\n\n setRangeStart(normalized.start)\n setRangeEnd(normalized.end)\n setSelectionPhase(\"idle\")\n setHoveredDate(null)\n onChange(normalized)\n onRangeComplete?.(normalized)\n }\n },\n [selectionPhase, rangeStart, onChange, onRangeComplete]\n )\n\n // Shared hover handler\n const handleDayHover = React.useCallback(\n (day: Date | null) => {\n if (selectionPhase === \"selectingEnd\") {\n setHoveredDate(day)\n }\n },\n [selectionPhase]\n )\n\n // Left panel navigation\n const handleLeftViewDateChange = React.useCallback((date: Date) => {\n setLeftViewDate(date)\n }, [])\n\n // Right panel navigation: when the right panel moves, shift leftViewDate accordingly\n const handleRightViewDateChange = React.useCallback((date: Date) => {\n // Right panel changed its viewDate, so left should be one month before\n setLeftViewDate(subMonths(date, 1))\n }, [])\n\n // Dummy value for Calendar (required prop but unused in range mode)\n const dummyDate = React.useMemo(\n () => value.start || new Date(),\n [value.start]\n )\n\n return (\n <div\n className={mergeClasses(styles.root, className)}\n data-slot=\"range-calendar\"\n {...{ [SLOT_ATTR]: \"range-calendar\" }}\n ref={ref}\n >\n {/* Left panel */}\n <div\n className={styles.panel}\n data-slot=\"range-calendar-panel\"\n {...{ [SLOT_ATTR]: \"range-calendar-panel\" }}\n >\n <Calendar\n controlledViewDate={leftViewDate}\n currentTimeInTimezone={currentTimeInTimezone}\n disablePast={disablePast}\n hideOutOfMonthDays\n hoveredDate={hoveredDate}\n locale={locale}\n nextMonthLabel={nextMonthLabel}\n onChange={() => {}}\n onDayClick={handleDayClick}\n onDayHover={handleDayHover}\n onViewDateChange={handleLeftViewDateChange}\n previousMonthLabel={previousMonthLabel}\n rangeEnd={rangeEnd}\n rangeStart={rangeStart}\n showNextButton={false}\n showWeekNumbers={showWeekNumbers}\n value={dummyDate}\n />\n </div>\n\n {/* Right panel */}\n <div\n className={styles.panel}\n data-slot=\"range-calendar-panel\"\n {...{ [SLOT_ATTR]: \"range-calendar-panel\" }}\n >\n <Calendar\n controlledViewDate={rightViewDate}\n currentTimeInTimezone={currentTimeInTimezone}\n disablePast={disablePast}\n hideOutOfMonthDays\n hoveredDate={hoveredDate}\n locale={locale}\n nextMonthLabel={nextMonthLabel}\n onChange={() => {}}\n onDayClick={handleDayClick}\n onDayHover={handleDayHover}\n onViewDateChange={handleRightViewDateChange}\n previousMonthLabel={previousMonthLabel}\n rangeEnd={rangeEnd}\n rangeStart={rangeStart}\n showPreviousButton={false}\n showWeekNumbers={showWeekNumbers}\n value={dummyDate}\n />\n </div>\n </div>\n )\n})\n"],"names":["useStyles","makeZenithStyles","shorthands","tokens.spacingLayout1","boxModel","RangeCalendar","React","value","onChange","onRangeComplete","disablePast","locale","previousMonthLabel","nextMonthLabel","currentTimeInTimezone","showWeekNumbers","className","ref","styles","leftViewDate","setLeftViewDate","startOfDay","selectionPhase","setSelectionPhase","rangeStart","setRangeStart","rangeEnd","setRangeEnd","hoveredDate","setHoveredDate","rightViewDate","addMonths","handleDayClick","day","normalized","normalizeRange","handleDayHover","handleLeftViewDateChange","date","handleRightViewDateChange","subMonths","dummyDate","jsxs","mergeClasses","SLOT_ATTR","jsx","Calendar"],"mappings":"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"}
@@ -1,7 +1,7 @@
1
1
  import { jsxs as b, jsx as n, Fragment as ue } from "react/jsx-runtime";
2
2
  import * as d from "react";
3
3
  import { createElement as F } from "react";
4
- import { mergeClasses as u, SLOT_ATTR as i, shorthands as l } from "@epilot/zenith-runtime/v1/core.js";
4
+ import { mergeClasses as u, SLOT_ATTR as i, shorthands as l } from "@epilot/zenith-runtime/v1";
5
5
  import { Button as ae } from "../button/button.js";
6
6
  import { makeZenithStyles as Xe } from "../../styles/make-styles.js";
7
7
  import { nativeControl as ne, boxModel as s } from "../../styles/host-reset.js";