@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.mjs CHANGED
@@ -3295,29 +3295,6 @@ class FilterPanel {
3295
3295
  }; }
3296
3296
  }
3297
3297
 
3298
- const MIN_COL_SIZE = 30;
3299
- const RESIZE_INTERVAL = 40;
3300
- const DATA_COL = 'data-rgCol';
3301
- const DATA_ROW = 'data-rgRow';
3302
- const DISABLED_CLASS = 'disabled';
3303
- const CELL_CLASS = 'rgCell';
3304
- const ROW_HEADER_TYPE = 'rowHeaders';
3305
- const HEADER_CLASS = 'rgHeaderCell';
3306
- const HEADER_SORTABLE_CLASS = 'sortable';
3307
- const HEADER_ROW_CLASS = 'header-rgRow';
3308
- const HEADER_ACTUAL_ROW_CLASS = 'actual-rgRow';
3309
- const DRAG_ICON_CLASS = 'revo-drag-icon';
3310
- const DRAGGABLE_CLASS = 'revo-draggable';
3311
- const FOCUS_CLASS = 'focused-cell';
3312
- const SELECTION_BORDER_CLASS = 'selection-border-range';
3313
- const MOBILE_CLASS = 'mobile-handler';
3314
- const TMP_SELECTION_BG_CLASS = 'temp-bg-range';
3315
- const CELL_HANDLER_CLASS = 'autofill-handle';
3316
- const EDIT_INPUT_WR = 'edit-input-wrapper';
3317
- const DRAGG_TEXT = 'Draggable item';
3318
- const GRID_INTERNALS = '__rvgr';
3319
- const ROW_FOCUSED_CLASS = 'focused-rgRow';
3320
-
3321
3298
  /**
3322
3299
  * Proxy plugin for data source.
3323
3300
  * This plugin is used to sort the data source.
@@ -6310,18 +6287,13 @@ const createStore = (defaultState, shouldUpdate) => {
6310
6287
  const trimmedPlugin$1 = (store) => ({
6311
6288
  set(k, newVal) {
6312
6289
  switch (k) {
6313
- case 'trimmed':
6290
+ case 'trimmed': {
6314
6291
  const proxy = store.get('proxyItems');
6315
6292
  const trimmed = gatherTrimmedItems(newVal);
6316
- const newItems = proxy.reduce((result, v) => {
6317
- // check if present in new trimmed remove from items (filter)
6318
- if (!trimmed[v]) {
6319
- result.push(v);
6320
- }
6321
- return result;
6322
- }, []);
6293
+ const newItems = proxy.filter(v => !trimmed[v]);
6323
6294
  store.set('items', newItems);
6324
6295
  break;
6296
+ }
6325
6297
  }
6326
6298
  },
6327
6299
  });
@@ -6797,10 +6769,8 @@ function calculateDimensionData(originItemSize, newSizes = {}) {
6797
6769
  const positionIndexes = [];
6798
6770
  const positionIndexToItem = {};
6799
6771
  const indexToItem = {};
6800
- // combine all new sizes
6801
- const sizes = Object.assign({}, newSizes);
6802
6772
  // prepare order sorted new sizes and calculate changed real size
6803
- const newIndexes = Object.keys(sizes).map(Number).sort((a, b) => a - b);
6773
+ const newIndexes = Object.keys(newSizes).map(Number).sort((a, b) => a - b);
6804
6774
  // fill new coordinates based on what is changed
6805
6775
  newIndexes.reduce((previous, itemIndex, i) => {
6806
6776
  const newItem = {
@@ -6816,7 +6786,7 @@ function calculateDimensionData(originItemSize, newSizes = {}) {
6816
6786
  else {
6817
6787
  newItem.start = itemIndex * originItemSize;
6818
6788
  }
6819
- newItem.end = newItem.start + sizes[itemIndex];
6789
+ newItem.end = newItem.start + newSizes[itemIndex];
6820
6790
  positionIndexes.push(newItem.start);
6821
6791
  indexToItem[itemIndex] = positionIndexToItem[i] = newItem;
6822
6792
  return newItem;
@@ -6826,7 +6796,6 @@ function calculateDimensionData(originItemSize, newSizes = {}) {
6826
6796
  positionIndexes: [...positionIndexes],
6827
6797
  positionIndexToItem: Object.assign({}, positionIndexToItem),
6828
6798
  indexToItem,
6829
- sizes,
6830
6799
  };
6831
6800
  }
6832
6801
  /**
@@ -6887,37 +6856,6 @@ function getItemByIndex(dimension, index) {
6887
6856
  return item;
6888
6857
  }
6889
6858
 
6890
- /**
6891
- * Storing pre-calculated
6892
- * Dimension information and sizes
6893
- */
6894
- const trimmedPlugin = (store) => {
6895
- let trimmedSize = {};
6896
- const setTrimmed = (sizes, trimmed) => {
6897
- const newSize = Object.assign({}, sizes);
6898
- trimmedSize = {};
6899
- for (const [index, v] of Object.entries(trimmed)) {
6900
- const i = index;
6901
- if (v && newSize[i]) {
6902
- trimmedSize[i] = newSize[i];
6903
- delete newSize[i];
6904
- }
6905
- }
6906
- store.setDimensionSize(newSize);
6907
- };
6908
- return {
6909
- set(key, val) {
6910
- switch (key) {
6911
- case 'trimmed':
6912
- const trim = val;
6913
- const sizes = store.store.get('sizes');
6914
- // recover trimmed, apply new trim
6915
- setTrimmed(Object.assign(Object.assign({}, sizes), trimmedSize), trim);
6916
- break;
6917
- }
6918
- },
6919
- };
6920
- };
6921
6859
  /**
6922
6860
  * Plugin which recalculates realSize on changes of sizes, originItemSize and count
6923
6861
  */
@@ -6933,7 +6871,7 @@ const recalculateRealSizePlugin = (storeService) => {
6933
6871
  switch (k) {
6934
6872
  case 'count':
6935
6873
  case 'sizes':
6936
- case 'originItemSize':
6874
+ case 'originItemSize': {
6937
6875
  // recalculate realSize
6938
6876
  let realSize = 0;
6939
6877
  const count = storeService.store.get('count');
@@ -6944,19 +6882,81 @@ const recalculateRealSizePlugin = (storeService) => {
6944
6882
  }
6945
6883
  storeService.setStore({ realSize });
6946
6884
  break;
6885
+ }
6947
6886
  }
6948
6887
  },
6949
6888
  };
6950
6889
  };
6890
+
6891
+ /**
6892
+ * Plugin for trimming
6893
+ *
6894
+ * 1.a. Retrieves the previous sizes value. Saves the resulting trimmed data as a new sizes value.
6895
+ * 1.b. Stores a reference to the trimmed data to prevent further changes.
6896
+ * 2. Removes multiple and shifts the data based on the trimmed value.
6897
+ */
6898
+ const trimmedPlugin = (storeService) => {
6899
+ let trimmingObject = null;
6900
+ let trimmedPreviousSizes = null;
6901
+ return {
6902
+ set(key, val) {
6903
+ switch (key) {
6904
+ case 'sizes': {
6905
+ // prevent changes after trimming
6906
+ if (trimmingObject && trimmingObject === val) {
6907
+ trimmingObject = null;
6908
+ return;
6909
+ }
6910
+ trimmedPreviousSizes = null;
6911
+ break;
6912
+ }
6913
+ case 'trimmed': {
6914
+ const trim = val;
6915
+ if (!trimmedPreviousSizes) {
6916
+ trimmedPreviousSizes = storeService.store.get('sizes');
6917
+ }
6918
+ trimmingObject = removeMultipleAndShift(trimmedPreviousSizes, trim || {});
6919
+ // save a reference to the trimmed object to prevent changes after trimming
6920
+ storeService.setSizes(trimmingObject);
6921
+ break;
6922
+ }
6923
+ }
6924
+ },
6925
+ };
6926
+ };
6927
+ function removeMultipleAndShift(items, toRemove) {
6928
+ const newItems = {};
6929
+ const sortedIndexes = Object.keys(items || {})
6930
+ .map(Number)
6931
+ .sort((a, b) => a - b);
6932
+ const lastIndex = sortedIndexes[sortedIndexes.length - 1];
6933
+ let shift = 0;
6934
+ for (let i = 0; i <= lastIndex; i++) {
6935
+ if (toRemove[i] !== undefined) {
6936
+ shift++;
6937
+ // skip already removed
6938
+ if (items[i] !== undefined) {
6939
+ continue;
6940
+ }
6941
+ }
6942
+ if (items[i] !== undefined) {
6943
+ newItems[i - shift] = items[i];
6944
+ }
6945
+ }
6946
+ return newItems;
6947
+ }
6948
+
6949
+ /**
6950
+ * Storing pre-calculated
6951
+ * Dimension information and sizes
6952
+ */
6951
6953
  function initialBase() {
6952
6954
  return {
6953
6955
  indexes: [],
6954
6956
  count: 0,
6955
- // plugin support
6956
- trimmed: {},
6957
- // size operations, this provider stores only changed sizes, not all of them
6958
- // same as indexes but for sizes and positions
6959
- // item index to size
6957
+ // hidden items
6958
+ trimmed: null,
6959
+ // virtual item index to size
6960
6960
  sizes: {},
6961
6961
  // order in indexes[] to coordinate
6962
6962
  positionIndexToItem: {},
@@ -6976,8 +6976,14 @@ class DimensionStore {
6976
6976
  constructor(type) {
6977
6977
  this.type = type;
6978
6978
  this.store = createStore(initialState$1());
6979
- this.store.use(trimmedPlugin(this));
6980
- this.store.use(recalculateRealSizePlugin(this));
6979
+ this.store.use(trimmedPlugin({
6980
+ store: this.store,
6981
+ setSizes: this.setDimensionSize.bind(this),
6982
+ }));
6983
+ this.store.use(recalculateRealSizePlugin({
6984
+ store: this.store,
6985
+ setStore: this.setStore.bind(this),
6986
+ }));
6981
6987
  }
6982
6988
  getCurrentState() {
6983
6989
  const state = initialState$1();
@@ -7002,9 +7008,40 @@ class DimensionStore {
7002
7008
  * Generates new indexes based on sizes
7003
7009
  * @param sizes - sizes to set
7004
7010
  */
7005
- setDimensionSize(sizes) {
7011
+ setDimensionSize(sizes = {}) {
7006
7012
  const dimensionData = calculateDimensionData(this.store.get('originItemSize'), sizes);
7007
- setStore(this.store, dimensionData);
7013
+ setStore(this.store, Object.assign(Object.assign({}, dimensionData), { sizes }));
7014
+ }
7015
+ updateSizesPositionByIndexes(newItemsOrder, prevItemsOrder = []) {
7016
+ // Move custom sizes to new order
7017
+ const customSizes = Object.assign({}, this.store.get('sizes'));
7018
+ if (!Object.keys(customSizes).length) {
7019
+ return;
7020
+ }
7021
+ // Step 1: Create a map of original indices, but allow duplicates by storing arrays of indices
7022
+ const originalIndices = {};
7023
+ prevItemsOrder.forEach((physIndex, virtIndex) => {
7024
+ if (!originalIndices[physIndex]) {
7025
+ originalIndices[physIndex] = [];
7026
+ }
7027
+ originalIndices[physIndex].push(virtIndex); // Store all indices for each value
7028
+ });
7029
+ // Step 2: Create new sizes based on new item order
7030
+ const newSizes = {};
7031
+ newItemsOrder.forEach((physIndex, virtIndex) => {
7032
+ const indices = originalIndices[physIndex]; // Get all original indices for this value
7033
+ if (indices && indices.length > 0) {
7034
+ const originalIndex = indices.shift(); // Get the first available original index
7035
+ if (originalIndex !== undefined && originalIndex !== virtIndex && customSizes[originalIndex]) {
7036
+ newSizes[virtIndex] = customSizes[originalIndex];
7037
+ delete customSizes[originalIndex];
7038
+ }
7039
+ }
7040
+ });
7041
+ // Step 3: Set new sizes if there are changes
7042
+ if (Object.keys(newSizes).length) {
7043
+ this.setDimensionSize(Object.assign(Object.assign({}, customSizes), newSizes));
7044
+ }
7008
7045
  }
7009
7046
  }
7010
7047
 
@@ -7839,6 +7876,29 @@ function isRowType(type) {
7839
7876
  return rowTypes.indexOf(type) > -1;
7840
7877
  }
7841
7878
 
7879
+ const MIN_COL_SIZE = 30;
7880
+ const RESIZE_INTERVAL = 40;
7881
+ const DATA_COL = 'data-rgCol';
7882
+ const DATA_ROW = 'data-rgRow';
7883
+ const DISABLED_CLASS = 'disabled';
7884
+ const CELL_CLASS = 'rgCell';
7885
+ const ROW_HEADER_TYPE = 'rowHeaders';
7886
+ const HEADER_CLASS = 'rgHeaderCell';
7887
+ const HEADER_SORTABLE_CLASS = 'sortable';
7888
+ const HEADER_ROW_CLASS = 'header-rgRow';
7889
+ const HEADER_ACTUAL_ROW_CLASS = 'actual-rgRow';
7890
+ const DRAG_ICON_CLASS = 'revo-drag-icon';
7891
+ const DRAGGABLE_CLASS = 'revo-draggable';
7892
+ const FOCUS_CLASS = 'focused-cell';
7893
+ const SELECTION_BORDER_CLASS = 'selection-border-range';
7894
+ const MOBILE_CLASS = 'mobile-handler';
7895
+ const TMP_SELECTION_BG_CLASS = 'temp-bg-range';
7896
+ const CELL_HANDLER_CLASS = 'autofill-handle';
7897
+ const EDIT_INPUT_WR = 'edit-input-wrapper';
7898
+ const DRAGG_TEXT = 'Draggable item';
7899
+ const GRID_INTERNALS = '__rvgr';
7900
+ const ROW_FOCUSED_CLASS = 'focused-rgRow';
7901
+
7842
7902
  class RowOrderService {
7843
7903
  constructor(config) {
7844
7904
  this.config = config;
@@ -7949,6 +8009,7 @@ class OrderEditor {
7949
8009
  pos,
7950
8010
  event: e.originalEvent,
7951
8011
  rowType: this.rowType,
8012
+ model: getSourceItem(this.dataStore, pos.itemIndex),
7952
8013
  });
7953
8014
  if (dragStartEvent.defaultPrevented) {
7954
8015
  return;
@@ -10472,11 +10533,13 @@ class DimensionProvider {
10472
10533
  * @param columns - new columns data
10473
10534
  * @param disableVirtualX - disable virtual data for X axis
10474
10535
  */
10475
- applyNewColumns(columns, disableVirtualX) {
10536
+ applyNewColumns(columns, disableVirtualX, keepOld = false) {
10476
10537
  // Apply new columns to dimension provider
10477
10538
  for (let type of columnTypes) {
10478
- // Clear existing data in the dimension provider
10479
- this.stores[type].drop();
10539
+ if (!keepOld) {
10540
+ // Clear existing data in the dimension provider
10541
+ this.stores[type].drop();
10542
+ }
10480
10543
  // Get the new columns for the current type
10481
10544
  const items = columns[type];
10482
10545
  // Determine if virtual data should be disabled for the current type
@@ -10547,25 +10610,8 @@ class DimensionProvider {
10547
10610
  }
10548
10611
  updateSizesPositionByNewDataIndexes(type, newItemsOrder, prevItemsOrder = []) {
10549
10612
  // Move custom sizes to new order
10550
- const dimService = this.stores[type];
10551
- const customSizes = Object.assign({}, dimService.store.get('sizes'));
10552
- if (Object.keys(customSizes).length) {
10553
- const originalIndices = new Map();
10554
- prevItemsOrder.forEach((value, index) => {
10555
- originalIndices.set(value, index);
10556
- });
10557
- const newSizes = {};
10558
- newItemsOrder.forEach((value, newIndex) => {
10559
- const originalIndex = originalIndices.get(value);
10560
- if (originalIndex !== newIndex && customSizes[originalIndex]) {
10561
- newSizes[newIndex] = customSizes[originalIndex];
10562
- delete customSizes[originalIndex];
10563
- }
10564
- });
10565
- if (Object.keys(newSizes).length) {
10566
- this.setCustomSizes(type, Object.assign(Object.assign({}, customSizes), newSizes));
10567
- }
10568
- }
10613
+ this.stores[type].updateSizesPositionByIndexes(newItemsOrder, prevItemsOrder);
10614
+ this.updateViewport(type, true);
10569
10615
  }
10570
10616
  }
10571
10617
 
@@ -11142,6 +11188,9 @@ class FilterPlugin extends BasePlugin {
11142
11188
  }
11143
11189
  });
11144
11190
  }
11191
+ if (Object.keys(this.multiFilterItems).length === 0) {
11192
+ return;
11193
+ }
11145
11194
  await this.runFiltering(this.multiFilterItems);
11146
11195
  };
11147
11196
  this.addEventListener('headerclick', (e) => this.headerclick(e));
@@ -11680,9 +11729,8 @@ class SortingPlugin extends BasePlugin {
11680
11729
  if (beforeApplyEvent.defaultPrevented) {
11681
11730
  return;
11682
11731
  }
11683
- order = beforeApplyEvent.detail.order;
11684
- const cmp = this.getComparer(column, order);
11685
- if (additive && this.sorting) {
11732
+ const cmp = this.getComparer(beforeApplyEvent.detail.column, beforeApplyEvent.detail.order);
11733
+ if (beforeApplyEvent.detail.additive && this.sorting) {
11686
11734
  const sorting = {};
11687
11735
  const sortingFunc = {};
11688
11736
  this.sorting = Object.assign(Object.assign({}, this.sorting), sorting);
@@ -11746,11 +11794,15 @@ class SortingPlugin extends BasePlugin {
11746
11794
  // row indexes
11747
11795
  const proxyItems = storeService.store.get('proxyItems');
11748
11796
  const newItemsOrder = this.sortIndexByItems([...proxyItems], source, sortingFunc);
11749
- this.providers.dimension.updateSizesPositionByNewDataIndexes(type, newItemsOrder, proxyItems);
11797
+ // take row indexes before trim applied and proxy items
11798
+ const prevItems = storeService.store.get('items');
11750
11799
  storeService.setData({
11751
11800
  proxyItems: newItemsOrder,
11752
11801
  source: [...source],
11753
11802
  });
11803
+ // take currently visible row indexes
11804
+ const newItems = storeService.store.get('items');
11805
+ this.providers.dimension.updateSizesPositionByNewDataIndexes(type, newItems, prevItems);
11754
11806
  }
11755
11807
  }
11756
11808
  this.emit('aftersortingapply');
@@ -14124,7 +14176,7 @@ class RevoGridComponent {
14124
14176
  // Column format change will trigger column structure update
14125
14177
  this.columnChanged(this.columns);
14126
14178
  }
14127
- columnChanged(newVal = []) {
14179
+ columnChanged(newVal = [], _prevVal = undefined, __watchName = 'columns', init = false) {
14128
14180
  if (!this.dimensionProvider || !this.columnProvider) {
14129
14181
  return;
14130
14182
  }
@@ -14133,7 +14185,7 @@ class RevoGridComponent {
14133
14185
  if (beforeSetEvent.defaultPrevented) {
14134
14186
  return;
14135
14187
  }
14136
- this.dimensionProvider.applyNewColumns(beforeSetEvent.detail.columns, this.disableVirtualX);
14188
+ this.dimensionProvider.applyNewColumns(beforeSetEvent.detail.columns, this.disableVirtualX, init);
14137
14189
  const beforeApplyEvent = this.beforecolumnapplied.emit(columnGather);
14138
14190
  if (beforeApplyEvent.defaultPrevented) {
14139
14191
  return;
@@ -14422,7 +14474,7 @@ class RevoGridComponent {
14422
14474
  // set data
14423
14475
  this.applyStretch(this.stretch);
14424
14476
  this.themeChanged(this.theme, undefined, undefined, true);
14425
- this.columnChanged(this.columns);
14477
+ this.columnChanged(this.columns, undefined, undefined, true);
14426
14478
  this.dataSourceChanged(this.source, undefined, 'source');
14427
14479
  this.dataSourceChanged(this.pinnedTopSource, undefined, 'pinnedTopSource');
14428
14480
  this.dataSourceChanged(this.pinnedBottomSource, undefined, 'pinnedBottomSource');
@@ -14430,7 +14482,10 @@ class RevoGridComponent {
14430
14482
  this.trimmedRowsChanged(this.trimmedRows);
14431
14483
  }
14432
14484
  this.rowDefChanged(this.rowDefinitions);
14433
- this.groupingChanged(this.grouping);
14485
+ // init grouping
14486
+ if (this.grouping && Object.keys(this.grouping).length > 0) {
14487
+ this.groupingChanged(this.grouping);
14488
+ }
14434
14489
  // init scrolling service
14435
14490
  this.scrollingService = new GridScrollingService((e) => {
14436
14491
  var _a;
@@ -14803,6 +14858,7 @@ class RevogrData {
14803
14858
  this.beforerowrender = createEvent(this, "beforerowrender", 7);
14804
14859
  this.afterrender = createEvent(this, "afterrender", 7);
14805
14860
  this.beforeCellRender = createEvent(this, "beforecellrender", 7);
14861
+ this.beforeDataRender = createEvent(this, "beforedatarender", 7);
14806
14862
  this.dragStartCell = createEvent(this, "dragstartcell", 7);
14807
14863
  /**
14808
14864
  * Rendered rows - virtual index vs vnode
@@ -14868,7 +14924,11 @@ class RevogrData {
14868
14924
  (_b = this.rangeUnsubscribe) === null || _b === void 0 ? void 0 : _b.call(this);
14869
14925
  }
14870
14926
  async componentWillRender() {
14871
- return Promise.all(this.jobsBeforeRender);
14927
+ this.beforeDataRender.emit({
14928
+ rowType: this.type,
14929
+ colType: this.colType,
14930
+ });
14931
+ return Promise.all(this.jobsBeforeRender.map(p => typeof p === 'function' ? p() : p));
14872
14932
  }
14873
14933
  componentDidRender() {
14874
14934
  this.afterrender.emit({ type: this.type });
@@ -16211,7 +16271,8 @@ class RevogrViewportScroll {
16211
16271
  this.scrollchange.emit({ type, hasScroll });
16212
16272
  }
16213
16273
  disconnectedCallback() {
16214
- this.resizeService.destroy();
16274
+ var _a;
16275
+ (_a = this.resizeService) === null || _a === void 0 ? void 0 : _a.destroy();
16215
16276
  }
16216
16277
  async componentDidRender() {
16217
16278
  var _a, _b, _c, _d;
@@ -16239,7 +16300,7 @@ class RevogrViewportScroll {
16239
16300
  this.setScrollVisibility('rgCol', this.horizontalScroll.clientWidth, this.contentWidth);
16240
16301
  }
16241
16302
  render() {
16242
- 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 })))));
16303
+ 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 })))));
16243
16304
  }
16244
16305
  /**
16245
16306
  * Extra layer for scroll event monitoring, where MouseWheel event is not passing
@@ -16282,11 +16343,18 @@ class RevogrViewportScroll {
16282
16343
  * @param e
16283
16344
  */
16284
16345
  onVerticalMouseWheel(type, delta, e) {
16285
- var _a, _b, _c, _d;
16286
- (_a = e.preventDefault) === null || _a === void 0 ? void 0 : _a.call(e);
16287
- const scrollTop = (_c = (_b = this.verticalScroll) === null || _b === void 0 ? void 0 : _b.scrollTop) !== null && _c !== void 0 ? _c : 0;
16346
+ var _a, _b, _c, _d, _e, _f, _g, _h;
16347
+ const scrollTop = (_b = (_a = this.verticalScroll) === null || _a === void 0 ? void 0 : _a.scrollTop) !== null && _b !== void 0 ? _b : 0;
16348
+ const clientHeight = (_d = (_c = this.verticalScroll) === null || _c === void 0 ? void 0 : _c.clientHeight) !== null && _d !== void 0 ? _d : 0;
16349
+ const scrollHeight = (_f = (_e = this.verticalScroll) === null || _e === void 0 ? void 0 : _e.scrollHeight) !== null && _f !== void 0 ? _f : 0;
16350
+ // Detect if the user has reached the bottom
16351
+ const atBottom = (scrollTop + clientHeight >= scrollHeight) && e.deltaY > 0;
16352
+ const atTop = scrollTop === 0 && e.deltaY < 0;
16353
+ if (!atBottom && !atTop) {
16354
+ (_g = e.preventDefault) === null || _g === void 0 ? void 0 : _g.call(e);
16355
+ }
16288
16356
  const pos = scrollTop + e[delta];
16289
- (_d = this.localScrollService) === null || _d === void 0 ? void 0 : _d.scroll(pos, type, undefined, e[delta]);
16357
+ (_h = this.localScrollService) === null || _h === void 0 ? void 0 : _h.scroll(pos, type, undefined, e[delta]);
16290
16358
  this.localScrollTimer.latestScrollUpdate(type);
16291
16359
  }
16292
16360
  /**
@@ -16297,8 +16365,18 @@ class RevogrViewportScroll {
16297
16365
  */
16298
16366
  onHorizontalMouseWheel(type, delta, e) {
16299
16367
  var _a, _b;
16300
- (_a = e.preventDefault) === null || _a === void 0 ? void 0 : _a.call(e);
16301
- const pos = this.horizontalScroll.scrollLeft + e[delta];
16368
+ if (!e.deltaX) {
16369
+ return;
16370
+ }
16371
+ const { scrollLeft, scrollWidth, clientWidth } = this.horizontalScroll;
16372
+ // Detect if the user has reached the right end
16373
+ const atRight = (scrollLeft + clientWidth >= scrollWidth) && e.deltaX > 0;
16374
+ // Detect if the user has reached the left end
16375
+ const atLeft = scrollLeft === 0 && e.deltaX < 0;
16376
+ if (!atRight && !atLeft) {
16377
+ (_a = e.preventDefault) === null || _a === void 0 ? void 0 : _a.call(e);
16378
+ }
16379
+ const pos = scrollLeft + e[delta];
16302
16380
  (_b = this.localScrollService) === null || _b === void 0 ? void 0 : _b.scroll(pos, type, undefined, e[delta]);
16303
16381
  this.localScrollTimer.latestScrollUpdate(type);
16304
16382
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@revolist/revogrid",
3
- "version": "4.9.41",
3
+ "version": "4.10.1",
4
4
  "type": "module",
5
5
  "description": "Virtual reactive data grid spreadsheet component - RevoGrid.",
6
6
  "license": "MIT",
@@ -1,7 +1,7 @@
1
1
  /*!
2
2
  * Built by Revolist OU ❤️
3
3
  */
4
- import { x as keys, o as isArrayLike, w as baseIteratee, k as isArray, j as createStore, i as setStore, m as isIterateeCall, l as toInteger, a as getVisibleSourceItem, b as getSourceItem } from './data.store.js';
4
+ import { y as keys, q as isArrayLike, x as baseIteratee, l as isArray, j as createStore, i as setStore, n as isIterateeCall, m as toInteger, a as getVisibleSourceItem, b as getSourceItem } from './data.store.js';
5
5
  import '@stencil/core/internal/client';
6
6
  import { G as GRID_INTERNALS, C as CELL_CLASS, b as DISABLED_CLASS } from './consts.js';
7
7
  import './platform.js';
@@ -2,7 +2,6 @@
2
2
  * Built by Revolist OU ❤️
3
3
  */
4
4
  import { a as isObject, b as baseGetTag, r as root, S as Symbol, i as isObjectLike, f as freeGlobal, c as isSymbol, t as toNumber } from './toNumber.js';
5
- import { i as identity } from './identity.js';
6
5
  import { getRenderingRef, forceUpdate } from '@stencil/core/internal/client';
7
6
 
8
7
  /**
@@ -2460,6 +2459,26 @@ function baseMatchesProperty(path, srcValue) {
2460
2459
  };
2461
2460
  }
2462
2461
 
2462
+ /**
2463
+ * This method returns the first argument it receives.
2464
+ *
2465
+ * @static
2466
+ * @since 0.1.0
2467
+ * @memberOf _
2468
+ * @category Util
2469
+ * @param {*} value Any value.
2470
+ * @returns {*} Returns `value`.
2471
+ * @example
2472
+ *
2473
+ * var object = { 'a': 1 };
2474
+ *
2475
+ * console.log(_.identity(object) === object);
2476
+ * // => true
2477
+ */
2478
+ function identity(value) {
2479
+ return value;
2480
+ }
2481
+
2463
2482
  /**
2464
2483
  * The base implementation of `_.property` without support for deep paths.
2465
2484
  *
@@ -2977,18 +2996,13 @@ const createStore = (defaultState, shouldUpdate) => {
2977
2996
  const trimmedPlugin = (store) => ({
2978
2997
  set(k, newVal) {
2979
2998
  switch (k) {
2980
- case 'trimmed':
2999
+ case 'trimmed': {
2981
3000
  const proxy = store.get('proxyItems');
2982
3001
  const trimmed = gatherTrimmedItems(newVal);
2983
- const newItems = proxy.reduce((result, v) => {
2984
- // check if present in new trimmed remove from items (filter)
2985
- if (!trimmed[v]) {
2986
- result.push(v);
2987
- }
2988
- return result;
2989
- }, []);
3002
+ const newItems = proxy.filter(v => !trimmed[v]);
2990
3003
  store.set('items', newItems);
2991
3004
  break;
3005
+ }
2992
3006
  }
2993
3007
  },
2994
3008
  });
@@ -3150,6 +3164,6 @@ function getSourceItemVirtualIndexByProp(store, prop) {
3150
3164
  return items.indexOf(physicalIndex);
3151
3165
  }
3152
3166
 
3153
- export { DataStore as D, getVisibleSourceItem as a, getSourceItem as b, getSourcePhysicalIndex as c, setSourceByPhysicalIndex as d, setItems as e, getSourceItemVirtualIndexByProp as f, getPhysical as g, gatherTrimmedItems as h, setStore as i, createStore as j, isArray$1 as k, toInteger as l, isIterateeCall as m, baseProperty as n, isArrayLike as o, proxyPlugin as p, getTag$1 as q, baseKeys as r, setSourceByVirtualIndex as s, trimmedPlugin as t, findIndex as u, getNative as v, baseIteratee as w, keys as x };
3167
+ export { DataStore as D, getVisibleSourceItem as a, getSourceItem as b, getSourcePhysicalIndex as c, setSourceByPhysicalIndex as d, setItems as e, getSourceItemVirtualIndexByProp as f, getPhysical as g, gatherTrimmedItems as h, setStore as i, createStore as j, identity as k, isArray$1 as l, toInteger as m, isIterateeCall as n, baseProperty as o, proxyPlugin as p, isArrayLike as q, getTag$1 as r, setSourceByVirtualIndex as s, trimmedPlugin as t, baseKeys as u, findIndex as v, getNative as w, baseIteratee as x, keys as y };
3154
3168
 
3155
3169
  //# sourceMappingURL=data.store.js.map