@revolist/revogrid 4.23.20 → 4.23.22

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 (37) hide show
  1. package/dist/cjs/{column.drag.plugin-ByDJ7Rk3.js → column.drag.plugin-Cz-T4y3M.js} +43 -31
  2. package/dist/cjs/index.cjs.js +2 -1
  3. package/dist/cjs/loader.cjs.js +1 -1
  4. package/dist/cjs/revo-grid.cjs.entry.js +44 -19
  5. package/dist/cjs/revo-grid.cjs.js +1 -1
  6. package/dist/cjs/revogr-clipboard_3.cjs.entry.js +1 -1
  7. package/dist/collection/components/editors/revogr-edit-style.css +2 -1
  8. package/dist/collection/components/revoGrid/revo-grid.js +65 -2
  9. package/dist/collection/components/revoGrid/viewport.service.js +17 -13
  10. package/dist/collection/plugins/base.plugin.js +1 -1
  11. package/dist/collection/plugins/sorting/sorting.plugin.js +42 -30
  12. package/dist/collection/services/dimension.provider.js +8 -4
  13. package/dist/collection/types/events.js +1 -0
  14. package/dist/esm/{column.drag.plugin-BZacA8n_.js → column.drag.plugin-DKkf7Zqb.js} +43 -31
  15. package/dist/esm/index.js +3 -2
  16. package/dist/esm/loader.js +1 -1
  17. package/dist/esm/revo-grid.entry.js +44 -19
  18. package/dist/esm/revo-grid.js +1 -1
  19. package/dist/esm/revogr-clipboard_3.entry.js +1 -1
  20. package/dist/revo-grid/{column.drag.plugin-BZacA8n_.js → column.drag.plugin-DKkf7Zqb.js} +43 -31
  21. package/dist/revo-grid/index.esm.js +3 -2
  22. package/dist/revo-grid/revo-grid.entry.js +44 -19
  23. package/dist/revo-grid/revo-grid.esm.js +1 -1
  24. package/dist/revo-grid/revogr-clipboard_3.entry.js +1 -1
  25. package/dist/types/components/revoGrid/revo-grid.d.ts +15 -1
  26. package/dist/types/components/revoGrid/viewport.service.d.ts +3 -1
  27. package/dist/types/components.d.ts +17 -2
  28. package/dist/types/plugins/sorting/sorting.plugin.d.ts +3 -1
  29. package/dist/types/plugins/sorting/sorting.types.d.ts +22 -1
  30. package/dist/types/services/dimension.provider.d.ts +4 -1
  31. package/dist/types/types/events.d.ts +1 -1
  32. package/hydrate/index.js +88 -50
  33. package/hydrate/index.mjs +88 -50
  34. package/package.json +1 -1
  35. package/standalone/index.js +1 -1
  36. package/standalone/revo-grid.js +1 -1
  37. package/standalone/revogr-edit2.js +1 -1
@@ -350,7 +350,7 @@ class BasePlugin {
350
350
  },
351
351
  });
352
352
  if (immediate) {
353
- callback(nativeValueDesc === null || nativeValueDesc === void 0 ? void 0 : nativeValueDesc.value);
353
+ callback((nativeValueDesc === null || nativeValueDesc === void 0 ? void 0 : nativeValueDesc.get) ? nativeValueDesc.get.call(this.revogrid) : nativeValueDesc === null || nativeValueDesc === void 0 ? void 0 : nativeValueDesc.value);
354
354
  }
355
355
  }
356
356
  /**
@@ -1875,7 +1875,7 @@ function mergeSortedRowsWithGroups(indexes, source, sortedRows) {
1875
1875
  * 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.
1876
1876
  * 2. @event `beforesourcesortingapply` - Triggered before the sorting data is applied to the data source. You can prevent this event, and the data will not be sorted.
1877
1877
  * 3. @event `beforesortingapply` - Triggered before the sorting data is applied to the data source. You can prevent this event, and the data will not be sorted. This event is only called from a column sorting click.
1878
- * 4. @event `aftersortingapply` - Triggered after sorting has been applied and completed. This event occurs for both row and column sorting.
1878
+ * 4. @event `aftersortingapply` - Triggered after sorting has been applied and completed. The event detail includes the final sorting state and sorting column metadata when available.
1879
1879
  *
1880
1880
  * Note: If you prevent an event, it will not proceed to the subsequent steps.
1881
1881
  */
@@ -2017,6 +2017,38 @@ class SortingPlugin extends BasePlugin {
2017
2017
  });
2018
2018
  this.setSortingState(state);
2019
2019
  }
2020
+ resetSortingForStore(type) {
2021
+ const storeService = this.providers.data.stores[type];
2022
+ // row data
2023
+ const source = storeService.store.get('source');
2024
+ // row indexes
2025
+ const proxyItems = storeService.store.get('proxyItems');
2026
+ // row indexes
2027
+ const newItemsOrder = Array.from({ length: source.length }, (_, i) => i); // recover indexes range(0, source.length)
2028
+ this.providers.dimension.updateSizesPositionByNewDataIndexes(type, newItemsOrder, proxyItems);
2029
+ storeService.setData({ proxyItems: newItemsOrder });
2030
+ }
2031
+ applySortingForStore(type, sorting, sortingFunc, sortingColumns, sortingOrder, ignoreViewportUpdate) {
2032
+ const storeService = this.providers.data.stores[type];
2033
+ // row data
2034
+ const source = storeService.store.get('source');
2035
+ // row indexes
2036
+ const proxyItems = storeService.store.get('proxyItems');
2037
+ const sortItems = getSortableRowIndexes(proxyItems, source);
2038
+ const sortedItems = sortIndexByItems([...sortItems], source, sortingFunc, sorting, sortingColumns, sortingOrder);
2039
+ const newItemsOrder = mergeSortedRowsWithGroups(proxyItems, source, sortedItems);
2040
+ // take row indexes before trim applied and proxy items
2041
+ const prevItems = storeService.store.get('items');
2042
+ storeService.setData({
2043
+ proxyItems: newItemsOrder,
2044
+ });
2045
+ // take currently visible row indexes
2046
+ const newItems = storeService.store.get('items');
2047
+ if (!ignoreViewportUpdate) {
2048
+ this.providers.dimension
2049
+ .updateSizesPositionByNewDataIndexes(type, newItems, prevItems);
2050
+ }
2051
+ }
2020
2052
  startSorting(order, sortingFunc, sortingColumns, sortingOrder, ignoreViewportUpdate) {
2021
2053
  if (!this.sortingPromise) {
2022
2054
  // add job before render
@@ -2108,45 +2140,25 @@ class SortingPlugin extends BasePlugin {
2108
2140
  // if no sorting - reset
2109
2141
  if (!Object.keys(sorting || {}).length) {
2110
2142
  for (let type of activeTypes) {
2111
- const storeService = this.providers.data.stores[type];
2112
- // row data
2113
- const source = storeService.store.get('source');
2114
- // row indexes
2115
- const proxyItems = storeService.store.get('proxyItems');
2116
- // row indexes
2117
- const newItemsOrder = Array.from({ length: source.length }, (_, i) => i); // recover indexes range(0, source.length)
2118
- this.providers.dimension.updateSizesPositionByNewDataIndexes(type, newItemsOrder, proxyItems);
2119
- storeService.setData({ proxyItems: newItemsOrder });
2143
+ this.resetSortingForStore(type);
2120
2144
  }
2121
2145
  }
2122
2146
  else {
2123
2147
  for (let type of activeTypes) {
2124
- const storeService = this.providers.data.stores[type];
2125
- // row data
2126
- const source = storeService.store.get('source');
2127
- // row indexes
2128
- const proxyItems = storeService.store.get('proxyItems');
2129
- const sortItems = getSortableRowIndexes(proxyItems, source);
2130
- const sortedItems = sortIndexByItems([...sortItems], source, sortingFunc, sorting, activeSortingColumns, activeSortingOrder);
2131
- const newItemsOrder = mergeSortedRowsWithGroups(proxyItems, source, sortedItems);
2132
- // take row indexes before trim applied and proxy items
2133
- const prevItems = storeService.store.get('items');
2134
- storeService.setData({
2135
- proxyItems: newItemsOrder,
2136
- });
2137
- // take currently visible row indexes
2138
- const newItems = storeService.store.get('items');
2139
- if (!activeIgnoreViewportUpdate) {
2140
- this.providers.dimension
2141
- .updateSizesPositionByNewDataIndexes(type, newItems, prevItems);
2142
- }
2148
+ this.applySortingForStore(type, sorting, sortingFunc, activeSortingColumns, activeSortingOrder, activeIgnoreViewportUpdate);
2143
2149
  }
2144
2150
  }
2145
2151
  // refresh columns to redraw column headers and show correct icon
2146
2152
  columnTypes.forEach((type) => {
2147
2153
  this.providers.column.dataSources[type].refresh();
2148
2154
  });
2149
- this.emit('aftersortingapply');
2155
+ const afterSortingDetail = {
2156
+ sorting: hasActiveSorting(sorting) ? sorting : undefined,
2157
+ sortingColumns: activeSortingColumns,
2158
+ sortingOrder: activeSortingOrder,
2159
+ types: activeTypes,
2160
+ };
2161
+ this.emit('aftersortingapply', afterSortingDetail);
2150
2162
  }
2151
2163
  }
2152
2164
 
@@ -2,8 +2,8 @@
2
2
  * Built by Revolist OU ❤️
3
3
  */
4
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-C6hByxPy.js';
5
- import { B as BasePlugin } from './column.drag.plugin-BZacA8n_.js';
6
- export { A as AutoSizeColumnPlugin, n as BEFORE_COLUMN_DRAG_END_EVENT, m as COLUMN_DRAG_END_EVENT, l as COLUMN_DRAG_MOVE_EVENT, o as COLUMN_DRAG_START_EVENT, C as ColumnAutoSizeMode, p 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, s as SortingPlugin, a as StretchColumn, w as defaultCellCompare, x as descCellCompare, j as doCollapse, k as doExpand, f as filterCoreFunctionsIndexedByType, h as filterNames, g as filterTypes, r as getColumnDragPosition, z as getComparer, q as getLeftRelative, y as getNextOrder, u as getSortingIndex, t as hasActiveSorting, i as isStretchPlugin, v as sortIndexByItems } from './column.drag.plugin-BZacA8n_.js';
5
+ import { B as BasePlugin } from './column.drag.plugin-DKkf7Zqb.js';
6
+ export { A as AutoSizeColumnPlugin, n as BEFORE_COLUMN_DRAG_END_EVENT, m as COLUMN_DRAG_END_EVENT, l as COLUMN_DRAG_MOVE_EVENT, o as COLUMN_DRAG_START_EVENT, C as ColumnAutoSizeMode, p 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, s as SortingPlugin, a as StretchColumn, w as defaultCellCompare, x as descCellCompare, j as doCollapse, k as doExpand, f as filterCoreFunctionsIndexedByType, h as filterNames, g as filterTypes, r as getColumnDragPosition, z as getComparer, q as getLeftRelative, y as getNextOrder, u as getSortingIndex, t as hasActiveSorting, i as isStretchPlugin, v as sortIndexByItems } from './column.drag.plugin-DKkf7Zqb.js';
7
7
  export { d as dispatch, a as dispatchByEvent } from './header-cell-renderer-BMmXRsd_.js';
8
8
  export { C as CellRenderer, G as GroupingRowRenderer, S as SortingSign, e as expandEvent, a as expandSvgIconVNode } from './cell-renderer-CLTRlCa5.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-Db3qZoW5.js';
@@ -27,6 +27,7 @@ const REVOGRID_EVENTS = new Map([
27
27
  ['beforesorting', 'beforesorting'],
28
28
  ['beforesourcesortingapply', 'beforesourcesortingapply'],
29
29
  ['beforesortingapply', 'beforesortingapply'],
30
+ ['aftersortingapply', 'aftersortingapply'],
30
31
  ['rowdragstart', 'rowdragstart'],
31
32
  ['headerclick', 'headerclick'],
32
33
  ['beforecellfocus', 'beforecellfocus'],
@@ -6,7 +6,7 @@ import { c as columnTypes, J as reduce, C as getColumnType, r as rowTypes, i as
6
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 } from './dimension.helpers-CGKwSvw6.js';
7
7
  import { d as debounce } from './debounce-PCRWZliA.js';
8
8
  import { g as getScrollDimension, v as viewportDataPartition, F as FOOTER_SLOT, C as CONTENT_SLOT, H as HEADER_SLOT, D as DATA_SLOT } from './viewport.helpers-CoCAvmZs.js';
9
- 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, s as SortingPlugin, p as ColumnMovePlugin } from './column.drag.plugin-BZacA8n_.js';
9
+ 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, s as SortingPlugin, p as ColumnMovePlugin } from './column.drag.plugin-DKkf7Zqb.js';
10
10
  import { V as ViewportStore } from './viewport.store-_c579YyM.js';
11
11
  import { T as ThemeService } from './theme.service-BmnDvr6P.js';
12
12
  import { t as timeout } from './index-Db3qZoW5.js';
@@ -230,6 +230,10 @@ class DataProvider {
230
230
  }
231
231
  }
232
232
 
233
+ const DEFAULT_VIRTUAL_X = ['rgCol'];
234
+ function isVirtualXDimension(type, disableVirtualX = false, virtualX = DEFAULT_VIRTUAL_X) {
235
+ return !disableVirtualX && virtualX.includes(type);
236
+ }
233
237
  /**
234
238
  * Dimension provider
235
239
  * Stores dimension information and custom sizes
@@ -240,7 +244,7 @@ class DimensionProvider {
240
244
  constructor(viewports, config) {
241
245
  this.viewports = viewports;
242
246
  const sizeChanged = debounce((k) => config.realSizeChanged(k), RESIZE_INTERVAL);
243
- this.stores = reduce([...rowTypes, ...columnTypes], (sources, t) => {
247
+ this.stores = [...rowTypes, ...columnTypes].reduce((sources, t) => {
244
248
  sources[t] = new DimensionStore(t);
245
249
  sources[t].store.onChange('realSize', () => sizeChanged(t));
246
250
  return sources;
@@ -316,8 +320,9 @@ class DimensionProvider {
316
320
  * Applies new columns to the dimension provider
317
321
  * @param columns - new columns data
318
322
  * @param disableVirtualX - disable virtual data for X axis
323
+ * @param virtualX - column dimensions that should use virtual data
319
324
  */
320
- applyNewColumns(columns, disableVirtualX, keepOld = false) {
325
+ applyNewColumns(columns, disableVirtualX, keepOld = false, virtualX = DEFAULT_VIRTUAL_X) {
321
326
  // Apply new columns to dimension provider
322
327
  for (let type of columnTypes) {
323
328
  if (!keepOld) {
@@ -327,7 +332,7 @@ class DimensionProvider {
327
332
  // Get the new columns for the current type
328
333
  const items = columns[type];
329
334
  // Determine if virtual data should be disabled for the current type
330
- const noVirtual = type !== 'rgCol' || disableVirtualX;
335
+ const noVirtual = !isVirtualXDimension(type, disableVirtualX, virtualX);
331
336
  // Set the items count in the dimension provider
332
337
  this.stores[type].setStore({ count: items.length });
333
338
  // Set the custom sizes for the columns
@@ -433,6 +438,9 @@ class ViewportProvider {
433
438
  }
434
439
  }
435
440
 
441
+ function getViewportResizeDimension(colType, dimension) {
442
+ return dimension === 'rgCol' ? colType : dimension;
443
+ }
436
444
  /** Collect Column data */
437
445
  function gatherColumnData(data) {
438
446
  const colDimension = data.dimensions[data.colType].store;
@@ -492,20 +500,20 @@ class ViewportService {
492
500
  colStore,
493
501
  onHeaderresize: e => this.onColumnResize(val, e, colStore),
494
502
  };
495
- if (val === 'rgCol') {
496
- column.onResizeviewport = (e) => {
497
- var _a;
498
- const vpState = {
499
- clientSize: e.detail.size,
500
- };
501
- // virtual size will be handled by dimension provider if disabled
502
- if ((e.detail.dimension === 'rgRow' && !config.disableVirtualY)
503
- || (e.detail.dimension === 'rgCol' && !config.disableVirtualX)) {
504
- vpState.virtualSize = e.detail.size;
505
- }
506
- (_a = config.viewportProvider) === null || _a === void 0 ? void 0 : _a.setViewport(e.detail.dimension, vpState);
503
+ column.onResizeviewport = (e) => {
504
+ var _a;
505
+ const vpState = {
506
+ clientSize: e.detail.size,
507
507
  };
508
- }
508
+ const dimension = getViewportResizeDimension(val, e.detail.dimension);
509
+ const isVirtualColumn = columnTypes.includes(dimension)
510
+ && isVirtualXDimension(dimension, config.disableVirtualX, config.virtualX);
511
+ // Keep virtual dimensions in sync with their viewport size.
512
+ if ((dimension === 'rgRow' && !config.disableVirtualY) || isVirtualColumn) {
513
+ vpState.virtualSize = e.detail.size;
514
+ }
515
+ (_a = config.viewportProvider) === null || _a === void 0 ? void 0 : _a.setViewport(dimension, vpState);
516
+ };
509
517
  const colData = gatherColumnData(column);
510
518
  const columnSelectionStore = this.registerCol(colData.position.x, val);
511
519
  // render per each column data collections vertically
@@ -1405,6 +1413,7 @@ const RevoGridComponent = class {
1405
1413
  this.beforesorting = createEvent(this, "beforesorting", 7);
1406
1414
  this.beforesourcesortingapply = createEvent(this, "beforesourcesortingapply", 7);
1407
1415
  this.beforesortingapply = createEvent(this, "beforesortingapply", 7);
1416
+ this.aftersortingapply = createEvent(this, "aftersortingapply", 7);
1408
1417
  this.rowdragstart = createEvent(this, "rowdragstart", 7);
1409
1418
  this.headerclick = createEvent(this, "headerclick", 7);
1410
1419
  this.beforecellfocus = createEvent(this, "beforecellfocus", 7);
@@ -1554,6 +1563,12 @@ const RevoGridComponent = class {
1554
1563
  * Can be used for initial rendering performance improvement.
1555
1564
  */
1556
1565
  this.disableVirtualX = false;
1566
+ /**
1567
+ * Column dimensions that use X axis virtual rendering.
1568
+ * Defaults to regular columns only to preserve pinned column behavior.
1569
+ * Set to `['rgCol', 'colPinStart', 'colPinEnd']` to virtualize all column areas.
1570
+ */
1571
+ this.virtualX = ['rgCol'];
1557
1572
  /**
1558
1573
  * Disable lazy rendering mode for the `Y axis`.
1559
1574
  * Use when not many rows present and you don't need rerenader cells during scroll.
@@ -2005,7 +2020,7 @@ const RevoGridComponent = class {
2005
2020
  if (beforeSetEvent.defaultPrevented) {
2006
2021
  return;
2007
2022
  }
2008
- this.dimensionProvider.applyNewColumns(beforeSetEvent.detail.columns, this.disableVirtualX, init);
2023
+ this.dimensionProvider.applyNewColumns(beforeSetEvent.detail.columns, this.disableVirtualX, init, this.virtualX);
2009
2024
  const beforeApplyEvent = this.beforecolumnapplied.emit(columnGather);
2010
2025
  if (beforeApplyEvent.defaultPrevented) {
2011
2026
  return;
@@ -2081,12 +2096,18 @@ const RevoGridComponent = class {
2081
2096
  };
2082
2097
  this.viewport.setFocus(colType, pending.rowType, cell, cell);
2083
2098
  }
2084
- disableVirtualXChanged(newVal = false, prevVal = false) {
2099
+ refreshColumnsOnConfigChange(newVal, prevVal) {
2085
2100
  if (newVal === prevVal) {
2086
2101
  return;
2087
2102
  }
2088
2103
  this.columnChanged(this.columns);
2089
2104
  }
2105
+ disableVirtualXChanged(newVal = false, prevVal = false) {
2106
+ this.refreshColumnsOnConfigChange(newVal, prevVal);
2107
+ }
2108
+ virtualXChanged(newVal = ['rgCol'], prevVal = ['rgCol']) {
2109
+ this.refreshColumnsOnConfigChange(newVal, prevVal);
2110
+ }
2090
2111
  rowSizeChanged(s) {
2091
2112
  if (!this.dimensionProvider) {
2092
2113
  return;
@@ -2412,6 +2433,7 @@ const RevoGridComponent = class {
2412
2433
  selectionStoreConnector: this.selectionStoreConnector,
2413
2434
  noHorizontalScrollTransfer: this.noHorizontalScrollTransfer,
2414
2435
  disableVirtualX: this.disableVirtualX,
2436
+ virtualX: this.virtualX,
2415
2437
  disableVirtualY: this.disableVirtualY,
2416
2438
  resize: c => this.aftercolumnresize.emit(c),
2417
2439
  }, contentHeight);
@@ -2486,6 +2508,9 @@ const RevoGridComponent = class {
2486
2508
  "disableVirtualX": [{
2487
2509
  "disableVirtualXChanged": 0
2488
2510
  }],
2511
+ "virtualX": [{
2512
+ "virtualXChanged": 0
2513
+ }],
2489
2514
  "rowSize": [{
2490
2515
  "rowSizeChanged": 0
2491
2516
  }],
@@ -48,5 +48,5 @@ var patchCloneNodeFix = (HTMLElementPrototype) => {
48
48
 
49
49
  patchBrowser().then(async (options) => {
50
50
  await globalScripts();
51
- 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],"draggedFilterId":[32],"dragOverFilterId":[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);
51
+ 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"],"virtualX":[16],"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}],"virtualX":[{"virtualXChanged":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],"draggedFilterId":[32],"dragOverFilterId":[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);
52
52
  });
@@ -147,7 +147,7 @@ const Clipboard = class {
147
147
  }
148
148
  };
149
149
 
150
- const revogrEditStyleCss = () => `revogr-edit{display:block;position:absolute;background-color:#fff}revogr-edit input{height:100%;width:100%;box-sizing:border-box}revogr-edit revo-dropdown{height:100%}revogr-edit revo-dropdown.shrink fieldset legend>span{display:none}`;
150
+ const revogrEditStyleCss = () => `revogr-edit{display:block;position:absolute;background-color:var(--revo-grid-background, #fff)}revogr-edit input{height:100%;width:100%;box-sizing:border-box;background-color:var(--revo-grid-background, transparent)}revogr-edit revo-dropdown{height:100%}revogr-edit revo-dropdown.shrink fieldset legend>span{display:none}`;
151
151
 
152
152
  const RevoEdit = class {
153
153
  constructor(hostRef) {
@@ -18,7 +18,7 @@ import type { GridPlugin } from '../../plugins/base.plugin';
18
18
  import { ColumnCollection } from '../../utils/column.utils';
19
19
  import { ColumnFilterConfig, FilterCollectionItem } from '../../plugins/filter/filter.types';
20
20
  import { PluginService } from './plugin.service';
21
- import { SortingConfig, SortingOrder } from '../../plugins';
21
+ import { AfterSortingApplyEvent, SortingConfig, SortingOrder } from '../../plugins';
22
22
  /**
23
23
  * Revogrid - High-performance, customizable grid library for managing large datasets.
24
24
  * ### Events guide
@@ -184,6 +184,12 @@ export declare class RevoGridComponent {
184
184
  * Can be used for initial rendering performance improvement.
185
185
  */
186
186
  disableVirtualX: boolean;
187
+ /**
188
+ * Column dimensions that use X axis virtual rendering.
189
+ * Defaults to regular columns only to preserve pinned column behavior.
190
+ * Set to `['rgCol', 'colPinStart', 'colPinEnd']` to virtualize all column areas.
191
+ */
192
+ virtualX: DimensionCols[];
187
193
  /**
188
194
  * Disable lazy rendering mode for the `Y axis`.
189
195
  * Use when not many rows present and you don't need rerenader cells during scroll.
@@ -298,6 +304,12 @@ export declare class RevoGridComponent {
298
304
  order: 'desc' | 'asc';
299
305
  additive: boolean;
300
306
  }>;
307
+ /**
308
+ * By `SortingPlugin`
309
+ * <br>Triggered after sorting has been applied and completed.
310
+ * <br>Provides final sorting state and sorting column metadata when available.
311
+ */
312
+ aftersortingapply: EventEmitter<AfterSortingApplyEvent>;
301
313
  /**
302
314
  * This event is triggered when the row order change is started.
303
315
  * To prevent the default behavior of changing the row order, you can call `e.preventDefault()`.
@@ -640,7 +652,9 @@ export declare class RevoGridComponent {
640
652
  * column to its new viewport and virtual index.
641
653
  */
642
654
  private restoreColumnFocusAfterRender;
655
+ private refreshColumnsOnConfigChange;
643
656
  disableVirtualXChanged(newVal?: boolean, prevVal?: boolean): void;
657
+ virtualXChanged(newVal?: DimensionCols[], prevVal?: DimensionCols[]): void;
644
658
  rowSizeChanged(s: number): void;
645
659
  themeChanged(t: Theme, _?: Theme, __?: string, init?: boolean): void;
646
660
  dataSourceChanged<T extends DataType>(newVal: T[] | undefined, _: T[] | undefined, watchName: string): void;
@@ -5,7 +5,7 @@ import { OrdererService } from '../order/order-renderer';
5
5
  import GridScrollingService from './viewport.scrolling.service';
6
6
  import ColumnDataProvider from '../../services/column.data.provider';
7
7
  import { DataProvider } from '../../services/data.provider';
8
- import type { AllDimensionType, Cell, ColumnRegular, DimensionCols, DimensionRows, RangeArea, ViewportProps } from "../../types/index";
8
+ import type { AllDimensionType, Cell, ColumnRegular, DimensionCols, DimensionRows, RangeArea, ViewportProps, ViewPortResizeEvent } from "../../types/index";
9
9
  export type ResizeDetails = {
10
10
  [index: number]: ColumnRegular;
11
11
  };
@@ -19,6 +19,7 @@ type Config = {
19
19
  selectionStoreConnector: SelectionStoreConnector;
20
20
  noHorizontalScrollTransfer?: boolean;
21
21
  disableVirtualX?: boolean;
22
+ virtualX?: DimensionCols[];
22
23
  disableVirtualY?: boolean;
23
24
  resize(r: ResizeDetails): void;
24
25
  };
@@ -29,6 +30,7 @@ export type FocusedData = {
29
30
  rowType: DimensionRows;
30
31
  column?: ColumnRegular;
31
32
  };
33
+ export declare function getViewportResizeDimension(colType: DimensionCols, dimension: ViewPortResizeEvent['dimension']): "rgRow" | DimensionCols;
32
34
  export default class ViewportService {
33
35
  private config;
34
36
  readonly columns: ViewportProps[];
@@ -9,7 +9,7 @@ import { AdditionalData, AfterEditEvent, AllDimensionType, ApplyFocusEvent, Befo
9
9
  import { GridPlugin } from "./plugins/base.plugin";
10
10
  import { AutoSizeColumnConfig } from "./plugins/column.auto-size.plugin";
11
11
  import { ColumnFilterConfig, FilterCaptions, FilterCollectionItem, LogicFunction, MultiFilterItem, ShowData } from "./plugins/filter/filter.types";
12
- import { SortingConfig, SortingOrder } from "./plugins";
12
+ import { AfterSortingApplyEvent, SortingConfig, SortingOrder } from "./plugins";
13
13
  import { GroupingOptions } from "./plugins/groupingRow/grouping.row.types";
14
14
  import { VNode } from "./stencil-public-runtime";
15
15
  import { FocusedData } from "./components/revoGrid/viewport.service";
@@ -25,7 +25,7 @@ export { AdditionalData, AfterEditEvent, AllDimensionType, ApplyFocusEvent, Befo
25
25
  export { GridPlugin } from "./plugins/base.plugin";
26
26
  export { AutoSizeColumnConfig } from "./plugins/column.auto-size.plugin";
27
27
  export { ColumnFilterConfig, FilterCaptions, FilterCollectionItem, LogicFunction, MultiFilterItem, ShowData } from "./plugins/filter/filter.types";
28
- export { SortingConfig, SortingOrder } from "./plugins";
28
+ export { AfterSortingApplyEvent, SortingConfig, SortingOrder } from "./plugins";
29
29
  export { GroupingOptions } from "./plugins/groupingRow/grouping.row.types";
30
30
  export { VNode } from "./stencil-public-runtime";
31
31
  export { FocusedData } from "./components/revoGrid/viewport.service";
@@ -348,6 +348,11 @@ export namespace Components {
348
348
  * @default true
349
349
  */
350
350
  "useClipboard": boolean | ClipboardConfig;
351
+ /**
352
+ * Column dimensions that use X axis virtual rendering. Defaults to regular columns only to preserve pinned column behavior. Set to `['rgCol', 'colPinStart', 'colPinEnd']` to virtualize all column areas.
353
+ * @default ['rgCol']
354
+ */
355
+ "virtualX": DimensionCols[];
351
356
  }
352
357
  interface RevogrAttribution {
353
358
  }
@@ -889,6 +894,7 @@ declare global {
889
894
  order: 'desc' | 'asc';
890
895
  additive: boolean;
891
896
  };
897
+ "aftersortingapply": AfterSortingApplyEvent;
892
898
  "rowdragstart": RowDragStartDetails;
893
899
  "headerclick": ColumnRegular;
894
900
  "beforecellfocus": BeforeSaveDataDetails;
@@ -1510,6 +1516,10 @@ declare namespace LocalJSX {
1510
1516
  * Emmited after the grid is rendered.
1511
1517
  */
1512
1518
  "onAftergridrender"?: (event: RevoGridCustomEvent<any>) => void;
1519
+ /**
1520
+ * By `SortingPlugin` <br>Triggered after sorting has been applied and completed. <br>Provides final sorting state and sorting column metadata when available.
1521
+ */
1522
+ "onAftersortingapply"?: (event: RevoGridCustomEvent<AfterSortingApplyEvent>) => void;
1513
1523
  /**
1514
1524
  * After main source/rows updated
1515
1525
  */
@@ -1762,6 +1772,11 @@ declare namespace LocalJSX {
1762
1772
  * @default true
1763
1773
  */
1764
1774
  "useClipboard"?: boolean | ClipboardConfig;
1775
+ /**
1776
+ * Column dimensions that use X axis virtual rendering. Defaults to regular columns only to preserve pinned column behavior. Set to `['rgCol', 'colPinStart', 'colPinEnd']` to virtualize all column areas.
1777
+ * @default ['rgCol']
1778
+ */
1779
+ "virtualX"?: DimensionCols[];
1765
1780
  }
1766
1781
  interface RevogrAttribution {
1767
1782
  }
@@ -9,7 +9,7 @@ export * from './sorting.sign';
9
9
  * 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.
10
10
  * 2. @event `beforesourcesortingapply` - Triggered before the sorting data is applied to the data source. You can prevent this event, and the data will not be sorted.
11
11
  * 3. @event `beforesortingapply` - Triggered before the sorting data is applied to the data source. You can prevent this event, and the data will not be sorted. This event is only called from a column sorting click.
12
- * 4. @event `aftersortingapply` - Triggered after sorting has been applied and completed. This event occurs for both row and column sorting.
12
+ * 4. @event `aftersortingapply` - Triggered after sorting has been applied and completed. The event detail includes the final sorting state and sorting column metadata when available.
13
13
  *
14
14
  * Note: If you prevent an event, it will not proceed to the subsequent steps.
15
15
  */
@@ -72,6 +72,8 @@ export declare class SortingPlugin extends BasePlugin {
72
72
  * comparator, and column metadata maps.
73
73
  */
74
74
  private applySortingConfig;
75
+ private resetSortingForStore;
76
+ private applySortingForStore;
75
77
  /**
76
78
  * Schedules sorting before the next render.
77
79
  *
@@ -1,4 +1,4 @@
1
- import type { CellCompareFunc, ColumnProp, ColumnRegular, Order } from "../../types/index";
1
+ import type { CellCompareFunc, ColumnProp, ColumnRegular, DimensionRows, Order } from "../../types/index";
2
2
  /**
3
3
  * Current sorting order per column property.
4
4
  */
@@ -33,6 +33,27 @@ export type SortingColumnRender = {
33
33
  */
34
34
  sortIndex?: number;
35
35
  };
36
+ /**
37
+ * Sorting information emitted after sorting is applied.
38
+ */
39
+ export type AfterSortingApplyEvent = {
40
+ /**
41
+ * Final active sorting order per column property.
42
+ */
43
+ sorting?: SortingOrder;
44
+ /**
45
+ * Column metadata indexed by sorted column property.
46
+ */
47
+ sortingColumns?: SortingColumnMap;
48
+ /**
49
+ * Active sorting priority in click/config insertion order.
50
+ */
51
+ sortingOrder?: SortingColumnOrder;
52
+ /**
53
+ * Row stores affected by the sorting run.
54
+ */
55
+ types: DimensionRows[];
56
+ };
36
57
  /**
37
58
  * Sorting information emitted after columns are set.
38
59
  */
@@ -4,6 +4,8 @@ import type { DimensionCols, DimensionType, MultiDimensionType, ColumnRegular, D
4
4
  export type DimensionConfig = {
5
5
  realSizeChanged(k: MultiDimensionType): void;
6
6
  };
7
+ export declare const DEFAULT_VIRTUAL_X: readonly DimensionCols[];
8
+ export declare function isVirtualXDimension(type: DimensionCols, disableVirtualX?: boolean, virtualX?: readonly DimensionCols[]): boolean;
7
9
  /**
8
10
  * Dimension provider
9
11
  * Stores dimension information and custom sizes
@@ -45,8 +47,9 @@ export default class DimensionProvider {
45
47
  * Applies new columns to the dimension provider
46
48
  * @param columns - new columns data
47
49
  * @param disableVirtualX - disable virtual data for X axis
50
+ * @param virtualX - column dimensions that should use virtual data
48
51
  */
49
- applyNewColumns(columns: Record<DimensionCols, ColumnRegular[]>, disableVirtualX: boolean, keepOld?: boolean): void;
52
+ applyNewColumns(columns: Record<DimensionCols, ColumnRegular[]>, disableVirtualX: boolean, keepOld?: boolean, virtualX?: readonly DimensionCols[]): void;
50
53
  /**
51
54
  * Gets the full size of the grid by summing up the sizes of all dimensions
52
55
  * Goes through all dimensions columnTypes (x) and rowTypes (y) and sums up their sizes
@@ -1,2 +1,2 @@
1
- export type RevogridEvents = 'contentsizechanged' | 'beforeedit' | 'beforerangeedit' | 'afteredit' | 'beforeautofill' | 'beforerange' | 'afterfocus' | 'roworderchanged' | 'beforesorting' | 'beforesourcesortingapply' | 'beforesortingapply' | 'rowdragstart' | 'headerclick' | 'beforecellfocus' | 'beforefocuslost' | 'beforesourceset' | 'beforeanysource' | 'aftersourceset' | 'afteranysource' | 'beforecolumnsgather' | 'beforecolumnsset' | 'beforecolumnapplied' | 'aftercolumnsset' | 'beforefilterapply' | 'beforefiltertrimmed' | 'beforetrimmed' | 'aftertrimmed' | 'viewportscroll' | 'beforeexport' | 'beforeeditstart' | 'aftercolumnresize' | 'beforerowdefinition' | 'filterconfigchanged' | 'sortingconfigchanged' | 'rowheaderschanged' | 'beforegridrender' | 'aftergridrender' | 'aftergridinit' | 'additionaldatachanged' | 'afterthemechanged' | 'created' | 'beforepaste' | 'beforepasteapply' | 'pasteregion' | 'afterpasteapply' | 'beforecut' | 'clearregion' | 'beforecopy' | 'beforecopyapply' | 'copyregion' | 'beforerowrender' | 'afterrender' | 'beforecellrender' | 'beforedatarender' | 'dragstartcell' | 'celleditinit' | 'closeedit' | 'filterChange' | 'resetChange' | 'beforefocusrender' | 'beforescrollintoview' | 'afterfocus' | 'beforeheaderclick' | 'headerresize' | 'beforeheaderresize' | 'headerdblclick' | 'beforeheaderrender' | 'beforegroupheaderrender' | 'afterheaderrender' | 'columndragstart' | 'columndragmousemove' | 'beforecolumndragend' | 'columndragend' | 'rowdragstartinit' | 'rowdragendinit' | 'rowdragmoveinit' | 'rowdragmousemove' | 'rowdropinit' | 'roworderchange' | 'beforecopyregion' | 'beforepasteregion' | 'celleditapply' | 'beforecellfocusinit' | 'beforenextvpfocus' | 'setedit' | 'beforeapplyrange' | 'beforesetrange' | 'setrange' | 'beforeeditrender' | 'selectall' | 'canceledit' | 'settemprange' | 'beforesettemprange' | 'applyfocus' | 'focuscell' | 'beforerangedataapply' | 'selectionchangeinit' | 'beforerangecopyapply' | 'rangeeditapply' | 'clipboardrangecopy' | 'clipboardrangepaste' | 'beforekeydown' | 'beforekeyup' | 'beforecellsave' | 'celledit' | 'scrollview' | 'ref' | 'scrollvirtual' | 'scrollviewport' | 'resizeviewport' | 'scrollchange' | 'scrollviewportsilent' | 'html';
1
+ export type RevogridEvents = 'contentsizechanged' | 'beforeedit' | 'beforerangeedit' | 'afteredit' | 'beforeautofill' | 'beforerange' | 'afterfocus' | 'roworderchanged' | 'beforesorting' | 'beforesourcesortingapply' | 'beforesortingapply' | 'aftersortingapply' | 'rowdragstart' | 'headerclick' | 'beforecellfocus' | 'beforefocuslost' | 'beforesourceset' | 'beforeanysource' | 'aftersourceset' | 'afteranysource' | 'beforecolumnsgather' | 'beforecolumnsset' | 'beforecolumnapplied' | 'aftercolumnsset' | 'beforefilterapply' | 'beforefiltertrimmed' | 'beforetrimmed' | 'aftertrimmed' | 'viewportscroll' | 'beforeexport' | 'beforeeditstart' | 'aftercolumnresize' | 'beforerowdefinition' | 'filterconfigchanged' | 'sortingconfigchanged' | 'rowheaderschanged' | 'beforegridrender' | 'aftergridrender' | 'aftergridinit' | 'additionaldatachanged' | 'afterthemechanged' | 'created' | 'beforepaste' | 'beforepasteapply' | 'pasteregion' | 'afterpasteapply' | 'beforecut' | 'clearregion' | 'beforecopy' | 'beforecopyapply' | 'copyregion' | 'beforerowrender' | 'afterrender' | 'beforecellrender' | 'beforedatarender' | 'dragstartcell' | 'celleditinit' | 'closeedit' | 'filterChange' | 'resetChange' | 'beforefocusrender' | 'beforescrollintoview' | 'afterfocus' | 'beforeheaderclick' | 'headerresize' | 'beforeheaderresize' | 'headerdblclick' | 'beforeheaderrender' | 'beforegroupheaderrender' | 'afterheaderrender' | 'columndragstart' | 'columndragmousemove' | 'beforecolumndragend' | 'columndragend' | 'rowdragstartinit' | 'rowdragendinit' | 'rowdragmoveinit' | 'rowdragmousemove' | 'rowdropinit' | 'roworderchange' | 'beforecopyregion' | 'beforepasteregion' | 'celleditapply' | 'beforecellfocusinit' | 'beforenextvpfocus' | 'setedit' | 'beforeapplyrange' | 'beforesetrange' | 'setrange' | 'beforeeditrender' | 'selectall' | 'canceledit' | 'settemprange' | 'beforesettemprange' | 'applyfocus' | 'focuscell' | 'beforerangedataapply' | 'selectionchangeinit' | 'beforerangecopyapply' | 'rangeeditapply' | 'clipboardrangecopy' | 'clipboardrangepaste' | 'beforekeydown' | 'beforekeyup' | 'beforecellsave' | 'celledit' | 'scrollview' | 'ref' | 'scrollvirtual' | 'scrollviewport' | 'resizeviewport' | 'scrollchange' | 'scrollviewportsilent' | 'html';
2
2
  export declare const REVOGRID_EVENTS: Map<RevogridEvents, RevogridEvents>;