@revolist/revogrid 4.22.1 → 4.23.0

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 (120) hide show
  1. package/dist/cjs/{cell-renderer-BQdEGQXP.js → cell-renderer-DWJ9Px9f.js} +9 -3
  2. package/dist/cjs/{column.drag.plugin-RDjQhKCH.js → column.drag.plugin-CaEBDG-Q.js} +391 -256
  3. package/dist/cjs/{column.service-DXYMehqK.js → column.service-f612L4ql.js} +1 -1
  4. package/dist/cjs/{dimension.helpers-CiiNnlLa.js → dimension.helpers-B9HgANnM.js} +14 -145
  5. package/dist/cjs/{edit.utils-CecCfA4E.js → edit.utils-pKeiYFLJ.js} +1 -1
  6. package/dist/cjs/{header-cell-renderer-DGyBrK8I.js → header-cell-renderer-4yq9_WbM.js} +1 -1
  7. package/dist/cjs/index-DxaSE5uZ.js +136 -0
  8. package/dist/cjs/index.cjs.js +37 -32
  9. package/dist/cjs/revo-grid.cjs.entry.js +35 -15
  10. package/dist/cjs/revogr-attribution_7.cjs.entry.js +43 -25
  11. package/dist/cjs/revogr-clipboard_3.cjs.entry.js +10 -8
  12. package/dist/cjs/revogr-data_4.cjs.entry.js +26 -17
  13. package/dist/cjs/revogr-filter-panel.cjs.entry.js +2 -1
  14. package/dist/cjs/{text-editor-DnLZW1a-.js → text-editor-B4W-m-r-.js} +3 -3
  15. package/dist/cjs/{throttle-CfgQFkfR.js → throttle-BCwEuJJq.js} +59 -24
  16. package/dist/cjs/viewport.helpers-BND76K2j.js +140 -0
  17. package/dist/cjs/{viewport.store-q6YdR9mg.js → viewport.store-BlKQ4x9H.js} +16 -16
  18. package/dist/collection/components/data/revogr-data.js +5 -3
  19. package/dist/collection/components/header/header-group-renderer.js +1 -1
  20. package/dist/collection/components/header/header-renderer.js +1 -1
  21. package/dist/collection/components/header/revogr-header-style.css +13 -3
  22. package/dist/collection/components/header/revogr-header.js +5 -2
  23. package/dist/collection/components/order/order-row.service.js +6 -5
  24. package/dist/collection/components/overlay/keyboard.service.js +23 -1
  25. package/dist/collection/components/overlay/selection.utils.js +8 -6
  26. package/dist/collection/components/revoGrid/revo-grid.js +6 -5
  27. package/dist/collection/components/revoGrid/viewport.service.js +2 -1
  28. package/dist/collection/components/scroll/revogr-viewport-scroll.js +10 -6
  29. package/dist/collection/components/scrollable/revogr-scroll-virtual.js +4 -10
  30. package/dist/collection/plugins/filter/filter.panel.js +2 -1
  31. package/dist/collection/plugins/filter/filter.plugin.js +11 -4
  32. package/dist/collection/plugins/groupingRow/grouping.row.plugin.js +25 -1
  33. package/dist/collection/plugins/moveColumn/column.drag.plugin.js +4 -4
  34. package/dist/collection/plugins/sorting/sorting.func.js +173 -15
  35. package/dist/collection/plugins/sorting/sorting.plugin.js +167 -84
  36. package/dist/collection/plugins/sorting/sorting.sign.js +7 -1
  37. package/dist/collection/serve/controller.js +98 -37
  38. package/dist/collection/serve/data.js +273 -144
  39. package/dist/collection/services/dimension.provider.js +16 -1
  40. package/dist/collection/services/local.scroll.service.js +59 -24
  41. package/dist/collection/services/scroll.dimension.helpers.js +83 -0
  42. package/dist/collection/services/selection.store.connector.js +4 -1
  43. package/dist/collection/store/dimension/dimension.recalculate.plugin.js +22 -9
  44. package/dist/collection/store/dimension/dimension.store.js +4 -2
  45. package/dist/collection/store/vp/viewport.helpers.js +9 -0
  46. package/dist/collection/store/vp/viewport.store.js +5 -16
  47. package/dist/collection/utils/store.utils.js +3 -3
  48. package/dist/{revo-grid/cell-renderer-CALsEsnh.js → esm/cell-renderer-8UiGd-s7.js} +9 -3
  49. package/dist/esm/{column.drag.plugin-Dy5ztusn.js → column.drag.plugin-BsfhsfmB.js} +388 -255
  50. package/dist/esm/{column.service-CCvAi5l4.js → column.service-DbpulTog.js} +1 -1
  51. package/dist/{revo-grid/debounce-BfO9dz9v.js → esm/debounce-PCRWZliA.js} +1 -1
  52. package/dist/{revo-grid/dimension.helpers-DmIvjIa7.js → esm/dimension.helpers-CGKwSvw6.js} +7 -128
  53. package/dist/esm/{edit.utils-DYN6XZh8.js → edit.utils-Dnnbd0xG.js} +1 -1
  54. package/dist/{revo-grid/header-cell-renderer-DU8wKAbg.js → esm/header-cell-renderer-DGI2FAD8.js} +1 -1
  55. package/dist/esm/index-Db3qZoW5.js +127 -0
  56. package/dist/esm/index.js +11 -10
  57. package/dist/esm/revo-grid.entry.js +34 -14
  58. package/dist/esm/revogr-attribution_7.entry.js +42 -24
  59. package/dist/esm/revogr-clipboard_3.entry.js +11 -9
  60. package/dist/esm/revogr-data_4.entry.js +27 -18
  61. package/dist/esm/revogr-filter-panel.entry.js +3 -2
  62. package/dist/esm/{text-editor-DpCnd6Fq.js → text-editor-C3RUSwH5.js} +2 -2
  63. package/dist/esm/{throttle-ERvyruXb.js → throttle-CaUDyxyU.js} +60 -25
  64. package/dist/esm/viewport.helpers-CoCAvmZs.js +133 -0
  65. package/dist/{revo-grid/viewport.store-CFjDW-3l.js → esm/viewport.store-COAfzAyu.js} +15 -17
  66. package/dist/{esm/cell-renderer-CALsEsnh.js → revo-grid/cell-renderer-8UiGd-s7.js} +9 -3
  67. package/dist/revo-grid/{column.drag.plugin-Dy5ztusn.js → column.drag.plugin-BsfhsfmB.js} +388 -255
  68. package/dist/revo-grid/{column.service-CCvAi5l4.js → column.service-DbpulTog.js} +1 -1
  69. package/dist/{esm/debounce-BfO9dz9v.js → revo-grid/debounce-PCRWZliA.js} +1 -1
  70. package/dist/{esm/dimension.helpers-DmIvjIa7.js → revo-grid/dimension.helpers-CGKwSvw6.js} +7 -128
  71. package/dist/revo-grid/{edit.utils-DYN6XZh8.js → edit.utils-Dnnbd0xG.js} +1 -1
  72. package/dist/{esm/header-cell-renderer-DU8wKAbg.js → revo-grid/header-cell-renderer-DGI2FAD8.js} +1 -1
  73. package/dist/revo-grid/index-Db3qZoW5.js +127 -0
  74. package/dist/revo-grid/index.esm.js +11 -10
  75. package/dist/revo-grid/revo-grid.entry.js +34 -14
  76. package/dist/revo-grid/revogr-attribution_7.entry.js +42 -24
  77. package/dist/revo-grid/revogr-clipboard_3.entry.js +11 -9
  78. package/dist/revo-grid/revogr-data_4.entry.js +27 -18
  79. package/dist/revo-grid/revogr-filter-panel.entry.js +3 -2
  80. package/dist/revo-grid/{text-editor-DpCnd6Fq.js → text-editor-C3RUSwH5.js} +2 -2
  81. package/dist/revo-grid/{throttle-ERvyruXb.js → throttle-CaUDyxyU.js} +60 -25
  82. package/dist/revo-grid/viewport.helpers-CoCAvmZs.js +133 -0
  83. package/dist/{esm/viewport.store-CFjDW-3l.js → revo-grid/viewport.store-COAfzAyu.js} +15 -17
  84. package/dist/types/components/header/header-group-renderer.d.ts +1 -0
  85. package/dist/types/components/header/header-renderer.d.ts +1 -0
  86. package/dist/types/components/overlay/keyboard.service.d.ts +5 -0
  87. package/dist/types/plugins/groupingRow/grouping.row.plugin.d.ts +8 -0
  88. package/dist/types/plugins/sorting/sorting.func.d.ts +25 -2
  89. package/dist/types/plugins/sorting/sorting.plugin.d.ts +84 -9
  90. package/dist/types/plugins/sorting/sorting.sign.d.ts +5 -1
  91. package/dist/types/plugins/sorting/sorting.types.d.ts +46 -1
  92. package/dist/types/services/local.scroll.service.d.ts +10 -2
  93. package/dist/types/services/scroll.dimension.helpers.d.ts +20 -0
  94. package/dist/types/store/vp/viewport.helpers.d.ts +2 -0
  95. package/dist/types/types/interfaces.d.ts +11 -0
  96. package/hydrate/index.js +649 -365
  97. package/hydrate/index.mjs +649 -365
  98. package/package.json +1 -1
  99. package/standalone/column.service.js +1 -1
  100. package/standalone/data.store.js +1 -1
  101. package/standalone/debounce.js +1 -1
  102. package/standalone/dimension.helpers.js +1 -1
  103. package/standalone/index.js +1 -1
  104. package/standalone/local.scroll.timer.js +1 -1
  105. package/standalone/revo-grid.js +1 -1
  106. package/standalone/revogr-data2.js +1 -1
  107. package/standalone/revogr-filter-panel.js +1 -1
  108. package/standalone/revogr-header2.js +1 -1
  109. package/standalone/revogr-order-editor2.js +1 -1
  110. package/standalone/revogr-overlay-selection2.js +1 -1
  111. package/standalone/revogr-row-headers.js +1 -1
  112. package/standalone/revogr-row-headers2.js +1 -1
  113. package/standalone/revogr-scroll-virtual2.js +1 -1
  114. package/standalone/revogr-viewport-scroll2.js +1 -1
  115. package/standalone/selection.utils.js +1 -1
  116. package/standalone/throttle.js +1 -1
  117. package/standalone/toNumber.js +1 -1
  118. package/dist/cjs/viewport.helpers-BAovztDd.js +0 -58
  119. package/dist/esm/viewport.helpers-VXhsJZtn.js +0 -52
  120. package/dist/revo-grid/viewport.helpers-VXhsJZtn.js +0 -52
@@ -1,15 +1,15 @@
1
- import { generateFakeDataObject } from './data.js';
1
+ import { generateFakeDataObjectAsync } from './data.js';
2
2
 
3
3
  /**
4
4
  * Map of prevented events
5
5
  */
6
- window.eventsPrevented = {};
6
+ globalThis.eventsPrevented = {};
7
7
 
8
8
  /**
9
9
  * Toggle row headers visibility
10
10
  * @param {boolean} isShow - Show row headers if true, hide otherwise
11
11
  */
12
- window.showRowHeaders = function (isShow) {
12
+ globalThis.showRowHeaders = function (isShow) {
13
13
  const grid = document.querySelector('revo-grid');
14
14
  grid.rowHeaders = isShow;
15
15
  };
@@ -18,8 +18,8 @@ window.showRowHeaders = function (isShow) {
18
18
  * Toggle column grouping visibility
19
19
  * @param {boolean} isShow - Show column grouping if true, hide otherwise
20
20
  */
21
- window.showColGrouping = function (isShow) {
22
- setData({
21
+ globalThis.showColGrouping = function (isShow) {
22
+ globalThis.setData({
23
23
  groupedHeader: isShow,
24
24
  });
25
25
  };
@@ -28,17 +28,30 @@ window.showColGrouping = function (isShow) {
28
28
  * Set row size
29
29
  * @param {number} s - Row size
30
30
  */
31
- window.setRowSize = function (s) {
31
+ globalThis.setRowSize = function (s) {
32
32
  const grid = document.querySelector('revo-grid');
33
33
  grid.rowSize = s;
34
34
  };
35
35
 
36
+ /**
37
+ * Apply several custom row sizes.
38
+ */
39
+ globalThis.setCustomRowSizes = function () {
40
+ const grid = document.querySelector('revo-grid');
41
+ grid.rowDefinitions = [
42
+ { type: 'rgRow', index: 1, size: 64 },
43
+ { type: 'rgRow', index: 3, size: 96 },
44
+ { type: 'rgRow', index: 6, size: 48 },
45
+ { type: 'rgRow', index: 10, size: 120 },
46
+ ];
47
+ };
48
+
36
49
  /**
37
50
  * Start editing cell
38
51
  * @param {number} rgRow - Row index
39
52
  * @param {string} prop - Column property
40
53
  */
41
- window.setEdit = function (rgRow, prop) {
54
+ globalThis.setEdit = function (rgRow, prop) {
42
55
  const grid = document.querySelector('revo-grid');
43
56
  grid.setCellEdit(rgRow, prop);
44
57
  };
@@ -47,7 +60,7 @@ window.setEdit = function (rgRow, prop) {
47
60
  * Scroll to column
48
61
  * @param {number} [x=30] - Column index
49
62
  */
50
- window.scrollToCol = function (x = 30) {
63
+ globalThis.scrollToCol = function (x = 30) {
51
64
  const grid = document.querySelector('revo-grid');
52
65
  grid.scrollToColumnProp(x);
53
66
  };
@@ -55,7 +68,7 @@ window.scrollToCol = function (x = 30) {
55
68
  /**
56
69
  * Clear grouping
57
70
  */
58
- window.clearGrouping = function () {
71
+ globalThis.clearGrouping = function () {
59
72
  const grid = document.querySelector('revo-grid');
60
73
  grid.grouping = {};
61
74
  };
@@ -65,7 +78,7 @@ window.clearGrouping = function () {
65
78
  * @param {Array} props - Array of properties to group by
66
79
  * @param {boolean} expandedAll - Expand all groups if true, collapse otherwise
67
80
  */
68
- window.setGrouping = function (props = [], expandedAll = false) {
81
+ globalThis.setGrouping = function (props = [], expandedAll = false) {
69
82
  const grid = document.querySelector('revo-grid');
70
83
  grid.grouping = {
71
84
  props,
@@ -82,7 +95,7 @@ window.setGrouping = function (props = [], expandedAll = false) {
82
95
  * Set trimmed rows
83
96
  * @param {Array} rows - Array of row indexes to trim
84
97
  */
85
- window.setTrimmed = function (rows = []) {
98
+ globalThis.setTrimmed = function (rows = []) {
86
99
  const grid = document.querySelector('revo-grid');
87
100
  grid.trimmedRows = rows.reduce((r, v) => {
88
101
  r[v] = true;
@@ -94,7 +107,7 @@ window.setTrimmed = function (rows = []) {
94
107
  * Export grid
95
108
  * @param {string} [filename='new file'] - File name
96
109
  */
97
- window.exportGrid = function (filename = 'new file') {
110
+ globalThis.exportGrid = function (filename = 'new file') {
98
111
  const grid = document.querySelector('revo-grid');
99
112
  grid.getPlugins().then(plugins => {
100
113
  plugins.forEach(p => {
@@ -116,31 +129,78 @@ let defaultData = {
116
129
  colPinStart: [],
117
130
  };
118
131
 
132
+ let dataGenerationId = 0;
133
+
134
+ function formatNumber(value) {
135
+ return new Intl.NumberFormat('en').format(value);
136
+ }
137
+
138
+ function setLoader(text, visible = true) {
139
+ const $loader = document.querySelector('.loader');
140
+ if (!$loader) {
141
+ return;
142
+ }
143
+ $loader.textContent = text;
144
+ $loader.style.display = visible ? 'block' : 'none';
145
+ }
146
+
147
+ function cancelDataGeneration() {
148
+ dataGenerationId++;
149
+ setLoader('', false);
150
+ }
151
+
119
152
  /**
120
153
  * Set data
121
154
  * @param {Object} [config={}] - Data configuration
122
155
  */
123
- window.setData = function (config = {}) {
156
+ globalThis.setData = async function (config = {}) {
124
157
  defaultData = { ...defaultData, ...config };
125
- const $loader = document.querySelector('.loader');
126
- $loader.style.display = 'block';
127
- setTimeout(() => {
158
+ const generationId = ++dataGenerationId;
159
+ const totalCells = defaultData.rows * defaultData.cols;
160
+ setLoader(`Preparing ${formatNumber(defaultData.rows)} rows x ${formatNumber(defaultData.cols)} columns...`);
161
+
162
+ try {
163
+ // Let the loader paint before data generation starts.
164
+ await new Promise(resolve => setTimeout(resolve, 0));
165
+ const data = await generateFakeDataObjectAsync(defaultData, {
166
+ isCanceled: () => generationId !== dataGenerationId,
167
+ onProgress: ({ rows, totalRows }) => {
168
+ if (generationId !== dataGenerationId) {
169
+ return;
170
+ }
171
+ setLoader(
172
+ `Generated ${formatNumber(rows)} / ${formatNumber(totalRows)} rows (${formatNumber(totalCells)} cells)...`,
173
+ );
174
+ },
175
+ });
176
+
177
+ if (generationId !== dataGenerationId || !data) {
178
+ return;
179
+ }
180
+
128
181
  const grid = document.querySelector('revo-grid');
129
- const data = generateFakeDataObject(defaultData);
182
+ if (!grid) {
183
+ return;
184
+ }
130
185
 
131
186
  grid.columns = data.headers;
132
187
  grid.source = data.rows;
133
188
 
134
189
  grid.pinnedTopSource = data.pinnedTopRows;
135
190
  grid.pinnedBottomSource = data.pinnedBottomRows;
136
- $loader.style.display = 'none';
137
- }, 0);
191
+ setLoader('', false);
192
+ } catch (error) {
193
+ if (generationId === dataGenerationId) {
194
+ setLoader(`Data generation failed: ${error?.message || error}`);
195
+ throw error;
196
+ }
197
+ }
138
198
  };
139
199
 
140
- window.setRtl = function (checked) {
200
+ globalThis.setRtl = function (checked) {
141
201
  const grid = document.querySelector('revo-grid');
142
202
  grid.rtl = checked;
143
- window.document.dir = checked ? 'rtl' : 'ltr';
203
+ globalThis.document.dir = checked ? 'rtl' : 'ltr';
144
204
  };
145
205
 
146
206
  /**
@@ -148,7 +208,7 @@ window.setRtl = function (checked) {
148
208
  * @param {string} type - Type of pinned rows/columns
149
209
  * @param {boolean} checked - True if rows/columns are pinned, false otherwise
150
210
  */
151
- window.setPinned = function (type, checked) {
211
+ globalThis.setPinned = function (type, checked) {
152
212
  const val = [];
153
213
  if (checked) {
154
214
  switch (type) {
@@ -166,7 +226,7 @@ window.setPinned = function (type, checked) {
166
226
  break;
167
227
  }
168
228
  }
169
- setData({
229
+ globalThis.setData({
170
230
  [type]: val,
171
231
  });
172
232
  };
@@ -176,8 +236,8 @@ window.setPinned = function (type, checked) {
176
236
  * @param {string} name - Event name
177
237
  * @param {boolean} checked - True if event should be prevented, false otherwise
178
238
  */
179
- window.preventEvent = function (name, checked) {
180
- eventsPrevented[name] = checked;
239
+ globalThis.preventEvent = function (name, checked) {
240
+ globalThis.eventsPrevented[name] = checked;
181
241
  };
182
242
 
183
243
  let keys = 2;
@@ -187,7 +247,7 @@ let attrs = {};
187
247
  * Toggle visibility of grid
188
248
  * @param {boolean} checked - True if grid is visible, false otherwise
189
249
  */
190
- window.toggleVisibility = function (checked) {
250
+ globalThis.toggleVisibility = function (checked) {
191
251
  if (!checked) {
192
252
  const grid = document.querySelector('revo-grid');
193
253
  attrs = {};
@@ -209,7 +269,7 @@ window.toggleVisibility = function (checked) {
209
269
  });
210
270
  grid.setAttribute('key', keys++);
211
271
  holder.appendChild(grid);
212
- setData();
272
+ globalThis.setData();
213
273
  }
214
274
  };
215
275
 
@@ -220,7 +280,7 @@ let timerUpdateInterval;
220
280
  * @param {boolean} checked - True if timer should be updated, false otherwise
221
281
  * @param {number} [inteval=3] - Update interval in seconds
222
282
  */
223
- window.timerUpdate = function (checked, inteval = 3) {
283
+ globalThis.timerUpdate = function (checked, inteval = 3) {
224
284
  clearInterval(timerUpdateInterval);
225
285
  if (checked) {
226
286
  timerUpdateInterval = setInterval(() => {
@@ -234,9 +294,9 @@ window.timerUpdate = function (checked, inteval = 3) {
234
294
  * Set theme
235
295
  * @param {string} theme - Theme name
236
296
  */
237
- window.theme = function (theme) {
297
+ globalThis.theme = function (theme) {
238
298
  const grid = document.querySelector('revo-grid');
239
- if (theme && theme.indexOf('dark') > -1) {
299
+ if (theme?.includes('dark')) {
240
300
  document.documentElement.setAttribute('data-bs-theme', 'dark');
241
301
  } else {
242
302
  document.documentElement.removeAttribute('data-bs-theme');
@@ -244,26 +304,26 @@ window.theme = function (theme) {
244
304
  grid.theme = theme || 'default';
245
305
  };
246
306
 
247
- window.onload = onLoad;
307
+ globalThis.onload = onLoad;
248
308
 
249
- window.clearFilter = () => {
309
+ globalThis.clearFilter = () => {
250
310
  const grid = document.querySelector('revo-grid');
251
311
  grid.filter = {};
252
312
  };
253
313
 
254
- window.sortColumn = (columnProp= 0, additive = false) => {
314
+ globalThis.sortColumn = (columnProp= 0, additive = false) => {
255
315
  const grid = document.querySelector('revo-grid');
256
316
  grid.updateColumnSorting({
257
317
  prop: columnProp,
258
318
  }, 'asc', additive);
259
319
  };
260
320
 
261
- window.clearSorting = () => {
321
+ globalThis.clearSorting = () => {
262
322
  const grid = document.querySelector('revo-grid');
263
323
  grid.clearSorting();
264
324
  };
265
325
 
266
- window.setFilter = () => {
326
+ globalThis.setFilter = () => {
267
327
  const grid = document.querySelector('revo-grid');
268
328
  const filterFunc = (cellValue, extraValue) => {
269
329
  if (!cellValue) {
@@ -304,7 +364,8 @@ window.setFilter = () => {
304
364
  * Deep groups should align with a1/a2/a3/b1/b2/b3.
305
365
  * https://github.com/revolist/revogrid/issues/828
306
366
  */
307
- window.setColumnGroupOffsetBugDemo = () => {
367
+ globalThis.setColumnGroupOffsetBugDemo = () => {
368
+ cancelDataGeneration();
308
369
  const grid = document.querySelector('revo-grid');
309
370
 
310
371
  grid.columns = [
@@ -390,7 +451,7 @@ function onLoad() {
390
451
  const events = ['aftercolumnresize'];
391
452
  events.forEach(e => {
392
453
  grid.addEventListener(e, $e => {
393
- if (window.eventsPrevented[e]) {
454
+ if (globalThis.eventsPrevented[e]) {
394
455
  $e.preventDefault();
395
456
  }
396
457
  console.log(