@zentauri-ui/zentauri-components 2.1.6 → 2.1.7

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 (115) hide show
  1. package/README.md +10 -8
  2. package/cli/cli.integration.test.ts +36 -0
  3. package/cli/index.mjs +43 -7
  4. package/cli/props.json +273 -0
  5. package/cli/registry.json +20 -0
  6. package/cli/rewrite-imports.mjs +29 -4
  7. package/cli/rewrite-imports.test.ts +35 -0
  8. package/dist/{chunk-QE7OJW4J.js → chunk-5ELR6MIN.js} +6 -6
  9. package/dist/{chunk-QE7OJW4J.js.map → chunk-5ELR6MIN.js.map} +1 -1
  10. package/dist/chunk-5FU57ZVQ.js +19 -0
  11. package/dist/{chunk-3W2UUKWP.js.map → chunk-5FU57ZVQ.js.map} +1 -1
  12. package/dist/chunk-74SKXGTM.js +4 -0
  13. package/dist/chunk-74SKXGTM.js.map +1 -0
  14. package/dist/{chunk-CHI6MBTI.mjs → chunk-7UXPXCKV.mjs} +3 -3
  15. package/dist/{chunk-CHI6MBTI.mjs.map → chunk-7UXPXCKV.mjs.map} +1 -1
  16. package/dist/chunk-CYKSS5S5.mjs +128 -0
  17. package/dist/chunk-CYKSS5S5.mjs.map +1 -0
  18. package/dist/chunk-DBNGLT5U.mjs +221 -0
  19. package/dist/chunk-DBNGLT5U.mjs.map +1 -0
  20. package/dist/{chunk-A4IB3C23.mjs → chunk-FUCW5GPE.mjs} +22 -6
  21. package/dist/chunk-FUCW5GPE.mjs.map +1 -0
  22. package/dist/chunk-G7FVHZRB.js +225 -0
  23. package/dist/chunk-G7FVHZRB.js.map +1 -0
  24. package/dist/chunk-HMDH4BQJ.js +123 -0
  25. package/dist/chunk-HMDH4BQJ.js.map +1 -0
  26. package/dist/chunk-I7EBE7BD.js +98 -0
  27. package/dist/chunk-I7EBE7BD.js.map +1 -0
  28. package/dist/{chunk-WWKAJHIV.mjs → chunk-KVSRUAXP.mjs} +3 -3
  29. package/dist/{chunk-WWKAJHIV.mjs.map → chunk-KVSRUAXP.mjs.map} +1 -1
  30. package/dist/chunk-LHBJD57K.mjs +143 -0
  31. package/dist/chunk-LHBJD57K.mjs.map +1 -0
  32. package/dist/chunk-OYAJG2BO.js +83 -0
  33. package/dist/chunk-OYAJG2BO.js.map +1 -0
  34. package/dist/chunk-PTU5ZAYX.js +145 -0
  35. package/dist/chunk-PTU5ZAYX.js.map +1 -0
  36. package/dist/chunk-QKO5DA4N.mjs +81 -0
  37. package/dist/chunk-QKO5DA4N.mjs.map +1 -0
  38. package/dist/chunk-T7PIKDUZ.js +130 -0
  39. package/dist/chunk-T7PIKDUZ.js.map +1 -0
  40. package/dist/chunk-TDK5TVJE.mjs +3 -0
  41. package/dist/chunk-TDK5TVJE.mjs.map +1 -0
  42. package/dist/{chunk-VA6SB6NN.js → chunk-TJ2EWPER.js} +28 -5
  43. package/dist/chunk-TJ2EWPER.js.map +1 -0
  44. package/dist/chunk-VBNW2B4D.mjs +3 -0
  45. package/dist/chunk-VBNW2B4D.mjs.map +1 -0
  46. package/dist/chunk-W6DO36XD.mjs +96 -0
  47. package/dist/chunk-W6DO36XD.mjs.map +1 -0
  48. package/dist/chunk-XR3J46TZ.js +4 -0
  49. package/dist/chunk-XR3J46TZ.js.map +1 -0
  50. package/dist/chunk-ZOHCADDL.mjs +121 -0
  51. package/dist/chunk-ZOHCADDL.mjs.map +1 -0
  52. package/dist/design-system/data-table.d.ts +8 -0
  53. package/dist/design-system/data-table.d.ts.map +1 -0
  54. package/dist/design-system/facade.js +5 -5
  55. package/dist/design-system/facade.mjs +4 -4
  56. package/dist/design-system/index.d.ts +1 -0
  57. package/dist/design-system/index.d.ts.map +1 -1
  58. package/dist/hooks/useTableFilter.js +6 -116
  59. package/dist/hooks/useTableFilter.js.map +1 -1
  60. package/dist/hooks/useTableFilter.mjs +1 -118
  61. package/dist/hooks/useTableFilter.mjs.map +1 -1
  62. package/dist/hooks/useTableSort.js +6 -91
  63. package/dist/hooks/useTableSort.js.map +1 -1
  64. package/dist/hooks/useTableSort.mjs +1 -93
  65. package/dist/hooks/useTableSort.mjs.map +1 -1
  66. package/dist/hooks/useVirtualList.js +6 -76
  67. package/dist/hooks/useVirtualList.js.map +1 -1
  68. package/dist/hooks/useVirtualList.mjs +1 -78
  69. package/dist/hooks/useVirtualList.mjs.map +1 -1
  70. package/dist/ui/buttons/animated.js +7 -7
  71. package/dist/ui/buttons/animated.mjs +5 -5
  72. package/dist/ui/buttons.js +9 -8
  73. package/dist/ui/buttons.mjs +7 -6
  74. package/dist/ui/checkbox.js +7 -123
  75. package/dist/ui/checkbox.js.map +1 -1
  76. package/dist/ui/checkbox.mjs +2 -126
  77. package/dist/ui/checkbox.mjs.map +1 -1
  78. package/dist/ui/data-table/data-table-base.d.ts +6 -0
  79. package/dist/ui/data-table/data-table-base.d.ts.map +1 -0
  80. package/dist/ui/data-table/data-table.d.ts +6 -0
  81. package/dist/ui/data-table/data-table.d.ts.map +1 -0
  82. package/dist/ui/data-table/index.d.ts +4 -0
  83. package/dist/ui/data-table/index.d.ts.map +1 -0
  84. package/dist/ui/data-table/types.d.ts +92 -0
  85. package/dist/ui/data-table/types.d.ts.map +1 -0
  86. package/dist/ui/data-table/variants.d.ts +8 -0
  87. package/dist/ui/data-table/variants.d.ts.map +1 -0
  88. package/dist/ui/data-table.js +620 -0
  89. package/dist/ui/data-table.js.map +1 -0
  90. package/dist/ui/data-table.mjs +611 -0
  91. package/dist/ui/data-table.mjs.map +1 -0
  92. package/dist/ui/dynamic-stepper.js +17 -17
  93. package/dist/ui/dynamic-stepper.mjs +6 -6
  94. package/dist/ui/inputs.js +7 -138
  95. package/dist/ui/inputs.js.map +1 -1
  96. package/dist/ui/inputs.mjs +2 -141
  97. package/dist/ui/inputs.mjs.map +1 -1
  98. package/dist/ui/pagination.js +19 -220
  99. package/dist/ui/pagination.js.map +1 -1
  100. package/dist/ui/pagination.mjs +7 -222
  101. package/dist/ui/pagination.mjs.map +1 -1
  102. package/dist/ui/table.js +1 -0
  103. package/dist/ui/table.mjs +1 -0
  104. package/package.json +1 -1
  105. package/src/design-system/data-table.ts +20 -0
  106. package/src/design-system/index.ts +1 -0
  107. package/src/ui/data-table/data-table-base.tsx +701 -0
  108. package/src/ui/data-table/data-table.test.tsx +389 -0
  109. package/src/ui/data-table/data-table.tsx +11 -0
  110. package/src/ui/data-table/index.ts +24 -0
  111. package/src/ui/data-table/types.ts +121 -0
  112. package/src/ui/data-table/variants.ts +21 -0
  113. package/dist/chunk-3W2UUKWP.js +0 -19
  114. package/dist/chunk-A4IB3C23.mjs.map +0 -1
  115. package/dist/chunk-VA6SB6NN.js.map +0 -1
@@ -0,0 +1,620 @@
1
+ "use client";
2
+ 'use strict';
3
+
4
+ var chunkOYAJG2BO_js = require('../chunk-OYAJG2BO.js');
5
+ var chunkHMDH4BQJ_js = require('../chunk-HMDH4BQJ.js');
6
+ var chunkI7EBE7BD_js = require('../chunk-I7EBE7BD.js');
7
+ require('../chunk-74SKXGTM.js');
8
+ var chunkKQZWTTY2_js = require('../chunk-KQZWTTY2.js');
9
+ var chunkG7FVHZRB_js = require('../chunk-G7FVHZRB.js');
10
+ var chunk2VUMVDR3_js = require('../chunk-2VUMVDR3.js');
11
+ var chunkPTU5ZAYX_js = require('../chunk-PTU5ZAYX.js');
12
+ require('../chunk-SCOIRBML.js');
13
+ require('../chunk-XR3J46TZ.js');
14
+ var chunk5ELR6MIN_js = require('../chunk-5ELR6MIN.js');
15
+ require('../chunk-5FU57ZVQ.js');
16
+ var chunkT7PIKDUZ_js = require('../chunk-T7PIKDUZ.js');
17
+ require('../chunk-KOIXQXZB.js');
18
+ var chunkTJ2EWPER_js = require('../chunk-TJ2EWPER.js');
19
+ require('../chunk-FBUY6K6S.js');
20
+ require('../chunk-Y7BU5RC4.js');
21
+ require('../chunk-NDF3HORF.js');
22
+ require('../chunk-USLNTKVQ.js');
23
+ require('../chunk-D7ATXPVI.js');
24
+ require('../chunk-IEHY6KNM.js');
25
+ require('../chunk-3MK7CWEX.js');
26
+ require('../chunk-22FJROCI.js');
27
+ require('../chunk-UJXFD4SK.js');
28
+ require('../chunk-3EJCQXGV.js');
29
+ require('../chunk-6KVTKYTB.js');
30
+ require('../chunk-L7W4NRK6.js');
31
+ require('../chunk-KWBGLH7G.js');
32
+ require('../chunk-OH5VOGNW.js');
33
+ require('../chunk-WGN2CBG6.js');
34
+ require('../chunk-SRSRY5K2.js');
35
+ require('../chunk-UG3GF2BD.js');
36
+ require('../chunk-BZTAA3MK.js');
37
+ require('../chunk-PZ25OHJE.js');
38
+ require('../chunk-HOOZYA4N.js');
39
+ require('../chunk-CJCOURVM.js');
40
+ require('../chunk-KJMW7S5X.js');
41
+ require('../chunk-3CYJQ6KF.js');
42
+ require('../chunk-3453DQNL.js');
43
+ require('../chunk-DYSXCJGL.js');
44
+ require('../chunk-A7MU6SFI.js');
45
+ require('../chunk-NYO3W5GY.js');
46
+ require('../chunk-HNRCPZCK.js');
47
+ require('../chunk-J2SUGU3X.js');
48
+ require('../chunk-J5NTJVKX.js');
49
+ require('../chunk-UQQHB3OI.js');
50
+ require('../chunk-BBM4BKSN.js');
51
+ require('../chunk-Y5JAQEBF.js');
52
+ require('../chunk-7DVECOO7.js');
53
+ require('../chunk-YPYPWALR.js');
54
+ require('../chunk-PP3L6M62.js');
55
+ require('../chunk-BJDT7P2I.js');
56
+ require('../chunk-PG7LQVU6.js');
57
+ require('../chunk-NFUOJMNI.js');
58
+ require('../chunk-UT6QG35L.js');
59
+ require('../chunk-IR5SJ7AQ.js');
60
+ var chunkZS5756ZC_js = require('../chunk-ZS5756ZC.js');
61
+ require('../chunk-PZ5AY32C.js');
62
+ var react = require('react');
63
+ var classVarianceAuthority = require('class-variance-authority');
64
+ var jsxRuntime = require('react/jsx-runtime');
65
+
66
+ var dataTableRootVariants = classVarianceAuthority.cva(chunkTJ2EWPER_js.zuiDataTableRootBase);
67
+ var dataTableToolbarVariants = classVarianceAuthority.cva(chunkTJ2EWPER_js.zuiDataTableToolbarBase);
68
+ var dataTableToolbarGroupVariants = classVarianceAuthority.cva(chunkTJ2EWPER_js.zuiDataTableToolbarGroupBase);
69
+ var dataTableColumnPanelVariants = classVarianceAuthority.cva(chunkTJ2EWPER_js.zuiDataTableColumnPanelBase);
70
+ var dataTableStatusVariants = classVarianceAuthority.cva(chunkTJ2EWPER_js.zuiDataTableStatusBase);
71
+ var dataTableStateCellVariants = classVarianceAuthority.cva(chunkTJ2EWPER_js.zuiDataTableStateCellBase);
72
+ var dataTableVirtualScrollVariants = classVarianceAuthority.cva(
73
+ chunkTJ2EWPER_js.zuiDataTableVirtualScrollBase
74
+ );
75
+ var defaultLoadingContent = "Loading data";
76
+ var defaultEmptyContent = "No results found";
77
+ var globalFilterKey = "__zui_global_filter__";
78
+ function getAccessorValue(row, column) {
79
+ if (typeof column.accessor === "function") {
80
+ return column.accessor(row);
81
+ }
82
+ if (column.accessor && row && typeof row === "object") {
83
+ return row[column.accessor];
84
+ }
85
+ if (row && typeof row === "object" && column.id in row) {
86
+ return row[column.id];
87
+ }
88
+ return void 0;
89
+ }
90
+ function normalizeComparable(value) {
91
+ if (value instanceof Date) {
92
+ return value.getTime();
93
+ }
94
+ if (typeof value === "number") {
95
+ return value;
96
+ }
97
+ if (typeof value === "boolean") {
98
+ return value ? 1 : 0;
99
+ }
100
+ return value == null ? "" : String(value).toLowerCase();
101
+ }
102
+ function compareValues(left, right) {
103
+ const normalizedLeft = normalizeComparable(left);
104
+ const normalizedRight = normalizeComparable(right);
105
+ if (typeof normalizedLeft === "number" && typeof normalizedRight === "number") {
106
+ return normalizedLeft - normalizedRight;
107
+ }
108
+ return String(normalizedLeft).localeCompare(String(normalizedRight));
109
+ }
110
+ function resolveSearchOptions(search) {
111
+ if (!search) {
112
+ return null;
113
+ }
114
+ if (search === true) {
115
+ return {};
116
+ }
117
+ return search;
118
+ }
119
+ function validateSearchOptions(searchOptions) {
120
+ if (searchOptions?.filterColumnIds && searchOptions.filterColumnIds.length === 0) {
121
+ console.warn(
122
+ "DataTable search.filterColumnIds is empty. It should include at least one column id."
123
+ );
124
+ }
125
+ }
126
+ function isSelected(selectedRowIds, rowId) {
127
+ return selectedRowIds.includes(rowId);
128
+ }
129
+ function toggleId(ids, id, checked) {
130
+ if (checked) {
131
+ return ids.includes(id) ? [...ids] : [...ids, id];
132
+ }
133
+ return ids.filter((item) => item !== id);
134
+ }
135
+ function textAlignClass(textAlign) {
136
+ if (textAlign === "center") {
137
+ return "text-center";
138
+ }
139
+ if (textAlign === "right") {
140
+ return "text-right";
141
+ }
142
+ return void 0;
143
+ }
144
+ function paginationAppearanceFor(appearance) {
145
+ if (appearance === "striped" || appearance === "bordered" || appearance === "ghost") {
146
+ return "default";
147
+ }
148
+ return appearance;
149
+ }
150
+ function uniqueVisibleColumnIds(columns, ids) {
151
+ const columnIds = new Set(columns.map((column) => column.id));
152
+ const initialIds = ids ?? columns.filter((column) => column.visible !== false).map((column) => column.id);
153
+ return initialIds.filter((id, index) => {
154
+ return columnIds.has(id) && initialIds.indexOf(id) === index;
155
+ });
156
+ }
157
+ function DataTableBase(props) {
158
+ const {
159
+ className,
160
+ columns,
161
+ data,
162
+ getRowId,
163
+ caption,
164
+ tableClassName,
165
+ tableScrollAreaAriaLabel,
166
+ appearance = "default",
167
+ size = "md",
168
+ stickyHeader,
169
+ textAlign,
170
+ search,
171
+ sortKey,
172
+ defaultSortKey,
173
+ sortDirection,
174
+ defaultSortDirection = "none",
175
+ onSortChange,
176
+ enableRowSelection = false,
177
+ selectedRowIds,
178
+ defaultSelectedRowIds = [],
179
+ onRowSelectionChange,
180
+ enableColumnVisibility = false,
181
+ visibleColumnIds,
182
+ defaultVisibleColumnIds,
183
+ onColumnVisibilityChange,
184
+ bulkActions = [],
185
+ pagination,
186
+ virtualization,
187
+ showRowCount = true,
188
+ loading = false,
189
+ loadingContent = defaultLoadingContent,
190
+ emptyContent = defaultEmptyContent,
191
+ ref,
192
+ "aria-label": ariaLabel = "Data table",
193
+ ...rest
194
+ } = props;
195
+ const searchOptions = resolveSearchOptions(search);
196
+ validateSearchOptions(searchOptions);
197
+ const keyedData = react.useMemo(
198
+ () => data.map((row, index) => ({
199
+ row,
200
+ id: getRowId ? getRowId(row, index) : String(index)
201
+ })),
202
+ [data, getRowId]
203
+ );
204
+ const resolvedAppearance = appearance ?? "default";
205
+ const resolvedSize = size ?? "md";
206
+ const resolvedPaginationAppearance = paginationAppearanceFor(resolvedAppearance);
207
+ const columnPanelId = react.useId();
208
+ const [columnPanelOpen, setColumnPanelOpen] = react.useState(false);
209
+ const [internalSelectedRowIds, setInternalSelectedRowIds] = react.useState(() => [
210
+ ...defaultSelectedRowIds
211
+ ]);
212
+ const selectedIds = react.useMemo(
213
+ () => selectedRowIds ? [...selectedRowIds] : internalSelectedRowIds,
214
+ [internalSelectedRowIds, selectedRowIds]
215
+ );
216
+ const isSelectionControlled = selectedRowIds !== void 0;
217
+ const [internalVisibleColumnIds, setInternalVisibleColumnIds] = react.useState(() => uniqueVisibleColumnIds(columns, defaultVisibleColumnIds));
218
+ const currentVisibleColumnIds = visibleColumnIds ? uniqueVisibleColumnIds(columns, visibleColumnIds) : uniqueVisibleColumnIds(columns, internalVisibleColumnIds);
219
+ const isVisibilityControlled = visibleColumnIds !== void 0;
220
+ const visibleColumns = react.useMemo(
221
+ () => columns.filter((column) => currentVisibleColumnIds.includes(column.id)),
222
+ [columns, currentVisibleColumnIds]
223
+ );
224
+ const [internalSearchValue, setInternalSearchValue] = react.useState(
225
+ () => searchOptions?.defaultValue ?? ""
226
+ );
227
+ const searchValue = searchOptions?.value ?? internalSearchValue;
228
+ const isSearchControlled = searchOptions?.value !== void 0;
229
+ const searchableColumns = react.useMemo(() => {
230
+ const filterColumnIds = searchOptions?.filterColumnIds;
231
+ const hasFilterColumns = Boolean(
232
+ filterColumnIds && filterColumnIds.length > 0
233
+ );
234
+ return visibleColumns.filter((column) => {
235
+ if (hasFilterColumns && !filterColumnIds?.includes(column.id)) {
236
+ return false;
237
+ }
238
+ return column.filterable !== false;
239
+ });
240
+ }, [searchOptions?.filterColumnIds, visibleColumns]);
241
+ const filterState = searchValue ? { [globalFilterKey]: searchValue } : void 0;
242
+ const { filteredData } = chunkHMDH4BQJ_js.useTableFilter({
243
+ data: keyedData,
244
+ filters: filterState,
245
+ filterPredicate: ({ row }, filterValue) => {
246
+ const query = filterValue.trim().toLowerCase();
247
+ if (!query) {
248
+ return true;
249
+ }
250
+ return searchableColumns.some((column) => {
251
+ const value = column.filterValue ? column.filterValue(row) : getAccessorValue(row, column);
252
+ return String(value ?? "").toLowerCase().includes(query);
253
+ });
254
+ }
255
+ });
256
+ const tableSort = chunkI7EBE7BD_js.useTableSort({
257
+ sortKey,
258
+ defaultSortKey,
259
+ sortDirection,
260
+ defaultSortDirection,
261
+ onSortChange
262
+ });
263
+ const sortedData = react.useMemo(() => {
264
+ if (!tableSort.sortKey || tableSort.sortDirection === "none") {
265
+ return filteredData;
266
+ }
267
+ const sortedColumn = columns.find(
268
+ (column) => column.id === tableSort.sortKey
269
+ );
270
+ if (!sortedColumn || !sortedColumn.sortable) {
271
+ return filteredData;
272
+ }
273
+ const direction = tableSort.sortDirection === "ascending" ? 1 : -1;
274
+ return [...filteredData].sort((left, right) => {
275
+ const leftValue = sortedColumn.sortValue ? sortedColumn.sortValue(left.row) : getAccessorValue(left.row, sortedColumn);
276
+ const rightValue = sortedColumn.sortValue ? sortedColumn.sortValue(right.row) : getAccessorValue(right.row, sortedColumn);
277
+ return compareValues(leftValue, rightValue) * direction;
278
+ });
279
+ }, [columns, filteredData, tableSort.sortDirection, tableSort.sortKey]);
280
+ const paginationOptions = pagination && pagination !== true ? pagination : void 0;
281
+ const paginationEnabled = Boolean(pagination);
282
+ const pageSize = Math.max(1, paginationOptions?.pageSize ?? 10);
283
+ const pageCount = paginationEnabled ? Math.ceil(sortedData.length / pageSize) : 1;
284
+ const paginationState = chunk2VUMVDR3_js.usePagination({
285
+ pageCount,
286
+ page: paginationOptions?.page,
287
+ defaultPage: paginationOptions?.defaultPage,
288
+ siblingCount: paginationOptions?.siblingCount,
289
+ boundaryCount: paginationOptions?.boundaryCount,
290
+ onPageChange: paginationOptions?.onPageChange
291
+ });
292
+ const processedRows = paginationEnabled ? sortedData.slice(
293
+ (paginationState.currentPage - 1) * pageSize,
294
+ paginationState.currentPage * pageSize
295
+ ) : sortedData;
296
+ const virtualizationEnabled = Boolean(virtualization?.enabled) && processedRows.length > 0;
297
+ const virtualList = chunkOYAJG2BO_js.useVirtualList({
298
+ itemCount: processedRows.length,
299
+ itemHeight: virtualization?.rowHeight ?? 48,
300
+ overscan: virtualization?.overscan
301
+ });
302
+ const renderedRows = virtualizationEnabled ? virtualList.virtualItems.map((item) => ({
303
+ entry: processedRows[item.index],
304
+ index: item.index,
305
+ start: item.start
306
+ })) : processedRows.map((entry, index) => ({ entry, index, start: 0 }));
307
+ const virtualOffset = virtualizationEnabled ? virtualList.virtualItems[0]?.start ?? 0 : 0;
308
+ const selectableRows = react.useMemo(
309
+ () => processedRows.map((entry) => ({
310
+ row: entry.row,
311
+ id: entry.id
312
+ })),
313
+ [processedRows]
314
+ );
315
+ const selectedRows = react.useMemo(
316
+ () => keyedData.filter((entry) => isSelected(selectedIds, entry.id)).map((entry) => entry.row),
317
+ [keyedData, selectedIds]
318
+ );
319
+ const allVisibleSelected = selectableRows.length > 0 && selectableRows.every((item) => isSelected(selectedIds, item.id));
320
+ const someVisibleSelected = selectableRows.some((item) => isSelected(selectedIds, item.id)) && !allVisibleSelected;
321
+ const setSelectedIds = react.useCallback(
322
+ (nextIds) => {
323
+ if (!isSelectionControlled) {
324
+ setInternalSelectedRowIds(nextIds);
325
+ }
326
+ const nextRows = keyedData.filter((entry) => nextIds.includes(entry.id)).map((entry) => entry.row);
327
+ onRowSelectionChange?.(nextIds, nextRows);
328
+ },
329
+ [keyedData, isSelectionControlled, onRowSelectionChange]
330
+ );
331
+ const setColumnVisible = react.useCallback(
332
+ (columnId, checked) => {
333
+ const nextIds = checked ? [...currentVisibleColumnIds, columnId] : currentVisibleColumnIds.filter((id) => id !== columnId);
334
+ const normalized = uniqueVisibleColumnIds(columns, nextIds);
335
+ if (!isVisibilityControlled) {
336
+ setInternalVisibleColumnIds(normalized);
337
+ }
338
+ onColumnVisibilityChange?.(normalized);
339
+ },
340
+ [
341
+ columns,
342
+ currentVisibleColumnIds,
343
+ isVisibilityControlled,
344
+ onColumnVisibilityChange
345
+ ]
346
+ );
347
+ const handleSearchChange = react.useCallback(
348
+ (value) => {
349
+ if (!isSearchControlled) {
350
+ setInternalSearchValue(value);
351
+ }
352
+ searchOptions?.onValueChange?.(value);
353
+ },
354
+ [isSearchControlled, searchOptions]
355
+ );
356
+ const headerColSpan = visibleColumns.length + (enableRowSelection ? 1 : 0) || 1;
357
+ const renderStateRow = (content) => /* @__PURE__ */ jsxRuntime.jsx(chunkKQZWTTY2_js.TableRow, { children: /* @__PURE__ */ jsxRuntime.jsx(
358
+ chunkKQZWTTY2_js.TableCell,
359
+ {
360
+ colSpan: headerColSpan,
361
+ className: dataTableStateCellVariants(),
362
+ children: content
363
+ }
364
+ ) });
365
+ const renderRow = (entry, rowIndex) => {
366
+ const { row, id: rowId } = entry;
367
+ const rowSelected = isSelected(selectedIds, rowId);
368
+ const labelColumn = visibleColumns[0] ?? columns[0];
369
+ const rowSelectionLabel = labelColumn ? String(getAccessorValue(row, labelColumn) ?? rowId) : rowId;
370
+ return /* @__PURE__ */ jsxRuntime.jsxs(chunkKQZWTTY2_js.TableRow, { "data-state": rowSelected ? "selected" : void 0, children: [
371
+ enableRowSelection ? /* @__PURE__ */ jsxRuntime.jsx(chunkKQZWTTY2_js.TableCell, { className: "w-10", children: /* @__PURE__ */ jsxRuntime.jsx(
372
+ chunkT7PIKDUZ_js.Checkbox,
373
+ {
374
+ "aria-label": `Select ${rowSelectionLabel}`,
375
+ checked: rowSelected,
376
+ onCheckedChange: (checked) => {
377
+ setSelectedIds(toggleId(selectedIds, rowId, checked));
378
+ }
379
+ }
380
+ ) }) : null,
381
+ visibleColumns.map((column, columnIndex) => {
382
+ const value = getAccessorValue(row, column);
383
+ const content = column.cell ? column.cell({ row, value, column, rowIndex }) : String(value ?? "");
384
+ const isRowHeader = columnIndex === 0;
385
+ return /* @__PURE__ */ jsxRuntime.jsx(
386
+ chunkKQZWTTY2_js.TableCell,
387
+ {
388
+ scope: isRowHeader ? "row" : void 0,
389
+ className: chunkZS5756ZC_js.cn(
390
+ textAlignClass(column.textAlign),
391
+ column.className,
392
+ column.cellClassName
393
+ ),
394
+ ...column.cellProps,
395
+ children: content
396
+ },
397
+ column.id
398
+ );
399
+ })
400
+ ] }, rowId);
401
+ };
402
+ const tableElement = /* @__PURE__ */ jsxRuntime.jsxs(
403
+ chunkKQZWTTY2_js.TableBase,
404
+ {
405
+ "aria-label": ariaLabel,
406
+ appearance: resolvedAppearance,
407
+ size: resolvedSize,
408
+ stickyHeader,
409
+ textAlign,
410
+ scrollAreaAriaLabel: tableScrollAreaAriaLabel,
411
+ className: tableClassName,
412
+ children: [
413
+ caption ? /* @__PURE__ */ jsxRuntime.jsx(chunkKQZWTTY2_js.TableCaption, { children: caption }) : null,
414
+ /* @__PURE__ */ jsxRuntime.jsx(chunkKQZWTTY2_js.TableHeader, { children: /* @__PURE__ */ jsxRuntime.jsxs(chunkKQZWTTY2_js.TableRow, { children: [
415
+ enableRowSelection ? /* @__PURE__ */ jsxRuntime.jsx(chunkKQZWTTY2_js.TableHead, { className: "w-10", children: /* @__PURE__ */ jsxRuntime.jsx(
416
+ chunkT7PIKDUZ_js.Checkbox,
417
+ {
418
+ "aria-label": "Select all rows",
419
+ checked: allVisibleSelected,
420
+ indeterminate: someVisibleSelected,
421
+ onCheckedChange: (checked) => {
422
+ const visibleIds = selectableRows.map((item) => item.id);
423
+ const nextIds = checked ? [.../* @__PURE__ */ new Set([...selectedIds, ...visibleIds])] : selectedIds.filter((id) => !visibleIds.includes(id));
424
+ setSelectedIds(nextIds);
425
+ }
426
+ }
427
+ ) }) : null,
428
+ visibleColumns.map((column) => {
429
+ const header = typeof column.header === "function" ? column.header({ column }) : column.header;
430
+ return /* @__PURE__ */ jsxRuntime.jsx(
431
+ chunkKQZWTTY2_js.TableHead,
432
+ {
433
+ className: chunkZS5756ZC_js.cn(
434
+ textAlignClass(column.textAlign),
435
+ column.className,
436
+ column.headerClassName
437
+ ),
438
+ ...column.sortable ? tableSort.getSortProps(column.id) : {},
439
+ ...column.headerProps,
440
+ children: header
441
+ },
442
+ column.id
443
+ );
444
+ })
445
+ ] }) }),
446
+ /* @__PURE__ */ jsxRuntime.jsx(chunkKQZWTTY2_js.TableBody, { children: loading ? renderStateRow(loadingContent) : renderedRows.length === 0 ? renderStateRow(emptyContent) : renderedRows.map(({ entry, index }) => renderRow(entry, index)) })
447
+ ]
448
+ }
449
+ );
450
+ return /* @__PURE__ */ jsxRuntime.jsxs(
451
+ "section",
452
+ {
453
+ ref,
454
+ "data-slot": "data-table",
455
+ className: chunkZS5756ZC_js.cn(dataTableRootVariants(), className),
456
+ ...rest,
457
+ children: [
458
+ searchOptions || enableColumnVisibility || bulkActions.length > 0 ? /* @__PURE__ */ jsxRuntime.jsxs(
459
+ "div",
460
+ {
461
+ "data-slot": "data-table-toolbar",
462
+ className: dataTableToolbarVariants(),
463
+ children: [
464
+ /* @__PURE__ */ jsxRuntime.jsxs(
465
+ "div",
466
+ {
467
+ "data-slot": "data-table-toolbar-primary",
468
+ className: dataTableToolbarGroupVariants(),
469
+ children: [
470
+ searchOptions ? /* @__PURE__ */ jsxRuntime.jsx(
471
+ chunkPTU5ZAYX_js.Input,
472
+ {
473
+ as: "input",
474
+ type: "search",
475
+ "aria-label": searchOptions.label ?? "Search table",
476
+ placeholder: searchOptions.placeholder ?? "Search table",
477
+ value: searchValue,
478
+ onChange: (event) => handleSearchChange(event.currentTarget.value),
479
+ className: "min-w-56"
480
+ }
481
+ ) : null,
482
+ selectedRows.length > 0 ? /* @__PURE__ */ jsxRuntime.jsxs("span", { className: dataTableStatusVariants(), "aria-live": "polite", children: [
483
+ selectedRows.length,
484
+ " selected"
485
+ ] }) : null
486
+ ]
487
+ }
488
+ ),
489
+ /* @__PURE__ */ jsxRuntime.jsxs(
490
+ "div",
491
+ {
492
+ "data-slot": "data-table-toolbar-actions",
493
+ className: dataTableToolbarGroupVariants(),
494
+ children: [
495
+ bulkActions.map((action, index) => /* @__PURE__ */ jsxRuntime.jsx(
496
+ chunk5ELR6MIN_js.Button,
497
+ {
498
+ type: "button",
499
+ appearance: "outline",
500
+ size: "sm",
501
+ disabled: action.disabled || selectedRows.length === 0,
502
+ onClick: () => action.onSelect(selectedRows),
503
+ children: action.label
504
+ },
505
+ index
506
+ )),
507
+ enableColumnVisibility ? /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "relative", children: [
508
+ /* @__PURE__ */ jsxRuntime.jsx(
509
+ chunk5ELR6MIN_js.Button,
510
+ {
511
+ type: "button",
512
+ appearance: "outline",
513
+ size: "sm",
514
+ "aria-expanded": columnPanelOpen,
515
+ "aria-controls": columnPanelId,
516
+ onClick: () => setColumnPanelOpen((open) => !open),
517
+ children: "Columns"
518
+ }
519
+ ),
520
+ columnPanelOpen ? /* @__PURE__ */ jsxRuntime.jsx(
521
+ "div",
522
+ {
523
+ id: columnPanelId,
524
+ "data-slot": "data-table-column-panel",
525
+ className: dataTableColumnPanelVariants(),
526
+ children: columns.map((column) => {
527
+ const canHide = column.enableHiding !== false;
528
+ return /* @__PURE__ */ jsxRuntime.jsxs(
529
+ chunkT7PIKDUZ_js.Checkbox,
530
+ {
531
+ checked: currentVisibleColumnIds.includes(column.id),
532
+ disabled: !canHide,
533
+ onCheckedChange: (checked) => setColumnVisible(column.id, checked),
534
+ children: [
535
+ String(
536
+ typeof column.header === "function" ? column.id : column.header
537
+ ),
538
+ " ",
539
+ "column"
540
+ ]
541
+ },
542
+ column.id
543
+ );
544
+ })
545
+ }
546
+ ) : null
547
+ ] }) : null
548
+ ]
549
+ }
550
+ )
551
+ ]
552
+ }
553
+ ) : null,
554
+ virtualizationEnabled ? /* @__PURE__ */ jsxRuntime.jsx(
555
+ "div",
556
+ {
557
+ ref: virtualList.setContainerRef,
558
+ "data-slot": "data-table-virtual-scroll",
559
+ className: dataTableVirtualScrollVariants(),
560
+ style: { maxHeight: virtualization?.height },
561
+ children: /* @__PURE__ */ jsxRuntime.jsx("div", { style: { minHeight: virtualList.totalHeight }, children: /* @__PURE__ */ jsxRuntime.jsx(
562
+ "div",
563
+ {
564
+ "data-slot": "data-table-virtual-offset",
565
+ style: { transform: `translateY(${virtualOffset}px)` },
566
+ children: tableElement
567
+ }
568
+ ) })
569
+ }
570
+ ) : tableElement,
571
+ paginationEnabled && pageCount > 1 ? /* @__PURE__ */ jsxRuntime.jsxs(
572
+ "div",
573
+ {
574
+ className: chunkZS5756ZC_js.cn(
575
+ "flex flex-wrap items-center gap-3",
576
+ showRowCount ? "justify-between" : "justify-end"
577
+ ),
578
+ children: [
579
+ showRowCount ? /* @__PURE__ */ jsxRuntime.jsxs("span", { className: dataTableStatusVariants(), children: [
580
+ "Showing ",
581
+ processedRows.length,
582
+ " of ",
583
+ sortedData.length
584
+ ] }) : null,
585
+ /* @__PURE__ */ jsxRuntime.jsx(
586
+ chunkG7FVHZRB_js.Pagination,
587
+ {
588
+ appearance: resolvedPaginationAppearance,
589
+ size: resolvedSize,
590
+ pageCount,
591
+ page: paginationState.currentPage,
592
+ siblingCount: paginationOptions?.siblingCount,
593
+ boundaryCount: paginationOptions?.boundaryCount,
594
+ onPageChange: paginationState.setPage,
595
+ className: "w-auto"
596
+ }
597
+ )
598
+ ]
599
+ }
600
+ ) : null
601
+ ]
602
+ }
603
+ );
604
+ }
605
+ DataTableBase.displayName = "DataTable";
606
+ function DataTable(props) {
607
+ return /* @__PURE__ */ jsxRuntime.jsx(DataTableBase, { ...props });
608
+ }
609
+ DataTable.displayName = "DataTable";
610
+
611
+ exports.DataTable = DataTable;
612
+ exports.dataTableColumnPanelVariants = dataTableColumnPanelVariants;
613
+ exports.dataTableRootVariants = dataTableRootVariants;
614
+ exports.dataTableStateCellVariants = dataTableStateCellVariants;
615
+ exports.dataTableStatusVariants = dataTableStatusVariants;
616
+ exports.dataTableToolbarGroupVariants = dataTableToolbarGroupVariants;
617
+ exports.dataTableToolbarVariants = dataTableToolbarVariants;
618
+ exports.dataTableVirtualScrollVariants = dataTableVirtualScrollVariants;
619
+ //# sourceMappingURL=data-table.js.map
620
+ //# sourceMappingURL=data-table.js.map