@semcore/data-table 16.0.0-prerelease.17 → 16.0.0-prerelease.19

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 (64) hide show
  1. package/CHANGELOG.md +6 -0
  2. package/lib/cjs/components/Body/Body.js +281 -56
  3. package/lib/cjs/components/Body/Body.js.map +1 -1
  4. package/lib/cjs/components/Body/Body.types.js.map +1 -1
  5. package/lib/cjs/components/Body/Cell.js +57 -37
  6. package/lib/cjs/components/Body/Cell.js.map +1 -1
  7. package/lib/cjs/components/Body/Cell.types.js.map +1 -1
  8. package/lib/cjs/components/Body/Row.js +50 -35
  9. package/lib/cjs/components/Body/Row.js.map +1 -1
  10. package/lib/cjs/components/Body/Row.types.js.map +1 -1
  11. package/lib/cjs/components/Body/style.shadow.css +12 -0
  12. package/lib/cjs/components/DataTable/DataTable.js +220 -110
  13. package/lib/cjs/components/DataTable/DataTable.js.map +1 -1
  14. package/lib/cjs/components/DataTable/DataTable.types.js.map +1 -1
  15. package/lib/cjs/components/DataTable/dataTable.shadow.css +4 -0
  16. package/lib/cjs/components/Head/Column.types.js.map +1 -1
  17. package/lib/cjs/components/Head/Group.js +28 -6
  18. package/lib/cjs/components/Head/Group.js.map +1 -1
  19. package/lib/cjs/components/Head/Group.type.js.map +1 -1
  20. package/lib/cjs/components/Head/Head.js +23 -3
  21. package/lib/cjs/components/Head/Head.js.map +1 -1
  22. package/lib/cjs/components/Head/Head.types.js.map +1 -1
  23. package/lib/cjs/style/scroll-shadows.shadow.css +17 -0
  24. package/lib/es6/components/Body/Body.js +282 -57
  25. package/lib/es6/components/Body/Body.js.map +1 -1
  26. package/lib/es6/components/Body/Body.types.js.map +1 -1
  27. package/lib/es6/components/Body/Cell.js +57 -37
  28. package/lib/es6/components/Body/Cell.js.map +1 -1
  29. package/lib/es6/components/Body/Cell.types.js.map +1 -1
  30. package/lib/es6/components/Body/Row.js +50 -35
  31. package/lib/es6/components/Body/Row.js.map +1 -1
  32. package/lib/es6/components/Body/Row.types.js +1 -1
  33. package/lib/es6/components/Body/Row.types.js.map +1 -1
  34. package/lib/es6/components/Body/style.shadow.css +12 -0
  35. package/lib/es6/components/DataTable/DataTable.js +218 -109
  36. package/lib/es6/components/DataTable/DataTable.js.map +1 -1
  37. package/lib/es6/components/DataTable/DataTable.types.js +0 -5
  38. package/lib/es6/components/DataTable/DataTable.types.js.map +1 -1
  39. package/lib/es6/components/DataTable/dataTable.shadow.css +4 -0
  40. package/lib/es6/components/Head/Column.types.js.map +1 -1
  41. package/lib/es6/components/Head/Group.js +28 -6
  42. package/lib/es6/components/Head/Group.js.map +1 -1
  43. package/lib/es6/components/Head/Group.type.js.map +1 -1
  44. package/lib/es6/components/Head/Head.js +23 -3
  45. package/lib/es6/components/Head/Head.js.map +1 -1
  46. package/lib/es6/components/Head/Head.types.js.map +1 -1
  47. package/lib/es6/style/scroll-shadows.shadow.css +17 -0
  48. package/lib/esm/components/Body/Body.mjs +266 -55
  49. package/lib/esm/components/Body/Cell.mjs +50 -32
  50. package/lib/esm/components/Body/Row.mjs +47 -34
  51. package/lib/esm/components/DataTable/DataTable.mjs +205 -108
  52. package/lib/esm/components/Head/Group.mjs +24 -6
  53. package/lib/esm/components/Head/Head.mjs +21 -3
  54. package/lib/types/components/Body/Body.types.d.ts +13 -8
  55. package/lib/types/components/Body/Cell.types.d.ts +3 -0
  56. package/lib/types/components/Body/Row.types.d.ts +5 -2
  57. package/lib/types/components/DataTable/DataTable.d.ts +2 -1
  58. package/lib/types/components/DataTable/DataTable.types.d.ts +39 -2
  59. package/lib/types/components/Head/Column.types.d.ts +4 -3
  60. package/lib/types/components/Head/Group.d.ts +5 -1
  61. package/lib/types/components/Head/Group.type.d.ts +3 -1
  62. package/lib/types/components/Head/Head.d.ts +91 -4
  63. package/lib/types/components/Head/Head.types.d.ts +1 -0
  64. package/package.json +8 -7
@@ -1,5 +1,5 @@
1
- import _objectSpread from "@babel/runtime/helpers/objectSpread2";
2
1
  import _slicedToArray from "@babel/runtime/helpers/slicedToArray";
2
+ import _objectSpread from "@babel/runtime/helpers/objectSpread2";
3
3
  import _toConsumableArray from "@babel/runtime/helpers/toConsumableArray";
4
4
  import _classCallCheck from "@babel/runtime/helpers/classCallCheck";
5
5
  import _createClass from "@babel/runtime/helpers/createClass";
@@ -16,12 +16,14 @@ import { Box, ScrollArea } from '@semcore/base-components';
16
16
  import { Head } from '../Head/Head';
17
17
  import { Body } from '../Body/Body';
18
18
  /*__reshadow-styles__:"./dataTable.shadow.css"*/
19
- var style = ( /*__reshadow_css_start__*/_sstyled.insert( /*__inner_css_start__*/".___SDataTable_1yoby_gg_{display:grid;position:relative;align-items:start;min-width:-moz-fit-content;min-width:fit-content}.___SDataTable_1yoby_gg_.__gridTemplateColumns_1yoby_gg_{grid-template-columns:var(--gridTemplateColumns_1yoby)}.___SDataTable_1yoby_gg_.__gridTemplateAreas_1yoby_gg_{grid-template-areas:var(--gridTemplateAreas_1yoby)}" /*__inner_css_end__*/, "1yoby_gg_") /*__reshadow_css_end__*/, {
20
- "__SDataTable": "___SDataTable_1yoby_gg_",
21
- "_gridTemplateColumns": "__gridTemplateColumns_1yoby_gg_",
22
- "--gridTemplateColumns": "--gridTemplateColumns_1yoby",
23
- "_gridTemplateAreas": "__gridTemplateAreas_1yoby_gg_",
24
- "--gridTemplateAreas": "--gridTemplateAreas_1yoby"
19
+ var style = ( /*__reshadow_css_start__*/_sstyled.insert( /*__inner_css_start__*/".___SDataTable_1rvtk_gg_{display:grid;position:relative;align-items:start;min-width:-moz-fit-content;min-width:fit-content}.___SDataTable_1rvtk_gg_.__gridTemplateColumns_1rvtk_gg_{grid-template-columns:var(--gridTemplateColumns_1rvtk)}.___SDataTable_1rvtk_gg_.__gridTemplateAreas_1rvtk_gg_{grid-template-areas:var(--gridTemplateAreas_1rvtk)}.___SDataTable_1rvtk_gg_.__gridTemplateRows_1rvtk_gg_{grid-template-rows:var(--gridTemplateRows_1rvtk)}" /*__inner_css_end__*/, "1rvtk_gg_") /*__reshadow_css_end__*/, {
20
+ "__SDataTable": "___SDataTable_1rvtk_gg_",
21
+ "_gridTemplateColumns": "__gridTemplateColumns_1rvtk_gg_",
22
+ "--gridTemplateColumns": "--gridTemplateColumns_1rvtk",
23
+ "_gridTemplateAreas": "__gridTemplateAreas_1rvtk_gg_",
24
+ "--gridTemplateAreas": "--gridTemplateAreas_1rvtk",
25
+ "_gridTemplateRows": "__gridTemplateRows_1rvtk_gg_",
26
+ "--gridTemplateRows": "--gridTemplateRows_1rvtk"
25
27
  });
26
28
  import { isFocusInside, hasFocusableIn } from '@semcore/core/lib/utils/use/useFocusLock';
27
29
  import { getScrollOffsetValue } from '../../utils';
@@ -29,17 +31,22 @@ import findComponent from '@semcore/core/lib/utils/findComponent';
29
31
  import { localizedMessages } from '../../translations/__intergalactic-dynamic-locales';
30
32
  import i18nEnhance from '@semcore/core/lib/utils/enhances/i18nEnhance';
31
33
  import uniqueIDEnhancement from '@semcore/core/lib/utils/uniqueID';
32
- import { MergedColumnsCell, MergedRowsCell } from '../Body/MergedCells';
33
34
  import { forkRef } from '@semcore/core/lib/utils/ref';
34
35
  /*__reshadow-styles__:"../../style/scroll-shadows.shadow.css"*/
35
- var scrollStyles = ( /*__reshadow_css_start__*/_sstyled2.insert( /*__inner_css_start__*/".___SScrollArea_14dz4_gg_{width:-moz-fit-content;width:fit-content}.___SScrollArea_14dz4_gg_ .___SShadowVertical_14dz4_gg_:before{display:none}.___SScrollArea_14dz4_gg_ .___SShadowHorizontal_14dz4_gg_:after,.___SScrollArea_14dz4_gg_ .___SShadowHorizontal_14dz4_gg_:before,.___SScrollArea_14dz4_gg_ .___SShadowVertical_14dz4_gg_:after{z-index:2}" /*__inner_css_end__*/, "14dz4_gg_") /*__reshadow_css_end__*/, {
36
- "__SScrollArea": "___SScrollArea_14dz4_gg_",
37
- "__SShadowVertical": "___SShadowVertical_14dz4_gg_",
38
- "__SShadowHorizontal": "___SShadowHorizontal_14dz4_gg_"
36
+ var scrollStyles = ( /*__reshadow_css_start__*/_sstyled2.insert( /*__inner_css_start__*/".___SScrollArea_dn57w_gg_{width:-moz-fit-content;width:fit-content}.___SScrollArea_dn57w_gg_ .___SContainer_dn57w_gg_{overflow:visible;overflow:initial}.___SScrollArea_dn57w_gg_ .___SContainer_dn57w_gg_._scrollDirection_both_dn57w_gg_{overflow:auto}.___SScrollArea_dn57w_gg_ .___SContainer_dn57w_gg_._scrollDirection_horizontal_dn57w_gg_{overflow-x:auto;overflow-y:initial}.___SScrollArea_dn57w_gg_ .___SContainer_dn57w_gg_._scrollDirection_vertical_dn57w_gg_{overflow-x:initial;overflow-y:auto}.___SScrollArea_dn57w_gg_ .___SShadowVertical_dn57w_gg_:before{display:none}.___SScrollArea_dn57w_gg_ .___SShadowHorizontal_dn57w_gg_:after,.___SScrollArea_dn57w_gg_ .___SShadowHorizontal_dn57w_gg_:before,.___SScrollArea_dn57w_gg_ .___SShadowVertical_dn57w_gg_:after{z-index:2}" /*__inner_css_end__*/, "dn57w_gg_") /*__reshadow_css_end__*/, {
37
+ "__SScrollArea": "___SScrollArea_dn57w_gg_",
38
+ "__SContainer": "___SContainer_dn57w_gg_",
39
+ "_scrollDirection_both": "_scrollDirection_both_dn57w_gg_",
40
+ "_scrollDirection_horizontal": "_scrollDirection_horizontal_dn57w_gg_",
41
+ "_scrollDirection_vertical": "_scrollDirection_vertical_dn57w_gg_",
42
+ "__SShadowVertical": "___SShadowVertical_dn57w_gg_",
43
+ "__SShadowHorizontal": "___SShadowHorizontal_dn57w_gg_"
39
44
  });
40
45
  import { hasParent } from '@semcore/core/lib/utils/hasParent';
46
+ import trottle from '@semcore/core/lib/utils/rafTrottle';
41
47
  export var ACCORDION = Symbol('accordion');
42
48
  export var ROW_GROUP = Symbol('ROW_GROUP');
49
+ export var UNIQ_ROW_KEY = Symbol('UNIQ_ROW_KEY');
43
50
  var SCROLL_BAR_HEIGHT = 12;
44
51
  var DataTableRoot = /*#__PURE__*/function (_Component) {
45
52
  _inherits(DataTableRoot, _Component);
@@ -48,14 +55,19 @@ var DataTableRoot = /*#__PURE__*/function (_Component) {
48
55
  var _this;
49
56
  _classCallCheck(this, DataTableRoot);
50
57
  _this = _super.call(this, props);
51
- _defineProperty(_assertThisInitialized(_this), "columnsSplitter", '/');
52
58
  _defineProperty(_assertThisInitialized(_this), "columns", []);
59
+ _defineProperty(_assertThisInitialized(_this), "treeColumns", []);
60
+ _defineProperty(_assertThisInitialized(_this), "hasGroups", false);
53
61
  _defineProperty(_assertThisInitialized(_this), "focusedCell", [-1, -1]);
54
62
  _defineProperty(_assertThisInitialized(_this), "tableContainerRef", /*#__PURE__*/React.createRef());
55
63
  _defineProperty(_assertThisInitialized(_this), "tableRef", /*#__PURE__*/React.createRef());
56
64
  _defineProperty(_assertThisInitialized(_this), "headerRef", /*#__PURE__*/React.createRef());
57
65
  _defineProperty(_assertThisInitialized(_this), "spinnerRef", /*#__PURE__*/React.createRef());
58
66
  _defineProperty(_assertThisInitialized(_this), "gridAreaGroupMap", new Map());
67
+ _defineProperty(_assertThisInitialized(_this), "state", {
68
+ scrollTop: 0,
69
+ scrollDirection: 'down'
70
+ });
59
71
  _defineProperty(_assertThisInitialized(_this), "getRow", function (index) {
60
72
  var _this$tableRef$curren;
61
73
  return (_this$tableRef$curren = _this.tableRef.current) === null || _this$tableRef$curren === void 0 ? void 0 : _this$tableRef$curren.querySelector("[aria-rowindex=\"".concat(index + 1, "\"]"));
@@ -120,21 +132,24 @@ var DataTableRoot = /*#__PURE__*/function (_Component) {
120
132
  var rowI = rowIndex;
121
133
  var colI = colIndex;
122
134
  if (direction === 'left' || direction === 'right') {
135
+ var _currentCell$parentEl;
123
136
  // left/right
124
- if (currentCell.dataset.groupedBy === 'columns') {
137
+ if (currentCell.dataset.groupedBy === 'colgroup' || Number((_currentCell$parentEl = currentCell.parentElement) === null || _currentCell$parentEl === void 0 ? void 0 : _currentCell$parentEl.getAttribute('aria-rowindex')) === 2) {
125
138
  colI = direction === 'left' ? colI - 1 : colI + 1;
126
139
  } else {
127
140
  rowI = rowI - 1;
128
141
  }
129
142
  } else if (direction === 'up' || direction === 'down') {
130
143
  // top/bottom
131
- if (currentCell.dataset.groupedBy === 'rows') {
144
+ if (currentCell.dataset.groupedBy === 'rowgroup' || Number(currentCell.getAttribute('aria-colindex')) === 1) {
132
145
  rowI = direction === 'up' ? rowI - 1 : rowI + 1;
133
146
  } else {
134
147
  colI = colI - 1;
135
148
  }
136
149
  }
137
150
  _this.changeFocusCell(rowI, colI, direction);
151
+ } else if (row === null && _this.focusedCell[0] === 0 && direction === 'down' && _this.asProps.virtualScroll) {
152
+ _this.changeFocusCell(rowIndex + 1, colIndex, direction);
138
153
  }
139
154
  });
140
155
  _defineProperty(_assertThisInitialized(_this), "handleKeyDown", function (e) {
@@ -178,6 +193,14 @@ var DataTableRoot = /*#__PURE__*/function (_Component) {
178
193
  _this.focusedCell = [1, 0];
179
194
  }
180
195
  });
196
+ _defineProperty(_assertThisInitialized(_this), "handleScroll", trottle(function (e) {
197
+ var scrollTop = e.target.scrollTop;
198
+ var scrollDirection = scrollTop > _this.state.scrollTop ? 'down' : 'up';
199
+ _this.setState({
200
+ scrollTop: scrollTop,
201
+ scrollDirection: scrollDirection
202
+ });
203
+ }));
181
204
  _defineProperty(_assertThisInitialized(_this), "handleFocus", function (e) {
182
205
  if (_this.asProps.loading) {
183
206
  var _this$spinnerRef$curr;
@@ -194,6 +217,19 @@ var DataTableRoot = /*#__PURE__*/function (_Component) {
194
217
  _this.initFocusableCell();
195
218
  row = _this.getRow(_this.focusedCell[0]);
196
219
  }
220
+ if (!row && _this.asProps.virtualScroll) {
221
+ var _this$tableRef$curren4;
222
+ var firstAvailableCell = (_this$tableRef$curren4 = _this.tableRef.current) === null || _this$tableRef$curren4 === void 0 ? void 0 : _this$tableRef$curren4.querySelector("[role=\"gridcell\"]");
223
+ var firstAvailableRow = firstAvailableCell === null || firstAvailableCell === void 0 ? void 0 : firstAvailableCell.parentElement;
224
+ if (firstAvailableCell && firstAvailableRow) {
225
+ var _Number, _Number2;
226
+ var colIndex = ((_Number = Number(firstAvailableCell.getAttribute('aria-colindex'))) !== null && _Number !== void 0 ? _Number : 1) - 1;
227
+ var rowIndex = ((_Number2 = Number(firstAvailableRow.getAttribute('aria-rowindex'))) !== null && _Number2 !== void 0 ? _Number2 : 1) - 1;
228
+ _this.focusedCell[0] = rowIndex;
229
+ _this.focusedCell[1] = colIndex;
230
+ row = firstAvailableRow;
231
+ }
232
+ }
197
233
  var cell = (_row = row) === null || _row === void 0 ? void 0 : _row.querySelectorAll('[role=gridcell], [role=columnheader]').item(_this.focusedCell[1]);
198
234
  cell === null || cell === void 0 ? void 0 : cell.removeAttribute('inert');
199
235
  if (cell instanceof HTMLElement) {
@@ -217,7 +253,13 @@ var DataTableRoot = /*#__PURE__*/function (_Component) {
217
253
  _defineProperty(_assertThisInitialized(_this), "handleMouseMove", function () {
218
254
  _this.setInert(false);
219
255
  });
220
- _this.columns = _this.calculateColumns();
256
+ if (props.children) {
257
+ _this.columns = _this.calculateColumns();
258
+ } else {
259
+ var cols = _this.calculateColumnsFromConfig();
260
+ _this.columns = cols[0];
261
+ _this.treeColumns = cols[1];
262
+ }
221
263
  return _this;
222
264
  }
223
265
  _createClass(DataTableRoot, [{
@@ -235,12 +277,12 @@ var DataTableRoot = /*#__PURE__*/function (_Component) {
235
277
  }, {
236
278
  key: "totalRows",
237
279
  get: function get() {
238
- var _this2 = this;
239
280
  var _this$asProps = this.asProps,
240
281
  totalRows = _this$asProps.totalRows,
241
- expandedRows = _this$asProps.expandedRows;
282
+ expandedRows = _this$asProps.expandedRows,
283
+ data = _this$asProps.data;
242
284
  var expandedRowsCount = expandedRows === null || expandedRows === void 0 ? void 0 : expandedRows.reduce(function (acc, rowIndex) {
243
- var dtRow = _this2.calculateRows().flat()[rowIndex];
285
+ var dtRow = data[rowIndex];
244
286
  var expandedRows = dtRow[ACCORDION];
245
287
  if (Array.isArray(expandedRows)) {
246
288
  acc = acc + expandedRows.length;
@@ -249,15 +291,26 @@ var DataTableRoot = /*#__PURE__*/function (_Component) {
249
291
  }
250
292
  return acc;
251
293
  }, 0);
252
- return (totalRows !== null && totalRows !== void 0 ? totalRows : this.calculateRows().length) + expandedRowsCount;
294
+ if (totalRows !== undefined) {
295
+ return totalRows + expandedRowsCount;
296
+ }
297
+ var rows = data.reduce(function (acc, item) {
298
+ acc = acc + 1;
299
+ if (item[ROW_GROUP]) {
300
+ acc = acc + item[ROW_GROUP].length;
301
+ }
302
+ return acc;
303
+ }, 0);
304
+ return rows + expandedRowsCount;
253
305
  }
254
306
  }, {
255
307
  key: "gridSettings",
256
308
  get: function get() {
257
- var gridTemplateColumns = this.columns.map(function (c) {
309
+ var columns = this.columns;
310
+ var gridTemplateColumns = columns.map(function (c) {
258
311
  return c.gridColumnWidth;
259
312
  });
260
- var gridTemplateAreas = this.columns.map(function (c) {
313
+ var gridTemplateAreas = columns.map(function (c) {
261
314
  return c.name;
262
315
  });
263
316
  return {
@@ -274,12 +327,14 @@ var DataTableRoot = /*#__PURE__*/function (_Component) {
274
327
  sort = _this$asProps2.sort,
275
328
  onSortChange = _this$asProps2.onSortChange,
276
329
  getI18nText = _this$asProps2.getI18nText,
277
- uid = _this$asProps2.uid;
330
+ uid = _this$asProps2.uid,
331
+ headerProps = _this$asProps2.headerProps;
278
332
  var _this$gridSettings = this.gridSettings,
279
333
  gridTemplateColumns = _this$gridSettings.gridTemplateColumns,
280
334
  gridTemplateAreas = _this$gridSettings.gridTemplateAreas;
281
- return {
335
+ return _objectSpread({
282
336
  columns: this.columns,
337
+ treeColumns: this.treeColumns,
283
338
  use: use,
284
339
  tableRef: this.tableRef,
285
340
  compact: Boolean(compact),
@@ -291,51 +346,52 @@ var DataTableRoot = /*#__PURE__*/function (_Component) {
291
346
  gridAreaGroupMap: this.gridAreaGroupMap,
292
347
  gridTemplateColumns: gridTemplateColumns,
293
348
  gridTemplateAreas: gridTemplateAreas
294
- };
349
+ }, headerProps);
295
350
  }
296
351
  }, {
297
352
  key: "getBodyProps",
298
353
  value: function getBodyProps() {
299
- var _header$children;
300
354
  var _this$asProps3 = this.asProps,
301
355
  use = _this$asProps3.use,
302
356
  compact = _this$asProps3.compact,
303
357
  loading = _this$asProps3.loading,
304
358
  getI18nText = _this$asProps3.getI18nText,
305
- expandedRows = _this$asProps3.expandedRows;
306
- var rows = this.calculateRows();
359
+ expandedRows = _this$asProps3.expandedRows,
360
+ virtualScroll = _this$asProps3.virtualScroll,
361
+ data = _this$asProps3.data,
362
+ uid = _this$asProps3.uid,
363
+ renderCell = _this$asProps3.renderCell;
307
364
  var _this$gridSettings2 = this.gridSettings,
308
365
  gridTemplateColumns = _this$gridSettings2.gridTemplateColumns,
309
366
  gridTemplateAreas = _this$gridSettings2.gridTemplateAreas;
310
- var header = this.headerRef.current;
311
- var headerHeight = Array.from((_header$children = header === null || header === void 0 ? void 0 : header.children) !== null && _header$children !== void 0 ? _header$children : []).reduce(function (maxHeight, col) {
312
- var rect = col.getBoundingClientRect();
313
- if (rect.height > maxHeight) {
314
- maxHeight = rect.height;
315
- }
316
- return maxHeight;
317
- }, 0);
318
367
  return {
319
368
  columns: this.columns,
320
- rows: rows,
321
- flatRows: rows.flat(),
369
+ data: data,
322
370
  use: use,
323
371
  compact: Boolean(compact),
324
372
  gridTemplateColumns: gridTemplateColumns,
325
373
  gridTemplateAreas: gridTemplateAreas,
326
374
  loading: loading,
327
- headerHeight: headerHeight,
375
+ headerHeight: this.getTopScrollOffset(),
328
376
  getI18nText: getI18nText,
329
377
  expandedRows: expandedRows,
330
378
  onExpandRow: this.onExpandRow,
331
- spinnerRef: this.spinnerRef
379
+ spinnerRef: this.spinnerRef,
380
+ scrollTop: this.state.scrollTop,
381
+ scrollDirection: this.state.scrollDirection,
382
+ tableContainerRef: this.tableContainerRef,
383
+ tableRef: this.tableRef,
384
+ virtualScroll: virtualScroll,
385
+ hasGroups: this.hasGroups,
386
+ uid: uid,
387
+ renderCell: renderCell
332
388
  };
333
389
  }
334
390
  }, {
335
391
  key: "setInert",
336
392
  value: function setInert(value) {
337
- var _this$tableRef$curren4;
338
- var cells = (_this$tableRef$curren4 = this.tableRef.current) === null || _this$tableRef$curren4 === void 0 ? void 0 : _this$tableRef$curren4.querySelectorAll('[role=gridcell], [role=columnheader]');
393
+ var _this$tableRef$curren5;
394
+ var cells = (_this$tableRef$curren5 = this.tableRef.current) === null || _this$tableRef$curren5 === void 0 ? void 0 : _this$tableRef$curren5.querySelectorAll('[role=gridcell], [role=columnheader]');
339
395
  cells === null || cells === void 0 ? void 0 : cells.forEach(function (cell) {
340
396
  if (value === true) {
341
397
  cell.setAttribute('inert', '');
@@ -348,7 +404,9 @@ var DataTableRoot = /*#__PURE__*/function (_Component) {
348
404
  key: "render",
349
405
  value: function render() {
350
406
  var _ref = this.asProps,
351
- _ref2;
407
+ _ref2,
408
+ _ref3,
409
+ _ref4;
352
410
  var SDataTable = Box;
353
411
  var _this$asProps4 = this.asProps,
354
412
  Children = _this$asProps4.Children,
@@ -358,7 +416,10 @@ var DataTableRoot = /*#__PURE__*/function (_Component) {
358
416
  wMin = _this$asProps4.wMin,
359
417
  h = _this$asProps4.h,
360
418
  hMax = _this$asProps4.hMax,
361
- hMin = _this$asProps4.hMin;
419
+ hMin = _this$asProps4.hMin,
420
+ virtualScroll = _this$asProps4.virtualScroll,
421
+ children = _this$asProps4.children,
422
+ headerProps = _this$asProps4.headerProps;
362
423
  var _getScrollOffsetValue = getScrollOffsetValue(this.columns),
363
424
  _getScrollOffsetValue2 = _slicedToArray(_getScrollOffsetValue, 2),
364
425
  offsetLeftSum = _getScrollOffsetValue2[0],
@@ -367,10 +428,25 @@ var DataTableRoot = /*#__PURE__*/function (_Component) {
367
428
  gridTemplateColumns = _this$gridSettings3.gridTemplateColumns,
368
429
  gridTemplateAreas = _this$gridSettings3.gridTemplateAreas;
369
430
  var Head = findComponent(Children, ['DataTable.Head']);
370
- var topOffset = Head !== null && Head !== void 0 && Head.props.sticky || Head !== null && Head !== void 0 && Head.props.withScrollBar ? this.getTopScrollOffset() : undefined;
431
+ var headerPropsToCheck = headerProps !== null && headerProps !== void 0 ? headerProps : Head === null || Head === void 0 ? void 0 : Head.props;
432
+ var topOffset = headerPropsToCheck !== null && headerPropsToCheck !== void 0 && headerPropsToCheck.sticky || headerPropsToCheck !== null && headerPropsToCheck !== void 0 && headerPropsToCheck.withScrollBar ? this.getTopScrollOffset() : undefined;
371
433
  var width = w !== null && w !== void 0 ? w : this.columns.some(function (c) {
372
434
  return c.gridColumnWidth === 'auto' || c.gridColumnWidth === '1fr';
373
435
  }) ? '100%' : undefined;
436
+ var gridTemplateRows = undefined;
437
+ if (virtualScroll && typeof virtualScroll !== 'boolean' && 'rowHeight' in virtualScroll) {
438
+ gridTemplateRows = "auto auto repeat(".concat(this.totalRows, ", minmax(").concat(virtualScroll.rowHeight, "px, auto)");
439
+ }
440
+ var scrollDirection = undefined;
441
+ var hasWidthSettings = Boolean((_ref3 = w !== null && w !== void 0 ? w : wMax) !== null && _ref3 !== void 0 ? _ref3 : wMin);
442
+ var hasHeightSettings = Boolean((_ref4 = h !== null && h !== void 0 ? h : hMax) !== null && _ref4 !== void 0 ? _ref4 : hMin);
443
+ if (hasWidthSettings && !hasHeightSettings) {
444
+ scrollDirection = 'horizontal';
445
+ } else if (hasHeightSettings && !hasWidthSettings) {
446
+ scrollDirection = 'vertical';
447
+ } else if (hasWidthSettings && hasHeightSettings) {
448
+ scrollDirection = 'both';
449
+ }
374
450
  return _ref2 = sstyled(styles), /*#__PURE__*/React.createElement(ScrollArea, _ref2.cn("ScrollArea", {
375
451
  "leftOffset": offsetLeftSum,
376
452
  "rightOffset": offsetRightSum,
@@ -383,9 +459,14 @@ var DataTableRoot = /*#__PURE__*/function (_Component) {
383
459
  "hMin": hMin,
384
460
  "shadow": true,
385
461
  "container": this.tableContainerRef,
386
- "styles": scrollStyles
462
+ "styles": scrollStyles,
463
+ "onScroll": this.handleScroll,
464
+ "disableAutofocusToContent": true
387
465
  }), /*#__PURE__*/React.createElement(ScrollArea.Container, {
388
466
  tabIndex: -1
467
+ // @ts-ignore
468
+ ,
469
+ scrollDirection: scrollDirection
389
470
  }, /*#__PURE__*/React.createElement(SDataTable, _ref2.cn("SDataTable", _objectSpread({}, _assignProps({
390
471
  "ref": forkRef(this.tableRef, this.tableContainerRef),
391
472
  "role": 'grid',
@@ -398,6 +479,7 @@ var DataTableRoot = /*#__PURE__*/function (_Component) {
398
479
  "aria-colcount": this.columns.length,
399
480
  "gridTemplateColumns": gridTemplateColumns.join(' '),
400
481
  "gridTemplateAreas": gridTemplateAreas.join(' '),
482
+ "gridTemplateRows": gridTemplateRows,
401
483
  "w": '100%',
402
484
  "use:data": undefined,
403
485
  "use:w": undefined,
@@ -406,7 +488,7 @@ var DataTableRoot = /*#__PURE__*/function (_Component) {
406
488
  "use:h": undefined,
407
489
  "use:hMax": undefined,
408
490
  "use:hMin": undefined
409
- }, _ref))), /*#__PURE__*/React.createElement(Children, _ref2.cn("Children", {})))), (Head === null || Head === void 0 ? void 0 : Head.props.withScrollBar) && topOffset && /*#__PURE__*/React.createElement(ScrollArea.Bar, {
491
+ }, _ref))), children ? /*#__PURE__*/React.createElement(Children, _ref2.cn("Children", {})) : /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(DataTable.Head, null), /*#__PURE__*/React.createElement(DataTable.Body, null)))), (headerPropsToCheck === null || headerPropsToCheck === void 0 ? void 0 : headerPropsToCheck.withScrollBar) && topOffset && /*#__PURE__*/React.createElement(ScrollArea.Bar, {
410
492
  orientation: "horizontal",
411
493
  top: topOffset - SCROLL_BAR_HEIGHT,
412
494
  zIndex: 3
@@ -421,19 +503,19 @@ var DataTableRoot = /*#__PURE__*/function (_Component) {
421
503
  }, {
422
504
  key: "calculateColumns",
423
505
  value: function calculateColumns() {
424
- var _this3 = this;
506
+ var _this2 = this;
425
507
  var _this$props = this.props,
426
508
  children = _this$props.children,
427
509
  data = _this$props.data;
428
510
  var HeadComponent = findComponent(children, ['Head']);
429
- var hasGroup = findComponent(HeadComponent.props.children, ['Head.Group']) !== undefined;
511
+ this.hasGroups = findComponent(HeadComponent.props.children, ['Head.Group']) !== undefined;
430
512
  var columnIndex = 0;
431
513
  var groupIndex = 0;
432
514
  var gridColumnIndex = 1;
433
515
  var calculateGridTemplateColumn = this.calculateGridTemplateColumn.bind(this);
434
516
  var columns = [];
435
517
  var makeColumn = function makeColumn(columnElement, parent, isFirst, isLast) {
436
- var _columnElement$props$, _ref3, _columnElement$props$2;
518
+ var _columnElement$props$, _ref5, _columnElement$props$2;
437
519
  var leftBordersFromParent = isFirst && ((parent === null || parent === void 0 ? void 0 : parent.props.borders) === 'both' || (parent === null || parent === void 0 ? void 0 : parent.props.borders) === 'left') ? 'left' : undefined;
438
520
  var rightBordersFromParent = isLast && ((parent === null || parent === void 0 ? void 0 : parent.props.borders) === 'both' || (parent === null || parent === void 0 ? void 0 : parent.props.borders) === 'right') ? 'right' : undefined;
439
521
  var column = {
@@ -452,7 +534,7 @@ var DataTableRoot = /*#__PURE__*/function (_Component) {
452
534
  fixed: (_columnElement$props$ = columnElement.props.fixed) !== null && _columnElement$props$ !== void 0 ? _columnElement$props$ : parent === null || parent === void 0 ? void 0 : parent.props.fixed,
453
535
  calculatedWidth: 0,
454
536
  calculatedHeight: 0,
455
- borders: (_ref3 = (_columnElement$props$2 = columnElement.props.borders) !== null && _columnElement$props$2 !== void 0 ? _columnElement$props$2 : leftBordersFromParent) !== null && _ref3 !== void 0 ? _ref3 : rightBordersFromParent,
537
+ borders: (_ref5 = (_columnElement$props$2 = columnElement.props.borders) !== null && _columnElement$props$2 !== void 0 ? _columnElement$props$2 : leftBordersFromParent) !== null && _ref5 !== void 0 ? _ref5 : rightBordersFromParent,
456
538
  parent: parent,
457
539
  flexWrap: columnElement.props.flexWrap,
458
540
  alignItems: columnElement.props.alignItems,
@@ -471,7 +553,7 @@ var DataTableRoot = /*#__PURE__*/function (_Component) {
471
553
  if (! /*#__PURE__*/React.isValidElement(child)) return;
472
554
  if (childIsColumn(child)) {
473
555
  var col = makeColumn(child);
474
- col.gridArea = "1 / ".concat(gridColumnIndex, " / ").concat(hasGroup ? '3' : '2', " / ").concat(gridColumnIndex + 1);
556
+ col.gridArea = "1 / ".concat(gridColumnIndex, " / ").concat(_this2.hasGroups ? '3' : '2', " / ").concat(gridColumnIndex + 1);
475
557
  columnIndex++;
476
558
  gridColumnIndex++;
477
559
  columns.push(col);
@@ -498,78 +580,106 @@ var DataTableRoot = /*#__PURE__*/function (_Component) {
498
580
  columns.push(_col);
499
581
  }
500
582
  });
501
- _this3.gridAreaGroupMap.set(groupIndex, "1 / ".concat(initGridColumn, " / 2 / ").concat(gridColumnIndex));
583
+ _this2.gridAreaGroupMap.set(groupIndex, "1 / ".concat(initGridColumn, " / 2 / ").concat(gridColumnIndex));
502
584
  groupIndex++;
503
585
  }
504
586
  });
505
587
  return columns.filter(Boolean);
506
588
  }
507
589
  }, {
508
- key: "calculateRows",
509
- value: function calculateRows() {
510
- var _this4 = this;
511
- var data = this.asProps.data;
512
- var rows = [];
513
- var rowIndex = 0;
514
- var makeDtRow = function makeDtRow(row) {
515
- var dtRow = Object.entries(row).reduce(function (acc, _ref4) {
516
- var _ref5 = _slicedToArray(_ref4, 2),
517
- key = _ref5[0],
518
- value = _ref5[1];
519
- var columnsToRow = key.split(_this4.columnsSplitter);
520
- if (columnsToRow.length === 1) {
521
- acc[key] = value !== null && value !== void 0 ? value : '';
522
- } else {
523
- acc[columnsToRow[0]] = new MergedColumnsCell(value, {
524
- dataKey: key,
525
- size: columnsToRow.length
526
- });
527
- }
528
- if (row[ACCORDION]) {
529
- acc[ACCORDION] = row[ACCORDION];
530
- }
531
- return acc;
532
- }, {});
533
- return dtRow;
590
+ key: "calculateColumnsFromConfig",
591
+ value: function calculateColumnsFromConfig() {
592
+ var _this3 = this;
593
+ var _this$props2 = this.props,
594
+ columns = _this$props2.columns,
595
+ data = _this$props2.data;
596
+ this.hasGroups = columns.some(function (column) {
597
+ return 'columns' in column;
598
+ });
599
+ var columnIndex = 0;
600
+ var groupIndex = 0;
601
+ var gridColumnIndex = 1;
602
+ var calculateGridTemplateColumn = this.calculateGridTemplateColumn.bind(this);
603
+ var calculatedColumns = [];
604
+ var treeColumns = [];
605
+ var makeColumn = function makeColumn(columnElement, parent, isFirst, isLast) {
606
+ var _columnElement$fixed, _ref6, _columnElement$border;
607
+ var leftBordersFromParent = isFirst && ((parent === null || parent === void 0 ? void 0 : parent.borders) === 'both' || (parent === null || parent === void 0 ? void 0 : parent.borders) === 'left') ? 'left' : undefined;
608
+ var rightBordersFromParent = isLast && ((parent === null || parent === void 0 ? void 0 : parent.borders) === 'both' || (parent === null || parent === void 0 ? void 0 : parent.borders) === 'right') ? 'right' : undefined;
609
+ var column = _objectSpread({
610
+ name: childIsColumn(columnElement) ? columnElement.name : '',
611
+ // @ts-ignore
612
+ ref: function ref(node) {
613
+ if (node) {
614
+ var calculatedWidth = node.getBoundingClientRect().width;
615
+ var calculatedHeight = node.getBoundingClientRect().height;
616
+ column.calculatedWidth = calculatedWidth;
617
+ column.calculatedHeight = calculatedHeight;
618
+ }
619
+ if (this !== null && this !== void 0 && this.ref) {
620
+ this.ref.current = node;
621
+ }
622
+ },
623
+ gridColumnWidth: childIsColumn(columnElement) ? calculateGridTemplateColumn(columnElement) : '',
624
+ fixed: (_columnElement$fixed = columnElement.fixed) !== null && _columnElement$fixed !== void 0 ? _columnElement$fixed : parent === null || parent === void 0 ? void 0 : parent.fixed,
625
+ calculatedWidth: 0,
626
+ calculatedHeight: 0,
627
+ borders: (_ref6 = (_columnElement$border = columnElement.borders) !== null && _columnElement$border !== void 0 ? _columnElement$border : leftBordersFromParent) !== null && _ref6 !== void 0 ? _ref6 : rightBordersFromParent,
628
+ parent: parent
629
+ }, columnElement);
630
+ return column;
631
+ };
632
+ var childIsColumn = function childIsColumn(child) {
633
+ return !('columns' in child);
634
+ };
635
+ var childIsGroup = function childIsGroup(child) {
636
+ return 'columns' in child;
534
637
  };
535
- data.forEach(function (row) {
536
- var groupedRows = row[ROW_GROUP];
537
- var fromRow = rowIndex + 2; // 1 - for header, 1 - because start not from 0, but from 1
538
-
539
- if (groupedRows) {
540
- var toRow = fromRow + groupedRows.length;
541
- var innerRows = [];
542
- groupedRows.forEach(function (childRow, index) {
543
- var dtRow;
544
- if (index === 0) {
545
- var rowData = _objectSpread(_objectSpread({}, childRow), Object.entries(row).reduce(function (acc, _ref6) {
546
- var _ref7 = _slicedToArray(_ref6, 2),
547
- key = _ref7[0],
548
- value = _ref7[1];
549
- acc[key] = new MergedRowsCell(value, [fromRow, toRow]);
550
- return acc;
551
- }, {}));
552
- dtRow = makeDtRow(rowData);
638
+ columns.forEach(function (child, i) {
639
+ if (childIsColumn(child)) {
640
+ var col = makeColumn(child);
641
+ col.gridArea = "1 / ".concat(gridColumnIndex, " / ").concat(_this3.hasGroups ? '3' : '2', " / ").concat(gridColumnIndex + 1);
642
+ columnIndex++;
643
+ gridColumnIndex++;
644
+ calculatedColumns.push(col);
645
+ treeColumns.push(col);
646
+ } else if (childIsGroup(child)) {
647
+ var Group = makeColumn(child);
648
+ var childCount = child.columns.length;
649
+ var initGridColumn = gridColumnIndex;
650
+ Group.columns = [];
651
+ Group.children = child.children;
652
+ child.columns.forEach(function (child, j) {
653
+ var _Group$columns;
654
+ var isFirst = j === 0;
655
+ var isLast = j === childCount - 1;
656
+ var col = makeColumn(child, Group, isFirst, isLast);
657
+ if (i === 0 && j === 0 && data.some(function (d) {
658
+ return d[ACCORDION];
659
+ })) {
660
+ gridColumnIndex++;
661
+ col.gridArea = "2 / ".concat(gridColumnIndex - 1, " / 3 / ").concat(gridColumnIndex + 1);
553
662
  } else {
554
- dtRow = makeDtRow(childRow);
663
+ col.gridArea = "2 / ".concat(gridColumnIndex, " / 3 / ").concat(gridColumnIndex + 1);
555
664
  }
556
- innerRows.push(dtRow);
557
- rowIndex++;
665
+ col.gridArea = "2 / ".concat(gridColumnIndex, " / 3 / ").concat(gridColumnIndex + 1);
666
+ columnIndex++;
667
+ gridColumnIndex++;
668
+ calculatedColumns.push(col);
669
+ (_Group$columns = Group.columns) === null || _Group$columns === void 0 ? void 0 : _Group$columns.push(col);
558
670
  });
559
- rows.push(innerRows);
560
- } else {
561
- var dtRow = makeDtRow(row);
562
- rows.push(dtRow);
563
- rowIndex++;
671
+ treeColumns.push(Group);
672
+ _this3.gridAreaGroupMap.set(groupIndex, "1 / ".concat(initGridColumn, " / 2 / ").concat(gridColumnIndex));
673
+ groupIndex++;
564
674
  }
565
675
  });
566
- return rows;
676
+ return [calculatedColumns, treeColumns];
567
677
  }
568
678
  }, {
569
679
  key: "calculateGridTemplateColumn",
570
680
  value: function calculateGridTemplateColumn(c) {
571
- var _c$props$gtcWidth;
572
- return (_c$props$gtcWidth = c.props.gtcWidth) !== null && _c$props$gtcWidth !== void 0 ? _c$props$gtcWidth : this.props.defaultGridTemplateColumnWidth;
681
+ var _ref7;
682
+ return (_ref7 = /*#__PURE__*/React.isValidElement(c) ? c.props.gtcWidth : c.gtcWidth) !== null && _ref7 !== void 0 ? _ref7 : this.props.defaultGridTemplateColumnWidth;
573
683
  }
574
684
  }, {
575
685
  key: "getTopScrollOffset",
@@ -596,7 +706,6 @@ _defineProperty(DataTableRoot, "enhance", [uniqueIDEnhancement(), i18nEnhance(lo
596
706
  _defineProperty(DataTableRoot, "defaultProps", {
597
707
  use: 'primary',
598
708
  defaultGridTemplateColumnWidth: 'auto',
599
- h: 'auto',
600
709
  defaultExpandedRows: []
601
710
  });
602
711
  export var DataTable = createComponent(DataTableRoot, {