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

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
@@ -5,9 +5,9 @@ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefau
5
5
  Object.defineProperty(exports, "__esModule", {
6
6
  value: true
7
7
  });
8
- exports.ROW_GROUP = exports.DataTable = exports.ACCORDION = void 0;
9
- var _objectSpread2 = _interopRequireDefault(require("@babel/runtime/helpers/objectSpread2"));
8
+ exports.UNIQ_ROW_KEY = exports.ROW_GROUP = exports.DataTable = exports.ACCORDION = void 0;
10
9
  var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
10
+ var _objectSpread2 = _interopRequireDefault(require("@babel/runtime/helpers/objectSpread2"));
11
11
  var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray"));
12
12
  var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
13
13
  var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
@@ -26,27 +26,35 @@ var _findComponent = _interopRequireDefault(require("@semcore/core/lib/utils/fin
26
26
  var _intergalacticDynamicLocales = require("../../translations/__intergalactic-dynamic-locales");
27
27
  var _i18nEnhance = _interopRequireDefault(require("@semcore/core/lib/utils/enhances/i18nEnhance"));
28
28
  var _uniqueID = _interopRequireDefault(require("@semcore/core/lib/utils/uniqueID"));
29
- var _MergedCells = require("../Body/MergedCells");
30
29
  var _ref8 = require("@semcore/core/lib/utils/ref");
31
30
  var _hasParent = require("@semcore/core/lib/utils/hasParent");
31
+ var _rafTrottle = _interopRequireDefault(require("@semcore/core/lib/utils/rafTrottle"));
32
32
  /*__reshadow-styles__:"./dataTable.shadow.css"*/
33
- var style = ( /*__reshadow_css_start__*/_core.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__*/, {
34
- "__SDataTable": "___SDataTable_1yoby_gg_",
35
- "_gridTemplateColumns": "__gridTemplateColumns_1yoby_gg_",
36
- "--gridTemplateColumns": "--gridTemplateColumns_1yoby",
37
- "_gridTemplateAreas": "__gridTemplateAreas_1yoby_gg_",
38
- "--gridTemplateAreas": "--gridTemplateAreas_1yoby"
33
+ var style = ( /*__reshadow_css_start__*/_core.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__*/, {
34
+ "__SDataTable": "___SDataTable_1rvtk_gg_",
35
+ "_gridTemplateColumns": "__gridTemplateColumns_1rvtk_gg_",
36
+ "--gridTemplateColumns": "--gridTemplateColumns_1rvtk",
37
+ "_gridTemplateAreas": "__gridTemplateAreas_1rvtk_gg_",
38
+ "--gridTemplateAreas": "--gridTemplateAreas_1rvtk",
39
+ "_gridTemplateRows": "__gridTemplateRows_1rvtk_gg_",
40
+ "--gridTemplateRows": "--gridTemplateRows_1rvtk"
39
41
  });
40
42
  /*__reshadow-styles__:"../../style/scroll-shadows.shadow.css"*/
41
- var scrollStyles = ( /*__reshadow_css_start__*/_core.sstyled.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__*/, {
42
- "__SScrollArea": "___SScrollArea_14dz4_gg_",
43
- "__SShadowVertical": "___SShadowVertical_14dz4_gg_",
44
- "__SShadowHorizontal": "___SShadowHorizontal_14dz4_gg_"
43
+ var scrollStyles = ( /*__reshadow_css_start__*/_core.sstyled.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__*/, {
44
+ "__SScrollArea": "___SScrollArea_dn57w_gg_",
45
+ "__SContainer": "___SContainer_dn57w_gg_",
46
+ "_scrollDirection_both": "_scrollDirection_both_dn57w_gg_",
47
+ "_scrollDirection_horizontal": "_scrollDirection_horizontal_dn57w_gg_",
48
+ "_scrollDirection_vertical": "_scrollDirection_vertical_dn57w_gg_",
49
+ "__SShadowVertical": "___SShadowVertical_dn57w_gg_",
50
+ "__SShadowHorizontal": "___SShadowHorizontal_dn57w_gg_"
45
51
  });
46
52
  var ACCORDION = Symbol('accordion');
47
53
  exports.ACCORDION = ACCORDION;
48
54
  var ROW_GROUP = Symbol('ROW_GROUP');
49
55
  exports.ROW_GROUP = ROW_GROUP;
56
+ var UNIQ_ROW_KEY = Symbol('UNIQ_ROW_KEY');
57
+ exports.UNIQ_ROW_KEY = UNIQ_ROW_KEY;
50
58
  var SCROLL_BAR_HEIGHT = 12;
51
59
  var DataTableRoot = /*#__PURE__*/function (_Component) {
52
60
  (0, _inherits2["default"])(DataTableRoot, _Component);
@@ -55,14 +63,19 @@ var DataTableRoot = /*#__PURE__*/function (_Component) {
55
63
  var _this;
56
64
  (0, _classCallCheck2["default"])(this, DataTableRoot);
57
65
  _this = _super.call(this, props);
58
- (0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "columnsSplitter", '/');
59
66
  (0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "columns", []);
67
+ (0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "treeColumns", []);
68
+ (0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "hasGroups", false);
60
69
  (0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "focusedCell", [-1, -1]);
61
70
  (0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "tableContainerRef", /*#__PURE__*/React.createRef());
62
71
  (0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "tableRef", /*#__PURE__*/React.createRef());
63
72
  (0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "headerRef", /*#__PURE__*/React.createRef());
64
73
  (0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "spinnerRef", /*#__PURE__*/React.createRef());
65
74
  (0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "gridAreaGroupMap", new Map());
75
+ (0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "state", {
76
+ scrollTop: 0,
77
+ scrollDirection: 'down'
78
+ });
66
79
  (0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "getRow", function (index) {
67
80
  var _this$tableRef$curren;
68
81
  return (_this$tableRef$curren = _this.tableRef.current) === null || _this$tableRef$curren === void 0 ? void 0 : _this$tableRef$curren.querySelector("[aria-rowindex=\"".concat(index + 1, "\"]"));
@@ -127,21 +140,24 @@ var DataTableRoot = /*#__PURE__*/function (_Component) {
127
140
  var rowI = rowIndex;
128
141
  var colI = colIndex;
129
142
  if (direction === 'left' || direction === 'right') {
143
+ var _currentCell$parentEl;
130
144
  // left/right
131
- if (currentCell.dataset.groupedBy === 'columns') {
145
+ if (currentCell.dataset.groupedBy === 'colgroup' || Number((_currentCell$parentEl = currentCell.parentElement) === null || _currentCell$parentEl === void 0 ? void 0 : _currentCell$parentEl.getAttribute('aria-rowindex')) === 2) {
132
146
  colI = direction === 'left' ? colI - 1 : colI + 1;
133
147
  } else {
134
148
  rowI = rowI - 1;
135
149
  }
136
150
  } else if (direction === 'up' || direction === 'down') {
137
151
  // top/bottom
138
- if (currentCell.dataset.groupedBy === 'rows') {
152
+ if (currentCell.dataset.groupedBy === 'rowgroup' || Number(currentCell.getAttribute('aria-colindex')) === 1) {
139
153
  rowI = direction === 'up' ? rowI - 1 : rowI + 1;
140
154
  } else {
141
155
  colI = colI - 1;
142
156
  }
143
157
  }
144
158
  _this.changeFocusCell(rowI, colI, direction);
159
+ } else if (row === null && _this.focusedCell[0] === 0 && direction === 'down' && _this.asProps.virtualScroll) {
160
+ _this.changeFocusCell(rowIndex + 1, colIndex, direction);
145
161
  }
146
162
  });
147
163
  (0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "handleKeyDown", function (e) {
@@ -185,6 +201,14 @@ var DataTableRoot = /*#__PURE__*/function (_Component) {
185
201
  _this.focusedCell = [1, 0];
186
202
  }
187
203
  });
204
+ (0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "handleScroll", (0, _rafTrottle["default"])(function (e) {
205
+ var scrollTop = e.target.scrollTop;
206
+ var scrollDirection = scrollTop > _this.state.scrollTop ? 'down' : 'up';
207
+ _this.setState({
208
+ scrollTop: scrollTop,
209
+ scrollDirection: scrollDirection
210
+ });
211
+ }));
188
212
  (0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "handleFocus", function (e) {
189
213
  if (_this.asProps.loading) {
190
214
  var _this$spinnerRef$curr;
@@ -201,6 +225,19 @@ var DataTableRoot = /*#__PURE__*/function (_Component) {
201
225
  _this.initFocusableCell();
202
226
  row = _this.getRow(_this.focusedCell[0]);
203
227
  }
228
+ if (!row && _this.asProps.virtualScroll) {
229
+ var _this$tableRef$curren4;
230
+ var firstAvailableCell = (_this$tableRef$curren4 = _this.tableRef.current) === null || _this$tableRef$curren4 === void 0 ? void 0 : _this$tableRef$curren4.querySelector("[role=\"gridcell\"]");
231
+ var firstAvailableRow = firstAvailableCell === null || firstAvailableCell === void 0 ? void 0 : firstAvailableCell.parentElement;
232
+ if (firstAvailableCell && firstAvailableRow) {
233
+ var _Number, _Number2;
234
+ var colIndex = ((_Number = Number(firstAvailableCell.getAttribute('aria-colindex'))) !== null && _Number !== void 0 ? _Number : 1) - 1;
235
+ var rowIndex = ((_Number2 = Number(firstAvailableRow.getAttribute('aria-rowindex'))) !== null && _Number2 !== void 0 ? _Number2 : 1) - 1;
236
+ _this.focusedCell[0] = rowIndex;
237
+ _this.focusedCell[1] = colIndex;
238
+ row = firstAvailableRow;
239
+ }
240
+ }
204
241
  var cell = (_row = row) === null || _row === void 0 ? void 0 : _row.querySelectorAll('[role=gridcell], [role=columnheader]').item(_this.focusedCell[1]);
205
242
  cell === null || cell === void 0 ? void 0 : cell.removeAttribute('inert');
206
243
  if (cell instanceof HTMLElement) {
@@ -224,7 +261,13 @@ var DataTableRoot = /*#__PURE__*/function (_Component) {
224
261
  (0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "handleMouseMove", function () {
225
262
  _this.setInert(false);
226
263
  });
227
- _this.columns = _this.calculateColumns();
264
+ if (props.children) {
265
+ _this.columns = _this.calculateColumns();
266
+ } else {
267
+ var cols = _this.calculateColumnsFromConfig();
268
+ _this.columns = cols[0];
269
+ _this.treeColumns = cols[1];
270
+ }
228
271
  return _this;
229
272
  }
230
273
  (0, _createClass2["default"])(DataTableRoot, [{
@@ -242,12 +285,12 @@ var DataTableRoot = /*#__PURE__*/function (_Component) {
242
285
  }, {
243
286
  key: "totalRows",
244
287
  get: function get() {
245
- var _this2 = this;
246
288
  var _this$asProps = this.asProps,
247
289
  totalRows = _this$asProps.totalRows,
248
- expandedRows = _this$asProps.expandedRows;
290
+ expandedRows = _this$asProps.expandedRows,
291
+ data = _this$asProps.data;
249
292
  var expandedRowsCount = expandedRows === null || expandedRows === void 0 ? void 0 : expandedRows.reduce(function (acc, rowIndex) {
250
- var dtRow = _this2.calculateRows().flat()[rowIndex];
293
+ var dtRow = data[rowIndex];
251
294
  var expandedRows = dtRow[ACCORDION];
252
295
  if (Array.isArray(expandedRows)) {
253
296
  acc = acc + expandedRows.length;
@@ -256,15 +299,26 @@ var DataTableRoot = /*#__PURE__*/function (_Component) {
256
299
  }
257
300
  return acc;
258
301
  }, 0);
259
- return (totalRows !== null && totalRows !== void 0 ? totalRows : this.calculateRows().length) + expandedRowsCount;
302
+ if (totalRows !== undefined) {
303
+ return totalRows + expandedRowsCount;
304
+ }
305
+ var rows = data.reduce(function (acc, item) {
306
+ acc = acc + 1;
307
+ if (item[ROW_GROUP]) {
308
+ acc = acc + item[ROW_GROUP].length;
309
+ }
310
+ return acc;
311
+ }, 0);
312
+ return rows + expandedRowsCount;
260
313
  }
261
314
  }, {
262
315
  key: "gridSettings",
263
316
  get: function get() {
264
- var gridTemplateColumns = this.columns.map(function (c) {
317
+ var columns = this.columns;
318
+ var gridTemplateColumns = columns.map(function (c) {
265
319
  return c.gridColumnWidth;
266
320
  });
267
- var gridTemplateAreas = this.columns.map(function (c) {
321
+ var gridTemplateAreas = columns.map(function (c) {
268
322
  return c.name;
269
323
  });
270
324
  return {
@@ -281,12 +335,14 @@ var DataTableRoot = /*#__PURE__*/function (_Component) {
281
335
  sort = _this$asProps2.sort,
282
336
  onSortChange = _this$asProps2.onSortChange,
283
337
  getI18nText = _this$asProps2.getI18nText,
284
- uid = _this$asProps2.uid;
338
+ uid = _this$asProps2.uid,
339
+ headerProps = _this$asProps2.headerProps;
285
340
  var _this$gridSettings = this.gridSettings,
286
341
  gridTemplateColumns = _this$gridSettings.gridTemplateColumns,
287
342
  gridTemplateAreas = _this$gridSettings.gridTemplateAreas;
288
- return {
343
+ return (0, _objectSpread2["default"])({
289
344
  columns: this.columns,
345
+ treeColumns: this.treeColumns,
290
346
  use: use,
291
347
  tableRef: this.tableRef,
292
348
  compact: Boolean(compact),
@@ -298,51 +354,52 @@ var DataTableRoot = /*#__PURE__*/function (_Component) {
298
354
  gridAreaGroupMap: this.gridAreaGroupMap,
299
355
  gridTemplateColumns: gridTemplateColumns,
300
356
  gridTemplateAreas: gridTemplateAreas
301
- };
357
+ }, headerProps);
302
358
  }
303
359
  }, {
304
360
  key: "getBodyProps",
305
361
  value: function getBodyProps() {
306
- var _header$children;
307
362
  var _this$asProps3 = this.asProps,
308
363
  use = _this$asProps3.use,
309
364
  compact = _this$asProps3.compact,
310
365
  loading = _this$asProps3.loading,
311
366
  getI18nText = _this$asProps3.getI18nText,
312
- expandedRows = _this$asProps3.expandedRows;
313
- var rows = this.calculateRows();
367
+ expandedRows = _this$asProps3.expandedRows,
368
+ virtualScroll = _this$asProps3.virtualScroll,
369
+ data = _this$asProps3.data,
370
+ uid = _this$asProps3.uid,
371
+ renderCell = _this$asProps3.renderCell;
314
372
  var _this$gridSettings2 = this.gridSettings,
315
373
  gridTemplateColumns = _this$gridSettings2.gridTemplateColumns,
316
374
  gridTemplateAreas = _this$gridSettings2.gridTemplateAreas;
317
- var header = this.headerRef.current;
318
- 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) {
319
- var rect = col.getBoundingClientRect();
320
- if (rect.height > maxHeight) {
321
- maxHeight = rect.height;
322
- }
323
- return maxHeight;
324
- }, 0);
325
375
  return {
326
376
  columns: this.columns,
327
- rows: rows,
328
- flatRows: rows.flat(),
377
+ data: data,
329
378
  use: use,
330
379
  compact: Boolean(compact),
331
380
  gridTemplateColumns: gridTemplateColumns,
332
381
  gridTemplateAreas: gridTemplateAreas,
333
382
  loading: loading,
334
- headerHeight: headerHeight,
383
+ headerHeight: this.getTopScrollOffset(),
335
384
  getI18nText: getI18nText,
336
385
  expandedRows: expandedRows,
337
386
  onExpandRow: this.onExpandRow,
338
- spinnerRef: this.spinnerRef
387
+ spinnerRef: this.spinnerRef,
388
+ scrollTop: this.state.scrollTop,
389
+ scrollDirection: this.state.scrollDirection,
390
+ tableContainerRef: this.tableContainerRef,
391
+ tableRef: this.tableRef,
392
+ virtualScroll: virtualScroll,
393
+ hasGroups: this.hasGroups,
394
+ uid: uid,
395
+ renderCell: renderCell
339
396
  };
340
397
  }
341
398
  }, {
342
399
  key: "setInert",
343
400
  value: function setInert(value) {
344
- var _this$tableRef$curren4;
345
- var cells = (_this$tableRef$curren4 = this.tableRef.current) === null || _this$tableRef$curren4 === void 0 ? void 0 : _this$tableRef$curren4.querySelectorAll('[role=gridcell], [role=columnheader]');
401
+ var _this$tableRef$curren5;
402
+ var cells = (_this$tableRef$curren5 = this.tableRef.current) === null || _this$tableRef$curren5 === void 0 ? void 0 : _this$tableRef$curren5.querySelectorAll('[role=gridcell], [role=columnheader]');
346
403
  cells === null || cells === void 0 ? void 0 : cells.forEach(function (cell) {
347
404
  if (value === true) {
348
405
  cell.setAttribute('inert', '');
@@ -355,7 +412,9 @@ var DataTableRoot = /*#__PURE__*/function (_Component) {
355
412
  key: "render",
356
413
  value: function render() {
357
414
  var _ref = this.asProps,
358
- _ref2;
415
+ _ref2,
416
+ _ref3,
417
+ _ref4;
359
418
  var SDataTable = _baseComponents.Box;
360
419
  var _this$asProps4 = this.asProps,
361
420
  Children = _this$asProps4.Children,
@@ -365,7 +424,10 @@ var DataTableRoot = /*#__PURE__*/function (_Component) {
365
424
  wMin = _this$asProps4.wMin,
366
425
  h = _this$asProps4.h,
367
426
  hMax = _this$asProps4.hMax,
368
- hMin = _this$asProps4.hMin;
427
+ hMin = _this$asProps4.hMin,
428
+ virtualScroll = _this$asProps4.virtualScroll,
429
+ children = _this$asProps4.children,
430
+ headerProps = _this$asProps4.headerProps;
369
431
  var _getScrollOffsetValue = (0, _utils.getScrollOffsetValue)(this.columns),
370
432
  _getScrollOffsetValue2 = (0, _slicedToArray2["default"])(_getScrollOffsetValue, 2),
371
433
  offsetLeftSum = _getScrollOffsetValue2[0],
@@ -374,10 +436,25 @@ var DataTableRoot = /*#__PURE__*/function (_Component) {
374
436
  gridTemplateColumns = _this$gridSettings3.gridTemplateColumns,
375
437
  gridTemplateAreas = _this$gridSettings3.gridTemplateAreas;
376
438
  var Head = (0, _findComponent["default"])(Children, ['DataTable.Head']);
377
- var topOffset = Head !== null && Head !== void 0 && Head.props.sticky || Head !== null && Head !== void 0 && Head.props.withScrollBar ? this.getTopScrollOffset() : undefined;
439
+ var headerPropsToCheck = headerProps !== null && headerProps !== void 0 ? headerProps : Head === null || Head === void 0 ? void 0 : Head.props;
440
+ var topOffset = headerPropsToCheck !== null && headerPropsToCheck !== void 0 && headerPropsToCheck.sticky || headerPropsToCheck !== null && headerPropsToCheck !== void 0 && headerPropsToCheck.withScrollBar ? this.getTopScrollOffset() : undefined;
378
441
  var width = w !== null && w !== void 0 ? w : this.columns.some(function (c) {
379
442
  return c.gridColumnWidth === 'auto' || c.gridColumnWidth === '1fr';
380
443
  }) ? '100%' : undefined;
444
+ var gridTemplateRows = undefined;
445
+ if (virtualScroll && typeof virtualScroll !== 'boolean' && 'rowHeight' in virtualScroll) {
446
+ gridTemplateRows = "auto auto repeat(".concat(this.totalRows, ", minmax(").concat(virtualScroll.rowHeight, "px, auto)");
447
+ }
448
+ var scrollDirection = undefined;
449
+ var hasWidthSettings = Boolean((_ref3 = w !== null && w !== void 0 ? w : wMax) !== null && _ref3 !== void 0 ? _ref3 : wMin);
450
+ var hasHeightSettings = Boolean((_ref4 = h !== null && h !== void 0 ? h : hMax) !== null && _ref4 !== void 0 ? _ref4 : hMin);
451
+ if (hasWidthSettings && !hasHeightSettings) {
452
+ scrollDirection = 'horizontal';
453
+ } else if (hasHeightSettings && !hasWidthSettings) {
454
+ scrollDirection = 'vertical';
455
+ } else if (hasWidthSettings && hasHeightSettings) {
456
+ scrollDirection = 'both';
457
+ }
381
458
  return _ref2 = (0, _core.sstyled)(styles), /*#__PURE__*/React.createElement(_baseComponents.ScrollArea, _ref2.cn("ScrollArea", {
382
459
  "leftOffset": offsetLeftSum,
383
460
  "rightOffset": offsetRightSum,
@@ -390,9 +467,14 @@ var DataTableRoot = /*#__PURE__*/function (_Component) {
390
467
  "hMin": hMin,
391
468
  "shadow": true,
392
469
  "container": this.tableContainerRef,
393
- "styles": scrollStyles
470
+ "styles": scrollStyles,
471
+ "onScroll": this.handleScroll,
472
+ "disableAutofocusToContent": true
394
473
  }), /*#__PURE__*/React.createElement(_baseComponents.ScrollArea.Container, {
395
474
  tabIndex: -1
475
+ // @ts-ignore
476
+ ,
477
+ scrollDirection: scrollDirection
396
478
  }, /*#__PURE__*/React.createElement(SDataTable, _ref2.cn("SDataTable", (0, _objectSpread2["default"])({}, (0, _core.assignProps)({
397
479
  "ref": (0, _ref8.forkRef)(this.tableRef, this.tableContainerRef),
398
480
  "role": 'grid',
@@ -405,6 +487,7 @@ var DataTableRoot = /*#__PURE__*/function (_Component) {
405
487
  "aria-colcount": this.columns.length,
406
488
  "gridTemplateColumns": gridTemplateColumns.join(' '),
407
489
  "gridTemplateAreas": gridTemplateAreas.join(' '),
490
+ "gridTemplateRows": gridTemplateRows,
408
491
  "w": '100%',
409
492
  "use:data": undefined,
410
493
  "use:w": undefined,
@@ -413,7 +496,7 @@ var DataTableRoot = /*#__PURE__*/function (_Component) {
413
496
  "use:h": undefined,
414
497
  "use:hMax": undefined,
415
498
  "use:hMin": undefined
416
- }, _ref))), /*#__PURE__*/React.createElement(Children, _ref2.cn("Children", {})))), (Head === null || Head === void 0 ? void 0 : Head.props.withScrollBar) && topOffset && /*#__PURE__*/React.createElement(_baseComponents.ScrollArea.Bar, {
499
+ }, _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(_baseComponents.ScrollArea.Bar, {
417
500
  orientation: "horizontal",
418
501
  top: topOffset - SCROLL_BAR_HEIGHT,
419
502
  zIndex: 3
@@ -428,19 +511,19 @@ var DataTableRoot = /*#__PURE__*/function (_Component) {
428
511
  }, {
429
512
  key: "calculateColumns",
430
513
  value: function calculateColumns() {
431
- var _this3 = this;
514
+ var _this2 = this;
432
515
  var _this$props = this.props,
433
516
  children = _this$props.children,
434
517
  data = _this$props.data;
435
518
  var HeadComponent = (0, _findComponent["default"])(children, ['Head']);
436
- var hasGroup = (0, _findComponent["default"])(HeadComponent.props.children, ['Head.Group']) !== undefined;
519
+ this.hasGroups = (0, _findComponent["default"])(HeadComponent.props.children, ['Head.Group']) !== undefined;
437
520
  var columnIndex = 0;
438
521
  var groupIndex = 0;
439
522
  var gridColumnIndex = 1;
440
523
  var calculateGridTemplateColumn = this.calculateGridTemplateColumn.bind(this);
441
524
  var columns = [];
442
525
  var makeColumn = function makeColumn(columnElement, parent, isFirst, isLast) {
443
- var _columnElement$props$, _ref3, _columnElement$props$2;
526
+ var _columnElement$props$, _ref5, _columnElement$props$2;
444
527
  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;
445
528
  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;
446
529
  var column = {
@@ -459,7 +542,7 @@ var DataTableRoot = /*#__PURE__*/function (_Component) {
459
542
  fixed: (_columnElement$props$ = columnElement.props.fixed) !== null && _columnElement$props$ !== void 0 ? _columnElement$props$ : parent === null || parent === void 0 ? void 0 : parent.props.fixed,
460
543
  calculatedWidth: 0,
461
544
  calculatedHeight: 0,
462
- borders: (_ref3 = (_columnElement$props$2 = columnElement.props.borders) !== null && _columnElement$props$2 !== void 0 ? _columnElement$props$2 : leftBordersFromParent) !== null && _ref3 !== void 0 ? _ref3 : rightBordersFromParent,
545
+ borders: (_ref5 = (_columnElement$props$2 = columnElement.props.borders) !== null && _columnElement$props$2 !== void 0 ? _columnElement$props$2 : leftBordersFromParent) !== null && _ref5 !== void 0 ? _ref5 : rightBordersFromParent,
463
546
  parent: parent,
464
547
  flexWrap: columnElement.props.flexWrap,
465
548
  alignItems: columnElement.props.alignItems,
@@ -478,7 +561,7 @@ var DataTableRoot = /*#__PURE__*/function (_Component) {
478
561
  if (! /*#__PURE__*/React.isValidElement(child)) return;
479
562
  if (childIsColumn(child)) {
480
563
  var col = makeColumn(child);
481
- col.gridArea = "1 / ".concat(gridColumnIndex, " / ").concat(hasGroup ? '3' : '2', " / ").concat(gridColumnIndex + 1);
564
+ col.gridArea = "1 / ".concat(gridColumnIndex, " / ").concat(_this2.hasGroups ? '3' : '2', " / ").concat(gridColumnIndex + 1);
482
565
  columnIndex++;
483
566
  gridColumnIndex++;
484
567
  columns.push(col);
@@ -505,78 +588,106 @@ var DataTableRoot = /*#__PURE__*/function (_Component) {
505
588
  columns.push(_col);
506
589
  }
507
590
  });
508
- _this3.gridAreaGroupMap.set(groupIndex, "1 / ".concat(initGridColumn, " / 2 / ").concat(gridColumnIndex));
591
+ _this2.gridAreaGroupMap.set(groupIndex, "1 / ".concat(initGridColumn, " / 2 / ").concat(gridColumnIndex));
509
592
  groupIndex++;
510
593
  }
511
594
  });
512
595
  return columns.filter(Boolean);
513
596
  }
514
597
  }, {
515
- key: "calculateRows",
516
- value: function calculateRows() {
517
- var _this4 = this;
518
- var data = this.asProps.data;
519
- var rows = [];
520
- var rowIndex = 0;
521
- var makeDtRow = function makeDtRow(row) {
522
- var dtRow = Object.entries(row).reduce(function (acc, _ref4) {
523
- var _ref5 = (0, _slicedToArray2["default"])(_ref4, 2),
524
- key = _ref5[0],
525
- value = _ref5[1];
526
- var columnsToRow = key.split(_this4.columnsSplitter);
527
- if (columnsToRow.length === 1) {
528
- acc[key] = value !== null && value !== void 0 ? value : '';
529
- } else {
530
- acc[columnsToRow[0]] = new _MergedCells.MergedColumnsCell(value, {
531
- dataKey: key,
532
- size: columnsToRow.length
533
- });
534
- }
535
- if (row[ACCORDION]) {
536
- acc[ACCORDION] = row[ACCORDION];
537
- }
538
- return acc;
539
- }, {});
540
- return dtRow;
598
+ key: "calculateColumnsFromConfig",
599
+ value: function calculateColumnsFromConfig() {
600
+ var _this3 = this;
601
+ var _this$props2 = this.props,
602
+ columns = _this$props2.columns,
603
+ data = _this$props2.data;
604
+ this.hasGroups = columns.some(function (column) {
605
+ return 'columns' in column;
606
+ });
607
+ var columnIndex = 0;
608
+ var groupIndex = 0;
609
+ var gridColumnIndex = 1;
610
+ var calculateGridTemplateColumn = this.calculateGridTemplateColumn.bind(this);
611
+ var calculatedColumns = [];
612
+ var treeColumns = [];
613
+ var makeColumn = function makeColumn(columnElement, parent, isFirst, isLast) {
614
+ var _columnElement$fixed, _ref6, _columnElement$border;
615
+ 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;
616
+ 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;
617
+ var column = (0, _objectSpread2["default"])({
618
+ name: childIsColumn(columnElement) ? columnElement.name : '',
619
+ // @ts-ignore
620
+ ref: function ref(node) {
621
+ if (node) {
622
+ var calculatedWidth = node.getBoundingClientRect().width;
623
+ var calculatedHeight = node.getBoundingClientRect().height;
624
+ column.calculatedWidth = calculatedWidth;
625
+ column.calculatedHeight = calculatedHeight;
626
+ }
627
+ if (this !== null && this !== void 0 && this.ref) {
628
+ this.ref.current = node;
629
+ }
630
+ },
631
+ gridColumnWidth: childIsColumn(columnElement) ? calculateGridTemplateColumn(columnElement) : '',
632
+ fixed: (_columnElement$fixed = columnElement.fixed) !== null && _columnElement$fixed !== void 0 ? _columnElement$fixed : parent === null || parent === void 0 ? void 0 : parent.fixed,
633
+ calculatedWidth: 0,
634
+ calculatedHeight: 0,
635
+ borders: (_ref6 = (_columnElement$border = columnElement.borders) !== null && _columnElement$border !== void 0 ? _columnElement$border : leftBordersFromParent) !== null && _ref6 !== void 0 ? _ref6 : rightBordersFromParent,
636
+ parent: parent
637
+ }, columnElement);
638
+ return column;
541
639
  };
542
- data.forEach(function (row) {
543
- var groupedRows = row[ROW_GROUP];
544
- var fromRow = rowIndex + 2; // 1 - for header, 1 - because start not from 0, but from 1
545
-
546
- if (groupedRows) {
547
- var toRow = fromRow + groupedRows.length;
548
- var innerRows = [];
549
- groupedRows.forEach(function (childRow, index) {
550
- var dtRow;
551
- if (index === 0) {
552
- var rowData = (0, _objectSpread2["default"])((0, _objectSpread2["default"])({}, childRow), Object.entries(row).reduce(function (acc, _ref6) {
553
- var _ref7 = (0, _slicedToArray2["default"])(_ref6, 2),
554
- key = _ref7[0],
555
- value = _ref7[1];
556
- acc[key] = new _MergedCells.MergedRowsCell(value, [fromRow, toRow]);
557
- return acc;
558
- }, {}));
559
- dtRow = makeDtRow(rowData);
640
+ var childIsColumn = function childIsColumn(child) {
641
+ return !('columns' in child);
642
+ };
643
+ var childIsGroup = function childIsGroup(child) {
644
+ return 'columns' in child;
645
+ };
646
+ columns.forEach(function (child, i) {
647
+ if (childIsColumn(child)) {
648
+ var col = makeColumn(child);
649
+ col.gridArea = "1 / ".concat(gridColumnIndex, " / ").concat(_this3.hasGroups ? '3' : '2', " / ").concat(gridColumnIndex + 1);
650
+ columnIndex++;
651
+ gridColumnIndex++;
652
+ calculatedColumns.push(col);
653
+ treeColumns.push(col);
654
+ } else if (childIsGroup(child)) {
655
+ var Group = makeColumn(child);
656
+ var childCount = child.columns.length;
657
+ var initGridColumn = gridColumnIndex;
658
+ Group.columns = [];
659
+ Group.children = child.children;
660
+ child.columns.forEach(function (child, j) {
661
+ var _Group$columns;
662
+ var isFirst = j === 0;
663
+ var isLast = j === childCount - 1;
664
+ var col = makeColumn(child, Group, isFirst, isLast);
665
+ if (i === 0 && j === 0 && data.some(function (d) {
666
+ return d[ACCORDION];
667
+ })) {
668
+ gridColumnIndex++;
669
+ col.gridArea = "2 / ".concat(gridColumnIndex - 1, " / 3 / ").concat(gridColumnIndex + 1);
560
670
  } else {
561
- dtRow = makeDtRow(childRow);
671
+ col.gridArea = "2 / ".concat(gridColumnIndex, " / 3 / ").concat(gridColumnIndex + 1);
562
672
  }
563
- innerRows.push(dtRow);
564
- rowIndex++;
673
+ col.gridArea = "2 / ".concat(gridColumnIndex, " / 3 / ").concat(gridColumnIndex + 1);
674
+ columnIndex++;
675
+ gridColumnIndex++;
676
+ calculatedColumns.push(col);
677
+ (_Group$columns = Group.columns) === null || _Group$columns === void 0 ? void 0 : _Group$columns.push(col);
565
678
  });
566
- rows.push(innerRows);
567
- } else {
568
- var dtRow = makeDtRow(row);
569
- rows.push(dtRow);
570
- rowIndex++;
679
+ treeColumns.push(Group);
680
+ _this3.gridAreaGroupMap.set(groupIndex, "1 / ".concat(initGridColumn, " / 2 / ").concat(gridColumnIndex));
681
+ groupIndex++;
571
682
  }
572
683
  });
573
- return rows;
684
+ return [calculatedColumns, treeColumns];
574
685
  }
575
686
  }, {
576
687
  key: "calculateGridTemplateColumn",
577
688
  value: function calculateGridTemplateColumn(c) {
578
- var _c$props$gtcWidth;
579
- return (_c$props$gtcWidth = c.props.gtcWidth) !== null && _c$props$gtcWidth !== void 0 ? _c$props$gtcWidth : this.props.defaultGridTemplateColumnWidth;
689
+ var _ref7;
690
+ return (_ref7 = /*#__PURE__*/React.isValidElement(c) ? c.props.gtcWidth : c.gtcWidth) !== null && _ref7 !== void 0 ? _ref7 : this.props.defaultGridTemplateColumnWidth;
580
691
  }
581
692
  }, {
582
693
  key: "getTopScrollOffset",
@@ -603,7 +714,6 @@ var DataTableRoot = /*#__PURE__*/function (_Component) {
603
714
  (0, _defineProperty2["default"])(DataTableRoot, "defaultProps", {
604
715
  use: 'primary',
605
716
  defaultGridTemplateColumnWidth: 'auto',
606
- h: 'auto',
607
717
  defaultExpandedRows: []
608
718
  });
609
719
  var DataTable = (0, _core.createComponent)(DataTableRoot, {