@revolist/revogrid 4.21.2 → 4.21.3

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 (74) hide show
  1. package/dist/cjs/{cell-renderer-EyG5RkCf.js → cell-renderer-BLcxDHzP.js} +2 -2
  2. package/dist/cjs/{column.drag.plugin-DuMzh_Cm.js → column.drag.plugin-DfTAC5Qc.js} +4 -4
  3. package/dist/cjs/{column.service-BNgb1GSr.js → column.service-BmT2HOnj.js} +1 -1
  4. package/dist/cjs/{dimension.helpers-DLLC6uO6.js → dimension.helpers-BOxHtX5T.js} +13 -3
  5. package/dist/cjs/{edit.utils-BWpSdGmj.js → edit.utils-DnvQVP4H.js} +1 -1
  6. package/dist/cjs/{header-cell-renderer-BReLylCk.js → header-cell-renderer-7DgGThjq.js} +1 -1
  7. package/dist/cjs/index.cjs.js +9 -8
  8. package/dist/cjs/loader.cjs.js +1 -1
  9. package/dist/cjs/revo-grid.cjs.entry.js +43 -11
  10. package/dist/cjs/revo-grid.cjs.js +1 -1
  11. package/dist/cjs/revogr-attribution_7.cjs.entry.js +5 -5
  12. package/dist/cjs/revogr-clipboard_3.cjs.entry.js +5 -3
  13. package/dist/cjs/revogr-data_4.cjs.entry.js +8 -7
  14. package/dist/cjs/{text-editor-tI8PMl7r.js → text-editor-B9ibcdrl.js} +2 -2
  15. package/dist/cjs/{throttle-Rub9czPz.js → throttle-DkuCcmB0.js} +1 -1
  16. package/dist/cjs/{viewport.store-Bkhj0ZmO.js → viewport.store-DG-4bWqg.js} +1 -1
  17. package/dist/collection/components/clipboard/revogr-clipboard.js +6 -4
  18. package/dist/collection/components/revoGrid/revo-grid.js +63 -2
  19. package/dist/collection/components/revoGrid/viewport.scrolling.service.js +2 -2
  20. package/dist/collection/components/revoGrid/viewport.service.js +2 -0
  21. package/dist/collection/components/scroll/revogr-viewport-scroll.js +23 -2
  22. package/dist/collection/services/data.provider.js +18 -2
  23. package/dist/collection/store/dataSource/data.store.js +14 -4
  24. package/dist/collection/types/events.js +1 -0
  25. package/dist/{revo-grid/cell-renderer-BDmepZJO.js → esm/cell-renderer-BNeaYjy6.js} +2 -2
  26. package/dist/esm/{column.drag.plugin-B98azH0j.js → column.drag.plugin-C9lvlTfl.js} +4 -4
  27. package/dist/esm/{column.service-BghHOZP8.js → column.service-8pPNyrKn.js} +1 -1
  28. package/dist/{revo-grid/dimension.helpers-C2F2Cuh8.js → esm/dimension.helpers-B-5OBYes.js} +13 -3
  29. package/dist/esm/{edit.utils-Cdhf8P7e.js → edit.utils-CQjRmx5n.js} +1 -1
  30. package/dist/{revo-grid/header-cell-renderer-DO0jvvbw.js → esm/header-cell-renderer-WkTbrmr7.js} +1 -1
  31. package/dist/esm/index.js +10 -9
  32. package/dist/esm/loader.js +1 -1
  33. package/dist/esm/revo-grid.entry.js +43 -11
  34. package/dist/esm/revo-grid.js +1 -1
  35. package/dist/esm/revogr-attribution_7.entry.js +5 -5
  36. package/dist/esm/revogr-clipboard_3.entry.js +5 -3
  37. package/dist/esm/revogr-data_4.entry.js +8 -7
  38. package/dist/{revo-grid/text-editor-BylR9oxh.js → esm/text-editor-DZSx2pWr.js} +2 -2
  39. package/dist/esm/{throttle-BEccmfmt.js → throttle-CYM0qC3v.js} +1 -1
  40. package/dist/{revo-grid/viewport.store-C3ajQgRm.js → esm/viewport.store-BGWR3XfI.js} +1 -1
  41. package/dist/{esm/cell-renderer-BDmepZJO.js → revo-grid/cell-renderer-BNeaYjy6.js} +2 -2
  42. package/dist/revo-grid/{column.drag.plugin-B98azH0j.js → column.drag.plugin-C9lvlTfl.js} +4 -4
  43. package/dist/revo-grid/{column.service-BghHOZP8.js → column.service-8pPNyrKn.js} +1 -1
  44. package/dist/{esm/dimension.helpers-C2F2Cuh8.js → revo-grid/dimension.helpers-B-5OBYes.js} +13 -3
  45. package/dist/revo-grid/{edit.utils-Cdhf8P7e.js → edit.utils-CQjRmx5n.js} +1 -1
  46. package/dist/{esm/header-cell-renderer-DO0jvvbw.js → revo-grid/header-cell-renderer-WkTbrmr7.js} +1 -1
  47. package/dist/revo-grid/index.esm.js +10 -9
  48. package/dist/revo-grid/revo-grid.entry.js +43 -11
  49. package/dist/revo-grid/revo-grid.esm.js +1 -1
  50. package/dist/revo-grid/revogr-attribution_7.entry.js +5 -5
  51. package/dist/revo-grid/revogr-clipboard_3.entry.js +5 -3
  52. package/dist/revo-grid/revogr-data_4.entry.js +8 -7
  53. package/dist/{esm/text-editor-BylR9oxh.js → revo-grid/text-editor-DZSx2pWr.js} +2 -2
  54. package/dist/revo-grid/{throttle-BEccmfmt.js → throttle-CYM0qC3v.js} +1 -1
  55. package/dist/{esm/viewport.store-C3ajQgRm.js → revo-grid/viewport.store-BGWR3XfI.js} +1 -1
  56. package/dist/types/components/clipboard/revogr-clipboard.d.ts +2 -0
  57. package/dist/types/components/revoGrid/revo-grid.d.ts +11 -0
  58. package/dist/types/components/revoGrid/viewport.scrolling.service.d.ts +1 -1
  59. package/dist/types/components/revoGrid/viewport.service.d.ts +1 -0
  60. package/dist/types/components/scroll/revogr-viewport-scroll.d.ts +1 -0
  61. package/dist/types/components.d.ts +33 -0
  62. package/dist/types/services/data.provider.d.ts +15 -1
  63. package/dist/types/store/dataSource/data.store.d.ts +3 -1
  64. package/dist/types/types/events.d.ts +1 -1
  65. package/dist/types/types/viewport.interfaces.d.ts +7 -2
  66. package/hydrate/index.js +58 -11
  67. package/hydrate/index.mjs +58 -11
  68. package/package.json +1 -1
  69. package/readme.md +2 -0
  70. package/standalone/data.store.js +1 -1
  71. package/standalone/index.js +1 -1
  72. package/standalone/revo-grid.js +1 -1
  73. package/standalone/revogr-clipboard2.js +1 -1
  74. package/standalone/revogr-viewport-scroll2.js +1 -1
@@ -70,6 +70,10 @@ export class RevoGridComponent {
70
70
  this.readonly = false;
71
71
  /** When true, columns are resizable. */
72
72
  this.resize = false;
73
+ /**
74
+ * Prevents horizontal scroll state from being mirrored across viewport sections.
75
+ */
76
+ this.noHorizontalScrollTransfer = false;
73
77
  /** When true cell focus appear. */
74
78
  this.canFocus = true;
75
79
  /** When true enable clipboard. */
@@ -605,7 +609,13 @@ export class RevoGridComponent {
605
609
  if (!this.dimensionProvider || !this.columnProvider) {
606
610
  return;
607
611
  }
608
- const columnGather = getColumns(newVal, 0, this.columnTypes);
612
+ const beforeGatherEvent = this.beforecolumnsgather.emit({
613
+ columns: [...newVal],
614
+ });
615
+ if (beforeGatherEvent.defaultPrevented) {
616
+ return;
617
+ }
618
+ const columnGather = getColumns(beforeGatherEvent.detail.columns, 0, this.columnTypes);
609
619
  const beforeSetEvent = this.beforecolumnsset.emit(columnGather);
610
620
  if (beforeSetEvent.defaultPrevented) {
611
621
  return;
@@ -952,6 +962,7 @@ export class RevoGridComponent {
952
962
  scrollingService: this.scrollingService,
953
963
  orderService: this.orderService,
954
964
  selectionStoreConnector: this.selectionStoreConnector,
965
+ noHorizontalScrollTransfer: this.noHorizontalScrollTransfer,
955
966
  disableVirtualX: this.disableVirtualX,
956
967
  disableVirtualY: this.disableVirtualY,
957
968
  resize: c => this.aftercolumnresize.emit(c),
@@ -992,7 +1003,9 @@ export class RevoGridComponent {
992
1003
  dataViews.push(dataView);
993
1004
  });
994
1005
  // Add viewport scroll in the end
995
- viewPortHtml.push(h("revogr-viewport-scroll", Object.assign({}, view.prop, { ref: el => this.scrollingService.registerElement(el, `${view.prop.key}`), onScrollviewport: e => this.scrollingService.proxyScroll(e.detail, `${view.prop.key}`), onScrollviewportsilent: e => this.scrollingService.scrollSilentService(e.detail, `${view.prop.key}`) }), dataViews));
1006
+ viewPortHtml.push(h("revogr-viewport-scroll", Object.assign({}, view.prop, { ref: el => this.scrollingService.registerElement(el, `${view.prop.key}`), onScrollviewport: e => {
1007
+ this.scrollingService.proxyScroll(e.detail, `${view.prop.key}`, this.noHorizontalScrollTransfer && e.detail.dimension === 'rgCol');
1008
+ }, onScrollviewportsilent: e => this.scrollingService.scrollSilentService(e.detail, `${view.prop.key}`) }), dataViews));
996
1009
  }
997
1010
  viewportSections.push(viewPortHtml);
998
1011
  // #endregion
@@ -1173,6 +1186,26 @@ export class RevoGridComponent {
1173
1186
  "attribute": "resize",
1174
1187
  "defaultValue": "false"
1175
1188
  },
1189
+ "noHorizontalScrollTransfer": {
1190
+ "type": "boolean",
1191
+ "mutable": false,
1192
+ "complexType": {
1193
+ "original": "boolean",
1194
+ "resolved": "boolean",
1195
+ "references": {}
1196
+ },
1197
+ "required": false,
1198
+ "optional": false,
1199
+ "docs": {
1200
+ "tags": [],
1201
+ "text": "Prevents horizontal scroll state from being mirrored across viewport sections."
1202
+ },
1203
+ "getter": false,
1204
+ "setter": false,
1205
+ "reflect": false,
1206
+ "attribute": "no-horizontal-scroll-transfer",
1207
+ "defaultValue": "false"
1208
+ },
1176
1209
  "canFocus": {
1177
1210
  "type": "boolean",
1178
1211
  "mutable": false,
@@ -2344,6 +2377,34 @@ export class RevoGridComponent {
2344
2377
  }
2345
2378
  }
2346
2379
  }
2380
+ }, {
2381
+ "method": "beforecolumnsgather",
2382
+ "name": "beforecolumnsgather",
2383
+ "bubbles": true,
2384
+ "cancelable": true,
2385
+ "composed": true,
2386
+ "docs": {
2387
+ "tags": [],
2388
+ "text": "Emitted before user column definitions are gathered into the internal column collection.\nListeners can replace `detail.columns` to rewrite the raw column set before RevoGrid normalizes it."
2389
+ },
2390
+ "complexType": {
2391
+ "original": "{\n columns: (ColumnGrouping | ColumnRegular)[];\n }",
2392
+ "resolved": "{ columns: (ColumnRegular | ColumnGrouping<any>)[]; }",
2393
+ "references": {
2394
+ "ColumnGrouping": {
2395
+ "location": "import",
2396
+ "path": "@type",
2397
+ "id": "src/types/index.ts::ColumnGrouping",
2398
+ "referenceLocation": "ColumnGrouping"
2399
+ },
2400
+ "ColumnRegular": {
2401
+ "location": "import",
2402
+ "path": "@type",
2403
+ "id": "src/types/index.ts::ColumnRegular",
2404
+ "referenceLocation": "ColumnRegular"
2405
+ }
2406
+ }
2407
+ }
2347
2408
  }, {
2348
2409
  "method": "beforecolumnsset",
2349
2410
  "name": "beforecolumnsset",
@@ -7,11 +7,11 @@ export default class GridScrollingService {
7
7
  this.setViewport = setViewport;
8
8
  this.elements = {};
9
9
  }
10
- async proxyScroll(e, key) {
10
+ async proxyScroll(e, key, skipEvent) {
11
11
  var _a;
12
12
  let newEventPromise;
13
13
  let event = e;
14
- for (let elKey in this.elements) {
14
+ for (let elKey in (skipEvent ? {} : this.elements)) {
15
15
  // skip
16
16
  if (e.dimension === 'rgCol' && elKey === 'headerRow') {
17
17
  continue;
@@ -13,6 +13,7 @@ function gatherColumnData(data) {
13
13
  contentHeight: data.contentHeight,
14
14
  key: data.colType,
15
15
  colType: data.colType,
16
+ noHorizontalScrollTransfer: data.noHorizontalScrollTransfer,
16
17
  onResizeviewport: data.onResizeviewport,
17
18
  // set viewport size to real size
18
19
  style: data.fixWidth ? { minWidth: `${realWidth}px` } : undefined,
@@ -57,6 +58,7 @@ export default class ViewportService {
57
58
  viewports: config.viewportProvider.stores,
58
59
  dimensions: config.dimensionProvider.stores,
59
60
  rowStores: config.dataProvider.stores,
61
+ noHorizontalScrollTransfer: config.noHorizontalScrollTransfer,
60
62
  colStore,
61
63
  onHeaderresize: e => this.onColumnResize(val, e, colStore),
62
64
  };
@@ -22,6 +22,7 @@ export class RevogrViewportScroll {
22
22
  * Height of inner content
23
23
  */
24
24
  this.contentHeight = 0;
25
+ this.noHorizontalScrollTransfer = false;
25
26
  }
26
27
  async setScroll(e) {
27
28
  var _a;
@@ -206,7 +207,7 @@ export class RevogrViewportScroll {
206
207
  this.setScrollVisibility('rgCol', this.horizontalScroll.clientWidth, this.contentWidth);
207
208
  }
208
209
  render() {
209
- return (h(Host, { key: '2be96df29e23c7a681a45675567b5f168786cf92', onWheel: this.horizontalMouseWheel, onScroll: (e) => this.applyScroll('rgCol', e) }, h("div", { key: '49152054dc9c8bdbffc430aa4ee2cf8c2732e05c', class: "inner-content-table", style: { width: `${this.contentWidth}px` } }, h("div", { key: '6a2124ed6345021fbbfbd78607dc280918ef9bc5', class: "header-wrapper", ref: e => (this.header = e) }, h("slot", { key: '0a25f0620be889d87fbf81325ffb596919105f4d', name: HEADER_SLOT })), h("div", { key: '7c986664c70ebc6f6d996864e591e484d709c3a5', class: "vertical-inner", ref: el => (this.verticalScroll = el), onWheel: this.verticalMouseWheel, onScroll: (e) => this.applyScroll('rgRow', e) }, h("div", { key: 'bf810ecbb62b35334b24ab72292ae37866002cb9', class: "content-wrapper", style: { height: `${this.contentHeight}px` } }, h("slot", { key: '7d0bf53549eb60d9e6942b05fe1037131562ca2e', name: CONTENT_SLOT }))), h("div", { key: '78d8bdc545e220b324665b5331d902d887ea5e2b', class: "footer-wrapper", ref: e => (this.footer = e) }, h("slot", { key: '76d5b39a94ba27411ca0b58e49714b21e0e837bf', name: FOOTER_SLOT })))));
210
+ 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 })))));
210
211
  }
211
212
  /**
212
213
  * Extra layer for scroll event monitoring, where MouseWheel event is not passing
@@ -285,7 +286,7 @@ export class RevogrViewportScroll {
285
286
  const atRight = scrollLeft + clientWidth >= scrollWidth && e.deltaX > 0;
286
287
  // Detect if the user has reached the left end
287
288
  const atLeft = scrollLeft === 0 && e.deltaX < 0;
288
- if (!atRight && !atLeft) {
289
+ if (!atRight && !atLeft && !this.noHorizontalScrollTransfer) {
289
290
  (_a = e.preventDefault) === null || _a === void 0 ? void 0 : _a.call(e);
290
291
  }
291
292
  const pos = scrollLeft + e[delta];
@@ -389,6 +390,26 @@ export class RevogrViewportScroll {
389
390
  "setter": false,
390
391
  "reflect": false,
391
392
  "attribute": "col-type"
393
+ },
394
+ "noHorizontalScrollTransfer": {
395
+ "type": "boolean",
396
+ "mutable": false,
397
+ "complexType": {
398
+ "original": "boolean",
399
+ "resolved": "boolean",
400
+ "references": {}
401
+ },
402
+ "required": false,
403
+ "optional": false,
404
+ "docs": {
405
+ "tags": [],
406
+ "text": ""
407
+ },
408
+ "getter": false,
409
+ "setter": false,
410
+ "reflect": false,
411
+ "attribute": "no-horizontal-scroll-transfer",
412
+ "defaultValue": "false"
392
413
  }
393
414
  };
394
415
  }
@@ -16,9 +16,25 @@ export class DataProvider {
16
16
  return sources;
17
17
  }, {});
18
18
  }
19
- setData(data, type = 'rgRow', disableVirtualRows = false, grouping, silent = false) {
19
+ /**
20
+ * Replaces the data source for a row type and synchronizes the related dimension metadata.
21
+ *
22
+ * `rgRow` updates also refresh the virtual row model unless `disableVirtualRows` is set.
23
+ * Pinned row types skip virtual row recalculation because they are rendered directly.
24
+ *
25
+ * @param data Full source data assigned to the target row store.
26
+ * @param type Row collection to update. Defaults to the main body rows.
27
+ * @param disableVirtualRows Prevents recalculating virtual rows for the main row store.
28
+ * @param grouping Optional grouping metadata applied together with the new data set.
29
+ * @param silent Preserves the current trimmed state instead of resetting it during the update.
30
+ * @param preserveTrimmed Re-applies current trimmed indexes after a silent update.
31
+ * @returns The same `data` array that was provided to the method.
32
+ */
33
+ setData(data, type = 'rgRow', disableVirtualRows = false, grouping,
34
+ // if true, store will be updated without resetting trimmed state
35
+ silent = false, preserveTrimmed = false) {
20
36
  // set rgRow data
21
- this.stores[type].updateData([...data], grouping, silent);
37
+ this.stores[type].updateData([...data], grouping, silent, preserveTrimmed);
22
38
  // for pinned row no need virtual data
23
39
  const noVirtual = type !== 'rgRow' || disableVirtualRows;
24
40
  this.dimensionProvider.setData(data.length, type, noVirtual);
@@ -4,7 +4,7 @@
4
4
  import findIndex from "lodash/findIndex";
5
5
  import range from "lodash/range";
6
6
  import { createStore } from "@stencil/store";
7
- import { trimmedPlugin } from "./trimmed.plugin";
7
+ import { gatherTrimmedItems, trimmedPlugin } from "./trimmed.plugin";
8
8
  import { setStore } from "../../utils";
9
9
  import { proxyPlugin } from "./data.proxy";
10
10
  /**
@@ -24,8 +24,16 @@ export class DataStore {
24
24
  * full data source update
25
25
  * @param source - data column/rgRow source
26
26
  * @param grouping - grouping information if present
27
+ * @param silent - if true, store will be updated without resetting trimmed state
28
+ * @param preserveTrimmed - if true, current trimmed indexes will be re-applied to the new source, use with caution because physical indexes may change across full data refreshes
27
29
  */
28
- updateData(source, grouping, silent = false) {
30
+ updateData(source, grouping,
31
+ // if true, store will be updated without resetting trimmed state
32
+ silent = false,
33
+ // if true, current trimmed indexes will be re-applied to the new source
34
+ preserveTrimmed = false) {
35
+ const trimmed = this.store.get('trimmed');
36
+ const trimmedItems = silent && preserveTrimmed ? gatherTrimmedItems(trimmed) : null;
29
37
  // during full update we do drop trim
30
38
  if (!silent) {
31
39
  this.store.set('trimmed', {});
@@ -38,12 +46,14 @@ export class DataStore {
38
46
  source,
39
47
  proxyItems: [...items],
40
48
  });
41
- // update data items
42
- this.store.set('items', items);
49
+ // Explicit trim preservation is opt-in because physical indexes may change
50
+ // across full data refreshes.
51
+ this.store.set('items', trimmedItems ? items.filter(i => !trimmedItems[i]) : items);
43
52
  // apply grouping if present
44
53
  if (grouping) {
45
54
  setStore(this.store, {
46
55
  groupingDepth: grouping.depth,
56
+ // if groups are not provided, we will consider that there is only one group with all items
47
57
  groups: grouping.groups,
48
58
  groupingCustomRenderer: grouping.customRenderer,
49
59
  });
@@ -21,6 +21,7 @@ export const REVOGRID_EVENTS = new Map([
21
21
  ['beforeanysource', 'beforeanysource'],
22
22
  ['aftersourceset', 'aftersourceset'],
23
23
  ['afteranysource', 'afteranysource'],
24
+ ['beforecolumnsgather', 'beforecolumnsgather'],
24
25
  ['beforecolumnsset', 'beforecolumnsset'],
25
26
  ['beforecolumnapplied', 'beforecolumnapplied'],
26
27
  ['aftercolumnsset', 'aftercolumnsset'],
@@ -2,8 +2,8 @@
2
2
  * Built by Revolist OU ❤️
3
3
  */
4
4
  import { h, f as Build } from './index-Chp_81rd.js';
5
- import { y as DATA_ROW, G as DRAG_ICON_CLASS, I as DRAGGABLE_CLASS } from './dimension.helpers-C2F2Cuh8.js';
6
- import { l as GROUP_EXPAND_BTN, m as GROUP_EXPAND_EVENT, G as GROUP_DEPTH, h as GROUP_EXPANDED, P as PSEUDO_GROUP_ITEM, O as isRowDragService, B as getCellDataParsed } from './column.service-BghHOZP8.js';
5
+ import { y as DATA_ROW, G as DRAG_ICON_CLASS, I as DRAGGABLE_CLASS } from './dimension.helpers-B-5OBYes.js';
6
+ import { l as GROUP_EXPAND_BTN, m as GROUP_EXPAND_EVENT, G as GROUP_DEPTH, h as GROUP_EXPANDED, P as PSEUDO_GROUP_ITEM, O as isRowDragService, B as getCellDataParsed } from './column.service-8pPNyrKn.js';
7
7
 
8
8
  const SortingSign = ({ column }) => {
9
9
  var _a;
@@ -1,13 +1,13 @@
1
1
  /*!
2
2
  * Built by Revolist OU ❤️
3
3
  */
4
- import { J as reduce, g as getRange, K as baseEach, C as getColumnType, c as columnTypes, L as toInteger, u as isGrouping, t as getGroupingName, r as rowTypes, B as getCellDataParsed, A as getCellRaw, I as getColumnByProp, h as GROUP_EXPANDED, x as getParsedGroup, y as isSameGroup, G as GROUP_DEPTH, e as PSEUDO_GROUP_ITEM_VALUE, d as PSEUDO_GROUP_ITEM_ID, o as GROUPING_ROW_TYPE, p as getSource, f as PSEUDO_GROUP_COLUMN, s as gatherGrouping, m as GROUP_EXPAND_EVENT, v as isGroupingColumn, q as getExpanded, E as isColGrouping } from './column.service-BghHOZP8.js';
5
- import { W as createStore, w as setStore, i as calculateDimensionData, X as identity, Y as isArray, b as getSourceItem, o as getScrollbarSize, u as timeout, Z as baseProperty, _ as isArrayLike, $ as getTag, a0 as baseKeys, g as getPhysical, e as setItems, j as getItemByPosition } from './dimension.helpers-C2F2Cuh8.js';
6
- import { f as calculateRowHeaderSize } from './viewport.store-C3ajQgRm.js';
4
+ import { J as reduce, g as getRange, K as baseEach, C as getColumnType, c as columnTypes, L as toInteger, u as isGrouping, t as getGroupingName, r as rowTypes, B as getCellDataParsed, A as getCellRaw, I as getColumnByProp, h as GROUP_EXPANDED, x as getParsedGroup, y as isSameGroup, G as GROUP_DEPTH, e as PSEUDO_GROUP_ITEM_VALUE, d as PSEUDO_GROUP_ITEM_ID, o as GROUPING_ROW_TYPE, p as getSource, f as PSEUDO_GROUP_COLUMN, s as gatherGrouping, m as GROUP_EXPAND_EVENT, v as isGroupingColumn, q as getExpanded, E as isColGrouping } from './column.service-8pPNyrKn.js';
5
+ import { W as createStore, w as setStore, i as calculateDimensionData, X as identity, Y as isArray, b as getSourceItem, o as getScrollbarSize, u as timeout, Z as baseProperty, _ as isArrayLike, $ as getTag, a0 as baseKeys, g as getPhysical, e as setItems, j as getItemByPosition } from './dimension.helpers-B-5OBYes.js';
6
+ import { f as calculateRowHeaderSize } from './viewport.store-BGWR3XfI.js';
7
7
  import { h } from './index-Chp_81rd.js';
8
8
  import { b as FILTER_PROP, i as isFilterBtn } from './filter.button-C8XTWPU2.js';
9
9
  import { i as isObjectLike, b as baseGetTag, d as debounce } from './debounce-BfO9dz9v.js';
10
- import { O as ON_COLUMN_CLICK, d as dispatch } from './header-cell-renderer-DO0jvvbw.js';
10
+ import { O as ON_COLUMN_CLICK, d as dispatch } from './header-cell-renderer-WkTbrmr7.js';
11
11
 
12
12
  /**
13
13
  * Plugin which recalculates realSize on changes of sizes, originItemSize and count
@@ -1,7 +1,7 @@
1
1
  /*!
2
2
  * Built by Revolist OU ❤️
3
3
  */
4
- import { a5 as toFinite, a6 as keys, _ as isArrayLike, a4 as baseIteratee, Y as isArray, P as GRID_INTERNALS, a7 as isIterateeCall, a as getVisibleSourceItem, z as DISABLED_CLASS, C as CELL_CLASS, b as getSourceItem } from './dimension.helpers-C2F2Cuh8.js';
4
+ import { a5 as toFinite, a6 as keys, _ as isArrayLike, a4 as baseIteratee, Y as isArray, P as GRID_INTERNALS, a7 as isIterateeCall, a as getVisibleSourceItem, z as DISABLED_CLASS, C as CELL_CLASS, b as getSourceItem } from './dimension.helpers-B-5OBYes.js';
5
5
 
6
6
  /**
7
7
  * Converts `value` to an integer.
@@ -3270,8 +3270,16 @@ class DataStore {
3270
3270
  * full data source update
3271
3271
  * @param source - data column/rgRow source
3272
3272
  * @param grouping - grouping information if present
3273
+ * @param silent - if true, store will be updated without resetting trimmed state
3274
+ * @param preserveTrimmed - if true, current trimmed indexes will be re-applied to the new source, use with caution because physical indexes may change across full data refreshes
3273
3275
  */
3274
- updateData(source, grouping, silent = false) {
3276
+ updateData(source, grouping,
3277
+ // if true, store will be updated without resetting trimmed state
3278
+ silent = false,
3279
+ // if true, current trimmed indexes will be re-applied to the new source
3280
+ preserveTrimmed = false) {
3281
+ const trimmed = this.store.get('trimmed');
3282
+ const trimmedItems = silent && preserveTrimmed ? gatherTrimmedItems(trimmed) : null;
3275
3283
  // during full update we do drop trim
3276
3284
  if (!silent) {
3277
3285
  this.store.set('trimmed', {});
@@ -3284,12 +3292,14 @@ class DataStore {
3284
3292
  source,
3285
3293
  proxyItems: [...items],
3286
3294
  });
3287
- // update data items
3288
- this.store.set('items', items);
3295
+ // Explicit trim preservation is opt-in because physical indexes may change
3296
+ // across full data refreshes.
3297
+ this.store.set('items', trimmedItems ? items.filter(i => !trimmedItems[i]) : items);
3289
3298
  // apply grouping if present
3290
3299
  if (grouping) {
3291
3300
  setStore(this.store, {
3292
3301
  groupingDepth: grouping.depth,
3302
+ // if groups are not provided, we will consider that there is only one group with all items
3293
3303
  groups: grouping.groups,
3294
3304
  groupingCustomRenderer: grouping.customRenderer,
3295
3305
  });
@@ -1,7 +1,7 @@
1
1
  /*!
2
2
  * Built by Revolist OU ❤️
3
3
  */
4
- import { a1 as KeyCodesEnum, a2 as OsPlatform, U as codesLetter, V as keyValues, N as EDIT_INPUT_WR } from './dimension.helpers-C2F2Cuh8.js';
4
+ import { a1 as KeyCodesEnum, a2 as OsPlatform, U as codesLetter, V as keyValues, N as EDIT_INPUT_WR } from './dimension.helpers-B-5OBYes.js';
5
5
 
6
6
  function isMetaKey(code) {
7
7
  const keys = [
@@ -2,7 +2,7 @@
2
2
  * Built by Revolist OU ❤️
3
3
  */
4
4
  import { h } from './index-Chp_81rd.js';
5
- import { Q as doPropMerge } from './column.service-BghHOZP8.js';
5
+ import { Q as doPropMerge } from './column.service-8pPNyrKn.js';
6
6
 
7
7
  /**
8
8
  * Dispatches a custom event to a specified target element.
package/dist/esm/index.js CHANGED
@@ -1,16 +1,16 @@
1
1
  /*!
2
2
  * Built by Revolist OU ❤️
3
3
  */
4
- 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-BghHOZP8.js';
5
- import { B as BasePlugin } from './column.drag.plugin-B98azH0j.js';
6
- export { A as AutoSizeColumnPlugin, C as ColumnMovePlugin, D as DimensionStore, b as ExportCsv, E as ExportFilePlugin, c as FILTER_CONFIG_CHANGED_EVENT, F as FILTER_TRIMMED_TYPE, d as FILTE_PANEL, e as FilterPlugin, G as GroupingRowPlugin, S as SelectionStore, m as SortingPlugin, a as StretchColumn, n as defaultCellCompare, o as descCellCompare, j as doCollapse, k as doExpand, f as filterCoreFunctionsIndexedByType, h as filterNames, g as filterTypes, q as getComparer, l as getLeftRelative, p as getNextOrder, i as isStretchPlugin, s as sortIndexByItems } from './column.drag.plugin-B98azH0j.js';
7
- export { d as dispatch, a as dispatchByEvent } from './header-cell-renderer-DO0jvvbw.js';
8
- export { C as CellRenderer, G as GroupingRowRenderer, S as SortingSign, e as expandEvent, a as expandSvgIconVNode } from './cell-renderer-BDmepZJO.js';
9
- export { C as CELL_CLASS, L as CELL_HANDLER_CLASS, x as DATA_COL, y as DATA_ROW, z as DISABLED_CLASS, I as DRAGGABLE_CLASS, O as DRAGG_TEXT, G as DRAG_ICON_CLASS, D as DataStore, N as EDIT_INPUT_WR, J as FOCUS_CLASS, P as GRID_INTERNALS, F as HEADER_ACTUAL_ROW_CLASS, H as HEADER_CLASS, E as HEADER_ROW_CLASS, B as HEADER_SORTABLE_CLASS, M as MIN_COL_SIZE, K as MOBILE_CLASS, R as RESIZE_INTERVAL, Q as ROW_FOCUSED_CLASS, A as ROW_HEADER_TYPE, S as SELECTION_BORDER_CLASS, T as TMP_SELECTION_BG_CLASS, v as applyMixins, i as calculateDimensionData, U as codesLetter, l as findPositionInArray, h as gatherTrimmedItems, k as getItemByIndex, j as getItemByPosition, g as getPhysical, o as getScrollbarSize, b as getSourceItem, f as getSourceItemVirtualIndexByProp, c as getSourcePhysicalIndex, a as getVisibleSourceItem, V as keyValues, n as mergeSortedArray, p as proxyPlugin, m as pushSorted, r as range, q as scaleValue, e as setItems, d as setSourceByPhysicalIndex, s as setSourceByVirtualIndex, w as setStore, u as timeout, t as trimmedPlugin } from './dimension.helpers-C2F2Cuh8.js';
10
- export { T as TextEditor } from './text-editor-BylR9oxh.js';
11
- export { k as isAll, c as isClear, h as isCopy, a as isCtrlKey, b as isCtrlMetaKey, g as isCut, l as isEditInput, m as isEditorCtrConstructible, f as isEnterKeyValue, i as isMetaKey, j as isPaste, d as isTab, e as isTabKeyValue } from './edit.utils-Cdhf8P7e.js';
4
+ 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-8pPNyrKn.js';
5
+ import { B as BasePlugin } from './column.drag.plugin-C9lvlTfl.js';
6
+ export { A as AutoSizeColumnPlugin, C as ColumnMovePlugin, D as DimensionStore, b as ExportCsv, E as ExportFilePlugin, c as FILTER_CONFIG_CHANGED_EVENT, F as FILTER_TRIMMED_TYPE, d as FILTE_PANEL, e as FilterPlugin, G as GroupingRowPlugin, S as SelectionStore, m as SortingPlugin, a as StretchColumn, n as defaultCellCompare, o as descCellCompare, j as doCollapse, k as doExpand, f as filterCoreFunctionsIndexedByType, h as filterNames, g as filterTypes, q as getComparer, l as getLeftRelative, p as getNextOrder, i as isStretchPlugin, s as sortIndexByItems } from './column.drag.plugin-C9lvlTfl.js';
7
+ export { d as dispatch, a as dispatchByEvent } from './header-cell-renderer-WkTbrmr7.js';
8
+ export { C as CellRenderer, G as GroupingRowRenderer, S as SortingSign, e as expandEvent, a as expandSvgIconVNode } from './cell-renderer-BNeaYjy6.js';
9
+ export { C as CELL_CLASS, L as CELL_HANDLER_CLASS, x as DATA_COL, y as DATA_ROW, z as DISABLED_CLASS, I as DRAGGABLE_CLASS, O as DRAGG_TEXT, G as DRAG_ICON_CLASS, D as DataStore, N as EDIT_INPUT_WR, J as FOCUS_CLASS, P as GRID_INTERNALS, F as HEADER_ACTUAL_ROW_CLASS, H as HEADER_CLASS, E as HEADER_ROW_CLASS, B as HEADER_SORTABLE_CLASS, M as MIN_COL_SIZE, K as MOBILE_CLASS, R as RESIZE_INTERVAL, Q as ROW_FOCUSED_CLASS, A as ROW_HEADER_TYPE, S as SELECTION_BORDER_CLASS, T as TMP_SELECTION_BG_CLASS, v as applyMixins, i as calculateDimensionData, U as codesLetter, l as findPositionInArray, h as gatherTrimmedItems, k as getItemByIndex, j as getItemByPosition, g as getPhysical, o as getScrollbarSize, b as getSourceItem, f as getSourceItemVirtualIndexByProp, c as getSourcePhysicalIndex, a as getVisibleSourceItem, V as keyValues, n as mergeSortedArray, p as proxyPlugin, m as pushSorted, r as range, q as scaleValue, e as setItems, d as setSourceByPhysicalIndex, s as setSourceByVirtualIndex, w as setStore, u as timeout, t as trimmedPlugin } from './dimension.helpers-B-5OBYes.js';
10
+ export { T as TextEditor } from './text-editor-DZSx2pWr.js';
11
+ export { k as isAll, c as isClear, h as isCopy, a as isCtrlKey, b as isCtrlMetaKey, g as isCut, l as isEditInput, m as isEditorCtrConstructible, f as isEnterKeyValue, i as isMetaKey, j as isPaste, d as isTab, e as isTabKeyValue } from './edit.utils-CQjRmx5n.js';
12
12
  export { h } from './index-Chp_81rd.js';
13
- export { V as ViewportStore, a as addMissingItems, f as calculateRowHeaderSize, d as getFirstItem, b as getItems, e as getLastItem, g as getUpdatedItemsByPosition, i as isActiveRange, c as isActiveRangeOutsideLastItem, r as recombineByOffset, s as setItemSizes, u as updateMissingAndRange } from './viewport.store-C3ajQgRm.js';
13
+ export { V as ViewportStore, a as addMissingItems, f as calculateRowHeaderSize, d as getFirstItem, b as getItems, e as getLastItem, g as getUpdatedItemsByPosition, i as isActiveRange, c as isActiveRangeOutsideLastItem, r as recombineByOffset, s as setItemSizes, u as updateMissingAndRange } from './viewport.store-BGWR3XfI.js';
14
14
  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, T as TRASH_BUTTON, d as TrashButton, i as isFilterBtn } from './filter.button-C8XTWPU2.js';
15
15
  import './debounce-BfO9dz9v.js';
16
16
 
@@ -34,6 +34,7 @@ const REVOGRID_EVENTS = new Map([
34
34
  ['beforeanysource', 'beforeanysource'],
35
35
  ['aftersourceset', 'aftersourceset'],
36
36
  ['afteranysource', 'afteranysource'],
37
+ ['beforecolumnsgather', 'beforecolumnsgather'],
37
38
  ['beforecolumnsset', 'beforecolumnsset'],
38
39
  ['beforecolumnapplied', 'beforecolumnapplied'],
39
40
  ['aftercolumnsset', 'aftercolumnsset'],
@@ -9,7 +9,7 @@ import './theme.service-BmnDvr6P.js';
9
9
  const defineCustomElements = async (win, options) => {
10
10
  if (typeof window === 'undefined') return undefined;
11
11
  await globalScripts();
12
- return bootstrapLazy([["revo-grid",[[260,"revo-grid",{"rowHeaders":[4,"row-headers"],"frameSize":[2,"frame-size"],"rowSize":[2,"row-size"],"colSize":[2,"col-size"],"range":[4],"readonly":[4],"resize":[4],"canFocus":[4,"can-focus"],"useClipboard":[4,"use-clipboard"],"columns":[16],"source":[16],"pinnedTopSource":[16],"pinnedBottomSource":[16],"rowDefinitions":[16],"editors":[16],"applyOnClose":[4,"apply-on-close"],"plugins":[16],"columnTypes":[16],"theme":[1537],"rowClass":[513,"row-class"],"autoSizeColumn":[4,"auto-size-column"],"filter":[4],"sorting":[16],"focusTemplate":[16],"canMoveColumns":[4,"can-move-columns"],"trimmedRows":[16],"exporting":[4],"grouping":[16],"stretch":[8],"additionalData":[16],"disableVirtualX":[4,"disable-virtual-x"],"disableVirtualY":[4,"disable-virtual-y"],"hideAttribution":[4,"hide-attribution"],"jobsBeforeRender":[16],"registerVNode":[16],"accessible":[4],"rtl":[4],"canDrag":[4,"can-drag"],"refresh":[64],"setDataAt":[64],"scrollToRow":[64],"scrollToColumnIndex":[64],"scrollToColumnProp":[64],"updateColumns":[64],"addTrimmed":[64],"scrollToCoordinate":[64],"setCellEdit":[64],"setCellsFocus":[64],"getSource":[64],"getVisibleSource":[64],"getSourceStore":[64],"getColumnStore":[64],"updateColumnSorting":[64],"clearSorting":[64],"getColumns":[64],"clearFocus":[64],"getPlugins":[64],"getFocused":[64],"getContentSize":[64],"getSelectedRange":[64],"refreshExtraElements":[64],"getProviders":[64]},[[5,"touchstart","mousedownHandle"],[5,"mousedown","mousedownHandle"],[5,"touchend","mouseupHandle"],[5,"mouseup","mouseupHandle"],[0,"rowdragstartinit","onRowDragStarted"],[0,"rowdragendinit","onRowDragEnd"],[0,"roworderchange","onRowOrderChange"],[0,"rowdragmoveinit","onRowDrag"],[0,"rowdragmousemove","onRowMouseMove"],[0,"celleditapply","onCellEdit"],[0,"rangeeditapply","onRangeEdit"],[0,"selectionchangeinit","onRangeChanged"],[0,"rowdropinit","onRowDropped"],[0,"beforeheaderclick","onHeaderClick"],[0,"beforecellfocusinit","onCellFocus"]],{"columnTypes":[{"columnTypesChanged":0}],"columns":[{"columnChanged":0}],"disableVirtualX":[{"disableVirtualXChanged":0}],"rowSize":[{"rowSizeChanged":0}],"theme":[{"themeChanged":0}],"source":[{"dataSourceChanged":0}],"pinnedBottomSource":[{"dataSourceChanged":0}],"pinnedTopSource":[{"dataSourceChanged":0}],"disableVirtualY":[{"disableVirtualYChanged":0}],"rowDefinitions":[{"rowDefChanged":0}],"trimmedRows":[{"trimmedRowsChanged":0}],"grouping":[{"groupingChanged":0}],"stretch":[{"applyStretch":0}],"filter":[{"applyFilter":0}],"sorting":[{"applySorting":0}],"rowHeaders":[{"rowHeadersChange":0}],"registerVNode":[{"registerOutsideVNodes":0}],"additionalData":[{"additionalDataChanged":0}],"rtl":[{"rtlChanged":0}],"plugins":[{"pluginsChanged":0}]}]]],["revogr-filter-panel",[[260,"revogr-filter-panel",{"filterNames":[16],"filterEntities":[16],"filterCaptions":[16],"disableDynamicFiltering":[4,"disable-dynamic-filtering"],"closeOnOutsideClick":[4,"close-on-outside-click"],"isFilterIdSet":[32],"filterId":[32],"currentFilterId":[32],"currentFilterType":[32],"changes":[32],"filterItems":[32],"show":[64],"getChanges":[64]},[[5,"mousedown","onMouseDown"]]]]],["revogr-clipboard_3",[[0,"revogr-clipboard",{"readonly":[4],"doCopy":[64]},[[4,"paste","onPaste"],[4,"copy","copyStarted"],[4,"cut","cutStarted"]]],[0,"revogr-edit",{"editCell":[16],"column":[16],"editor":[16],"saveOnClose":[4,"save-on-close"],"additionalData":[8,"additional-data"],"cancelChanges":[64],"beforeDisconnect":[64]}],[0,"revogr-order-editor",{"parent":[16],"dimensionRow":[16],"dimensionCol":[16],"dataStore":[16],"rowType":[1,"row-type"],"dragStart":[64],"endOrder":[64],"clearOrder":[64]}]]],["revogr-data_4",[[260,"revogr-data",{"readonly":[4],"range":[4],"rowClass":[1,"row-class"],"additionalData":[8,"additional-data"],"rowSelectionStore":[16],"viewportRow":[16],"viewportCol":[16],"dimensionRow":[16],"colData":[16],"dataStore":[16],"type":[513],"colType":[513,"col-type"],"jobsBeforeRender":[16],"providers":[32],"updateCell":[64]},null,{"dataStore":[{"onDataStoreChange":0}],"colData":[{"onColDataChange":0}]}],[0,"revogr-header",{"viewportCol":[16],"dimensionCol":[16],"selectionStore":[16],"groups":[16],"groupingDepth":[2,"grouping-depth"],"readonly":[4],"canResize":[4,"can-resize"],"resizeHandler":[16],"colData":[16],"columnFilter":[4,"column-filter"],"type":[1],"additionalData":[8,"additional-data"]}],[260,"revogr-viewport-scroll",{"rowHeader":[4,"row-header"],"contentWidth":[2,"content-width"],"contentHeight":[2,"content-height"],"colType":[1,"col-type"],"setScroll":[64],"changeScroll":[64],"applyScroll":[64]},[[0,"mousewheel-vertical","mousewheelVertical"],[0,"mousewheel-horizontal","mousewheelHorizontal"],[0,"scroll-coordinate","scrollApply"]]],[0,"vnode-html",{"redraw":[16]}]]],["revogr-attribution_7",[[0,"revogr-row-headers",{"height":[2],"dataPorts":[16],"headerProp":[16],"rowClass":[1,"row-class"],"resize":[4],"rowHeaderColumn":[16],"additionalData":[8,"additional-data"],"jobsBeforeRender":[16]}],[260,"revogr-overlay-selection",{"readonly":[4],"range":[4],"canDrag":[4,"can-drag"],"useClipboard":[4,"use-clipboard"],"selectionStore":[16],"dimensionRow":[16],"dimensionCol":[16],"dataStore":[16],"colData":[16],"lastCell":[16],"editors":[16],"applyChangesOnClose":[4,"apply-changes-on-close"],"additionalData":[8,"additional-data"],"isMobileDevice":[4,"is-mobile-device"]},[[5,"touchmove","onMouseMove"],[5,"mousemove","onMouseMove"],[5,"touchend","onMouseUp"],[5,"mouseup","onMouseUp"],[5,"mouseleave","onMouseUp"],[0,"dragstartcell","onCellDrag"],[4,"keyup","onKeyUp"],[4,"keydown","onKeyDown"]],{"selectionStore":[{"selectionServiceSet":0}],"dimensionRow":[{"createAutoFillService":0}],"dimensionCol":[{"createAutoFillService":0}],"dataStore":[{"columnServiceSet":0}],"colData":[{"columnServiceSet":0}]}],[0,"revogr-attribution"],[260,"revogr-focus",{"colType":[1,"col-type"],"rowType":[1,"row-type"],"selectionStore":[16],"dimensionRow":[16],"dimensionCol":[16],"dataStore":[16],"colData":[16],"focusTemplate":[16]}],[0,"revogr-scroll-virtual",{"dimension":[1],"realSize":[2,"real-size"],"virtualSize":[2,"virtual-size"],"clientSize":[2,"client-size"],"setScroll":[64],"changeScroll":[64]}],[0,"revogr-temp-range",{"selectionStore":[16],"dimensionRow":[16],"dimensionCol":[16]}],[0,"revogr-extra",{"nodes":[16],"update":[32],"refresh":[64]}]]]], options);
12
+ return bootstrapLazy([["revo-grid",[[260,"revo-grid",{"rowHeaders":[4,"row-headers"],"frameSize":[2,"frame-size"],"rowSize":[2,"row-size"],"colSize":[2,"col-size"],"range":[4],"readonly":[4],"resize":[4],"noHorizontalScrollTransfer":[4,"no-horizontal-scroll-transfer"],"canFocus":[4,"can-focus"],"useClipboard":[4,"use-clipboard"],"columns":[16],"source":[16],"pinnedTopSource":[16],"pinnedBottomSource":[16],"rowDefinitions":[16],"editors":[16],"applyOnClose":[4,"apply-on-close"],"plugins":[16],"columnTypes":[16],"theme":[1537],"rowClass":[513,"row-class"],"autoSizeColumn":[4,"auto-size-column"],"filter":[4],"sorting":[16],"focusTemplate":[16],"canMoveColumns":[4,"can-move-columns"],"trimmedRows":[16],"exporting":[4],"grouping":[16],"stretch":[8],"additionalData":[16],"disableVirtualX":[4,"disable-virtual-x"],"disableVirtualY":[4,"disable-virtual-y"],"hideAttribution":[4,"hide-attribution"],"jobsBeforeRender":[16],"registerVNode":[16],"accessible":[4],"rtl":[4],"canDrag":[4,"can-drag"],"refresh":[64],"setDataAt":[64],"scrollToRow":[64],"scrollToColumnIndex":[64],"scrollToColumnProp":[64],"updateColumns":[64],"addTrimmed":[64],"scrollToCoordinate":[64],"setCellEdit":[64],"setCellsFocus":[64],"getSource":[64],"getVisibleSource":[64],"getSourceStore":[64],"getColumnStore":[64],"updateColumnSorting":[64],"clearSorting":[64],"getColumns":[64],"clearFocus":[64],"getPlugins":[64],"getFocused":[64],"getContentSize":[64],"getSelectedRange":[64],"refreshExtraElements":[64],"getProviders":[64]},[[5,"touchstart","mousedownHandle"],[5,"mousedown","mousedownHandle"],[5,"touchend","mouseupHandle"],[5,"mouseup","mouseupHandle"],[0,"rowdragstartinit","onRowDragStarted"],[0,"rowdragendinit","onRowDragEnd"],[0,"roworderchange","onRowOrderChange"],[0,"rowdragmoveinit","onRowDrag"],[0,"rowdragmousemove","onRowMouseMove"],[0,"celleditapply","onCellEdit"],[0,"rangeeditapply","onRangeEdit"],[0,"selectionchangeinit","onRangeChanged"],[0,"rowdropinit","onRowDropped"],[0,"beforeheaderclick","onHeaderClick"],[0,"beforecellfocusinit","onCellFocus"]],{"columnTypes":[{"columnTypesChanged":0}],"columns":[{"columnChanged":0}],"disableVirtualX":[{"disableVirtualXChanged":0}],"rowSize":[{"rowSizeChanged":0}],"theme":[{"themeChanged":0}],"source":[{"dataSourceChanged":0}],"pinnedBottomSource":[{"dataSourceChanged":0}],"pinnedTopSource":[{"dataSourceChanged":0}],"disableVirtualY":[{"disableVirtualYChanged":0}],"rowDefinitions":[{"rowDefChanged":0}],"trimmedRows":[{"trimmedRowsChanged":0}],"grouping":[{"groupingChanged":0}],"stretch":[{"applyStretch":0}],"filter":[{"applyFilter":0}],"sorting":[{"applySorting":0}],"rowHeaders":[{"rowHeadersChange":0}],"registerVNode":[{"registerOutsideVNodes":0}],"additionalData":[{"additionalDataChanged":0}],"rtl":[{"rtlChanged":0}],"plugins":[{"pluginsChanged":0}]}]]],["revogr-filter-panel",[[260,"revogr-filter-panel",{"filterNames":[16],"filterEntities":[16],"filterCaptions":[16],"disableDynamicFiltering":[4,"disable-dynamic-filtering"],"closeOnOutsideClick":[4,"close-on-outside-click"],"isFilterIdSet":[32],"filterId":[32],"currentFilterId":[32],"currentFilterType":[32],"changes":[32],"filterItems":[32],"show":[64],"getChanges":[64]},[[5,"mousedown","onMouseDown"]]]]],["revogr-clipboard_3",[[0,"revogr-clipboard",{"readonly":[4],"doCopy":[64]},[[4,"paste","onPaste"],[4,"copy","copyStarted"],[4,"cut","cutStarted"]]],[0,"revogr-edit",{"editCell":[16],"column":[16],"editor":[16],"saveOnClose":[4,"save-on-close"],"additionalData":[8,"additional-data"],"cancelChanges":[64],"beforeDisconnect":[64]}],[0,"revogr-order-editor",{"parent":[16],"dimensionRow":[16],"dimensionCol":[16],"dataStore":[16],"rowType":[1,"row-type"],"dragStart":[64],"endOrder":[64],"clearOrder":[64]}]]],["revogr-data_4",[[260,"revogr-data",{"readonly":[4],"range":[4],"rowClass":[1,"row-class"],"additionalData":[8,"additional-data"],"rowSelectionStore":[16],"viewportRow":[16],"viewportCol":[16],"dimensionRow":[16],"colData":[16],"dataStore":[16],"type":[513],"colType":[513,"col-type"],"jobsBeforeRender":[16],"providers":[32],"updateCell":[64]},null,{"dataStore":[{"onDataStoreChange":0}],"colData":[{"onColDataChange":0}]}],[0,"revogr-header",{"viewportCol":[16],"dimensionCol":[16],"selectionStore":[16],"groups":[16],"groupingDepth":[2,"grouping-depth"],"readonly":[4],"canResize":[4,"can-resize"],"resizeHandler":[16],"colData":[16],"columnFilter":[4,"column-filter"],"type":[1],"additionalData":[8,"additional-data"]}],[260,"revogr-viewport-scroll",{"rowHeader":[4,"row-header"],"contentWidth":[2,"content-width"],"contentHeight":[2,"content-height"],"colType":[1,"col-type"],"noHorizontalScrollTransfer":[4,"no-horizontal-scroll-transfer"],"setScroll":[64],"changeScroll":[64],"applyScroll":[64]},[[0,"mousewheel-vertical","mousewheelVertical"],[0,"mousewheel-horizontal","mousewheelHorizontal"],[0,"scroll-coordinate","scrollApply"]]],[0,"vnode-html",{"redraw":[16]}]]],["revogr-attribution_7",[[0,"revogr-row-headers",{"height":[2],"dataPorts":[16],"headerProp":[16],"rowClass":[1,"row-class"],"resize":[4],"rowHeaderColumn":[16],"additionalData":[8,"additional-data"],"jobsBeforeRender":[16]}],[260,"revogr-overlay-selection",{"readonly":[4],"range":[4],"canDrag":[4,"can-drag"],"useClipboard":[4,"use-clipboard"],"selectionStore":[16],"dimensionRow":[16],"dimensionCol":[16],"dataStore":[16],"colData":[16],"lastCell":[16],"editors":[16],"applyChangesOnClose":[4,"apply-changes-on-close"],"additionalData":[8,"additional-data"],"isMobileDevice":[4,"is-mobile-device"]},[[5,"touchmove","onMouseMove"],[5,"mousemove","onMouseMove"],[5,"touchend","onMouseUp"],[5,"mouseup","onMouseUp"],[5,"mouseleave","onMouseUp"],[0,"dragstartcell","onCellDrag"],[4,"keyup","onKeyUp"],[4,"keydown","onKeyDown"]],{"selectionStore":[{"selectionServiceSet":0}],"dimensionRow":[{"createAutoFillService":0}],"dimensionCol":[{"createAutoFillService":0}],"dataStore":[{"columnServiceSet":0}],"colData":[{"columnServiceSet":0}]}],[0,"revogr-attribution"],[260,"revogr-focus",{"colType":[1,"col-type"],"rowType":[1,"row-type"],"selectionStore":[16],"dimensionRow":[16],"dimensionCol":[16],"dataStore":[16],"colData":[16],"focusTemplate":[16]}],[0,"revogr-scroll-virtual",{"dimension":[1],"realSize":[2,"real-size"],"virtualSize":[2,"virtual-size"],"clientSize":[2,"client-size"],"setScroll":[64],"changeScroll":[64]}],[0,"revogr-temp-range",{"selectionStore":[16],"dimensionRow":[16],"dimensionCol":[16]}],[0,"revogr-extra",{"nodes":[16],"update":[32],"refresh":[64]}]]]], options);
13
13
  };
14
14
 
15
15
  export { defineCustomElements };
@@ -2,16 +2,16 @@
2
2
  * Built by Revolist OU ❤️
3
3
  */
4
4
  import { h, r as registerInstance, d as createEvent, e as Host, g as getElement } from './index-Chp_81rd.js';
5
- import { c as columnTypes, J as reduce, C as getColumnType, r as rowTypes, i as isRowType, D as getColumnSizes, a as cropCellToMax, n as nextCell, I as getColumnByProp, F as getColumns } from './column.service-BghHOZP8.js';
6
- import { D as DataStore, b as getSourceItem, f as getSourceItemVirtualIndexByProp, d as setSourceByPhysicalIndex, s as setSourceByVirtualIndex, a as getVisibleSourceItem, h as gatherTrimmedItems, k as getItemByIndex, R as RESIZE_INTERVAL, u as timeout } from './dimension.helpers-C2F2Cuh8.js';
5
+ import { c as columnTypes, J as reduce, C as getColumnType, r as rowTypes, i as isRowType, D as getColumnSizes, a as cropCellToMax, n as nextCell, I as getColumnByProp, F as getColumns } from './column.service-8pPNyrKn.js';
6
+ import { D as DataStore, b as getSourceItem, f as getSourceItemVirtualIndexByProp, d as setSourceByPhysicalIndex, s as setSourceByVirtualIndex, a as getVisibleSourceItem, h as gatherTrimmedItems, k as getItemByIndex, R as RESIZE_INTERVAL, u as timeout } from './dimension.helpers-B-5OBYes.js';
7
7
  import { d as debounce } from './debounce-BfO9dz9v.js';
8
- import { D as DimensionStore, S as SelectionStore, B as BasePlugin, G as GroupingRowPlugin, a as StretchColumn, i as isStretchPlugin, A as AutoSizeColumnPlugin, e as FilterPlugin, E as ExportFilePlugin, m as SortingPlugin, C as ColumnMovePlugin } from './column.drag.plugin-B98azH0j.js';
9
- import { V as ViewportStore } from './viewport.store-C3ajQgRm.js';
8
+ import { D as DimensionStore, S as SelectionStore, B as BasePlugin, G as GroupingRowPlugin, a as StretchColumn, i as isStretchPlugin, A as AutoSizeColumnPlugin, e as FilterPlugin, E as ExportFilePlugin, m as SortingPlugin, C as ColumnMovePlugin } from './column.drag.plugin-C9lvlTfl.js';
9
+ import { V as ViewportStore } from './viewport.store-BGWR3XfI.js';
10
10
  import { T as ThemeService } from './theme.service-BmnDvr6P.js';
11
11
  import { v as viewportDataPartition, F as FOOTER_SLOT, C as CONTENT_SLOT, H as HEADER_SLOT, D as DATA_SLOT } from './viewport.helpers-VXhsJZtn.js';
12
12
  import { g as getPropertyFromEvent } from './events-BvSmBueA.js';
13
13
  import './filter.button-C8XTWPU2.js';
14
- import './header-cell-renderer-DO0jvvbw.js';
14
+ import './header-cell-renderer-WkTbrmr7.js';
15
15
 
16
16
  class ColumnDataProvider {
17
17
  get stores() {
@@ -139,9 +139,25 @@ class DataProvider {
139
139
  return sources;
140
140
  }, {});
141
141
  }
142
- setData(data, type = 'rgRow', disableVirtualRows = false, grouping, silent = false) {
142
+ /**
143
+ * Replaces the data source for a row type and synchronizes the related dimension metadata.
144
+ *
145
+ * `rgRow` updates also refresh the virtual row model unless `disableVirtualRows` is set.
146
+ * Pinned row types skip virtual row recalculation because they are rendered directly.
147
+ *
148
+ * @param data Full source data assigned to the target row store.
149
+ * @param type Row collection to update. Defaults to the main body rows.
150
+ * @param disableVirtualRows Prevents recalculating virtual rows for the main row store.
151
+ * @param grouping Optional grouping metadata applied together with the new data set.
152
+ * @param silent Preserves the current trimmed state instead of resetting it during the update.
153
+ * @param preserveTrimmed Re-applies current trimmed indexes after a silent update.
154
+ * @returns The same `data` array that was provided to the method.
155
+ */
156
+ setData(data, type = 'rgRow', disableVirtualRows = false, grouping,
157
+ // if true, store will be updated without resetting trimmed state
158
+ silent = false, preserveTrimmed = false) {
143
159
  // set rgRow data
144
- this.stores[type].updateData([...data], grouping, silent);
160
+ this.stores[type].updateData([...data], grouping, silent, preserveTrimmed);
145
161
  // for pinned row no need virtual data
146
162
  const noVirtual = type !== 'rgRow' || disableVirtualRows;
147
163
  this.dimensionProvider.setData(data.length, type, noVirtual);
@@ -400,6 +416,7 @@ function gatherColumnData(data) {
400
416
  contentHeight: data.contentHeight,
401
417
  key: data.colType,
402
418
  colType: data.colType,
419
+ noHorizontalScrollTransfer: data.noHorizontalScrollTransfer,
403
420
  onResizeviewport: data.onResizeviewport,
404
421
  // set viewport size to real size
405
422
  style: data.fixWidth ? { minWidth: `${realWidth}px` } : undefined,
@@ -444,6 +461,7 @@ class ViewportService {
444
461
  viewports: config.viewportProvider.stores,
445
462
  dimensions: config.dimensionProvider.stores,
446
463
  rowStores: config.dataProvider.stores,
464
+ noHorizontalScrollTransfer: config.noHorizontalScrollTransfer,
447
465
  colStore,
448
466
  onHeaderresize: e => this.onColumnResize(val, e, colStore),
449
467
  };
@@ -622,11 +640,11 @@ class GridScrollingService {
622
640
  this.setViewport = setViewport;
623
641
  this.elements = {};
624
642
  }
625
- async proxyScroll(e, key) {
643
+ async proxyScroll(e, key, skipEvent) {
626
644
  var _a;
627
645
  let newEventPromise;
628
646
  let event = e;
629
- for (let elKey in this.elements) {
647
+ for (let elKey in (skipEvent ? {} : this.elements)) {
630
648
  // skip
631
649
  if (e.dimension === 'rgCol' && elKey === 'headerRow') {
632
650
  continue;
@@ -1340,6 +1358,7 @@ const RevoGridComponent = class {
1340
1358
  this.beforeanysource = createEvent(this, "beforeanysource", 7);
1341
1359
  this.aftersourceset = createEvent(this, "aftersourceset", 7);
1342
1360
  this.afteranysource = createEvent(this, "afteranysource", 7);
1361
+ this.beforecolumnsgather = createEvent(this, "beforecolumnsgather", 7);
1343
1362
  this.beforecolumnsset = createEvent(this, "beforecolumnsset", 7);
1344
1363
  this.beforecolumnapplied = createEvent(this, "beforecolumnapplied", 7);
1345
1364
  this.aftercolumnsset = createEvent(this, "aftercolumnsset", 7);
@@ -1380,6 +1399,10 @@ const RevoGridComponent = class {
1380
1399
  this.readonly = false;
1381
1400
  /** When true, columns are resizable. */
1382
1401
  this.resize = false;
1402
+ /**
1403
+ * Prevents horizontal scroll state from being mirrored across viewport sections.
1404
+ */
1405
+ this.noHorizontalScrollTransfer = false;
1383
1406
  /** When true cell focus appear. */
1384
1407
  this.canFocus = true;
1385
1408
  /** When true enable clipboard. */
@@ -1915,7 +1938,13 @@ const RevoGridComponent = class {
1915
1938
  if (!this.dimensionProvider || !this.columnProvider) {
1916
1939
  return;
1917
1940
  }
1918
- const columnGather = getColumns(newVal, 0, this.columnTypes);
1941
+ const beforeGatherEvent = this.beforecolumnsgather.emit({
1942
+ columns: [...newVal],
1943
+ });
1944
+ if (beforeGatherEvent.defaultPrevented) {
1945
+ return;
1946
+ }
1947
+ const columnGather = getColumns(beforeGatherEvent.detail.columns, 0, this.columnTypes);
1919
1948
  const beforeSetEvent = this.beforecolumnsset.emit(columnGather);
1920
1949
  if (beforeSetEvent.defaultPrevented) {
1921
1950
  return;
@@ -2262,6 +2291,7 @@ const RevoGridComponent = class {
2262
2291
  scrollingService: this.scrollingService,
2263
2292
  orderService: this.orderService,
2264
2293
  selectionStoreConnector: this.selectionStoreConnector,
2294
+ noHorizontalScrollTransfer: this.noHorizontalScrollTransfer,
2265
2295
  disableVirtualX: this.disableVirtualX,
2266
2296
  disableVirtualY: this.disableVirtualY,
2267
2297
  resize: c => this.aftercolumnresize.emit(c),
@@ -2302,7 +2332,9 @@ const RevoGridComponent = class {
2302
2332
  dataViews.push(dataView);
2303
2333
  });
2304
2334
  // Add viewport scroll in the end
2305
- viewPortHtml.push(h("revogr-viewport-scroll", Object.assign({}, view.prop, { ref: el => this.scrollingService.registerElement(el, `${view.prop.key}`), onScrollviewport: e => this.scrollingService.proxyScroll(e.detail, `${view.prop.key}`), onScrollviewportsilent: e => this.scrollingService.scrollSilentService(e.detail, `${view.prop.key}`) }), dataViews));
2335
+ viewPortHtml.push(h("revogr-viewport-scroll", Object.assign({}, view.prop, { ref: el => this.scrollingService.registerElement(el, `${view.prop.key}`), onScrollviewport: e => {
2336
+ this.scrollingService.proxyScroll(e.detail, `${view.prop.key}`, this.noHorizontalScrollTransfer && e.detail.dimension === 'rgCol');
2337
+ }, onScrollviewportsilent: e => this.scrollingService.scrollSilentService(e.detail, `${view.prop.key}`) }), dataViews));
2306
2338
  }
2307
2339
  viewportSections.push(viewPortHtml);
2308
2340
  // #endregion