@revolist/revogrid 4.9.41 → 4.10.1

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 (167) hide show
  1. package/dist/cjs/{column.drag.plugin-fcd892ec.js → column.drag.plugin-08ca04f4.js} +129 -58
  2. package/dist/cjs/column.drag.plugin-08ca04f4.js.map +1 -0
  3. package/dist/cjs/column.service-2670e6e7.js +1286 -0
  4. package/dist/cjs/column.service-2670e6e7.js.map +1 -0
  5. package/dist/cjs/{edit.utils-179c0800.js → edit.utils-4a790cf8.js} +2 -2
  6. package/dist/cjs/{edit.utils-179c0800.js.map → edit.utils-4a790cf8.js.map} +1 -1
  7. package/dist/cjs/{header-cell-renderer-d879d95e.js → header-cell-renderer-db089f54.js} +2 -2
  8. package/dist/cjs/{header-cell-renderer-d879d95e.js.map → header-cell-renderer-db089f54.js.map} +1 -1
  9. package/dist/cjs/{column.service-26c61ed6.js → index-91e92bea.js} +455 -1235
  10. package/dist/cjs/index-91e92bea.js.map +1 -0
  11. package/dist/cjs/index.cjs.js +21 -20
  12. package/dist/cjs/index.cjs.js.map +1 -1
  13. package/dist/cjs/{key.utils-f49d7bee.js → key.utils-e65c24e6.js} +2 -2
  14. package/dist/cjs/{key.utils-f49d7bee.js.map → key.utils-e65c24e6.js.map} +1 -1
  15. package/dist/cjs/revo-grid.cjs.entry.js +47 -56
  16. package/dist/cjs/revo-grid.cjs.entry.js.map +1 -1
  17. package/dist/cjs/revogr-attribution_7.cjs.entry.js +11 -11
  18. package/dist/cjs/revogr-attribution_7.cjs.entry.js.map +1 -1
  19. package/dist/cjs/revogr-clipboard_3.cjs.entry.js +5 -4
  20. package/dist/cjs/revogr-clipboard_3.cjs.entry.js.map +1 -1
  21. package/dist/cjs/revogr-data_4.cjs.entry.js +41 -18
  22. package/dist/cjs/revogr-data_4.cjs.entry.js.map +1 -1
  23. package/dist/cjs/{row-header-utils-c37f76e4.js → row-header-utils-dc3d3185.js} +5 -6
  24. package/dist/cjs/row-header-utils-dc3d3185.js.map +1 -0
  25. package/dist/cjs/{text-editor-b756d6b3.js → text-editor-a32a3993.js} +3 -3
  26. package/dist/cjs/{text-editor-b756d6b3.js.map → text-editor-a32a3993.js.map} +1 -1
  27. package/dist/cjs/{throttle-a57f51f9.js → throttle-da92b75d.js} +2 -2
  28. package/dist/cjs/{throttle-a57f51f9.js.map → throttle-da92b75d.js.map} +1 -1
  29. package/dist/collection/components/data/revogr-data.js +28 -3
  30. package/dist/collection/components/data/revogr-data.js.map +1 -1
  31. package/dist/collection/components/order/revogr-order-editor.js +4 -2
  32. package/dist/collection/components/order/revogr-order-editor.js.map +1 -1
  33. package/dist/collection/components/revoGrid/revo-grid.js +7 -4
  34. package/dist/collection/components/revoGrid/revo-grid.js.map +1 -1
  35. package/dist/collection/components/scroll/revogr-viewport-scroll.js +26 -8
  36. package/dist/collection/components/scroll/revogr-viewport-scroll.js.map +1 -1
  37. package/dist/collection/plugins/filter/filter.plugin.js +3 -0
  38. package/dist/collection/plugins/filter/filter.plugin.js.map +1 -1
  39. package/dist/collection/plugins/sorting/sorting.plugin.js +7 -4
  40. package/dist/collection/plugins/sorting/sorting.plugin.js.map +1 -1
  41. package/dist/collection/services/dimension.provider.js +7 -22
  42. package/dist/collection/services/dimension.provider.js.map +1 -1
  43. package/dist/collection/store/dataSource/trimmed.plugin.js +3 -8
  44. package/dist/collection/store/dataSource/trimmed.plugin.js.map +1 -1
  45. package/dist/collection/store/dimension/dimension.helpers.js +2 -5
  46. package/dist/collection/store/dimension/dimension.helpers.js.map +1 -1
  47. package/dist/collection/store/dimension/dimension.recalculate.plugin.js +35 -0
  48. package/dist/collection/store/dimension/dimension.recalculate.plugin.js.map +1 -0
  49. package/dist/collection/store/dimension/dimension.store.js +46 -66
  50. package/dist/collection/store/dimension/dimension.store.js.map +1 -1
  51. package/dist/collection/store/dimension/dimension.trim.plugin.js +61 -0
  52. package/dist/collection/store/dimension/dimension.trim.plugin.js.map +1 -0
  53. package/dist/collection/types/events.js +1 -0
  54. package/dist/collection/types/events.js.map +1 -1
  55. package/dist/collection/types/interfaces.js.map +1 -1
  56. package/dist/esm/{column.drag.plugin-3cc77986.js → column.drag.plugin-b7bba0da.js} +118 -47
  57. package/dist/esm/column.drag.plugin-b7bba0da.js.map +1 -0
  58. package/dist/esm/column.service-9b0603f4.js +1249 -0
  59. package/dist/esm/column.service-9b0603f4.js.map +1 -0
  60. package/dist/esm/{debounce-72878ced.js → debounce-7b511afc.js} +2 -2
  61. package/dist/esm/{debounce-72878ced.js.map → debounce-7b511afc.js.map} +1 -1
  62. package/dist/esm/{edit.utils-6fc686b9.js → edit.utils-abcd0152.js} +2 -2
  63. package/dist/esm/{edit.utils-6fc686b9.js.map → edit.utils-abcd0152.js.map} +1 -1
  64. package/dist/esm/{header-cell-renderer-32d2ed96.js → header-cell-renderer-fce020c3.js} +2 -2
  65. package/dist/esm/{header-cell-renderer-32d2ed96.js.map → header-cell-renderer-fce020c3.js.map} +1 -1
  66. package/dist/esm/{column.service-751345b2.js → index-b1e05212.js} +414 -1195
  67. package/dist/esm/index-b1e05212.js.map +1 -0
  68. package/dist/esm/index.js +9 -8
  69. package/dist/esm/index.js.map +1 -1
  70. package/dist/esm/{key.utils-17273f42.js → key.utils-ea9aec31.js} +2 -2
  71. package/dist/esm/{key.utils-17273f42.js.map → key.utils-ea9aec31.js.map} +1 -1
  72. package/dist/esm/revo-grid.entry.js +27 -36
  73. package/dist/esm/revo-grid.entry.js.map +1 -1
  74. package/dist/esm/revogr-attribution_7.entry.js +7 -7
  75. package/dist/esm/revogr-clipboard_3.entry.js +6 -5
  76. package/dist/esm/revogr-clipboard_3.entry.js.map +1 -1
  77. package/dist/esm/revogr-data_4.entry.js +37 -14
  78. package/dist/esm/revogr-data_4.entry.js.map +1 -1
  79. package/dist/esm/revogr-filter-panel.entry.js +1 -1
  80. package/dist/esm/{row-header-utils-3dfbb81f.js → row-header-utils-7af8fcbf.js} +2 -3
  81. package/dist/esm/row-header-utils-7af8fcbf.js.map +1 -0
  82. package/dist/esm/{text-editor-901c3eb8.js → text-editor-fb3f24fe.js} +3 -3
  83. package/dist/esm/{text-editor-901c3eb8.js.map → text-editor-fb3f24fe.js.map} +1 -1
  84. package/dist/esm/{throttle-138d69c3.js → throttle-1f5772ef.js} +3 -3
  85. package/dist/esm/{throttle-138d69c3.js.map → throttle-1f5772ef.js.map} +1 -1
  86. package/dist/revo-grid/column.drag.plugin-b7bba0da.js +5 -0
  87. package/dist/revo-grid/column.drag.plugin-b7bba0da.js.map +1 -0
  88. package/dist/revo-grid/column.service-9b0603f4.js +5 -0
  89. package/dist/revo-grid/column.service-9b0603f4.js.map +1 -0
  90. package/dist/revo-grid/{debounce-72878ced.js → debounce-7b511afc.js} +2 -2
  91. package/dist/revo-grid/{edit.utils-6fc686b9.js → edit.utils-abcd0152.js} +2 -2
  92. package/dist/revo-grid/{header-cell-renderer-32d2ed96.js → header-cell-renderer-fce020c3.js} +2 -2
  93. package/dist/revo-grid/index-b1e05212.js +5 -0
  94. package/dist/revo-grid/index-b1e05212.js.map +1 -0
  95. package/dist/revo-grid/index.esm.js +1 -1
  96. package/dist/revo-grid/index.esm.js.map +1 -1
  97. package/dist/revo-grid/key.utils-ea9aec31.js +5 -0
  98. package/dist/revo-grid/{key.utils-17273f42.js.map → key.utils-ea9aec31.js.map} +1 -1
  99. package/dist/revo-grid/revo-grid.entry.js +1 -1
  100. package/dist/revo-grid/revo-grid.entry.js.map +1 -1
  101. package/dist/revo-grid/revogr-attribution_7.entry.js +1 -1
  102. package/dist/revo-grid/revogr-clipboard_3.entry.js +1 -1
  103. package/dist/revo-grid/revogr-clipboard_3.entry.js.map +1 -1
  104. package/dist/revo-grid/revogr-data_4.entry.js +1 -1
  105. package/dist/revo-grid/revogr-data_4.entry.js.map +1 -1
  106. package/dist/revo-grid/revogr-filter-panel.entry.js +1 -1
  107. package/dist/revo-grid/row-header-utils-7af8fcbf.js +5 -0
  108. package/dist/revo-grid/{row-header-utils-3dfbb81f.js.map → row-header-utils-7af8fcbf.js.map} +1 -1
  109. package/dist/revo-grid/text-editor-fb3f24fe.js +5 -0
  110. package/dist/revo-grid/{throttle-138d69c3.js → throttle-1f5772ef.js} +2 -2
  111. package/dist/types/components/data/revogr-data.d.ts +6 -2
  112. package/dist/types/components/order/revogr-order-editor.d.ts +1 -0
  113. package/dist/types/components/revoGrid/revo-grid.d.ts +2 -6
  114. package/dist/types/components/scroll/revogr-viewport-scroll.d.ts +1 -1
  115. package/dist/types/components.d.ts +9 -2
  116. package/dist/types/services/dimension.provider.d.ts +1 -1
  117. package/dist/types/store/dimension/dimension.helpers.d.ts +0 -3
  118. package/dist/types/store/dimension/dimension.recalculate.plugin.d.ts +9 -0
  119. package/dist/types/store/dimension/dimension.store.d.ts +2 -1
  120. package/dist/types/store/dimension/dimension.trim.plugin.d.ts +13 -0
  121. package/dist/types/types/events.d.ts +1 -1
  122. package/dist/types/types/interfaces.d.ts +6 -1
  123. package/hydrate/index.js +194 -116
  124. package/hydrate/index.mjs +194 -116
  125. package/package.json +1 -1
  126. package/standalone/column.service.js +1 -1
  127. package/standalone/data.store.js +24 -10
  128. package/standalone/data.store.js.map +1 -1
  129. package/standalone/dimension.helpers.js +3 -6
  130. package/standalone/dimension.helpers.js.map +1 -1
  131. package/standalone/index.js +1 -0
  132. package/standalone/index.js.map +1 -1
  133. package/standalone/revo-grid.js +134 -73
  134. package/standalone/revo-grid.js.map +1 -1
  135. package/standalone/revogr-data2.js +6 -1
  136. package/standalone/revogr-data2.js.map +1 -1
  137. package/standalone/revogr-header2.js +1 -1
  138. package/standalone/revogr-order-editor2.js +2 -0
  139. package/standalone/revogr-order-editor2.js.map +1 -1
  140. package/standalone/revogr-viewport-scroll2.js +26 -8
  141. package/standalone/revogr-viewport-scroll2.js.map +1 -1
  142. package/dist/cjs/column.drag.plugin-fcd892ec.js.map +0 -1
  143. package/dist/cjs/column.service-26c61ed6.js.map +0 -1
  144. package/dist/cjs/index-3ab26ab9.js +0 -513
  145. package/dist/cjs/index-3ab26ab9.js.map +0 -1
  146. package/dist/cjs/row-header-utils-c37f76e4.js.map +0 -1
  147. package/dist/esm/column.drag.plugin-3cc77986.js.map +0 -1
  148. package/dist/esm/column.service-751345b2.js.map +0 -1
  149. package/dist/esm/index-1dcad6ef.js +0 -476
  150. package/dist/esm/index-1dcad6ef.js.map +0 -1
  151. package/dist/esm/row-header-utils-3dfbb81f.js.map +0 -1
  152. package/dist/revo-grid/column.drag.plugin-3cc77986.js +0 -5
  153. package/dist/revo-grid/column.drag.plugin-3cc77986.js.map +0 -1
  154. package/dist/revo-grid/column.service-751345b2.js +0 -5
  155. package/dist/revo-grid/column.service-751345b2.js.map +0 -1
  156. package/dist/revo-grid/index-1dcad6ef.js +0 -5
  157. package/dist/revo-grid/index-1dcad6ef.js.map +0 -1
  158. package/dist/revo-grid/key.utils-17273f42.js +0 -5
  159. package/dist/revo-grid/row-header-utils-3dfbb81f.js +0 -5
  160. package/dist/revo-grid/text-editor-901c3eb8.js +0 -5
  161. package/standalone/identity.js +0 -26
  162. package/standalone/identity.js.map +0 -1
  163. /package/dist/revo-grid/{debounce-72878ced.js.map → debounce-7b511afc.js.map} +0 -0
  164. /package/dist/revo-grid/{edit.utils-6fc686b9.js.map → edit.utils-abcd0152.js.map} +0 -0
  165. /package/dist/revo-grid/{header-cell-renderer-32d2ed96.js.map → header-cell-renderer-fce020c3.js.map} +0 -0
  166. /package/dist/revo-grid/{text-editor-901c3eb8.js.map → text-editor-fb3f24fe.js.map} +0 -0
  167. /package/dist/revo-grid/{throttle-138d69c3.js.map → throttle-1f5772ef.js.map} +0 -0
package/hydrate/index.js CHANGED
@@ -3299,29 +3299,6 @@ class FilterPanel {
3299
3299
  }; }
3300
3300
  }
3301
3301
 
3302
- const MIN_COL_SIZE = 30;
3303
- const RESIZE_INTERVAL = 40;
3304
- const DATA_COL = 'data-rgCol';
3305
- const DATA_ROW = 'data-rgRow';
3306
- const DISABLED_CLASS = 'disabled';
3307
- const CELL_CLASS = 'rgCell';
3308
- const ROW_HEADER_TYPE = 'rowHeaders';
3309
- const HEADER_CLASS = 'rgHeaderCell';
3310
- const HEADER_SORTABLE_CLASS = 'sortable';
3311
- const HEADER_ROW_CLASS = 'header-rgRow';
3312
- const HEADER_ACTUAL_ROW_CLASS = 'actual-rgRow';
3313
- const DRAG_ICON_CLASS = 'revo-drag-icon';
3314
- const DRAGGABLE_CLASS = 'revo-draggable';
3315
- const FOCUS_CLASS = 'focused-cell';
3316
- const SELECTION_BORDER_CLASS = 'selection-border-range';
3317
- const MOBILE_CLASS = 'mobile-handler';
3318
- const TMP_SELECTION_BG_CLASS = 'temp-bg-range';
3319
- const CELL_HANDLER_CLASS = 'autofill-handle';
3320
- const EDIT_INPUT_WR = 'edit-input-wrapper';
3321
- const DRAGG_TEXT = 'Draggable item';
3322
- const GRID_INTERNALS = '__rvgr';
3323
- const ROW_FOCUSED_CLASS = 'focused-rgRow';
3324
-
3325
3302
  /**
3326
3303
  * Proxy plugin for data source.
3327
3304
  * This plugin is used to sort the data source.
@@ -6314,18 +6291,13 @@ const createStore = (defaultState, shouldUpdate) => {
6314
6291
  const trimmedPlugin$1 = (store) => ({
6315
6292
  set(k, newVal) {
6316
6293
  switch (k) {
6317
- case 'trimmed':
6294
+ case 'trimmed': {
6318
6295
  const proxy = store.get('proxyItems');
6319
6296
  const trimmed = gatherTrimmedItems(newVal);
6320
- const newItems = proxy.reduce((result, v) => {
6321
- // check if present in new trimmed remove from items (filter)
6322
- if (!trimmed[v]) {
6323
- result.push(v);
6324
- }
6325
- return result;
6326
- }, []);
6297
+ const newItems = proxy.filter(v => !trimmed[v]);
6327
6298
  store.set('items', newItems);
6328
6299
  break;
6300
+ }
6329
6301
  }
6330
6302
  },
6331
6303
  });
@@ -6801,10 +6773,8 @@ function calculateDimensionData(originItemSize, newSizes = {}) {
6801
6773
  const positionIndexes = [];
6802
6774
  const positionIndexToItem = {};
6803
6775
  const indexToItem = {};
6804
- // combine all new sizes
6805
- const sizes = Object.assign({}, newSizes);
6806
6776
  // prepare order sorted new sizes and calculate changed real size
6807
- const newIndexes = Object.keys(sizes).map(Number).sort((a, b) => a - b);
6777
+ const newIndexes = Object.keys(newSizes).map(Number).sort((a, b) => a - b);
6808
6778
  // fill new coordinates based on what is changed
6809
6779
  newIndexes.reduce((previous, itemIndex, i) => {
6810
6780
  const newItem = {
@@ -6820,7 +6790,7 @@ function calculateDimensionData(originItemSize, newSizes = {}) {
6820
6790
  else {
6821
6791
  newItem.start = itemIndex * originItemSize;
6822
6792
  }
6823
- newItem.end = newItem.start + sizes[itemIndex];
6793
+ newItem.end = newItem.start + newSizes[itemIndex];
6824
6794
  positionIndexes.push(newItem.start);
6825
6795
  indexToItem[itemIndex] = positionIndexToItem[i] = newItem;
6826
6796
  return newItem;
@@ -6830,7 +6800,6 @@ function calculateDimensionData(originItemSize, newSizes = {}) {
6830
6800
  positionIndexes: [...positionIndexes],
6831
6801
  positionIndexToItem: Object.assign({}, positionIndexToItem),
6832
6802
  indexToItem,
6833
- sizes,
6834
6803
  };
6835
6804
  }
6836
6805
  /**
@@ -6891,37 +6860,6 @@ function getItemByIndex(dimension, index) {
6891
6860
  return item;
6892
6861
  }
6893
6862
 
6894
- /**
6895
- * Storing pre-calculated
6896
- * Dimension information and sizes
6897
- */
6898
- const trimmedPlugin = (store) => {
6899
- let trimmedSize = {};
6900
- const setTrimmed = (sizes, trimmed) => {
6901
- const newSize = Object.assign({}, sizes);
6902
- trimmedSize = {};
6903
- for (const [index, v] of Object.entries(trimmed)) {
6904
- const i = index;
6905
- if (v && newSize[i]) {
6906
- trimmedSize[i] = newSize[i];
6907
- delete newSize[i];
6908
- }
6909
- }
6910
- store.setDimensionSize(newSize);
6911
- };
6912
- return {
6913
- set(key, val) {
6914
- switch (key) {
6915
- case 'trimmed':
6916
- const trim = val;
6917
- const sizes = store.store.get('sizes');
6918
- // recover trimmed, apply new trim
6919
- setTrimmed(Object.assign(Object.assign({}, sizes), trimmedSize), trim);
6920
- break;
6921
- }
6922
- },
6923
- };
6924
- };
6925
6863
  /**
6926
6864
  * Plugin which recalculates realSize on changes of sizes, originItemSize and count
6927
6865
  */
@@ -6937,7 +6875,7 @@ const recalculateRealSizePlugin = (storeService) => {
6937
6875
  switch (k) {
6938
6876
  case 'count':
6939
6877
  case 'sizes':
6940
- case 'originItemSize':
6878
+ case 'originItemSize': {
6941
6879
  // recalculate realSize
6942
6880
  let realSize = 0;
6943
6881
  const count = storeService.store.get('count');
@@ -6948,19 +6886,81 @@ const recalculateRealSizePlugin = (storeService) => {
6948
6886
  }
6949
6887
  storeService.setStore({ realSize });
6950
6888
  break;
6889
+ }
6951
6890
  }
6952
6891
  },
6953
6892
  };
6954
6893
  };
6894
+
6895
+ /**
6896
+ * Plugin for trimming
6897
+ *
6898
+ * 1.a. Retrieves the previous sizes value. Saves the resulting trimmed data as a new sizes value.
6899
+ * 1.b. Stores a reference to the trimmed data to prevent further changes.
6900
+ * 2. Removes multiple and shifts the data based on the trimmed value.
6901
+ */
6902
+ const trimmedPlugin = (storeService) => {
6903
+ let trimmingObject = null;
6904
+ let trimmedPreviousSizes = null;
6905
+ return {
6906
+ set(key, val) {
6907
+ switch (key) {
6908
+ case 'sizes': {
6909
+ // prevent changes after trimming
6910
+ if (trimmingObject && trimmingObject === val) {
6911
+ trimmingObject = null;
6912
+ return;
6913
+ }
6914
+ trimmedPreviousSizes = null;
6915
+ break;
6916
+ }
6917
+ case 'trimmed': {
6918
+ const trim = val;
6919
+ if (!trimmedPreviousSizes) {
6920
+ trimmedPreviousSizes = storeService.store.get('sizes');
6921
+ }
6922
+ trimmingObject = removeMultipleAndShift(trimmedPreviousSizes, trim || {});
6923
+ // save a reference to the trimmed object to prevent changes after trimming
6924
+ storeService.setSizes(trimmingObject);
6925
+ break;
6926
+ }
6927
+ }
6928
+ },
6929
+ };
6930
+ };
6931
+ function removeMultipleAndShift(items, toRemove) {
6932
+ const newItems = {};
6933
+ const sortedIndexes = Object.keys(items || {})
6934
+ .map(Number)
6935
+ .sort((a, b) => a - b);
6936
+ const lastIndex = sortedIndexes[sortedIndexes.length - 1];
6937
+ let shift = 0;
6938
+ for (let i = 0; i <= lastIndex; i++) {
6939
+ if (toRemove[i] !== undefined) {
6940
+ shift++;
6941
+ // skip already removed
6942
+ if (items[i] !== undefined) {
6943
+ continue;
6944
+ }
6945
+ }
6946
+ if (items[i] !== undefined) {
6947
+ newItems[i - shift] = items[i];
6948
+ }
6949
+ }
6950
+ return newItems;
6951
+ }
6952
+
6953
+ /**
6954
+ * Storing pre-calculated
6955
+ * Dimension information and sizes
6956
+ */
6955
6957
  function initialBase() {
6956
6958
  return {
6957
6959
  indexes: [],
6958
6960
  count: 0,
6959
- // plugin support
6960
- trimmed: {},
6961
- // size operations, this provider stores only changed sizes, not all of them
6962
- // same as indexes but for sizes and positions
6963
- // item index to size
6961
+ // hidden items
6962
+ trimmed: null,
6963
+ // virtual item index to size
6964
6964
  sizes: {},
6965
6965
  // order in indexes[] to coordinate
6966
6966
  positionIndexToItem: {},
@@ -6980,8 +6980,14 @@ class DimensionStore {
6980
6980
  constructor(type) {
6981
6981
  this.type = type;
6982
6982
  this.store = createStore(initialState$1());
6983
- this.store.use(trimmedPlugin(this));
6984
- this.store.use(recalculateRealSizePlugin(this));
6983
+ this.store.use(trimmedPlugin({
6984
+ store: this.store,
6985
+ setSizes: this.setDimensionSize.bind(this),
6986
+ }));
6987
+ this.store.use(recalculateRealSizePlugin({
6988
+ store: this.store,
6989
+ setStore: this.setStore.bind(this),
6990
+ }));
6985
6991
  }
6986
6992
  getCurrentState() {
6987
6993
  const state = initialState$1();
@@ -7006,9 +7012,40 @@ class DimensionStore {
7006
7012
  * Generates new indexes based on sizes
7007
7013
  * @param sizes - sizes to set
7008
7014
  */
7009
- setDimensionSize(sizes) {
7015
+ setDimensionSize(sizes = {}) {
7010
7016
  const dimensionData = calculateDimensionData(this.store.get('originItemSize'), sizes);
7011
- setStore(this.store, dimensionData);
7017
+ setStore(this.store, Object.assign(Object.assign({}, dimensionData), { sizes }));
7018
+ }
7019
+ updateSizesPositionByIndexes(newItemsOrder, prevItemsOrder = []) {
7020
+ // Move custom sizes to new order
7021
+ const customSizes = Object.assign({}, this.store.get('sizes'));
7022
+ if (!Object.keys(customSizes).length) {
7023
+ return;
7024
+ }
7025
+ // Step 1: Create a map of original indices, but allow duplicates by storing arrays of indices
7026
+ const originalIndices = {};
7027
+ prevItemsOrder.forEach((physIndex, virtIndex) => {
7028
+ if (!originalIndices[physIndex]) {
7029
+ originalIndices[physIndex] = [];
7030
+ }
7031
+ originalIndices[physIndex].push(virtIndex); // Store all indices for each value
7032
+ });
7033
+ // Step 2: Create new sizes based on new item order
7034
+ const newSizes = {};
7035
+ newItemsOrder.forEach((physIndex, virtIndex) => {
7036
+ const indices = originalIndices[physIndex]; // Get all original indices for this value
7037
+ if (indices && indices.length > 0) {
7038
+ const originalIndex = indices.shift(); // Get the first available original index
7039
+ if (originalIndex !== undefined && originalIndex !== virtIndex && customSizes[originalIndex]) {
7040
+ newSizes[virtIndex] = customSizes[originalIndex];
7041
+ delete customSizes[originalIndex];
7042
+ }
7043
+ }
7044
+ });
7045
+ // Step 3: Set new sizes if there are changes
7046
+ if (Object.keys(newSizes).length) {
7047
+ this.setDimensionSize(Object.assign(Object.assign({}, customSizes), newSizes));
7048
+ }
7012
7049
  }
7013
7050
  }
7014
7051
 
@@ -7843,6 +7880,29 @@ function isRowType(type) {
7843
7880
  return rowTypes.indexOf(type) > -1;
7844
7881
  }
7845
7882
 
7883
+ const MIN_COL_SIZE = 30;
7884
+ const RESIZE_INTERVAL = 40;
7885
+ const DATA_COL = 'data-rgCol';
7886
+ const DATA_ROW = 'data-rgRow';
7887
+ const DISABLED_CLASS = 'disabled';
7888
+ const CELL_CLASS = 'rgCell';
7889
+ const ROW_HEADER_TYPE = 'rowHeaders';
7890
+ const HEADER_CLASS = 'rgHeaderCell';
7891
+ const HEADER_SORTABLE_CLASS = 'sortable';
7892
+ const HEADER_ROW_CLASS = 'header-rgRow';
7893
+ const HEADER_ACTUAL_ROW_CLASS = 'actual-rgRow';
7894
+ const DRAG_ICON_CLASS = 'revo-drag-icon';
7895
+ const DRAGGABLE_CLASS = 'revo-draggable';
7896
+ const FOCUS_CLASS = 'focused-cell';
7897
+ const SELECTION_BORDER_CLASS = 'selection-border-range';
7898
+ const MOBILE_CLASS = 'mobile-handler';
7899
+ const TMP_SELECTION_BG_CLASS = 'temp-bg-range';
7900
+ const CELL_HANDLER_CLASS = 'autofill-handle';
7901
+ const EDIT_INPUT_WR = 'edit-input-wrapper';
7902
+ const DRAGG_TEXT = 'Draggable item';
7903
+ const GRID_INTERNALS = '__rvgr';
7904
+ const ROW_FOCUSED_CLASS = 'focused-rgRow';
7905
+
7846
7906
  class RowOrderService {
7847
7907
  constructor(config) {
7848
7908
  this.config = config;
@@ -7953,6 +8013,7 @@ class OrderEditor {
7953
8013
  pos,
7954
8014
  event: e.originalEvent,
7955
8015
  rowType: this.rowType,
8016
+ model: getSourceItem(this.dataStore, pos.itemIndex),
7956
8017
  });
7957
8018
  if (dragStartEvent.defaultPrevented) {
7958
8019
  return;
@@ -10476,11 +10537,13 @@ class DimensionProvider {
10476
10537
  * @param columns - new columns data
10477
10538
  * @param disableVirtualX - disable virtual data for X axis
10478
10539
  */
10479
- applyNewColumns(columns, disableVirtualX) {
10540
+ applyNewColumns(columns, disableVirtualX, keepOld = false) {
10480
10541
  // Apply new columns to dimension provider
10481
10542
  for (let type of columnTypes) {
10482
- // Clear existing data in the dimension provider
10483
- this.stores[type].drop();
10543
+ if (!keepOld) {
10544
+ // Clear existing data in the dimension provider
10545
+ this.stores[type].drop();
10546
+ }
10484
10547
  // Get the new columns for the current type
10485
10548
  const items = columns[type];
10486
10549
  // Determine if virtual data should be disabled for the current type
@@ -10551,25 +10614,8 @@ class DimensionProvider {
10551
10614
  }
10552
10615
  updateSizesPositionByNewDataIndexes(type, newItemsOrder, prevItemsOrder = []) {
10553
10616
  // Move custom sizes to new order
10554
- const dimService = this.stores[type];
10555
- const customSizes = Object.assign({}, dimService.store.get('sizes'));
10556
- if (Object.keys(customSizes).length) {
10557
- const originalIndices = new Map();
10558
- prevItemsOrder.forEach((value, index) => {
10559
- originalIndices.set(value, index);
10560
- });
10561
- const newSizes = {};
10562
- newItemsOrder.forEach((value, newIndex) => {
10563
- const originalIndex = originalIndices.get(value);
10564
- if (originalIndex !== newIndex && customSizes[originalIndex]) {
10565
- newSizes[newIndex] = customSizes[originalIndex];
10566
- delete customSizes[originalIndex];
10567
- }
10568
- });
10569
- if (Object.keys(newSizes).length) {
10570
- this.setCustomSizes(type, Object.assign(Object.assign({}, customSizes), newSizes));
10571
- }
10572
- }
10617
+ this.stores[type].updateSizesPositionByIndexes(newItemsOrder, prevItemsOrder);
10618
+ this.updateViewport(type, true);
10573
10619
  }
10574
10620
  }
10575
10621
 
@@ -11146,6 +11192,9 @@ class FilterPlugin extends BasePlugin {
11146
11192
  }
11147
11193
  });
11148
11194
  }
11195
+ if (Object.keys(this.multiFilterItems).length === 0) {
11196
+ return;
11197
+ }
11149
11198
  await this.runFiltering(this.multiFilterItems);
11150
11199
  };
11151
11200
  this.addEventListener('headerclick', (e) => this.headerclick(e));
@@ -11684,9 +11733,8 @@ class SortingPlugin extends BasePlugin {
11684
11733
  if (beforeApplyEvent.defaultPrevented) {
11685
11734
  return;
11686
11735
  }
11687
- order = beforeApplyEvent.detail.order;
11688
- const cmp = this.getComparer(column, order);
11689
- if (additive && this.sorting) {
11736
+ const cmp = this.getComparer(beforeApplyEvent.detail.column, beforeApplyEvent.detail.order);
11737
+ if (beforeApplyEvent.detail.additive && this.sorting) {
11690
11738
  const sorting = {};
11691
11739
  const sortingFunc = {};
11692
11740
  this.sorting = Object.assign(Object.assign({}, this.sorting), sorting);
@@ -11750,11 +11798,15 @@ class SortingPlugin extends BasePlugin {
11750
11798
  // row indexes
11751
11799
  const proxyItems = storeService.store.get('proxyItems');
11752
11800
  const newItemsOrder = this.sortIndexByItems([...proxyItems], source, sortingFunc);
11753
- this.providers.dimension.updateSizesPositionByNewDataIndexes(type, newItemsOrder, proxyItems);
11801
+ // take row indexes before trim applied and proxy items
11802
+ const prevItems = storeService.store.get('items');
11754
11803
  storeService.setData({
11755
11804
  proxyItems: newItemsOrder,
11756
11805
  source: [...source],
11757
11806
  });
11807
+ // take currently visible row indexes
11808
+ const newItems = storeService.store.get('items');
11809
+ this.providers.dimension.updateSizesPositionByNewDataIndexes(type, newItems, prevItems);
11758
11810
  }
11759
11811
  }
11760
11812
  this.emit('aftersortingapply');
@@ -14128,7 +14180,7 @@ class RevoGridComponent {
14128
14180
  // Column format change will trigger column structure update
14129
14181
  this.columnChanged(this.columns);
14130
14182
  }
14131
- columnChanged(newVal = []) {
14183
+ columnChanged(newVal = [], _prevVal = undefined, __watchName = 'columns', init = false) {
14132
14184
  if (!this.dimensionProvider || !this.columnProvider) {
14133
14185
  return;
14134
14186
  }
@@ -14137,7 +14189,7 @@ class RevoGridComponent {
14137
14189
  if (beforeSetEvent.defaultPrevented) {
14138
14190
  return;
14139
14191
  }
14140
- this.dimensionProvider.applyNewColumns(beforeSetEvent.detail.columns, this.disableVirtualX);
14192
+ this.dimensionProvider.applyNewColumns(beforeSetEvent.detail.columns, this.disableVirtualX, init);
14141
14193
  const beforeApplyEvent = this.beforecolumnapplied.emit(columnGather);
14142
14194
  if (beforeApplyEvent.defaultPrevented) {
14143
14195
  return;
@@ -14426,7 +14478,7 @@ class RevoGridComponent {
14426
14478
  // set data
14427
14479
  this.applyStretch(this.stretch);
14428
14480
  this.themeChanged(this.theme, undefined, undefined, true);
14429
- this.columnChanged(this.columns);
14481
+ this.columnChanged(this.columns, undefined, undefined, true);
14430
14482
  this.dataSourceChanged(this.source, undefined, 'source');
14431
14483
  this.dataSourceChanged(this.pinnedTopSource, undefined, 'pinnedTopSource');
14432
14484
  this.dataSourceChanged(this.pinnedBottomSource, undefined, 'pinnedBottomSource');
@@ -14434,7 +14486,10 @@ class RevoGridComponent {
14434
14486
  this.trimmedRowsChanged(this.trimmedRows);
14435
14487
  }
14436
14488
  this.rowDefChanged(this.rowDefinitions);
14437
- this.groupingChanged(this.grouping);
14489
+ // init grouping
14490
+ if (this.grouping && Object.keys(this.grouping).length > 0) {
14491
+ this.groupingChanged(this.grouping);
14492
+ }
14438
14493
  // init scrolling service
14439
14494
  this.scrollingService = new GridScrollingService((e) => {
14440
14495
  var _a;
@@ -14807,6 +14862,7 @@ class RevogrData {
14807
14862
  this.beforerowrender = createEvent(this, "beforerowrender", 7);
14808
14863
  this.afterrender = createEvent(this, "afterrender", 7);
14809
14864
  this.beforeCellRender = createEvent(this, "beforecellrender", 7);
14865
+ this.beforeDataRender = createEvent(this, "beforedatarender", 7);
14810
14866
  this.dragStartCell = createEvent(this, "dragstartcell", 7);
14811
14867
  /**
14812
14868
  * Rendered rows - virtual index vs vnode
@@ -14872,7 +14928,11 @@ class RevogrData {
14872
14928
  (_b = this.rangeUnsubscribe) === null || _b === void 0 ? void 0 : _b.call(this);
14873
14929
  }
14874
14930
  async componentWillRender() {
14875
- return Promise.all(this.jobsBeforeRender);
14931
+ this.beforeDataRender.emit({
14932
+ rowType: this.type,
14933
+ colType: this.colType,
14934
+ });
14935
+ return Promise.all(this.jobsBeforeRender.map(p => typeof p === 'function' ? p() : p));
14876
14936
  }
14877
14937
  componentDidRender() {
14878
14938
  this.afterrender.emit({ type: this.type });
@@ -16215,7 +16275,8 @@ class RevogrViewportScroll {
16215
16275
  this.scrollchange.emit({ type, hasScroll });
16216
16276
  }
16217
16277
  disconnectedCallback() {
16218
- this.resizeService.destroy();
16278
+ var _a;
16279
+ (_a = this.resizeService) === null || _a === void 0 ? void 0 : _a.destroy();
16219
16280
  }
16220
16281
  async componentDidRender() {
16221
16282
  var _a, _b, _c, _d;
@@ -16243,7 +16304,7 @@ class RevogrViewportScroll {
16243
16304
  this.setScrollVisibility('rgCol', this.horizontalScroll.clientWidth, this.contentWidth);
16244
16305
  }
16245
16306
  render() {
16246
- return (hAsync(Host, { key: '5a7d07c999e59a8b96a99c87e50103acb4f18406', onWheel: this.horizontalMouseWheel, onScroll: (e) => this.applyScroll('rgCol', e) }, hAsync("div", { key: '09ac58def608c3bc169ce12e09dd2dc2df1f90a2', class: "inner-content-table", style: { width: `${this.contentWidth}px` } }, hAsync("div", { key: 'c370a3b8d5d2f4925b77020ac85d5f4d06b876e0', class: "header-wrapper", ref: e => (this.header = e) }, hAsync("slot", { key: 'c5feeeaf90e42715bbf13619b2341d23257447fb', name: HEADER_SLOT })), hAsync("div", { key: '7c04ffd6e7893db57f883a736d0a4932743863ea', class: "vertical-inner", ref: el => (this.verticalScroll = el), onWheel: this.verticalMouseWheel, onScroll: (e) => this.applyScroll('rgRow', e) }, hAsync("div", { key: 'da5db752025ddaaf626411b445b3b90b5b81cdc8', class: "content-wrapper", style: { height: `${this.contentHeight}px` } }, hAsync("slot", { key: 'c5404f4628b68b4b18a6e9143c70e72c50616f9d', name: CONTENT_SLOT }))), hAsync("div", { key: 'ee9e1b5dd297f220aed3efef4b53b4dd74a11837', class: "footer-wrapper", ref: e => (this.footer = e) }, hAsync("slot", { key: '5ff132da3009d959a6e87fbbe3d22930f322c486', name: FOOTER_SLOT })))));
16307
+ return (hAsync(Host, { key: '2bd41b077bb8baff6405cf6d071b48f22928879c', onWheel: this.horizontalMouseWheel, onScroll: (e) => this.applyScroll('rgCol', e) }, hAsync("div", { key: '84367a3fc244706e2d027f8c9e59ea3a6f8fc984', class: "inner-content-table", style: { width: `${this.contentWidth}px` } }, hAsync("div", { key: 'cbb8a1fa15139f07f9061f81e79218d00c14b8e6', class: "header-wrapper", ref: e => (this.header = e) }, hAsync("slot", { key: '521618b45cf787bcc160532d01e9e1fcdd06823b', name: HEADER_SLOT })), hAsync("div", { key: '2b381270fe97e949fb876603be364cc647ebc2d5', class: "vertical-inner", ref: el => (this.verticalScroll = el), onWheel: this.verticalMouseWheel, onScroll: (e) => this.applyScroll('rgRow', e) }, hAsync("div", { key: 'a0a13d79b5d329132421571fdf2ab7b2e36e440e', class: "content-wrapper", style: { height: `${this.contentHeight}px` } }, hAsync("slot", { key: '10279a0876aa194959da09309f914e6ce39b94fd', name: CONTENT_SLOT }))), hAsync("div", { key: '619446ea77a713a8e157ff0f1a9afd0e5dfa356f', class: "footer-wrapper", ref: e => (this.footer = e) }, hAsync("slot", { key: '43966ad2fde89f09c606173abf837672d8d4f822', name: FOOTER_SLOT })))));
16247
16308
  }
16248
16309
  /**
16249
16310
  * Extra layer for scroll event monitoring, where MouseWheel event is not passing
@@ -16286,11 +16347,18 @@ class RevogrViewportScroll {
16286
16347
  * @param e
16287
16348
  */
16288
16349
  onVerticalMouseWheel(type, delta, e) {
16289
- var _a, _b, _c, _d;
16290
- (_a = e.preventDefault) === null || _a === void 0 ? void 0 : _a.call(e);
16291
- const scrollTop = (_c = (_b = this.verticalScroll) === null || _b === void 0 ? void 0 : _b.scrollTop) !== null && _c !== void 0 ? _c : 0;
16350
+ var _a, _b, _c, _d, _e, _f, _g, _h;
16351
+ const scrollTop = (_b = (_a = this.verticalScroll) === null || _a === void 0 ? void 0 : _a.scrollTop) !== null && _b !== void 0 ? _b : 0;
16352
+ const clientHeight = (_d = (_c = this.verticalScroll) === null || _c === void 0 ? void 0 : _c.clientHeight) !== null && _d !== void 0 ? _d : 0;
16353
+ const scrollHeight = (_f = (_e = this.verticalScroll) === null || _e === void 0 ? void 0 : _e.scrollHeight) !== null && _f !== void 0 ? _f : 0;
16354
+ // Detect if the user has reached the bottom
16355
+ const atBottom = (scrollTop + clientHeight >= scrollHeight) && e.deltaY > 0;
16356
+ const atTop = scrollTop === 0 && e.deltaY < 0;
16357
+ if (!atBottom && !atTop) {
16358
+ (_g = e.preventDefault) === null || _g === void 0 ? void 0 : _g.call(e);
16359
+ }
16292
16360
  const pos = scrollTop + e[delta];
16293
- (_d = this.localScrollService) === null || _d === void 0 ? void 0 : _d.scroll(pos, type, undefined, e[delta]);
16361
+ (_h = this.localScrollService) === null || _h === void 0 ? void 0 : _h.scroll(pos, type, undefined, e[delta]);
16294
16362
  this.localScrollTimer.latestScrollUpdate(type);
16295
16363
  }
16296
16364
  /**
@@ -16301,8 +16369,18 @@ class RevogrViewportScroll {
16301
16369
  */
16302
16370
  onHorizontalMouseWheel(type, delta, e) {
16303
16371
  var _a, _b;
16304
- (_a = e.preventDefault) === null || _a === void 0 ? void 0 : _a.call(e);
16305
- const pos = this.horizontalScroll.scrollLeft + e[delta];
16372
+ if (!e.deltaX) {
16373
+ return;
16374
+ }
16375
+ const { scrollLeft, scrollWidth, clientWidth } = this.horizontalScroll;
16376
+ // Detect if the user has reached the right end
16377
+ const atRight = (scrollLeft + clientWidth >= scrollWidth) && e.deltaX > 0;
16378
+ // Detect if the user has reached the left end
16379
+ const atLeft = scrollLeft === 0 && e.deltaX < 0;
16380
+ if (!atRight && !atLeft) {
16381
+ (_a = e.preventDefault) === null || _a === void 0 ? void 0 : _a.call(e);
16382
+ }
16383
+ const pos = scrollLeft + e[delta];
16306
16384
  (_b = this.localScrollService) === null || _b === void 0 ? void 0 : _b.scroll(pos, type, undefined, e[delta]);
16307
16385
  this.localScrollTimer.latestScrollUpdate(type);
16308
16386
  }