@proyecto-viviana/solid-stately 0.2.7 → 0.3.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.
- package/README.md +30 -283
- package/dist/autocomplete/createAutocompleteState.d.ts +2 -2
- package/dist/autocomplete/index.d.ts +1 -1
- package/dist/calendar/createCalendarState.d.ts +22 -7
- package/dist/calendar/createDateFieldState.d.ts +30 -7
- package/dist/calendar/createDatePickerState.d.ts +60 -0
- package/dist/calendar/createRangeCalendarState.d.ts +27 -8
- package/dist/calendar/createTimeFieldState.d.ts +34 -7
- package/dist/calendar/index.d.ts +7 -6
- package/dist/checkbox/createCheckboxGroupState.d.ts +6 -6
- package/dist/checkbox/index.d.ts +1 -1
- package/dist/collections/ListCollection.d.ts +1 -1
- package/dist/collections/createListState.d.ts +8 -8
- package/dist/collections/createMenuState.d.ts +7 -7
- package/dist/collections/createSelectionState.d.ts +5 -5
- package/dist/collections/index.d.ts +5 -5
- package/dist/collections/types.d.ts +12 -12
- package/dist/color/Color.d.ts +1 -1
- package/dist/color/createColorAreaState.d.ts +4 -2
- package/dist/color/createColorFieldState.d.ts +38 -12
- package/dist/color/createColorSliderState.d.ts +9 -2
- package/dist/color/createColorWheelState.d.ts +13 -2
- package/dist/color/getColorChannels.d.ts +1 -1
- package/dist/color/index.d.ts +6 -6
- package/dist/color/types.d.ts +4 -4
- package/dist/combobox/createComboBoxState.d.ts +27 -13
- package/dist/combobox/index.d.ts +1 -1
- package/dist/data/createAsyncList.d.ts +4 -4
- package/dist/data/createListData.d.ts +2 -2
- package/dist/data/createTreeData.d.ts +6 -2
- package/dist/data/index.d.ts +3 -3
- package/dist/datepicker/index.d.ts +2 -4
- package/dist/disclosure/createDisclosureState.d.ts +2 -2
- package/dist/disclosure/index.d.ts +1 -1
- package/dist/dnd/createDragState.d.ts +2 -2
- package/dist/dnd/createDraggableCollectionState.d.ts +2 -2
- package/dist/dnd/createDropState.d.ts +2 -2
- package/dist/dnd/createDroppableCollectionState.d.ts +3 -3
- package/dist/dnd/index.d.ts +5 -5
- package/dist/dnd/types.d.ts +16 -16
- package/dist/form/createFormValidationState.d.ts +3 -3
- package/dist/form/index.d.ts +1 -1
- package/dist/grid/createGridState.d.ts +2 -2
- package/dist/grid/index.d.ts +2 -2
- package/dist/grid/types.d.ts +13 -11
- package/dist/index.d.ts +31 -30
- package/dist/index.js +7924 -7238
- package/dist/index.js.map +1 -1
- package/dist/menu/index.d.ts +2 -2
- package/dist/numberfield/createNumberFieldState.d.ts +2 -2
- package/dist/numberfield/index.d.ts +1 -1
- package/dist/overlays/createOverlayTriggerState.d.ts +2 -2
- package/dist/overlays/index.d.ts +1 -1
- package/dist/radio/createRadioGroupState.d.ts +7 -7
- package/dist/radio/index.d.ts +1 -1
- package/dist/searchfield/createSearchFieldState.d.ts +2 -2
- package/dist/searchfield/index.d.ts +2 -2
- package/dist/select/createSelectState.d.ts +8 -8
- package/dist/select/index.d.ts +1 -1
- package/dist/selection/index.d.ts +5 -5
- package/dist/slider/createSliderState.d.ts +3 -3
- package/dist/slider/index.d.ts +2 -2
- package/dist/steplist/createStepListState.d.ts +48 -0
- package/dist/steplist/index.d.ts +1 -0
- package/dist/table/TableCollection.d.ts +3 -3
- package/dist/table/createTableColumnResizeState.d.ts +54 -0
- package/dist/table/createTableState.d.ts +2 -2
- package/dist/table/index.d.ts +5 -3
- package/dist/table/types.d.ts +10 -10
- package/dist/tabs/createTabListState.d.ts +5 -5
- package/dist/tabs/index.d.ts +1 -1
- package/dist/textfield/createTextFieldState.d.ts +2 -2
- package/dist/textfield/index.d.ts +1 -1
- package/dist/toast/createToastState.d.ts +8 -2
- package/dist/toast/index.d.ts +1 -1
- package/dist/toggle/createToggleGroupState.d.ts +4 -4
- package/dist/toggle/createToggleState.d.ts +2 -2
- package/dist/toggle/index.d.ts +2 -2
- package/dist/tooltip/createTooltipTriggerState.d.ts +2 -2
- package/dist/tooltip/index.d.ts +1 -1
- package/dist/tree/TreeCollection.d.ts +2 -2
- package/dist/tree/createTreeState.d.ts +2 -2
- package/dist/tree/index.d.ts +3 -3
- package/dist/tree/types.d.ts +19 -13
- package/dist/utils/index.d.ts +1 -1
- package/dist/utils/reactivity.d.ts +1 -1
- package/package.json +29 -30
- package/src/autocomplete/createAutocompleteState.d.ts +19 -17
- package/src/autocomplete/createAutocompleteState.ts +24 -30
- package/src/autocomplete/index.d.ts +6 -2
- package/src/autocomplete/index.ts +1 -1
- package/src/calendar/createCalendarState.d.ts +139 -117
- package/src/calendar/createCalendarState.ts +221 -74
- package/src/calendar/createDateFieldState.d.ts +130 -95
- package/src/calendar/createDateFieldState.ts +263 -151
- package/src/calendar/createDatePickerState.ts +347 -0
- package/src/calendar/createRangeCalendarState.d.ts +154 -129
- package/src/calendar/createRangeCalendarState.ts +293 -79
- package/src/calendar/createTimeFieldState.d.ts +81 -79
- package/src/calendar/createTimeFieldState.ts +187 -108
- package/src/calendar/index.d.ts +80 -7
- package/src/calendar/index.ts +21 -12
- package/src/checkbox/createCheckboxGroupState.d.ts +57 -55
- package/src/checkbox/createCheckboxGroupState.ts +20 -29
- package/src/checkbox/index.d.ts +6 -2
- package/src/checkbox/index.ts +1 -1
- package/src/collections/ListCollection.d.ts +25 -22
- package/src/collections/ListCollection.ts +6 -6
- package/src/collections/createListState.d.ts +73 -58
- package/src/collections/createListState.ts +19 -18
- package/src/collections/createMenuState.d.ts +36 -31
- package/src/collections/createMenuState.ts +18 -12
- package/src/collections/createSelectionState.d.ts +78 -65
- package/src/collections/createSelectionState.ts +36 -32
- package/src/collections/index.d.ts +38 -6
- package/src/collections/index.ts +5 -10
- package/src/collections/types.d.ts +101 -101
- package/src/collections/types.ts +12 -12
- package/src/color/Color.d.ts +20 -5
- package/src/color/Color.ts +357 -254
- package/src/color/createColorAreaState.d.ts +67 -65
- package/src/color/createColorAreaState.ts +21 -13
- package/src/color/createColorFieldState.d.ts +46 -44
- package/src/color/createColorFieldState.ts +285 -149
- package/src/color/createColorSliderState.d.ts +58 -56
- package/src/color/createColorSliderState.ts +45 -14
- package/src/color/createColorWheelState.d.ts +42 -40
- package/src/color/createColorWheelState.ts +101 -64
- package/src/color/getColorChannels.ts +7 -5
- package/src/color/index.d.ts +36 -7
- package/src/color/index.ts +6 -9
- package/src/color/types.d.ts +68 -63
- package/src/color/types.ts +11 -19
- package/src/combobox/createComboBoxState.d.ts +107 -105
- package/src/combobox/createComboBoxState.ts +176 -89
- package/src/combobox/index.d.ts +10 -2
- package/src/combobox/index.ts +1 -1
- package/src/data/createAsyncList.ts +89 -63
- package/src/data/createListData.ts +67 -67
- package/src/data/createTreeData.ts +304 -91
- package/src/data/index.ts +3 -3
- package/src/datepicker/index.ts +6 -10
- package/src/disclosure/createDisclosureState.d.ts +47 -43
- package/src/disclosure/createDisclosureState.ts +7 -21
- package/src/disclosure/index.d.ts +10 -2
- package/src/disclosure/index.ts +1 -1
- package/src/dnd/createDragState.d.ts +51 -42
- package/src/dnd/createDragState.ts +12 -14
- package/src/dnd/createDraggableCollectionState.d.ts +52 -41
- package/src/dnd/createDraggableCollectionState.ts +14 -21
- package/src/dnd/createDropState.d.ts +64 -45
- package/src/dnd/createDropState.ts +22 -32
- package/src/dnd/createDroppableCollectionState.d.ts +88 -59
- package/src/dnd/createDroppableCollectionState.ts +40 -43
- package/src/dnd/index.d.ts +54 -6
- package/src/dnd/index.ts +5 -18
- package/src/dnd/types.d.ts +167 -156
- package/src/dnd/types.ts +20 -21
- package/src/form/createFormValidationState.d.ts +47 -45
- package/src/form/createFormValidationState.ts +30 -63
- package/src/form/index.d.ts +16 -2
- package/src/form/index.ts +1 -1
- package/src/grid/createGridState.d.ts +7 -4
- package/src/grid/createGridState.ts +44 -51
- package/src/grid/index.d.ts +3 -3
- package/src/grid/index.ts +2 -8
- package/src/grid/types.d.ts +136 -129
- package/src/grid/types.ts +20 -18
- package/src/index.d.ts +310 -26
- package/src/index.ts +48 -89
- package/src/menu/index.ts +2 -4
- package/src/numberfield/createNumberFieldState.d.ts +56 -54
- package/src/numberfield/createNumberFieldState.ts +26 -31
- package/src/numberfield/index.d.ts +6 -2
- package/src/numberfield/index.ts +1 -1
- package/src/overlays/createOverlayTriggerState.d.ts +22 -20
- package/src/overlays/createOverlayTriggerState.ts +3 -4
- package/src/overlays/index.d.ts +6 -2
- package/src/overlays/index.ts +1 -1
- package/src/radio/createRadioGroupState.d.ts +54 -52
- package/src/radio/createRadioGroupState.ts +27 -29
- package/src/radio/index.d.ts +7 -2
- package/src/radio/index.ts +1 -1
- package/src/searchfield/createSearchFieldState.d.ts +16 -14
- package/src/searchfield/createSearchFieldState.ts +5 -11
- package/src/searchfield/index.d.ts +3 -3
- package/src/searchfield/index.ts +2 -5
- package/src/select/createSelectState.d.ts +63 -61
- package/src/select/createSelectState.ts +27 -27
- package/src/select/index.d.ts +2 -2
- package/src/select/index.ts +1 -5
- package/src/selection/index.ts +6 -7
- package/src/slider/createSliderState.d.ts +60 -60
- package/src/slider/createSliderState.ts +55 -33
- package/src/slider/index.d.ts +3 -3
- package/src/slider/index.ts +2 -6
- package/src/ssr/index.d.ts +1 -1
- package/src/ssr/index.ts +2 -2
- package/src/steplist/createStepListState.ts +191 -0
- package/src/steplist/index.ts +5 -0
- package/src/table/TableCollection.d.ts +42 -40
- package/src/table/TableCollection.ts +61 -64
- package/src/table/createTableColumnResizeState.ts +242 -0
- package/src/table/createTableState.d.ts +7 -4
- package/src/table/createTableState.ts +10 -7
- package/src/table/index.d.ts +14 -4
- package/src/table/index.ts +10 -3
- package/src/table/types.d.ts +98 -92
- package/src/table/types.ts +17 -13
- package/src/tabs/createTabListState.d.ts +59 -57
- package/src/tabs/createTabListState.ts +24 -31
- package/src/tabs/index.d.ts +8 -2
- package/src/tabs/index.ts +1 -1
- package/src/textfield/createTextFieldState.d.ts +16 -14
- package/src/textfield/createTextFieldState.ts +7 -18
- package/src/textfield/index.d.ts +6 -2
- package/src/textfield/index.ts +1 -1
- package/src/toast/createToastState.d.ts +92 -86
- package/src/toast/createToastState.ts +48 -43
- package/src/toast/index.d.ts +12 -2
- package/src/toast/index.ts +1 -1
- package/src/toggle/createToggleGroupState.ts +11 -21
- package/src/toggle/createToggleState.d.ts +19 -19
- package/src/toggle/createToggleState.ts +2 -16
- package/src/toggle/index.d.ts +2 -2
- package/src/toggle/index.ts +2 -6
- package/src/tooltip/createTooltipTriggerState.d.ts +17 -17
- package/src/tooltip/createTooltipTriggerState.ts +12 -11
- package/src/tooltip/index.d.ts +7 -2
- package/src/tooltip/index.ts +1 -1
- package/src/tree/TreeCollection.d.ts +26 -23
- package/src/tree/TreeCollection.ts +29 -22
- package/src/tree/createTreeState.d.ts +7 -4
- package/src/tree/createTreeState.ts +39 -41
- package/src/tree/index.d.ts +10 -4
- package/src/tree/index.ts +3 -3
- package/src/tree/types.d.ts +131 -126
- package/src/tree/types.ts +22 -13
- package/src/utils/index.d.ts +2 -2
- package/src/utils/index.ts +1 -1
- package/src/utils/reactivity.d.ts +2 -2
- package/src/utils/reactivity.ts +3 -3
|
@@ -3,14 +3,14 @@
|
|
|
3
3
|
* Based on @react-stately/table/TableCollection.
|
|
4
4
|
*/
|
|
5
5
|
|
|
6
|
-
import type { Key } from
|
|
7
|
-
import type { GridNode, GridNodeType } from
|
|
6
|
+
import type { Key } from "../collections/types";
|
|
7
|
+
import type { GridNode, GridNodeType } from "../grid/types";
|
|
8
8
|
import type {
|
|
9
9
|
TableCollection as ITableCollection,
|
|
10
10
|
TableCollectionOptions,
|
|
11
11
|
ColumnDefinition,
|
|
12
12
|
RowDefinition,
|
|
13
|
-
} from
|
|
13
|
+
} from "./types";
|
|
14
14
|
|
|
15
15
|
/**
|
|
16
16
|
* Creates a table collection from column and row definitions.
|
|
@@ -35,77 +35,68 @@ export class TableCollection<T = unknown> implements ITableCollection<T> {
|
|
|
35
35
|
rowHeaderColumnKeys,
|
|
36
36
|
} = options;
|
|
37
37
|
|
|
38
|
-
// Build columns
|
|
39
38
|
this._columns = this.buildColumns(columns, showSelectionCheckboxes);
|
|
40
39
|
|
|
41
|
-
// Determine row header column keys
|
|
42
40
|
this._rowHeaderColumnKeys = rowHeaderColumnKeys ?? this.getDefaultRowHeaderColumnKeys();
|
|
43
41
|
|
|
44
|
-
// Build header rows
|
|
45
42
|
this._headerRows = this.buildHeaderRows();
|
|
46
43
|
|
|
47
|
-
// Build head node
|
|
48
44
|
if (this._headerRows.length > 0) {
|
|
49
45
|
this._head = {
|
|
50
|
-
type:
|
|
51
|
-
key:
|
|
46
|
+
type: "headerrow" as GridNodeType,
|
|
47
|
+
key: "header",
|
|
52
48
|
index: 0,
|
|
53
49
|
level: 0,
|
|
54
50
|
hasChildNodes: true,
|
|
55
51
|
childNodes: this._headerRows,
|
|
56
52
|
value: null,
|
|
57
|
-
textValue:
|
|
53
|
+
textValue: "",
|
|
58
54
|
};
|
|
59
|
-
this._keyMap.set(
|
|
55
|
+
this._keyMap.set("header", this._head);
|
|
60
56
|
}
|
|
61
57
|
|
|
62
|
-
// Build body rows
|
|
63
58
|
const bodyRows = this.buildRows(rows, getKey, getTextValue);
|
|
64
59
|
this._size = bodyRows.length;
|
|
65
60
|
|
|
66
|
-
// Build body node
|
|
67
61
|
this._body = {
|
|
68
|
-
type:
|
|
69
|
-
key:
|
|
62
|
+
type: "item" as GridNodeType,
|
|
63
|
+
key: "body",
|
|
70
64
|
index: this._headerRows.length,
|
|
71
65
|
level: 0,
|
|
72
66
|
hasChildNodes: true,
|
|
73
67
|
childNodes: bodyRows,
|
|
74
68
|
value: null,
|
|
75
|
-
textValue:
|
|
69
|
+
textValue: "",
|
|
76
70
|
};
|
|
77
|
-
this._keyMap.set(
|
|
71
|
+
this._keyMap.set("body", this._body);
|
|
78
72
|
|
|
79
|
-
// Combine all rows
|
|
80
73
|
this._rows = [...this._headerRows, ...bodyRows];
|
|
81
74
|
}
|
|
82
75
|
|
|
83
76
|
private buildColumns(
|
|
84
77
|
columns: ColumnDefinition<T>[],
|
|
85
|
-
showSelectionCheckboxes: boolean
|
|
78
|
+
showSelectionCheckboxes: boolean,
|
|
86
79
|
): GridNode<T>[] {
|
|
87
80
|
const result: GridNode<T>[] = [];
|
|
88
81
|
let colIndex = 0;
|
|
89
82
|
|
|
90
|
-
// Add selection column if needed
|
|
91
83
|
if (showSelectionCheckboxes) {
|
|
92
84
|
const selectionColumn: GridNode<T> = {
|
|
93
|
-
type:
|
|
94
|
-
key:
|
|
85
|
+
type: "column" as GridNodeType,
|
|
86
|
+
key: "__selection__",
|
|
95
87
|
index: colIndex,
|
|
96
88
|
column: 0,
|
|
97
89
|
level: 0,
|
|
98
90
|
hasChildNodes: false,
|
|
99
91
|
childNodes: [],
|
|
100
92
|
value: null,
|
|
101
|
-
textValue:
|
|
93
|
+
textValue: "Selection",
|
|
102
94
|
};
|
|
103
95
|
result.push(selectionColumn);
|
|
104
96
|
this._keyMap.set(selectionColumn.key, selectionColumn);
|
|
105
97
|
colIndex++;
|
|
106
98
|
}
|
|
107
99
|
|
|
108
|
-
// Build user columns
|
|
109
100
|
for (const col of columns) {
|
|
110
101
|
const node = this.buildColumnNode(col, colIndex);
|
|
111
102
|
result.push(node);
|
|
@@ -116,24 +107,25 @@ export class TableCollection<T = unknown> implements ITableCollection<T> {
|
|
|
116
107
|
}
|
|
117
108
|
|
|
118
109
|
private buildColumnNode(col: ColumnDefinition<T>, index: number): GridNode<T> {
|
|
110
|
+
const key = col.key ?? (col as ColumnDefinition<T> & { id?: Key }).id ?? index;
|
|
119
111
|
const node: GridNode<T> = {
|
|
120
|
-
type:
|
|
121
|
-
key
|
|
112
|
+
type: "column" as GridNodeType,
|
|
113
|
+
key,
|
|
122
114
|
index,
|
|
123
115
|
column: index,
|
|
124
116
|
level: 0,
|
|
125
117
|
hasChildNodes: (col.children?.length ?? 0) > 0,
|
|
126
118
|
childNodes: [],
|
|
127
119
|
value: null,
|
|
128
|
-
|
|
120
|
+
props: { columnDefinition: { ...col, key } },
|
|
121
|
+
textValue: col.textValue ?? col.name ?? String(key),
|
|
129
122
|
};
|
|
130
123
|
|
|
131
|
-
// Build child columns if present (for column groups)
|
|
132
124
|
if (col.children && col.children.length > 0) {
|
|
133
125
|
let childIndex = 0;
|
|
134
126
|
for (const child of col.children) {
|
|
135
127
|
const childNode = this.buildColumnNode(child, childIndex);
|
|
136
|
-
childNode.parentKey =
|
|
128
|
+
childNode.parentKey = key;
|
|
137
129
|
childNode.level = 1;
|
|
138
130
|
node.childNodes.push(childNode);
|
|
139
131
|
childIndex++;
|
|
@@ -145,9 +137,21 @@ export class TableCollection<T = unknown> implements ITableCollection<T> {
|
|
|
145
137
|
}
|
|
146
138
|
|
|
147
139
|
private getDefaultRowHeaderColumnKeys(): Set<Key> {
|
|
148
|
-
|
|
140
|
+
const explicitRowHeaderKeys = this._columns
|
|
141
|
+
.filter((col) => col.key !== "__selection__")
|
|
142
|
+
.filter((col) => {
|
|
143
|
+
const definition = col.props?.columnDefinition as ColumnDefinition<T> | undefined;
|
|
144
|
+
return !!definition?.isRowHeader;
|
|
145
|
+
})
|
|
146
|
+
.map((col) => col.key);
|
|
147
|
+
|
|
148
|
+
if (explicitRowHeaderKeys.length > 0) {
|
|
149
|
+
return new Set(explicitRowHeaderKeys);
|
|
150
|
+
}
|
|
151
|
+
|
|
152
|
+
// Default to first non-selection column as row header.
|
|
149
153
|
for (const col of this._columns) {
|
|
150
|
-
if (col.key !==
|
|
154
|
+
if (col.key !== "__selection__") {
|
|
151
155
|
return new Set([col.key]);
|
|
152
156
|
}
|
|
153
157
|
}
|
|
@@ -159,9 +163,8 @@ export class TableCollection<T = unknown> implements ITableCollection<T> {
|
|
|
159
163
|
return [];
|
|
160
164
|
}
|
|
161
165
|
|
|
162
|
-
// Build a single header row containing all columns
|
|
163
166
|
const headerCells: GridNode<T>[] = this._columns.map((col, index) => ({
|
|
164
|
-
type:
|
|
167
|
+
type: "column" as GridNodeType,
|
|
165
168
|
key: `header-${col.key}`,
|
|
166
169
|
index,
|
|
167
170
|
column: index,
|
|
@@ -170,19 +173,19 @@ export class TableCollection<T = unknown> implements ITableCollection<T> {
|
|
|
170
173
|
childNodes: [],
|
|
171
174
|
value: null,
|
|
172
175
|
textValue: col.textValue,
|
|
173
|
-
parentKey:
|
|
176
|
+
parentKey: "headerrow-0",
|
|
174
177
|
}));
|
|
175
178
|
|
|
176
179
|
const headerRow: GridNode<T> = {
|
|
177
|
-
type:
|
|
178
|
-
key:
|
|
180
|
+
type: "headerrow" as GridNodeType,
|
|
181
|
+
key: "headerrow-0",
|
|
179
182
|
index: 0,
|
|
180
183
|
rowIndex: 0,
|
|
181
184
|
level: 0,
|
|
182
185
|
hasChildNodes: true,
|
|
183
186
|
childNodes: headerCells,
|
|
184
187
|
value: null,
|
|
185
|
-
textValue:
|
|
188
|
+
textValue: "",
|
|
186
189
|
};
|
|
187
190
|
|
|
188
191
|
this._keyMap.set(headerRow.key, headerRow);
|
|
@@ -194,7 +197,7 @@ export class TableCollection<T = unknown> implements ITableCollection<T> {
|
|
|
194
197
|
private buildRows(
|
|
195
198
|
rows: RowDefinition<T>[] | T[],
|
|
196
199
|
getKey?: (item: T) => Key,
|
|
197
|
-
getTextValue?: (item: T, column: ColumnDefinition<T>) => string
|
|
200
|
+
getTextValue?: (item: T, column: ColumnDefinition<T>) => string,
|
|
198
201
|
): GridNode<T>[] {
|
|
199
202
|
const result: GridNode<T>[] = [];
|
|
200
203
|
const rowIndexOffset = this._headerRows.length;
|
|
@@ -203,24 +206,30 @@ export class TableCollection<T = unknown> implements ITableCollection<T> {
|
|
|
203
206
|
const row = rows[i];
|
|
204
207
|
const isRowDef = this.isRowDefinition(row);
|
|
205
208
|
|
|
206
|
-
const key = isRowDef ? row.key : getKey?.(row as T) ?? i;
|
|
209
|
+
const key = isRowDef ? row.key : (getKey?.(row as T) ?? i);
|
|
207
210
|
const value = isRowDef ? row.value : (row as T);
|
|
208
|
-
const textValue = isRowDef
|
|
211
|
+
const textValue = isRowDef
|
|
212
|
+
? row.textValue
|
|
213
|
+
: typeof (row as Record<string, unknown>)?.textValue === "string"
|
|
214
|
+
? ((row as Record<string, unknown>).textValue as string)
|
|
215
|
+
: undefined;
|
|
209
216
|
|
|
210
|
-
// Build cells for this row
|
|
211
217
|
const cells: GridNode<T>[] = this._columns.map((col, colIndex) => {
|
|
212
218
|
const cellKey = `${key}-${col.key}`;
|
|
219
|
+
const columnDefinition =
|
|
220
|
+
(col.props?.columnDefinition as ColumnDefinition<T> | undefined) ??
|
|
221
|
+
({ key: col.key } as ColumnDefinition<T>);
|
|
213
222
|
const cellTextValue =
|
|
214
|
-
col.key ===
|
|
215
|
-
?
|
|
223
|
+
col.key === "__selection__"
|
|
224
|
+
? "Selection"
|
|
216
225
|
: getTextValue
|
|
217
|
-
? getTextValue(value,
|
|
218
|
-
: String((value as Record<string, unknown>)?.[String(col.key)] ??
|
|
226
|
+
? getTextValue(value, columnDefinition)
|
|
227
|
+
: String((value as Record<string, unknown>)?.[String(col.key)] ?? "");
|
|
219
228
|
|
|
220
229
|
const cell: GridNode<T> = {
|
|
221
230
|
type: this._rowHeaderColumnKeys.has(col.key)
|
|
222
|
-
? (
|
|
223
|
-
: (
|
|
231
|
+
? ("rowheader" as GridNodeType)
|
|
232
|
+
: ("cell" as GridNodeType),
|
|
224
233
|
key: cellKey,
|
|
225
234
|
index: colIndex,
|
|
226
235
|
column: colIndex,
|
|
@@ -237,7 +246,7 @@ export class TableCollection<T = unknown> implements ITableCollection<T> {
|
|
|
237
246
|
});
|
|
238
247
|
|
|
239
248
|
const rowNode: GridNode<T> = {
|
|
240
|
-
type:
|
|
249
|
+
type: "item" as GridNodeType,
|
|
241
250
|
key,
|
|
242
251
|
index: i,
|
|
243
252
|
rowIndex: rowIndexOffset + i,
|
|
@@ -245,7 +254,7 @@ export class TableCollection<T = unknown> implements ITableCollection<T> {
|
|
|
245
254
|
hasChildNodes: true,
|
|
246
255
|
childNodes: cells,
|
|
247
256
|
value,
|
|
248
|
-
textValue: textValue ?? cells.map((c) => c.textValue).join(
|
|
257
|
+
textValue: textValue ?? cells.map((c) => c.textValue).join(" "),
|
|
249
258
|
};
|
|
250
259
|
|
|
251
260
|
this._keyMap.set(key, rowNode);
|
|
@@ -256,15 +265,9 @@ export class TableCollection<T = unknown> implements ITableCollection<T> {
|
|
|
256
265
|
}
|
|
257
266
|
|
|
258
267
|
private isRowDefinition(row: unknown): row is RowDefinition<T> {
|
|
259
|
-
return
|
|
260
|
-
typeof row === 'object' &&
|
|
261
|
-
row !== null &&
|
|
262
|
-
'key' in row &&
|
|
263
|
-
'value' in row
|
|
264
|
-
);
|
|
268
|
+
return typeof row === "object" && row !== null && "key" in row && "value" in row;
|
|
265
269
|
}
|
|
266
270
|
|
|
267
|
-
// Collection interface implementation
|
|
268
271
|
get size(): number {
|
|
269
272
|
return this._size;
|
|
270
273
|
}
|
|
@@ -324,7 +327,7 @@ export class TableCollection<T = unknown> implements ITableCollection<T> {
|
|
|
324
327
|
|
|
325
328
|
getTextValue(key: Key): string {
|
|
326
329
|
const node = this._keyMap.get(key);
|
|
327
|
-
return node?.textValue ??
|
|
330
|
+
return node?.textValue ?? "";
|
|
328
331
|
}
|
|
329
332
|
|
|
330
333
|
getCell(rowKey: Key, columnKey: Key): GridNode<T> | null {
|
|
@@ -333,13 +336,11 @@ export class TableCollection<T = unknown> implements ITableCollection<T> {
|
|
|
333
336
|
}
|
|
334
337
|
|
|
335
338
|
getFirstKey(): Key | null {
|
|
336
|
-
// Return first body row key
|
|
337
339
|
const bodyRows = this._body.childNodes;
|
|
338
340
|
return bodyRows.length > 0 ? bodyRows[0].key : null;
|
|
339
341
|
}
|
|
340
342
|
|
|
341
343
|
getLastKey(): Key | null {
|
|
342
|
-
// Return last body row key
|
|
343
344
|
const bodyRows = this._body.childNodes;
|
|
344
345
|
return bodyRows.length > 0 ? bodyRows[bodyRows.length - 1].key : null;
|
|
345
346
|
}
|
|
@@ -348,7 +349,6 @@ export class TableCollection<T = unknown> implements ITableCollection<T> {
|
|
|
348
349
|
const node = this._keyMap.get(key);
|
|
349
350
|
if (!node) return null;
|
|
350
351
|
|
|
351
|
-
// Find in body rows
|
|
352
352
|
const bodyRows = this._body.childNodes;
|
|
353
353
|
const index = bodyRows.findIndex((r) => r.key === key);
|
|
354
354
|
if (index > 0) {
|
|
@@ -361,7 +361,6 @@ export class TableCollection<T = unknown> implements ITableCollection<T> {
|
|
|
361
361
|
const node = this._keyMap.get(key);
|
|
362
362
|
if (!node) return null;
|
|
363
363
|
|
|
364
|
-
// Find in body rows
|
|
365
364
|
const bodyRows = this._body.childNodes;
|
|
366
365
|
const index = bodyRows.findIndex((r) => r.key === key);
|
|
367
366
|
if (index >= 0 && index < bodyRows.length - 1) {
|
|
@@ -381,8 +380,6 @@ export class TableCollection<T = unknown> implements ITableCollection<T> {
|
|
|
381
380
|
/**
|
|
382
381
|
* Creates a table collection from options.
|
|
383
382
|
*/
|
|
384
|
-
export function createTableCollection<T>(
|
|
385
|
-
options: TableCollectionOptions<T>
|
|
386
|
-
): TableCollection<T> {
|
|
383
|
+
export function createTableCollection<T>(options: TableCollectionOptions<T>): TableCollection<T> {
|
|
387
384
|
return new TableCollection(options);
|
|
388
385
|
}
|
|
@@ -0,0 +1,242 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Table column resize state management.
|
|
3
|
+
* Based on @react-stately/table/useTableColumnResizeState.
|
|
4
|
+
*
|
|
5
|
+
* Provides column width state management for a table with column resizing.
|
|
6
|
+
* Tracks column widths, the currently resizing column, and handles
|
|
7
|
+
* width distribution and clamping.
|
|
8
|
+
*/
|
|
9
|
+
|
|
10
|
+
import { createSignal, createMemo, type Accessor } from "solid-js";
|
|
11
|
+
import type { Key } from "../collections/types";
|
|
12
|
+
|
|
13
|
+
/** Column size: a number (px) or a string ('100px', '50%', '1fr'). */
|
|
14
|
+
export type ColumnSize = number | string;
|
|
15
|
+
|
|
16
|
+
export interface ColumnResizeDefinition {
|
|
17
|
+
/** The column key. */
|
|
18
|
+
key: Key;
|
|
19
|
+
/** The width of the column. Numbers are px, strings can be 'Xfr', 'Xpx', or 'X%'. */
|
|
20
|
+
width?: ColumnSize;
|
|
21
|
+
/** Minimum width in pixels. Default: 75. */
|
|
22
|
+
minWidth?: number;
|
|
23
|
+
/** Maximum width in pixels. Default: Infinity. */
|
|
24
|
+
maxWidth?: number;
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
export interface TableColumnResizeStateProps {
|
|
28
|
+
/** Current width of the table or table viewport. */
|
|
29
|
+
tableWidth: number;
|
|
30
|
+
/** Column definitions with width/min/max. */
|
|
31
|
+
columns: ColumnResizeDefinition[];
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
export interface TableColumnResizeState {
|
|
35
|
+
/** The key of the column currently being resized, or null. */
|
|
36
|
+
readonly resizingColumn: Accessor<Key | null>;
|
|
37
|
+
/** A reactive map of computed column widths in pixels. */
|
|
38
|
+
readonly columnWidths: Accessor<Map<Key, number>>;
|
|
39
|
+
/** Begin a resize operation for the given column. */
|
|
40
|
+
startResize(key: Key): void;
|
|
41
|
+
/** End the current resize operation. */
|
|
42
|
+
endResize(): void;
|
|
43
|
+
/** Update column widths during a resize drag. Returns the new widths map. */
|
|
44
|
+
updateResizedColumns(key: Key, width: number): Map<Key, number>;
|
|
45
|
+
/** Get the current computed width for a column. */
|
|
46
|
+
getColumnWidth(key: Key): number;
|
|
47
|
+
/** Get the minimum width for a column. */
|
|
48
|
+
getColumnMinWidth(key: Key): number;
|
|
49
|
+
/** Get the maximum width for a column. */
|
|
50
|
+
getColumnMaxWidth(key: Key): number;
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
const DEFAULT_MIN_WIDTH = 75;
|
|
54
|
+
const DEFAULT_MAX_WIDTH = Infinity;
|
|
55
|
+
|
|
56
|
+
interface ParsedColumn {
|
|
57
|
+
key: Key;
|
|
58
|
+
/** Fraction units (from 'Xfr' or unspecified width). 0 if fixed. */
|
|
59
|
+
fr: number;
|
|
60
|
+
/** Fixed pixel width, or 0 if fractional. */
|
|
61
|
+
fixedPx: number;
|
|
62
|
+
minWidth: number;
|
|
63
|
+
maxWidth: number;
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
function parseColumnDef(col: ColumnResizeDefinition, tableWidth: number): ParsedColumn {
|
|
67
|
+
const minWidth = col.minWidth ?? DEFAULT_MIN_WIDTH;
|
|
68
|
+
const maxWidth = col.maxWidth ?? DEFAULT_MAX_WIDTH;
|
|
69
|
+
|
|
70
|
+
if (col.width == null) {
|
|
71
|
+
// Default: 1fr
|
|
72
|
+
return { key: col.key, fr: 1, fixedPx: 0, minWidth, maxWidth };
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
if (typeof col.width === "number") {
|
|
76
|
+
return { key: col.key, fr: 0, fixedPx: col.width, minWidth, maxWidth };
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
const str = col.width.trim();
|
|
80
|
+
|
|
81
|
+
// Fractional: '2fr', '1.5fr'
|
|
82
|
+
if (str.endsWith("fr")) {
|
|
83
|
+
const val = parseFloat(str);
|
|
84
|
+
return { key: col.key, fr: isNaN(val) ? 1 : val, fixedPx: 0, minWidth, maxWidth };
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
// Percentage: '25%'
|
|
88
|
+
if (str.endsWith("%")) {
|
|
89
|
+
const pct = parseFloat(str);
|
|
90
|
+
const px = isNaN(pct) ? 0 : (pct / 100) * tableWidth;
|
|
91
|
+
return { key: col.key, fr: 0, fixedPx: px, minWidth, maxWidth };
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
// Pixel: '200px' or just a numeric string
|
|
95
|
+
const px = parseFloat(str);
|
|
96
|
+
return { key: col.key, fr: 0, fixedPx: isNaN(px) ? 0 : px, minWidth, maxWidth };
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
/**
|
|
100
|
+
* Distribute `tableWidth` among columns:
|
|
101
|
+
* 1. Fixed-width columns get their declared width (clamped to min/max).
|
|
102
|
+
* 2. Remaining space is distributed among fractional columns proportionally.
|
|
103
|
+
*/
|
|
104
|
+
function distributeWidths(columns: ColumnResizeDefinition[], tableWidth: number): Map<Key, number> {
|
|
105
|
+
const parsed = columns.map((c) => parseColumnDef(c, tableWidth));
|
|
106
|
+
|
|
107
|
+
// Pass 1 — allocate fixed columns
|
|
108
|
+
let usedSpace = 0;
|
|
109
|
+
let totalFr = 0;
|
|
110
|
+
for (const p of parsed) {
|
|
111
|
+
if (p.fr > 0) {
|
|
112
|
+
totalFr += p.fr;
|
|
113
|
+
} else {
|
|
114
|
+
const w = Math.max(p.minWidth, Math.min(p.maxWidth, p.fixedPx));
|
|
115
|
+
usedSpace += w;
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
const remainingSpace = Math.max(0, tableWidth - usedSpace);
|
|
120
|
+
const perFr = totalFr > 0 ? remainingSpace / totalFr : 0;
|
|
121
|
+
|
|
122
|
+
// Pass 2 — build map
|
|
123
|
+
const widths = new Map<Key, number>();
|
|
124
|
+
for (const p of parsed) {
|
|
125
|
+
let w: number;
|
|
126
|
+
if (p.fr > 0) {
|
|
127
|
+
w = p.fr * perFr;
|
|
128
|
+
} else {
|
|
129
|
+
w = p.fixedPx;
|
|
130
|
+
}
|
|
131
|
+
// Clamp
|
|
132
|
+
w = Math.max(p.minWidth, Math.min(p.maxWidth, w));
|
|
133
|
+
widths.set(p.key, Math.round(w));
|
|
134
|
+
}
|
|
135
|
+
|
|
136
|
+
return widths;
|
|
137
|
+
}
|
|
138
|
+
|
|
139
|
+
/**
|
|
140
|
+
* Creates column resize state for a table component.
|
|
141
|
+
*
|
|
142
|
+
* Builds an initial column width map from column definitions + table width,
|
|
143
|
+
* then tracks resize operations that clamp to min/max and redistribute
|
|
144
|
+
* remaining space among flex columns.
|
|
145
|
+
*/
|
|
146
|
+
export function createTableColumnResizeState(
|
|
147
|
+
props: Accessor<TableColumnResizeStateProps>,
|
|
148
|
+
): TableColumnResizeState {
|
|
149
|
+
const getProps = () => props();
|
|
150
|
+
|
|
151
|
+
// Memoize initial width distribution (re-distributes when table width or columns change)
|
|
152
|
+
const initialWidths = createMemo(() =>
|
|
153
|
+
distributeWidths(getProps().columns, getProps().tableWidth),
|
|
154
|
+
);
|
|
155
|
+
|
|
156
|
+
// User-overridden widths (set during/after resize)
|
|
157
|
+
const [overrides, setOverrides] = createSignal<Map<Key, number>>(new Map());
|
|
158
|
+
const [resizingColumn, setResizingColumn] = createSignal<Key | null>(null);
|
|
159
|
+
|
|
160
|
+
// Computed widths: initial merged with overrides
|
|
161
|
+
const columnWidths = createMemo(() => {
|
|
162
|
+
const base = initialWidths();
|
|
163
|
+
const over = overrides();
|
|
164
|
+
if (over.size === 0) return base;
|
|
165
|
+
|
|
166
|
+
const merged = new Map(base);
|
|
167
|
+
for (const [key, width] of over) {
|
|
168
|
+
if (merged.has(key)) {
|
|
169
|
+
merged.set(key, width);
|
|
170
|
+
}
|
|
171
|
+
}
|
|
172
|
+
return merged;
|
|
173
|
+
});
|
|
174
|
+
|
|
175
|
+
// Build min/max lookup
|
|
176
|
+
const minWidthMap = createMemo(() => {
|
|
177
|
+
const map = new Map<Key, number>();
|
|
178
|
+
for (const col of getProps().columns) {
|
|
179
|
+
map.set(col.key, col.minWidth ?? DEFAULT_MIN_WIDTH);
|
|
180
|
+
}
|
|
181
|
+
return map;
|
|
182
|
+
});
|
|
183
|
+
|
|
184
|
+
const maxWidthMap = createMemo(() => {
|
|
185
|
+
const map = new Map<Key, number>();
|
|
186
|
+
for (const col of getProps().columns) {
|
|
187
|
+
map.set(col.key, col.maxWidth ?? DEFAULT_MAX_WIDTH);
|
|
188
|
+
}
|
|
189
|
+
return map;
|
|
190
|
+
});
|
|
191
|
+
|
|
192
|
+
const getColumnWidth = (key: Key): number => {
|
|
193
|
+
return columnWidths().get(key) ?? 0;
|
|
194
|
+
};
|
|
195
|
+
|
|
196
|
+
const getColumnMinWidth = (key: Key): number => {
|
|
197
|
+
return minWidthMap().get(key) ?? DEFAULT_MIN_WIDTH;
|
|
198
|
+
};
|
|
199
|
+
|
|
200
|
+
const getColumnMaxWidth = (key: Key): number => {
|
|
201
|
+
return maxWidthMap().get(key) ?? DEFAULT_MAX_WIDTH;
|
|
202
|
+
};
|
|
203
|
+
|
|
204
|
+
const startResize = (key: Key) => {
|
|
205
|
+
setResizingColumn(key);
|
|
206
|
+
};
|
|
207
|
+
|
|
208
|
+
const endResize = () => {
|
|
209
|
+
setResizingColumn(null);
|
|
210
|
+
};
|
|
211
|
+
|
|
212
|
+
const updateResizedColumns = (key: Key, width: number): Map<Key, number> => {
|
|
213
|
+
const minW = getColumnMinWidth(key);
|
|
214
|
+
const maxW = getColumnMaxWidth(key);
|
|
215
|
+
const clampedWidth = Math.round(Math.max(minW, Math.min(maxW, width)));
|
|
216
|
+
|
|
217
|
+
const newOverrides = new Map(overrides());
|
|
218
|
+
newOverrides.set(key, clampedWidth);
|
|
219
|
+
setOverrides(newOverrides);
|
|
220
|
+
|
|
221
|
+
// Return the resulting widths
|
|
222
|
+
const base = initialWidths();
|
|
223
|
+
const merged = new Map(base);
|
|
224
|
+
for (const [k, w] of newOverrides) {
|
|
225
|
+
if (merged.has(k)) {
|
|
226
|
+
merged.set(k, w);
|
|
227
|
+
}
|
|
228
|
+
}
|
|
229
|
+
return merged;
|
|
230
|
+
};
|
|
231
|
+
|
|
232
|
+
return {
|
|
233
|
+
resizingColumn,
|
|
234
|
+
columnWidths,
|
|
235
|
+
startResize,
|
|
236
|
+
endResize,
|
|
237
|
+
updateResizedColumns,
|
|
238
|
+
getColumnWidth,
|
|
239
|
+
getColumnMinWidth,
|
|
240
|
+
getColumnMaxWidth,
|
|
241
|
+
};
|
|
242
|
+
}
|
|
@@ -2,11 +2,14 @@
|
|
|
2
2
|
* Table state management for Table components.
|
|
3
3
|
* Based on @react-stately/table/useTableState.
|
|
4
4
|
*/
|
|
5
|
-
import { type Accessor } from
|
|
6
|
-
import type { TableState, TableStateOptions, TableCollection } from
|
|
5
|
+
import { type Accessor } from "solid-js";
|
|
6
|
+
import type { TableState, TableStateOptions, TableCollection } from "./types";
|
|
7
7
|
/**
|
|
8
8
|
* Creates state management for a table component.
|
|
9
9
|
* Extends grid state with sorting and table-specific features.
|
|
10
10
|
*/
|
|
11
|
-
export declare function createTableState<
|
|
12
|
-
|
|
11
|
+
export declare function createTableState<
|
|
12
|
+
T extends object,
|
|
13
|
+
C extends TableCollection<T> = TableCollection<T>,
|
|
14
|
+
>(options: Accessor<TableStateOptions<T, C>>): TableState<T, C>;
|
|
15
|
+
//# sourceMappingURL=createTableState.d.ts.map
|
|
@@ -3,20 +3,20 @@
|
|
|
3
3
|
* Based on @react-stately/table/useTableState.
|
|
4
4
|
*/
|
|
5
5
|
|
|
6
|
-
import { createMemo, type Accessor } from
|
|
7
|
-
import { createGridState } from
|
|
8
|
-
import type { Key } from
|
|
6
|
+
import { createMemo, type Accessor } from "solid-js";
|
|
7
|
+
import { createGridState } from "../grid/createGridState";
|
|
8
|
+
import type { Key } from "../collections/types";
|
|
9
9
|
import type {
|
|
10
10
|
TableState,
|
|
11
11
|
TableStateOptions,
|
|
12
12
|
TableCollection,
|
|
13
13
|
SortDescriptor,
|
|
14
14
|
SortDirection,
|
|
15
|
-
} from
|
|
15
|
+
} from "./types";
|
|
16
16
|
|
|
17
17
|
const OPPOSITE_SORT_DIRECTION: Record<SortDirection, SortDirection> = {
|
|
18
|
-
ascending:
|
|
19
|
-
descending:
|
|
18
|
+
ascending: "descending",
|
|
19
|
+
descending: "ascending",
|
|
20
20
|
};
|
|
21
21
|
|
|
22
22
|
/**
|
|
@@ -66,7 +66,7 @@ export function createTableState<
|
|
|
66
66
|
newDirection = OPPOSITE_SORT_DIRECTION[currentSort.direction];
|
|
67
67
|
} else {
|
|
68
68
|
// Default to ascending for new column
|
|
69
|
-
newDirection =
|
|
69
|
+
newDirection = "ascending";
|
|
70
70
|
}
|
|
71
71
|
|
|
72
72
|
opts.onSortChange?.({
|
|
@@ -98,6 +98,9 @@ export function createTableState<
|
|
|
98
98
|
get selectionMode() {
|
|
99
99
|
return gridState.selectionMode;
|
|
100
100
|
},
|
|
101
|
+
get selectionBehavior() {
|
|
102
|
+
return gridState.selectionBehavior;
|
|
103
|
+
},
|
|
101
104
|
get selectedKeys() {
|
|
102
105
|
return gridState.selectedKeys;
|
|
103
106
|
},
|
package/src/table/index.d.ts
CHANGED
|
@@ -2,7 +2,17 @@
|
|
|
2
2
|
* Table state management module.
|
|
3
3
|
* Provides state hooks for Table components.
|
|
4
4
|
*/
|
|
5
|
-
export { createTableState } from
|
|
6
|
-
export { TableCollection, createTableCollection } from
|
|
7
|
-
export type {
|
|
8
|
-
|
|
5
|
+
export { createTableState } from "./createTableState";
|
|
6
|
+
export { TableCollection, createTableCollection } from "./TableCollection";
|
|
7
|
+
export type {
|
|
8
|
+
TableState,
|
|
9
|
+
TableStateOptions,
|
|
10
|
+
TableCollection as ITableCollection,
|
|
11
|
+
SortDescriptor,
|
|
12
|
+
SortDirection,
|
|
13
|
+
Sortable,
|
|
14
|
+
ColumnDefinition,
|
|
15
|
+
RowDefinition,
|
|
16
|
+
TableCollectionOptions,
|
|
17
|
+
} from "./types";
|
|
18
|
+
//# sourceMappingURL=index.d.ts.map
|
package/src/table/index.ts
CHANGED
|
@@ -3,8 +3,9 @@
|
|
|
3
3
|
* Provides state hooks for Table components.
|
|
4
4
|
*/
|
|
5
5
|
|
|
6
|
-
export { createTableState } from
|
|
7
|
-
export {
|
|
6
|
+
export { createTableState } from "./createTableState";
|
|
7
|
+
export { createTableColumnResizeState } from "./createTableColumnResizeState";
|
|
8
|
+
export { TableCollection, createTableCollection } from "./TableCollection";
|
|
8
9
|
export type {
|
|
9
10
|
TableState,
|
|
10
11
|
TableStateOptions,
|
|
@@ -15,4 +16,10 @@ export type {
|
|
|
15
16
|
ColumnDefinition,
|
|
16
17
|
RowDefinition,
|
|
17
18
|
TableCollectionOptions,
|
|
18
|
-
} from
|
|
19
|
+
} from "./types";
|
|
20
|
+
export type {
|
|
21
|
+
ColumnSize,
|
|
22
|
+
ColumnResizeDefinition,
|
|
23
|
+
TableColumnResizeStateProps,
|
|
24
|
+
TableColumnResizeState,
|
|
25
|
+
} from "./createTableColumnResizeState";
|