@revolist/revogrid 4.14.0 → 4.14.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (67) hide show
  1. package/dist/cjs/{column.drag.plugin-c61efe93.js → column.drag.plugin-911acec7.js} +52 -28
  2. package/dist/cjs/column.drag.plugin-911acec7.js.map +1 -0
  3. package/dist/cjs/index.cjs.js +3 -2
  4. package/dist/cjs/index.cjs.js.map +1 -1
  5. package/dist/cjs/revo-grid.cjs.entry.js +20 -50
  6. package/dist/cjs/revo-grid.cjs.entry.js.map +1 -1
  7. package/dist/cjs/revogr-attribution_7.cjs.entry.js +20 -11
  8. package/dist/cjs/revogr-attribution_7.cjs.entry.js.map +1 -1
  9. package/dist/cjs/revogr-clipboard_3.cjs.entry.js +1 -1
  10. package/dist/cjs/revogr-clipboard_3.cjs.entry.js.map +1 -1
  11. package/dist/collection/components/editors/revogr-edit.js +2 -2
  12. package/dist/collection/components/editors/revogr-edit.js.map +1 -1
  13. package/dist/collection/components/overlay/revogr-overlay-selection.js +40 -11
  14. package/dist/collection/components/overlay/revogr-overlay-selection.js.map +1 -1
  15. package/dist/collection/components/revoGrid/revo-grid.js +42 -42
  16. package/dist/collection/components/revoGrid/revo-grid.js.map +1 -1
  17. package/dist/collection/plugins/sorting/sorting.plugin.js +52 -27
  18. package/dist/collection/plugins/sorting/sorting.plugin.js.map +1 -1
  19. package/dist/collection/plugins/sorting/sorting.types.js.map +1 -1
  20. package/dist/collection/serve/controller.js +12 -0
  21. package/dist/collection/services/column.data.provider.js +0 -38
  22. package/dist/collection/services/column.data.provider.js.map +1 -1
  23. package/dist/collection/types/events.js +2 -1
  24. package/dist/collection/types/events.js.map +1 -1
  25. package/dist/esm/{column.drag.plugin-eb8f7e38.js → column.drag.plugin-a111b876.js} +53 -28
  26. package/dist/esm/column.drag.plugin-a111b876.js.map +1 -0
  27. package/dist/esm/index.js +4 -3
  28. package/dist/esm/index.js.map +1 -1
  29. package/dist/esm/revo-grid.entry.js +20 -50
  30. package/dist/esm/revo-grid.entry.js.map +1 -1
  31. package/dist/esm/revogr-attribution_7.entry.js +20 -11
  32. package/dist/esm/revogr-attribution_7.entry.js.map +1 -1
  33. package/dist/esm/revogr-clipboard_3.entry.js +1 -1
  34. package/dist/esm/revogr-clipboard_3.entry.js.map +1 -1
  35. package/dist/revo-grid/{column.drag.plugin-eb8f7e38.js → column.drag.plugin-a111b876.js} +53 -28
  36. package/dist/revo-grid/column.drag.plugin-a111b876.js.map +1 -0
  37. package/dist/revo-grid/index.esm.js +4 -3
  38. package/dist/revo-grid/index.esm.js.map +1 -1
  39. package/dist/revo-grid/revo-grid.entry.js +20 -50
  40. package/dist/revo-grid/revo-grid.entry.js.map +1 -1
  41. package/dist/revo-grid/revogr-attribution_7.entry.js +20 -11
  42. package/dist/revo-grid/revogr-attribution_7.entry.js.map +1 -1
  43. package/dist/revo-grid/revogr-clipboard_3.entry.js +1 -1
  44. package/dist/revo-grid/revogr-clipboard_3.entry.js.map +1 -1
  45. package/dist/types/components/editors/revogr-edit.d.ts +1 -1
  46. package/dist/types/components/overlay/revogr-overlay-selection.d.ts +5 -0
  47. package/dist/types/components/revoGrid/revo-grid.d.ts +10 -7
  48. package/dist/types/components.d.ts +19 -15
  49. package/dist/types/plugins/sorting/sorting.plugin.d.ts +12 -4
  50. package/dist/types/plugins/sorting/sorting.types.d.ts +1 -0
  51. package/dist/types/services/column.data.provider.d.ts +0 -7
  52. package/dist/types/types/events.d.ts +1 -1
  53. package/hydrate/index.js +158 -154
  54. package/hydrate/index.mjs +158 -154
  55. package/package.json +1 -1
  56. package/readme.md +6 -0
  57. package/standalone/index.js +2 -1
  58. package/standalone/index.js.map +1 -1
  59. package/standalone/revo-grid.js +70 -75
  60. package/standalone/revo-grid.js.map +1 -1
  61. package/standalone/revogr-edit2.js +1 -1
  62. package/standalone/revogr-edit2.js.map +1 -1
  63. package/standalone/revogr-overlay-selection2.js +20 -11
  64. package/standalone/revogr-overlay-selection2.js.map +1 -1
  65. package/dist/cjs/column.drag.plugin-c61efe93.js.map +0 -1
  66. package/dist/esm/column.drag.plugin-eb8f7e38.js.map +0 -1
  67. package/dist/revo-grid/column.drag.plugin-eb8f7e38.js.map +0 -1
package/hydrate/index.mjs CHANGED
@@ -9846,6 +9846,7 @@ class OverlaySelection {
9846
9846
  this.beforeKeyDown = createEvent(this, "beforekeydown", 7);
9847
9847
  this.beforeKeyUp = createEvent(this, "beforekeyup", 7);
9848
9848
  this.beforeCellSave = createEvent(this, "beforecellsave", 7);
9849
+ this.cellEditDone = createEvent(this, "celledit", 7);
9849
9850
  this.keyboardService = null;
9850
9851
  this.autoFillService = null;
9851
9852
  this.unsubscribeSelectionStore = [];
@@ -10027,7 +10028,22 @@ class OverlaySelection {
10027
10028
  }
10028
10029
  const cell = getCell(renderEvent.detail.range, renderEvent.detail.rowDimension, renderEvent.detail.colDimension);
10029
10030
  const styles = styleByCellProps(cell);
10030
- return (hAsync("revogr-edit", { style: styles, ref: el => (this.revogrEdit = el), additionalData: this.additionalData, editCell: editable, saveOnClose: this.applyChangesOnClose, column: this.columnService.rowDataModel(editCell.y, editCell.x), editor: getCellEditor(this.columnService.columns[editCell.x], this.editors) }));
10031
+ return (hAsync("revogr-edit", { style: styles, ref: el => (this.revogrEdit = el), additionalData: this.additionalData, editCell: editable, saveOnClose: this.applyChangesOnClose, onCelleditinit: (e) => {
10032
+ this.cellEditDone.emit(e.detail);
10033
+ }, column: this.columnService.rowDataModel(editCell.y, editCell.x), editor: getCellEditor(this.columnService.columns[editCell.x], this.editors) }));
10034
+ }
10035
+ onEditCell(e) {
10036
+ if (e.defaultPrevented) {
10037
+ return;
10038
+ }
10039
+ const saveEv = this.beforeCellSave.emit(e.detail);
10040
+ if (!saveEv.defaultPrevented) {
10041
+ this.cellEdit(saveEv.detail);
10042
+ }
10043
+ // if not clear navigate to next cell after edit
10044
+ if (!saveEv.detail.preventFocus) {
10045
+ this.focusNext();
10046
+ }
10031
10047
  }
10032
10048
  render() {
10033
10049
  var _a;
@@ -10057,16 +10073,9 @@ class OverlaySelection {
10057
10073
  nodes.push(hAsync("revogr-order-editor", { ref: e => (this.orderEditor = e), dataStore: this.dataStore, dimensionRow: this.dimensionRow, dimensionCol: this.dimensionCol, parent: this.element, rowType: this.types.rowType, onRowdragstartinit: e => this.rowDragStart(e) }));
10058
10074
  }
10059
10075
  }
10060
- return (hAsync(Host, { key: 'aaae2fb9cd6abd04c5b742277214579901062a54', class: { mobile: this.isMobileDevice }, onDblClick: (e) => this.onElementDblClick(e), onMouseDown: (e) => this.onElementMouseDown(e), onTouchStart: (e) => this.onElementMouseDown(e, true), onCloseedit: (e) => this.closeEdit(e), onCelledit: (e) => {
10061
- const saveEv = this.beforeCellSave.emit(e.detail);
10062
- if (!saveEv.defaultPrevented) {
10063
- this.cellEdit(saveEv.detail);
10064
- }
10065
- // if not clear navigate to next cell after edit
10066
- if (!saveEv.detail.preventFocus) {
10067
- this.focusNext();
10068
- }
10069
- } }, nodes, hAsync("slot", { key: '945243e45f2cfbb78d8727c10652d6d0d530d494', name: "data" })));
10076
+ return (hAsync(Host, { key: '262adae9c825a0feb678090b62bd3ab57f149ac7', class: { mobile: this.isMobileDevice }, onDblClick: (e) => this.onElementDblClick(e), onMouseDown: (e) => this.onElementMouseDown(e), onTouchStart: (e) => this.onElementMouseDown(e, true), onCloseedit: (e) => this.closeEdit(e),
10077
+ // it's done to be able to throw events from different levels, not just from editor
10078
+ onCelledit: (e) => this.onEditCell(e) }, nodes, hAsync("slot", { key: '2196345c62e1edf7b00c854ba4f281ecb68ea5a7', name: "data" })));
10070
10079
  }
10071
10080
  /**
10072
10081
  * Executes the focus operation on the specified range of cells.
@@ -10436,7 +10445,7 @@ var RevogrEditStyle0 = revogrEditStyleCss;
10436
10445
  class RevoEdit {
10437
10446
  constructor(hostRef) {
10438
10447
  registerInstance(this, hostRef);
10439
- this.cellEdit = createEvent(this, "celledit", 7);
10448
+ this.cellEdit = createEvent(this, "celleditinit", 7);
10440
10449
  this.closeEdit = createEvent(this, "closeedit", 7);
10441
10450
  this.currentEditor = null;
10442
10451
  this.preventSaveOnClose = false;
@@ -10585,89 +10594,11 @@ class RevoEdit {
10585
10594
  }; }
10586
10595
  }
10587
10596
 
10588
- /**
10589
- * A specialized version of `_.forEach` for arrays without support for
10590
- * iteratee shorthands.
10591
- *
10592
- * @private
10593
- * @param {Array} [array] The array to iterate over.
10594
- * @param {Function} iteratee The function invoked per iteration.
10595
- * @returns {Array} Returns `array`.
10596
- */
10597
- function arrayEach(array, iteratee) {
10598
- var index = -1,
10599
- length = array == null ? 0 : array.length;
10600
-
10601
- while (++index < length) {
10602
- if (iteratee(array[index], index, array) === false) {
10603
- break;
10604
- }
10605
- }
10606
- return array;
10607
- }
10608
-
10609
- /**
10610
- * Casts `value` to `identity` if it's not a function.
10611
- *
10612
- * @private
10613
- * @param {*} value The value to inspect.
10614
- * @returns {Function} Returns cast function.
10615
- */
10616
- function castFunction(value) {
10617
- return typeof value == 'function' ? value : identity;
10618
- }
10619
-
10620
- /**
10621
- * Iterates over elements of `collection` and invokes `iteratee` for each element.
10622
- * The iteratee is invoked with three arguments: (value, index|key, collection).
10623
- * Iteratee functions may exit iteration early by explicitly returning `false`.
10624
- *
10625
- * **Note:** As with other "Collections" methods, objects with a "length"
10626
- * property are iterated like arrays. To avoid this behavior use `_.forIn`
10627
- * or `_.forOwn` for object iteration.
10628
- *
10629
- * @static
10630
- * @memberOf _
10631
- * @since 0.1.0
10632
- * @alias each
10633
- * @category Collection
10634
- * @param {Array|Object} collection The collection to iterate over.
10635
- * @param {Function} [iteratee=_.identity] The function invoked per iteration.
10636
- * @returns {Array|Object} Returns `collection`.
10637
- * @see _.forEachRight
10638
- * @example
10639
- *
10640
- * _.forEach([1, 2], function(value) {
10641
- * console.log(value);
10642
- * });
10643
- * // => Logs `1` then `2`.
10644
- *
10645
- * _.forEach({ 'a': 1, 'b': 2 }, function(value, key) {
10646
- * console.log(key);
10647
- * });
10648
- * // => Logs 'a' then 'b' (iteration order is not guaranteed).
10649
- */
10650
- function forEach(collection, iteratee) {
10651
- var func = isArray$1(collection) ? arrayEach : baseEach$1;
10652
- return func(collection, castFunction(iteratee));
10653
- }
10654
-
10655
10597
  class ColumnDataProvider {
10656
- get order() {
10657
- const order = {};
10658
- const sorting = this.sorting;
10659
- if (sorting) {
10660
- Object.keys(sorting).forEach(prop => {
10661
- order[prop] = sorting[prop].order;
10662
- });
10663
- }
10664
- return order;
10665
- }
10666
10598
  get stores() {
10667
10599
  return this.dataSources;
10668
10600
  }
10669
10601
  constructor() {
10670
- this.sorting = null;
10671
10602
  this.collection = null;
10672
10603
  this.dataSources = columnTypes.reduce((sources, k) => {
10673
10604
  sources[k] = new DataStore(k);
@@ -10726,7 +10657,6 @@ class ColumnDataProvider {
10726
10657
  }, {}),
10727
10658
  });
10728
10659
  });
10729
- this.sorting = data.sort;
10730
10660
  this.collection = data;
10731
10661
  return data;
10732
10662
  }
@@ -10775,31 +10705,6 @@ class ColumnDataProvider {
10775
10705
  const type = getColumnType(column);
10776
10706
  setSourceByVirtualIndex(this.dataSources[type].store, { [index]: column });
10777
10707
  }
10778
- updateColumnSorting(column, index, sorting, additive) {
10779
- if (!additive) {
10780
- this.clearSorting();
10781
- }
10782
- column.order = sorting;
10783
- if (!this.sorting) {
10784
- this.sorting = {};
10785
- }
10786
- this.sorting[column.prop] = column;
10787
- this.updateColumn(column, index);
10788
- return column;
10789
- }
10790
- clearSorting() {
10791
- const types = reduce(this.sorting, (r, c) => {
10792
- const k = getColumnType(c);
10793
- r[k] = true;
10794
- return r;
10795
- }, {});
10796
- forEach(types, (_, type) => {
10797
- const cols = this.dataSources[type].store.get('source');
10798
- forEach(cols, (c) => (c.order = undefined));
10799
- this.dataSources[type].setData({ source: [...cols] });
10800
- });
10801
- this.sorting = {};
10802
- }
10803
10708
  }
10804
10709
 
10805
10710
  /**
@@ -11066,6 +10971,73 @@ class ViewportProvider {
11066
10971
  }
11067
10972
  }
11068
10973
 
10974
+ /**
10975
+ * A specialized version of `_.forEach` for arrays without support for
10976
+ * iteratee shorthands.
10977
+ *
10978
+ * @private
10979
+ * @param {Array} [array] The array to iterate over.
10980
+ * @param {Function} iteratee The function invoked per iteration.
10981
+ * @returns {Array} Returns `array`.
10982
+ */
10983
+ function arrayEach(array, iteratee) {
10984
+ var index = -1,
10985
+ length = array == null ? 0 : array.length;
10986
+
10987
+ while (++index < length) {
10988
+ if (iteratee(array[index], index, array) === false) {
10989
+ break;
10990
+ }
10991
+ }
10992
+ return array;
10993
+ }
10994
+
10995
+ /**
10996
+ * Casts `value` to `identity` if it's not a function.
10997
+ *
10998
+ * @private
10999
+ * @param {*} value The value to inspect.
11000
+ * @returns {Function} Returns cast function.
11001
+ */
11002
+ function castFunction(value) {
11003
+ return typeof value == 'function' ? value : identity;
11004
+ }
11005
+
11006
+ /**
11007
+ * Iterates over elements of `collection` and invokes `iteratee` for each element.
11008
+ * The iteratee is invoked with three arguments: (value, index|key, collection).
11009
+ * Iteratee functions may exit iteration early by explicitly returning `false`.
11010
+ *
11011
+ * **Note:** As with other "Collections" methods, objects with a "length"
11012
+ * property are iterated like arrays. To avoid this behavior use `_.forIn`
11013
+ * or `_.forOwn` for object iteration.
11014
+ *
11015
+ * @static
11016
+ * @memberOf _
11017
+ * @since 0.1.0
11018
+ * @alias each
11019
+ * @category Collection
11020
+ * @param {Array|Object} collection The collection to iterate over.
11021
+ * @param {Function} [iteratee=_.identity] The function invoked per iteration.
11022
+ * @returns {Array|Object} Returns `collection`.
11023
+ * @see _.forEachRight
11024
+ * @example
11025
+ *
11026
+ * _.forEach([1, 2], function(value) {
11027
+ * console.log(value);
11028
+ * });
11029
+ * // => Logs `1` then `2`.
11030
+ *
11031
+ * _.forEach({ 'a': 1, 'b': 2 }, function(value, key) {
11032
+ * console.log(key);
11033
+ * });
11034
+ * // => Logs 'a' then 'b' (iteration order is not guaranteed).
11035
+ */
11036
+ function forEach(collection, iteratee) {
11037
+ var func = isArray$1(collection) ? arrayEach : baseEach$1;
11038
+ return func(collection, castFunction(iteratee));
11039
+ }
11040
+
11069
11041
  /**
11070
11042
  * Base layer for plugins
11071
11043
  * Provide minimal starting core for plugins to work
@@ -12117,24 +12089,23 @@ const SortingSign = ({ column }) => {
12117
12089
  /**
12118
12090
  * Lifecycle
12119
12091
  * 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.
12120
- * 1.1. @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.
12121
- * 2. Method `updateColumnSorting` - Updates the column sorting icon on the grid and the column itself, but the data remains untouched.
12092
+ * 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.
12122
12093
  * 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.
12123
12094
  * 4. @event `aftersortingapply` - Triggered after sorting has been applied and completed. This event occurs for both row and column sorting.
12124
12095
  *
12125
12096
  * Note: If you prevent an event, it will not proceed to the subsequent steps.
12126
12097
  */
12127
12098
  class SortingPlugin extends BasePlugin {
12128
- runSorting(order, comparison, ignoreViewportUpdate) {
12129
- var _a;
12130
- this.sort(order, comparison, undefined, ignoreViewportUpdate);
12131
- (_a = this.sortingPromise) === null || _a === void 0 ? void 0 : _a.call(this);
12132
- this.sortingPromise = null;
12133
- }
12134
12099
  constructor(revogrid, providers, config) {
12135
12100
  super(revogrid, providers);
12136
12101
  this.revogrid = revogrid;
12102
+ /**
12103
+ * Delayed sorting promise
12104
+ */
12137
12105
  this.sortingPromise = null;
12106
+ /**
12107
+ * We need to sort only so often
12108
+ */
12138
12109
  this.postponeSort = debounce$1((order, comparison, ignoreViewportUpdate) => this.runSorting(order, comparison, ignoreViewportUpdate), 50);
12139
12110
  const setConfig = (cfg) => {
12140
12111
  var _a;
@@ -12145,9 +12116,15 @@ class SortingPlugin extends BasePlugin {
12145
12116
  sortingFunc[col.prop] = getComparer(col, col.order);
12146
12117
  order[col.prop] = col.order;
12147
12118
  });
12148
- // // set sorting
12149
- this.sorting = order;
12150
- this.sortingFunc = sortingFunc;
12119
+ if (cfg.additive) {
12120
+ this.sorting = Object.assign(Object.assign({}, this.sorting), order);
12121
+ this.sortingFunc = Object.assign(Object.assign({}, this.sortingFunc), sortingFunc);
12122
+ }
12123
+ else {
12124
+ // // set sorting
12125
+ this.sorting = order;
12126
+ this.sortingFunc = sortingFunc;
12127
+ }
12151
12128
  }
12152
12129
  };
12153
12130
  setConfig(config);
@@ -12156,6 +12133,13 @@ class SortingPlugin extends BasePlugin {
12156
12133
  setConfig(detail);
12157
12134
  this.startSorting(this.sorting, this.sortingFunc);
12158
12135
  });
12136
+ this.addEventListener('beforeheaderrender', ({ detail, }) => {
12137
+ var _a;
12138
+ const { data: column } = detail;
12139
+ if (column.sortable) {
12140
+ detail.data = Object.assign(Object.assign({}, column), { order: (_a = this.sorting) === null || _a === void 0 ? void 0 : _a[column.prop] });
12141
+ }
12142
+ });
12159
12143
  this.addEventListener('beforeanysource', ({ detail: { type }, }) => {
12160
12144
  // if sorting was provided - sort data
12161
12145
  if (!!this.sorting && this.sortingFunc) {
@@ -12189,9 +12173,12 @@ class SortingPlugin extends BasePlugin {
12189
12173
  if (!((_b = (_a = e.detail) === null || _a === void 0 ? void 0 : _a.column) === null || _b === void 0 ? void 0 : _b.sortable)) {
12190
12174
  return;
12191
12175
  }
12192
- this.headerclick(e.detail.column, e.detail.index, (_d = (_c = e.detail) === null || _c === void 0 ? void 0 : _c.originalEvent) === null || _d === void 0 ? void 0 : _d.shiftKey);
12176
+ this.headerclick(e.detail.column, (_d = (_c = e.detail) === null || _c === void 0 ? void 0 : _c.originalEvent) === null || _d === void 0 ? void 0 : _d.shiftKey);
12193
12177
  });
12194
12178
  }
12179
+ /**
12180
+ * Entry point for sorting, waits for all delayes, registers jobs
12181
+ */
12195
12182
  startSorting(order, sortingFunc, ignoreViewportUpdate) {
12196
12183
  if (!this.sortingPromise) {
12197
12184
  // add job before render
@@ -12205,18 +12192,18 @@ class SortingPlugin extends BasePlugin {
12205
12192
  * Apply sorting to data on header click
12206
12193
  * If additive - add to existing sorting, multiple columns can be sorted
12207
12194
  */
12208
- headerclick(column, index, additive) {
12209
- var _a, _b;
12210
- let order = getNextOrder(column.order);
12195
+ headerclick(column, additive) {
12196
+ var _a, _b, _c;
12197
+ const columnProp = column.prop;
12198
+ let order = getNextOrder((_a = this.sorting) === null || _a === void 0 ? void 0 : _a[columnProp]);
12211
12199
  const beforeEvent = this.emit('beforesorting', { column, order, additive });
12212
12200
  if (beforeEvent.defaultPrevented) {
12213
12201
  return;
12214
12202
  }
12215
12203
  order = beforeEvent.detail.order;
12216
- const newCol = this.providers.column.updateColumnSorting(beforeEvent.detail.column, index, order, additive);
12217
12204
  // apply sort data
12218
12205
  const beforeApplyEvent = this.emit('beforesortingapply', {
12219
- column: newCol,
12206
+ column: beforeEvent.detail.column,
12220
12207
  order,
12221
12208
  additive,
12222
12209
  });
@@ -12230,28 +12217,34 @@ class SortingPlugin extends BasePlugin {
12230
12217
  this.sorting = Object.assign(Object.assign({}, this.sorting), sorting);
12231
12218
  // extend sorting function with new sorting for multiple columns sorting
12232
12219
  this.sortingFunc = Object.assign(Object.assign({}, this.sortingFunc), sortingFunc);
12233
- if (column.prop in sorting && size$1(sorting) > 1 && order === undefined) {
12234
- delete sorting[column.prop];
12235
- delete sortingFunc[column.prop];
12220
+ if (columnProp in sorting && size$1(sorting) > 1 && order === undefined) {
12221
+ delete sorting[columnProp];
12222
+ delete sortingFunc[columnProp];
12236
12223
  }
12237
12224
  else {
12238
- sorting[column.prop] = order;
12239
- sortingFunc[column.prop] = cmp;
12225
+ sorting[columnProp] = order;
12226
+ sortingFunc[columnProp] = cmp;
12240
12227
  }
12241
12228
  }
12242
12229
  else {
12243
12230
  if (order) {
12244
12231
  // reset sorting
12245
- this.sorting = { [column.prop]: order };
12246
- this.sortingFunc = { [column.prop]: cmp };
12232
+ this.sorting = { [columnProp]: order };
12233
+ this.sortingFunc = { [columnProp]: cmp };
12247
12234
  }
12248
12235
  else {
12249
- (_a = this.sorting) === null || _a === void 0 ? true : delete _a[column.prop];
12250
- (_b = this.sortingFunc) === null || _b === void 0 ? true : delete _b[column.prop];
12236
+ (_b = this.sorting) === null || _b === void 0 ? true : delete _b[columnProp];
12237
+ (_c = this.sortingFunc) === null || _c === void 0 ? true : delete _c[columnProp];
12251
12238
  }
12252
12239
  }
12253
12240
  this.startSorting(this.sorting, this.sortingFunc);
12254
12241
  }
12242
+ runSorting(order, comparison, ignoreViewportUpdate) {
12243
+ var _a;
12244
+ this.sort(order, comparison, undefined, ignoreViewportUpdate);
12245
+ (_a = this.sortingPromise) === null || _a === void 0 ? void 0 : _a.call(this);
12246
+ this.sortingPromise = null;
12247
+ }
12255
12248
  /**
12256
12249
  * Sort items by sorting function
12257
12250
  * @requires proxyItems applied to row store
@@ -12297,6 +12290,10 @@ class SortingPlugin extends BasePlugin {
12297
12290
  }
12298
12291
  }
12299
12292
  }
12293
+ // refresh columns to redraw column headers and show correct icon
12294
+ columnTypes.forEach((type) => {
12295
+ this.providers.column.dataSources[type].refresh();
12296
+ });
12300
12297
  this.emit('aftersortingapply');
12301
12298
  }
12302
12299
  }
@@ -14555,25 +14552,29 @@ class RevoGridComponent {
14555
14552
  }
14556
14553
  /**
14557
14554
  * Update column sorting
14558
- * @param column - full column details to update
14559
- * @param index - virtual column index
14555
+ * @param column - column prop and cellCompare
14560
14556
  * @param order - order to apply
14561
14557
  * @param additive - if false will replace current order
14558
+ *
14559
+ * later passed to SortingPlugin
14562
14560
  */
14563
- async updateColumnSorting(column, index, order, additive) {
14564
- if (!this.columnProvider) {
14565
- throw new Error('Not connected');
14566
- }
14567
- return this.columnProvider.updateColumnSorting(column, index, order, additive);
14561
+ async updateColumnSorting(column, order, additive) {
14562
+ this.sortingconfigchanged.emit({
14563
+ columns: [{
14564
+ prop: column.prop,
14565
+ order,
14566
+ cellCompare: column.cellCompare,
14567
+ }],
14568
+ additive,
14569
+ });
14568
14570
  }
14569
14571
  /**
14570
14572
  * Clears column sorting
14571
14573
  */
14572
14574
  async clearSorting() {
14573
- if (!this.columnProvider) {
14574
- throw new Error('Not connected');
14575
- }
14576
- this.columnProvider.clearSorting();
14575
+ this.sortingconfigchanged.emit({
14576
+ columns: [],
14577
+ });
14577
14578
  }
14578
14579
  /**
14579
14580
  * Receive all columns in data source
@@ -14781,7 +14782,10 @@ class RevoGridComponent {
14781
14782
  const columns = this.columnProvider.setColumns(beforeApplyEvent.detail);
14782
14783
  this.aftercolumnsset.emit({
14783
14784
  columns,
14784
- order: this.columnProvider.order,
14785
+ order: Object.entries(beforeApplyEvent.detail.sort).reduce((acc, [prop, column]) => {
14786
+ acc[prop] = column.order;
14787
+ return acc;
14788
+ }, {}),
14785
14789
  });
14786
14790
  }
14787
14791
  disableVirtualXChanged(newVal = false, prevVal = false) {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@revolist/revogrid",
3
- "version": "4.14.0",
3
+ "version": "4.14.2",
4
4
  "type": "module",
5
5
  "description": "Virtual reactive data grid spreadsheet component - RevoGrid.",
6
6
  "license": "MIT",
package/readme.md CHANGED
@@ -61,6 +61,7 @@ Support Millions of cells and thousands of columns easy and efficiently for fast
61
61
  - Preserve existing collections.
62
62
  - Selection.
63
63
  - Slider.
64
+ - Header filtering.
64
65
  - Custom filters to extend system filters with your own set.
65
66
 
66
67
  - **[Export](https://rv-grid.com/guide/export.plugin)**: Export data to file.
@@ -76,6 +77,7 @@ Support Millions of cells and thousands of columns easy and efficiently for fast
76
77
 
77
78
  - **Grouping**:
78
79
  - [Column grouping](https://rv-grid.com/guide/column/grouping) (nested headers).
80
+ - Column grouping Drill Down: Collapse grouping columns to streamline your grid view, trimming away unnecessary columns and enhancing data organization. Perfect for focusing on the information that matters most, while keeping your workspace clean and efficient.
79
81
  - [Row grouping](https://rv-grid.com/guide/row/grouping) (nested rows).
80
82
 
81
83
  - **Column Types**: [More details](https://rv-grid.com/guide/column/#Column-Formats)
@@ -104,11 +106,15 @@ Support Millions of cells and thousands of columns easy and efficiently for fast
104
106
 
105
107
  - **[Master Detail/Subtables/Forms](https://rv-grid.com/guide/row/master.pro)**: Expand rows to reveal child data.
106
108
  - **[Cell/Column/Row Span/Merge](https://rv-grid.com/guide/cell/merge)**: Merge cells to form groups.
109
+ - **Auto Merge**: Automatically merges cells with identical values in a column.
110
+ - **Form editig**: Edit forms directly within the grid, featuring all necessary fields, including custom options and markdown support for a fast and enhanced data entry experience.
107
111
 
108
112
  - **Customizations**:
109
113
  - [Column header template](https://rv-grid.com/guide/column/header.template).
110
114
  - [Row header template](https://rv-grid.com/guide/row/headers).
111
115
  - [Cell properties](https://rv-grid.com/guide/cell/) (define custom properties for rendered cells).
116
+ - Nested grids: Build a grid inside a grid, showcasing advanced editing options and user interactions for a more dynamic data presentation.
117
+ - Context Menu: Build context menus for any grid element - from cells to headers. Cut, copy, paste, add rows, modify columns, and more. Fully customizable with your own actions and behaviors.
112
118
 
113
119
  - [Cell template](https://rv-grid.com/guide/cell/renderer) (create your own cell views).
114
120
  - [Cell editor](https://rv-grid.com/guide/cell/editor) (use predefined or apply your own custom editors and cell types).
@@ -99,7 +99,7 @@ const REVOGRID_EVENTS = new Map([
99
99
  ['beforecellrender', 'beforecellrender'],
100
100
  ['beforedatarender', 'beforedatarender'],
101
101
  ['dragstartcell', 'dragstartcell'],
102
- ['celledit', 'celledit'],
102
+ ['celleditinit', 'celleditinit'],
103
103
  ['closeedit', 'closeedit'],
104
104
  ['filterChange', 'filterChange'],
105
105
  ['resetChange', 'resetChange'],
@@ -144,6 +144,7 @@ const REVOGRID_EVENTS = new Map([
144
144
  ['beforekeydown', 'beforekeydown'],
145
145
  ['beforekeyup', 'beforekeyup'],
146
146
  ['beforecellsave', 'beforecellsave'],
147
+ ['celledit', 'celledit'],
147
148
  ['scrollview', 'scrollview'],
148
149
  ['ref', 'ref'],
149
150
  ['scrollvirtual', 'scrollvirtual'],
@@ -1 +1 @@
1
- {"file":"index.js","mappings":"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","names":[],"sources":["src/global/global.ts","src/types/events.ts","src/plugins/add-rows-on-paste.plugin.ts"],"sourcesContent":["import { setMode } from '@stencil/core';\nimport { getTheme } from '../themeManager/theme.service';\n\nsetMode(elm => {\n let theme = (elm as HTMLRevoGridElement).theme || elm.getAttribute('theme');\n if (typeof theme === 'string') {\n theme = theme.trim();\n }\n\n const parsedTheme = getTheme(theme);\n if (parsedTheme !== theme) {\n elm.setAttribute('theme', parsedTheme);\n }\n return parsedTheme;\n});\n","\nexport type RevogridEvents = 'contentsizechanged'|\n 'beforeedit'|\n 'beforerangeedit'|\n 'afteredit'|\n 'beforeautofill'|\n 'beforerange'|\n 'afterfocus'|\n 'roworderchanged'|\n 'beforesorting'|\n 'beforesourcesortingapply'|\n 'beforesortingapply'|\n 'rowdragstart'|\n 'headerclick'|\n 'beforecellfocus'|\n 'beforefocuslost'|\n 'beforesourceset'|\n 'beforeanysource'|\n 'aftersourceset'|\n 'afteranysource'|\n 'beforecolumnsset'|\n 'beforecolumnapplied'|\n 'aftercolumnsset'|\n 'beforefilterapply'|\n 'beforefiltertrimmed'|\n 'beforetrimmed'|\n 'aftertrimmed'|\n 'viewportscroll'|\n 'beforeexport'|\n 'beforeeditstart'|\n 'aftercolumnresize'|\n 'beforerowdefinition'|\n 'filterconfigchanged'|\n 'sortingconfigchanged'|\n 'rowheaderschanged'|\n 'beforegridrender'|\n 'aftergridrender'|\n 'aftergridinit'|\n 'additionaldatachanged'|\n 'afterthemechanged'|\n 'created'|\n 'beforepaste'|\n 'beforepasteapply'|\n 'pasteregion'|\n 'afterpasteapply'|\n 'beforecut'|\n 'clearregion'|\n 'beforecopy'|\n 'beforecopyapply'|\n 'copyregion'|\n 'beforerowrender'|\n 'afterrender'|\n 'beforecellrender'|\n 'beforedatarender'|\n 'dragstartcell'|\n 'celledit'|\n 'closeedit'|\n 'filterChange'|\n 'resetChange'|\n 'beforefocusrender'|\n 'beforescrollintoview'|\n 'afterfocus'|\n 'beforeheaderclick'|\n 'headerresize'|\n 'beforeheaderresize'|\n 'headerdblclick'|\n 'beforeheaderrender'|\n 'beforegroupheaderrender'|\n 'afterheaderrender'|\n 'rowdragstartinit'|\n 'rowdragendinit'|\n 'rowdragmoveinit'|\n 'rowdragmousemove'|\n 'rowdropinit'|\n 'roworderchange'|\n 'beforecopyregion'|\n 'beforepasteregion'|\n 'celleditapply'|\n 'beforecellfocusinit'|\n 'beforenextvpfocus'|\n 'setedit'|\n 'beforeapplyrange'|\n 'beforesetrange'|\n 'setrange'|\n 'beforeeditrender'|\n 'selectall'|\n 'canceledit'|\n 'settemprange'|\n 'beforesettemprange'|\n 'applyfocus'|\n 'focuscell'|\n 'beforerangedataapply'|\n 'selectionchangeinit'|\n 'beforerangecopyapply'|\n 'rangeeditapply'|\n 'clipboardrangecopy'|\n 'clipboardrangepaste'|\n 'beforekeydown'|\n 'beforekeyup'|\n 'beforecellsave'|\n 'scrollview'|\n 'ref'|\n 'scrollvirtual'|\n 'scrollviewport'|\n 'resizeviewport'|\n 'scrollchange'|\n 'scrollviewportsilent'|\n 'html'\nexport const REVOGRID_EVENTS = new Map<RevogridEvents, RevogridEvents>([\n ['contentsizechanged', 'contentsizechanged'],\n ['beforeedit', 'beforeedit'],\n ['beforerangeedit', 'beforerangeedit'],\n ['afteredit', 'afteredit'],\n ['beforeautofill', 'beforeautofill'],\n ['beforerange', 'beforerange'],\n ['afterfocus', 'afterfocus'],\n ['roworderchanged', 'roworderchanged'],\n ['beforesorting', 'beforesorting'],\n ['beforesourcesortingapply', 'beforesourcesortingapply'],\n ['beforesortingapply', 'beforesortingapply'],\n ['rowdragstart', 'rowdragstart'],\n ['headerclick', 'headerclick'],\n ['beforecellfocus', 'beforecellfocus'],\n ['beforefocuslost', 'beforefocuslost'],\n ['beforesourceset', 'beforesourceset'],\n ['beforeanysource', 'beforeanysource'],\n ['aftersourceset', 'aftersourceset'],\n ['afteranysource', 'afteranysource'],\n ['beforecolumnsset', 'beforecolumnsset'],\n ['beforecolumnapplied', 'beforecolumnapplied'],\n ['aftercolumnsset', 'aftercolumnsset'],\n ['beforefilterapply', 'beforefilterapply'],\n ['beforefiltertrimmed', 'beforefiltertrimmed'],\n ['beforetrimmed', 'beforetrimmed'],\n ['aftertrimmed', 'aftertrimmed'],\n ['viewportscroll', 'viewportscroll'],\n ['beforeexport', 'beforeexport'],\n ['beforeeditstart', 'beforeeditstart'],\n ['aftercolumnresize', 'aftercolumnresize'],\n ['beforerowdefinition', 'beforerowdefinition'],\n ['filterconfigchanged', 'filterconfigchanged'],\n ['sortingconfigchanged', 'sortingconfigchanged'],\n ['rowheaderschanged', 'rowheaderschanged'],\n ['beforegridrender', 'beforegridrender'],\n ['aftergridrender', 'aftergridrender'],\n ['aftergridinit', 'aftergridinit'],\n ['additionaldatachanged', 'additionaldatachanged'],\n ['afterthemechanged', 'afterthemechanged'],\n ['created', 'created'],\n ['beforepaste', 'beforepaste'],\n ['beforepasteapply', 'beforepasteapply'],\n ['pasteregion', 'pasteregion'],\n ['afterpasteapply', 'afterpasteapply'],\n ['beforecut', 'beforecut'],\n ['clearregion', 'clearregion'],\n ['beforecopy', 'beforecopy'],\n ['beforecopyapply', 'beforecopyapply'],\n ['copyregion', 'copyregion'],\n ['beforerowrender', 'beforerowrender'],\n ['afterrender', 'afterrender'],\n ['beforecellrender', 'beforecellrender'],\n ['beforedatarender', 'beforedatarender'],\n ['dragstartcell', 'dragstartcell'],\n ['celledit', 'celledit'],\n ['closeedit', 'closeedit'],\n ['filterChange', 'filterChange'],\n ['resetChange', 'resetChange'],\n ['beforefocusrender', 'beforefocusrender'],\n ['beforescrollintoview', 'beforescrollintoview'],\n ['afterfocus', 'afterfocus'],\n ['beforeheaderclick', 'beforeheaderclick'],\n ['headerresize', 'headerresize'],\n ['beforeheaderresize', 'beforeheaderresize'],\n ['headerdblclick', 'headerdblclick'],\n ['beforeheaderrender', 'beforeheaderrender'],\n ['beforegroupheaderrender', 'beforegroupheaderrender'],\n ['afterheaderrender', 'afterheaderrender'],\n ['rowdragstartinit', 'rowdragstartinit'],\n ['rowdragendinit', 'rowdragendinit'],\n ['rowdragmoveinit', 'rowdragmoveinit'],\n ['rowdragmousemove', 'rowdragmousemove'],\n ['rowdropinit', 'rowdropinit'],\n ['roworderchange', 'roworderchange'],\n ['beforecopyregion', 'beforecopyregion'],\n ['beforepasteregion', 'beforepasteregion'],\n ['celleditapply', 'celleditapply'],\n ['beforecellfocusinit', 'beforecellfocusinit'],\n ['beforenextvpfocus', 'beforenextvpfocus'],\n ['setedit', 'setedit'],\n ['beforeapplyrange', 'beforeapplyrange'],\n ['beforesetrange', 'beforesetrange'],\n ['setrange', 'setrange'],\n ['beforeeditrender', 'beforeeditrender'],\n ['selectall', 'selectall'],\n ['canceledit', 'canceledit'],\n ['settemprange', 'settemprange'],\n ['beforesettemprange', 'beforesettemprange'],\n ['applyfocus', 'applyfocus'],\n ['focuscell', 'focuscell'],\n ['beforerangedataapply', 'beforerangedataapply'],\n ['selectionchangeinit', 'selectionchangeinit'],\n ['beforerangecopyapply', 'beforerangecopyapply'],\n ['rangeeditapply', 'rangeeditapply'],\n ['clipboardrangecopy', 'clipboardrangecopy'],\n ['clipboardrangepaste', 'clipboardrangepaste'],\n ['beforekeydown', 'beforekeydown'],\n ['beforekeyup', 'beforekeyup'],\n ['beforecellsave', 'beforecellsave'],\n ['scrollview', 'scrollview'],\n ['ref', 'ref'],\n ['scrollvirtual', 'scrollvirtual'],\n ['scrollviewport', 'scrollviewport'],\n ['resizeviewport', 'resizeviewport'],\n ['scrollchange', 'scrollchange'],\n ['scrollviewportsilent', 'scrollviewportsilent'],\n ['html', 'html']\n]);","import type { PluginProviders } from '../types/plugin.types';\nimport { BasePlugin } from './base.plugin';\n\n/**\n * Automatically adds new rows when pasted data is larger than current rows\n * @event newRows - is triggered when new rows are added. Data of new rows can be filled with default values. If the event is prevented, no rows will be added\n */\nexport class AutoAddRowsPlugin extends BasePlugin {\n constructor(revogrid: HTMLRevoGridElement, providers: PluginProviders) {\n super(revogrid, providers);\n this.addEventListener('beforepasteapply', evt =>\n this.handleBeforePasteApply(evt),\n );\n }\n\n handleBeforePasteApply(\n event: CustomEvent<{\n raw: string;\n parsed: string[][];\n event: ClipboardEvent;\n }>,\n ) {\n const start = this.providers.selection.focused;\n const isEditing = this.providers.selection.edit != null;\n\n if (!start || isEditing) {\n return;\n }\n\n const rowLength =\n this.providers.data.stores.rgRow.store.get('items').length;\n\n const endRow = start.y + event.detail.parsed.length;\n\n if (rowLength < endRow) {\n const count = endRow - rowLength;\n const newRows = Array.from({ length: count }, (_, i) => ({\n index: rowLength + i,\n data: {},\n }));\n\n const event = this.emit('newRows', { newRows: newRows });\n\n if (event.defaultPrevented) {\n return;\n }\n\n const items = [\n ...this.providers.data.stores.rgRow.store.get('source'),\n ...event.detail.newRows.map(j => j.data),\n ];\n\n this.providers.data.setData(items);\n }\n }\n}\n"],"version":3}
1
+ {"file":"index.js","mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAGA,OAAO,CAAC,GAAG;IACT,IAAI,KAAK,GAAI,GAA2B,CAAC,KAAK,IAAI,GAAG,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC;IAC5E,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE;QAC7B,KAAK,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC;KACtB;IAED,MAAM,WAAW,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;IACpC,IAAI,WAAW,KAAK,KAAK,EAAE;QACzB,GAAG,CAAC,YAAY,CAAC,OAAO,EAAE,WAAW,CAAC,CAAC;KACxC;IACD,OAAO,WAAW,CAAC;AACrB,CAAC,CAAC;;MC+FW,eAAe,GAAG,IAAI,GAAG,CAAiC;IACrE,CAAC,oBAAoB,EAAE,oBAAoB,CAAC;IAC5C,CAAC,YAAY,EAAE,YAAY,CAAC;IAC5B,CAAC,iBAAiB,EAAE,iBAAiB,CAAC;IACtC,CAAC,WAAW,EAAE,WAAW,CAAC;IAC1B,CAAC,gBAAgB,EAAE,gBAAgB,CAAC;IACpC,CAAC,aAAa,EAAE,aAAa,CAAC;IAC9B,CAAC,YAAY,EAAE,YAAY,CAAC;IAC5B,CAAC,iBAAiB,EAAE,iBAAiB,CAAC;IACtC,CAAC,eAAe,EAAE,eAAe,CAAC;IAClC,CAAC,0BAA0B,EAAE,0BAA0B,CAAC;IACxD,CAAC,oBAAoB,EAAE,oBAAoB,CAAC;IAC5C,CAAC,cAAc,EAAE,cAAc,CAAC;IAChC,CAAC,aAAa,EAAE,aAAa,CAAC;IAC9B,CAAC,iBAAiB,EAAE,iBAAiB,CAAC;IACtC,CAAC,iBAAiB,EAAE,iBAAiB,CAAC;IACtC,CAAC,iBAAiB,EAAE,iBAAiB,CAAC;IACtC,CAAC,iBAAiB,EAAE,iBAAiB,CAAC;IACtC,CAAC,gBAAgB,EAAE,gBAAgB,CAAC;IACpC,CAAC,gBAAgB,EAAE,gBAAgB,CAAC;IACpC,CAAC,kBAAkB,EAAE,kBAAkB,CAAC;IACxC,CAAC,qBAAqB,EAAE,qBAAqB,CAAC;IAC9C,CAAC,iBAAiB,EAAE,iBAAiB,CAAC;IACtC,CAAC,mBAAmB,EAAE,mBAAmB,CAAC;IAC1C,CAAC,qBAAqB,EAAE,qBAAqB,CAAC;IAC9C,CAAC,eAAe,EAAE,eAAe,CAAC;IAClC,CAAC,cAAc,EAAE,cAAc,CAAC;IAChC,CAAC,gBAAgB,EAAE,gBAAgB,CAAC;IACpC,CAAC,cAAc,EAAE,cAAc,CAAC;IAChC,CAAC,iBAAiB,EAAE,iBAAiB,CAAC;IACtC,CAAC,mBAAmB,EAAE,mBAAmB,CAAC;IAC1C,CAAC,qBAAqB,EAAE,qBAAqB,CAAC;IAC9C,CAAC,qBAAqB,EAAE,qBAAqB,CAAC;IAC9C,CAAC,sBAAsB,EAAE,sBAAsB,CAAC;IAChD,CAAC,mBAAmB,EAAE,mBAAmB,CAAC;IAC1C,CAAC,kBAAkB,EAAE,kBAAkB,CAAC;IACxC,CAAC,iBAAiB,EAAE,iBAAiB,CAAC;IACtC,CAAC,eAAe,EAAE,eAAe,CAAC;IAClC,CAAC,uBAAuB,EAAE,uBAAuB,CAAC;IAClD,CAAC,mBAAmB,EAAE,mBAAmB,CAAC;IAC1C,CAAC,SAAS,EAAE,SAAS,CAAC;IACtB,CAAC,aAAa,EAAE,aAAa,CAAC;IAC9B,CAAC,kBAAkB,EAAE,kBAAkB,CAAC;IACxC,CAAC,aAAa,EAAE,aAAa,CAAC;IAC9B,CAAC,iBAAiB,EAAE,iBAAiB,CAAC;IACtC,CAAC,WAAW,EAAE,WAAW,CAAC;IAC1B,CAAC,aAAa,EAAE,aAAa,CAAC;IAC9B,CAAC,YAAY,EAAE,YAAY,CAAC;IAC5B,CAAC,iBAAiB,EAAE,iBAAiB,CAAC;IACtC,CAAC,YAAY,EAAE,YAAY,CAAC;IAC5B,CAAC,iBAAiB,EAAE,iBAAiB,CAAC;IACtC,CAAC,aAAa,EAAE,aAAa,CAAC;IAC9B,CAAC,kBAAkB,EAAE,kBAAkB,CAAC;IACxC,CAAC,kBAAkB,EAAE,kBAAkB,CAAC;IACxC,CAAC,eAAe,EAAE,eAAe,CAAC;IAClC,CAAC,cAAc,EAAE,cAAc,CAAC;IAChC,CAAC,WAAW,EAAE,WAAW,CAAC;IAC1B,CAAC,cAAc,EAAE,cAAc,CAAC;IAChC,CAAC,aAAa,EAAE,aAAa,CAAC;IAC9B,CAAC,mBAAmB,EAAE,mBAAmB,CAAC;IAC1C,CAAC,sBAAsB,EAAE,sBAAsB,CAAC;IAChD,CAAC,YAAY,EAAE,YAAY,CAAC;IAC5B,CAAC,mBAAmB,EAAE,mBAAmB,CAAC;IAC1C,CAAC,cAAc,EAAE,cAAc,CAAC;IAChC,CAAC,oBAAoB,EAAE,oBAAoB,CAAC;IAC5C,CAAC,gBAAgB,EAAE,gBAAgB,CAAC;IACpC,CAAC,oBAAoB,EAAE,oBAAoB,CAAC;IAC5C,CAAC,yBAAyB,EAAE,yBAAyB,CAAC;IACtD,CAAC,mBAAmB,EAAE,mBAAmB,CAAC;IAC1C,CAAC,kBAAkB,EAAE,kBAAkB,CAAC;IACxC,CAAC,gBAAgB,EAAE,gBAAgB,CAAC;IACpC,CAAC,iBAAiB,EAAE,iBAAiB,CAAC;IACtC,CAAC,kBAAkB,EAAE,kBAAkB,CAAC;IACxC,CAAC,aAAa,EAAE,aAAa,CAAC;IAC9B,CAAC,gBAAgB,EAAE,gBAAgB,CAAC;IACpC,CAAC,kBAAkB,EAAE,kBAAkB,CAAC;IACxC,CAAC,mBAAmB,EAAE,mBAAmB,CAAC;IAC1C,CAAC,eAAe,EAAE,eAAe,CAAC;IAClC,CAAC,qBAAqB,EAAE,qBAAqB,CAAC;IAC9C,CAAC,mBAAmB,EAAE,mBAAmB,CAAC;IAC1C,CAAC,SAAS,EAAE,SAAS,CAAC;IACtB,CAAC,kBAAkB,EAAE,kBAAkB,CAAC;IACxC,CAAC,gBAAgB,EAAE,gBAAgB,CAAC;IACpC,CAAC,UAAU,EAAE,UAAU,CAAC;IACxB,CAAC,kBAAkB,EAAE,kBAAkB,CAAC;IACxC,CAAC,WAAW,EAAE,WAAW,CAAC;IAC1B,CAAC,YAAY,EAAE,YAAY,CAAC;IAC5B,CAAC,cAAc,EAAE,cAAc,CAAC;IAChC,CAAC,oBAAoB,EAAE,oBAAoB,CAAC;IAC5C,CAAC,YAAY,EAAE,YAAY,CAAC;IAC5B,CAAC,WAAW,EAAE,WAAW,CAAC;IAC1B,CAAC,sBAAsB,EAAE,sBAAsB,CAAC;IAChD,CAAC,qBAAqB,EAAE,qBAAqB,CAAC;IAC9C,CAAC,sBAAsB,EAAE,sBAAsB,CAAC;IAChD,CAAC,gBAAgB,EAAE,gBAAgB,CAAC;IACpC,CAAC,oBAAoB,EAAE,oBAAoB,CAAC;IAC5C,CAAC,qBAAqB,EAAE,qBAAqB,CAAC;IAC9C,CAAC,eAAe,EAAE,eAAe,CAAC;IAClC,CAAC,aAAa,EAAE,aAAa,CAAC;IAC9B,CAAC,gBAAgB,EAAE,gBAAgB,CAAC;IACpC,CAAC,UAAU,EAAE,UAAU,CAAC;IACxB,CAAC,YAAY,EAAE,YAAY,CAAC;IAC5B,CAAC,KAAK,EAAE,KAAK,CAAC;IACd,CAAC,eAAe,EAAE,eAAe,CAAC;IAClC,CAAC,gBAAgB,EAAE,gBAAgB,CAAC;IACpC,CAAC,gBAAgB,EAAE,gBAAgB,CAAC;IACpC,CAAC,cAAc,EAAE,cAAc,CAAC;IAChC,CAAC,sBAAsB,EAAE,sBAAsB,CAAC;IAChD,CAAC,MAAM,EAAE,MAAM,CAAC;CACjB;;ACvND;;;;MAIa,iBAAkB,SAAQ,UAAU;IAC/C,YAAY,QAA6B,EAAE,SAA0B;QACnE,KAAK,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC;QAC3B,IAAI,CAAC,gBAAgB,CAAC,kBAAkB,EAAE,GAAG,IAC3C,IAAI,CAAC,sBAAsB,CAAC,GAAG,CAAC,CACjC,CAAC;KACH;IAED,sBAAsB,CACpB,KAIE;QAEF,MAAM,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,OAAO,CAAC;QAC/C,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,IAAI,IAAI,IAAI,CAAC;QAExD,IAAI,CAAC,KAAK,IAAI,SAAS,EAAE;YACvB,OAAO;SACR;QAED,MAAM,SAAS,GACb,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC;QAE7D,MAAM,MAAM,GAAG,KAAK,CAAC,CAAC,GAAG,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC;QAEpD,IAAI,SAAS,GAAG,MAAM,EAAE;YACtB,MAAM,KAAK,GAAG,MAAM,GAAG,SAAS,CAAC;YACjC,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,MAAM;gBACvD,KAAK,EAAE,SAAS,GAAG,CAAC;gBACpB,IAAI,EAAE,EAAE;aACT,CAAC,CAAC,CAAC;YAEJ,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,CAAC;YAEzD,IAAI,KAAK,CAAC,gBAAgB,EAAE;gBAC1B,OAAO;aACR;YAED,MAAM,KAAK,GAAG;gBACZ,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC;gBACvD,GAAG,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC;aACzC,CAAC;YAEF,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;SACpC;KACF;;;;;","names":[],"sources":["src/global/global.ts","src/types/events.ts","src/plugins/add-rows-on-paste.plugin.ts"],"sourcesContent":["import { setMode } from '@stencil/core';\nimport { getTheme } from '../themeManager/theme.service';\n\nsetMode(elm => {\n let theme = (elm as HTMLRevoGridElement).theme || elm.getAttribute('theme');\n if (typeof theme === 'string') {\n theme = theme.trim();\n }\n\n const parsedTheme = getTheme(theme);\n if (parsedTheme !== theme) {\n elm.setAttribute('theme', parsedTheme);\n }\n return parsedTheme;\n});\n","\nexport type RevogridEvents = 'contentsizechanged'|\n 'beforeedit'|\n 'beforerangeedit'|\n 'afteredit'|\n 'beforeautofill'|\n 'beforerange'|\n 'afterfocus'|\n 'roworderchanged'|\n 'beforesorting'|\n 'beforesourcesortingapply'|\n 'beforesortingapply'|\n 'rowdragstart'|\n 'headerclick'|\n 'beforecellfocus'|\n 'beforefocuslost'|\n 'beforesourceset'|\n 'beforeanysource'|\n 'aftersourceset'|\n 'afteranysource'|\n 'beforecolumnsset'|\n 'beforecolumnapplied'|\n 'aftercolumnsset'|\n 'beforefilterapply'|\n 'beforefiltertrimmed'|\n 'beforetrimmed'|\n 'aftertrimmed'|\n 'viewportscroll'|\n 'beforeexport'|\n 'beforeeditstart'|\n 'aftercolumnresize'|\n 'beforerowdefinition'|\n 'filterconfigchanged'|\n 'sortingconfigchanged'|\n 'rowheaderschanged'|\n 'beforegridrender'|\n 'aftergridrender'|\n 'aftergridinit'|\n 'additionaldatachanged'|\n 'afterthemechanged'|\n 'created'|\n 'beforepaste'|\n 'beforepasteapply'|\n 'pasteregion'|\n 'afterpasteapply'|\n 'beforecut'|\n 'clearregion'|\n 'beforecopy'|\n 'beforecopyapply'|\n 'copyregion'|\n 'beforerowrender'|\n 'afterrender'|\n 'beforecellrender'|\n 'beforedatarender'|\n 'dragstartcell'|\n 'celleditinit'|\n 'closeedit'|\n 'filterChange'|\n 'resetChange'|\n 'beforefocusrender'|\n 'beforescrollintoview'|\n 'afterfocus'|\n 'beforeheaderclick'|\n 'headerresize'|\n 'beforeheaderresize'|\n 'headerdblclick'|\n 'beforeheaderrender'|\n 'beforegroupheaderrender'|\n 'afterheaderrender'|\n 'rowdragstartinit'|\n 'rowdragendinit'|\n 'rowdragmoveinit'|\n 'rowdragmousemove'|\n 'rowdropinit'|\n 'roworderchange'|\n 'beforecopyregion'|\n 'beforepasteregion'|\n 'celleditapply'|\n 'beforecellfocusinit'|\n 'beforenextvpfocus'|\n 'setedit'|\n 'beforeapplyrange'|\n 'beforesetrange'|\n 'setrange'|\n 'beforeeditrender'|\n 'selectall'|\n 'canceledit'|\n 'settemprange'|\n 'beforesettemprange'|\n 'applyfocus'|\n 'focuscell'|\n 'beforerangedataapply'|\n 'selectionchangeinit'|\n 'beforerangecopyapply'|\n 'rangeeditapply'|\n 'clipboardrangecopy'|\n 'clipboardrangepaste'|\n 'beforekeydown'|\n 'beforekeyup'|\n 'beforecellsave'|\n 'celledit'|\n 'scrollview'|\n 'ref'|\n 'scrollvirtual'|\n 'scrollviewport'|\n 'resizeviewport'|\n 'scrollchange'|\n 'scrollviewportsilent'|\n 'html'\nexport const REVOGRID_EVENTS = new Map<RevogridEvents, RevogridEvents>([\n ['contentsizechanged', 'contentsizechanged'],\n ['beforeedit', 'beforeedit'],\n ['beforerangeedit', 'beforerangeedit'],\n ['afteredit', 'afteredit'],\n ['beforeautofill', 'beforeautofill'],\n ['beforerange', 'beforerange'],\n ['afterfocus', 'afterfocus'],\n ['roworderchanged', 'roworderchanged'],\n ['beforesorting', 'beforesorting'],\n ['beforesourcesortingapply', 'beforesourcesortingapply'],\n ['beforesortingapply', 'beforesortingapply'],\n ['rowdragstart', 'rowdragstart'],\n ['headerclick', 'headerclick'],\n ['beforecellfocus', 'beforecellfocus'],\n ['beforefocuslost', 'beforefocuslost'],\n ['beforesourceset', 'beforesourceset'],\n ['beforeanysource', 'beforeanysource'],\n ['aftersourceset', 'aftersourceset'],\n ['afteranysource', 'afteranysource'],\n ['beforecolumnsset', 'beforecolumnsset'],\n ['beforecolumnapplied', 'beforecolumnapplied'],\n ['aftercolumnsset', 'aftercolumnsset'],\n ['beforefilterapply', 'beforefilterapply'],\n ['beforefiltertrimmed', 'beforefiltertrimmed'],\n ['beforetrimmed', 'beforetrimmed'],\n ['aftertrimmed', 'aftertrimmed'],\n ['viewportscroll', 'viewportscroll'],\n ['beforeexport', 'beforeexport'],\n ['beforeeditstart', 'beforeeditstart'],\n ['aftercolumnresize', 'aftercolumnresize'],\n ['beforerowdefinition', 'beforerowdefinition'],\n ['filterconfigchanged', 'filterconfigchanged'],\n ['sortingconfigchanged', 'sortingconfigchanged'],\n ['rowheaderschanged', 'rowheaderschanged'],\n ['beforegridrender', 'beforegridrender'],\n ['aftergridrender', 'aftergridrender'],\n ['aftergridinit', 'aftergridinit'],\n ['additionaldatachanged', 'additionaldatachanged'],\n ['afterthemechanged', 'afterthemechanged'],\n ['created', 'created'],\n ['beforepaste', 'beforepaste'],\n ['beforepasteapply', 'beforepasteapply'],\n ['pasteregion', 'pasteregion'],\n ['afterpasteapply', 'afterpasteapply'],\n ['beforecut', 'beforecut'],\n ['clearregion', 'clearregion'],\n ['beforecopy', 'beforecopy'],\n ['beforecopyapply', 'beforecopyapply'],\n ['copyregion', 'copyregion'],\n ['beforerowrender', 'beforerowrender'],\n ['afterrender', 'afterrender'],\n ['beforecellrender', 'beforecellrender'],\n ['beforedatarender', 'beforedatarender'],\n ['dragstartcell', 'dragstartcell'],\n ['celleditinit', 'celleditinit'],\n ['closeedit', 'closeedit'],\n ['filterChange', 'filterChange'],\n ['resetChange', 'resetChange'],\n ['beforefocusrender', 'beforefocusrender'],\n ['beforescrollintoview', 'beforescrollintoview'],\n ['afterfocus', 'afterfocus'],\n ['beforeheaderclick', 'beforeheaderclick'],\n ['headerresize', 'headerresize'],\n ['beforeheaderresize', 'beforeheaderresize'],\n ['headerdblclick', 'headerdblclick'],\n ['beforeheaderrender', 'beforeheaderrender'],\n ['beforegroupheaderrender', 'beforegroupheaderrender'],\n ['afterheaderrender', 'afterheaderrender'],\n ['rowdragstartinit', 'rowdragstartinit'],\n ['rowdragendinit', 'rowdragendinit'],\n ['rowdragmoveinit', 'rowdragmoveinit'],\n ['rowdragmousemove', 'rowdragmousemove'],\n ['rowdropinit', 'rowdropinit'],\n ['roworderchange', 'roworderchange'],\n ['beforecopyregion', 'beforecopyregion'],\n ['beforepasteregion', 'beforepasteregion'],\n ['celleditapply', 'celleditapply'],\n ['beforecellfocusinit', 'beforecellfocusinit'],\n ['beforenextvpfocus', 'beforenextvpfocus'],\n ['setedit', 'setedit'],\n ['beforeapplyrange', 'beforeapplyrange'],\n ['beforesetrange', 'beforesetrange'],\n ['setrange', 'setrange'],\n ['beforeeditrender', 'beforeeditrender'],\n ['selectall', 'selectall'],\n ['canceledit', 'canceledit'],\n ['settemprange', 'settemprange'],\n ['beforesettemprange', 'beforesettemprange'],\n ['applyfocus', 'applyfocus'],\n ['focuscell', 'focuscell'],\n ['beforerangedataapply', 'beforerangedataapply'],\n ['selectionchangeinit', 'selectionchangeinit'],\n ['beforerangecopyapply', 'beforerangecopyapply'],\n ['rangeeditapply', 'rangeeditapply'],\n ['clipboardrangecopy', 'clipboardrangecopy'],\n ['clipboardrangepaste', 'clipboardrangepaste'],\n ['beforekeydown', 'beforekeydown'],\n ['beforekeyup', 'beforekeyup'],\n ['beforecellsave', 'beforecellsave'],\n ['celledit', 'celledit'],\n ['scrollview', 'scrollview'],\n ['ref', 'ref'],\n ['scrollvirtual', 'scrollvirtual'],\n ['scrollviewport', 'scrollviewport'],\n ['resizeviewport', 'resizeviewport'],\n ['scrollchange', 'scrollchange'],\n ['scrollviewportsilent', 'scrollviewportsilent'],\n ['html', 'html']\n]);","import type { PluginProviders } from '../types/plugin.types';\nimport { BasePlugin } from './base.plugin';\n\n/**\n * Automatically adds new rows when pasted data is larger than current rows\n * @event newRows - is triggered when new rows are added. Data of new rows can be filled with default values. If the event is prevented, no rows will be added\n */\nexport class AutoAddRowsPlugin extends BasePlugin {\n constructor(revogrid: HTMLRevoGridElement, providers: PluginProviders) {\n super(revogrid, providers);\n this.addEventListener('beforepasteapply', evt =>\n this.handleBeforePasteApply(evt),\n );\n }\n\n handleBeforePasteApply(\n event: CustomEvent<{\n raw: string;\n parsed: string[][];\n event: ClipboardEvent;\n }>,\n ) {\n const start = this.providers.selection.focused;\n const isEditing = this.providers.selection.edit != null;\n\n if (!start || isEditing) {\n return;\n }\n\n const rowLength =\n this.providers.data.stores.rgRow.store.get('items').length;\n\n const endRow = start.y + event.detail.parsed.length;\n\n if (rowLength < endRow) {\n const count = endRow - rowLength;\n const newRows = Array.from({ length: count }, (_, i) => ({\n index: rowLength + i,\n data: {},\n }));\n\n const event = this.emit('newRows', { newRows: newRows });\n\n if (event.defaultPrevented) {\n return;\n }\n\n const items = [\n ...this.providers.data.stores.rgRow.store.get('source'),\n ...event.detail.newRows.map(j => j.data),\n ];\n\n this.providers.data.setData(items);\n }\n }\n}\n"],"version":3}