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

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.
@@ -0,0 +1,26 @@
1
+ import React, { Component, ReactNode } from 'react';
2
+ export interface ErrorBoundaryProps {
3
+ /** Children to catch errors from */
4
+ children: ReactNode;
5
+ /** Classname to wrap the error message with */
6
+ className?: string;
7
+ /** Callback for when an error occurs */
8
+ onError?: (error: Error, errorInfo: React.ErrorInfo) => void;
9
+ /** Custom fallback element */
10
+ fallback?: ReactNode;
11
+ }
12
+ export interface ErrorBoundaryState {
13
+ error?: Error;
14
+ }
15
+ /**
16
+ * Error boundary for catching render errors in React. Displays an error message if an error is caught by default, or you can specify a fallback component to render.
17
+ * https://react.dev/reference/react/Component#catching-rendering-errors-with-an-error-boundary
18
+ */
19
+ export declare class ErrorBoundary extends Component<ErrorBoundaryProps, ErrorBoundaryState> {
20
+ static getDerivedStateFromError(error: Error): ErrorBoundaryState;
21
+ constructor(props: ErrorBoundaryProps);
22
+ componentDidCatch(error: Error, errorInfo: React.ErrorInfo): void;
23
+ render(): ReactNode;
24
+ }
25
+ export default ErrorBoundary;
26
+ //# sourceMappingURL=ErrorBoundary.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ErrorBoundary.d.ts","sourceRoot":"","sources":["../src/ErrorBoundary.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAKpD,MAAM,WAAW,kBAAkB;IACjC,oCAAoC;IACpC,QAAQ,EAAE,SAAS,CAAC;IAEpB,+CAA+C;IAC/C,SAAS,CAAC,EAAE,MAAM,CAAC;IAEnB,wCAAwC;IACxC,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,SAAS,EAAE,KAAK,CAAC,SAAS,KAAK,IAAI,CAAC;IAE7D,8BAA8B;IAC9B,QAAQ,CAAC,EAAE,SAAS,CAAC;CACtB;AAED,MAAM,WAAW,kBAAkB;IACjC,KAAK,CAAC,EAAE,KAAK,CAAC;CACf;AAED;;;GAGG;AACH,qBAAa,aAAc,SAAQ,SAAS,CAC1C,kBAAkB,EAClB,kBAAkB,CACnB;IACC,MAAM,CAAC,wBAAwB,CAAC,KAAK,EAAE,KAAK,GAAG,kBAAkB;gBAIrD,KAAK,EAAE,kBAAkB;IAKrC,iBAAiB,CAAC,KAAK,EAAE,KAAK,EAAE,SAAS,EAAE,KAAK,CAAC,SAAS,GAAG,IAAI;IAMjE,MAAM,IAAI,SAAS;CAoBpB;AAED,eAAe,aAAa,CAAC"}
@@ -0,0 +1,55 @@
1
+ import Log from '@deephaven/log';
2
+ import React, { Component } from 'react';
3
+ import LoadingOverlay from "./LoadingOverlay.js";
4
+ import { jsx as _jsx } from "react/jsx-runtime";
5
+ var log = Log.module('ErrorBoundary');
6
+ /**
7
+ * Error boundary for catching render errors in React. Displays an error message if an error is caught by default, or you can specify a fallback component to render.
8
+ * https://react.dev/reference/react/Component#catching-rendering-errors-with-an-error-boundary
9
+ */
10
+ export class ErrorBoundary extends Component {
11
+ static getDerivedStateFromError(error) {
12
+ return {
13
+ error
14
+ };
15
+ }
16
+ constructor(props) {
17
+ super(props);
18
+ this.state = {
19
+ error: undefined
20
+ };
21
+ }
22
+ componentDidCatch(error, errorInfo) {
23
+ var {
24
+ onError
25
+ } = this.props;
26
+ log.error('Error caught by ErrorBoundary', error, errorInfo);
27
+ onError === null || onError === void 0 ? void 0 : onError(error, errorInfo);
28
+ }
29
+ render() {
30
+ var {
31
+ children,
32
+ className,
33
+ fallback
34
+ } = this.props;
35
+ var {
36
+ error
37
+ } = this.state;
38
+ if (error != null) {
39
+ if (fallback != null) {
40
+ return fallback;
41
+ }
42
+ return /*#__PURE__*/_jsx("div", {
43
+ className: className,
44
+ children: /*#__PURE__*/_jsx(LoadingOverlay, {
45
+ errorMessage: "".concat(error),
46
+ isLoading: false,
47
+ isLoaded: false
48
+ })
49
+ });
50
+ }
51
+ return children;
52
+ }
53
+ }
54
+ export default ErrorBoundary;
55
+ //# sourceMappingURL=ErrorBoundary.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ErrorBoundary.js","names":["Log","React","Component","LoadingOverlay","jsx","_jsx","log","module","ErrorBoundary","getDerivedStateFromError","error","constructor","props","state","undefined","componentDidCatch","errorInfo","onError","render","children","className","fallback","errorMessage","concat","isLoading","isLoaded"],"sources":["../src/ErrorBoundary.tsx"],"sourcesContent":["import Log from '@deephaven/log';\nimport React, { Component, ReactNode } from 'react';\nimport LoadingOverlay from './LoadingOverlay';\n\nconst log = Log.module('ErrorBoundary');\n\nexport interface ErrorBoundaryProps {\n /** Children to catch errors from */\n children: ReactNode;\n\n /** Classname to wrap the error message with */\n className?: string;\n\n /** Callback for when an error occurs */\n onError?: (error: Error, errorInfo: React.ErrorInfo) => void;\n\n /** Custom fallback element */\n fallback?: ReactNode;\n}\n\nexport interface ErrorBoundaryState {\n error?: Error;\n}\n\n/**\n * Error boundary for catching render errors in React. Displays an error message if an error is caught by default, or you can specify a fallback component to render.\n * https://react.dev/reference/react/Component#catching-rendering-errors-with-an-error-boundary\n */\nexport class ErrorBoundary extends Component<\n ErrorBoundaryProps,\n ErrorBoundaryState\n> {\n static getDerivedStateFromError(error: Error): ErrorBoundaryState {\n return { error };\n }\n\n constructor(props: ErrorBoundaryProps) {\n super(props);\n this.state = { error: undefined };\n }\n\n componentDidCatch(error: Error, errorInfo: React.ErrorInfo): void {\n const { onError } = this.props;\n log.error('Error caught by ErrorBoundary', error, errorInfo);\n onError?.(error, errorInfo);\n }\n\n render(): ReactNode {\n const { children, className, fallback } = this.props;\n const { error } = this.state;\n if (error != null) {\n if (fallback != null) {\n return fallback;\n }\n\n return (\n <div className={className}>\n <LoadingOverlay\n errorMessage={`${error}`}\n isLoading={false}\n isLoaded={false}\n />\n </div>\n );\n }\n return children;\n }\n}\n\nexport default ErrorBoundary;\n"],"mappings":"AAAA,OAAOA,GAAG,MAAM,gBAAgB;AAChC,OAAOC,KAAK,IAAIC,SAAS,QAAmB,OAAO;AAAC,OAC7CC,cAAc;AAAA,SAAAC,GAAA,IAAAC,IAAA;AAErB,IAAMC,GAAG,GAAGN,GAAG,CAACO,MAAM,CAAC,eAAe,CAAC;AAoBvC;AACA;AACA;AACA;AACA,OAAO,MAAMC,aAAa,SAASN,SAAS,CAG1C;EACA,OAAOO,wBAAwBA,CAACC,KAAY,EAAsB;IAChE,OAAO;MAAEA;IAAM,CAAC;EAClB;EAEAC,WAAWA,CAACC,KAAyB,EAAE;IACrC,KAAK,CAACA,KAAK,CAAC;IACZ,IAAI,CAACC,KAAK,GAAG;MAAEH,KAAK,EAAEI;IAAU,CAAC;EACnC;EAEAC,iBAAiBA,CAACL,KAAY,EAAEM,SAA0B,EAAQ;IAChE,IAAM;MAAEC;IAAQ,CAAC,GAAG,IAAI,CAACL,KAAK;IAC9BN,GAAG,CAACI,KAAK,CAAC,+BAA+B,EAAEA,KAAK,EAAEM,SAAS,CAAC;IAC5DC,OAAO,aAAPA,OAAO,uBAAPA,OAAO,CAAGP,KAAK,EAAEM,SAAS,CAAC;EAC7B;EAEAE,MAAMA,CAAA,EAAc;IAClB,IAAM;MAAEC,QAAQ;MAAEC,SAAS;MAAEC;IAAS,CAAC,GAAG,IAAI,CAACT,KAAK;IACpD,IAAM;MAAEF;IAAM,CAAC,GAAG,IAAI,CAACG,KAAK;IAC5B,IAAIH,KAAK,IAAI,IAAI,EAAE;MACjB,IAAIW,QAAQ,IAAI,IAAI,EAAE;QACpB,OAAOA,QAAQ;MACjB;MAEA,oBACEhB,IAAA;QAAKe,SAAS,EAAEA,SAAU;QAAAD,QAAA,eACxBd,IAAA,CAACF,cAAc;UACbmB,YAAY,KAAAC,MAAA,CAAKb,KAAK,CAAG;UACzBc,SAAS,EAAE,KAAM;UACjBC,QAAQ,EAAE;QAAM,CACjB;MAAC,CACC,CAAC;IAEV;IACA,OAAON,QAAQ;EACjB;AACF;AAEA,eAAeX,aAAa"}
package/dist/index.d.ts CHANGED
@@ -22,6 +22,7 @@ export { default as DraggableItemList } from './DraggableItemList';
22
22
  export * from './DraggableItemList';
23
23
  export { default as DragUtils } from './DragUtils';
24
24
  export { default as EditableItemList } from './EditableItemList';
25
+ export * from './ErrorBoundary';
25
26
  export { default as HierarchicalCheckboxMenu } from './HierarchicalCheckboxMenu';
26
27
  export * from './HierarchicalCheckboxMenu';
27
28
  export * from './ItemList';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/dist/index.js CHANGED
@@ -21,6 +21,7 @@ export { default as DraggableItemList } from "./DraggableItemList.js";
21
21
  export * from "./DraggableItemList.js";
22
22
  export { default as DragUtils } from "./DragUtils.js";
23
23
  export { default as EditableItemList } from "./EditableItemList.js";
24
+ export * from "./ErrorBoundary.js";
24
25
  export { default as HierarchicalCheckboxMenu } from "./HierarchicalCheckboxMenu.js";
25
26
  export * from "./HierarchicalCheckboxMenu.js";
26
27
  export * from "./ItemList.js";
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":["default","AutoCompleteInput","AutoResizeTextarea","BasicModal","Button","ButtonGroup","ButtonOld","CardFlip","Collapse","Checkbox","ComboBox","CopyButton","CustomTimeSelect","DateTimeInput","DateInput","DebouncedSearchInput","DraggableItemList","DragUtils","EditableItemList","HierarchicalCheckboxMenu","ItemListItem","LoadingOverlay","LoadingSpinner","DropdownMenu","MaskedInput","Option","RadioGroup","RadioItem","RandomAreaPlotAnimation","Select","SearchInput","SelectValueList","SocketedButton","ThemeExport","TimeInput","TimeSlider","ToastNotification","UISwitch","ValidateLabelInput"],"sources":["../src/index.ts"],"sourcesContent":["export type { Range } from '@deephaven/utils';\nexport * from './actions';\nexport { default as AutoCompleteInput } from './AutoCompleteInput';\nexport { default as AutoResizeTextarea } from './AutoResizeTextarea';\nexport { default as BasicModal } from './BasicModal';\nexport { default as Button } from './Button';\nexport { default as ButtonGroup } from './ButtonGroup';\nexport { default as ButtonOld } from './ButtonOld';\nexport * from './BulkActionBar';\nexport { default as CardFlip } from './CardFlip';\nexport * from './context-actions';\nexport { default as Collapse } from './Collapse';\nexport { default as Checkbox } from './Checkbox';\nexport { default as ComboBox } from './ComboBox';\nexport { default as CopyButton } from './CopyButton';\nexport { default as CustomTimeSelect } from './CustomTimeSelect';\nexport { default as DateTimeInput } from './DateTimeInput';\nexport { default as DateInput } from './DateInput';\nexport { default as DebouncedSearchInput } from './DebouncedSearchInput';\nexport * from './dialogs';\nexport { default as DraggableItemList } from './DraggableItemList';\nexport * from './DraggableItemList';\nexport { default as DragUtils } from './DragUtils';\nexport { default as EditableItemList } from './EditableItemList';\nexport { default as HierarchicalCheckboxMenu } from './HierarchicalCheckboxMenu';\nexport * from './HierarchicalCheckboxMenu';\nexport * from './ItemList';\nexport { default as ItemListItem } from './ItemListItem';\nexport { default as LoadingOverlay } from './LoadingOverlay';\nexport { default as LoadingSpinner } from './LoadingSpinner';\nexport { default as DropdownMenu } from './menu-actions';\nexport * from './menu-actions';\nexport { default as MaskedInput } from './MaskedInput';\nexport * from './MaskedInput';\nexport * from './MaskedInputUtils';\nexport * from './navigation';\nexport { default as Option } from './Option';\nexport * from './popper';\nexport * from './modal';\nexport { default as RadioGroup } from './RadioGroup';\nexport { default as RadioItem } from './RadioItem';\nexport { default as RandomAreaPlotAnimation } from './RandomAreaPlotAnimation';\nexport * from './SearchableCombobox';\nexport { default as Select } from './Select';\nexport { default as SearchInput } from './SearchInput';\nexport { default as SelectValueList } from './SelectValueList';\nexport * from './SelectValueList';\nexport * from './shortcuts';\nexport { default as SocketedButton } from './SocketedButton';\nexport * from './SpectrumUtils';\nexport * from './TableViewEmptyState';\nexport * from './TextWithTooltip';\nexport * from './theme';\nexport { default as ThemeExport } from './ThemeExport';\nexport { default as TimeInput } from './TimeInput';\nexport { default as TimeSlider } from './TimeSlider';\nexport { default as ToastNotification } from './ToastNotification';\nexport { default as UISwitch } from './UISwitch';\nexport { default as ValidateLabelInput } from './ValidateLabelInput';\n"],"mappings":";SAESA,OAAO,IAAIC,iBAAiB;AAAA,SAC5BD,OAAO,IAAIE,kBAAkB;AAAA,SAC7BF,OAAO,IAAIG,UAAU;AAAA,SACrBH,OAAO,IAAII,MAAM;AAAA,SACjBJ,OAAO,IAAIK,WAAW;AAAA,SACtBL,OAAO,IAAIM,SAAS;AAAA;AAAA,SAEpBN,OAAO,IAAIO,QAAQ;AAAA;AAAA,SAEnBP,OAAO,IAAIQ,QAAQ;AAAA,SACnBR,OAAO,IAAIS,QAAQ;AAAA,SACnBT,OAAO,IAAIU,QAAQ;AAAA,SACnBV,OAAO,IAAIW,UAAU;AAAA,SACrBX,OAAO,IAAIY,gBAAgB;AAAA,SAC3BZ,OAAO,IAAIa,aAAa;AAAA,SACxBb,OAAO,IAAIc,SAAS;AAAA,SACpBd,OAAO,IAAIe,oBAAoB;AAAA;AAAA,SAE/Bf,OAAO,IAAIgB,iBAAiB;AAAA;AAAA,SAE5BhB,OAAO,IAAIiB,SAAS;AAAA,SACpBjB,OAAO,IAAIkB,gBAAgB;AAAA,SAC3BlB,OAAO,IAAImB,wBAAwB;AAAA;AAAA;AAAA,SAGnCnB,OAAO,IAAIoB,YAAY;AAAA,SACvBpB,OAAO,IAAIqB,cAAc;AAAA,SACzBrB,OAAO,IAAIsB,cAAc;AAAA,SACzBtB,OAAO,IAAIuB,YAAY;AAAA;AAAA,SAEvBvB,OAAO,IAAIwB,WAAW;AAAA;AAAA;AAAA;AAAA,SAItBxB,OAAO,IAAIyB,MAAM;AAAA;AAAA;AAAA,SAGjBzB,OAAO,IAAI0B,UAAU;AAAA,SACrB1B,OAAO,IAAI2B,SAAS;AAAA,SACpB3B,OAAO,IAAI4B,uBAAuB;AAAA;AAAA,SAElC5B,OAAO,IAAI6B,MAAM;AAAA,SACjB7B,OAAO,IAAI8B,WAAW;AAAA,SACtB9B,OAAO,IAAI+B,eAAe;AAAA;AAAA;AAAA,SAG1B/B,OAAO,IAAIgC,cAAc;AAAA;AAAA;AAAA;AAAA;AAAA,SAKzBhC,OAAO,IAAIiC,WAAW;AAAA,SACtBjC,OAAO,IAAIkC,SAAS;AAAA,SACpBlC,OAAO,IAAImC,UAAU;AAAA,SACrBnC,OAAO,IAAIoC,iBAAiB;AAAA,SAC5BpC,OAAO,IAAIqC,QAAQ;AAAA,SACnBrC,OAAO,IAAIsC,kBAAkB"}
1
+ {"version":3,"file":"index.js","names":["default","AutoCompleteInput","AutoResizeTextarea","BasicModal","Button","ButtonGroup","ButtonOld","CardFlip","Collapse","Checkbox","ComboBox","CopyButton","CustomTimeSelect","DateTimeInput","DateInput","DebouncedSearchInput","DraggableItemList","DragUtils","EditableItemList","HierarchicalCheckboxMenu","ItemListItem","LoadingOverlay","LoadingSpinner","DropdownMenu","MaskedInput","Option","RadioGroup","RadioItem","RandomAreaPlotAnimation","Select","SearchInput","SelectValueList","SocketedButton","ThemeExport","TimeInput","TimeSlider","ToastNotification","UISwitch","ValidateLabelInput"],"sources":["../src/index.ts"],"sourcesContent":["export type { Range } from '@deephaven/utils';\nexport * from './actions';\nexport { default as AutoCompleteInput } from './AutoCompleteInput';\nexport { default as AutoResizeTextarea } from './AutoResizeTextarea';\nexport { default as BasicModal } from './BasicModal';\nexport { default as Button } from './Button';\nexport { default as ButtonGroup } from './ButtonGroup';\nexport { default as ButtonOld } from './ButtonOld';\nexport * from './BulkActionBar';\nexport { default as CardFlip } from './CardFlip';\nexport * from './context-actions';\nexport { default as Collapse } from './Collapse';\nexport { default as Checkbox } from './Checkbox';\nexport { default as ComboBox } from './ComboBox';\nexport { default as CopyButton } from './CopyButton';\nexport { default as CustomTimeSelect } from './CustomTimeSelect';\nexport { default as DateTimeInput } from './DateTimeInput';\nexport { default as DateInput } from './DateInput';\nexport { default as DebouncedSearchInput } from './DebouncedSearchInput';\nexport * from './dialogs';\nexport { default as DraggableItemList } from './DraggableItemList';\nexport * from './DraggableItemList';\nexport { default as DragUtils } from './DragUtils';\nexport { default as EditableItemList } from './EditableItemList';\nexport * from './ErrorBoundary';\nexport { default as HierarchicalCheckboxMenu } from './HierarchicalCheckboxMenu';\nexport * from './HierarchicalCheckboxMenu';\nexport * from './ItemList';\nexport { default as ItemListItem } from './ItemListItem';\nexport { default as LoadingOverlay } from './LoadingOverlay';\nexport { default as LoadingSpinner } from './LoadingSpinner';\nexport { default as DropdownMenu } from './menu-actions';\nexport * from './menu-actions';\nexport { default as MaskedInput } from './MaskedInput';\nexport * from './MaskedInput';\nexport * from './MaskedInputUtils';\nexport * from './navigation';\nexport { default as Option } from './Option';\nexport * from './popper';\nexport * from './modal';\nexport { default as RadioGroup } from './RadioGroup';\nexport { default as RadioItem } from './RadioItem';\nexport { default as RandomAreaPlotAnimation } from './RandomAreaPlotAnimation';\nexport * from './SearchableCombobox';\nexport { default as Select } from './Select';\nexport { default as SearchInput } from './SearchInput';\nexport { default as SelectValueList } from './SelectValueList';\nexport * from './SelectValueList';\nexport * from './shortcuts';\nexport { default as SocketedButton } from './SocketedButton';\nexport * from './SpectrumUtils';\nexport * from './TableViewEmptyState';\nexport * from './TextWithTooltip';\nexport * from './theme';\nexport { default as ThemeExport } from './ThemeExport';\nexport { default as TimeInput } from './TimeInput';\nexport { default as TimeSlider } from './TimeSlider';\nexport { default as ToastNotification } from './ToastNotification';\nexport { default as UISwitch } from './UISwitch';\nexport { default as ValidateLabelInput } from './ValidateLabelInput';\n"],"mappings":";SAESA,OAAO,IAAIC,iBAAiB;AAAA,SAC5BD,OAAO,IAAIE,kBAAkB;AAAA,SAC7BF,OAAO,IAAIG,UAAU;AAAA,SACrBH,OAAO,IAAII,MAAM;AAAA,SACjBJ,OAAO,IAAIK,WAAW;AAAA,SACtBL,OAAO,IAAIM,SAAS;AAAA;AAAA,SAEpBN,OAAO,IAAIO,QAAQ;AAAA;AAAA,SAEnBP,OAAO,IAAIQ,QAAQ;AAAA,SACnBR,OAAO,IAAIS,QAAQ;AAAA,SACnBT,OAAO,IAAIU,QAAQ;AAAA,SACnBV,OAAO,IAAIW,UAAU;AAAA,SACrBX,OAAO,IAAIY,gBAAgB;AAAA,SAC3BZ,OAAO,IAAIa,aAAa;AAAA,SACxBb,OAAO,IAAIc,SAAS;AAAA,SACpBd,OAAO,IAAIe,oBAAoB;AAAA;AAAA,SAE/Bf,OAAO,IAAIgB,iBAAiB;AAAA;AAAA,SAE5BhB,OAAO,IAAIiB,SAAS;AAAA,SACpBjB,OAAO,IAAIkB,gBAAgB;AAAA;AAAA,SAE3BlB,OAAO,IAAImB,wBAAwB;AAAA;AAAA;AAAA,SAGnCnB,OAAO,IAAIoB,YAAY;AAAA,SACvBpB,OAAO,IAAIqB,cAAc;AAAA,SACzBrB,OAAO,IAAIsB,cAAc;AAAA,SACzBtB,OAAO,IAAIuB,YAAY;AAAA;AAAA,SAEvBvB,OAAO,IAAIwB,WAAW;AAAA;AAAA;AAAA;AAAA,SAItBxB,OAAO,IAAIyB,MAAM;AAAA;AAAA;AAAA,SAGjBzB,OAAO,IAAI0B,UAAU;AAAA,SACrB1B,OAAO,IAAI2B,SAAS;AAAA,SACpB3B,OAAO,IAAI4B,uBAAuB;AAAA;AAAA,SAElC5B,OAAO,IAAI6B,MAAM;AAAA,SACjB7B,OAAO,IAAI8B,WAAW;AAAA,SACtB9B,OAAO,IAAI+B,eAAe;AAAA;AAAA;AAAA,SAG1B/B,OAAO,IAAIgC,cAAc;AAAA;AAAA;AAAA;AAAA;AAAA,SAKzBhC,OAAO,IAAIiC,WAAW;AAAA,SACtBjC,OAAO,IAAIkC,SAAS;AAAA,SACpBlC,OAAO,IAAImC,UAAU;AAAA,SACrBnC,OAAO,IAAIoC,iBAAiB;AAAA,SAC5BpC,OAAO,IAAIqC,QAAQ;AAAA,SACnBrC,OAAO,IAAIsC,kBAAkB"}
@@ -0,0 +1,4 @@
1
+ /// <reference types="react" />
2
+ export declare function ThemePicker(): JSX.Element | null;
3
+ export default ThemePicker;
4
+ //# sourceMappingURL=ThemePicker.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ThemePicker.d.ts","sourceRoot":"","sources":["../../src/theme/ThemePicker.tsx"],"names":[],"mappings":";AAIA,wBAAgB,WAAW,IAAI,GAAG,CAAC,OAAO,GAAG,IAAI,CAoBhD;AAED,eAAe,WAAW,CAAC"}
@@ -0,0 +1,25 @@
1
+ import { useCallback } from 'react';
2
+ import { Item, Picker } from '@adobe/react-spectrum';
3
+ import useTheme from "./useTheme.js";
4
+ import { jsx as _jsx } from "react/jsx-runtime";
5
+ export function ThemePicker() {
6
+ var {
7
+ selectedThemeKey,
8
+ setSelectedThemeKey,
9
+ themes
10
+ } = useTheme();
11
+ var onSelectionChange = useCallback(key => {
12
+ setSelectedThemeKey(key);
13
+ }, [setSelectedThemeKey]);
14
+ return /*#__PURE__*/_jsx(Picker, {
15
+ label: "Pick a color scheme",
16
+ items: themes,
17
+ selectedKey: selectedThemeKey,
18
+ onSelectionChange: onSelectionChange,
19
+ children: item => /*#__PURE__*/_jsx(Item, {
20
+ children: item.name
21
+ }, item.themeKey)
22
+ });
23
+ }
24
+ export default ThemePicker;
25
+ //# sourceMappingURL=ThemePicker.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ThemePicker.js","names":["useCallback","Item","Picker","useTheme","jsx","_jsx","ThemePicker","selectedThemeKey","setSelectedThemeKey","themes","onSelectionChange","key","label","items","selectedKey","children","item","name","themeKey"],"sources":["../../src/theme/ThemePicker.tsx"],"sourcesContent":["import { Key, useCallback } from 'react';\nimport { Item, Picker } from '@adobe/react-spectrum';\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) => {\n setSelectedThemeKey(key as string);\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,SAAcA,WAAW,QAAQ,OAAO;AACxC,SAASC,IAAI,EAAEC,MAAM,QAAQ,uBAAuB;AAAC,OAC9CC,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,GAAQ,IAAK;IACZH,mBAAmB,CAACG,GAAa,CAAC;EACpC,CAAC,EACD,CAACH,mBAAmB,CACtB,CAAC;EAED,oBACEH,IAAA,CAACH,MAAM;IACLU,KAAK,EAAC,qBAAqB;IAC3BC,KAAK,EAAEJ,MAAO;IACdK,WAAW,EAAEP,gBAAiB;IAC9BG,iBAAiB,EAAEA,iBAAkB;IAAAK,QAAA,EAEpCC,IAAI,iBAAIX,IAAA,CAACJ,IAAI;MAAAc,QAAA,EAAsBC,IAAI,CAACC;IAAI,GAAzBD,IAAI,CAACE,QAA2B;EAAC,CAC/C,CAAC;AAEb;AAEA,eAAeZ,WAAW"}
@@ -4,6 +4,7 @@ import './theme-svg.scss';
4
4
  export interface ThemeContextValue {
5
5
  activeThemes: ThemeData[] | null;
6
6
  selectedThemeKey: string;
7
+ themes: ThemeData[];
7
8
  setSelectedThemeKey: (themeKey: string) => void;
8
9
  }
9
10
  export declare const ThemeContext: import("react").Context<ThemeContextValue | null>;
@@ -11,6 +12,6 @@ export interface ThemeProviderProps {
11
12
  themes: ThemeData[] | null;
12
13
  children: ReactNode;
13
14
  }
14
- export declare function ThemeProvider({ themes, children, }: ThemeProviderProps): JSX.Element;
15
+ export declare function ThemeProvider({ themes: customThemes, children, }: ThemeProviderProps): JSX.Element;
15
16
  export default ThemeProvider;
16
17
  //# sourceMappingURL=ThemeProvider.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"ThemeProvider.d.ts","sourceRoot":"","sources":["../../src/theme/ThemeProvider.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAiB,SAAS,EAAgC,MAAM,OAAO,CAAC;AAE/E,OAAO,EAA0B,SAAS,EAAE,MAAM,cAAc,CAAC;AAUjE,OAAO,kBAAkB,CAAC;AAE1B,MAAM,WAAW,iBAAiB;IAChC,YAAY,EAAE,SAAS,EAAE,GAAG,IAAI,CAAC;IACjC,gBAAgB,EAAE,MAAM,CAAC;IACzB,mBAAmB,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,IAAI,CAAC;CACjD;AAID,eAAO,MAAM,YAAY,mDAAgD,CAAC;AAE1E,MAAM,WAAW,kBAAkB;IAMjC,MAAM,EAAE,SAAS,EAAE,GAAG,IAAI,CAAC;IAC3B,QAAQ,EAAE,SAAS,CAAC;CACrB;AAED,wBAAgB,aAAa,CAAC,EAC5B,MAAM,EACN,QAAQ,GACT,EAAE,kBAAkB,GAAG,GAAG,CAAC,OAAO,CAsElC;AAED,eAAe,aAAa,CAAC"}
1
+ {"version":3,"file":"ThemeProvider.d.ts","sourceRoot":"","sources":["../../src/theme/ThemeProvider.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAiB,SAAS,EAAgC,MAAM,OAAO,CAAC;AAE/E,OAAO,EAA0B,SAAS,EAAE,MAAM,cAAc,CAAC;AAUjE,OAAO,kBAAkB,CAAC;AAE1B,MAAM,WAAW,iBAAiB;IAChC,YAAY,EAAE,SAAS,EAAE,GAAG,IAAI,CAAC;IACjC,gBAAgB,EAAE,MAAM,CAAC;IACzB,MAAM,EAAE,SAAS,EAAE,CAAC;IACpB,mBAAmB,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,IAAI,CAAC;CACjD;AAID,eAAO,MAAM,YAAY,mDAAgD,CAAC;AAE1E,MAAM,WAAW,kBAAkB;IAMjC,MAAM,EAAE,SAAS,EAAE,GAAG,IAAI,CAAC;IAC3B,QAAQ,EAAE,SAAS,CAAC;CACrB;AAED,wBAAgB,aAAa,CAAC,EAC5B,MAAM,EAAE,YAAY,EACpB,QAAQ,GACT,EAAE,kBAAkB,GAAG,GAAG,CAAC,OAAO,CA4ElC;AAED,eAAe,aAAa,CAAC"}
@@ -11,7 +11,7 @@ var log = Log.module('ThemeProvider');
11
11
  export var ThemeContext = /*#__PURE__*/createContext(null);
12
12
  export function ThemeProvider(_ref) {
13
13
  var {
14
- themes,
14
+ themes: customThemes,
15
15
  children
16
16
  } = _ref;
17
17
  var baseThemes = useMemo(() => getDefaultBaseThemes(), []);
@@ -21,13 +21,14 @@ export function ThemeProvider(_ref) {
21
21
  });
22
22
 
23
23
  // Calculate active themes once a non-null themes array is provided.
24
- var activeThemes = useMemo(() => themes == null ? null : getActiveThemes(selectedThemeKey, {
24
+ var activeThemes = useMemo(() => customThemes == null ? null : getActiveThemes(selectedThemeKey, {
25
25
  base: baseThemes,
26
- custom: themes !== null && themes !== void 0 ? themes : []
27
- }), [baseThemes, selectedThemeKey, themes]);
26
+ custom: customThemes !== null && customThemes !== void 0 ? customThemes : []
27
+ }), [baseThemes, selectedThemeKey, customThemes]);
28
+ var themes = useMemo(() => [...baseThemes, ...(customThemes !== null && customThemes !== void 0 ? customThemes : [])], [baseThemes, customThemes]);
28
29
  useEffect(function updateThemePreloadData() {
29
30
  // Don't update preload data until themes have been loaded and activated
30
- if (activeThemes == null || themes == null) {
31
+ if (activeThemes == null || customThemes == null) {
31
32
  return;
32
33
  }
33
34
 
@@ -37,7 +38,7 @@ export function ThemeProvider(_ref) {
37
38
  var preloadStyleContent = calculatePreloadStyleContent();
38
39
  log.debug2('updateThemePreloadData:', {
39
40
  active: activeThemes.map(theme => theme.themeKey),
40
- all: themes.map(theme => theme.themeKey),
41
+ custom: customThemes.map(theme => theme.themeKey),
41
42
  preloadStyleContent,
42
43
  selectedThemeKey
43
44
  });
@@ -45,12 +46,13 @@ export function ThemeProvider(_ref) {
45
46
  themeKey: selectedThemeKey,
46
47
  preloadStyleContent
47
48
  });
48
- }, [activeThemes, selectedThemeKey, themes]);
49
+ }, [activeThemes, selectedThemeKey, customThemes]);
49
50
  var value = useMemo(() => ({
50
51
  activeThemes,
51
52
  selectedThemeKey,
53
+ themes,
52
54
  setSelectedThemeKey
53
- }), [activeThemes, selectedThemeKey]);
55
+ }), [activeThemes, selectedThemeKey, themes]);
54
56
  return /*#__PURE__*/_jsxs(ThemeContext.Provider, {
55
57
  value: value,
56
58
  children: [activeThemes == null ? null : /*#__PURE__*/_jsx(_Fragment, {
@@ -1 +1 @@
1
- {"version":3,"file":"ThemeProvider.js","names":["createContext","useEffect","useMemo","useState","Log","DEFAULT_DARK_THEME_KEY","calculatePreloadStyleContent","getActiveThemes","getDefaultBaseThemes","getThemePreloadData","setThemePreloadData","overrideSVGFillColors","SpectrumThemeProvider","jsx","_jsx","Fragment","_Fragment","jsxs","_jsxs","log","module","ThemeContext","ThemeProvider","_ref","themes","children","baseThemes","selectedThemeKey","setSelectedThemeKey","_getThemePreloadData$","_getThemePreloadData","themeKey","activeThemes","base","custom","updateThemePreloadData","preloadStyleContent","debug2","active","map","theme","all","value","Provider","styleContent"],"sources":["../../src/theme/ThemeProvider.tsx"],"sourcesContent":["import { createContext, ReactNode, useEffect, useMemo, useState } from 'react';\nimport Log from '@deephaven/log';\nimport { DEFAULT_DARK_THEME_KEY, ThemeData } from './ThemeModel';\nimport {\n calculatePreloadStyleContent,\n getActiveThemes,\n getDefaultBaseThemes,\n getThemePreloadData,\n setThemePreloadData,\n overrideSVGFillColors,\n} from './ThemeUtils';\nimport { SpectrumThemeProvider } from './SpectrumThemeProvider';\nimport './theme-svg.scss';\n\nexport interface ThemeContextValue {\n activeThemes: ThemeData[] | null;\n selectedThemeKey: string;\n setSelectedThemeKey: (themeKey: string) => void;\n}\n\nconst log = Log.module('ThemeProvider');\n\nexport const ThemeContext = createContext<ThemeContextValue | null>(null);\n\nexport interface ThemeProviderProps {\n /*\n * Additional themes to load in addition to the base themes. If no additional\n * themes are to be loaded, this must be set to an empty array in order to\n * tell the provider to activate the base themes.\n */\n themes: ThemeData[] | null;\n children: ReactNode;\n}\n\nexport function ThemeProvider({\n themes,\n children,\n}: ThemeProviderProps): JSX.Element {\n const baseThemes = useMemo(() => getDefaultBaseThemes(), []);\n\n const [selectedThemeKey, setSelectedThemeKey] = useState<string>(\n () => getThemePreloadData()?.themeKey ?? DEFAULT_DARK_THEME_KEY\n );\n\n // Calculate active themes once a non-null themes array is provided.\n const activeThemes = useMemo(\n () =>\n themes == null\n ? null\n : getActiveThemes(selectedThemeKey, {\n base: baseThemes,\n custom: themes ?? [],\n }),\n [baseThemes, selectedThemeKey, themes]\n );\n\n useEffect(\n function updateThemePreloadData() {\n // Don't update preload data until themes have been loaded and activated\n if (activeThemes == null || themes == null) {\n return;\n }\n\n // Override fill color for certain inline SVGs (the originals are provided\n // by theme-svg.scss)\n overrideSVGFillColors();\n\n const preloadStyleContent = calculatePreloadStyleContent();\n\n log.debug2('updateThemePreloadData:', {\n active: activeThemes.map(theme => theme.themeKey),\n all: themes.map(theme => theme.themeKey),\n preloadStyleContent,\n selectedThemeKey,\n });\n\n setThemePreloadData({\n themeKey: selectedThemeKey,\n preloadStyleContent,\n });\n },\n [activeThemes, selectedThemeKey, themes]\n );\n\n const value = useMemo(\n () => ({\n activeThemes,\n selectedThemeKey,\n setSelectedThemeKey,\n }),\n [activeThemes, selectedThemeKey]\n );\n\n return (\n <ThemeContext.Provider value={value}>\n {activeThemes == null ? null : (\n <>\n {activeThemes.map(theme => (\n <style data-theme-key={theme.themeKey} key={theme.themeKey}>\n {theme.styleContent}\n </style>\n ))}\n </>\n )}\n <SpectrumThemeProvider>{children}</SpectrumThemeProvider>\n </ThemeContext.Provider>\n );\n}\n\nexport default ThemeProvider;\n"],"mappings":"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"}
1
+ {"version":3,"file":"ThemeProvider.js","names":["createContext","useEffect","useMemo","useState","Log","DEFAULT_DARK_THEME_KEY","calculatePreloadStyleContent","getActiveThemes","getDefaultBaseThemes","getThemePreloadData","setThemePreloadData","overrideSVGFillColors","SpectrumThemeProvider","jsx","_jsx","Fragment","_Fragment","jsxs","_jsxs","log","module","ThemeContext","ThemeProvider","_ref","themes","customThemes","children","baseThemes","selectedThemeKey","setSelectedThemeKey","_getThemePreloadData$","_getThemePreloadData","themeKey","activeThemes","base","custom","updateThemePreloadData","preloadStyleContent","debug2","active","map","theme","value","Provider","styleContent"],"sources":["../../src/theme/ThemeProvider.tsx"],"sourcesContent":["import { createContext, ReactNode, useEffect, useMemo, useState } from 'react';\nimport Log from '@deephaven/log';\nimport { DEFAULT_DARK_THEME_KEY, ThemeData } from './ThemeModel';\nimport {\n calculatePreloadStyleContent,\n getActiveThemes,\n getDefaultBaseThemes,\n getThemePreloadData,\n setThemePreloadData,\n overrideSVGFillColors,\n} from './ThemeUtils';\nimport { SpectrumThemeProvider } from './SpectrumThemeProvider';\nimport './theme-svg.scss';\n\nexport interface ThemeContextValue {\n activeThemes: ThemeData[] | null;\n selectedThemeKey: string;\n themes: ThemeData[];\n setSelectedThemeKey: (themeKey: string) => void;\n}\n\nconst log = Log.module('ThemeProvider');\n\nexport const ThemeContext = createContext<ThemeContextValue | null>(null);\n\nexport interface ThemeProviderProps {\n /*\n * Additional themes to load in addition to the base themes. If no additional\n * themes are to be loaded, this must be set to an empty array in order to\n * tell the provider to activate the base themes.\n */\n themes: ThemeData[] | null;\n children: ReactNode;\n}\n\nexport function ThemeProvider({\n themes: customThemes,\n children,\n}: ThemeProviderProps): JSX.Element {\n const baseThemes = useMemo(() => getDefaultBaseThemes(), []);\n\n const [selectedThemeKey, setSelectedThemeKey] = useState<string>(\n () => getThemePreloadData()?.themeKey ?? DEFAULT_DARK_THEME_KEY\n );\n\n // Calculate active themes once a non-null themes array is provided.\n const activeThemes = useMemo(\n () =>\n 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();\n\n const preloadStyleContent = calculatePreloadStyleContent();\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]\n );\n\n const value = useMemo(\n () => ({\n activeThemes,\n selectedThemeKey,\n themes,\n setSelectedThemeKey,\n }),\n [activeThemes, selectedThemeKey, themes]\n );\n\n return (\n <ThemeContext.Provider value={value}>\n {activeThemes == null ? null : (\n <>\n {activeThemes.map(theme => (\n <style data-theme-key={theme.themeKey} key={theme.themeKey}>\n {theme.styleContent}\n </style>\n ))}\n </>\n )}\n <SpectrumThemeProvider>{children}</SpectrumThemeProvider>\n </ThemeContext.Provider>\n );\n}\n\nexport default ThemeProvider;\n"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"ThemeUtils.d.ts","sourceRoot":"","sources":["../../src/theme/ThemeUtils.ts"],"names":[],"mappings":"AAgBA,OAAO,EAIL,SAAS,EACT,gBAAgB,EAChB,uBAAuB,EAEvB,qBAAqB,EAGrB,oBAAoB,EAErB,MAAM,cAAc,CAAC;AAItB,eAAO,MAAM,yBAAyB,WAAW,CAAC;AAClD,eAAO,MAAM,mBAAmB,WAAW,CAAC;AAC5C,eAAO,MAAM,oBAAoB,QAAO,CAAC;AACzC,eAAO,MAAM,gBAAgB,QAAO,CAAC;AAErC,MAAM,MAAM,qBAAqB,GAAG,CAAC,aAAa,EAAE,MAAM,KAAK,MAAM,CAAC;AAEtE;;;;;GAKG;AACH,wBAAgB,4BAA4B,IAAI,uBAAuB,CAUtE;AAED;;;;;;GAMG;AACH,wBAAgB,yBAAyB,CACvC,EAAE,EAAE,OAAO,GACV,CAAC,OAAO,EAAE,oBAAoB,KAAK,MAAM,CAkB3C;AAED;;;;GAIG;AACH,wBAAgB,qCAAqC,CACnD,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAC7B,GAAG,CAAC,MAAM,CAAC,CAcb;AAED;;;GAGG;AACH,wBAAgB,eAAe,CAC7B,QAAQ,EAAE,MAAM,EAChB,iBAAiB,EAAE,qBAAqB,GACvC,CAAC,SAAS,CAAC,GAAG,CAAC,SAAS,EAAE,SAAS,CAAC,CA+BtC;AAED;;GAEG;AACH,wBAAgB,oBAAoB,IAAI,SAAS,EAAE,CAalD;AAED;;;GAGG;AACH,wBAAgB,mBAAmB,IAAI,gBAAgB,GAAG,IAAI,CAU7D;AAED;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,MAAM,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,CAiCrE;AAED;;;;;GAKG;AACH,wBAAgB,mBAAmB,CACjC,UAAU,EAAE,MAAM,EAClB,SAAS,EAAE,MAAM,GAChB,MAAM,CAKR;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,2BAA2B,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAC1E,MAAM,EAAE,CAAC,EACT,aAAa,GAAE,WAA2B,GACzC,CAAC,CA2CH;AAED;;;;;;GAMG;AACH,wBAAgB,2BAA2B,CACzC,QAAQ,EAAE,qBAAqB,EAC/B,KAAK,EAAE,MAAM,GACZ,MAAM,CAyBR;AAED;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,WAAW,EAAE,gBAAgB,GAAG,IAAI,CAKvE;AAED;;;;GAIG;AACH,wBAAgB,WAAW,CAAC,UAAU,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM,CAEzE;AAED;;GAEG;AACH,wBAAgB,YAAY,IAAI,IAAI,CAUnC;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,qBAAqB,IAAI,IAAI,CAkB5C"}
1
+ {"version":3,"file":"ThemeUtils.d.ts","sourceRoot":"","sources":["../../src/theme/ThemeUtils.ts"],"names":[],"mappings":"AAGA,OAAO,EAGL,SAAS,EACT,gBAAgB,EAChB,uBAAuB,EAEvB,qBAAqB,EAGrB,oBAAoB,EAErB,MAAM,cAAc,CAAC;AAItB,eAAO,MAAM,yBAAyB,WAAW,CAAC;AAClD,eAAO,MAAM,mBAAmB,WAAW,CAAC;AAC5C,eAAO,MAAM,oBAAoB,QAAO,CAAC;AACzC,eAAO,MAAM,gBAAgB,QAAO,CAAC;AAErC,MAAM,MAAM,qBAAqB,GAAG,CAAC,aAAa,EAAE,MAAM,KAAK,MAAM,CAAC;AAEtE;;;;;GAKG;AACH,wBAAgB,4BAA4B,IAAI,uBAAuB,CAUtE;AAED;;;;;;GAMG;AACH,wBAAgB,yBAAyB,CACvC,EAAE,EAAE,OAAO,GACV,CAAC,OAAO,EAAE,oBAAoB,KAAK,MAAM,CAkB3C;AAED;;;;GAIG;AACH,wBAAgB,qCAAqC,CACnD,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAC7B,GAAG,CAAC,MAAM,CAAC,CAcb;AAED;;;GAGG;AACH,wBAAgB,eAAe,CAC7B,QAAQ,EAAE,MAAM,EAChB,iBAAiB,EAAE,qBAAqB,GACvC,CAAC,SAAS,CAAC,GAAG,CAAC,SAAS,EAAE,SAAS,CAAC,CA+BtC;AAED;;GAEG;AACH,wBAAgB,oBAAoB,IAAI,SAAS,EAAE,CAgBlD;AAED;;;GAGG;AACH,wBAAgB,mBAAmB,IAAI,gBAAgB,GAAG,IAAI,CAU7D;AAED;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,MAAM,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,CAiCrE;AAED;;;;;GAKG;AACH,wBAAgB,mBAAmB,CACjC,UAAU,EAAE,MAAM,EAClB,SAAS,EAAE,MAAM,GAChB,MAAM,CAKR;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,2BAA2B,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAC1E,MAAM,EAAE,CAAC,EACT,aAAa,GAAE,WAA2B,GACzC,CAAC,CA2CH;AAED;;;;;;GAMG;AACH,wBAAgB,2BAA2B,CACzC,QAAQ,EAAE,qBAAqB,EAC/B,KAAK,EAAE,MAAM,GACZ,MAAM,CAyBR;AAED;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,WAAW,EAAE,gBAAgB,GAAG,IAAI,CAKvE;AAED;;;;GAIG;AACH,wBAAgB,WAAW,CAAC,UAAU,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM,CAEzE;AAED;;GAEG;AACH,wBAAgB,YAAY,IAAI,IAAI,CAWnC;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,qBAAqB,IAAI,IAAI,CAkB5C"}
@@ -1,20 +1,7 @@
1
1
  import Log from '@deephaven/log';
2
2
  import { assertNotNull, ColorUtils } from '@deephaven/utils';
3
- // Note that ?inline imports are natively supported by Vite, but consumers of
4
- // @deephaven/components using Webpack will need to add a rule to their module
5
- // config.
6
- // e.g.
7
- // module: {
8
- // rules: [
9
- // {
10
- // resourceQuery: /inline/,
11
- // type: 'asset/source',
12
- // },
13
- // ],
14
- // },
15
3
  import { themeDark } from "./theme-dark/index.js";
16
- import { themeLight } from "./theme-light/index.js";
17
- import { DEFAULT_DARK_THEME_KEY, DEFAULT_LIGHT_THEME_KEY, DEFAULT_PRELOAD_DATA_VARIABLES, THEME_CACHE_LOCAL_STORAGE_KEY, SVG_ICON_MANUAL_COLOR_MAP } from "./ThemeModel.js";
4
+ import { DEFAULT_DARK_THEME_KEY, DEFAULT_PRELOAD_DATA_VARIABLES, THEME_CACHE_LOCAL_STORAGE_KEY, SVG_ICON_MANUAL_COLOR_MAP } from "./ThemeModel.js";
18
5
  var log = Log.module('ThemeUtils');
19
6
  export var CSS_VAR_EXPRESSION_PREFIX = 'var(--';
20
7
  export var TMP_CSS_PROP_PREFIX = 'dh-tmp';
@@ -104,11 +91,16 @@ export function getDefaultBaseThemes() {
104
91
  name: 'Default Dark',
105
92
  themeKey: DEFAULT_DARK_THEME_KEY,
106
93
  styleContent: themeDark
107
- }, {
108
- name: 'Default Light',
109
- themeKey: DEFAULT_LIGHT_THEME_KEY,
110
- styleContent: themeLight
111
- }];
94
+ }
95
+ // The ThemePicker shows whenever more than 1 theme is available. Disable
96
+ // light theme for now to keep the picker hidden until it is fully
97
+ // implemented by #1539.
98
+ // {
99
+ // name: 'Default Light',
100
+ // themeKey: DEFAULT_LIGHT_THEME_KEY,
101
+ // styleContent: themeLight,
102
+ // },
103
+ ];
112
104
  }
113
105
 
114
106
  /**
@@ -290,6 +282,7 @@ export function preloadTheme() {
290
282
  var preloadStyleContent = (_getThemePreloadData$ = (_getThemePreloadData = getThemePreloadData()) === null || _getThemePreloadData === void 0 ? void 0 : _getThemePreloadData.preloadStyleContent) !== null && _getThemePreloadData$ !== void 0 ? _getThemePreloadData$ : calculatePreloadStyleContent();
291
283
  log.debug('Preloading theme content:', "'".concat(preloadStyleContent, "'"));
292
284
  var style = document.createElement('style');
285
+ style.id = 'theme-preload';
293
286
  style.innerHTML = preloadStyleContent;
294
287
  document.head.appendChild(style);
295
288
  }
@@ -1 +1 @@
1
- {"version":3,"file":"ThemeUtils.js","names":["Log","assertNotNull","ColorUtils","themeDark","themeLight","DEFAULT_DARK_THEME_KEY","DEFAULT_LIGHT_THEME_KEY","DEFAULT_PRELOAD_DATA_VARIABLES","THEME_CACHE_LOCAL_STORAGE_KEY","SVG_ICON_MANUAL_COLOR_MAP","log","module","CSS_VAR_EXPRESSION_PREFIX","TMP_CSS_PROP_PREFIX","NON_WHITESPACE_REGEX","WHITESPACE_REGEX","calculatePreloadStyleContent","resolveVar","createCssVariableResolver","document","body","pairs","Object","keys","map","key","concat","join","el","computedStyle","getComputedStyle","cssVariableResolver","varName","_DEFAULT_PRELOAD_DATA","value","getPropertyValue","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","getThemePreloadData","data","localStorage","getItem","JSON","parse","_unused","_NON_WHITESPACE_REGEX","_NON_WHITESPACE_REGEX2","ranges","exec","index","parenLevel","i","length","test","push","replaceSVGFillColor","svgContent","fillColor","replace","encodeURIComponent","resolveCssVariablesInRecord","targetElement","arguments","undefined","perfStart","performance","now","tmpPropEl","createElement","appendChild","varExpressions","varExpression","tmpPropKey","style","setProperty","result","window","resolver","indexOf","resolved","normalizeCssColor","entries","_ref2","resolveCssVariablesInString","remove","_ref3","setThemePreloadData","preloadData","setItem","stringify","getThemeKey","pluginName","themeName","preloadTheme","_getThemePreloadData$","_getThemePreloadData","preloadStyleContent","innerHTML","head","overrideSVGFillColors","_ref4","removeProperty","newSVGContent"],"sources":["../../src/theme/ThemeUtils.ts"],"sourcesContent":["import Log from '@deephaven/log';\nimport { assertNotNull, ColorUtils } from '@deephaven/utils';\n// Note that ?inline imports are natively supported by Vite, but consumers of\n// @deephaven/components using Webpack will need to add a rule to their module\n// config.\n// e.g.\n// module: {\n// rules: [\n// {\n// resourceQuery: /inline/,\n// type: 'asset/source',\n// },\n// ],\n// },\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 ThemeData,\n ThemePreloadData,\n CssVariableStyleContent,\n ThemePreloadColorVariable,\n ThemeRegistrationData,\n THEME_CACHE_LOCAL_STORAGE_KEY,\n SVG_ICON_MANUAL_COLOR_MAP,\n ThemeCssVariableName,\n ThemeIconsRequiringManualColorChanges,\n} from './ThemeModel';\n\nconst log = Log.module('ThemeUtils');\n\nexport const CSS_VAR_EXPRESSION_PREFIX = 'var(--';\nexport const TMP_CSS_PROP_PREFIX = 'dh-tmp';\nexport const NON_WHITESPACE_REGEX = /\\S/;\nexport const WHITESPACE_REGEX = /\\s/;\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 */\nexport function calculatePreloadStyleContent(): CssVariableStyleContent {\n const resolveVar = createCssVariableResolver(document.body);\n\n // Calculate the current preload variables. If the variable is not set, use\n // the default value.\n const pairs = Object.keys(DEFAULT_PRELOAD_DATA_VARIABLES).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 * DEFAULT_PRELOAD_DATA_VARIABLES for a default value, and if one does not exist,\n * return ''.\n * @param el Element to resolve css variables against\n */\nexport function createCssVariableResolver(\n el: Element\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 (\n DEFAULT_PRELOAD_DATA_VARIABLES[varName as ThemePreloadColorVariable] ?? ''\n );\n };\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 {\n name: 'Default Light',\n themeKey: DEFAULT_LIGHT_THEME_KEY,\n styleContent: themeLight,\n },\n ];\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 * 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 * 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 rgb or\n * rgba color strings.\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 */\nexport function resolveCssVariablesInRecord<T extends Record<string, string>>(\n record: T,\n targetElement: HTMLElement = document.body\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 targetElement.appendChild(tmpPropEl);\n\n const varExpressions = [...extractDistinctCssVariableExpressions(record)];\n\n // Set temporary css variables for resolving var expressions\n varExpressions.forEach((varExpression, i) => {\n const tmpPropKey = `--${TMP_CSS_PROP_PREFIX}-${i}`;\n tmpPropEl.style.setProperty(tmpPropKey, varExpression);\n });\n\n const result = {} as T;\n\n const computedStyle = window.getComputedStyle(tmpPropEl);\n\n const resolver = (varExpression: string): string => {\n const tmpPropKey = `--${TMP_CSS_PROP_PREFIX}-${varExpressions.indexOf(\n varExpression\n )}`;\n\n const resolved = computedStyle.getPropertyValue(tmpPropKey);\n\n return ColorUtils.normalizeCssColor(resolved);\n };\n\n // Resolve the temporary css variables\n Object.entries(record).forEach(([key, value]) => {\n result[key as keyof T] = resolveCssVariablesInString(\n resolver,\n value\n ) as T[keyof T];\n });\n\n // Remove the temporary css variables\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 * 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 * Preload minimal theme variables from the cache.\n */\nexport function preloadTheme(): void {\n const preloadStyleContent =\n getThemePreloadData()?.preloadStyleContent ??\n calculatePreloadStyleContent();\n\n log.debug('Preloading theme content:', `'${preloadStyleContent}'`);\n\n const style = document.createElement('style');\n style.innerHTML = preloadStyleContent;\n document.head.appendChild(style);\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 */\nexport function overrideSVGFillColors(): void {\n const resolveVar = createCssVariableResolver(document.body);\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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"}
1
+ {"version":3,"file":"ThemeUtils.js","names":["Log","assertNotNull","ColorUtils","themeDark","DEFAULT_DARK_THEME_KEY","DEFAULT_PRELOAD_DATA_VARIABLES","THEME_CACHE_LOCAL_STORAGE_KEY","SVG_ICON_MANUAL_COLOR_MAP","log","module","CSS_VAR_EXPRESSION_PREFIX","TMP_CSS_PROP_PREFIX","NON_WHITESPACE_REGEX","WHITESPACE_REGEX","calculatePreloadStyleContent","resolveVar","createCssVariableResolver","document","body","pairs","Object","keys","map","key","concat","join","el","computedStyle","getComputedStyle","cssVariableResolver","varName","_DEFAULT_PRELOAD_DATA","value","getPropertyValue","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","getThemePreloadData","data","localStorage","getItem","JSON","parse","_unused","_NON_WHITESPACE_REGEX","_NON_WHITESPACE_REGEX2","ranges","exec","index","parenLevel","i","length","test","push","replaceSVGFillColor","svgContent","fillColor","replace","encodeURIComponent","resolveCssVariablesInRecord","targetElement","arguments","undefined","perfStart","performance","now","tmpPropEl","createElement","appendChild","varExpressions","varExpression","tmpPropKey","style","setProperty","result","window","resolver","indexOf","resolved","normalizeCssColor","entries","_ref2","resolveCssVariablesInString","remove","_ref3","setThemePreloadData","preloadData","setItem","stringify","getThemeKey","pluginName","themeName","preloadTheme","_getThemePreloadData$","_getThemePreloadData","preloadStyleContent","id","innerHTML","head","overrideSVGFillColors","_ref4","removeProperty","newSVGContent"],"sources":["../../src/theme/ThemeUtils.ts"],"sourcesContent":["import Log from '@deephaven/log';\nimport { assertNotNull, ColorUtils } from '@deephaven/utils';\nimport { themeDark } from './theme-dark';\nimport {\n DEFAULT_DARK_THEME_KEY,\n DEFAULT_PRELOAD_DATA_VARIABLES,\n ThemeData,\n ThemePreloadData,\n CssVariableStyleContent,\n ThemePreloadColorVariable,\n ThemeRegistrationData,\n THEME_CACHE_LOCAL_STORAGE_KEY,\n SVG_ICON_MANUAL_COLOR_MAP,\n ThemeCssVariableName,\n ThemeIconsRequiringManualColorChanges,\n} from './ThemeModel';\n\nconst log = Log.module('ThemeUtils');\n\nexport const CSS_VAR_EXPRESSION_PREFIX = 'var(--';\nexport const TMP_CSS_PROP_PREFIX = 'dh-tmp';\nexport const NON_WHITESPACE_REGEX = /\\S/;\nexport const WHITESPACE_REGEX = /\\s/;\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 */\nexport function calculatePreloadStyleContent(): CssVariableStyleContent {\n const resolveVar = createCssVariableResolver(document.body);\n\n // Calculate the current preload variables. If the variable is not set, use\n // the default value.\n const pairs = Object.keys(DEFAULT_PRELOAD_DATA_VARIABLES).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 * DEFAULT_PRELOAD_DATA_VARIABLES for a default value, and if one does not exist,\n * return ''.\n * @param el Element to resolve css variables against\n */\nexport function createCssVariableResolver(\n el: Element\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 (\n DEFAULT_PRELOAD_DATA_VARIABLES[varName as ThemePreloadColorVariable] ?? ''\n );\n };\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 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 * 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 * 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 rgb or\n * rgba color strings.\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 */\nexport function resolveCssVariablesInRecord<T extends Record<string, string>>(\n record: T,\n targetElement: HTMLElement = document.body\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 targetElement.appendChild(tmpPropEl);\n\n const varExpressions = [...extractDistinctCssVariableExpressions(record)];\n\n // Set temporary css variables for resolving var expressions\n varExpressions.forEach((varExpression, i) => {\n const tmpPropKey = `--${TMP_CSS_PROP_PREFIX}-${i}`;\n tmpPropEl.style.setProperty(tmpPropKey, varExpression);\n });\n\n const result = {} as T;\n\n const computedStyle = window.getComputedStyle(tmpPropEl);\n\n const resolver = (varExpression: string): string => {\n const tmpPropKey = `--${TMP_CSS_PROP_PREFIX}-${varExpressions.indexOf(\n varExpression\n )}`;\n\n const resolved = computedStyle.getPropertyValue(tmpPropKey);\n\n return ColorUtils.normalizeCssColor(resolved);\n };\n\n // Resolve the temporary css variables\n Object.entries(record).forEach(([key, value]) => {\n result[key as keyof T] = resolveCssVariablesInString(\n resolver,\n value\n ) as T[keyof T];\n });\n\n // Remove the temporary css variables\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 * 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 * Preload minimal theme variables from the cache.\n */\nexport function preloadTheme(): void {\n const preloadStyleContent =\n getThemePreloadData()?.preloadStyleContent ??\n calculatePreloadStyleContent();\n\n log.debug('Preloading theme content:', `'${preloadStyleContent}'`);\n\n const style = document.createElement('style');\n style.id = 'theme-preload';\n style.innerHTML = preloadStyleContent;\n document.head.appendChild(style);\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 */\nexport function overrideSVGFillColors(): void {\n const resolveVar = createCssVariableResolver(document.body);\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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"}
@@ -1,6 +1,7 @@
1
1
  export * from './theme-dark';
2
2
  export * from './theme-light';
3
3
  export * from './ThemeModel';
4
+ export * from './ThemePicker';
4
5
  export * from './ThemeProvider';
5
6
  export * from './ThemeUtils';
6
7
  export * from './useTheme';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/theme/index.ts"],"names":[],"mappings":"AAAA,cAAc,cAAc,CAAC;AAC7B,cAAc,eAAe,CAAC;AAC9B,cAAc,cAAc,CAAC;AAC7B,cAAc,iBAAiB,CAAC;AAChC,cAAc,cAAc,CAAC;AAC7B,cAAc,YAAY,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/theme/index.ts"],"names":[],"mappings":"AAAA,cAAc,cAAc,CAAC;AAC7B,cAAc,eAAe,CAAC;AAC9B,cAAc,cAAc,CAAC;AAC7B,cAAc,eAAe,CAAC;AAC9B,cAAc,iBAAiB,CAAC;AAChC,cAAc,cAAc,CAAC;AAC7B,cAAc,YAAY,CAAC"}
@@ -1,6 +1,7 @@
1
1
  export * from "./theme-dark/index.js";
2
2
  export * from "./theme-light/index.js";
3
3
  export * from "./ThemeModel.js";
4
+ export * from "./ThemePicker.js";
4
5
  export * from "./ThemeProvider.js";
5
6
  export * from "./ThemeUtils.js";
6
7
  export * from "./useTheme.js";
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":[],"sources":["../../src/theme/index.ts"],"sourcesContent":["export * from './theme-dark';\nexport * from './theme-light';\nexport * from './ThemeModel';\nexport * from './ThemeProvider';\nexport * from './ThemeUtils';\nexport * from './useTheme';\n"],"mappings":""}
1
+ {"version":3,"file":"index.js","names":[],"sources":["../../src/theme/index.ts"],"sourcesContent":["export * from './theme-dark';\nexport * from './theme-light';\nexport * from './ThemeModel';\nexport * from './ThemePicker';\nexport * from './ThemeProvider';\nexport * from './ThemeUtils';\nexport * from './useTheme';\n"],"mappings":""}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@deephaven/components",
3
- "version": "0.55.1-beta.10+4c0200e7",
3
+ "version": "0.55.1-beta.13+1b06675e",
4
4
  "description": "Deephaven React component library",
5
5
  "author": "Deephaven Data Labs LLC",
6
6
  "license": "Apache-2.0",
@@ -25,10 +25,10 @@
25
25
  },
26
26
  "dependencies": {
27
27
  "@adobe/react-spectrum": "^3.29.0",
28
- "@deephaven/icons": "^0.55.1-beta.10+4c0200e7",
29
- "@deephaven/log": "^0.55.1-beta.10+4c0200e7",
30
- "@deephaven/react-hooks": "^0.55.1-beta.10+4c0200e7",
31
- "@deephaven/utils": "^0.55.1-beta.10+4c0200e7",
28
+ "@deephaven/icons": "^0.55.1-beta.13+1b06675e",
29
+ "@deephaven/log": "^0.55.1-beta.13+1b06675e",
30
+ "@deephaven/react-hooks": "^0.55.1-beta.13+1b06675e",
31
+ "@deephaven/utils": "^0.55.1-beta.13+1b06675e",
32
32
  "@fortawesome/fontawesome-svg-core": "^6.2.1",
33
33
  "@fortawesome/react-fontawesome": "^0.2.0",
34
34
  "@react-spectrum/theme-default": "^3.5.1",
@@ -52,7 +52,7 @@
52
52
  "react-dom": "^17.x"
53
53
  },
54
54
  "devDependencies": {
55
- "@deephaven/mocks": "^0.55.1-beta.10+4c0200e7"
55
+ "@deephaven/mocks": "^0.55.1-beta.13+1b06675e"
56
56
  },
57
57
  "files": [
58
58
  "dist",
@@ -65,5 +65,5 @@
65
65
  "publishConfig": {
66
66
  "access": "public"
67
67
  },
68
- "gitHead": "4c0200e71e350fcf5261b0cc28440cb798bec207"
68
+ "gitHead": "1b06675e54b3dd4802078f9904408b691619611f"
69
69
  }