@react-fabric/data 1.0.0-beta.8 → 1.0.1
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/{src/histogram/Histogram.module.css → css/_histogram.css} +16 -13
- package/css/styles.css +24 -0
- package/dist/cjs/checklist/CheckList.js +59 -33
- package/dist/cjs/histogram/Histogram.js +41 -26
- package/dist/cjs/hooks/useFilteredList.js +100 -17
- package/dist/cjs/hooks/usePagination.js +29 -8
- package/dist/cjs/hooks/useSelectableList.js +30 -5
- package/dist/cjs/i18n/{ar.json.js → ar/data.json.js} +8 -1
- package/dist/cjs/i18n/{en.json.js → en/data.json.js} +8 -1
- package/dist/cjs/i18n/index.js +4 -4
- package/dist/cjs/index.js +30 -0
- package/dist/cjs/json/JsonViewer.js +80 -43
- package/dist/cjs/pagination/Pagination.js +24 -15
- package/dist/cjs/table/AddColumn.js +5 -5
- package/dist/cjs/table/BodyCell.js +20 -13
- package/dist/cjs/table/BodyRow.js +41 -28
- package/dist/cjs/table/CheckboxCell.js +10 -9
- package/dist/cjs/table/ColumnFilters.js +100 -0
- package/dist/cjs/table/EmptyCell.js +4 -4
- package/dist/cjs/table/HeaderCell.js +79 -53
- package/dist/cjs/table/HtmlTable.js +84 -0
- package/dist/cjs/table/{Context.js → Provider.js} +8 -10
- package/dist/cjs/table/Table.js +99 -33
- package/dist/cjs/{tree/types.js → table/context.js} +9 -5
- package/dist/cjs/table/types.js +29 -0
- package/dist/cjs/table/useResizer.js +10 -10
- package/dist/cjs/table/useTableColumns.js +4 -4
- package/dist/cjs/table/useVirtualTable.js +129 -22
- package/dist/cjs/tree/TreeNode.js +66 -46
- package/dist/cjs/tree/TreePanel.js +60 -24
- package/dist/cjs/tree/useTree.js +212 -47
- package/dist/cjs/tree/utils.js +63 -34
- package/dist/cjs/utils/getColor.js +58 -0
- package/dist/cjs/virtual/Gallery.js +119 -61
- package/dist/cjs/virtual/List.js +116 -55
- package/dist/cjs/virtual/Scroller.js +16 -8
- package/dist/esm/checklist/CheckList.js +61 -35
- package/dist/esm/histogram/Histogram.js +43 -28
- package/dist/esm/hooks/useFilteredList.js +101 -18
- package/dist/esm/hooks/usePagination.js +29 -8
- package/dist/esm/hooks/useSelectableList.js +30 -5
- package/dist/esm/i18n/{ar.json.js → ar/data.json.js} +8 -2
- package/dist/esm/i18n/{en.json.js → en/data.json.js} +8 -2
- package/dist/esm/i18n/index.js +2 -2
- package/dist/esm/index.js +31 -0
- package/dist/esm/json/JsonViewer.js +82 -45
- package/dist/esm/pagination/Pagination.js +25 -16
- package/dist/esm/table/AddColumn.js +6 -6
- package/dist/esm/table/BodyCell.js +21 -14
- package/dist/esm/table/BodyRow.js +41 -28
- package/dist/esm/table/CheckboxCell.js +11 -10
- package/dist/esm/table/ColumnFilters.js +100 -0
- package/dist/esm/table/EmptyCell.js +4 -4
- package/dist/esm/table/HeaderCell.js +80 -54
- package/dist/esm/table/HtmlTable.js +84 -0
- package/dist/esm/table/{Context.js → Provider.js} +11 -12
- package/dist/esm/table/Table.js +100 -34
- package/dist/esm/{tree/types.js → table/context.js} +8 -4
- package/dist/esm/table/types.js +29 -0
- package/dist/esm/table/useResizer.js +10 -10
- package/dist/esm/table/useTableColumns.js +4 -4
- package/dist/esm/table/useVirtualTable.js +131 -24
- package/dist/esm/tree/TreeNode.js +69 -49
- package/dist/esm/tree/TreePanel.js +62 -26
- package/dist/esm/tree/useTree.js +215 -50
- package/dist/esm/tree/utils.js +64 -35
- package/dist/esm/utils/getColor.js +58 -0
- package/dist/esm/virtual/Gallery.js +121 -63
- package/dist/esm/virtual/List.js +118 -57
- package/dist/esm/virtual/Scroller.js +17 -9
- package/dist/types/checklist/CheckList.d.ts +25 -6
- package/dist/types/histogram/Histogram.d.ts +28 -6
- package/dist/types/hooks/useFilteredList.d.ts +62 -5
- package/dist/types/hooks/usePagination.d.ts +18 -2
- package/dist/types/hooks/useSelectableList.d.ts +24 -1
- package/dist/types/index.d.ts +27 -0
- package/dist/types/json/JsonViewer.d.ts +23 -3
- package/dist/types/pagination/Pagination.d.ts +8 -2
- package/dist/types/table/AddColumn.d.ts +2 -2
- package/dist/types/table/BodyCell.d.ts +2 -2
- package/dist/types/table/BodyRow.d.ts +9 -9
- package/dist/types/table/CheckboxCell.d.ts +3 -3
- package/dist/types/table/ColumnFilters.d.ts +12 -0
- package/dist/types/table/EmptyCell.d.ts +1 -1
- package/dist/types/table/HeaderCell.d.ts +1 -1
- package/dist/types/table/HtmlTable.d.ts +21 -0
- package/dist/types/table/Provider.d.ts +2 -0
- package/dist/types/table/Table.d.ts +10 -1
- package/dist/types/table/context.d.ts +7 -0
- package/dist/types/table/types.d.ts +52 -10
- package/dist/types/table/useResizer.d.ts +1 -1
- package/dist/types/table/useTableColumns.d.ts +1 -1
- package/dist/types/table/useVirtualTable.d.ts +31 -12
- package/dist/types/tree/TreeNode.d.ts +1 -1
- package/dist/types/tree/TreePanel.d.ts +36 -1
- package/dist/types/tree/types.d.ts +75 -28
- package/dist/types/tree/useTree.d.ts +8 -12
- package/dist/types/tree/utils.d.ts +15 -8
- package/dist/types/utils/getColor.d.ts +43 -0
- package/dist/types/virtual/Gallery.d.ts +37 -6
- package/dist/types/virtual/List.d.ts +38 -6
- package/dist/types/virtual/Scroller.d.ts +1 -1
- package/package.json +17 -19
- package/src/checklist/CheckList.tsx +68 -71
- package/src/histogram/Histogram.tsx +47 -48
- package/src/hooks/useFilteredList.tsx +111 -28
- package/src/hooks/usePagination.tsx +39 -39
- package/src/hooks/useSelectableList.ts +45 -33
- package/src/i18n/{ar.json → ar/data.json} +5 -0
- package/src/i18n/{en.json → en/data.json} +5 -0
- package/src/i18n/index.ts +2 -2
- package/src/index.ts +23 -17
- package/src/json/JsonViewer.tsx +89 -120
- package/src/pagination/Pagination.tsx +104 -105
- package/src/table/AddColumn.tsx +6 -15
- package/src/table/BodyCell.tsx +27 -36
- package/src/table/BodyRow.tsx +36 -59
- package/src/table/CheckboxCell.tsx +12 -15
- package/src/table/ColumnFilters.tsx +93 -0
- package/src/table/EmptyCell.tsx +5 -18
- package/src/table/HeaderCell.tsx +72 -53
- package/src/table/HtmlTable.tsx +106 -0
- package/src/table/{Context.tsx → Provider.tsx} +11 -28
- package/src/table/Table.tsx +98 -83
- package/src/table/context.ts +33 -0
- package/src/table/types.ts +53 -27
- package/src/table/useResizer.ts +5 -9
- package/src/table/useTableColumns.ts +4 -6
- package/src/table/useVirtualTable.ts +136 -37
- package/src/tree/TreeNode.tsx +91 -86
- package/src/tree/TreePanel.tsx +87 -51
- package/src/tree/types.ts +85 -46
- package/src/tree/useTree.ts +210 -65
- package/src/tree/utils.ts +81 -62
- package/src/utils/getColor.ts +55 -0
- package/src/virtual/Gallery.tsx +129 -120
- package/src/virtual/List.tsx +124 -91
- package/src/virtual/Scroller.tsx +25 -9
- package/dist/cjs/histogram/Histogram.module.css +0 -1
- package/dist/esm/histogram/Histogram.module.css +0 -1
- package/dist/types/table/Context.d.ts +0 -8
package/dist/cjs/table/Table.js
CHANGED
|
@@ -8,33 +8,41 @@ var reactI18next = require('react-i18next');
|
|
|
8
8
|
var AddColumn = require('./AddColumn.js');
|
|
9
9
|
var BodyRow = require('./BodyRow.js');
|
|
10
10
|
var CheckboxCell = require('./CheckboxCell.js');
|
|
11
|
-
var Context = require('./Context.js');
|
|
12
11
|
var EmptyCell = require('./EmptyCell.js');
|
|
13
12
|
var HeaderCell = require('./HeaderCell.js');
|
|
13
|
+
var Provider = require('./Provider.js');
|
|
14
14
|
var useTableColumns = require('./useTableColumns.js');
|
|
15
15
|
var useVirtualTable = require('./useVirtualTable.js');
|
|
16
16
|
var jsxRuntime = require('react/jsx-runtime');
|
|
17
17
|
|
|
18
18
|
function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
|
|
19
|
-
function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t),
|
|
20
|
-
|
|
21
|
-
var _state$start, _state$cols, _state$end, _items
|
|
19
|
+
function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), true).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
|
|
20
|
+
function Table(_ref) {
|
|
21
|
+
var _state$start, _state$cols, _state$end, _items, _state$start2, _state$cols2, _state$end2;
|
|
22
22
|
var ref = _ref.ref,
|
|
23
23
|
data = _ref.data,
|
|
24
24
|
columns = _ref.columns,
|
|
25
|
-
keyProperty = _ref.keyProperty,
|
|
25
|
+
_ref$keyProperty = _ref.keyProperty,
|
|
26
|
+
keyProperty = _ref$keyProperty === void 0 ? "id" : _ref$keyProperty,
|
|
27
|
+
groupProperty = _ref.groupProperty,
|
|
26
28
|
checkableRows = _ref.checkableRows,
|
|
27
29
|
initialScroll = _ref.initialScroll,
|
|
28
30
|
hideableColumns = _ref.hideableColumns,
|
|
29
31
|
sort = _ref.sort,
|
|
30
32
|
loading = _ref.loading,
|
|
33
|
+
checked = _ref.checked,
|
|
31
34
|
emptyDisplay = _ref.emptyDisplay,
|
|
35
|
+
groupRenderer = _ref.groupRenderer,
|
|
32
36
|
canExpand = _ref.canExpand,
|
|
33
37
|
children = _ref.children,
|
|
34
38
|
onSort = _ref.onSort,
|
|
39
|
+
onFilter = _ref.onFilter,
|
|
35
40
|
onScroll = _ref.onScroll,
|
|
36
41
|
onRowClick = _ref.onRowClick,
|
|
37
|
-
onCheckedChanged = _ref.onCheckedChanged
|
|
42
|
+
onCheckedChanged = _ref.onCheckedChanged,
|
|
43
|
+
_ref$total = _ref.total,
|
|
44
|
+
total = _ref$total === void 0 ? 0 : _ref$total,
|
|
45
|
+
onLoadMore = _ref.onLoadMore;
|
|
38
46
|
var _useTranslation = reactI18next.useTranslation("data"),
|
|
39
47
|
t = _useTranslation.t;
|
|
40
48
|
var fireCheckChanged = core.useDebounce(function (checkedIds) {
|
|
@@ -43,19 +51,30 @@ var Table = function Table(_ref) {
|
|
|
43
51
|
var _useTableColumns = useTableColumns.useTableColumns(columns),
|
|
44
52
|
state = _useTableColumns.state,
|
|
45
53
|
onHide = _useTableColumns.onHide;
|
|
46
|
-
var _useVirtualTable = useVirtualTable.useVirtualTable(data,
|
|
54
|
+
var _useVirtualTable = useVirtualTable.useVirtualTable(data, {
|
|
55
|
+
checked: checked,
|
|
56
|
+
keyProperty: keyProperty,
|
|
57
|
+
groupProperty: groupProperty,
|
|
58
|
+
total: total,
|
|
59
|
+
loading: loading,
|
|
60
|
+
onLoadMore: onLoadMore,
|
|
61
|
+
onCheckChanged: fireCheckChanged
|
|
62
|
+
}),
|
|
47
63
|
scrollerRef = _useVirtualTable.scrollerRef,
|
|
48
64
|
items = _useVirtualTable.items,
|
|
49
65
|
top = _useVirtualTable.top,
|
|
50
66
|
checkState = _useVirtualTable.checkState,
|
|
51
67
|
virtualizer = _useVirtualTable.virtualizer,
|
|
68
|
+
hasActiveSticky = _useVirtualTable.hasActiveSticky,
|
|
52
69
|
toggleExpand = _useVirtualTable.toggleExpand,
|
|
53
70
|
toggleChecked = _useVirtualTable.toggleChecked,
|
|
54
71
|
toggleAllChecked = _useVirtualTable.toggleAllChecked,
|
|
72
|
+
toggleGroupExpand = _useVirtualTable.toggleGroupExpand,
|
|
55
73
|
getData = _useVirtualTable.getData,
|
|
56
74
|
totalSize = _useVirtualTable.totalSize,
|
|
75
|
+
isActiveSticky = _useVirtualTable.isActiveSticky,
|
|
57
76
|
measureElement = _useVirtualTable.measureElement;
|
|
58
|
-
var
|
|
77
|
+
var bodyRef = react.useRef(null);
|
|
59
78
|
var wrapperStart = react.useMemo(function () {
|
|
60
79
|
return "bg-inherit sticky start-0 flex flex-nowrap z-1";
|
|
61
80
|
}, []);
|
|
@@ -63,11 +82,15 @@ var Table = function Table(_ref) {
|
|
|
63
82
|
return "bg-inherit sticky end-0 flex flex-nowrap z-1 border-s -ms-px";
|
|
64
83
|
}, []);
|
|
65
84
|
react.useLayoutEffect(function () {
|
|
66
|
-
setTimeout(function () {
|
|
67
|
-
initialScroll
|
|
85
|
+
var tmr = setTimeout(function () {
|
|
86
|
+
if (initialScroll) virtualizer.scrollToIndex(initialScroll, {
|
|
68
87
|
align: "start"
|
|
69
88
|
});
|
|
70
89
|
}, 100);
|
|
90
|
+
return function () {
|
|
91
|
+
clearTimeout(tmr);
|
|
92
|
+
};
|
|
93
|
+
// eslint-disable-next-line @eslint-react/exhaustive-deps
|
|
71
94
|
}, []);
|
|
72
95
|
react.useImperativeHandle(ref, function () {
|
|
73
96
|
return {
|
|
@@ -92,7 +115,9 @@ var Table = function Table(_ref) {
|
|
|
92
115
|
(_scrollerRef$current3 = scrollerRef.current) === null || _scrollerRef$current3 === void 0 || (_scrollerRef$current3 = _scrollerRef$current3.querySelector(".hilight")) === null || _scrollerRef$current3 === void 0 || _scrollerRef$current3.classList.remove("hilight", "ring-1");
|
|
93
116
|
}
|
|
94
117
|
};
|
|
95
|
-
},
|
|
118
|
+
},
|
|
119
|
+
// eslint-disable-next-line @eslint-react/exhaustive-deps
|
|
120
|
+
[]);
|
|
96
121
|
react.useEffect(function () {
|
|
97
122
|
var handle = utilities.debounce(function (top) {
|
|
98
123
|
onScroll === null || onScroll === void 0 || onScroll(top !== null && top !== void 0 ? top : 0);
|
|
@@ -101,16 +126,18 @@ var Table = function Table(_ref) {
|
|
|
101
126
|
return function () {
|
|
102
127
|
handle.cancel();
|
|
103
128
|
};
|
|
104
|
-
}, [top]);
|
|
105
|
-
return /*#__PURE__*/jsxRuntime.jsx(
|
|
129
|
+
}, [onScroll, top]);
|
|
130
|
+
return /*#__PURE__*/jsxRuntime.jsx(Provider.TableProvider, {
|
|
106
131
|
children: /*#__PURE__*/jsxRuntime.jsxs("div", {
|
|
107
132
|
className: "grid area-content overflow-auto relative",
|
|
108
133
|
style: {
|
|
109
134
|
gridTemplate: "\"head\" auto \"loader\" auto \"content\" 1fr \"foot\" auto/1fr"
|
|
110
135
|
},
|
|
136
|
+
"data-ref": "tableScroller",
|
|
111
137
|
ref: scrollerRef,
|
|
112
138
|
children: [/*#__PURE__*/jsxRuntime.jsxs("div", {
|
|
113
|
-
|
|
139
|
+
"data-ref": "tableHeader",
|
|
140
|
+
className: "bg-default font-medium sticky top-0 h-8 area-head border-b select-none flex flex-nowrap z-3",
|
|
114
141
|
children: [/*#__PURE__*/jsxRuntime.jsxs("div", {
|
|
115
142
|
className: wrapperStart,
|
|
116
143
|
children: [canExpand && /*#__PURE__*/jsxRuntime.jsx("div", {
|
|
@@ -119,23 +146,38 @@ var Table = function Table(_ref) {
|
|
|
119
146
|
state: checkState.allChecked,
|
|
120
147
|
onClick: toggleAllChecked
|
|
121
148
|
}), (_state$start = state.start) === null || _state$start === void 0 ? void 0 : _state$start.map(function (col, idx) {
|
|
122
|
-
return
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
149
|
+
return (
|
|
150
|
+
/*#__PURE__*/
|
|
151
|
+
// eslint-disable-next-line @eslint-react/no-array-index-key
|
|
152
|
+
jsxRuntime.jsx(HeaderCell.HeaderCell, _objectSpread(_objectSpread({}, col), {}, {
|
|
153
|
+
sort: sort,
|
|
154
|
+
onSort: onSort,
|
|
155
|
+
onFilter: onFilter
|
|
156
|
+
}), idx)
|
|
157
|
+
);
|
|
126
158
|
})]
|
|
127
159
|
}), (_state$cols = state.cols) === null || _state$cols === void 0 ? void 0 : _state$cols.map(function (col, idx) {
|
|
128
|
-
return
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
160
|
+
return (
|
|
161
|
+
/*#__PURE__*/
|
|
162
|
+
// eslint-disable-next-line @eslint-react/no-array-index-key
|
|
163
|
+
jsxRuntime.jsx(HeaderCell.HeaderCell, _objectSpread(_objectSpread({}, col), {}, {
|
|
164
|
+
sort: sort,
|
|
165
|
+
onSort: onSort,
|
|
166
|
+
onFilter: onFilter
|
|
167
|
+
}), idx)
|
|
168
|
+
);
|
|
132
169
|
}), /*#__PURE__*/jsxRuntime.jsxs("div", {
|
|
133
170
|
className: wrapperEnd,
|
|
134
171
|
children: [(_state$end = state.end) === null || _state$end === void 0 ? void 0 : _state$end.map(function (col, idx) {
|
|
135
|
-
return
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
172
|
+
return (
|
|
173
|
+
/*#__PURE__*/
|
|
174
|
+
// eslint-disable-next-line @eslint-react/no-array-index-key
|
|
175
|
+
jsxRuntime.jsx(HeaderCell.HeaderCell, _objectSpread(_objectSpread({}, col), {}, {
|
|
176
|
+
sort: sort,
|
|
177
|
+
onSort: onSort,
|
|
178
|
+
onFilter: onFilter
|
|
179
|
+
}), idx)
|
|
180
|
+
);
|
|
139
181
|
}), hideableColumns && /*#__PURE__*/jsxRuntime.jsx(AddColumn.AddColumn, {
|
|
140
182
|
onClick: onHide,
|
|
141
183
|
columns: state.columns.filter(function (col) {
|
|
@@ -143,22 +185,46 @@ var Table = function Table(_ref) {
|
|
|
143
185
|
})
|
|
144
186
|
})]
|
|
145
187
|
})]
|
|
146
|
-
}), loading && /*#__PURE__*/jsxRuntime.jsx(core.
|
|
147
|
-
className: "area-content flex flex-col flex-nowrap",
|
|
188
|
+
}), loading && /*#__PURE__*/jsxRuntime.jsx(core.LoadingLine, {}), data.length > 0 && /*#__PURE__*/jsxRuntime.jsxs("div", {
|
|
189
|
+
className: "area-content flex flex-col flex-nowrap min-h-full",
|
|
148
190
|
style: {
|
|
149
191
|
height: totalSize()
|
|
150
192
|
},
|
|
151
|
-
ref:
|
|
193
|
+
ref: bodyRef,
|
|
152
194
|
children: [/*#__PURE__*/jsxRuntime.jsx("div", {
|
|
153
195
|
style: {
|
|
154
|
-
height: (_items
|
|
196
|
+
height: (_items = items[hasActiveSticky ? 1 : 0]) === null || _items === void 0 ? void 0 : _items.start
|
|
155
197
|
}
|
|
156
198
|
}), items.map(function (_ref2) {
|
|
199
|
+
var _groupRenderer;
|
|
157
200
|
var index = _ref2.index,
|
|
158
201
|
key = _ref2.key;
|
|
159
202
|
var data = getData(index);
|
|
160
|
-
return /*#__PURE__*/jsxRuntime.jsx(
|
|
161
|
-
|
|
203
|
+
return "__GROUP__" in data ? /*#__PURE__*/jsxRuntime.jsx("div", {
|
|
204
|
+
ref: measureElement,
|
|
205
|
+
"data-index": index,
|
|
206
|
+
className: utilities.cn("text-md bg-default border-y border-tint-100 border-t-0 cursor-pointer flex items-center justify-start gap-1 z-2", isActiveSticky(index) && "sticky top-8"),
|
|
207
|
+
role: "none",
|
|
208
|
+
onClick: function onClick() {
|
|
209
|
+
return toggleGroupExpand(data.key);
|
|
210
|
+
},
|
|
211
|
+
children: /*#__PURE__*/jsxRuntime.jsxs("div", {
|
|
212
|
+
className: utilities.cn("px-2 py-1 flex items-center gap-1 z-2 sticky inset-s-0"),
|
|
213
|
+
children: [/*#__PURE__*/jsxRuntime.jsx(core.Icon, {
|
|
214
|
+
rtlFlip: true,
|
|
215
|
+
icon: data.open ? "icon-[mdi--chevron-down]" : "icon-[mdi--chevron-right]"
|
|
216
|
+
}), (_groupRenderer = groupRenderer === null || groupRenderer === void 0 ? void 0 : groupRenderer(data)) !== null && _groupRenderer !== void 0 ? _groupRenderer : /*#__PURE__*/jsxRuntime.jsxs("div", {
|
|
217
|
+
className: "flex gap-1 items-center",
|
|
218
|
+
children: [/*#__PURE__*/jsxRuntime.jsx("span", {
|
|
219
|
+
children: data.key
|
|
220
|
+
}), /*#__PURE__*/jsxRuntime.jsxs("span", {
|
|
221
|
+
className: "text-sm",
|
|
222
|
+
children: ["(", data.itemCount, ")"]
|
|
223
|
+
})]
|
|
224
|
+
})]
|
|
225
|
+
})
|
|
226
|
+
}, key) : /*#__PURE__*/jsxRuntime.jsx(BodyRow.BodyRow, {
|
|
227
|
+
rowKey: key.toString(),
|
|
162
228
|
index: index,
|
|
163
229
|
checkableRows: checkableRows,
|
|
164
230
|
checked: keyProperty && checkState.checked.includes(data[keyProperty]) ? 1 : 0,
|
|
@@ -205,6 +271,6 @@ var Table = function Table(_ref) {
|
|
|
205
271
|
}))]
|
|
206
272
|
})
|
|
207
273
|
});
|
|
208
|
-
}
|
|
274
|
+
}
|
|
209
275
|
|
|
210
276
|
exports.Table = Table;
|
|
@@ -1,12 +1,14 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
+
var react = require('react');
|
|
4
|
+
|
|
3
5
|
/*
|
|
4
6
|
* React Fabric
|
|
5
7
|
* @version: 1.0.0
|
|
6
8
|
*
|
|
7
9
|
*
|
|
8
10
|
* The MIT License (MIT)
|
|
9
|
-
* Copyright (c)
|
|
11
|
+
* Copyright (c) 2026 Adarsh Pastakia
|
|
10
12
|
*
|
|
11
13
|
* Permission is hereby granted, free of charge, to any person obtaining a copy of this software
|
|
12
14
|
* and associated documentation files (the "Software"), to deal in the Software without restriction,
|
|
@@ -23,8 +25,10 @@
|
|
|
23
25
|
* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
|
24
26
|
*/
|
|
25
27
|
|
|
26
|
-
var
|
|
27
|
-
var
|
|
28
|
+
var TableContext = /*#__PURE__*/react.createContext({});
|
|
29
|
+
var useTableContext = function useTableContext() {
|
|
30
|
+
return react.use(TableContext);
|
|
31
|
+
};
|
|
28
32
|
|
|
29
|
-
exports.
|
|
30
|
-
exports.
|
|
33
|
+
exports.TableContext = TableContext;
|
|
34
|
+
exports.useTableContext = useTableContext;
|
package/dist/cjs/table/types.js
CHANGED
|
@@ -27,6 +27,35 @@ var COL_MIN_WIDTH = "3rem";
|
|
|
27
27
|
var COL_MAX_WIDTH = "64rem";
|
|
28
28
|
var COL_DEFAULT_WIDTH = "12rem";
|
|
29
29
|
|
|
30
|
+
/**
|
|
31
|
+
* TableColumn interface defines the structure of a column in a table.
|
|
32
|
+
* It includes properties for column identification, display options, alignment,
|
|
33
|
+
* visibility, resizing, sorting, filtering, and rendering.
|
|
34
|
+
*
|
|
35
|
+
* @template T - The type of data the column will represent, defaulting to KeyValue.
|
|
36
|
+
* @property {keyof T | string} id - Unique identifier for the column.
|
|
37
|
+
* @property {"string" | "number" | "boolean" | "datetime" | "date" | "time" | "unknown"} [dataType] - Data type of the column values.
|
|
38
|
+
* @property {string} [label] - Display label for the column header.
|
|
39
|
+
* @property {string} [tooltip] - Tooltip text for the column header.
|
|
40
|
+
* @property {string} [format] - Format string for displaying the column values.
|
|
41
|
+
* @property {"start" | "center" | "end"} [align] - Text alignment within the column.
|
|
42
|
+
* @property {"start" | "end"} [locked] - Indicates if the column is locked at the start or end.
|
|
43
|
+
* @property {boolean} [hidden] - Whether the column is hidden.
|
|
44
|
+
* @property {boolean} [truncate] - Whether to truncate the text in the column.
|
|
45
|
+
* @property {boolean} [hideable] - Whether the column can be hidden by the user.
|
|
46
|
+
* @property {boolean} [resizable] - Whether the column can be resized by the user.
|
|
47
|
+
* @property {boolean} [sortable] - Whether the column can be sorted.
|
|
48
|
+
* @property {boolean} [filterable] - Whether the column can be filtered.
|
|
49
|
+
* @property {AnyObject} [filter] - Filter criteria for the column.
|
|
50
|
+
* @property {ReactElement[]} [actions] - Array of action elements to be displayed in the column.
|
|
51
|
+
* @property {AnyObject[]} [filterOptions] - Options for filtering the column.
|
|
52
|
+
* @property {string | number} [width] - Width of the column.
|
|
53
|
+
* @property {string | number} [minWidth] - Minimum width of the column.
|
|
54
|
+
* @property {string | number} [maxWidth] - Maximum width of the column.
|
|
55
|
+
* @property {KeyValue} [valueMap] - Mapping of values for the column.
|
|
56
|
+
* @property {(value: AnyObject, data: T, index: number) => Elements<AnyObject>} [renderer] - Custom renderer function for the column values.
|
|
57
|
+
*/
|
|
58
|
+
|
|
30
59
|
exports.COL_DEFAULT_WIDTH = COL_DEFAULT_WIDTH;
|
|
31
60
|
exports.COL_MAX_WIDTH = COL_MAX_WIDTH;
|
|
32
61
|
exports.COL_MIN_WIDTH = COL_MIN_WIDTH;
|
|
@@ -23,7 +23,7 @@
|
|
|
23
23
|
* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
|
24
24
|
*/
|
|
25
25
|
|
|
26
|
-
|
|
26
|
+
function startResizer(colEl, ghostEl, callback) {
|
|
27
27
|
var placeholder = ghostEl.firstElementChild;
|
|
28
28
|
var isRtl = getComputedStyle(colEl).direction === "rtl";
|
|
29
29
|
var onResize = function onResize(evt) {
|
|
@@ -34,24 +34,24 @@ var useResizer = function useResizer(colEl, ghostEl, callback) {
|
|
|
34
34
|
};
|
|
35
35
|
|
|
36
36
|
/** ***************** dettach handlers on mouseup *******************/
|
|
37
|
-
var
|
|
37
|
+
var _onResizeEnd = function onResizeEnd() {
|
|
38
38
|
callback(placeholder.offsetWidth);
|
|
39
39
|
ghostEl.style.display = "none";
|
|
40
40
|
document.removeEventListener("mousemove", onResize);
|
|
41
|
-
document.removeEventListener("mouseup",
|
|
41
|
+
document.removeEventListener("mouseup", _onResizeEnd);
|
|
42
42
|
};
|
|
43
43
|
|
|
44
44
|
/** ***************** attach handlers *******************/
|
|
45
45
|
var box = colEl.getBoundingClientRect();
|
|
46
46
|
if (colEl.parentElement != null) {
|
|
47
|
-
var _colEl$
|
|
48
|
-
var parentBox = (_colEl$
|
|
47
|
+
var _colEl$closest;
|
|
48
|
+
var parentBox = (_colEl$closest = colEl.closest("[data-ref='tableScroller']")) === null || _colEl$closest === void 0 ? void 0 : _colEl$closest.getBoundingClientRect();
|
|
49
49
|
if (isRtl) {
|
|
50
50
|
placeholder.style.left = "unset";
|
|
51
|
-
placeholder.style.right = "".concat(
|
|
51
|
+
placeholder.style.right = "".concat(parentBox.width - box.right, "px");
|
|
52
52
|
} else {
|
|
53
53
|
placeholder.style.right = "unset";
|
|
54
|
-
placeholder.style.left = "".concat(box.left
|
|
54
|
+
placeholder.style.left = "".concat(box.left, "px");
|
|
55
55
|
}
|
|
56
56
|
}
|
|
57
57
|
placeholder.style.width = "".concat(colEl.offsetWidth, "px");
|
|
@@ -59,7 +59,7 @@ var useResizer = function useResizer(colEl, ghostEl, callback) {
|
|
|
59
59
|
placeholder.style.maxWidth = colEl.style.maxWidth || "75vw";
|
|
60
60
|
ghostEl.style.display = "block";
|
|
61
61
|
document.addEventListener("mousemove", onResize);
|
|
62
|
-
document.addEventListener("mouseup",
|
|
63
|
-
}
|
|
62
|
+
document.addEventListener("mouseup", _onResizeEnd);
|
|
63
|
+
}
|
|
64
64
|
|
|
65
|
-
exports.
|
|
65
|
+
exports.startResizer = startResizer;
|
|
@@ -6,8 +6,8 @@ var utilities = require('@react-fabric/utilities');
|
|
|
6
6
|
var react = require('react');
|
|
7
7
|
|
|
8
8
|
function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
|
|
9
|
-
function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t),
|
|
10
|
-
|
|
9
|
+
function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), true).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
|
|
10
|
+
function useTableColumns(columns) {
|
|
11
11
|
var _useReducer = react.useReducer(function (state, action) {
|
|
12
12
|
if (action.type === "columns") {
|
|
13
13
|
state.columns = action.columns;
|
|
@@ -16,7 +16,7 @@ var useTableColumns = function useTableColumns(columns) {
|
|
|
16
16
|
var col = state.columns.find(function (col) {
|
|
17
17
|
return col.id === action.id;
|
|
18
18
|
});
|
|
19
|
-
col
|
|
19
|
+
if (col) state.columns.splice(state.columns.indexOf(col), 1, _objectSpread(_objectSpread({}, col), {}, {
|
|
20
20
|
hidden: col.hidden !== true
|
|
21
21
|
}));
|
|
22
22
|
}
|
|
@@ -58,6 +58,6 @@ var useTableColumns = function useTableColumns(columns) {
|
|
|
58
58
|
});
|
|
59
59
|
}
|
|
60
60
|
};
|
|
61
|
-
}
|
|
61
|
+
}
|
|
62
62
|
|
|
63
63
|
exports.useTableColumns = useTableColumns;
|
|
@@ -1,49 +1,83 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
3
|
var _defineProperty = require('@babel/runtime/helpers/defineProperty');
|
|
4
|
+
var _toConsumableArray = require('@babel/runtime/helpers/toConsumableArray');
|
|
4
5
|
var _slicedToArray = require('@babel/runtime/helpers/slicedToArray');
|
|
6
|
+
var utilities = require('@react-fabric/utilities');
|
|
5
7
|
var reactVirtual = require('@tanstack/react-virtual');
|
|
6
8
|
var react = require('react');
|
|
7
9
|
|
|
8
10
|
function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
|
|
9
|
-
function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t),
|
|
10
|
-
|
|
11
|
+
function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), true).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
|
|
12
|
+
function useVirtualTable(data, options) {
|
|
11
13
|
var _virtualizer$range;
|
|
12
14
|
// TODO: refactor data into item list, apply grouping if groupColumn provided
|
|
13
15
|
// TODO: when grouping maintain map of group with children, {___GROUP___:true, label, items, open}
|
|
14
|
-
|
|
15
|
-
var scrollerRef = react.useRef(null);
|
|
16
|
-
var virtualizer = reactVirtual.useVirtualizer({
|
|
17
|
-
count: data.length,
|
|
18
|
-
getScrollElement: function getScrollElement() {
|
|
19
|
-
return scrollerRef.current;
|
|
20
|
-
},
|
|
21
|
-
estimateSize: function estimateSize() {
|
|
22
|
-
return 24;
|
|
23
|
-
}
|
|
24
|
-
});
|
|
25
16
|
var _useReducer = react.useReducer(function (state, action) {
|
|
17
|
+
if (action.type === "updateState") {
|
|
18
|
+
state.checked = action.checked;
|
|
19
|
+
}
|
|
26
20
|
if (action.type === "expand") {
|
|
27
21
|
if (state.expanded.includes(action.key)) state.expanded.splice(state.expanded.indexOf(action.key), 1);else state.expanded.push(action.key);
|
|
28
22
|
}
|
|
29
23
|
if (action.type === "check") {
|
|
24
|
+
var _options$onCheckChang;
|
|
30
25
|
if (state.checked.includes(action.key)) state.checked.splice(state.checked.indexOf(action.key), 1);else state.checked.push(action.key);
|
|
31
|
-
onCheckChanged === null ||
|
|
26
|
+
(_options$onCheckChang = options.onCheckChanged) === null || _options$onCheckChang === void 0 || _options$onCheckChang.call(options, state.checked);
|
|
32
27
|
}
|
|
33
28
|
if (action.type === "checkall") {
|
|
29
|
+
var _options$onCheckChang2;
|
|
34
30
|
if (state.allChecked !== 0) {
|
|
35
31
|
state.checked = [];
|
|
36
|
-
} else if (keyProperty) {
|
|
37
|
-
state.checked = data.map(function (item) {
|
|
38
|
-
return item[keyProperty];
|
|
32
|
+
} else if (options.keyProperty) {
|
|
33
|
+
state.checked = state.data.map(function (item) {
|
|
34
|
+
return item[options.keyProperty];
|
|
35
|
+
});
|
|
36
|
+
}
|
|
37
|
+
(_options$onCheckChang2 = options.onCheckChanged) === null || _options$onCheckChang2 === void 0 || _options$onCheckChang2.call(options, state.checked);
|
|
38
|
+
}
|
|
39
|
+
var checkList = state.data.filter(function (hit) {
|
|
40
|
+
return state.checked.includes(hit[options.keyProperty]);
|
|
41
|
+
});
|
|
42
|
+
if (action.type === "groupExpand") {
|
|
43
|
+
var group = state.groups.find(function (group) {
|
|
44
|
+
return group.key === action.key;
|
|
45
|
+
});
|
|
46
|
+
if (group) {
|
|
47
|
+
group.open = !group.open;
|
|
48
|
+
state.groups = state.groups.slice();
|
|
49
|
+
state.items = state.groups.map(function (group) {
|
|
50
|
+
return [group, group.open ? state.grouped[group.key] : undefined];
|
|
51
|
+
}).flat(2).filter(Boolean);
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
if (action.type === "reset") {
|
|
55
|
+
state.data = action.data;
|
|
56
|
+
if (action.key) {
|
|
57
|
+
state.grouped = utilities.groupBy(state.data, action.key);
|
|
58
|
+
state.groups = Object.keys(state.grouped).sort(utilities.compareValues("asc")).map(function (group) {
|
|
59
|
+
return {
|
|
60
|
+
__GROUP__: true,
|
|
61
|
+
open: true,
|
|
62
|
+
key: group,
|
|
63
|
+
itemCount: state.grouped[group].length
|
|
64
|
+
};
|
|
39
65
|
});
|
|
66
|
+
state.items = state.groups.map(function (group) {
|
|
67
|
+
return [group].concat(_toConsumableArray(state.grouped[group.key]));
|
|
68
|
+
}).flat();
|
|
69
|
+
} else {
|
|
70
|
+
state.items = state.data;
|
|
40
71
|
}
|
|
41
|
-
onCheckChanged === null || onCheckChanged === void 0 || onCheckChanged(state.checked);
|
|
42
72
|
}
|
|
43
73
|
return _objectSpread(_objectSpread({}, state), {}, {
|
|
44
|
-
allChecked:
|
|
74
|
+
allChecked: checkList.length === state.data.length ? 1 : state.checked.length ? 2 : 0
|
|
45
75
|
});
|
|
46
76
|
}, {
|
|
77
|
+
data: data,
|
|
78
|
+
items: [],
|
|
79
|
+
grouped: {},
|
|
80
|
+
groups: [],
|
|
47
81
|
checked: [],
|
|
48
82
|
expanded: [],
|
|
49
83
|
allChecked: 0
|
|
@@ -51,19 +85,92 @@ var useVirtualTable = function useVirtualTable(data, keyProperty, onCheckChanged
|
|
|
51
85
|
_useReducer2 = _slicedToArray(_useReducer, 2),
|
|
52
86
|
state = _useReducer2[0],
|
|
53
87
|
dispatch = _useReducer2[1];
|
|
88
|
+
var activeStickyIndexRef = react.useRef(0);
|
|
89
|
+
var stickyIndexes = react.useMemo(function () {
|
|
90
|
+
return state.items.map(function (hit, idx) {
|
|
91
|
+
return "__GROUP__" in hit ? idx : undefined;
|
|
92
|
+
}).filter(Boolean);
|
|
93
|
+
}, [state.items]);
|
|
94
|
+
var isActiveSticky = function isActiveSticky(index) {
|
|
95
|
+
return activeStickyIndexRef.current === index;
|
|
96
|
+
};
|
|
97
|
+
var _useState = react.useState(false),
|
|
98
|
+
_useState2 = _slicedToArray(_useState, 2),
|
|
99
|
+
hasActiveSticky = _useState2[0],
|
|
100
|
+
setHasActiveSticky = _useState2[1];
|
|
101
|
+
var scrollerRef = react.useRef(null);
|
|
102
|
+
var virtualizer = reactVirtual.useVirtualizer({
|
|
103
|
+
count: state.items.length,
|
|
104
|
+
getScrollElement: function getScrollElement() {
|
|
105
|
+
return scrollerRef.current;
|
|
106
|
+
},
|
|
107
|
+
estimateSize: function estimateSize() {
|
|
108
|
+
return 32;
|
|
109
|
+
},
|
|
110
|
+
rangeExtractor: react.useCallback(function (range) {
|
|
111
|
+
var _reverse$find;
|
|
112
|
+
activeStickyIndexRef.current = (_reverse$find = _toConsumableArray(stickyIndexes).reverse().find(function (index) {
|
|
113
|
+
return range.startIndex > index;
|
|
114
|
+
})) !== null && _reverse$find !== void 0 ? _reverse$find : 0;
|
|
115
|
+
setHasActiveSticky(range.startIndex !== activeStickyIndexRef.current);
|
|
116
|
+
var next = new Set([activeStickyIndexRef.current].concat(_toConsumableArray(reactVirtual.defaultRangeExtractor(range))));
|
|
117
|
+
return _toConsumableArray(next);
|
|
118
|
+
}, [stickyIndexes])
|
|
119
|
+
});
|
|
54
120
|
var virtualItems = virtualizer.getVirtualItems();
|
|
55
121
|
var getData = react.useCallback(function (index) {
|
|
56
|
-
return
|
|
57
|
-
}, [
|
|
122
|
+
return state.items[index];
|
|
123
|
+
}, [state.items]);
|
|
124
|
+
react.useEffect(function () {
|
|
125
|
+
dispatch({
|
|
126
|
+
type: "reset",
|
|
127
|
+
key: options.groupProperty,
|
|
128
|
+
data: data
|
|
129
|
+
});
|
|
130
|
+
}, [data, options.groupProperty]);
|
|
131
|
+
react.useEffect(function () {
|
|
132
|
+
var _options$checked;
|
|
133
|
+
dispatch({
|
|
134
|
+
type: "updateState",
|
|
135
|
+
checked: (_options$checked = options.checked) !== null && _options$checked !== void 0 ? _options$checked : []
|
|
136
|
+
});
|
|
137
|
+
}, [options.checked]);
|
|
138
|
+
react.useEffect(function () {
|
|
139
|
+
if (options.onLoadMore) {
|
|
140
|
+
var _virtualItems$, _virtualItems$slice$p;
|
|
141
|
+
var firstItem = (_virtualItems$ = virtualItems[0]) === null || _virtualItems$ === void 0 ? void 0 : _virtualItems$.index;
|
|
142
|
+
var lastItem = virtualItems === null || virtualItems === void 0 || (_virtualItems$slice$p = virtualItems.slice(-1).pop()) === null || _virtualItems$slice$p === void 0 ? void 0 : _virtualItems$slice$p.index;
|
|
143
|
+
var canLoadPrevPage = firstItem !== undefined && state.items[firstItem] === null;
|
|
144
|
+
var canLoadNextPage = lastItem !== undefined && lastItem === state.items.length - 1 && state.items.length < options.total;
|
|
145
|
+
var db = utilities.debounce(options.onLoadMore);
|
|
146
|
+
if (canLoadPrevPage) {
|
|
147
|
+
db(firstItem);
|
|
148
|
+
} else if (!options.loading && canLoadNextPage) {
|
|
149
|
+
db(lastItem + 1);
|
|
150
|
+
}
|
|
151
|
+
return function () {
|
|
152
|
+
return db.cancel();
|
|
153
|
+
};
|
|
154
|
+
}
|
|
155
|
+
// eslint-disable-next-line @eslint-react/exhaustive-deps
|
|
156
|
+
}, [options.onLoadMore, virtualItems]);
|
|
58
157
|
return {
|
|
59
158
|
scrollerRef: scrollerRef,
|
|
60
159
|
items: virtualItems,
|
|
61
160
|
checkState: state,
|
|
62
161
|
getData: getData,
|
|
63
162
|
virtualizer: virtualizer,
|
|
163
|
+
hasActiveSticky: hasActiveSticky,
|
|
164
|
+
isActiveSticky: isActiveSticky,
|
|
64
165
|
top: (_virtualizer$range = virtualizer.range) === null || _virtualizer$range === void 0 ? void 0 : _virtualizer$range.startIndex,
|
|
65
166
|
totalSize: virtualizer.getTotalSize,
|
|
66
167
|
measureElement: virtualizer.measureElement,
|
|
168
|
+
toggleGroupExpand: function toggleGroupExpand(key) {
|
|
169
|
+
return dispatch({
|
|
170
|
+
type: "groupExpand",
|
|
171
|
+
key: key
|
|
172
|
+
});
|
|
173
|
+
},
|
|
67
174
|
toggleExpand: function toggleExpand(key) {
|
|
68
175
|
return dispatch({
|
|
69
176
|
type: "expand",
|
|
@@ -82,6 +189,6 @@ var useVirtualTable = function useVirtualTable(data, keyProperty, onCheckChanged
|
|
|
82
189
|
});
|
|
83
190
|
}
|
|
84
191
|
};
|
|
85
|
-
}
|
|
192
|
+
}
|
|
86
193
|
|
|
87
194
|
exports.useVirtualTable = useVirtualTable;
|