@revolist/revogrid 4.22.1 → 4.23.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (120) hide show
  1. package/dist/cjs/{cell-renderer-BQdEGQXP.js → cell-renderer-DWJ9Px9f.js} +9 -3
  2. package/dist/cjs/{column.drag.plugin-RDjQhKCH.js → column.drag.plugin-CaEBDG-Q.js} +391 -256
  3. package/dist/cjs/{column.service-DXYMehqK.js → column.service-f612L4ql.js} +1 -1
  4. package/dist/cjs/{dimension.helpers-CiiNnlLa.js → dimension.helpers-B9HgANnM.js} +14 -145
  5. package/dist/cjs/{edit.utils-CecCfA4E.js → edit.utils-pKeiYFLJ.js} +1 -1
  6. package/dist/cjs/{header-cell-renderer-DGyBrK8I.js → header-cell-renderer-4yq9_WbM.js} +1 -1
  7. package/dist/cjs/index-DxaSE5uZ.js +136 -0
  8. package/dist/cjs/index.cjs.js +37 -32
  9. package/dist/cjs/revo-grid.cjs.entry.js +35 -15
  10. package/dist/cjs/revogr-attribution_7.cjs.entry.js +43 -25
  11. package/dist/cjs/revogr-clipboard_3.cjs.entry.js +10 -8
  12. package/dist/cjs/revogr-data_4.cjs.entry.js +26 -17
  13. package/dist/cjs/revogr-filter-panel.cjs.entry.js +2 -1
  14. package/dist/cjs/{text-editor-DnLZW1a-.js → text-editor-B4W-m-r-.js} +3 -3
  15. package/dist/cjs/{throttle-CfgQFkfR.js → throttle-BCwEuJJq.js} +59 -24
  16. package/dist/cjs/viewport.helpers-BND76K2j.js +140 -0
  17. package/dist/cjs/{viewport.store-q6YdR9mg.js → viewport.store-BlKQ4x9H.js} +16 -16
  18. package/dist/collection/components/data/revogr-data.js +5 -3
  19. package/dist/collection/components/header/header-group-renderer.js +1 -1
  20. package/dist/collection/components/header/header-renderer.js +1 -1
  21. package/dist/collection/components/header/revogr-header-style.css +13 -3
  22. package/dist/collection/components/header/revogr-header.js +5 -2
  23. package/dist/collection/components/order/order-row.service.js +6 -5
  24. package/dist/collection/components/overlay/keyboard.service.js +23 -1
  25. package/dist/collection/components/overlay/selection.utils.js +8 -6
  26. package/dist/collection/components/revoGrid/revo-grid.js +6 -5
  27. package/dist/collection/components/revoGrid/viewport.service.js +2 -1
  28. package/dist/collection/components/scroll/revogr-viewport-scroll.js +10 -6
  29. package/dist/collection/components/scrollable/revogr-scroll-virtual.js +4 -10
  30. package/dist/collection/plugins/filter/filter.panel.js +2 -1
  31. package/dist/collection/plugins/filter/filter.plugin.js +11 -4
  32. package/dist/collection/plugins/groupingRow/grouping.row.plugin.js +25 -1
  33. package/dist/collection/plugins/moveColumn/column.drag.plugin.js +4 -4
  34. package/dist/collection/plugins/sorting/sorting.func.js +173 -15
  35. package/dist/collection/plugins/sorting/sorting.plugin.js +167 -84
  36. package/dist/collection/plugins/sorting/sorting.sign.js +7 -1
  37. package/dist/collection/serve/controller.js +98 -37
  38. package/dist/collection/serve/data.js +273 -144
  39. package/dist/collection/services/dimension.provider.js +16 -1
  40. package/dist/collection/services/local.scroll.service.js +59 -24
  41. package/dist/collection/services/scroll.dimension.helpers.js +83 -0
  42. package/dist/collection/services/selection.store.connector.js +4 -1
  43. package/dist/collection/store/dimension/dimension.recalculate.plugin.js +22 -9
  44. package/dist/collection/store/dimension/dimension.store.js +4 -2
  45. package/dist/collection/store/vp/viewport.helpers.js +9 -0
  46. package/dist/collection/store/vp/viewport.store.js +5 -16
  47. package/dist/collection/utils/store.utils.js +3 -3
  48. package/dist/{revo-grid/cell-renderer-CALsEsnh.js → esm/cell-renderer-8UiGd-s7.js} +9 -3
  49. package/dist/esm/{column.drag.plugin-Dy5ztusn.js → column.drag.plugin-BsfhsfmB.js} +388 -255
  50. package/dist/esm/{column.service-CCvAi5l4.js → column.service-DbpulTog.js} +1 -1
  51. package/dist/{revo-grid/debounce-BfO9dz9v.js → esm/debounce-PCRWZliA.js} +1 -1
  52. package/dist/{revo-grid/dimension.helpers-DmIvjIa7.js → esm/dimension.helpers-CGKwSvw6.js} +7 -128
  53. package/dist/esm/{edit.utils-DYN6XZh8.js → edit.utils-Dnnbd0xG.js} +1 -1
  54. package/dist/{revo-grid/header-cell-renderer-DU8wKAbg.js → esm/header-cell-renderer-DGI2FAD8.js} +1 -1
  55. package/dist/esm/index-Db3qZoW5.js +127 -0
  56. package/dist/esm/index.js +11 -10
  57. package/dist/esm/revo-grid.entry.js +34 -14
  58. package/dist/esm/revogr-attribution_7.entry.js +42 -24
  59. package/dist/esm/revogr-clipboard_3.entry.js +11 -9
  60. package/dist/esm/revogr-data_4.entry.js +27 -18
  61. package/dist/esm/revogr-filter-panel.entry.js +3 -2
  62. package/dist/esm/{text-editor-DpCnd6Fq.js → text-editor-C3RUSwH5.js} +2 -2
  63. package/dist/esm/{throttle-ERvyruXb.js → throttle-CaUDyxyU.js} +60 -25
  64. package/dist/esm/viewport.helpers-CoCAvmZs.js +133 -0
  65. package/dist/{revo-grid/viewport.store-CFjDW-3l.js → esm/viewport.store-COAfzAyu.js} +15 -17
  66. package/dist/{esm/cell-renderer-CALsEsnh.js → revo-grid/cell-renderer-8UiGd-s7.js} +9 -3
  67. package/dist/revo-grid/{column.drag.plugin-Dy5ztusn.js → column.drag.plugin-BsfhsfmB.js} +388 -255
  68. package/dist/revo-grid/{column.service-CCvAi5l4.js → column.service-DbpulTog.js} +1 -1
  69. package/dist/{esm/debounce-BfO9dz9v.js → revo-grid/debounce-PCRWZliA.js} +1 -1
  70. package/dist/{esm/dimension.helpers-DmIvjIa7.js → revo-grid/dimension.helpers-CGKwSvw6.js} +7 -128
  71. package/dist/revo-grid/{edit.utils-DYN6XZh8.js → edit.utils-Dnnbd0xG.js} +1 -1
  72. package/dist/{esm/header-cell-renderer-DU8wKAbg.js → revo-grid/header-cell-renderer-DGI2FAD8.js} +1 -1
  73. package/dist/revo-grid/index-Db3qZoW5.js +127 -0
  74. package/dist/revo-grid/index.esm.js +11 -10
  75. package/dist/revo-grid/revo-grid.entry.js +34 -14
  76. package/dist/revo-grid/revogr-attribution_7.entry.js +42 -24
  77. package/dist/revo-grid/revogr-clipboard_3.entry.js +11 -9
  78. package/dist/revo-grid/revogr-data_4.entry.js +27 -18
  79. package/dist/revo-grid/revogr-filter-panel.entry.js +3 -2
  80. package/dist/revo-grid/{text-editor-DpCnd6Fq.js → text-editor-C3RUSwH5.js} +2 -2
  81. package/dist/revo-grid/{throttle-ERvyruXb.js → throttle-CaUDyxyU.js} +60 -25
  82. package/dist/revo-grid/viewport.helpers-CoCAvmZs.js +133 -0
  83. package/dist/{esm/viewport.store-CFjDW-3l.js → revo-grid/viewport.store-COAfzAyu.js} +15 -17
  84. package/dist/types/components/header/header-group-renderer.d.ts +1 -0
  85. package/dist/types/components/header/header-renderer.d.ts +1 -0
  86. package/dist/types/components/overlay/keyboard.service.d.ts +5 -0
  87. package/dist/types/plugins/groupingRow/grouping.row.plugin.d.ts +8 -0
  88. package/dist/types/plugins/sorting/sorting.func.d.ts +25 -2
  89. package/dist/types/plugins/sorting/sorting.plugin.d.ts +84 -9
  90. package/dist/types/plugins/sorting/sorting.sign.d.ts +5 -1
  91. package/dist/types/plugins/sorting/sorting.types.d.ts +46 -1
  92. package/dist/types/services/local.scroll.service.d.ts +10 -2
  93. package/dist/types/services/scroll.dimension.helpers.d.ts +20 -0
  94. package/dist/types/store/vp/viewport.helpers.d.ts +2 -0
  95. package/dist/types/types/interfaces.d.ts +11 -0
  96. package/hydrate/index.js +649 -365
  97. package/hydrate/index.mjs +649 -365
  98. package/package.json +1 -1
  99. package/standalone/column.service.js +1 -1
  100. package/standalone/data.store.js +1 -1
  101. package/standalone/debounce.js +1 -1
  102. package/standalone/dimension.helpers.js +1 -1
  103. package/standalone/index.js +1 -1
  104. package/standalone/local.scroll.timer.js +1 -1
  105. package/standalone/revo-grid.js +1 -1
  106. package/standalone/revogr-data2.js +1 -1
  107. package/standalone/revogr-filter-panel.js +1 -1
  108. package/standalone/revogr-header2.js +1 -1
  109. package/standalone/revogr-order-editor2.js +1 -1
  110. package/standalone/revogr-overlay-selection2.js +1 -1
  111. package/standalone/revogr-row-headers.js +1 -1
  112. package/standalone/revogr-row-headers2.js +1 -1
  113. package/standalone/revogr-scroll-virtual2.js +1 -1
  114. package/standalone/revogr-viewport-scroll2.js +1 -1
  115. package/standalone/selection.utils.js +1 -1
  116. package/standalone/throttle.js +1 -1
  117. package/standalone/toNumber.js +1 -1
  118. package/dist/cjs/viewport.helpers-BAovztDd.js +0 -58
  119. package/dist/esm/viewport.helpers-VXhsJZtn.js +0 -52
  120. package/dist/revo-grid/viewport.helpers-VXhsJZtn.js +0 -52
@@ -4,14 +4,15 @@
4
4
  'use strict';
5
5
 
6
6
  var index = require('./index-Dq8Xzj5l.js');
7
- var dimension_helpers = require('./dimension.helpers-CiiNnlLa.js');
7
+ var dimension_helpers = require('./dimension.helpers-B9HgANnM.js');
8
8
  var events = require('./events-DeLDyZlb.js');
9
- var column_service = require('./column.service-DXYMehqK.js');
10
- var edit_utils = require('./edit.utils-CecCfA4E.js');
9
+ var column_service = require('./column.service-f612L4ql.js');
10
+ var edit_utils = require('./edit.utils-pKeiYFLJ.js');
11
+ var index$1 = require('./index-DxaSE5uZ.js');
11
12
  var debounce = require('./debounce-CcpHiH2p.js');
12
- var viewport_store = require('./viewport.store-q6YdR9mg.js');
13
- var viewport_helpers = require('./viewport.helpers-BAovztDd.js');
14
- var throttle = require('./throttle-CfgQFkfR.js');
13
+ var viewport_store = require('./viewport.store-BlKQ4x9H.js');
14
+ var viewport_helpers = require('./viewport.helpers-BND76K2j.js');
15
+ var throttle = require('./throttle-BCwEuJJq.js');
15
16
 
16
17
  const Attribution = class {
17
18
  constructor(hostRef) {
@@ -109,8 +110,8 @@ function getCurrentCell({ x, y }, { el, rows, cols }) {
109
110
  cellX = width - 1;
110
111
  }
111
112
  // Get the row and column items based on the cell position
112
- const rgRow = dimension_helpers.getItemByPosition(rows, cellY);
113
- const rgCol = dimension_helpers.getItemByPosition(cols, cellX);
113
+ const rgRow = dimension_helpers.getItemByPosition(rows, cellY + (rows.renderOffset || 0));
114
+ const rgCol = dimension_helpers.getItemByPosition(cols, cellX + (cols.renderOffset || 0));
114
115
  // Set the row and column index to 0 if they are before the first item
115
116
  if (rgCol.itemIndex < 0) {
116
117
  rgCol.itemIndex = 0;
@@ -180,10 +181,12 @@ function styleByCellProps(styles) {
180
181
  };
181
182
  }
182
183
  function getCell({ x, y, x1, y1 }, dimensionRow, dimensionCol) {
183
- const top = dimension_helpers.getItemByIndex(dimensionRow, y).start;
184
- const left = dimension_helpers.getItemByIndex(dimensionCol, x).start;
185
- const bottom = dimension_helpers.getItemByIndex(dimensionRow, y1).end;
186
- const right = dimension_helpers.getItemByIndex(dimensionCol, x1).end;
184
+ const rowOffset = dimensionRow.renderOffset || 0;
185
+ const colOffset = dimensionCol.renderOffset || 0;
186
+ const top = dimension_helpers.getItemByIndex(dimensionRow, y).start - rowOffset;
187
+ const left = dimension_helpers.getItemByIndex(dimensionCol, x).start - colOffset;
188
+ const bottom = dimension_helpers.getItemByIndex(dimensionRow, y1).end - rowOffset;
189
+ const right = dimension_helpers.getItemByIndex(dimensionCol, x1).end - colOffset;
187
190
  return {
188
191
  left,
189
192
  right,
@@ -281,9 +284,29 @@ class KeyboardService {
281
284
  constructor(sv) {
282
285
  this.sv = sv;
283
286
  }
287
+ /**
288
+ * Appends printable key input that arrives after edit mode was requested
289
+ * but before the editor input has mounted or received focus.
290
+ */
291
+ appendPendingEditValue(e) {
292
+ if (edit_utils.isShortcutModifier(e) ||
293
+ e.key.length !== 1 ||
294
+ (e.target instanceof HTMLElement && edit_utils.isEditInput(e.target))) {
295
+ return false;
296
+ }
297
+ const editCell = this.sv.selectionStore.get('edit');
298
+ if (typeof (editCell === null || editCell === void 0 ? void 0 : editCell.val) !== 'string') {
299
+ return false;
300
+ }
301
+ this.sv.selectionStore.set('edit', Object.assign(Object.assign({}, editCell), { val: `${editCell.val}${e.key}` }));
302
+ return true;
303
+ }
284
304
  async keyDown(e, canRange, isEditMode, { range, focus }) {
285
305
  // IF EDIT MODE
286
306
  if (isEditMode) {
307
+ if (this.appendPendingEditValue(e)) {
308
+ return;
309
+ }
287
310
  switch (e.code) {
288
311
  case dimension_helpers.codesLetter.ESCAPE:
289
312
  this.sv.cancel();
@@ -362,7 +385,7 @@ class KeyboardService {
362
385
  // this interval needed for several cases
363
386
  // grid could be resized before next click
364
387
  // at this case to avoid screen jump we use this interval
365
- await dimension_helpers.timeout(dimension_helpers.RESIZE_INTERVAL + 30);
388
+ await index$1.timeout(dimension_helpers.RESIZE_INTERVAL + 30);
366
389
  const range = this.sv.selectionStore.get('range');
367
390
  const focus = this.sv.selectionStore.get('focus');
368
391
  return this.keyPositionChange(data.changes, range, focus, data.isMulti);
@@ -377,7 +400,8 @@ class KeyboardService {
377
400
  }
378
401
  const eData = this.sv.getData();
379
402
  if (isMulti) {
380
- if (isAfterLast(data.end, eData.lastCell) || isBeforeFirst(data.start)) {
403
+ const isOutOfBounds = [data.start, data.end].some(cell => isAfterLast(cell, eData.lastCell) || isBeforeFirst(cell));
404
+ if (isOutOfBounds) {
381
405
  return false;
382
406
  }
383
407
  const range = column_service.getRange(data.start, data.end);
@@ -1288,15 +1312,9 @@ const RevogrScrollVirtual = class {
1288
1312
  */
1289
1313
  async changeScroll(e) {
1290
1314
  if (e.delta) {
1291
- switch (e.dimension) {
1292
- case 'rgCol':
1293
- e.coordinate = this.element.scrollLeft + e.delta;
1294
- break;
1295
- case 'rgRow':
1296
- e.coordinate = this.element.scrollTop + e.delta;
1297
- break;
1298
- }
1299
- this.setScroll(e);
1315
+ const scrollProperty = e.dimension === 'rgRow' ? 'scrollTop' : 'scrollLeft';
1316
+ const currentPhysicalCoordinate = this.element[scrollProperty];
1317
+ return this.localScrollService.setScrollByDelta(e, currentPhysicalCoordinate);
1300
1318
  }
1301
1319
  return e;
1302
1320
  }
@@ -1317,7 +1335,7 @@ const RevogrScrollVirtual = class {
1317
1335
  this.autohideScrollPlugin.clear();
1318
1336
  }
1319
1337
  componentWillLoad() {
1320
- this.scrollSize = dimension_helpers.getScrollbarSize(document);
1338
+ this.scrollSize = index$1.getScrollbarSize(document);
1321
1339
  }
1322
1340
  componentDidRender() {
1323
1341
  let scrollSize = 0;
@@ -1359,7 +1377,7 @@ const RevogrScrollVirtual = class {
1359
1377
  }
1360
1378
  render() {
1361
1379
  const size = throttle.getContentSize(this.realSize, this.dimension === 'rgRow' ? this.element.clientHeight : this.element.clientWidth, this.clientSize);
1362
- return (index.h(index.Host, { key: '57f81ec9deb2395e96b283338c03b9ad44f1e929', onScroll: (e) => this.onScroll(e) }, index.h("div", { key: '1a8c869adab53b362c351dae8d53664f33c4212c', style: {
1380
+ return (index.h(index.Host, { key: '7213817ef941eee4050b714266598ec0c2961ee9', onScroll: (e) => this.onScroll(e) }, index.h("div", { key: '501da49c63253ab943172494b9dbf5399be56cee', style: {
1363
1381
  [this.dimension === 'rgRow' ? 'height' : 'width']: `${size}px`,
1364
1382
  } })));
1365
1383
  }
@@ -4,10 +4,11 @@
4
4
  'use strict';
5
5
 
6
6
  var index = require('./index-Dq8Xzj5l.js');
7
- var dimension_helpers = require('./dimension.helpers-CiiNnlLa.js');
8
- var textEditor = require('./text-editor-DnLZW1a-.js');
9
- var edit_utils = require('./edit.utils-CecCfA4E.js');
7
+ var dimension_helpers = require('./dimension.helpers-B9HgANnM.js');
8
+ var textEditor = require('./text-editor-B4W-m-r-.js');
9
+ var edit_utils = require('./edit.utils-pKeiYFLJ.js');
10
10
  var debounce = require('./debounce-CcpHiH2p.js');
11
+ require('./index-DxaSE5uZ.js');
11
12
 
12
13
  const Clipboard = class {
13
14
  constructor(hostRef) {
@@ -334,11 +335,12 @@ class RowOrderService {
334
335
  getRow(y, { el, rows }) {
335
336
  const { top } = el.getBoundingClientRect();
336
337
  const topRelative = y - top;
337
- const rgRow = dimension_helpers.getItemByPosition(rows, topRelative);
338
+ const rowOffset = rows.renderOffset || 0;
339
+ const rgRow = dimension_helpers.getItemByPosition(rows, topRelative + rowOffset);
338
340
  const absolutePosition = {
339
341
  itemIndex: rgRow.itemIndex,
340
- start: rgRow.start + top,
341
- end: rgRow.end + top,
342
+ start: rgRow.start - rowOffset + top,
343
+ end: rgRow.end - rowOffset + top,
342
344
  };
343
345
  return absolutePosition;
344
346
  }
@@ -347,8 +349,8 @@ class RowOrderService {
347
349
  const { top, left } = el.getBoundingClientRect();
348
350
  const topRelative = y - top;
349
351
  const leftRelative = x - left;
350
- const rgRow = dimension_helpers.getItemByPosition(rows, topRelative);
351
- const rgCol = dimension_helpers.getItemByPosition(cols, leftRelative);
352
+ const rgRow = dimension_helpers.getItemByPosition(rows, topRelative + (rows.renderOffset || 0));
353
+ const rgCol = dimension_helpers.getItemByPosition(cols, leftRelative + (cols.renderOffset || 0));
352
354
  return { x: rgCol.itemIndex, y: rgRow.itemIndex };
353
355
  }
354
356
  }
@@ -4,13 +4,13 @@
4
4
  'use strict';
5
5
 
6
6
  var index = require('./index-Dq8Xzj5l.js');
7
- var column_service = require('./column.service-DXYMehqK.js');
8
- var dimension_helpers = require('./dimension.helpers-CiiNnlLa.js');
9
- var cellRenderer = require('./cell-renderer-BQdEGQXP.js');
7
+ var column_service = require('./column.service-f612L4ql.js');
8
+ var dimension_helpers = require('./dimension.helpers-B9HgANnM.js');
9
+ var cellRenderer = require('./cell-renderer-DWJ9Px9f.js');
10
10
  var filter_button = require('./filter.button-w6LWnyhi.js');
11
- var headerCellRenderer = require('./header-cell-renderer-DGyBrK8I.js');
12
- var throttle = require('./throttle-CfgQFkfR.js');
13
- var viewport_helpers = require('./viewport.helpers-BAovztDd.js');
11
+ var headerCellRenderer = require('./header-cell-renderer-4yq9_WbM.js');
12
+ var throttle = require('./throttle-BCwEuJJq.js');
13
+ var viewport_helpers = require('./viewport.helpers-BND76K2j.js');
14
14
  require('./debounce-CcpHiH2p.js');
15
15
 
16
16
  /**
@@ -170,11 +170,13 @@ const RevogrData = class {
170
170
  const depth = this.dataStore.get('groupingDepth');
171
171
  const groupingCustomRenderer = this.dataStore.get('groupingCustomRenderer');
172
172
  const groupDepth = this.columnService.hasGrouping ? depth : 0;
173
+ const rowRenderOffset = this.viewportRow.get('renderOffset') || 0;
174
+ const colRenderOffset = this.viewportCol.get('renderOffset') || 0;
173
175
  for (let rgRow of rows) {
174
176
  const dataItem = dimension_helpers.getSourceItem(this.dataStore, rgRow.itemIndex);
175
177
  // #region Grouping
176
178
  if (column_service.isGrouping(dataItem)) {
177
- const gmodel = Object.assign(Object.assign({}, rgRow), { index: rgRow.itemIndex, model: dataItem, groupingCustomRenderer,
179
+ const gmodel = Object.assign(Object.assign({}, rgRow), { start: rgRow.start - rowRenderOffset, index: rgRow.itemIndex, model: dataItem, groupingCustomRenderer,
178
180
  // Only show expand button if grouping is enabled and not in row headers
179
181
  hasExpand: this.columnService.hasGrouping && this.colType !== 'rowHeaders', columnItems: cols, providers: this.providers });
180
182
  rowsEls.push(index.h(cellRenderer.GroupingRowRenderer, Object.assign({}, gmodel)));
@@ -197,7 +199,7 @@ const RevogrData = class {
197
199
  [dimension_helpers.DATA_ROW]: rowProps.itemIndex,
198
200
  style: {
199
201
  width: `${columnProps.size}px`,
200
- transform: `translateX(${columnProps.start}px)`,
202
+ transform: `translateX(${columnProps.start - colRenderOffset}px)`,
201
203
  height: rowProps.size ? `${rowProps.size}px` : undefined,
202
204
  },
203
205
  };
@@ -225,7 +227,7 @@ const RevogrData = class {
225
227
  if (this.rowHighlightPlugin.isRowFocused(rgRow.itemIndex)) {
226
228
  rowClass += ` ${dimension_helpers.ROW_FOCUSED_CLASS}`;
227
229
  }
228
- const row = (index.h(cellRenderer.RowRenderer, { index: rgRow.itemIndex, rowClass: rowClass, size: rgRow.size, start: rgRow.start, groupingLevel: groupDepth || undefined }, cells));
230
+ const row = (index.h(cellRenderer.RowRenderer, { index: rgRow.itemIndex, rowClass: rowClass, size: rgRow.size, start: rgRow.start - rowRenderOffset, groupingLevel: groupDepth || undefined }, cells));
229
231
  this.beforerowrender.emit({
230
232
  node: row,
231
233
  item: rgRow,
@@ -280,7 +282,7 @@ const HeaderRenderer = (p) => {
280
282
  class: cellClass,
281
283
  style: {
282
284
  width: `${p.column.size}px`,
283
- transform: `translateX(${p.column.start}px)`,
285
+ transform: `translateX(${p.column.start - (p.renderOffset || 0)}px)`,
284
286
  },
285
287
  onResize: p.onResize,
286
288
  onDblClick(originalEvent) {
@@ -325,7 +327,7 @@ const HeaderGroupRenderer = (p) => {
325
327
  [dimension_helpers.HEADER_CLASS]: true,
326
328
  },
327
329
  style: {
328
- transform: `translateX(${p.start}px)`,
330
+ transform: `translateX(${p.start - (p.renderOffset || 0)}px)`,
329
331
  width: `${p.end - p.start}px`,
330
332
  },
331
333
  onResize: p.onResize,
@@ -333,7 +335,7 @@ const HeaderGroupRenderer = (p) => {
333
335
  return (index.h(headerCellRenderer.HeaderCellRenderer, { data: Object.assign(Object.assign({}, p.group), { prop: '', providers: p.providers, index: p.start }), props: groupProps, additionalData: p.additionalData }));
334
336
  };
335
337
 
336
- const revogrHeaderStyleCss = () => `@charset "UTF-8";revogr-header{position:relative;z-index:5;display:block}revogr-header .header-rgRow{display:block;position:relative}revogr-header .header-rgRow.group{z-index:0}revogr-header .group-rgRow{position:relative;overflow:hidden}revogr-header .rgHeaderCell{position:absolute;box-sizing:border-box;height:100%;z-index:1;display:flex}revogr-header .rgHeaderCell.align-center{text-align:center}revogr-header .rgHeaderCell.align-left{text-align:left}revogr-header .rgHeaderCell.align-right{text-align:right}revogr-header .rgHeaderCell.sortable{cursor:pointer}revogr-header .rgHeaderCell i.asc:after,revogr-header .rgHeaderCell i.desc:after{font-size:13px}revogr-header .rgHeaderCell i.asc:after{content:"↑"}revogr-header .rgHeaderCell i.desc:after{content:"↓"}revogr-header .rgHeaderCell.active{z-index:10}revogr-header .rgHeaderCell.active .resizable{background-color:deepskyblue}revogr-header .rgHeaderCell .header-content{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;flex-grow:1}revogr-header .rgHeaderCell .resizable{display:block;position:absolute;z-index:90;touch-action:none;user-select:none}revogr-header .rgHeaderCell .resizable:hover{background-color:deepskyblue}revogr-header .rgHeaderCell>.resizable-r{cursor:ew-resize;width:6px;right:0;top:0;height:100%}revogr-header .rgHeaderCell>.resizable-rb{cursor:se-resize;width:6px;height:6px;right:0;bottom:0}revogr-header .rgHeaderCell>.resizable-b{cursor:s-resize;height:6px;bottom:0;width:100%;left:0}revogr-header .rgHeaderCell>.resizable-lb{cursor:sw-resize;width:6px;height:6px;left:0;bottom:0}revogr-header .rgHeaderCell>.resizable-l{cursor:w-resize;width:6px;left:0;height:100%;top:0}revogr-header .rgHeaderCell>.resizable-lt{cursor:nw-resize;width:6px;height:6px;left:0;top:0}revogr-header .rgHeaderCell>.resizable-t{cursor:n-resize;height:6px;top:0;width:100%;left:0}revogr-header .rgHeaderCell>.resizable-rt{cursor:ne-resize;width:6px;height:6px;right:0;top:0}revogr-header .rv-filter{visibility:hidden}`;
338
+ const revogrHeaderStyleCss = () => `@charset "UTF-8";revogr-header{position:relative;z-index:5;display:block}revogr-header .header-rgRow{display:block;position:relative}revogr-header .header-rgRow.group{z-index:0}revogr-header .group-rgRow{position:relative;overflow:hidden}revogr-header .rgHeaderCell{position:absolute;box-sizing:border-box;height:100%;z-index:1;display:flex}revogr-header .rgHeaderCell.align-center{text-align:center}revogr-header .rgHeaderCell.align-left{text-align:left}revogr-header .rgHeaderCell.align-right{text-align:right}revogr-header .rgHeaderCell.sortable{cursor:pointer}revogr-header .rgHeaderCell .sort-indicator{display:inline-flex;align-items:flex-start;gap:1px}revogr-header .rgHeaderCell .sort-indicator i.asc:after,revogr-header .rgHeaderCell .sort-indicator i.desc:after{font-size:13px}revogr-header .rgHeaderCell .sort-indicator i.asc:after{content:"↑"}revogr-header .rgHeaderCell .sort-indicator i.desc:after{content:"↓"}revogr-header .rgHeaderCell .sort-indicator .sort-order-index{font-size:10px;line-height:1;top:0}revogr-header .rgHeaderCell.active{z-index:10}revogr-header .rgHeaderCell.active .resizable{background-color:deepskyblue}revogr-header .rgHeaderCell .header-content{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;flex-grow:1}revogr-header .rgHeaderCell .resizable{display:block;position:absolute;z-index:90;touch-action:none;user-select:none}revogr-header .rgHeaderCell .resizable:hover{background-color:deepskyblue}revogr-header .rgHeaderCell>.resizable-r{cursor:ew-resize;width:6px;right:0;top:0;height:100%}revogr-header .rgHeaderCell>.resizable-rb{cursor:se-resize;width:6px;height:6px;right:0;bottom:0}revogr-header .rgHeaderCell>.resizable-b{cursor:s-resize;height:6px;bottom:0;width:100%;left:0}revogr-header .rgHeaderCell>.resizable-lb{cursor:sw-resize;width:6px;height:6px;left:0;bottom:0}revogr-header .rgHeaderCell>.resizable-l{cursor:w-resize;width:6px;left:0;height:100%;top:0}revogr-header .rgHeaderCell>.resizable-lt{cursor:nw-resize;width:6px;height:6px;left:0;top:0}revogr-header .rgHeaderCell>.resizable-t{cursor:n-resize;height:6px;top:0;width:100%;left:0}revogr-header .rgHeaderCell>.resizable-rt{cursor:ne-resize;width:6px;height:6px;right:0;top:0}revogr-header .rv-filter{visibility:hidden}`;
337
339
 
338
340
  const RevogrHeaderComponent = class {
339
341
  constructor(hostRef) {
@@ -389,6 +391,7 @@ const RevogrHeaderComponent = class {
389
391
  }
390
392
  renderHeaderColumns(cols, range) {
391
393
  const columnsToRender = [];
394
+ const renderOffset = this.viewportCol.get('renderOffset') || 0;
392
395
  for (let rgCol of cols) {
393
396
  const colData = this.colData[rgCol.itemIndex];
394
397
  const props = {
@@ -397,6 +400,7 @@ const RevogrHeaderComponent = class {
397
400
  data: Object.assign(Object.assign({}, colData), { index: rgCol.itemIndex, providers: this.providers }),
398
401
  canFilter: !!this.columnFilter,
399
402
  canResize: this.canResize,
403
+ renderOffset,
400
404
  active: this.resizeHandler,
401
405
  additionalData: this.additionalData,
402
406
  onResize: e => this.onResize(e, rgCol.itemIndex),
@@ -449,6 +453,7 @@ const RevogrHeaderComponent = class {
449
453
  start: groupStart,
450
454
  end: groupEnd,
451
455
  group,
456
+ renderOffset: this.viewportCol.get('renderOffset') || 0,
452
457
  active: this.resizeHandler,
453
458
  canResize: this.canResize,
454
459
  additionalData: this.additionalData,
@@ -603,7 +608,7 @@ const RevogrViewportScroll = class {
603
608
  * @param e
604
609
  */
605
610
  async changeScroll(e, silent = false) {
606
- var _a, _b;
611
+ var _a, _b, _c, _d;
607
612
  if (silent) {
608
613
  if (e.coordinate && this.verticalScroll) {
609
614
  switch (e.dimension) {
@@ -616,15 +621,16 @@ const RevogrViewportScroll = class {
616
621
  return;
617
622
  }
618
623
  if (e.delta) {
624
+ let currentPhysicalCoordinate = 0;
619
625
  switch (e.dimension) {
620
626
  case 'rgCol':
621
- e.coordinate = this.horizontalScroll.scrollLeft + e.delta;
627
+ currentPhysicalCoordinate = this.horizontalScroll.scrollLeft;
622
628
  break;
623
629
  case 'rgRow':
624
- e.coordinate = ((_b = (_a = this.verticalScroll) === null || _a === void 0 ? void 0 : _a.scrollTop) !== null && _b !== void 0 ? _b : 0) + e.delta;
630
+ currentPhysicalCoordinate = (_b = (_a = this.verticalScroll) === null || _a === void 0 ? void 0 : _a.scrollTop) !== null && _b !== void 0 ? _b : 0;
625
631
  break;
626
632
  }
627
- this.setScroll(e);
633
+ return (_d = (_c = this.localScrollService) === null || _c === void 0 ? void 0 : _c.setScrollByDelta(e, currentPhysicalCoordinate)) !== null && _d !== void 0 ? _d : e;
628
634
  }
629
635
  return e;
630
636
  }
@@ -776,7 +782,10 @@ const RevogrViewportScroll = class {
776
782
  this.setScrollVisibility('rgCol', this.horizontalScroll.clientWidth, this.contentWidth);
777
783
  }
778
784
  render() {
779
- return (index.h(index.Host, { key: 'adc7378dba1794ca2ec263d52b09abefe50bcbfd', onWheel: this.horizontalMouseWheel, onScroll: (e) => this.applyScroll('rgCol', e) }, index.h("div", { key: '7b57a8a0ea44629fefcfe4d2cd77bf0f048d8e06', class: "inner-content-table", style: { width: `${this.contentWidth}px` } }, index.h("div", { key: 'cca3de158bc2a7f0651f578a281819be5698b257', class: "header-wrapper", ref: e => (this.header = e) }, index.h("slot", { key: '1d170147dabe034f2c35481a8e2fedd6de2b6aed', name: viewport_helpers.HEADER_SLOT })), index.h("div", { key: 'b6dd29a91bb1f380a83a035dfdb749ca669936f2', class: "vertical-inner", ref: el => (this.verticalScroll = el), onWheel: this.verticalMouseWheel, onScroll: (e) => this.applyScroll('rgRow', e) }, index.h("div", { key: '9bce27bf8ec4d3b679aa9a34eb6379a8c2d46cac', class: "content-wrapper", style: { height: `${this.contentHeight}px` } }, index.h("slot", { key: 'b44a082c9fbb948fd87bd235b4cd4356fd4a3536', name: viewport_helpers.CONTENT_SLOT }))), index.h("div", { key: '28c305ff6bc664f1d1bbb117e8b8565c8d4bb6b2', class: "footer-wrapper", ref: e => (this.footer = e) }, index.h("slot", { key: '96312fb7f18198fd1feb9dcc00c79cde74ba9c9f', name: viewport_helpers.FOOTER_SLOT })))));
785
+ var _a, _b, _c, _d;
786
+ const physicalContentHeight = throttle.getContentSize(this.contentHeight, (_b = (_a = this.verticalScroll) === null || _a === void 0 ? void 0 : _a.clientHeight) !== null && _b !== void 0 ? _b : 0);
787
+ const physicalContentWidth = throttle.getContentSize(this.contentWidth, (_d = (_c = this.horizontalScroll) === null || _c === void 0 ? void 0 : _c.clientWidth) !== null && _d !== void 0 ? _d : 0);
788
+ return (index.h(index.Host, { key: 'a0c47dede9d131dea8c8ca449e8a323f24d9b113', onWheel: this.horizontalMouseWheel, onScroll: (e) => this.applyScroll('rgCol', e) }, index.h("div", { key: '6c960e753ffe522ba4afb1c379264873b6c617f3', class: "inner-content-table", style: { width: `${physicalContentWidth}px` } }, index.h("div", { key: '1a6cbcbd3634e84756b54c8150aebd25c824e14a', class: "header-wrapper", ref: e => (this.header = e) }, index.h("slot", { key: 'e4202c687bc39b4f78f3ed9840e979b032f06af8', name: viewport_helpers.HEADER_SLOT })), index.h("div", { key: '651415b5b32e72735065b183317386a34042bb85', class: "vertical-inner", ref: el => (this.verticalScroll = el), onWheel: this.verticalMouseWheel, onScroll: (e) => this.applyScroll('rgRow', e) }, index.h("div", { key: 'e65623b78d80957d8676adb019618953ef267ec3', class: "content-wrapper", style: { height: `${physicalContentHeight}px` } }, index.h("slot", { key: '5af47b12ef1226587cf774233447b5252d65e836', name: viewport_helpers.CONTENT_SLOT }))), index.h("div", { key: 'cbc0fd64fbfb53d3b18e547bbe34e32b7bb9c043', class: "footer-wrapper", ref: e => (this.footer = e) }, index.h("slot", { key: 'a8e4bfaef400973121090bac3069eb85469a95f3', name: viewport_helpers.FOOTER_SLOT })))));
780
789
  }
781
790
  /**
782
791
  * Extra layer for scroll event monitoring, where MouseWheel event is not passing
@@ -269,7 +269,8 @@ const FilterPanel = class {
269
269
  const options = [];
270
270
  const prop = this.changes.prop;
271
271
  const hidden = new Set();
272
- Object.entries(this.filterItems).forEach(([_, values]) => {
272
+ Object.keys(this.filterItems).forEach((prop) => {
273
+ const values = this.filterItems[prop];
273
274
  values.forEach((filter) => {
274
275
  if (filter.hidden) {
275
276
  hidden.add(filter.type);
@@ -3,8 +3,8 @@
3
3
  */
4
4
  'use strict';
5
5
 
6
- var edit_utils = require('./edit.utils-CecCfA4E.js');
7
- var dimension_helpers = require('./dimension.helpers-CiiNnlLa.js');
6
+ var edit_utils = require('./edit.utils-pKeiYFLJ.js');
7
+ var index = require('./index-DxaSE5uZ.js');
8
8
 
9
9
  class TextEditor {
10
10
  constructor(data, saveCallback) {
@@ -20,7 +20,7 @@ class TextEditor {
20
20
  async componentDidRender() {
21
21
  var _a;
22
22
  if (this.editInput) {
23
- await dimension_helpers.timeout();
23
+ await index.timeout();
24
24
  (_a = this.editInput) === null || _a === void 0 ? void 0 : _a.focus();
25
25
  }
26
26
  }
@@ -3,7 +3,7 @@
3
3
  */
4
4
  'use strict';
5
5
 
6
- var dimension_helpers = require('./dimension.helpers-CiiNnlLa.js');
6
+ var viewport_helpers = require('./viewport.helpers-BND76K2j.js');
7
7
  var debounce = require('./debounce-CcpHiH2p.js');
8
8
 
9
9
  const initialParams = {
@@ -18,10 +18,11 @@ const NO_COORDINATE = -1;
18
18
  * return full size
19
19
  */
20
20
  function getContentSize(contentSize, clientSize, virtualSize = 0) {
21
- if (virtualSize > contentSize) {
22
- return 0;
23
- }
24
- return contentSize + (virtualSize ? clientSize - virtualSize : 0);
21
+ return viewport_helpers.getScrollDimension({
22
+ contentSize,
23
+ clientSize,
24
+ virtualSize,
25
+ }).physicalContentSize;
25
26
  }
26
27
  class LocalScrollService {
27
28
  constructor(cfg) {
@@ -35,14 +36,20 @@ class LocalScrollService {
35
36
  rgRow: NO_COORDINATE,
36
37
  rgCol: NO_COORDINATE,
37
38
  };
39
+ this.previousLogicalScroll = {
40
+ rgRow: 0,
41
+ rgCol: 0,
42
+ };
38
43
  this.params = {
39
44
  rgRow: Object.assign({}, initialParams),
40
45
  rgCol: Object.assign({}, initialParams),
41
46
  };
42
47
  }
43
48
  setParams(params, dimension) {
44
- const virtualContentSize = getContentSize(params.contentSize, params.clientSize, params.virtualSize);
45
- this.params[dimension] = Object.assign(Object.assign({}, params), { maxSize: virtualContentSize - params.clientSize, virtualContentSize });
49
+ const scrollDimension = viewport_helpers.getScrollDimension(params);
50
+ const virtualContentSize = scrollDimension.physicalContentSize;
51
+ this.params[dimension] = Object.assign(Object.assign({}, params), { maxSize: virtualContentSize - params.clientSize, virtualContentSize,
52
+ scrollDimension });
46
53
  }
47
54
  // apply scroll values after scroll done
48
55
  async setScroll(e) {
@@ -62,16 +69,27 @@ class LocalScrollService {
62
69
  await frameAnimation;
63
70
  const params = this.getParams(e.dimension);
64
71
  e.coordinate = Math.ceil(e.coordinate);
65
- this.previousScroll[e.dimension] = this.wrapCoordinate(e.coordinate, params);
72
+ this.previousLogicalScroll[e.dimension] = this.wrapLogicalCoordinate(e.coordinate, params);
73
+ const physicalCoordinate = this.toPhysicalCoordinate(e.coordinate, params);
74
+ this.previousScroll[e.dimension] = this.wrapPhysicalCoordinate(physicalCoordinate, params);
66
75
  this.preventArtificialScroll[e.dimension] = null;
67
- this.cfg.applyScroll(Object.assign(Object.assign({}, e), { coordinate: params.virtualSize
68
- ? this.convert(e.coordinate, params, false)
69
- : e.coordinate }));
76
+ this.cfg.applyScroll(Object.assign(Object.assign({}, e), { coordinate: physicalCoordinate }));
70
77
  }
71
78
  catch (id) {
72
79
  window.cancelAnimationFrame(id);
73
80
  }
74
81
  }
82
+ async setScrollByDelta(e, currentPhysicalCoordinate) {
83
+ var _a;
84
+ const params = this.getParams(e.dimension);
85
+ const baseCoordinate = this.previousScroll[e.dimension] === NO_COORDINATE
86
+ ? this.toLogicalCoordinate(currentPhysicalCoordinate, params)
87
+ : this.previousLogicalScroll[e.dimension];
88
+ const coordinate = this.wrapLogicalCoordinate(baseCoordinate + ((_a = e.delta) !== null && _a !== void 0 ? _a : 0), params);
89
+ const nextEvent = Object.assign(Object.assign({}, e), { coordinate });
90
+ await this.setScroll(nextEvent);
91
+ return nextEvent;
92
+ }
75
93
  /**
76
94
  * On scroll event started
77
95
  */
@@ -84,21 +102,21 @@ class LocalScrollService {
84
102
  return;
85
103
  }
86
104
  const param = this.getParams(dimension);
105
+ const logicalCoordinate = this.toLogicalScrollCoordinate(coordinate, dimension, param, delta);
87
106
  // let component know about scroll event started
88
107
  this.cfg.runScroll({
89
108
  dimension: dimension,
90
- coordinate: param.virtualSize
91
- ? this.convert(coordinate, param)
92
- : coordinate,
109
+ coordinate: logicalCoordinate,
93
110
  delta,
94
111
  outside,
95
112
  });
113
+ this.previousLogicalScroll[dimension] = logicalCoordinate;
96
114
  }
97
115
  getParams(dimension) {
98
116
  return this.params[dimension];
99
117
  }
100
118
  // check if scroll outside of region to avoid looping
101
- wrapCoordinate(c, param) {
119
+ wrapPhysicalCoordinate(c, param) {
102
120
  if (c < 0) {
103
121
  return NO_COORDINATE;
104
122
  }
@@ -107,22 +125,39 @@ class LocalScrollService {
107
125
  }
108
126
  return c;
109
127
  }
128
+ wrapLogicalCoordinate(c, param) {
129
+ var _a, _b;
130
+ if (c < 0) {
131
+ return 0;
132
+ }
133
+ return Math.min(c, (_b = (_a = param.scrollDimension) === null || _a === void 0 ? void 0 : _a.logicalScrollSize) !== null && _b !== void 0 ? _b : c);
134
+ }
110
135
  // prevent already started scroll, performance optimization
111
136
  cancelScroll(dimension) {
112
137
  var _a, _b;
113
138
  (_b = (_a = this.preventArtificialScroll)[dimension]) === null || _b === void 0 ? void 0 : _b.call(_a);
114
139
  this.preventArtificialScroll[dimension] = null;
115
140
  }
116
- /* convert virtual to real and back, scale range */
117
- convert(pos, param, toReal = true) {
118
- var _a;
119
- const minRange = param.clientSize;
120
- const from = [0, ((_a = param.virtualContentSize) !== null && _a !== void 0 ? _a : minRange) - minRange];
121
- const to = [0, param.contentSize - param.virtualSize];
122
- if (toReal) {
123
- return dimension_helpers.scaleValue(pos, from, to);
141
+ toLogicalScrollCoordinate(coordinate, dimension, param, delta) {
142
+ const scrollDimension = param.scrollDimension;
143
+ if (!scrollDimension) {
144
+ return coordinate;
145
+ }
146
+ if (typeof delta === 'number' && scrollDimension.isCompressed) {
147
+ const base = this.previousScroll[dimension] === NO_COORDINATE
148
+ ? scrollDimension.toLogicalCoordinate(coordinate - delta)
149
+ : this.previousLogicalScroll[dimension];
150
+ return scrollDimension.toLogicalCoordinate(scrollDimension.toPhysicalCoordinate(base + delta));
124
151
  }
125
- return dimension_helpers.scaleValue(pos, to, from);
152
+ return scrollDimension.toLogicalCoordinate(coordinate);
153
+ }
154
+ toPhysicalCoordinate(coordinate, param) {
155
+ var _a, _b;
156
+ return (_b = (_a = param.scrollDimension) === null || _a === void 0 ? void 0 : _a.toPhysicalCoordinate(coordinate)) !== null && _b !== void 0 ? _b : coordinate;
157
+ }
158
+ toLogicalCoordinate(coordinate, param) {
159
+ var _a, _b;
160
+ return (_b = (_a = param.scrollDimension) === null || _a === void 0 ? void 0 : _a.toLogicalCoordinate(coordinate)) !== null && _b !== void 0 ? _b : coordinate;
126
161
  }
127
162
  }
128
163
 
@@ -0,0 +1,140 @@
1
+ /*!
2
+ * Built by Revolist OU ❤️
3
+ */
4
+ 'use strict';
5
+
6
+ const FALLBACK_MAX_SCROLL_SIZE = 16000000;
7
+ const SCROLL_SIZE_GUARD = 1000000;
8
+ let detectedMaxScrollSize;
9
+ function getMaxScrollSize(doc = typeof document === 'undefined' ? undefined : document) {
10
+ if (typeof detectedMaxScrollSize === 'number') {
11
+ return detectedMaxScrollSize;
12
+ }
13
+ const body = doc === null || doc === void 0 ? void 0 : doc.body;
14
+ if (body) {
15
+ const ownerDocument = body.ownerDocument;
16
+ const element = ownerDocument.createElement('div');
17
+ element.style.cssText = [
18
+ 'height:1px',
19
+ 'left:-10000px',
20
+ 'overflow:scroll',
21
+ 'position:absolute',
22
+ 'top:-10000px',
23
+ 'visibility:hidden',
24
+ 'width:1px',
25
+ ].join(';');
26
+ const content = ownerDocument.createElement('div');
27
+ content.style.height = `${FALLBACK_MAX_SCROLL_SIZE * 4}px`;
28
+ element.appendChild(content);
29
+ body.appendChild(element);
30
+ detectedMaxScrollSize = Math.max(0, Math.min(element.scrollHeight, FALLBACK_MAX_SCROLL_SIZE * 4) - SCROLL_SIZE_GUARD);
31
+ element.remove();
32
+ if (detectedMaxScrollSize > SCROLL_SIZE_GUARD) {
33
+ return detectedMaxScrollSize;
34
+ }
35
+ detectedMaxScrollSize = FALLBACK_MAX_SCROLL_SIZE;
36
+ return detectedMaxScrollSize;
37
+ }
38
+ return FALLBACK_MAX_SCROLL_SIZE;
39
+ }
40
+ function getScrollDimension({ contentSize, clientSize, virtualSize = 0, maxScrollSize = getMaxScrollSize(), }) {
41
+ const safeContentSize = Math.max(0, maxScrollSize - SCROLL_SIZE_GUARD);
42
+ const size = Math.max(0, contentSize);
43
+ const client = Math.max(0, clientSize);
44
+ const viewport = Math.max(0, virtualSize || client);
45
+ const logicalScrollSize = Math.max(0, size - viewport);
46
+ const maxPhysicalScrollSize = Math.max(0, safeContentSize - client);
47
+ const physicalScrollSize = Math.min(logicalScrollSize, maxPhysicalScrollSize);
48
+ const physicalContentSize = client + physicalScrollSize;
49
+ const isCompressed = logicalScrollSize > physicalScrollSize && physicalScrollSize > 0;
50
+ const clampLogical = (coordinate) => Math.min(Math.max(0, coordinate || 0), logicalScrollSize);
51
+ const clampPhysical = (coordinate) => Math.min(Math.max(0, coordinate || 0), physicalScrollSize);
52
+ const toLogicalCoordinate = (coordinate) => {
53
+ if (!logicalScrollSize || !physicalScrollSize) {
54
+ return 0;
55
+ }
56
+ if (!isCompressed) {
57
+ return clampLogical(coordinate);
58
+ }
59
+ return clampLogical((clampPhysical(coordinate) / physicalScrollSize) * logicalScrollSize);
60
+ };
61
+ const toPhysicalCoordinate = (coordinate) => {
62
+ if (!logicalScrollSize || !physicalScrollSize) {
63
+ return 0;
64
+ }
65
+ if (!isCompressed) {
66
+ return clampPhysical(coordinate);
67
+ }
68
+ return clampPhysical((clampLogical(coordinate) / logicalScrollSize) * physicalScrollSize);
69
+ };
70
+ return {
71
+ contentSize: size,
72
+ clientSize: client,
73
+ viewportSize: viewport,
74
+ physicalContentSize,
75
+ logicalScrollSize,
76
+ physicalScrollSize,
77
+ isCompressed,
78
+ toLogicalCoordinate,
79
+ toPhysicalCoordinate,
80
+ getRenderOffset(coordinate) {
81
+ const logical = clampLogical(coordinate);
82
+ return logical - toPhysicalCoordinate(logical);
83
+ },
84
+ };
85
+ }
86
+
87
+ /**
88
+ * Collects data for pinned columns in the required @ViewportProps format.
89
+ */
90
+ /**
91
+ * Represents the slot names for the viewport slots.
92
+ */
93
+ const HEADER_SLOT = 'header'; // Slot name for the header slot
94
+ const FOOTER_SLOT = 'footer'; // Slot name for the footer slot
95
+ const CONTENT_SLOT = 'content'; // Slot name for the content slot
96
+ const DATA_SLOT = 'data'; // Slot name for the data slot
97
+ /**
98
+ * Returns the last visible cell in the viewport for a given row type.
99
+ * Coordinates are not zero-based and are relative to the viewport.
100
+ * If needed to be zero-based they can be adjusted by subtracting 1.
101
+ */
102
+ function getLastCell(data, rowType) {
103
+ // Get the last visible column count from the viewport column data.
104
+ const lastVisibleColumnCount = data.viewports[data.colType].store.get('realCount');
105
+ // Get the last visible row count for the given row type from the viewport column data.
106
+ const lastVisibleRowCount = data.viewports[rowType].store.get('realCount');
107
+ // Return the last visible cell with the last visible column count and row count.
108
+ return {
109
+ x: lastVisibleColumnCount,
110
+ y: lastVisibleRowCount,
111
+ };
112
+ }
113
+ function viewportDataPartition(data, type, slot, fixed) {
114
+ return {
115
+ colData: data.colStore,
116
+ viewportCol: data.viewports[data.colType].store,
117
+ viewportRow: data.viewports[type].store,
118
+ /**
119
+ * lastCell is the last real coordinate + 1, saved to selection store
120
+ */
121
+ lastCell: getLastCell(data, type),
122
+ slot,
123
+ type,
124
+ canDrag: !fixed,
125
+ position: data.position,
126
+ dataStore: data.rowStores[type].store,
127
+ dimensionCol: data.dimensions[data.colType].store,
128
+ dimensionRow: data.dimensions[type].store,
129
+ style: fixed
130
+ ? { height: `${data.dimensions[type].store.get('realSize')}px` }
131
+ : undefined,
132
+ };
133
+ }
134
+
135
+ exports.CONTENT_SLOT = CONTENT_SLOT;
136
+ exports.DATA_SLOT = DATA_SLOT;
137
+ exports.FOOTER_SLOT = FOOTER_SLOT;
138
+ exports.HEADER_SLOT = HEADER_SLOT;
139
+ exports.getScrollDimension = getScrollDimension;
140
+ exports.viewportDataPartition = viewportDataPartition;