@deephaven/components 0.55.1-beta.1 → 0.55.1-beta.10

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 (66) hide show
  1. package/css/BaseStyleSheet.css +62 -16
  2. package/css/BaseStyleSheet.css.map +1 -1
  3. package/dist/Button.d.ts.map +1 -1
  4. package/dist/Button.js +26 -2
  5. package/dist/Button.js.map +1 -1
  6. package/dist/ComboBox.css +20 -0
  7. package/dist/ComboBox.css.map +1 -1
  8. package/dist/ComboBox.d.ts.map +1 -1
  9. package/dist/ComboBox.js +2 -4
  10. package/dist/ComboBox.js.map +1 -1
  11. package/dist/CustomTimeSelect.css +15 -2
  12. package/dist/CustomTimeSelect.css.map +1 -1
  13. package/dist/CustomTimeSelect.d.ts.map +1 -1
  14. package/dist/CustomTimeSelect.js +2 -5
  15. package/dist/CustomTimeSelect.js.map +1 -1
  16. package/dist/LoadingSpinner.css +2 -8
  17. package/dist/LoadingSpinner.css.map +1 -1
  18. package/dist/SearchInput.css +28 -12
  19. package/dist/SearchInput.css.map +1 -1
  20. package/dist/SearchInput.d.ts +10 -1
  21. package/dist/SearchInput.d.ts.map +1 -1
  22. package/dist/SearchInput.js +73 -7
  23. package/dist/SearchInput.js.map +1 -1
  24. package/dist/shortcuts/GlobalShortcuts.d.ts +2 -0
  25. package/dist/shortcuts/GlobalShortcuts.d.ts.map +1 -1
  26. package/dist/shortcuts/GlobalShortcuts.js +14 -0
  27. package/dist/shortcuts/GlobalShortcuts.js.map +1 -1
  28. package/dist/theme/ThemeModel.d.ts +12 -6
  29. package/dist/theme/ThemeModel.d.ts.map +1 -1
  30. package/dist/theme/ThemeModel.js +18 -3
  31. package/dist/theme/ThemeModel.js.map +1 -1
  32. package/dist/theme/ThemeProvider.d.ts +1 -0
  33. package/dist/theme/ThemeProvider.d.ts.map +1 -1
  34. package/dist/theme/ThemeProvider.js +6 -1
  35. package/dist/theme/ThemeProvider.js.map +1 -1
  36. package/dist/theme/ThemeUtils.d.ts +37 -5
  37. package/dist/theme/ThemeUtils.d.ts.map +1 -1
  38. package/dist/theme/ThemeUtils.js +80 -15
  39. package/dist/theme/ThemeUtils.js.map +1 -1
  40. package/dist/theme/theme-dark/theme-dark-components.css +1 -1
  41. package/dist/theme/theme-dark/theme-dark-components.css.map +1 -1
  42. package/dist/theme/theme-dark/theme-dark-palette.css +1 -1
  43. package/dist/theme/theme-dark/theme-dark-palette.css.map +1 -1
  44. package/dist/theme/theme-dark/theme-dark-semantic-chart.css +1 -1
  45. package/dist/theme/theme-dark/theme-dark-semantic-chart.css.map +1 -1
  46. package/dist/theme/theme-dark/theme-dark-semantic-grid.css +1 -1
  47. package/dist/theme/theme-dark/theme-dark-semantic-grid.css.map +1 -1
  48. package/dist/theme/theme-dark/theme-dark-semantic.css +1 -1
  49. package/dist/theme/theme-dark/theme-dark-semantic.css.map +1 -1
  50. package/dist/theme/theme-light/theme-light-palette.css +1 -1
  51. package/dist/theme/theme-light/theme-light-palette.css.map +1 -1
  52. package/dist/theme/theme-spectrum/index.d.ts +1 -0
  53. package/dist/theme/theme-spectrum/index.d.ts.map +1 -1
  54. package/dist/theme/theme-spectrum/index.js +3 -3
  55. package/dist/theme/theme-spectrum/index.js.map +1 -1
  56. package/dist/theme/theme-spectrum/theme-spectrum-alias.module.css +1 -1
  57. package/dist/theme/theme-spectrum/theme-spectrum-alias.module.css.map +1 -1
  58. package/dist/theme/theme-spectrum/theme-spectrum-overrides.css +1 -0
  59. package/dist/theme/theme-spectrum/theme-spectrum-overrides.css.map +1 -0
  60. package/dist/theme/theme-svg.css +1 -0
  61. package/dist/theme/theme-svg.css.map +1 -0
  62. package/package.json +7 -7
  63. package/scss/BaseStyleSheet.scss +102 -23
  64. package/scss/util.scss +27 -0
  65. package/dist/theme/theme-spectrum/theme-spectrum-overrides.module.css +0 -1
  66. package/dist/theme/theme-spectrum/theme-spectrum-overrides.module.css.map +0 -1
@@ -3,21 +3,41 @@ function _toPropertyKey(arg) { var key = _toPrimitive(arg, "string"); return typ
3
3
  function _toPrimitive(input, hint) { if (typeof input !== "object" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || "default"); if (typeof res !== "object") return res; throw new TypeError("@@toPrimitive must return a primitive value."); } return (hint === "string" ? String : Number)(input); }
4
4
  import React, { PureComponent } from 'react';
5
5
  import { FontAwesomeIcon } from '@fortawesome/react-fontawesome';
6
- import { vsSearch } from '@deephaven/icons';
6
+ import { vsArrowLeft, vsArrowRight, vsSearch } from '@deephaven/icons';
7
7
  import classNames from 'classnames';
8
+ import Button from "./Button.js";
8
9
  import "./SearchInput.css";
10
+ import { GLOBAL_SHORTCUTS } from "./shortcuts/index.js";
11
+ import { ContextActions } from "./context-actions/index.js";
9
12
  import { jsx as _jsx } from "react/jsx-runtime";
10
13
  import { jsxs as _jsxs } from "react/jsx-runtime";
14
+ import { Fragment as _Fragment } from "react/jsx-runtime";
11
15
  class SearchInput extends PureComponent {
12
16
  constructor(props) {
13
17
  super(props);
14
18
  _defineProperty(this, "inputField", void 0);
19
+ _defineProperty(this, "searchChangeSelection", void 0);
15
20
  this.inputField = /*#__PURE__*/React.createRef();
21
+ this.searchChangeSelection = /*#__PURE__*/React.createRef();
22
+ }
23
+ componentDidMount() {
24
+ this.setInputPaddingRight();
25
+ }
26
+ componentDidUpdate() {
27
+ this.setInputPaddingRight();
16
28
  }
17
29
  focus() {
18
30
  var _this$inputField$curr;
19
31
  (_this$inputField$curr = this.inputField.current) === null || _this$inputField$curr === void 0 ? void 0 : _this$inputField$curr.focus();
20
32
  }
33
+ setInputPaddingRight() {
34
+ var inputField = this.inputField.current;
35
+ var searchChangeSelection = this.searchChangeSelection.current;
36
+ if (inputField && searchChangeSelection) {
37
+ var paddingRight = searchChangeSelection.getBoundingClientRect().width;
38
+ inputField.style.paddingRight = "".concat(paddingRight, "px");
39
+ }
40
+ }
21
41
  render() {
22
42
  var {
23
43
  value,
@@ -29,8 +49,48 @@ class SearchInput extends PureComponent {
29
49
  matchCount,
30
50
  id,
31
51
  onKeyDown,
32
- 'data-testid': dataTestId
52
+ 'data-testid': dataTestId,
53
+ cursor
33
54
  } = this.props;
55
+ var matchCountSection;
56
+ var contextActions = [{
57
+ action: () => cursor === null || cursor === void 0 ? void 0 : cursor.next('forward'),
58
+ shortcut: GLOBAL_SHORTCUTS.NEXT
59
+ }, {
60
+ action: () => cursor === null || cursor === void 0 ? void 0 : cursor.next('back'),
61
+ shortcut: GLOBAL_SHORTCUTS.PREVIOUS
62
+ }];
63
+ if (cursor && matchCount > 1) {
64
+ matchCountSection = /*#__PURE__*/_jsxs(_Fragment, {
65
+ children: [/*#__PURE__*/_jsx(Button, {
66
+ kind: "ghost",
67
+ className: "search-change-button",
68
+ type: "button",
69
+ onClick: () => {
70
+ cursor.next('back');
71
+ },
72
+ icon: vsArrowLeft,
73
+ tooltip: "Previous match (".concat(GLOBAL_SHORTCUTS.PREVIOUS.getDisplayText(), ")")
74
+ }), /*#__PURE__*/_jsxs("span", {
75
+ className: "search-change-text",
76
+ children: [cursor.index !== undefined && "".concat(cursor.index + 1, " of "), matchCount]
77
+ }), /*#__PURE__*/_jsx(Button, {
78
+ kind: "ghost",
79
+ className: "search-change-button",
80
+ type: "button",
81
+ onClick: () => {
82
+ cursor.next('forward');
83
+ },
84
+ icon: vsArrowRight,
85
+ tooltip: "Next match (".concat(GLOBAL_SHORTCUTS.NEXT.getDisplayText(), ")")
86
+ })]
87
+ });
88
+ } else {
89
+ matchCountSection = matchCount > 0 && /*#__PURE__*/_jsx("span", {
90
+ className: "search-match",
91
+ children: matchCount
92
+ });
93
+ }
34
94
  return /*#__PURE__*/_jsxs("div", {
35
95
  className: classNames('search-group', className),
36
96
  children: [/*#__PURE__*/_jsx("input", {
@@ -45,10 +105,15 @@ class SearchInput extends PureComponent {
45
105
  ref: this.inputField,
46
106
  id: id,
47
107
  "data-testid": dataTestId
48
- }), matchCount != null && /*#__PURE__*/_jsx("span", {
49
- className: "search-match",
50
- children: matchCount
51
- }), /*#__PURE__*/_jsx("span", {
108
+ }), matchCount != null ? /*#__PURE__*/_jsxs(_Fragment, {
109
+ children: [/*#__PURE__*/_jsx("div", {
110
+ className: "search-change-selection",
111
+ ref: this.searchChangeSelection,
112
+ children: matchCountSection
113
+ }), /*#__PURE__*/_jsx(ContextActions, {
114
+ actions: contextActions
115
+ })]
116
+ }) : /*#__PURE__*/_jsx("span", {
52
117
  className: "search-icon",
53
118
  children: /*#__PURE__*/_jsx(FontAwesomeIcon, {
54
119
  icon: vsSearch
@@ -65,7 +130,8 @@ _defineProperty(SearchInput, "defaultProps", {
65
130
  // no-op
66
131
  },
67
132
  id: '',
68
- 'data-testid': undefined
133
+ 'data-testid': undefined,
134
+ cursor: undefined
69
135
  });
70
136
  export default SearchInput;
71
137
  //# sourceMappingURL=SearchInput.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"SearchInput.js","names":["React","PureComponent","FontAwesomeIcon","vsSearch","classNames","jsx","_jsx","jsxs","_jsxs","SearchInput","constructor","props","_defineProperty","inputField","createRef","focus","_this$inputField$curr","current","render","value","placeholder","onBlur","onChange","className","disabled","matchCount","id","onKeyDown","dataTestId","children","type","ref","icon","undefined"],"sources":["../src/SearchInput.tsx"],"sourcesContent":["import React, { PureComponent } from 'react';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport { vsSearch } from '@deephaven/icons';\nimport classNames from 'classnames';\nimport './SearchInput.scss';\n\ninterface SearchInputProps {\n value: string;\n placeholder: string;\n onBlur?: React.FocusEventHandler<HTMLInputElement>;\n onChange: React.ChangeEventHandler<HTMLInputElement>;\n onKeyDown: React.KeyboardEventHandler<HTMLInputElement>;\n className: string;\n disabled?: boolean;\n matchCount: number;\n id: string;\n 'data-testid'?: string;\n}\n\nclass SearchInput extends PureComponent<SearchInputProps> {\n static defaultProps = {\n placeholder: 'Search',\n className: '',\n matchCount: null,\n onKeyDown(): void {\n // no-op\n },\n id: '',\n 'data-testid': undefined,\n };\n\n constructor(props: SearchInputProps) {\n super(props);\n this.inputField = React.createRef();\n }\n\n inputField: React.RefObject<HTMLInputElement>;\n\n focus(): void {\n this.inputField.current?.focus();\n }\n\n render(): JSX.Element {\n const {\n value,\n placeholder,\n onBlur,\n onChange,\n className,\n disabled,\n matchCount,\n id,\n onKeyDown,\n 'data-testid': dataTestId,\n } = this.props;\n return (\n <div className={classNames('search-group', className)}>\n <input\n type=\"search\"\n value={value}\n onBlur={onBlur}\n onChange={onChange}\n onKeyDown={onKeyDown}\n className=\"form-control\"\n disabled={disabled}\n placeholder={placeholder}\n ref={this.inputField}\n id={id}\n data-testid={dataTestId}\n />\n {matchCount != null && (\n <span className=\"search-match\">{matchCount}</span>\n )}\n <span className=\"search-icon\">\n <FontAwesomeIcon icon={vsSearch} />\n </span>\n </div>\n );\n }\n}\n\nexport default SearchInput;\n"],"mappings":";;;AAAA,OAAOA,KAAK,IAAIC,aAAa,QAAQ,OAAO;AAC5C,SAASC,eAAe,QAAQ,gCAAgC;AAChE,SAASC,QAAQ,QAAQ,kBAAkB;AAC3C,OAAOC,UAAU,MAAM,YAAY;AAAC;AAAA,SAAAC,GAAA,IAAAC,IAAA;AAAA,SAAAC,IAAA,IAAAC,KAAA;AAgBpC,MAAMC,WAAW,SAASR,aAAa,CAAmB;EAYxDS,WAAWA,CAACC,KAAuB,EAAE;IACnC,KAAK,CAACA,KAAK,CAAC;IAACC,eAAA;IACb,IAAI,CAACC,UAAU,gBAAGb,KAAK,CAACc,SAAS,CAAC,CAAC;EACrC;EAIAC,KAAKA,CAAA,EAAS;IAAA,IAAAC,qBAAA;IACZ,CAAAA,qBAAA,OAAI,CAACH,UAAU,CAACI,OAAO,cAAAD,qBAAA,uBAAvBA,qBAAA,CAAyBD,KAAK,CAAC,CAAC;EAClC;EAEAG,MAAMA,CAAA,EAAgB;IACpB,IAAM;MACJC,KAAK;MACLC,WAAW;MACXC,MAAM;MACNC,QAAQ;MACRC,SAAS;MACTC,QAAQ;MACRC,UAAU;MACVC,EAAE;MACFC,SAAS;MACT,aAAa,EAAEC;IACjB,CAAC,GAAG,IAAI,CAACjB,KAAK;IACd,oBACEH,KAAA;MAAKe,SAAS,EAAEnB,UAAU,CAAC,cAAc,EAAEmB,SAAS,CAAE;MAAAM,QAAA,gBACpDvB,IAAA;QACEwB,IAAI,EAAC,QAAQ;QACbX,KAAK,EAAEA,KAAM;QACbE,MAAM,EAAEA,MAAO;QACfC,QAAQ,EAAEA,QAAS;QACnBK,SAAS,EAAEA,SAAU;QACrBJ,SAAS,EAAC,cAAc;QACxBC,QAAQ,EAAEA,QAAS;QACnBJ,WAAW,EAAEA,WAAY;QACzBW,GAAG,EAAE,IAAI,CAAClB,UAAW;QACrBa,EAAE,EAAEA,EAAG;QACP,eAAaE;MAAW,CACzB,CAAC,EACDH,UAAU,IAAI,IAAI,iBACjBnB,IAAA;QAAMiB,SAAS,EAAC,cAAc;QAAAM,QAAA,EAAEJ;MAAU,CAAO,CAClD,eACDnB,IAAA;QAAMiB,SAAS,EAAC,aAAa;QAAAM,QAAA,eAC3BvB,IAAA,CAACJ,eAAe;UAAC8B,IAAI,EAAE7B;QAAS,CAAE;MAAC,CAC/B,CAAC;IAAA,CACJ,CAAC;EAEV;AACF;AAACS,eAAA,CA5DKH,WAAW,kBACO;EACpBW,WAAW,EAAE,QAAQ;EACrBG,SAAS,EAAE,EAAE;EACbE,UAAU,EAAE,IAAI;EAChBE,SAASA,CAAA,EAAS;IAChB;EAAA,CACD;EACDD,EAAE,EAAE,EAAE;EACN,aAAa,EAAEO;AACjB,CAAC;AAoDH,eAAexB,WAAW"}
1
+ {"version":3,"file":"SearchInput.js","names":["React","PureComponent","FontAwesomeIcon","vsArrowLeft","vsArrowRight","vsSearch","classNames","Button","GLOBAL_SHORTCUTS","ContextActions","jsx","_jsx","jsxs","_jsxs","Fragment","_Fragment","SearchInput","constructor","props","_defineProperty","inputField","createRef","searchChangeSelection","componentDidMount","setInputPaddingRight","componentDidUpdate","focus","_this$inputField$curr","current","paddingRight","getBoundingClientRect","width","style","concat","render","value","placeholder","onBlur","onChange","className","disabled","matchCount","id","onKeyDown","dataTestId","cursor","matchCountSection","contextActions","action","next","shortcut","NEXT","PREVIOUS","children","kind","type","onClick","icon","tooltip","getDisplayText","index","undefined","ref","actions"],"sources":["../src/SearchInput.tsx"],"sourcesContent":["import React, { PureComponent } from 'react';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport { vsArrowLeft, vsArrowRight, vsSearch } from '@deephaven/icons';\nimport classNames from 'classnames';\nimport Button from './Button';\nimport './SearchInput.scss';\nimport { GLOBAL_SHORTCUTS } from './shortcuts';\nimport { ContextActions } from './context-actions';\n\ninterface SearchInputProps {\n value: string;\n placeholder: string;\n onBlur?: React.FocusEventHandler<HTMLInputElement>;\n onChange: React.ChangeEventHandler<HTMLInputElement>;\n onKeyDown: React.KeyboardEventHandler<HTMLInputElement>;\n className: string;\n disabled?: boolean;\n matchCount: number;\n id: string;\n 'data-testid'?: string;\n cursor?: {\n index: number | undefined;\n next: (direction: 'forward' | 'back') => void;\n };\n}\n\nclass SearchInput extends PureComponent<SearchInputProps> {\n static defaultProps = {\n placeholder: 'Search',\n className: '',\n matchCount: null,\n onKeyDown(): void {\n // no-op\n },\n id: '',\n 'data-testid': undefined,\n cursor: undefined,\n };\n\n constructor(props: SearchInputProps) {\n super(props);\n this.inputField = React.createRef();\n this.searchChangeSelection = React.createRef();\n }\n\n componentDidMount(): void {\n this.setInputPaddingRight();\n }\n\n componentDidUpdate(): void {\n this.setInputPaddingRight();\n }\n\n focus(): void {\n this.inputField.current?.focus();\n }\n\n inputField: React.RefObject<HTMLInputElement>;\n\n searchChangeSelection: React.RefObject<HTMLDivElement>;\n\n setInputPaddingRight(): void {\n const inputField = this.inputField.current;\n const searchChangeSelection = this.searchChangeSelection.current;\n if (inputField && searchChangeSelection) {\n const paddingRight = searchChangeSelection.getBoundingClientRect().width;\n inputField.style.paddingRight = `${paddingRight}px`;\n }\n }\n\n render(): JSX.Element {\n const {\n value,\n placeholder,\n onBlur,\n onChange,\n className,\n disabled,\n matchCount,\n id,\n onKeyDown,\n 'data-testid': dataTestId,\n cursor,\n } = this.props;\n\n let matchCountSection;\n const contextActions = [\n {\n action: () => cursor?.next('forward'),\n shortcut: GLOBAL_SHORTCUTS.NEXT,\n },\n {\n action: () => cursor?.next('back'),\n shortcut: GLOBAL_SHORTCUTS.PREVIOUS,\n },\n ];\n\n if (cursor && matchCount > 1) {\n matchCountSection = (\n <>\n <Button\n kind=\"ghost\"\n className=\"search-change-button\"\n type=\"button\"\n onClick={() => {\n cursor.next('back');\n }}\n icon={vsArrowLeft}\n tooltip={`Previous match (${GLOBAL_SHORTCUTS.PREVIOUS.getDisplayText()})`}\n />\n <span className=\"search-change-text\">\n {cursor.index !== undefined && `${cursor.index + 1} of `}\n {matchCount}\n </span>\n <Button\n kind=\"ghost\"\n className=\"search-change-button\"\n type=\"button\"\n onClick={() => {\n cursor.next('forward');\n }}\n icon={vsArrowRight}\n tooltip={`Next match (${GLOBAL_SHORTCUTS.NEXT.getDisplayText()})`}\n />\n </>\n );\n } else {\n matchCountSection = matchCount > 0 && (\n <span className=\"search-match\">{matchCount}</span>\n );\n }\n\n return (\n <div className={classNames('search-group', className)}>\n <input\n type=\"search\"\n value={value}\n onBlur={onBlur}\n onChange={onChange}\n onKeyDown={onKeyDown}\n className=\"form-control\"\n disabled={disabled}\n placeholder={placeholder}\n ref={this.inputField}\n id={id}\n data-testid={dataTestId}\n />\n\n {matchCount != null ? (\n <>\n <div\n className=\"search-change-selection\"\n ref={this.searchChangeSelection}\n >\n {matchCountSection}\n </div>\n <ContextActions actions={contextActions} />\n </>\n ) : (\n <span className=\"search-icon\">\n <FontAwesomeIcon icon={vsSearch} />\n </span>\n )}\n </div>\n );\n }\n}\n\nexport default SearchInput;\n"],"mappings":";;;AAAA,OAAOA,KAAK,IAAIC,aAAa,QAAQ,OAAO;AAC5C,SAASC,eAAe,QAAQ,gCAAgC;AAChE,SAASC,WAAW,EAAEC,YAAY,EAAEC,QAAQ,QAAQ,kBAAkB;AACtE,OAAOC,UAAU,MAAM,YAAY;AAAC,OAC7BC,MAAM;AAAA;AAAA,SAEJC,gBAAgB;AAAA,SAChBC,cAAc;AAAA,SAAAC,GAAA,IAAAC,IAAA;AAAA,SAAAC,IAAA,IAAAC,KAAA;AAAA,SAAAC,QAAA,IAAAC,SAAA;AAmBvB,MAAMC,WAAW,SAASf,aAAa,CAAmB;EAaxDgB,WAAWA,CAACC,KAAuB,EAAE;IACnC,KAAK,CAACA,KAAK,CAAC;IAACC,eAAA;IAAAA,eAAA;IACb,IAAI,CAACC,UAAU,gBAAGpB,KAAK,CAACqB,SAAS,CAAC,CAAC;IACnC,IAAI,CAACC,qBAAqB,gBAAGtB,KAAK,CAACqB,SAAS,CAAC,CAAC;EAChD;EAEAE,iBAAiBA,CAAA,EAAS;IACxB,IAAI,CAACC,oBAAoB,CAAC,CAAC;EAC7B;EAEAC,kBAAkBA,CAAA,EAAS;IACzB,IAAI,CAACD,oBAAoB,CAAC,CAAC;EAC7B;EAEAE,KAAKA,CAAA,EAAS;IAAA,IAAAC,qBAAA;IACZ,CAAAA,qBAAA,OAAI,CAACP,UAAU,CAACQ,OAAO,cAAAD,qBAAA,uBAAvBA,qBAAA,CAAyBD,KAAK,CAAC,CAAC;EAClC;EAMAF,oBAAoBA,CAAA,EAAS;IAC3B,IAAMJ,UAAU,GAAG,IAAI,CAACA,UAAU,CAACQ,OAAO;IAC1C,IAAMN,qBAAqB,GAAG,IAAI,CAACA,qBAAqB,CAACM,OAAO;IAChE,IAAIR,UAAU,IAAIE,qBAAqB,EAAE;MACvC,IAAMO,YAAY,GAAGP,qBAAqB,CAACQ,qBAAqB,CAAC,CAAC,CAACC,KAAK;MACxEX,UAAU,CAACY,KAAK,CAACH,YAAY,MAAAI,MAAA,CAAMJ,YAAY,OAAI;IACrD;EACF;EAEAK,MAAMA,CAAA,EAAgB;IACpB,IAAM;MACJC,KAAK;MACLC,WAAW;MACXC,MAAM;MACNC,QAAQ;MACRC,SAAS;MACTC,QAAQ;MACRC,UAAU;MACVC,EAAE;MACFC,SAAS;MACT,aAAa,EAAEC,UAAU;MACzBC;IACF,CAAC,GAAG,IAAI,CAAC3B,KAAK;IAEd,IAAI4B,iBAAiB;IACrB,IAAMC,cAAc,GAAG,CACrB;MACEC,MAAM,EAAEA,CAAA,KAAMH,MAAM,aAANA,MAAM,uBAANA,MAAM,CAAEI,IAAI,CAAC,SAAS,CAAC;MACrCC,QAAQ,EAAE1C,gBAAgB,CAAC2C;IAC7B,CAAC,EACD;MACEH,MAAM,EAAEA,CAAA,KAAMH,MAAM,aAANA,MAAM,uBAANA,MAAM,CAAEI,IAAI,CAAC,MAAM,CAAC;MAClCC,QAAQ,EAAE1C,gBAAgB,CAAC4C;IAC7B,CAAC,CACF;IAED,IAAIP,MAAM,IAAIJ,UAAU,GAAG,CAAC,EAAE;MAC5BK,iBAAiB,gBACfjC,KAAA,CAAAE,SAAA;QAAAsC,QAAA,gBACE1C,IAAA,CAACJ,MAAM;UACL+C,IAAI,EAAC,OAAO;UACZf,SAAS,EAAC,sBAAsB;UAChCgB,IAAI,EAAC,QAAQ;UACbC,OAAO,EAAEA,CAAA,KAAM;YACbX,MAAM,CAACI,IAAI,CAAC,MAAM,CAAC;UACrB,CAAE;UACFQ,IAAI,EAAEtD,WAAY;UAClBuD,OAAO,qBAAAzB,MAAA,CAAqBzB,gBAAgB,CAAC4C,QAAQ,CAACO,cAAc,CAAC,CAAC;QAAI,CAC3E,CAAC,eACF9C,KAAA;UAAM0B,SAAS,EAAC,oBAAoB;UAAAc,QAAA,GACjCR,MAAM,CAACe,KAAK,KAAKC,SAAS,OAAA5B,MAAA,CAAOY,MAAM,CAACe,KAAK,GAAG,CAAC,SAAM,EACvDnB,UAAU;QAAA,CACP,CAAC,eACP9B,IAAA,CAACJ,MAAM;UACL+C,IAAI,EAAC,OAAO;UACZf,SAAS,EAAC,sBAAsB;UAChCgB,IAAI,EAAC,QAAQ;UACbC,OAAO,EAAEA,CAAA,KAAM;YACbX,MAAM,CAACI,IAAI,CAAC,SAAS,CAAC;UACxB,CAAE;UACFQ,IAAI,EAAErD,YAAa;UACnBsD,OAAO,iBAAAzB,MAAA,CAAiBzB,gBAAgB,CAAC2C,IAAI,CAACQ,cAAc,CAAC,CAAC;QAAI,CACnE,CAAC;MAAA,CACF,CACH;IACH,CAAC,MAAM;MACLb,iBAAiB,GAAGL,UAAU,GAAG,CAAC,iBAChC9B,IAAA;QAAM4B,SAAS,EAAC,cAAc;QAAAc,QAAA,EAAEZ;MAAU,CAAO,CAClD;IACH;IAEA,oBACE5B,KAAA;MAAK0B,SAAS,EAAEjC,UAAU,CAAC,cAAc,EAAEiC,SAAS,CAAE;MAAAc,QAAA,gBACpD1C,IAAA;QACE4C,IAAI,EAAC,QAAQ;QACbpB,KAAK,EAAEA,KAAM;QACbE,MAAM,EAAEA,MAAO;QACfC,QAAQ,EAAEA,QAAS;QACnBK,SAAS,EAAEA,SAAU;QACrBJ,SAAS,EAAC,cAAc;QACxBC,QAAQ,EAAEA,QAAS;QACnBJ,WAAW,EAAEA,WAAY;QACzB0B,GAAG,EAAE,IAAI,CAAC1C,UAAW;QACrBsB,EAAE,EAAEA,EAAG;QACP,eAAaE;MAAW,CACzB,CAAC,EAEDH,UAAU,IAAI,IAAI,gBACjB5B,KAAA,CAAAE,SAAA;QAAAsC,QAAA,gBACE1C,IAAA;UACE4B,SAAS,EAAC,yBAAyB;UACnCuB,GAAG,EAAE,IAAI,CAACxC,qBAAsB;UAAA+B,QAAA,EAE/BP;QAAiB,CACf,CAAC,eACNnC,IAAA,CAACF,cAAc;UAACsD,OAAO,EAAEhB;QAAe,CAAE,CAAC;MAAA,CAC3C,CAAC,gBAEHpC,IAAA;QAAM4B,SAAS,EAAC,aAAa;QAAAc,QAAA,eAC3B1C,IAAA,CAACT,eAAe;UAACuD,IAAI,EAAEpD;QAAS,CAAE;MAAC,CAC/B,CACP;IAAA,CACE,CAAC;EAEV;AACF;AAACc,eAAA,CA5IKH,WAAW,kBACO;EACpBoB,WAAW,EAAE,QAAQ;EACrBG,SAAS,EAAE,EAAE;EACbE,UAAU,EAAE,IAAI;EAChBE,SAASA,CAAA,EAAS;IAChB;EAAA,CACD;EACDD,EAAE,EAAE,EAAE;EACN,aAAa,EAAEmB,SAAS;EACxBhB,MAAM,EAAEgB;AACV,CAAC;AAmIH,eAAe7C,WAAW"}
@@ -5,6 +5,8 @@ declare const GLOBAL_SHORTCUTS: {
5
5
  SELECT_ALL: import("./Shortcut").default;
6
6
  LINKER: import("./Shortcut").default;
7
7
  LINKER_CLOSE: import("./Shortcut").default;
8
+ NEXT: import("./Shortcut").default;
9
+ PREVIOUS: import("./Shortcut").default;
8
10
  };
9
11
  export default GLOBAL_SHORTCUTS;
10
12
  //# sourceMappingURL=GlobalShortcuts.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"GlobalShortcuts.d.ts","sourceRoot":"","sources":["../../src/shortcuts/GlobalShortcuts.ts"],"names":[],"mappings":"AAGA,QAAA,MAAM,gBAAgB;;;;;;;CA0CrB,CAAC;AAEF,eAAe,gBAAgB,CAAC"}
1
+ {"version":3,"file":"GlobalShortcuts.d.ts","sourceRoot":"","sources":["../../src/shortcuts/GlobalShortcuts.ts"],"names":[],"mappings":"AAGA,QAAA,MAAM,gBAAgB;;;;;;;;;CAwDrB,CAAC;AAEF,eAAe,gBAAgB,CAAC"}
@@ -41,6 +41,20 @@ var GLOBAL_SHORTCUTS = {
41
41
  shortcut: [KEY.ESCAPE],
42
42
  macShortcut: [KEY.ESCAPE],
43
43
  isEditable: false
44
+ }),
45
+ NEXT: ShortcutRegistry.createAndAdd({
46
+ id: 'GLOBAL.NEXT',
47
+ name: 'Next',
48
+ shortcut: [KEY.ENTER],
49
+ macShortcut: [KEY.ENTER],
50
+ isEditable: false
51
+ }),
52
+ PREVIOUS: ShortcutRegistry.createAndAdd({
53
+ id: 'GLOBAL.PREVIOUS',
54
+ name: 'Previous',
55
+ shortcut: [MODIFIER.SHIFT, KEY.ENTER],
56
+ macShortcut: [MODIFIER.SHIFT, KEY.ENTER],
57
+ isEditable: false
44
58
  })
45
59
  };
46
60
  export default GLOBAL_SHORTCUTS;
@@ -1 +1 @@
1
- {"version":3,"file":"GlobalShortcuts.js","names":["ShortcutRegistry","MODIFIER","KEY","GLOBAL_SHORTCUTS","COPY","createAndAdd","id","name","shortcut","CTRL","C","macShortcut","CMD","isEditable","PASTE","V","SAVE","S","SELECT_ALL","A","LINKER","L","LINKER_CLOSE","ESCAPE"],"sources":["../../src/shortcuts/GlobalShortcuts.ts"],"sourcesContent":["import ShortcutRegistry from './ShortcutRegistry';\nimport { MODIFIER, KEY } from './Shortcut';\n\nconst GLOBAL_SHORTCUTS = {\n COPY: ShortcutRegistry.createAndAdd({\n id: 'GLOBAL.COPY',\n name: 'Copy',\n shortcut: [MODIFIER.CTRL, KEY.C],\n macShortcut: [MODIFIER.CMD, KEY.C],\n isEditable: false,\n }),\n PASTE: ShortcutRegistry.createAndAdd({\n id: 'GLOBAL.PASTE',\n name: 'Paste',\n shortcut: [MODIFIER.CTRL, KEY.V],\n macShortcut: [MODIFIER.CMD, KEY.V],\n isEditable: false,\n }),\n SAVE: ShortcutRegistry.createAndAdd({\n id: 'GLOBAL.SAVE',\n name: 'Save',\n shortcut: [MODIFIER.CTRL, KEY.S],\n macShortcut: [MODIFIER.CMD, KEY.S],\n isEditable: false,\n }),\n SELECT_ALL: ShortcutRegistry.createAndAdd({\n id: 'GLOBAL.SELECT_ALL',\n name: 'Select All',\n shortcut: [MODIFIER.CTRL, KEY.A],\n macShortcut: [MODIFIER.CMD, KEY.A],\n isEditable: false,\n }),\n LINKER: ShortcutRegistry.createAndAdd({\n id: 'GLOBAL.LINKER',\n name: 'Linker',\n shortcut: [MODIFIER.CTRL, KEY.L],\n macShortcut: [MODIFIER.CMD, KEY.L],\n }),\n LINKER_CLOSE: ShortcutRegistry.createAndAdd({\n id: 'GLOBAL.LINKER_CLOSE',\n name: 'Close Linker Overlay',\n shortcut: [KEY.ESCAPE],\n macShortcut: [KEY.ESCAPE],\n isEditable: false,\n }),\n};\n\nexport default GLOBAL_SHORTCUTS;\n"],"mappings":"OAAOA,gBAAgB;AAAA,SACdC,QAAQ,EAAEC,GAAG;AAEtB,IAAMC,gBAAgB,GAAG;EACvBC,IAAI,EAAEJ,gBAAgB,CAACK,YAAY,CAAC;IAClCC,EAAE,EAAE,aAAa;IACjBC,IAAI,EAAE,MAAM;IACZC,QAAQ,EAAE,CAACP,QAAQ,CAACQ,IAAI,EAAEP,GAAG,CAACQ,CAAC,CAAC;IAChCC,WAAW,EAAE,CAACV,QAAQ,CAACW,GAAG,EAAEV,GAAG,CAACQ,CAAC,CAAC;IAClCG,UAAU,EAAE;EACd,CAAC,CAAC;EACFC,KAAK,EAAEd,gBAAgB,CAACK,YAAY,CAAC;IACnCC,EAAE,EAAE,cAAc;IAClBC,IAAI,EAAE,OAAO;IACbC,QAAQ,EAAE,CAACP,QAAQ,CAACQ,IAAI,EAAEP,GAAG,CAACa,CAAC,CAAC;IAChCJ,WAAW,EAAE,CAACV,QAAQ,CAACW,GAAG,EAAEV,GAAG,CAACa,CAAC,CAAC;IAClCF,UAAU,EAAE;EACd,CAAC,CAAC;EACFG,IAAI,EAAEhB,gBAAgB,CAACK,YAAY,CAAC;IAClCC,EAAE,EAAE,aAAa;IACjBC,IAAI,EAAE,MAAM;IACZC,QAAQ,EAAE,CAACP,QAAQ,CAACQ,IAAI,EAAEP,GAAG,CAACe,CAAC,CAAC;IAChCN,WAAW,EAAE,CAACV,QAAQ,CAACW,GAAG,EAAEV,GAAG,CAACe,CAAC,CAAC;IAClCJ,UAAU,EAAE;EACd,CAAC,CAAC;EACFK,UAAU,EAAElB,gBAAgB,CAACK,YAAY,CAAC;IACxCC,EAAE,EAAE,mBAAmB;IACvBC,IAAI,EAAE,YAAY;IAClBC,QAAQ,EAAE,CAACP,QAAQ,CAACQ,IAAI,EAAEP,GAAG,CAACiB,CAAC,CAAC;IAChCR,WAAW,EAAE,CAACV,QAAQ,CAACW,GAAG,EAAEV,GAAG,CAACiB,CAAC,CAAC;IAClCN,UAAU,EAAE;EACd,CAAC,CAAC;EACFO,MAAM,EAAEpB,gBAAgB,CAACK,YAAY,CAAC;IACpCC,EAAE,EAAE,eAAe;IACnBC,IAAI,EAAE,QAAQ;IACdC,QAAQ,EAAE,CAACP,QAAQ,CAACQ,IAAI,EAAEP,GAAG,CAACmB,CAAC,CAAC;IAChCV,WAAW,EAAE,CAACV,QAAQ,CAACW,GAAG,EAAEV,GAAG,CAACmB,CAAC;EACnC,CAAC,CAAC;EACFC,YAAY,EAAEtB,gBAAgB,CAACK,YAAY,CAAC;IAC1CC,EAAE,EAAE,qBAAqB;IACzBC,IAAI,EAAE,sBAAsB;IAC5BC,QAAQ,EAAE,CAACN,GAAG,CAACqB,MAAM,CAAC;IACtBZ,WAAW,EAAE,CAACT,GAAG,CAACqB,MAAM,CAAC;IACzBV,UAAU,EAAE;EACd,CAAC;AACH,CAAC;AAED,eAAeV,gBAAgB"}
1
+ {"version":3,"file":"GlobalShortcuts.js","names":["ShortcutRegistry","MODIFIER","KEY","GLOBAL_SHORTCUTS","COPY","createAndAdd","id","name","shortcut","CTRL","C","macShortcut","CMD","isEditable","PASTE","V","SAVE","S","SELECT_ALL","A","LINKER","L","LINKER_CLOSE","ESCAPE","NEXT","ENTER","PREVIOUS","SHIFT"],"sources":["../../src/shortcuts/GlobalShortcuts.ts"],"sourcesContent":["import ShortcutRegistry from './ShortcutRegistry';\nimport { MODIFIER, KEY } from './Shortcut';\n\nconst GLOBAL_SHORTCUTS = {\n COPY: ShortcutRegistry.createAndAdd({\n id: 'GLOBAL.COPY',\n name: 'Copy',\n shortcut: [MODIFIER.CTRL, KEY.C],\n macShortcut: [MODIFIER.CMD, KEY.C],\n isEditable: false,\n }),\n PASTE: ShortcutRegistry.createAndAdd({\n id: 'GLOBAL.PASTE',\n name: 'Paste',\n shortcut: [MODIFIER.CTRL, KEY.V],\n macShortcut: [MODIFIER.CMD, KEY.V],\n isEditable: false,\n }),\n SAVE: ShortcutRegistry.createAndAdd({\n id: 'GLOBAL.SAVE',\n name: 'Save',\n shortcut: [MODIFIER.CTRL, KEY.S],\n macShortcut: [MODIFIER.CMD, KEY.S],\n isEditable: false,\n }),\n SELECT_ALL: ShortcutRegistry.createAndAdd({\n id: 'GLOBAL.SELECT_ALL',\n name: 'Select All',\n shortcut: [MODIFIER.CTRL, KEY.A],\n macShortcut: [MODIFIER.CMD, KEY.A],\n isEditable: false,\n }),\n LINKER: ShortcutRegistry.createAndAdd({\n id: 'GLOBAL.LINKER',\n name: 'Linker',\n shortcut: [MODIFIER.CTRL, KEY.L],\n macShortcut: [MODIFIER.CMD, KEY.L],\n }),\n LINKER_CLOSE: ShortcutRegistry.createAndAdd({\n id: 'GLOBAL.LINKER_CLOSE',\n name: 'Close Linker Overlay',\n shortcut: [KEY.ESCAPE],\n macShortcut: [KEY.ESCAPE],\n isEditable: false,\n }),\n NEXT: ShortcutRegistry.createAndAdd({\n id: 'GLOBAL.NEXT',\n name: 'Next',\n shortcut: [KEY.ENTER],\n macShortcut: [KEY.ENTER],\n isEditable: false,\n }),\n PREVIOUS: ShortcutRegistry.createAndAdd({\n id: 'GLOBAL.PREVIOUS',\n name: 'Previous',\n shortcut: [MODIFIER.SHIFT, KEY.ENTER],\n macShortcut: [MODIFIER.SHIFT, KEY.ENTER],\n isEditable: false,\n }),\n};\n\nexport default GLOBAL_SHORTCUTS;\n"],"mappings":"OAAOA,gBAAgB;AAAA,SACdC,QAAQ,EAAEC,GAAG;AAEtB,IAAMC,gBAAgB,GAAG;EACvBC,IAAI,EAAEJ,gBAAgB,CAACK,YAAY,CAAC;IAClCC,EAAE,EAAE,aAAa;IACjBC,IAAI,EAAE,MAAM;IACZC,QAAQ,EAAE,CAACP,QAAQ,CAACQ,IAAI,EAAEP,GAAG,CAACQ,CAAC,CAAC;IAChCC,WAAW,EAAE,CAACV,QAAQ,CAACW,GAAG,EAAEV,GAAG,CAACQ,CAAC,CAAC;IAClCG,UAAU,EAAE;EACd,CAAC,CAAC;EACFC,KAAK,EAAEd,gBAAgB,CAACK,YAAY,CAAC;IACnCC,EAAE,EAAE,cAAc;IAClBC,IAAI,EAAE,OAAO;IACbC,QAAQ,EAAE,CAACP,QAAQ,CAACQ,IAAI,EAAEP,GAAG,CAACa,CAAC,CAAC;IAChCJ,WAAW,EAAE,CAACV,QAAQ,CAACW,GAAG,EAAEV,GAAG,CAACa,CAAC,CAAC;IAClCF,UAAU,EAAE;EACd,CAAC,CAAC;EACFG,IAAI,EAAEhB,gBAAgB,CAACK,YAAY,CAAC;IAClCC,EAAE,EAAE,aAAa;IACjBC,IAAI,EAAE,MAAM;IACZC,QAAQ,EAAE,CAACP,QAAQ,CAACQ,IAAI,EAAEP,GAAG,CAACe,CAAC,CAAC;IAChCN,WAAW,EAAE,CAACV,QAAQ,CAACW,GAAG,EAAEV,GAAG,CAACe,CAAC,CAAC;IAClCJ,UAAU,EAAE;EACd,CAAC,CAAC;EACFK,UAAU,EAAElB,gBAAgB,CAACK,YAAY,CAAC;IACxCC,EAAE,EAAE,mBAAmB;IACvBC,IAAI,EAAE,YAAY;IAClBC,QAAQ,EAAE,CAACP,QAAQ,CAACQ,IAAI,EAAEP,GAAG,CAACiB,CAAC,CAAC;IAChCR,WAAW,EAAE,CAACV,QAAQ,CAACW,GAAG,EAAEV,GAAG,CAACiB,CAAC,CAAC;IAClCN,UAAU,EAAE;EACd,CAAC,CAAC;EACFO,MAAM,EAAEpB,gBAAgB,CAACK,YAAY,CAAC;IACpCC,EAAE,EAAE,eAAe;IACnBC,IAAI,EAAE,QAAQ;IACdC,QAAQ,EAAE,CAACP,QAAQ,CAACQ,IAAI,EAAEP,GAAG,CAACmB,CAAC,CAAC;IAChCV,WAAW,EAAE,CAACV,QAAQ,CAACW,GAAG,EAAEV,GAAG,CAACmB,CAAC;EACnC,CAAC,CAAC;EACFC,YAAY,EAAEtB,gBAAgB,CAACK,YAAY,CAAC;IAC1CC,EAAE,EAAE,qBAAqB;IACzBC,IAAI,EAAE,sBAAsB;IAC5BC,QAAQ,EAAE,CAACN,GAAG,CAACqB,MAAM,CAAC;IACtBZ,WAAW,EAAE,CAACT,GAAG,CAACqB,MAAM,CAAC;IACzBV,UAAU,EAAE;EACd,CAAC,CAAC;EACFW,IAAI,EAAExB,gBAAgB,CAACK,YAAY,CAAC;IAClCC,EAAE,EAAE,aAAa;IACjBC,IAAI,EAAE,MAAM;IACZC,QAAQ,EAAE,CAACN,GAAG,CAACuB,KAAK,CAAC;IACrBd,WAAW,EAAE,CAACT,GAAG,CAACuB,KAAK,CAAC;IACxBZ,UAAU,EAAE;EACd,CAAC,CAAC;EACFa,QAAQ,EAAE1B,gBAAgB,CAACK,YAAY,CAAC;IACtCC,EAAE,EAAE,iBAAiB;IACrBC,IAAI,EAAE,UAAU;IAChBC,QAAQ,EAAE,CAACP,QAAQ,CAAC0B,KAAK,EAAEzB,GAAG,CAACuB,KAAK,CAAC;IACrCd,WAAW,EAAE,CAACV,QAAQ,CAAC0B,KAAK,EAAEzB,GAAG,CAACuB,KAAK,CAAC;IACxCZ,UAAU,EAAE;EACd,CAAC;AACH,CAAC;AAED,eAAeV,gBAAgB"}
@@ -1,16 +1,22 @@
1
1
  export type BaseThemeType = 'dark' | 'light';
2
2
  export type BaseThemeKey = `default-${BaseThemeType}`;
3
- export type ThemePreloadStyleContent = `:root{${string}`;
3
+ export type CssVariableStyleContent = `:root{${string}`;
4
+ export type ThemeCssVariableName = `--dh-${string}`;
5
+ export type ThemePreloadColorVariable = '--dh-color-loading-spinner-primary' | '--dh-color-loading-spinner-secondary' | '--dh-color-background' | '--dh-color-foreground';
6
+ export type ThemeIconsRequiringManualColorChanges = '--dh-svg-icon-select-indicator' | '--dh-svg-icon-select-indicator-hover' | '--dh-svg-icon-select-indicator-disabled' | '--dh-svg-icon-error';
4
7
  export declare const DEFAULT_DARK_THEME_KEY = "default-dark";
5
8
  export declare const DEFAULT_LIGHT_THEME_KEY = "default-light";
6
- export declare const DEFAULT_PRELOAD_DATA_VARIABLES: {
7
- '--dh-color-accent': string;
8
- '--dh-color-background': string;
9
- };
9
+ export declare const DEFAULT_PRELOAD_DATA_VARIABLES: Record<ThemePreloadColorVariable, string>;
10
+ /**
11
+ * Some inline SVGs require manually updating their fill color via
12
+ * `updateSVGFillColors`. This object maps these variables to their respective
13
+ * fill color variables.
14
+ */
15
+ export declare const SVG_ICON_MANUAL_COLOR_MAP: Record<ThemeIconsRequiringManualColorChanges, string>;
10
16
  export declare const THEME_CACHE_LOCAL_STORAGE_KEY = "deephaven.themeCache";
11
17
  export interface ThemePreloadData {
12
18
  themeKey: string;
13
- preloadStyleContent?: ThemePreloadStyleContent;
19
+ preloadStyleContent?: CssVariableStyleContent;
14
20
  }
15
21
  export interface ThemeData {
16
22
  baseThemeKey?: BaseThemeKey;
@@ -1 +1 @@
1
- {"version":3,"file":"ThemeModel.d.ts","sourceRoot":"","sources":["../../src/theme/ThemeModel.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,aAAa,GAAG,MAAM,GAAG,OAAO,CAAC;AAC7C,MAAM,MAAM,YAAY,GAAG,WAAW,aAAa,EAAE,CAAC;AACtD,MAAM,MAAM,wBAAwB,GAAG,SAAS,MAAM,EAAE,CAAC;AAEzD,eAAO,MAAM,sBAAsB,iBAAwC,CAAC;AAC5E,eAAO,MAAM,uBAAuB,kBAAyC,CAAC;AAG9E,eAAO,MAAM,8BAA8B;;;CAGC,CAAC;AAE7C,eAAO,MAAM,6BAA6B,yBAAyB,CAAC;AAEpE,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,EAAE,MAAM,CAAC;IACjB,mBAAmB,CAAC,EAAE,wBAAwB,CAAC;CAChD;AAED,MAAM,WAAW,SAAS;IACxB,YAAY,CAAC,EAAE,YAAY,CAAC;IAC5B,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,YAAY,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,qBAAqB;IACpC,IAAI,EAAE,SAAS,EAAE,CAAC;IAClB,MAAM,EAAE,SAAS,EAAE,CAAC;CACrB"}
1
+ {"version":3,"file":"ThemeModel.d.ts","sourceRoot":"","sources":["../../src/theme/ThemeModel.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,aAAa,GAAG,MAAM,GAAG,OAAO,CAAC;AAC7C,MAAM,MAAM,YAAY,GAAG,WAAW,aAAa,EAAE,CAAC;AACtD,MAAM,MAAM,uBAAuB,GAAG,SAAS,MAAM,EAAE,CAAC;AACxD,MAAM,MAAM,oBAAoB,GAAG,QAAQ,MAAM,EAAE,CAAC;AAEpD,MAAM,MAAM,yBAAyB,GACjC,oCAAoC,GACpC,sCAAsC,GACtC,uBAAuB,GACvB,uBAAuB,CAAC;AAE5B,MAAM,MAAM,qCAAqC,GAC7C,gCAAgC,GAChC,sCAAsC,GACtC,yCAAyC,GACzC,qBAAqB,CAAC;AAE1B,eAAO,MAAM,sBAAsB,iBAAwC,CAAC;AAC5E,eAAO,MAAM,uBAAuB,kBAAyC,CAAC;AAG9E,eAAO,MAAM,8BAA8B,EAAE,MAAM,CACjD,yBAAyB,EACzB,MAAM,CAMP,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,yBAAyB,EAAE,MAAM,CAC5C,qCAAqC,EACrC,MAAM,CAMP,CAAC;AAEF,eAAO,MAAM,6BAA6B,yBAAyB,CAAC;AAEpE,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,EAAE,MAAM,CAAC;IACjB,mBAAmB,CAAC,EAAE,uBAAuB,CAAC;CAC/C;AAED,MAAM,WAAW,SAAS;IACxB,YAAY,CAAC,EAAE,YAAY,CAAC;IAC5B,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,YAAY,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,qBAAqB;IACpC,IAAI,EAAE,SAAS,EAAE,CAAC;IAClB,MAAM,EAAE,SAAS,EAAE,CAAC;CACrB"}
@@ -3,10 +3,25 @@ export var DEFAULT_LIGHT_THEME_KEY = 'default-light';
3
3
 
4
4
  // Css properties that are used in preload data with default values.
5
5
  export var DEFAULT_PRELOAD_DATA_VARIABLES = {
6
- '--dh-color-accent': '#4c7dee',
7
- // dark theme --dh-color-blue-700
8
- '--dh-color-background': '#1a171a' // dark theme --dh-color-gray-50
6
+ '--dh-color-loading-spinner-primary': '#3b6bda',
7
+ // dark theme --dh-color-blue-600
8
+ '--dh-color-loading-spinner-secondary': '#f0f0ee80',
9
+ // dark theme --dh-color-gray-800 + 50% opacity
10
+ '--dh-color-background': '#1a171a',
11
+ // dark theme --dh-color-gray-50
12
+ '--dh-color-foreground': '#f0f0ee' // dark theme --dh-color-gray-800
9
13
  };
10
14
 
15
+ /**
16
+ * Some inline SVGs require manually updating their fill color via
17
+ * `updateSVGFillColors`. This object maps these variables to their respective
18
+ * fill color variables.
19
+ */
20
+ export var SVG_ICON_MANUAL_COLOR_MAP = {
21
+ '--dh-svg-icon-select-indicator': '--dh-color-selector-fg',
22
+ '--dh-svg-icon-select-indicator-hover': '--dh-color-selector-hover-fg',
23
+ '--dh-svg-icon-select-indicator-disabled': '--dh-color-selector-disabled-fg',
24
+ '--dh-svg-icon-error': '--dh-color-form-control-error'
25
+ };
11
26
  export var THEME_CACHE_LOCAL_STORAGE_KEY = 'deephaven.themeCache';
12
27
  //# sourceMappingURL=ThemeModel.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"ThemeModel.js","names":["DEFAULT_DARK_THEME_KEY","DEFAULT_LIGHT_THEME_KEY","DEFAULT_PRELOAD_DATA_VARIABLES","THEME_CACHE_LOCAL_STORAGE_KEY"],"sources":["../../src/theme/ThemeModel.ts"],"sourcesContent":["export type BaseThemeType = 'dark' | 'light';\nexport type BaseThemeKey = `default-${BaseThemeType}`;\nexport type ThemePreloadStyleContent = `:root{${string}`;\n\nexport const DEFAULT_DARK_THEME_KEY = 'default-dark' satisfies BaseThemeKey;\nexport const DEFAULT_LIGHT_THEME_KEY = 'default-light' satisfies BaseThemeKey;\n\n// Css properties that are used in preload data with default values.\nexport const DEFAULT_PRELOAD_DATA_VARIABLES = {\n '--dh-color-accent': '#4c7dee', // dark theme --dh-color-blue-700\n '--dh-color-background': '#1a171a', // dark theme --dh-color-gray-50\n} satisfies Record<`--dh-${string}`, string>;\n\nexport const THEME_CACHE_LOCAL_STORAGE_KEY = 'deephaven.themeCache';\n\nexport interface ThemePreloadData {\n themeKey: string;\n preloadStyleContent?: ThemePreloadStyleContent;\n}\n\nexport interface ThemeData {\n baseThemeKey?: BaseThemeKey;\n themeKey: string;\n name: string;\n styleContent: string;\n}\n\nexport interface ThemeRegistrationData {\n base: ThemeData[];\n custom: ThemeData[];\n}\n"],"mappings":"AAIA,OAAO,IAAMA,sBAAsB,GAAG,cAAqC;AAC3E,OAAO,IAAMC,uBAAuB,GAAG,eAAsC;;AAE7E;AACA,OAAO,IAAMC,8BAA8B,GAAG;EAC5C,mBAAmB,EAAE,SAAS;EAAE;EAChC,uBAAuB,EAAE,SAAS,CAAE;AACtC,CAA4C;;AAE5C,OAAO,IAAMC,6BAA6B,GAAG,sBAAsB"}
1
+ {"version":3,"file":"ThemeModel.js","names":["DEFAULT_DARK_THEME_KEY","DEFAULT_LIGHT_THEME_KEY","DEFAULT_PRELOAD_DATA_VARIABLES","SVG_ICON_MANUAL_COLOR_MAP","THEME_CACHE_LOCAL_STORAGE_KEY"],"sources":["../../src/theme/ThemeModel.ts"],"sourcesContent":["export type BaseThemeType = 'dark' | 'light';\nexport type BaseThemeKey = `default-${BaseThemeType}`;\nexport type CssVariableStyleContent = `:root{${string}`;\nexport type ThemeCssVariableName = `--dh-${string}`;\n\nexport type ThemePreloadColorVariable =\n | '--dh-color-loading-spinner-primary'\n | '--dh-color-loading-spinner-secondary'\n | '--dh-color-background'\n | '--dh-color-foreground';\n\nexport type ThemeIconsRequiringManualColorChanges =\n | '--dh-svg-icon-select-indicator'\n | '--dh-svg-icon-select-indicator-hover'\n | '--dh-svg-icon-select-indicator-disabled'\n | '--dh-svg-icon-error';\n\nexport const DEFAULT_DARK_THEME_KEY = 'default-dark' satisfies BaseThemeKey;\nexport const DEFAULT_LIGHT_THEME_KEY = 'default-light' satisfies BaseThemeKey;\n\n// Css properties that are used in preload data with default values.\nexport const DEFAULT_PRELOAD_DATA_VARIABLES: Record<\n ThemePreloadColorVariable,\n string\n> = {\n '--dh-color-loading-spinner-primary': '#3b6bda', // dark theme --dh-color-blue-600\n '--dh-color-loading-spinner-secondary': '#f0f0ee80', // dark theme --dh-color-gray-800 + 50% opacity\n '--dh-color-background': '#1a171a', // dark theme --dh-color-gray-50\n '--dh-color-foreground': '#f0f0ee', // dark theme --dh-color-gray-800\n};\n\n/**\n * Some inline SVGs require manually updating their fill color via\n * `updateSVGFillColors`. This object maps these variables to their respective\n * fill color variables.\n */\nexport const SVG_ICON_MANUAL_COLOR_MAP: Record<\n ThemeIconsRequiringManualColorChanges,\n string\n> = {\n '--dh-svg-icon-select-indicator': '--dh-color-selector-fg',\n '--dh-svg-icon-select-indicator-hover': '--dh-color-selector-hover-fg',\n '--dh-svg-icon-select-indicator-disabled': '--dh-color-selector-disabled-fg',\n '--dh-svg-icon-error': '--dh-color-form-control-error',\n};\n\nexport const THEME_CACHE_LOCAL_STORAGE_KEY = 'deephaven.themeCache';\n\nexport interface ThemePreloadData {\n themeKey: string;\n preloadStyleContent?: CssVariableStyleContent;\n}\n\nexport interface ThemeData {\n baseThemeKey?: BaseThemeKey;\n themeKey: string;\n name: string;\n styleContent: string;\n}\n\nexport interface ThemeRegistrationData {\n base: ThemeData[];\n custom: ThemeData[];\n}\n"],"mappings":"AAiBA,OAAO,IAAMA,sBAAsB,GAAG,cAAqC;AAC3E,OAAO,IAAMC,uBAAuB,GAAG,eAAsC;;AAE7E;AACA,OAAO,IAAMC,8BAGZ,GAAG;EACF,oCAAoC,EAAE,SAAS;EAAE;EACjD,sCAAsC,EAAE,WAAW;EAAE;EACrD,uBAAuB,EAAE,SAAS;EAAE;EACpC,uBAAuB,EAAE,SAAS,CAAE;AACtC,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA,OAAO,IAAMC,yBAGZ,GAAG;EACF,gCAAgC,EAAE,wBAAwB;EAC1D,sCAAsC,EAAE,8BAA8B;EACtE,yCAAyC,EAAE,iCAAiC;EAC5E,qBAAqB,EAAE;AACzB,CAAC;AAED,OAAO,IAAMC,6BAA6B,GAAG,sBAAsB"}
@@ -1,5 +1,6 @@
1
1
  import { ReactNode } from 'react';
2
2
  import { ThemeData } from './ThemeModel';
3
+ import './theme-svg.scss';
3
4
  export interface ThemeContextValue {
4
5
  activeThemes: ThemeData[] | null;
5
6
  selectedThemeKey: string;
@@ -1 +1 @@
1
- {"version":3,"file":"ThemeProvider.d.ts","sourceRoot":"","sources":["../../src/theme/ThemeProvider.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAiB,SAAS,EAAgC,MAAM,OAAO,CAAC;AAE/E,OAAO,EAA0B,SAAS,EAAE,MAAM,cAAc,CAAC;AAUjE,MAAM,WAAW,iBAAiB;IAChC,YAAY,EAAE,SAAS,EAAE,GAAG,IAAI,CAAC;IACjC,gBAAgB,EAAE,MAAM,CAAC;IACzB,mBAAmB,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,IAAI,CAAC;CACjD;AAID,eAAO,MAAM,YAAY,mDAAgD,CAAC;AAE1E,MAAM,WAAW,kBAAkB;IAMjC,MAAM,EAAE,SAAS,EAAE,GAAG,IAAI,CAAC;IAC3B,QAAQ,EAAE,SAAS,CAAC;CACrB;AAED,wBAAgB,aAAa,CAAC,EAC5B,MAAM,EACN,QAAQ,GACT,EAAE,kBAAkB,GAAG,GAAG,CAAC,OAAO,CAkElC;AAED,eAAe,aAAa,CAAC"}
1
+ {"version":3,"file":"ThemeProvider.d.ts","sourceRoot":"","sources":["../../src/theme/ThemeProvider.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAiB,SAAS,EAAgC,MAAM,OAAO,CAAC;AAE/E,OAAO,EAA0B,SAAS,EAAE,MAAM,cAAc,CAAC;AAUjE,OAAO,kBAAkB,CAAC;AAE1B,MAAM,WAAW,iBAAiB;IAChC,YAAY,EAAE,SAAS,EAAE,GAAG,IAAI,CAAC;IACjC,gBAAgB,EAAE,MAAM,CAAC;IACzB,mBAAmB,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,IAAI,CAAC;CACjD;AAID,eAAO,MAAM,YAAY,mDAAgD,CAAC;AAE1E,MAAM,WAAW,kBAAkB;IAMjC,MAAM,EAAE,SAAS,EAAE,GAAG,IAAI,CAAC;IAC3B,QAAQ,EAAE,SAAS,CAAC;CACrB;AAED,wBAAgB,aAAa,CAAC,EAC5B,MAAM,EACN,QAAQ,GACT,EAAE,kBAAkB,GAAG,GAAG,CAAC,OAAO,CAsElC;AAED,eAAe,aAAa,CAAC"}
@@ -1,8 +1,9 @@
1
1
  import { createContext, useEffect, useMemo, useState } from 'react';
2
2
  import Log from '@deephaven/log';
3
3
  import { DEFAULT_DARK_THEME_KEY } from "./ThemeModel.js";
4
- import { calculatePreloadStyleContent, getActiveThemes, getDefaultBaseThemes, getThemePreloadData, setThemePreloadData } from "./ThemeUtils.js";
4
+ import { calculatePreloadStyleContent, getActiveThemes, getDefaultBaseThemes, getThemePreloadData, setThemePreloadData, overrideSVGFillColors } from "./ThemeUtils.js";
5
5
  import { SpectrumThemeProvider } from "./SpectrumThemeProvider.js";
6
+ import "./theme-svg.css";
6
7
  import { jsx as _jsx } from "react/jsx-runtime";
7
8
  import { Fragment as _Fragment } from "react/jsx-runtime";
8
9
  import { jsxs as _jsxs } from "react/jsx-runtime";
@@ -29,6 +30,10 @@ export function ThemeProvider(_ref) {
29
30
  if (activeThemes == null || themes == null) {
30
31
  return;
31
32
  }
33
+
34
+ // Override fill color for certain inline SVGs (the originals are provided
35
+ // by theme-svg.scss)
36
+ overrideSVGFillColors();
32
37
  var preloadStyleContent = calculatePreloadStyleContent();
33
38
  log.debug2('updateThemePreloadData:', {
34
39
  active: activeThemes.map(theme => theme.themeKey),
@@ -1 +1 @@
1
- {"version":3,"file":"ThemeProvider.js","names":["createContext","useEffect","useMemo","useState","Log","DEFAULT_DARK_THEME_KEY","calculatePreloadStyleContent","getActiveThemes","getDefaultBaseThemes","getThemePreloadData","setThemePreloadData","SpectrumThemeProvider","jsx","_jsx","Fragment","_Fragment","jsxs","_jsxs","log","module","ThemeContext","ThemeProvider","_ref","themes","children","baseThemes","selectedThemeKey","setSelectedThemeKey","_getThemePreloadData$","_getThemePreloadData","themeKey","activeThemes","base","custom","updateThemePreloadData","preloadStyleContent","debug2","active","map","theme","all","value","Provider","styleContent"],"sources":["../../src/theme/ThemeProvider.tsx"],"sourcesContent":["import { createContext, ReactNode, useEffect, useMemo, useState } from 'react';\nimport Log from '@deephaven/log';\nimport { DEFAULT_DARK_THEME_KEY, ThemeData } from './ThemeModel';\nimport {\n calculatePreloadStyleContent,\n getActiveThemes,\n getDefaultBaseThemes,\n getThemePreloadData,\n setThemePreloadData,\n} from './ThemeUtils';\nimport { SpectrumThemeProvider } from './SpectrumThemeProvider';\n\nexport interface ThemeContextValue {\n activeThemes: ThemeData[] | null;\n selectedThemeKey: string;\n setSelectedThemeKey: (themeKey: string) => void;\n}\n\nconst log = Log.module('ThemeProvider');\n\nexport const ThemeContext = createContext<ThemeContextValue | null>(null);\n\nexport interface ThemeProviderProps {\n /*\n * Additional themes to load in addition to the base themes. If no additional\n * themes are to be loaded, this must be set to an empty array in order to\n * tell the provider to activate the base themes.\n */\n themes: ThemeData[] | null;\n children: ReactNode;\n}\n\nexport function ThemeProvider({\n themes,\n children,\n}: ThemeProviderProps): JSX.Element {\n const baseThemes = useMemo(() => getDefaultBaseThemes(), []);\n\n const [selectedThemeKey, setSelectedThemeKey] = useState<string>(\n () => getThemePreloadData()?.themeKey ?? DEFAULT_DARK_THEME_KEY\n );\n\n // Calculate active themes once a non-null themes array is provided.\n const activeThemes = useMemo(\n () =>\n themes == null\n ? null\n : getActiveThemes(selectedThemeKey, {\n base: baseThemes,\n custom: themes ?? [],\n }),\n [baseThemes, selectedThemeKey, themes]\n );\n\n useEffect(\n function updateThemePreloadData() {\n // Don't update preload data until themes have been loaded and activated\n if (activeThemes == null || themes == null) {\n return;\n }\n\n const preloadStyleContent = calculatePreloadStyleContent();\n\n log.debug2('updateThemePreloadData:', {\n active: activeThemes.map(theme => theme.themeKey),\n all: themes.map(theme => theme.themeKey),\n preloadStyleContent,\n selectedThemeKey,\n });\n\n setThemePreloadData({\n themeKey: selectedThemeKey,\n preloadStyleContent,\n });\n },\n [activeThemes, selectedThemeKey, themes]\n );\n\n const value = useMemo(\n () => ({\n activeThemes,\n selectedThemeKey,\n setSelectedThemeKey,\n }),\n [activeThemes, selectedThemeKey]\n );\n\n return (\n <ThemeContext.Provider value={value}>\n {activeThemes == null ? null : (\n <>\n {activeThemes.map(theme => (\n <style data-theme-key={theme.themeKey} key={theme.themeKey}>\n {theme.styleContent}\n </style>\n ))}\n </>\n )}\n <SpectrumThemeProvider>{children}</SpectrumThemeProvider>\n </ThemeContext.Provider>\n );\n}\n\nexport default ThemeProvider;\n"],"mappings":"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"}
1
+ {"version":3,"file":"ThemeProvider.js","names":["createContext","useEffect","useMemo","useState","Log","DEFAULT_DARK_THEME_KEY","calculatePreloadStyleContent","getActiveThemes","getDefaultBaseThemes","getThemePreloadData","setThemePreloadData","overrideSVGFillColors","SpectrumThemeProvider","jsx","_jsx","Fragment","_Fragment","jsxs","_jsxs","log","module","ThemeContext","ThemeProvider","_ref","themes","children","baseThemes","selectedThemeKey","setSelectedThemeKey","_getThemePreloadData$","_getThemePreloadData","themeKey","activeThemes","base","custom","updateThemePreloadData","preloadStyleContent","debug2","active","map","theme","all","value","Provider","styleContent"],"sources":["../../src/theme/ThemeProvider.tsx"],"sourcesContent":["import { createContext, ReactNode, useEffect, useMemo, useState } from 'react';\nimport Log from '@deephaven/log';\nimport { DEFAULT_DARK_THEME_KEY, ThemeData } from './ThemeModel';\nimport {\n calculatePreloadStyleContent,\n getActiveThemes,\n getDefaultBaseThemes,\n getThemePreloadData,\n setThemePreloadData,\n overrideSVGFillColors,\n} from './ThemeUtils';\nimport { SpectrumThemeProvider } from './SpectrumThemeProvider';\nimport './theme-svg.scss';\n\nexport interface ThemeContextValue {\n activeThemes: ThemeData[] | null;\n selectedThemeKey: string;\n setSelectedThemeKey: (themeKey: string) => void;\n}\n\nconst log = Log.module('ThemeProvider');\n\nexport const ThemeContext = createContext<ThemeContextValue | null>(null);\n\nexport interface ThemeProviderProps {\n /*\n * Additional themes to load in addition to the base themes. If no additional\n * themes are to be loaded, this must be set to an empty array in order to\n * tell the provider to activate the base themes.\n */\n themes: ThemeData[] | null;\n children: ReactNode;\n}\n\nexport function ThemeProvider({\n themes,\n children,\n}: ThemeProviderProps): JSX.Element {\n const baseThemes = useMemo(() => getDefaultBaseThemes(), []);\n\n const [selectedThemeKey, setSelectedThemeKey] = useState<string>(\n () => getThemePreloadData()?.themeKey ?? DEFAULT_DARK_THEME_KEY\n );\n\n // Calculate active themes once a non-null themes array is provided.\n const activeThemes = useMemo(\n () =>\n themes == null\n ? null\n : getActiveThemes(selectedThemeKey, {\n base: baseThemes,\n custom: themes ?? [],\n }),\n [baseThemes, selectedThemeKey, themes]\n );\n\n useEffect(\n function updateThemePreloadData() {\n // Don't update preload data until themes have been loaded and activated\n if (activeThemes == null || themes == null) {\n return;\n }\n\n // Override fill color for certain inline SVGs (the originals are provided\n // by theme-svg.scss)\n overrideSVGFillColors();\n\n const preloadStyleContent = calculatePreloadStyleContent();\n\n log.debug2('updateThemePreloadData:', {\n active: activeThemes.map(theme => theme.themeKey),\n all: themes.map(theme => theme.themeKey),\n preloadStyleContent,\n selectedThemeKey,\n });\n\n setThemePreloadData({\n themeKey: selectedThemeKey,\n preloadStyleContent,\n });\n },\n [activeThemes, selectedThemeKey, themes]\n );\n\n const value = useMemo(\n () => ({\n activeThemes,\n selectedThemeKey,\n setSelectedThemeKey,\n }),\n [activeThemes, selectedThemeKey]\n );\n\n return (\n <ThemeContext.Provider value={value}>\n {activeThemes == null ? null : (\n <>\n {activeThemes.map(theme => (\n <style data-theme-key={theme.themeKey} key={theme.themeKey}>\n {theme.styleContent}\n </style>\n ))}\n </>\n )}\n <SpectrumThemeProvider>{children}</SpectrumThemeProvider>\n </ThemeContext.Provider>\n );\n}\n\nexport default ThemeProvider;\n"],"mappings":"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"}
@@ -1,15 +1,24 @@
1
- import { ThemeData, ThemePreloadData, ThemePreloadStyleContent, ThemeRegistrationData } from './ThemeModel';
1
+ import { ThemeData, ThemePreloadData, CssVariableStyleContent, ThemeRegistrationData, ThemeCssVariableName } from './ThemeModel';
2
2
  export declare const CSS_VAR_EXPRESSION_PREFIX = "var(--";
3
3
  export declare const TMP_CSS_PROP_PREFIX = "dh-tmp";
4
4
  export declare const NON_WHITESPACE_REGEX: RegExp;
5
5
  export declare const WHITESPACE_REGEX: RegExp;
6
6
  export type VarExpressionResolver = (varExpression: string) => string;
7
7
  /**
8
- * Creates a string containing preload style content for the current theme.
9
- * This resolves the current values of a few CSS variables that can be used
10
- * to style the page before the theme is loaded on next page load.
8
+ * Resolves the current values of CSS variables we want to preload. Preloading
9
+ * happens before themes are fully loaded so that we can style things like the
10
+ * loading spinner and background color which are shown to the user early on in
11
+ * the app lifecycle.
11
12
  */
12
- export declare function calculatePreloadStyleContent(): ThemePreloadStyleContent;
13
+ export declare function calculatePreloadStyleContent(): CssVariableStyleContent;
14
+ /**
15
+ * Create a resolver function for calculating the value of a css variable based
16
+ * on a given element's computed style. If the variable resolves to '', we check
17
+ * DEFAULT_PRELOAD_DATA_VARIABLES for a default value, and if one does not exist,
18
+ * return ''.
19
+ * @param el Element to resolve css variables against
20
+ */
21
+ export declare function createCssVariableResolver(el: Element): (varName: ThemeCssVariableName) => string;
13
22
  /**
14
23
  * Extracts all css variable expressions from the given record and returns
15
24
  * a set of unique expressions.
@@ -57,6 +66,13 @@ export declare function getThemePreloadData(): ThemePreloadData | null;
57
66
  * @returns An array of [start, end] index pairs for each expression
58
67
  */
59
68
  export declare function getExpressionRanges(value: string): [number, number][];
69
+ /**
70
+ * Replace the `fill='...'` attribute in the given SVG content with the given
71
+ * color string.
72
+ * @param svgContent Inline SVG content to replace the fill color in
73
+ * @param fillColor The color to replace the fill color with
74
+ */
75
+ export declare function replaceSVGFillColor(svgContent: string, fillColor: string): string;
60
76
  /**
61
77
  * Make a copy of the given object replacing any css variable expressions
62
78
  * contained in its prop values with values resolved from the given HTML element.
@@ -99,4 +115,20 @@ export declare function getThemeKey(pluginName: string, themeName: string): stri
99
115
  * Preload minimal theme variables from the cache.
100
116
  */
101
117
  export declare function preloadTheme(): void;
118
+ /**
119
+ * Inline SVGs cannot depend on dynamic CSS variables, so we have to statically
120
+ * update them if we want to change their color.
121
+ *
122
+ * This function:
123
+ * 1. Clears any previous overrides
124
+ * 2. Resolves CSS variables containing inline SVG urls
125
+ * 3. Resolves mapped color variables and replaces the `fill='...'` attribute with the result
126
+ * 4. Sets the original CSS variable to the new replaced value
127
+ *
128
+ * Note that it is preferable to use inline SVGs as background-mask values and
129
+ * just change the background color instead of relying on this util, but this
130
+ * is not always possible. e.g. <select> elements don't support pseudo elements,
131
+ * so there's not a good way to set icons via masks.
132
+ */
133
+ export declare function overrideSVGFillColors(): void;
102
134
  //# sourceMappingURL=ThemeUtils.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"ThemeUtils.d.ts","sourceRoot":"","sources":["../../src/theme/ThemeUtils.ts"],"names":[],"mappings":"AAgBA,OAAO,EAIL,SAAS,EACT,gBAAgB,EAChB,wBAAwB,EACxB,qBAAqB,EAEtB,MAAM,cAAc,CAAC;AAItB,eAAO,MAAM,yBAAyB,WAAW,CAAC;AAClD,eAAO,MAAM,mBAAmB,WAAW,CAAC;AAC5C,eAAO,MAAM,oBAAoB,QAAO,CAAC;AACzC,eAAO,MAAM,gBAAgB,QAAO,CAAC;AAErC,MAAM,MAAM,qBAAqB,GAAG,CAAC,aAAa,EAAE,MAAM,KAAK,MAAM,CAAC;AAEtE;;;;GAIG;AACH,wBAAgB,4BAA4B,IAAI,wBAAwB,CAWvE;AAED;;;;GAIG;AACH,wBAAgB,qCAAqC,CACnD,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAC7B,GAAG,CAAC,MAAM,CAAC,CAcb;AAED;;;GAGG;AACH,wBAAgB,eAAe,CAC7B,QAAQ,EAAE,MAAM,EAChB,iBAAiB,EAAE,qBAAqB,GACvC,CAAC,SAAS,CAAC,GAAG,CAAC,SAAS,EAAE,SAAS,CAAC,CA+BtC;AAED;;GAEG;AACH,wBAAgB,oBAAoB,IAAI,SAAS,EAAE,CAalD;AAED;;;GAGG;AACH,wBAAgB,mBAAmB,IAAI,gBAAgB,GAAG,IAAI,CAU7D;AAED;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,MAAM,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,CAiCrE;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,2BAA2B,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAC1E,MAAM,EAAE,CAAC,EACT,aAAa,GAAE,WAA2B,GACzC,CAAC,CA2CH;AAED;;;;;;GAMG;AACH,wBAAgB,2BAA2B,CACzC,QAAQ,EAAE,qBAAqB,EAC/B,KAAK,EAAE,MAAM,GACZ,MAAM,CAyBR;AAED;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,WAAW,EAAE,gBAAgB,GAAG,IAAI,CAKvE;AAED;;;;GAIG;AACH,wBAAgB,WAAW,CAAC,UAAU,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM,CAEzE;AAED;;GAEG;AACH,wBAAgB,YAAY,IAAI,IAAI,CAUnC"}
1
+ {"version":3,"file":"ThemeUtils.d.ts","sourceRoot":"","sources":["../../src/theme/ThemeUtils.ts"],"names":[],"mappings":"AAgBA,OAAO,EAIL,SAAS,EACT,gBAAgB,EAChB,uBAAuB,EAEvB,qBAAqB,EAGrB,oBAAoB,EAErB,MAAM,cAAc,CAAC;AAItB,eAAO,MAAM,yBAAyB,WAAW,CAAC;AAClD,eAAO,MAAM,mBAAmB,WAAW,CAAC;AAC5C,eAAO,MAAM,oBAAoB,QAAO,CAAC;AACzC,eAAO,MAAM,gBAAgB,QAAO,CAAC;AAErC,MAAM,MAAM,qBAAqB,GAAG,CAAC,aAAa,EAAE,MAAM,KAAK,MAAM,CAAC;AAEtE;;;;;GAKG;AACH,wBAAgB,4BAA4B,IAAI,uBAAuB,CAUtE;AAED;;;;;;GAMG;AACH,wBAAgB,yBAAyB,CACvC,EAAE,EAAE,OAAO,GACV,CAAC,OAAO,EAAE,oBAAoB,KAAK,MAAM,CAkB3C;AAED;;;;GAIG;AACH,wBAAgB,qCAAqC,CACnD,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAC7B,GAAG,CAAC,MAAM,CAAC,CAcb;AAED;;;GAGG;AACH,wBAAgB,eAAe,CAC7B,QAAQ,EAAE,MAAM,EAChB,iBAAiB,EAAE,qBAAqB,GACvC,CAAC,SAAS,CAAC,GAAG,CAAC,SAAS,EAAE,SAAS,CAAC,CA+BtC;AAED;;GAEG;AACH,wBAAgB,oBAAoB,IAAI,SAAS,EAAE,CAalD;AAED;;;GAGG;AACH,wBAAgB,mBAAmB,IAAI,gBAAgB,GAAG,IAAI,CAU7D;AAED;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,MAAM,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,CAiCrE;AAED;;;;;GAKG;AACH,wBAAgB,mBAAmB,CACjC,UAAU,EAAE,MAAM,EAClB,SAAS,EAAE,MAAM,GAChB,MAAM,CAKR;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,2BAA2B,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAC1E,MAAM,EAAE,CAAC,EACT,aAAa,GAAE,WAA2B,GACzC,CAAC,CA2CH;AAED;;;;;;GAMG;AACH,wBAAgB,2BAA2B,CACzC,QAAQ,EAAE,qBAAqB,EAC/B,KAAK,EAAE,MAAM,GACZ,MAAM,CAyBR;AAED;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,WAAW,EAAE,gBAAgB,GAAG,IAAI,CAKvE;AAED;;;;GAIG;AACH,wBAAgB,WAAW,CAAC,UAAU,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM,CAEzE;AAED;;GAEG;AACH,wBAAgB,YAAY,IAAI,IAAI,CAUnC;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,qBAAqB,IAAI,IAAI,CAkB5C"}
@@ -14,29 +14,51 @@ import { assertNotNull, ColorUtils } from '@deephaven/utils';
14
14
  // },
15
15
  import { themeDark } from "./theme-dark/index.js";
16
16
  import { themeLight } from "./theme-light/index.js";
17
- import { DEFAULT_DARK_THEME_KEY, DEFAULT_LIGHT_THEME_KEY, DEFAULT_PRELOAD_DATA_VARIABLES, THEME_CACHE_LOCAL_STORAGE_KEY } from "./ThemeModel.js";
17
+ import { DEFAULT_DARK_THEME_KEY, DEFAULT_LIGHT_THEME_KEY, DEFAULT_PRELOAD_DATA_VARIABLES, THEME_CACHE_LOCAL_STORAGE_KEY, SVG_ICON_MANUAL_COLOR_MAP } from "./ThemeModel.js";
18
18
  var log = Log.module('ThemeUtils');
19
19
  export var CSS_VAR_EXPRESSION_PREFIX = 'var(--';
20
20
  export var TMP_CSS_PROP_PREFIX = 'dh-tmp';
21
21
  export var NON_WHITESPACE_REGEX = /\S/;
22
22
  export var WHITESPACE_REGEX = /\s/;
23
23
  /**
24
- * Creates a string containing preload style content for the current theme.
25
- * This resolves the current values of a few CSS variables that can be used
26
- * to style the page before the theme is loaded on next page load.
24
+ * Resolves the current values of CSS variables we want to preload. Preloading
25
+ * happens before themes are fully loaded so that we can style things like the
26
+ * loading spinner and background color which are shown to the user early on in
27
+ * the app lifecycle.
27
28
  */
28
29
  export function calculatePreloadStyleContent() {
29
- var bodyStyle = getComputedStyle(document.body);
30
+ var resolveVar = createCssVariableResolver(document.body);
30
31
 
31
32
  // Calculate the current preload variables. If the variable is not set, use
32
33
  // the default value.
33
- var pairs = Object.entries(DEFAULT_PRELOAD_DATA_VARIABLES).map(_ref => {
34
- var [key, defaultValue] = _ref;
35
- return "".concat(key, ":").concat(bodyStyle.getPropertyValue(key) || defaultValue);
36
- });
34
+ var pairs = Object.keys(DEFAULT_PRELOAD_DATA_VARIABLES).map(key => "".concat(key, ":").concat(resolveVar(key)));
37
35
  return ":root{".concat(pairs.join(';'), "}");
38
36
  }
39
37
 
38
+ /**
39
+ * Create a resolver function for calculating the value of a css variable based
40
+ * on a given element's computed style. If the variable resolves to '', we check
41
+ * DEFAULT_PRELOAD_DATA_VARIABLES for a default value, and if one does not exist,
42
+ * return ''.
43
+ * @param el Element to resolve css variables against
44
+ */
45
+ export function createCssVariableResolver(el) {
46
+ var computedStyle = getComputedStyle(el);
47
+
48
+ /**
49
+ * Resolve the given css variable name to a value. If the variable is not set,
50
+ * return the default preload value or '' if one does not exist.
51
+ */
52
+ return function cssVariableResolver(varName) {
53
+ var _DEFAULT_PRELOAD_DATA;
54
+ var value = computedStyle.getPropertyValue(varName);
55
+ if (value !== '') {
56
+ return value;
57
+ }
58
+ return (_DEFAULT_PRELOAD_DATA = DEFAULT_PRELOAD_DATA_VARIABLES[varName]) !== null && _DEFAULT_PRELOAD_DATA !== void 0 ? _DEFAULT_PRELOAD_DATA : '';
59
+ };
60
+ }
61
+
40
62
  /**
41
63
  * Extracts all css variable expressions from the given record and returns
42
64
  * a set of unique expressions.
@@ -45,8 +67,8 @@ export function calculatePreloadStyleContent() {
45
67
  export function extractDistinctCssVariableExpressions(record) {
46
68
  var set = new Set();
47
69
  Object.values(record).forEach(value => {
48
- getExpressionRanges(value).forEach(_ref2 => {
49
- var [start, end] = _ref2;
70
+ getExpressionRanges(value).forEach(_ref => {
71
+ var [start, end] = _ref;
50
72
  var expression = value.substring(start, end + 1);
51
73
  if (expression.includes(CSS_VAR_EXPRESSION_PREFIX)) {
52
74
  set.add(expression);
@@ -155,6 +177,16 @@ export function getExpressionRanges(value) {
155
177
  return ranges;
156
178
  }
157
179
 
180
+ /**
181
+ * Replace the `fill='...'` attribute in the given SVG content with the given
182
+ * color string.
183
+ * @param svgContent Inline SVG content to replace the fill color in
184
+ * @param fillColor The color to replace the fill color with
185
+ */
186
+ export function replaceSVGFillColor(svgContent, fillColor) {
187
+ return svgContent.replace(/fill='.*?'/, "fill='".concat(encodeURIComponent(fillColor), "'"));
188
+ }
189
+
158
190
  /**
159
191
  * Make a copy of the given object replacing any css variable expressions
160
192
  * contained in its prop values with values resolved from the given HTML element.
@@ -196,8 +228,8 @@ export function resolveCssVariablesInRecord(record) {
196
228
  };
197
229
 
198
230
  // Resolve the temporary css variables
199
- Object.entries(record).forEach(_ref3 => {
200
- var [key, value] = _ref3;
231
+ Object.entries(record).forEach(_ref2 => {
232
+ var [key, value] = _ref2;
201
233
  result[key] = resolveCssVariablesInString(resolver, value);
202
234
  });
203
235
 
@@ -217,8 +249,8 @@ export function resolveCssVariablesInRecord(record) {
217
249
  export function resolveCssVariablesInString(resolver, value) {
218
250
  var result = [];
219
251
  var i = 0;
220
- getExpressionRanges(value).forEach(_ref4 => {
221
- var [start, end] = _ref4;
252
+ getExpressionRanges(value).forEach(_ref3 => {
253
+ var [start, end] = _ref3;
222
254
  if (i < start) {
223
255
  result.push(value.substring(i, start));
224
256
  i += start - i;
@@ -261,4 +293,37 @@ export function preloadTheme() {
261
293
  style.innerHTML = preloadStyleContent;
262
294
  document.head.appendChild(style);
263
295
  }
296
+
297
+ /**
298
+ * Inline SVGs cannot depend on dynamic CSS variables, so we have to statically
299
+ * update them if we want to change their color.
300
+ *
301
+ * This function:
302
+ * 1. Clears any previous overrides
303
+ * 2. Resolves CSS variables containing inline SVG urls
304
+ * 3. Resolves mapped color variables and replaces the `fill='...'` attribute with the result
305
+ * 4. Sets the original CSS variable to the new replaced value
306
+ *
307
+ * Note that it is preferable to use inline SVGs as background-mask values and
308
+ * just change the background color instead of relying on this util, but this
309
+ * is not always possible. e.g. <select> elements don't support pseudo elements,
310
+ * so there's not a good way to set icons via masks.
311
+ */
312
+ export function overrideSVGFillColors() {
313
+ var resolveVar = createCssVariableResolver(document.body);
314
+ Object.entries(SVG_ICON_MANUAL_COLOR_MAP).forEach(_ref4 => {
315
+ var [key, value] = _ref4;
316
+ // Clear any previous override so that our variables get resolved against the
317
+ // actual svg content provided by the active themes and not from a previous
318
+ // override
319
+ document.body.style.removeProperty(key);
320
+ var svgContent = resolveVar(key);
321
+ var fillColor = resolveVar(value);
322
+ var newSVGContent = replaceSVGFillColor(svgContent, fillColor);
323
+
324
+ // This will take precedence over any values for the variable provided by
325
+ // the active themes
326
+ document.body.style.setProperty(key, newSVGContent);
327
+ });
328
+ }
264
329
  //# sourceMappingURL=ThemeUtils.js.map