@revolist/revogrid 4.24.3 → 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 (119) 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-0qtjk7uW.js → column.drag.plugin-E_K6cIAy.js} +80 -7
  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 +3 -3
  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.style.css +43 -38
  32. package/dist/collection/serve/controller.js +18 -2
  33. package/dist/collection/themeManager/presets/aurora.js +89 -0
  34. package/dist/collection/themeManager/presets/high-contrast-dark.js +89 -0
  35. package/dist/collection/themeManager/presets/high-contrast.js +89 -0
  36. package/dist/collection/themeManager/presets/index.js +25 -0
  37. package/dist/collection/themeManager/presets/midnight.js +89 -0
  38. package/dist/collection/themeManager/presets/ocean.js +89 -0
  39. package/dist/collection/themeManager/presets/shared.js +64 -0
  40. package/dist/collection/themeManager/theme.service.js +141 -20
  41. package/dist/collection/types/theme.js +73 -1
  42. package/dist/esm/app-globals-CA4dvSNd.js +6 -0
  43. package/dist/{revo-grid/cell-renderer-BQjko1zB.js → esm/cell-renderer-11cf-lu3.js} +3 -3
  44. package/dist/{revo-grid/column.drag.plugin-K0lXn2G3.js → esm/column.drag.plugin-DKgC_0I1.js} +79 -8
  45. package/dist/esm/{column.service-BnFqXqQG.js → column.service-Cfw3L0PN.js} +1 -1
  46. package/dist/esm/{dimension.helpers-CXrsUc6f.js → dimension.helpers-fl4HSSK9.js} +1 -1
  47. package/dist/esm/{edit.utils-CXmmCnxE.js → edit.utils-4e9fsqOR.js} +1 -1
  48. package/dist/esm/{filter.button-B-RBiF67.js → filter.button-DMhpuAiw.js} +1 -1
  49. package/dist/esm/{header-cell-renderer-B3mYpZD3.js → header-cell-renderer-Cqtg1ETB.js} +2 -2
  50. package/dist/esm/{index-Chp_81rd.js → index-CtimkLsB.js} +62 -20
  51. package/dist/esm/{index-DBqlJITb.js → index-D24ku9ej.js} +1 -1
  52. package/dist/esm/index.js +513 -13
  53. package/dist/esm/loader.js +4 -5
  54. package/dist/esm/revo-grid.entry.js +255 -27
  55. package/dist/esm/revo-grid.js +5 -6
  56. package/dist/esm/revogr-attribution_7.entry.js +9 -9
  57. package/dist/esm/revogr-clipboard_3.entry.js +6 -6
  58. package/dist/esm/revogr-data_4.entry.js +8 -8
  59. package/dist/esm/revogr-filter-panel.entry.js +3 -3
  60. package/dist/{revo-grid/text-editor-DQtz2Y7B.js → esm/text-editor-DlMnLkRK.js} +2 -2
  61. package/dist/{revo-grid/viewport.store-D5jEuhLq.js → esm/viewport.store-BSXmsiZc.js} +1 -1
  62. package/dist/revo-grid/app-globals-CA4dvSNd.js +6 -0
  63. package/dist/{esm/cell-renderer-BQjko1zB.js → revo-grid/cell-renderer-11cf-lu3.js} +3 -3
  64. package/dist/{esm/column.drag.plugin-K0lXn2G3.js → revo-grid/column.drag.plugin-DKgC_0I1.js} +79 -8
  65. package/dist/revo-grid/{column.service-BnFqXqQG.js → column.service-Cfw3L0PN.js} +1 -1
  66. package/dist/revo-grid/{dimension.helpers-CXrsUc6f.js → dimension.helpers-fl4HSSK9.js} +1 -1
  67. package/dist/revo-grid/{edit.utils-CXmmCnxE.js → edit.utils-4e9fsqOR.js} +1 -1
  68. package/dist/revo-grid/{filter.button-B-RBiF67.js → filter.button-DMhpuAiw.js} +1 -1
  69. package/dist/revo-grid/{header-cell-renderer-B3mYpZD3.js → header-cell-renderer-Cqtg1ETB.js} +2 -2
  70. package/dist/revo-grid/{index-Chp_81rd.js → index-CtimkLsB.js} +62 -20
  71. package/dist/revo-grid/{index-DBqlJITb.js → index-D24ku9ej.js} +1 -1
  72. package/dist/revo-grid/index.esm.js +513 -13
  73. package/dist/revo-grid/revo-grid.entry.js +255 -27
  74. package/dist/revo-grid/revo-grid.esm.js +5 -6
  75. package/dist/revo-grid/revogr-attribution_7.entry.js +9 -9
  76. package/dist/revo-grid/revogr-clipboard_3.entry.js +6 -6
  77. package/dist/revo-grid/revogr-data_4.entry.js +8 -8
  78. package/dist/revo-grid/revogr-filter-panel.entry.js +3 -3
  79. package/dist/{esm/text-editor-DQtz2Y7B.js → revo-grid/text-editor-DlMnLkRK.js} +2 -2
  80. package/dist/{esm/viewport.store-D5jEuhLq.js → revo-grid/viewport.store-BSXmsiZc.js} +1 -1
  81. package/dist/types/components/revoGrid/revo-grid.d.ts +16 -4
  82. package/dist/types/components.d.ts +17 -7
  83. package/dist/types/index.d.ts +1 -0
  84. package/dist/types/stencil-public-runtime.d.ts +1 -0
  85. package/dist/types/themeManager/presets/aurora.d.ts +8 -0
  86. package/dist/types/themeManager/presets/high-contrast-dark.d.ts +8 -0
  87. package/dist/types/themeManager/presets/high-contrast.d.ts +8 -0
  88. package/dist/types/themeManager/presets/index.d.ts +33 -0
  89. package/dist/types/themeManager/presets/midnight.d.ts +8 -0
  90. package/dist/types/themeManager/presets/ocean.d.ts +8 -0
  91. package/dist/types/themeManager/presets/shared.d.ts +81 -0
  92. package/dist/types/themeManager/theme.service.d.ts +9 -6
  93. package/dist/types/types/theme.d.ts +88 -1
  94. package/hydrate/index.js +1269 -588
  95. package/hydrate/index.mjs +1269 -588
  96. package/package.json +4 -4
  97. package/standalone/index.js +1 -1
  98. package/standalone/revo-grid.js +1 -1
  99. package/standalone/revogr-edit2.js +1 -1
  100. package/standalone/revogr-filter-panel.js +1 -1
  101. package/standalone/revogr-focus2.js +1 -1
  102. package/standalone/revogr-header2.js +1 -1
  103. package/standalone/revogr-overlay-selection2.js +1 -1
  104. package/standalone/revogr-temp-range2.js +1 -1
  105. package/standalone/revogr-viewport-scroll2.js +1 -1
  106. package/dist/cjs/app-globals-CPPhEXmy.js +0 -26
  107. package/dist/cjs/theme.service-BgnxGIjK.js +0 -72
  108. package/dist/collection/global/global.js +0 -18
  109. package/dist/collection/themeManager/theme.compact.js +0 -8
  110. package/dist/collection/themeManager/theme.default.js +0 -8
  111. package/dist/collection/themeManager/theme.material.js +0 -8
  112. package/dist/esm/app-globals-B_B_OtEa.js +0 -24
  113. package/dist/esm/theme.service-BmnDvr6P.js +0 -69
  114. package/dist/revo-grid/app-globals-B_B_OtEa.js +0 -24
  115. package/dist/revo-grid/theme.service-BmnDvr6P.js +0 -69
  116. package/dist/types/global/global.d.ts +0 -1
  117. package/dist/types/themeManager/theme.compact.d.ts +0 -4
  118. package/dist/types/themeManager/theme.default.d.ts +0 -4
  119. package/dist/types/themeManager/theme.material.d.ts +0 -4
@@ -7,7 +7,8 @@ import { DataProvider } from "../../services/data.provider";
7
7
  import { getVisibleSourceItem, rowTypes } from "../../store/index";
8
8
  import DimensionProvider from "../../services/dimension.provider";
9
9
  import ViewportProvider from "../../services/viewport.provider";
10
- import ThemeService from "../../themeManager/theme.service";
10
+ import ThemeService, { getTheme } from "../../themeManager/theme.service";
11
+ import { themeTokenCssVariables } from "../../types/theme";
11
12
  import { timeout } from "../../utils";
12
13
  import { AutoSizeColumnPlugin, } from "../../plugins/column.auto-size.plugin";
13
14
  import { FilterPlugin, } from "../../plugins/filter/filter.plugin";
@@ -28,6 +29,10 @@ import { getColumnByProp, getColumns } from "../../utils/column.utils";
28
29
  import { WCAGPlugin } from "../../plugins/wcag";
29
30
  import { PluginService } from "./plugin.service";
30
31
  import { RTLPlugin } from "../../plugins/rtl/rtl.plugin";
32
+ const DEFAULT_COLUMN_SIZE = 100;
33
+ function getColumnSize(size) {
34
+ return Number.isFinite(size) && size > 0 ? size : DEFAULT_COLUMN_SIZE;
35
+ }
31
36
  /**
32
37
  * Revogrid - High-performance, customizable grid library for managing large datasets.
33
38
  * ### Events guide
@@ -119,6 +124,11 @@ export class RevoGridComponent {
119
124
  this.columnTypes = {};
120
125
  /** Theme name. */
121
126
  this.theme = 'default';
127
+ /**
128
+ * Per-grid custom theme definitions.
129
+ * Assign as a JavaScript property; complex values cannot be serialized as HTML attributes.
130
+ */
131
+ this.themeDefinitions = [];
122
132
  /**
123
133
  * Row class property mapping.
124
134
  * Map custom classes to rows from row object data.
@@ -218,6 +228,7 @@ export class RevoGridComponent {
218
228
  this.pluginService = new PluginService();
219
229
  this.viewport = null;
220
230
  this.isInited = false;
231
+ this.themeStyles = {};
221
232
  }
222
233
  // #endregion
223
234
  // #region Methods
@@ -716,29 +727,70 @@ export class RevoGridComponent {
716
727
  this.refreshColumnsOnConfigChange(newVal, prevVal);
717
728
  }
718
729
  rowSizeChanged(s) {
719
- if (!this.dimensionProvider) {
730
+ if (!this.themeService || !this.dimensionProvider) {
731
+ return;
732
+ }
733
+ this.themeService.rowSize = s;
734
+ this.applyTheme(this.theme, false, false, 'rowSize');
735
+ }
736
+ colSizeChanged(s) {
737
+ if (!this.dimensionProvider || !this.columnProvider) {
720
738
  return;
721
739
  }
722
- // clear existing data
723
- this.dimensionProvider.setSettings({ originItemSize: s }, 'rgRow');
724
- this.rowDefChanged(this.rowDefinitions, this.rowDefinitions, 'rowSize', true);
740
+ this.dimensionProvider.setSettings({ originItemSize: getColumnSize(s) }, 'rgCol');
741
+ this.columnChanged(this.columns);
725
742
  }
726
743
  themeChanged(t, _, __ = 'theme', init = false) {
727
- if (!this.dimensionProvider) {
744
+ if (!this.themeService || !this.dimensionProvider) {
745
+ return;
746
+ }
747
+ if (this.pendingNormalizedTheme === t) {
748
+ this.pendingNormalizedTheme = undefined;
749
+ return;
750
+ }
751
+ const normalizedTheme = getTheme(t);
752
+ if (normalizedTheme !== t) {
753
+ this.pendingNormalizedTheme = normalizedTheme;
754
+ this.theme = normalizedTheme;
755
+ }
756
+ this.applyTheme(normalizedTheme, init, true, 'theme');
757
+ }
758
+ themeDefinitionsChanged(definitions = []) {
759
+ if (!this.themeService || !this.dimensionProvider) {
728
760
  return;
729
761
  }
730
- this.themeService.register(t);
731
- this.dimensionProvider.setSettings({ originItemSize: this.themeService.rowSize }, 'rgRow');
732
- this.dimensionProvider.setSettings({ originItemSize: this.colSize }, 'rgCol');
733
- // if theme change we need to reapply row size and reset viewport
734
- if (!init) {
735
- // clear existing data
736
- this.dimensionProvider.setSettings({ originItemSize: this.themeService.rowSize }, 'rgRow');
737
- this.rowDefChanged(
738
- // for cases when some custom size present and not
739
- this.rowDefinitions, this.rowDefinitions, 'theme', true);
762
+ this.themeService.setDefinitions(definitions);
763
+ this.applyTheme(this.theme, false, true, 'themeDefinitions');
764
+ }
765
+ applyTheme(theme, init, emitEvent, reason) {
766
+ var _a;
767
+ const resolvedTheme = this.themeService.register(theme);
768
+ const rowSize = this.themeService.rowSize;
769
+ const densityChanged = this.appliedThemeRowSize !== rowSize;
770
+ const hadAppliedTheme = this.appliedThemeRowSize !== undefined;
771
+ this.appliedThemeRowSize = rowSize;
772
+ this.themeStyles = this.getThemeStyles();
773
+ if (densityChanged) {
774
+ (_a = this.dimensionProvider) === null || _a === void 0 ? void 0 : _a.setSettings({ originItemSize: rowSize }, 'rgRow');
775
+ if (!init && hadAppliedTheme) {
776
+ this.rowDefChanged(this.rowDefinitions, this.rowDefinitions, reason, true);
777
+ }
778
+ }
779
+ if (emitEvent) {
780
+ this.afterthemechanged.emit(resolvedTheme.name);
781
+ }
782
+ }
783
+ getThemeStyles() {
784
+ const styles = {
785
+ '--rg-theme-row-size': `${this.themeService.rowSize}px`,
786
+ };
787
+ for (const [name, value] of Object.entries(this.themeService.theme.tokens)) {
788
+ const cssVariable = themeTokenCssVariables[name];
789
+ if (cssVariable && value) {
790
+ styles[cssVariable] = value;
791
+ }
740
792
  }
741
- this.afterthemechanged.emit(t);
793
+ return styles;
742
794
  }
743
795
  dataSourceChanged(newVal = [], _, watchName) {
744
796
  if (!this.dataProvider) {
@@ -975,9 +1027,11 @@ export class RevoGridComponent {
975
1027
  this.themeService = new ThemeService({
976
1028
  rowSize: this.rowSize,
977
1029
  });
1030
+ this.themeService.setDefinitions(this.themeDefinitions);
978
1031
  this.dimensionProvider = new DimensionProvider(this.viewportProvider, {
979
1032
  realSizeChanged: (k) => this.contentsizechanged.emit(k),
980
1033
  });
1034
+ this.dimensionProvider.setSettings({ originItemSize: getColumnSize(this.colSize) }, 'rgCol');
981
1035
  this.columnProvider = new ColumnDataProvider();
982
1036
  this.selectionStoreConnector = new SelectionStoreConnector();
983
1037
  this.dataProvider = new DataProvider(this.dimensionProvider);
@@ -1095,7 +1149,7 @@ export class RevoGridComponent {
1095
1149
  const dimensions = this.dimensionProvider.stores;
1096
1150
  const verticalScroll = (h("revogr-scroll-virtual", { class: "vertical", dimension: typeRow, clientSize: viewports[typeRow].store.get('clientSize'), virtualSize: viewports[typeRow].store.get('virtualSize'), realSize: dimensions[typeRow].store.get('realSize'), ref: el => this.scrollingService.registerElement(el, 'rowScroll'), onScrollvirtual: e => this.scrollingService.proxyScroll(e.detail) }));
1097
1151
  const horizontalScroll = (h("revogr-scroll-virtual", { class: "horizontal", dimension: typeCol, clientSize: viewports[typeCol].store.get('clientSize'), virtualSize: viewports[typeCol].store.get('virtualSize'), realSize: dimensions[typeCol].store.get('realSize'), ref: el => this.scrollingService.registerElement(el, 'colScroll'), onScrollvirtual: e => this.scrollingService.proxyScroll(e.detail) }));
1098
- return (h(Host, { dir: this.rtl ? 'rtl' : 'ltr' }, this.hideAttribution ? null : (h("revogr-attribution", { class: "attribution" })), h("slot", { name: "header" }), h("div", { class: "main-viewport", onClick: (e) => {
1152
+ return (h(Host, { dir: this.rtl ? 'rtl' : 'ltr', "data-rg-theme-base": this.themeService.theme.base, "data-rg-theme-scheme": this.themeService.theme.colorScheme, style: this.themeStyles }, this.hideAttribution ? null : (h("revogr-attribution", { class: "attribution" })), h("slot", { name: "header" }), h("div", { class: "main-viewport", onClick: (e) => {
1099
1153
  var _a;
1100
1154
  if (e.currentTarget === e.target) {
1101
1155
  (_a = this.viewport) === null || _a === void 0 ? void 0 : _a.clearEdit();
@@ -1563,14 +1617,34 @@ export class RevoGridComponent {
1563
1617
  "type": "string",
1564
1618
  "mutable": true,
1565
1619
  "complexType": {
1566
- "original": "Theme",
1620
+ "original": "string",
1567
1621
  "resolved": "string",
1622
+ "references": {}
1623
+ },
1624
+ "required": false,
1625
+ "optional": false,
1626
+ "docs": {
1627
+ "tags": [],
1628
+ "text": "Theme name."
1629
+ },
1630
+ "getter": false,
1631
+ "setter": false,
1632
+ "reflect": true,
1633
+ "attribute": "theme",
1634
+ "defaultValue": "'default'"
1635
+ },
1636
+ "themeDefinitions": {
1637
+ "type": "unknown",
1638
+ "mutable": false,
1639
+ "complexType": {
1640
+ "original": "ThemeDefinition[]",
1641
+ "resolved": "ThemeDefinition[]",
1568
1642
  "references": {
1569
- "Theme": {
1643
+ "ThemeDefinition": {
1570
1644
  "location": "import",
1571
1645
  "path": "@type",
1572
- "id": "src/types/index.ts::Theme",
1573
- "referenceLocation": "Theme"
1646
+ "id": "src/types/index.ts::ThemeDefinition",
1647
+ "referenceLocation": "ThemeDefinition"
1574
1648
  }
1575
1649
  }
1576
1650
  },
@@ -1578,13 +1652,11 @@ export class RevoGridComponent {
1578
1652
  "optional": false,
1579
1653
  "docs": {
1580
1654
  "tags": [],
1581
- "text": "Theme name."
1655
+ "text": "Per-grid custom theme definitions.\nAssign as a JavaScript property; complex values cannot be serialized as HTML attributes."
1582
1656
  },
1583
1657
  "getter": false,
1584
1658
  "setter": false,
1585
- "reflect": true,
1586
- "attribute": "theme",
1587
- "defaultValue": "'default'"
1659
+ "defaultValue": "[]"
1588
1660
  },
1589
1661
  "rowClass": {
1590
1662
  "type": "string",
@@ -2936,16 +3008,9 @@ export class RevoGridComponent {
2936
3008
  "text": "Emmited after the theme is changed"
2937
3009
  },
2938
3010
  "complexType": {
2939
- "original": "Theme",
3011
+ "original": "string",
2940
3012
  "resolved": "string",
2941
- "references": {
2942
- "Theme": {
2943
- "location": "import",
2944
- "path": "@type",
2945
- "id": "src/types/index.ts::Theme",
2946
- "referenceLocation": "Theme"
2947
- }
2948
- }
3013
+ "references": {}
2949
3014
  }
2950
3015
  }, {
2951
3016
  "method": "created",
@@ -3732,9 +3797,15 @@ export class RevoGridComponent {
3732
3797
  }, {
3733
3798
  "propName": "rowSize",
3734
3799
  "methodName": "rowSizeChanged"
3800
+ }, {
3801
+ "propName": "colSize",
3802
+ "methodName": "colSizeChanged"
3735
3803
  }, {
3736
3804
  "propName": "theme",
3737
3805
  "methodName": "themeChanged"
3806
+ }, {
3807
+ "propName": "themeDefinitions",
3808
+ "methodName": "themeDefinitionsChanged"
3738
3809
  }, {
3739
3810
  "propName": "source",
3740
3811
  "methodName": "dataSourceChanged"
@@ -17,6 +17,12 @@ revogr-viewport-scroll {
17
17
  -ms-overflow-style: none;
18
18
  scrollbar-width: none; /* Firefox */
19
19
  /* Hide scrollbar for Chrome, Safari and Opera */
20
+ }
21
+ revogr-viewport-scroll::-webkit-scrollbar {
22
+ display: none;
23
+ -webkit-appearance: none;
24
+ }
25
+ revogr-viewport-scroll {
20
26
  overflow-x: auto;
21
27
  overflow-y: hidden;
22
28
  overscroll-behavior-x: contain;
@@ -24,10 +30,6 @@ revogr-viewport-scroll {
24
30
  z-index: 1;
25
31
  height: 100%;
26
32
  }
27
- revogr-viewport-scroll::-webkit-scrollbar {
28
- display: none;
29
- -webkit-appearance: none;
30
- }
31
33
  revogr-viewport-scroll.colPinStart, revogr-viewport-scroll.colPinEnd {
32
34
  z-index: 2;
33
35
  }
@@ -1,5 +1,5 @@
1
1
  revogr-focus.focused-cell {
2
- box-shadow: -1px 0 0 #0d63e8 inset, 1px 0 0 #0d63e8 inset, 0 -1px 0 #0d63e8 inset, 0 1px 0 #0d63e8 inset;
2
+ box-shadow: -1px 0 0 var(--rg-theme-selection-border) inset, 1px 0 0 var(--rg-theme-selection-border) inset, 0 -1px 0 var(--rg-theme-selection-border) inset, 0 1px 0 var(--rg-theme-selection-border) inset;
3
3
  position: absolute;
4
4
  pointer-events: none;
5
5
  z-index: 9;
@@ -3,11 +3,11 @@
3
3
  position: absolute;
4
4
  pointer-events: none;
5
5
  z-index: 9;
6
- border: 1px solid rgb(255, 94, 0);
6
+ border: 1px solid var(--rg-theme-temporary-range-border);
7
7
  box-sizing: border-box;
8
8
  }
9
9
  .temp-bg-range.Selection {
10
- border: 1px dashed gray;
10
+ border: 1px dashed var(--rg-theme-temporary-selection-border);
11
11
  }
12
12
  .temp-bg-range > div {
13
13
  width: 1px;
@@ -2,6 +2,7 @@
2
2
  * Built by Revolist OU ❤️
3
3
  */
4
4
  export * from './types';
5
+ export * from './themeManager/presets';
5
6
  export * from './store';
6
7
  export * from './plugins';
7
8
  export * from './components';
@@ -1,8 +1,8 @@
1
1
  .revo-button {
2
2
  position: relative;
3
3
  overflow: hidden;
4
- color: #fff;
5
- background-color: #4545ff;
4
+ color: var(--rg-theme-button-text);
5
+ background-color: var(--rg-theme-button-bg);
6
6
  height: 32px;
7
7
  line-height: 32px;
8
8
  padding: 0 15px;
@@ -13,28 +13,23 @@
13
13
  cursor: pointer;
14
14
  }
15
15
  .revo-button.green {
16
- background-color: #009037;
16
+ background-color: var(--rg-theme-button-success-bg);
17
17
  }
18
18
  .revo-button.red {
19
- background-color: #E0662E;
19
+ background-color: var(--rg-theme-button-danger-bg);
20
20
  }
21
21
  .revo-button:disabled, .revo-button[disabled] {
22
22
  cursor: not-allowed !important;
23
23
  filter: opacity(0.35) !important;
24
24
  }
25
25
  .revo-button.outline {
26
- border: 1px solid #dbdbdb;
26
+ border: 1px solid var(--rg-theme-button-outline-border);
27
27
  line-height: 30px;
28
28
  background: none;
29
- color: #000;
29
+ color: var(--rg-theme-button-outline-text);
30
30
  box-shadow: none;
31
31
  }
32
32
 
33
- revo-grid[theme^=dark] .revo-button.outline {
34
- border: 1px solid #404040;
35
- color: #d8d8d8;
36
- }
37
-
38
33
  revogr-filter-panel {
39
34
  display: block;
40
35
  }
@@ -48,10 +43,11 @@ revogr-filter-panel .filter-panel-dialog {
48
43
  overflow: auto;
49
44
  opacity: 1;
50
45
  transform: none;
51
- background-color: var(--revo-grid-filter-panel-bg, #fff);
52
- border: 1px solid var(--revo-grid-filter-panel-border, #cecece);
46
+ color: var(--rg-theme-filter-panel-text);
47
+ background-color: var(--rg-theme-filter-panel-bg);
48
+ border: 1px solid var(--rg-theme-filter-panel-border);
53
49
  transform-origin: 62px 0px;
54
- box-shadow: 0 5px 18px -2px var(--revo-grid-filter-panel-shadow, rgba(0, 0, 0, 0.15));
50
+ box-shadow: 0 5px 18px -2px var(--rg-theme-filter-panel-shadow);
55
51
  box-sizing: border-box;
56
52
  padding: 10px;
57
53
  border-radius: 8px;
@@ -76,7 +72,8 @@ revogr-filter-panel .filter-panel-dialog input[type=text] {
76
72
  border: 0;
77
73
  min-height: 34px;
78
74
  margin: 5px 0;
79
- background: var(--revo-grid-filter-panel-input-bg, #f3f3f3);
75
+ color: var(--rg-theme-filter-panel-text);
76
+ background: var(--rg-theme-filter-panel-input-bg);
80
77
  border-radius: 5px;
81
78
  padding: 0 10px;
82
79
  box-sizing: border-box;
@@ -91,8 +88,8 @@ revogr-filter-panel .filter-panel-dialog .filter-actions {
91
88
  text-align: right;
92
89
  margin: 10px -10px -10px;
93
90
  padding: 0 5px 10px 10px;
94
- background: var(--revo-grid-filter-panel-bg, #fff);
95
- border-top: 1px solid var(--revo-grid-filter-panel-divider, #d9d9d9);
91
+ background: var(--rg-theme-filter-panel-bg);
92
+ border-top: 1px solid var(--rg-theme-filter-panel-divider);
96
93
  }
97
94
  revogr-filter-panel .filter-panel-dialog .filter-actions button {
98
95
  margin-top: 10px;
@@ -132,10 +129,10 @@ revogr-filter-panel .filter-panel-dialog .filter-actions button {
132
129
  border-radius: 4px;
133
130
  }
134
131
  .rgHeaderCell .rv-filter.active {
135
- color: #10224a;
132
+ color: var(--rg-theme-filter-panel-icon-active);
136
133
  }
137
134
  .rgHeaderCell .rv-filter .filter-img {
138
- color: gray;
135
+ color: var(--rg-theme-filter-panel-icon);
139
136
  width: 11px;
140
137
  }
141
138
 
@@ -148,44 +145,52 @@ revogr-filter-panel .filter-panel-dialog .filter-actions button {
148
145
  max-width: 100%; /* useful when width is set to anything other than 100% */
149
146
  box-sizing: border-box;
150
147
  margin: 0;
151
- border: 1px solid var(--revo-grid-filter-panel-select-border, #d9d9d9);
148
+ color: var(--rg-theme-filter-panel-text);
149
+ border: 1px solid var(--rg-theme-filter-panel-select-border);
152
150
  box-shadow: transparent;
153
151
  border-radius: 0.5em;
154
152
  appearance: none;
155
- background-color: var(--revo-grid-filter-panel-input-bg, #f3f3f3);
156
- 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");
153
+ background-color: var(--rg-theme-filter-panel-input-bg);
154
+ 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"));
157
155
  background-repeat: no-repeat, repeat;
158
156
  /* arrow icon position (1em from the right, 50% vertical) , then gradient position*/
159
157
  background-position: right 0.7em top 50%, 0 0;
160
158
  /* icon size, then gradient */
161
159
  background-size: 0.65em auto, 100%;
162
160
  /* Hide arrow icon in IE browsers */
163
- /* Hover style */
164
- /* Focus style */
165
- /* Set options to normal weight */
166
- /* Disabled styles */
167
161
  }
168
162
  .select-css::-ms-expand {
169
163
  display: none;
170
164
  }
165
+ .select-css {
166
+ /* Hover style */
167
+ }
171
168
  .select-css:hover {
172
- border-color: var(--revo-grid-filter-panel-select-border, #d9d9d9);
169
+ border-color: var(--rg-theme-filter-panel-select-border);
170
+ }
171
+ .select-css {
172
+ /* Focus style */
173
173
  }
174
174
  .select-css:focus {
175
- border-color: var(--revo-grid-filter-panel-select-border-hover, #d9d9d9);
176
- box-shadow: 0 0 1px 3px rgba(59, 153, 252, 0.7);
177
- box-shadow: 0 0 0 3px -moz-mac-focusring;
175
+ border-color: var(--rg-theme-filter-panel-select-border-hover);
176
+ box-shadow: var(--rg-theme-filter-panel-focus-ring);
178
177
  outline: none;
179
178
  }
179
+ .select-css {
180
+ /* Set options to normal weight */
181
+ }
180
182
  .select-css option {
181
183
  font-weight: normal;
182
184
  }
185
+ .select-css {
186
+ /* Disabled styles */
187
+ }
183
188
  .select-css:disabled, .select-css[aria-disabled=true] {
184
- color: gray;
185
- 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%);
189
+ color: var(--rg-theme-filter-panel-muted-text);
190
+ 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"));
186
191
  }
187
192
  .select-css:disabled:hover, .select-css[aria-disabled=true] {
188
- border-color: var(--revo-grid-filter-panel-select-border, #d9d9d9);
193
+ border-color: var(--rg-theme-filter-panel-select-border);
189
194
  }
190
195
 
191
196
  .multi-filter-list {
@@ -212,9 +217,9 @@ revogr-filter-panel .filter-panel-dialog .filter-actions button {
212
217
  left: 0;
213
218
  z-index: 2;
214
219
  height: 2px;
215
- background: var(--revo-grid-filter-panel-reorder-accent, #007cb2);
220
+ background: var(--rg-theme-filter-panel-reorder-accent);
216
221
  border-radius: 999px;
217
- box-shadow: 0 0 0 2px var(--revo-grid-filter-panel-bg, #fff);
222
+ box-shadow: 0 0 0 2px var(--rg-theme-filter-panel-bg);
218
223
  }
219
224
  .multi-filter-list .multi-filter-list-row.filter-row-drop-active .filter-row-drop-target {
220
225
  pointer-events: auto;
@@ -257,7 +262,7 @@ revogr-filter-panel .filter-panel-dialog .filter-actions button {
257
262
  .multi-filter-list .reorder-button {
258
263
  border: 0;
259
264
  background: transparent;
260
- color: var(--revo-grid-filter-panel-reorder-color, #6b7280);
265
+ color: var(--rg-theme-filter-panel-reorder-color);
261
266
  cursor: grab;
262
267
  font-family: monospace;
263
268
  font-size: 12px;
@@ -268,7 +273,7 @@ revogr-filter-panel .filter-panel-dialog .filter-actions button {
268
273
  width: 16px;
269
274
  }
270
275
  .multi-filter-list .reorder-button.filter-row-drag-over {
271
- color: var(--revo-grid-filter-panel-reorder-accent, #007cb2);
276
+ color: var(--rg-theme-filter-panel-reorder-accent);
272
277
  }
273
278
  .multi-filter-list .reorder-button:active {
274
279
  cursor: grabbing;
@@ -283,7 +288,7 @@ revogr-filter-panel .filter-panel-dialog .filter-actions button {
283
288
  .add-filter-divider {
284
289
  display: block;
285
290
  margin: 0 -10px 10px -10px;
286
- border-bottom: 1px solid var(--revo-grid-filter-panel-divider, #d9d9d9);
291
+ border-bottom: 1px solid var(--rg-theme-filter-panel-divider);
287
292
  height: 10px;
288
293
  }
289
294
 
@@ -1,4 +1,5 @@
1
1
  import { generateFakeDataObjectAsync } from './data.js';
2
+ import { modernThemeDefinitions } from './build/index.esm.js';
2
3
 
3
4
  /**
4
5
  * Map of prevented events
@@ -296,12 +297,16 @@ globalThis.timerUpdate = function (checked, inteval = 3) {
296
297
  */
297
298
  globalThis.theme = function (theme) {
298
299
  const grid = document.querySelector('revo-grid');
299
- if (theme?.includes('dark')) {
300
+ const selectedTheme = theme || 'default';
301
+ const definition = modernThemeDefinitions.find(
302
+ item => item.name === selectedTheme,
303
+ );
304
+ if (definition?.colorScheme === 'dark' || selectedTheme.includes('dark')) {
300
305
  document.documentElement.setAttribute('data-bs-theme', 'dark');
301
306
  } else {
302
307
  document.documentElement.removeAttribute('data-bs-theme');
303
308
  }
304
- grid.theme = theme || 'default';
309
+ grid.theme = selectedTheme;
305
310
  };
306
311
 
307
312
  globalThis.onload = onLoad;
@@ -426,6 +431,7 @@ globalThis.setColumnGroupOffsetBugDemo = () => {
426
431
  function onLoad() {
427
432
  const grid = document.querySelector('revo-grid');
428
433
 
434
+ grid.themeDefinitions = modernThemeDefinitions;
429
435
  grid.readonly = false;
430
436
  grid.range = true;
431
437
  grid.useClipboard = { rangeFill: true };
@@ -434,6 +440,16 @@ function onLoad() {
434
440
 
435
441
  grid.exporting = true;
436
442
  grid.rowHeaders = true;
443
+ const initialTheme = new URLSearchParams(location.search).get('theme');
444
+ if (initialTheme) {
445
+ globalThis.theme(initialTheme);
446
+ const themeOption = Array.from(
447
+ document.querySelectorAll('input[name="theme"]'),
448
+ ).find(option => option.value === initialTheme);
449
+ if (themeOption) {
450
+ themeOption.checked = true;
451
+ }
452
+ }
437
453
  // grid.rowDefinitions = [{
438
454
  // size: 200,
439
455
  // type: 'rgRow',
@@ -0,0 +1,89 @@
1
+ /*!
2
+ * Built by Revolist OU ❤️
3
+ */
4
+ import { defineTheme } from "../../types/theme";
5
+ import { createPresetTokens } from "./shared";
6
+ const auroraFoundation = [
7
+ '#34d399',
8
+ 'rgba(52, 211, 153, 0.88)',
9
+ '#071714',
10
+ '#ecfdf5',
11
+ '#285047',
12
+ 'rgba(0, 0, 0, 0.5)',
13
+ '#d1fae5',
14
+ '#1c3d36',
15
+ ];
16
+ const auroraGrid = [
17
+ '#0c2420',
18
+ '#ecfdf5',
19
+ '#245047',
20
+ null,
21
+ null,
22
+ '#17352f',
23
+ null,
24
+ '#103d34',
25
+ '#0d2e28',
26
+ '#0a201c',
27
+ '#86cbb8',
28
+ 'rgba(110, 231, 183, 0.08)',
29
+ ];
30
+ const auroraFilterPanel = [
31
+ '#0b201c',
32
+ '#285047',
33
+ 'rgba(0, 0, 0, 0.52)',
34
+ '#12352e',
35
+ '#23483f',
36
+ '#37695d',
37
+ '#34d399',
38
+ '#2dd4bf',
39
+ '#86cbb8',
40
+ '#d1fae5',
41
+ '#86a89f',
42
+ '0 0 0 3px rgba(52, 211, 153, 0.2)',
43
+ '#86a89f',
44
+ '#5eead4',
45
+ ];
46
+ const auroraTypography = [
47
+ '12px',
48
+ '42px',
49
+ '11px',
50
+ '650',
51
+ 'uppercase',
52
+ 'left',
53
+ 'left',
54
+ '0 12px',
55
+ '0 12px',
56
+ ];
57
+ const auroraSelection = [
58
+ '#34d399',
59
+ 'rgba(52, 211, 153, 0.12)',
60
+ '#34d399',
61
+ '#071714',
62
+ 'rgba(45, 212, 191, 0.22)',
63
+ '#fbbf24',
64
+ '#5eead4',
65
+ '#2dd4bf',
66
+ ];
67
+ const auroraButtons = [
68
+ '#052e27',
69
+ '#34d399',
70
+ '#10b981',
71
+ '#fb7185',
72
+ '#37695d',
73
+ '#d1fae5',
74
+ ];
75
+ /** Compact graphite and evergreen preset with luminous emerald states. */
76
+ export const auroraTheme = defineTheme({
77
+ name: 'aurora',
78
+ extends: 'darkCompact',
79
+ colorScheme: 'dark',
80
+ defaultRowSize: 34,
81
+ tokens: createPresetTokens({
82
+ foundation: auroraFoundation,
83
+ grid: auroraGrid,
84
+ filterPanel: auroraFilterPanel,
85
+ typography: auroraTypography,
86
+ selection: auroraSelection,
87
+ buttons: auroraButtons,
88
+ }),
89
+ });