@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,12 +1,12 @@
1
1
  /*!
2
2
  * Built by Revolist OU ❤️
3
3
  */
4
- import { r as registerInstance, d as createEvent, h, e as Host, g as getElement } from './index-Chp_81rd.js';
5
- import { M as ColumnService, u as isGrouping } from './column.service-BnFqXqQG.js';
6
- import { B as ROW_FOCUSED_CLASS, b as getSourceItem, n as DATA_ROW, m as DATA_COL, M as MIN_COL_SIZE, r as HEADER_SORTABLE_CLASS, H as HEADER_CLASS, F as FOCUS_CLASS, k as getItemByIndex, u as HEADER_ROW_CLASS, v as HEADER_ACTUAL_ROW_CLASS } from './dimension.helpers-CXrsUc6f.js';
7
- import { G as GroupingRowRenderer, C as CellRenderer, R as RowRenderer, P as PADDING_DEPTH, S as SortingSign } from './cell-renderer-BQjko1zB.js';
8
- import { c as FilterButton } from './filter.button-B-RBiF67.js';
9
- import { H as HeaderCellRenderer } from './header-cell-renderer-B3mYpZD3.js';
4
+ import { r as registerInstance, a as createEvent, h, d as Host, g as getElement } from './index-CtimkLsB.js';
5
+ import { M as ColumnService, u as isGrouping } from './column.service-Cfw3L0PN.js';
6
+ import { B as ROW_FOCUSED_CLASS, b as getSourceItem, n as DATA_ROW, m as DATA_COL, M as MIN_COL_SIZE, r as HEADER_SORTABLE_CLASS, H as HEADER_CLASS, F as FOCUS_CLASS, k as getItemByIndex, u as HEADER_ROW_CLASS, v as HEADER_ACTUAL_ROW_CLASS } from './dimension.helpers-fl4HSSK9.js';
7
+ import { G as GroupingRowRenderer, C as CellRenderer, R as RowRenderer, P as PADDING_DEPTH, S as SortingSign } from './cell-renderer-11cf-lu3.js';
8
+ import { c as FilterButton } from './filter.button-DMhpuAiw.js';
9
+ import { H as HeaderCellRenderer } from './header-cell-renderer-Cqtg1ETB.js';
10
10
  import { t as throttle, L as LocalScrollTimer, a as LocalScrollService, g as getContentSize } from './throttle-Cpk1LoGk.js';
11
11
  import { H as HEADER_SLOT, C as CONTENT_SLOT, F as FOOTER_SLOT } from './viewport.helpers-CoCAvmZs.js';
12
12
  import './debounce-PCRWZliA.js';
@@ -338,7 +338,7 @@ const HeaderGroupRenderer = (p) => {
338
338
  return (h(HeaderCellRenderer, { data: Object.assign(Object.assign({}, p.group), { prop: '', providers: p.providers, index: p.start }), props: groupProps, additionalData: p.additionalData }));
339
339
  };
340
340
 
341
- const revogrHeaderStyleCss = () => `@charset "UTF-8";revogr-header{position:relative;z-index:5;display:block}revogr-header .header-rgRow{display:block;position:relative}revogr-header .header-rgRow.group{z-index:0}revogr-header .group-rgRow{position:relative;overflow:hidden}revogr-header .rgHeaderCell{position:absolute;box-sizing:border-box;height:100%;z-index:1;display:flex}revogr-header .rgHeaderCell.align-center{text-align:center}revogr-header .rgHeaderCell.align-left{text-align:left}revogr-header .rgHeaderCell.align-right{text-align:right}revogr-header .rgHeaderCell.sortable{cursor:pointer}revogr-header .rgHeaderCell .sort-indicator{display:inline-flex;align-items:flex-start;gap:1px}revogr-header .rgHeaderCell .sort-indicator i.asc:after,revogr-header .rgHeaderCell .sort-indicator i.desc:after{font-size:13px}revogr-header .rgHeaderCell .sort-indicator i.asc:after{content:"↑"}revogr-header .rgHeaderCell .sort-indicator i.desc:after{content:"↓"}revogr-header .rgHeaderCell .sort-indicator .sort-order-index{font-size:10px;line-height:1;top:0}revogr-header .rgHeaderCell.active{z-index:10}revogr-header .rgHeaderCell.active .resizable{background-color:deepskyblue}revogr-header .rgHeaderCell .header-content{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;flex-grow:1}revogr-header .rgHeaderCell .resizable{display:block;position:absolute;z-index:90;touch-action:none;user-select:none}revogr-header .rgHeaderCell .resizable:hover{background-color:deepskyblue}revogr-header .rgHeaderCell>.resizable-r{cursor:ew-resize;width:6px;right:0;top:0;height:100%}revogr-header .rgHeaderCell>.resizable-rb{cursor:se-resize;width:6px;height:6px;right:0;bottom:0}revogr-header .rgHeaderCell>.resizable-b{cursor:s-resize;height:6px;bottom:0;width:100%;left:0}revogr-header .rgHeaderCell>.resizable-lb{cursor:sw-resize;width:6px;height:6px;left:0;bottom:0}revogr-header .rgHeaderCell>.resizable-l{cursor:w-resize;width:6px;left:0;height:100%;top:0}revogr-header .rgHeaderCell>.resizable-lt{cursor:nw-resize;width:6px;height:6px;left:0;top:0}revogr-header .rgHeaderCell>.resizable-t{cursor:n-resize;height:6px;top:0;width:100%;left:0}revogr-header .rgHeaderCell>.resizable-rt{cursor:ne-resize;width:6px;height:6px;right:0;top:0}revogr-header .rv-filter{visibility:hidden}`;
341
+ const revogrHeaderStyleCss = () => `@charset "UTF-8";revogr-header{position:relative;z-index:5;display:block}revogr-header .header-rgRow{display:block;position:relative}revogr-header .header-rgRow.group{z-index:0}revogr-header .group-rgRow{position:relative;overflow:hidden}revogr-header .rgHeaderCell{position:absolute;box-sizing:border-box;height:100%;z-index:1;display:flex}revogr-header .rgHeaderCell.align-center{text-align:center}revogr-header .rgHeaderCell.align-left{text-align:left}revogr-header .rgHeaderCell.align-right{text-align:right}revogr-header .rgHeaderCell.sortable{cursor:pointer}revogr-header .rgHeaderCell .sort-indicator{display:inline-flex;align-items:flex-start;gap:1px}revogr-header .rgHeaderCell .sort-indicator i.asc:after,revogr-header .rgHeaderCell .sort-indicator i.desc:after{font-size:13px}revogr-header .rgHeaderCell .sort-indicator i.asc:after{content:"↑"}revogr-header .rgHeaderCell .sort-indicator i.desc:after{content:"↓"}revogr-header .rgHeaderCell .sort-indicator .sort-order-index{font-size:10px;line-height:1;top:0}revogr-header .rgHeaderCell.active{z-index:10}revogr-header .rgHeaderCell.active .resizable{background-color:var(--rg-theme-header-resize-hover)}revogr-header .rgHeaderCell .header-content{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;flex-grow:1}revogr-header .rgHeaderCell .resizable{display:block;position:absolute;z-index:90;touch-action:none;user-select:none}revogr-header .rgHeaderCell .resizable:hover{background-color:var(--rg-theme-header-resize-hover)}revogr-header .rgHeaderCell>.resizable-r{cursor:ew-resize;width:6px;right:0;top:0;height:100%}revogr-header .rgHeaderCell>.resizable-rb{cursor:se-resize;width:6px;height:6px;right:0;bottom:0}revogr-header .rgHeaderCell>.resizable-b{cursor:s-resize;height:6px;bottom:0;width:100%;left:0}revogr-header .rgHeaderCell>.resizable-lb{cursor:sw-resize;width:6px;height:6px;left:0;bottom:0}revogr-header .rgHeaderCell>.resizable-l{cursor:w-resize;width:6px;left:0;height:100%;top:0}revogr-header .rgHeaderCell>.resizable-lt{cursor:nw-resize;width:6px;height:6px;left:0;top:0}revogr-header .rgHeaderCell>.resizable-t{cursor:n-resize;height:6px;top:0;width:100%;left:0}revogr-header .rgHeaderCell>.resizable-rt{cursor:ne-resize;width:6px;height:6px;right:0;top:0}revogr-header .rv-filter{visibility:hidden}`;
342
342
 
343
343
  const RevogrHeaderComponent = class {
344
344
  constructor(hostRef) {
@@ -616,7 +616,7 @@ class GridResizeService {
616
616
  }
617
617
  }
618
618
 
619
- const revogrViewportScrollStyleCss = () => `.rowHeaders{z-index:2;font-size:10px;display:flex;height:100%}.rowHeaders revogr-data .rgCell{text-align:center}.rowHeaders .rgCell{padding:0 1em !important;min-width:100%}revogr-viewport-scroll{-ms-overflow-style:none;scrollbar-width:none;overflow-x:auto;overflow-y:hidden;overscroll-behavior-x:contain;position:relative;z-index:1;height:100%}revogr-viewport-scroll::-webkit-scrollbar{display:none;-webkit-appearance:none}revogr-viewport-scroll.colPinStart,revogr-viewport-scroll.colPinEnd{z-index:2}revogr-viewport-scroll.colPinEnd:has(.active){overflow:visible}revogr-viewport-scroll.rgCol{flex-grow:1}revogr-viewport-scroll .content-wrapper{overflow:hidden}revogr-viewport-scroll .inner-content-table{display:flex;flex-direction:column;max-height:100%;width:100%;min-width:100%;position:relative;z-index:0}revogr-viewport-scroll .vertical-inner{overflow-y:auto;position:relative;width:100%;flex-grow:1;outline:none;-ms-overflow-style:none;scrollbar-width:none;}revogr-viewport-scroll .vertical-inner::-webkit-scrollbar{display:none;-webkit-appearance:none}revogr-viewport-scroll .vertical-inner revogr-data,revogr-viewport-scroll .vertical-inner revogr-overlay-selection{height:100%}`;
619
+ const revogrViewportScrollStyleCss = () => `.rowHeaders{z-index:2;font-size:10px;display:flex;height:100%}.rowHeaders revogr-data .rgCell{text-align:center}.rowHeaders .rgCell{padding:0 1em !important;min-width:100%}revogr-viewport-scroll{-ms-overflow-style:none;scrollbar-width:none;}revogr-viewport-scroll::-webkit-scrollbar{display:none;-webkit-appearance:none}revogr-viewport-scroll{overflow-x:auto;overflow-y:hidden;overscroll-behavior-x:contain;position:relative;z-index:1;height:100%}revogr-viewport-scroll.colPinStart,revogr-viewport-scroll.colPinEnd{z-index:2}revogr-viewport-scroll.colPinEnd:has(.active){overflow:visible}revogr-viewport-scroll.rgCol{flex-grow:1}revogr-viewport-scroll .content-wrapper{overflow:hidden}revogr-viewport-scroll .inner-content-table{display:flex;flex-direction:column;max-height:100%;width:100%;min-width:100%;position:relative;z-index:0}revogr-viewport-scroll .vertical-inner{overflow-y:auto;position:relative;width:100%;flex-grow:1;outline:none;-ms-overflow-style:none;scrollbar-width:none;}revogr-viewport-scroll .vertical-inner::-webkit-scrollbar{display:none;-webkit-appearance:none}revogr-viewport-scroll .vertical-inner revogr-data,revogr-viewport-scroll .vertical-inner revogr-overlay-selection{height:100%}`;
620
620
 
621
621
  const RevogrViewportScroll = class {
622
622
  constructor(hostRef) {
@@ -1,9 +1,9 @@
1
1
  /*!
2
2
  * Built by Revolist OU ❤️
3
3
  */
4
- import { r as registerInstance, d as createEvent, h, e as Host, g as getElement } from './index-Chp_81rd.js';
4
+ import { r as registerInstance, a as createEvent, h, d as Host, g as getElement } from './index-CtimkLsB.js';
5
5
  import { d as debounce } from './debounce-PCRWZliA.js';
6
- import { e as AndOrButton, f as ReorderButton, d as TrashButton, i as isFilterBtn } from './filter.button-B-RBiF67.js';
6
+ import { e as AndOrButton, f as ReorderButton, d as TrashButton, i as isFilterBtn } from './filter.button-DMhpuAiw.js';
7
7
 
8
8
  (function closest() {
9
9
  if (!Element.prototype.matches) {
@@ -66,7 +66,7 @@ function moveFilterItem(items, sourceId, targetId) {
66
66
  return true;
67
67
  }
68
68
 
69
- const filterStyleCss = () => `.revo-button{position:relative;overflow:hidden;color:#fff;background-color:#4545ff;height:32px;line-height:32px;padding:0 15px;outline:0;border:0;border-radius:7px;box-sizing:border-box;cursor:pointer}.revo-button.green{background-color:#009037}.revo-button.red{background-color:#E0662E}.revo-button:disabled,.revo-button[disabled]{cursor:not-allowed !important;filter:opacity(0.35) !important}.revo-button.outline{border:1px solid #dbdbdb;line-height:30px;background:none;color:#000;box-shadow:none}revo-grid[theme^=dark] .revo-button.outline{border:1px solid #404040;color:#d8d8d8}revogr-filter-panel{display:block}revogr-filter-panel .filter-panel-dialog{position:fixed;top:0;left:0;z-index:100;max-height:calc(100vh - 16px);overflow:auto;opacity:1;transform:none;background-color:var(--revo-grid-filter-panel-bg, #fff);border:1px solid var(--revo-grid-filter-panel-border, #cecece);transform-origin:62px 0px;box-shadow:0 5px 18px -2px var(--revo-grid-filter-panel-shadow, rgba(0, 0, 0, 0.15));box-sizing:border-box;padding:10px;border-radius:8px;margin:0;min-width:220px;text-align:left;animation:revogr-filter-panel-open 140ms cubic-bezier(0.2, 0, 0, 1)}revogr-filter-panel .filter-panel-dialog .filter-holder>div{display:flex;flex-direction:column}revogr-filter-panel .filter-panel-dialog label{font-size:13px;display:block;padding:8px 0}revogr-filter-panel .filter-panel-dialog select{width:100%}revogr-filter-panel .filter-panel-dialog input[type=text]{border:0;min-height:34px;margin:5px 0;background:var(--revo-grid-filter-panel-input-bg, #f3f3f3);border-radius:5px;padding:0 10px;box-sizing:border-box;width:100%}revogr-filter-panel .filter-panel-dialog .filter-actions{position:sticky;right:0;bottom:-10px;left:0;z-index:1;text-align:right;margin:10px -10px -10px;padding:0 5px 10px 10px;background:var(--revo-grid-filter-panel-bg, #fff);border-top:1px solid var(--revo-grid-filter-panel-divider, #d9d9d9)}revogr-filter-panel .filter-panel-dialog .filter-actions button{margin-top:10px;margin-right:5px}@keyframes revogr-filter-panel-open{from{opacity:0;transform:translateY(-4px) scale(0.98)}to{opacity:1;transform:none}}@media (prefers-reduced-motion: reduce){revogr-filter-panel .filter-panel-dialog{animation:none}}.rgHeaderCell:hover .rv-filter{transition:opacity 267ms cubic-bezier(0.4, 0, 0.2, 1) 0ms, transform 178ms cubic-bezier(0.4, 0, 0.2, 1) 0ms}.rgHeaderCell:hover .rv-filter,.rgHeaderCell .rv-filter.active{opacity:1}.rgHeaderCell .rv-filter{height:24px;width:24px;background:none;border:0;opacity:0;visibility:visible;cursor:pointer;border-radius:4px}.rgHeaderCell .rv-filter.active{color:#10224a}.rgHeaderCell .rv-filter .filter-img{color:gray;width:11px}.select-css{display:block;font-family:sans-serif;line-height:1.3;padding:0.6em 1.4em 0.5em 0.8em;width:100%;max-width:100%;box-sizing:border-box;margin:0;border:1px solid var(--revo-grid-filter-panel-select-border, #d9d9d9);box-shadow:transparent;border-radius:0.5em;appearance:none;background-color:var(--revo-grid-filter-panel-input-bg, #f3f3f3);background-image:url("data:image/svg+xml;charset=US-ASCII,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%22292.4%22%20height%3D%22292.4%22%3E%3Cpath%20fill%3D%22%23007CB2%22%20d%3D%22M287%2069.4a17.6%2017.6%200%200%200-13-5.4H18.4c-5%200-9.3%201.8-12.9%205.4A17.6%2017.6%200%200%200%200%2082.2c0%205%201.8%209.3%205.4%2012.9l128%20127.9c3.6%203.6%207.8%205.4%2012.8%205.4s9.2-1.8%2012.8-5.4L287%2095c3.5-3.5%205.4-7.8%205.4-12.8%200-5-1.9-9.2-5.5-12.8z%22%2F%3E%3C%2Fsvg%3E");background-repeat:no-repeat, repeat;background-position:right 0.7em top 50%, 0 0;background-size:0.65em auto, 100%;}.select-css::-ms-expand{display:none}.select-css:hover{border-color:var(--revo-grid-filter-panel-select-border, #d9d9d9)}.select-css:focus{border-color:var(--revo-grid-filter-panel-select-border-hover, #d9d9d9);box-shadow:0 0 1px 3px rgba(59, 153, 252, 0.7);box-shadow:0 0 0 3px -moz-mac-focusring;outline:none}.select-css option{font-weight:normal}.select-css:disabled,.select-css[aria-disabled=true]{color:gray;background-image:url("data:image/svg+xml;charset=US-ASCII,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%22292.4%22%20height%3D%22292.4%22%3E%3Cpath%20fill%3D%22graytext%22%20d%3D%22M287%2069.4a17.6%2017.6%200%200%200-13-5.4H18.4c-5%200-9.3%201.8-12.9%205.4A17.6%2017.6%200%200%200%200%2082.2c0%205%201.8%209.3%205.4%2012.9l128%20127.9c3.6%203.6%207.8%205.4%2012.8%205.4s9.2-1.8%2012.8-5.4L287%2095c3.5-3.5%205.4-7.8%205.4-12.8%200-5-1.9-9.2-5.5-12.8z%22%2F%3E%3C%2Fsvg%3E"), linear-gradient(to bottom, #ffffff 0%, #ffffff 100%)}.select-css:disabled:hover,.select-css[aria-disabled=true]{border-color:var(--revo-grid-filter-panel-select-border, #d9d9d9)}.multi-filter-list{margin-top:5px;margin-bottom:5px}.multi-filter-list div{white-space:nowrap}.multi-filter-list .multi-filter-list-row{display:flex;align-items:center;gap:6px;position:relative}.multi-filter-list .multi-filter-list-row.filter-row-dragging{opacity:0.65}.multi-filter-list .multi-filter-list-row.filter-row-drag-over::before{content:"";position:absolute;top:-4px;right:0;left:0;z-index:2;height:2px;background:var(--revo-grid-filter-panel-reorder-accent, #007cb2);border-radius:999px;box-shadow:0 0 0 2px var(--revo-grid-filter-panel-bg, #fff)}.multi-filter-list .multi-filter-list-row.filter-row-drop-active .filter-row-drop-target{pointer-events:auto}.multi-filter-list .filter-row-drop-target{position:absolute;inset:0;z-index:1;padding:0;pointer-events:none;background:transparent;border:0}.multi-filter-list .multi-filter-list-action{display:flex;align-self:stretch;flex:0 0 auto;justify-content:flex-end;align-items:center}.multi-filter-list .and-or-button{margin:0 0 0 10px;min-width:58px;cursor:pointer}.multi-filter-list .trash-button{margin:0 0 -2px 6px;padding:0;border:0;background:transparent;color:inherit;cursor:pointer;width:22px;height:100%;font-size:16px}.multi-filter-list .trash-button .trash-img{width:1em}.multi-filter-list .reorder-button{border:0;background:transparent;color:var(--revo-grid-filter-panel-reorder-color, #6b7280);cursor:grab;font-family:monospace;font-size:12px;letter-spacing:0;line-height:1;padding:6px 2px;transform:scaleX(0.8);width:16px}.multi-filter-list .reorder-button.filter-row-drag-over{color:var(--revo-grid-filter-panel-reorder-accent, #007cb2)}.multi-filter-list .reorder-button:active{cursor:grabbing}.multi-filter-list-container{padding:0;margin:0;list-style:none}.add-filter-divider{display:block;margin:0 -10px 10px -10px;border-bottom:1px solid var(--revo-grid-filter-panel-divider, #d9d9d9);height:10px}.select-input{display:flex;align-items:center;flex:1 1 auto;gap:6px;min-width:0}.select-input .select-filter,.select-input .filter-extra{flex:1 1 0;min-width:0}.select-input .select-filter{width:auto}.select-input .filter-extra{display:flex}.select-input .filter-extra>*{width:100%}.select-input input[type=text],.select-input input[type=date]{margin:0}`;
69
+ const filterStyleCss = () => `.revo-button{position:relative;overflow:hidden;color:var(--rg-theme-button-text);background-color:var(--rg-theme-button-bg);height:32px;line-height:32px;padding:0 15px;outline:0;border:0;border-radius:7px;box-sizing:border-box;cursor:pointer}.revo-button.green{background-color:var(--rg-theme-button-success-bg)}.revo-button.red{background-color:var(--rg-theme-button-danger-bg)}.revo-button:disabled,.revo-button[disabled]{cursor:not-allowed !important;filter:opacity(0.35) !important}.revo-button.outline{border:1px solid var(--rg-theme-button-outline-border);line-height:30px;background:none;color:var(--rg-theme-button-outline-text);box-shadow:none}revogr-filter-panel{display:block}revogr-filter-panel .filter-panel-dialog{position:fixed;top:0;left:0;z-index:100;max-height:calc(100vh - 16px);overflow:auto;opacity:1;transform:none;color:var(--rg-theme-filter-panel-text);background-color:var(--rg-theme-filter-panel-bg);border:1px solid var(--rg-theme-filter-panel-border);transform-origin:62px 0px;box-shadow:0 5px 18px -2px var(--rg-theme-filter-panel-shadow);box-sizing:border-box;padding:10px;border-radius:8px;margin:0;min-width:220px;text-align:left;animation:revogr-filter-panel-open 140ms cubic-bezier(0.2, 0, 0, 1)}revogr-filter-panel .filter-panel-dialog .filter-holder>div{display:flex;flex-direction:column}revogr-filter-panel .filter-panel-dialog label{font-size:13px;display:block;padding:8px 0}revogr-filter-panel .filter-panel-dialog select{width:100%}revogr-filter-panel .filter-panel-dialog input[type=text]{border:0;min-height:34px;margin:5px 0;color:var(--rg-theme-filter-panel-text);background:var(--rg-theme-filter-panel-input-bg);border-radius:5px;padding:0 10px;box-sizing:border-box;width:100%}revogr-filter-panel .filter-panel-dialog .filter-actions{position:sticky;right:0;bottom:-10px;left:0;z-index:1;text-align:right;margin:10px -10px -10px;padding:0 5px 10px 10px;background:var(--rg-theme-filter-panel-bg);border-top:1px solid var(--rg-theme-filter-panel-divider)}revogr-filter-panel .filter-panel-dialog .filter-actions button{margin-top:10px;margin-right:5px}@keyframes revogr-filter-panel-open{from{opacity:0;transform:translateY(-4px) scale(0.98)}to{opacity:1;transform:none}}@media (prefers-reduced-motion: reduce){revogr-filter-panel .filter-panel-dialog{animation:none}}.rgHeaderCell:hover .rv-filter{transition:opacity 267ms cubic-bezier(0.4, 0, 0.2, 1) 0ms, transform 178ms cubic-bezier(0.4, 0, 0.2, 1) 0ms}.rgHeaderCell:hover .rv-filter,.rgHeaderCell .rv-filter.active{opacity:1}.rgHeaderCell .rv-filter{height:24px;width:24px;background:none;border:0;opacity:0;visibility:visible;cursor:pointer;border-radius:4px}.rgHeaderCell .rv-filter.active{color:var(--rg-theme-filter-panel-icon-active)}.rgHeaderCell .rv-filter .filter-img{color:var(--rg-theme-filter-panel-icon);width:11px}.select-css{display:block;font-family:sans-serif;line-height:1.3;padding:0.6em 1.4em 0.5em 0.8em;width:100%;max-width:100%;box-sizing:border-box;margin:0;color:var(--rg-theme-filter-panel-text);border:1px solid var(--rg-theme-filter-panel-select-border);box-shadow:transparent;border-radius:0.5em;appearance:none;background-color:var(--rg-theme-filter-panel-input-bg);background-image:var(--revo-grid-filter-panel-select-arrow, url("data:image/svg+xml;charset=US-ASCII,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%22292.4%22%20height%3D%22292.4%22%3E%3Cpath%20fill%3D%22%23007CB2%22%20d%3D%22M287%2069.4a17.6%2017.6%200%200%200-13-5.4H18.4c-5%200-9.3%201.8-12.9%205.4A17.6%2017.6%200%200%200%200%2082.2c0%205%201.8%209.3%205.4%2012.9l128%20127.9c3.6%203.6%207.8%205.4%2012.8%205.4s9.2-1.8%2012.8-5.4L287%2095c3.5-3.5%205.4-7.8%205.4-12.8%200-5-1.9-9.2-5.5-12.8z%22%2F%3E%3C%2Fsvg%3E"));background-repeat:no-repeat, repeat;background-position:right 0.7em top 50%, 0 0;background-size:0.65em auto, 100%;}.select-css::-ms-expand{display:none}.select-css{}.select-css:hover{border-color:var(--rg-theme-filter-panel-select-border)}.select-css{}.select-css:focus{border-color:var(--rg-theme-filter-panel-select-border-hover);box-shadow:var(--rg-theme-filter-panel-focus-ring);outline:none}.select-css{}.select-css option{font-weight:normal}.select-css{}.select-css:disabled,.select-css[aria-disabled=true]{color:var(--rg-theme-filter-panel-muted-text);background-image:var(--revo-grid-filter-panel-select-arrow-disabled, url("data:image/svg+xml;charset=US-ASCII,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%22292.4%22%20height%3D%22292.4%22%3E%3Cpath%20fill%3D%22graytext%22%20d%3D%22M287%2069.4a17.6%2017.6%200%200%200-13-5.4H18.4c-5%200-9.3%201.8-12.9%205.4A17.6%2017.6%200%200%200%200%2082.2c0%205%201.8%209.3%205.4%2012.9l128%20127.9c3.6%203.6%207.8%205.4%2012.8%205.4s9.2-1.8%2012.8-5.4L287%2095c3.5-3.5%205.4-7.8%205.4-12.8%200-5-1.9-9.2-5.5-12.8z%22%2F%3E%3C%2Fsvg%3E"))}.select-css:disabled:hover,.select-css[aria-disabled=true]{border-color:var(--rg-theme-filter-panel-select-border)}.multi-filter-list{margin-top:5px;margin-bottom:5px}.multi-filter-list div{white-space:nowrap}.multi-filter-list .multi-filter-list-row{display:flex;align-items:center;gap:6px;position:relative}.multi-filter-list .multi-filter-list-row.filter-row-dragging{opacity:0.65}.multi-filter-list .multi-filter-list-row.filter-row-drag-over::before{content:"";position:absolute;top:-4px;right:0;left:0;z-index:2;height:2px;background:var(--rg-theme-filter-panel-reorder-accent);border-radius:999px;box-shadow:0 0 0 2px var(--rg-theme-filter-panel-bg)}.multi-filter-list .multi-filter-list-row.filter-row-drop-active .filter-row-drop-target{pointer-events:auto}.multi-filter-list .filter-row-drop-target{position:absolute;inset:0;z-index:1;padding:0;pointer-events:none;background:transparent;border:0}.multi-filter-list .multi-filter-list-action{display:flex;align-self:stretch;flex:0 0 auto;justify-content:flex-end;align-items:center}.multi-filter-list .and-or-button{margin:0 0 0 10px;min-width:58px;cursor:pointer}.multi-filter-list .trash-button{margin:0 0 -2px 6px;padding:0;border:0;background:transparent;color:inherit;cursor:pointer;width:22px;height:100%;font-size:16px}.multi-filter-list .trash-button .trash-img{width:1em}.multi-filter-list .reorder-button{border:0;background:transparent;color:var(--rg-theme-filter-panel-reorder-color);cursor:grab;font-family:monospace;font-size:12px;letter-spacing:0;line-height:1;padding:6px 2px;transform:scaleX(0.8);width:16px}.multi-filter-list .reorder-button.filter-row-drag-over{color:var(--rg-theme-filter-panel-reorder-accent)}.multi-filter-list .reorder-button:active{cursor:grabbing}.multi-filter-list-container{padding:0;margin:0;list-style:none}.add-filter-divider{display:block;margin:0 -10px 10px -10px;border-bottom:1px solid var(--rg-theme-filter-panel-divider);height:10px}.select-input{display:flex;align-items:center;flex:1 1 auto;gap:6px;min-width:0}.select-input .select-filter,.select-input .filter-extra{flex:1 1 0;min-width:0}.select-input .select-filter{width:auto}.select-input .filter-extra{display:flex}.select-input .filter-extra>*{width:100%}.select-input input[type=text],.select-input input[type=date]{margin:0}`;
70
70
 
71
71
  const defaultType = 'none';
72
72
  const FILTER_LIST_CLASS = 'multi-filter-list';
@@ -108,6 +108,10 @@ const FilterPanel = class {
108
108
  * If true, closes the filter panel when clicking outside
109
109
  */
110
110
  this.closeOnOutsideClick = true;
111
+ /**
112
+ * Whether the filter panel allows the same operator more than once per column.
113
+ */
114
+ this.allowDuplicateOperators = true;
111
115
  this.debouncedApplyFilter = debounce(() => {
112
116
  this.filterChange.emit(this.filterItems);
113
117
  }, 400);
@@ -421,11 +425,15 @@ const FilterPanel = class {
421
425
  }
422
426
  }
423
427
  renderSelectOptions(type, isDefaultTypeRemoved = false) {
428
+ var _a;
424
429
  if (!this.changes) {
425
430
  return;
426
431
  }
427
432
  const options = [];
428
433
  const prop = this.changes.prop;
434
+ if (prop === undefined) {
435
+ return;
436
+ }
429
437
  const hidden = new Set();
430
438
  Object.keys(this.filterItems).forEach((prop) => {
431
439
  const values = this.filterItems[prop];
@@ -435,6 +443,9 @@ const FilterPanel = class {
435
443
  }
436
444
  });
437
445
  });
446
+ const selectedTypes = new Set(((_a = this.filterItems[prop]) !== null && _a !== void 0 ? _a : [])
447
+ .filter(filter => !filter.hidden)
448
+ .map(filter => filter.type));
438
449
  if (!isDefaultTypeRemoved) {
439
450
  const capts = Object.assign(Object.assign({}, this.filterCaptionsInternal), this.filterCaptions);
440
451
  options.push(h("option", { selected: this.currentFilterType === defaultType, value: defaultType }, prop && this.filterItems[prop] && this.filterItems[prop].length > 0
@@ -442,7 +453,9 @@ const FilterPanel = class {
442
453
  : this.filterNames[defaultType]));
443
454
  }
444
455
  for (let gIndex in this.changes.filterTypes) {
445
- const group = this.changes.filterTypes[gIndex].filter(k => !hidden.has(k));
456
+ const group = this.changes.filterTypes[gIndex].filter(k => !hidden.has(k) && (this.allowDuplicateOperators ||
457
+ !selectedTypes.has(k) ||
458
+ (isDefaultTypeRemoved && type === k)));
446
459
  if (group.length) {
447
460
  options.push(...group.map(k => (h("option", { value: k, selected: type === k }, this.filterNames[k]))));
448
461
  options.push(h("option", { disabled: true }));
@@ -537,7 +550,7 @@ const FilterPanel = class {
537
550
  top: `${(_d = (_c = this.changes) === null || _c === void 0 ? void 0 : _c.y) !== null && _d !== void 0 ? _d : 0}px`,
538
551
  };
539
552
  const capts = Object.assign(Object.assign({}, this.filterCaptionsInternal), this.filterCaptions);
540
- return (h(Host, { key: '2a19b35adb56fb7d23385fffebc768838edee162' }, h("dialog", { key: '94386d7cbc4bd9c631f72928938b1d1550a3de82', class: "filter-panel-dialog", style: style, ref: el => (this.dialog = el), onCancel: e => {
553
+ return (h(Host, { key: '8859c452eb08838f65f18efecbdde7f65fda2b49' }, h("dialog", { key: 'f603067ff0986a9f344cbbf816388d2bbac198bb', class: "filter-panel-dialog", style: style, ref: el => (this.dialog = el), onCancel: e => {
541
554
  e.preventDefault();
542
555
  this.onCancel();
543
556
  } }, this.changes && [
@@ -546,7 +559,7 @@ const FilterPanel = class {
546
559
  ((_g = this.changes) === null || _g === void 0 ? void 0 : _g.hideDefaultFilters) !== true && [
547
560
  h("label", { key: "filter-title" }, capts.title),
548
561
  h("div", { key: "filter-holder", class: "filter-holder" }, this.getFilterItemsList()),
549
- h("div", { key: "add-filter", class: "add-filter" }, h("select", { key: '4f7354e39d8e5cf9ae7b735290eff18d105ab87e', id: FILTER_ID, class: "select-css", onChange: e => this.onAddNewFilter(e) }, this.renderSelectOptions(this.currentFilterType))),
562
+ h("div", { key: "add-filter", class: "add-filter" }, h("select", { key: '2ec0a66918edf91bdde3962b6ec84c89f6f1c8f1', id: FILTER_ID, class: "select-css", onChange: e => this.onAddNewFilter(e) }, this.renderSelectOptions(this.currentFilterType))),
550
563
  ],
551
564
  h("slot", { key: "default-slot" }),
552
565
  ((_j = (_h = this.changes).extraBottomContent) === null || _j === void 0 ? void 0 : _j.call(_h, this.changes)) || '',
@@ -1,8 +1,8 @@
1
1
  /*!
2
2
  * Built by Revolist OU ❤️
3
3
  */
4
- import { d as isTab, f as isEnterKeyValue } from './edit.utils-CXmmCnxE.js';
5
- import { t as timeout } from './index-DBqlJITb.js';
4
+ import { d as isTab, f as isEnterKeyValue } from './edit.utils-4e9fsqOR.js';
5
+ import { t as timeout } from './index-D24ku9ej.js';
6
6
 
7
7
  class TextEditor {
8
8
  constructor(data, saveCallback) {
@@ -1,7 +1,7 @@
1
1
  /*!
2
2
  * Built by Revolist OU ❤️
3
3
  */
4
- import { j as getItemByPosition, K as createStore, l as setStore } from './dimension.helpers-CXrsUc6f.js';
4
+ import { j as getItemByPosition, K as createStore, l as setStore } from './dimension.helpers-fl4HSSK9.js';
5
5
 
6
6
  const LETTER_BLOCK_SIZE = 10;
7
7
  const calculateRowHeaderSize = (itemsLength, rowHeaderColumn, minWidth = 50) => {
@@ -1,5 +1,5 @@
1
1
  import { type VNode, EventEmitter } from '../../stencil-public-runtime';
2
- import type { MultiDimensionType, DimensionRows, DimensionCols, DimensionTypeCol, RowHeaders, ColumnRegular, ColumnGrouping, DataType, RowDefinition, ColumnType, FocusTemplateFunc, PositionItem, ColumnProp, ViewPortScrollEvent, InitialHeaderClick, AllDimensionType, Editors, BeforeSaveDataDetails, BeforeRangeSaveDataDetails, Cell, ChangedRange, RangeArea, AfterEditEvent, Theme, PluginBaseComponent, PluginProviders, FocusAfterRenderEvent, ExtraNodeFuncConfig, RowDragStartDetails, AdditionalData, ClipboardConfig } from "../../types/index";
2
+ import type { MultiDimensionType, DimensionRows, DimensionCols, DimensionTypeCol, RowHeaders, ColumnRegular, ColumnGrouping, DataType, RowDefinition, ColumnType, FocusTemplateFunc, PositionItem, ColumnProp, ViewPortScrollEvent, InitialHeaderClick, AllDimensionType, Editors, BeforeSaveDataDetails, BeforeRangeSaveDataDetails, Cell, ChangedRange, RangeArea, AfterEditEvent, ThemeDefinition, PluginBaseComponent, PluginProviders, FocusAfterRenderEvent, ExtraNodeFuncConfig, RowDragStartDetails, AdditionalData, ClipboardConfig } from "../../types/index";
3
3
  import ColumnDataProvider from '../../services/column.data.provider';
4
4
  import { DataProvider } from '../../services/data.provider';
5
5
  import { DSourceState } from "../../store/index";
@@ -115,7 +115,12 @@ export declare class RevoGridComponent {
115
115
  [name: string]: ColumnType;
116
116
  };
117
117
  /** Theme name. */
118
- theme: Theme;
118
+ theme: string;
119
+ /**
120
+ * Per-grid custom theme definitions.
121
+ * Assign as a JavaScript property; complex values cannot be serialized as HTML attributes.
122
+ */
123
+ themeDefinitions: ThemeDefinition[];
119
124
  /**
120
125
  * Row class property mapping.
121
126
  * Map custom classes to rows from row object data.
@@ -479,7 +484,7 @@ export declare class RevoGridComponent {
479
484
  /**
480
485
  * Emmited after the theme is changed
481
486
  */
482
- afterthemechanged: EventEmitter<Theme>;
487
+ afterthemechanged: EventEmitter<string>;
483
488
  /**
484
489
  * Emmited after grid created
485
490
  */
@@ -639,6 +644,9 @@ export declare class RevoGridComponent {
639
644
  selectionStoreConnector?: SelectionStoreConnector;
640
645
  scrollingService: GridScrollingService;
641
646
  private pendingColumnFocusRestore?;
647
+ private appliedThemeRowSize?;
648
+ private pendingNormalizedTheme?;
649
+ private themeStyles;
642
650
  columnTypesChanged(): void;
643
651
  columnChanged(newVal?: (ColumnGrouping | ColumnRegular)[], _prevVal?: (ColumnGrouping | ColumnRegular)[] | undefined, __watchName?: string, init?: boolean): void;
644
652
  /**
@@ -656,7 +664,11 @@ export declare class RevoGridComponent {
656
664
  disableVirtualXChanged(newVal?: boolean, prevVal?: boolean): void;
657
665
  virtualXChanged(newVal?: DimensionCols[], prevVal?: DimensionCols[]): void;
658
666
  rowSizeChanged(s: number): void;
659
- themeChanged(t: Theme, _?: Theme, __?: string, init?: boolean): void;
667
+ colSizeChanged(s: number): void;
668
+ themeChanged(t: string, _?: string, __?: string, init?: boolean): void;
669
+ themeDefinitionsChanged(definitions?: ThemeDefinition[]): void;
670
+ private applyTheme;
671
+ private getThemeStyles;
660
672
  dataSourceChanged<T extends DataType>(newVal: T[] | undefined, _: T[] | undefined, watchName: string): void;
661
673
  disableVirtualYChanged(newVal?: boolean, prevVal?: boolean): void;
662
674
  rowDefChanged(after: RowDefinition[], before?: RowDefinition[], _watchName?: string, forceUpdate?: boolean): void;
@@ -5,7 +5,7 @@
5
5
  * It contains typing information for all components that exist in this project.
6
6
  */
7
7
  import { HTMLStencilElement, JSXBase } from "./stencil-public-runtime";
8
- import { AdditionalData, AfterEditEvent, AllDimensionType, ApplyFocusEvent, BeforeCellRenderEvent, BeforeEdit, BeforeRangeSaveDataDetails, BeforeRowRenderEvent, BeforeSaveDataDetails, Cell, CellTemplateProp, ChangedRange, ClipboardConfig, ColumnDataSchemaModel, ColumnGrouping, ColumnProp, ColumnRegular, ColumnType, DataFormat, DataType, DimensionCols, DimensionRows, DimensionSettingsState, DimensionType, DimensionTypeCol, DragStartEvent, EditCell, EditorCtr, Editors, ElementScroll, ExtraNodeFuncConfig, FocusAfterRenderEvent, FocusRenderEvent, FocusTemplateFunc, InitialHeaderClick, MultiDimensionType, Nullable, PluginBaseComponent, PluginProviders, PositionItem, ProvidersColumns, RangeArea, RangeClipboardCopyEventProps, RangeClipboardPasteEvent, RowDefinition, RowDragStartDetails, RowHeaders, SaveDataDetails, SelectionStoreState, TempRange, Theme, ViewportData, ViewPortResizeEvent, ViewPortScrollEvent, ViewportState, ViewSettingSizeProp } from "./types/index";
8
+ import { AdditionalData, AfterEditEvent, AllDimensionType, ApplyFocusEvent, BeforeCellRenderEvent, BeforeEdit, BeforeRangeSaveDataDetails, BeforeRowRenderEvent, BeforeSaveDataDetails, Cell, CellTemplateProp, ChangedRange, ClipboardConfig, ColumnDataSchemaModel, ColumnGrouping, ColumnProp, ColumnRegular, ColumnType, DataFormat, DataType, DimensionCols, DimensionRows, DimensionSettingsState, DimensionType, DimensionTypeCol, DragStartEvent, EditCell, EditorCtr, Editors, ElementScroll, ExtraNodeFuncConfig, FocusAfterRenderEvent, FocusRenderEvent, FocusTemplateFunc, InitialHeaderClick, MultiDimensionType, Nullable, PluginBaseComponent, PluginProviders, PositionItem, ProvidersColumns, RangeArea, RangeClipboardCopyEventProps, RangeClipboardPasteEvent, RowDefinition, RowDragStartDetails, RowHeaders, SaveDataDetails, SelectionStoreState, TempRange, ThemeDefinition, ViewportData, ViewPortResizeEvent, ViewPortScrollEvent, ViewportState, ViewSettingSizeProp } from "./types/index";
9
9
  import { GridPlugin } from "./plugins/base.plugin";
10
10
  import { AutoSizeColumnConfig } from "./plugins/column.auto-size.plugin";
11
11
  import { ColumnFilterConfig, FilterCaptions, FilterCollectionItem, LogicFunction, MultiFilterItem, ShowData } from "./plugins/filter/filter.types";
@@ -21,7 +21,7 @@ import { ResizeProps } from "./components/header/resizable.directive";
21
21
  import { HeaderRenderProps } from "./components/header/header-renderer";
22
22
  import { HeaderGroupRendererProps } from "./components/header/header-group-renderer";
23
23
  import { EventData } from "./components/overlay/selection.utils";
24
- export { AdditionalData, AfterEditEvent, AllDimensionType, ApplyFocusEvent, BeforeCellRenderEvent, BeforeEdit, BeforeRangeSaveDataDetails, BeforeRowRenderEvent, BeforeSaveDataDetails, Cell, CellTemplateProp, ChangedRange, ClipboardConfig, ColumnDataSchemaModel, ColumnGrouping, ColumnProp, ColumnRegular, ColumnType, DataFormat, DataType, DimensionCols, DimensionRows, DimensionSettingsState, DimensionType, DimensionTypeCol, DragStartEvent, EditCell, EditorCtr, Editors, ElementScroll, ExtraNodeFuncConfig, FocusAfterRenderEvent, FocusRenderEvent, FocusTemplateFunc, InitialHeaderClick, MultiDimensionType, Nullable, PluginBaseComponent, PluginProviders, PositionItem, ProvidersColumns, RangeArea, RangeClipboardCopyEventProps, RangeClipboardPasteEvent, RowDefinition, RowDragStartDetails, RowHeaders, SaveDataDetails, SelectionStoreState, TempRange, Theme, ViewportData, ViewPortResizeEvent, ViewPortScrollEvent, ViewportState, ViewSettingSizeProp } from "./types/index";
24
+ export { AdditionalData, AfterEditEvent, AllDimensionType, ApplyFocusEvent, BeforeCellRenderEvent, BeforeEdit, BeforeRangeSaveDataDetails, BeforeRowRenderEvent, BeforeSaveDataDetails, Cell, CellTemplateProp, ChangedRange, ClipboardConfig, ColumnDataSchemaModel, ColumnGrouping, ColumnProp, ColumnRegular, ColumnType, DataFormat, DataType, DimensionCols, DimensionRows, DimensionSettingsState, DimensionType, DimensionTypeCol, DragStartEvent, EditCell, EditorCtr, Editors, ElementScroll, ExtraNodeFuncConfig, FocusAfterRenderEvent, FocusRenderEvent, FocusTemplateFunc, InitialHeaderClick, MultiDimensionType, Nullable, PluginBaseComponent, PluginProviders, PositionItem, ProvidersColumns, RangeArea, RangeClipboardCopyEventProps, RangeClipboardPasteEvent, RowDefinition, RowDragStartDetails, RowHeaders, SaveDataDetails, SelectionStoreState, TempRange, ThemeDefinition, ViewportData, ViewPortResizeEvent, ViewPortScrollEvent, ViewportState, ViewSettingSizeProp } from "./types/index";
25
25
  export { GridPlugin } from "./plugins/base.plugin";
26
26
  export { AutoSizeColumnConfig } from "./plugins/column.auto-size.plugin";
27
27
  export { ColumnFilterConfig, FilterCaptions, FilterCollectionItem, LogicFunction, MultiFilterItem, ShowData } from "./plugins/filter/filter.types";
@@ -326,7 +326,12 @@ export namespace Components {
326
326
  * Theme name.
327
327
  * @default 'default'
328
328
  */
329
- "theme": Theme;
329
+ "theme": string;
330
+ /**
331
+ * Per-grid custom theme definitions. Assign as a JavaScript property; complex values cannot be serialized as HTML attributes.
332
+ * @default []
333
+ */
334
+ "themeDefinitions": ThemeDefinition[];
330
335
  /**
331
336
  * Trimmed rows. Functionality which allows to hide rows from main data set. `trimmedRows` are physical `rgRow` indexes to hide.
332
337
  * @default {}
@@ -494,6 +499,11 @@ export namespace Components {
494
499
  "refresh": () => Promise<void>;
495
500
  }
496
501
  interface RevogrFilterPanel {
502
+ /**
503
+ * Whether the filter panel allows the same operator more than once per column.
504
+ * @default true
505
+ */
506
+ "allowDuplicateOperators": boolean;
497
507
  /**
498
508
  * If true, closes the filter panel when clicking outside
499
509
  * @default true
@@ -949,7 +959,7 @@ declare global {
949
959
  "aftergridrender": any;
950
960
  "aftergridinit": any;
951
961
  "additionaldatachanged": any;
952
- "afterthemechanged": Theme;
962
+ "afterthemechanged": string;
953
963
  "created": any;
954
964
  }
955
965
  /**
@@ -1530,7 +1540,7 @@ declare namespace LocalJSX {
1530
1540
  /**
1531
1541
  * Emmited after the theme is changed
1532
1542
  */
1533
- "onAfterthemechanged"?: (event: RevoGridCustomEvent<Theme>) => void;
1543
+ "onAfterthemechanged"?: (event: RevoGridCustomEvent<string>) => void;
1534
1544
  /**
1535
1545
  * Emitted after trimmed values have been applied. Useful for notifying when trimming of values has taken place.
1536
1546
  */
@@ -1761,7 +1771,12 @@ declare namespace LocalJSX {
1761
1771
  * Theme name.
1762
1772
  * @default 'default'
1763
1773
  */
1764
- "theme"?: Theme;
1774
+ "theme"?: string;
1775
+ /**
1776
+ * Per-grid custom theme definitions. Assign as a JavaScript property; complex values cannot be serialized as HTML attributes.
1777
+ * @default []
1778
+ */
1779
+ "themeDefinitions"?: ThemeDefinition[];
1765
1780
  /**
1766
1781
  * Trimmed rows. Functionality which allows to hide rows from main data set. `trimmedRows` are physical `rgRow` indexes to hide.
1767
1782
  * @default {}
@@ -1989,6 +2004,11 @@ declare namespace LocalJSX {
1989
2004
  )[];
1990
2005
  }
1991
2006
  interface RevogrFilterPanel {
2007
+ /**
2008
+ * Whether the filter panel allows the same operator more than once per column.
2009
+ * @default true
2010
+ */
2011
+ "allowDuplicateOperators"?: boolean;
1992
2012
  /**
1993
2013
  * If true, closes the filter panel when clicking outside
1994
2014
  * @default true
@@ -2515,7 +2535,7 @@ declare namespace LocalJSX {
2515
2535
  "canFocus": boolean;
2516
2536
  "useClipboard": boolean | ClipboardConfig;
2517
2537
  "applyOnClose": boolean;
2518
- "theme": Theme;
2538
+ "theme": string;
2519
2539
  "rowClass": string;
2520
2540
  "autoSizeColumn": boolean | AutoSizeColumnConfig;
2521
2541
  "filter": boolean | ColumnFilterConfig;
@@ -2547,6 +2567,7 @@ declare namespace LocalJSX {
2547
2567
  interface RevogrFilterPanelAttributes {
2548
2568
  "disableDynamicFiltering": boolean;
2549
2569
  "closeOnOutsideClick": boolean;
2570
+ "allowDuplicateOperators": boolean;
2550
2571
  }
2551
2572
  interface RevogrFocusAttributes {
2552
2573
  "colType": DimensionCols;
@@ -1,4 +1,5 @@
1
1
  export * from './types';
2
+ export * from './themeManager/presets';
2
3
  export * from './store';
3
4
  export * from './plugins';
4
5
  export * from './components';
@@ -32,6 +32,10 @@ export declare class FilterPanel {
32
32
  * If true, closes the filter panel when clicking outside
33
33
  */
34
34
  closeOnOutsideClick: boolean;
35
+ /**
36
+ * Whether the filter panel allows the same operator more than once per column.
37
+ */
38
+ allowDuplicateOperators: boolean;
35
39
  filterChange: EventEmitter<MultiFilterItem>;
36
40
  resetChange: EventEmitter<ColumnProp>;
37
41
  onMouseDown(e: MouseEvent): void;
@@ -46,6 +46,7 @@ export declare class FilterPlugin extends BasePlugin {
46
46
  filterNameIndexByType: Record<string, string>;
47
47
  filterFunctionsIndexedByType: Record<string, LogicFunction>;
48
48
  filterProp: string;
49
+ private allowDuplicateOperators;
49
50
  extraHyperContent?: (data: ShowData) => VNode | VNode[];
50
51
  extraBottomHyperContent?: (data: ShowData) => VNode | VNode[];
51
52
  constructor(revogrid: HTMLRevoGridElement, providers: PluginProviders, config?: ColumnFilterConfig | undefined);
@@ -86,6 +86,11 @@ export interface ColumnFilterConfig {
86
86
  * Whether or not to close the filter panel when clicking outside
87
87
  */
88
88
  closeFilterPanelOnOutsideClick?: boolean;
89
+ /**
90
+ * Whether the filter panel allows the same operator more than once per column.
91
+ * Defaults to true to preserve support for repeated conditions in multi-filter expressions.
92
+ */
93
+ allowDuplicateOperators?: boolean;
89
94
  }
90
95
  export type FilterCollectionItem = {
91
96
  type: FilterType;
@@ -1070,6 +1070,7 @@ export declare namespace JSXBase {
1070
1070
  importance?: 'low' | 'auto' | 'high';
1071
1071
  height?: number | string;
1072
1072
  loading?: 'lazy' | 'auto' | 'eager';
1073
+ referrerPolicy?: ReferrerPolicy;
1073
1074
  sizes?: string;
1074
1075
  src?: string;
1075
1076
  srcSet?: string;
@@ -0,0 +1,8 @@
1
+ /** Compact graphite and evergreen preset with luminous emerald states. */
2
+ export declare const auroraTheme: {
3
+ name: string;
4
+ extends: string;
5
+ colorScheme: "dark";
6
+ defaultRowSize: number;
7
+ tokens: Partial<Record<"primary" | "primaryTransparent" | "background" | "foreground" | "divider" | "shadow" | "text" | "border" | "headerBg" | "headerColor" | "headerBorder" | "headerFocusedBg" | "headerHoverBg" | "cellBorder" | "cellVerticalBorder" | "focusedBg" | "rowHover" | "rowHeadersBg" | "rowHeadersColor" | "cellDisabledBg" | "filterPanelBg" | "filterPanelBorder" | "filterPanelShadow" | "filterPanelInputBg" | "filterPanelDivider" | "filterPanelSelectBorder" | "filterPanelSelectBorderHover" | "filterPanelReorderAccent" | "filterPanelReorderColor" | "filterPanelText" | "filterPanelMutedText" | "filterPanelFocusRing" | "filterPanelIcon" | "filterPanelIconActive" | "filterPanelSelectArrow" | "filterPanelSelectArrowDisabled" | "fontFamily" | "fontSize" | "headerHeight" | "headerFontSize" | "headerFontWeight" | "headerTextTransform" | "headerTextAlign" | "cellTextAlign" | "headerPadding" | "cellPadding" | "selectionBorder" | "selectionBg" | "autofillHandleBg" | "autofillHandleBorder" | "rangeHandleBg" | "temporaryRangeBorder" | "temporarySelectionBorder" | "headerResizeHover" | "buttonText" | "buttonBg" | "buttonSuccessBg" | "buttonDangerBg" | "buttonOutlineBorder" | "buttonOutlineText", string>>;
8
+ };
@@ -0,0 +1,8 @@
1
+ /** High-contrast dark preset with luminous yellow and cyan interaction states. */
2
+ export declare const highContrastDarkTheme: {
3
+ name: string;
4
+ extends: string;
5
+ colorScheme: "dark";
6
+ defaultRowSize: number;
7
+ tokens: Partial<Record<"primary" | "primaryTransparent" | "background" | "foreground" | "divider" | "shadow" | "text" | "border" | "headerBg" | "headerColor" | "headerBorder" | "headerFocusedBg" | "headerHoverBg" | "cellBorder" | "cellVerticalBorder" | "focusedBg" | "rowHover" | "rowHeadersBg" | "rowHeadersColor" | "cellDisabledBg" | "filterPanelBg" | "filterPanelBorder" | "filterPanelShadow" | "filterPanelInputBg" | "filterPanelDivider" | "filterPanelSelectBorder" | "filterPanelSelectBorderHover" | "filterPanelReorderAccent" | "filterPanelReorderColor" | "filterPanelText" | "filterPanelMutedText" | "filterPanelFocusRing" | "filterPanelIcon" | "filterPanelIconActive" | "filterPanelSelectArrow" | "filterPanelSelectArrowDisabled" | "fontFamily" | "fontSize" | "headerHeight" | "headerFontSize" | "headerFontWeight" | "headerTextTransform" | "headerTextAlign" | "cellTextAlign" | "headerPadding" | "cellPadding" | "selectionBorder" | "selectionBg" | "autofillHandleBg" | "autofillHandleBorder" | "rangeHandleBg" | "temporaryRangeBorder" | "temporarySelectionBorder" | "headerResizeHover" | "buttonText" | "buttonBg" | "buttonSuccessBg" | "buttonDangerBg" | "buttonOutlineBorder" | "buttonOutlineText", string>>;
8
+ };
@@ -0,0 +1,8 @@
1
+ /** High-contrast light preset with dark structure and vivid blue focus states. */
2
+ export declare const highContrastTheme: {
3
+ name: string;
4
+ extends: string;
5
+ colorScheme: "light";
6
+ defaultRowSize: number;
7
+ tokens: Partial<Record<"primary" | "primaryTransparent" | "background" | "foreground" | "divider" | "shadow" | "text" | "border" | "headerBg" | "headerColor" | "headerBorder" | "headerFocusedBg" | "headerHoverBg" | "cellBorder" | "cellVerticalBorder" | "focusedBg" | "rowHover" | "rowHeadersBg" | "rowHeadersColor" | "cellDisabledBg" | "filterPanelBg" | "filterPanelBorder" | "filterPanelShadow" | "filterPanelInputBg" | "filterPanelDivider" | "filterPanelSelectBorder" | "filterPanelSelectBorderHover" | "filterPanelReorderAccent" | "filterPanelReorderColor" | "filterPanelText" | "filterPanelMutedText" | "filterPanelFocusRing" | "filterPanelIcon" | "filterPanelIconActive" | "filterPanelSelectArrow" | "filterPanelSelectArrowDisabled" | "fontFamily" | "fontSize" | "headerHeight" | "headerFontSize" | "headerFontWeight" | "headerTextTransform" | "headerTextAlign" | "cellTextAlign" | "headerPadding" | "cellPadding" | "selectionBorder" | "selectionBg" | "autofillHandleBg" | "autofillHandleBorder" | "rangeHandleBg" | "temporaryRangeBorder" | "temporarySelectionBorder" | "headerResizeHover" | "buttonText" | "buttonBg" | "buttonSuccessBg" | "buttonDangerBg" | "buttonOutlineBorder" | "buttonOutlineText", string>>;
8
+ };
@@ -0,0 +1,33 @@
1
+ export { oceanTheme } from './ocean';
2
+ export { midnightTheme } from './midnight';
3
+ export { auroraTheme } from './aurora';
4
+ export { highContrastTheme } from './high-contrast';
5
+ export { highContrastDarkTheme } from './high-contrast-dark';
6
+ /** Accessible light and dark high-contrast choices. */
7
+ export declare const highContrastThemeDefinitions: ({
8
+ name: string;
9
+ extends: string;
10
+ colorScheme: "light";
11
+ defaultRowSize: number;
12
+ tokens: Partial<Record<"primary" | "primaryTransparent" | "background" | "foreground" | "divider" | "shadow" | "text" | "border" | "headerBg" | "headerColor" | "headerBorder" | "headerFocusedBg" | "headerHoverBg" | "cellBorder" | "cellVerticalBorder" | "focusedBg" | "rowHover" | "rowHeadersBg" | "rowHeadersColor" | "cellDisabledBg" | "filterPanelBg" | "filterPanelBorder" | "filterPanelShadow" | "filterPanelInputBg" | "filterPanelDivider" | "filterPanelSelectBorder" | "filterPanelSelectBorderHover" | "filterPanelReorderAccent" | "filterPanelReorderColor" | "filterPanelText" | "filterPanelMutedText" | "filterPanelFocusRing" | "filterPanelIcon" | "filterPanelIconActive" | "filterPanelSelectArrow" | "filterPanelSelectArrowDisabled" | "fontFamily" | "fontSize" | "headerHeight" | "headerFontSize" | "headerFontWeight" | "headerTextTransform" | "headerTextAlign" | "cellTextAlign" | "headerPadding" | "cellPadding" | "selectionBorder" | "selectionBg" | "autofillHandleBg" | "autofillHandleBorder" | "rangeHandleBg" | "temporaryRangeBorder" | "temporarySelectionBorder" | "headerResizeHover" | "buttonText" | "buttonBg" | "buttonSuccessBg" | "buttonDangerBg" | "buttonOutlineBorder" | "buttonOutlineText", string>>;
13
+ } | {
14
+ name: string;
15
+ extends: string;
16
+ colorScheme: "dark";
17
+ defaultRowSize: number;
18
+ tokens: Partial<Record<"primary" | "primaryTransparent" | "background" | "foreground" | "divider" | "shadow" | "text" | "border" | "headerBg" | "headerColor" | "headerBorder" | "headerFocusedBg" | "headerHoverBg" | "cellBorder" | "cellVerticalBorder" | "focusedBg" | "rowHover" | "rowHeadersBg" | "rowHeadersColor" | "cellDisabledBg" | "filterPanelBg" | "filterPanelBorder" | "filterPanelShadow" | "filterPanelInputBg" | "filterPanelDivider" | "filterPanelSelectBorder" | "filterPanelSelectBorderHover" | "filterPanelReorderAccent" | "filterPanelReorderColor" | "filterPanelText" | "filterPanelMutedText" | "filterPanelFocusRing" | "filterPanelIcon" | "filterPanelIconActive" | "filterPanelSelectArrow" | "filterPanelSelectArrowDisabled" | "fontFamily" | "fontSize" | "headerHeight" | "headerFontSize" | "headerFontWeight" | "headerTextTransform" | "headerTextAlign" | "cellTextAlign" | "headerPadding" | "cellPadding" | "selectionBorder" | "selectionBg" | "autofillHandleBg" | "autofillHandleBorder" | "rangeHandleBg" | "temporaryRangeBorder" | "temporarySelectionBorder" | "headerResizeHover" | "buttonText" | "buttonBg" | "buttonSuccessBg" | "buttonDangerBg" | "buttonOutlineBorder" | "buttonOutlineText", string>>;
19
+ })[];
20
+ /** Ready-to-register modern presets. Presets remain opt-in and per grid. */
21
+ export declare const modernThemeDefinitions: ({
22
+ name: string;
23
+ extends: string;
24
+ colorScheme: "light";
25
+ defaultRowSize: number;
26
+ tokens: Partial<Record<"primary" | "primaryTransparent" | "background" | "foreground" | "divider" | "shadow" | "text" | "border" | "headerBg" | "headerColor" | "headerBorder" | "headerFocusedBg" | "headerHoverBg" | "cellBorder" | "cellVerticalBorder" | "focusedBg" | "rowHover" | "rowHeadersBg" | "rowHeadersColor" | "cellDisabledBg" | "filterPanelBg" | "filterPanelBorder" | "filterPanelShadow" | "filterPanelInputBg" | "filterPanelDivider" | "filterPanelSelectBorder" | "filterPanelSelectBorderHover" | "filterPanelReorderAccent" | "filterPanelReorderColor" | "filterPanelText" | "filterPanelMutedText" | "filterPanelFocusRing" | "filterPanelIcon" | "filterPanelIconActive" | "filterPanelSelectArrow" | "filterPanelSelectArrowDisabled" | "fontFamily" | "fontSize" | "headerHeight" | "headerFontSize" | "headerFontWeight" | "headerTextTransform" | "headerTextAlign" | "cellTextAlign" | "headerPadding" | "cellPadding" | "selectionBorder" | "selectionBg" | "autofillHandleBg" | "autofillHandleBorder" | "rangeHandleBg" | "temporaryRangeBorder" | "temporarySelectionBorder" | "headerResizeHover" | "buttonText" | "buttonBg" | "buttonSuccessBg" | "buttonDangerBg" | "buttonOutlineBorder" | "buttonOutlineText", string>>;
27
+ } | {
28
+ name: string;
29
+ extends: string;
30
+ colorScheme: "dark";
31
+ defaultRowSize: number;
32
+ tokens: Partial<Record<"primary" | "primaryTransparent" | "background" | "foreground" | "divider" | "shadow" | "text" | "border" | "headerBg" | "headerColor" | "headerBorder" | "headerFocusedBg" | "headerHoverBg" | "cellBorder" | "cellVerticalBorder" | "focusedBg" | "rowHover" | "rowHeadersBg" | "rowHeadersColor" | "cellDisabledBg" | "filterPanelBg" | "filterPanelBorder" | "filterPanelShadow" | "filterPanelInputBg" | "filterPanelDivider" | "filterPanelSelectBorder" | "filterPanelSelectBorderHover" | "filterPanelReorderAccent" | "filterPanelReorderColor" | "filterPanelText" | "filterPanelMutedText" | "filterPanelFocusRing" | "filterPanelIcon" | "filterPanelIconActive" | "filterPanelSelectArrow" | "filterPanelSelectArrowDisabled" | "fontFamily" | "fontSize" | "headerHeight" | "headerFontSize" | "headerFontWeight" | "headerTextTransform" | "headerTextAlign" | "cellTextAlign" | "headerPadding" | "cellPadding" | "selectionBorder" | "selectionBg" | "autofillHandleBg" | "autofillHandleBorder" | "rangeHandleBg" | "temporaryRangeBorder" | "temporarySelectionBorder" | "headerResizeHover" | "buttonText" | "buttonBg" | "buttonSuccessBg" | "buttonDangerBg" | "buttonOutlineBorder" | "buttonOutlineText", string>>;
33
+ })[];
@@ -0,0 +1,8 @@
1
+ /** Deep navy preset with cyan selection and violet action accents. */
2
+ export declare const midnightTheme: {
3
+ name: string;
4
+ extends: string;
5
+ colorScheme: "dark";
6
+ defaultRowSize: number;
7
+ tokens: Partial<Record<"primary" | "primaryTransparent" | "background" | "foreground" | "divider" | "shadow" | "text" | "border" | "headerBg" | "headerColor" | "headerBorder" | "headerFocusedBg" | "headerHoverBg" | "cellBorder" | "cellVerticalBorder" | "focusedBg" | "rowHover" | "rowHeadersBg" | "rowHeadersColor" | "cellDisabledBg" | "filterPanelBg" | "filterPanelBorder" | "filterPanelShadow" | "filterPanelInputBg" | "filterPanelDivider" | "filterPanelSelectBorder" | "filterPanelSelectBorderHover" | "filterPanelReorderAccent" | "filterPanelReorderColor" | "filterPanelText" | "filterPanelMutedText" | "filterPanelFocusRing" | "filterPanelIcon" | "filterPanelIconActive" | "filterPanelSelectArrow" | "filterPanelSelectArrowDisabled" | "fontFamily" | "fontSize" | "headerHeight" | "headerFontSize" | "headerFontWeight" | "headerTextTransform" | "headerTextAlign" | "cellTextAlign" | "headerPadding" | "cellPadding" | "selectionBorder" | "selectionBg" | "autofillHandleBg" | "autofillHandleBorder" | "rangeHandleBg" | "temporaryRangeBorder" | "temporarySelectionBorder" | "headerResizeHover" | "buttonText" | "buttonBg" | "buttonSuccessBg" | "buttonDangerBg" | "buttonOutlineBorder" | "buttonOutlineText", string>>;
8
+ };
@@ -0,0 +1,8 @@
1
+ /** Bright blue and slate preset for data-heavy daytime interfaces. */
2
+ export declare const oceanTheme: {
3
+ name: string;
4
+ extends: string;
5
+ colorScheme: "light";
6
+ defaultRowSize: number;
7
+ tokens: Partial<Record<"primary" | "primaryTransparent" | "background" | "foreground" | "divider" | "shadow" | "text" | "border" | "headerBg" | "headerColor" | "headerBorder" | "headerFocusedBg" | "headerHoverBg" | "cellBorder" | "cellVerticalBorder" | "focusedBg" | "rowHover" | "rowHeadersBg" | "rowHeadersColor" | "cellDisabledBg" | "filterPanelBg" | "filterPanelBorder" | "filterPanelShadow" | "filterPanelInputBg" | "filterPanelDivider" | "filterPanelSelectBorder" | "filterPanelSelectBorderHover" | "filterPanelReorderAccent" | "filterPanelReorderColor" | "filterPanelText" | "filterPanelMutedText" | "filterPanelFocusRing" | "filterPanelIcon" | "filterPanelIconActive" | "filterPanelSelectArrow" | "filterPanelSelectArrowDisabled" | "fontFamily" | "fontSize" | "headerHeight" | "headerFontSize" | "headerFontWeight" | "headerTextTransform" | "headerTextAlign" | "cellTextAlign" | "headerPadding" | "cellPadding" | "selectionBorder" | "selectionBg" | "autofillHandleBg" | "autofillHandleBorder" | "rangeHandleBg" | "temporaryRangeBorder" | "temporarySelectionBorder" | "headerResizeHover" | "buttonText" | "buttonBg" | "buttonSuccessBg" | "buttonDangerBg" | "buttonOutlineBorder" | "buttonOutlineText", string>>;
8
+ };
@@ -0,0 +1,81 @@
1
+ import type { ThemeTokens } from '../../types/theme';
2
+ export declare const modernSystemFont = "Inter, ui-sans-serif, -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif";
3
+ export type FoundationTokens = readonly [
4
+ primary: string,
5
+ primaryTransparent: string,
6
+ background: string,
7
+ foreground: string,
8
+ divider: string,
9
+ shadow: string,
10
+ text: string,
11
+ border: string
12
+ ];
13
+ export type GridStateTokens = readonly [
14
+ headerBg: string,
15
+ headerColor: string,
16
+ headerBorder: string,
17
+ headerFocusedBg: string | null,
18
+ headerHoverBg: string | null,
19
+ cellBorder: string,
20
+ cellVerticalBorder: string | null,
21
+ focusedBg: string,
22
+ rowHover: string,
23
+ rowHeadersBg: string,
24
+ rowHeadersColor: string,
25
+ cellDisabledBg: string
26
+ ];
27
+ export type FilterPanelTokens = readonly [
28
+ background: string,
29
+ border: string,
30
+ shadow: string,
31
+ inputBackground: string,
32
+ divider: string,
33
+ selectBorder: string,
34
+ selectBorderHover: string,
35
+ reorderAccent: string,
36
+ reorderColor: string,
37
+ text: string,
38
+ mutedText: string,
39
+ focusRing: string,
40
+ icon: string,
41
+ iconActive: string
42
+ ];
43
+ export type TypographyTokens = readonly [
44
+ fontSize: string,
45
+ headerHeight: string,
46
+ headerFontSize: string,
47
+ headerFontWeight: string,
48
+ headerTextTransform: string,
49
+ headerTextAlign: string,
50
+ cellTextAlign: string,
51
+ headerPadding: string,
52
+ cellPadding: string
53
+ ];
54
+ export type SelectionTokens = readonly [
55
+ border: string,
56
+ background: string,
57
+ autofillHandleBackground: string,
58
+ autofillHandleBorder: string,
59
+ rangeHandleBackground: string,
60
+ temporaryRangeBorder: string,
61
+ temporarySelectionBorder: string,
62
+ headerResizeHover: string
63
+ ];
64
+ export type ButtonTokens = readonly [
65
+ text: string,
66
+ background: string,
67
+ successBackground: string,
68
+ dangerBackground: string,
69
+ outlineBorder: string,
70
+ outlineText: string
71
+ ];
72
+ export interface PresetTokenGroups {
73
+ foundation: FoundationTokens;
74
+ grid: GridStateTokens;
75
+ filterPanel: FilterPanelTokens;
76
+ typography: TypographyTokens;
77
+ selection: SelectionTokens;
78
+ buttons: ButtonTokens;
79
+ }
80
+ /** Maps compact, typed preset data to the public semantic theme-token contract. */
81
+ export declare function createPresetTokens({ foundation, grid, filterPanel, typography, selection, buttons, }: PresetTokenGroups): ThemeTokens;
@@ -1,13 +1,16 @@
1
- import type { Theme, ThemeConfig, ThemePackage } from '../types/theme';
2
- export declare const DEFAULT_THEME = "default";
3
- export declare const allowedThemes: Theme[];
1
+ import { type BuiltInTheme, type ResolvedTheme, type ThemeConfig, type ThemeDefinition } from '../types/theme';
2
+ export declare const DEFAULT_THEME: BuiltInTheme;
3
+ export declare const allowedThemes: BuiltInTheme[];
4
4
  export default class ThemeService {
5
5
  private currentTheme;
6
+ private customThemes;
6
7
  private customRowSize;
7
- get theme(): ThemePackage;
8
+ get theme(): ResolvedTheme;
8
9
  get rowSize(): number;
9
10
  set rowSize(size: number);
10
11
  constructor(cfg: ThemeConfig);
11
- register(theme: Theme): void;
12
+ setDefinitions(definitions?: ThemeDefinition[]): void;
13
+ register(theme: string): ResolvedTheme;
14
+ private resolveDefinition;
12
15
  }
13
- export declare function getTheme(theme?: string | null): Theme;
16
+ export declare function getTheme(theme?: string | null): string;