@revolist/revogrid 4.24.2 → 4.25.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 (124) hide show
  1. package/dist/cjs/app-globals-Dmf-wvGw.js +8 -0
  2. package/dist/cjs/{cell-renderer-DnOCJ9ge.js → cell-renderer-Cf2Pu4S0.js} +3 -3
  3. package/dist/cjs/{column.drag.plugin-DSiFObaj.js → column.drag.plugin-E_K6cIAy.js} +101 -13
  4. package/dist/cjs/{column.service-CD70rNL2.js → column.service-C7p5eC5V.js} +1 -1
  5. package/dist/cjs/{dimension.helpers-CB5sNw5J.js → dimension.helpers-CgHhnN1d.js} +1 -1
  6. package/dist/cjs/{edit.utils-DDxnq9lw.js → edit.utils-rAcGublN.js} +1 -1
  7. package/dist/cjs/{filter.button-C4xpvyyE.js → filter.button-F2Bw3UAd.js} +1 -1
  8. package/dist/cjs/{header-cell-renderer-JXYFwayd.js → header-cell-renderer-DHClfIto.js} +2 -2
  9. package/dist/cjs/{index-BF6JDcMr.js → index--FdNLz1Z.js} +1 -1
  10. package/dist/cjs/{index-Dq8Xzj5l.js → index-DRvxCueo.js} +61 -20
  11. package/dist/cjs/index.cjs.js +556 -47
  12. package/dist/cjs/loader.cjs.js +3 -4
  13. package/dist/cjs/revo-grid.cjs.entry.js +256 -28
  14. package/dist/cjs/revo-grid.cjs.js +4 -5
  15. package/dist/cjs/revogr-attribution_7.cjs.entry.js +9 -9
  16. package/dist/cjs/revogr-clipboard_3.cjs.entry.js +6 -6
  17. package/dist/cjs/revogr-data_4.cjs.entry.js +8 -8
  18. package/dist/cjs/revogr-filter-panel.cjs.entry.js +19 -6
  19. package/dist/cjs/{text-editor-CvgloQdG.js → text-editor-F04kTx53.js} +2 -2
  20. package/dist/cjs/{viewport.store-Ci8H1bI9.js → viewport.store-B4Clk4m9.js} +1 -1
  21. package/dist/collection/collection-manifest.json +2 -3
  22. package/dist/collection/components/editors/revogr-edit-style.css +2 -2
  23. package/dist/collection/components/header/revogr-header-style.css +2 -2
  24. package/dist/collection/components/overlay/revogr-overlay-style.css +9 -6
  25. package/dist/collection/components/revoGrid/revo-grid-style.css +451 -276
  26. package/dist/collection/components/revoGrid/revo-grid.js +106 -35
  27. package/dist/collection/components/scroll/revogr-viewport-scroll-style.css +6 -4
  28. package/dist/collection/components/selectionFocus/revogr-focus-style.css +1 -1
  29. package/dist/collection/components/selectionTempRange/revogr-temp-range-style.css +2 -2
  30. package/dist/collection/index.js +1 -0
  31. package/dist/collection/plugins/filter/filter.panel.js +36 -3
  32. package/dist/collection/plugins/filter/filter.plugin.js +21 -6
  33. package/dist/collection/plugins/filter/filter.style.css +43 -38
  34. package/dist/collection/serve/controller.js +18 -2
  35. package/dist/collection/themeManager/presets/aurora.js +89 -0
  36. package/dist/collection/themeManager/presets/high-contrast-dark.js +89 -0
  37. package/dist/collection/themeManager/presets/high-contrast.js +89 -0
  38. package/dist/collection/themeManager/presets/index.js +25 -0
  39. package/dist/collection/themeManager/presets/midnight.js +89 -0
  40. package/dist/collection/themeManager/presets/ocean.js +89 -0
  41. package/dist/collection/themeManager/presets/shared.js +64 -0
  42. package/dist/collection/themeManager/theme.service.js +141 -20
  43. package/dist/collection/types/theme.js +73 -1
  44. package/dist/esm/app-globals-CA4dvSNd.js +6 -0
  45. package/dist/{revo-grid/cell-renderer-BQjko1zB.js → esm/cell-renderer-11cf-lu3.js} +3 -3
  46. package/dist/{revo-grid/column.drag.plugin-Cf9DYdQj.js → esm/column.drag.plugin-DKgC_0I1.js} +100 -14
  47. package/dist/esm/{column.service-BnFqXqQG.js → column.service-Cfw3L0PN.js} +1 -1
  48. package/dist/esm/{dimension.helpers-CXrsUc6f.js → dimension.helpers-fl4HSSK9.js} +1 -1
  49. package/dist/esm/{edit.utils-CXmmCnxE.js → edit.utils-4e9fsqOR.js} +1 -1
  50. package/dist/esm/{filter.button-B-RBiF67.js → filter.button-DMhpuAiw.js} +1 -1
  51. package/dist/esm/{header-cell-renderer-B3mYpZD3.js → header-cell-renderer-Cqtg1ETB.js} +2 -2
  52. package/dist/esm/{index-Chp_81rd.js → index-CtimkLsB.js} +62 -20
  53. package/dist/esm/{index-DBqlJITb.js → index-D24ku9ej.js} +1 -1
  54. package/dist/esm/index.js +513 -13
  55. package/dist/esm/loader.js +4 -5
  56. package/dist/esm/revo-grid.entry.js +255 -27
  57. package/dist/esm/revo-grid.js +5 -6
  58. package/dist/esm/revogr-attribution_7.entry.js +9 -9
  59. package/dist/esm/revogr-clipboard_3.entry.js +6 -6
  60. package/dist/esm/revogr-data_4.entry.js +8 -8
  61. package/dist/esm/revogr-filter-panel.entry.js +19 -6
  62. package/dist/{revo-grid/text-editor-DQtz2Y7B.js → esm/text-editor-DlMnLkRK.js} +2 -2
  63. package/dist/{revo-grid/viewport.store-D5jEuhLq.js → esm/viewport.store-BSXmsiZc.js} +1 -1
  64. package/dist/revo-grid/app-globals-CA4dvSNd.js +6 -0
  65. package/dist/{esm/cell-renderer-BQjko1zB.js → revo-grid/cell-renderer-11cf-lu3.js} +3 -3
  66. package/dist/{esm/column.drag.plugin-Cf9DYdQj.js → revo-grid/column.drag.plugin-DKgC_0I1.js} +100 -14
  67. package/dist/revo-grid/{column.service-BnFqXqQG.js → column.service-Cfw3L0PN.js} +1 -1
  68. package/dist/revo-grid/{dimension.helpers-CXrsUc6f.js → dimension.helpers-fl4HSSK9.js} +1 -1
  69. package/dist/revo-grid/{edit.utils-CXmmCnxE.js → edit.utils-4e9fsqOR.js} +1 -1
  70. package/dist/revo-grid/{filter.button-B-RBiF67.js → filter.button-DMhpuAiw.js} +1 -1
  71. package/dist/revo-grid/{header-cell-renderer-B3mYpZD3.js → header-cell-renderer-Cqtg1ETB.js} +2 -2
  72. package/dist/revo-grid/{index-Chp_81rd.js → index-CtimkLsB.js} +62 -20
  73. package/dist/revo-grid/{index-DBqlJITb.js → index-D24ku9ej.js} +1 -1
  74. package/dist/revo-grid/index.esm.js +513 -13
  75. package/dist/revo-grid/revo-grid.entry.js +255 -27
  76. package/dist/revo-grid/revo-grid.esm.js +5 -6
  77. package/dist/revo-grid/revogr-attribution_7.entry.js +9 -9
  78. package/dist/revo-grid/revogr-clipboard_3.entry.js +6 -6
  79. package/dist/revo-grid/revogr-data_4.entry.js +8 -8
  80. package/dist/revo-grid/revogr-filter-panel.entry.js +19 -6
  81. package/dist/{esm/text-editor-DQtz2Y7B.js → revo-grid/text-editor-DlMnLkRK.js} +2 -2
  82. package/dist/{esm/viewport.store-D5jEuhLq.js → revo-grid/viewport.store-BSXmsiZc.js} +1 -1
  83. package/dist/types/components/revoGrid/revo-grid.d.ts +16 -4
  84. package/dist/types/components.d.ts +28 -7
  85. package/dist/types/index.d.ts +1 -0
  86. package/dist/types/plugins/filter/filter.panel.d.ts +4 -0
  87. package/dist/types/plugins/filter/filter.plugin.d.ts +1 -0
  88. package/dist/types/plugins/filter/filter.types.d.ts +5 -0
  89. package/dist/types/stencil-public-runtime.d.ts +1 -0
  90. package/dist/types/themeManager/presets/aurora.d.ts +8 -0
  91. package/dist/types/themeManager/presets/high-contrast-dark.d.ts +8 -0
  92. package/dist/types/themeManager/presets/high-contrast.d.ts +8 -0
  93. package/dist/types/themeManager/presets/index.d.ts +33 -0
  94. package/dist/types/themeManager/presets/midnight.d.ts +8 -0
  95. package/dist/types/themeManager/presets/ocean.d.ts +8 -0
  96. package/dist/types/themeManager/presets/shared.d.ts +81 -0
  97. package/dist/types/themeManager/theme.service.d.ts +9 -6
  98. package/dist/types/types/theme.d.ts +88 -1
  99. package/hydrate/index.js +1307 -597
  100. package/hydrate/index.mjs +1307 -597
  101. package/package.json +4 -4
  102. package/standalone/index.js +1 -1
  103. package/standalone/revo-grid.js +1 -1
  104. package/standalone/revogr-edit2.js +1 -1
  105. package/standalone/revogr-filter-panel.js +1 -1
  106. package/standalone/revogr-focus2.js +1 -1
  107. package/standalone/revogr-header2.js +1 -1
  108. package/standalone/revogr-overlay-selection2.js +1 -1
  109. package/standalone/revogr-temp-range2.js +1 -1
  110. package/standalone/revogr-viewport-scroll2.js +1 -1
  111. package/dist/cjs/app-globals-CPPhEXmy.js +0 -26
  112. package/dist/cjs/theme.service-BgnxGIjK.js +0 -72
  113. package/dist/collection/global/global.js +0 -18
  114. package/dist/collection/themeManager/theme.compact.js +0 -8
  115. package/dist/collection/themeManager/theme.default.js +0 -8
  116. package/dist/collection/themeManager/theme.material.js +0 -8
  117. package/dist/esm/app-globals-B_B_OtEa.js +0 -24
  118. package/dist/esm/theme.service-BmnDvr6P.js +0 -69
  119. package/dist/revo-grid/app-globals-B_B_OtEa.js +0 -24
  120. package/dist/revo-grid/theme.service-BmnDvr6P.js +0 -69
  121. package/dist/types/global/global.d.ts +0 -1
  122. package/dist/types/themeManager/theme.compact.d.ts +0 -4
  123. package/dist/types/themeManager/theme.default.d.ts +0 -4
  124. package/dist/types/themeManager/theme.material.d.ts +0 -4
@@ -1,9 +1,7 @@
1
1
  /*!
2
2
  * Built by Revolist OU ❤️
3
3
  */
4
- import { ThemeCompact } from "./theme.compact";
5
- import { ThemeDefault } from "./theme.default";
6
- import { ThemeMaterial } from "./theme.material";
4
+ import { themeTokenCssVariables, } from "../types/theme";
7
5
  export const DEFAULT_THEME = 'default';
8
6
  export const allowedThemes = [
9
7
  DEFAULT_THEME,
@@ -12,6 +10,72 @@ export const allowedThemes = [
12
10
  'darkMaterial',
13
11
  'darkCompact',
14
12
  ];
13
+ const builtInThemeNames = new Set(allowedThemes);
14
+ const builtInThemes = Object.freeze({
15
+ default: Object.freeze({
16
+ name: 'default',
17
+ base: 'default',
18
+ colorScheme: 'light',
19
+ defaultRowSize: 27,
20
+ tokens: Object.freeze({}),
21
+ custom: false,
22
+ }),
23
+ material: Object.freeze({
24
+ name: 'material',
25
+ base: 'material',
26
+ colorScheme: 'light',
27
+ defaultRowSize: 42,
28
+ tokens: Object.freeze({}),
29
+ custom: false,
30
+ }),
31
+ compact: Object.freeze({
32
+ name: 'compact',
33
+ base: 'compact',
34
+ colorScheme: 'light',
35
+ defaultRowSize: 32,
36
+ tokens: Object.freeze({}),
37
+ custom: false,
38
+ }),
39
+ darkMaterial: Object.freeze({
40
+ name: 'darkMaterial',
41
+ base: 'material',
42
+ colorScheme: 'dark',
43
+ defaultRowSize: 42,
44
+ tokens: Object.freeze({}),
45
+ custom: false,
46
+ }),
47
+ darkCompact: Object.freeze({
48
+ name: 'darkCompact',
49
+ base: 'compact',
50
+ colorScheme: 'dark',
51
+ defaultRowSize: 32,
52
+ tokens: Object.freeze({}),
53
+ custom: false,
54
+ }),
55
+ });
56
+ function isBuiltInTheme(theme) {
57
+ return builtInThemeNames.has(theme);
58
+ }
59
+ function isPositiveSize(size) {
60
+ return typeof size === 'number' && Number.isFinite(size) && size > 0;
61
+ }
62
+ function getColorScheme(scheme, fallback) {
63
+ return scheme === 'light' || scheme === 'dark' ? scheme : fallback;
64
+ }
65
+ function getThemeTokens(tokens) {
66
+ if (!tokens || typeof tokens !== 'object') {
67
+ return {};
68
+ }
69
+ const result = {};
70
+ for (const [name, value] of Object.entries(tokens)) {
71
+ if (Object.hasOwn(themeTokenCssVariables, name) &&
72
+ typeof value === 'string' &&
73
+ value.trim()) {
74
+ result[name] = value;
75
+ }
76
+ }
77
+ return result;
78
+ }
15
79
  export default class ThemeService {
16
80
  get theme() {
17
81
  return this.currentTheme;
@@ -20,33 +84,90 @@ export default class ThemeService {
20
84
  return this.customRowSize || this.currentTheme.defaultRowSize;
21
85
  }
22
86
  set rowSize(size) {
23
- this.customRowSize = size;
87
+ this.customRowSize = isPositiveSize(size) ? size : 0;
24
88
  }
25
89
  constructor(cfg) {
90
+ this.currentTheme = Object.assign({}, builtInThemes.default);
91
+ this.customThemes = new Map();
26
92
  this.customRowSize = 0;
27
- this.customRowSize = cfg.rowSize;
93
+ this.rowSize = cfg.rowSize;
28
94
  this.register('default');
29
95
  }
96
+ setDefinitions(definitions = []) {
97
+ const customThemes = new Map();
98
+ if (Array.isArray(definitions)) {
99
+ for (const definition of definitions) {
100
+ if (!definition || typeof definition !== 'object') {
101
+ continue;
102
+ }
103
+ if (typeof definition.name !== 'string' || !definition.name.trim()) {
104
+ continue;
105
+ }
106
+ const name = getTheme(definition.name);
107
+ if (isBuiltInTheme(name)) {
108
+ continue;
109
+ }
110
+ customThemes.set(name, Object.assign(Object.assign({}, definition), { name }));
111
+ }
112
+ }
113
+ this.customThemes = customThemes;
114
+ }
30
115
  register(theme) {
31
- const parsedTheme = getTheme(theme);
32
- switch (parsedTheme) {
33
- case 'material':
34
- case 'darkMaterial':
35
- this.currentTheme = new ThemeMaterial();
36
- break;
37
- case 'compact':
38
- case 'darkCompact':
39
- this.currentTheme = new ThemeCompact();
116
+ const name = getTheme(theme);
117
+ if (isBuiltInTheme(name)) {
118
+ this.currentTheme = Object.assign(Object.assign({}, builtInThemes[name]), { tokens: {} });
119
+ return this.currentTheme;
120
+ }
121
+ const definition = this.customThemes.get(name);
122
+ if (!definition) {
123
+ this.currentTheme = Object.assign(Object.assign({}, builtInThemes.default), { name, tokens: {}, custom: true });
124
+ return this.currentTheme;
125
+ }
126
+ this.currentTheme = this.resolveDefinition(name);
127
+ return this.currentTheme;
128
+ }
129
+ resolveDefinition(name) {
130
+ const chain = [];
131
+ const visited = new Set();
132
+ let parentName = name;
133
+ let validChain = true;
134
+ while (!isBuiltInTheme(parentName)) {
135
+ if (visited.has(parentName)) {
136
+ validChain = false;
40
137
  break;
41
- default:
42
- this.currentTheme = new ThemeDefault();
138
+ }
139
+ visited.add(parentName);
140
+ const definition = this.customThemes.get(parentName);
141
+ if (!definition) {
142
+ validChain = false;
43
143
  break;
144
+ }
145
+ chain.push(definition);
146
+ parentName = getTheme(definition.extends);
147
+ }
148
+ let resolved = Object.assign(Object.assign({}, (validChain && isBuiltInTheme(parentName)
149
+ ? builtInThemes[parentName]
150
+ : builtInThemes.default)), { tokens: {} });
151
+ if (validChain) {
152
+ chain.reverse();
44
153
  }
154
+ const definitions = validChain ? chain : chain.slice(0, 1);
155
+ for (const definition of definitions) {
156
+ resolved = {
157
+ name: definition.name,
158
+ base: resolved.base,
159
+ colorScheme: getColorScheme(definition.colorScheme, resolved.colorScheme),
160
+ defaultRowSize: isPositiveSize(definition.defaultRowSize)
161
+ ? definition.defaultRowSize
162
+ : resolved.defaultRowSize,
163
+ tokens: Object.assign(Object.assign({}, resolved.tokens), getThemeTokens(definition.tokens)),
164
+ custom: true,
165
+ };
166
+ }
167
+ return resolved;
45
168
  }
46
169
  }
47
170
  export function getTheme(theme) {
48
- if (theme && allowedThemes.indexOf(theme) > -1) {
49
- return theme;
50
- }
51
- return DEFAULT_THEME;
171
+ const normalizedTheme = typeof theme === 'string' ? theme.trim() : '';
172
+ return normalizedTheme || DEFAULT_THEME;
52
173
  }
@@ -1 +1,73 @@
1
- export {};
1
+ /*!
2
+ * Built by Revolist OU ❤️
3
+ */
4
+ /**
5
+ * Public theme tokens and their CSS custom-property counterparts.
6
+ * Keep this map as the single source of truth for typed theme definitions.
7
+ */
8
+ export const themeTokenCssVariables = {
9
+ primary: '--revo-grid-primary',
10
+ primaryTransparent: '--revo-grid-primary-transparent',
11
+ background: '--revo-grid-background',
12
+ foreground: '--revo-grid-foreground',
13
+ divider: '--revo-grid-divider',
14
+ shadow: '--revo-grid-shadow',
15
+ text: '--revo-grid-text',
16
+ border: '--revo-grid-border',
17
+ headerBg: '--revo-grid-header-bg',
18
+ headerColor: '--revo-grid-header-color',
19
+ headerBorder: '--revo-grid-header-border',
20
+ headerFocusedBg: '--revo-grid-header-focused-bg',
21
+ headerHoverBg: '--revo-grid-header-hover-bg',
22
+ cellBorder: '--revo-grid-cell-border',
23
+ cellVerticalBorder: '--revo-grid-cell-vertical-border',
24
+ focusedBg: '--revo-grid-focused-bg',
25
+ rowHover: '--revo-grid-row-hover',
26
+ rowHeadersBg: '--revo-grid-row-headers-bg',
27
+ rowHeadersColor: '--revo-grid-row-headers-color',
28
+ cellDisabledBg: '--revo-grid-cell-disabled-bg',
29
+ filterPanelBg: '--revo-grid-filter-panel-bg',
30
+ filterPanelBorder: '--revo-grid-filter-panel-border',
31
+ filterPanelShadow: '--revo-grid-filter-panel-shadow',
32
+ filterPanelInputBg: '--revo-grid-filter-panel-input-bg',
33
+ filterPanelDivider: '--revo-grid-filter-panel-divider',
34
+ filterPanelSelectBorder: '--revo-grid-filter-panel-select-border',
35
+ filterPanelSelectBorderHover: '--revo-grid-filter-panel-select-border-hover',
36
+ filterPanelReorderAccent: '--revo-grid-filter-panel-reorder-accent',
37
+ filterPanelReorderColor: '--revo-grid-filter-panel-reorder-color',
38
+ filterPanelText: '--revo-grid-filter-panel-text',
39
+ filterPanelMutedText: '--revo-grid-filter-panel-muted-text',
40
+ filterPanelFocusRing: '--revo-grid-filter-panel-focus-ring',
41
+ filterPanelIcon: '--revo-grid-filter-panel-icon',
42
+ filterPanelIconActive: '--revo-grid-filter-panel-icon-active',
43
+ filterPanelSelectArrow: '--revo-grid-filter-panel-select-arrow',
44
+ filterPanelSelectArrowDisabled: '--revo-grid-filter-panel-select-arrow-disabled',
45
+ fontFamily: '--revo-grid-font-family',
46
+ fontSize: '--revo-grid-font-size',
47
+ headerHeight: '--revo-grid-header-height',
48
+ headerFontSize: '--revo-grid-header-font-size',
49
+ headerFontWeight: '--revo-grid-header-font-weight',
50
+ headerTextTransform: '--revo-grid-header-text-transform',
51
+ headerTextAlign: '--revo-grid-header-text-align',
52
+ cellTextAlign: '--revo-grid-cell-text-align',
53
+ headerPadding: '--revo-grid-header-padding',
54
+ cellPadding: '--revo-grid-cell-padding',
55
+ selectionBorder: '--revo-grid-selection-border',
56
+ selectionBg: '--revo-grid-selection-bg',
57
+ autofillHandleBg: '--revo-grid-autofill-handle-bg',
58
+ autofillHandleBorder: '--revo-grid-autofill-handle-border',
59
+ rangeHandleBg: '--revo-grid-range-handle-bg',
60
+ temporaryRangeBorder: '--revo-grid-temporary-range-border',
61
+ temporarySelectionBorder: '--revo-grid-temporary-selection-border',
62
+ headerResizeHover: '--revo-grid-header-resize-hover',
63
+ buttonText: '--revo-grid-button-text',
64
+ buttonBg: '--revo-grid-button-bg',
65
+ buttonSuccessBg: '--revo-grid-button-success-bg',
66
+ buttonDangerBg: '--revo-grid-button-danger-bg',
67
+ buttonOutlineBorder: '--revo-grid-button-outline-border',
68
+ buttonOutlineText: '--revo-grid-button-outline-text',
69
+ };
70
+ /** Type-safe identity helper for reusable theme definitions. */
71
+ export function defineTheme(theme) {
72
+ return theme;
73
+ }
@@ -0,0 +1,6 @@
1
+ /*!
2
+ * Built by Revolist OU ❤️
3
+ */
4
+ const globalScripts = () => {};
5
+
6
+ export { globalScripts as g };
@@ -1,9 +1,9 @@
1
1
  /*!
2
2
  * Built by Revolist OU ❤️
3
3
  */
4
- import { h, f as Build } from './index-Chp_81rd.js';
5
- import { n as DATA_ROW, b as getSourceItem, m as DATA_COL, C as CELL_CLASS, w as DRAG_ICON_CLASS, x as DRAGGABLE_CLASS } from './dimension.helpers-CXrsUc6f.js';
6
- import { A as getCellRaw, v as isGroupingColumn, l as GROUP_EXPAND_BTN, m as GROUP_EXPAND_EVENT, j as GROUP_COLUMN_PROP, P as PSEUDO_GROUP_ITEM, h as GROUP_EXPANDED, G as GROUP_DEPTH, O as isRowDragService, B as getCellDataParsed } from './column.service-BnFqXqQG.js';
4
+ import { h, e as Build } from './index-CtimkLsB.js';
5
+ import { n as DATA_ROW, b as getSourceItem, m as DATA_COL, C as CELL_CLASS, w as DRAG_ICON_CLASS, x as DRAGGABLE_CLASS } from './dimension.helpers-fl4HSSK9.js';
6
+ import { A as getCellRaw, v as isGroupingColumn, l as GROUP_EXPAND_BTN, m as GROUP_EXPAND_EVENT, j as GROUP_COLUMN_PROP, P as PSEUDO_GROUP_ITEM, h as GROUP_EXPANDED, G as GROUP_DEPTH, O as isRowDragService, B as getCellDataParsed } from './column.service-Cfw3L0PN.js';
7
7
 
8
8
  /**
9
9
  * Renders sorting direction and optional additive sorting rank.
@@ -1,14 +1,85 @@
1
1
  /*!
2
2
  * Built by Revolist OU ❤️
3
3
  */
4
- import { J as reduce, g as getRange, K as baseEach, C as getColumnType, c as columnTypes, L as toInteger, u as isGrouping, t as getGroupingName, r as rowTypes, B as getCellDataParsed, A as getCellRaw, j as GROUP_COLUMN_PROP, I as getColumnByProp, h as GROUP_EXPANDED, x as getParsedGroup, y as isSameGroup, G as GROUP_DEPTH, e as PSEUDO_GROUP_ITEM_VALUE, d as PSEUDO_GROUP_ITEM_ID, o as GROUPING_ROW_TYPE, p as getSource, f as PSEUDO_GROUP_COLUMN, s as gatherGrouping, m as GROUP_EXPAND_EVENT, v as isGroupingColumn, q as getExpanded, E as isColGrouping } from './column.service-BnFqXqQG.js';
5
- import { K as createStore, l as setStore, i as calculateDimensionData, L as identity, N as isArray, b as getSourceItem, g as getPhysical, e as setItems, j as getItemByPosition } from './dimension.helpers-CXrsUc6f.js';
6
- import { j as calculateRowHeaderSize } from './viewport.store-D5jEuhLq.js';
7
- import { g as getScrollbarSize, t as timeout } from './index-DBqlJITb.js';
8
- import { h } from './index-Chp_81rd.js';
9
- import { b as FILTER_PROP, i as isFilterBtn } from './filter.button-B-RBiF67.js';
4
+ import { J as reduce, g as getRange, K as baseEach, C as getColumnType, c as columnTypes, L as toInteger, u as isGrouping, t as getGroupingName, r as rowTypes, B as getCellDataParsed, A as getCellRaw, j as GROUP_COLUMN_PROP, I as getColumnByProp, h as GROUP_EXPANDED, x as getParsedGroup, y as isSameGroup, G as GROUP_DEPTH, e as PSEUDO_GROUP_ITEM_VALUE, d as PSEUDO_GROUP_ITEM_ID, o as GROUPING_ROW_TYPE, p as getSource, f as PSEUDO_GROUP_COLUMN, s as gatherGrouping, m as GROUP_EXPAND_EVENT, v as isGroupingColumn, q as getExpanded, E as isColGrouping } from './column.service-Cfw3L0PN.js';
5
+ import { K as createStore, l as setStore, i as calculateDimensionData, L as identity, N as isArray, b as getSourceItem, g as getPhysical, e as setItems, j as getItemByPosition } from './dimension.helpers-fl4HSSK9.js';
6
+ import { j as calculateRowHeaderSize } from './viewport.store-BSXmsiZc.js';
7
+ import { g as getScrollbarSize, t as timeout } from './index-D24ku9ej.js';
8
+ import { h } from './index-CtimkLsB.js';
9
+ import { b as FILTER_PROP, i as isFilterBtn } from './filter.button-DMhpuAiw.js';
10
10
  import { d as debounce } from './debounce-PCRWZliA.js';
11
- import { O as ON_COLUMN_CLICK, d as dispatch } from './header-cell-renderer-B3mYpZD3.js';
11
+ import { O as ON_COLUMN_CLICK, d as dispatch } from './header-cell-renderer-Cqtg1ETB.js';
12
+
13
+ /**
14
+ * Public theme tokens and their CSS custom-property counterparts.
15
+ * Keep this map as the single source of truth for typed theme definitions.
16
+ */
17
+ const themeTokenCssVariables = {
18
+ primary: '--revo-grid-primary',
19
+ primaryTransparent: '--revo-grid-primary-transparent',
20
+ background: '--revo-grid-background',
21
+ foreground: '--revo-grid-foreground',
22
+ divider: '--revo-grid-divider',
23
+ shadow: '--revo-grid-shadow',
24
+ text: '--revo-grid-text',
25
+ border: '--revo-grid-border',
26
+ headerBg: '--revo-grid-header-bg',
27
+ headerColor: '--revo-grid-header-color',
28
+ headerBorder: '--revo-grid-header-border',
29
+ headerFocusedBg: '--revo-grid-header-focused-bg',
30
+ headerHoverBg: '--revo-grid-header-hover-bg',
31
+ cellBorder: '--revo-grid-cell-border',
32
+ cellVerticalBorder: '--revo-grid-cell-vertical-border',
33
+ focusedBg: '--revo-grid-focused-bg',
34
+ rowHover: '--revo-grid-row-hover',
35
+ rowHeadersBg: '--revo-grid-row-headers-bg',
36
+ rowHeadersColor: '--revo-grid-row-headers-color',
37
+ cellDisabledBg: '--revo-grid-cell-disabled-bg',
38
+ filterPanelBg: '--revo-grid-filter-panel-bg',
39
+ filterPanelBorder: '--revo-grid-filter-panel-border',
40
+ filterPanelShadow: '--revo-grid-filter-panel-shadow',
41
+ filterPanelInputBg: '--revo-grid-filter-panel-input-bg',
42
+ filterPanelDivider: '--revo-grid-filter-panel-divider',
43
+ filterPanelSelectBorder: '--revo-grid-filter-panel-select-border',
44
+ filterPanelSelectBorderHover: '--revo-grid-filter-panel-select-border-hover',
45
+ filterPanelReorderAccent: '--revo-grid-filter-panel-reorder-accent',
46
+ filterPanelReorderColor: '--revo-grid-filter-panel-reorder-color',
47
+ filterPanelText: '--revo-grid-filter-panel-text',
48
+ filterPanelMutedText: '--revo-grid-filter-panel-muted-text',
49
+ filterPanelFocusRing: '--revo-grid-filter-panel-focus-ring',
50
+ filterPanelIcon: '--revo-grid-filter-panel-icon',
51
+ filterPanelIconActive: '--revo-grid-filter-panel-icon-active',
52
+ filterPanelSelectArrow: '--revo-grid-filter-panel-select-arrow',
53
+ filterPanelSelectArrowDisabled: '--revo-grid-filter-panel-select-arrow-disabled',
54
+ fontFamily: '--revo-grid-font-family',
55
+ fontSize: '--revo-grid-font-size',
56
+ headerHeight: '--revo-grid-header-height',
57
+ headerFontSize: '--revo-grid-header-font-size',
58
+ headerFontWeight: '--revo-grid-header-font-weight',
59
+ headerTextTransform: '--revo-grid-header-text-transform',
60
+ headerTextAlign: '--revo-grid-header-text-align',
61
+ cellTextAlign: '--revo-grid-cell-text-align',
62
+ headerPadding: '--revo-grid-header-padding',
63
+ cellPadding: '--revo-grid-cell-padding',
64
+ selectionBorder: '--revo-grid-selection-border',
65
+ selectionBg: '--revo-grid-selection-bg',
66
+ autofillHandleBg: '--revo-grid-autofill-handle-bg',
67
+ autofillHandleBorder: '--revo-grid-autofill-handle-border',
68
+ rangeHandleBg: '--revo-grid-range-handle-bg',
69
+ temporaryRangeBorder: '--revo-grid-temporary-range-border',
70
+ temporarySelectionBorder: '--revo-grid-temporary-selection-border',
71
+ headerResizeHover: '--revo-grid-header-resize-hover',
72
+ buttonText: '--revo-grid-button-text',
73
+ buttonBg: '--revo-grid-button-bg',
74
+ buttonSuccessBg: '--revo-grid-button-success-bg',
75
+ buttonDangerBg: '--revo-grid-button-danger-bg',
76
+ buttonOutlineBorder: '--revo-grid-button-outline-border',
77
+ buttonOutlineText: '--revo-grid-button-outline-text',
78
+ };
79
+ /** Type-safe identity helper for reusable theme definitions. */
80
+ function defineTheme(theme) {
81
+ return theme;
82
+ }
12
83
 
13
84
  function calculateRealSize({ count, originItemSize, sizes, }) {
14
85
  const safeCount = Math.max(0, count);
@@ -1274,13 +1345,14 @@ class FilterPlugin extends BasePlugin {
1274
1345
  this.filterNameIndexByType = Object.assign({}, filterNames);
1275
1346
  this.filterFunctionsIndexedByType = Object.assign({}, filterCoreFunctionsIndexedByType);
1276
1347
  this.filterProp = FILTER_PROP;
1348
+ this.allowDuplicateOperators = true;
1277
1349
  if (config) {
1278
1350
  this.initConfig(config);
1279
1351
  }
1280
1352
  const existingNodes = this.revogrid.registerVNode.filter(n => typeof n === 'object' && n.$tag$ !== FILTE_PANEL);
1281
1353
  this.revogrid.registerVNode = [
1282
1354
  ...existingNodes,
1283
- h("revogr-filter-panel", { filterNames: this.filterNameIndexByType, filterEntities: this.filterFunctionsIndexedByType, filterCaptions: (_a = config === null || config === void 0 ? void 0 : config.localization) === null || _a === void 0 ? void 0 : _a.captions, onFilterChange: e => this.onFilterChange(e.detail), onResetChange: e => this.onFilterReset(e.detail), disableDynamicFiltering: config === null || config === void 0 ? void 0 : config.disableDynamicFiltering, closeOnOutsideClick: config === null || config === void 0 ? void 0 : config.closeFilterPanelOnOutsideClick, ref: e => (this.pop = e) }, ' ', this.extraContent()),
1355
+ h("revogr-filter-panel", { filterNames: this.filterNameIndexByType, filterEntities: this.filterFunctionsIndexedByType, filterCaptions: (_a = config === null || config === void 0 ? void 0 : config.localization) === null || _a === void 0 ? void 0 : _a.captions, onFilterChange: e => this.onFilterChange(e.detail), onResetChange: e => this.onFilterReset(e.detail), disableDynamicFiltering: config === null || config === void 0 ? void 0 : config.disableDynamicFiltering, closeOnOutsideClick: config === null || config === void 0 ? void 0 : config.closeFilterPanelOnOutsideClick, allowDuplicateOperators: this.allowDuplicateOperators, ref: e => (this.pop = e) }, ' ', this.extraContent()),
1284
1356
  ];
1285
1357
  const aftersourceset = async () => {
1286
1358
  const filterCollectionProps = Object.keys(this.filterCollection);
@@ -1307,15 +1379,24 @@ class FilterPlugin extends BasePlugin {
1307
1379
  };
1308
1380
  this.addEventListener('headerclick', e => this.headerclick(e));
1309
1381
  this.addEventListener(FILTER_CONFIG_CHANGED_EVENT, ({ detail }) => {
1310
- if (!detail ||
1311
- (typeof detail === 'object' &&
1312
- (!detail.multiFilterItems ||
1313
- !Object.keys(detail.multiFilterItems).length))) {
1382
+ if (!detail) {
1314
1383
  this.clearFiltering();
1315
1384
  return;
1316
1385
  }
1317
1386
  if (typeof detail === 'object') {
1318
- this.initConfig(detail);
1387
+ const detailKeys = Object.keys(detail);
1388
+ const preserveCurrentFilters = !detailKeys.includes('multiFilterItems') &&
1389
+ detailKeys.includes('allowDuplicateOperators');
1390
+ this.initConfig(preserveCurrentFilters
1391
+ ? Object.assign(Object.assign({}, detail), { multiFilterItems: this.multiFilterItems }) : detail);
1392
+ if (!detail.multiFilterItems || !Object.keys(detail.multiFilterItems).length) {
1393
+ if (preserveCurrentFilters) {
1394
+ aftersourceset();
1395
+ return;
1396
+ }
1397
+ this.clearFiltering();
1398
+ return;
1399
+ }
1319
1400
  }
1320
1401
  aftersourceset();
1321
1402
  });
@@ -1329,6 +1410,11 @@ class FilterPlugin extends BasePlugin {
1329
1410
  return null;
1330
1411
  }
1331
1412
  initConfig(config) {
1413
+ var _a;
1414
+ this.allowDuplicateOperators = (_a = config.allowDuplicateOperators) !== null && _a !== void 0 ? _a : true;
1415
+ if (this.pop) {
1416
+ this.pop.allowDuplicateOperators = this.allowDuplicateOperators;
1417
+ }
1332
1418
  if (config.multiFilterItems) {
1333
1419
  this.multiFilterItems = Object.assign({}, config.multiFilterItems);
1334
1420
  }
@@ -2865,4 +2951,4 @@ function getColumnDragPosition(targetItem, startItem, renderOffset, scrollOffset
2865
2951
  return insertionEdge - renderOffset + scrollOffset;
2866
2952
  }
2867
2953
 
2868
- export { AutoSizeColumnPlugin as A, BasePlugin as B, ColumnAutoSizeMode as C, DimensionStore as D, ExportFilePlugin as E, FILTER_TRIMMED_TYPE as F, GroupingRowPlugin as G, SelectionStore as S, StretchColumn as a, ExportCsv as b, FILTER_CONFIG_CHANGED_EVENT as c, FILTE_PANEL as d, FilterPlugin as e, filterCoreFunctionsIndexedByType as f, filterTypes as g, filterNames as h, isStretchPlugin as i, doCollapse as j, doExpand as k, COLUMN_DRAG_MOVE_EVENT as l, COLUMN_DRAG_END_EVENT as m, BEFORE_COLUMN_DRAG_END_EVENT as n, COLUMN_DRAG_START_EVENT as o, ColumnMovePlugin as p, getLeftRelative as q, getColumnDragPosition as r, SortingPlugin as s, hasActiveSorting as t, getSortingIndex as u, sortIndexByItems as v, defaultCellCompare as w, descCellCompare as x, getNextOrder as y, getComparer as z };
2954
+ export { AutoSizeColumnPlugin as A, BasePlugin as B, ColumnAutoSizeMode as C, DimensionStore as D, ExportFilePlugin as E, FILTER_TRIMMED_TYPE as F, GroupingRowPlugin as G, getNextOrder as H, getComparer as I, SelectionStore as S, StretchColumn as a, ExportCsv as b, FILTER_CONFIG_CHANGED_EVENT as c, defineTheme as d, FILTE_PANEL as e, FilterPlugin as f, filterCoreFunctionsIndexedByType as g, filterTypes as h, isStretchPlugin as i, filterNames as j, doCollapse as k, doExpand as l, COLUMN_DRAG_MOVE_EVENT as m, COLUMN_DRAG_END_EVENT as n, BEFORE_COLUMN_DRAG_END_EVENT as o, COLUMN_DRAG_START_EVENT as p, ColumnMovePlugin as q, getLeftRelative as r, getColumnDragPosition as s, themeTokenCssVariables as t, SortingPlugin as u, hasActiveSorting as v, getSortingIndex as w, sortIndexByItems as x, defaultCellCompare as y, descCellCompare as z };
@@ -1,7 +1,7 @@
1
1
  /*!
2
2
  * Built by Revolist OU ❤️
3
3
  */
4
- import { Q as toFinite, U as keys, V as isArrayLike, W as baseIteratee, N as isArray, G as GRID_INTERNALS, X as isIterateeCall, a as getVisibleSourceItem, o as DISABLED_CLASS, C as CELL_CLASS, b as getSourceItem } from './dimension.helpers-CXrsUc6f.js';
4
+ import { Q as toFinite, U as keys, V as isArrayLike, W as baseIteratee, N as isArray, G as GRID_INTERNALS, X as isIterateeCall, a as getVisibleSourceItem, o as DISABLED_CLASS, C as CELL_CLASS, b as getSourceItem } from './dimension.helpers-fl4HSSK9.js';
5
5
 
6
6
  /**
7
7
  * Converts `value` to an integer.
@@ -2,7 +2,7 @@
2
2
  * Built by Revolist OU ❤️
3
3
  */
4
4
  import { i as isObject, b as baseGetTag, r as root, S as Symbol, a as isObjectLike, f as freeGlobal, c as isSymbol, t as toNumber } from './debounce-PCRWZliA.js';
5
- import { S as StencilCore } from './index-Chp_81rd.js';
5
+ import { S as StencilCore } from './index-CtimkLsB.js';
6
6
 
7
7
  /**
8
8
  * Todo:
@@ -1,7 +1,7 @@
1
1
  /*!
2
2
  * Built by Revolist OU ❤️
3
3
  */
4
- import { O as KeyCodesEnum, P as OsPlatform, I as codesLetter, J as keyValues, E as EDIT_INPUT_WR } from './dimension.helpers-CXrsUc6f.js';
4
+ import { O as KeyCodesEnum, P as OsPlatform, I as codesLetter, J as keyValues, E as EDIT_INPUT_WR } from './dimension.helpers-fl4HSSK9.js';
5
5
 
6
6
  function isMetaKey(code) {
7
7
  const keys = [
@@ -1,7 +1,7 @@
1
1
  /*!
2
2
  * Built by Revolist OU ❤️
3
3
  */
4
- import { h } from './index-Chp_81rd.js';
4
+ import { h } from './index-CtimkLsB.js';
5
5
 
6
6
  const FILTER_BUTTON_CLASS = 'rv-filter';
7
7
  const FILTER_BUTTON_ACTIVE = 'active';
@@ -1,8 +1,8 @@
1
1
  /*!
2
2
  * Built by Revolist OU ❤️
3
3
  */
4
- import { h } from './index-Chp_81rd.js';
5
- import { Q as doPropMerge } from './column.service-BnFqXqQG.js';
4
+ import { h } from './index-CtimkLsB.js';
5
+ import { Q as doPropMerge } from './column.service-Cfw3L0PN.js';
6
6
 
7
7
  /**
8
8
  * Dispatches a custom event to a specified target element.