@revolist/revogrid 4.27.0 → 4.27.2

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 (76) hide show
  1. package/dist/cjs/{cell-renderer-C7rdgaov.js → cell-renderer-BDIx0xys.js} +1 -1
  2. package/dist/cjs/{column.service-Bbml5C2j.js → column.service-D-ENzqyb.js} +2 -0
  3. package/dist/cjs/{filter.button-F2Bw3UAd.js → filter.button-C6ixuMmr.js} +3 -2
  4. package/dist/cjs/{header-cell-renderer-BljFI6wj.js → header-cell-renderer-B5Y4fdZC.js} +1 -1
  5. package/dist/cjs/index.cjs.js +7 -5
  6. package/dist/cjs/loader.cjs.js +1 -1
  7. package/dist/cjs/revo-grid.cjs.entry.js +63 -43
  8. package/dist/cjs/revo-grid.cjs.js +1 -1
  9. package/dist/cjs/revogr-attribution_7.cjs.entry.js +1 -1
  10. package/dist/cjs/revogr-data_4.cjs.entry.js +12 -11
  11. package/dist/cjs/revogr-filter-panel.cjs.entry.js +139 -33
  12. package/dist/cjs/{row-resize.plugin-BRQy_qNn.js → row-resize.plugin-C4YOF1lN.js} +353 -185
  13. package/dist/collection/components/header/header-renderer.js +7 -6
  14. package/dist/collection/components/header/revogr-header-style.css +8 -3
  15. package/dist/collection/components/revoGrid/revo-grid-style.css +12 -2
  16. package/dist/collection/components/revoGrid/revo-grid.js +37 -21
  17. package/dist/collection/plugins/filter/filter.button.js +3 -2
  18. package/dist/collection/plugins/filter/filter.indexed.js +5 -0
  19. package/dist/collection/plugins/filter/filter.panel.js +138 -31
  20. package/dist/collection/plugins/filter/filter.plugin.js +48 -5
  21. package/dist/collection/plugins/filter/filter.style.css +25 -3
  22. package/dist/collection/plugins/groupingRow/grouping.const.js +1 -0
  23. package/dist/collection/plugins/groupingRow/grouping.row.plugin.js +84 -54
  24. package/dist/collection/plugins/groupingRow/grouping.sorting.service.js +58 -0
  25. package/dist/collection/plugins/groupingRow/grouping.trimmed.service.js +5 -3
  26. package/dist/collection/plugins/row-resize/row-resize.plugin.js +144 -113
  27. package/dist/collection/plugins/sorting/sorting.plugin.js +16 -13
  28. package/dist/collection/plugins/wcag/index.js +5 -4
  29. package/dist/collection/services/dimension.provider.js +17 -1
  30. package/dist/esm/{cell-renderer-BFpmdV8H.js → cell-renderer-D9ze8OJw.js} +1 -1
  31. package/dist/esm/{column.service-CM-wgGs8.js → column.service-pu_fdQ0S.js} +2 -1
  32. package/dist/esm/{filter.button-DMhpuAiw.js → filter.button-CEPUxLUo.js} +3 -2
  33. package/dist/{revo-grid/header-cell-renderer-Bqh1PrgH.js → esm/header-cell-renderer-YCiVIQ2E.js} +1 -1
  34. package/dist/esm/index.js +6 -6
  35. package/dist/esm/loader.js +1 -1
  36. package/dist/esm/revo-grid.entry.js +63 -43
  37. package/dist/esm/revo-grid.js +1 -1
  38. package/dist/esm/revogr-attribution_7.entry.js +1 -1
  39. package/dist/esm/revogr-data_4.entry.js +12 -11
  40. package/dist/esm/revogr-filter-panel.entry.js +139 -33
  41. package/dist/esm/{row-resize.plugin-BRiaHlHA.js → row-resize.plugin-Beu0pMds.js} +354 -187
  42. package/dist/revo-grid/{cell-renderer-BFpmdV8H.js → cell-renderer-D9ze8OJw.js} +1 -1
  43. package/dist/revo-grid/{column.service-CM-wgGs8.js → column.service-pu_fdQ0S.js} +2 -1
  44. package/dist/revo-grid/{filter.button-DMhpuAiw.js → filter.button-CEPUxLUo.js} +3 -2
  45. package/dist/{esm/header-cell-renderer-Bqh1PrgH.js → revo-grid/header-cell-renderer-YCiVIQ2E.js} +1 -1
  46. package/dist/revo-grid/index.esm.js +6 -6
  47. package/dist/revo-grid/revo-grid.entry.js +63 -43
  48. package/dist/revo-grid/revo-grid.esm.js +1 -1
  49. package/dist/revo-grid/revogr-attribution_7.entry.js +1 -1
  50. package/dist/revo-grid/revogr-data_4.entry.js +12 -11
  51. package/dist/revo-grid/revogr-filter-panel.entry.js +139 -33
  52. package/dist/revo-grid/{row-resize.plugin-BRiaHlHA.js → row-resize.plugin-Beu0pMds.js} +354 -187
  53. package/dist/types/components/revoGrid/revo-grid.d.ts +2 -0
  54. package/dist/types/plugins/filter/filter.indexed.d.ts +2 -0
  55. package/dist/types/plugins/filter/filter.panel.d.ts +9 -2
  56. package/dist/types/plugins/filter/filter.plugin.d.ts +8 -1
  57. package/dist/types/plugins/filter/filter.types.d.ts +8 -0
  58. package/dist/types/plugins/groupingRow/grouping.const.d.ts +1 -0
  59. package/dist/types/plugins/groupingRow/grouping.row.plugin.d.ts +5 -7
  60. package/dist/types/plugins/groupingRow/grouping.sorting.service.d.ts +7 -0
  61. package/dist/types/plugins/groupingRow/grouping.trimmed.service.d.ts +9 -0
  62. package/dist/types/plugins/row-resize/row-resize.plugin.d.ts +14 -12
  63. package/dist/types/plugins/sorting/sorting.plugin.d.ts +5 -0
  64. package/dist/types/services/dimension.provider.d.ts +7 -1
  65. package/dist/types/types/interfaces.d.ts +13 -1
  66. package/hydrate/index.js +561 -264
  67. package/hydrate/index.mjs +561 -264
  68. package/package.json +1 -1
  69. package/standalone/column.service.js +1 -1
  70. package/standalone/filter.button.js +1 -1
  71. package/standalone/index.js +1 -1
  72. package/standalone/revo-grid.js +1 -1
  73. package/standalone/revogr-data2.js +1 -1
  74. package/standalone/revogr-filter-panel.js +1 -1
  75. package/standalone/revogr-header2.js +1 -1
  76. package/standalone/revogr-overlay-selection2.js +1 -1
@@ -690,6 +690,7 @@ export declare class RevoGridComponent {
690
690
  applyFilter(cfg: boolean | ColumnFilterConfig): void;
691
691
  applySorting(cfg?: SortingConfig): void;
692
692
  rowHeadersChange(rowHeaders?: RowHeaders | boolean): void;
693
+ resizeRowChanged(): void;
693
694
  /**
694
695
  * Register external VNodes
695
696
  */
@@ -705,6 +706,7 @@ export declare class RevoGridComponent {
705
706
  pluginsChanged(plugins?: GridPlugin[], prevPlugins?: GridPlugin[]): void;
706
707
  private setPlugins;
707
708
  private setCorePlugins;
709
+ private syncRowResizeConfig;
708
710
  getPluginData(): PluginProviders | undefined;
709
711
  private removePlugins;
710
712
  connectedCallback(): void;
@@ -1,6 +1,8 @@
1
1
  import { LogicFunction } from './filter.types';
2
2
  export declare const filterCoreFunctionsIndexedByType: Record<FilterType, LogicFunction>;
3
3
  export declare const filterTypes: Record<string, FilterType[]>;
4
+ /** Preferred initial operator for built-in filter families. */
5
+ export declare const filterTypeDefaults: Partial<Record<string, FilterType>>;
4
6
  export declare const filterNames: {
5
7
  none: string;
6
8
  empty: string;
@@ -1,6 +1,6 @@
1
1
  import { EventEmitter, type VNode } from '../../stencil-public-runtime';
2
2
  import '../../utils/closest.polifill';
3
- import { FilterCaptions, LogicFunction, MultiFilterItem, ShowData } from './filter.types';
3
+ import { FilterCaptions, FilterData, LogicFunction, MultiFilterItem, ShowData } from './filter.types';
4
4
  import type { ColumnProp } from "../../types/index";
5
5
  import { FilterType } from './filter.indexed';
6
6
  /**
@@ -11,6 +11,7 @@ import { FilterType } from './filter.indexed';
11
11
  */
12
12
  export declare class FilterPanel {
13
13
  private dialog?;
14
+ private hasChanges;
14
15
  private filterCaptionsInternal;
15
16
  element: HTMLElement;
16
17
  isFilterIdSet: boolean;
@@ -19,6 +20,7 @@ export declare class FilterPanel {
19
20
  currentFilterType: FilterType;
20
21
  changes: ShowData | undefined;
21
22
  filterItems: MultiFilterItem;
23
+ draftFilter: FilterData | undefined;
22
24
  draggedFilterId: number | undefined;
23
25
  dragOverFilterId: number | undefined;
24
26
  filterNames: Record<string, string>;
@@ -63,7 +65,12 @@ export declare class FilterPanel {
63
65
  private toggleFilterAndOr;
64
66
  private assertChanges;
65
67
  renderSelectOptions(type: FilterType, isDefaultTypeRemoved?: boolean): VNode[] | undefined;
66
- renderExtra(prop: ColumnProp, index: number): any;
68
+ renderExtra(prop: ColumnProp, index: number, isDraft?: boolean): any;
69
+ private resolveDraftFilterType;
70
+ private promoteDraft;
71
+ private isMeaningfulDraftValue;
72
+ private emitFilterChange;
73
+ private cloneFilterItems;
67
74
  private getAddFilterSelect;
68
75
  private isOwnFilterButton;
69
76
  private getOwningGrid;
@@ -24,6 +24,8 @@ export declare const FILTE_PANEL = "revogr-filter-panel";
24
24
  *
25
25
  * @property {FilterLocalization|undefined} localization - translation for filter popup captions.
26
26
  *
27
+ * @property {boolean|undefined} defaultFilter - creates a draft condition when an empty filter panel opens. Defaults to true.
28
+ *
27
29
  * @property {boolean|undefined} disableDynamicFiltering - disables dynamic filtering. A way to apply filters on Save only.
28
30
  */
29
31
  /**
@@ -56,7 +58,12 @@ export declare class FilterPlugin extends BasePlugin {
56
58
  extraContent(): any;
57
59
  initConfig(config: ColumnFilterConfig): void;
58
60
  headerclick(e: CustomEvent<ColumnRegular>): Promise<void>;
59
- getColumnFilter(type?: boolean | string | string[]): Record<string, string[]>;
61
+ getColumnFilter(config?: ColumnRegular['filter']): Record<string, string[]>;
62
+ /** Resolve the preferred operator against the column's available filters. */
63
+ getDefaultFilter(config?: ColumnRegular['filter']): string | undefined;
64
+ /** Resolve grid and column-level draft opt-outs. */
65
+ shouldShowDefaultFilter(config?: ColumnRegular['filter']): boolean;
66
+ private isColumnFilterOption;
60
67
  isValidType(type: any): type is string;
61
68
  /**
62
69
  * Called on internal component change
@@ -83,6 +83,10 @@ export interface FilterLocalization {
83
83
  export interface ColumnFilterConfig {
84
84
  /** Grid-level blank policy. Individual columns can override fields. */
85
85
  blankSemantics?: BlankSemantics;
86
+ /**
87
+ * Whether empty filter panels start with a draft condition. Defaults to true.
88
+ */
89
+ defaultFilter?: boolean;
86
90
  /**
87
91
  * The collection of filters to be applied to the column.
88
92
  */
@@ -165,6 +169,10 @@ export interface ShowData extends FilterItem, Omit<ColumnRegular, 'filter'> {
165
169
  */
166
170
  autoCorrect?: boolean;
167
171
  filterTypes?: Record<string, string[]>;
172
+ /** Preferred operator for an empty panel. */
173
+ defaultFilterType?: string;
174
+ /** Whether an empty panel should create a draft condition. */
175
+ showDefaultFilter?: boolean;
168
176
  filterItems?: MultiFilterItem;
169
177
  hideDefaultFilters?: boolean;
170
178
  extraContent?: (data: ShowData) => any;
@@ -9,4 +9,5 @@ export declare const GROUP_COLUMN_PROP = "__rvgr-prop";
9
9
  export declare const GROUP_ORIGINAL_INDEX = "__rvgr-original-index";
10
10
  export declare const GROUP_EXPAND_BTN = "group-expand";
11
11
  export declare const GROUP_EXPAND_EVENT = "groupexpandclick";
12
+ export declare const BEFORE_GROUPING_APPLY_EVENT = "beforegroupingapply";
12
13
  export declare const GROUPING_ROW_TYPE: DimensionRows;
@@ -19,15 +19,12 @@ export declare class GroupingRowPlugin extends BasePlugin {
19
19
  private onDrag;
20
20
  private beforeTrimmedApply;
21
21
  private beforeFilterTrimmed;
22
- private isSortingRunning;
23
22
  /**
24
- * Returns grouping options for regrouping that must preserve current UI state.
25
- *
26
- * `expandedAll` and config `prevExpanded` are initial/config instructions.
27
- * Reusing them after sorting would reopen groups the user collapsed before
28
- * sorting instead of using the current grouped source state.
23
+ * Sorting changes proxy order without changing the physical source baseline.
24
+ * Other proxy changes, such as row dragging, are user-authored source order
25
+ * and must be retained when grouping is rebuilt.
29
26
  */
30
- private getCurrentExpandedOptions;
27
+ private isSortingActiveOrPending;
31
28
  /**
32
29
  * Starts global source update with group clearing and applying new one
33
30
  * Initiated when need to reapply grouping
@@ -44,5 +41,6 @@ export declare class GroupingRowPlugin extends BasePlugin {
44
41
  */
45
42
  setGrouping(options: GroupingOptions): void;
46
43
  clearGrouping(): void;
44
+ private remapRowDefinitions;
47
45
  private updateTrimmed;
48
46
  }
@@ -0,0 +1,7 @@
1
+ import type { DataType } from "../../types/index";
2
+ /**
3
+ * Restores group headers around already-sorted data indexes without rebuilding
4
+ * the physical source. Group insertion order follows the first sorted member,
5
+ * matching the order produced by regrouping a sorted source.
6
+ */
7
+ export declare function gatherGroupedRowIndexes(source: DataType[], sortedDataIndexes: number[]): number[] | undefined;
@@ -1,6 +1,15 @@
1
1
  import { Trimmed, TrimmedEntity } from "../../store/index";
2
2
  import type { DataType } from "../../types/index";
3
3
  export declare const TRIMMED_GROUPING = "grouping";
4
+ /**
5
+ * Converts a trim row index through the index maps produced while regrouping.
6
+ *
7
+ * Group rows are synthetic, so they may not exist in the first map. When a
8
+ * second map is available, fall back to the original index so trims created
9
+ * against the grouped physical source can still be remapped. If neither path
10
+ * resolves to a number, the caller drops the stale trim entry.
11
+ */
12
+ export declare function convertGroupingIndex(initialIndex: string | number, firstLevelMap: Record<number, number>, secondLevelMap?: Record<number, number>): number;
4
13
  /**
5
14
  * Prepare trimming updated indexes for grouping
6
15
  * @param initiallyTrimed
@@ -9,20 +9,18 @@ export declare const ROW_RESIZE_CANCEL_EVENT = "rowresizecancel";
9
9
  export declare class RowResizePlugin extends BasePlugin {
10
10
  private config;
11
11
  private enabled;
12
- private gridResizeRow;
13
- private gridPlugins;
14
12
  private active?;
15
- private readonly committedSizes;
16
- private readonly appliedIndexes;
13
+ private readonly appliedDefinitionIndexes;
17
14
  private animationFrame?;
18
15
  private pendingHeight?;
16
+ private pendingBottomAnchor;
17
+ private keepBottomAnchor;
18
+ private rowDefinitionRemapQueued;
19
+ private readonly pendingSourceCounts;
19
20
  private previousBodyCursor;
20
- private rowDefinitionsRef;
21
- static fromGridProperty(revogrid: HTMLRevoGridElement, providers: PluginProviders): RowResizePlugin;
22
21
  constructor(revogrid: HTMLRevoGridElement, providers: PluginProviders, config?: RowResizeConfig);
23
22
  private registerEventListeners;
24
- private controlFromGridProperty;
25
- private syncGridProperty;
23
+ syncGridConfig(refresh?: boolean): void;
26
24
  private readonly decorateRow;
27
25
  private readonly cancelForDataChange;
28
26
  private startResize;
@@ -35,10 +33,14 @@ export declare class RowResizePlugin extends BasePlugin {
35
33
  private cancel;
36
34
  private eventDetail;
37
35
  private commitResize;
38
- private readonly reapplyCommittedSizes;
39
- private readonly rebuildCommittedSizes;
40
- private applyCommittedSizes;
41
- private readonly syncAppliedIndexes;
36
+ private requestBottomAnchor;
37
+ private isMainViewportAtBottom;
38
+ private readonly updateBottomAnchorState;
39
+ private readonly applyPendingBottomAnchor;
40
+ private readonly scheduleRowDefinitionRemap;
41
+ private pruneRowDefinitions;
42
+ /** Map source-indexed row definitions back onto the current virtual order. */
43
+ private readonly reapplyRowDefinitionSizes;
42
44
  private finishGesture;
43
45
  destroy(): void;
44
46
  }
@@ -85,6 +85,11 @@ export declare class SortingPlugin extends BasePlugin {
85
85
  */
86
86
  startSorting(order?: SortingOrder, sortingFunc?: SortingOrderFunction, ignoreViewportUpdate?: boolean): void;
87
87
  startSorting(order?: SortingOrder, sortingFunc?: SortingOrderFunction, sortingColumns?: SortingColumnMap, sortingOrder?: SortingColumnOrder, ignoreViewportUpdate?: boolean): void;
88
+ /**
89
+ * Schedules the current active sort again after another plugin rebuilds row
90
+ * proxy indexes while keeping the physical source unchanged.
91
+ */
92
+ reapplySorting(): void;
88
93
  /**
89
94
  * Applies sorting requested by a sortable header click.
90
95
  *
@@ -1,8 +1,9 @@
1
1
  import ViewportProvider from './viewport.provider';
2
2
  import { DimensionStoreCollection, Trimmed } from "../store/index";
3
- import type { DimensionCols, DimensionType, MultiDimensionType, ColumnRegular, DimensionSettingsState, ViewPortScrollEvent, ViewSettingSizeProp } from "../types/index";
3
+ import type { DimensionCols, DimensionType, MultiDimensionType, ColumnRegular, DimensionSettingsState, ViewPortScrollEvent, ViewSettingSizeProp, RowDefinition } from "../types/index";
4
4
  export type DimensionConfig = {
5
5
  realSizeChanged(k: MultiDimensionType): void;
6
+ rowDefinitionsChanged?(definitions: RowDefinition[]): void;
6
7
  };
7
8
  export declare const DEFAULT_VIRTUAL_X: readonly DimensionCols[];
8
9
  export declare function isVirtualXDimension(type: DimensionCols, disableVirtualX?: boolean, virtualX?: readonly DimensionCols[]): boolean;
@@ -14,7 +15,9 @@ export declare function isVirtualXDimension(type: DimensionCols, disableVirtualX
14
15
  */
15
16
  export default class DimensionProvider {
16
17
  private viewports;
18
+ private config;
17
19
  readonly stores: DimensionStoreCollection;
20
+ private rowDefinitions;
18
21
  constructor(viewports: ViewportProvider, config: DimensionConfig);
19
22
  /**
20
23
  * Clear old sizes from dimension and viewports
@@ -22,6 +25,9 @@ export default class DimensionProvider {
22
25
  * @param count - count of items
23
26
  */
24
27
  clearSize(t: MultiDimensionType, count: number): void;
28
+ getRowDefinitions(): RowDefinition[];
29
+ syncRowDefinitions(definitions: RowDefinition[]): void;
30
+ setRowDefinitions(definitions: RowDefinition[]): void;
25
31
  /**
26
32
  * Apply new custom sizes to dimension and view port
27
33
  * @param type - dimension type
@@ -165,6 +165,18 @@ export interface ColumnType<TModel extends DataType = DataType> extends ColumnPr
165
165
  cellParser?: (model: TModel, column: ColumnRegular<ColumnProp, TModel>) => any;
166
166
  }
167
167
  export type Order = 'asc' | 'desc' | undefined;
168
+ /**
169
+ * Structured filter configuration for an individual column.
170
+ */
171
+ export interface ColumnFilterOption {
172
+ /** Filter family, or ordered filter families, available to the column. */
173
+ type: string | string[];
174
+ /**
175
+ * Preferred operator shown when the column has no filter conditions, or false
176
+ * to disable the draft.
177
+ */
178
+ default?: string | false;
179
+ }
168
180
  /**
169
181
  * Interface for regular column definition.
170
182
  * Regular column can be any column that is not a grouping column.
@@ -194,7 +206,7 @@ export interface ColumnRegular<P extends ColumnProp = ColumnProp, TModel extends
194
206
  /**
195
207
  * Filter. Require filter plugin to be installed and activated through grid config filter.
196
208
  */
197
- filter?: boolean | string | string[];
209
+ filter?: boolean | string | string[] | ColumnFilterOption;
198
210
  /** Partial column override for the grid-level blank filtering policy. */
199
211
  blankSemantics?: BlankSemantics;
200
212
  /**