@revolist/revogrid 4.22.0 → 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 (130) hide show
  1. package/dist/cjs/{cell-renderer-uZmDBXz7.js → cell-renderer-DWJ9Px9f.js} +9 -3
  2. package/dist/cjs/{column.drag.plugin-CM_5mKV3.js → column.drag.plugin-CaEBDG-Q.js} +409 -267
  3. package/dist/cjs/{column.service-DvQDqxxx.js → column.service-f612L4ql.js} +1 -1
  4. package/dist/cjs/{dimension.helpers-CaIsYC99.js → dimension.helpers-B9HgANnM.js} +14 -146
  5. package/dist/cjs/{edit.utils-CwMzSIVF.js → edit.utils-pKeiYFLJ.js} +22 -1
  6. package/dist/cjs/{header-cell-renderer-B1dJwgTO.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 +45 -31
  9. package/dist/cjs/revo-grid.cjs.entry.js +35 -15
  10. package/dist/cjs/revogr-attribution_7.cjs.entry.js +44 -26
  11. package/dist/cjs/revogr-clipboard_3.cjs.entry.js +11 -9
  12. package/dist/cjs/revogr-data_4.cjs.entry.js +132 -178
  13. package/dist/cjs/revogr-filter-panel.cjs.entry.js +2 -1
  14. package/dist/cjs/{text-editor-BTnGaIl3.js → text-editor-B4W-m-r-.js} +3 -3
  15. package/dist/cjs/{throttle-CI4MsAqs.js → throttle-BCwEuJJq.js} +59 -24
  16. package/dist/cjs/viewport.helpers-BND76K2j.js +140 -0
  17. package/dist/cjs/{viewport.store-Dcjud-a-.js → viewport.store-BlKQ4x9H.js} +16 -16
  18. package/dist/collection/components/clipboard/revogr-clipboard.js +1 -1
  19. package/dist/collection/components/data/revogr-data.js +5 -3
  20. package/dist/collection/components/header/header-group-renderer.js +2 -1
  21. package/dist/collection/components/header/header-renderer.js +6 -5
  22. package/dist/collection/components/header/revogr-header-style.css +13 -3
  23. package/dist/collection/components/header/revogr-header.js +105 -42
  24. package/dist/collection/components/order/order-row.service.js +6 -5
  25. package/dist/collection/components/overlay/keyboard.service.js +25 -3
  26. package/dist/collection/components/overlay/selection.utils.js +8 -6
  27. package/dist/collection/components/revoGrid/revo-grid.js +6 -5
  28. package/dist/collection/components/revoGrid/viewport.service.js +2 -1
  29. package/dist/collection/components/scroll/revogr-viewport-scroll.js +10 -6
  30. package/dist/collection/components/scrollable/revogr-scroll-virtual.js +4 -10
  31. package/dist/collection/plugins/filter/filter.panel.js +2 -1
  32. package/dist/collection/plugins/filter/filter.plugin.js +11 -4
  33. package/dist/collection/plugins/groupingRow/grouping.row.plugin.js +25 -1
  34. package/dist/collection/plugins/moveColumn/column.drag.plugin.js +18 -15
  35. package/dist/collection/plugins/sorting/sorting.func.js +173 -15
  36. package/dist/collection/plugins/sorting/sorting.plugin.js +167 -84
  37. package/dist/collection/plugins/sorting/sorting.sign.js +7 -1
  38. package/dist/collection/serve/controller.js +98 -37
  39. package/dist/collection/serve/data.js +273 -144
  40. package/dist/collection/services/dimension.provider.js +16 -1
  41. package/dist/collection/services/local.scroll.service.js +59 -24
  42. package/dist/collection/services/scroll.dimension.helpers.js +83 -0
  43. package/dist/collection/services/selection.store.connector.js +4 -1
  44. package/dist/collection/store/dimension/dimension.recalculate.plugin.js +22 -9
  45. package/dist/collection/store/dimension/dimension.store.js +4 -2
  46. package/dist/collection/store/vp/viewport.helpers.js +9 -0
  47. package/dist/collection/store/vp/viewport.store.js +5 -16
  48. package/dist/collection/types/events.js +4 -0
  49. package/dist/collection/utils/key.utils.js +20 -0
  50. package/dist/collection/utils/store.utils.js +3 -3
  51. package/dist/{revo-grid/cell-renderer-K_BKH7Kx.js → esm/cell-renderer-8UiGd-s7.js} +9 -3
  52. package/dist/esm/{column.drag.plugin-DEqZ2qXJ.js → column.drag.plugin-BsfhsfmB.js} +402 -266
  53. package/dist/esm/{column.service-Cdz3dYqZ.js → column.service-DbpulTog.js} +1 -1
  54. package/dist/{revo-grid/debounce-BfO9dz9v.js → esm/debounce-PCRWZliA.js} +1 -1
  55. package/dist/{revo-grid/dimension.helpers-DzxqJQqN.js → esm/dimension.helpers-CGKwSvw6.js} +7 -128
  56. package/dist/esm/{edit.utils-CzfeG98N.js → edit.utils-Dnnbd0xG.js} +22 -2
  57. package/dist/{revo-grid/header-cell-renderer-DXhxZMly.js → esm/header-cell-renderer-DGI2FAD8.js} +1 -1
  58. package/dist/esm/index-Db3qZoW5.js +127 -0
  59. package/dist/esm/index.js +15 -10
  60. package/dist/esm/revo-grid.entry.js +34 -14
  61. package/dist/esm/revogr-attribution_7.entry.js +43 -25
  62. package/dist/esm/revogr-clipboard_3.entry.js +12 -10
  63. package/dist/esm/revogr-data_4.entry.js +133 -179
  64. package/dist/esm/revogr-filter-panel.entry.js +3 -2
  65. package/dist/esm/{text-editor-C1ks5eQ4.js → text-editor-C3RUSwH5.js} +2 -2
  66. package/dist/esm/{throttle-BEjFQa2l.js → throttle-CaUDyxyU.js} +60 -25
  67. package/dist/esm/viewport.helpers-CoCAvmZs.js +133 -0
  68. package/dist/{revo-grid/viewport.store-saAZJHRo.js → esm/viewport.store-COAfzAyu.js} +15 -17
  69. package/dist/{esm/cell-renderer-K_BKH7Kx.js → revo-grid/cell-renderer-8UiGd-s7.js} +9 -3
  70. package/dist/revo-grid/{column.drag.plugin-DEqZ2qXJ.js → column.drag.plugin-BsfhsfmB.js} +402 -266
  71. package/dist/revo-grid/{column.service-Cdz3dYqZ.js → column.service-DbpulTog.js} +1 -1
  72. package/dist/{esm/debounce-BfO9dz9v.js → revo-grid/debounce-PCRWZliA.js} +1 -1
  73. package/dist/{esm/dimension.helpers-DzxqJQqN.js → revo-grid/dimension.helpers-CGKwSvw6.js} +7 -128
  74. package/dist/revo-grid/{edit.utils-CzfeG98N.js → edit.utils-Dnnbd0xG.js} +22 -2
  75. package/dist/{esm/header-cell-renderer-DXhxZMly.js → revo-grid/header-cell-renderer-DGI2FAD8.js} +1 -1
  76. package/dist/revo-grid/index-Db3qZoW5.js +127 -0
  77. package/dist/revo-grid/index.esm.js +15 -10
  78. package/dist/revo-grid/revo-grid.entry.js +34 -14
  79. package/dist/revo-grid/revogr-attribution_7.entry.js +43 -25
  80. package/dist/revo-grid/revogr-clipboard_3.entry.js +12 -10
  81. package/dist/revo-grid/revogr-data_4.entry.js +133 -179
  82. package/dist/revo-grid/revogr-filter-panel.entry.js +3 -2
  83. package/dist/revo-grid/{text-editor-C1ks5eQ4.js → text-editor-C3RUSwH5.js} +2 -2
  84. package/dist/revo-grid/{throttle-BEjFQa2l.js → throttle-CaUDyxyU.js} +60 -25
  85. package/dist/revo-grid/viewport.helpers-CoCAvmZs.js +133 -0
  86. package/dist/{esm/viewport.store-saAZJHRo.js → revo-grid/viewport.store-COAfzAyu.js} +15 -17
  87. package/dist/types/components/header/header-group-renderer.d.ts +1 -0
  88. package/dist/types/components/header/header-renderer.d.ts +1 -0
  89. package/dist/types/components/header/revogr-header.d.ts +6 -0
  90. package/dist/types/components/overlay/keyboard.service.d.ts +5 -0
  91. package/dist/types/plugins/groupingRow/grouping.row.plugin.d.ts +8 -0
  92. package/dist/types/plugins/moveColumn/column.drag.plugin.d.ts +29 -3
  93. package/dist/types/plugins/sorting/sorting.func.d.ts +25 -2
  94. package/dist/types/plugins/sorting/sorting.plugin.d.ts +84 -9
  95. package/dist/types/plugins/sorting/sorting.sign.d.ts +5 -1
  96. package/dist/types/plugins/sorting/sorting.types.d.ts +46 -1
  97. package/dist/types/services/local.scroll.service.d.ts +10 -2
  98. package/dist/types/services/scroll.dimension.helpers.d.ts +20 -0
  99. package/dist/types/store/vp/viewport.helpers.d.ts +2 -0
  100. package/dist/types/types/events.d.ts +1 -1
  101. package/dist/types/types/interfaces.d.ts +11 -0
  102. package/dist/types/utils/key.utils.d.ts +8 -0
  103. package/hydrate/index.js +791 -539
  104. package/hydrate/index.mjs +791 -539
  105. package/package.json +1 -1
  106. package/standalone/column.service.js +1 -1
  107. package/standalone/data.store.js +1 -1
  108. package/standalone/debounce.js +1 -1
  109. package/standalone/dimension.helpers.js +1 -1
  110. package/standalone/index.js +1 -1
  111. package/standalone/local.scroll.timer.js +1 -1
  112. package/standalone/revo-grid.js +1 -1
  113. package/standalone/revogr-clipboard2.js +1 -1
  114. package/standalone/revogr-data2.js +1 -1
  115. package/standalone/revogr-edit.js +1 -1
  116. package/standalone/revogr-edit2.js +1 -1
  117. package/standalone/revogr-filter-panel.js +1 -1
  118. package/standalone/revogr-header2.js +1 -1
  119. package/standalone/revogr-order-editor2.js +1 -1
  120. package/standalone/revogr-overlay-selection2.js +1 -1
  121. package/standalone/revogr-row-headers.js +1 -1
  122. package/standalone/revogr-row-headers2.js +1 -1
  123. package/standalone/revogr-scroll-virtual2.js +1 -1
  124. package/standalone/revogr-viewport-scroll2.js +1 -1
  125. package/standalone/selection.utils.js +1 -1
  126. package/standalone/throttle.js +1 -1
  127. package/standalone/toNumber.js +1 -1
  128. package/dist/cjs/viewport.helpers-BAovztDd.js +0 -58
  129. package/dist/esm/viewport.helpers-VXhsJZtn.js +0 -52
  130. package/dist/revo-grid/viewport.helpers-VXhsJZtn.js +0 -52
@@ -1,14 +1,59 @@
1
- import type { CellCompareFunc, ColumnProp, Order } from "../../types/index";
1
+ import type { CellCompareFunc, ColumnProp, ColumnRegular, Order } from "../../types/index";
2
+ /**
3
+ * Current sorting order per column property.
4
+ */
2
5
  export type SortingOrder = Record<ColumnProp, Order>;
6
+ /**
7
+ * Comparator functions indexed by column property.
8
+ *
9
+ * Undefined comparator entries are treated as inactive sorting entries.
10
+ */
3
11
  export type SortingOrderFunction = Record<ColumnProp, CellCompareFunc | undefined>;
12
+ /**
13
+ * Column metadata indexed by column property.
14
+ *
15
+ * This is an internal companion map for `SortingOrderFunction`. It lets the
16
+ * sorting helper detect the default comparer path without mutating
17
+ * `CellCompareFunc` instances or changing the public comparator contract.
18
+ */
19
+ export type SortingColumnMap = Record<ColumnProp, Partial<ColumnRegular> | undefined>;
20
+ /**
21
+ * Active sorting priority in click/config insertion order.
22
+ *
23
+ * This is stored separately from `SortingOrder` because JavaScript object keys
24
+ * that look like integers are enumerated in numeric order, not insertion order.
25
+ */
26
+ export type SortingColumnOrder = ColumnProp[];
27
+ /**
28
+ * Header metadata used to display additive sort priority.
29
+ */
30
+ export type SortingColumnRender = {
31
+ /**
32
+ * One-based additive sorting rank.
33
+ */
34
+ sortIndex?: number;
35
+ };
36
+ /**
37
+ * Sorting information emitted after columns are set.
38
+ */
4
39
  export type ColumnSetEvent = {
5
40
  order: SortingOrder;
6
41
  };
42
+ /**
43
+ * External sorting configuration.
44
+ */
7
45
  export type SortingConfig = {
46
+ /**
47
+ * Columns to sort by.
48
+ */
8
49
  columns?: {
9
50
  prop: ColumnProp;
10
51
  order: Order;
11
52
  cellCompare?: CellCompareFunc;
12
53
  }[];
54
+ /**
55
+ * If true, merge provided columns with the current sorting state.
56
+ * If false or omitted, replace current sorting state.
57
+ */
13
58
  additive?: boolean;
14
59
  };
@@ -1,4 +1,5 @@
1
1
  import type { DimensionType, ViewPortScrollEvent } from "../types/index";
2
+ import { type ScrollDimension } from './scroll.dimension.helpers';
2
3
  interface Config {
3
4
  skipAnimationFrame?: boolean;
4
5
  runScroll(e: ViewPortScrollEvent): void;
@@ -10,6 +11,8 @@ type Params = {
10
11
  clientSize: number;
11
12
  virtualSize: number;
12
13
  maxSize?: number;
14
+ maxScrollSize?: number;
15
+ scrollDimension?: ScrollDimension;
13
16
  };
14
17
  /**
15
18
  * Based on content size, client size and virtual size
@@ -20,17 +23,22 @@ export default class LocalScrollService {
20
23
  private cfg;
21
24
  private preventArtificialScroll;
22
25
  private previousScroll;
26
+ private previousLogicalScroll;
23
27
  private params;
24
28
  constructor(cfg: Config);
25
29
  setParams(params: Params, dimension: DimensionType): void;
26
30
  setScroll(e: ViewPortScrollEvent): Promise<void>;
31
+ setScrollByDelta(e: ViewPortScrollEvent, currentPhysicalCoordinate: number): Promise<ViewPortScrollEvent>;
27
32
  /**
28
33
  * On scroll event started
29
34
  */
30
35
  scroll(coordinate: number, dimension: DimensionType, force?: boolean, delta?: number, outside?: boolean): void;
31
36
  private getParams;
32
- private wrapCoordinate;
37
+ private wrapPhysicalCoordinate;
38
+ private wrapLogicalCoordinate;
33
39
  private cancelScroll;
34
- private convert;
40
+ private toLogicalScrollCoordinate;
41
+ private toPhysicalCoordinate;
42
+ private toLogicalCoordinate;
35
43
  }
36
44
  export {};
@@ -0,0 +1,20 @@
1
+ export type ScrollDimensionInput = {
2
+ contentSize: number;
3
+ clientSize: number;
4
+ virtualSize?: number;
5
+ maxScrollSize?: number;
6
+ };
7
+ export type ScrollDimension = {
8
+ contentSize: number;
9
+ clientSize: number;
10
+ viewportSize: number;
11
+ physicalContentSize: number;
12
+ logicalScrollSize: number;
13
+ physicalScrollSize: number;
14
+ isCompressed: boolean;
15
+ toLogicalCoordinate(coordinate: number): number;
16
+ toPhysicalCoordinate(coordinate: number): number;
17
+ getRenderOffset(coordinate: number): number;
18
+ };
19
+ export declare function getMaxScrollSize(doc?: Document | undefined): number;
20
+ export declare function getScrollDimension({ contentSize, clientSize, virtualSize, maxScrollSize, }: ScrollDimensionInput): ScrollDimension;
@@ -1,6 +1,8 @@
1
1
  import type { DimensionSettingsState, PositionItem, ViewSettingSizeProp, ViewportStateItems, VirtualPositionItem, Range } from "../../types/index";
2
2
  export type DimensionDataViewport = Pick<DimensionSettingsState, 'indexes' | 'positionIndexes' | 'positionIndexToItem' | 'sizes' | 'originItemSize' | 'realSize'>;
3
3
  export type ItemsToUpdate = Pick<ViewportStateItems, 'items' | 'start' | 'end'>;
4
+ export declare function getViewportMaxCoordinate(dimension: Pick<DimensionSettingsState, 'realSize' | 'originItemSize'>, viewportSize: number, frameOffset?: number): number;
5
+ export declare function clampViewportCoordinate(coordinate: number, dimension: Pick<DimensionSettingsState, 'realSize' | 'originItemSize'>, viewportSize: number, frameOffset?: number): number;
4
6
  /**
5
7
  * Update items based on new scroll position
6
8
  * If viewport wasn't changed fully simple recombination of positions
@@ -1,2 +1,2 @@
1
- export type RevogridEvents = 'contentsizechanged' | 'beforeedit' | 'beforerangeedit' | 'afteredit' | 'beforeautofill' | 'beforerange' | 'afterfocus' | 'roworderchanged' | 'beforesorting' | 'beforesourcesortingapply' | 'beforesortingapply' | 'rowdragstart' | 'headerclick' | 'beforecellfocus' | 'beforefocuslost' | 'beforesourceset' | 'beforeanysource' | 'aftersourceset' | 'afteranysource' | 'beforecolumnsgather' | 'beforecolumnsset' | 'beforecolumnapplied' | 'aftercolumnsset' | 'beforefilterapply' | 'beforefiltertrimmed' | 'beforetrimmed' | 'aftertrimmed' | 'viewportscroll' | 'beforeexport' | 'beforeeditstart' | 'aftercolumnresize' | 'beforerowdefinition' | 'filterconfigchanged' | 'sortingconfigchanged' | 'rowheaderschanged' | 'beforegridrender' | 'aftergridrender' | 'aftergridinit' | 'additionaldatachanged' | 'afterthemechanged' | 'created' | 'beforepaste' | 'beforepasteapply' | 'pasteregion' | 'afterpasteapply' | 'beforecut' | 'clearregion' | 'beforecopy' | 'beforecopyapply' | 'copyregion' | 'beforerowrender' | 'afterrender' | 'beforecellrender' | 'beforedatarender' | 'dragstartcell' | 'celleditinit' | 'closeedit' | 'filterChange' | 'resetChange' | 'beforefocusrender' | 'beforescrollintoview' | 'afterfocus' | 'beforeheaderclick' | 'headerresize' | 'beforeheaderresize' | 'headerdblclick' | 'beforeheaderrender' | 'beforegroupheaderrender' | 'afterheaderrender' | 'rowdragstartinit' | 'rowdragendinit' | 'rowdragmoveinit' | 'rowdragmousemove' | 'rowdropinit' | 'roworderchange' | 'beforecopyregion' | 'beforepasteregion' | 'celleditapply' | 'beforecellfocusinit' | 'beforenextvpfocus' | 'setedit' | 'beforeapplyrange' | 'beforesetrange' | 'setrange' | 'beforeeditrender' | 'selectall' | 'canceledit' | 'settemprange' | 'beforesettemprange' | 'applyfocus' | 'focuscell' | 'beforerangedataapply' | 'selectionchangeinit' | 'beforerangecopyapply' | 'rangeeditapply' | 'clipboardrangecopy' | 'clipboardrangepaste' | 'beforekeydown' | 'beforekeyup' | 'beforecellsave' | 'celledit' | 'scrollview' | 'ref' | 'scrollvirtual' | 'scrollviewport' | 'resizeviewport' | 'scrollchange' | 'scrollviewportsilent' | 'html';
1
+ export type RevogridEvents = 'contentsizechanged' | 'beforeedit' | 'beforerangeedit' | 'afteredit' | 'beforeautofill' | 'beforerange' | 'afterfocus' | 'roworderchanged' | 'beforesorting' | 'beforesourcesortingapply' | 'beforesortingapply' | 'rowdragstart' | 'headerclick' | 'beforecellfocus' | 'beforefocuslost' | 'beforesourceset' | 'beforeanysource' | 'aftersourceset' | 'afteranysource' | 'beforecolumnsgather' | 'beforecolumnsset' | 'beforecolumnapplied' | 'aftercolumnsset' | 'beforefilterapply' | 'beforefiltertrimmed' | 'beforetrimmed' | 'aftertrimmed' | 'viewportscroll' | 'beforeexport' | 'beforeeditstart' | 'aftercolumnresize' | 'beforerowdefinition' | 'filterconfigchanged' | 'sortingconfigchanged' | 'rowheaderschanged' | 'beforegridrender' | 'aftergridrender' | 'aftergridinit' | 'additionaldatachanged' | 'afterthemechanged' | 'created' | 'beforepaste' | 'beforepasteapply' | 'pasteregion' | 'afterpasteapply' | 'beforecut' | 'clearregion' | 'beforecopy' | 'beforecopyapply' | 'copyregion' | 'beforerowrender' | 'afterrender' | 'beforecellrender' | 'beforedatarender' | 'dragstartcell' | 'celleditinit' | 'closeedit' | 'filterChange' | 'resetChange' | 'beforefocusrender' | 'beforescrollintoview' | 'afterfocus' | 'beforeheaderclick' | 'headerresize' | 'beforeheaderresize' | 'headerdblclick' | 'beforeheaderrender' | 'beforegroupheaderrender' | 'afterheaderrender' | 'columndragstart' | 'columndragmousemove' | 'beforecolumndragend' | 'columndragend' | 'rowdragstartinit' | 'rowdragendinit' | 'rowdragmoveinit' | 'rowdragmousemove' | 'rowdropinit' | 'roworderchange' | 'beforecopyregion' | 'beforepasteregion' | 'celleditapply' | 'beforecellfocusinit' | 'beforenextvpfocus' | 'setedit' | 'beforeapplyrange' | 'beforesetrange' | 'setrange' | 'beforeeditrender' | 'selectall' | 'canceledit' | 'settemprange' | 'beforesettemprange' | 'applyfocus' | 'focuscell' | 'beforerangedataapply' | 'selectionchangeinit' | 'beforerangecopyapply' | 'rangeeditapply' | 'clipboardrangecopy' | 'clipboardrangepaste' | 'beforekeydown' | 'beforekeyup' | 'beforecellsave' | 'celledit' | 'scrollview' | 'ref' | 'scrollvirtual' | 'scrollviewport' | 'resizeviewport' | 'scrollchange' | 'scrollviewportsilent' | 'html';
2
2
  export declare const REVOGRID_EVENTS: Map<RevogridEvents, RevogridEvents>;
@@ -509,6 +509,12 @@ export interface ViewportState extends ViewportStateItems {
509
509
  * Until virtualization is not disabled.
510
510
  */
511
511
  clientSize: number;
512
+ /**
513
+ * Difference between logical coordinate and browser-safe rendered coordinate.
514
+ * Internal scroll virtualization offset used when content exceeds browser
515
+ * native scroll size limits.
516
+ */
517
+ renderOffset?: number;
512
518
  }
513
519
  /**
514
520
  * `ViewSettingSizeProp` is a record that maps column or row indexes to their
@@ -625,6 +631,11 @@ export interface DimensionSettingsState extends DimensionCalc {
625
631
  * Represents the origin item size of the dimension.
626
632
  */
627
633
  originItemSize: number;
634
+ /**
635
+ * Internal render offset applied when logical scroll space is compressed into
636
+ * a browser-safe physical scroll range.
637
+ */
638
+ renderOffset?: number;
628
639
  }
629
640
  /**
630
641
  * Represents the mapping of dimension types to their corresponding observable stores.
@@ -10,3 +10,11 @@ export declare function isCut(event: KeyboardEvent): boolean;
10
10
  export declare function isCopy(event: KeyboardEvent): boolean;
11
11
  export declare function isPaste(event: KeyboardEvent): boolean;
12
12
  export declare function isAll(event: KeyboardEvent): boolean;
13
+ /**
14
+ * Returns true when a keyboard event represents a shortcut modifier that
15
+ * should not start cell editing from printable `event.key` input.
16
+ *
17
+ * AltGr is intentionally excluded because many Windows/Linux layouts expose
18
+ * printable AltGr characters as Ctrl+Alt key events.
19
+ */
20
+ export declare function isShortcutModifier(event: KeyboardEvent): boolean;