@jakubmazanec/ui 0.4.2 → 0.5.0-next.7fc14073

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 (116) hide show
  1. package/build/components/Button.js +8 -5
  2. package/build/components/Button.js.map +2 -2
  3. package/build/components/Checkbox.js +2 -2
  4. package/build/components/Checkbox.js.map +1 -1
  5. package/build/components/Combobox.js +1 -1
  6. package/build/components/Combobox.js.map +1 -1
  7. package/build/components/DialogPanel.js +1 -1
  8. package/build/components/DialogPanel.js.map +1 -1
  9. package/build/components/DialogTitle.js +1 -1
  10. package/build/components/DialogTitle.js.map +1 -1
  11. package/build/components/Heading.d.ts +21 -0
  12. package/build/components/Heading.js +48 -0
  13. package/build/components/Heading.js.map +7 -0
  14. package/build/components/Icon.js +1 -1
  15. package/build/components/Icon.js.map +1 -1
  16. package/build/components/Input.js +4 -4
  17. package/build/components/Input.js.map +2 -2
  18. package/build/components/Legend.js +1 -1
  19. package/build/components/Legend.js.map +1 -1
  20. package/build/components/ListboxOption.js +1 -1
  21. package/build/components/ListboxOption.js.map +1 -1
  22. package/build/components/Radio.js +2 -2
  23. package/build/components/Radio.js.map +1 -1
  24. package/build/components/Spinner.js +1 -1
  25. package/build/components/Spinner.js.map +1 -1
  26. package/build/components/TableHead.js +1 -1
  27. package/build/components/TableHead.js.map +1 -1
  28. package/build/components/TableHeader.js +1 -1
  29. package/build/components/TableHeader.js.map +2 -2
  30. package/build/components/Textarea.js +2 -2
  31. package/build/components/Textarea.js.map +1 -1
  32. package/build/components/data-table/DataTable.d.ts +2 -1
  33. package/build/components/data-table/DataTable.js +78 -76
  34. package/build/components/data-table/DataTable.js.map +2 -2
  35. package/build/components/data-table/internals/DataTableFilter.d.ts +12 -0
  36. package/build/components/data-table/internals/DataTableFilter.js +275 -0
  37. package/build/components/data-table/internals/DataTableFilter.js.map +7 -0
  38. package/build/components/data-table/internals/DataTableFilters.d.ts +11 -0
  39. package/build/components/data-table/internals/DataTableFilters.js +40 -0
  40. package/build/components/data-table/internals/DataTableFilters.js.map +7 -0
  41. package/build/components/data-table/internals/DataTableHeader.d.ts +2 -11
  42. package/build/components/data-table/internals/DataTableHeader.js +18 -112
  43. package/build/components/data-table/internals/DataTableHeader.js.map +2 -2
  44. package/build/components/data-table/internals/DataTableMenu.d.ts +11 -0
  45. package/build/components/data-table/internals/DataTableMenu.js +34 -0
  46. package/build/components/data-table/internals/DataTableMenu.js.map +7 -0
  47. package/build/components/data-table/internals/DataTablePagination.js +2 -2
  48. package/build/components/data-table/internals/DataTablePagination.js.map +2 -2
  49. package/build/components/data-table/internals/DataTableRow.d.ts +6 -0
  50. package/build/components/data-table/internals/DataTableRow.js +26 -0
  51. package/build/components/data-table/internals/DataTableRow.js.map +7 -0
  52. package/build/components/data-table/internals/DataTableSetting.d.ts +10 -0
  53. package/build/components/data-table/internals/DataTableSetting.js +111 -0
  54. package/build/components/data-table/internals/DataTableSetting.js.map +7 -0
  55. package/build/components/data-table/internals/DataTableSettings.d.ts +9 -0
  56. package/build/components/data-table/internals/DataTableSettings.js +63 -0
  57. package/build/components/data-table/internals/DataTableSettings.js.map +7 -0
  58. package/build/components/data-table/internals/constants.d.ts +1 -1
  59. package/build/components/data-table/internals/constants.js +1 -1
  60. package/build/components/data-table/internals/constants.js.map +2 -2
  61. package/build/components/data-table/internals.d.ts +5 -0
  62. package/build/components/data-table/internals.js +5 -0
  63. package/build/components/data-table/internals.js.map +2 -2
  64. package/build/components.d.ts +1 -0
  65. package/build/components.js +1 -0
  66. package/build/components.js.map +2 -2
  67. package/build/development/createTailwindConfig.d.ts +79 -2
  68. package/build/development/createTailwindConfig.js +10 -55
  69. package/build/development/createTailwindConfig.js.map +2 -2
  70. package/build/development/internals/createTailwindThemeColors.d.ts +2 -0
  71. package/build/development/internals/createTailwindThemeColors.js +51 -0
  72. package/build/development/internals/createTailwindThemeColors.js.map +7 -0
  73. package/build/development/internals.d.ts +1 -0
  74. package/build/development/internals.js +1 -0
  75. package/build/development/internals.js.map +2 -2
  76. package/build/styles.css +15 -1
  77. package/build/styles.css.map +2 -2
  78. package/build/theme/Theme.d.ts +3 -0
  79. package/build/theme/defaultTheme.js +2 -0
  80. package/build/theme/defaultTheme.js.map +2 -2
  81. package/build/theme/internals/themeContext.d.ts +10 -0
  82. package/build/theme/internals/useTheme.d.ts +10 -0
  83. package/package.json +1 -1
  84. package/source/components/Button.tsx +12 -5
  85. package/source/components/Checkbox.tsx +2 -2
  86. package/source/components/Combobox.tsx +1 -1
  87. package/source/components/DialogPanel.tsx +1 -1
  88. package/source/components/DialogTitle.tsx +1 -1
  89. package/source/components/Heading.ts +69 -0
  90. package/source/components/Icon.tsx +1 -1
  91. package/source/components/Input.tsx +5 -5
  92. package/source/components/Legend.tsx +1 -1
  93. package/source/components/ListboxOption.tsx +1 -1
  94. package/source/components/Radio.tsx +2 -2
  95. package/source/components/Spinner.tsx +1 -1
  96. package/source/components/TableHead.ts +1 -1
  97. package/source/components/TableHeader.ts +2 -1
  98. package/source/components/Textarea.tsx +2 -2
  99. package/source/components/data-table/DataTable.tsx +97 -82
  100. package/source/components/data-table/internals/DataTableFilter.tsx +354 -0
  101. package/source/components/data-table/internals/DataTableFilters.tsx +56 -0
  102. package/source/components/data-table/internals/DataTableHeader.tsx +7 -145
  103. package/source/components/data-table/internals/DataTableMenu.tsx +60 -0
  104. package/source/components/data-table/internals/DataTablePagination.tsx +79 -77
  105. package/source/components/data-table/internals/DataTableRow.tsx +40 -0
  106. package/source/components/data-table/internals/DataTableSetting.tsx +142 -0
  107. package/source/components/data-table/internals/DataTableSettings.tsx +83 -0
  108. package/source/components/data-table/internals/constants.ts +1 -1
  109. package/source/components/data-table/internals.ts +5 -0
  110. package/source/components.ts +1 -0
  111. package/source/development/createTailwindConfig.ts +11 -57
  112. package/source/development/internals/createTailwindThemeColors.ts +53 -0
  113. package/source/development/internals.ts +1 -0
  114. package/source/styles.css +19 -3
  115. package/source/theme/Theme.ts +2 -0
  116. package/source/theme/defaultTheme.ts +2 -0
@@ -0,0 +1,275 @@
1
+ "use strict";
2
+ import { jsx, jsxs } from "react/jsx-runtime";
3
+ import { flexRender } from "@tanstack/react-table";
4
+ import { useCallback, useMemo, useState } from "react";
5
+ import { Button } from "../../Button.js";
6
+ import { Combobox } from "../../Combobox.js";
7
+ import { Container } from "../../Container.js";
8
+ import { Field } from "../../Field.js";
9
+ import { Form } from "../../Form.js";
10
+ import { Icon } from "../../Icon.js";
11
+ import { Input } from "../../Input.js";
12
+ import { Label } from "../../Label.js";
13
+ import { Listbox } from "../../Listbox.js";
14
+ import { addFilter } from "./addFilter.js";
15
+ import { normalizeFilter } from "./normalizeFilter.js";
16
+ import { normalizeFilters } from "./normalizeFilters.js";
17
+ import { removeFilter } from "./removeFilter.js";
18
+ export function DataTableFilter({
19
+ table,
20
+ column,
21
+ clientFilters,
22
+ filters: controlledFilters,
23
+ onFiltering,
24
+ clientFaceting,
25
+ faceting
26
+ }) {
27
+ let { filterVariant } = column.columnDef.meta ?? {};
28
+ let currentFilters = clientFilters ? normalizeFilters(table) : normalizeFilters(table, controlledFilters);
29
+ let currentFilter = clientFilters ? normalizeFilter(column) : normalizeFilter(column, controlledFilters);
30
+ let currentMin = filterVariant === "range" ? currentFilter?.[0] ?? void 0 : void 0;
31
+ let currentMax = filterVariant === "range" ? currentFilter?.[1] ?? void 0 : void 0;
32
+ let [filter, setFilter] = useState(
33
+ typeof currentFilter === "string" ? currentFilter : void 0
34
+ );
35
+ let [min, setMin] = useState(currentMin);
36
+ let [max, setMax] = useState(currentMax);
37
+ let facetingValues = useMemo(() => {
38
+ if (!clientFaceting) {
39
+ return faceting?.[column.id]?.values ?? [];
40
+ }
41
+ if (filterVariant === "range") {
42
+ return [];
43
+ }
44
+ return [...column.getFacetedUniqueValues().keys()].sort().slice(0, 5e3);
45
+ }, [clientFaceting, column, faceting, filterVariant]);
46
+ let facetingMin = clientFaceting ? Number(column.getFacetedMinMaxValues()?.[0] ?? null) : faceting?.[column.id]?.min ?? null;
47
+ let facetingMax = clientFaceting ? Number(column.getFacetedMinMaxValues()?.[1] ?? null) : faceting?.[column.id]?.max ?? null;
48
+ let handleMinRangeChange = useCallback((event) => {
49
+ setMin(event.target.value ? Number(event.target.value) : void 0);
50
+ }, []);
51
+ let handleMaxRangeChange = useCallback((event) => {
52
+ setMax(event.target.value ? Number(event.target.value) : void 0);
53
+ }, []);
54
+ let handleSelectFilterChange = useCallback(
55
+ (value) => {
56
+ if (clientFilters) {
57
+ column.setFilterValue(value);
58
+ }
59
+ if (onFiltering) {
60
+ onFiltering(addFilter(currentFilters, column.id, value));
61
+ }
62
+ },
63
+ [clientFilters, column, currentFilters, onFiltering]
64
+ );
65
+ let handleTextFilterChange = useCallback(
66
+ (value) => {
67
+ if (value) {
68
+ if (clientFilters) {
69
+ column.setFilterValue(value);
70
+ }
71
+ if (onFiltering) {
72
+ onFiltering(addFilter(currentFilters, column.id, value));
73
+ }
74
+ } else {
75
+ if (clientFilters) {
76
+ column.setFilterValue(void 0);
77
+ }
78
+ if (onFiltering) {
79
+ onFiltering(removeFilter(currentFilters, column.id));
80
+ }
81
+ }
82
+ },
83
+ [clientFilters, column, currentFilters, onFiltering]
84
+ );
85
+ let handleFilterChange = useCallback((event) => {
86
+ if (event.target.value) {
87
+ setFilter(event.target.value);
88
+ } else {
89
+ setFilter(void 0);
90
+ }
91
+ }, []);
92
+ let handleFilterClick = useCallback(() => {
93
+ if (filterVariant === "range") {
94
+ if (!min && !max) {
95
+ if (clientFilters) {
96
+ column.setFilterValue(void 0);
97
+ }
98
+ if (onFiltering) {
99
+ onFiltering(removeFilter(currentFilters, column.id));
100
+ }
101
+ } else {
102
+ if (clientFilters) {
103
+ column.setFilterValue([min, max]);
104
+ }
105
+ if (onFiltering) {
106
+ onFiltering(addFilter(currentFilters, column.id, [min, max]));
107
+ }
108
+ }
109
+ }
110
+ if (filterVariant === "text" && !facetingValues.length || !filterVariant) {
111
+ if (filter) {
112
+ if (clientFilters) {
113
+ column.setFilterValue(filter);
114
+ }
115
+ if (onFiltering) {
116
+ onFiltering(addFilter(currentFilters, column.id, filter));
117
+ }
118
+ } else {
119
+ if (clientFilters) {
120
+ column.setFilterValue(void 0);
121
+ }
122
+ if (onFiltering) {
123
+ onFiltering(removeFilter(currentFilters, column.id));
124
+ }
125
+ }
126
+ }
127
+ }, [
128
+ clientFilters,
129
+ column,
130
+ currentFilters,
131
+ facetingValues.length,
132
+ filter,
133
+ filterVariant,
134
+ max,
135
+ min,
136
+ onFiltering
137
+ ]);
138
+ let handleFilterSubmit = useCallback(
139
+ (event) => {
140
+ event.preventDefault();
141
+ if (filterVariant === "range") {
142
+ if (min === void 0 && max === void 0) {
143
+ if (clientFilters) {
144
+ column.setFilterValue(void 0);
145
+ }
146
+ if (onFiltering) {
147
+ onFiltering(removeFilter(currentFilters, column.id));
148
+ }
149
+ } else {
150
+ if (clientFilters) {
151
+ column.setFilterValue([min, max]);
152
+ }
153
+ if (onFiltering) {
154
+ onFiltering(addFilter(currentFilters, column.id, [min, max]));
155
+ }
156
+ }
157
+ }
158
+ if (filterVariant === "text" && !facetingValues.length || !filterVariant) {
159
+ if (filter) {
160
+ if (clientFilters) {
161
+ column.setFilterValue(filter);
162
+ }
163
+ if (onFiltering) {
164
+ onFiltering(addFilter(currentFilters, column.id, filter));
165
+ }
166
+ } else {
167
+ if (clientFilters) {
168
+ column.setFilterValue(void 0);
169
+ }
170
+ if (onFiltering) {
171
+ onFiltering(removeFilter(currentFilters, column.id));
172
+ }
173
+ }
174
+ }
175
+ },
176
+ [
177
+ clientFilters,
178
+ column,
179
+ currentFilters,
180
+ facetingValues.length,
181
+ filter,
182
+ filterVariant,
183
+ max,
184
+ min,
185
+ onFiltering
186
+ ]
187
+ );
188
+ let handleResetClick = useCallback(() => {
189
+ setFilter(void 0);
190
+ setMin(void 0);
191
+ setMax(void 0);
192
+ if (clientFilters) {
193
+ column.setFilterValue(void 0);
194
+ }
195
+ if (onFiltering) {
196
+ onFiltering(removeFilter(currentFilters, column.id));
197
+ }
198
+ }, [clientFilters, column, currentFilters, onFiltering]);
199
+ let filterElement = null;
200
+ if (filterVariant === "range") {
201
+ filterElement = /* @__PURE__ */ jsxs(Container, { spacing: "small", children: [
202
+ /* @__PURE__ */ jsx(
203
+ Input,
204
+ {
205
+ max: String(facetingMax ?? ""),
206
+ min: String(facetingMin ?? ""),
207
+ placeholder: `Min ${facetingMin === null ? "" : `(${facetingMin})`}`,
208
+ type: "number",
209
+ value: min ?? "",
210
+ onChange: handleMinRangeChange
211
+ }
212
+ ),
213
+ /* @__PURE__ */ jsx(
214
+ Input,
215
+ {
216
+ max: String(facetingMax ?? ""),
217
+ min: String(facetingMin ?? ""),
218
+ placeholder: `Max ${facetingMax === null ? "" : `(${facetingMax})`}`,
219
+ type: "number",
220
+ value: max ?? "",
221
+ onChange: handleMaxRangeChange
222
+ }
223
+ ),
224
+ /* @__PURE__ */ jsx(Button, { submit: true, "aria-label": "Filter", variant: "outline", onClick: handleFilterClick, children: /* @__PURE__ */ jsx(Icon, { name: "Funnel", size: "large" }) }),
225
+ /* @__PURE__ */ jsx(Button, { "aria-label": "Cancel", variant: "outline", onClick: handleResetClick, children: /* @__PURE__ */ jsx(Icon, { name: "XMark", size: "large" }) })
226
+ ] });
227
+ } else if (filterVariant === "select" && facetingValues.length) {
228
+ filterElement = /* @__PURE__ */ jsxs(Container, { spacing: "small", children: [
229
+ /* @__PURE__ */ jsx(
230
+ Listbox,
231
+ {
232
+ items: facetingValues.map((value) => ({
233
+ value,
234
+ label: `${value}`
235
+ })),
236
+ value: currentFilter,
237
+ onChange: handleSelectFilterChange
238
+ }
239
+ ),
240
+ /* @__PURE__ */ jsx(Button, { "aria-label": "Cancel", variant: "outline", onClick: handleResetClick, children: /* @__PURE__ */ jsx(Icon, { name: "XMark", size: "large" }) })
241
+ ] });
242
+ } else if (filterVariant === "text" && facetingValues.length) {
243
+ filterElement = /* @__PURE__ */ jsxs(Container, { spacing: "small", children: [
244
+ /* @__PURE__ */ jsx(
245
+ Combobox,
246
+ {
247
+ customValue: true,
248
+ items: facetingValues.map((value) => ({
249
+ value,
250
+ label: `${value}`
251
+ })),
252
+ value: currentFilter ?? "",
253
+ onChange: handleTextFilterChange
254
+ }
255
+ ),
256
+ /* @__PURE__ */ jsx(Button, { "aria-label": "Cancel", variant: "outline", onClick: handleResetClick, children: /* @__PURE__ */ jsx(Icon, { name: "XMark", size: "large" }) })
257
+ ] });
258
+ } else if (filterVariant === "text" && !facetingValues.length || !filterVariant) {
259
+ filterElement = /* @__PURE__ */ jsxs(Container, { spacing: "small", children: [
260
+ /* @__PURE__ */ jsx(Input, { value: filter ?? "", onChange: handleFilterChange }),
261
+ /* @__PURE__ */ jsx(Button, { "aria-label": "Filter", variant: "outline", onClick: handleFilterClick, children: /* @__PURE__ */ jsx(Icon, { name: "Funnel", size: "large" }) }),
262
+ /* @__PURE__ */ jsx(Button, { "aria-label": "Cancel", variant: "outline", onClick: handleResetClick, children: /* @__PURE__ */ jsx(Icon, { name: "XMark", size: "large" }) })
263
+ ] });
264
+ }
265
+ return /* @__PURE__ */ jsx(Form, { onSubmit: handleFilterSubmit, children: /* @__PURE__ */ jsxs(Field, { className: "gap-2", children: [
266
+ /* @__PURE__ */ jsx(Label, { children: flexRender(column.columnDef.header, {
267
+ table,
268
+ column,
269
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any, @typescript-eslint/consistent-type-assertions -- needed
270
+ header: { column }
271
+ }) }),
272
+ filterElement
273
+ ] }) });
274
+ }
275
+ //# sourceMappingURL=DataTableFilter.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../../source/components/data-table/internals/DataTableFilter.tsx"],
4
+ "sourcesContent": ["import {type Column, flexRender, type Header, type Table} from '@tanstack/react-table';\nimport {type ChangeEvent, type FormEvent, useCallback, useMemo, useState} from 'react';\n\nimport {Button} from '../../Button.js';\nimport {Combobox} from '../../Combobox.js';\nimport {Container} from '../../Container.js';\nimport {Field} from '../../Field.js';\nimport {Form} from '../../Form.js';\nimport {Icon} from '../../Icon.js';\nimport {Input} from '../../Input.js';\nimport {Label} from '../../Label.js';\nimport {Listbox} from '../../Listbox.js';\nimport {type DataTableProps} from '../DataTable.js';\nimport {addFilter} from './addFilter.js';\nimport {normalizeFilter} from './normalizeFilter.js';\nimport {normalizeFilters} from './normalizeFilters.js';\nimport {removeFilter} from './removeFilter.js';\n\nexport type DataTableFilterProps = {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any -- needed\n table: Table<any>;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any -- needed\n column: Column<any>;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any -- needed\n clientFilters: DataTableProps<any, any>['clientFilters'];\n // eslint-disable-next-line @typescript-eslint/no-explicit-any -- needed\n filters: DataTableProps<any, any>['filters'];\n // eslint-disable-next-line @typescript-eslint/no-explicit-any -- needed\n onFiltering: DataTableProps<any, any>['onFiltersChange'];\n // eslint-disable-next-line @typescript-eslint/no-explicit-any -- needed\n clientFaceting: DataTableProps<any, any>['clientFaceting'];\n // eslint-disable-next-line @typescript-eslint/no-explicit-any -- needed\n faceting: DataTableProps<any, any>['faceting'];\n};\n\nexport function DataTableFilter({\n table,\n column,\n clientFilters,\n filters: controlledFilters,\n onFiltering,\n clientFaceting,\n faceting,\n}: DataTableFilterProps) {\n let {filterVariant} = column.columnDef.meta ?? {};\n\n let currentFilters =\n clientFilters ? normalizeFilters(table) : normalizeFilters(table, controlledFilters);\n let currentFilter =\n clientFilters ? normalizeFilter(column) : normalizeFilter(column, controlledFilters);\n\n let currentMin =\n filterVariant === 'range' ?\n ((currentFilter as [number?, number?] | undefined)?.[0] ?? undefined)\n : undefined;\n let currentMax =\n filterVariant === 'range' ?\n ((currentFilter as [number?, number?] | undefined)?.[1] ?? undefined)\n : undefined;\n\n let [filter, setFilter] = useState<string | undefined>(\n typeof currentFilter === 'string' ? currentFilter : undefined,\n );\n let [min, setMin] = useState(currentMin);\n let [max, setMax] = useState(currentMax);\n\n let facetingValues = useMemo(() => {\n if (!clientFaceting) {\n return faceting?.[column.id]?.values ?? [];\n }\n\n if (filterVariant === 'range') {\n return [];\n }\n\n return [...column.getFacetedUniqueValues().keys()].sort().slice(0, 5000) as unknown[];\n }, [clientFaceting, column, faceting, filterVariant]);\n\n let facetingMin =\n clientFaceting ?\n Number(column.getFacetedMinMaxValues()?.[0] ?? null)\n : (faceting?.[column.id]?.min ?? null);\n let facetingMax =\n clientFaceting ?\n Number(column.getFacetedMinMaxValues()?.[1] ?? null)\n : (faceting?.[column.id]?.max ?? null);\n\n let handleMinRangeChange = useCallback((event: ChangeEvent<HTMLInputElement>) => {\n setMin(event.target.value ? Number(event.target.value) : undefined);\n }, []);\n\n let handleMaxRangeChange = useCallback((event: ChangeEvent<HTMLInputElement>) => {\n setMax(event.target.value ? Number(event.target.value) : undefined);\n }, []);\n\n let handleSelectFilterChange = useCallback(\n (value: string) => {\n if (clientFilters) {\n column.setFilterValue(value);\n }\n\n if (onFiltering) {\n onFiltering(addFilter(currentFilters, column.id, value));\n }\n },\n [clientFilters, column, currentFilters, onFiltering],\n );\n\n let handleTextFilterChange = useCallback(\n (value: string | undefined) => {\n if (value) {\n if (clientFilters) {\n column.setFilterValue(value);\n }\n\n if (onFiltering) {\n onFiltering(addFilter(currentFilters, column.id, value));\n }\n } else {\n if (clientFilters) {\n column.setFilterValue(undefined);\n }\n\n if (onFiltering) {\n onFiltering(removeFilter(currentFilters, column.id));\n }\n }\n },\n [clientFilters, column, currentFilters, onFiltering],\n );\n\n let handleFilterChange = useCallback((event: ChangeEvent<HTMLInputElement>) => {\n if (event.target.value) {\n setFilter(event.target.value);\n } else {\n setFilter(undefined);\n }\n }, []);\n\n let handleFilterClick = useCallback(() => {\n if (filterVariant === 'range') {\n if (!min && !max) {\n if (clientFilters) {\n column.setFilterValue(undefined);\n }\n\n if (onFiltering) {\n onFiltering(removeFilter(currentFilters, column.id));\n }\n } else {\n if (clientFilters) {\n column.setFilterValue([min, max]);\n }\n\n if (onFiltering) {\n onFiltering(addFilter(currentFilters, column.id, [min, max]));\n }\n }\n }\n\n if ((filterVariant === 'text' && !facetingValues.length) || !filterVariant) {\n if (filter) {\n if (clientFilters) {\n column.setFilterValue(filter);\n }\n\n if (onFiltering) {\n onFiltering(addFilter(currentFilters, column.id, filter));\n }\n } else {\n if (clientFilters) {\n column.setFilterValue(undefined);\n }\n\n if (onFiltering) {\n onFiltering(removeFilter(currentFilters, column.id));\n }\n }\n }\n }, [\n clientFilters,\n column,\n currentFilters,\n facetingValues.length,\n filter,\n filterVariant,\n max,\n min,\n onFiltering,\n ]);\n\n let handleFilterSubmit = useCallback(\n (event: FormEvent<HTMLFormElement>) => {\n event.preventDefault();\n\n if (filterVariant === 'range') {\n if (min === undefined && max === undefined) {\n if (clientFilters) {\n column.setFilterValue(undefined);\n }\n\n if (onFiltering) {\n onFiltering(removeFilter(currentFilters, column.id));\n }\n } else {\n if (clientFilters) {\n column.setFilterValue([min, max]);\n }\n\n if (onFiltering) {\n onFiltering(addFilter(currentFilters, column.id, [min, max]));\n }\n }\n }\n\n if ((filterVariant === 'text' && !facetingValues.length) || !filterVariant) {\n if (filter) {\n if (clientFilters) {\n column.setFilterValue(filter);\n }\n\n if (onFiltering) {\n onFiltering(addFilter(currentFilters, column.id, filter));\n }\n } else {\n if (clientFilters) {\n column.setFilterValue(undefined);\n }\n\n if (onFiltering) {\n onFiltering(removeFilter(currentFilters, column.id));\n }\n }\n }\n },\n [\n clientFilters,\n column,\n currentFilters,\n facetingValues.length,\n filter,\n filterVariant,\n max,\n min,\n onFiltering,\n ],\n );\n\n let handleResetClick = useCallback(() => {\n setFilter(undefined);\n setMin(undefined);\n setMax(undefined);\n\n if (clientFilters) {\n column.setFilterValue(undefined);\n }\n\n if (onFiltering) {\n onFiltering(removeFilter(currentFilters, column.id));\n }\n }, [clientFilters, column, currentFilters, onFiltering]);\n\n let filterElement = null;\n\n if (filterVariant === 'range') {\n filterElement = (\n <Container spacing=\"small\">\n <Input\n max={String(facetingMax ?? '')}\n min={String(facetingMin ?? '')}\n placeholder={`Min ${facetingMin === null ? '' : `(${facetingMin})`}`}\n type=\"number\"\n value={min ?? ''}\n onChange={handleMinRangeChange}\n />\n <Input\n max={String(facetingMax ?? '')}\n min={String(facetingMin ?? '')}\n placeholder={`Max ${facetingMax === null ? '' : `(${facetingMax})`}`}\n type=\"number\"\n value={max ?? ''}\n onChange={handleMaxRangeChange}\n />\n <Button submit aria-label=\"Filter\" variant=\"outline\" onClick={handleFilterClick}>\n <Icon name=\"Funnel\" size=\"large\" />\n </Button>\n <Button aria-label=\"Cancel\" variant=\"outline\" onClick={handleResetClick}>\n <Icon name=\"XMark\" size=\"large\" />\n </Button>\n </Container>\n );\n } else if (filterVariant === 'select' && facetingValues.length) {\n filterElement = (\n <Container spacing=\"small\">\n <Listbox\n items={(facetingValues as string[]).map((value: string) => ({\n value,\n label: `${value as unknown}`,\n }))}\n value={currentFilter as string}\n onChange={handleSelectFilterChange}\n />\n <Button aria-label=\"Cancel\" variant=\"outline\" onClick={handleResetClick}>\n <Icon name=\"XMark\" size=\"large\" />\n </Button>\n </Container>\n );\n } else if (filterVariant === 'text' && facetingValues.length) {\n filterElement = (\n <Container spacing=\"small\">\n <Combobox\n customValue\n items={(facetingValues as string[]).map((value: string) => ({\n value,\n label: `${value as unknown}`,\n }))}\n value={(currentFilter ?? '') as string}\n onChange={handleTextFilterChange}\n />\n <Button aria-label=\"Cancel\" variant=\"outline\" onClick={handleResetClick}>\n <Icon name=\"XMark\" size=\"large\" />\n </Button>\n </Container>\n );\n } else if ((filterVariant === 'text' && !facetingValues.length) || !filterVariant) {\n filterElement = (\n <Container spacing=\"small\">\n <Input value={filter ?? ''} onChange={handleFilterChange} />\n <Button aria-label=\"Filter\" variant=\"outline\" onClick={handleFilterClick}>\n <Icon name=\"Funnel\" size=\"large\" />\n </Button>\n <Button aria-label=\"Cancel\" variant=\"outline\" onClick={handleResetClick}>\n <Icon name=\"XMark\" size=\"large\" />\n </Button>\n </Container>\n );\n }\n\n return (\n <Form onSubmit={handleFilterSubmit}>\n <Field className=\"gap-2\">\n <Label>\n {flexRender(column.columnDef.header, {\n table,\n column,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any, @typescript-eslint/consistent-type-assertions -- needed\n header: {column} as Header<any, any>,\n })}\n </Label>\n {filterElement}\n </Field>\n </Form>\n );\n}\n"],
5
+ "mappings": "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",
6
+ "names": []
7
+ }
@@ -0,0 +1,11 @@
1
+ import { type Table } from '@tanstack/react-table';
2
+ import { type DataTableProps } from '../DataTable.js';
3
+ export type DataTableFiltersProps = {
4
+ table: Table<any>;
5
+ clientFilters: DataTableProps<any, any>['clientFilters'];
6
+ filters: DataTableProps<any, any>['filters'];
7
+ onFiltering: DataTableProps<any, any>['onFiltersChange'];
8
+ clientFaceting: DataTableProps<any, any>['clientFaceting'];
9
+ faceting: DataTableProps<any, any>['faceting'];
10
+ };
11
+ export declare function DataTableFilters({ table, clientFilters, filters: controlledFilters, onFiltering, clientFaceting, faceting, }: DataTableFiltersProps): import("react/jsx-runtime").JSX.Element;
@@ -0,0 +1,40 @@
1
+ "use strict";
2
+ import { jsx, jsxs } from "react/jsx-runtime";
3
+ import { Container } from "../../Container.js";
4
+ import { Heading } from "../../Heading.js";
5
+ import { DataTableFilter } from "./DataTableFilter.js";
6
+ export function DataTableFilters({
7
+ table,
8
+ clientFilters,
9
+ filters: controlledFilters,
10
+ onFiltering,
11
+ clientFaceting,
12
+ faceting
13
+ }) {
14
+ return /* @__PURE__ */ jsxs(
15
+ Container,
16
+ {
17
+ className: "hidden w-full justify-items-stretch bg-white sm:order-first sm:row-span-3 sm:border-r-2 sm:border-neutral-100 sm:pr-4 [[data-show-filters]_&]:flex",
18
+ direction: "column",
19
+ children: [
20
+ /* @__PURE__ */ jsx(Heading, { size: "small", children: "Filters" }),
21
+ table.getAllLeafColumns().map(
22
+ (column) => column.getCanFilter() ? /* @__PURE__ */ jsx(
23
+ DataTableFilter,
24
+ {
25
+ clientFaceting,
26
+ clientFilters,
27
+ column,
28
+ faceting,
29
+ filters: controlledFilters,
30
+ table,
31
+ onFiltering
32
+ },
33
+ column.id
34
+ ) : null
35
+ )
36
+ ]
37
+ }
38
+ );
39
+ }
40
+ //# sourceMappingURL=DataTableFilters.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../../source/components/data-table/internals/DataTableFilters.tsx"],
4
+ "sourcesContent": ["import {type Table} from '@tanstack/react-table';\n\nimport {Container} from '../../Container.js';\nimport {Heading} from '../../Heading.js';\nimport {type DataTableProps} from '../DataTable.js';\nimport {DataTableFilter} from './DataTableFilter.js';\n\nexport type DataTableFiltersProps = {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any -- needed\n table: Table<any>;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any -- needed\n clientFilters: DataTableProps<any, any>['clientFilters'];\n // eslint-disable-next-line @typescript-eslint/no-explicit-any -- needed\n filters: DataTableProps<any, any>['filters'];\n // eslint-disable-next-line @typescript-eslint/no-explicit-any -- needed\n onFiltering: DataTableProps<any, any>['onFiltersChange'];\n // eslint-disable-next-line @typescript-eslint/no-explicit-any -- needed\n clientFaceting: DataTableProps<any, any>['clientFaceting'];\n // eslint-disable-next-line @typescript-eslint/no-explicit-any -- needed\n faceting: DataTableProps<any, any>['faceting'];\n};\n\nexport function DataTableFilters({\n table,\n clientFilters,\n filters: controlledFilters,\n onFiltering,\n clientFaceting,\n faceting,\n}: DataTableFiltersProps) {\n return (\n <Container\n className=\"hidden w-full justify-items-stretch bg-white sm:order-first sm:row-span-3 sm:border-r-2 sm:border-neutral-100 sm:pr-4 [[data-show-filters]_&]:flex\"\n direction=\"column\"\n >\n <Heading size=\"small\">Filters</Heading>\n\n {table\n .getAllLeafColumns()\n .map((column) =>\n column.getCanFilter() ?\n <DataTableFilter\n key={column.id}\n clientFaceting={clientFaceting}\n clientFilters={clientFilters}\n column={column}\n faceting={faceting}\n filters={controlledFilters}\n table={table}\n onFiltering={onFiltering}\n />\n : null,\n )}\n </Container>\n );\n}\n"],
5
+ "mappings": ";AA+BI,SAIE,KAJF;AA7BJ,SAAQ,iBAAgB;AACxB,SAAQ,eAAc;AAEtB,SAAQ,uBAAsB;AAiBvB,gBAAS,iBAAiB;AAAA,EAC/B;AAAA,EACA;AAAA,EACA,SAAS;AAAA,EACT;AAAA,EACA;AAAA,EACA;AACF,GAA0B;AACxB,SACE;AAAA,IAAC;AAAA;AAAA,MACC,WAAU;AAAA,MACV,WAAU;AAAA,MAEV;AAAA,4BAAC,WAAQ,MAAK,SAAQ,qBAAO;AAAA,QAE5B,MACE,kBAAkB,EAClB;AAAA,UAAI,CAAC,WACJ,OAAO,aAAa,IAClB;AAAA,YAAC;AAAA;AAAA,cAEC;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA,SAAS;AAAA,cACT;AAAA,cACA;AAAA;AAAA,YAPK,OAAO;AAAA,UAQd,IACA;AAAA,QACJ;AAAA;AAAA;AAAA,EACJ;AAEJ;",
6
+ "names": []
7
+ }
@@ -1,21 +1,12 @@
1
- import { type Header, type Table } from '@tanstack/react-table';
1
+ import { type Header } from '@tanstack/react-table';
2
2
  import { type DataTableProps } from '../DataTable.js';
3
3
  export type DataTableHeaderProps = {
4
- table: Table<any>;
5
4
  header: Header<any, any>;
6
5
  clientSorting: DataTableProps<any, any>['clientSorting'];
7
6
  hideSorting: DataTableProps<any, any>['hideSorting'];
8
7
  sorting: DataTableProps<any, any>['sorting'];
9
8
  onSorting: DataTableProps<any, any>['onSortingChange'];
10
- clientFilters: DataTableProps<any, any>['clientFilters'];
11
- hideFilters: DataTableProps<any, any>['hideFilters'];
12
- filters: DataTableProps<any, any>['filters'];
13
- onFiltering: DataTableProps<any, any>['onFiltersChange'];
14
- clientFaceting: DataTableProps<any, any>['clientFaceting'];
15
- faceting: DataTableProps<any, any>['faceting'];
16
- hideColumnVisibility: DataTableProps<any, any>['hideColumnVisibility'];
17
9
  hideColumnOrder: DataTableProps<any, any>['hideColumnOrder'];
18
- hideColumnPinning: DataTableProps<any, any>['hideColumnPinning'];
19
10
  hideColumnResizing: DataTableProps<any, any>['hideColumnResizing'];
20
11
  };
21
- export declare function DataTableHeader({ table, header, clientSorting, hideSorting, sorting: controlledSorting, onSorting, clientFilters, hideFilters, filters: controlledFilters, onFiltering, clientFaceting, faceting, hideColumnVisibility, hideColumnOrder, hideColumnPinning, hideColumnResizing, }: DataTableHeaderProps): import("react/jsx-runtime").JSX.Element;
12
+ export declare function DataTableHeader({ header, clientSorting, hideSorting, sorting: controlledSorting, onSorting, hideColumnOrder, hideColumnResizing, }: DataTableHeaderProps): import("react/jsx-runtime").JSX.Element;
@@ -1,51 +1,24 @@
1
1
  "use strict";
2
2
  import { jsx, jsxs } from "react/jsx-runtime";
3
- import { useSortable } from "@dnd-kit/sortable";
4
- import { CSS } from "@dnd-kit/utilities";
5
3
  import { flexRender } from "@tanstack/react-table";
6
4
  import { useCallback } from "react";
7
5
  import { Button } from "../../Button.js";
8
6
  import { Container } from "../../Container.js";
9
- import { Field } from "../../Field.js";
10
7
  import { Icon } from "../../Icon.js";
11
- import { Popover } from "../../Popover.js";
12
- import { PopoverButton } from "../../PopoverButton.js";
13
- import { PopoverPanel } from "../../PopoverPanel.js";
14
8
  import { TableHeader } from "../../TableHeader.js";
15
- import { Text } from "../../Text.js";
16
- import { DataTableHeaderColumnCheckbox } from "./DataTableHeaderColumnCheckbox.js";
17
- import { DataTableHeaderFilter } from "./DataTableHeaderFilter.js";
18
9
  import { getCommonPinningClasses } from "./getCommonPinningClasses.js";
19
10
  import { getCommonPinningStyles } from "./getCommonPinningStyles.js";
20
11
  import { normalizeSorting } from "./normalizeSorting.js";
21
12
  export function DataTableHeader({
22
- table,
23
13
  header,
24
14
  clientSorting,
25
15
  hideSorting = false,
26
16
  sorting: controlledSorting,
27
17
  onSorting,
28
- clientFilters,
29
- hideFilters = false,
30
- filters: controlledFilters,
31
- onFiltering,
32
- clientFaceting,
33
- faceting,
34
- hideColumnVisibility = false,
35
18
  hideColumnOrder = false,
36
- hideColumnPinning = false,
37
19
  hideColumnResizing = false
38
20
  }) {
39
- let { attributes, isDragging, listeners, setNodeRef, transform } = useSortable({
40
- id: header.column.id
41
- });
42
21
  let sorting = clientSorting ? normalizeSorting(header) : normalizeSorting(header, controlledSorting);
43
- let style = {
44
- transform: CSS.Translate.toString(transform),
45
- transition: "width transform 0.2s ease-in-out",
46
- zIndex: isDragging ? 20 : void 0,
47
- ...getCommonPinningStyles(header.column)
48
- };
49
22
  let contentElement = null;
50
23
  if (!header.isPlaceholder) {
51
24
  contentElement = flexRender(header.column.columnDef.header, header.getContext());
@@ -97,22 +70,14 @@ export function DataTableHeader({
97
70
  let handleWidthReset = useCallback(() => {
98
71
  header.column.resetSize();
99
72
  }, [header.column]);
100
- let handlePinLeftClick = useCallback(() => {
101
- header.column.pin("left");
102
- }, [header.column]);
103
- let handlePinRightClick = useCallback(() => {
104
- header.column.pin("right");
105
- }, [header.column]);
106
- let handleUnpinClick = useCallback(() => {
107
- header.column.pin(false);
108
- }, [header.column]);
109
- let resolvedHideFilters = hideFilters || !header.column.getCanFilter();
110
73
  let resolvedHideSorting = hideSorting || !header.column.getCanSort();
111
- let resolvedHideColumnPinning = hideColumnPinning || !header.column.getCanPin();
74
+ let style = {
75
+ transition: "width transform 0.2s ease-in-out",
76
+ ...getCommonPinningStyles(header.column)
77
+ };
112
78
  return /* @__PURE__ */ jsxs(
113
79
  TableHeader,
114
80
  {
115
- ref: setNodeRef,
116
81
  className: getCommonPinningClasses(header.column),
117
82
  colSpan: header.colSpan,
118
83
  style,
@@ -121,79 +86,20 @@ export function DataTableHeader({
121
86
  "span",
122
87
  {
123
88
  className: hideColumnResizing ? "relative block overflow-hidden" : "relative mr-6 block overflow-hidden",
124
- children: /* @__PURE__ */ jsxs(Container, { align: "center", justify: "end", spacing: "extra-small", children: [
125
- resolvedHideSorting && hideColumnOrder ? contentElement : /* @__PURE__ */ jsxs(
126
- Button,
127
- {
128
- className: hideColumnOrder ? "inline-flex" : "inline-flex cursor-move",
129
- size: "small",
130
- title,
131
- variant: "text",
132
- onClick: resolvedHideSorting ? void 0 : handleSortClick,
133
- ...hideColumnOrder ? {} : attributes,
134
- ...hideColumnOrder ? {} : listeners,
135
- children: [
136
- resolvedHideSorting ? null : sortElement,
137
- contentElement
138
- ]
139
- }
140
- ),
141
- resolvedHideColumnPinning && resolvedHideFilters && hideColumnVisibility ? null : /* @__PURE__ */ jsxs(Popover, { children: [
142
- /* @__PURE__ */ jsx(PopoverButton, { children: /* @__PURE__ */ jsx(Button, { "aria-label": "Settings", size: "small", variant: "text", children: /* @__PURE__ */ jsx(Icon, { name: "Cog6Tooth", size: "small" }) }) }),
143
- /* @__PURE__ */ jsx(PopoverPanel, { anchor: "right start", children: /* @__PURE__ */ jsxs(Container, { direction: "column", spacing: "large", children: [
144
- resolvedHideColumnPinning ? null : /* @__PURE__ */ jsxs(Container, { direction: "row", spacing: "small", children: [
145
- /* @__PURE__ */ jsx(Text, { children: "Pin column" }),
146
- /* @__PURE__ */ jsx(Field, { children: /* @__PURE__ */ jsxs(Container, { spacing: "small", children: [
147
- header.column.getIsPinned() === "left" ? null : /* @__PURE__ */ jsx(
148
- Button,
149
- {
150
- "aria-label": "Pin to left",
151
- variant: "outline",
152
- onClick: handlePinLeftClick,
153
- children: /* @__PURE__ */ jsx(Icon, { name: "ArrowLeftEndOnRectangle", size: "large" })
154
- }
155
- ),
156
- header.column.getIsPinned() ? /* @__PURE__ */ jsx(Button, { "aria-label": "Unpin", variant: "outline", onClick: handleUnpinClick, children: /* @__PURE__ */ jsx(Icon, { name: "XMark", size: "large" }) }) : null,
157
- header.column.getIsPinned() === "right" ? null : /* @__PURE__ */ jsx(
158
- Button,
159
- {
160
- "aria-label": "Pin to right",
161
- variant: "outline",
162
- onClick: handlePinRightClick,
163
- children: /* @__PURE__ */ jsx(Icon, { name: "ArrowRightEndOnRectangle", size: "large" })
164
- }
165
- )
166
- ] }) })
167
- ] }),
168
- resolvedHideFilters ? null : /* @__PURE__ */ jsxs(Container, { direction: "column", spacing: "small", children: [
169
- /* @__PURE__ */ jsx(Text, { children: "Filter" }),
170
- /* @__PURE__ */ jsx(Field, { children: /* @__PURE__ */ jsx(
171
- DataTableHeaderFilter,
172
- {
173
- clientFaceting,
174
- clientFilters,
175
- column: header.column,
176
- faceting,
177
- filters: controlledFilters,
178
- table,
179
- onFiltering
180
- }
181
- ) })
182
- ] }),
183
- hideColumnVisibility ? null : /* @__PURE__ */ jsxs(Container, { direction: "column", spacing: "small", children: [
184
- /* @__PURE__ */ jsx(Text, { children: "Visible columns" }),
185
- table.getAllLeafColumns().map((column) => /* @__PURE__ */ jsx(
186
- DataTableHeaderColumnCheckbox,
187
- {
188
- column,
189
- table
190
- },
191
- column.id
192
- ))
193
- ] })
194
- ] }) })
195
- ] })
196
- ] })
89
+ children: /* @__PURE__ */ jsx(Container, { align: "center", justify: "end", spacing: "extra-small", children: resolvedHideSorting && hideColumnOrder ? contentElement : /* @__PURE__ */ jsxs(
90
+ Button,
91
+ {
92
+ className: "inline-flex",
93
+ size: "small",
94
+ title,
95
+ variant: "text",
96
+ onClick: resolvedHideSorting ? void 0 : handleSortClick,
97
+ children: [
98
+ resolvedHideSorting ? null : sortElement,
99
+ contentElement
100
+ ]
101
+ }
102
+ ) })
197
103
  }
198
104
  ),
199
105
  hideColumnResizing ? null : /* @__PURE__ */ jsx(