@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,121 @@
1
+ import { useState, useMemo, useCallback } from 'react';
2
+
3
+ // src/hooks/useTableFilter/useTableFilter.ts
4
+ function normalizeFilters(filters) {
5
+ if (!filters || typeof filters !== "object") {
6
+ return {};
7
+ }
8
+ return Object.fromEntries(
9
+ Object.entries(filters).filter(
10
+ (entry) => typeof entry[1] === "string" && entry[1].trim().length > 0
11
+ )
12
+ );
13
+ }
14
+ function defaultColumnValue(row, filterKey) {
15
+ if (row && typeof row === "object" && filterKey in row) {
16
+ return row[filterKey];
17
+ }
18
+ return void 0;
19
+ }
20
+ function useTableFilter({
21
+ data,
22
+ filters,
23
+ defaultFilters = {},
24
+ onFiltersChange,
25
+ getColumnValue = defaultColumnValue,
26
+ filterPredicate
27
+ }) {
28
+ const [internalFilters, setInternalFilters] = useState(() => normalizeFilters(defaultFilters));
29
+ const isControlled = filters !== void 0;
30
+ const currentFilters = useMemo(
31
+ () => normalizeFilters(isControlled ? filters : internalFilters),
32
+ [filters, internalFilters, isControlled]
33
+ );
34
+ const setFilters = useCallback(
35
+ (nextFilters) => {
36
+ const normalized = normalizeFilters(nextFilters);
37
+ if (!isControlled) {
38
+ setInternalFilters(normalized);
39
+ }
40
+ onFiltersChange?.(normalized);
41
+ },
42
+ [isControlled, onFiltersChange]
43
+ );
44
+ const updateFilters = useCallback(
45
+ (updater) => {
46
+ if (isControlled) {
47
+ const normalized = normalizeFilters(updater(currentFilters));
48
+ onFiltersChange?.(normalized);
49
+ return;
50
+ }
51
+ setInternalFilters((previousFilters) => {
52
+ const normalized = normalizeFilters(updater(previousFilters));
53
+ onFiltersChange?.(normalized);
54
+ return normalized;
55
+ });
56
+ },
57
+ [currentFilters, isControlled, onFiltersChange]
58
+ );
59
+ const setFilter = useCallback(
60
+ (filterKey, value) => {
61
+ updateFilters((previousFilters) => ({
62
+ ...previousFilters,
63
+ [filterKey]: value
64
+ }));
65
+ },
66
+ [updateFilters]
67
+ );
68
+ const clearFilter = useCallback(
69
+ (filterKey) => {
70
+ updateFilters((previousFilters) => {
71
+ const nextFilters = { ...previousFilters };
72
+ delete nextFilters[filterKey];
73
+ return nextFilters;
74
+ });
75
+ },
76
+ [updateFilters]
77
+ );
78
+ const clearFilters = useCallback(() => {
79
+ setFilters({});
80
+ }, [setFilters]);
81
+ const activeFilters = useMemo(
82
+ () => Object.entries(currentFilters).map(
83
+ ([filterKey, filterValue]) => ({
84
+ filterKey,
85
+ filterValue,
86
+ lowerFilterValue: filterValue.toLowerCase()
87
+ })
88
+ ),
89
+ [currentFilters]
90
+ );
91
+ const filteredData = useMemo(() => {
92
+ if (activeFilters.length === 0) {
93
+ return [...data];
94
+ }
95
+ return data.filter(
96
+ (row) => activeFilters.every(({ filterKey, filterValue, lowerFilterValue }) => {
97
+ if (filterPredicate) {
98
+ return filterPredicate(row, filterValue, filterKey);
99
+ }
100
+ const columnValue = getColumnValue(row, filterKey);
101
+ if (columnValue == null) {
102
+ return false;
103
+ }
104
+ return String(columnValue).toLowerCase().includes(lowerFilterValue);
105
+ })
106
+ );
107
+ }, [activeFilters, data, filterPredicate, getColumnValue]);
108
+ return {
109
+ filters: currentFilters,
110
+ filteredData,
111
+ hasActiveFilters: activeFilters.length > 0,
112
+ setFilter,
113
+ setFilters,
114
+ clearFilter,
115
+ clearFilters
116
+ };
117
+ }
118
+
119
+ export { useTableFilter };
120
+ //# sourceMappingURL=chunk-ZOHCADDL.mjs.map
121
+ //# sourceMappingURL=chunk-ZOHCADDL.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/hooks/useTableFilter/useTableFilter.ts"],"names":[],"mappings":"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","file":"chunk-ZOHCADDL.mjs","sourcesContent":["\"use client\";\n\nimport { useCallback, useMemo, useState } from \"react\";\n\nimport type {\n TableFilterState,\n UseTableFilterParams,\n UseTableFilterResult,\n} from \"./types\";\n\nfunction normalizeFilters<TKey extends string>(\n filters: TableFilterState<TKey> | null | undefined,\n): TableFilterState<TKey> {\n if (!filters || typeof filters !== \"object\") {\n return {};\n }\n\n return Object.fromEntries(\n Object.entries(filters).filter(\n (entry): entry is [TKey, string] =>\n typeof entry[1] === \"string\" && entry[1].trim().length > 0,\n ),\n ) as TableFilterState<TKey>;\n}\n\nfunction defaultColumnValue<TData, TKey extends string>(\n row: TData,\n filterKey: TKey,\n): unknown {\n if (row && typeof row === \"object\" && filterKey in row) {\n return (row as Record<TKey, unknown>)[filterKey];\n }\n return undefined;\n}\n\nexport function useTableFilter<TData, TKey extends string = string>({\n data,\n filters,\n defaultFilters = {},\n onFiltersChange,\n getColumnValue = defaultColumnValue,\n filterPredicate,\n}: UseTableFilterParams<TData, TKey>): UseTableFilterResult<TData, TKey> {\n const [internalFilters, setInternalFilters] = useState<\n TableFilterState<TKey>\n >(() => normalizeFilters(defaultFilters));\n\n const isControlled = filters !== undefined;\n const currentFilters = useMemo(\n () => normalizeFilters(isControlled ? filters : internalFilters),\n [filters, internalFilters, isControlled],\n );\n\n const setFilters = useCallback(\n (nextFilters: TableFilterState<TKey>) => {\n const normalized = normalizeFilters(nextFilters);\n if (!isControlled) {\n setInternalFilters(normalized);\n }\n onFiltersChange?.(normalized);\n },\n [isControlled, onFiltersChange],\n );\n\n const updateFilters = useCallback(\n (\n updater: (\n previousFilters: TableFilterState<TKey>,\n ) => TableFilterState<TKey>,\n ) => {\n if (isControlled) {\n const normalized = normalizeFilters(updater(currentFilters));\n onFiltersChange?.(normalized);\n return;\n }\n\n setInternalFilters((previousFilters) => {\n const normalized = normalizeFilters(updater(previousFilters));\n onFiltersChange?.(normalized);\n return normalized;\n });\n },\n [currentFilters, isControlled, onFiltersChange],\n );\n\n const setFilter = useCallback(\n (filterKey: TKey, value: string) => {\n updateFilters((previousFilters) => ({\n ...previousFilters,\n [filterKey]: value,\n }));\n },\n [updateFilters],\n );\n\n const clearFilter = useCallback(\n (filterKey: TKey) => {\n updateFilters((previousFilters) => {\n const nextFilters = { ...previousFilters };\n delete nextFilters[filterKey];\n return nextFilters;\n });\n },\n [updateFilters],\n );\n\n const clearFilters = useCallback(() => {\n setFilters({});\n }, [setFilters]);\n\n const activeFilters = useMemo(\n () =>\n (Object.entries(currentFilters) as [TKey, string][]).map(\n ([filterKey, filterValue]) => ({\n filterKey,\n filterValue,\n lowerFilterValue: filterValue.toLowerCase(),\n }),\n ),\n [currentFilters],\n );\n\n const filteredData = useMemo(() => {\n if (activeFilters.length === 0) {\n return [...data];\n }\n\n return data.filter((row) =>\n activeFilters.every(({ filterKey, filterValue, lowerFilterValue }) => {\n if (filterPredicate) {\n return filterPredicate(row, filterValue, filterKey);\n }\n\n const columnValue = getColumnValue(row, filterKey);\n if (columnValue == null) {\n return false;\n }\n\n return String(columnValue).toLowerCase().includes(lowerFilterValue);\n }),\n );\n }, [activeFilters, data, filterPredicate, getColumnValue]);\n\n return {\n filters: currentFilters,\n filteredData,\n hasActiveFilters: activeFilters.length > 0,\n setFilter,\n setFilters,\n clearFilter,\n clearFilters,\n };\n}\n"]}
@@ -0,0 +1,8 @@
1
+ export declare const zuiDataTableRootBase = "w-full space-y-3 text-[color:var(--zui-data-table-fg,var(--zui-fg,oklch(37.2%_0.044_257.287)))] dark:text-[color:var(--zui-data-table-fg-dark,var(--zui-fg-dark,oklch(92.9%_0.013_255.508)))]";
2
+ export declare const zuiDataTableToolbarBase = "flex flex-col gap-3 rounded-lg border border-[color:var(--zui-data-table-toolbar-border,var(--zui-border,#0000001a))] bg-[var(--zui-data-table-toolbar-bg,var(--zui-surface,#ffffff))] p-3 dark:border-[color:var(--zui-data-table-toolbar-border-dark,var(--zui-border-dark,#ffffff1a))] dark:bg-[var(--zui-data-table-toolbar-bg-dark,var(--zui-surface-dark,#020617))] sm:flex-row sm:items-center sm:justify-between";
3
+ export declare const zuiDataTableToolbarGroupBase = "flex min-w-0 flex-wrap items-center gap-2";
4
+ export declare const zuiDataTableColumnPanelBase = "absolute right-0 z-20 mt-2 grid min-w-48 gap-2 rounded-lg border border-[color:var(--zui-data-table-column-panel-border,var(--zui-border,#0000001a))] bg-[var(--zui-data-table-column-panel-bg,var(--zui-surface,#ffffff))] p-3 shadow-lg shadow-black/10 dark:border-[color:var(--zui-data-table-column-panel-border-dark,var(--zui-border-dark,#ffffff1a))] dark:bg-[var(--zui-data-table-column-panel-bg-dark,var(--zui-surface-dark,#020617))] dark:shadow-black/40";
5
+ export declare const zuiDataTableStatusBase = "text-sm text-[color:var(--zui-data-table-muted-fg,var(--zui-muted-fg,oklch(55.4%_0.046_257.417)))] dark:text-[color:var(--zui-data-table-muted-fg-dark,var(--zui-muted-fg-dark,oklch(70.4%_0.04_256.788)))]";
6
+ export declare const zuiDataTableStateCellBase = "p-8 text-center text-[color:var(--zui-data-table-state-fg,var(--zui-muted-fg,oklch(55.4%_0.046_257.417)))] dark:text-[color:var(--zui-data-table-state-fg-dark,var(--zui-muted-fg-dark,oklch(70.4%_0.04_256.788)))]";
7
+ export declare const zuiDataTableVirtualScrollBase = "overflow-auto rounded-lg border border-[color:var(--zui-data-table-virtual-border,var(--zui-border,#0000001a))] dark:border-[color:var(--zui-data-table-virtual-border-dark,var(--zui-border-dark,#ffffff1a))]";
8
+ //# sourceMappingURL=data-table.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"data-table.d.ts","sourceRoot":"","sources":["../../src/design-system/data-table.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,oBAAoB,kMACgK,CAAC;AAElM,eAAO,MAAM,uBAAuB,6ZACwX,CAAC;AAE7Z,eAAO,MAAM,4BAA4B,8CACI,CAAC;AAE9C,eAAO,MAAM,2BAA2B,4cACma,CAAC;AAE5c,eAAO,MAAM,sBAAsB,gNAC4K,CAAC;AAEhN,eAAO,MAAM,yBAAyB,wNACiL,CAAC;AAExN,eAAO,MAAM,6BAA6B,mNACwK,CAAC"}
@@ -1,32 +1,32 @@
1
1
  'use strict';
2
2
 
3
- var chunkVA6SB6NN_js = require('../chunk-VA6SB6NN.js');
3
+ var chunkDPNTQ4AK_js = require('../chunk-DPNTQ4AK.js');
4
4
  require('../chunk-FBUY6K6S.js');
5
+ require('../chunk-OH5VOGNW.js');
6
+ require('../chunk-Y7BU5RC4.js');
5
7
  require('../chunk-NDF3HORF.js');
6
8
  require('../chunk-USLNTKVQ.js');
7
9
  require('../chunk-D7ATXPVI.js');
8
10
  require('../chunk-IEHY6KNM.js');
9
11
  require('../chunk-3MK7CWEX.js');
12
+ require('../chunk-22FJROCI.js');
10
13
  require('../chunk-UJXFD4SK.js');
11
14
  require('../chunk-3EJCQXGV.js');
12
15
  require('../chunk-6KVTKYTB.js');
13
16
  require('../chunk-L7W4NRK6.js');
14
17
  require('../chunk-KWBGLH7G.js');
15
- require('../chunk-OH5VOGNW.js');
16
- require('../chunk-Y7BU5RC4.js');
18
+ require('../chunk-WGN2CBG6.js');
17
19
  require('../chunk-SRSRY5K2.js');
18
20
  require('../chunk-UG3GF2BD.js');
19
21
  require('../chunk-BZTAA3MK.js');
20
22
  require('../chunk-PZ25OHJE.js');
21
23
  require('../chunk-HOOZYA4N.js');
22
24
  require('../chunk-CJCOURVM.js');
23
- require('../chunk-22FJROCI.js');
24
25
  require('../chunk-KJMW7S5X.js');
25
26
  require('../chunk-3CYJQ6KF.js');
26
27
  require('../chunk-3453DQNL.js');
27
28
  require('../chunk-DYSXCJGL.js');
28
29
  require('../chunk-A7MU6SFI.js');
29
- require('../chunk-WGN2CBG6.js');
30
30
  require('../chunk-NYO3W5GY.js');
31
31
  require('../chunk-HNRCPZCK.js');
32
32
  require('../chunk-J2SUGU3X.js');
@@ -242,7 +242,7 @@ function classifyVariables(raw) {
242
242
  };
243
243
  });
244
244
  }
245
- var tokenEntries = Object.entries(chunkVA6SB6NN_js.design_system_exports);
245
+ var tokenEntries = Object.entries(chunkDPNTQ4AK_js.design_system_exports);
246
246
  function flattenClassStrings(value) {
247
247
  if (typeof value === "string") {
248
248
  return [value];
@@ -1,30 +1,30 @@
1
- import { design_system_exports } from '../chunk-A4IB3C23.mjs';
1
+ import { design_system_exports } from '../chunk-UVP3MUBU.mjs';
2
2
  import '../chunk-2NQKFH26.mjs';
3
+ import '../chunk-XY3TKIIH.mjs';
4
+ import '../chunk-FX5KR2GP.mjs';
3
5
  import '../chunk-ZBAKTM2R.mjs';
4
6
  import '../chunk-4ZBMDWWY.mjs';
5
7
  import '../chunk-YH6MOKHR.mjs';
6
8
  import '../chunk-T4ZLTKV2.mjs';
7
9
  import '../chunk-PUSCPBT2.mjs';
10
+ import '../chunk-523VQLCW.mjs';
8
11
  import '../chunk-3VW4HMJT.mjs';
9
12
  import '../chunk-LRYKMXKI.mjs';
10
13
  import '../chunk-XFJIX2YP.mjs';
11
14
  import '../chunk-4WG3VNVL.mjs';
12
15
  import '../chunk-YPTHTFVF.mjs';
13
- import '../chunk-XY3TKIIH.mjs';
14
- import '../chunk-FX5KR2GP.mjs';
16
+ import '../chunk-JEDMUBYI.mjs';
15
17
  import '../chunk-EJ3UMMCS.mjs';
16
18
  import '../chunk-EE53BIXR.mjs';
17
19
  import '../chunk-YXU2MJMT.mjs';
18
20
  import '../chunk-3IE4IELX.mjs';
19
21
  import '../chunk-BUEI4RMR.mjs';
20
22
  import '../chunk-5AOVTY2X.mjs';
21
- import '../chunk-523VQLCW.mjs';
22
23
  import '../chunk-SS3T3BUL.mjs';
23
24
  import '../chunk-SCWQSQBJ.mjs';
24
25
  import '../chunk-ZPGYR2UP.mjs';
25
26
  import '../chunk-MBEQ4GQ7.mjs';
26
27
  import '../chunk-34LHS26H.mjs';
27
- import '../chunk-JEDMUBYI.mjs';
28
28
  import '../chunk-YKTANA3H.mjs';
29
29
  import '../chunk-ENYZGL4R.mjs';
30
30
  import '../chunk-2VPXQ2LA.mjs';
@@ -12,6 +12,7 @@ export * from "./combobox";
12
12
  export * from "./command";
13
13
  export * from "./context-menu";
14
14
  export * from "./copy-button";
15
+ export * from "./data-table";
15
16
  export * from "./divider";
16
17
  export * from "./drawer";
17
18
  export * from "./dropdown";
@@ -31,6 +32,7 @@ export * from "./radio-group";
31
32
  export * from "./scroll-area";
32
33
  export * from "./select";
33
34
  export * from "./skeleton";
35
+ export * from "./split-button";
34
36
  export * from "./slider";
35
37
  export * from "./spinner";
36
38
  export * from "./table";
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/design-system/index.ts"],"names":[],"mappings":"AAAA,cAAc,aAAa,CAAC;AAC5B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,SAAS,CAAC;AACxB,cAAc,mBAAmB,CAAC;AAClC,cAAc,UAAU,CAAC;AACzB,cAAc,SAAS,CAAC;AACxB,cAAc,cAAc,CAAC;AAC7B,cAAc,UAAU,CAAC;AACzB,cAAc,QAAQ,CAAC;AACvB,cAAc,YAAY,CAAC;AAC3B,cAAc,YAAY,CAAC;AAC3B,cAAc,WAAW,CAAC;AAC1B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,eAAe,CAAC;AAC9B,cAAc,WAAW,CAAC;AAC1B,cAAc,UAAU,CAAC;AACzB,cAAc,YAAY,CAAC;AAC3B,cAAc,mBAAmB,CAAC;AAClC,cAAc,eAAe,CAAC;AAC9B,cAAc,eAAe,CAAC;AAC9B,cAAc,UAAU,CAAC;AACzB,cAAc,OAAO,CAAC;AACtB,cAAc,WAAW,CAAC;AAC1B,cAAc,SAAS,CAAC;AACxB,cAAc,aAAa,CAAC;AAC5B,cAAc,cAAc,CAAC;AAC7B,cAAc,WAAW,CAAC;AAC1B,cAAc,YAAY,CAAC;AAC3B,cAAc,UAAU,CAAC;AACzB,cAAc,eAAe,CAAC;AAC9B,cAAc,eAAe,CAAC;AAC9B,cAAc,UAAU,CAAC;AACzB,cAAc,YAAY,CAAC;AAC3B,cAAc,UAAU,CAAC;AACzB,cAAc,WAAW,CAAC;AAC1B,cAAc,SAAS,CAAC;AACxB,cAAc,QAAQ,CAAC;AACvB,cAAc,YAAY,CAAC;AAC3B,cAAc,SAAS,CAAC;AACxB,cAAc,UAAU,CAAC;AACzB,cAAc,UAAU,CAAC;AACzB,cAAc,WAAW,CAAC;AAC1B,cAAc,aAAa,CAAC;AAC5B,cAAc,cAAc,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/design-system/index.ts"],"names":[],"mappings":"AAAA,cAAc,aAAa,CAAC;AAC5B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,SAAS,CAAC;AACxB,cAAc,mBAAmB,CAAC;AAClC,cAAc,UAAU,CAAC;AACzB,cAAc,SAAS,CAAC;AACxB,cAAc,cAAc,CAAC;AAC7B,cAAc,UAAU,CAAC;AACzB,cAAc,QAAQ,CAAC;AACvB,cAAc,YAAY,CAAC;AAC3B,cAAc,YAAY,CAAC;AAC3B,cAAc,WAAW,CAAC;AAC1B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,eAAe,CAAC;AAC9B,cAAc,cAAc,CAAC;AAC7B,cAAc,WAAW,CAAC;AAC1B,cAAc,UAAU,CAAC;AACzB,cAAc,YAAY,CAAC;AAC3B,cAAc,mBAAmB,CAAC;AAClC,cAAc,eAAe,CAAC;AAC9B,cAAc,eAAe,CAAC;AAC9B,cAAc,UAAU,CAAC;AACzB,cAAc,OAAO,CAAC;AACtB,cAAc,WAAW,CAAC;AAC1B,cAAc,SAAS,CAAC;AACxB,cAAc,aAAa,CAAC;AAC5B,cAAc,cAAc,CAAC;AAC7B,cAAc,WAAW,CAAC;AAC1B,cAAc,YAAY,CAAC;AAC3B,cAAc,UAAU,CAAC;AACzB,cAAc,eAAe,CAAC;AAC9B,cAAc,eAAe,CAAC;AAC9B,cAAc,UAAU,CAAC;AACzB,cAAc,YAAY,CAAC;AAC3B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,UAAU,CAAC;AACzB,cAAc,WAAW,CAAC;AAC1B,cAAc,SAAS,CAAC;AACxB,cAAc,QAAQ,CAAC;AACvB,cAAc,YAAY,CAAC;AAC3B,cAAc,SAAS,CAAC;AACxB,cAAc,UAAU,CAAC;AACzB,cAAc,UAAU,CAAC;AACzB,cAAc,WAAW,CAAC;AAC1B,cAAc,aAAa,CAAC;AAC5B,cAAc,cAAc,CAAC"}
@@ -0,0 +1,25 @@
1
+ export declare const zuiSplitButtonRoot = "inline-flex align-middle data-[full-width=true]:w-full";
2
+ export declare const zuiSplitButtonFullWidth = "w-full";
3
+ export declare const zuiSplitButtonDropdown = "data-[full-width=true]:block data-[full-width=true]:w-full";
4
+ export declare const zuiSplitButtonGroup = "inline-flex items-stretch data-[full-width=true]:w-full";
5
+ export declare const zuiSplitButtonPrimary = "rounded-r-none data-[full-width=true]:min-w-0 data-[full-width=true]:flex-1";
6
+ export declare const zuiSplitButtonTrigger = "rounded-l-none border-l border-[color:var(--zui-split-button-separator,var(--zui-border,#ffffff33))] dark:border-[color:var(--zui-split-button-separator-dark,var(--zui-border-dark,#00000033))] px-2.5";
7
+ export declare const zuiSplitButtonTriggerSizes: {
8
+ readonly sm: "min-w-8 px-2";
9
+ readonly md: "min-w-10 px-2.5";
10
+ readonly lg: "min-w-11 px-3";
11
+ readonly xl: "min-w-12 px-3.5";
12
+ readonly "2xl": "min-w-14 px-4";
13
+ readonly "3xl": "min-w-16 px-4";
14
+ readonly "4xl": "min-w-18 px-5";
15
+ readonly "5xl": "min-w-20 px-5";
16
+ readonly "6xl": "min-w-22 px-6";
17
+ readonly "7xl": "min-w-24 px-6";
18
+ readonly "8xl": "min-w-26 px-7";
19
+ readonly "9xl": "min-w-28 px-7";
20
+ readonly "10xl": "min-w-30 px-8";
21
+ readonly icon: "min-w-10 px-0";
22
+ };
23
+ export declare const zuiSplitButtonContent = "min-w-[var(--zui-split-button-menu-min-width,12rem)]";
24
+ export declare const zuiSplitButtonItemDisabled = "pointer-events-none opacity-50";
25
+ //# sourceMappingURL=split-button.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"split-button.d.ts","sourceRoot":"","sources":["../../src/design-system/split-button.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,kBAAkB,2DAC2B,CAAC;AAE3D,eAAO,MAAM,uBAAuB,WAAW,CAAC;AAEhD,eAAO,MAAM,sBAAsB,+DAC2B,CAAC;AAE/D,eAAO,MAAM,mBAAmB,4DAC2B,CAAC;AAE5D,eAAO,MAAM,qBAAqB,gFAC6C,CAAC;AAEhF,eAAO,MAAM,qBAAqB,4MACyK,CAAC;AAE5M,eAAO,MAAM,0BAA0B;;;;;;;;;;;;;;;CAe7B,CAAC;AAEX,eAAO,MAAM,qBAAqB,yDACsB,CAAC;AAEzD,eAAO,MAAM,0BAA0B,mCAAmC,CAAC"}
@@ -1,124 +1,14 @@
1
1
  "use client";
2
2
  'use strict';
3
3
 
4
+ var chunkHMDH4BQJ_js = require('../chunk-HMDH4BQJ.js');
4
5
  require('../chunk-PZ5AY32C.js');
5
- var react = require('react');
6
6
 
7
- function normalizeFilters(filters) {
8
- if (!filters || typeof filters !== "object") {
9
- return {};
10
- }
11
- return Object.fromEntries(
12
- Object.entries(filters).filter(
13
- (entry) => typeof entry[1] === "string" && entry[1].trim().length > 0
14
- )
15
- );
16
- }
17
- function defaultColumnValue(row, filterKey) {
18
- if (row && typeof row === "object" && filterKey in row) {
19
- return row[filterKey];
20
- }
21
- return void 0;
22
- }
23
- function useTableFilter({
24
- data,
25
- filters,
26
- defaultFilters = {},
27
- onFiltersChange,
28
- getColumnValue = defaultColumnValue,
29
- filterPredicate
30
- }) {
31
- const [internalFilters, setInternalFilters] = react.useState(() => normalizeFilters(defaultFilters));
32
- const isControlled = filters !== void 0;
33
- const currentFilters = react.useMemo(
34
- () => normalizeFilters(isControlled ? filters : internalFilters),
35
- [filters, internalFilters, isControlled]
36
- );
37
- const setFilters = react.useCallback(
38
- (nextFilters) => {
39
- const normalized = normalizeFilters(nextFilters);
40
- if (!isControlled) {
41
- setInternalFilters(normalized);
42
- }
43
- onFiltersChange?.(normalized);
44
- },
45
- [isControlled, onFiltersChange]
46
- );
47
- const updateFilters = react.useCallback(
48
- (updater) => {
49
- if (isControlled) {
50
- const normalized = normalizeFilters(updater(currentFilters));
51
- onFiltersChange?.(normalized);
52
- return;
53
- }
54
- setInternalFilters((previousFilters) => {
55
- const normalized = normalizeFilters(updater(previousFilters));
56
- onFiltersChange?.(normalized);
57
- return normalized;
58
- });
59
- },
60
- [currentFilters, isControlled, onFiltersChange]
61
- );
62
- const setFilter = react.useCallback(
63
- (filterKey, value) => {
64
- updateFilters((previousFilters) => ({
65
- ...previousFilters,
66
- [filterKey]: value
67
- }));
68
- },
69
- [updateFilters]
70
- );
71
- const clearFilter = react.useCallback(
72
- (filterKey) => {
73
- updateFilters((previousFilters) => {
74
- const nextFilters = { ...previousFilters };
75
- delete nextFilters[filterKey];
76
- return nextFilters;
77
- });
78
- },
79
- [updateFilters]
80
- );
81
- const clearFilters = react.useCallback(() => {
82
- setFilters({});
83
- }, [setFilters]);
84
- const activeFilters = react.useMemo(
85
- () => Object.entries(currentFilters).map(
86
- ([filterKey, filterValue]) => ({
87
- filterKey,
88
- filterValue,
89
- lowerFilterValue: filterValue.toLowerCase()
90
- })
91
- ),
92
- [currentFilters]
93
- );
94
- const filteredData = react.useMemo(() => {
95
- if (activeFilters.length === 0) {
96
- return [...data];
97
- }
98
- return data.filter(
99
- (row) => activeFilters.every(({ filterKey, filterValue, lowerFilterValue }) => {
100
- if (filterPredicate) {
101
- return filterPredicate(row, filterValue, filterKey);
102
- }
103
- const columnValue = getColumnValue(row, filterKey);
104
- if (columnValue == null) {
105
- return false;
106
- }
107
- return String(columnValue).toLowerCase().includes(lowerFilterValue);
108
- })
109
- );
110
- }, [activeFilters, data, filterPredicate, getColumnValue]);
111
- return {
112
- filters: currentFilters,
113
- filteredData,
114
- hasActiveFilters: activeFilters.length > 0,
115
- setFilter,
116
- setFilters,
117
- clearFilter,
118
- clearFilters
119
- };
120
- }
121
7
 
122
- exports.useTableFilter = useTableFilter;
8
+
9
+ Object.defineProperty(exports, "useTableFilter", {
10
+ enumerable: true,
11
+ get: function () { return chunkHMDH4BQJ_js.useTableFilter; }
12
+ });
123
13
  //# sourceMappingURL=useTableFilter.js.map
124
14
  //# sourceMappingURL=useTableFilter.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/hooks/useTableFilter/useTableFilter.ts"],"names":["useState","useMemo","useCallback"],"mappings":"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","file":"useTableFilter.js","sourcesContent":["\"use client\";\n\nimport { useCallback, useMemo, useState } from \"react\";\n\nimport type {\n TableFilterState,\n UseTableFilterParams,\n UseTableFilterResult,\n} from \"./types\";\n\nfunction normalizeFilters<TKey extends string>(\n filters: TableFilterState<TKey> | null | undefined,\n): TableFilterState<TKey> {\n if (!filters || typeof filters !== \"object\") {\n return {};\n }\n\n return Object.fromEntries(\n Object.entries(filters).filter(\n (entry): entry is [TKey, string] =>\n typeof entry[1] === \"string\" && entry[1].trim().length > 0,\n ),\n ) as TableFilterState<TKey>;\n}\n\nfunction defaultColumnValue<TData, TKey extends string>(\n row: TData,\n filterKey: TKey,\n): unknown {\n if (row && typeof row === \"object\" && filterKey in row) {\n return (row as Record<TKey, unknown>)[filterKey];\n }\n return undefined;\n}\n\nexport function useTableFilter<TData, TKey extends string = string>({\n data,\n filters,\n defaultFilters = {},\n onFiltersChange,\n getColumnValue = defaultColumnValue,\n filterPredicate,\n}: UseTableFilterParams<TData, TKey>): UseTableFilterResult<TData, TKey> {\n const [internalFilters, setInternalFilters] = useState<\n TableFilterState<TKey>\n >(() => normalizeFilters(defaultFilters));\n\n const isControlled = filters !== undefined;\n const currentFilters = useMemo(\n () => normalizeFilters(isControlled ? filters : internalFilters),\n [filters, internalFilters, isControlled],\n );\n\n const setFilters = useCallback(\n (nextFilters: TableFilterState<TKey>) => {\n const normalized = normalizeFilters(nextFilters);\n if (!isControlled) {\n setInternalFilters(normalized);\n }\n onFiltersChange?.(normalized);\n },\n [isControlled, onFiltersChange],\n );\n\n const updateFilters = useCallback(\n (\n updater: (\n previousFilters: TableFilterState<TKey>,\n ) => TableFilterState<TKey>,\n ) => {\n if (isControlled) {\n const normalized = normalizeFilters(updater(currentFilters));\n onFiltersChange?.(normalized);\n return;\n }\n\n setInternalFilters((previousFilters) => {\n const normalized = normalizeFilters(updater(previousFilters));\n onFiltersChange?.(normalized);\n return normalized;\n });\n },\n [currentFilters, isControlled, onFiltersChange],\n );\n\n const setFilter = useCallback(\n (filterKey: TKey, value: string) => {\n updateFilters((previousFilters) => ({\n ...previousFilters,\n [filterKey]: value,\n }));\n },\n [updateFilters],\n );\n\n const clearFilter = useCallback(\n (filterKey: TKey) => {\n updateFilters((previousFilters) => {\n const nextFilters = { ...previousFilters };\n delete nextFilters[filterKey];\n return nextFilters;\n });\n },\n [updateFilters],\n );\n\n const clearFilters = useCallback(() => {\n setFilters({});\n }, [setFilters]);\n\n const activeFilters = useMemo(\n () =>\n (Object.entries(currentFilters) as [TKey, string][]).map(\n ([filterKey, filterValue]) => ({\n filterKey,\n filterValue,\n lowerFilterValue: filterValue.toLowerCase(),\n }),\n ),\n [currentFilters],\n );\n\n const filteredData = useMemo(() => {\n if (activeFilters.length === 0) {\n return [...data];\n }\n\n return data.filter((row) =>\n activeFilters.every(({ filterKey, filterValue, lowerFilterValue }) => {\n if (filterPredicate) {\n return filterPredicate(row, filterValue, filterKey);\n }\n\n const columnValue = getColumnValue(row, filterKey);\n if (columnValue == null) {\n return false;\n }\n\n return String(columnValue).toLowerCase().includes(lowerFilterValue);\n }),\n );\n }, [activeFilters, data, filterPredicate, getColumnValue]);\n\n return {\n filters: currentFilters,\n filteredData,\n hasActiveFilters: activeFilters.length > 0,\n setFilter,\n setFilters,\n clearFilter,\n clearFilters,\n };\n}\n"]}
1
+ {"version":3,"sources":[],"names":[],"mappings":"","file":"useTableFilter.js"}
@@ -1,122 +1,5 @@
1
1
  "use client";
2
+ export { useTableFilter } from '../chunk-ZOHCADDL.mjs';
2
3
  import '../chunk-J5LGTIGS.mjs';
3
- import { useState, useMemo, useCallback } from 'react';
4
-
5
- function normalizeFilters(filters) {
6
- if (!filters || typeof filters !== "object") {
7
- return {};
8
- }
9
- return Object.fromEntries(
10
- Object.entries(filters).filter(
11
- (entry) => typeof entry[1] === "string" && entry[1].trim().length > 0
12
- )
13
- );
14
- }
15
- function defaultColumnValue(row, filterKey) {
16
- if (row && typeof row === "object" && filterKey in row) {
17
- return row[filterKey];
18
- }
19
- return void 0;
20
- }
21
- function useTableFilter({
22
- data,
23
- filters,
24
- defaultFilters = {},
25
- onFiltersChange,
26
- getColumnValue = defaultColumnValue,
27
- filterPredicate
28
- }) {
29
- const [internalFilters, setInternalFilters] = useState(() => normalizeFilters(defaultFilters));
30
- const isControlled = filters !== void 0;
31
- const currentFilters = useMemo(
32
- () => normalizeFilters(isControlled ? filters : internalFilters),
33
- [filters, internalFilters, isControlled]
34
- );
35
- const setFilters = useCallback(
36
- (nextFilters) => {
37
- const normalized = normalizeFilters(nextFilters);
38
- if (!isControlled) {
39
- setInternalFilters(normalized);
40
- }
41
- onFiltersChange?.(normalized);
42
- },
43
- [isControlled, onFiltersChange]
44
- );
45
- const updateFilters = useCallback(
46
- (updater) => {
47
- if (isControlled) {
48
- const normalized = normalizeFilters(updater(currentFilters));
49
- onFiltersChange?.(normalized);
50
- return;
51
- }
52
- setInternalFilters((previousFilters) => {
53
- const normalized = normalizeFilters(updater(previousFilters));
54
- onFiltersChange?.(normalized);
55
- return normalized;
56
- });
57
- },
58
- [currentFilters, isControlled, onFiltersChange]
59
- );
60
- const setFilter = useCallback(
61
- (filterKey, value) => {
62
- updateFilters((previousFilters) => ({
63
- ...previousFilters,
64
- [filterKey]: value
65
- }));
66
- },
67
- [updateFilters]
68
- );
69
- const clearFilter = useCallback(
70
- (filterKey) => {
71
- updateFilters((previousFilters) => {
72
- const nextFilters = { ...previousFilters };
73
- delete nextFilters[filterKey];
74
- return nextFilters;
75
- });
76
- },
77
- [updateFilters]
78
- );
79
- const clearFilters = useCallback(() => {
80
- setFilters({});
81
- }, [setFilters]);
82
- const activeFilters = useMemo(
83
- () => Object.entries(currentFilters).map(
84
- ([filterKey, filterValue]) => ({
85
- filterKey,
86
- filterValue,
87
- lowerFilterValue: filterValue.toLowerCase()
88
- })
89
- ),
90
- [currentFilters]
91
- );
92
- const filteredData = useMemo(() => {
93
- if (activeFilters.length === 0) {
94
- return [...data];
95
- }
96
- return data.filter(
97
- (row) => activeFilters.every(({ filterKey, filterValue, lowerFilterValue }) => {
98
- if (filterPredicate) {
99
- return filterPredicate(row, filterValue, filterKey);
100
- }
101
- const columnValue = getColumnValue(row, filterKey);
102
- if (columnValue == null) {
103
- return false;
104
- }
105
- return String(columnValue).toLowerCase().includes(lowerFilterValue);
106
- })
107
- );
108
- }, [activeFilters, data, filterPredicate, getColumnValue]);
109
- return {
110
- filters: currentFilters,
111
- filteredData,
112
- hasActiveFilters: activeFilters.length > 0,
113
- setFilter,
114
- setFilters,
115
- clearFilter,
116
- clearFilters
117
- };
118
- }
119
-
120
- export { useTableFilter };
121
4
  //# sourceMappingURL=useTableFilter.mjs.map
122
5
  //# sourceMappingURL=useTableFilter.mjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/hooks/useTableFilter/useTableFilter.ts"],"names":[],"mappings":"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","file":"useTableFilter.mjs","sourcesContent":["\"use client\";\n\nimport { useCallback, useMemo, useState } from \"react\";\n\nimport type {\n TableFilterState,\n UseTableFilterParams,\n UseTableFilterResult,\n} from \"./types\";\n\nfunction normalizeFilters<TKey extends string>(\n filters: TableFilterState<TKey> | null | undefined,\n): TableFilterState<TKey> {\n if (!filters || typeof filters !== \"object\") {\n return {};\n }\n\n return Object.fromEntries(\n Object.entries(filters).filter(\n (entry): entry is [TKey, string] =>\n typeof entry[1] === \"string\" && entry[1].trim().length > 0,\n ),\n ) as TableFilterState<TKey>;\n}\n\nfunction defaultColumnValue<TData, TKey extends string>(\n row: TData,\n filterKey: TKey,\n): unknown {\n if (row && typeof row === \"object\" && filterKey in row) {\n return (row as Record<TKey, unknown>)[filterKey];\n }\n return undefined;\n}\n\nexport function useTableFilter<TData, TKey extends string = string>({\n data,\n filters,\n defaultFilters = {},\n onFiltersChange,\n getColumnValue = defaultColumnValue,\n filterPredicate,\n}: UseTableFilterParams<TData, TKey>): UseTableFilterResult<TData, TKey> {\n const [internalFilters, setInternalFilters] = useState<\n TableFilterState<TKey>\n >(() => normalizeFilters(defaultFilters));\n\n const isControlled = filters !== undefined;\n const currentFilters = useMemo(\n () => normalizeFilters(isControlled ? filters : internalFilters),\n [filters, internalFilters, isControlled],\n );\n\n const setFilters = useCallback(\n (nextFilters: TableFilterState<TKey>) => {\n const normalized = normalizeFilters(nextFilters);\n if (!isControlled) {\n setInternalFilters(normalized);\n }\n onFiltersChange?.(normalized);\n },\n [isControlled, onFiltersChange],\n );\n\n const updateFilters = useCallback(\n (\n updater: (\n previousFilters: TableFilterState<TKey>,\n ) => TableFilterState<TKey>,\n ) => {\n if (isControlled) {\n const normalized = normalizeFilters(updater(currentFilters));\n onFiltersChange?.(normalized);\n return;\n }\n\n setInternalFilters((previousFilters) => {\n const normalized = normalizeFilters(updater(previousFilters));\n onFiltersChange?.(normalized);\n return normalized;\n });\n },\n [currentFilters, isControlled, onFiltersChange],\n );\n\n const setFilter = useCallback(\n (filterKey: TKey, value: string) => {\n updateFilters((previousFilters) => ({\n ...previousFilters,\n [filterKey]: value,\n }));\n },\n [updateFilters],\n );\n\n const clearFilter = useCallback(\n (filterKey: TKey) => {\n updateFilters((previousFilters) => {\n const nextFilters = { ...previousFilters };\n delete nextFilters[filterKey];\n return nextFilters;\n });\n },\n [updateFilters],\n );\n\n const clearFilters = useCallback(() => {\n setFilters({});\n }, [setFilters]);\n\n const activeFilters = useMemo(\n () =>\n (Object.entries(currentFilters) as [TKey, string][]).map(\n ([filterKey, filterValue]) => ({\n filterKey,\n filterValue,\n lowerFilterValue: filterValue.toLowerCase(),\n }),\n ),\n [currentFilters],\n );\n\n const filteredData = useMemo(() => {\n if (activeFilters.length === 0) {\n return [...data];\n }\n\n return data.filter((row) =>\n activeFilters.every(({ filterKey, filterValue, lowerFilterValue }) => {\n if (filterPredicate) {\n return filterPredicate(row, filterValue, filterKey);\n }\n\n const columnValue = getColumnValue(row, filterKey);\n if (columnValue == null) {\n return false;\n }\n\n return String(columnValue).toLowerCase().includes(lowerFilterValue);\n }),\n );\n }, [activeFilters, data, filterPredicate, getColumnValue]);\n\n return {\n filters: currentFilters,\n filteredData,\n hasActiveFilters: activeFilters.length > 0,\n setFilter,\n setFilters,\n clearFilter,\n clearFilters,\n };\n}\n"]}
1
+ {"version":3,"sources":[],"names":[],"mappings":"","file":"useTableFilter.mjs"}