@deephaven/components 0.108.1-beta.1 → 0.108.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,68 @@
1
+ import { useCallback, useEffect, useState } from 'react';
2
+ import Log from '@deephaven/log';
3
+ import { getWindowParent } from '@deephaven/utils';
4
+ import { MSG_REQUEST_SET_THEME } from "./ThemeModel.js";
5
+ import { isExternalThemeData, isExternalThemeEnabled, parseExternalThemeData, requestExternalThemeData } from "./ThemeUtils.js";
6
+ var logger = Log.module('useExternalTheme');
7
+ /**
8
+ * If external theme is configured via `theme=EXTERNAL_THEME_KEY` query param,
9
+ * handle `postMessage` communication to retrieve the theme data from the parent
10
+ * Window. The hook will also listen for `MSG_REQUEST_SET_THEME` messages from
11
+ * the parent and current Window to allow explicitly setting the theme.
12
+ */
13
+ export function useExternalTheme() {
14
+ var [result, setResult] = useState(() => {
15
+ var isEnabled = isExternalThemeEnabled();
16
+ return {
17
+ isEnabled,
18
+ isPending: isEnabled
19
+ };
20
+ });
21
+
22
+ /** Parse external theme data and update the result */
23
+ var handleExternalThemeData = useCallback(externalThemeData => {
24
+ var themeData = parseExternalThemeData(externalThemeData);
25
+ setResult({
26
+ isEnabled: true,
27
+ isPending: false,
28
+ themeData
29
+ });
30
+ }, []);
31
+ useEffect(() => {
32
+ if (!result.isEnabled) {
33
+ return;
34
+ }
35
+ logger.debug('Requesting external theme data');
36
+
37
+ /** Parent or current Window can explicitly set the theme */
38
+ function onMessage(event) {
39
+ var parent = getWindowParent();
40
+
41
+ // Allow messages from parent or current window
42
+ if (event.source !== window && event.source !== parent) {
43
+ return;
44
+ }
45
+ if (event.data.message === MSG_REQUEST_SET_THEME) {
46
+ if (isExternalThemeData(event.data.payload)) {
47
+ handleExternalThemeData(event.data.payload);
48
+ }
49
+ }
50
+ }
51
+ window.addEventListener('message', onMessage);
52
+
53
+ /** Request initial theme data from parent window */
54
+ requestExternalThemeData().then(handleExternalThemeData).catch(err => {
55
+ logger.error(err);
56
+ setResult({
57
+ isEnabled: true,
58
+ isPending: false
59
+ });
60
+ });
61
+ return () => {
62
+ window.removeEventListener('message', onMessage);
63
+ };
64
+ }, [handleExternalThemeData, result.isEnabled]);
65
+ return result;
66
+ }
67
+ export default useExternalTheme;
68
+ //# sourceMappingURL=useExternalTheme.js.map
@@ -0,0 +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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@deephaven/components",
3
- "version": "0.108.1-beta.1+728ad95f",
3
+ "version": "0.108.1-beta.13+1c9a8ed1",
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.38.0",
28
- "@deephaven/icons": "^0.108.1-beta.1+728ad95f",
29
- "@deephaven/log": "^0.108.1-beta.1+728ad95f",
30
- "@deephaven/react-hooks": "^0.108.1-beta.1+728ad95f",
31
- "@deephaven/utils": "^0.108.1-beta.1+728ad95f",
28
+ "@deephaven/icons": "^0.108.1-beta.13+1c9a8ed1",
29
+ "@deephaven/log": "^0.108.1-beta.13+1c9a8ed1",
30
+ "@deephaven/react-hooks": "^0.108.1-beta.13+1c9a8ed1",
31
+ "@deephaven/utils": "^0.108.1-beta.13+1c9a8ed1",
32
32
  "@fortawesome/fontawesome-svg-core": "^6.2.1",
33
33
  "@fortawesome/react-fontawesome": "^0.2.0",
34
34
  "@internationalized/date": "^3.5.5",
@@ -50,6 +50,7 @@
50
50
  "popper.js": "^1.16.1",
51
51
  "prop-types": "^15.7.2",
52
52
  "react-beautiful-dnd": "^13.1.0",
53
+ "react-reverse-portal": "^2.3.0",
53
54
  "react-transition-group": "^4.4.2",
54
55
  "react-virtualized-auto-sizer": "1.0.6",
55
56
  "react-window": "^1.8.6"
@@ -60,8 +61,8 @@
60
61
  "react-is": ">=16.8.0"
61
62
  },
62
63
  "devDependencies": {
63
- "@deephaven/mocks": "^0.108.1-beta.1+728ad95f",
64
- "@deephaven/test-utils": "^0.108.1-beta.1+728ad95f",
64
+ "@deephaven/mocks": "^0.108.1-beta.13+1c9a8ed1",
65
+ "@deephaven/test-utils": "^0.108.1-beta.13+1c9a8ed1",
65
66
  "react-redux": "^7.2.4"
66
67
  },
67
68
  "files": [
@@ -76,5 +77,5 @@
76
77
  "publishConfig": {
77
78
  "access": "public"
78
79
  },
79
- "gitHead": "728ad95fe43ea966fb47632015572b5e901228d8"
80
+ "gitHead": "1c9a8ed1ebd923ffa07235b453602f9775660a6f"
80
81
  }