@worknice/whiteboard 0.43.1 → 0.44.0

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 (39) hide show
  1. package/dist/controls/LinkCard.d.ts +2 -1
  2. package/dist/controls/LinkCard.js +2 -1
  3. package/dist/controls/LinkCard.stories.d.ts +2 -1
  4. package/dist/fields/TimezoneField.d.ts +1 -1
  5. package/dist/fields/TimezoneField.js +3 -535
  6. package/dist/fields/TimezoneField.stories.d.ts +1 -1
  7. package/dist/fields/TimezoneField.stories.js +1 -1
  8. package/dist/icons/RestoreIcon.js +1 -3
  9. package/dist/icons/TableIcon.d.ts +3 -0
  10. package/dist/icons/TableIcon.js +11 -0
  11. package/dist/icons/index.d.ts +1 -0
  12. package/dist/icons/index.js +2 -1
  13. package/dist/inputs/CheckboxInput.js +1 -0
  14. package/dist/inputs/CheckboxInput.module.js +1 -0
  15. package/dist/inputs/CheckboxInput_module.css +4 -0
  16. package/dist/inputs/ListBoxInput_module.css +1 -0
  17. package/dist/presentation/CustomizableTable/ConfigureColumnsModal.d.ts +12 -0
  18. package/dist/presentation/CustomizableTable/ConfigureColumnsModal.js +72 -0
  19. package/dist/presentation/CustomizableTable/CustomizableTable.d.ts +23 -41
  20. package/dist/presentation/CustomizableTable/CustomizableTable.js +569 -202
  21. package/dist/presentation/CustomizableTable/CustomizableTable.module.js +19 -14
  22. package/dist/presentation/CustomizableTable/CustomizableTable_module.css +100 -81
  23. package/dist/presentation/Table.d.ts +2 -27
  24. package/dist/presentation/Table.js +5 -280
  25. package/dist/presentation/TableColumnFilterModal.d.ts +41 -0
  26. package/dist/presentation/TableColumnFilterModal.js +271 -0
  27. package/dist/utils/tables.d.ts +8 -0
  28. package/dist/utils/tables.js +18 -0
  29. package/package.json +4 -4
  30. package/dist/presentation/CustomizableTable/CustomizableTableContents.d.ts +0 -38
  31. package/dist/presentation/CustomizableTable/CustomizableTableContents.js +0 -305
  32. package/dist/presentation/CustomizableTable/CustomizableTableContents.module.js +0 -18
  33. package/dist/presentation/CustomizableTable/CustomizableTableContents_module.css +0 -148
  34. package/dist/presentation/CustomizableTable/CustomizableTableDetails.d.ts +0 -22
  35. package/dist/presentation/CustomizableTable/CustomizableTableDetails.js +0 -74
  36. package/dist/presentation/CustomizableTable/CustomizableTableDetails.module.js +0 -6
  37. package/dist/presentation/CustomizableTable/CustomizableTableDetails_module.css +0 -40
  38. package/dist/presentation/CustomizableTable/TableFilterModal.d.ts +0 -23
  39. package/dist/presentation/CustomizableTable/TableFilterModal.js +0 -77
@@ -0,0 +1,41 @@
1
+ type SingleFilterOption<Type> = {
2
+ id: string;
3
+ label: string;
4
+ /**
5
+ * If omitted true will always be returned and no filtering will be applied (e.g. "Any" option).
6
+ */
7
+ predicate?: (row: Type) => boolean;
8
+ };
9
+ type MultiFilterOption<Type> = {
10
+ id: string;
11
+ label: string;
12
+ predicate: (row: Type) => boolean;
13
+ };
14
+ /**
15
+ * When using single select filters (isMulti: false), the first option is the default value.
16
+ * Multi select filters (isMulti: true) have no default value.
17
+ */
18
+ export type Filter<Type> = {
19
+ isMulti?: false;
20
+ label: string;
21
+ options: Array<SingleFilterOption<Type>>;
22
+ } | {
23
+ isMulti: true;
24
+ label: string;
25
+ options: Array<MultiFilterOption<Type>>;
26
+ };
27
+ type ColumnFilterState = {
28
+ id: string;
29
+ value: unknown;
30
+ };
31
+ type TableColumnFilterModalProps<Type> = {
32
+ onClose: () => void;
33
+ filterableColumns: {
34
+ id: string;
35
+ filter: Filter<Type>;
36
+ }[];
37
+ currentFilters: ColumnFilterState[];
38
+ onFiltersChange: (filters: ColumnFilterState[]) => void;
39
+ };
40
+ declare const TableColumnFilterModal: <Type>({ onClose, filterableColumns, currentFilters, onFiltersChange, }: TableColumnFilterModalProps<Type>) => import("react/jsx-runtime").JSX.Element;
41
+ export default TableColumnFilterModal;
@@ -0,0 +1,271 @@
1
+ import * as __WEBPACK_EXTERNAL_MODULE_react_jsx_runtime_225474f2__ from "react/jsx-runtime";
2
+ import * as __WEBPACK_EXTERNAL_MODULE_clsx__ from "clsx";
3
+ import * as __WEBPACK_EXTERNAL_MODULE_react__ from "react";
4
+ import * as __WEBPACK_EXTERNAL_MODULE__controls_Button_js_f591ba2e__ from "../controls/Button.js";
5
+ import * as __WEBPACK_EXTERNAL_MODULE__fields_BooleanField_js_dc79ee46__ from "../fields/BooleanField.js";
6
+ import * as __WEBPACK_EXTERNAL_MODULE__fields_CheckboxSetField_js_bce910a4__ from "../fields/CheckboxSetField.js";
7
+ import * as __WEBPACK_EXTERNAL_MODULE__fields_ListBoxField_js_b7d4cb12__ from "../fields/ListBoxField.js";
8
+ import * as __WEBPACK_EXTERNAL_MODULE__fields_SimpleRadioSetField_js_118e9421__ from "../fields/SimpleRadioSetField.js";
9
+ import * as __WEBPACK_EXTERNAL_MODULE__forms_FormButtonSet_js_c160eb1a__ from "../forms/FormButtonSet.js";
10
+ import * as __WEBPACK_EXTERNAL_MODULE__forms_useForm_js_e756b4e7__ from "../forms/useForm.js";
11
+ import * as __WEBPACK_EXTERNAL_MODULE__Card_js_d67c086a__ from "./Card.js";
12
+ import * as __WEBPACK_EXTERNAL_MODULE__HStack_js_cc26058d__ from "./HStack.js";
13
+ import * as __WEBPACK_EXTERNAL_MODULE__Icon_js_0d271bb6__ from "./Icon.js";
14
+ import * as __WEBPACK_EXTERNAL_MODULE__Modal_js_50f53bdf__ from "./Modal.js";
15
+ import * as __WEBPACK_EXTERNAL_MODULE__PlainText_js_cd0b6798__ from "./PlainText.js";
16
+ import * as __WEBPACK_EXTERNAL_MODULE__Table_module_js_1c0e33be__ from "./Table.module.js";
17
+ const MIN_LIST_BOX_FILTER_OPTIONS = 10;
18
+ const TableFilterExpander = ({ label, children, highlight = false, defaultOpen = false })=>/*#__PURE__*/ (0, __WEBPACK_EXTERNAL_MODULE_react_jsx_runtime_225474f2__.jsxs)("details", {
19
+ open: defaultOpen,
20
+ className: (0, __WEBPACK_EXTERNAL_MODULE_clsx__["default"])(__WEBPACK_EXTERNAL_MODULE__Table_module_js_1c0e33be__["default"].filterExpander, {
21
+ [__WEBPACK_EXTERNAL_MODULE__Table_module_js_1c0e33be__["default"].filterExpanderHighlight]: highlight
22
+ }),
23
+ children: [
24
+ /*#__PURE__*/ (0, __WEBPACK_EXTERNAL_MODULE_react_jsx_runtime_225474f2__.jsxs)("summary", {
25
+ className: __WEBPACK_EXTERNAL_MODULE__Table_module_js_1c0e33be__["default"].filterExpanderRow,
26
+ children: [
27
+ /*#__PURE__*/ (0, __WEBPACK_EXTERNAL_MODULE_react_jsx_runtime_225474f2__.jsx)("span", {
28
+ className: __WEBPACK_EXTERNAL_MODULE__Table_module_js_1c0e33be__["default"].filterExpanderIcon,
29
+ children: /*#__PURE__*/ (0, __WEBPACK_EXTERNAL_MODULE_react_jsx_runtime_225474f2__.jsx)(__WEBPACK_EXTERNAL_MODULE__Icon_js_0d271bb6__["default"], {
30
+ symbol: "ChevronRight"
31
+ })
32
+ }),
33
+ /*#__PURE__*/ (0, __WEBPACK_EXTERNAL_MODULE_react_jsx_runtime_225474f2__.jsx)("span", {
34
+ className: __WEBPACK_EXTERNAL_MODULE__Table_module_js_1c0e33be__["default"].filterExpanderLabel,
35
+ children: label
36
+ })
37
+ ]
38
+ }),
39
+ /*#__PURE__*/ (0, __WEBPACK_EXTERNAL_MODULE_react_jsx_runtime_225474f2__.jsx)("div", {
40
+ className: __WEBPACK_EXTERNAL_MODULE__Table_module_js_1c0e33be__["default"].filterExpanderWrapper,
41
+ children: children
42
+ })
43
+ ]
44
+ });
45
+ const TableColumnFilterModal = ({ onClose, filterableColumns, currentFilters, onFiltersChange })=>{
46
+ const initialFilterValues = (0, __WEBPACK_EXTERNAL_MODULE_react__.useMemo)(()=>{
47
+ const result = {};
48
+ for (const column of filterableColumns){
49
+ const current = currentFilters.find((f)=>f.id === column.id);
50
+ const filter = column.filter;
51
+ if (filter.isMulti) result[column.id] = Array.isArray(current?.value) ? current.value : [];
52
+ else result[column.id] = ("string" == typeof current?.value ? current.value : null) ?? filter.options[0].id;
53
+ }
54
+ return result;
55
+ }, [
56
+ filterableColumns,
57
+ currentFilters
58
+ ]);
59
+ const resetFilterValues = (0, __WEBPACK_EXTERNAL_MODULE_react__.useMemo)(()=>{
60
+ const result = {};
61
+ for (const col of filterableColumns){
62
+ const filter = col.filter;
63
+ result[col.id] = filter.isMulti ? [] : filter.options[0].id;
64
+ }
65
+ return result;
66
+ }, [
67
+ filterableColumns
68
+ ]);
69
+ const { data, setData, status, submit } = (0, __WEBPACK_EXTERNAL_MODULE__forms_useForm_js_e756b4e7__["default"])({
70
+ initialValues: {
71
+ filters: initialFilterValues
72
+ },
73
+ onSubmit: async (values)=>{
74
+ const filters = Object.entries(values.filters).map(([columnId, value])=>({
75
+ id: columnId,
76
+ value
77
+ }));
78
+ onFiltersChange(filters);
79
+ }
80
+ });
81
+ const handleMultiFilterChange = (0, __WEBPACK_EXTERNAL_MODULE_react__.useCallback)((columnId, option)=>{
82
+ setData((prev)=>{
83
+ const prevValue = prev.filters[columnId];
84
+ const current = Array.isArray(prevValue) ? prevValue : [];
85
+ const next = current.includes(option.id) ? current.filter((id)=>id !== option.id) : [
86
+ ...current,
87
+ option.id
88
+ ];
89
+ return {
90
+ filters: {
91
+ ...prev.filters,
92
+ [columnId]: next
93
+ }
94
+ };
95
+ });
96
+ }, [
97
+ setData
98
+ ]);
99
+ return /*#__PURE__*/ (0, __WEBPACK_EXTERNAL_MODULE_react_jsx_runtime_225474f2__.jsx)(__WEBPACK_EXTERNAL_MODULE__Modal_js_50f53bdf__["default"], {
100
+ onClose: onClose,
101
+ children: /*#__PURE__*/ (0, __WEBPACK_EXTERNAL_MODULE_react_jsx_runtime_225474f2__.jsx)(__WEBPACK_EXTERNAL_MODULE__Card_js_d67c086a__["default"], {
102
+ header: /*#__PURE__*/ (0, __WEBPACK_EXTERNAL_MODULE_react_jsx_runtime_225474f2__.jsx)(__WEBPACK_EXTERNAL_MODULE__PlainText_js_cd0b6798__["default"], {
103
+ font: "h6",
104
+ tagName: "h6",
105
+ children: "Filters"
106
+ }),
107
+ footer: /*#__PURE__*/ (0, __WEBPACK_EXTERNAL_MODULE_react_jsx_runtime_225474f2__.jsxs)(__WEBPACK_EXTERNAL_MODULE__HStack_js_cc26058d__["default"], {
108
+ justify: "space-between",
109
+ children: [
110
+ /*#__PURE__*/ (0, __WEBPACK_EXTERNAL_MODULE_react_jsx_runtime_225474f2__.jsx)(__WEBPACK_EXTERNAL_MODULE__controls_Button_js_f591ba2e__["default"], {
111
+ type: "secondary",
112
+ onClick: ()=>{
113
+ setData(()=>({
114
+ filters: resetFilterValues
115
+ }));
116
+ },
117
+ icon: /*#__PURE__*/ (0, __WEBPACK_EXTERNAL_MODULE_react_jsx_runtime_225474f2__.jsx)(__WEBPACK_EXTERNAL_MODULE__Icon_js_0d271bb6__["default"], {
118
+ symbol: "Restore"
119
+ }),
120
+ children: "Reset all filters"
121
+ }),
122
+ /*#__PURE__*/ (0, __WEBPACK_EXTERNAL_MODULE_react_jsx_runtime_225474f2__.jsx)(__WEBPACK_EXTERNAL_MODULE__forms_FormButtonSet_js_c160eb1a__["default"], {
123
+ formStatus: status,
124
+ primary: {
125
+ action: async ()=>{
126
+ submit();
127
+ onClose();
128
+ },
129
+ label: "Apply filters"
130
+ },
131
+ secondary: {
132
+ action: onClose,
133
+ label: "Cancel",
134
+ type: "ghost"
135
+ }
136
+ })
137
+ ]
138
+ }),
139
+ children: /*#__PURE__*/ (0, __WEBPACK_EXTERNAL_MODULE_react_jsx_runtime_225474f2__.jsx)("div", {
140
+ className: __WEBPACK_EXTERNAL_MODULE__Table_module_js_1c0e33be__["default"].filterExpandersContainer,
141
+ children: filterableColumns.map((column)=>{
142
+ const filter = column.filter;
143
+ if (filter.isMulti) {
144
+ const filterValue = data.filters[column.id];
145
+ const selectedIds = Array.isArray(filterValue) ? filterValue : [];
146
+ const selectedOptions = filter.options.filter((opt)=>selectedIds.includes(opt.id));
147
+ const multiFilterLabel = /*#__PURE__*/ (0, __WEBPACK_EXTERNAL_MODULE_react_jsx_runtime_225474f2__.jsxs)(__WEBPACK_EXTERNAL_MODULE__HStack_js_cc26058d__["default"], {
148
+ justify: "space-between",
149
+ children: [
150
+ /*#__PURE__*/ (0, __WEBPACK_EXTERNAL_MODULE_react_jsx_runtime_225474f2__.jsx)("span", {
151
+ children: selectedIds.length > 0 ? `${filter.label} (${selectedIds.length} selected)` : filter.label
152
+ }),
153
+ /*#__PURE__*/ (0, __WEBPACK_EXTERNAL_MODULE_react_jsx_runtime_225474f2__.jsx)("span", {
154
+ style: {
155
+ visibility: selectedIds.length > 0 ? "visible" : "hidden"
156
+ },
157
+ children: /*#__PURE__*/ (0, __WEBPACK_EXTERNAL_MODULE_react_jsx_runtime_225474f2__.jsx)(__WEBPACK_EXTERNAL_MODULE__controls_Button_js_f591ba2e__["default"], {
158
+ type: "secondary",
159
+ size: "small",
160
+ onClick: (e)=>{
161
+ e.stopPropagation();
162
+ setData((prev)=>({
163
+ filters: {
164
+ ...prev.filters,
165
+ [column.id]: []
166
+ }
167
+ }));
168
+ },
169
+ children: "Reset"
170
+ })
171
+ })
172
+ ]
173
+ });
174
+ return /*#__PURE__*/ (0, __WEBPACK_EXTERNAL_MODULE_react_jsx_runtime_225474f2__.jsx)(TableFilterExpander, {
175
+ label: multiFilterLabel,
176
+ highlight: selectedIds.length > 0,
177
+ defaultOpen: 1 === filterableColumns.length,
178
+ children: filter.options.length > MIN_LIST_BOX_FILTER_OPTIONS ? /*#__PURE__*/ (0, __WEBPACK_EXTERNAL_MODULE_react_jsx_runtime_225474f2__.jsx)(__WEBPACK_EXTERNAL_MODULE__fields_ListBoxField_js_b7d4cb12__["default"], {
179
+ id: `${column.id}-filter`,
180
+ label: "",
181
+ options: filter.options,
182
+ optionToId: (opt)=>opt.id,
183
+ optionToLabel: (opt)=>opt.label,
184
+ searchField: "label",
185
+ value: selectedOptions,
186
+ onChange: (option)=>handleMultiFilterChange(column.id, option),
187
+ fixedHeight: true
188
+ }) : /*#__PURE__*/ (0, __WEBPACK_EXTERNAL_MODULE_react_jsx_runtime_225474f2__.jsx)(__WEBPACK_EXTERNAL_MODULE__fields_CheckboxSetField_js_bce910a4__["default"], {
189
+ id: `${column.id}-filter`,
190
+ label: "",
191
+ options: filter.options,
192
+ optionToId: (opt)=>opt.id,
193
+ optionToLabel: (opt)=>opt.label,
194
+ values: selectedOptions,
195
+ onChange: (option)=>handleMultiFilterChange(column.id, option)
196
+ })
197
+ }, column.id);
198
+ }
199
+ const rawValue = data.filters[column.id];
200
+ const value = "string" == typeof rawValue ? rawValue : filter.options[0].id;
201
+ const hasNonDefaultValue = "string" == typeof rawValue && rawValue !== filter.options[0].id;
202
+ const isBooleanFilter = 2 === filter.options.length;
203
+ const booleanValue = isBooleanFilter && value === filter.options[1].id;
204
+ const singleFilterLabel = /*#__PURE__*/ (0, __WEBPACK_EXTERNAL_MODULE_react_jsx_runtime_225474f2__.jsxs)(__WEBPACK_EXTERNAL_MODULE__HStack_js_cc26058d__["default"], {
205
+ justify: "space-between",
206
+ children: [
207
+ /*#__PURE__*/ (0, __WEBPACK_EXTERNAL_MODULE_react_jsx_runtime_225474f2__.jsx)("span", {
208
+ children: hasNonDefaultValue ? `${filter.label} (Selected)` : filter.label
209
+ }),
210
+ /*#__PURE__*/ (0, __WEBPACK_EXTERNAL_MODULE_react_jsx_runtime_225474f2__.jsx)("span", {
211
+ style: {
212
+ visibility: hasNonDefaultValue ? "visible" : "hidden"
213
+ },
214
+ children: /*#__PURE__*/ (0, __WEBPACK_EXTERNAL_MODULE_react_jsx_runtime_225474f2__.jsx)(__WEBPACK_EXTERNAL_MODULE__controls_Button_js_f591ba2e__["default"], {
215
+ type: "secondary",
216
+ size: "small",
217
+ onClick: (e)=>{
218
+ e.stopPropagation();
219
+ setData((prev)=>({
220
+ filters: {
221
+ ...prev.filters,
222
+ [column.id]: filter.options[0].id
223
+ }
224
+ }));
225
+ },
226
+ children: "Reset"
227
+ })
228
+ })
229
+ ]
230
+ });
231
+ return isBooleanFilter ? /*#__PURE__*/ (0, __WEBPACK_EXTERNAL_MODULE_react_jsx_runtime_225474f2__.jsx)("div", {
232
+ className: __WEBPACK_EXTERNAL_MODULE__Table_module_js_1c0e33be__["default"].filterBooleanFieldWrapper,
233
+ children: /*#__PURE__*/ (0, __WEBPACK_EXTERNAL_MODULE_react_jsx_runtime_225474f2__.jsx)(__WEBPACK_EXTERNAL_MODULE__fields_BooleanField_js_dc79ee46__["default"], {
234
+ id: `${column.id}-filter`,
235
+ label: filter.label,
236
+ value: booleanValue,
237
+ onChange: (checked)=>{
238
+ setData((prev)=>({
239
+ filters: {
240
+ ...prev.filters,
241
+ [column.id]: checked ? filter.options[1].id : filter.options[0].id
242
+ }
243
+ }));
244
+ }
245
+ })
246
+ }, column.id) : /*#__PURE__*/ (0, __WEBPACK_EXTERNAL_MODULE_react_jsx_runtime_225474f2__.jsx)(TableFilterExpander, {
247
+ label: singleFilterLabel,
248
+ highlight: hasNonDefaultValue,
249
+ defaultOpen: 1 === filterableColumns.length,
250
+ children: /*#__PURE__*/ (0, __WEBPACK_EXTERNAL_MODULE_react_jsx_runtime_225474f2__.jsx)(__WEBPACK_EXTERNAL_MODULE__fields_SimpleRadioSetField_js_118e9421__["default"], {
251
+ id: `${column.id}-filter`,
252
+ label: "",
253
+ options: filter.options,
254
+ value: value,
255
+ onChange: (optionId)=>{
256
+ setData((prev)=>({
257
+ filters: {
258
+ ...prev.filters,
259
+ [column.id]: optionId
260
+ }
261
+ }));
262
+ }
263
+ })
264
+ }, column.id);
265
+ })
266
+ })
267
+ })
268
+ });
269
+ };
270
+ const TableColumnFilterModal_rslib_entry_ = TableColumnFilterModal;
271
+ export { TableColumnFilterModal_rslib_entry_ as default };
@@ -0,0 +1,8 @@
1
+ import type { Row } from "@tanstack/react-table";
2
+ export type PrimitiveValue = boolean | string | undefined | number;
3
+ type Column = {
4
+ id: string;
5
+ header?: string;
6
+ };
7
+ export declare const handleDownloadCsv: <Type>(csvFilename: string | undefined, columns: Column[], rows: Row<Type>[]) => void;
8
+ export {};
@@ -0,0 +1,18 @@
1
+ import * as __WEBPACK_EXTERNAL_MODULE_utf8__ from "utf8";
2
+ import * as __WEBPACK_EXTERNAL_MODULE__encodeCsv_js_c1f49309__ from "./encodeCsv.js";
3
+ const createCsvDataUrl = (columns, rows)=>{
4
+ const csvContent = (0, __WEBPACK_EXTERNAL_MODULE__encodeCsv_js_c1f49309__["default"])([
5
+ columns.map((col)=>col.header),
6
+ ...rows.map((row)=>columns.map((col)=>row.getValue(col.id)))
7
+ ]);
8
+ return `data:text/csv;charset=utf-8,${__WEBPACK_EXTERNAL_MODULE_utf8__["default"].encode(csvContent)}`;
9
+ };
10
+ const handleDownloadCsv = (csvFilename, columns, rows)=>{
11
+ if (!csvFilename) return;
12
+ const csvDataUrl = createCsvDataUrl(columns, rows);
13
+ const a = document.createElement("a");
14
+ a.href = csvDataUrl;
15
+ a.download = csvFilename.endsWith(".csv") ? csvFilename : `${csvFilename}.csv`;
16
+ a.click();
17
+ };
18
+ export { handleDownloadCsv };
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@worknice/whiteboard",
3
3
  "description": "",
4
- "version": "0.43.1",
4
+ "version": "0.44.0",
5
5
  "license": "MIT",
6
6
  "private": false,
7
7
  "files": [
@@ -25,8 +25,8 @@
25
25
  "main": "./dist/index.js",
26
26
  "types": "./dist/index.d.ts",
27
27
  "dependencies": {
28
- "@dnd-kit/core": "^6.1.0",
29
- "@dnd-kit/sortable": "^8.0.0",
28
+ "@dnd-kit/core": "^6.3.1",
29
+ "@dnd-kit/sortable": "^10.0.0",
30
30
  "@dnd-kit/utilities": "^3.2.2",
31
31
  "@floating-ui/react": "^0.26.19",
32
32
  "@floating-ui/react-dom": "^2.0.8",
@@ -39,7 +39,7 @@
39
39
  "react-markdown": "^10.1.0",
40
40
  "utf8": "^3.0.0",
41
41
  "zod": "^4.1.13",
42
- "@worknice/utils": "^0.26.1"
42
+ "@worknice/utils": "^0.27.0"
43
43
  },
44
44
  "devDependencies": {
45
45
  "@anolilab/semantic-release-pnpm": "^3.2.2",
@@ -1,38 +0,0 @@
1
- import type { SortingColumnDef } from "@tanstack/react-table";
2
- import { useReactTable } from "@tanstack/react-table";
3
- import { type ReactNode } from "react";
4
- type PrimitiveValue = boolean | string | undefined | number;
5
- type Filter<Type> = {
6
- label: string;
7
- options: Array<{
8
- id: string;
9
- label: string;
10
- /**
11
- * If omitted no filtering will be applied.
12
- */
13
- predicate?: (row: Type) => boolean;
14
- }>;
15
- };
16
- type Props<Type> = {
17
- reactTable: ReturnType<typeof useReactTable<Type>>;
18
- columns: Array<{
19
- cell?: (row: Type) => ReactNode;
20
- filter?: Filter<Type>;
21
- id: string;
22
- globalFiltering?: boolean;
23
- size?: number;
24
- enableSorting?: boolean;
25
- sortUndefined?: SortingColumnDef<Type>["sortUndefined"];
26
- } & ({
27
- type?: "accessor";
28
- value: (row: Type) => PrimitiveValue;
29
- header: string;
30
- } | {
31
- type: "display";
32
- header?: string;
33
- })>;
34
- showRowCount?: boolean;
35
- isLoading?: boolean;
36
- };
37
- declare const CustomizableTableContents: <Type>({ reactTable, columns, showRowCount, isLoading, }: Props<Type>) => import("react/jsx-runtime").JSX.Element;
38
- export default CustomizableTableContents;