@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
@@ -2,10 +2,11 @@
2
2
  * Built by Revolist OU ❤️
3
3
  */
4
4
  import { r as registerInstance, d as createEvent, h, e as Host, g as getElement } from './index-Chp_81rd.js';
5
- import { N as EDIT_INPUT_WR, j as getItemByPosition, b as getSourceItem, O as DRAGG_TEXT } from './dimension.helpers-DzxqJQqN.js';
6
- import { T as TextEditor } from './text-editor-C1ks5eQ4.js';
7
- import { m as isEditorCtrConstructible } from './edit.utils-CzfeG98N.js';
8
- import { d as debounce } from './debounce-BfO9dz9v.js';
5
+ import { E as EDIT_INPUT_WR, j as getItemByPosition, b as getSourceItem, A as DRAGG_TEXT } from './dimension.helpers-CGKwSvw6.js';
6
+ import { T as TextEditor } from './text-editor-C3RUSwH5.js';
7
+ import { n as isEditorCtrConstructible } from './edit.utils-Dnnbd0xG.js';
8
+ import { d as debounce } from './debounce-PCRWZliA.js';
9
+ import './index-Db3qZoW5.js';
9
10
 
10
11
  const Clipboard = class {
11
12
  constructor(hostRef) {
@@ -84,8 +85,8 @@ const Clipboard = class {
84
85
  return;
85
86
  }
86
87
  const data = this.getData(beforeCopy.detail.event);
87
- this.copyRegion.emit(data || undefined);
88
88
  e.preventDefault();
89
+ this.copyRegion.emit(data || undefined);
89
90
  }
90
91
  /**
91
92
  * Listen to copy event and emit copy region event
@@ -332,11 +333,12 @@ class RowOrderService {
332
333
  getRow(y, { el, rows }) {
333
334
  const { top } = el.getBoundingClientRect();
334
335
  const topRelative = y - top;
335
- const rgRow = getItemByPosition(rows, topRelative);
336
+ const rowOffset = rows.renderOffset || 0;
337
+ const rgRow = getItemByPosition(rows, topRelative + rowOffset);
336
338
  const absolutePosition = {
337
339
  itemIndex: rgRow.itemIndex,
338
- start: rgRow.start + top,
339
- end: rgRow.end + top,
340
+ start: rgRow.start - rowOffset + top,
341
+ end: rgRow.end - rowOffset + top,
340
342
  };
341
343
  return absolutePosition;
342
344
  }
@@ -345,8 +347,8 @@ class RowOrderService {
345
347
  const { top, left } = el.getBoundingClientRect();
346
348
  const topRelative = y - top;
347
349
  const leftRelative = x - left;
348
- const rgRow = getItemByPosition(rows, topRelative);
349
- const rgCol = getItemByPosition(cols, leftRelative);
350
+ const rgRow = getItemByPosition(rows, topRelative + (rows.renderOffset || 0));
351
+ const rgCol = getItemByPosition(cols, leftRelative + (cols.renderOffset || 0));
350
352
  return { x: rgCol.itemIndex, y: rgRow.itemIndex };
351
353
  }
352
354
  }
@@ -2,14 +2,14 @@
2
2
  * Built by Revolist OU ❤️
3
3
  */
4
4
  import { r as registerInstance, d as createEvent, h, e as Host, g as getElement } from './index-Chp_81rd.js';
5
- import { M as ColumnService, u as isGrouping, K as baseEach } from './column.service-Cdz3dYqZ.js';
6
- import { Q as ROW_FOCUSED_CLASS, b as getSourceItem, y as DATA_ROW, x as DATA_COL, a3 as getNative, a4 as baseIteratee, Y as isArray, M as MIN_COL_SIZE, B as HEADER_SORTABLE_CLASS, H as HEADER_CLASS, J as FOCUS_CLASS, E as HEADER_ROW_CLASS, F as HEADER_ACTUAL_ROW_CLASS, k as getItemByIndex } from './dimension.helpers-DzxqJQqN.js';
7
- import { G as GroupingRowRenderer, C as CellRenderer, R as RowRenderer, P as PADDING_DEPTH, S as SortingSign } from './cell-renderer-K_BKH7Kx.js';
5
+ import { M as ColumnService, u as isGrouping } from './column.service-DbpulTog.js';
6
+ import { B as ROW_FOCUSED_CLASS, b as getSourceItem, n as DATA_ROW, m as DATA_COL, M as MIN_COL_SIZE, r as HEADER_SORTABLE_CLASS, H as HEADER_CLASS, F as FOCUS_CLASS, k as getItemByIndex, u as HEADER_ROW_CLASS, v as HEADER_ACTUAL_ROW_CLASS } from './dimension.helpers-CGKwSvw6.js';
7
+ import { G as GroupingRowRenderer, C as CellRenderer, R as RowRenderer, P as PADDING_DEPTH, S as SortingSign } from './cell-renderer-8UiGd-s7.js';
8
8
  import { c as FilterButton } from './filter.button-C8XTWPU2.js';
9
- import { H as HeaderCellRenderer } from './header-cell-renderer-DXhxZMly.js';
10
- import { t as throttle, L as LocalScrollTimer, a as LocalScrollService } from './throttle-BEjFQa2l.js';
11
- import { H as HEADER_SLOT, C as CONTENT_SLOT, F as FOOTER_SLOT } from './viewport.helpers-VXhsJZtn.js';
12
- import './debounce-BfO9dz9v.js';
9
+ import { H as HeaderCellRenderer } from './header-cell-renderer-DGI2FAD8.js';
10
+ import { t as throttle, L as LocalScrollTimer, a as LocalScrollService, g as getContentSize } from './throttle-CaUDyxyU.js';
11
+ import { H as HEADER_SLOT, C as CONTENT_SLOT, F as FOOTER_SLOT } from './viewport.helpers-CoCAvmZs.js';
12
+ import './debounce-PCRWZliA.js';
13
13
 
14
14
  /**
15
15
  * Class is responsible for highlighting rows in a table.
@@ -168,11 +168,13 @@ const RevogrData = class {
168
168
  const depth = this.dataStore.get('groupingDepth');
169
169
  const groupingCustomRenderer = this.dataStore.get('groupingCustomRenderer');
170
170
  const groupDepth = this.columnService.hasGrouping ? depth : 0;
171
+ const rowRenderOffset = this.viewportRow.get('renderOffset') || 0;
172
+ const colRenderOffset = this.viewportCol.get('renderOffset') || 0;
171
173
  for (let rgRow of rows) {
172
174
  const dataItem = getSourceItem(this.dataStore, rgRow.itemIndex);
173
175
  // #region Grouping
174
176
  if (isGrouping(dataItem)) {
175
- const gmodel = Object.assign(Object.assign({}, rgRow), { index: rgRow.itemIndex, model: dataItem, groupingCustomRenderer,
177
+ const gmodel = Object.assign(Object.assign({}, rgRow), { start: rgRow.start - rowRenderOffset, index: rgRow.itemIndex, model: dataItem, groupingCustomRenderer,
176
178
  // Only show expand button if grouping is enabled and not in row headers
177
179
  hasExpand: this.columnService.hasGrouping && this.colType !== 'rowHeaders', columnItems: cols, providers: this.providers });
178
180
  rowsEls.push(h(GroupingRowRenderer, Object.assign({}, gmodel)));
@@ -195,7 +197,7 @@ const RevogrData = class {
195
197
  [DATA_ROW]: rowProps.itemIndex,
196
198
  style: {
197
199
  width: `${columnProps.size}px`,
198
- transform: `translateX(${columnProps.start}px)`,
200
+ transform: `translateX(${columnProps.start - colRenderOffset}px)`,
199
201
  height: rowProps.size ? `${rowProps.size}px` : undefined,
200
202
  },
201
203
  };
@@ -223,7 +225,7 @@ const RevogrData = class {
223
225
  if (this.rowHighlightPlugin.isRowFocused(rgRow.itemIndex)) {
224
226
  rowClass += ` ${ROW_FOCUSED_CLASS}`;
225
227
  }
226
- const row = (h(RowRenderer, { index: rgRow.itemIndex, rowClass: rowClass, size: rgRow.size, start: rgRow.start, groupingLevel: groupDepth || undefined }, cells));
228
+ const row = (h(RowRenderer, { index: rgRow.itemIndex, rowClass: rowClass, size: rgRow.size, start: rgRow.start - rowRenderOffset, groupingLevel: groupDepth || undefined }, cells));
227
229
  this.beforerowrender.emit({
228
230
  node: row,
229
231
  item: rgRow,
@@ -259,126 +261,8 @@ const RevogrData = class {
259
261
  };
260
262
  RevogrData.style = revogrDataStyleCss();
261
263
 
262
- var defineProperty = (function() {
263
- try {
264
- var func = getNative(Object, 'defineProperty');
265
- func({}, '', {});
266
- return func;
267
- } catch (e) {}
268
- }());
269
-
270
- /**
271
- * The base implementation of `assignValue` and `assignMergeValue` without
272
- * value checks.
273
- *
274
- * @private
275
- * @param {Object} object The object to modify.
276
- * @param {string} key The key of the property to assign.
277
- * @param {*} value The value to assign.
278
- */
279
- function baseAssignValue(object, key, value) {
280
- if (key == '__proto__' && defineProperty) {
281
- defineProperty(object, key, {
282
- 'configurable': true,
283
- 'enumerable': true,
284
- 'value': value,
285
- 'writable': true
286
- });
287
- } else {
288
- object[key] = value;
289
- }
290
- }
291
-
292
- /**
293
- * A specialized version of `baseAggregator` for arrays.
294
- *
295
- * @private
296
- * @param {Array} [array] The array to iterate over.
297
- * @param {Function} setter The function to set `accumulator` values.
298
- * @param {Function} iteratee The iteratee to transform keys.
299
- * @param {Object} accumulator The initial aggregated object.
300
- * @returns {Function} Returns `accumulator`.
301
- */
302
- function arrayAggregator(array, setter, iteratee, accumulator) {
303
- var index = -1,
304
- length = array == null ? 0 : array.length;
305
-
306
- while (++index < length) {
307
- var value = array[index];
308
- setter(accumulator, value, iteratee(value), array);
309
- }
310
- return accumulator;
311
- }
312
-
313
- /**
314
- * Aggregates elements of `collection` on `accumulator` with keys transformed
315
- * by `iteratee` and values set by `setter`.
316
- *
317
- * @private
318
- * @param {Array|Object} collection The collection to iterate over.
319
- * @param {Function} setter The function to set `accumulator` values.
320
- * @param {Function} iteratee The iteratee to transform keys.
321
- * @param {Object} accumulator The initial aggregated object.
322
- * @returns {Function} Returns `accumulator`.
323
- */
324
- function baseAggregator(collection, setter, iteratee, accumulator) {
325
- baseEach(collection, function(value, key, collection) {
326
- setter(accumulator, value, iteratee(value), collection);
327
- });
328
- return accumulator;
329
- }
330
-
331
- /**
332
- * Creates a function like `_.groupBy`.
333
- *
334
- * @private
335
- * @param {Function} setter The function to set accumulator values.
336
- * @param {Function} [initializer] The accumulator object initializer.
337
- * @returns {Function} Returns the new aggregator function.
338
- */
339
- function createAggregator(setter, initializer) {
340
- return function(collection, iteratee) {
341
- var func = isArray(collection) ? arrayAggregator : baseAggregator,
342
- accumulator = {};
343
-
344
- return func(collection, setter, baseIteratee(iteratee), accumulator);
345
- };
346
- }
347
-
348
- /**
349
- * Creates an object composed of keys generated from the results of running
350
- * each element of `collection` thru `iteratee`. The corresponding value of
351
- * each key is the last element responsible for generating the key. The
352
- * iteratee is invoked with one argument: (value).
353
- *
354
- * @static
355
- * @memberOf _
356
- * @since 4.0.0
357
- * @category Collection
358
- * @param {Array|Object} collection The collection to iterate over.
359
- * @param {Function} [iteratee=_.identity] The iteratee to transform keys.
360
- * @returns {Object} Returns the composed aggregate object.
361
- * @example
362
- *
363
- * var array = [
364
- * { 'dir': 'left', 'code': 97 },
365
- * { 'dir': 'right', 'code': 100 }
366
- * ];
367
- *
368
- * _.keyBy(array, function(o) {
369
- * return String.fromCharCode(o.code);
370
- * });
371
- * // => { 'a': { 'dir': 'left', 'code': 97 }, 'd': { 'dir': 'right', 'code': 100 } }
372
- *
373
- * _.keyBy(array, 'dir');
374
- * // => { 'left': { 'dir': 'left', 'code': 97 }, 'right': { 'dir': 'right', 'code': 100 } }
375
- */
376
- var keyBy = createAggregator(function(result, value, key) {
377
- baseAssignValue(result, key, value);
378
- });
379
-
380
264
  const HeaderRenderer = (p) => {
381
- var _a, _b, _c, _d, _e;
265
+ var _a, _b, _c, _d, _e, _f, _g;
382
266
  const cellClass = {
383
267
  [HEADER_CLASS]: true,
384
268
  [HEADER_SORTABLE_CLASS]: !!((_a = p.data) === null || _a === void 0 ? void 0 : _a.sortable),
@@ -387,15 +271,16 @@ const HeaderRenderer = (p) => {
387
271
  cellClass[p.data.order] = true;
388
272
  }
389
273
  const dataProps = {
274
+ key: String((_d = (_c = p.data) === null || _c === void 0 ? void 0 : _c.prop) !== null && _d !== void 0 ? _d : p.column.itemIndex),
390
275
  [DATA_COL]: p.column.itemIndex,
391
276
  canResize: p.canResize,
392
- minWidth: ((_c = p.data) === null || _c === void 0 ? void 0 : _c.minSize) || MIN_COL_SIZE,
393
- maxWidth: (_d = p.data) === null || _d === void 0 ? void 0 : _d.maxSize,
277
+ minWidth: ((_e = p.data) === null || _e === void 0 ? void 0 : _e.minSize) || MIN_COL_SIZE,
278
+ maxWidth: (_f = p.data) === null || _f === void 0 ? void 0 : _f.maxSize,
394
279
  active: p.active || ['r'],
395
280
  class: cellClass,
396
281
  style: {
397
282
  width: `${p.column.size}px`,
398
- transform: `translateX(${p.column.start}px)`,
283
+ transform: `translateX(${p.column.start - (p.renderOffset || 0)}px)`,
399
284
  },
400
285
  onResize: p.onResize,
401
286
  onDblClick(originalEvent) {
@@ -426,11 +311,12 @@ const HeaderRenderer = (p) => {
426
311
  }
427
312
  }
428
313
  }
429
- return (h(HeaderCellRenderer, { data: p.data, props: dataProps, additionalData: p.additionalData }, h(SortingSign, { column: p.data }), p.canFilter && ((_e = p.data) === null || _e === void 0 ? void 0 : _e.filter) !== false ? (h(FilterButton, { column: p.data })) : ('')));
314
+ return (h(HeaderCellRenderer, { data: p.data, props: dataProps, additionalData: p.additionalData }, h(SortingSign, { column: p.data }), p.canFilter && ((_g = p.data) === null || _g === void 0 ? void 0 : _g.filter) !== false ? (h(FilterButton, { column: p.data })) : ('')));
430
315
  };
431
316
 
432
317
  const HeaderGroupRenderer = (p) => {
433
318
  const groupProps = {
319
+ key: `${p.group.name}-${p.group.indexes.join('-')}`,
434
320
  canResize: p.canResize,
435
321
  minWidth: p.group.indexes.length * MIN_COL_SIZE,
436
322
  maxWidth: 0,
@@ -439,7 +325,7 @@ const HeaderGroupRenderer = (p) => {
439
325
  [HEADER_CLASS]: true,
440
326
  },
441
327
  style: {
442
- transform: `translateX(${p.start}px)`,
328
+ transform: `translateX(${p.start - (p.renderOffset || 0)}px)`,
443
329
  width: `${p.end - p.start}px`,
444
330
  },
445
331
  onResize: p.onResize,
@@ -447,7 +333,7 @@ const HeaderGroupRenderer = (p) => {
447
333
  return (h(HeaderCellRenderer, { data: Object.assign(Object.assign({}, p.group), { prop: '', providers: p.providers, index: p.start }), props: groupProps, additionalData: p.additionalData }));
448
334
  };
449
335
 
450
- 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}`;
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 .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}`;
451
337
 
452
338
  const RevogrHeaderComponent = class {
453
339
  constructor(hostRef) {
@@ -480,13 +366,10 @@ const RevogrHeaderComponent = class {
480
366
  }
481
367
  onResizeGroup(changedX, startIndex, endIndex) {
482
368
  const sizes = {};
483
- const cols = keyBy(this.viewportCol.get('items'), 'itemIndex');
484
369
  const change = changedX / (endIndex - startIndex + 1);
485
370
  for (let i = startIndex; i <= endIndex; i++) {
486
- const item = cols[i];
487
- if (item) {
488
- sizes[i] = item.size + change;
489
- }
371
+ const item = getItemByIndex(this.dimensionCol.state, i);
372
+ sizes[i] = item.end - item.start + change;
490
373
  }
491
374
  this.headerresize.emit(sizes);
492
375
  }
@@ -500,12 +383,13 @@ const RevogrHeaderComponent = class {
500
383
  const { cells } = this.renderHeaderColumns(cols, range);
501
384
  const groupRow = this.renderGroupingColumns();
502
385
  return [
503
- h("div", { key: 'a8d57270f4758b454fb4900808453e0c4663c91c', class: "group-rgRow" }, groupRow),
504
- h("div", { key: '41a270ff6bde9943a81d9c46482f2a40312afb50', class: `${HEADER_ROW_CLASS} ${HEADER_ACTUAL_ROW_CLASS}` }, cells),
386
+ h("div", { key: '3cc466db6bc4df0cd61c47a22c3a0473318e5dd8', class: "group-rgRow" }, groupRow),
387
+ h("div", { key: '9742a3fa4d4b75073aef5544806f42386ebffdea', class: `${HEADER_ROW_CLASS} ${HEADER_ACTUAL_ROW_CLASS}` }, cells),
505
388
  ];
506
389
  }
507
390
  renderHeaderColumns(cols, range) {
508
- const cells = [];
391
+ const columnsToRender = [];
392
+ const renderOffset = this.viewportCol.get('renderOffset') || 0;
509
393
  for (let rgCol of cols) {
510
394
  const colData = this.colData[rgCol.itemIndex];
511
395
  const props = {
@@ -514,6 +398,7 @@ const RevogrHeaderComponent = class {
514
398
  data: Object.assign(Object.assign({}, colData), { index: rgCol.itemIndex, providers: this.providers }),
515
399
  canFilter: !!this.columnFilter,
516
400
  canResize: this.canResize,
401
+ renderOffset,
517
402
  active: this.resizeHandler,
518
403
  additionalData: this.additionalData,
519
404
  onResize: e => this.onResize(e, rgCol.itemIndex),
@@ -522,45 +407,106 @@ const RevogrHeaderComponent = class {
522
407
  };
523
408
  const event = this.beforeHeaderRender.emit(props);
524
409
  if (!event.defaultPrevented) {
525
- cells.push(h(HeaderRenderer, Object.assign({}, event.detail)));
410
+ columnsToRender.push(event.detail);
526
411
  }
527
412
  }
413
+ const duplicateProps = this.getDuplicateHeaderProps(columnsToRender);
414
+ const cells = columnsToRender.map(detail => h(HeaderRenderer, Object.assign({ key: this.getHeaderCellKey(detail.data, this.type, duplicateProps) }, detail)));
528
415
  return { cells };
529
416
  }
530
417
  renderGroupingColumns() {
418
+ const visibleGroupRange = this.getVisibleGroupRange();
419
+ return Array.from({ length: this.groupingDepth }, (_, level) => this.renderGroupRow(level, visibleGroupRange)).flat();
420
+ }
421
+ renderGroupRow(level, visibleGroupRange) {
422
+ const groupCells = (this.groups[level] || [])
423
+ .map(group => this.renderGroupColumn(group, level, visibleGroupRange))
424
+ .filter((cell) => !!cell);
425
+ return [
426
+ ...groupCells,
427
+ h('div', {
428
+ key: `group-row-${level}`,
429
+ class: {
430
+ [HEADER_ROW_CLASS]: true,
431
+ group: true,
432
+ },
433
+ }),
434
+ ];
435
+ }
436
+ renderGroupColumn(group, level, visibleGroupRange) {
531
437
  var _a;
532
- const groupRow = [];
533
- for (let i = 0; i < this.groupingDepth; i++) {
534
- if (this.groups[i]) {
535
- for (let group of this.groups[i]) {
536
- const groupStartIndex = (_a = group.indexes[0]) !== null && _a !== void 0 ? _a : -1;
537
- if (groupStartIndex > -1) {
538
- const groupEndIndex = groupStartIndex + group.indexes.length - 1;
539
- const groupStart = getItemByIndex(this.dimensionCol.state, groupStartIndex).start;
540
- const groupEnd = getItemByIndex(this.dimensionCol.state, groupEndIndex).end;
541
- const props = {
542
- providers: this.providers,
543
- start: groupStart,
544
- end: groupEnd,
545
- group,
546
- active: this.resizeHandler,
547
- canResize: this.canResize,
548
- additionalData: this.additionalData,
549
- onResize: e => {
550
- var _a;
551
- return this.onResizeGroup((_a = e.changedX) !== null && _a !== void 0 ? _a : 0, groupStartIndex, groupEndIndex);
552
- },
553
- };
554
- const event = this.beforeGroupHeaderRender.emit(props);
555
- if (!event.defaultPrevented) {
556
- groupRow.push(h(HeaderGroupRenderer, Object.assign({}, event.detail)));
557
- }
558
- }
438
+ const groupStartIndex = (_a = group.indexes[0]) !== null && _a !== void 0 ? _a : -1;
439
+ if (groupStartIndex < 0) {
440
+ return;
441
+ }
442
+ const groupEndIndex = groupStartIndex + group.indexes.length - 1;
443
+ if (!visibleGroupRange ||
444
+ !isGroupInVisibleRange(groupStartIndex, groupEndIndex, visibleGroupRange)) {
445
+ return;
446
+ }
447
+ const groupStart = getItemByIndex(this.dimensionCol.state, groupStartIndex).start;
448
+ const groupEnd = getItemByIndex(this.dimensionCol.state, groupEndIndex).end;
449
+ const props = {
450
+ providers: this.providers,
451
+ start: groupStart,
452
+ end: groupEnd,
453
+ group,
454
+ renderOffset: this.viewportCol.get('renderOffset') || 0,
455
+ active: this.resizeHandler,
456
+ canResize: this.canResize,
457
+ additionalData: this.additionalData,
458
+ onResize: e => {
459
+ var _a;
460
+ return this.onResizeGroup((_a = e.changedX) !== null && _a !== void 0 ? _a : 0, groupStartIndex, groupEndIndex);
461
+ },
462
+ };
463
+ const event = this.beforeGroupHeaderRender.emit(props);
464
+ if (event.defaultPrevented) {
465
+ return;
466
+ }
467
+ return h(HeaderGroupRenderer, Object.assign({ key: this.getGroupHeaderCellKey(event.detail.group, level) }, event.detail));
468
+ }
469
+ getVisibleGroupRange() {
470
+ const visibleColumns = this.viewportCol.get('items');
471
+ if (!visibleColumns.length) {
472
+ return;
473
+ }
474
+ return visibleColumns.reduce((range, column) => ({
475
+ start: Math.min(range.start, column.itemIndex),
476
+ end: Math.max(range.end, column.itemIndex),
477
+ }), {
478
+ start: visibleColumns[0].itemIndex,
479
+ end: visibleColumns[0].itemIndex,
480
+ });
481
+ }
482
+ getHeaderCellKey(column, type, duplicateProps) {
483
+ if ((column === null || column === void 0 ? void 0 : column.prop) === undefined) {
484
+ return `${type}-${String(column === null || column === void 0 ? void 0 : column.index)}`;
485
+ }
486
+ const propKey = String(column.prop);
487
+ if (duplicateProps.has(propKey)) {
488
+ return `${type}-${propKey}-${String(column.index)}`;
489
+ }
490
+ return `${type}-${propKey}`;
491
+ }
492
+ getDuplicateHeaderProps(columns) {
493
+ const seenProps = new Set();
494
+ const duplicateProps = new Set();
495
+ columns.forEach(({ data }) => {
496
+ if ((data === null || data === void 0 ? void 0 : data.prop) !== undefined) {
497
+ const propKey = String(data.prop);
498
+ if (seenProps.has(propKey)) {
499
+ duplicateProps.add(propKey);
500
+ }
501
+ else {
502
+ seenProps.add(propKey);
559
503
  }
560
504
  }
561
- groupRow.push(h("div", { class: `${HEADER_ROW_CLASS} group` }));
562
- }
563
- return groupRow;
505
+ });
506
+ return duplicateProps;
507
+ }
508
+ getGroupHeaderCellKey(group, level) {
509
+ return `group-${level}-${group.name}-${group.indexes.join('-')}`;
564
510
  }
565
511
  get providers() {
566
512
  return {
@@ -574,6 +520,10 @@ const RevogrHeaderComponent = class {
574
520
  }
575
521
  get element() { return getElement(this); }
576
522
  };
523
+ function isGroupInVisibleRange(groupStartIndex, groupEndIndex, visibleRange) {
524
+ return (groupStartIndex <= visibleRange.end &&
525
+ groupEndIndex >= visibleRange.start);
526
+ }
577
527
  RevogrHeaderComponent.style = revogrHeaderStyleCss();
578
528
 
579
529
  class GridResizeService {
@@ -656,7 +606,7 @@ const RevogrViewportScroll = class {
656
606
  * @param e
657
607
  */
658
608
  async changeScroll(e, silent = false) {
659
- var _a, _b;
609
+ var _a, _b, _c, _d;
660
610
  if (silent) {
661
611
  if (e.coordinate && this.verticalScroll) {
662
612
  switch (e.dimension) {
@@ -669,15 +619,16 @@ const RevogrViewportScroll = class {
669
619
  return;
670
620
  }
671
621
  if (e.delta) {
622
+ let currentPhysicalCoordinate = 0;
672
623
  switch (e.dimension) {
673
624
  case 'rgCol':
674
- e.coordinate = this.horizontalScroll.scrollLeft + e.delta;
625
+ currentPhysicalCoordinate = this.horizontalScroll.scrollLeft;
675
626
  break;
676
627
  case 'rgRow':
677
- e.coordinate = ((_b = (_a = this.verticalScroll) === null || _a === void 0 ? void 0 : _a.scrollTop) !== null && _b !== void 0 ? _b : 0) + e.delta;
628
+ currentPhysicalCoordinate = (_b = (_a = this.verticalScroll) === null || _a === void 0 ? void 0 : _a.scrollTop) !== null && _b !== void 0 ? _b : 0;
678
629
  break;
679
630
  }
680
- this.setScroll(e);
631
+ return (_d = (_c = this.localScrollService) === null || _c === void 0 ? void 0 : _c.setScrollByDelta(e, currentPhysicalCoordinate)) !== null && _d !== void 0 ? _d : e;
681
632
  }
682
633
  return e;
683
634
  }
@@ -829,7 +780,10 @@ const RevogrViewportScroll = class {
829
780
  this.setScrollVisibility('rgCol', this.horizontalScroll.clientWidth, this.contentWidth);
830
781
  }
831
782
  render() {
832
- return (h(Host, { key: 'adc7378dba1794ca2ec263d52b09abefe50bcbfd', onWheel: this.horizontalMouseWheel, onScroll: (e) => this.applyScroll('rgCol', e) }, h("div", { key: '7b57a8a0ea44629fefcfe4d2cd77bf0f048d8e06', class: "inner-content-table", style: { width: `${this.contentWidth}px` } }, h("div", { key: 'cca3de158bc2a7f0651f578a281819be5698b257', class: "header-wrapper", ref: e => (this.header = e) }, h("slot", { key: '1d170147dabe034f2c35481a8e2fedd6de2b6aed', name: HEADER_SLOT })), h("div", { key: 'b6dd29a91bb1f380a83a035dfdb749ca669936f2', class: "vertical-inner", ref: el => (this.verticalScroll = el), onWheel: this.verticalMouseWheel, onScroll: (e) => this.applyScroll('rgRow', e) }, h("div", { key: '9bce27bf8ec4d3b679aa9a34eb6379a8c2d46cac', class: "content-wrapper", style: { height: `${this.contentHeight}px` } }, h("slot", { key: 'b44a082c9fbb948fd87bd235b4cd4356fd4a3536', name: CONTENT_SLOT }))), h("div", { key: '28c305ff6bc664f1d1bbb117e8b8565c8d4bb6b2', class: "footer-wrapper", ref: e => (this.footer = e) }, h("slot", { key: '96312fb7f18198fd1feb9dcc00c79cde74ba9c9f', name: FOOTER_SLOT })))));
783
+ var _a, _b, _c, _d;
784
+ const physicalContentHeight = getContentSize(this.contentHeight, (_b = (_a = this.verticalScroll) === null || _a === void 0 ? void 0 : _a.clientHeight) !== null && _b !== void 0 ? _b : 0);
785
+ const physicalContentWidth = getContentSize(this.contentWidth, (_d = (_c = this.horizontalScroll) === null || _c === void 0 ? void 0 : _c.clientWidth) !== null && _d !== void 0 ? _d : 0);
786
+ return (h(Host, { key: 'a0c47dede9d131dea8c8ca449e8a323f24d9b113', onWheel: this.horizontalMouseWheel, onScroll: (e) => this.applyScroll('rgCol', e) }, h("div", { key: '6c960e753ffe522ba4afb1c379264873b6c617f3', class: "inner-content-table", style: { width: `${physicalContentWidth}px` } }, h("div", { key: '1a6cbcbd3634e84756b54c8150aebd25c824e14a', class: "header-wrapper", ref: e => (this.header = e) }, h("slot", { key: 'e4202c687bc39b4f78f3ed9840e979b032f06af8', name: HEADER_SLOT })), h("div", { key: '651415b5b32e72735065b183317386a34042bb85', class: "vertical-inner", ref: el => (this.verticalScroll = el), onWheel: this.verticalMouseWheel, onScroll: (e) => this.applyScroll('rgRow', e) }, h("div", { key: 'e65623b78d80957d8676adb019618953ef267ec3', class: "content-wrapper", style: { height: `${physicalContentHeight}px` } }, h("slot", { key: '5af47b12ef1226587cf774233447b5252d65e836', name: CONTENT_SLOT }))), h("div", { key: 'cbc0fd64fbfb53d3b18e547bbe34e32b7bb9c043', class: "footer-wrapper", ref: e => (this.footer = e) }, h("slot", { key: 'a8e4bfaef400973121090bac3069eb85469a95f3', name: FOOTER_SLOT })))));
833
787
  }
834
788
  /**
835
789
  * Extra layer for scroll event monitoring, where MouseWheel event is not passing
@@ -2,7 +2,7 @@
2
2
  * Built by Revolist OU ❤️
3
3
  */
4
4
  import { r as registerInstance, d as createEvent, h, e as Host, g as getElement } from './index-Chp_81rd.js';
5
- import { d as debounce } from './debounce-BfO9dz9v.js';
5
+ import { d as debounce } from './debounce-PCRWZliA.js';
6
6
  import { i as isFilterBtn, e as AndOrButton, d as TrashButton } from './filter.button-C8XTWPU2.js';
7
7
 
8
8
  (function closest() {
@@ -267,7 +267,8 @@ const FilterPanel = class {
267
267
  const options = [];
268
268
  const prop = this.changes.prop;
269
269
  const hidden = new Set();
270
- Object.entries(this.filterItems).forEach(([_, values]) => {
270
+ Object.keys(this.filterItems).forEach((prop) => {
271
+ const values = this.filterItems[prop];
271
272
  values.forEach((filter) => {
272
273
  if (filter.hidden) {
273
274
  hidden.add(filter.type);
@@ -1,8 +1,8 @@
1
1
  /*!
2
2
  * Built by Revolist OU ❤️
3
3
  */
4
- import { d as isTab, f as isEnterKeyValue } from './edit.utils-CzfeG98N.js';
5
- import { u as timeout } from './dimension.helpers-DzxqJQqN.js';
4
+ import { d as isTab, f as isEnterKeyValue } from './edit.utils-Dnnbd0xG.js';
5
+ import { t as timeout } from './index-Db3qZoW5.js';
6
6
 
7
7
  class TextEditor {
8
8
  constructor(data, saveCallback) {