@revolist/revogrid 4.27.0 → 4.27.2

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 (76) hide show
  1. package/dist/cjs/{cell-renderer-C7rdgaov.js → cell-renderer-BDIx0xys.js} +1 -1
  2. package/dist/cjs/{column.service-Bbml5C2j.js → column.service-D-ENzqyb.js} +2 -0
  3. package/dist/cjs/{filter.button-F2Bw3UAd.js → filter.button-C6ixuMmr.js} +3 -2
  4. package/dist/cjs/{header-cell-renderer-BljFI6wj.js → header-cell-renderer-B5Y4fdZC.js} +1 -1
  5. package/dist/cjs/index.cjs.js +7 -5
  6. package/dist/cjs/loader.cjs.js +1 -1
  7. package/dist/cjs/revo-grid.cjs.entry.js +63 -43
  8. package/dist/cjs/revo-grid.cjs.js +1 -1
  9. package/dist/cjs/revogr-attribution_7.cjs.entry.js +1 -1
  10. package/dist/cjs/revogr-data_4.cjs.entry.js +12 -11
  11. package/dist/cjs/revogr-filter-panel.cjs.entry.js +139 -33
  12. package/dist/cjs/{row-resize.plugin-BRQy_qNn.js → row-resize.plugin-C4YOF1lN.js} +353 -185
  13. package/dist/collection/components/header/header-renderer.js +7 -6
  14. package/dist/collection/components/header/revogr-header-style.css +8 -3
  15. package/dist/collection/components/revoGrid/revo-grid-style.css +12 -2
  16. package/dist/collection/components/revoGrid/revo-grid.js +37 -21
  17. package/dist/collection/plugins/filter/filter.button.js +3 -2
  18. package/dist/collection/plugins/filter/filter.indexed.js +5 -0
  19. package/dist/collection/plugins/filter/filter.panel.js +138 -31
  20. package/dist/collection/plugins/filter/filter.plugin.js +48 -5
  21. package/dist/collection/plugins/filter/filter.style.css +25 -3
  22. package/dist/collection/plugins/groupingRow/grouping.const.js +1 -0
  23. package/dist/collection/plugins/groupingRow/grouping.row.plugin.js +84 -54
  24. package/dist/collection/plugins/groupingRow/grouping.sorting.service.js +58 -0
  25. package/dist/collection/plugins/groupingRow/grouping.trimmed.service.js +5 -3
  26. package/dist/collection/plugins/row-resize/row-resize.plugin.js +144 -113
  27. package/dist/collection/plugins/sorting/sorting.plugin.js +16 -13
  28. package/dist/collection/plugins/wcag/index.js +5 -4
  29. package/dist/collection/services/dimension.provider.js +17 -1
  30. package/dist/esm/{cell-renderer-BFpmdV8H.js → cell-renderer-D9ze8OJw.js} +1 -1
  31. package/dist/esm/{column.service-CM-wgGs8.js → column.service-pu_fdQ0S.js} +2 -1
  32. package/dist/esm/{filter.button-DMhpuAiw.js → filter.button-CEPUxLUo.js} +3 -2
  33. package/dist/{revo-grid/header-cell-renderer-Bqh1PrgH.js → esm/header-cell-renderer-YCiVIQ2E.js} +1 -1
  34. package/dist/esm/index.js +6 -6
  35. package/dist/esm/loader.js +1 -1
  36. package/dist/esm/revo-grid.entry.js +63 -43
  37. package/dist/esm/revo-grid.js +1 -1
  38. package/dist/esm/revogr-attribution_7.entry.js +1 -1
  39. package/dist/esm/revogr-data_4.entry.js +12 -11
  40. package/dist/esm/revogr-filter-panel.entry.js +139 -33
  41. package/dist/esm/{row-resize.plugin-BRiaHlHA.js → row-resize.plugin-Beu0pMds.js} +354 -187
  42. package/dist/revo-grid/{cell-renderer-BFpmdV8H.js → cell-renderer-D9ze8OJw.js} +1 -1
  43. package/dist/revo-grid/{column.service-CM-wgGs8.js → column.service-pu_fdQ0S.js} +2 -1
  44. package/dist/revo-grid/{filter.button-DMhpuAiw.js → filter.button-CEPUxLUo.js} +3 -2
  45. package/dist/{esm/header-cell-renderer-Bqh1PrgH.js → revo-grid/header-cell-renderer-YCiVIQ2E.js} +1 -1
  46. package/dist/revo-grid/index.esm.js +6 -6
  47. package/dist/revo-grid/revo-grid.entry.js +63 -43
  48. package/dist/revo-grid/revo-grid.esm.js +1 -1
  49. package/dist/revo-grid/revogr-attribution_7.entry.js +1 -1
  50. package/dist/revo-grid/revogr-data_4.entry.js +12 -11
  51. package/dist/revo-grid/revogr-filter-panel.entry.js +139 -33
  52. package/dist/revo-grid/{row-resize.plugin-BRiaHlHA.js → row-resize.plugin-Beu0pMds.js} +354 -187
  53. package/dist/types/components/revoGrid/revo-grid.d.ts +2 -0
  54. package/dist/types/plugins/filter/filter.indexed.d.ts +2 -0
  55. package/dist/types/plugins/filter/filter.panel.d.ts +9 -2
  56. package/dist/types/plugins/filter/filter.plugin.d.ts +8 -1
  57. package/dist/types/plugins/filter/filter.types.d.ts +8 -0
  58. package/dist/types/plugins/groupingRow/grouping.const.d.ts +1 -0
  59. package/dist/types/plugins/groupingRow/grouping.row.plugin.d.ts +5 -7
  60. package/dist/types/plugins/groupingRow/grouping.sorting.service.d.ts +7 -0
  61. package/dist/types/plugins/groupingRow/grouping.trimmed.service.d.ts +9 -0
  62. package/dist/types/plugins/row-resize/row-resize.plugin.d.ts +14 -12
  63. package/dist/types/plugins/sorting/sorting.plugin.d.ts +5 -0
  64. package/dist/types/services/dimension.provider.d.ts +7 -1
  65. package/dist/types/types/interfaces.d.ts +13 -1
  66. package/hydrate/index.js +561 -264
  67. package/hydrate/index.mjs +561 -264
  68. package/package.json +1 -1
  69. package/standalone/column.service.js +1 -1
  70. package/standalone/filter.button.js +1 -1
  71. package/standalone/index.js +1 -1
  72. package/standalone/revo-grid.js +1 -1
  73. package/standalone/revogr-data2.js +1 -1
  74. package/standalone/revogr-filter-panel.js +1 -1
  75. package/standalone/revogr-header2.js +1 -1
  76. package/standalone/revogr-overlay-selection2.js +1 -1
@@ -1,9 +1,9 @@
1
1
  /*!
2
2
  * Built by Revolist OU ❤️
3
3
  */
4
- import { getItemByIndex } from "../../store/index";
4
+ import { getItemByIndex, getViewportMaxCoordinate, rowTypes } from "../../store/index";
5
5
  import { BasePlugin } from "../base.plugin";
6
- import { GROUP_EXPAND_EVENT } from "../groupingRow/grouping.const";
6
+ import { BEFORE_GROUPING_APPLY_EVENT, GROUP_EXPAND_EVENT, } from "../groupingRow/grouping.const";
7
7
  import { clampRowResizeHeight, createRowResizePatch, getRowResizeIndexes, mergeRowResizeDefinitions, resolveRowResizeConfig, } from "./row-resize.utils";
8
8
  export const ROW_RESIZE_HANDLE_CLASS = 'row-resize-handle';
9
9
  export const BEFORE_ROW_RESIZE_EVENT = 'beforerowresize';
@@ -11,18 +11,14 @@ export const ROW_RESIZE_EVENT = 'rowresize';
11
11
  export const AFTER_ROW_RESIZE_EVENT = 'afterrowresize';
12
12
  export const ROW_RESIZE_CANCEL_EVENT = 'rowresizecancel';
13
13
  export class RowResizePlugin extends BasePlugin {
14
- static fromGridProperty(revogrid, providers) {
15
- const plugin = new RowResizePlugin(revogrid, providers);
16
- plugin.controlFromGridProperty();
17
- return plugin;
18
- }
19
14
  constructor(revogrid, providers, config = {}) {
20
15
  super(revogrid, providers);
21
16
  this.enabled = false;
22
- this.gridResizeRow = false;
23
- this.gridPlugins = [];
24
- this.committedSizes = new Map();
25
- this.appliedIndexes = new Map();
17
+ this.appliedDefinitionIndexes = new Map();
18
+ this.pendingBottomAnchor = false;
19
+ this.keepBottomAnchor = false;
20
+ this.rowDefinitionRemapQueued = false;
21
+ this.pendingSourceCounts = new Map();
26
22
  this.previousBodyCursor = '';
27
23
  this.decorateRow = ({ detail, }) => {
28
24
  if (!this.enabled ||
@@ -86,22 +82,72 @@ export class RowResizePlugin extends BasePlugin {
86
82
  }
87
83
  };
88
84
  this.onWindowBlur = () => this.cancel('blur');
89
- this.reapplyCommittedSizes = () => this.applyCommittedSizes(false);
90
- this.rebuildCommittedSizes = () => this.applyCommittedSizes(true);
91
- this.syncAppliedIndexes = () => {
92
- for (const [rowType, committed] of this.committedSizes) {
85
+ this.updateBottomAnchorState = ({ detail, }) => {
86
+ if (detail.dimension !== 'rgRow') {
87
+ return;
88
+ }
89
+ this.keepBottomAnchor = this.isMainViewportAtBottom(detail.coordinate);
90
+ };
91
+ this.applyPendingBottomAnchor = () => {
92
+ if (!this.pendingBottomAnchor) {
93
+ return;
94
+ }
95
+ this.pendingBottomAnchor = false;
96
+ const dimension = this.providers.dimension.stores.rgRow.store;
97
+ // Scroll surfaces have slightly different client sizes. Give the shared
98
+ // scrolling service the content end and let each surface clamp to its own
99
+ // exact bottom coordinate.
100
+ void this.revogrid.scrollToCoordinate({ y: dimension.get('realSize') });
101
+ };
102
+ this.scheduleRowDefinitionRemap = () => {
103
+ if (this.rowDefinitionRemapQueued) {
104
+ return;
105
+ }
106
+ this.rowDefinitionRemapQueued = true;
107
+ queueMicrotask(() => {
108
+ if (!this.rowDefinitionRemapQueued) {
109
+ return;
110
+ }
111
+ this.pruneRowDefinitions();
112
+ this.reapplyRowDefinitionSizes();
113
+ this.rowDefinitionRemapQueued = false;
114
+ });
115
+ };
116
+ /** Map source-indexed row definitions back onto the current virtual order. */
117
+ this.reapplyRowDefinitionSizes = () => {
118
+ const rowDefinitions = this.providers.dimension.getRowDefinitions();
119
+ for (const rowType of rowTypes) {
93
120
  const items = this.providers.data.stores[rowType].store.get('items');
121
+ const definitions = new Map(rowDefinitions
122
+ .filter(definition => definition.type === rowType)
123
+ .map(definition => [definition.index, definition.size]));
124
+ const appliedIndexes = this.appliedDefinitionIndexes.get(rowType);
125
+ if (!definitions.size && !(appliedIndexes === null || appliedIndexes === void 0 ? void 0 : appliedIndexes.size)) {
126
+ continue;
127
+ }
128
+ const dimension = this.providers.dimension.stores[rowType];
129
+ const currentSizes = dimension.store.get('sizes');
130
+ const sizes = Object.assign({}, currentSizes);
131
+ for (const index of appliedIndexes || []) {
132
+ delete sizes[index];
133
+ }
94
134
  const indexes = new Set();
95
135
  items.forEach((physicalIndex, virtualIndex) => {
96
- if (committed.has(physicalIndex)) {
136
+ const size = definitions.get(physicalIndex);
137
+ if (size !== undefined) {
138
+ sizes[virtualIndex] = size;
97
139
  indexes.add(virtualIndex);
98
140
  }
99
141
  });
100
- this.appliedIndexes.set(rowType, indexes);
142
+ this.appliedDefinitionIndexes.set(rowType, indexes);
143
+ const sizeKeys = Object.keys(sizes);
144
+ if (sizeKeys.length !== Object.keys(currentSizes).length ||
145
+ sizeKeys.some(index => sizes[index] !== currentSizes[index])) {
146
+ this.providers.dimension.setCustomSizes(rowType, sizes);
147
+ }
101
148
  }
102
149
  };
103
150
  this.config = resolveRowResizeConfig(config);
104
- this.rowDefinitionsRef = revogrid.rowDefinitions;
105
151
  if (new.target !== RowResizePlugin) {
106
152
  this.enabled = true;
107
153
  this.registerEventListeners();
@@ -109,77 +155,53 @@ export class RowResizePlugin extends BasePlugin {
109
155
  }
110
156
  registerEventListeners() {
111
157
  this.addEventListener('beforerowrender', this.decorateRow);
112
- this.addEventListener('beforeanysource', ({ detail }) => {
158
+ this.addEventListener('beforeanysource', () => {
113
159
  this.cancel('data-change');
114
- const committed = this.committedSizes.get(detail.type);
115
- if (!committed) {
116
- return;
117
- }
118
- const removedIndexes = new Set();
119
- for (const index of committed.keys()) {
120
- if (index >= detail.source.length) {
121
- committed.delete(index);
122
- removedIndexes.add(index);
123
- }
124
- }
125
- if (removedIndexes.size) {
126
- const rowDefinitions = this.revogrid.rowDefinitions.filter(definition => definition.type !== detail.type ||
127
- !removedIndexes.has(definition.index));
128
- this.rowDefinitionsRef = rowDefinitions;
129
- this.revogrid.rowDefinitions = rowDefinitions;
130
- }
160
+ this.keepBottomAnchor = false;
161
+ });
162
+ this.addEventListener('afteranysource', ({ detail }) => {
163
+ this.pendingSourceCounts.set(detail.type, detail.source.length);
164
+ this.scheduleRowDefinitionRemap();
131
165
  });
132
- this.addEventListener('afteranysource', this.rebuildCommittedSizes);
133
166
  this.addEventListener('beforesourcesortingapply', this.cancelForDataChange);
134
- this.addEventListener('aftersortingapply', this.reapplyCommittedSizes);
167
+ this.addEventListener('beforesortingapply', this.cancelForDataChange);
168
+ this.addEventListener('sortingconfigchanged', this.cancelForDataChange);
169
+ this.addEventListener(BEFORE_GROUPING_APPLY_EVENT, this.cancelForDataChange);
170
+ this.addEventListener('aftersortingapply', this.scheduleRowDefinitionRemap);
135
171
  this.addEventListener('beforefilterapply', this.cancelForDataChange);
136
- this.addEventListener('beforerowdefinition', ({ detail }) => {
172
+ this.addEventListener('afterfilterapply', this.scheduleRowDefinitionRemap);
173
+ this.addEventListener('beforerowdefinition', () => {
137
174
  this.cancel('data-change');
138
- if (detail.vals !== this.rowDefinitionsRef) {
139
- this.committedSizes.clear();
140
- this.appliedIndexes.clear();
141
- this.rowDefinitionsRef = detail.vals;
142
- }
143
- });
144
- this.addEventListener('afterthemechanged', this.reapplyCommittedSizes);
145
- this.addEventListener('aftertrimmed', this.syncAppliedIndexes);
146
- this.addEventListener('roworderchange', () => {
147
- queueMicrotask(this.reapplyCommittedSizes);
175
+ this.scheduleRowDefinitionRemap();
148
176
  });
177
+ this.addEventListener('afterthemechanged', this.scheduleRowDefinitionRemap);
178
+ this.addEventListener('aftertrimmed', this.scheduleRowDefinitionRemap);
179
+ this.addEventListener('roworderchange', this.scheduleRowDefinitionRemap);
149
180
  this.addEventListener(GROUP_EXPAND_EVENT, () => {
150
- queueMicrotask(this.reapplyCommittedSizes);
181
+ if (this.keepBottomAnchor) {
182
+ this.pendingBottomAnchor = true;
183
+ }
184
+ this.scheduleRowDefinitionRemap();
151
185
  });
186
+ this.addEventListener('aftergridrender', this.applyPendingBottomAnchor);
187
+ this.addEventListener('viewportscroll', this.updateBottomAnchorState);
152
188
  this.addEventListener('rowheaderschanged', ({ detail }) => {
153
189
  if (!detail && !this.config.fullRow) {
154
190
  this.cancel('row-headers-hidden');
155
191
  }
156
192
  });
157
193
  }
158
- controlFromGridProperty() {
159
- this.gridResizeRow = this.revogrid.resizeRow;
160
- this.gridPlugins = this.revogrid.plugins;
161
- this.syncGridProperty(false);
162
- this.watch('resizeRow', value => {
163
- this.gridResizeRow = value;
164
- this.syncGridProperty();
165
- });
166
- this.watch('plugins', value => {
167
- this.gridPlugins = value || [];
168
- this.syncGridProperty();
169
- });
170
- }
171
- syncGridProperty(refresh = true) {
172
- const hasConfiguredPlugin = this.gridPlugins.some(plugin => plugin !== RowResizePlugin &&
194
+ syncGridConfig(refresh = true) {
195
+ const { plugins = [], resizeRow } = this.revogrid;
196
+ const isCorePlugin = this.constructor === RowResizePlugin;
197
+ const hasConfiguredPlugin = plugins.some(plugin => plugin !== RowResizePlugin &&
173
198
  plugin.prototype instanceof RowResizePlugin);
174
- const explicitlyEnabled = this.gridPlugins.includes(RowResizePlugin);
175
- const enabled = hasConfiguredPlugin
176
- ? false
177
- : explicitlyEnabled || !!this.gridResizeRow;
178
- const config = resolveRowResizeConfig(!hasConfiguredPlugin &&
179
- !explicitlyEnabled &&
180
- typeof this.gridResizeRow === 'object'
181
- ? this.gridResizeRow
182
- : undefined);
199
+ const enabled = !isCorePlugin ||
200
+ (!hasConfiguredPlugin && !!resizeRow);
201
+ const resizeConfig = typeof resizeRow === 'object' ? resizeRow : undefined;
202
+ const config = isCorePlugin
203
+ ? resolveRowResizeConfig(resizeConfig)
204
+ : this.config;
183
205
  const configChanged = config.minHeight !== this.config.minHeight ||
184
206
  config.maxHeight !== this.config.maxHeight ||
185
207
  config.fullRow !== this.config.fullRow;
@@ -191,10 +213,13 @@ export class RowResizePlugin extends BasePlugin {
191
213
  if (enabled !== this.enabled) {
192
214
  this.enabled = enabled;
193
215
  if (enabled) {
194
- this.rowDefinitionsRef = this.revogrid.rowDefinitions;
195
216
  this.registerEventListeners();
196
217
  }
197
218
  else {
219
+ this.pendingBottomAnchor = false;
220
+ this.keepBottomAnchor = false;
221
+ this.rowDefinitionRemapQueued = false;
222
+ this.pendingSourceCounts.clear();
198
223
  this.clearSubscriptions();
199
224
  }
200
225
  }
@@ -213,6 +238,7 @@ export class RowResizePlugin extends BasePlugin {
213
238
  }
214
239
  const dimension = this.providers.dimension.stores[rowType];
215
240
  const dimensionState = dimension.getCurrentState();
241
+ const viewport = this.providers.viewport.stores[rowType];
216
242
  const item = getItemByIndex(dimensionState, index);
217
243
  const focusedStore = this.providers.selection.focusedStore;
218
244
  const selectedRowType = focusedStore
@@ -244,16 +270,23 @@ export class RowResizePlugin extends BasePlugin {
244
270
  currentHeight: startHeight,
245
271
  previousSizes,
246
272
  originalCustomSizes: Object.assign({}, dimensionState.sizes),
247
- startEvent: event,
273
+ bottomAnchored: rowType === 'rgRow' &&
274
+ this.isMainViewportAtBottom(viewport.lastCoordinate),
248
275
  lastEvent: event,
249
276
  };
277
+ this.active = active;
250
278
  const beforeEvent = this.emit(BEFORE_ROW_RESIZE_EVENT, this.eventDetail(active, event, startHeight));
251
279
  if (beforeEvent.defaultPrevented) {
280
+ if (this.active === active) {
281
+ this.active = undefined;
282
+ }
283
+ return;
284
+ }
285
+ if (!this.enabled || this.active !== active) {
252
286
  return;
253
287
  }
254
288
  event.preventDefault();
255
289
  event.stopPropagation();
256
- this.active = active;
257
290
  const doc = this.revogrid.ownerDocument;
258
291
  this.previousBodyCursor = ((_a = doc.body) === null || _a === void 0 ? void 0 : _a.style.cursor) || '';
259
292
  if (doc.body) {
@@ -276,6 +309,7 @@ export class RowResizePlugin extends BasePlugin {
276
309
  return;
277
310
  }
278
311
  this.providers.dimension.setCustomSizes(active.rowType, createRowResizePatch(active.indexes, size), true);
312
+ this.requestBottomAnchor(active);
279
313
  active.currentHeight = size;
280
314
  this.emit(ROW_RESIZE_EVENT, this.eventDetail(active, active.lastEvent, size));
281
315
  }
@@ -294,7 +328,8 @@ export class RowResizePlugin extends BasePlugin {
294
328
  }
295
329
  }
296
330
  this.providers.dimension.setCustomSizes(active.rowType, currentSizes);
297
- const detail = Object.assign(Object.assign({}, this.eventDetail(active, active.lastEvent || active.startEvent, active.startHeight)), { reason });
331
+ this.requestBottomAnchor(active);
332
+ const detail = Object.assign(Object.assign({}, this.eventDetail(active, active.lastEvent, active.startHeight)), { reason });
298
333
  this.finishGesture();
299
334
  this.emit(ROW_RESIZE_CANCEL_EVENT, detail);
300
335
  }
@@ -313,51 +348,44 @@ export class RowResizePlugin extends BasePlugin {
313
348
  return;
314
349
  }
315
350
  const items = this.providers.data.stores[active.rowType].store.get('items');
316
- let committed = this.committedSizes.get(active.rowType);
317
- if (!committed) {
318
- committed = new Map();
319
- this.committedSizes.set(active.rowType, committed);
320
- }
321
- let applied = this.appliedIndexes.get(active.rowType);
322
- if (!applied) {
323
- applied = new Set();
324
- this.appliedIndexes.set(active.rowType, applied);
325
- }
326
351
  const physicalIndexes = active.indexes.reduce((result, index) => {
327
352
  const physicalIndex = items[index];
328
353
  if (physicalIndex !== undefined) {
329
- committed.set(physicalIndex, active.currentHeight);
330
- applied.add(index);
331
354
  result.push(physicalIndex);
332
355
  }
333
356
  return result;
334
357
  }, []);
335
358
  if (physicalIndexes.length) {
336
- const rowDefinitions = mergeRowResizeDefinitions(this.revogrid.rowDefinitions, active.rowType, physicalIndexes, active.currentHeight);
337
- this.rowDefinitionsRef = rowDefinitions;
338
- this.revogrid.rowDefinitions = rowDefinitions;
359
+ const rowDefinitions = mergeRowResizeDefinitions(this.providers.dimension.getRowDefinitions(), active.rowType, physicalIndexes, active.currentHeight);
360
+ this.providers.dimension.setRowDefinitions(rowDefinitions);
361
+ this.scheduleRowDefinitionRemap();
362
+ this.keepBottomAnchor = active.bottomAnchored;
363
+ this.requestBottomAnchor(active);
339
364
  }
340
365
  }
341
- applyCommittedSizes(clearAppliedIndexes) {
342
- for (const [rowType, committed] of this.committedSizes) {
343
- const dimension = this.providers.dimension.stores[rowType];
344
- const sizes = Object.assign({}, dimension.store.get('sizes'));
345
- if (clearAppliedIndexes) {
346
- for (const index of this.appliedIndexes.get(rowType) || []) {
347
- delete sizes[index];
348
- }
349
- }
350
- const items = this.providers.data.stores[rowType].store.get('items');
351
- const indexes = new Set();
352
- items.forEach((physicalIndex, virtualIndex) => {
353
- const size = committed.get(physicalIndex);
354
- if (size !== undefined) {
355
- sizes[virtualIndex] = size;
356
- indexes.add(virtualIndex);
357
- }
358
- });
359
- this.appliedIndexes.set(rowType, indexes);
360
- this.providers.dimension.setCustomSizes(rowType, sizes);
366
+ requestBottomAnchor(active) {
367
+ if (active.bottomAnchored) {
368
+ this.pendingBottomAnchor = true;
369
+ }
370
+ }
371
+ isMainViewportAtBottom(coordinate) {
372
+ const dimension = this.providers.dimension.stores.rgRow.getCurrentState();
373
+ const viewport = this.providers.viewport.stores.rgRow.store.state;
374
+ return (dimension.realSize > viewport.clientSize &&
375
+ coordinate >= getViewportMaxCoordinate(dimension, viewport.virtualSize));
376
+ }
377
+ pruneRowDefinitions() {
378
+ if (!this.pendingSourceCounts.size) {
379
+ return;
380
+ }
381
+ const definitions = this.providers.dimension.getRowDefinitions();
382
+ const rowDefinitions = definitions.filter(definition => {
383
+ const count = this.pendingSourceCounts.get(definition.type);
384
+ return count === undefined || definition.index < count;
385
+ });
386
+ this.pendingSourceCounts.clear();
387
+ if (rowDefinitions.length !== definitions.length) {
388
+ this.providers.dimension.setRowDefinitions(rowDefinitions);
361
389
  }
362
390
  }
363
391
  finishGesture() {
@@ -380,6 +408,9 @@ export class RowResizePlugin extends BasePlugin {
380
408
  }
381
409
  destroy() {
382
410
  this.cancel('destroy');
411
+ this.keepBottomAnchor = false;
412
+ this.rowDefinitionRemapQueued = false;
413
+ this.pendingSourceCounts.clear();
383
414
  super.destroy();
384
415
  }
385
416
  }
@@ -6,6 +6,7 @@ import { BasePlugin } from "../base.plugin";
6
6
  import { getColumnByProp } from "../../utils/column.utils";
7
7
  import { columnTypes, rowTypes } from "../../store/index";
8
8
  import { isGrouping } from "../groupingRow/grouping.service";
9
+ import { gatherGroupedRowIndexes } from "../groupingRow/grouping.sorting.service";
9
10
  import { getComparer, getNextOrder, getSortingIndex, hasActiveSorting, sortIndexByItems, } from "./sorting.func";
10
11
  export * from './sorting.types';
11
12
  export * from './sorting.func';
@@ -13,18 +14,6 @@ export * from './sorting.sign';
13
14
  function getSortableRowIndexes(indexes, source) {
14
15
  return indexes.filter(index => !isGrouping(source[index]));
15
16
  }
16
- function mergeSortedRowsWithGroups(indexes, source, sortedRows) {
17
- if (sortedRows.length === indexes.length) {
18
- return sortedRows;
19
- }
20
- let rowIndex = 0;
21
- return indexes.map(index => {
22
- if (isGrouping(source[index])) {
23
- return index;
24
- }
25
- return sortedRows[rowIndex++];
26
- });
27
- }
28
17
  /**
29
18
  * Lifecycle
30
19
  * 1. @event `beforesorting` - Triggered when sorting just starts. Nothing has happened yet. This can be triggered from a column or from the source. If the type is from rows, the column will be undefined.
@@ -184,6 +173,7 @@ export class SortingPlugin extends BasePlugin {
184
173
  storeService.setData({ proxyItems: newItemsOrder });
185
174
  }
186
175
  applySortingForStore(type, sorting, sortingFunc, sortingColumns, sortingOrder, ignoreViewportUpdate) {
176
+ var _a;
187
177
  const storeService = this.providers.data.stores[type];
188
178
  // row data
189
179
  const source = storeService.store.get('source');
@@ -191,7 +181,10 @@ export class SortingPlugin extends BasePlugin {
191
181
  const proxyItems = storeService.store.get('proxyItems');
192
182
  const sortItems = getSortableRowIndexes(proxyItems, source);
193
183
  const sortedItems = sortIndexByItems([...sortItems], source, sortingFunc, sorting, sortingColumns, sortingOrder);
194
- const newItemsOrder = mergeSortedRowsWithGroups(proxyItems, source, sortedItems);
184
+ const hasGroupingRows = sortedItems.length !== proxyItems.length;
185
+ const newItemsOrder = hasGroupingRows
186
+ ? (_a = gatherGroupedRowIndexes(source, sortedItems)) !== null && _a !== void 0 ? _a : proxyItems
187
+ : sortedItems;
195
188
  // take row indexes before trim applied and proxy items
196
189
  const prevItems = storeService.store.get('items');
197
190
  storeService.setData({
@@ -217,6 +210,16 @@ export class SortingPlugin extends BasePlugin {
217
210
  }
218
211
  this.postponeSort(order, sortingFunc, sortingColumns, sortingOrder, ignoreViewportUpdate);
219
212
  }
213
+ /**
214
+ * Schedules the current active sort again after another plugin rebuilds row
215
+ * proxy indexes while keeping the physical source unchanged.
216
+ */
217
+ reapplySorting() {
218
+ if (!hasActiveSorting(this.sorting) || !this.sortingFunc) {
219
+ return;
220
+ }
221
+ this.startSorting(this.sorting, this.sortingFunc, this.sortingColumns, this.sortingOrder);
222
+ }
220
223
  /**
221
224
  * Applies sorting requested by a sortable header click.
222
225
  *
@@ -2,6 +2,7 @@
2
2
  * Built by Revolist OU ❤️
3
3
  */
4
4
  import { BasePlugin } from "../base.plugin";
5
+ const toAriaIndex = (index) => `${index + 1}`;
5
6
  /**
6
7
  * WCAG Plugin is responsible for enhancing the accessibility features of the RevoGrid component.
7
8
  * It ensures that the grid is fully compliant with Web Content Accessibility Guidelines (WCAG) 2.1.
@@ -45,14 +46,14 @@ export class WCAGPlugin extends BasePlugin {
45
46
  column.columnProperties = (...args) => {
46
47
  const result = (columnProperties === null || columnProperties === void 0 ? void 0 : columnProperties(...args)) || {};
47
48
  result.role = 'columnheader';
48
- result['aria-colindex'] = `${index}`;
49
+ result['aria-colindex'] = toAriaIndex(index);
49
50
  return result;
50
51
  };
51
52
  column.cellProperties = (...args) => {
52
53
  const wcagProps = {
53
54
  ['role']: 'gridcell',
54
- ['aria-colindex']: `${index}`,
55
- ['aria-rowindex']: `${args[0].rowIndex}`,
55
+ ['aria-colindex']: toAriaIndex(index),
56
+ ['aria-rowindex']: toAriaIndex(args[0].rowIndex),
56
57
  ['tabindex']: -1,
57
58
  };
58
59
  const columnProps = (cellProperties === null || cellProperties === void 0 ? void 0 : cellProperties(...args)) || {};
@@ -67,7 +68,7 @@ export class WCAGPlugin extends BasePlugin {
67
68
  revogrid.setAttribute('aria-rowcount', `${detail.source.length}`);
68
69
  });
69
70
  this.addEventListener('beforerowrender', ({ detail, }) => {
70
- detail.node.$attrs$ = Object.assign(Object.assign({}, detail.node.$attrs$), { role: 'row', ['aria-rowindex']: detail.item.itemIndex });
71
+ detail.node.$attrs$ = Object.assign(Object.assign({}, detail.node.$attrs$), { role: 'row', ['aria-rowindex']: toAriaIndex(detail.item.itemIndex) });
71
72
  });
72
73
  // focuscell
73
74
  this.addEventListener('afterfocus', async (e) => {
@@ -19,7 +19,9 @@ export function isVirtualXDimension(type, disableVirtualX = false, virtualX = DE
19
19
  export default class DimensionProvider {
20
20
  constructor(viewports, config) {
21
21
  this.viewports = viewports;
22
- const sizeChanged = debounce((k) => config.realSizeChanged(k), RESIZE_INTERVAL);
22
+ this.config = config;
23
+ this.rowDefinitions = [];
24
+ const sizeChanged = debounce((k) => this.config.realSizeChanged(k), RESIZE_INTERVAL);
23
25
  this.stores = [...rowTypes, ...columnTypes].reduce((sources, t) => {
24
26
  sources[t] = new DimensionStore(t);
25
27
  sources[t].store.onChange('realSize', () => sizeChanged(t));
@@ -37,6 +39,20 @@ export default class DimensionProvider {
37
39
  this.viewports.stores[t].setOriginalSizes(this.stores[t].store.get('originItemSize'));
38
40
  this.setItemCount(count, t);
39
41
  }
42
+ getRowDefinitions() {
43
+ return this.rowDefinitions;
44
+ }
45
+ syncRowDefinitions(definitions) {
46
+ this.rowDefinitions = definitions;
47
+ }
48
+ setRowDefinitions(definitions) {
49
+ var _a, _b;
50
+ if (definitions === this.rowDefinitions) {
51
+ return;
52
+ }
53
+ this.syncRowDefinitions(definitions);
54
+ (_b = (_a = this.config).rowDefinitionsChanged) === null || _b === void 0 ? void 0 : _b.call(_a, definitions);
55
+ }
40
56
  /**
41
57
  * Apply new custom sizes to dimension and view port
42
58
  * @param type - dimension type
@@ -3,7 +3,7 @@
3
3
  */
4
4
  import { h, e as Build } from './index-CtimkLsB.js';
5
5
  import { o as DATA_ROW, b as getSourceItem, n as DATA_COL, C as CELL_CLASS, x as DRAG_ICON_CLASS, y as DRAGGABLE_CLASS } from './dimension.helpers-Cln9sALu.js';
6
- import { A as getCellRaw, v as isGroupingColumn, l as GROUP_EXPAND_BTN, m as GROUP_EXPAND_EVENT, j as GROUP_COLUMN_PROP, P as PSEUDO_GROUP_ITEM, h as GROUP_EXPANDED, G as GROUP_DEPTH, O as isRowDragService, B as getCellDataParsed } from './column.service-CM-wgGs8.js';
6
+ import { A as getCellRaw, v as isGroupingColumn, l as GROUP_EXPAND_BTN, m as GROUP_EXPAND_EVENT, j as GROUP_COLUMN_PROP, P as PSEUDO_GROUP_ITEM, h as GROUP_EXPANDED, G as GROUP_DEPTH, Q as isRowDragService, C as getCellDataParsed } from './column.service-pu_fdQ0S.js';
7
7
 
8
8
  /**
9
9
  * Renders sorting direction and optional additive sorting rank.
@@ -432,6 +432,7 @@ const GROUP_COLUMN_PROP = `${GRID_INTERNALS}-prop`;
432
432
  const GROUP_ORIGINAL_INDEX = `${GRID_INTERNALS}-original-index`;
433
433
  const GROUP_EXPAND_BTN = `group-expand`;
434
434
  const GROUP_EXPAND_EVENT = `groupexpandclick`;
435
+ const BEFORE_GROUPING_APPLY_EVENT = `beforegroupingapply`;
435
436
  const GROUPING_ROW_TYPE = 'rgRow';
436
437
 
437
438
  function getGroupValueDefault(item, prop, emptyGroupValue) {
@@ -1006,4 +1007,4 @@ function doPropMerge(existing, extra) {
1006
1007
  return props;
1007
1008
  }
1008
1009
 
1009
- export { getCellRaw as A, getCellDataParsed as B, getColumnType as C, getColumnSizes as D, isColGrouping as E, getColumns as F, GROUP_DEPTH as G, gatherGroup as H, getColumnByProp as I, reduce as J, baseEach as K, toInteger as L, ColumnService as M, getCellEditor as N, isRowDragService as O, PSEUDO_GROUP_ITEM as P, doPropMerge as Q, cropCellToMax as a, isRangeSingleCell as b, columnTypes as c, PSEUDO_GROUP_ITEM_ID as d, PSEUDO_GROUP_ITEM_VALUE as e, PSEUDO_GROUP_COLUMN as f, getRange as g, GROUP_EXPANDED as h, isRowType as i, GROUP_COLUMN_PROP as j, GROUP_ORIGINAL_INDEX as k, GROUP_EXPAND_BTN as l, GROUP_EXPAND_EVENT as m, nextCell as n, GROUPING_ROW_TYPE as o, getSource as p, getExpanded as q, rowTypes as r, gatherGrouping as s, getGroupingName as t, isGrouping as u, isGroupingColumn as v, measureEqualDepth as w, getParsedGroup as x, isSameGroup as y, getCellData as z };
1010
+ export { getCellRaw as A, BEFORE_GROUPING_APPLY_EVENT as B, getCellDataParsed as C, getColumnType as D, getColumnSizes as E, isColGrouping as F, GROUP_DEPTH as G, getColumns as H, gatherGroup as I, getColumnByProp as J, reduce as K, baseEach as L, toInteger as M, ColumnService as N, getCellEditor as O, PSEUDO_GROUP_ITEM as P, isRowDragService as Q, doPropMerge as R, cropCellToMax as a, isRangeSingleCell as b, columnTypes as c, PSEUDO_GROUP_ITEM_ID as d, PSEUDO_GROUP_ITEM_VALUE as e, PSEUDO_GROUP_COLUMN as f, getRange as g, GROUP_EXPANDED as h, isRowType as i, GROUP_COLUMN_PROP as j, GROUP_ORIGINAL_INDEX as k, GROUP_EXPAND_BTN as l, GROUP_EXPAND_EVENT as m, nextCell as n, GROUPING_ROW_TYPE as o, getSource as p, getExpanded as q, rowTypes as r, gatherGrouping as s, getGroupingName as t, isGrouping as u, isGroupingColumn as v, measureEqualDepth as w, getParsedGroup as x, isSameGroup as y, getCellData as z };
@@ -10,9 +10,10 @@ const AND_OR_BUTTON = 'and-or-button';
10
10
  const TRASH_BUTTON = 'trash-button';
11
11
  const REORDER_BUTTON = 'reorder-button';
12
12
  const FilterButton = ({ column }) => {
13
- return (h("span", null, h("button", { class: {
13
+ const active = !!(column === null || column === void 0 ? void 0 : column[FILTER_PROP]);
14
+ return (h("span", { class: "filter-button-wrapper" }, h("button", { class: {
14
15
  [FILTER_BUTTON_CLASS]: true,
15
- [FILTER_BUTTON_ACTIVE]: column && !!column[FILTER_PROP],
16
+ [FILTER_BUTTON_ACTIVE]: active,
16
17
  } }, h("svg", { class: "filter-img", viewBox: "0 0 64 64" }, h("g", { stroke: "none", "stroke-width": "1", fill: "none", "fill-rule": "evenodd" }, h("path", { d: "M43,48 L43,56 L21,56 L21,48 L43,48 Z M53,28 L53,36 L12,36 L12,28 L53,28 Z M64,8 L64,16 L0,16 L0,8 L64,8 Z", fill: "currentColor" }))))));
17
18
  };
18
19
  const TrashButton = ({ ariaLabel, onClick }) => {
@@ -2,7 +2,7 @@
2
2
  * Built by Revolist OU ❤️
3
3
  */
4
4
  import { h } from './index-CtimkLsB.js';
5
- import { Q as doPropMerge } from './column.service-CM-wgGs8.js';
5
+ import { R as doPropMerge } from './column.service-pu_fdQ0S.js';
6
6
 
7
7
  /**
8
8
  * Dispatches a custom event to a specified target element.
package/dist/esm/index.js CHANGED
@@ -1,18 +1,18 @@
1
1
  /*!
2
2
  * Built by Revolist OU ❤️
3
3
  */
4
- import { d as defineTheme, B as BasePlugin } from './row-resize.plugin-BRiaHlHA.js';
5
- export { z as AFTER_ROW_RESIZE_EVENT, A as AutoSizeColumnPlugin, q as BEFORE_COLUMN_DRAG_END_EVENT, x as BEFORE_ROW_RESIZE_EVENT, p as COLUMN_DRAG_END_EVENT, o as COLUMN_DRAG_MOVE_EVENT, s as COLUMN_DRAG_START_EVENT, C as ColumnAutoSizeMode, u as ColumnMovePlugin, k as DEFAULT_BLANK_SEMANTICS, J as DEFAULT_MIN_ROW_HEIGHT, D as DimensionStore, b as ExportCsv, E as ExportFilePlugin, c as FILTER_CONFIG_CHANGED_EVENT, F as FILTER_TRIMMED_TYPE, e as FILTE_PANEL, f as FilterPlugin, G as GroupingRowPlugin, H as ROW_RESIZE_CANCEL_EVENT, y as ROW_RESIZE_EVENT, R as ROW_RESIZE_HANDLE_CLASS, I as RowResizePlugin, S as SelectionStore, P as SortingPlugin, a as StretchColumn, L as clampRowResizeHeight, N as createRowResizePatch, V as defaultCellCompare, W as descCellCompare, m as doCollapse, n as doExpand, g as filterCoreFunctionsIndexedByType, j as filterNames, h as filterTypes, w as getColumnDragPosition, Y as getComparer, v as getLeftRelative, X as getNextOrder, M as getRowResizeIndexes, T as getSortingIndex, Q as hasActiveSorting, l as isBlankValue, i as isStretchPlugin, O as mergeRowResizeDefinitions, r as resolveBlankSemantics, K as resolveRowResizeConfig, U as sortIndexByItems, t as themeTokenCssVariables } from './row-resize.plugin-BRiaHlHA.js';
6
- export { o as GROUPING_ROW_TYPE, j as GROUP_COLUMN_PROP, G as GROUP_DEPTH, h as GROUP_EXPANDED, l as GROUP_EXPAND_BTN, m as GROUP_EXPAND_EVENT, k as GROUP_ORIGINAL_INDEX, f as PSEUDO_GROUP_COLUMN, P as PSEUDO_GROUP_ITEM, d as PSEUDO_GROUP_ITEM_ID, e as PSEUDO_GROUP_ITEM_VALUE, c as columnTypes, a as cropCellToMax, H as gatherGroup, s as gatherGrouping, z as getCellData, B as getCellDataParsed, A as getCellRaw, I as getColumnByProp, D as getColumnSizes, C as getColumnType, F as getColumns, q as getExpanded, t as getGroupingName, x as getParsedGroup, g as getRange, p as getSource, E as isColGrouping, u as isGrouping, v as isGroupingColumn, b as isRangeSingleCell, i as isRowType, y as isSameGroup, w as measureEqualDepth, n as nextCell, r as rowTypes } from './column.service-CM-wgGs8.js';
7
- export { d as dispatch, a as dispatchByEvent } from './header-cell-renderer-Bqh1PrgH.js';
8
- export { C as CellRenderer, G as GroupingRowRenderer, S as SortingSign, e as expandEvent, a as expandSvgIconVNode, r as renderGroupCells } from './cell-renderer-BFpmdV8H.js';
4
+ import { d as defineTheme, B as BasePlugin } from './row-resize.plugin-Beu0pMds.js';
5
+ export { H as AFTER_ROW_RESIZE_EVENT, A as AutoSizeColumnPlugin, s as BEFORE_COLUMN_DRAG_END_EVENT, y as BEFORE_ROW_RESIZE_EVENT, q as COLUMN_DRAG_END_EVENT, p as COLUMN_DRAG_MOVE_EVENT, u as COLUMN_DRAG_START_EVENT, C as ColumnAutoSizeMode, v as ColumnMovePlugin, l as DEFAULT_BLANK_SEMANTICS, K as DEFAULT_MIN_ROW_HEIGHT, D as DimensionStore, b as ExportCsv, E as ExportFilePlugin, c as FILTER_CONFIG_CHANGED_EVENT, F as FILTER_TRIMMED_TYPE, e as FILTE_PANEL, f as FilterPlugin, G as GroupingRowPlugin, I as ROW_RESIZE_CANCEL_EVENT, z as ROW_RESIZE_EVENT, R as ROW_RESIZE_HANDLE_CLASS, J as RowResizePlugin, S as SelectionStore, Q as SortingPlugin, a as StretchColumn, M as clampRowResizeHeight, O as createRowResizePatch, W as defaultCellCompare, X as descCellCompare, n as doCollapse, o as doExpand, g as filterCoreFunctionsIndexedByType, k as filterNames, j as filterTypeDefaults, h as filterTypes, x as getColumnDragPosition, Z as getComparer, w as getLeftRelative, Y as getNextOrder, N as getRowResizeIndexes, U as getSortingIndex, T as hasActiveSorting, m as isBlankValue, i as isStretchPlugin, P as mergeRowResizeDefinitions, r as resolveBlankSemantics, L as resolveRowResizeConfig, V as sortIndexByItems, t as themeTokenCssVariables } from './row-resize.plugin-Beu0pMds.js';
6
+ export { B as BEFORE_GROUPING_APPLY_EVENT, o as GROUPING_ROW_TYPE, j as GROUP_COLUMN_PROP, G as GROUP_DEPTH, h as GROUP_EXPANDED, l as GROUP_EXPAND_BTN, m as GROUP_EXPAND_EVENT, k as GROUP_ORIGINAL_INDEX, f as PSEUDO_GROUP_COLUMN, P as PSEUDO_GROUP_ITEM, d as PSEUDO_GROUP_ITEM_ID, e as PSEUDO_GROUP_ITEM_VALUE, c as columnTypes, a as cropCellToMax, I as gatherGroup, s as gatherGrouping, z as getCellData, C as getCellDataParsed, A as getCellRaw, J as getColumnByProp, E as getColumnSizes, D as getColumnType, H as getColumns, q as getExpanded, t as getGroupingName, x as getParsedGroup, g as getRange, p as getSource, F as isColGrouping, u as isGrouping, v as isGroupingColumn, b as isRangeSingleCell, i as isRowType, y as isSameGroup, w as measureEqualDepth, n as nextCell, r as rowTypes } from './column.service-pu_fdQ0S.js';
7
+ export { d as dispatch, a as dispatchByEvent } from './header-cell-renderer-YCiVIQ2E.js';
8
+ export { C as CellRenderer, G as GroupingRowRenderer, S as SortingSign, e as expandEvent, a as expandSvgIconVNode, r as renderGroupCells } from './cell-renderer-D9ze8OJw.js';
9
9
  export { a as applyMixins, f as findPositionInArray, g as getScrollbarSize, m as mergeSortedArray, p as pushSorted, r as range, s as scaleValue, t as timeout } from './index-BvMNbQyq.js';
10
10
  export { T as TextEditor } from './text-editor-eHtrwvxH.js';
11
11
  export { k as isAll, c as isClear, h as isCopy, a as isCtrlKey, b as isCtrlMetaKey, g as isCut, m as isEditInput, n as isEditorCtrConstructible, f as isEnterKeyValue, i as isMetaKey, j as isPaste, l as isShortcutModifier, d as isTab, e as isTabKeyValue } from './edit.utils-3ZbhQCv_.js';
12
12
  export { h } from './index-CtimkLsB.js';
13
13
  export { C as CELL_CLASS, A as CELL_HANDLER_CLASS, n as DATA_COL, o as DATA_ROW, q as DISABLED_CLASS, y as DRAGGABLE_CLASS, B as DRAGG_TEXT, x as DRAG_ICON_CLASS, D as DataStore, E as EDIT_INPUT_WR, F as FOCUS_CLASS, G as GRID_INTERNALS, w as HEADER_ACTUAL_ROW_CLASS, H as HEADER_CLASS, v as HEADER_ROW_CLASS, u as HEADER_SORTABLE_CLASS, M as MIN_COL_SIZE, z as MOBILE_CLASS, R as RESIZE_INTERVAL, I as ROW_FOCUSED_CLASS, r as ROW_HEADER_TYPE, S as SELECTION_BORDER_CLASS, T as TMP_SELECTION_BG_CLASS, j as calculateDimensionData, J as codesLetter, h as gatherTrimmedItems, l as getItemByIndex, k as getItemByPosition, g as getPhysical, b as getSourceItem, f as getSourceItemVirtualIndexByProp, c as getSourcePhysicalIndex, i as getVisibleItems, a as getVisibleSourceItem, K as keyValues, p as proxyPlugin, e as setItems, d as setSourceByPhysicalIndex, s as setSourceByVirtualIndex, m as setStore, t as trimmedPlugin } from './dimension.helpers-Cln9sALu.js';
14
14
  export { V as ViewportStore, b as addMissingItems, j as calculateRowHeaderSize, c as clampViewportCoordinate, f as getFirstItem, d as getItems, h as getLastItem, a as getUpdatedItemsByPosition, g as getViewportMaxCoordinate, i as isActiveRange, e as isActiveRangeOutsideLastItem, r as recombineByOffset, s as setItemSizes, u as updateMissingAndRange } from './viewport.store-DWMKRDSH.js';
15
- export { A as AND_OR_BUTTON, e as AndOrButton, a as FILTER_BUTTON_ACTIVE, F as FILTER_BUTTON_CLASS, b as FILTER_PROP, c as FilterButton, R as REORDER_BUTTON, f as ReorderButton, T as TRASH_BUTTON, d as TrashButton, i as isFilterBtn } from './filter.button-DMhpuAiw.js';
15
+ export { A as AND_OR_BUTTON, e as AndOrButton, a as FILTER_BUTTON_ACTIVE, F as FILTER_BUTTON_CLASS, b as FILTER_PROP, c as FilterButton, R as REORDER_BUTTON, f as ReorderButton, T as TRASH_BUTTON, d as TrashButton, i as isFilterBtn } from './filter.button-CEPUxLUo.js';
16
16
  import './debounce-PCRWZliA.js';
17
17
 
18
18
  const REVOGRID_EVENTS = new Map([