@deephaven/components 1.22.1-alpha-pivot-builder.0 → 1.22.2-alpha-pivot-builder.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 (241) hide show
  1. package/dist/AutoCompleteInput.js +41 -79
  2. package/dist/AutoCompleteInput.js.map +1 -1
  3. package/dist/AutoResizeTextarea.js +29 -13
  4. package/dist/AutoResizeTextarea.js.map +1 -1
  5. package/dist/BasicModal.js +17 -15
  6. package/dist/BasicModal.js.map +1 -1
  7. package/dist/BulkActionBar.js +3 -5
  8. package/dist/BulkActionBar.js.map +1 -1
  9. package/dist/Button.js +24 -25
  10. package/dist/Button.js.map +1 -1
  11. package/dist/CardFlip.js +4 -6
  12. package/dist/CardFlip.js.map +1 -1
  13. package/dist/Checkbox.js +22 -13
  14. package/dist/Checkbox.js.map +1 -1
  15. package/dist/Collapse.js +6 -9
  16. package/dist/Collapse.js.map +1 -1
  17. package/dist/CopyButton.js +14 -6
  18. package/dist/CopyButton.js.map +1 -1
  19. package/dist/CustomTimeSelect.js +49 -88
  20. package/dist/CustomTimeSelect.js.map +1 -1
  21. package/dist/DateInput.js +25 -10
  22. package/dist/DateInput.js.map +1 -1
  23. package/dist/DateInputUtils.js +1 -3
  24. package/dist/DateInputUtils.js.map +1 -1
  25. package/dist/DateTimeInput.js +28 -12
  26. package/dist/DateTimeInput.js.map +1 -1
  27. package/dist/DebouncedSearchInput.js +10 -19
  28. package/dist/DebouncedSearchInput.js.map +1 -1
  29. package/dist/DragUtils.js +15 -6
  30. package/dist/DragUtils.js.map +1 -1
  31. package/dist/DraggableItemList.js +42 -57
  32. package/dist/DraggableItemList.js.map +1 -1
  33. package/dist/EditableItemList.js +28 -13
  34. package/dist/EditableItemList.js.map +1 -1
  35. package/dist/ErrorBoundary.js +6 -11
  36. package/dist/ErrorBoundary.js.map +1 -1
  37. package/dist/ErrorView.js +20 -8
  38. package/dist/ErrorView.js.map +1 -1
  39. package/dist/HierarchicalCheckboxMenu.js +30 -28
  40. package/dist/HierarchicalCheckboxMenu.js.map +1 -1
  41. package/dist/ItemList.js +96 -168
  42. package/dist/ItemList.js.map +1 -1
  43. package/dist/ItemListItem.js +46 -60
  44. package/dist/ItemListItem.js.map +1 -1
  45. package/dist/LoadingOverlay.js +13 -9
  46. package/dist/LoadingOverlay.js.map +1 -1
  47. package/dist/LoadingSpinner.js +3 -4
  48. package/dist/LoadingSpinner.js.map +1 -1
  49. package/dist/MaskedInput.js +44 -41
  50. package/dist/MaskedInput.js.map +1 -1
  51. package/dist/MaskedInputUtils.js +1 -3
  52. package/dist/MaskedInputUtils.js.map +1 -1
  53. package/dist/Option.js +1 -3
  54. package/dist/Option.js.map +1 -1
  55. package/dist/RadioGroup.js +17 -9
  56. package/dist/RadioGroup.js.map +1 -1
  57. package/dist/RadioItem.js +25 -14
  58. package/dist/RadioItem.js.map +1 -1
  59. package/dist/RandomAreaPlotAnimation.js +17 -13
  60. package/dist/RandomAreaPlotAnimation.js.map +1 -1
  61. package/dist/SearchInput.js +13 -14
  62. package/dist/SearchInput.js.map +1 -1
  63. package/dist/SearchableCombobox.js +3 -5
  64. package/dist/SearchableCombobox.js.map +1 -1
  65. package/dist/Select.js +5 -7
  66. package/dist/Select.js.map +1 -1
  67. package/dist/SelectValueList.js +21 -30
  68. package/dist/SelectValueList.js.map +1 -1
  69. package/dist/SocketedButton.js +18 -17
  70. package/dist/SocketedButton.js.map +1 -1
  71. package/dist/SplitButtonGroup.js +4 -6
  72. package/dist/SplitButtonGroup.js.map +1 -1
  73. package/dist/TableViewEmptyState.js +14 -6
  74. package/dist/TableViewEmptyState.js.map +1 -1
  75. package/dist/TextWithTooltip.js +3 -4
  76. package/dist/TextWithTooltip.js.map +1 -1
  77. package/dist/TimeInput.js +29 -12
  78. package/dist/TimeInput.js.map +1 -1
  79. package/dist/TimeSlider.js +46 -38
  80. package/dist/TimeSlider.js.map +1 -1
  81. package/dist/ToastNotification.js +9 -10
  82. package/dist/ToastNotification.js.map +1 -1
  83. package/dist/UISwitch.js +8 -9
  84. package/dist/UISwitch.js.map +1 -1
  85. package/dist/actions/ConfirmActionButton.js +7 -9
  86. package/dist/actions/ConfirmActionButton.js.map +1 -1
  87. package/dist/actions/IconActionButton.js +3 -5
  88. package/dist/actions/IconActionButton.js.map +1 -1
  89. package/dist/context-actions/ContextActionUtils.js +1 -3
  90. package/dist/context-actions/ContextActionUtils.js.map +1 -1
  91. package/dist/context-actions/ContextActions.js +8 -18
  92. package/dist/context-actions/ContextActions.js.map +1 -1
  93. package/dist/context-actions/ContextMenu.js +53 -89
  94. package/dist/context-actions/ContextMenu.js.map +1 -1
  95. package/dist/context-actions/ContextMenuItem.js +11 -11
  96. package/dist/context-actions/ContextMenuItem.js.map +1 -1
  97. package/dist/context-actions/ContextMenuRoot.js +6 -11
  98. package/dist/context-actions/ContextMenuRoot.js.map +1 -1
  99. package/dist/context-actions/GlobalContextAction.js +2 -6
  100. package/dist/context-actions/GlobalContextAction.js.map +1 -1
  101. package/dist/context-actions/GlobalContextActions.js +4 -7
  102. package/dist/context-actions/GlobalContextActions.js.map +1 -1
  103. package/dist/dialogs/ActionButtonDialogTrigger.js +7 -9
  104. package/dist/dialogs/ActionButtonDialogTrigger.js.map +1 -1
  105. package/dist/dialogs/ConfirmationDialog.js +8 -11
  106. package/dist/dialogs/ConfirmationDialog.js.map +1 -1
  107. package/dist/menu-actions/DropdownMenu.js +12 -22
  108. package/dist/menu-actions/DropdownMenu.js.map +1 -1
  109. package/dist/menu-actions/Menu.js +19 -45
  110. package/dist/menu-actions/Menu.js.map +1 -1
  111. package/dist/modal/DebouncedModal.js +8 -9
  112. package/dist/modal/DebouncedModal.js.map +1 -1
  113. package/dist/modal/InfoModal.js +6 -7
  114. package/dist/modal/InfoModal.js.map +1 -1
  115. package/dist/modal/Modal.js +27 -15
  116. package/dist/modal/Modal.js.map +1 -1
  117. package/dist/modal/ModalBody.js +4 -6
  118. package/dist/modal/ModalBody.js.map +1 -1
  119. package/dist/modal/ModalFooter.js +3 -5
  120. package/dist/modal/ModalFooter.js.map +1 -1
  121. package/dist/modal/ModalHeader.js +7 -8
  122. package/dist/modal/ModalHeader.js.map +1 -1
  123. package/dist/navigation/DashboardList.js +17 -6
  124. package/dist/navigation/DashboardList.js.map +1 -1
  125. package/dist/navigation/Menu.js +4 -5
  126. package/dist/navigation/Menu.js.map +1 -1
  127. package/dist/navigation/MenuItem.js +7 -10
  128. package/dist/navigation/MenuItem.js.map +1 -1
  129. package/dist/navigation/NavTab.js +14 -17
  130. package/dist/navigation/NavTab.js.map +1 -1
  131. package/dist/navigation/NavTabList.js +39 -33
  132. package/dist/navigation/NavTabList.js.map +1 -1
  133. package/dist/navigation/Page.js +5 -7
  134. package/dist/navigation/Page.js.map +1 -1
  135. package/dist/navigation/Stack.js +20 -7
  136. package/dist/navigation/Stack.js.map +1 -1
  137. package/dist/popper/Popper.js +30 -57
  138. package/dist/popper/Popper.js.map +1 -1
  139. package/dist/popper/Tooltip.js +24 -54
  140. package/dist/popper/Tooltip.js.map +1 -1
  141. package/dist/shortcuts/Shortcut.js +10 -15
  142. package/dist/shortcuts/Shortcut.js.map +1 -1
  143. package/dist/shortcuts/ShortcutRegistry.js +1 -3
  144. package/dist/shortcuts/ShortcutRegistry.js.map +1 -1
  145. package/dist/spectrum/ActionGroup.js +7 -9
  146. package/dist/spectrum/ActionGroup.js.map +1 -1
  147. package/dist/spectrum/ActionMenu.js +3 -5
  148. package/dist/spectrum/ActionMenu.js.map +1 -1
  149. package/dist/spectrum/CheckboxGroup.js +1 -3
  150. package/dist/spectrum/CheckboxGroup.js.map +1 -1
  151. package/dist/spectrum/Heading.js +2 -4
  152. package/dist/spectrum/Heading.js.map +1 -1
  153. package/dist/spectrum/ItemContent.js +16 -10
  154. package/dist/spectrum/ItemContent.js.map +1 -1
  155. package/dist/spectrum/ItemTooltip.js +2 -4
  156. package/dist/spectrum/ItemTooltip.js.map +1 -1
  157. package/dist/spectrum/TabPanels.js +3 -4
  158. package/dist/spectrum/TabPanels.js.map +1 -1
  159. package/dist/spectrum/Text.js +2 -4
  160. package/dist/spectrum/Text.js.map +1 -1
  161. package/dist/spectrum/View.js +11 -14
  162. package/dist/spectrum/View.js.map +1 -1
  163. package/dist/spectrum/comboBox/ComboBox.js +5 -9
  164. package/dist/spectrum/comboBox/ComboBox.js.map +1 -1
  165. package/dist/spectrum/comboBox/ComboBoxNormalized.js +3 -7
  166. package/dist/spectrum/comboBox/ComboBoxNormalized.js.map +1 -1
  167. package/dist/spectrum/listView/ListView.js +11 -11
  168. package/dist/spectrum/listView/ListView.js.map +1 -1
  169. package/dist/spectrum/listView/ListViewNormalized.js +22 -24
  170. package/dist/spectrum/listView/ListViewNormalized.js.map +1 -1
  171. package/dist/spectrum/listView/ListViewWrapper.js +11 -15
  172. package/dist/spectrum/listView/ListViewWrapper.js.map +1 -1
  173. package/dist/spectrum/multiSelect/MultiSelect.js +113 -100
  174. package/dist/spectrum/multiSelect/MultiSelect.js.map +1 -1
  175. package/dist/spectrum/multiSelect/MultiSelectListBox.js +9 -11
  176. package/dist/spectrum/multiSelect/MultiSelectListBox.js.map +1 -1
  177. package/dist/spectrum/multiSelect/MultiSelectNormalized.js +3 -7
  178. package/dist/spectrum/multiSelect/MultiSelectNormalized.js.map +1 -1
  179. package/dist/spectrum/multiSelect/MultiSelectTag.js +5 -7
  180. package/dist/spectrum/multiSelect/MultiSelectTag.js.map +1 -1
  181. package/dist/spectrum/multiSelect/useMultiSelectFilter.js +20 -14
  182. package/dist/spectrum/multiSelect/useMultiSelectFilter.js.map +1 -1
  183. package/dist/spectrum/multiSelect/useMultiSelectKeyboard.js +27 -20
  184. package/dist/spectrum/multiSelect/useMultiSelectKeyboard.js.map +1 -1
  185. package/dist/spectrum/multiSelect/useMultiSelectLoadingSpinner.js +14 -7
  186. package/dist/spectrum/multiSelect/useMultiSelectLoadingSpinner.js.map +1 -1
  187. package/dist/spectrum/multiSelect/useMultiSelectNormalizedProps.js +20 -22
  188. package/dist/spectrum/multiSelect/useMultiSelectNormalizedProps.js.map +1 -1
  189. package/dist/spectrum/multiSelect/useMultiSelectScrollListener.js +13 -6
  190. package/dist/spectrum/multiSelect/useMultiSelectScrollListener.js.map +1 -1
  191. package/dist/spectrum/multiSelect/useMultiSelectState.js +16 -9
  192. package/dist/spectrum/multiSelect/useMultiSelectState.js.map +1 -1
  193. package/dist/spectrum/picker/Picker.js +5 -9
  194. package/dist/spectrum/picker/Picker.js.map +1 -1
  195. package/dist/spectrum/picker/PickerNormalized.js +2 -6
  196. package/dist/spectrum/picker/PickerNormalized.js.map +1 -1
  197. package/dist/spectrum/picker/usePickerItemScale.js +2 -3
  198. package/dist/spectrum/picker/usePickerItemScale.js.map +1 -1
  199. package/dist/spectrum/picker/usePickerNormalizedProps.js +31 -33
  200. package/dist/spectrum/picker/usePickerNormalizedProps.js.map +1 -1
  201. package/dist/spectrum/picker/usePickerProps.js +26 -29
  202. package/dist/spectrum/picker/usePickerProps.js.map +1 -1
  203. package/dist/spectrum/picker/usePickerScrollOnOpen.js +6 -9
  204. package/dist/spectrum/picker/usePickerScrollOnOpen.js.map +1 -1
  205. package/dist/spectrum/utils/itemUtils.js +4 -6
  206. package/dist/spectrum/utils/itemUtils.js.map +1 -1
  207. package/dist/spectrum/utils/propsUtils.js +35 -37
  208. package/dist/spectrum/utils/propsUtils.js.map +1 -1
  209. package/dist/spectrum/utils/themeUtils.js +5 -7
  210. package/dist/spectrum/utils/themeUtils.js.map +1 -1
  211. package/dist/spectrum/utils/useOnChangeTrackUncontrolled.js +13 -6
  212. package/dist/spectrum/utils/useOnChangeTrackUncontrolled.js.map +1 -1
  213. package/dist/spectrum/utils/useRenderNormalizedItem.js +5 -7
  214. package/dist/spectrum/utils/useRenderNormalizedItem.js.map +1 -1
  215. package/dist/spectrum/utils/useStaticItemInitialScrollPosition.js +4 -6
  216. package/dist/spectrum/utils/useStaticItemInitialScrollPosition.js.map +1 -1
  217. package/dist/spectrum/utils/useStringifiedMultiSelection.js +5 -7
  218. package/dist/spectrum/utils/useStringifiedMultiSelection.js.map +1 -1
  219. package/dist/spectrum/utils/useStringifiedSelection.js +5 -7
  220. package/dist/spectrum/utils/useStringifiedSelection.js.map +1 -1
  221. package/dist/theme/FontBootstrap.js +13 -5
  222. package/dist/theme/FontBootstrap.js.map +1 -1
  223. package/dist/theme/FontsLoaded.js +1 -3
  224. package/dist/theme/FontsLoaded.js.map +1 -1
  225. package/dist/theme/Logo.js +2 -4
  226. package/dist/theme/Logo.js.map +1 -1
  227. package/dist/theme/SpectrumThemeProvider.js +17 -9
  228. package/dist/theme/SpectrumThemeProvider.js.map +1 -1
  229. package/dist/theme/ThemePicker.js +4 -5
  230. package/dist/theme/ThemePicker.js.map +1 -1
  231. package/dist/theme/ThemeProvider.js +20 -8
  232. package/dist/theme/ThemeProvider.js.map +1 -1
  233. package/dist/theme/ThemeUtils.js +35 -19
  234. package/dist/theme/ThemeUtils.js.map +1 -1
  235. package/dist/theme/useExternalTheme.js +16 -7
  236. package/dist/theme/useExternalTheme.js.map +1 -1
  237. package/dist/transitions/FadeTransition.js +5 -6
  238. package/dist/transitions/FadeTransition.js.map +1 -1
  239. package/dist/transitions/SlideTransition.js +6 -7
  240. package/dist/transitions/SlideTransition.js.map +1 -1
  241. package/package.json +8 -8
@@ -2,10 +2,8 @@ import classNames from 'classnames';
2
2
  import "./Logo.css";
3
3
  import { jsx as _jsx } from "react/jsx-runtime";
4
4
  export function Logo(_ref) {
5
- var {
6
- className,
7
- style
8
- } = _ref;
5
+ var className = _ref.className,
6
+ style = _ref.style;
9
7
  return /*#__PURE__*/_jsx("div", {
10
8
  className: classNames('dh-logo', className),
11
9
  style: style
@@ -1 +1 @@
1
- {"version":3,"file":"Logo.js","names":["classNames","jsx","_jsx","Logo","_ref","className","style"],"sources":["../../src/theme/Logo.tsx"],"sourcesContent":["import classNames from 'classnames';\nimport './Logo.css';\n\ninterface LogoProps {\n className?: string;\n style?: React.CSSProperties;\n}\n\nexport function Logo({ className, style }: LogoProps): JSX.Element {\n return <div className={classNames('dh-logo', className)} style={style} />;\n}\n\nexport default Logo;\n"],"mappings":"AAAA,OAAOA,UAAU,MAAM,YAAY;AAAC;AAAA,SAAAC,GAAA,IAAAC,IAAA;AAQpC,OAAO,SAASC,IAAIA,CAAAC,IAAA,EAA+C;EAAA,IAA9C;IAAEC,SAAS;IAAEC;EAAiB,CAAC,GAAAF,IAAA;EAClD,oBAAOF,IAAA;IAAKG,SAAS,EAAEL,UAAU,CAAC,SAAS,EAAEK,SAAS,CAAE;IAACC,KAAK,EAAEA;EAAM,CAAE,CAAC;AAC3E;AAEA,eAAeH,IAAI","ignoreList":[]}
1
+ {"version":3,"file":"Logo.js","names":["classNames","jsx","_jsx","Logo","_ref","className","style"],"sources":["../../src/theme/Logo.tsx"],"sourcesContent":["import classNames from 'classnames';\nimport './Logo.css';\n\ninterface LogoProps {\n className?: string;\n style?: React.CSSProperties;\n}\n\nexport function Logo({ className, style }: LogoProps): JSX.Element {\n return <div className={classNames('dh-logo', className)} style={style} />;\n}\n\nexport default Logo;\n"],"mappings":"AAAA,OAAOA,UAAU,MAAM,YAAY;AAAC;AAAA,SAAAC,GAAA,IAAAC,IAAA;AAQpC,OAAO,SAASC,IAAIA,CAAAC,IAAA,EAA+C;EAAA,IAA5CC,SAAS,GAAAD,IAAA,CAATC,SAAS;IAAEC,KAAK,GAAAF,IAAA,CAALE,KAAK;EACrC,oBAAOJ,IAAA;IAAKG,SAAS,EAAEL,UAAU,CAAC,SAAS,EAAEK,SAAS,CAAE;IAACC,KAAK,EAAEA;EAAM,CAAE,CAAC;AAC3E;AAEA,eAAeH,IAAI","ignoreList":[]}
@@ -1,3 +1,9 @@
1
+ function _slicedToArray(r, e) { return _arrayWithHoles(r) || _iterableToArrayLimit(r, e) || _unsupportedIterableToArray(r, e) || _nonIterableRest(); }
2
+ function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
3
+ function _unsupportedIterableToArray(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }
4
+ function _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }
5
+ function _iterableToArrayLimit(r, l) { var t = null == r ? null : "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (null != t) { var e, n, i, u, a = [], f = !0, o = !1; try { if (i = (t = t.call(r)).next, 0 === l) { if (Object(t) !== t) return; f = !1; } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0); } catch (r) { o = !0, n = r; } finally { try { if (!f && null != t.return && (u = t.return(), Object(u) !== u)) return; } finally { if (o) throw n; } } return a; } }
6
+ function _arrayWithHoles(r) { if (Array.isArray(r)) return r; }
1
7
  import { useState } from 'react';
2
8
  import { Provider } from '@adobe/react-spectrum';
3
9
  import { nanoid } from 'nanoid';
@@ -11,18 +17,20 @@ import { jsx as _jsx } from "react/jsx-runtime";
11
17
  * inside of portals.
12
18
  */
13
19
  export function SpectrumThemeProvider(_ref) {
14
- var {
15
- children,
16
- isPortal = false,
17
- theme = themeDHDefault,
18
- colorScheme,
19
- zIndex,
20
- position
21
- } = _ref;
20
+ var children = _ref.children,
21
+ _ref$isPortal = _ref.isPortal,
22
+ isPortal = _ref$isPortal === void 0 ? false : _ref$isPortal,
23
+ _ref$theme = _ref.theme,
24
+ theme = _ref$theme === void 0 ? themeDHDefault : _ref$theme,
25
+ colorScheme = _ref.colorScheme,
26
+ zIndex = _ref.zIndex,
27
+ position = _ref.position;
22
28
  // a unique ID is used per provider to force it to render the theme wrapper element inside portals
23
29
  // based on https://github.com/adobe/react-spectrum/issues/1697#issuecomment-999827266
24
30
  // won't be needed if https://github.com/adobe/react-spectrum/pull/2669 is merged
25
- var [id] = useState(isPortal ? nanoid() : null);
31
+ var _useState = useState(isPortal ? nanoid() : null),
32
+ _useState2 = _slicedToArray(_useState, 1),
33
+ id = _useState2[0];
26
34
  return /*#__PURE__*/_jsx(Provider, {
27
35
  UNSAFE_className: "spectrum-theme-provider",
28
36
  theme: theme,
@@ -1 +1 @@
1
- {"version":3,"file":"SpectrumThemeProvider.js","names":["useState","Provider","nanoid","themeDHDefault","jsx","_jsx","SpectrumThemeProvider","_ref","children","isPortal","theme","colorScheme","zIndex","position","id","UNSAFE_className"],"sources":["../../src/theme/SpectrumThemeProvider.tsx"],"sourcesContent":["import { type ReactNode, useState } from 'react';\nimport { Provider } from '@adobe/react-spectrum';\nimport type { Theme } from '@react-types/provider';\nimport { nanoid } from 'nanoid';\nimport { themeDHDefault } from '../spectrum/utils';\n\nexport interface SpectrumThemeProviderProps {\n children: ReactNode;\n isPortal?: boolean;\n theme?: Theme;\n colorScheme?: 'light' | 'dark';\n zIndex?: number;\n position?: 'static' | 'absolute' | 'fixed' | 'relative' | 'sticky';\n}\n\n/**\n * Wrapper around React Spectrum's theme Provider that provides DH mappings of\n * Spectrum's theme variables to DH's theme variables. Also exposes an optional\n * `isPortal` prop that if provided, adds a unique `data-unique-id` attribute to\n * the Provider. This is needed to force the Provider to render the theme wrapper\n * inside of portals.\n */\nexport function SpectrumThemeProvider({\n children,\n isPortal = false,\n theme = themeDHDefault,\n colorScheme,\n zIndex,\n position,\n}: SpectrumThemeProviderProps): JSX.Element {\n // a unique ID is used per provider to force it to render the theme wrapper element inside portals\n // based on https://github.com/adobe/react-spectrum/issues/1697#issuecomment-999827266\n // won't be needed if https://github.com/adobe/react-spectrum/pull/2669 is merged\n const [id] = useState(isPortal ? nanoid() : null);\n\n return (\n <Provider\n UNSAFE_className=\"spectrum-theme-provider\"\n theme={theme}\n colorScheme={colorScheme}\n zIndex={zIndex}\n position={position}\n data-unique-id={id}\n >\n {children}\n </Provider>\n );\n}\n"],"mappings":"AAAA,SAAyBA,QAAQ,QAAQ,OAAO;AAChD,SAASC,QAAQ,QAAQ,uBAAuB;AAEhD,SAASC,MAAM,QAAQ,QAAQ;AAAC,SACvBC,cAAc;AAAA,SAAAC,GAAA,IAAAC,IAAA;AAWvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,SAASC,qBAAqBA,CAAAC,IAAA,EAOO;EAAA,IAPN;IACpCC,QAAQ;IACRC,QAAQ,GAAG,KAAK;IAChBC,KAAK,GAAGP,cAAc;IACtBQ,WAAW;IACXC,MAAM;IACNC;EAC0B,CAAC,GAAAN,IAAA;EAC3B;EACA;EACA;EACA,IAAM,CAACO,EAAE,CAAC,GAAGd,QAAQ,CAACS,QAAQ,GAAGP,MAAM,CAAC,CAAC,GAAG,IAAI,CAAC;EAEjD,oBACEG,IAAA,CAACJ,QAAQ;IACPc,gBAAgB,EAAC,yBAAyB;IAC1CL,KAAK,EAAEA,KAAM;IACbC,WAAW,EAAEA,WAAY;IACzBC,MAAM,EAAEA,MAAO;IACfC,QAAQ,EAAEA,QAAS;IACnB,kBAAgBC,EAAG;IAAAN,QAAA,EAElBA;EAAQ,CACD,CAAC;AAEf","ignoreList":[]}
1
+ {"version":3,"file":"SpectrumThemeProvider.js","names":["useState","Provider","nanoid","themeDHDefault","jsx","_jsx","SpectrumThemeProvider","_ref","children","_ref$isPortal","isPortal","_ref$theme","theme","colorScheme","zIndex","position","_useState","_useState2","_slicedToArray","id","UNSAFE_className"],"sources":["../../src/theme/SpectrumThemeProvider.tsx"],"sourcesContent":["import { type ReactNode, useState } from 'react';\nimport { Provider } from '@adobe/react-spectrum';\nimport type { Theme } from '@react-types/provider';\nimport { nanoid } from 'nanoid';\nimport { themeDHDefault } from '../spectrum/utils';\n\nexport interface SpectrumThemeProviderProps {\n children: ReactNode;\n isPortal?: boolean;\n theme?: Theme;\n colorScheme?: 'light' | 'dark';\n zIndex?: number;\n position?: 'static' | 'absolute' | 'fixed' | 'relative' | 'sticky';\n}\n\n/**\n * Wrapper around React Spectrum's theme Provider that provides DH mappings of\n * Spectrum's theme variables to DH's theme variables. Also exposes an optional\n * `isPortal` prop that if provided, adds a unique `data-unique-id` attribute to\n * the Provider. This is needed to force the Provider to render the theme wrapper\n * inside of portals.\n */\nexport function SpectrumThemeProvider({\n children,\n isPortal = false,\n theme = themeDHDefault,\n colorScheme,\n zIndex,\n position,\n}: SpectrumThemeProviderProps): JSX.Element {\n // a unique ID is used per provider to force it to render the theme wrapper element inside portals\n // based on https://github.com/adobe/react-spectrum/issues/1697#issuecomment-999827266\n // won't be needed if https://github.com/adobe/react-spectrum/pull/2669 is merged\n const [id] = useState(isPortal ? nanoid() : null);\n\n return (\n <Provider\n UNSAFE_className=\"spectrum-theme-provider\"\n theme={theme}\n colorScheme={colorScheme}\n zIndex={zIndex}\n position={position}\n data-unique-id={id}\n >\n {children}\n </Provider>\n );\n}\n"],"mappings":";;;;;;AAAA,SAAyBA,QAAQ,QAAQ,OAAO;AAChD,SAASC,QAAQ,QAAQ,uBAAuB;AAEhD,SAASC,MAAM,QAAQ,QAAQ;AAAC,SACvBC,cAAc;AAAA,SAAAC,GAAA,IAAAC,IAAA;AAWvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,SAASC,qBAAqBA,CAAAC,IAAA,EAOO;EAAA,IAN1CC,QAAQ,GAAAD,IAAA,CAARC,QAAQ;IAAAC,aAAA,GAAAF,IAAA,CACRG,QAAQ;IAARA,QAAQ,GAAAD,aAAA,cAAG,KAAK,GAAAA,aAAA;IAAAE,UAAA,GAAAJ,IAAA,CAChBK,KAAK;IAALA,KAAK,GAAAD,UAAA,cAAGR,cAAc,GAAAQ,UAAA;IACtBE,WAAW,GAAAN,IAAA,CAAXM,WAAW;IACXC,MAAM,GAAAP,IAAA,CAANO,MAAM;IACNC,QAAQ,GAAAR,IAAA,CAARQ,QAAQ;EAER;EACA;EACA;EACA,IAAAC,SAAA,GAAahB,QAAQ,CAACU,QAAQ,GAAGR,MAAM,CAAC,CAAC,GAAG,IAAI,CAAC;IAAAe,UAAA,GAAAC,cAAA,CAAAF,SAAA;IAA1CG,EAAE,GAAAF,UAAA;EAET,oBACEZ,IAAA,CAACJ,QAAQ;IACPmB,gBAAgB,EAAC,yBAAyB;IAC1CR,KAAK,EAAEA,KAAM;IACbC,WAAW,EAAEA,WAAY;IACzBC,MAAM,EAAEA,MAAO;IACfC,QAAQ,EAAEA,QAAS;IACnB,kBAAgBI,EAAG;IAAAX,QAAA,EAElBA;EAAQ,CACD,CAAC;AAEf","ignoreList":[]}
@@ -3,11 +3,10 @@ import { Item, Picker } from '@adobe/react-spectrum';
3
3
  import useTheme from "./useTheme.js";
4
4
  import { jsx as _jsx } from "react/jsx-runtime";
5
5
  export function ThemePicker() {
6
- var {
7
- selectedThemeKey,
8
- setSelectedThemeKey,
9
- themes
10
- } = useTheme();
6
+ var _useTheme = useTheme(),
7
+ selectedThemeKey = _useTheme.selectedThemeKey,
8
+ setSelectedThemeKey = _useTheme.setSelectedThemeKey,
9
+ themes = _useTheme.themes;
11
10
  var onSelectionChange = useCallback(key => {
12
11
  if (key != null) {
13
12
  setSelectedThemeKey("".concat(key));
@@ -1 +1 @@
1
- {"version":3,"file":"ThemePicker.js","names":["useCallback","Item","Picker","useTheme","jsx","_jsx","ThemePicker","selectedThemeKey","setSelectedThemeKey","themes","onSelectionChange","key","concat","label","items","selectedKey","children","item","name","themeKey"],"sources":["../../src/theme/ThemePicker.tsx"],"sourcesContent":["import { useCallback } from 'react';\nimport { Item, Picker } from '@adobe/react-spectrum';\nimport type { Key } from '@react-types/shared';\nimport useTheme from './useTheme';\n\nexport function ThemePicker(): JSX.Element | null {\n const { selectedThemeKey, setSelectedThemeKey, themes } = useTheme();\n\n const onSelectionChange = useCallback(\n (key: Key | null) => {\n if (key != null) {\n setSelectedThemeKey(`${key}`);\n }\n },\n [setSelectedThemeKey]\n );\n\n return (\n <Picker\n label=\"Pick a color scheme\"\n items={themes}\n selectedKey={selectedThemeKey}\n onSelectionChange={onSelectionChange}\n >\n {item => <Item key={item.themeKey}>{item.name}</Item>}\n </Picker>\n );\n}\n\nexport default ThemePicker;\n"],"mappings":"AAAA,SAASA,WAAW,QAAQ,OAAO;AACnC,SAASC,IAAI,EAAEC,MAAM,QAAQ,uBAAuB;AAAC,OAE9CC,QAAQ;AAAA,SAAAC,GAAA,IAAAC,IAAA;AAEf,OAAO,SAASC,WAAWA,CAAA,EAAuB;EAChD,IAAM;IAAEC,gBAAgB;IAAEC,mBAAmB;IAAEC;EAAO,CAAC,GAAGN,QAAQ,CAAC,CAAC;EAEpE,IAAMO,iBAAiB,GAAGV,WAAW,CAClCW,GAAe,IAAK;IACnB,IAAIA,GAAG,IAAI,IAAI,EAAE;MACfH,mBAAmB,IAAAI,MAAA,CAAID,GAAG,CAAE,CAAC;IAC/B;EACF,CAAC,EACD,CAACH,mBAAmB,CACtB,CAAC;EAED,oBACEH,IAAA,CAACH,MAAM;IACLW,KAAK,EAAC,qBAAqB;IAC3BC,KAAK,EAAEL,MAAO;IACdM,WAAW,EAAER,gBAAiB;IAC9BG,iBAAiB,EAAEA,iBAAkB;IAAAM,QAAA,EAEpCC,IAAI,iBAAIZ,IAAA,CAACJ,IAAI;MAAAe,QAAA,EAAsBC,IAAI,CAACC;IAAI,GAAzBD,IAAI,CAACE,QAA2B;EAAC,CAC/C,CAAC;AAEb;AAEA,eAAeb,WAAW","ignoreList":[]}
1
+ {"version":3,"file":"ThemePicker.js","names":["useCallback","Item","Picker","useTheme","jsx","_jsx","ThemePicker","_useTheme","selectedThemeKey","setSelectedThemeKey","themes","onSelectionChange","key","concat","label","items","selectedKey","children","item","name","themeKey"],"sources":["../../src/theme/ThemePicker.tsx"],"sourcesContent":["import { useCallback } from 'react';\nimport { Item, Picker } from '@adobe/react-spectrum';\nimport type { Key } from '@react-types/shared';\nimport useTheme from './useTheme';\n\nexport function ThemePicker(): JSX.Element | null {\n const { selectedThemeKey, setSelectedThemeKey, themes } = useTheme();\n\n const onSelectionChange = useCallback(\n (key: Key | null) => {\n if (key != null) {\n setSelectedThemeKey(`${key}`);\n }\n },\n [setSelectedThemeKey]\n );\n\n return (\n <Picker\n label=\"Pick a color scheme\"\n items={themes}\n selectedKey={selectedThemeKey}\n onSelectionChange={onSelectionChange}\n >\n {item => <Item key={item.themeKey}>{item.name}</Item>}\n </Picker>\n );\n}\n\nexport default ThemePicker;\n"],"mappings":"AAAA,SAASA,WAAW,QAAQ,OAAO;AACnC,SAASC,IAAI,EAAEC,MAAM,QAAQ,uBAAuB;AAAC,OAE9CC,QAAQ;AAAA,SAAAC,GAAA,IAAAC,IAAA;AAEf,OAAO,SAASC,WAAWA,CAAA,EAAuB;EAChD,IAAAC,SAAA,GAA0DJ,QAAQ,CAAC,CAAC;IAA5DK,gBAAgB,GAAAD,SAAA,CAAhBC,gBAAgB;IAAEC,mBAAmB,GAAAF,SAAA,CAAnBE,mBAAmB;IAAEC,MAAM,GAAAH,SAAA,CAANG,MAAM;EAErD,IAAMC,iBAAiB,GAAGX,WAAW,CAClCY,GAAe,IAAK;IACnB,IAAIA,GAAG,IAAI,IAAI,EAAE;MACfH,mBAAmB,IAAAI,MAAA,CAAID,GAAG,CAAE,CAAC;IAC/B;EACF,CAAC,EACD,CAACH,mBAAmB,CACtB,CAAC;EAED,oBACEJ,IAAA,CAACH,MAAM;IACLY,KAAK,EAAC,qBAAqB;IAC3BC,KAAK,EAAEL,MAAO;IACdM,WAAW,EAAER,gBAAiB;IAC9BG,iBAAiB,EAAEA,iBAAkB;IAAAM,QAAA,EAEpCC,IAAI,iBAAIb,IAAA,CAACJ,IAAI;MAAAgB,QAAA,EAAsBC,IAAI,CAACC;IAAI,GAAzBD,IAAI,CAACE,QAA2B;EAAC,CAC/C,CAAC;AAEb;AAEA,eAAed,WAAW","ignoreList":[]}
@@ -1,3 +1,9 @@
1
+ function _slicedToArray(r, e) { return _arrayWithHoles(r) || _iterableToArrayLimit(r, e) || _unsupportedIterableToArray(r, e) || _nonIterableRest(); }
2
+ function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
3
+ function _unsupportedIterableToArray(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }
4
+ function _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }
5
+ function _iterableToArrayLimit(r, l) { var t = null == r ? null : "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (null != t) { var e, n, i, u, a = [], f = !0, o = !1; try { if (i = (t = t.call(r)).next, 0 === l) { if (Object(t) !== t) return; f = !1; } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0); } catch (r) { o = !0, n = r; } finally { try { if (!f && null != t.return && (u = t.return(), Object(u) !== u)) return; } finally { if (o) throw n; } } return a; } }
6
+ function _arrayWithHoles(r) { if (Array.isArray(r)) return r; }
1
7
  import { createContext, useEffect, useMemo, useState } from 'react';
2
8
  import Log from '@deephaven/log';
3
9
  import { DEFAULT_PRELOAD_DATA_VARIABLES } from "./ThemeModel.js";
@@ -9,15 +15,21 @@ var log = Log.module('ThemeProvider');
9
15
  export var ThemeContext = /*#__PURE__*/createContext(null);
10
16
  ThemeContext.displayName = 'ThemeContext';
11
17
  export function ThemeProvider(_ref) {
12
- var {
13
- themes: customThemes,
14
- waitForActivation = false,
15
- defaultPreloadValues = DEFAULT_PRELOAD_DATA_VARIABLES,
16
- children
17
- } = _ref;
18
+ var customThemes = _ref.themes,
19
+ _ref$waitForActivatio = _ref.waitForActivation,
20
+ waitForActivation = _ref$waitForActivatio === void 0 ? false : _ref$waitForActivatio,
21
+ _ref$defaultPreloadVa = _ref.defaultPreloadValues,
22
+ defaultPreloadValues = _ref$defaultPreloadVa === void 0 ? DEFAULT_PRELOAD_DATA_VARIABLES : _ref$defaultPreloadVa,
23
+ children = _ref.children;
18
24
  var baseThemes = useMemo(() => getDefaultBaseThemes(), []);
19
- var [value, setValue] = useState(null);
20
- var [selectedThemeKey, setSelectedThemeKey] = useState(getDefaultSelectedThemeKey);
25
+ var _useState = useState(null),
26
+ _useState2 = _slicedToArray(_useState, 2),
27
+ value = _useState2[0],
28
+ setValue = _useState2[1];
29
+ var _useState3 = useState(getDefaultSelectedThemeKey),
30
+ _useState4 = _slicedToArray(_useState3, 2),
31
+ selectedThemeKey = _useState4[0],
32
+ setSelectedThemeKey = _useState4[1];
21
33
 
22
34
  // Calculate active themes once a non-null themes array is provided.
23
35
  var activeThemes = useMemo(() => customThemes == null ? null : getActiveThemes(selectedThemeKey, {
@@ -1 +1 @@
1
- {"version":3,"file":"ThemeProvider.js","names":["createContext","useEffect","useMemo","useState","Log","DEFAULT_PRELOAD_DATA_VARIABLES","calculatePreloadStyleContent","getActiveThemes","getDefaultBaseThemes","setThemePreloadData","overrideSVGFillColors","getDefaultSelectedThemeKey","SpectrumThemeProvider","jsx","_jsx","Fragment","_Fragment","jsxs","_jsxs","log","module","ThemeContext","displayName","ThemeProvider","_ref","themes","customThemes","waitForActivation","defaultPreloadValues","children","baseThemes","value","setValue","selectedThemeKey","setSelectedThemeKey","activeThemes","base","custom","updateThemePreloadData","preloadStyleContent","debug2","active","map","theme","themeKey","styleContent","Provider"],"sources":["../../src/theme/ThemeProvider.tsx"],"sourcesContent":["import {\n createContext,\n type ReactNode,\n useEffect,\n useMemo,\n useState,\n} from 'react';\nimport Log from '@deephaven/log';\nimport { DEFAULT_PRELOAD_DATA_VARIABLES, type ThemeData } from './ThemeModel';\nimport {\n calculatePreloadStyleContent,\n getActiveThemes,\n getDefaultBaseThemes,\n setThemePreloadData,\n overrideSVGFillColors,\n getDefaultSelectedThemeKey,\n} from './ThemeUtils';\nimport { SpectrumThemeProvider } from './SpectrumThemeProvider';\nimport './theme-svg.scss';\n\nexport interface ThemeContextValue {\n activeThemes: ThemeData[] | null;\n selectedThemeKey: string;\n themes: ThemeData[];\n setSelectedThemeKey: (themeKey: string) => void;\n}\n\nconst log = Log.module('ThemeProvider');\n\nexport const ThemeContext = createContext<ThemeContextValue | null>(null);\nThemeContext.displayName = 'ThemeContext';\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 // In DHC web, custom themes are typically loaded from plugins. Since these\n // get loaded after login, we have to be able to render the children containing\n // the `Login` component before themes are activated. This means that `children`\n // get loaded before all styles are available. In cases where themes don't require\n // children to be rendered such as external themes requested from a parent Window,\n // we can defer the rendering of children until the themes are activated which\n // is less likely to render initial content with the wrong theme. We can get\n // rid of this prop if we ever find a way to load themes without depending on\n // children. See https://deephaven.atlassian.net/browse/DH-19400\n waitForActivation?: boolean;\n defaultPreloadValues?: Record<string, string>;\n children: ReactNode;\n}\n\nexport function ThemeProvider({\n themes: customThemes,\n waitForActivation = false,\n defaultPreloadValues = DEFAULT_PRELOAD_DATA_VARIABLES,\n children,\n}: ThemeProviderProps): JSX.Element | null {\n const baseThemes = useMemo(() => getDefaultBaseThemes(), []);\n\n const [value, setValue] = useState<ThemeContextValue | null>(null);\n\n const [selectedThemeKey, setSelectedThemeKey] = useState<string>(\n getDefaultSelectedThemeKey\n );\n\n // Calculate active themes once a non-null themes array is provided.\n const activeThemes = useMemo(\n () =>\n customThemes == null\n ? null\n : getActiveThemes(selectedThemeKey, {\n base: baseThemes,\n custom: customThemes ?? [],\n }),\n [baseThemes, selectedThemeKey, customThemes]\n );\n\n const themes = useMemo(\n () => [...baseThemes, ...(customThemes ?? [])],\n [baseThemes, customThemes]\n );\n\n useEffect(\n function updateThemePreloadData() {\n // Don't update preload data until themes have been loaded and activated\n if (activeThemes == null || customThemes == null) {\n return;\n }\n\n // Override fill color for certain inline SVGs (the originals are provided\n // by theme-svg.scss)\n overrideSVGFillColors(defaultPreloadValues);\n\n const preloadStyleContent =\n calculatePreloadStyleContent(defaultPreloadValues);\n\n log.debug2('updateThemePreloadData:', {\n active: activeThemes.map(theme => theme.themeKey),\n custom: customThemes.map(theme => theme.themeKey),\n preloadStyleContent,\n selectedThemeKey,\n });\n\n setThemePreloadData({\n themeKey: selectedThemeKey,\n preloadStyleContent,\n });\n },\n [activeThemes, selectedThemeKey, customThemes, defaultPreloadValues]\n );\n\n useEffect(() => {\n setValue({\n activeThemes,\n selectedThemeKey,\n themes,\n setSelectedThemeKey,\n });\n }, [activeThemes, selectedThemeKey, themes]);\n\n if (waitForActivation && activeThemes == null) {\n return null;\n }\n\n return (\n <>\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 {value == null ? null : (\n <ThemeContext.Provider value={value}>\n <SpectrumThemeProvider>{children}</SpectrumThemeProvider>\n </ThemeContext.Provider>\n )}\n </>\n );\n}\n\nexport default ThemeProvider;\n"],"mappings":"AAAA,SACEA,aAAa,EAEbC,SAAS,EACTC,OAAO,EACPC,QAAQ,QACH,OAAO;AACd,OAAOC,GAAG,MAAM,gBAAgB;AAAC,SACxBC,8BAA8B;AAAA,SAErCC,4BAA4B,EAC5BC,eAAe,EACfC,oBAAoB,EACpBC,mBAAmB,EACnBC,qBAAqB,EACrBC,0BAA0B;AAAA,SAEnBC,qBAAqB;AAAA;AAAA,SAAAC,GAAA,IAAAC,IAAA,EAAAC,QAAA,IAAAC,SAAA,EAAAC,IAAA,IAAAC,KAAA;AAU9B,IAAMC,GAAG,GAAGf,GAAG,CAACgB,MAAM,CAAC,eAAe,CAAC;AAEvC,OAAO,IAAMC,YAAY,gBAAGrB,aAAa,CAA2B,IAAI,CAAC;AACzEqB,YAAY,CAACC,WAAW,GAAG,cAAc;AAuBzC,OAAO,SAASC,aAAaA,CAAAC,IAAA,EAKc;EAAA,IALb;IAC5BC,MAAM,EAAEC,YAAY;IACpBC,iBAAiB,GAAG,KAAK;IACzBC,oBAAoB,GAAGvB,8BAA8B;IACrDwB;EACkB,CAAC,GAAAL,IAAA;EACnB,IAAMM,UAAU,GAAG5B,OAAO,CAAC,MAAMM,oBAAoB,CAAC,CAAC,EAAE,EAAE,CAAC;EAE5D,IAAM,CAACuB,KAAK,EAAEC,QAAQ,CAAC,GAAG7B,QAAQ,CAA2B,IAAI,CAAC;EAElE,IAAM,CAAC8B,gBAAgB,EAAEC,mBAAmB,CAAC,GAAG/B,QAAQ,CACtDQ,0BACF,CAAC;;EAED;EACA,IAAMwB,YAAY,GAAGjC,OAAO,CAC1B,MACEwB,YAAY,IAAI,IAAI,GAChB,IAAI,GACJnB,eAAe,CAAC0B,gBAAgB,EAAE;IAChCG,IAAI,EAAEN,UAAU;IAChBO,MAAM,EAAEX,YAAY,aAAZA,YAAY,cAAZA,YAAY,GAAI;EAC1B,CAAC,CAAC,EACR,CAACI,UAAU,EAAEG,gBAAgB,EAAEP,YAAY,CAC7C,CAAC;EAED,IAAMD,MAAM,GAAGvB,OAAO,CACpB,MAAM,CAAC,GAAG4B,UAAU,EAAE,IAAIJ,YAAY,aAAZA,YAAY,cAAZA,YAAY,GAAI,EAAE,CAAC,CAAC,EAC9C,CAACI,UAAU,EAAEJ,YAAY,CAC3B,CAAC;EAEDzB,SAAS,CACP,SAASqC,sBAAsBA,CAAA,EAAG;IAChC;IACA,IAAIH,YAAY,IAAI,IAAI,IAAIT,YAAY,IAAI,IAAI,EAAE;MAChD;IACF;;IAEA;IACA;IACAhB,qBAAqB,CAACkB,oBAAoB,CAAC;IAE3C,IAAMW,mBAAmB,GACvBjC,4BAA4B,CAACsB,oBAAoB,CAAC;IAEpDT,GAAG,CAACqB,MAAM,CAAC,yBAAyB,EAAE;MACpCC,MAAM,EAAEN,YAAY,CAACO,GAAG,CAACC,KAAK,IAAIA,KAAK,CAACC,QAAQ,CAAC;MACjDP,MAAM,EAAEX,YAAY,CAACgB,GAAG,CAACC,KAAK,IAAIA,KAAK,CAACC,QAAQ,CAAC;MACjDL,mBAAmB;MACnBN;IACF,CAAC,CAAC;IAEFxB,mBAAmB,CAAC;MAClBmC,QAAQ,EAAEX,gBAAgB;MAC1BM;IACF,CAAC,CAAC;EACJ,CAAC,EACD,CAACJ,YAAY,EAAEF,gBAAgB,EAAEP,YAAY,EAAEE,oBAAoB,CACrE,CAAC;EAED3B,SAAS,CAAC,MAAM;IACd+B,QAAQ,CAAC;MACPG,YAAY;MACZF,gBAAgB;MAChBR,MAAM;MACNS;IACF,CAAC,CAAC;EACJ,CAAC,EAAE,CAACC,YAAY,EAAEF,gBAAgB,EAAER,MAAM,CAAC,CAAC;EAE5C,IAAIE,iBAAiB,IAAIQ,YAAY,IAAI,IAAI,EAAE;IAC7C,OAAO,IAAI;EACb;EAEA,oBACEjB,KAAA,CAAAF,SAAA;IAAAa,QAAA,GACGM,YAAY,IAAI,IAAI,GAAG,IAAI,gBAC1BrB,IAAA,CAAAE,SAAA;MAAAa,QAAA,EACGM,YAAY,CAACO,GAAG,CAACC,KAAK,iBACrB7B,IAAA;QAAO,kBAAgB6B,KAAK,CAACC,QAAS;QAAAf,QAAA,EACnCc,KAAK,CAACE;MAAY,GADuBF,KAAK,CAACC,QAE3C,CACR;IAAC,CACF,CACH,EACAb,KAAK,IAAI,IAAI,GAAG,IAAI,gBACnBjB,IAAA,CAACO,YAAY,CAACyB,QAAQ;MAACf,KAAK,EAAEA,KAAM;MAAAF,QAAA,eAClCf,IAAA,CAACF,qBAAqB;QAAAiB,QAAA,EAAEA;MAAQ,CAAwB;IAAC,CACpC,CACxB;EAAA,CACD,CAAC;AAEP;AAEA,eAAeN,aAAa","ignoreList":[]}
1
+ {"version":3,"file":"ThemeProvider.js","names":["createContext","useEffect","useMemo","useState","Log","DEFAULT_PRELOAD_DATA_VARIABLES","calculatePreloadStyleContent","getActiveThemes","getDefaultBaseThemes","setThemePreloadData","overrideSVGFillColors","getDefaultSelectedThemeKey","SpectrumThemeProvider","jsx","_jsx","Fragment","_Fragment","jsxs","_jsxs","log","module","ThemeContext","displayName","ThemeProvider","_ref","customThemes","themes","_ref$waitForActivatio","waitForActivation","_ref$defaultPreloadVa","defaultPreloadValues","children","baseThemes","_useState","_useState2","_slicedToArray","value","setValue","_useState3","_useState4","selectedThemeKey","setSelectedThemeKey","activeThemes","base","custom","updateThemePreloadData","preloadStyleContent","debug2","active","map","theme","themeKey","styleContent","Provider"],"sources":["../../src/theme/ThemeProvider.tsx"],"sourcesContent":["import {\n createContext,\n type ReactNode,\n useEffect,\n useMemo,\n useState,\n} from 'react';\nimport Log from '@deephaven/log';\nimport { DEFAULT_PRELOAD_DATA_VARIABLES, type ThemeData } from './ThemeModel';\nimport {\n calculatePreloadStyleContent,\n getActiveThemes,\n getDefaultBaseThemes,\n setThemePreloadData,\n overrideSVGFillColors,\n getDefaultSelectedThemeKey,\n} from './ThemeUtils';\nimport { SpectrumThemeProvider } from './SpectrumThemeProvider';\nimport './theme-svg.scss';\n\nexport interface ThemeContextValue {\n activeThemes: ThemeData[] | null;\n selectedThemeKey: string;\n themes: ThemeData[];\n setSelectedThemeKey: (themeKey: string) => void;\n}\n\nconst log = Log.module('ThemeProvider');\n\nexport const ThemeContext = createContext<ThemeContextValue | null>(null);\nThemeContext.displayName = 'ThemeContext';\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 // In DHC web, custom themes are typically loaded from plugins. Since these\n // get loaded after login, we have to be able to render the children containing\n // the `Login` component before themes are activated. This means that `children`\n // get loaded before all styles are available. In cases where themes don't require\n // children to be rendered such as external themes requested from a parent Window,\n // we can defer the rendering of children until the themes are activated which\n // is less likely to render initial content with the wrong theme. We can get\n // rid of this prop if we ever find a way to load themes without depending on\n // children. See https://deephaven.atlassian.net/browse/DH-19400\n waitForActivation?: boolean;\n defaultPreloadValues?: Record<string, string>;\n children: ReactNode;\n}\n\nexport function ThemeProvider({\n themes: customThemes,\n waitForActivation = false,\n defaultPreloadValues = DEFAULT_PRELOAD_DATA_VARIABLES,\n children,\n}: ThemeProviderProps): JSX.Element | null {\n const baseThemes = useMemo(() => getDefaultBaseThemes(), []);\n\n const [value, setValue] = useState<ThemeContextValue | null>(null);\n\n const [selectedThemeKey, setSelectedThemeKey] = useState<string>(\n getDefaultSelectedThemeKey\n );\n\n // Calculate active themes once a non-null themes array is provided.\n const activeThemes = useMemo(\n () =>\n customThemes == null\n ? null\n : getActiveThemes(selectedThemeKey, {\n base: baseThemes,\n custom: customThemes ?? [],\n }),\n [baseThemes, selectedThemeKey, customThemes]\n );\n\n const themes = useMemo(\n () => [...baseThemes, ...(customThemes ?? [])],\n [baseThemes, customThemes]\n );\n\n useEffect(\n function updateThemePreloadData() {\n // Don't update preload data until themes have been loaded and activated\n if (activeThemes == null || customThemes == null) {\n return;\n }\n\n // Override fill color for certain inline SVGs (the originals are provided\n // by theme-svg.scss)\n overrideSVGFillColors(defaultPreloadValues);\n\n const preloadStyleContent =\n calculatePreloadStyleContent(defaultPreloadValues);\n\n log.debug2('updateThemePreloadData:', {\n active: activeThemes.map(theme => theme.themeKey),\n custom: customThemes.map(theme => theme.themeKey),\n preloadStyleContent,\n selectedThemeKey,\n });\n\n setThemePreloadData({\n themeKey: selectedThemeKey,\n preloadStyleContent,\n });\n },\n [activeThemes, selectedThemeKey, customThemes, defaultPreloadValues]\n );\n\n useEffect(() => {\n setValue({\n activeThemes,\n selectedThemeKey,\n themes,\n setSelectedThemeKey,\n });\n }, [activeThemes, selectedThemeKey, themes]);\n\n if (waitForActivation && activeThemes == null) {\n return null;\n }\n\n return (\n <>\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 {value == null ? null : (\n <ThemeContext.Provider value={value}>\n <SpectrumThemeProvider>{children}</SpectrumThemeProvider>\n </ThemeContext.Provider>\n )}\n </>\n );\n}\n\nexport default ThemeProvider;\n"],"mappings":"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","ignoreList":[]}
@@ -1,5 +1,11 @@
1
1
  function asyncGeneratorStep(n, t, e, r, o, a, c) { try { var i = n[a](c), u = i.value; } catch (n) { return void e(n); } i.done ? t(u) : Promise.resolve(u).then(r, o); }
2
2
  function _asyncToGenerator(n) { return function () { var t = this, e = arguments; return new Promise(function (r, o) { var a = n.apply(t, e); function _next(n) { asyncGeneratorStep(a, r, o, _next, _throw, "next", n); } function _throw(n) { asyncGeneratorStep(a, r, o, _next, _throw, "throw", n); } _next(void 0); }); }; }
3
+ function _slicedToArray(r, e) { return _arrayWithHoles(r) || _iterableToArrayLimit(r, e) || _unsupportedIterableToArray(r, e) || _nonIterableRest(); }
4
+ function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
5
+ function _unsupportedIterableToArray(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }
6
+ function _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }
7
+ function _iterableToArrayLimit(r, l) { var t = null == r ? null : "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (null != t) { var e, n, i, u, a = [], f = !0, o = !1; try { if (i = (t = t.call(r)).next, 0 === l) { if (Object(t) !== t) return; f = !1; } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0); } catch (r) { o = !0, n = r; } finally { try { if (!f && null != t.return && (u = t.return(), Object(u) !== u)) return; } finally { if (o) throw n; } } return a; } }
8
+ function _arrayWithHoles(r) { if (Array.isArray(r)) return r; }
3
9
  import Log from '@deephaven/log';
4
10
  import { assertNotNull, ColorUtils, requestParentResponse } from '@deephaven/utils';
5
11
  import { themeDark } from "./theme-dark/index.js";
@@ -74,7 +80,9 @@ export function extractDistinctCssVariableExpressions(record) {
74
80
  var set = new Set();
75
81
  Object.values(record).forEach(value => {
76
82
  getExpressionRanges(value).forEach(_ref => {
77
- var [start, end] = _ref;
83
+ var _ref2 = _slicedToArray(_ref, 2),
84
+ start = _ref2[0],
85
+ end = _ref2[1];
78
86
  var expression = value.substring(start, end + 1);
79
87
  if (expression.includes(CSS_VAR_EXPRESSION_PREFIX)) {
80
88
  set.add(expression);
@@ -129,8 +137,8 @@ export function getDefaultBaseThemes() {
129
137
  * @returns The default selected theme key
130
138
  */
131
139
  export function getDefaultSelectedThemeKey() {
132
- var _ref2, _getThemeKeyOverride, _getThemePreloadData;
133
- return (_ref2 = (_getThemeKeyOverride = getThemeKeyOverride()) !== null && _getThemeKeyOverride !== void 0 ? _getThemeKeyOverride : (_getThemePreloadData = getThemePreloadData()) === null || _getThemePreloadData === void 0 ? void 0 : _getThemePreloadData.themeKey) !== null && _ref2 !== void 0 ? _ref2 : DEFAULT_DARK_THEME_KEY;
140
+ var _ref3, _getThemeKeyOverride, _getThemePreloadData;
141
+ return (_ref3 = (_getThemeKeyOverride = getThemeKeyOverride()) !== null && _getThemeKeyOverride !== void 0 ? _getThemeKeyOverride : (_getThemePreloadData = getThemePreloadData()) === null || _getThemePreloadData === void 0 ? void 0 : _getThemePreloadData.themeKey) !== null && _ref3 !== void 0 ? _ref3 : DEFAULT_DARK_THEME_KEY;
134
142
  }
135
143
 
136
144
  /**
@@ -276,14 +284,15 @@ export function isValidColorVar(name, value) {
276
284
  * @param externalThemeData The external theme data to parse
277
285
  * @returns A `ThemeData` object representing the external theme
278
286
  */
279
- export function parseExternalThemeData(_ref3) {
280
- var {
281
- baseThemeKey = DEFAULT_DARK_THEME_KEY,
282
- name,
283
- cssVars
284
- } = _ref3;
285
- var toExpression = _ref4 => {
286
- var [varName, varValue] = _ref4;
287
+ export function parseExternalThemeData(_ref4) {
288
+ var _ref4$baseThemeKey = _ref4.baseThemeKey,
289
+ baseThemeKey = _ref4$baseThemeKey === void 0 ? DEFAULT_DARK_THEME_KEY : _ref4$baseThemeKey,
290
+ name = _ref4.name,
291
+ cssVars = _ref4.cssVars;
292
+ var toExpression = _ref5 => {
293
+ var _ref6 = _slicedToArray(_ref5, 2),
294
+ varName = _ref6[0],
295
+ varValue = _ref6[1];
287
296
  return isValidColorVar(varName, varValue) ? "".concat(varName, ":").concat(varValue, ";") : null;
288
297
  };
289
298
  var sanitized = Object.entries(cssVars).map(toExpression).filter(str => str != null);
@@ -354,8 +363,9 @@ export function resolveCssVariablesInRecord(record) {
354
363
  var tmpPropEl = document.createElement('div');
355
364
  tmpPropEl.style.display = 'none';
356
365
  var recordArray = Object.entries(record);
357
- recordArray.forEach((_ref5, i) => {
358
- var [, value] = _ref5;
366
+ recordArray.forEach((_ref7, i) => {
367
+ var _ref8 = _slicedToArray(_ref7, 2),
368
+ value = _ref8[1];
359
369
  tmpPropEl.style.setProperty("--".concat(TMP_CSS_PROP_PREFIX, "-").concat(i), value);
360
370
  // faster to create these now all at once, even if we don't use them all
361
371
  // since the parent isn't added yet to the DOM
@@ -370,8 +380,10 @@ export function resolveCssVariablesInRecord(record) {
370
380
  targetElement.appendChild(tmpPropEl);
371
381
  var tempPropElComputedStyle = window.getComputedStyle(tmpPropEl);
372
382
  var result = {};
373
- recordArray.forEach((_ref6, i) => {
374
- var [key, value] = _ref6;
383
+ recordArray.forEach((_ref9, i) => {
384
+ var _ref0 = _slicedToArray(_ref9, 2),
385
+ key = _ref0[0],
386
+ value = _ref0[1];
375
387
  // resolves any variables in the expression
376
388
  var resolved = tempPropElComputedStyle.getPropertyValue("--".concat(TMP_CSS_PROP_PREFIX, "-").concat(i));
377
389
  var containsCssVar = value.includes(CSS_VAR_EXPRESSION_PREFIX);
@@ -407,8 +419,10 @@ export function resolveCssVariablesInRecord(record) {
407
419
  export function resolveCssVariablesInString(resolver, value) {
408
420
  var result = [];
409
421
  var i = 0;
410
- getExpressionRanges(value).forEach(_ref7 => {
411
- var [start, end] = _ref7;
422
+ getExpressionRanges(value).forEach(_ref1 => {
423
+ var _ref10 = _slicedToArray(_ref1, 2),
424
+ start = _ref10[0],
425
+ end = _ref10[1];
412
426
  if (i < start) {
413
427
  result.push(value.substring(i, start));
414
428
  i += start - i;
@@ -481,8 +495,10 @@ export function preloadTheme() {
481
495
  */
482
496
  export function overrideSVGFillColors(defaultValues) {
483
497
  var resolveVar = createCssVariableResolver(document.body, defaultValues);
484
- Object.entries(SVG_ICON_MANUAL_COLOR_MAP).forEach(_ref8 => {
485
- var [key, value] = _ref8;
498
+ Object.entries(SVG_ICON_MANUAL_COLOR_MAP).forEach(_ref11 => {
499
+ var _ref12 = _slicedToArray(_ref11, 2),
500
+ key = _ref12[0],
501
+ value = _ref12[1];
486
502
  // Clear any previous override so that our variables get resolved against the
487
503
  // actual svg content provided by the active themes and not from a previous
488
504
  // override
@@ -1 +1 @@
1
- {"version":3,"file":"ThemeUtils.js","names":["Log","assertNotNull","ColorUtils","requestParentResponse","themeDark","themeLight","DEFAULT_DARK_THEME_KEY","DEFAULT_LIGHT_THEME_KEY","DEFAULT_PRELOAD_DATA_VARIABLES","THEME_CACHE_LOCAL_STORAGE_KEY","SVG_ICON_MANUAL_COLOR_MAP","THEME_KEY_OVERRIDE_QUERY_PARAM","EXTERNAL_THEME_KEY","MSG_REQUEST_GET_THEME","TRANSPARENT_PRELOAD_DATA_VARIABLES","PRELOAD_TRANSPARENT_THEME_QUERY_PARAM","log","module","CSS_VAR_EXPRESSION_PREFIX","DH_VAR_PREFIX","TMP_CSS_PROP_PREFIX","NON_WHITESPACE_REGEX","WHITESPACE_REGEX","DH_CSS_VAR_NAME_REGEXP","calculatePreloadStyleContent","defaultPreloadValues","resolveVar","createCssVariableResolver","document","body","pairs","Object","keys","map","key","concat","join","el","defaultValues","computedStyle","getComputedStyle","cssVariableResolver","varName","_defaultValues","value","getPropertyValue","createPreloadStyleElement","id","preloadStyleContent","style","createElement","innerHTML","head","appendChild","extractDistinctCssVariableExpressions","record","set","Set","values","forEach","getExpressionRanges","_ref","start","end","expression","substring","includes","add","getActiveThemes","themeKey","themeRegistration","_custom$baseThemeKey","custom","find","theme","baseThemeKey","base","error","debug","getDefaultBaseThemes","name","styleContent","getDefaultSelectedThemeKey","_ref2","_getThemeKeyOverride","_getThemePreloadData","getThemeKeyOverride","getThemePreloadData","getThemeKey","pluginName","themeName","searchParams","URLSearchParams","window","location","search","get","data","localStorage","getItem","JSON","parse","_unused","_NON_WHITESPACE_REGEX","_NON_WHITESPACE_REGEX2","ranges","exec","index","parenLevel","i","length","test","push","isBaseThemeKey","isExternalThemeData","maybeExternalThemeData","cssVars","isExternalThemeEnabled","isPreloadTransparentTheme","isValidColorVar","CSS","supports","parseExternalThemeData","_ref3","toExpression","_ref4","varValue","sanitized","entries","filter","str","replaceSVGFillColor","svgContent","fillColor","replace","encodeURIComponent","requestExternalThemeData","_requestExternalThemeData","apply","arguments","_asyncToGenerator","result","Error","stringify","resolveCssVariablesInRecord","targetElement","undefined","isAlphaOptional","perfStart","performance","now","tmpPropEl","display","recordArray","_ref5","setProperty","backgroundColor","tempPropElComputedStyle","_ref6","resolved","containsCssVar","isColor","children","color","normalizeCssColor","remove","resolveCssVariablesInString","resolver","_ref7","setThemePreloadData","preloadData","setItem","preloadTheme","_getThemePreloadData2","previousPreloadStyleContent","defaultPreloadStyleContent","overrideSVGFillColors","_ref8","removeProperty","newSVGContent"],"sources":["../../src/theme/ThemeUtils.ts"],"sourcesContent":["import Log from '@deephaven/log';\nimport {\n assertNotNull,\n ColorUtils,\n requestParentResponse,\n} from '@deephaven/utils';\nimport { themeDark } from './theme-dark';\nimport { themeLight } from './theme-light';\nimport {\n DEFAULT_DARK_THEME_KEY,\n DEFAULT_LIGHT_THEME_KEY,\n DEFAULT_PRELOAD_DATA_VARIABLES,\n type BaseThemeKey,\n type ThemeData,\n type ThemePreloadData,\n type CssVariableStyleContent,\n type ThemePreloadColorVariable,\n type ThemeRegistrationData,\n THEME_CACHE_LOCAL_STORAGE_KEY,\n SVG_ICON_MANUAL_COLOR_MAP,\n type ThemeCssVariableName,\n type ThemeIconsRequiringManualColorChanges,\n THEME_KEY_OVERRIDE_QUERY_PARAM,\n EXTERNAL_THEME_KEY,\n type ExternalThemeData,\n MSG_REQUEST_GET_THEME,\n type ThemeCssColorVariableName,\n TRANSPARENT_PRELOAD_DATA_VARIABLES,\n PRELOAD_TRANSPARENT_THEME_QUERY_PARAM,\n} from './ThemeModel';\n\nconst log = Log.module('ThemeUtils');\n\nexport const CSS_VAR_EXPRESSION_PREFIX = 'var(--';\nexport const DH_VAR_PREFIX = '--dh-color-';\nexport const TMP_CSS_PROP_PREFIX = 'dh-tmp';\nexport const NON_WHITESPACE_REGEX = /\\S/;\nexport const WHITESPACE_REGEX = /\\s/;\n\nexport const DH_CSS_VAR_NAME_REGEXP = /^--dh-color-[a-z0-9_-]+$/;\n\nexport type VarExpressionResolver = (varExpression: string) => string;\n\n/**\n * Resolves the current values of CSS variables we want to preload. Preloading\n * happens before themes are fully loaded so that we can style things like the\n * loading spinner and background color which are shown to the user early on in\n * the app lifecycle.\n * @defaultPreloadValues Default values to use if a preload variable is not set.\n */\nexport function calculatePreloadStyleContent(\n defaultPreloadValues: Record<string, string>\n): CssVariableStyleContent {\n const resolveVar = createCssVariableResolver(\n document.body,\n defaultPreloadValues\n );\n\n // Calculate the current preload variables. If the variable is not set, use\n // the default value.\n const pairs = Object.keys(defaultPreloadValues).map(\n key => `${key}:${resolveVar(key as ThemePreloadColorVariable)}`\n );\n\n return `:root{${pairs.join(';')}}`;\n}\n\n/**\n * Create a resolver function for calculating the value of a css variable based\n * on a given element's computed style. If the variable resolves to '', we check\n * `defaultValues` for a default value, and if one does not exist,\n * return ''.\n * @param el Element to resolve css variables against\n * @param defaultValues Default values to use if a variable is not set.\n */\nexport function createCssVariableResolver(\n el: Element,\n defaultValues: Record<string, string>\n): (varName: ThemeCssVariableName) => string {\n const computedStyle = getComputedStyle(el);\n\n /**\n * Resolve the given css variable name to a value. If the variable is not set,\n * return the default preload value or '' if one does not exist.\n */\n return function cssVariableResolver(varName: ThemeCssVariableName): string {\n const value = computedStyle.getPropertyValue(varName);\n\n if (value !== '') {\n return value;\n }\n\n return defaultValues[varName as ThemePreloadColorVariable] ?? '';\n };\n}\n\n/**\n * Create a style tag containing preload css variables and add to the head.\n * @param id The id of the style tag\n * @param preloadStyleContent The css variable content to add to the style tag\n */\nexport function createPreloadStyleElement(\n id: `theme-preload-${string}`,\n preloadStyleContent: CssVariableStyleContent\n): void {\n const style = document.createElement('style');\n style.id = id;\n style.innerHTML = preloadStyleContent;\n document.head.appendChild(style);\n}\n\n/**\n * Extracts all css variable expressions from the given record and returns\n * a set of unique expressions.\n * @param record The record to extract css variable expressions from\n */\nexport function extractDistinctCssVariableExpressions(\n record: Record<string, string>\n): Set<string> {\n const set = new Set<string>();\n\n Object.values(record).forEach(value => {\n getExpressionRanges(value).forEach(([start, end]) => {\n const expression = value.substring(start, end + 1);\n\n if (expression.includes(CSS_VAR_EXPRESSION_PREFIX)) {\n set.add(expression);\n }\n });\n });\n\n return set;\n}\n\n/**\n * Returns an array of the active themes. The first item will always be one\n * of the base themes. Optionally, the second item will be a custom theme.\n */\nexport function getActiveThemes(\n themeKey: string,\n themeRegistration: ThemeRegistrationData\n): [ThemeData] | [ThemeData, ThemeData] {\n const custom = themeRegistration.custom.find(\n theme => theme.themeKey === themeKey\n );\n\n const baseThemeKey = custom?.baseThemeKey ?? themeKey;\n\n let base = themeRegistration.base.find(\n theme => theme.themeKey === baseThemeKey\n );\n\n if (base == null) {\n log.error(\n `No registered base theme found for theme key: '${baseThemeKey}'`,\n 'Registered:',\n themeRegistration.base.map(theme => theme.themeKey),\n themeRegistration.custom.map(theme => theme.themeKey)\n );\n base = themeRegistration.base.find(\n theme => theme.themeKey === DEFAULT_DARK_THEME_KEY\n );\n\n assertNotNull(\n base,\n `Default base theme '${DEFAULT_DARK_THEME_KEY}' is not registered`\n );\n }\n\n log.debug('Applied themes:', base.themeKey, custom?.themeKey);\n\n return custom == null ? [base] : [base, custom];\n}\n\n/**\n * Get default base theme data.\n */\nexport function getDefaultBaseThemes(): ThemeData[] {\n return [\n {\n name: 'Default Dark',\n themeKey: DEFAULT_DARK_THEME_KEY,\n styleContent: themeDark,\n },\n // The ThemePicker shows whenever more than 1 theme is available. Disable\n // light theme for now to keep the picker hidden until it is fully\n // implemented by #1539.\n {\n name: 'Default Light',\n themeKey: DEFAULT_LIGHT_THEME_KEY,\n styleContent: themeLight,\n },\n ];\n}\n\n/**\n * Get the default selected theme key. Precedence is:\n * 1. Theme key override query parameter\n * 2. Theme key from preload data\n * 3. Default dark theme key\n * @returns The default selected theme key\n */\nexport function getDefaultSelectedThemeKey(): string {\n return (\n getThemeKeyOverride() ??\n getThemePreloadData()?.themeKey ??\n DEFAULT_DARK_THEME_KEY\n );\n}\n\n/**\n * Derive unique theme key from plugin root path and theme name.\n * @param pluginName The root path of the plugin\n * @param themeName The name of the theme\n */\nexport function getThemeKey(pluginName: string, themeName: string): string {\n return `${pluginName}_${themeName}`;\n}\n\n/**\n * A theme key override can be set via a query parameter to force a specific\n * theme selection. Useful for embedded widget scenarios that don't expose the\n * theme selector.\n */\nexport function getThemeKeyOverride(): string | null {\n const searchParams = new URLSearchParams(window.location.search);\n return searchParams.get(THEME_KEY_OVERRIDE_QUERY_PARAM);\n}\n\n/**\n * Get the preload data from local storage or null if it does not exist or is\n * invalid\n */\nexport function getThemePreloadData(): ThemePreloadData | null {\n const data = localStorage.getItem(THEME_CACHE_LOCAL_STORAGE_KEY);\n\n try {\n return data == null ? null : JSON.parse(data);\n } catch {\n // ignore\n }\n\n return null;\n}\n\n/**\n * Identifies start and end indices of any top-level expressions in the given\n * string.\n *\n * e.g.\n * getExpressionRanges('var(--aaa-aa) #fff var(--bbb-bb)')\n * yields:\n * [\n * [0, 12], // 'var(--aaa-aa)'\n * [14, 17] // '#fff'\n * [19, 31], // 'var(--bbb-bb)'\n * ]\n *\n * In cases where there are nested expressions, only the indices of the outermost\n * expression will be included.\n *\n * e.g.\n * getExpressionRanges('var(--ccc-cc, var(--aaa-aa, green)) var(--bbb-bb)')\n * yields:\n * [\n * [0, 34], // 'var(--ccc-cc, var(--aaa-aa, green))'\n * [36, 48], // 'var(--bbb-bb)'\n * ]\n * @param value The string to search for expressions\n * @returns An array of [start, end] index pairs for each expression\n */\nexport function getExpressionRanges(value: string): [number, number][] {\n const ranges: [number, number][] = [];\n\n let start = NON_WHITESPACE_REGEX.exec(value)?.index ?? 0;\n let parenLevel = 0;\n\n for (let i = 0; i < value.length; i += 1) {\n if (value[i] === '(') {\n parenLevel += 1;\n } else if (value[i] === ')') {\n parenLevel -= 1;\n }\n\n if (\n i === value.length - 1 ||\n (WHITESPACE_REGEX.test(value[i + 1]) && parenLevel === 0)\n ) {\n ranges.push([start, i]);\n\n while (i < value.length - 1 && WHITESPACE_REGEX.test(value[i + 1])) {\n i += 1;\n }\n\n start = i + 1;\n }\n }\n\n if (parenLevel !== 0) {\n log.error('Unbalanced parentheses in css var expression', value);\n return [];\n }\n\n return ranges;\n}\n\n/**\n * Check if the given theme key is one of the base themes.\n * @param themeKey The theme key to check\n * @returns True if the theme key is a base theme key, false otherwise\n */\nexport function isBaseThemeKey(themeKey: string): themeKey is BaseThemeKey {\n return [DEFAULT_DARK_THEME_KEY, DEFAULT_LIGHT_THEME_KEY].includes(themeKey);\n}\n\n/**\n * Determine if a given object is a `ExternalThemeData` object.\n * @param maybeExternalThemeData An object that may or may not be a `ExternalThemeData`\n * @returns True if the object is a `ExternalThemeData`, false otherwise\n */\nexport function isExternalThemeData(\n maybeExternalThemeData: unknown\n): maybeExternalThemeData is ExternalThemeData {\n if (\n typeof maybeExternalThemeData !== 'object' ||\n maybeExternalThemeData == null\n ) {\n return false;\n }\n\n return (\n 'name' in maybeExternalThemeData &&\n typeof maybeExternalThemeData.name === 'string' &&\n 'cssVars' in maybeExternalThemeData &&\n typeof maybeExternalThemeData.cssVars === 'object' &&\n maybeExternalThemeData.cssVars != null\n );\n}\n\n/**\n * Check if the current URL specifies an external theme key override.\n * @returns True if the external theme key override is set, false otherwise\n */\nexport function isExternalThemeEnabled(): boolean {\n const searchParams = new URLSearchParams(window.location.search);\n return (\n searchParams.get(THEME_KEY_OVERRIDE_QUERY_PARAM) === EXTERNAL_THEME_KEY\n );\n}\n\n/**\n * Check if PRELOAD_TRANSPARENT_THEME_QUERY_PARAM query parameter is set to true.\n * @returns True if the preload transparent theme query parameter is set, false\n * otherwise\n */\nexport function isPreloadTransparentTheme(): boolean {\n const searchParams = new URLSearchParams(window.location.search);\n return searchParams.get(PRELOAD_TRANSPARENT_THEME_QUERY_PARAM) === 'true';\n}\n\n/**\n * Validate that a given CSS variable name / value pair is a valid Deephaven\n * color variable.\n * @param name The name of the CSS variable to validate, e.g. '--dh-color-primary'\n * @param value The value of the CSS color to validate\n * @returns True if the name is a valid Deephaven color variable and the value\n * is a valid CSS color, false otherwise\n */\nexport function isValidColorVar(\n name: string,\n value: string\n): name is ThemeCssColorVariableName {\n return DH_CSS_VAR_NAME_REGEXP.test(name) && CSS.supports('color', value);\n}\n\n/**\n * Parse external theme data into a `ThemeData` object. Invalid CSS color variable\n * pairs are excluded from the resulting `ThemeData` object.\n * @param externalThemeData The external theme data to parse\n * @returns A `ThemeData` object representing the external theme\n */\nexport function parseExternalThemeData({\n baseThemeKey = DEFAULT_DARK_THEME_KEY,\n name,\n cssVars,\n}: ExternalThemeData): ThemeData {\n const toExpression = ([varName, varValue]: [string, string]) =>\n isValidColorVar(varName, varValue) ? `${varName}:${varValue};` : null;\n\n const sanitized = Object.entries(cssVars)\n .map(toExpression)\n .filter((str): str is string => str != null);\n\n const styleContent =\n sanitized.length === 0 ? '' : `:root{${sanitized.join('')}}`;\n\n return {\n baseThemeKey,\n themeKey: EXTERNAL_THEME_KEY,\n name,\n styleContent,\n };\n}\n\n/**\n * Replace the `fill='...'` attribute in the given SVG content with the given\n * color string.\n * @param svgContent Inline SVG content to replace the fill color in\n * @param fillColor The color to replace the fill color with\n */\nexport function replaceSVGFillColor(\n svgContent: string,\n fillColor: string\n): string {\n return svgContent.replace(\n /fill='.*?'/,\n `fill='${encodeURIComponent(fillColor)}'`\n );\n}\n\n/**\n * Request theme data from the parent window.\n * @returns A promise that resolves to the external theme data\n * @throws Error if the response is not a valid `ExternalThemeData`\n */\nexport async function requestExternalThemeData(): Promise<ExternalThemeData> {\n const result = await requestParentResponse(MSG_REQUEST_GET_THEME);\n\n if (!isExternalThemeData(result)) {\n throw new Error(\n `Unexpected external theme data response: ${JSON.stringify(result)}`\n );\n }\n\n return result;\n}\n\n/**\n * Make a copy of the given object replacing any css variable expressions\n * contained in its prop values with values resolved from the given HTML element.\n * Variables that resolve to color strings will also be normalized to 8 digit\n * hex values (or optionally 6 digit hex if `isAlphaOptional` is true).\n *\n * Note that the browser will force a reflow when calling `getComputedStyle` if\n * css properties have changed. In order to avoid a reflow for every property\n * check we use distinct setup, resolve / normalize, and cleanup passes:\n * 1. Setup - Create a tmp element and set all css props we want to evaluate\n * 2. Resolve / Normalize - Evaluate all css props via `getPropertyValue` calls\n * and replace the original expressions with resolved values. Also normalize\n * css colors to rgb/a.\n * 3. Cleanup - Remove the tmp element\n * @param record An object whose values may contain css var expressions\n * @param targetElement The element to resolve css variables against. Defaults\n * to document.body\n * @param isAlphaOptional If true, the alpha value will be dropped from resolved\n * 8 character hex colors if it is 'ff'. Defaults to false.\n */\nexport function resolveCssVariablesInRecord<T extends Record<string, string>>(\n record: T,\n targetElement: HTMLElement = document.body,\n isAlphaOptional = false\n): T {\n const perfStart = performance.now();\n\n // Add a temporary div to attach temp css variables to\n const tmpPropEl = document.createElement('div');\n tmpPropEl.style.display = 'none';\n\n const recordArray = Object.entries(record);\n recordArray.forEach(([, value], i) => {\n tmpPropEl.style.setProperty(`--${TMP_CSS_PROP_PREFIX}-${i}`, value);\n // faster to create these now all at once, even if we don't use them all\n // since the parent isn't added yet to the DOM\n const el = document.createElement('div');\n // use background color instead of color to avoid inherited values\n el.style.backgroundColor = value;\n tmpPropEl.appendChild(el);\n });\n\n // append only once to avoid multiple re-layouts\n // must be part of DOM to get computed color\n targetElement.appendChild(tmpPropEl);\n const tempPropElComputedStyle = window.getComputedStyle(tmpPropEl);\n\n const result = {} as T;\n recordArray.forEach(([key, value], i) => {\n // resolves any variables in the expression\n let resolved = tempPropElComputedStyle.getPropertyValue(\n `--${TMP_CSS_PROP_PREFIX}-${i}`\n );\n\n const containsCssVar = value.includes(CSS_VAR_EXPRESSION_PREFIX);\n const isColor = CSS.supports('color', resolved);\n\n if (\n // only try to normalize non-hex strings that are valid colors\n // otherwise non-colors will be made #00000000\n isColor &&\n !/^#[0-9A-F]{6}[0-9a-f]{0,2}$/i.test(resolved)\n ) {\n // getting the computed background color is necessary\n // because resolved can still contain a color-mix() function\n const el = tmpPropEl.children[i] as HTMLDivElement;\n const computedStyle = window.getComputedStyle(el);\n const color = computedStyle.getPropertyValue('background-color');\n // convert color to hex, which is what monaco and plotly require\n resolved = ColorUtils.normalizeCssColor(color, isAlphaOptional);\n }\n (result as Record<string, string>)[key] =\n containsCssVar || isColor ? resolved : value;\n });\n\n // Remove the temporary div\n tmpPropEl.remove();\n\n log.debug('Resolved css variables', performance.now() - perfStart, 'ms');\n\n return result;\n}\n\n/**\n * Resolve css variable expressions in the given string using the\n * given resolver and replace the original expressions with the resolved values.\n *\n * @param resolver Function that can resolve a css variable expression\n * @param value Value that may contain css variable expressions\n */\nexport function resolveCssVariablesInString(\n resolver: VarExpressionResolver,\n value: string\n): string {\n const result: string[] = [];\n let i = 0;\n getExpressionRanges(value).forEach(([start, end]) => {\n if (i < start) {\n result.push(value.substring(i, start));\n i += start - i;\n }\n\n const expression = value.substring(start, end + 1);\n\n result.push(\n expression.includes(CSS_VAR_EXPRESSION_PREFIX)\n ? resolver(expression)\n : expression\n );\n\n i += end - start + 1;\n });\n\n if (result.length === 0) {\n return value;\n }\n\n return result.join('');\n}\n\n/**\n * Store theme preload data in local storage.\n * @param preloadData The preload data to set\n */\nexport function setThemePreloadData(preloadData: ThemePreloadData): void {\n localStorage.setItem(\n THEME_CACHE_LOCAL_STORAGE_KEY,\n JSON.stringify(preloadData)\n );\n}\n\n/**\n * Preload minimal theme variables from the cache.\n * @defaultPreloadValues Optional default values to use if a preload variable is not set.\n */\nexport function preloadTheme(\n defaultPreloadValues: Record<string, string> = DEFAULT_PRELOAD_DATA_VARIABLES\n): void {\n // In certain cases we may want to preload a transparent theme to allow the\n // parent container to show through. For example, when a parent Window is\n // providing a theme via `postMessage` apis, we may not have enough information\n // to properly preload the theme, so we can just preload a transparent\n // theme and let the parent container show through until `postMessage`\n // communication is complete.\n if (isPreloadTransparentTheme()) {\n createPreloadStyleElement(\n 'theme-preload-transparent',\n calculatePreloadStyleContent(TRANSPARENT_PRELOAD_DATA_VARIABLES)\n );\n return;\n }\n\n const previousPreloadStyleContent =\n getThemePreloadData()?.preloadStyleContent;\n\n const defaultPreloadStyleContent =\n calculatePreloadStyleContent(defaultPreloadValues);\n\n log.debug('Preloading theme content:', {\n defaultPreloadStyleContent,\n previousPreloadStyleContent,\n });\n\n createPreloadStyleElement(\n 'theme-preload-defaults',\n defaultPreloadStyleContent\n );\n\n // Any preload variables that were saved by last theme load should override\n // the defaults\n if (previousPreloadStyleContent != null) {\n createPreloadStyleElement(\n 'theme-preload-previous',\n previousPreloadStyleContent\n );\n }\n}\n\n/**\n * Inline SVGs cannot depend on dynamic CSS variables, so we have to statically\n * update them if we want to change their color.\n *\n * This function:\n * 1. Clears any previous overrides\n * 2. Resolves CSS variables containing inline SVG urls\n * 3. Resolves mapped color variables and replaces the `fill='...'` attribute with the result\n * 4. Sets the original CSS variable to the new replaced value\n *\n * Note that it is preferable to use inline SVGs as background-mask values and\n * just change the background color instead of relying on this util, but this\n * is not always possible. e.g. <select> elements don't support pseudo elements,\n * so there's not a good way to set icons via masks.\n * @param defaultValues Default values to use if a variable is not set.\n */\nexport function overrideSVGFillColors(\n defaultValues: Record<string, string>\n): void {\n const resolveVar = createCssVariableResolver(document.body, defaultValues);\n\n Object.entries(SVG_ICON_MANUAL_COLOR_MAP).forEach(([key, value]) => {\n // Clear any previous override so that our variables get resolved against the\n // actual svg content provided by the active themes and not from a previous\n // override\n document.body.style.removeProperty(key);\n\n const svgContent = resolveVar(key as ThemeIconsRequiringManualColorChanges);\n const fillColor = resolveVar(value as ThemePreloadColorVariable);\n\n const newSVGContent = replaceSVGFillColor(svgContent, fillColor);\n\n // This will take precedence over any values for the variable provided by\n // the active themes\n document.body.style.setProperty(key, newSVGContent);\n });\n}\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"ThemeUtils.js","names":["Log","assertNotNull","ColorUtils","requestParentResponse","themeDark","themeLight","DEFAULT_DARK_THEME_KEY","DEFAULT_LIGHT_THEME_KEY","DEFAULT_PRELOAD_DATA_VARIABLES","THEME_CACHE_LOCAL_STORAGE_KEY","SVG_ICON_MANUAL_COLOR_MAP","THEME_KEY_OVERRIDE_QUERY_PARAM","EXTERNAL_THEME_KEY","MSG_REQUEST_GET_THEME","TRANSPARENT_PRELOAD_DATA_VARIABLES","PRELOAD_TRANSPARENT_THEME_QUERY_PARAM","log","module","CSS_VAR_EXPRESSION_PREFIX","DH_VAR_PREFIX","TMP_CSS_PROP_PREFIX","NON_WHITESPACE_REGEX","WHITESPACE_REGEX","DH_CSS_VAR_NAME_REGEXP","calculatePreloadStyleContent","defaultPreloadValues","resolveVar","createCssVariableResolver","document","body","pairs","Object","keys","map","key","concat","join","el","defaultValues","computedStyle","getComputedStyle","cssVariableResolver","varName","_defaultValues","value","getPropertyValue","createPreloadStyleElement","id","preloadStyleContent","style","createElement","innerHTML","head","appendChild","extractDistinctCssVariableExpressions","record","set","Set","values","forEach","getExpressionRanges","_ref","_ref2","_slicedToArray","start","end","expression","substring","includes","add","getActiveThemes","themeKey","themeRegistration","_custom$baseThemeKey","custom","find","theme","baseThemeKey","base","error","debug","getDefaultBaseThemes","name","styleContent","getDefaultSelectedThemeKey","_ref3","_getThemeKeyOverride","_getThemePreloadData","getThemeKeyOverride","getThemePreloadData","getThemeKey","pluginName","themeName","searchParams","URLSearchParams","window","location","search","get","data","localStorage","getItem","JSON","parse","_unused","_NON_WHITESPACE_REGEX","_NON_WHITESPACE_REGEX2","ranges","exec","index","parenLevel","i","length","test","push","isBaseThemeKey","isExternalThemeData","maybeExternalThemeData","cssVars","isExternalThemeEnabled","isPreloadTransparentTheme","isValidColorVar","CSS","supports","parseExternalThemeData","_ref4","_ref4$baseThemeKey","toExpression","_ref5","_ref6","varValue","sanitized","entries","filter","str","replaceSVGFillColor","svgContent","fillColor","replace","encodeURIComponent","requestExternalThemeData","_requestExternalThemeData","apply","arguments","_asyncToGenerator","result","Error","stringify","resolveCssVariablesInRecord","targetElement","undefined","isAlphaOptional","perfStart","performance","now","tmpPropEl","display","recordArray","_ref7","_ref8","setProperty","backgroundColor","tempPropElComputedStyle","_ref9","_ref0","resolved","containsCssVar","isColor","children","color","normalizeCssColor","remove","resolveCssVariablesInString","resolver","_ref1","_ref10","setThemePreloadData","preloadData","setItem","preloadTheme","_getThemePreloadData2","previousPreloadStyleContent","defaultPreloadStyleContent","overrideSVGFillColors","_ref11","_ref12","removeProperty","newSVGContent"],"sources":["../../src/theme/ThemeUtils.ts"],"sourcesContent":["import Log from '@deephaven/log';\nimport {\n assertNotNull,\n ColorUtils,\n requestParentResponse,\n} from '@deephaven/utils';\nimport { themeDark } from './theme-dark';\nimport { themeLight } from './theme-light';\nimport {\n DEFAULT_DARK_THEME_KEY,\n DEFAULT_LIGHT_THEME_KEY,\n DEFAULT_PRELOAD_DATA_VARIABLES,\n type BaseThemeKey,\n type ThemeData,\n type ThemePreloadData,\n type CssVariableStyleContent,\n type ThemePreloadColorVariable,\n type ThemeRegistrationData,\n THEME_CACHE_LOCAL_STORAGE_KEY,\n SVG_ICON_MANUAL_COLOR_MAP,\n type ThemeCssVariableName,\n type ThemeIconsRequiringManualColorChanges,\n THEME_KEY_OVERRIDE_QUERY_PARAM,\n EXTERNAL_THEME_KEY,\n type ExternalThemeData,\n MSG_REQUEST_GET_THEME,\n type ThemeCssColorVariableName,\n TRANSPARENT_PRELOAD_DATA_VARIABLES,\n PRELOAD_TRANSPARENT_THEME_QUERY_PARAM,\n} from './ThemeModel';\n\nconst log = Log.module('ThemeUtils');\n\nexport const CSS_VAR_EXPRESSION_PREFIX = 'var(--';\nexport const DH_VAR_PREFIX = '--dh-color-';\nexport const TMP_CSS_PROP_PREFIX = 'dh-tmp';\nexport const NON_WHITESPACE_REGEX = /\\S/;\nexport const WHITESPACE_REGEX = /\\s/;\n\nexport const DH_CSS_VAR_NAME_REGEXP = /^--dh-color-[a-z0-9_-]+$/;\n\nexport type VarExpressionResolver = (varExpression: string) => string;\n\n/**\n * Resolves the current values of CSS variables we want to preload. Preloading\n * happens before themes are fully loaded so that we can style things like the\n * loading spinner and background color which are shown to the user early on in\n * the app lifecycle.\n * @defaultPreloadValues Default values to use if a preload variable is not set.\n */\nexport function calculatePreloadStyleContent(\n defaultPreloadValues: Record<string, string>\n): CssVariableStyleContent {\n const resolveVar = createCssVariableResolver(\n document.body,\n defaultPreloadValues\n );\n\n // Calculate the current preload variables. If the variable is not set, use\n // the default value.\n const pairs = Object.keys(defaultPreloadValues).map(\n key => `${key}:${resolveVar(key as ThemePreloadColorVariable)}`\n );\n\n return `:root{${pairs.join(';')}}`;\n}\n\n/**\n * Create a resolver function for calculating the value of a css variable based\n * on a given element's computed style. If the variable resolves to '', we check\n * `defaultValues` for a default value, and if one does not exist,\n * return ''.\n * @param el Element to resolve css variables against\n * @param defaultValues Default values to use if a variable is not set.\n */\nexport function createCssVariableResolver(\n el: Element,\n defaultValues: Record<string, string>\n): (varName: ThemeCssVariableName) => string {\n const computedStyle = getComputedStyle(el);\n\n /**\n * Resolve the given css variable name to a value. If the variable is not set,\n * return the default preload value or '' if one does not exist.\n */\n return function cssVariableResolver(varName: ThemeCssVariableName): string {\n const value = computedStyle.getPropertyValue(varName);\n\n if (value !== '') {\n return value;\n }\n\n return defaultValues[varName as ThemePreloadColorVariable] ?? '';\n };\n}\n\n/**\n * Create a style tag containing preload css variables and add to the head.\n * @param id The id of the style tag\n * @param preloadStyleContent The css variable content to add to the style tag\n */\nexport function createPreloadStyleElement(\n id: `theme-preload-${string}`,\n preloadStyleContent: CssVariableStyleContent\n): void {\n const style = document.createElement('style');\n style.id = id;\n style.innerHTML = preloadStyleContent;\n document.head.appendChild(style);\n}\n\n/**\n * Extracts all css variable expressions from the given record and returns\n * a set of unique expressions.\n * @param record The record to extract css variable expressions from\n */\nexport function extractDistinctCssVariableExpressions(\n record: Record<string, string>\n): Set<string> {\n const set = new Set<string>();\n\n Object.values(record).forEach(value => {\n getExpressionRanges(value).forEach(([start, end]) => {\n const expression = value.substring(start, end + 1);\n\n if (expression.includes(CSS_VAR_EXPRESSION_PREFIX)) {\n set.add(expression);\n }\n });\n });\n\n return set;\n}\n\n/**\n * Returns an array of the active themes. The first item will always be one\n * of the base themes. Optionally, the second item will be a custom theme.\n */\nexport function getActiveThemes(\n themeKey: string,\n themeRegistration: ThemeRegistrationData\n): [ThemeData] | [ThemeData, ThemeData] {\n const custom = themeRegistration.custom.find(\n theme => theme.themeKey === themeKey\n );\n\n const baseThemeKey = custom?.baseThemeKey ?? themeKey;\n\n let base = themeRegistration.base.find(\n theme => theme.themeKey === baseThemeKey\n );\n\n if (base == null) {\n log.error(\n `No registered base theme found for theme key: '${baseThemeKey}'`,\n 'Registered:',\n themeRegistration.base.map(theme => theme.themeKey),\n themeRegistration.custom.map(theme => theme.themeKey)\n );\n base = themeRegistration.base.find(\n theme => theme.themeKey === DEFAULT_DARK_THEME_KEY\n );\n\n assertNotNull(\n base,\n `Default base theme '${DEFAULT_DARK_THEME_KEY}' is not registered`\n );\n }\n\n log.debug('Applied themes:', base.themeKey, custom?.themeKey);\n\n return custom == null ? [base] : [base, custom];\n}\n\n/**\n * Get default base theme data.\n */\nexport function getDefaultBaseThemes(): ThemeData[] {\n return [\n {\n name: 'Default Dark',\n themeKey: DEFAULT_DARK_THEME_KEY,\n styleContent: themeDark,\n },\n // The ThemePicker shows whenever more than 1 theme is available. Disable\n // light theme for now to keep the picker hidden until it is fully\n // implemented by #1539.\n {\n name: 'Default Light',\n themeKey: DEFAULT_LIGHT_THEME_KEY,\n styleContent: themeLight,\n },\n ];\n}\n\n/**\n * Get the default selected theme key. Precedence is:\n * 1. Theme key override query parameter\n * 2. Theme key from preload data\n * 3. Default dark theme key\n * @returns The default selected theme key\n */\nexport function getDefaultSelectedThemeKey(): string {\n return (\n getThemeKeyOverride() ??\n getThemePreloadData()?.themeKey ??\n DEFAULT_DARK_THEME_KEY\n );\n}\n\n/**\n * Derive unique theme key from plugin root path and theme name.\n * @param pluginName The root path of the plugin\n * @param themeName The name of the theme\n */\nexport function getThemeKey(pluginName: string, themeName: string): string {\n return `${pluginName}_${themeName}`;\n}\n\n/**\n * A theme key override can be set via a query parameter to force a specific\n * theme selection. Useful for embedded widget scenarios that don't expose the\n * theme selector.\n */\nexport function getThemeKeyOverride(): string | null {\n const searchParams = new URLSearchParams(window.location.search);\n return searchParams.get(THEME_KEY_OVERRIDE_QUERY_PARAM);\n}\n\n/**\n * Get the preload data from local storage or null if it does not exist or is\n * invalid\n */\nexport function getThemePreloadData(): ThemePreloadData | null {\n const data = localStorage.getItem(THEME_CACHE_LOCAL_STORAGE_KEY);\n\n try {\n return data == null ? null : JSON.parse(data);\n } catch {\n // ignore\n }\n\n return null;\n}\n\n/**\n * Identifies start and end indices of any top-level expressions in the given\n * string.\n *\n * e.g.\n * getExpressionRanges('var(--aaa-aa) #fff var(--bbb-bb)')\n * yields:\n * [\n * [0, 12], // 'var(--aaa-aa)'\n * [14, 17] // '#fff'\n * [19, 31], // 'var(--bbb-bb)'\n * ]\n *\n * In cases where there are nested expressions, only the indices of the outermost\n * expression will be included.\n *\n * e.g.\n * getExpressionRanges('var(--ccc-cc, var(--aaa-aa, green)) var(--bbb-bb)')\n * yields:\n * [\n * [0, 34], // 'var(--ccc-cc, var(--aaa-aa, green))'\n * [36, 48], // 'var(--bbb-bb)'\n * ]\n * @param value The string to search for expressions\n * @returns An array of [start, end] index pairs for each expression\n */\nexport function getExpressionRanges(value: string): [number, number][] {\n const ranges: [number, number][] = [];\n\n let start = NON_WHITESPACE_REGEX.exec(value)?.index ?? 0;\n let parenLevel = 0;\n\n for (let i = 0; i < value.length; i += 1) {\n if (value[i] === '(') {\n parenLevel += 1;\n } else if (value[i] === ')') {\n parenLevel -= 1;\n }\n\n if (\n i === value.length - 1 ||\n (WHITESPACE_REGEX.test(value[i + 1]) && parenLevel === 0)\n ) {\n ranges.push([start, i]);\n\n while (i < value.length - 1 && WHITESPACE_REGEX.test(value[i + 1])) {\n i += 1;\n }\n\n start = i + 1;\n }\n }\n\n if (parenLevel !== 0) {\n log.error('Unbalanced parentheses in css var expression', value);\n return [];\n }\n\n return ranges;\n}\n\n/**\n * Check if the given theme key is one of the base themes.\n * @param themeKey The theme key to check\n * @returns True if the theme key is a base theme key, false otherwise\n */\nexport function isBaseThemeKey(themeKey: string): themeKey is BaseThemeKey {\n return [DEFAULT_DARK_THEME_KEY, DEFAULT_LIGHT_THEME_KEY].includes(themeKey);\n}\n\n/**\n * Determine if a given object is a `ExternalThemeData` object.\n * @param maybeExternalThemeData An object that may or may not be a `ExternalThemeData`\n * @returns True if the object is a `ExternalThemeData`, false otherwise\n */\nexport function isExternalThemeData(\n maybeExternalThemeData: unknown\n): maybeExternalThemeData is ExternalThemeData {\n if (\n typeof maybeExternalThemeData !== 'object' ||\n maybeExternalThemeData == null\n ) {\n return false;\n }\n\n return (\n 'name' in maybeExternalThemeData &&\n typeof maybeExternalThemeData.name === 'string' &&\n 'cssVars' in maybeExternalThemeData &&\n typeof maybeExternalThemeData.cssVars === 'object' &&\n maybeExternalThemeData.cssVars != null\n );\n}\n\n/**\n * Check if the current URL specifies an external theme key override.\n * @returns True if the external theme key override is set, false otherwise\n */\nexport function isExternalThemeEnabled(): boolean {\n const searchParams = new URLSearchParams(window.location.search);\n return (\n searchParams.get(THEME_KEY_OVERRIDE_QUERY_PARAM) === EXTERNAL_THEME_KEY\n );\n}\n\n/**\n * Check if PRELOAD_TRANSPARENT_THEME_QUERY_PARAM query parameter is set to true.\n * @returns True if the preload transparent theme query parameter is set, false\n * otherwise\n */\nexport function isPreloadTransparentTheme(): boolean {\n const searchParams = new URLSearchParams(window.location.search);\n return searchParams.get(PRELOAD_TRANSPARENT_THEME_QUERY_PARAM) === 'true';\n}\n\n/**\n * Validate that a given CSS variable name / value pair is a valid Deephaven\n * color variable.\n * @param name The name of the CSS variable to validate, e.g. '--dh-color-primary'\n * @param value The value of the CSS color to validate\n * @returns True if the name is a valid Deephaven color variable and the value\n * is a valid CSS color, false otherwise\n */\nexport function isValidColorVar(\n name: string,\n value: string\n): name is ThemeCssColorVariableName {\n return DH_CSS_VAR_NAME_REGEXP.test(name) && CSS.supports('color', value);\n}\n\n/**\n * Parse external theme data into a `ThemeData` object. Invalid CSS color variable\n * pairs are excluded from the resulting `ThemeData` object.\n * @param externalThemeData The external theme data to parse\n * @returns A `ThemeData` object representing the external theme\n */\nexport function parseExternalThemeData({\n baseThemeKey = DEFAULT_DARK_THEME_KEY,\n name,\n cssVars,\n}: ExternalThemeData): ThemeData {\n const toExpression = ([varName, varValue]: [string, string]) =>\n isValidColorVar(varName, varValue) ? `${varName}:${varValue};` : null;\n\n const sanitized = Object.entries(cssVars)\n .map(toExpression)\n .filter((str): str is string => str != null);\n\n const styleContent =\n sanitized.length === 0 ? '' : `:root{${sanitized.join('')}}`;\n\n return {\n baseThemeKey,\n themeKey: EXTERNAL_THEME_KEY,\n name,\n styleContent,\n };\n}\n\n/**\n * Replace the `fill='...'` attribute in the given SVG content with the given\n * color string.\n * @param svgContent Inline SVG content to replace the fill color in\n * @param fillColor The color to replace the fill color with\n */\nexport function replaceSVGFillColor(\n svgContent: string,\n fillColor: string\n): string {\n return svgContent.replace(\n /fill='.*?'/,\n `fill='${encodeURIComponent(fillColor)}'`\n );\n}\n\n/**\n * Request theme data from the parent window.\n * @returns A promise that resolves to the external theme data\n * @throws Error if the response is not a valid `ExternalThemeData`\n */\nexport async function requestExternalThemeData(): Promise<ExternalThemeData> {\n const result = await requestParentResponse(MSG_REQUEST_GET_THEME);\n\n if (!isExternalThemeData(result)) {\n throw new Error(\n `Unexpected external theme data response: ${JSON.stringify(result)}`\n );\n }\n\n return result;\n}\n\n/**\n * Make a copy of the given object replacing any css variable expressions\n * contained in its prop values with values resolved from the given HTML element.\n * Variables that resolve to color strings will also be normalized to 8 digit\n * hex values (or optionally 6 digit hex if `isAlphaOptional` is true).\n *\n * Note that the browser will force a reflow when calling `getComputedStyle` if\n * css properties have changed. In order to avoid a reflow for every property\n * check we use distinct setup, resolve / normalize, and cleanup passes:\n * 1. Setup - Create a tmp element and set all css props we want to evaluate\n * 2. Resolve / Normalize - Evaluate all css props via `getPropertyValue` calls\n * and replace the original expressions with resolved values. Also normalize\n * css colors to rgb/a.\n * 3. Cleanup - Remove the tmp element\n * @param record An object whose values may contain css var expressions\n * @param targetElement The element to resolve css variables against. Defaults\n * to document.body\n * @param isAlphaOptional If true, the alpha value will be dropped from resolved\n * 8 character hex colors if it is 'ff'. Defaults to false.\n */\nexport function resolveCssVariablesInRecord<T extends Record<string, string>>(\n record: T,\n targetElement: HTMLElement = document.body,\n isAlphaOptional = false\n): T {\n const perfStart = performance.now();\n\n // Add a temporary div to attach temp css variables to\n const tmpPropEl = document.createElement('div');\n tmpPropEl.style.display = 'none';\n\n const recordArray = Object.entries(record);\n recordArray.forEach(([, value], i) => {\n tmpPropEl.style.setProperty(`--${TMP_CSS_PROP_PREFIX}-${i}`, value);\n // faster to create these now all at once, even if we don't use them all\n // since the parent isn't added yet to the DOM\n const el = document.createElement('div');\n // use background color instead of color to avoid inherited values\n el.style.backgroundColor = value;\n tmpPropEl.appendChild(el);\n });\n\n // append only once to avoid multiple re-layouts\n // must be part of DOM to get computed color\n targetElement.appendChild(tmpPropEl);\n const tempPropElComputedStyle = window.getComputedStyle(tmpPropEl);\n\n const result = {} as T;\n recordArray.forEach(([key, value], i) => {\n // resolves any variables in the expression\n let resolved = tempPropElComputedStyle.getPropertyValue(\n `--${TMP_CSS_PROP_PREFIX}-${i}`\n );\n\n const containsCssVar = value.includes(CSS_VAR_EXPRESSION_PREFIX);\n const isColor = CSS.supports('color', resolved);\n\n if (\n // only try to normalize non-hex strings that are valid colors\n // otherwise non-colors will be made #00000000\n isColor &&\n !/^#[0-9A-F]{6}[0-9a-f]{0,2}$/i.test(resolved)\n ) {\n // getting the computed background color is necessary\n // because resolved can still contain a color-mix() function\n const el = tmpPropEl.children[i] as HTMLDivElement;\n const computedStyle = window.getComputedStyle(el);\n const color = computedStyle.getPropertyValue('background-color');\n // convert color to hex, which is what monaco and plotly require\n resolved = ColorUtils.normalizeCssColor(color, isAlphaOptional);\n }\n (result as Record<string, string>)[key] =\n containsCssVar || isColor ? resolved : value;\n });\n\n // Remove the temporary div\n tmpPropEl.remove();\n\n log.debug('Resolved css variables', performance.now() - perfStart, 'ms');\n\n return result;\n}\n\n/**\n * Resolve css variable expressions in the given string using the\n * given resolver and replace the original expressions with the resolved values.\n *\n * @param resolver Function that can resolve a css variable expression\n * @param value Value that may contain css variable expressions\n */\nexport function resolveCssVariablesInString(\n resolver: VarExpressionResolver,\n value: string\n): string {\n const result: string[] = [];\n let i = 0;\n getExpressionRanges(value).forEach(([start, end]) => {\n if (i < start) {\n result.push(value.substring(i, start));\n i += start - i;\n }\n\n const expression = value.substring(start, end + 1);\n\n result.push(\n expression.includes(CSS_VAR_EXPRESSION_PREFIX)\n ? resolver(expression)\n : expression\n );\n\n i += end - start + 1;\n });\n\n if (result.length === 0) {\n return value;\n }\n\n return result.join('');\n}\n\n/**\n * Store theme preload data in local storage.\n * @param preloadData The preload data to set\n */\nexport function setThemePreloadData(preloadData: ThemePreloadData): void {\n localStorage.setItem(\n THEME_CACHE_LOCAL_STORAGE_KEY,\n JSON.stringify(preloadData)\n );\n}\n\n/**\n * Preload minimal theme variables from the cache.\n * @defaultPreloadValues Optional default values to use if a preload variable is not set.\n */\nexport function preloadTheme(\n defaultPreloadValues: Record<string, string> = DEFAULT_PRELOAD_DATA_VARIABLES\n): void {\n // In certain cases we may want to preload a transparent theme to allow the\n // parent container to show through. For example, when a parent Window is\n // providing a theme via `postMessage` apis, we may not have enough information\n // to properly preload the theme, so we can just preload a transparent\n // theme and let the parent container show through until `postMessage`\n // communication is complete.\n if (isPreloadTransparentTheme()) {\n createPreloadStyleElement(\n 'theme-preload-transparent',\n calculatePreloadStyleContent(TRANSPARENT_PRELOAD_DATA_VARIABLES)\n );\n return;\n }\n\n const previousPreloadStyleContent =\n getThemePreloadData()?.preloadStyleContent;\n\n const defaultPreloadStyleContent =\n calculatePreloadStyleContent(defaultPreloadValues);\n\n log.debug('Preloading theme content:', {\n defaultPreloadStyleContent,\n previousPreloadStyleContent,\n });\n\n createPreloadStyleElement(\n 'theme-preload-defaults',\n defaultPreloadStyleContent\n );\n\n // Any preload variables that were saved by last theme load should override\n // the defaults\n if (previousPreloadStyleContent != null) {\n createPreloadStyleElement(\n 'theme-preload-previous',\n previousPreloadStyleContent\n );\n }\n}\n\n/**\n * Inline SVGs cannot depend on dynamic CSS variables, so we have to statically\n * update them if we want to change their color.\n *\n * This function:\n * 1. Clears any previous overrides\n * 2. Resolves CSS variables containing inline SVG urls\n * 3. Resolves mapped color variables and replaces the `fill='...'` attribute with the result\n * 4. Sets the original CSS variable to the new replaced value\n *\n * Note that it is preferable to use inline SVGs as background-mask values and\n * just change the background color instead of relying on this util, but this\n * is not always possible. e.g. <select> elements don't support pseudo elements,\n * so there's not a good way to set icons via masks.\n * @param defaultValues Default values to use if a variable is not set.\n */\nexport function overrideSVGFillColors(\n defaultValues: Record<string, string>\n): void {\n const resolveVar = createCssVariableResolver(document.body, defaultValues);\n\n Object.entries(SVG_ICON_MANUAL_COLOR_MAP).forEach(([key, value]) => {\n // Clear any previous override so that our variables get resolved against the\n // actual svg content provided by the active themes and not from a previous\n // override\n document.body.style.removeProperty(key);\n\n const svgContent = resolveVar(key as ThemeIconsRequiringManualColorChanges);\n const fillColor = resolveVar(value as ThemePreloadColorVariable);\n\n const newSVGContent = replaceSVGFillColor(svgContent, fillColor);\n\n // This will take precedence over any values for the variable provided by\n // the active themes\n document.body.style.setProperty(key, newSVGContent);\n });\n}\n"],"mappings":"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","ignoreList":[]}
@@ -1,3 +1,9 @@
1
+ function _slicedToArray(r, e) { return _arrayWithHoles(r) || _iterableToArrayLimit(r, e) || _unsupportedIterableToArray(r, e) || _nonIterableRest(); }
2
+ function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
3
+ function _unsupportedIterableToArray(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }
4
+ function _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }
5
+ function _iterableToArrayLimit(r, l) { var t = null == r ? null : "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (null != t) { var e, n, i, u, a = [], f = !0, o = !1; try { if (i = (t = t.call(r)).next, 0 === l) { if (Object(t) !== t) return; f = !1; } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0); } catch (r) { o = !0, n = r; } finally { try { if (!f && null != t.return && (u = t.return(), Object(u) !== u)) return; } finally { if (o) throw n; } } return a; } }
6
+ function _arrayWithHoles(r) { if (Array.isArray(r)) return r; }
1
7
  import { useCallback, useEffect, useState } from 'react';
2
8
  import Log from '@deephaven/log';
3
9
  import { getWindowParent } from '@deephaven/utils';
@@ -11,13 +17,16 @@ var logger = Log.module('useExternalTheme');
11
17
  * the parent and current Window to allow explicitly setting the theme.
12
18
  */
13
19
  export function useExternalTheme() {
14
- var [result, setResult] = useState(() => {
15
- var isEnabled = isExternalThemeEnabled();
16
- return {
17
- isEnabled,
18
- isPending: isEnabled
19
- };
20
- });
20
+ var _useState = useState(() => {
21
+ var isEnabled = isExternalThemeEnabled();
22
+ return {
23
+ isEnabled,
24
+ isPending: isEnabled
25
+ };
26
+ }),
27
+ _useState2 = _slicedToArray(_useState, 2),
28
+ result = _useState2[0],
29
+ setResult = _useState2[1];
21
30
 
22
31
  /** Parse external theme data and update the result */
23
32
  var handleExternalThemeData = useCallback(externalThemeData => {
@@ -1 +1 @@
1
- {"version":3,"file":"useExternalTheme.js","names":["useCallback","useEffect","useState","Log","getWindowParent","MSG_REQUEST_SET_THEME","isExternalThemeData","isExternalThemeEnabled","parseExternalThemeData","requestExternalThemeData","logger","module","useExternalTheme","result","setResult","isEnabled","isPending","handleExternalThemeData","externalThemeData","themeData","debug","onMessage","event","parent","source","window","data","message","payload","addEventListener","then","catch","err","error","removeEventListener"],"sources":["../../src/theme/useExternalTheme.ts"],"sourcesContent":["import { useCallback, useEffect, useState } from 'react';\nimport Log from '@deephaven/log';\nimport { getWindowParent, type PostMessage } from '@deephaven/utils';\nimport {\n MSG_REQUEST_SET_THEME,\n type ExternalThemeData,\n type ThemeData,\n} from './ThemeModel';\nimport {\n isExternalThemeData,\n isExternalThemeEnabled,\n parseExternalThemeData,\n requestExternalThemeData,\n} from './ThemeUtils';\n\nconst logger = Log.module('useExternalTheme');\nexport interface UseExternalThemeResult {\n isEnabled: boolean;\n isPending: boolean;\n themeData?: ThemeData;\n}\n\n/**\n * If external theme is configured via `theme=EXTERNAL_THEME_KEY` query param,\n * handle `postMessage` communication to retrieve the theme data from the parent\n * Window. The hook will also listen for `MSG_REQUEST_SET_THEME` messages from\n * the parent and current Window to allow explicitly setting the theme.\n */\nexport function useExternalTheme(): UseExternalThemeResult {\n const [result, setResult] = useState<UseExternalThemeResult>(() => {\n const isEnabled = isExternalThemeEnabled();\n return {\n isEnabled,\n isPending: isEnabled,\n };\n });\n\n /** Parse external theme data and update the result */\n const handleExternalThemeData = useCallback(\n (externalThemeData: ExternalThemeData) => {\n const themeData = parseExternalThemeData(externalThemeData);\n\n setResult({\n isEnabled: true,\n isPending: false,\n themeData,\n });\n },\n []\n );\n\n useEffect(() => {\n if (!result.isEnabled) {\n return;\n }\n\n logger.debug('Requesting external theme data');\n\n /** Parent or current Window can explicitly set the theme */\n function onMessage(event: MessageEvent<PostMessage<unknown>>): void {\n const parent = getWindowParent();\n\n // Allow messages from parent or current window\n if (event.source !== window && event.source !== parent) {\n return;\n }\n\n if (event.data.message === MSG_REQUEST_SET_THEME) {\n if (isExternalThemeData(event.data.payload)) {\n handleExternalThemeData(event.data.payload);\n }\n }\n }\n\n window.addEventListener('message', onMessage);\n\n /** Request initial theme data from parent window */\n requestExternalThemeData()\n .then(handleExternalThemeData)\n .catch(err => {\n logger.error(err);\n setResult({ isEnabled: true, isPending: false });\n });\n\n return () => {\n window.removeEventListener('message', onMessage);\n };\n }, [handleExternalThemeData, result.isEnabled]);\n\n return result;\n}\n\nexport default useExternalTheme;\n"],"mappings":"AAAA,SAASA,WAAW,EAAEC,SAAS,EAAEC,QAAQ,QAAQ,OAAO;AACxD,OAAOC,GAAG,MAAM,gBAAgB;AAChC,SAASC,eAAe,QAA0B,kBAAkB;AAAC,SAEnEC,qBAAqB;AAAA,SAKrBC,mBAAmB,EACnBC,sBAAsB,EACtBC,sBAAsB,EACtBC,wBAAwB;AAG1B,IAAMC,MAAM,GAAGP,GAAG,CAACQ,MAAM,CAAC,kBAAkB,CAAC;AAO7C;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,SAASC,gBAAgBA,CAAA,EAA2B;EACzD,IAAM,CAACC,MAAM,EAAEC,SAAS,CAAC,GAAGZ,QAAQ,CAAyB,MAAM;IACjE,IAAMa,SAAS,GAAGR,sBAAsB,CAAC,CAAC;IAC1C,OAAO;MACLQ,SAAS;MACTC,SAAS,EAAED;IACb,CAAC;EACH,CAAC,CAAC;;EAEF;EACA,IAAME,uBAAuB,GAAGjB,WAAW,CACxCkB,iBAAoC,IAAK;IACxC,IAAMC,SAAS,GAAGX,sBAAsB,CAACU,iBAAiB,CAAC;IAE3DJ,SAAS,CAAC;MACRC,SAAS,EAAE,IAAI;MACfC,SAAS,EAAE,KAAK;MAChBG;IACF,CAAC,CAAC;EACJ,CAAC,EACD,EACF,CAAC;EAEDlB,SAAS,CAAC,MAAM;IACd,IAAI,CAACY,MAAM,CAACE,SAAS,EAAE;MACrB;IACF;IAEAL,MAAM,CAACU,KAAK,CAAC,gCAAgC,CAAC;;IAE9C;IACA,SAASC,SAASA,CAACC,KAAyC,EAAQ;MAClE,IAAMC,MAAM,GAAGnB,eAAe,CAAC,CAAC;;MAEhC;MACA,IAAIkB,KAAK,CAACE,MAAM,KAAKC,MAAM,IAAIH,KAAK,CAACE,MAAM,KAAKD,MAAM,EAAE;QACtD;MACF;MAEA,IAAID,KAAK,CAACI,IAAI,CAACC,OAAO,KAAKtB,qBAAqB,EAAE;QAChD,IAAIC,mBAAmB,CAACgB,KAAK,CAACI,IAAI,CAACE,OAAO,CAAC,EAAE;UAC3CX,uBAAuB,CAACK,KAAK,CAACI,IAAI,CAACE,OAAO,CAAC;QAC7C;MACF;IACF;IAEAH,MAAM,CAACI,gBAAgB,CAAC,SAAS,EAAER,SAAS,CAAC;;IAE7C;IACAZ,wBAAwB,CAAC,CAAC,CACvBqB,IAAI,CAACb,uBAAuB,CAAC,CAC7Bc,KAAK,CAACC,GAAG,IAAI;MACZtB,MAAM,CAACuB,KAAK,CAACD,GAAG,CAAC;MACjBlB,SAAS,CAAC;QAAEC,SAAS,EAAE,IAAI;QAAEC,SAAS,EAAE;MAAM,CAAC,CAAC;IAClD,CAAC,CAAC;IAEJ,OAAO,MAAM;MACXS,MAAM,CAACS,mBAAmB,CAAC,SAAS,EAAEb,SAAS,CAAC;IAClD,CAAC;EACH,CAAC,EAAE,CAACJ,uBAAuB,EAAEJ,MAAM,CAACE,SAAS,CAAC,CAAC;EAE/C,OAAOF,MAAM;AACf;AAEA,eAAeD,gBAAgB","ignoreList":[]}
1
+ {"version":3,"file":"useExternalTheme.js","names":["useCallback","useEffect","useState","Log","getWindowParent","MSG_REQUEST_SET_THEME","isExternalThemeData","isExternalThemeEnabled","parseExternalThemeData","requestExternalThemeData","logger","module","useExternalTheme","_useState","isEnabled","isPending","_useState2","_slicedToArray","result","setResult","handleExternalThemeData","externalThemeData","themeData","debug","onMessage","event","parent","source","window","data","message","payload","addEventListener","then","catch","err","error","removeEventListener"],"sources":["../../src/theme/useExternalTheme.ts"],"sourcesContent":["import { useCallback, useEffect, useState } from 'react';\nimport Log from '@deephaven/log';\nimport { getWindowParent, type PostMessage } from '@deephaven/utils';\nimport {\n MSG_REQUEST_SET_THEME,\n type ExternalThemeData,\n type ThemeData,\n} from './ThemeModel';\nimport {\n isExternalThemeData,\n isExternalThemeEnabled,\n parseExternalThemeData,\n requestExternalThemeData,\n} from './ThemeUtils';\n\nconst logger = Log.module('useExternalTheme');\nexport interface UseExternalThemeResult {\n isEnabled: boolean;\n isPending: boolean;\n themeData?: ThemeData;\n}\n\n/**\n * If external theme is configured via `theme=EXTERNAL_THEME_KEY` query param,\n * handle `postMessage` communication to retrieve the theme data from the parent\n * Window. The hook will also listen for `MSG_REQUEST_SET_THEME` messages from\n * the parent and current Window to allow explicitly setting the theme.\n */\nexport function useExternalTheme(): UseExternalThemeResult {\n const [result, setResult] = useState<UseExternalThemeResult>(() => {\n const isEnabled = isExternalThemeEnabled();\n return {\n isEnabled,\n isPending: isEnabled,\n };\n });\n\n /** Parse external theme data and update the result */\n const handleExternalThemeData = useCallback(\n (externalThemeData: ExternalThemeData) => {\n const themeData = parseExternalThemeData(externalThemeData);\n\n setResult({\n isEnabled: true,\n isPending: false,\n themeData,\n });\n },\n []\n );\n\n useEffect(() => {\n if (!result.isEnabled) {\n return;\n }\n\n logger.debug('Requesting external theme data');\n\n /** Parent or current Window can explicitly set the theme */\n function onMessage(event: MessageEvent<PostMessage<unknown>>): void {\n const parent = getWindowParent();\n\n // Allow messages from parent or current window\n if (event.source !== window && event.source !== parent) {\n return;\n }\n\n if (event.data.message === MSG_REQUEST_SET_THEME) {\n if (isExternalThemeData(event.data.payload)) {\n handleExternalThemeData(event.data.payload);\n }\n }\n }\n\n window.addEventListener('message', onMessage);\n\n /** Request initial theme data from parent window */\n requestExternalThemeData()\n .then(handleExternalThemeData)\n .catch(err => {\n logger.error(err);\n setResult({ isEnabled: true, isPending: false });\n });\n\n return () => {\n window.removeEventListener('message', onMessage);\n };\n }, [handleExternalThemeData, result.isEnabled]);\n\n return result;\n}\n\nexport default useExternalTheme;\n"],"mappings":";;;;;;AAAA,SAASA,WAAW,EAAEC,SAAS,EAAEC,QAAQ,QAAQ,OAAO;AACxD,OAAOC,GAAG,MAAM,gBAAgB;AAChC,SAASC,eAAe,QAA0B,kBAAkB;AAAC,SAEnEC,qBAAqB;AAAA,SAKrBC,mBAAmB,EACnBC,sBAAsB,EACtBC,sBAAsB,EACtBC,wBAAwB;AAG1B,IAAMC,MAAM,GAAGP,GAAG,CAACQ,MAAM,CAAC,kBAAkB,CAAC;AAO7C;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,SAASC,gBAAgBA,CAAA,EAA2B;EACzD,IAAAC,SAAA,GAA4BX,QAAQ,CAAyB,MAAM;MACjE,IAAMY,SAAS,GAAGP,sBAAsB,CAAC,CAAC;MAC1C,OAAO;QACLO,SAAS;QACTC,SAAS,EAAED;MACb,CAAC;IACH,CAAC,CAAC;IAAAE,UAAA,GAAAC,cAAA,CAAAJ,SAAA;IANKK,MAAM,GAAAF,UAAA;IAAEG,SAAS,GAAAH,UAAA;;EAQxB;EACA,IAAMI,uBAAuB,GAAGpB,WAAW,CACxCqB,iBAAoC,IAAK;IACxC,IAAMC,SAAS,GAAGd,sBAAsB,CAACa,iBAAiB,CAAC;IAE3DF,SAAS,CAAC;MACRL,SAAS,EAAE,IAAI;MACfC,SAAS,EAAE,KAAK;MAChBO;IACF,CAAC,CAAC;EACJ,CAAC,EACD,EACF,CAAC;EAEDrB,SAAS,CAAC,MAAM;IACd,IAAI,CAACiB,MAAM,CAACJ,SAAS,EAAE;MACrB;IACF;IAEAJ,MAAM,CAACa,KAAK,CAAC,gCAAgC,CAAC;;IAE9C;IACA,SAASC,SAASA,CAACC,KAAyC,EAAQ;MAClE,IAAMC,MAAM,GAAGtB,eAAe,CAAC,CAAC;;MAEhC;MACA,IAAIqB,KAAK,CAACE,MAAM,KAAKC,MAAM,IAAIH,KAAK,CAACE,MAAM,KAAKD,MAAM,EAAE;QACtD;MACF;MAEA,IAAID,KAAK,CAACI,IAAI,CAACC,OAAO,KAAKzB,qBAAqB,EAAE;QAChD,IAAIC,mBAAmB,CAACmB,KAAK,CAACI,IAAI,CAACE,OAAO,CAAC,EAAE;UAC3CX,uBAAuB,CAACK,KAAK,CAACI,IAAI,CAACE,OAAO,CAAC;QAC7C;MACF;IACF;IAEAH,MAAM,CAACI,gBAAgB,CAAC,SAAS,EAAER,SAAS,CAAC;;IAE7C;IACAf,wBAAwB,CAAC,CAAC,CACvBwB,IAAI,CAACb,uBAAuB,CAAC,CAC7Bc,KAAK,CAACC,GAAG,IAAI;MACZzB,MAAM,CAAC0B,KAAK,CAACD,GAAG,CAAC;MACjBhB,SAAS,CAAC;QAAEL,SAAS,EAAE,IAAI;QAAEC,SAAS,EAAE;MAAM,CAAC,CAAC;IAClD,CAAC,CAAC;IAEJ,OAAO,MAAM;MACXa,MAAM,CAACS,mBAAmB,CAAC,SAAS,EAAEb,SAAS,CAAC;IAClD,CAAC;EACH,CAAC,EAAE,CAACJ,uBAAuB,EAAEF,MAAM,CAACJ,SAAS,CAAC,CAAC;EAE/C,OAAOI,MAAM;AACf;AAEA,eAAeN,gBAAgB","ignoreList":[]}
@@ -18,12 +18,11 @@ var DISPLAY_CONTENTS = {
18
18
  * Fade between two components. Defaults to 150ms transition.
19
19
  */
20
20
  function FadeTransition(_ref) {
21
- var {
22
- classNames: classNamesProp,
23
- timeout = ThemeExport.transitionMs,
24
- children,
25
- onEnter
26
- } = _ref,
21
+ var classNamesProp = _ref.classNames,
22
+ _ref$timeout = _ref.timeout,
23
+ timeout = _ref$timeout === void 0 ? ThemeExport.transitionMs : _ref$timeout,
24
+ children = _ref.children,
25
+ onEnter = _ref.onEnter,
27
26
  props = _objectWithoutProperties(_ref, _excluded);
28
27
  var nodeRef = useRef(null);
29
28
  var handleOnEnter = useCallback(isAppearing => {