@revolist/revogrid 4.22.0 → 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 (130) hide show
  1. package/dist/cjs/{cell-renderer-uZmDBXz7.js → cell-renderer-DWJ9Px9f.js} +9 -3
  2. package/dist/cjs/{column.drag.plugin-CM_5mKV3.js → column.drag.plugin-CaEBDG-Q.js} +409 -267
  3. package/dist/cjs/{column.service-DvQDqxxx.js → column.service-f612L4ql.js} +1 -1
  4. package/dist/cjs/{dimension.helpers-CaIsYC99.js → dimension.helpers-B9HgANnM.js} +14 -146
  5. package/dist/cjs/{edit.utils-CwMzSIVF.js → edit.utils-pKeiYFLJ.js} +22 -1
  6. package/dist/cjs/{header-cell-renderer-B1dJwgTO.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 +45 -31
  9. package/dist/cjs/revo-grid.cjs.entry.js +35 -15
  10. package/dist/cjs/revogr-attribution_7.cjs.entry.js +44 -26
  11. package/dist/cjs/revogr-clipboard_3.cjs.entry.js +11 -9
  12. package/dist/cjs/revogr-data_4.cjs.entry.js +132 -178
  13. package/dist/cjs/revogr-filter-panel.cjs.entry.js +2 -1
  14. package/dist/cjs/{text-editor-BTnGaIl3.js → text-editor-B4W-m-r-.js} +3 -3
  15. package/dist/cjs/{throttle-CI4MsAqs.js → throttle-BCwEuJJq.js} +59 -24
  16. package/dist/cjs/viewport.helpers-BND76K2j.js +140 -0
  17. package/dist/cjs/{viewport.store-Dcjud-a-.js → viewport.store-BlKQ4x9H.js} +16 -16
  18. package/dist/collection/components/clipboard/revogr-clipboard.js +1 -1
  19. package/dist/collection/components/data/revogr-data.js +5 -3
  20. package/dist/collection/components/header/header-group-renderer.js +2 -1
  21. package/dist/collection/components/header/header-renderer.js +6 -5
  22. package/dist/collection/components/header/revogr-header-style.css +13 -3
  23. package/dist/collection/components/header/revogr-header.js +105 -42
  24. package/dist/collection/components/order/order-row.service.js +6 -5
  25. package/dist/collection/components/overlay/keyboard.service.js +25 -3
  26. package/dist/collection/components/overlay/selection.utils.js +8 -6
  27. package/dist/collection/components/revoGrid/revo-grid.js +6 -5
  28. package/dist/collection/components/revoGrid/viewport.service.js +2 -1
  29. package/dist/collection/components/scroll/revogr-viewport-scroll.js +10 -6
  30. package/dist/collection/components/scrollable/revogr-scroll-virtual.js +4 -10
  31. package/dist/collection/plugins/filter/filter.panel.js +2 -1
  32. package/dist/collection/plugins/filter/filter.plugin.js +11 -4
  33. package/dist/collection/plugins/groupingRow/grouping.row.plugin.js +25 -1
  34. package/dist/collection/plugins/moveColumn/column.drag.plugin.js +18 -15
  35. package/dist/collection/plugins/sorting/sorting.func.js +173 -15
  36. package/dist/collection/plugins/sorting/sorting.plugin.js +167 -84
  37. package/dist/collection/plugins/sorting/sorting.sign.js +7 -1
  38. package/dist/collection/serve/controller.js +98 -37
  39. package/dist/collection/serve/data.js +273 -144
  40. package/dist/collection/services/dimension.provider.js +16 -1
  41. package/dist/collection/services/local.scroll.service.js +59 -24
  42. package/dist/collection/services/scroll.dimension.helpers.js +83 -0
  43. package/dist/collection/services/selection.store.connector.js +4 -1
  44. package/dist/collection/store/dimension/dimension.recalculate.plugin.js +22 -9
  45. package/dist/collection/store/dimension/dimension.store.js +4 -2
  46. package/dist/collection/store/vp/viewport.helpers.js +9 -0
  47. package/dist/collection/store/vp/viewport.store.js +5 -16
  48. package/dist/collection/types/events.js +4 -0
  49. package/dist/collection/utils/key.utils.js +20 -0
  50. package/dist/collection/utils/store.utils.js +3 -3
  51. package/dist/{revo-grid/cell-renderer-K_BKH7Kx.js → esm/cell-renderer-8UiGd-s7.js} +9 -3
  52. package/dist/esm/{column.drag.plugin-DEqZ2qXJ.js → column.drag.plugin-BsfhsfmB.js} +402 -266
  53. package/dist/esm/{column.service-Cdz3dYqZ.js → column.service-DbpulTog.js} +1 -1
  54. package/dist/{revo-grid/debounce-BfO9dz9v.js → esm/debounce-PCRWZliA.js} +1 -1
  55. package/dist/{revo-grid/dimension.helpers-DzxqJQqN.js → esm/dimension.helpers-CGKwSvw6.js} +7 -128
  56. package/dist/esm/{edit.utils-CzfeG98N.js → edit.utils-Dnnbd0xG.js} +22 -2
  57. package/dist/{revo-grid/header-cell-renderer-DXhxZMly.js → esm/header-cell-renderer-DGI2FAD8.js} +1 -1
  58. package/dist/esm/index-Db3qZoW5.js +127 -0
  59. package/dist/esm/index.js +15 -10
  60. package/dist/esm/revo-grid.entry.js +34 -14
  61. package/dist/esm/revogr-attribution_7.entry.js +43 -25
  62. package/dist/esm/revogr-clipboard_3.entry.js +12 -10
  63. package/dist/esm/revogr-data_4.entry.js +133 -179
  64. package/dist/esm/revogr-filter-panel.entry.js +3 -2
  65. package/dist/esm/{text-editor-C1ks5eQ4.js → text-editor-C3RUSwH5.js} +2 -2
  66. package/dist/esm/{throttle-BEjFQa2l.js → throttle-CaUDyxyU.js} +60 -25
  67. package/dist/esm/viewport.helpers-CoCAvmZs.js +133 -0
  68. package/dist/{revo-grid/viewport.store-saAZJHRo.js → esm/viewport.store-COAfzAyu.js} +15 -17
  69. package/dist/{esm/cell-renderer-K_BKH7Kx.js → revo-grid/cell-renderer-8UiGd-s7.js} +9 -3
  70. package/dist/revo-grid/{column.drag.plugin-DEqZ2qXJ.js → column.drag.plugin-BsfhsfmB.js} +402 -266
  71. package/dist/revo-grid/{column.service-Cdz3dYqZ.js → column.service-DbpulTog.js} +1 -1
  72. package/dist/{esm/debounce-BfO9dz9v.js → revo-grid/debounce-PCRWZliA.js} +1 -1
  73. package/dist/{esm/dimension.helpers-DzxqJQqN.js → revo-grid/dimension.helpers-CGKwSvw6.js} +7 -128
  74. package/dist/revo-grid/{edit.utils-CzfeG98N.js → edit.utils-Dnnbd0xG.js} +22 -2
  75. package/dist/{esm/header-cell-renderer-DXhxZMly.js → revo-grid/header-cell-renderer-DGI2FAD8.js} +1 -1
  76. package/dist/revo-grid/index-Db3qZoW5.js +127 -0
  77. package/dist/revo-grid/index.esm.js +15 -10
  78. package/dist/revo-grid/revo-grid.entry.js +34 -14
  79. package/dist/revo-grid/revogr-attribution_7.entry.js +43 -25
  80. package/dist/revo-grid/revogr-clipboard_3.entry.js +12 -10
  81. package/dist/revo-grid/revogr-data_4.entry.js +133 -179
  82. package/dist/revo-grid/revogr-filter-panel.entry.js +3 -2
  83. package/dist/revo-grid/{text-editor-C1ks5eQ4.js → text-editor-C3RUSwH5.js} +2 -2
  84. package/dist/revo-grid/{throttle-BEjFQa2l.js → throttle-CaUDyxyU.js} +60 -25
  85. package/dist/revo-grid/viewport.helpers-CoCAvmZs.js +133 -0
  86. package/dist/{esm/viewport.store-saAZJHRo.js → revo-grid/viewport.store-COAfzAyu.js} +15 -17
  87. package/dist/types/components/header/header-group-renderer.d.ts +1 -0
  88. package/dist/types/components/header/header-renderer.d.ts +1 -0
  89. package/dist/types/components/header/revogr-header.d.ts +6 -0
  90. package/dist/types/components/overlay/keyboard.service.d.ts +5 -0
  91. package/dist/types/plugins/groupingRow/grouping.row.plugin.d.ts +8 -0
  92. package/dist/types/plugins/moveColumn/column.drag.plugin.d.ts +29 -3
  93. package/dist/types/plugins/sorting/sorting.func.d.ts +25 -2
  94. package/dist/types/plugins/sorting/sorting.plugin.d.ts +84 -9
  95. package/dist/types/plugins/sorting/sorting.sign.d.ts +5 -1
  96. package/dist/types/plugins/sorting/sorting.types.d.ts +46 -1
  97. package/dist/types/services/local.scroll.service.d.ts +10 -2
  98. package/dist/types/services/scroll.dimension.helpers.d.ts +20 -0
  99. package/dist/types/store/vp/viewport.helpers.d.ts +2 -0
  100. package/dist/types/types/events.d.ts +1 -1
  101. package/dist/types/types/interfaces.d.ts +11 -0
  102. package/dist/types/utils/key.utils.d.ts +8 -0
  103. package/hydrate/index.js +791 -539
  104. package/hydrate/index.mjs +791 -539
  105. package/package.json +1 -1
  106. package/standalone/column.service.js +1 -1
  107. package/standalone/data.store.js +1 -1
  108. package/standalone/debounce.js +1 -1
  109. package/standalone/dimension.helpers.js +1 -1
  110. package/standalone/index.js +1 -1
  111. package/standalone/local.scroll.timer.js +1 -1
  112. package/standalone/revo-grid.js +1 -1
  113. package/standalone/revogr-clipboard2.js +1 -1
  114. package/standalone/revogr-data2.js +1 -1
  115. package/standalone/revogr-edit.js +1 -1
  116. package/standalone/revogr-edit2.js +1 -1
  117. package/standalone/revogr-filter-panel.js +1 -1
  118. package/standalone/revogr-header2.js +1 -1
  119. package/standalone/revogr-order-editor2.js +1 -1
  120. package/standalone/revogr-overlay-selection2.js +1 -1
  121. package/standalone/revogr-row-headers.js +1 -1
  122. package/standalone/revogr-row-headers2.js +1 -1
  123. package/standalone/revogr-scroll-virtual2.js +1 -1
  124. package/standalone/revogr-viewport-scroll2.js +1 -1
  125. package/standalone/selection.utils.js +1 -1
  126. package/standalone/throttle.js +1 -1
  127. package/standalone/toNumber.js +1 -1
  128. package/dist/cjs/viewport.helpers-BAovztDd.js +0 -58
  129. package/dist/esm/viewport.helpers-VXhsJZtn.js +0 -52
  130. package/dist/revo-grid/viewport.helpers-VXhsJZtn.js +0 -52
@@ -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-DvQDqxxx.js');
8
- var dimension_helpers = require('./dimension.helpers-CaIsYC99.js');
9
- var cellRenderer = require('./cell-renderer-uZmDBXz7.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-B1dJwgTO.js');
12
- var throttle = require('./throttle-CI4MsAqs.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,
@@ -261,126 +263,8 @@ const RevogrData = class {
261
263
  };
262
264
  RevogrData.style = revogrDataStyleCss();
263
265
 
264
- var defineProperty = (function() {
265
- try {
266
- var func = dimension_helpers.getNative(Object, 'defineProperty');
267
- func({}, '', {});
268
- return func;
269
- } catch (e) {}
270
- }());
271
-
272
- /**
273
- * The base implementation of `assignValue` and `assignMergeValue` without
274
- * value checks.
275
- *
276
- * @private
277
- * @param {Object} object The object to modify.
278
- * @param {string} key The key of the property to assign.
279
- * @param {*} value The value to assign.
280
- */
281
- function baseAssignValue(object, key, value) {
282
- if (key == '__proto__' && defineProperty) {
283
- defineProperty(object, key, {
284
- 'configurable': true,
285
- 'enumerable': true,
286
- 'value': value,
287
- 'writable': true
288
- });
289
- } else {
290
- object[key] = value;
291
- }
292
- }
293
-
294
- /**
295
- * A specialized version of `baseAggregator` for arrays.
296
- *
297
- * @private
298
- * @param {Array} [array] The array to iterate over.
299
- * @param {Function} setter The function to set `accumulator` values.
300
- * @param {Function} iteratee The iteratee to transform keys.
301
- * @param {Object} accumulator The initial aggregated object.
302
- * @returns {Function} Returns `accumulator`.
303
- */
304
- function arrayAggregator(array, setter, iteratee, accumulator) {
305
- var index = -1,
306
- length = array == null ? 0 : array.length;
307
-
308
- while (++index < length) {
309
- var value = array[index];
310
- setter(accumulator, value, iteratee(value), array);
311
- }
312
- return accumulator;
313
- }
314
-
315
- /**
316
- * Aggregates elements of `collection` on `accumulator` with keys transformed
317
- * by `iteratee` and values set by `setter`.
318
- *
319
- * @private
320
- * @param {Array|Object} collection The collection to iterate over.
321
- * @param {Function} setter The function to set `accumulator` values.
322
- * @param {Function} iteratee The iteratee to transform keys.
323
- * @param {Object} accumulator The initial aggregated object.
324
- * @returns {Function} Returns `accumulator`.
325
- */
326
- function baseAggregator(collection, setter, iteratee, accumulator) {
327
- column_service.baseEach(collection, function(value, key, collection) {
328
- setter(accumulator, value, iteratee(value), collection);
329
- });
330
- return accumulator;
331
- }
332
-
333
- /**
334
- * Creates a function like `_.groupBy`.
335
- *
336
- * @private
337
- * @param {Function} setter The function to set accumulator values.
338
- * @param {Function} [initializer] The accumulator object initializer.
339
- * @returns {Function} Returns the new aggregator function.
340
- */
341
- function createAggregator(setter, initializer) {
342
- return function(collection, iteratee) {
343
- var func = dimension_helpers.isArray(collection) ? arrayAggregator : baseAggregator,
344
- accumulator = {};
345
-
346
- return func(collection, setter, dimension_helpers.baseIteratee(iteratee), accumulator);
347
- };
348
- }
349
-
350
- /**
351
- * Creates an object composed of keys generated from the results of running
352
- * each element of `collection` thru `iteratee`. The corresponding value of
353
- * each key is the last element responsible for generating the key. The
354
- * iteratee is invoked with one argument: (value).
355
- *
356
- * @static
357
- * @memberOf _
358
- * @since 4.0.0
359
- * @category Collection
360
- * @param {Array|Object} collection The collection to iterate over.
361
- * @param {Function} [iteratee=_.identity] The iteratee to transform keys.
362
- * @returns {Object} Returns the composed aggregate object.
363
- * @example
364
- *
365
- * var array = [
366
- * { 'dir': 'left', 'code': 97 },
367
- * { 'dir': 'right', 'code': 100 }
368
- * ];
369
- *
370
- * _.keyBy(array, function(o) {
371
- * return String.fromCharCode(o.code);
372
- * });
373
- * // => { 'a': { 'dir': 'left', 'code': 97 }, 'd': { 'dir': 'right', 'code': 100 } }
374
- *
375
- * _.keyBy(array, 'dir');
376
- * // => { 'left': { 'dir': 'left', 'code': 97 }, 'right': { 'dir': 'right', 'code': 100 } }
377
- */
378
- var keyBy = createAggregator(function(result, value, key) {
379
- baseAssignValue(result, key, value);
380
- });
381
-
382
266
  const HeaderRenderer = (p) => {
383
- var _a, _b, _c, _d, _e;
267
+ var _a, _b, _c, _d, _e, _f, _g;
384
268
  const cellClass = {
385
269
  [dimension_helpers.HEADER_CLASS]: true,
386
270
  [dimension_helpers.HEADER_SORTABLE_CLASS]: !!((_a = p.data) === null || _a === void 0 ? void 0 : _a.sortable),
@@ -389,15 +273,16 @@ const HeaderRenderer = (p) => {
389
273
  cellClass[p.data.order] = true;
390
274
  }
391
275
  const dataProps = {
276
+ key: String((_d = (_c = p.data) === null || _c === void 0 ? void 0 : _c.prop) !== null && _d !== void 0 ? _d : p.column.itemIndex),
392
277
  [dimension_helpers.DATA_COL]: p.column.itemIndex,
393
278
  canResize: p.canResize,
394
- minWidth: ((_c = p.data) === null || _c === void 0 ? void 0 : _c.minSize) || dimension_helpers.MIN_COL_SIZE,
395
- maxWidth: (_d = p.data) === null || _d === void 0 ? void 0 : _d.maxSize,
279
+ minWidth: ((_e = p.data) === null || _e === void 0 ? void 0 : _e.minSize) || dimension_helpers.MIN_COL_SIZE,
280
+ maxWidth: (_f = p.data) === null || _f === void 0 ? void 0 : _f.maxSize,
396
281
  active: p.active || ['r'],
397
282
  class: cellClass,
398
283
  style: {
399
284
  width: `${p.column.size}px`,
400
- transform: `translateX(${p.column.start}px)`,
285
+ transform: `translateX(${p.column.start - (p.renderOffset || 0)}px)`,
401
286
  },
402
287
  onResize: p.onResize,
403
288
  onDblClick(originalEvent) {
@@ -428,11 +313,12 @@ const HeaderRenderer = (p) => {
428
313
  }
429
314
  }
430
315
  }
431
- return (index.h(headerCellRenderer.HeaderCellRenderer, { data: p.data, props: dataProps, additionalData: p.additionalData }, index.h(cellRenderer.SortingSign, { column: p.data }), p.canFilter && ((_e = p.data) === null || _e === void 0 ? void 0 : _e.filter) !== false ? (index.h(filter_button.FilterButton, { column: p.data })) : ('')));
316
+ return (index.h(headerCellRenderer.HeaderCellRenderer, { data: p.data, props: dataProps, additionalData: p.additionalData }, index.h(cellRenderer.SortingSign, { column: p.data }), p.canFilter && ((_g = p.data) === null || _g === void 0 ? void 0 : _g.filter) !== false ? (index.h(filter_button.FilterButton, { column: p.data })) : ('')));
432
317
  };
433
318
 
434
319
  const HeaderGroupRenderer = (p) => {
435
320
  const groupProps = {
321
+ key: `${p.group.name}-${p.group.indexes.join('-')}`,
436
322
  canResize: p.canResize,
437
323
  minWidth: p.group.indexes.length * dimension_helpers.MIN_COL_SIZE,
438
324
  maxWidth: 0,
@@ -441,7 +327,7 @@ const HeaderGroupRenderer = (p) => {
441
327
  [dimension_helpers.HEADER_CLASS]: true,
442
328
  },
443
329
  style: {
444
- transform: `translateX(${p.start}px)`,
330
+ transform: `translateX(${p.start - (p.renderOffset || 0)}px)`,
445
331
  width: `${p.end - p.start}px`,
446
332
  },
447
333
  onResize: p.onResize,
@@ -449,7 +335,7 @@ const HeaderGroupRenderer = (p) => {
449
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 }));
450
336
  };
451
337
 
452
- 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}`;
453
339
 
454
340
  const RevogrHeaderComponent = class {
455
341
  constructor(hostRef) {
@@ -482,13 +368,10 @@ const RevogrHeaderComponent = class {
482
368
  }
483
369
  onResizeGroup(changedX, startIndex, endIndex) {
484
370
  const sizes = {};
485
- const cols = keyBy(this.viewportCol.get('items'), 'itemIndex');
486
371
  const change = changedX / (endIndex - startIndex + 1);
487
372
  for (let i = startIndex; i <= endIndex; i++) {
488
- const item = cols[i];
489
- if (item) {
490
- sizes[i] = item.size + change;
491
- }
373
+ const item = dimension_helpers.getItemByIndex(this.dimensionCol.state, i);
374
+ sizes[i] = item.end - item.start + change;
492
375
  }
493
376
  this.headerresize.emit(sizes);
494
377
  }
@@ -502,12 +385,13 @@ const RevogrHeaderComponent = class {
502
385
  const { cells } = this.renderHeaderColumns(cols, range);
503
386
  const groupRow = this.renderGroupingColumns();
504
387
  return [
505
- index.h("div", { key: 'a8d57270f4758b454fb4900808453e0c4663c91c', class: "group-rgRow" }, groupRow),
506
- index.h("div", { key: '41a270ff6bde9943a81d9c46482f2a40312afb50', class: `${dimension_helpers.HEADER_ROW_CLASS} ${dimension_helpers.HEADER_ACTUAL_ROW_CLASS}` }, cells),
388
+ index.h("div", { key: '3cc466db6bc4df0cd61c47a22c3a0473318e5dd8', class: "group-rgRow" }, groupRow),
389
+ index.h("div", { key: '9742a3fa4d4b75073aef5544806f42386ebffdea', class: `${dimension_helpers.HEADER_ROW_CLASS} ${dimension_helpers.HEADER_ACTUAL_ROW_CLASS}` }, cells),
507
390
  ];
508
391
  }
509
392
  renderHeaderColumns(cols, range) {
510
- const cells = [];
393
+ const columnsToRender = [];
394
+ const renderOffset = this.viewportCol.get('renderOffset') || 0;
511
395
  for (let rgCol of cols) {
512
396
  const colData = this.colData[rgCol.itemIndex];
513
397
  const props = {
@@ -516,6 +400,7 @@ const RevogrHeaderComponent = class {
516
400
  data: Object.assign(Object.assign({}, colData), { index: rgCol.itemIndex, providers: this.providers }),
517
401
  canFilter: !!this.columnFilter,
518
402
  canResize: this.canResize,
403
+ renderOffset,
519
404
  active: this.resizeHandler,
520
405
  additionalData: this.additionalData,
521
406
  onResize: e => this.onResize(e, rgCol.itemIndex),
@@ -524,45 +409,106 @@ const RevogrHeaderComponent = class {
524
409
  };
525
410
  const event = this.beforeHeaderRender.emit(props);
526
411
  if (!event.defaultPrevented) {
527
- cells.push(index.h(HeaderRenderer, Object.assign({}, event.detail)));
412
+ columnsToRender.push(event.detail);
528
413
  }
529
414
  }
415
+ const duplicateProps = this.getDuplicateHeaderProps(columnsToRender);
416
+ const cells = columnsToRender.map(detail => index.h(HeaderRenderer, Object.assign({ key: this.getHeaderCellKey(detail.data, this.type, duplicateProps) }, detail)));
530
417
  return { cells };
531
418
  }
532
419
  renderGroupingColumns() {
420
+ const visibleGroupRange = this.getVisibleGroupRange();
421
+ return Array.from({ length: this.groupingDepth }, (_, level) => this.renderGroupRow(level, visibleGroupRange)).flat();
422
+ }
423
+ renderGroupRow(level, visibleGroupRange) {
424
+ const groupCells = (this.groups[level] || [])
425
+ .map(group => this.renderGroupColumn(group, level, visibleGroupRange))
426
+ .filter((cell) => !!cell);
427
+ return [
428
+ ...groupCells,
429
+ index.h('div', {
430
+ key: `group-row-${level}`,
431
+ class: {
432
+ [dimension_helpers.HEADER_ROW_CLASS]: true,
433
+ group: true,
434
+ },
435
+ }),
436
+ ];
437
+ }
438
+ renderGroupColumn(group, level, visibleGroupRange) {
533
439
  var _a;
534
- const groupRow = [];
535
- for (let i = 0; i < this.groupingDepth; i++) {
536
- if (this.groups[i]) {
537
- for (let group of this.groups[i]) {
538
- const groupStartIndex = (_a = group.indexes[0]) !== null && _a !== void 0 ? _a : -1;
539
- if (groupStartIndex > -1) {
540
- const groupEndIndex = groupStartIndex + group.indexes.length - 1;
541
- const groupStart = dimension_helpers.getItemByIndex(this.dimensionCol.state, groupStartIndex).start;
542
- const groupEnd = dimension_helpers.getItemByIndex(this.dimensionCol.state, groupEndIndex).end;
543
- const props = {
544
- providers: this.providers,
545
- start: groupStart,
546
- end: groupEnd,
547
- group,
548
- active: this.resizeHandler,
549
- canResize: this.canResize,
550
- additionalData: this.additionalData,
551
- onResize: e => {
552
- var _a;
553
- return this.onResizeGroup((_a = e.changedX) !== null && _a !== void 0 ? _a : 0, groupStartIndex, groupEndIndex);
554
- },
555
- };
556
- const event = this.beforeGroupHeaderRender.emit(props);
557
- if (!event.defaultPrevented) {
558
- groupRow.push(index.h(HeaderGroupRenderer, Object.assign({}, event.detail)));
559
- }
560
- }
440
+ const groupStartIndex = (_a = group.indexes[0]) !== null && _a !== void 0 ? _a : -1;
441
+ if (groupStartIndex < 0) {
442
+ return;
443
+ }
444
+ const groupEndIndex = groupStartIndex + group.indexes.length - 1;
445
+ if (!visibleGroupRange ||
446
+ !isGroupInVisibleRange(groupStartIndex, groupEndIndex, visibleGroupRange)) {
447
+ return;
448
+ }
449
+ const groupStart = dimension_helpers.getItemByIndex(this.dimensionCol.state, groupStartIndex).start;
450
+ const groupEnd = dimension_helpers.getItemByIndex(this.dimensionCol.state, groupEndIndex).end;
451
+ const props = {
452
+ providers: this.providers,
453
+ start: groupStart,
454
+ end: groupEnd,
455
+ group,
456
+ renderOffset: this.viewportCol.get('renderOffset') || 0,
457
+ active: this.resizeHandler,
458
+ canResize: this.canResize,
459
+ additionalData: this.additionalData,
460
+ onResize: e => {
461
+ var _a;
462
+ return this.onResizeGroup((_a = e.changedX) !== null && _a !== void 0 ? _a : 0, groupStartIndex, groupEndIndex);
463
+ },
464
+ };
465
+ const event = this.beforeGroupHeaderRender.emit(props);
466
+ if (event.defaultPrevented) {
467
+ return;
468
+ }
469
+ return index.h(HeaderGroupRenderer, Object.assign({ key: this.getGroupHeaderCellKey(event.detail.group, level) }, event.detail));
470
+ }
471
+ getVisibleGroupRange() {
472
+ const visibleColumns = this.viewportCol.get('items');
473
+ if (!visibleColumns.length) {
474
+ return;
475
+ }
476
+ return visibleColumns.reduce((range, column) => ({
477
+ start: Math.min(range.start, column.itemIndex),
478
+ end: Math.max(range.end, column.itemIndex),
479
+ }), {
480
+ start: visibleColumns[0].itemIndex,
481
+ end: visibleColumns[0].itemIndex,
482
+ });
483
+ }
484
+ getHeaderCellKey(column, type, duplicateProps) {
485
+ if ((column === null || column === void 0 ? void 0 : column.prop) === undefined) {
486
+ return `${type}-${String(column === null || column === void 0 ? void 0 : column.index)}`;
487
+ }
488
+ const propKey = String(column.prop);
489
+ if (duplicateProps.has(propKey)) {
490
+ return `${type}-${propKey}-${String(column.index)}`;
491
+ }
492
+ return `${type}-${propKey}`;
493
+ }
494
+ getDuplicateHeaderProps(columns) {
495
+ const seenProps = new Set();
496
+ const duplicateProps = new Set();
497
+ columns.forEach(({ data }) => {
498
+ if ((data === null || data === void 0 ? void 0 : data.prop) !== undefined) {
499
+ const propKey = String(data.prop);
500
+ if (seenProps.has(propKey)) {
501
+ duplicateProps.add(propKey);
502
+ }
503
+ else {
504
+ seenProps.add(propKey);
561
505
  }
562
506
  }
563
- groupRow.push(index.h("div", { class: `${dimension_helpers.HEADER_ROW_CLASS} group` }));
564
- }
565
- return groupRow;
507
+ });
508
+ return duplicateProps;
509
+ }
510
+ getGroupHeaderCellKey(group, level) {
511
+ return `group-${level}-${group.name}-${group.indexes.join('-')}`;
566
512
  }
567
513
  get providers() {
568
514
  return {
@@ -576,6 +522,10 @@ const RevogrHeaderComponent = class {
576
522
  }
577
523
  get element() { return index.getElement(this); }
578
524
  };
525
+ function isGroupInVisibleRange(groupStartIndex, groupEndIndex, visibleRange) {
526
+ return (groupStartIndex <= visibleRange.end &&
527
+ groupEndIndex >= visibleRange.start);
528
+ }
579
529
  RevogrHeaderComponent.style = revogrHeaderStyleCss();
580
530
 
581
531
  class GridResizeService {
@@ -658,7 +608,7 @@ const RevogrViewportScroll = class {
658
608
  * @param e
659
609
  */
660
610
  async changeScroll(e, silent = false) {
661
- var _a, _b;
611
+ var _a, _b, _c, _d;
662
612
  if (silent) {
663
613
  if (e.coordinate && this.verticalScroll) {
664
614
  switch (e.dimension) {
@@ -671,15 +621,16 @@ const RevogrViewportScroll = class {
671
621
  return;
672
622
  }
673
623
  if (e.delta) {
624
+ let currentPhysicalCoordinate = 0;
674
625
  switch (e.dimension) {
675
626
  case 'rgCol':
676
- e.coordinate = this.horizontalScroll.scrollLeft + e.delta;
627
+ currentPhysicalCoordinate = this.horizontalScroll.scrollLeft;
677
628
  break;
678
629
  case 'rgRow':
679
- 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;
680
631
  break;
681
632
  }
682
- 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;
683
634
  }
684
635
  return e;
685
636
  }
@@ -831,7 +782,10 @@ const RevogrViewportScroll = class {
831
782
  this.setScrollVisibility('rgCol', this.horizontalScroll.clientWidth, this.contentWidth);
832
783
  }
833
784
  render() {
834
- 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 })))));
835
789
  }
836
790
  /**
837
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-CwMzSIVF.js');
7
- var dimension_helpers = require('./dimension.helpers-CaIsYC99.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-CaIsYC99.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