@epilot/zenith-react 0.2.0-next.0 → 0.2.0-next.3

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 (133) hide show
  1. package/dist/components/accordion/accordion.js +57 -48
  2. package/dist/components/accordion/accordion.js.map +1 -1
  3. package/dist/components/alert-dialog/alert-dialog.js +120 -92
  4. package/dist/components/alert-dialog/alert-dialog.js.map +1 -1
  5. package/dist/components/avatar/avatar-group.js +38 -35
  6. package/dist/components/avatar/avatar-group.js.map +1 -1
  7. package/dist/components/avatar/avatar.js +78 -71
  8. package/dist/components/avatar/avatar.js.map +1 -1
  9. package/dist/components/badge/badge.js +60 -55
  10. package/dist/components/badge/badge.js.map +1 -1
  11. package/dist/components/breadcrumb/breadcrumb.js +99 -54
  12. package/dist/components/breadcrumb/breadcrumb.js.map +1 -1
  13. package/dist/components/button/button.js +87 -77
  14. package/dist/components/button/button.js.map +1 -1
  15. package/dist/components/button-group/button-group.js +36 -32
  16. package/dist/components/button-group/button-group.js.map +1 -1
  17. package/dist/components/callout/callout.js +105 -98
  18. package/dist/components/callout/callout.js.map +1 -1
  19. package/dist/components/card/card.js +62 -52
  20. package/dist/components/card/card.js.map +1 -1
  21. package/dist/components/checkbox/checkbox.js +22 -19
  22. package/dist/components/checkbox/checkbox.js.map +1 -1
  23. package/dist/components/code-block/code-block.js +135 -123
  24. package/dist/components/code-block/code-block.js.map +1 -1
  25. package/dist/components/code-editor/code-editor.js +276 -260
  26. package/dist/components/code-editor/code-editor.js.map +1 -1
  27. package/dist/components/collapsible-sidebar/collapsible-sidebar.js +62 -56
  28. package/dist/components/collapsible-sidebar/collapsible-sidebar.js.map +1 -1
  29. package/dist/components/command/command.js +116 -105
  30. package/dist/components/command/command.js.map +1 -1
  31. package/dist/components/data-table/data-table-body.js +38 -34
  32. package/dist/components/data-table/data-table-body.js.map +1 -1
  33. package/dist/components/data-table/data-table-column-header.js +30 -26
  34. package/dist/components/data-table/data-table-column-header.js.map +1 -1
  35. package/dist/components/data-table/data-table-column-order.js +79 -73
  36. package/dist/components/data-table/data-table-column-order.js.map +1 -1
  37. package/dist/components/data-table/data-table-column-visibility.js +25 -22
  38. package/dist/components/data-table/data-table-column-visibility.js.map +1 -1
  39. package/dist/components/data-table/data-table-content.js +47 -44
  40. package/dist/components/data-table/data-table-content.js.map +1 -1
  41. package/dist/components/data-table/data-table-error.js +36 -32
  42. package/dist/components/data-table/data-table-error.js.map +1 -1
  43. package/dist/components/data-table/data-table-footer.js +10 -8
  44. package/dist/components/data-table/data-table-footer.js.map +1 -1
  45. package/dist/components/data-table/data-table-header-draggable.js +40 -36
  46. package/dist/components/data-table/data-table-header-draggable.js.map +1 -1
  47. package/dist/components/data-table/data-table-header.js +113 -99
  48. package/dist/components/data-table/data-table-header.js.map +1 -1
  49. package/dist/components/data-table/data-table-loading.js +21 -18
  50. package/dist/components/data-table/data-table-loading.js.map +1 -1
  51. package/dist/components/data-table/data-table-resize-handle.js +13 -11
  52. package/dist/components/data-table/data-table-resize-handle.js.map +1 -1
  53. package/dist/components/data-table/data-table-row.js +71 -59
  54. package/dist/components/data-table/data-table-row.js.map +1 -1
  55. package/dist/components/data-table/data-table-toolbar.js +9 -7
  56. package/dist/components/data-table/data-table-toolbar.js.map +1 -1
  57. package/dist/components/data-table/data-table.js +48 -46
  58. package/dist/components/data-table/data-table.js.map +1 -1
  59. package/dist/components/date-range-picker/date-range-picker.js +173 -164
  60. package/dist/components/date-range-picker/date-range-picker.js.map +1 -1
  61. package/dist/components/date-range-picker/range-calendar.js +36 -34
  62. package/dist/components/date-range-picker/range-calendar.js.map +1 -1
  63. package/dist/components/date-time-picker/calendar.js +290 -272
  64. package/dist/components/date-time-picker/calendar.js.map +1 -1
  65. package/dist/components/date-time-picker/date-time-picker-input.js +22 -20
  66. package/dist/components/date-time-picker/date-time-picker-input.js.map +1 -1
  67. package/dist/components/date-time-picker/date-time-picker-panel.js +126 -120
  68. package/dist/components/date-time-picker/date-time-picker-panel.js.map +1 -1
  69. package/dist/components/date-time-picker/date-time-picker.js +42 -40
  70. package/dist/components/date-time-picker/date-time-picker.js.map +1 -1
  71. package/dist/components/date-time-picker/time-picker.js +95 -87
  72. package/dist/components/date-time-picker/time-picker.js.map +1 -1
  73. package/dist/components/dialog/dialog.js +115 -95
  74. package/dist/components/dialog/dialog.js.map +1 -1
  75. package/dist/components/drawer/drawer.js +144 -109
  76. package/dist/components/drawer/drawer.js.map +1 -1
  77. package/dist/components/dropdown-menu/dropdown-menu.js +141 -112
  78. package/dist/components/dropdown-menu/dropdown-menu.js.map +1 -1
  79. package/dist/components/field/field-combobox.js +196 -176
  80. package/dist/components/field/field-combobox.js.map +1 -1
  81. package/dist/components/field/field.js +137 -126
  82. package/dist/components/field/field.js.map +1 -1
  83. package/dist/components/list/list.js +237 -219
  84. package/dist/components/list/list.js.map +1 -1
  85. package/dist/components/option-card/option-card.js +129 -116
  86. package/dist/components/option-card/option-card.js.map +1 -1
  87. package/dist/components/pill/pill.js +55 -51
  88. package/dist/components/pill/pill.js.map +1 -1
  89. package/dist/components/popover/popover.js +53 -36
  90. package/dist/components/popover/popover.js.map +1 -1
  91. package/dist/components/radio/radio.js +38 -34
  92. package/dist/components/radio/radio.js.map +1 -1
  93. package/dist/components/scroll-area/scroll-area.js +38 -35
  94. package/dist/components/scroll-area/scroll-area.js.map +1 -1
  95. package/dist/components/scroll-overflow/scroll-overflow.js +166 -151
  96. package/dist/components/scroll-overflow/scroll-overflow.js.map +1 -1
  97. package/dist/components/segmented-control/segmented-control.js +93 -85
  98. package/dist/components/segmented-control/segmented-control.js.map +1 -1
  99. package/dist/components/select/select.js +149 -128
  100. package/dist/components/select/select.js.map +1 -1
  101. package/dist/components/separator/separator.js +19 -16
  102. package/dist/components/separator/separator.js.map +1 -1
  103. package/dist/components/skeleton/skeleton.js +34 -30
  104. package/dist/components/skeleton/skeleton.js.map +1 -1
  105. package/dist/components/spinner/spinner.js +22 -17
  106. package/dist/components/spinner/spinner.js.map +1 -1
  107. package/dist/components/surface/surface.js +25 -22
  108. package/dist/components/surface/surface.js.map +1 -1
  109. package/dist/components/switch/switch.js +66 -57
  110. package/dist/components/switch/switch.js.map +1 -1
  111. package/dist/components/table/table-pagination.js +139 -129
  112. package/dist/components/table/table-pagination.js.map +1 -1
  113. package/dist/components/table/table.js +104 -90
  114. package/dist/components/table/table.js.map +1 -1
  115. package/dist/components/tabs/tabs.js +206 -128
  116. package/dist/components/tabs/tabs.js.map +1 -1
  117. package/dist/components/toast/toast.js +112 -100
  118. package/dist/components/toast/toast.js.map +1 -1
  119. package/dist/components/toggle/toggle.js +32 -30
  120. package/dist/components/toggle/toggle.js.map +1 -1
  121. package/dist/components/tooltip/tooltip.js +59 -46
  122. package/dist/components/tooltip/tooltip.js.map +1 -1
  123. package/dist/index.d.ts +12 -0
  124. package/dist/lib/clear-button.js +18 -17
  125. package/dist/lib/clear-button.js.map +1 -1
  126. package/dist/styles/host-reset.js +47 -0
  127. package/dist/styles/host-reset.js.map +1 -0
  128. package/dist/styles/overlay-layer.js +5 -0
  129. package/dist/styles/overlay-layer.js.map +1 -0
  130. package/dist/tokens.json +1 -1
  131. package/package.json +8 -6
  132. package/scripts/migration-diagnostics.mjs +42 -7
  133. package/scripts/migration-sweep.mjs +9 -1
@@ -1,22 +1,23 @@
1
- import { jsxs as W, jsx as b } from "react/jsx-runtime";
2
- import * as A from "react";
3
- import { flexRender as B } from "../../vendor/.bun/@tanstack_react-table@8.21.3_6f4b9a1cfb20c0ae/vendor/@tanstack/react-table/build/lib/index.js";
4
- import { mergeClasses as p, SLOT_ATTR as f, shorthands as h } from "@epilot/zenith-runtime/v1";
5
- import { makeZenithStyles as N } from "../../styles/make-styles.js";
6
- import { grayA6 as P, accentA3 as g } from "../../tokens/index.js";
7
- import { TableRow as $, TableCell as x } from "../table/table.js";
8
- import { getPinnedColumnOffset as z, isLastLeftPinnedColumn as j, isFirstRightPinnedColumn as F } from "./data-table-pinning-utils.js";
9
- import { useDataTable as K } from "./hooks/use-data-table.js";
10
- import { useDataTableContent as V } from "./hooks/use-data-table-content.js";
11
- function _(t, a) {
1
+ import { jsxs as A, jsx as p } from "react/jsx-runtime";
2
+ import * as B from "react";
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";
5
+ import { makeZenithStyles as $ } from "../../styles/make-styles.js";
6
+ import { boxModel as h } from "../../styles/host-reset.js";
7
+ import { grayA6 as k, accentA3 as x } from "../../tokens/index.js";
8
+ import { TableRow as z, TableCell as C } from "../table/table.js";
9
+ import { getPinnedColumnOffset as j, isLastLeftPinnedColumn as F, isFirstRightPinnedColumn as K } from "./data-table-pinning-utils.js";
10
+ import { useDataTable as V } from "./hooks/use-data-table.js";
11
+ import { useDataTableContent as _ } from "./hooks/use-data-table-content.js";
12
+ function Z(t, a) {
12
13
  const n = t.column.columnDef.meta;
13
14
  return (n == null ? void 0 : n.cellOverflow) ?? a;
14
15
  }
15
- function Z(t) {
16
+ function q(t) {
16
17
  const a = t.column.columnDef.meta;
17
18
  return a == null ? void 0 : a.align;
18
19
  }
19
- const C = [
20
+ const R = [
20
21
  "button",
21
22
  "a",
22
23
  "input",
@@ -35,32 +36,43 @@ const C = [
35
36
  '[role="switch"]',
36
37
  '[role="tab"]',
37
38
  "[data-radix-collection-item]",
38
- `[${f}="checkbox"]`
39
- ], q = N({
39
+ `[${u}="checkbox"]`
40
+ ], G = $({
40
41
  rowClickable: {
41
42
  cursor: "pointer",
42
43
  ":hover": {
43
- backgroundColor: g
44
+ backgroundColor: x
44
45
  }
45
46
  },
46
47
  rowSelected: {
47
- backgroundColor: g
48
+ backgroundColor: x
48
49
  },
50
+ // The rule is painted on the cells: WebKit draws no box-shadow on a <tr>,
51
+ // and row borders don't paint under DataTableContent's
52
+ // `border-collapse: separate`. A background image also stays clear of the
53
+ // pinned cells' own box-shadow and adds no height.
49
54
  rowBorder: {
50
- boxShadow: `inset 0 -1px 0 0 ${P}`,
51
- "&:last-child": {
52
- boxShadow: "none"
55
+ "& > td": {
56
+ backgroundImage: `linear-gradient(${k}, ${k})`,
57
+ backgroundSize: "100% 1px",
58
+ backgroundPosition: "bottom",
59
+ backgroundRepeat: "no-repeat"
60
+ },
61
+ "&:last-child > td": {
62
+ backgroundImage: "none"
53
63
  }
54
64
  },
55
65
  cellTruncate: {
66
+ ...h,
56
67
  maxWidth: 0,
57
- ...h.overflow("hidden"),
68
+ ...g.overflow("hidden"),
58
69
  textOverflow: "ellipsis",
59
70
  whiteSpace: "nowrap"
60
71
  },
61
72
  cellWrap: {
73
+ ...h,
62
74
  maxWidth: 0,
63
- ...h.overflow("hidden"),
75
+ ...g.overflow("hidden"),
64
76
  overflowWrap: "break-word",
65
77
  wordBreak: "break-word"
66
78
  },
@@ -71,91 +83,91 @@ const C = [
71
83
  boxShadow: "-2px 0 5px -2px rgba(0,0,0,0.1)"
72
84
  }
73
85
  });
74
- function G({ row: t, style: a, className: n }, k) {
75
- const r = q(), {
86
+ function H({ row: t, style: a, className: n }, v) {
87
+ const r = G(), {
76
88
  table: c,
77
89
  onRowClick: i,
78
- clickableRowClassName: v,
79
- selectedRowClassName: R,
80
- cellOverflow: T = "truncate",
81
- showRowBorders: S,
82
- disableColumnResizing: D
83
- } = K(), d = V(), u = (d == null ? void 0 : d.spacerWidth) ?? 0, I = !D, s = !!i, y = (e) => {
90
+ clickableRowClassName: T,
91
+ selectedRowClassName: S,
92
+ cellOverflow: I = "truncate",
93
+ showRowBorders: D,
94
+ disableColumnResizing: y
95
+ } = V(), d = _(), f = (d == null ? void 0 : d.spacerWidth) ?? 0, E = !y, s = !!i, O = (e) => {
84
96
  if (!i) return;
85
97
  const l = e.target;
86
- C.some(
98
+ R.some(
87
99
  (o) => l.closest(o)
88
100
  ) || i(t, e);
89
- }, E = (e) => {
101
+ }, L = (e) => {
90
102
  if (i && (e.key === "Enter" || e.key === " ")) {
91
103
  const l = e.target;
92
- if (C.some(
104
+ if (R.some(
93
105
  (o) => l.closest(o)
94
106
  ))
95
107
  return;
96
108
  e.preventDefault(), i(t, e);
97
109
  }
98
110
  };
99
- return /* @__PURE__ */ W(
100
- $,
111
+ return /* @__PURE__ */ A(
112
+ z,
101
113
  {
102
- ref: k,
114
+ ref: v,
103
115
  "data-slot": "data-table-row",
104
- [f]: "data-table-row",
116
+ [u]: "data-table-row",
105
117
  "data-fs-element": "DataTable-Row",
106
118
  "data-state": t.getIsSelected() ? "selected" : void 0,
107
119
  "data-clickable": s ? "true" : void 0,
108
120
  style: a,
109
- className: p(
110
- S !== !1 && r.rowBorder,
111
- s && (v ?? r.rowClickable),
112
- t.getIsSelected() && (R ?? r.rowSelected),
121
+ className: w(
122
+ D !== !1 && r.rowBorder,
123
+ s && (T ?? r.rowClickable),
124
+ t.getIsSelected() && (S ?? r.rowSelected),
113
125
  n
114
126
  ),
115
- onClick: s ? y : void 0,
127
+ onClick: s ? O : void 0,
116
128
  tabIndex: s ? 0 : void 0,
117
- onKeyDown: s ? E : void 0,
129
+ onKeyDown: s ? L : void 0,
118
130
  children: [
119
131
  t.getVisibleCells().map((e) => {
120
- const l = _(e, T), m = Z(e), o = e.column.getIsPinned(), w = o ? z(e.column, c) : void 0, O = j(e.column, c), L = F(e.column, c);
121
- return /* @__PURE__ */ b(
122
- x,
132
+ const l = Z(e, I), m = q(e), o = e.column.getIsPinned(), b = o ? j(e.column, c) : void 0, W = F(e.column, c), P = K(e.column, c);
133
+ return /* @__PURE__ */ p(
134
+ C,
123
135
  {
124
136
  "data-slot": "data-table-cell",
125
- [f]: "data-table-cell",
137
+ [u]: "data-table-cell",
126
138
  "data-fs-element": "DataTable-Cell",
127
139
  "data-pinned": o || void 0,
128
140
  align: m,
129
141
  style: {
130
- width: I || o ? e.column.getSize() : void 0,
131
- left: o === "left" ? `${w}px` : void 0,
132
- right: o === "right" ? `${w}px` : void 0
142
+ width: E || o ? e.column.getSize() : void 0,
143
+ left: o === "left" ? `${b}px` : void 0,
144
+ right: o === "right" ? `${b}px` : void 0
133
145
  },
134
- className: p(
146
+ className: w(
135
147
  l === "truncate" && r.cellTruncate,
136
148
  l === "wrap" && r.cellWrap,
137
- O && r.shadowLeft,
138
- L && r.shadowRight
149
+ W && r.shadowLeft,
150
+ P && r.shadowRight
139
151
  ),
140
- children: B(e.column.columnDef.cell, e.getContext())
152
+ children: N(e.column.columnDef.cell, e.getContext())
141
153
  },
142
154
  e.id
143
155
  );
144
156
  }),
145
- u > 0 && /* @__PURE__ */ b(
146
- x,
157
+ f > 0 && /* @__PURE__ */ p(
158
+ C,
147
159
  {
148
160
  "data-spacer": !0,
149
161
  "aria-hidden": "true",
150
- style: { width: u, padding: 0 }
162
+ style: { width: f, padding: 0 }
151
163
  }
152
164
  )
153
165
  ]
154
166
  }
155
167
  );
156
168
  }
157
- const oe = A.forwardRef(G);
169
+ const re = B.forwardRef(H);
158
170
  export {
159
- oe as DataTableRow
171
+ re as DataTableRow
160
172
  };
161
173
  //# sourceMappingURL=data-table-row.js.map
@@ -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\"\n\nimport { SLOT_ATTR } from \"../../renderer/contract\"\nimport { makeZenithStyles } from \"../../styles/make-styles\"\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 rowBorder: {\n boxShadow: `inset 0 -1px 0 0 ${tokens.grayA6}`,\n \"&:last-child\": {\n boxShadow: \"none\",\n },\n },\n cellTruncate: {\n maxWidth: 0,\n ...shorthands.overflow(\"hidden\"),\n textOverflow: \"ellipsis\",\n whiteSpace: \"nowrap\",\n },\n cellWrap: {\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","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":"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"}
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":"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"}
@@ -1,18 +1,20 @@
1
1
  import { jsx as n } from "react/jsx-runtime";
2
- import * as i from "react";
3
- import { mergeClasses as m, SLOT_ATTR as p, shorthands as a } from "@epilot/zenith-runtime/v1";
2
+ import * as m from "react";
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
- import { spacingGroup1 as t, spacingElement1 as b } from "../../tokens/index.js";
5
+ import { boxModel as b } from "../../styles/host-reset.js";
6
+ import { spacingGroup1 as t, spacingElement1 as f } from "../../tokens/index.js";
6
7
  const c = d({
7
8
  root: {
9
+ ...b,
8
10
  display: "flex",
9
11
  alignItems: "center",
10
12
  justifyContent: "space-between",
11
13
  gap: t,
12
- ...a.paddingInline(b),
14
+ ...a.paddingInline(f),
13
15
  ...a.paddingBlock(t)
14
16
  }
15
- }), h = i.forwardRef(function({ className: o, children: e, ...r }, s) {
17
+ }), D = m.forwardRef(function({ className: o, children: e, ...r }, s) {
16
18
  const l = c();
17
19
  return /* @__PURE__ */ n(
18
20
  "div",
@@ -21,13 +23,13 @@ const c = d({
21
23
  "data-slot": "data-table-toolbar",
22
24
  [p]: "data-table-toolbar",
23
25
  "data-fs-element": "DataTable-Toolbar",
24
- className: m(l.root, o),
26
+ className: i(l.root, o),
25
27
  ...r,
26
28
  children: e
27
29
  }
28
30
  );
29
31
  });
30
32
  export {
31
- h as DataTableToolbar
33
+ D as DataTableToolbar
32
34
  };
33
35
  //# sourceMappingURL=data-table-toolbar.js.map
@@ -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\"\n\nimport { SLOT_ATTR } from \"../../renderer/contract\"\nimport { makeZenithStyles } from \"../../styles/make-styles\"\nimport * as tokens from \"../../tokens\"\n\nconst useStyles = makeZenithStyles({\n root: {\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","tokens.spacingGroup1","shorthands","tokens.spacingElement1","DataTableToolbar","React","className","children","props","ref","styles","jsx","SLOT_ATTR","mergeClasses"],"mappings":";;;;;AAOA,MAAMA,IAAYC,EAAiB;AAAA,EACjC,MAAM;AAAA,IACJ,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,IAASX,EAAA;AAEf,SACE,gBAAAY;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;"}
@@ -1,15 +1,16 @@
1
1
  import { jsx as n } from "react/jsx-runtime";
2
2
  import * as Je from "react";
3
- import { useState as f, useRef as Ke, useEffect as h, useMemo as u, useCallback as Qe } from "react";
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
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
+ import { boxModel as ze } from "../../styles/host-reset.js";
7
8
  import { Checkbox as ee } from "../checkbox/checkbox.js";
8
- import { DensityContextBoundary as ze, canonicalDensity as ve } from "../density-provider/density-provider.js";
9
- import { DEFAULT_CONTAINER_HEIGHT as ge, DEFAULT_OVERSCAN as ae, DEFAULT_ROW_HEIGHT as ie, DataTableContext as pe } from "./data-table-context.js";
10
- import { DataTableColumnHeader as et } from "./data-table-column-header.js";
11
- import { getPaginationRowModel as tt, getFilteredRowModel as st, getSortedRowModel as lt, getCoreRowModel as ct } from "../../vendor/.bun/@tanstack_table-core@8.21.3/vendor/@tanstack/table-core/build/lib/index.js";
12
- function rt(d, T) {
9
+ import { DensityContextBoundary as ve, canonicalDensity as ge } from "../density-provider/density-provider.js";
10
+ import { DEFAULT_CONTAINER_HEIGHT as ae, DEFAULT_OVERSCAN as ie, DEFAULT_ROW_HEIGHT as pe, DataTableContext as et } from "./data-table-context.js";
11
+ import { DataTableColumnHeader as tt } from "./data-table-column-header.js";
12
+ import { getPaginationRowModel as st, getFilteredRowModel as lt, getSortedRowModel as ct, getCoreRowModel as rt } from "../../vendor/.bun/@tanstack_table-core@8.21.3/vendor/@tanstack/table-core/build/lib/index.js";
13
+ function ot(d, T) {
13
14
  return T ? d.map((c) => {
14
15
  var r;
15
16
  if (c.enableSorting === !1 || typeof c.header != "string")
@@ -17,7 +18,7 @@ function rt(d, T) {
17
18
  const I = c.header;
18
19
  return {
19
20
  ...c,
20
- header: ({ column: m }) => /* @__PURE__ */ n(et, { column: m, title: I }),
21
+ header: ({ column: m }) => /* @__PURE__ */ n(tt, { column: m, title: I }),
21
22
  meta: {
22
23
  ...c.meta,
23
24
  // Preserve original header for visibility dropdown fallback
@@ -30,11 +31,12 @@ function rt(d, T) {
30
31
  }
31
32
  const ft = Ce({
32
33
  root: {
34
+ ...ze,
33
35
  width: "100%",
34
36
  maxWidth: "100%"
35
37
  }
36
38
  });
37
- function ot({
39
+ function nt({
38
40
  columns: d,
39
41
  data: T,
40
42
  children: c,
@@ -51,8 +53,8 @@ function ot({
51
53
  defaultSorting: ce = [],
52
54
  rowSelection: re,
53
55
  onRowSelectionChange: w,
54
- defaultRowSelection: fe = {},
55
- columnFilters: oe,
56
+ defaultRowSelection: oe = {},
57
+ columnFilters: fe,
56
58
  onColumnFiltersChange: D,
57
59
  columnVisibility: ne,
58
60
  onColumnVisibilityChange: R,
@@ -66,16 +68,16 @@ function ot({
66
68
  resizeHandleVisibility: Z = "onHeaderHover",
67
69
  columnResizeMode: me = "onChange",
68
70
  columnSizing: Se,
69
- onColumnSizingChange: F,
71
+ onColumnSizingChange: M,
70
72
  defaultColumnSizing: ue = {},
71
73
  columnPinning: Ie,
72
- onColumnPinningChange: M,
73
- defaultColumnPinning: Pe = { left: [], right: [] },
74
+ onColumnPinningChange: F,
75
+ defaultColumnPinning: be = { left: [], right: [] },
74
76
  autoPinSelection: q,
75
77
  showHeaderBorder: J = !0,
76
78
  showRowBorders: K = !0,
77
79
  fitHeaderWidth: Q = !1,
78
- columnOrder: be,
80
+ columnOrder: Pe,
79
81
  onColumnOrderChange: E,
80
82
  defaultColumnOrder: ye = [],
81
83
  enableColumnOrdering: X = !1,
@@ -83,10 +85,10 @@ function ot({
83
85
  density: _,
84
86
  className: Te
85
87
  }, xe) {
86
- const we = ft(), [De, Re] = f(ce), [Ae, He] = f(fe), [Fe, Me] = f([]), [Ee, _e] = f({}), [ke, Le] = f(""), [Oe, Ve] = f(ue), [he, Ue] = f(Pe), [je, Ge] = f(ye), Ne = {
88
+ const we = ft(), [De, Re] = o(ce), [Ae, He] = o(oe), [Me, Fe] = o([]), [Ee, _e] = o({}), [ke, Le] = o(""), [Oe, Ve] = o(ue), [he, Ue] = o(be), [je, Ge] = o(ye), Ne = {
87
89
  pageIndex: (t == null ? void 0 : t.pageIndex) ?? 0,
88
90
  pageSize: (t == null ? void 0 : t.pageSize) ?? 10
89
- }, [k, L] = f(Ne), O = Ke(!1);
91
+ }, [k, L] = o(Ne), O = Ke(!1);
90
92
  h(() => {
91
93
  if ((t == null ? void 0 : t.pageIndex) === void 0)
92
94
  return;
@@ -102,15 +104,15 @@ function ot({
102
104
  (s) => s.pageSize === e ? s : { ...s, pageSize: e }
103
105
  );
104
106
  }, [t == null ? void 0 : t.pageSize]);
105
- const Y = !H, $ = le ?? De, P = re ?? Ae, C = oe ?? Fe, z = ne ?? Ee, v = de ?? ke, b = Se ?? Oe, o = Ie ?? he, y = be ?? je, We = u(() => {
106
- if (!(r && q && Object.keys(P).length > 0))
107
- return o;
108
- const s = o.left ?? [];
109
- return s.includes("select") ? o : {
110
- ...o,
107
+ const Y = !H, $ = le ?? De, b = re ?? Ae, C = fe ?? Me, z = ne ?? Ee, v = de ?? ke, P = Se ?? Oe, f = Ie ?? he, y = Pe ?? je, We = u(() => {
108
+ if (!(r && q && Object.keys(b).length > 0))
109
+ return f;
110
+ const s = f.left ?? [];
111
+ return s.includes("select") ? f : {
112
+ ...f,
111
113
  left: ["select", ...s]
112
114
  };
113
- }, [o, P, r, q]), g = u(
115
+ }, [f, b, r, q]), g = u(
114
116
  () => ({
115
117
  id: "select",
116
118
  header: ({ table: e }) => /* @__PURE__ */ n(
@@ -138,7 +140,7 @@ function ot({
138
140
  size: 40
139
141
  }),
140
142
  []
141
- ), V = u(() => rt(d, m), [d, m]), Be = u(() => r ? [g, ...V] : V, [V, r, g]), S = !!t, a = !!(l != null && l.enabled && !S), i = S && ((t == null ? void 0 : t.totalItems) !== void 0 || (t == null ? void 0 : t.pageCount) !== void 0), Ze = Qe(
143
+ ), V = u(() => ot(d, m), [d, m]), Be = u(() => r ? [g, ...V] : V, [V, r, g]), S = !!t, a = !!(l != null && l.enabled && !S), i = S && ((t == null ? void 0 : t.totalItems) !== void 0 || (t == null ? void 0 : t.pageCount) !== void 0), Ze = Qe(
142
144
  (e) => {
143
145
  O.current = !0, L((s) => typeof e == "function" ? e(s) : e);
144
146
  },
@@ -152,21 +154,21 @@ function ot({
152
154
  data: T,
153
155
  columns: Be,
154
156
  getRowId: I,
155
- getCoreRowModel: ct(),
157
+ getCoreRowModel: rt(),
156
158
  // Default column configuration
157
159
  defaultColumn: {
158
160
  minSize: 50
159
161
  },
160
162
  // Sorting
161
163
  ...m && !U && {
162
- getSortedRowModel: lt()
164
+ getSortedRowModel: ct()
163
165
  },
164
166
  ...U && {
165
167
  manualSorting: !0
166
168
  },
167
169
  state: {
168
170
  sorting: $,
169
- rowSelection: P,
171
+ rowSelection: b,
170
172
  columnFilters: C,
171
173
  columnVisibility: z,
172
174
  globalFilter: v,
@@ -176,7 +178,7 @@ function ot({
176
178
  pagination: k
177
179
  },
178
180
  ...Y && {
179
- columnSizing: b
181
+ columnSizing: P
180
182
  }
181
183
  },
182
184
  onSortingChange: (e) => {
@@ -186,19 +188,19 @@ function ot({
186
188
  // Row selection
187
189
  enableRowSelection: typeof r == "function" ? (e) => r(e) : r,
188
190
  onRowSelectionChange: (e) => {
189
- const s = typeof e == "function" ? e(P) : e;
191
+ const s = typeof e == "function" ? e(b) : e;
190
192
  He(s), w == null || w(s);
191
193
  },
192
194
  // Filtering
193
195
  ...(te || se) && !j && {
194
- getFilteredRowModel: st()
196
+ getFilteredRowModel: lt()
195
197
  },
196
198
  ...j && {
197
199
  manualFiltering: !0
198
200
  },
199
201
  onColumnFiltersChange: (e) => {
200
202
  const s = typeof e == "function" ? e(C) : e;
201
- Me(s), D == null || D(s);
203
+ Fe(s), D == null || D(s);
202
204
  },
203
205
  onColumnVisibilityChange: (e) => {
204
206
  const s = typeof e == "function" ? e(z) : e;
@@ -217,17 +219,17 @@ function ot({
217
219
  enableColumnResizing: Y,
218
220
  columnResizeMode: me,
219
221
  onColumnSizingChange: (e) => {
220
- const s = typeof e == "function" ? e(b) : e;
221
- Ve(s), F == null || F(s);
222
+ const s = typeof e == "function" ? e(P) : e;
223
+ Ve(s), M == null || M(s);
222
224
  },
223
225
  // Column pinning
224
226
  onColumnPinningChange: (e) => {
225
- const s = typeof e == "function" ? e(o) : e;
226
- Ue(s), M == null || M(s);
227
+ const s = typeof e == "function" ? e(f) : e;
228
+ Ue(s), F == null || F(s);
227
229
  },
228
230
  // Pagination
229
231
  ...S && !i && {
230
- getPaginationRowModel: tt()
232
+ getPaginationRowModel: st()
231
233
  },
232
234
  ...i && {
233
235
  manualPagination: !0,
@@ -243,9 +245,9 @@ function ot({
243
245
  pagination: t,
244
246
  config: {
245
247
  enableVirtualization: a,
246
- estimateRowHeight: (l == null ? void 0 : l.estimateRowHeight) ?? ie,
247
- overscan: (l == null ? void 0 : l.overscan) ?? ae,
248
- containerHeight: (l == null ? void 0 : l.containerHeight) ?? ge
248
+ estimateRowHeight: (l == null ? void 0 : l.estimateRowHeight) ?? pe,
249
+ overscan: (l == null ? void 0 : l.overscan) ?? ie,
250
+ containerHeight: (l == null ? void 0 : l.containerHeight) ?? ae
249
251
  },
250
252
  onRowClick: G,
251
253
  clickableRowClassName: N,
@@ -256,7 +258,7 @@ function ot({
256
258
  showHeaderBorder: J,
257
259
  showRowBorders: K,
258
260
  fitHeaderWidth: Q,
259
- columnSizing: b,
261
+ columnSizing: P,
260
262
  enableColumnOrdering: X,
261
263
  columnOrder: y
262
264
  }),
@@ -274,12 +276,12 @@ function ot({
274
276
  J,
275
277
  K,
276
278
  Q,
277
- b,
279
+ P,
278
280
  X,
279
281
  y
280
282
  ]
281
283
  );
282
- return /* @__PURE__ */ n(pe.Provider, { value: qe, children: /* @__PURE__ */ n(
284
+ return /* @__PURE__ */ n(et.Provider, { value: qe, children: /* @__PURE__ */ n(
283
285
  "div",
284
286
  {
285
287
  ref: xe,
@@ -287,13 +289,13 @@ function ot({
287
289
  [$e]: "data-table",
288
290
  "data-fs-element": "DataTable",
289
291
  className: Ye(we.root, Te),
290
- ..._ !== void 0 ? { "data-density": ve(_) } : {},
291
- children: /* @__PURE__ */ n(ze, { density: _, children: c })
292
+ ..._ !== void 0 ? { "data-density": ge(_) } : {},
293
+ children: /* @__PURE__ */ n(ve, { density: _, children: c })
292
294
  }
293
295
  ) });
294
296
  }
295
- const wt = Je.forwardRef(ot);
297
+ const Rt = Je.forwardRef(nt);
296
298
  export {
297
- wt as DataTable
299
+ Rt as DataTable
298
300
  };
299
301
  //# sourceMappingURL=data-table.js.map