@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
@@ -0,0 +1,83 @@
1
+ /*!
2
+ * Built by Revolist OU ❤️
3
+ */
4
+ const FALLBACK_MAX_SCROLL_SIZE = 16000000;
5
+ const SCROLL_SIZE_GUARD = 1000000;
6
+ let detectedMaxScrollSize;
7
+ export function getMaxScrollSize(doc = typeof document === 'undefined' ? undefined : document) {
8
+ if (typeof detectedMaxScrollSize === 'number') {
9
+ return detectedMaxScrollSize;
10
+ }
11
+ const body = doc === null || doc === void 0 ? void 0 : doc.body;
12
+ if (body) {
13
+ const ownerDocument = body.ownerDocument;
14
+ const element = ownerDocument.createElement('div');
15
+ element.style.cssText = [
16
+ 'height:1px',
17
+ 'left:-10000px',
18
+ 'overflow:scroll',
19
+ 'position:absolute',
20
+ 'top:-10000px',
21
+ 'visibility:hidden',
22
+ 'width:1px',
23
+ ].join(';');
24
+ const content = ownerDocument.createElement('div');
25
+ content.style.height = `${FALLBACK_MAX_SCROLL_SIZE * 4}px`;
26
+ element.appendChild(content);
27
+ body.appendChild(element);
28
+ detectedMaxScrollSize = Math.max(0, Math.min(element.scrollHeight, FALLBACK_MAX_SCROLL_SIZE * 4) - SCROLL_SIZE_GUARD);
29
+ element.remove();
30
+ if (detectedMaxScrollSize > SCROLL_SIZE_GUARD) {
31
+ return detectedMaxScrollSize;
32
+ }
33
+ detectedMaxScrollSize = FALLBACK_MAX_SCROLL_SIZE;
34
+ return detectedMaxScrollSize;
35
+ }
36
+ return FALLBACK_MAX_SCROLL_SIZE;
37
+ }
38
+ export function getScrollDimension({ contentSize, clientSize, virtualSize = 0, maxScrollSize = getMaxScrollSize(), }) {
39
+ const safeContentSize = Math.max(0, maxScrollSize - SCROLL_SIZE_GUARD);
40
+ const size = Math.max(0, contentSize);
41
+ const client = Math.max(0, clientSize);
42
+ const viewport = Math.max(0, virtualSize || client);
43
+ const logicalScrollSize = Math.max(0, size - viewport);
44
+ const maxPhysicalScrollSize = Math.max(0, safeContentSize - client);
45
+ const physicalScrollSize = Math.min(logicalScrollSize, maxPhysicalScrollSize);
46
+ const physicalContentSize = client + physicalScrollSize;
47
+ const isCompressed = logicalScrollSize > physicalScrollSize && physicalScrollSize > 0;
48
+ const clampLogical = (coordinate) => Math.min(Math.max(0, coordinate || 0), logicalScrollSize);
49
+ const clampPhysical = (coordinate) => Math.min(Math.max(0, coordinate || 0), physicalScrollSize);
50
+ const toLogicalCoordinate = (coordinate) => {
51
+ if (!logicalScrollSize || !physicalScrollSize) {
52
+ return 0;
53
+ }
54
+ if (!isCompressed) {
55
+ return clampLogical(coordinate);
56
+ }
57
+ return clampLogical((clampPhysical(coordinate) / physicalScrollSize) * logicalScrollSize);
58
+ };
59
+ const toPhysicalCoordinate = (coordinate) => {
60
+ if (!logicalScrollSize || !physicalScrollSize) {
61
+ return 0;
62
+ }
63
+ if (!isCompressed) {
64
+ return clampPhysical(coordinate);
65
+ }
66
+ return clampPhysical((clampLogical(coordinate) / logicalScrollSize) * physicalScrollSize);
67
+ };
68
+ return {
69
+ contentSize: size,
70
+ clientSize: client,
71
+ viewportSize: viewport,
72
+ physicalContentSize,
73
+ logicalScrollSize,
74
+ physicalScrollSize,
75
+ isCompressed,
76
+ toLogicalCoordinate,
77
+ toPhysicalCoordinate,
78
+ getRenderOffset(coordinate) {
79
+ const logical = clampLogical(coordinate);
80
+ return logical - toPhysicalCoordinate(logical);
81
+ },
82
+ };
83
+ }
@@ -194,7 +194,10 @@ export class SelectionStoreConnector {
194
194
  const nextItem = nextCell(focus, lastCell);
195
195
  let nextStore;
196
196
  if (nextItem) {
197
- Object.entries(nextItem).forEach(([type, nextItemCoord]) => {
197
+ Object.keys(nextItem).forEach((t) => {
198
+ var _a;
199
+ const type = t;
200
+ const nextItemCoord = (_a = nextItem[type]) !== null && _a !== void 0 ? _a : 0;
198
201
  let stores;
199
202
  switch (type) {
200
203
  case 'x':
@@ -1,6 +1,21 @@
1
1
  /*!
2
2
  * Built by Revolist OU ❤️
3
3
  */
4
+ function calculateRealSize({ count, originItemSize, sizes, }) {
5
+ const safeCount = Math.max(0, count);
6
+ let realSize = safeCount * originItemSize;
7
+ for (let index in sizes) {
8
+ const itemIndex = Number(index);
9
+ if (!Number.isInteger(itemIndex) ||
10
+ itemIndex < 0 ||
11
+ itemIndex >= safeCount ||
12
+ String(itemIndex) !== index) {
13
+ continue;
14
+ }
15
+ realSize += sizes[index] - originItemSize;
16
+ }
17
+ return realSize;
18
+ }
4
19
  /**
5
20
  * Plugin which recalculates realSize on changes of sizes, originItemSize and count
6
21
  */
@@ -13,20 +28,18 @@ export const recalculateRealSizePlugin = (storeService) => {
13
28
  * Reacts on changes of count, sizes and originItemSize
14
29
  */
15
30
  set(k) {
16
- var _a;
17
31
  switch (k) {
18
32
  case 'count':
19
33
  case 'sizes':
20
34
  case 'originItemSize': {
21
35
  // recalculate realSize
22
- let realSize = 0;
23
- const count = storeService.store.get('count');
24
- const sizes = storeService.store.get('sizes');
25
- const originItemSize = storeService.store.get('originItemSize');
26
- for (let i = 0; i < count; i++) {
27
- realSize += (_a = sizes[i]) !== null && _a !== void 0 ? _a : originItemSize;
28
- }
29
- storeService.setStore({ realSize });
36
+ storeService.setStore({
37
+ realSize: calculateRealSize({
38
+ count: storeService.store.get('count'),
39
+ sizes: storeService.store.get('sizes'),
40
+ originItemSize: storeService.store.get('originItemSize'),
41
+ }),
42
+ });
30
43
  break;
31
44
  }
32
45
  }
@@ -31,7 +31,9 @@ function initialState() {
31
31
  // size which all items can take
32
32
  realSize: 0,
33
33
  // initial item size if it wasn't changed
34
- originItemSize: 0
34
+ originItemSize: 0,
35
+ // logical-to-physical render offset used when scroll space is compressed
36
+ renderOffset: 0
35
37
  });
36
38
  }
37
39
  export class DimensionStore {
@@ -63,7 +65,7 @@ export class DimensionStore {
63
65
  setStore(this.store, data);
64
66
  }
65
67
  drop() {
66
- setStore(this.store, initialBase());
68
+ setStore(this.store, Object.assign(Object.assign({}, initialBase()), { renderOffset: 0 }));
67
69
  }
68
70
  /**
69
71
  * Set custom dimension sizes and overwrite old
@@ -2,6 +2,15 @@
2
2
  * Built by Revolist OU ❤️
3
3
  */
4
4
  import { getItemByPosition } from "../dimension/dimension.helpers";
5
+ export function getViewportMaxCoordinate(dimension, viewportSize, frameOffset = 1) {
6
+ if (!viewportSize || dimension.realSize <= viewportSize) {
7
+ return 0;
8
+ }
9
+ return Math.max(0, dimension.realSize - viewportSize - dimension.originItemSize * frameOffset);
10
+ }
11
+ export function clampViewportCoordinate(coordinate, dimension, viewportSize, frameOffset = 1) {
12
+ return Math.min(Math.max(0, coordinate), getViewportMaxCoordinate(dimension, viewportSize, frameOffset));
13
+ }
5
14
  /**
6
15
  * Update items based on new scroll position
7
16
  * If viewport wasn't changed fully simple recombination of positions
@@ -1,7 +1,7 @@
1
1
  /*!
2
2
  * Built by Revolist OU ❤️
3
3
  */
4
- import { addMissingItems, getFirstItem, getLastItem, getUpdatedItemsByPosition, isActiveRange, setItemSizes, updateMissingAndRange, isActiveRangeOutsideLastItem, } from "./viewport.helpers";
4
+ import { addMissingItems, getFirstItem, getLastItem, getUpdatedItemsByPosition, clampViewportCoordinate, getViewportMaxCoordinate, isActiveRange, setItemSizes, updateMissingAndRange, isActiveRangeOutsideLastItem, } from "./viewport.helpers";
5
5
  import { createStore } from "@stencil/store";
6
6
  import { setStore } from "../../utils";
7
7
  /**
@@ -22,6 +22,8 @@ function initialState() {
22
22
  realCount: 0,
23
23
  // size of viewport in px
24
24
  clientSize: 0,
25
+ // logical-to-physical render offset used when scroll space is compressed
26
+ renderOffset: 0,
25
27
  };
26
28
  }
27
29
  /**
@@ -57,21 +59,8 @@ export class ViewportStore {
57
59
  const outsize = singleOffsetInPx * 2;
58
60
  // math virtual size is based on visible area + 2 items outside of visible area
59
61
  const virtualSize = viewportSize + outsize;
60
- // expected no scroll if real size less than virtual size, position is 0
61
- let maxCoordinate = 0;
62
- // if there is nodes outside of viewport, max coordinate has to be adjusted
63
- if (dimension.realSize > viewportSize) {
64
- // max coordinate is real size minus virtual/rendered space
65
- maxCoordinate = dimension.realSize - viewportSize - singleOffsetInPx;
66
- }
67
- let pos = position;
68
- // limit position to max and min coordinates
69
- if (pos < 0) {
70
- pos = 0;
71
- }
72
- else if (pos > maxCoordinate) {
73
- pos = maxCoordinate;
74
- }
62
+ const maxCoordinate = getViewportMaxCoordinate(dimension, viewportSize, frameOffset);
63
+ let pos = clampViewportCoordinate(position, dimension, viewportSize, frameOffset);
75
64
  // store last coordinate for further restore on redraw
76
65
  this.lastCoordinate = pos;
77
66
  // actual position is less than first item start based on offset
@@ -8,7 +8,7 @@
8
8
  * @param data - The data to set on the store.
9
9
  */
10
10
  export function setStore(store, data) {
11
- Object.entries(data).forEach(([key, value]) => {
12
- store.set(key, value);
13
- });
11
+ for (const key of Object.keys(data)) {
12
+ store.set(key, data[key]);
13
+ }
14
14
  }
@@ -2,12 +2,18 @@
2
2
  * Built by Revolist OU ❤️
3
3
  */
4
4
  import { h, f as Build } from './index-Chp_81rd.js';
5
- import { y as DATA_ROW, G as DRAG_ICON_CLASS, I as DRAGGABLE_CLASS } from './dimension.helpers-DmIvjIa7.js';
6
- import { l as GROUP_EXPAND_BTN, m as GROUP_EXPAND_EVENT, G as GROUP_DEPTH, h as GROUP_EXPANDED, P as PSEUDO_GROUP_ITEM, O as isRowDragService, B as getCellDataParsed } from './column.service-CCvAi5l4.js';
5
+ import { n as DATA_ROW, w as DRAG_ICON_CLASS, x as DRAGGABLE_CLASS } from './dimension.helpers-CGKwSvw6.js';
6
+ import { l as GROUP_EXPAND_BTN, m as GROUP_EXPAND_EVENT, G as GROUP_DEPTH, h as GROUP_EXPANDED, P as PSEUDO_GROUP_ITEM, O as isRowDragService, B as getCellDataParsed } from './column.service-DbpulTog.js';
7
7
 
8
+ /**
9
+ * Renders sorting direction and optional additive sorting rank.
10
+ */
8
11
  const SortingSign = ({ column }) => {
9
12
  var _a;
10
- return h("i", { class: (_a = column === null || column === void 0 ? void 0 : column.order) !== null && _a !== void 0 ? _a : 'sort-off' });
13
+ const indicatorAttrs = { class: 'sort-indicator' };
14
+ const iconAttrs = { class: (_a = column === null || column === void 0 ? void 0 : column.order) !== null && _a !== void 0 ? _a : 'sort-off' };
15
+ const orderIndexAttrs = { class: 'sort-order-index' };
16
+ return (h("span", Object.assign({}, indicatorAttrs), h("i", Object.assign({}, iconAttrs)), (column === null || column === void 0 ? void 0 : column.sortIndex) ? (h("sup", Object.assign({}, orderIndexAttrs), column.sortIndex)) : null));
11
17
  };
12
18
 
13
19
  const PADDING_DEPTH = 10;