@zentauri-ui/zentauri-components 2.1.6 → 2.1.8

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 (152) hide show
  1. package/README.md +12 -8
  2. package/cli/cli.integration.test.ts +36 -0
  3. package/cli/index.mjs +43 -7
  4. package/cli/props.json +462 -3
  5. package/cli/registry.json +29 -0
  6. package/cli/rewrite-imports.mjs +29 -4
  7. package/cli/rewrite-imports.test.ts +35 -0
  8. package/dist/{chunk-WWKAJHIV.mjs → chunk-4PAHLHYF.mjs} +3 -3
  9. package/dist/{chunk-WWKAJHIV.mjs.map → chunk-4PAHLHYF.mjs.map} +1 -1
  10. package/dist/chunk-4SLVTSHM.js +241 -0
  11. package/dist/chunk-4SLVTSHM.js.map +1 -0
  12. package/dist/chunk-6OVDBAMI.js +19 -0
  13. package/dist/{chunk-3W2UUKWP.js.map → chunk-6OVDBAMI.js.map} +1 -1
  14. package/dist/chunk-74SKXGTM.js +4 -0
  15. package/dist/chunk-74SKXGTM.js.map +1 -0
  16. package/dist/{chunk-QE7OJW4J.js → chunk-BAAXQPZ7.js} +6 -6
  17. package/dist/{chunk-QE7OJW4J.js.map → chunk-BAAXQPZ7.js.map} +1 -1
  18. package/dist/chunk-CYKSS5S5.mjs +128 -0
  19. package/dist/chunk-CYKSS5S5.mjs.map +1 -0
  20. package/dist/chunk-D7ZTSAA6.mjs +221 -0
  21. package/dist/chunk-D7ZTSAA6.mjs.map +1 -0
  22. package/dist/{chunk-VA6SB6NN.js → chunk-DPNTQ4AK.js} +73 -6
  23. package/dist/chunk-DPNTQ4AK.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-IHDM7AHY.mjs +233 -0
  29. package/dist/chunk-IHDM7AHY.mjs.map +1 -0
  30. package/dist/chunk-L5QORCUO.js +225 -0
  31. package/dist/chunk-L5QORCUO.js.map +1 -0
  32. package/dist/chunk-LHBJD57K.mjs +143 -0
  33. package/dist/chunk-LHBJD57K.mjs.map +1 -0
  34. package/dist/{chunk-CHI6MBTI.mjs → chunk-OWVQVAOY.mjs} +3 -3
  35. package/dist/{chunk-CHI6MBTI.mjs.map → chunk-OWVQVAOY.mjs.map} +1 -1
  36. package/dist/chunk-OYAJG2BO.js +83 -0
  37. package/dist/chunk-OYAJG2BO.js.map +1 -0
  38. package/dist/chunk-PTU5ZAYX.js +145 -0
  39. package/dist/chunk-PTU5ZAYX.js.map +1 -0
  40. package/dist/chunk-QKO5DA4N.mjs +81 -0
  41. package/dist/chunk-QKO5DA4N.mjs.map +1 -0
  42. package/dist/chunk-T7PIKDUZ.js +130 -0
  43. package/dist/chunk-T7PIKDUZ.js.map +1 -0
  44. package/dist/chunk-TDK5TVJE.mjs +3 -0
  45. package/dist/chunk-TDK5TVJE.mjs.map +1 -0
  46. package/dist/{chunk-A4IB3C23.mjs → chunk-UVP3MUBU.mjs} +58 -7
  47. package/dist/chunk-UVP3MUBU.mjs.map +1 -0
  48. package/dist/chunk-VBNW2B4D.mjs +3 -0
  49. package/dist/chunk-VBNW2B4D.mjs.map +1 -0
  50. package/dist/chunk-W6DO36XD.mjs +96 -0
  51. package/dist/chunk-W6DO36XD.mjs.map +1 -0
  52. package/dist/chunk-XR3J46TZ.js +4 -0
  53. package/dist/chunk-XR3J46TZ.js.map +1 -0
  54. package/dist/chunk-ZOHCADDL.mjs +121 -0
  55. package/dist/chunk-ZOHCADDL.mjs.map +1 -0
  56. package/dist/design-system/data-table.d.ts +8 -0
  57. package/dist/design-system/data-table.d.ts.map +1 -0
  58. package/dist/design-system/facade.js +6 -6
  59. package/dist/design-system/facade.mjs +5 -5
  60. package/dist/design-system/index.d.ts +2 -0
  61. package/dist/design-system/index.d.ts.map +1 -1
  62. package/dist/design-system/split-button.d.ts +25 -0
  63. package/dist/design-system/split-button.d.ts.map +1 -0
  64. package/dist/hooks/useTableFilter.js +6 -116
  65. package/dist/hooks/useTableFilter.js.map +1 -1
  66. package/dist/hooks/useTableFilter.mjs +1 -118
  67. package/dist/hooks/useTableFilter.mjs.map +1 -1
  68. package/dist/hooks/useTableSort.js +6 -91
  69. package/dist/hooks/useTableSort.js.map +1 -1
  70. package/dist/hooks/useTableSort.mjs +1 -93
  71. package/dist/hooks/useTableSort.mjs.map +1 -1
  72. package/dist/hooks/useVirtualList.js +6 -76
  73. package/dist/hooks/useVirtualList.js.map +1 -1
  74. package/dist/hooks/useVirtualList.mjs +1 -78
  75. package/dist/hooks/useVirtualList.mjs.map +1 -1
  76. package/dist/ui/buttons/animated.js +8 -8
  77. package/dist/ui/buttons/animated.mjs +6 -6
  78. package/dist/ui/buttons.js +10 -9
  79. package/dist/ui/buttons.mjs +8 -7
  80. package/dist/ui/checkbox.js +7 -123
  81. package/dist/ui/checkbox.js.map +1 -1
  82. package/dist/ui/checkbox.mjs +2 -126
  83. package/dist/ui/checkbox.mjs.map +1 -1
  84. package/dist/ui/data-table/data-table-base.d.ts +6 -0
  85. package/dist/ui/data-table/data-table-base.d.ts.map +1 -0
  86. package/dist/ui/data-table/data-table.d.ts +6 -0
  87. package/dist/ui/data-table/data-table.d.ts.map +1 -0
  88. package/dist/ui/data-table/index.d.ts +4 -0
  89. package/dist/ui/data-table/index.d.ts.map +1 -0
  90. package/dist/ui/data-table/types.d.ts +92 -0
  91. package/dist/ui/data-table/types.d.ts.map +1 -0
  92. package/dist/ui/data-table/variants.d.ts +8 -0
  93. package/dist/ui/data-table/variants.d.ts.map +1 -0
  94. package/dist/ui/data-table.js +620 -0
  95. package/dist/ui/data-table.js.map +1 -0
  96. package/dist/ui/data-table.mjs +611 -0
  97. package/dist/ui/data-table.mjs.map +1 -0
  98. package/dist/ui/dropdown/dropdown.d.ts +1 -1
  99. package/dist/ui/dropdown/dropdown.d.ts.map +1 -1
  100. package/dist/ui/dropdown/types.d.ts +2 -2
  101. package/dist/ui/dropdown/types.d.ts.map +1 -1
  102. package/dist/ui/dropdown.js +31 -231
  103. package/dist/ui/dropdown.js.map +1 -1
  104. package/dist/ui/dropdown.mjs +4 -229
  105. package/dist/ui/dropdown.mjs.map +1 -1
  106. package/dist/ui/dynamic-stepper.js +18 -18
  107. package/dist/ui/dynamic-stepper.mjs +7 -7
  108. package/dist/ui/inputs.js +7 -138
  109. package/dist/ui/inputs.js.map +1 -1
  110. package/dist/ui/inputs.mjs +2 -141
  111. package/dist/ui/inputs.mjs.map +1 -1
  112. package/dist/ui/pagination.js +20 -221
  113. package/dist/ui/pagination.js.map +1 -1
  114. package/dist/ui/pagination.mjs +8 -223
  115. package/dist/ui/pagination.mjs.map +1 -1
  116. package/dist/ui/split-button/index.d.ts +4 -0
  117. package/dist/ui/split-button/index.d.ts.map +1 -0
  118. package/dist/ui/split-button/split-button-base.d.ts +6 -0
  119. package/dist/ui/split-button/split-button-base.d.ts.map +1 -0
  120. package/dist/ui/split-button/split-button.d.ts +6 -0
  121. package/dist/ui/split-button/split-button.d.ts.map +1 -0
  122. package/dist/ui/split-button/types.d.ts +30 -0
  123. package/dist/ui/split-button/types.d.ts.map +1 -0
  124. package/dist/ui/split-button/variants.d.ts +16 -0
  125. package/dist/ui/split-button/variants.d.ts.map +1 -0
  126. package/dist/ui/split-button.js +287 -0
  127. package/dist/ui/split-button.js.map +1 -0
  128. package/dist/ui/split-button.mjs +278 -0
  129. package/dist/ui/split-button.mjs.map +1 -0
  130. package/dist/ui/table.js +1 -0
  131. package/dist/ui/table.mjs +1 -0
  132. package/package.json +1 -1
  133. package/src/design-system/data-table.ts +20 -0
  134. package/src/design-system/index.ts +2 -0
  135. package/src/design-system/split-button.ts +38 -0
  136. package/src/ui/data-table/data-table-base.tsx +701 -0
  137. package/src/ui/data-table/data-table.test.tsx +389 -0
  138. package/src/ui/data-table/data-table.tsx +11 -0
  139. package/src/ui/data-table/index.ts +24 -0
  140. package/src/ui/data-table/types.ts +121 -0
  141. package/src/ui/data-table/variants.ts +21 -0
  142. package/src/ui/dropdown/dropdown.tsx +7 -3
  143. package/src/ui/dropdown/types.ts +2 -2
  144. package/src/ui/split-button/index.ts +19 -0
  145. package/src/ui/split-button/split-button-base.tsx +232 -0
  146. package/src/ui/split-button/split-button.test.tsx +208 -0
  147. package/src/ui/split-button/split-button.tsx +9 -0
  148. package/src/ui/split-button/types.ts +46 -0
  149. package/src/ui/split-button/variants.ts +46 -0
  150. package/dist/chunk-3W2UUKWP.js +0 -19
  151. package/dist/chunk-A4IB3C23.mjs.map +0 -1
  152. package/dist/chunk-VA6SB6NN.js.map +0 -1
@@ -0,0 +1,620 @@
1
+ "use client";
2
+ 'use strict';
3
+
4
+ var chunkI7EBE7BD_js = require('../chunk-I7EBE7BD.js');
5
+ var chunkOYAJG2BO_js = require('../chunk-OYAJG2BO.js');
6
+ var chunkHMDH4BQJ_js = require('../chunk-HMDH4BQJ.js');
7
+ require('../chunk-74SKXGTM.js');
8
+ var chunkKQZWTTY2_js = require('../chunk-KQZWTTY2.js');
9
+ var chunkL5QORCUO_js = require('../chunk-L5QORCUO.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 chunkBAAXQPZ7_js = require('../chunk-BAAXQPZ7.js');
15
+ require('../chunk-6OVDBAMI.js');
16
+ var chunkT7PIKDUZ_js = require('../chunk-T7PIKDUZ.js');
17
+ require('../chunk-KOIXQXZB.js');
18
+ var chunkDPNTQ4AK_js = require('../chunk-DPNTQ4AK.js');
19
+ require('../chunk-FBUY6K6S.js');
20
+ require('../chunk-OH5VOGNW.js');
21
+ require('../chunk-Y7BU5RC4.js');
22
+ require('../chunk-NDF3HORF.js');
23
+ require('../chunk-USLNTKVQ.js');
24
+ require('../chunk-D7ATXPVI.js');
25
+ require('../chunk-IEHY6KNM.js');
26
+ require('../chunk-3MK7CWEX.js');
27
+ require('../chunk-22FJROCI.js');
28
+ require('../chunk-UJXFD4SK.js');
29
+ require('../chunk-3EJCQXGV.js');
30
+ require('../chunk-6KVTKYTB.js');
31
+ require('../chunk-L7W4NRK6.js');
32
+ require('../chunk-KWBGLH7G.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(chunkDPNTQ4AK_js.zuiDataTableRootBase);
67
+ var dataTableToolbarVariants = classVarianceAuthority.cva(chunkDPNTQ4AK_js.zuiDataTableToolbarBase);
68
+ var dataTableToolbarGroupVariants = classVarianceAuthority.cva(chunkDPNTQ4AK_js.zuiDataTableToolbarGroupBase);
69
+ var dataTableColumnPanelVariants = classVarianceAuthority.cva(chunkDPNTQ4AK_js.zuiDataTableColumnPanelBase);
70
+ var dataTableStatusVariants = classVarianceAuthority.cva(chunkDPNTQ4AK_js.zuiDataTableStatusBase);
71
+ var dataTableStateCellVariants = classVarianceAuthority.cva(chunkDPNTQ4AK_js.zuiDataTableStateCellBase);
72
+ var dataTableVirtualScrollVariants = classVarianceAuthority.cva(
73
+ chunkDPNTQ4AK_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
+ chunkBAAXQPZ7_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
+ chunkBAAXQPZ7_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
+ chunkL5QORCUO_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