@deephaven/embed-widget 1.15.1 → 1.15.2-alpha-fetch-variable-def.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 (36) hide show
  1. package/build/assets/{App-CypmLgmL.js → App-p0IwTPRq.js} +2 -2
  2. package/build/assets/{App-CypmLgmL.js.map → App-p0IwTPRq.js.map} +1 -1
  3. package/build/assets/{Chart-BsXISs8I.js → Chart-BCLvsPEg.js} +2 -2
  4. package/build/assets/{Chart-BsXISs8I.js.map → Chart-BCLvsPEg.js.map} +1 -1
  5. package/build/assets/{IrisGrid-CjstqkdZ.js → IrisGrid-CU9i4zrn.js} +5 -5
  6. package/build/assets/{IrisGrid-CjstqkdZ.js.map → IrisGrid-CU9i4zrn.js.map} +1 -1
  7. package/build/assets/IrisGridThemeProvider-CTvYrvSL.js +12 -0
  8. package/build/assets/IrisGridThemeProvider-CTvYrvSL.js.map +1 -0
  9. package/build/assets/LocalWorkspaceStorage-CItXLE2P.js +2 -0
  10. package/build/assets/LocalWorkspaceStorage-CItXLE2P.js.map +1 -0
  11. package/build/assets/{LogPanel-dUVSBPpo.js → LogPanel-Vgf5WZFJ.js} +4 -4
  12. package/build/assets/{LogPanel-dUVSBPpo.js.map → LogPanel-Vgf5WZFJ.js.map} +1 -1
  13. package/build/assets/{MarkdownEditor-D53YrMF9.js → MarkdownEditor-DjNeQ_Zl.js} +2 -2
  14. package/build/assets/{MarkdownEditor-D53YrMF9.js.map → MarkdownEditor-DjNeQ_Zl.js.map} +1 -1
  15. package/build/assets/{MarkdownNotebook-BkTy95vu.js → MarkdownNotebook-NIzomFeC.js} +2 -2
  16. package/build/assets/{MarkdownNotebook-BkTy95vu.js.map → MarkdownNotebook-NIzomFeC.js.map} +1 -1
  17. package/build/assets/Plot-Xv-druQg.js +2 -0
  18. package/build/assets/{Plot-BmYKhm84.js.map → Plot-Xv-druQg.js.map} +1 -1
  19. package/build/assets/{Plotly-BTLqRIq-.js → Plotly-CJhuCDFM.js} +2 -2
  20. package/build/assets/{Plotly-BTLqRIq-.js.map → Plotly-CJhuCDFM.js.map} +1 -1
  21. package/build/assets/{index-B6BgIG1u.js → index-B7ApSrjY.js} +3 -3
  22. package/build/assets/{index-B6BgIG1u.js.map → index-B7ApSrjY.js.map} +1 -1
  23. package/build/assets/{index-DG2tw4ib.js → index-eMUq-pjp.js} +4 -4
  24. package/build/assets/{index-DG2tw4ib.js.map → index-eMUq-pjp.js.map} +1 -1
  25. package/build/assets/{index-DsTg7BZt.js → index-mF0PIqiD.js} +4 -4
  26. package/build/assets/{index-DsTg7BZt.js.map → index-mF0PIqiD.js.map} +1 -1
  27. package/build/assets/plotly-BJo_M7Cs.js +7 -0
  28. package/build/assets/{plotly-ODN7AY4u.js.map → plotly-BJo_M7Cs.js.map} +1 -1
  29. package/build/index.html +1 -1
  30. package/package.json +17 -17
  31. package/build/assets/IrisGridThemeProvider-Bm5JMU4l.js +0 -12
  32. package/build/assets/IrisGridThemeProvider-Bm5JMU4l.js.map +0 -1
  33. package/build/assets/LocalWorkspaceStorage-CtMRGP9F.js +0 -2
  34. package/build/assets/LocalWorkspaceStorage-CtMRGP9F.js.map +0 -1
  35. package/build/assets/Plot-BmYKhm84.js +0 -2
  36. package/build/assets/plotly-ODN7AY4u.js +0 -7
@@ -1,2 +1,2 @@
1
- import{r as e,L as Y,M as _,N as B,D as u,O as K}from"./vendor-CU9m3C3n.js";import{L as q,a as F}from"./index-B6BgIG1u.js";import{u as J,s as Q,a as X,e as Z,g as ee,b as te,E as se,c as ae,S as ne,r as oe,d as re,f as ie,h as le,i as ce,j as ue}from"./LogPanel-dUVSBPpo.js";import{u as de,a as fe,b as pe,c as ge,d as me,A as he,G as be,L as k,f as Se}from"./LocalWorkspaceStorage-CtMRGP9F.js";import"./helpers-BosuxZz1.js";import"./useResizeObserver-DBuxCPgF.js";const b=F.module("EmbedWidget.App"),De={hasHeaders:!0,defaultComponentConfig:{isClosable:!1}};function ke(){var L;const[f,x]=e.useState(),[n,P]=e.useState(),a=e.useMemo(()=>new URLSearchParams(window.location.search),[]).get("name"),S=J(),d=de(),D=fe(),w=pe(),o=Y(),p=ge();e.useEffect(function(){a!=null&&(document.title=`${a} - Deephaven`)},[a]),e.useEffect(function(){async function i(){try{if(a==null)throw new Error('Missing URL parameter "name"');const t=D.getStorageService(),l=new be(t,""),v=await new k(l).load({isConsoleAvailable:!1}),{data:{settings:R}}=v,{shortcutOverrides:A={}}=R,T=ne.isMacPlatform?A.mac??{}:A.windows??{};Object.entries(T).forEach(([N,V])=>{var M;(M=oe.get(N))==null||M.setKeyState(V)}),o(re(S)),o(ie(p)),o(le(w)),o(ce(v)),o(ue(k.makeDefaultWorkspaceSettings(p))),b.debug(`Loading widget definition for ${a}...`);const z=await Se(d,a);P(z),b.debug(`Widget definition successfully loaded for ${a}`)}catch(t){b.error(`Unable to load widget definition for ${a}`,t),x(`${t}`)}}i()},[S,D,d,o,a,p,w]);const g=n!=null&&f==null,j=n==null&&f==null,C=e.useMemo(()=>n==null?async()=>{throw new Error("Definition is null")}:()=>d.getObject(n),[d,n]),[s,W]=e.useState(null),[m,O]=e.useState("default-embed-widget"),$=e.useCallback(({pluginId:r,data:i})=>{const t=_();o(Q(t,r,i)),O(t)},[o]);X(s==null?void 0:s.eventHub,$);const[y,H]=e.useState(!1),U=e.useCallback(()=>{s==null||n==null||y||(H(!0),Z(s.eventHub,{fetch:C,widget:ee(n)}))},[s,n,C,y]),G=B(te),I=me(),h=((L=G[m])==null?void 0:L.layoutConfig)??se,E=e.useMemo(()=>{function r(i){if(i.length===0)return 0;let t=0;for(let l=0;l<i.length;l+=1){const c=i[l];c.type==="react-component"||c.type==="component"?t+=1:c.content!=null&&(t+=r(c.content))}return t}return r(h)>1},[h]);return e.useEffect(function(){s!=null&&(E?s.enableHeaders():s.disableHeaders())},[E,s]),u.jsxs("div",{className:"App",children:[g&&u.jsx(ae,{children:u.jsx(he,{dashboards:[{id:m,layoutConfig:h,layoutSettings:De}],activeDashboard:m,onLayoutInitialized:U,onGoldenLayoutChange:W,plugins:I})}),!g&&u.jsx(q,{"data-testid":"embed-widget-app-loading",isLoaded:g,isLoading:j,errorMessage:f??null}),u.jsx(K,{})]})}export{ke as default};
2
- //# sourceMappingURL=App-CypmLgmL.js.map
1
+ import{r as e,L as Y,M as _,N as B,D as u,O as K}from"./vendor-CU9m3C3n.js";import{L as q,a as F}from"./index-B7ApSrjY.js";import{u as J,s as Q,a as X,e as Z,g as ee,b as te,E as se,c as ae,S as ne,r as oe,d as re,f as ie,h as le,i as ce,j as ue}from"./LogPanel-Vgf5WZFJ.js";import{u as de,a as fe,b as pe,c as ge,d as me,A as he,G as be,L as k,f as Se}from"./LocalWorkspaceStorage-CItXLE2P.js";import"./helpers-BosuxZz1.js";import"./useResizeObserver-DBuxCPgF.js";const b=F.module("EmbedWidget.App"),De={hasHeaders:!0,defaultComponentConfig:{isClosable:!1}};function ke(){var L;const[f,x]=e.useState(),[n,P]=e.useState(),a=e.useMemo(()=>new URLSearchParams(window.location.search),[]).get("name"),S=J(),d=de(),D=fe(),w=pe(),o=Y(),p=ge();e.useEffect(function(){a!=null&&(document.title=`${a} - Deephaven`)},[a]),e.useEffect(function(){async function i(){try{if(a==null)throw new Error('Missing URL parameter "name"');const t=D.getStorageService(),l=new be(t,""),v=await new k(l).load({isConsoleAvailable:!1}),{data:{settings:R}}=v,{shortcutOverrides:A={}}=R,T=ne.isMacPlatform?A.mac??{}:A.windows??{};Object.entries(T).forEach(([N,V])=>{var M;(M=oe.get(N))==null||M.setKeyState(V)}),o(re(S)),o(ie(p)),o(le(w)),o(ce(v)),o(ue(k.makeDefaultWorkspaceSettings(p))),b.debug(`Loading widget definition for ${a}...`);const z=await Se(d,a);P(z),b.debug(`Widget definition successfully loaded for ${a}`)}catch(t){b.error(`Unable to load widget definition for ${a}`,t),x(`${t}`)}}i()},[S,D,d,o,a,p,w]);const g=n!=null&&f==null,j=n==null&&f==null,C=e.useMemo(()=>n==null?async()=>{throw new Error("Definition is null")}:()=>d.getObject(n),[d,n]),[s,W]=e.useState(null),[m,O]=e.useState("default-embed-widget"),$=e.useCallback(({pluginId:r,data:i})=>{const t=_();o(Q(t,r,i)),O(t)},[o]);X(s==null?void 0:s.eventHub,$);const[y,H]=e.useState(!1),U=e.useCallback(()=>{s==null||n==null||y||(H(!0),Z(s.eventHub,{fetch:C,widget:ee(n)}))},[s,n,C,y]),G=B(te),I=me(),h=((L=G[m])==null?void 0:L.layoutConfig)??se,E=e.useMemo(()=>{function r(i){if(i.length===0)return 0;let t=0;for(let l=0;l<i.length;l+=1){const c=i[l];c.type==="react-component"||c.type==="component"?t+=1:c.content!=null&&(t+=r(c.content))}return t}return r(h)>1},[h]);return e.useEffect(function(){s!=null&&(E?s.enableHeaders():s.disableHeaders())},[E,s]),u.jsxs("div",{className:"App",children:[g&&u.jsx(ae,{children:u.jsx(he,{dashboards:[{id:m,layoutConfig:h,layoutSettings:De}],activeDashboard:m,onLayoutInitialized:U,onGoldenLayoutChange:W,plugins:I})}),!g&&u.jsx(q,{"data-testid":"embed-widget-app-loading",isLoaded:g,isLoading:j,errorMessage:f??null}),u.jsx(K,{})]})}export{ke as default};
2
+ //# sourceMappingURL=App-p0IwTPRq.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"App-CypmLgmL.js","sources":["../../src/App.tsx"],"sourcesContent":["import React, { useCallback, useEffect, useMemo, useState } from 'react';\nimport { useDispatch, useSelector } from 'react-redux';\nimport { nanoid } from 'nanoid';\nimport {\n AppDashboards,\n GrpcLayoutStorage,\n LocalWorkspaceStorage,\n useConnection,\n useServerConfig,\n useUser,\n} from '@deephaven/app-utils';\nimport type GoldenLayout from '@deephaven/golden-layout';\nimport type { ItemConfig } from '@deephaven/golden-layout';\nimport {\n ErrorBoundary,\n LoadingOverlay,\n Shortcut,\n ShortcutRegistry,\n ToastContainer,\n} from '@deephaven/components'; // Use the loading spinner from the Deephaven components package\nimport type { dh } from '@deephaven/jsapi-types';\nimport { fetchVariableDefinition } from '@deephaven/jsapi-utils';\nimport Log from '@deephaven/log';\nimport { useDashboardPlugins } from '@deephaven/plugin';\nimport {\n getAllDashboardsData,\n type CreateDashboardPayload,\n setDashboardPluginData,\n emitPanelOpen,\n useCreateDashboardListener,\n} from '@deephaven/dashboard';\nimport {\n getVariableDescriptor,\n useApi,\n useClient,\n} from '@deephaven/jsapi-bootstrap';\nimport { EMPTY_ARRAY } from '@deephaven/utils';\nimport {\n setDefaultWorkspaceSettings,\n setWorkspace,\n setApi,\n setUser,\n setServerConfigValues,\n} from '@deephaven/redux';\nimport './App.scss'; // Styles for in this app\n\nconst log = Log.module('EmbedWidget.App');\n\nconst LAYOUT_SETTINGS = {\n hasHeaders: true,\n defaultComponentConfig: { isClosable: false },\n};\n\n/**\n * A functional React component that displays a Deephaven Widget using the @deephaven/plugin package.\n * It will attempt to open and display the widget specified with the `name` parameter, expecting it to be present on the server.\n * E.g. http://localhost:4010/?name=myWidget will attempt to open a widget `myWidget` by emitting a `PanelEvent.OPEN` event.\n * If no query param is provided, it will display an error.\n * By default, tries to connect to the server defined in the VITE_CORE_API_URL variable, which is set to http://localhost:10000/jsapi\n * See Vite docs for how to update these env vars: https://vitejs.dev/guide/env-and-mode.html\n */\nfunction App(): JSX.Element {\n const [error, setError] = useState<string>();\n const [definition, setDefinition] = useState<dh.ide.VariableDefinition>();\n const searchParams = useMemo(\n () => new URLSearchParams(window.location.search),\n []\n );\n // Get the widget name from the query param `name`.\n const name = searchParams.get('name');\n const api = useApi();\n const connection = useConnection();\n const client = useClient();\n const user = useUser();\n const dispatch = useDispatch();\n const serverConfig = useServerConfig();\n\n // Update the browser title when the widget name is available\n useEffect(\n function updateTitle() {\n if (name != null) {\n document.title = `${name} - Deephaven`;\n }\n },\n [name]\n );\n\n useEffect(\n function initializeApp() {\n async function initApp(): Promise<void> {\n try {\n if (name == null) {\n throw new Error('Missing URL parameter \"name\"');\n }\n\n const storageService = client.getStorageService();\n const layoutStorage = new GrpcLayoutStorage(\n storageService,\n import.meta.env.VITE_STORAGE_PATH_LAYOUTS ?? ''\n );\n const workspaceStorage = new LocalWorkspaceStorage(layoutStorage);\n const loadedWorkspace = await workspaceStorage.load({\n isConsoleAvailable: false,\n });\n const {\n data: { settings },\n } = loadedWorkspace;\n // Set any shortcuts that user has overridden on this platform\n const { shortcutOverrides = {} } = settings;\n const isMac = Shortcut.isMacPlatform;\n const platformOverrides = isMac\n ? shortcutOverrides.mac ?? {}\n : shortcutOverrides.windows ?? {};\n Object.entries(platformOverrides).forEach(([id, keyState]) => {\n ShortcutRegistry.get(id)?.setKeyState(keyState);\n });\n dispatch(setApi(api));\n dispatch(setServerConfigValues(serverConfig));\n dispatch(setUser(user));\n dispatch(setWorkspace(loadedWorkspace));\n dispatch(\n setDefaultWorkspaceSettings(\n LocalWorkspaceStorage.makeDefaultWorkspaceSettings(serverConfig)\n )\n );\n\n log.debug(`Loading widget definition for ${name}...`);\n\n const newDefinition = await fetchVariableDefinition(connection, name);\n\n setDefinition(newDefinition);\n\n log.debug(`Widget definition successfully loaded for ${name}`);\n } catch (e: unknown) {\n log.error(`Unable to load widget definition for ${name}`, e);\n setError(`${e}`);\n }\n }\n initApp();\n },\n [api, client, connection, dispatch, name, serverConfig, user]\n );\n\n const isLoaded = definition != null && error == null;\n const isLoading = definition == null && error == null;\n\n const fetch = useMemo(() => {\n if (definition == null) {\n return async () => {\n throw new Error('Definition is null');\n };\n }\n return () => connection.getObject(definition);\n }, [connection, definition]);\n\n const [goldenLayout, setGoldenLayout] = useState<GoldenLayout | null>(null);\n const [dashboardId, setDashboardId] = useState('default-embed-widget'); // Can't be DEFAULT_DASHBOARD_ID because its dashboard layout is not stored in dashboardData\n\n const handleCreateDashboard = useCallback(\n ({ pluginId, data }: CreateDashboardPayload) => {\n const id = nanoid();\n dispatch(setDashboardPluginData(id, pluginId, data));\n setDashboardId(id);\n },\n [dispatch]\n );\n\n useCreateDashboardListener(goldenLayout?.eventHub, handleCreateDashboard);\n\n const [hasEmittedWidget, setHasEmittedWidget] = useState(false);\n\n const handleDashboardInitialized = useCallback(() => {\n if (goldenLayout == null || definition == null || hasEmittedWidget) {\n return;\n }\n\n setHasEmittedWidget(true);\n emitPanelOpen(goldenLayout.eventHub, {\n fetch,\n widget: getVariableDescriptor(definition),\n });\n }, [goldenLayout, definition, fetch, hasEmittedWidget]);\n\n const allDashboardData = useSelector(getAllDashboardsData);\n\n const dashboardPlugins = useDashboardPlugins();\n\n const layoutConfig = (allDashboardData[dashboardId]?.layoutConfig ??\n EMPTY_ARRAY) as ItemConfig[];\n\n const hasMultipleComponents = useMemo(() => {\n function getComponentCount(config: ItemConfig[]) {\n if (config.length === 0) {\n return 0;\n }\n\n let count = 0;\n for (let i = 0; i < config.length; i += 1) {\n const item = config[i];\n if (item.type === 'react-component' || item.type === 'component') {\n count += 1;\n } else if (item.content != null) {\n count += getComponentCount(item.content);\n }\n }\n return count;\n }\n return getComponentCount(layoutConfig) > 1;\n }, [layoutConfig]);\n\n // Do this instead of changing layoutSettings because it will create\n // a new gl instance and can cause some loading failures likely due to\n // some race conditions w/ deephaven UI\n useEffect(\n function togglePanelHeaders() {\n if (goldenLayout != null) {\n if (hasMultipleComponents) {\n goldenLayout.enableHeaders();\n } else {\n goldenLayout.disableHeaders();\n }\n }\n },\n [hasMultipleComponents, goldenLayout]\n );\n\n return (\n <div className=\"App\">\n {isLoaded && (\n <ErrorBoundary>\n <AppDashboards\n dashboards={[\n {\n id: dashboardId,\n layoutConfig,\n layoutSettings: LAYOUT_SETTINGS,\n },\n ]}\n activeDashboard={dashboardId}\n onLayoutInitialized={handleDashboardInitialized}\n onGoldenLayoutChange={setGoldenLayout}\n plugins={dashboardPlugins}\n />\n </ErrorBoundary>\n )}\n {!isLoaded && (\n <LoadingOverlay\n data-testid=\"embed-widget-app-loading\"\n isLoaded={isLoaded}\n isLoading={isLoading}\n errorMessage={error ?? null}\n />\n )}\n <ToastContainer />\n </div>\n );\n}\n\nexport default App;\n"],"names":["log","Log","LAYOUT_SETTINGS","App","error","setError","useState","definition","setDefinition","name","useMemo","api","useApi","connection","useConnection","client","useClient","user","useUser","dispatch","useDispatch","serverConfig","useServerConfig","useEffect","initApp","storageService","layoutStorage","GrpcLayoutStorage","loadedWorkspace","LocalWorkspaceStorage","settings","shortcutOverrides","platformOverrides","Shortcut","id","keyState","ShortcutRegistry","setApi","setServerConfigValues","setUser","setWorkspace","setDefaultWorkspaceSettings","newDefinition","fetchVariableDefinition","e","isLoaded","isLoading","fetch","goldenLayout","setGoldenLayout","dashboardId","setDashboardId","handleCreateDashboard","useCallback","pluginId","data","nanoid","setDashboardPluginData","useCreateDashboardListener","hasEmittedWidget","setHasEmittedWidget","handleDashboardInitialized","emitPanelOpen","getVariableDescriptor","allDashboardData","useSelector","getAllDashboardsData","dashboardPlugins","useDashboardPlugins","layoutConfig","_a","EMPTY_ARRAY","hasMultipleComponents","getComponentCount","config","count","i","item","jsxs","ErrorBoundary","jsx","AppDashboards","LoadingOverlay","ToastContainer"],"mappings":"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"}
1
+ {"version":3,"file":"App-p0IwTPRq.js","sources":["../../src/App.tsx"],"sourcesContent":["import React, { useCallback, useEffect, useMemo, useState } from 'react';\nimport { useDispatch, useSelector } from 'react-redux';\nimport { nanoid } from 'nanoid';\nimport {\n AppDashboards,\n GrpcLayoutStorage,\n LocalWorkspaceStorage,\n useConnection,\n useServerConfig,\n useUser,\n} from '@deephaven/app-utils';\nimport type GoldenLayout from '@deephaven/golden-layout';\nimport type { ItemConfig } from '@deephaven/golden-layout';\nimport {\n ErrorBoundary,\n LoadingOverlay,\n Shortcut,\n ShortcutRegistry,\n ToastContainer,\n} from '@deephaven/components'; // Use the loading spinner from the Deephaven components package\nimport type { dh } from '@deephaven/jsapi-types';\nimport { fetchVariableDefinition } from '@deephaven/jsapi-utils';\nimport Log from '@deephaven/log';\nimport { useDashboardPlugins } from '@deephaven/plugin';\nimport {\n getAllDashboardsData,\n type CreateDashboardPayload,\n setDashboardPluginData,\n emitPanelOpen,\n useCreateDashboardListener,\n} from '@deephaven/dashboard';\nimport {\n getVariableDescriptor,\n useApi,\n useClient,\n} from '@deephaven/jsapi-bootstrap';\nimport { EMPTY_ARRAY } from '@deephaven/utils';\nimport {\n setDefaultWorkspaceSettings,\n setWorkspace,\n setApi,\n setUser,\n setServerConfigValues,\n} from '@deephaven/redux';\nimport './App.scss'; // Styles for in this app\n\nconst log = Log.module('EmbedWidget.App');\n\nconst LAYOUT_SETTINGS = {\n hasHeaders: true,\n defaultComponentConfig: { isClosable: false },\n};\n\n/**\n * A functional React component that displays a Deephaven Widget using the @deephaven/plugin package.\n * It will attempt to open and display the widget specified with the `name` parameter, expecting it to be present on the server.\n * E.g. http://localhost:4010/?name=myWidget will attempt to open a widget `myWidget` by emitting a `PanelEvent.OPEN` event.\n * If no query param is provided, it will display an error.\n * By default, tries to connect to the server defined in the VITE_CORE_API_URL variable, which is set to http://localhost:10000/jsapi\n * See Vite docs for how to update these env vars: https://vitejs.dev/guide/env-and-mode.html\n */\nfunction App(): JSX.Element {\n const [error, setError] = useState<string>();\n const [definition, setDefinition] = useState<dh.ide.VariableDefinition>();\n const searchParams = useMemo(\n () => new URLSearchParams(window.location.search),\n []\n );\n // Get the widget name from the query param `name`.\n const name = searchParams.get('name');\n const api = useApi();\n const connection = useConnection();\n const client = useClient();\n const user = useUser();\n const dispatch = useDispatch();\n const serverConfig = useServerConfig();\n\n // Update the browser title when the widget name is available\n useEffect(\n function updateTitle() {\n if (name != null) {\n document.title = `${name} - Deephaven`;\n }\n },\n [name]\n );\n\n useEffect(\n function initializeApp() {\n async function initApp(): Promise<void> {\n try {\n if (name == null) {\n throw new Error('Missing URL parameter \"name\"');\n }\n\n const storageService = client.getStorageService();\n const layoutStorage = new GrpcLayoutStorage(\n storageService,\n import.meta.env.VITE_STORAGE_PATH_LAYOUTS ?? ''\n );\n const workspaceStorage = new LocalWorkspaceStorage(layoutStorage);\n const loadedWorkspace = await workspaceStorage.load({\n isConsoleAvailable: false,\n });\n const {\n data: { settings },\n } = loadedWorkspace;\n // Set any shortcuts that user has overridden on this platform\n const { shortcutOverrides = {} } = settings;\n const isMac = Shortcut.isMacPlatform;\n const platformOverrides = isMac\n ? shortcutOverrides.mac ?? {}\n : shortcutOverrides.windows ?? {};\n Object.entries(platformOverrides).forEach(([id, keyState]) => {\n ShortcutRegistry.get(id)?.setKeyState(keyState);\n });\n dispatch(setApi(api));\n dispatch(setServerConfigValues(serverConfig));\n dispatch(setUser(user));\n dispatch(setWorkspace(loadedWorkspace));\n dispatch(\n setDefaultWorkspaceSettings(\n LocalWorkspaceStorage.makeDefaultWorkspaceSettings(serverConfig)\n )\n );\n\n log.debug(`Loading widget definition for ${name}...`);\n\n const newDefinition = await fetchVariableDefinition(connection, name);\n\n setDefinition(newDefinition);\n\n log.debug(`Widget definition successfully loaded for ${name}`);\n } catch (e: unknown) {\n log.error(`Unable to load widget definition for ${name}`, e);\n setError(`${e}`);\n }\n }\n initApp();\n },\n [api, client, connection, dispatch, name, serverConfig, user]\n );\n\n const isLoaded = definition != null && error == null;\n const isLoading = definition == null && error == null;\n\n const fetch = useMemo(() => {\n if (definition == null) {\n return async () => {\n throw new Error('Definition is null');\n };\n }\n return () => connection.getObject(definition);\n }, [connection, definition]);\n\n const [goldenLayout, setGoldenLayout] = useState<GoldenLayout | null>(null);\n const [dashboardId, setDashboardId] = useState('default-embed-widget'); // Can't be DEFAULT_DASHBOARD_ID because its dashboard layout is not stored in dashboardData\n\n const handleCreateDashboard = useCallback(\n ({ pluginId, data }: CreateDashboardPayload) => {\n const id = nanoid();\n dispatch(setDashboardPluginData(id, pluginId, data));\n setDashboardId(id);\n },\n [dispatch]\n );\n\n useCreateDashboardListener(goldenLayout?.eventHub, handleCreateDashboard);\n\n const [hasEmittedWidget, setHasEmittedWidget] = useState(false);\n\n const handleDashboardInitialized = useCallback(() => {\n if (goldenLayout == null || definition == null || hasEmittedWidget) {\n return;\n }\n\n setHasEmittedWidget(true);\n emitPanelOpen(goldenLayout.eventHub, {\n fetch,\n widget: getVariableDescriptor(definition),\n });\n }, [goldenLayout, definition, fetch, hasEmittedWidget]);\n\n const allDashboardData = useSelector(getAllDashboardsData);\n\n const dashboardPlugins = useDashboardPlugins();\n\n const layoutConfig = (allDashboardData[dashboardId]?.layoutConfig ??\n EMPTY_ARRAY) as ItemConfig[];\n\n const hasMultipleComponents = useMemo(() => {\n function getComponentCount(config: ItemConfig[]) {\n if (config.length === 0) {\n return 0;\n }\n\n let count = 0;\n for (let i = 0; i < config.length; i += 1) {\n const item = config[i];\n if (item.type === 'react-component' || item.type === 'component') {\n count += 1;\n } else if (item.content != null) {\n count += getComponentCount(item.content);\n }\n }\n return count;\n }\n return getComponentCount(layoutConfig) > 1;\n }, [layoutConfig]);\n\n // Do this instead of changing layoutSettings because it will create\n // a new gl instance and can cause some loading failures likely due to\n // some race conditions w/ deephaven UI\n useEffect(\n function togglePanelHeaders() {\n if (goldenLayout != null) {\n if (hasMultipleComponents) {\n goldenLayout.enableHeaders();\n } else {\n goldenLayout.disableHeaders();\n }\n }\n },\n [hasMultipleComponents, goldenLayout]\n );\n\n return (\n <div className=\"App\">\n {isLoaded && (\n <ErrorBoundary>\n <AppDashboards\n dashboards={[\n {\n id: dashboardId,\n layoutConfig,\n layoutSettings: LAYOUT_SETTINGS,\n },\n ]}\n activeDashboard={dashboardId}\n onLayoutInitialized={handleDashboardInitialized}\n onGoldenLayoutChange={setGoldenLayout}\n plugins={dashboardPlugins}\n />\n </ErrorBoundary>\n )}\n {!isLoaded && (\n <LoadingOverlay\n data-testid=\"embed-widget-app-loading\"\n isLoaded={isLoaded}\n isLoading={isLoading}\n errorMessage={error ?? null}\n />\n )}\n <ToastContainer />\n </div>\n );\n}\n\nexport default App;\n"],"names":["log","Log","LAYOUT_SETTINGS","App","error","setError","useState","definition","setDefinition","name","useMemo","api","useApi","connection","useConnection","client","useClient","user","useUser","dispatch","useDispatch","serverConfig","useServerConfig","useEffect","initApp","storageService","layoutStorage","GrpcLayoutStorage","loadedWorkspace","LocalWorkspaceStorage","settings","shortcutOverrides","platformOverrides","Shortcut","id","keyState","ShortcutRegistry","setApi","setServerConfigValues","setUser","setWorkspace","setDefaultWorkspaceSettings","newDefinition","fetchVariableDefinition","e","isLoaded","isLoading","fetch","goldenLayout","setGoldenLayout","dashboardId","setDashboardId","handleCreateDashboard","useCallback","pluginId","data","nanoid","setDashboardPluginData","useCreateDashboardListener","hasEmittedWidget","setHasEmittedWidget","handleDashboardInitialized","emitPanelOpen","getVariableDescriptor","allDashboardData","useSelector","getAllDashboardsData","dashboardPlugins","useDashboardPlugins","layoutConfig","_a","EMPTY_ARRAY","hasMultipleComponents","getComponentCount","config","count","i","item","jsxs","ErrorBoundary","jsx","AppDashboards","LoadingOverlay","ToastContainer"],"mappings":"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"}
@@ -1,2 +1,2 @@
1
- import{D as n,r as M,J as k,bA as C,bx as L}from"./vendor-CU9m3C3n.js";import{a as x,bc as j,bB as B,bC as U}from"./index-B6BgIG1u.js";import{c as I}from"./Plotly-BTLqRIq-.js";import{aj as W,K as u,L as N,e as T,d as _,b as z}from"./index-DsTg7BZt.js";import{L as V,J as P,bC as K}from"./LogPanel-dUVSBPpo.js";import{D as $}from"./DownsamplingError--AAvWHv_.js";import{m as H}from"./useMergeRef-BVbjpcbf.js";import{P as J}from"./plotly-ODN7AY4u.js";import"./helpers-BosuxZz1.js";function R(i){var{errorMessage:e,onDiscard:t,onConfirm:r,onCancel:s,"data-testid":a}=i,l=a!=null?"".concat(a,"-message"):void 0;return n.jsx("div",{className:"chart-panel-overlay chart-error-overlay",children:n.jsxs("div",{className:"chart-panel-overlay-content chart-error-overlay-content",children:[n.jsxs("div",{className:"info-message","data-testid":l,children:[e,n.jsx(V,{copy:e,UNSAFE_style:{margin:"0"},isQuiet:!0})]}),n.jsxs("div",{children:[s&&n.jsx(P,{onClick:s,kind:"secondary",children:"Cancel"}),t&&n.jsx(P,{onClick:t,kind:"secondary",children:"Dismiss"}),r&&n.jsx(P,{onClick:r,kind:"primary",children:"Continue"})]})]})})}function A(i,e){var t=Object.keys(i);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(i);e&&(r=r.filter(function(s){return Object.getOwnPropertyDescriptor(i,s).enumerable})),t.push.apply(t,r)}return t}function g(i){for(var e=1;e<arguments.length;e++){var t=arguments[e]!=null?arguments[e]:{};e%2?A(Object(t),!0).forEach(function(r){o(i,r,t[r])}):Object.getOwnPropertyDescriptors?Object.defineProperties(i,Object.getOwnPropertyDescriptors(t)):A(Object(t)).forEach(function(r){Object.defineProperty(i,r,Object.getOwnPropertyDescriptor(t,r))})}return i}function o(i,e,t){return(e=Y(e))in i?Object.defineProperty(i,e,{value:t,enumerable:!0,configurable:!0,writable:!0}):i[e]=t,i}function Y(i){var e=Z(i,"string");return typeof e=="symbol"?e:e+""}function Z(i,e){if(typeof i!="object"||!i)return i;var t=i[Symbol.toPrimitive];if(t!==void 0){var r=t.call(i,e);if(typeof r!="object")return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return(e==="string"?String:Number)(i)}var f=x.module("Chart");class b extends M.Component{static convertIcon(e){var[t,,,,r]=e.icon,s="".concat(r);return{width:t,path:s,ascent:t,descent:0,transform:"matrix(1, 0, 0, 1, 0, 0)"}}static downsampleButtonTitle(e,t){return e?"Downsampling in progress...":t?"Downsampling disabled, click to enable":"Downsampling enabled, click to disable"}static downsampleButtonAttr(e,t){return e?"animation-spin":t?void 0:"fill-active"}constructor(e){super(e),o(this,"currentSeries",void 0),o(this,"PlotComponent",void 0),o(this,"plot",void 0),o(this,"plotWrapper",void 0),o(this,"plotWrapperMerged",void 0),o(this,"columnFormats",void 0),o(this,"dateTimeFormatterOptions",void 0),o(this,"decimalFormatOptions",void 0),o(this,"integerFormatOptions",void 0),o(this,"webgl",void 0),o(this,"rect",void 0),o(this,"ranges",void 0),o(this,"isSubscribed",void 0),o(this,"isLoadedFired",void 0),o(this,"resizeObserver",void 0),o(this,"getCachedConfig",L((t,r,s,a,l,c)=>{var d=[],h=!!t;h&&d.push({name:"Downsampling failed: ".concat(t),title:"Downsampling failed",click:()=>{this.toggleErrorMessage("".concat(t))},icon:b.convertIcon(j),attr:"fill-warning"});var m=!!c;if(m&&d.push({name:"Error: ".concat(c),title:"Error",click:()=>{this.toggleErrorMessage("".concat(c))},icon:b.convertIcon(j),attr:"fill-warning"}),r||s||a||h){var v=b.downsampleButtonTitle(s,a),w=b.downsampleButtonAttr(s,a),E=s?B:U;d.push({name:v,title:"Downsampling status",icon:b.convertIcon(E),click:this.handleDownsampleClick,attr:w})}var y=l.some(S=>{var{type:F}=S;return F!=null&&!F.includes("3d")}),p=l.some(S=>{var{type:F}=S;return F!=null&&F.includes("3d")}),D=["zoomIn2d","zoomOut2d","autoScale2d","resetScale2d"],O=["orbitRotation","tableRotation","resetCameraDefault3d"];return{displaylogo:!1,responsive:!0,displayModeBar:s||h||m?!0:"hover",modeBarButtons:[d,["toImage"],["zoom2d","pan2d"],[...y?D:[],...p?O:[]]]}})),W(this),this.PlotComponent=I(e.Plotly),this.plot=k.createRef(),this.plotWrapper=k.createRef(),this.plotWrapperMerged=H(this.plotWrapper,e.containerRef),this.columnFormats=[],this.dateTimeFormatterOptions={},this.decimalFormatOptions={},this.integerFormatOptions={},this.isSubscribed=!1,this.isLoadedFired=!1,this.currentSeries=0,this.resizeObserver=new window.ResizeObserver(this.handleResize),this.state={data:null,downsamplingError:null,isDownsampleFinished:!1,isDownsampleInProgress:!1,isDownsamplingDisabled:!1,error:null,shownError:null,layout:{datarevision:0},revision:0,shownBlocker:null}}componentDidMount(){this.updateDimensions(),this.updateModelDimensions(),this.initData(),this.initFormatter();var{isActive:e,model:t}=this.props;e&&this.subscribe(t),this.plotWrapper.current!=null&&this.resizeObserver.observe(this.plotWrapper.current),this.handleThemeChange()}componentDidUpdate(e){var{isActive:t,model:r,settings:s,theme:a}=this.props;this.updateFormatterSettings(s),r!==e.model&&(this.unsubscribe(e.model),this.subscribe(r)),t!==e.isActive&&(t?(this.updateDimensions(),this.subscribe(r)):this.unsubscribe(r)),a!==e.theme&&this.handleThemeChange()}componentWillUnmount(){var{model:e}=this.props;this.unsubscribe(e),this.resizeObserver.disconnect()}getPlotRect(){var e,t;return(e=(t=this.plotWrapper.current)===null||t===void 0?void 0:t.getBoundingClientRect())!==null&&e!==void 0?e:null}initData(){var{model:e}=this.props;this.setState(t=>{var{layout:r}=t;return{data:e.getData(),layout:g(g({},r),e.getLayout())}})}subscribe(e){if(!this.isSubscribed){if(!this.rect||this.rect.width===0||this.rect.height===0){f.debug2("Delaying subscription until model dimensions are set");return}e.subscribe(this.handleModelEvent),this.isSubscribed=!0}}unsubscribe(e){this.isSubscribed&&(e.unsubscribe(this.handleModelEvent),this.isSubscribed=!1)}handleAfterPlot(){this.plot.current!=null}handleDownsampleClick(){this.setState(e=>{var{isDownsamplingDisabled:t}=e;return{downsamplingError:null,isDownsampleInProgress:!1,isDownsampleFinished:!1,isDownsamplingDisabled:!t}},()=>{var{model:e}=this.props,{isDownsamplingDisabled:t}=this.state;e.setDownsamplingDisabled(t)})}handleErrorClose(){this.setState({shownError:null})}handleDownsampleErrorClose(){this.setState({downsamplingError:null})}handleModelEvent(e){var{type:t,detail:r}=e;switch(f.debug2("Received data update",t,r),t){case u.EVENT_UPDATED:{this.currentSeries+=1,this.setState(p=>{var{layout:D,revision:O}=p;return typeof D.datarevision=="number"&&(D.datarevision+=1),{data:r,layout:D,revision:O+1}});var{onUpdate:s}=this.props;s({isLoading:!this.isLoadedFired});break}case u.EVENT_LOADFINISHED:{var{onUpdate:a}=this.props;this.isLoadedFired=!0,a({isLoading:!1});break}case u.EVENT_DISCONNECT:{var{onDisconnect:l}=this.props;l();break}case u.EVENT_RECONNECT:{var{onReconnect:c}=this.props;c();break}case u.EVENT_DOWNSAMPLESTARTED:{this.setState({isDownsampleFinished:!1,isDownsampleInProgress:!0,downsamplingError:null});break}case u.EVENT_DOWNSAMPLEFINISHED:{this.setState({isDownsampleFinished:!0,isDownsampleInProgress:!1,downsamplingError:null});break}case u.EVENT_DOWNSAMPLENEEDED:case u.EVENT_DOWNSAMPLEFAILED:{var d,h=(d=r.message)!==null&&d!==void 0?d:r;this.setState({isDownsampleFinished:!1,isDownsampleInProgress:!1,isDownsamplingDisabled:!1,downsamplingError:h});var{onError:m}=this.props;m(new $(h==null?void 0:"".concat(h)));break}case u.EVENT_ERROR:{var v="".concat(r);this.setState({error:v});var{onError:w}=this.props;w(new Error(v));break}case u.EVENT_BLOCKER:{var E="".concat(r);this.setState({shownBlocker:E});break}case u.EVENT_BLOCKER_CLEAR:{this.setState({shownBlocker:null});break}case u.EVENT_LAYOUT_UPDATED:{var y=r;this.setState(p=>{var{layout:D,revision:O}=p;return{layout:g(g({},D),y),revision:O+1}});break}default:f.debug("Unknown event type",t,e)}}handlePlotUpdate(e){var{layout:t}=e,r=N.getLayoutRanges(t),s=!C(r,this.ranges);s&&(this.ranges=r,this.updateModelDimensions(!0))}handleRelayout(e){if(f.debug("handleRelayout",e),e.hiddenlabels!=null){var{onSettingsChanged:t}=this.props,r=[...e.hiddenlabels];t({hiddenSeries:r})}this.updateModelDimensions()}handleResize(){this.updateDimensions()}handleRestyle(e){var[t,r]=e;if(f.debug("handleRestyle",t,r),Object.keys(t).includes("visible")){var{data:s}=this.state,{onSettingsChanged:a}=this.props;if(s!=null){var l=s.reduce((c,d)=>{var{name:h,visible:m}=d;return h!=null&&m==="legendonly"?[...c,h]:c},[]);a({hiddenSeries:l})}}}handleThemeChange(){var{theme:e,model:t}=this.props,{dh:r}=t,s=new N(r);this.setState(a=>{var{layout:l}=a;return{layout:g(g({},l),{},{template:s.makeDefaultTemplate(e)})}})}toggleErrorMessage(e){this.setState(t=>{var{shownError:r}=t;return{shownError:r===e?null:e}})}updateModelDimensions(){var e=arguments.length>0&&arguments[0]!==void 0?arguments[0]:!1,t=this.getPlotRect();if(!t){f.warn("Unable to get plotting rect");return}var r=!this.rect||this.rect.width!==t.width||this.rect.height!==t.height;if(r||e){this.rect=t;var{isActive:s,model:a}=this.props;a.setDimensions(t),s&&this.subscribe(a)}}initFormatter(){var{settings:e}=this.props;this.updateFormatterSettings(e)}updateFormatterSettings(e){var t=T.getColumnFormats(e),r=T.getDateTimeFormatterOptions(e),{defaultDecimalFormatOptions:s={},defaultIntegerFormatOptions:a={}}=e;(!C(this.columnFormats,t)||!C(this.dateTimeFormatterOptions,r)||!C(this.decimalFormatOptions,s)||!C(this.integerFormatOptions,a))&&(this.columnFormats=T.getColumnFormats(e),this.dateTimeFormatterOptions=r,this.decimalFormatOptions=s,this.integerFormatOptions=a,this.updateFormatter()),this.webgl!==e.webgl&&(this.webgl=e.webgl,this.updateRenderOptions())}updateFormatter(){var{model:e}=this.props,t=new _(e.dh,this.columnFormats,this.dateTimeFormatterOptions,this.decimalFormatOptions,this.integerFormatOptions);e.setFormatter(t)}updateRenderOptions(){var{model:e}=this.props,t={webgl:this.webgl};e.setRenderOptions(t)}updateDimensions(){var e=this.getPlotRect(),{Plotly:t}=this.props;this.plot.current!=null&&e!=null&&e.width>0&&e.height>0&&t.relayout(this.plot.current.el,{autosize:!0}).catch(r=>{f.debug("Unable to resize, promise rejected",r)})}render(){var{PlotComponent:e}=this,{data:t,downsamplingError:r,isDownsampleFinished:s,isDownsampleInProgress:a,isDownsamplingDisabled:l,error:c,shownError:d,layout:h,revision:m,shownBlocker:v}=this.state,w=this.getCachedConfig(r,s,a,l,t??[],c),{model:E}=this.props,y=t!=null&&v==null,p=null;return v!=null?p=n.jsx(R,{errorMessage:"".concat(v),onConfirm:()=>{E.fireBlockerClear()}}):d!=null?p=n.jsx(R,{errorMessage:"".concat(r),onDiscard:()=>{this.handleDownsampleErrorClose()},onConfirm:()=>{this.handleDownsampleErrorClose(),this.handleDownsampleClick()}}):r!=null&&(p=n.jsx(R,{errorMessage:"".concat(r),onDiscard:()=>{this.handleDownsampleErrorClose()},onConfirm:()=>{this.handleDownsampleErrorClose(),this.handleDownsampleClick()}})),n.jsxs("div",{className:"h-100 w-100 chart-wrapper",ref:this.plotWrapperMerged,children:[y&&n.jsx(e,{ref:this.plot,data:t,layout:h,revision:m,config:w,onAfterPlot:this.handleAfterPlot,onError:f.error,onRelayout:this.handleRelayout,onUpdate:this.handlePlotUpdate,onRestyle:this.handleRestyle,style:{height:"100%",width:"100%"}}),p]})}}o(b,"defaultProps",{isActive:!0,settings:{timeZone:"America/New_York",defaultDateTimeFormat:z.FULL_DATE_FORMAT,showTimeZone:!1,showTSeparator:!0,formatter:[],webgl:!0},Plotly:J,onDisconnect:()=>{},onReconnect:()=>{},onUpdate:()=>{},onError:()=>{},onSettingsChanged:()=>{}});function ae(i){var e=K();return n.jsx(b,g(g({},i),{},{theme:e}))}export{ae as default};
2
- //# sourceMappingURL=Chart-BsXISs8I.js.map
1
+ import{D as n,r as M,J as k,bA as C,bx as L}from"./vendor-CU9m3C3n.js";import{a as x,bc as j,bB as B,bC as U}from"./index-B7ApSrjY.js";import{c as I}from"./Plotly-CJhuCDFM.js";import{aj as W,K as u,L as N,e as T,d as _,b as z}from"./index-mF0PIqiD.js";import{L as V,J as P,bC as K}from"./LogPanel-Vgf5WZFJ.js";import{D as $}from"./DownsamplingError--AAvWHv_.js";import{m as H}from"./useMergeRef-BVbjpcbf.js";import{P as J}from"./plotly-BJo_M7Cs.js";import"./helpers-BosuxZz1.js";function R(i){var{errorMessage:e,onDiscard:t,onConfirm:r,onCancel:s,"data-testid":a}=i,l=a!=null?"".concat(a,"-message"):void 0;return n.jsx("div",{className:"chart-panel-overlay chart-error-overlay",children:n.jsxs("div",{className:"chart-panel-overlay-content chart-error-overlay-content",children:[n.jsxs("div",{className:"info-message","data-testid":l,children:[e,n.jsx(V,{copy:e,UNSAFE_style:{margin:"0"},isQuiet:!0})]}),n.jsxs("div",{children:[s&&n.jsx(P,{onClick:s,kind:"secondary",children:"Cancel"}),t&&n.jsx(P,{onClick:t,kind:"secondary",children:"Dismiss"}),r&&n.jsx(P,{onClick:r,kind:"primary",children:"Continue"})]})]})})}function A(i,e){var t=Object.keys(i);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(i);e&&(r=r.filter(function(s){return Object.getOwnPropertyDescriptor(i,s).enumerable})),t.push.apply(t,r)}return t}function g(i){for(var e=1;e<arguments.length;e++){var t=arguments[e]!=null?arguments[e]:{};e%2?A(Object(t),!0).forEach(function(r){o(i,r,t[r])}):Object.getOwnPropertyDescriptors?Object.defineProperties(i,Object.getOwnPropertyDescriptors(t)):A(Object(t)).forEach(function(r){Object.defineProperty(i,r,Object.getOwnPropertyDescriptor(t,r))})}return i}function o(i,e,t){return(e=Y(e))in i?Object.defineProperty(i,e,{value:t,enumerable:!0,configurable:!0,writable:!0}):i[e]=t,i}function Y(i){var e=Z(i,"string");return typeof e=="symbol"?e:e+""}function Z(i,e){if(typeof i!="object"||!i)return i;var t=i[Symbol.toPrimitive];if(t!==void 0){var r=t.call(i,e);if(typeof r!="object")return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return(e==="string"?String:Number)(i)}var f=x.module("Chart");class b extends M.Component{static convertIcon(e){var[t,,,,r]=e.icon,s="".concat(r);return{width:t,path:s,ascent:t,descent:0,transform:"matrix(1, 0, 0, 1, 0, 0)"}}static downsampleButtonTitle(e,t){return e?"Downsampling in progress...":t?"Downsampling disabled, click to enable":"Downsampling enabled, click to disable"}static downsampleButtonAttr(e,t){return e?"animation-spin":t?void 0:"fill-active"}constructor(e){super(e),o(this,"currentSeries",void 0),o(this,"PlotComponent",void 0),o(this,"plot",void 0),o(this,"plotWrapper",void 0),o(this,"plotWrapperMerged",void 0),o(this,"columnFormats",void 0),o(this,"dateTimeFormatterOptions",void 0),o(this,"decimalFormatOptions",void 0),o(this,"integerFormatOptions",void 0),o(this,"webgl",void 0),o(this,"rect",void 0),o(this,"ranges",void 0),o(this,"isSubscribed",void 0),o(this,"isLoadedFired",void 0),o(this,"resizeObserver",void 0),o(this,"getCachedConfig",L((t,r,s,a,l,c)=>{var d=[],h=!!t;h&&d.push({name:"Downsampling failed: ".concat(t),title:"Downsampling failed",click:()=>{this.toggleErrorMessage("".concat(t))},icon:b.convertIcon(j),attr:"fill-warning"});var m=!!c;if(m&&d.push({name:"Error: ".concat(c),title:"Error",click:()=>{this.toggleErrorMessage("".concat(c))},icon:b.convertIcon(j),attr:"fill-warning"}),r||s||a||h){var v=b.downsampleButtonTitle(s,a),w=b.downsampleButtonAttr(s,a),E=s?B:U;d.push({name:v,title:"Downsampling status",icon:b.convertIcon(E),click:this.handleDownsampleClick,attr:w})}var y=l.some(S=>{var{type:F}=S;return F!=null&&!F.includes("3d")}),p=l.some(S=>{var{type:F}=S;return F!=null&&F.includes("3d")}),D=["zoomIn2d","zoomOut2d","autoScale2d","resetScale2d"],O=["orbitRotation","tableRotation","resetCameraDefault3d"];return{displaylogo:!1,responsive:!0,displayModeBar:s||h||m?!0:"hover",modeBarButtons:[d,["toImage"],["zoom2d","pan2d"],[...y?D:[],...p?O:[]]]}})),W(this),this.PlotComponent=I(e.Plotly),this.plot=k.createRef(),this.plotWrapper=k.createRef(),this.plotWrapperMerged=H(this.plotWrapper,e.containerRef),this.columnFormats=[],this.dateTimeFormatterOptions={},this.decimalFormatOptions={},this.integerFormatOptions={},this.isSubscribed=!1,this.isLoadedFired=!1,this.currentSeries=0,this.resizeObserver=new window.ResizeObserver(this.handleResize),this.state={data:null,downsamplingError:null,isDownsampleFinished:!1,isDownsampleInProgress:!1,isDownsamplingDisabled:!1,error:null,shownError:null,layout:{datarevision:0},revision:0,shownBlocker:null}}componentDidMount(){this.updateDimensions(),this.updateModelDimensions(),this.initData(),this.initFormatter();var{isActive:e,model:t}=this.props;e&&this.subscribe(t),this.plotWrapper.current!=null&&this.resizeObserver.observe(this.plotWrapper.current),this.handleThemeChange()}componentDidUpdate(e){var{isActive:t,model:r,settings:s,theme:a}=this.props;this.updateFormatterSettings(s),r!==e.model&&(this.unsubscribe(e.model),this.subscribe(r)),t!==e.isActive&&(t?(this.updateDimensions(),this.subscribe(r)):this.unsubscribe(r)),a!==e.theme&&this.handleThemeChange()}componentWillUnmount(){var{model:e}=this.props;this.unsubscribe(e),this.resizeObserver.disconnect()}getPlotRect(){var e,t;return(e=(t=this.plotWrapper.current)===null||t===void 0?void 0:t.getBoundingClientRect())!==null&&e!==void 0?e:null}initData(){var{model:e}=this.props;this.setState(t=>{var{layout:r}=t;return{data:e.getData(),layout:g(g({},r),e.getLayout())}})}subscribe(e){if(!this.isSubscribed){if(!this.rect||this.rect.width===0||this.rect.height===0){f.debug2("Delaying subscription until model dimensions are set");return}e.subscribe(this.handleModelEvent),this.isSubscribed=!0}}unsubscribe(e){this.isSubscribed&&(e.unsubscribe(this.handleModelEvent),this.isSubscribed=!1)}handleAfterPlot(){this.plot.current!=null}handleDownsampleClick(){this.setState(e=>{var{isDownsamplingDisabled:t}=e;return{downsamplingError:null,isDownsampleInProgress:!1,isDownsampleFinished:!1,isDownsamplingDisabled:!t}},()=>{var{model:e}=this.props,{isDownsamplingDisabled:t}=this.state;e.setDownsamplingDisabled(t)})}handleErrorClose(){this.setState({shownError:null})}handleDownsampleErrorClose(){this.setState({downsamplingError:null})}handleModelEvent(e){var{type:t,detail:r}=e;switch(f.debug2("Received data update",t,r),t){case u.EVENT_UPDATED:{this.currentSeries+=1,this.setState(p=>{var{layout:D,revision:O}=p;return typeof D.datarevision=="number"&&(D.datarevision+=1),{data:r,layout:D,revision:O+1}});var{onUpdate:s}=this.props;s({isLoading:!this.isLoadedFired});break}case u.EVENT_LOADFINISHED:{var{onUpdate:a}=this.props;this.isLoadedFired=!0,a({isLoading:!1});break}case u.EVENT_DISCONNECT:{var{onDisconnect:l}=this.props;l();break}case u.EVENT_RECONNECT:{var{onReconnect:c}=this.props;c();break}case u.EVENT_DOWNSAMPLESTARTED:{this.setState({isDownsampleFinished:!1,isDownsampleInProgress:!0,downsamplingError:null});break}case u.EVENT_DOWNSAMPLEFINISHED:{this.setState({isDownsampleFinished:!0,isDownsampleInProgress:!1,downsamplingError:null});break}case u.EVENT_DOWNSAMPLENEEDED:case u.EVENT_DOWNSAMPLEFAILED:{var d,h=(d=r.message)!==null&&d!==void 0?d:r;this.setState({isDownsampleFinished:!1,isDownsampleInProgress:!1,isDownsamplingDisabled:!1,downsamplingError:h});var{onError:m}=this.props;m(new $(h==null?void 0:"".concat(h)));break}case u.EVENT_ERROR:{var v="".concat(r);this.setState({error:v});var{onError:w}=this.props;w(new Error(v));break}case u.EVENT_BLOCKER:{var E="".concat(r);this.setState({shownBlocker:E});break}case u.EVENT_BLOCKER_CLEAR:{this.setState({shownBlocker:null});break}case u.EVENT_LAYOUT_UPDATED:{var y=r;this.setState(p=>{var{layout:D,revision:O}=p;return{layout:g(g({},D),y),revision:O+1}});break}default:f.debug("Unknown event type",t,e)}}handlePlotUpdate(e){var{layout:t}=e,r=N.getLayoutRanges(t),s=!C(r,this.ranges);s&&(this.ranges=r,this.updateModelDimensions(!0))}handleRelayout(e){if(f.debug("handleRelayout",e),e.hiddenlabels!=null){var{onSettingsChanged:t}=this.props,r=[...e.hiddenlabels];t({hiddenSeries:r})}this.updateModelDimensions()}handleResize(){this.updateDimensions()}handleRestyle(e){var[t,r]=e;if(f.debug("handleRestyle",t,r),Object.keys(t).includes("visible")){var{data:s}=this.state,{onSettingsChanged:a}=this.props;if(s!=null){var l=s.reduce((c,d)=>{var{name:h,visible:m}=d;return h!=null&&m==="legendonly"?[...c,h]:c},[]);a({hiddenSeries:l})}}}handleThemeChange(){var{theme:e,model:t}=this.props,{dh:r}=t,s=new N(r);this.setState(a=>{var{layout:l}=a;return{layout:g(g({},l),{},{template:s.makeDefaultTemplate(e)})}})}toggleErrorMessage(e){this.setState(t=>{var{shownError:r}=t;return{shownError:r===e?null:e}})}updateModelDimensions(){var e=arguments.length>0&&arguments[0]!==void 0?arguments[0]:!1,t=this.getPlotRect();if(!t){f.warn("Unable to get plotting rect");return}var r=!this.rect||this.rect.width!==t.width||this.rect.height!==t.height;if(r||e){this.rect=t;var{isActive:s,model:a}=this.props;a.setDimensions(t),s&&this.subscribe(a)}}initFormatter(){var{settings:e}=this.props;this.updateFormatterSettings(e)}updateFormatterSettings(e){var t=T.getColumnFormats(e),r=T.getDateTimeFormatterOptions(e),{defaultDecimalFormatOptions:s={},defaultIntegerFormatOptions:a={}}=e;(!C(this.columnFormats,t)||!C(this.dateTimeFormatterOptions,r)||!C(this.decimalFormatOptions,s)||!C(this.integerFormatOptions,a))&&(this.columnFormats=T.getColumnFormats(e),this.dateTimeFormatterOptions=r,this.decimalFormatOptions=s,this.integerFormatOptions=a,this.updateFormatter()),this.webgl!==e.webgl&&(this.webgl=e.webgl,this.updateRenderOptions())}updateFormatter(){var{model:e}=this.props,t=new _(e.dh,this.columnFormats,this.dateTimeFormatterOptions,this.decimalFormatOptions,this.integerFormatOptions);e.setFormatter(t)}updateRenderOptions(){var{model:e}=this.props,t={webgl:this.webgl};e.setRenderOptions(t)}updateDimensions(){var e=this.getPlotRect(),{Plotly:t}=this.props;this.plot.current!=null&&e!=null&&e.width>0&&e.height>0&&t.relayout(this.plot.current.el,{autosize:!0}).catch(r=>{f.debug("Unable to resize, promise rejected",r)})}render(){var{PlotComponent:e}=this,{data:t,downsamplingError:r,isDownsampleFinished:s,isDownsampleInProgress:a,isDownsamplingDisabled:l,error:c,shownError:d,layout:h,revision:m,shownBlocker:v}=this.state,w=this.getCachedConfig(r,s,a,l,t??[],c),{model:E}=this.props,y=t!=null&&v==null,p=null;return v!=null?p=n.jsx(R,{errorMessage:"".concat(v),onConfirm:()=>{E.fireBlockerClear()}}):d!=null?p=n.jsx(R,{errorMessage:"".concat(r),onDiscard:()=>{this.handleDownsampleErrorClose()},onConfirm:()=>{this.handleDownsampleErrorClose(),this.handleDownsampleClick()}}):r!=null&&(p=n.jsx(R,{errorMessage:"".concat(r),onDiscard:()=>{this.handleDownsampleErrorClose()},onConfirm:()=>{this.handleDownsampleErrorClose(),this.handleDownsampleClick()}})),n.jsxs("div",{className:"h-100 w-100 chart-wrapper",ref:this.plotWrapperMerged,children:[y&&n.jsx(e,{ref:this.plot,data:t,layout:h,revision:m,config:w,onAfterPlot:this.handleAfterPlot,onError:f.error,onRelayout:this.handleRelayout,onUpdate:this.handlePlotUpdate,onRestyle:this.handleRestyle,style:{height:"100%",width:"100%"}}),p]})}}o(b,"defaultProps",{isActive:!0,settings:{timeZone:"America/New_York",defaultDateTimeFormat:z.FULL_DATE_FORMAT,showTimeZone:!1,showTSeparator:!0,formatter:[],webgl:!0},Plotly:J,onDisconnect:()=>{},onReconnect:()=>{},onUpdate:()=>{},onError:()=>{},onSettingsChanged:()=>{}});function ae(i){var e=K();return n.jsx(b,g(g({},i),{},{theme:e}))}export{ae as default};
2
+ //# sourceMappingURL=Chart-BCLvsPEg.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"Chart-BsXISs8I.js","sources":["../../../chart/dist/ChartErrorOverlay.js","../../../chart/dist/Chart.js"],"sourcesContent":["import { CopyButton, Button } from '@deephaven/components';\nimport \"./ChartErrorOverlay.css\";\nimport { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nfunction ChartErrorOverlay(_ref) {\n var {\n errorMessage,\n onDiscard,\n onConfirm,\n onCancel,\n 'data-testid': dataTestId\n } = _ref;\n var messageTestId = dataTestId != null ? \"\".concat(dataTestId, \"-message\") : undefined;\n return /*#__PURE__*/_jsx(\"div\", {\n className: \"chart-panel-overlay chart-error-overlay\",\n children: /*#__PURE__*/_jsxs(\"div\", {\n className: \"chart-panel-overlay-content chart-error-overlay-content\",\n children: [/*#__PURE__*/_jsxs(\"div\", {\n className: \"info-message\",\n \"data-testid\": messageTestId,\n children: [errorMessage, /*#__PURE__*/_jsx(CopyButton, {\n copy: errorMessage,\n UNSAFE_style: {\n margin: '0'\n },\n isQuiet: true\n })]\n }), /*#__PURE__*/_jsxs(\"div\", {\n children: [onCancel && /*#__PURE__*/_jsx(Button, {\n onClick: onCancel,\n kind: \"secondary\",\n children: \"Cancel\"\n }), onDiscard && /*#__PURE__*/_jsx(Button, {\n onClick: onDiscard,\n kind: \"secondary\",\n children: \"Dismiss\"\n }), onConfirm && /*#__PURE__*/_jsx(Button, {\n onClick: onConfirm,\n kind: \"primary\",\n children: \"Continue\"\n })]\n })]\n })\n });\n}\nexport default ChartErrorOverlay;\n//# sourceMappingURL=ChartErrorOverlay.js.map","function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }\nfunction _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }\nfunction _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\nfunction _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\nfunction _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\nimport React, { Component } from 'react';\nimport deepEqual from 'fast-deep-equal';\nimport memoize from 'memoize-one';\nimport { vsLoading, dhGraphLineDown, dhWarningFilled } from '@deephaven/icons';\nimport { Formatter, FormatterUtils, DateUtils } from '@deephaven/jsapi-utils';\nimport Log from '@deephaven/log';\nimport { mergeRefs } from '@deephaven/react-hooks';\nimport { bindAllMethods } from '@deephaven/utils';\nimport createPlotlyComponent from \"./plotly/createPlotlyComponent.js\";\nimport Plotly from \"./plotly/Plotly.js\";\nimport ChartModel from \"./ChartModel.js\";\nimport ChartErrorOverlay from \"./ChartErrorOverlay.js\";\nimport ChartUtils from \"./ChartUtils.js\";\nimport \"./Chart.css\";\nimport DownsamplingError from \"./DownsamplingError.js\";\nimport useChartTheme from \"./useChartTheme.js\";\nimport { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nvar log = Log.module('Chart');\n\n// All of the ChartProps have default values except for model in the Chart\n// component, hence the Partial here.\n\nclass Chart extends Component {\n /**\n * Convert a font awesome icon definition to a plotly icon definition\n * @param faIcon The icon to convert\n */\n static convertIcon(faIcon) {\n var [width,,,, path] = faIcon.icon;\n // By default the icons are flipped upside down, so we need to add our own transform\n // https://github.com/plotly/plotly.js/issues/1335\n var stringPath = \"\".concat(path);\n return {\n width,\n path: stringPath,\n ascent: width,\n descent: 0,\n transform: \"matrix(1, 0, 0, 1, 0, 0)\"\n };\n }\n static downsampleButtonTitle(isDownsampleInProgress, isDownsamplingDisabled) {\n if (isDownsampleInProgress) {\n return 'Downsampling in progress...';\n }\n return isDownsamplingDisabled ? 'Downsampling disabled, click to enable' : 'Downsampling enabled, click to disable';\n }\n static downsampleButtonAttr(isDownsampleInProgress, isDownsamplingDisabled) {\n if (isDownsampleInProgress) {\n return 'animation-spin';\n }\n return isDownsamplingDisabled ? undefined : 'fill-active';\n }\n constructor(props) {\n super(props);\n _defineProperty(this, \"currentSeries\", void 0);\n _defineProperty(this, \"PlotComponent\", void 0);\n _defineProperty(this, \"plot\", void 0);\n _defineProperty(this, \"plotWrapper\", void 0);\n _defineProperty(this, \"plotWrapperMerged\", void 0);\n _defineProperty(this, \"columnFormats\", void 0);\n _defineProperty(this, \"dateTimeFormatterOptions\", void 0);\n _defineProperty(this, \"decimalFormatOptions\", void 0);\n _defineProperty(this, \"integerFormatOptions\", void 0);\n _defineProperty(this, \"webgl\", void 0);\n _defineProperty(this, \"rect\", void 0);\n _defineProperty(this, \"ranges\", void 0);\n _defineProperty(this, \"isSubscribed\", void 0);\n _defineProperty(this, \"isLoadedFired\", void 0);\n // Listen for resizing of the element and update the canvas appropriately\n _defineProperty(this, \"resizeObserver\", void 0);\n _defineProperty(this, \"getCachedConfig\", memoize((downsamplingError, isDownsampleFinished, isDownsampleInProgress, isDownsamplingDisabled, data, error) => {\n var customButtons = [];\n var hasDownsampleError = Boolean(downsamplingError);\n if (hasDownsampleError) {\n customButtons.push({\n name: \"Downsampling failed: \".concat(downsamplingError),\n title: 'Downsampling failed',\n click: () => {\n this.toggleErrorMessage(\"\".concat(downsamplingError));\n },\n icon: Chart.convertIcon(dhWarningFilled),\n attr: 'fill-warning'\n });\n }\n var hasError = Boolean(error);\n if (hasError) {\n customButtons.push({\n name: \"Error: \".concat(error),\n title: \"Error\",\n click: () => {\n this.toggleErrorMessage(\"\".concat(error));\n },\n icon: Chart.convertIcon(dhWarningFilled),\n attr: 'fill-warning'\n });\n }\n if (isDownsampleFinished || isDownsampleInProgress || isDownsamplingDisabled || hasDownsampleError) {\n var name = Chart.downsampleButtonTitle(isDownsampleInProgress, isDownsamplingDisabled);\n var attr = Chart.downsampleButtonAttr(isDownsampleInProgress, isDownsamplingDisabled);\n var icon = isDownsampleInProgress ? vsLoading : dhGraphLineDown;\n customButtons.push({\n name,\n title: 'Downsampling status',\n icon: Chart.convertIcon(icon),\n click: this.handleDownsampleClick,\n attr\n });\n }\n var has2D = data.some(_ref => {\n var {\n type\n } = _ref;\n return type != null && !type.includes('3d');\n });\n var has3D = data.some(_ref2 => {\n var {\n type\n } = _ref2;\n return type != null && type.includes('3d');\n });\n var buttons2D = ['zoomIn2d', 'zoomOut2d', 'autoScale2d', 'resetScale2d'];\n var buttons3D = ['orbitRotation', 'tableRotation', 'resetCameraDefault3d'];\n return {\n displaylogo: false,\n // scales the plot to the container size\n // https://github.com/plotly/react-plotly.js/issues/102\n responsive: true,\n // Display the mode bar if there's an error or downsampling so user can see progress\n // Yes, the value is a boolean or the string 'hover': https://github.com/plotly/plotly.js/blob/master/src/plot_api/plot_config.js#L249\n displayModeBar:\n // eslint-disable-next-line @typescript-eslint/strict-boolean-expressions\n isDownsampleInProgress || hasDownsampleError || hasError ? true : 'hover',\n // Each array gets grouped together in the mode bar\n modeBarButtons: [customButtons, ['toImage'], ['zoom2d', 'pan2d'],\n // These work the same for both 2d and 3d\n [...(has2D ? buttons2D : []), ...(has3D ? buttons3D : [])]]\n };\n }));\n bindAllMethods(this);\n this.PlotComponent = createPlotlyComponent(props.Plotly);\n this.plot = /*#__PURE__*/React.createRef();\n this.plotWrapper = /*#__PURE__*/React.createRef();\n this.plotWrapperMerged = mergeRefs(this.plotWrapper, props.containerRef);\n this.columnFormats = [];\n this.dateTimeFormatterOptions = {};\n this.decimalFormatOptions = {};\n this.integerFormatOptions = {};\n this.isSubscribed = false;\n this.isLoadedFired = false;\n this.currentSeries = 0;\n this.resizeObserver = new window.ResizeObserver(this.handleResize);\n this.state = {\n data: null,\n downsamplingError: null,\n isDownsampleFinished: false,\n isDownsampleInProgress: false,\n isDownsamplingDisabled: false,\n error: null,\n shownError: null,\n layout: {\n datarevision: 0\n },\n revision: 0,\n shownBlocker: null\n };\n }\n componentDidMount() {\n // Need to make sure the model dimensions are up to date before initializing the data\n this.updateDimensions();\n this.updateModelDimensions();\n this.initData();\n this.initFormatter();\n var {\n isActive,\n model\n } = this.props;\n if (isActive) {\n this.subscribe(model);\n }\n if (this.plotWrapper.current != null) {\n this.resizeObserver.observe(this.plotWrapper.current);\n }\n this.handleThemeChange();\n }\n componentDidUpdate(prevProps) {\n var {\n isActive,\n model,\n settings,\n theme\n } = this.props;\n this.updateFormatterSettings(settings);\n if (model !== prevProps.model) {\n this.unsubscribe(prevProps.model);\n this.subscribe(model);\n }\n if (isActive !== prevProps.isActive) {\n if (isActive) {\n this.updateDimensions();\n this.subscribe(model);\n } else {\n this.unsubscribe(model);\n }\n }\n if (theme !== prevProps.theme) {\n this.handleThemeChange();\n }\n }\n componentWillUnmount() {\n var {\n model\n } = this.props;\n this.unsubscribe(model);\n this.resizeObserver.disconnect();\n }\n getPlotRect() {\n var _this$plotWrapper$cur, _this$plotWrapper$cur2;\n return (_this$plotWrapper$cur = (_this$plotWrapper$cur2 = this.plotWrapper.current) === null || _this$plotWrapper$cur2 === void 0 ? void 0 : _this$plotWrapper$cur2.getBoundingClientRect()) !== null && _this$plotWrapper$cur !== void 0 ? _this$plotWrapper$cur : null;\n }\n initData() {\n var {\n model\n } = this.props;\n this.setState(_ref3 => {\n var {\n layout\n } = _ref3;\n return {\n data: model.getData(),\n layout: _objectSpread(_objectSpread({}, layout), model.getLayout())\n };\n });\n }\n subscribe(model) {\n if (this.isSubscribed) {\n return;\n }\n if (!this.rect || this.rect.width === 0 || this.rect.height === 0) {\n log.debug2('Delaying subscription until model dimensions are set');\n return;\n }\n model.subscribe(this.handleModelEvent);\n this.isSubscribed = true;\n }\n unsubscribe(model) {\n if (!this.isSubscribed) {\n return;\n }\n model.unsubscribe(this.handleModelEvent);\n this.isSubscribed = false;\n }\n handleAfterPlot() {\n if (this.plot.current != null) {\n // TODO: Translate whatever Don was doing in plotting.js in the afterplot here so that area graphs show up properly\n }\n }\n handleDownsampleClick() {\n this.setState(_ref4 => {\n var {\n isDownsamplingDisabled\n } = _ref4;\n return {\n downsamplingError: null,\n isDownsampleInProgress: false,\n isDownsampleFinished: false,\n isDownsamplingDisabled: !isDownsamplingDisabled\n };\n }, () => {\n var {\n model\n } = this.props;\n var {\n isDownsamplingDisabled\n } = this.state;\n model.setDownsamplingDisabled(isDownsamplingDisabled);\n });\n }\n handleErrorClose() {\n this.setState({\n shownError: null\n });\n }\n handleDownsampleErrorClose() {\n this.setState({\n downsamplingError: null\n });\n }\n handleModelEvent(event) {\n var {\n type,\n detail\n } = event;\n log.debug2('Received data update', type, detail);\n switch (type) {\n case ChartModel.EVENT_UPDATED:\n {\n this.currentSeries += 1;\n this.setState(state => {\n var {\n layout,\n revision\n } = state;\n if (typeof layout.datarevision === 'number') {\n layout.datarevision += 1;\n }\n return {\n data: detail,\n layout,\n revision: revision + 1\n };\n });\n var {\n onUpdate\n } = this.props;\n onUpdate({\n isLoading: !this.isLoadedFired\n });\n break;\n }\n case ChartModel.EVENT_LOADFINISHED:\n {\n var {\n onUpdate: _onUpdate\n } = this.props;\n this.isLoadedFired = true;\n _onUpdate({\n isLoading: false\n });\n break;\n }\n case ChartModel.EVENT_DISCONNECT:\n {\n var {\n onDisconnect\n } = this.props;\n onDisconnect();\n break;\n }\n case ChartModel.EVENT_RECONNECT:\n {\n var {\n onReconnect\n } = this.props;\n onReconnect();\n break;\n }\n case ChartModel.EVENT_DOWNSAMPLESTARTED:\n {\n this.setState({\n isDownsampleFinished: false,\n isDownsampleInProgress: true,\n downsamplingError: null\n });\n break;\n }\n case ChartModel.EVENT_DOWNSAMPLEFINISHED:\n {\n this.setState({\n isDownsampleFinished: true,\n isDownsampleInProgress: false,\n downsamplingError: null\n });\n break;\n }\n case ChartModel.EVENT_DOWNSAMPLENEEDED:\n case ChartModel.EVENT_DOWNSAMPLEFAILED:\n {\n var _message;\n var downsamplingError = (_message = detail.message) !== null && _message !== void 0 ? _message : detail;\n this.setState({\n isDownsampleFinished: false,\n isDownsampleInProgress: false,\n isDownsamplingDisabled: false,\n downsamplingError\n });\n var {\n onError\n } = this.props;\n onError(new DownsamplingError(downsamplingError == null ? undefined : \"\".concat(downsamplingError)));\n break;\n }\n case ChartModel.EVENT_ERROR:\n {\n var error = \"\".concat(detail);\n this.setState({\n error\n });\n var {\n onError: _onError\n } = this.props;\n _onError(new Error(error));\n break;\n }\n case ChartModel.EVENT_BLOCKER:\n {\n var blocker = \"\".concat(detail);\n this.setState({\n shownBlocker: blocker\n });\n break;\n }\n case ChartModel.EVENT_BLOCKER_CLEAR:\n {\n this.setState({\n shownBlocker: null\n });\n break;\n }\n case ChartModel.EVENT_LAYOUT_UPDATED:\n {\n var newLayout = detail;\n this.setState(_ref5 => {\n var {\n layout,\n revision\n } = _ref5;\n return {\n layout: _objectSpread(_objectSpread({}, layout), newLayout),\n revision: revision + 1\n };\n });\n break;\n }\n default:\n log.debug('Unknown event type', type, event);\n }\n }\n handlePlotUpdate(figure) {\n // User could have modified zoom/pan here, update the model dimensions\n // We don't need to update the datarevision, as we don't have any data changes\n // until an update comes back from the server anyway\n var {\n layout\n } = figure;\n var ranges = ChartUtils.getLayoutRanges(layout);\n var isRangesChanged = !deepEqual(ranges, this.ranges);\n if (isRangesChanged) {\n this.ranges = ranges;\n this.updateModelDimensions(true);\n }\n }\n handleRelayout(changes) {\n log.debug('handleRelayout', changes);\n if (changes.hiddenlabels != null) {\n var {\n onSettingsChanged\n } = this.props;\n // Pie charts store series visibility in layout.hiddenlabels and trigger relayout on changes\n // Series visibility for other types of charts is handled in handleRestyle\n var hiddenSeries = [...changes.hiddenlabels];\n onSettingsChanged({\n hiddenSeries\n });\n }\n this.updateModelDimensions();\n }\n handleResize() {\n this.updateDimensions();\n }\n handleRestyle(_ref6) {\n var [changes, seriesIndexes] = _ref6;\n log.debug('handleRestyle', changes, seriesIndexes);\n if (Object.keys(changes).includes('visible')) {\n var {\n data\n } = this.state;\n var {\n onSettingsChanged\n } = this.props;\n if (data != null) {\n var hiddenSeries = data.reduce((acc, _ref7) => {\n var {\n name,\n visible\n } = _ref7;\n return name != null && visible === 'legendonly' ? [...acc, name] : acc;\n }, []);\n onSettingsChanged({\n hiddenSeries\n });\n }\n }\n }\n handleThemeChange() {\n var {\n theme,\n model\n } = this.props;\n var {\n dh\n } = model;\n var chartUtils = new ChartUtils(dh);\n this.setState(_ref8 => {\n var {\n layout\n } = _ref8;\n return {\n layout: _objectSpread(_objectSpread({}, layout), {}, {\n template: chartUtils.makeDefaultTemplate(theme)\n })\n };\n });\n }\n\n /**\n * Toggle the error message. If it is already being displayed, then hide it.\n */\n toggleErrorMessage(error) {\n this.setState(_ref9 => {\n var {\n shownError\n } = _ref9;\n return {\n shownError: shownError === error ? null : error\n };\n });\n }\n\n /**\n * Update the models dimensions and ranges.\n * Note that this will update it all whether the plot size changes OR the range\n * the user is looking at has changed (eg. panning/zooming).\n * Could update each independently, but doing them at the same time keeps the\n * ChartModel API a bit cleaner.\n * @param force Force a change even if the chart dimensions haven't changed (eg. after pan/zoom)\n */\n updateModelDimensions() {\n var force = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;\n var rect = this.getPlotRect();\n if (!rect) {\n log.warn('Unable to get plotting rect');\n return;\n }\n var isRectChanged = !this.rect || this.rect.width !== rect.width || this.rect.height !== rect.height;\n if (isRectChanged || force) {\n this.rect = rect;\n var {\n isActive,\n model\n } = this.props;\n model.setDimensions(rect);\n // We may need to resubscribe if dimensions were too small before\n if (isActive) {\n this.subscribe(model);\n }\n }\n }\n initFormatter() {\n var {\n settings\n } = this.props;\n this.updateFormatterSettings(settings);\n }\n updateFormatterSettings(settings) {\n var columnFormats = FormatterUtils.getColumnFormats(settings);\n var dateTimeFormatterOptions = FormatterUtils.getDateTimeFormatterOptions(settings);\n var {\n defaultDecimalFormatOptions = {},\n defaultIntegerFormatOptions = {}\n } = settings;\n if (!deepEqual(this.columnFormats, columnFormats) || !deepEqual(this.dateTimeFormatterOptions, dateTimeFormatterOptions) || !deepEqual(this.decimalFormatOptions, defaultDecimalFormatOptions) || !deepEqual(this.integerFormatOptions, defaultIntegerFormatOptions)) {\n this.columnFormats = FormatterUtils.getColumnFormats(settings);\n this.dateTimeFormatterOptions = dateTimeFormatterOptions;\n this.decimalFormatOptions = defaultDecimalFormatOptions;\n this.integerFormatOptions = defaultIntegerFormatOptions;\n this.updateFormatter();\n }\n if (this.webgl !== settings.webgl) {\n this.webgl = settings.webgl;\n this.updateRenderOptions();\n }\n }\n updateFormatter() {\n var {\n model\n } = this.props;\n var formatter = new Formatter(model.dh, this.columnFormats, this.dateTimeFormatterOptions, this.decimalFormatOptions, this.integerFormatOptions);\n model.setFormatter(formatter);\n }\n updateRenderOptions() {\n var {\n model\n } = this.props;\n var renderOptions = {\n webgl: this.webgl\n };\n model.setRenderOptions(renderOptions);\n }\n updateDimensions() {\n var rect = this.getPlotRect();\n var {\n Plotly: PlotlyProp\n } = this.props;\n if (this.plot.current != null && rect != null && rect.width > 0 && rect.height > 0) {\n // Call relayout to resize avoiding the debouncing plotly does\n // https://github.com/plotly/plotly.js/issues/2769#issuecomment-402099552\n PlotlyProp.relayout(this.plot.current.el, {\n autosize: true\n }).catch(e => {\n log.debug('Unable to resize, promise rejected', e);\n });\n }\n }\n render() {\n var {\n PlotComponent\n } = this;\n var {\n data,\n downsamplingError,\n isDownsampleFinished,\n isDownsampleInProgress,\n isDownsamplingDisabled,\n error,\n shownError,\n layout,\n revision,\n shownBlocker\n } = this.state;\n var config = this.getCachedConfig(downsamplingError, isDownsampleFinished, isDownsampleInProgress, isDownsamplingDisabled, data !== null && data !== void 0 ? data : [], error);\n var {\n model\n } = this.props;\n var isPlotShown = data != null && shownBlocker == null;\n var errorOverlay = null;\n if (shownBlocker != null) {\n errorOverlay = /*#__PURE__*/_jsx(ChartErrorOverlay, {\n errorMessage: \"\".concat(shownBlocker),\n onConfirm: () => {\n model.fireBlockerClear();\n }\n });\n } else if (shownError != null) {\n errorOverlay = /*#__PURE__*/_jsx(ChartErrorOverlay, {\n errorMessage: \"\".concat(downsamplingError),\n onDiscard: () => {\n this.handleDownsampleErrorClose();\n },\n onConfirm: () => {\n this.handleDownsampleErrorClose();\n this.handleDownsampleClick();\n }\n });\n } else if (downsamplingError != null) {\n errorOverlay = /*#__PURE__*/_jsx(ChartErrorOverlay, {\n errorMessage: \"\".concat(downsamplingError),\n onDiscard: () => {\n this.handleDownsampleErrorClose();\n },\n onConfirm: () => {\n this.handleDownsampleErrorClose();\n this.handleDownsampleClick();\n }\n });\n }\n return /*#__PURE__*/_jsxs(\"div\", {\n className: \"h-100 w-100 chart-wrapper\",\n ref: this.plotWrapperMerged,\n children: [isPlotShown && /*#__PURE__*/_jsx(PlotComponent\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n , {\n ref: this.plot,\n data: data,\n layout: layout,\n revision: revision,\n config: config,\n onAfterPlot: this.handleAfterPlot,\n onError: log.error,\n onRelayout: this.handleRelayout,\n onUpdate: this.handlePlotUpdate,\n onRestyle: this.handleRestyle,\n style: {\n height: '100%',\n width: '100%'\n }\n }), errorOverlay]\n });\n }\n}\n_defineProperty(Chart, \"defaultProps\", {\n isActive: true,\n settings: {\n timeZone: 'America/New_York',\n defaultDateTimeFormat: DateUtils.FULL_DATE_FORMAT,\n showTimeZone: false,\n showTSeparator: true,\n formatter: [],\n webgl: true\n },\n Plotly,\n onDisconnect: () => undefined,\n onReconnect: () => undefined,\n onUpdate: () => undefined,\n onError: () => undefined,\n onSettingsChanged: () => undefined\n});\nexport default function ChartContainer(props) {\n var chartTheme = useChartTheme();\n // eslint-disable-next-line react/jsx-props-no-spreading\n return /*#__PURE__*/_jsx(Chart, _objectSpread(_objectSpread({}, props), {}, {\n theme: chartTheme\n }));\n}\n//# sourceMappingURL=Chart.js.map"],"names":["ChartErrorOverlay","_ref","errorMessage","onDiscard","onConfirm","onCancel","dataTestId","messageTestId","_jsx","_jsxs","CopyButton","Button","ownKeys","e","r","o","_objectSpread","_defineProperty","_toPropertyKey","t","i","_toPrimitive","log","Log","Chart","Component","faIcon","width","path","stringPath","isDownsampleInProgress","isDownsamplingDisabled","props","memoize","downsamplingError","isDownsampleFinished","data","error","customButtons","hasDownsampleError","dhWarningFilled","hasError","name","attr","icon","vsLoading","dhGraphLineDown","has2D","type","has3D","_ref2","buttons2D","buttons3D","bindAllMethods","createPlotlyComponent","React","mergeRefs","isActive","model","prevProps","settings","theme","_this$plotWrapper$cur","_this$plotWrapper$cur2","_ref3","layout","_ref4","event","detail","ChartModel","state","revision","onUpdate","_onUpdate","onDisconnect","onReconnect","_message","onError","DownsamplingError","_onError","blocker","newLayout","_ref5","figure","ranges","ChartUtils","isRangesChanged","deepEqual","changes","onSettingsChanged","hiddenSeries","_ref6","seriesIndexes","acc","_ref7","visible","dh","chartUtils","_ref8","_ref9","shownError","force","rect","isRectChanged","columnFormats","FormatterUtils","dateTimeFormatterOptions","defaultDecimalFormatOptions","defaultIntegerFormatOptions","formatter","Formatter","renderOptions","PlotlyProp","PlotComponent","shownBlocker","config","isPlotShown","errorOverlay","DateUtils","Plotly","ChartContainer","chartTheme","useChartTheme"],"mappings":"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"}
1
+ {"version":3,"file":"Chart-BCLvsPEg.js","sources":["../../../chart/dist/ChartErrorOverlay.js","../../../chart/dist/Chart.js"],"sourcesContent":["import { CopyButton, Button } from '@deephaven/components';\nimport \"./ChartErrorOverlay.css\";\nimport { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nfunction ChartErrorOverlay(_ref) {\n var {\n errorMessage,\n onDiscard,\n onConfirm,\n onCancel,\n 'data-testid': dataTestId\n } = _ref;\n var messageTestId = dataTestId != null ? \"\".concat(dataTestId, \"-message\") : undefined;\n return /*#__PURE__*/_jsx(\"div\", {\n className: \"chart-panel-overlay chart-error-overlay\",\n children: /*#__PURE__*/_jsxs(\"div\", {\n className: \"chart-panel-overlay-content chart-error-overlay-content\",\n children: [/*#__PURE__*/_jsxs(\"div\", {\n className: \"info-message\",\n \"data-testid\": messageTestId,\n children: [errorMessage, /*#__PURE__*/_jsx(CopyButton, {\n copy: errorMessage,\n UNSAFE_style: {\n margin: '0'\n },\n isQuiet: true\n })]\n }), /*#__PURE__*/_jsxs(\"div\", {\n children: [onCancel && /*#__PURE__*/_jsx(Button, {\n onClick: onCancel,\n kind: \"secondary\",\n children: \"Cancel\"\n }), onDiscard && /*#__PURE__*/_jsx(Button, {\n onClick: onDiscard,\n kind: \"secondary\",\n children: \"Dismiss\"\n }), onConfirm && /*#__PURE__*/_jsx(Button, {\n onClick: onConfirm,\n kind: \"primary\",\n children: \"Continue\"\n })]\n })]\n })\n });\n}\nexport default ChartErrorOverlay;\n//# sourceMappingURL=ChartErrorOverlay.js.map","function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }\nfunction _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }\nfunction _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\nfunction _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\nfunction _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\nimport React, { Component } from 'react';\nimport deepEqual from 'fast-deep-equal';\nimport memoize from 'memoize-one';\nimport { vsLoading, dhGraphLineDown, dhWarningFilled } from '@deephaven/icons';\nimport { Formatter, FormatterUtils, DateUtils } from '@deephaven/jsapi-utils';\nimport Log from '@deephaven/log';\nimport { mergeRefs } from '@deephaven/react-hooks';\nimport { bindAllMethods } from '@deephaven/utils';\nimport createPlotlyComponent from \"./plotly/createPlotlyComponent.js\";\nimport Plotly from \"./plotly/Plotly.js\";\nimport ChartModel from \"./ChartModel.js\";\nimport ChartErrorOverlay from \"./ChartErrorOverlay.js\";\nimport ChartUtils from \"./ChartUtils.js\";\nimport \"./Chart.css\";\nimport DownsamplingError from \"./DownsamplingError.js\";\nimport useChartTheme from \"./useChartTheme.js\";\nimport { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nvar log = Log.module('Chart');\n\n// All of the ChartProps have default values except for model in the Chart\n// component, hence the Partial here.\n\nclass Chart extends Component {\n /**\n * Convert a font awesome icon definition to a plotly icon definition\n * @param faIcon The icon to convert\n */\n static convertIcon(faIcon) {\n var [width,,,, path] = faIcon.icon;\n // By default the icons are flipped upside down, so we need to add our own transform\n // https://github.com/plotly/plotly.js/issues/1335\n var stringPath = \"\".concat(path);\n return {\n width,\n path: stringPath,\n ascent: width,\n descent: 0,\n transform: \"matrix(1, 0, 0, 1, 0, 0)\"\n };\n }\n static downsampleButtonTitle(isDownsampleInProgress, isDownsamplingDisabled) {\n if (isDownsampleInProgress) {\n return 'Downsampling in progress...';\n }\n return isDownsamplingDisabled ? 'Downsampling disabled, click to enable' : 'Downsampling enabled, click to disable';\n }\n static downsampleButtonAttr(isDownsampleInProgress, isDownsamplingDisabled) {\n if (isDownsampleInProgress) {\n return 'animation-spin';\n }\n return isDownsamplingDisabled ? undefined : 'fill-active';\n }\n constructor(props) {\n super(props);\n _defineProperty(this, \"currentSeries\", void 0);\n _defineProperty(this, \"PlotComponent\", void 0);\n _defineProperty(this, \"plot\", void 0);\n _defineProperty(this, \"plotWrapper\", void 0);\n _defineProperty(this, \"plotWrapperMerged\", void 0);\n _defineProperty(this, \"columnFormats\", void 0);\n _defineProperty(this, \"dateTimeFormatterOptions\", void 0);\n _defineProperty(this, \"decimalFormatOptions\", void 0);\n _defineProperty(this, \"integerFormatOptions\", void 0);\n _defineProperty(this, \"webgl\", void 0);\n _defineProperty(this, \"rect\", void 0);\n _defineProperty(this, \"ranges\", void 0);\n _defineProperty(this, \"isSubscribed\", void 0);\n _defineProperty(this, \"isLoadedFired\", void 0);\n // Listen for resizing of the element and update the canvas appropriately\n _defineProperty(this, \"resizeObserver\", void 0);\n _defineProperty(this, \"getCachedConfig\", memoize((downsamplingError, isDownsampleFinished, isDownsampleInProgress, isDownsamplingDisabled, data, error) => {\n var customButtons = [];\n var hasDownsampleError = Boolean(downsamplingError);\n if (hasDownsampleError) {\n customButtons.push({\n name: \"Downsampling failed: \".concat(downsamplingError),\n title: 'Downsampling failed',\n click: () => {\n this.toggleErrorMessage(\"\".concat(downsamplingError));\n },\n icon: Chart.convertIcon(dhWarningFilled),\n attr: 'fill-warning'\n });\n }\n var hasError = Boolean(error);\n if (hasError) {\n customButtons.push({\n name: \"Error: \".concat(error),\n title: \"Error\",\n click: () => {\n this.toggleErrorMessage(\"\".concat(error));\n },\n icon: Chart.convertIcon(dhWarningFilled),\n attr: 'fill-warning'\n });\n }\n if (isDownsampleFinished || isDownsampleInProgress || isDownsamplingDisabled || hasDownsampleError) {\n var name = Chart.downsampleButtonTitle(isDownsampleInProgress, isDownsamplingDisabled);\n var attr = Chart.downsampleButtonAttr(isDownsampleInProgress, isDownsamplingDisabled);\n var icon = isDownsampleInProgress ? vsLoading : dhGraphLineDown;\n customButtons.push({\n name,\n title: 'Downsampling status',\n icon: Chart.convertIcon(icon),\n click: this.handleDownsampleClick,\n attr\n });\n }\n var has2D = data.some(_ref => {\n var {\n type\n } = _ref;\n return type != null && !type.includes('3d');\n });\n var has3D = data.some(_ref2 => {\n var {\n type\n } = _ref2;\n return type != null && type.includes('3d');\n });\n var buttons2D = ['zoomIn2d', 'zoomOut2d', 'autoScale2d', 'resetScale2d'];\n var buttons3D = ['orbitRotation', 'tableRotation', 'resetCameraDefault3d'];\n return {\n displaylogo: false,\n // scales the plot to the container size\n // https://github.com/plotly/react-plotly.js/issues/102\n responsive: true,\n // Display the mode bar if there's an error or downsampling so user can see progress\n // Yes, the value is a boolean or the string 'hover': https://github.com/plotly/plotly.js/blob/master/src/plot_api/plot_config.js#L249\n displayModeBar:\n // eslint-disable-next-line @typescript-eslint/strict-boolean-expressions\n isDownsampleInProgress || hasDownsampleError || hasError ? true : 'hover',\n // Each array gets grouped together in the mode bar\n modeBarButtons: [customButtons, ['toImage'], ['zoom2d', 'pan2d'],\n // These work the same for both 2d and 3d\n [...(has2D ? buttons2D : []), ...(has3D ? buttons3D : [])]]\n };\n }));\n bindAllMethods(this);\n this.PlotComponent = createPlotlyComponent(props.Plotly);\n this.plot = /*#__PURE__*/React.createRef();\n this.plotWrapper = /*#__PURE__*/React.createRef();\n this.plotWrapperMerged = mergeRefs(this.plotWrapper, props.containerRef);\n this.columnFormats = [];\n this.dateTimeFormatterOptions = {};\n this.decimalFormatOptions = {};\n this.integerFormatOptions = {};\n this.isSubscribed = false;\n this.isLoadedFired = false;\n this.currentSeries = 0;\n this.resizeObserver = new window.ResizeObserver(this.handleResize);\n this.state = {\n data: null,\n downsamplingError: null,\n isDownsampleFinished: false,\n isDownsampleInProgress: false,\n isDownsamplingDisabled: false,\n error: null,\n shownError: null,\n layout: {\n datarevision: 0\n },\n revision: 0,\n shownBlocker: null\n };\n }\n componentDidMount() {\n // Need to make sure the model dimensions are up to date before initializing the data\n this.updateDimensions();\n this.updateModelDimensions();\n this.initData();\n this.initFormatter();\n var {\n isActive,\n model\n } = this.props;\n if (isActive) {\n this.subscribe(model);\n }\n if (this.plotWrapper.current != null) {\n this.resizeObserver.observe(this.plotWrapper.current);\n }\n this.handleThemeChange();\n }\n componentDidUpdate(prevProps) {\n var {\n isActive,\n model,\n settings,\n theme\n } = this.props;\n this.updateFormatterSettings(settings);\n if (model !== prevProps.model) {\n this.unsubscribe(prevProps.model);\n this.subscribe(model);\n }\n if (isActive !== prevProps.isActive) {\n if (isActive) {\n this.updateDimensions();\n this.subscribe(model);\n } else {\n this.unsubscribe(model);\n }\n }\n if (theme !== prevProps.theme) {\n this.handleThemeChange();\n }\n }\n componentWillUnmount() {\n var {\n model\n } = this.props;\n this.unsubscribe(model);\n this.resizeObserver.disconnect();\n }\n getPlotRect() {\n var _this$plotWrapper$cur, _this$plotWrapper$cur2;\n return (_this$plotWrapper$cur = (_this$plotWrapper$cur2 = this.plotWrapper.current) === null || _this$plotWrapper$cur2 === void 0 ? void 0 : _this$plotWrapper$cur2.getBoundingClientRect()) !== null && _this$plotWrapper$cur !== void 0 ? _this$plotWrapper$cur : null;\n }\n initData() {\n var {\n model\n } = this.props;\n this.setState(_ref3 => {\n var {\n layout\n } = _ref3;\n return {\n data: model.getData(),\n layout: _objectSpread(_objectSpread({}, layout), model.getLayout())\n };\n });\n }\n subscribe(model) {\n if (this.isSubscribed) {\n return;\n }\n if (!this.rect || this.rect.width === 0 || this.rect.height === 0) {\n log.debug2('Delaying subscription until model dimensions are set');\n return;\n }\n model.subscribe(this.handleModelEvent);\n this.isSubscribed = true;\n }\n unsubscribe(model) {\n if (!this.isSubscribed) {\n return;\n }\n model.unsubscribe(this.handleModelEvent);\n this.isSubscribed = false;\n }\n handleAfterPlot() {\n if (this.plot.current != null) {\n // TODO: Translate whatever Don was doing in plotting.js in the afterplot here so that area graphs show up properly\n }\n }\n handleDownsampleClick() {\n this.setState(_ref4 => {\n var {\n isDownsamplingDisabled\n } = _ref4;\n return {\n downsamplingError: null,\n isDownsampleInProgress: false,\n isDownsampleFinished: false,\n isDownsamplingDisabled: !isDownsamplingDisabled\n };\n }, () => {\n var {\n model\n } = this.props;\n var {\n isDownsamplingDisabled\n } = this.state;\n model.setDownsamplingDisabled(isDownsamplingDisabled);\n });\n }\n handleErrorClose() {\n this.setState({\n shownError: null\n });\n }\n handleDownsampleErrorClose() {\n this.setState({\n downsamplingError: null\n });\n }\n handleModelEvent(event) {\n var {\n type,\n detail\n } = event;\n log.debug2('Received data update', type, detail);\n switch (type) {\n case ChartModel.EVENT_UPDATED:\n {\n this.currentSeries += 1;\n this.setState(state => {\n var {\n layout,\n revision\n } = state;\n if (typeof layout.datarevision === 'number') {\n layout.datarevision += 1;\n }\n return {\n data: detail,\n layout,\n revision: revision + 1\n };\n });\n var {\n onUpdate\n } = this.props;\n onUpdate({\n isLoading: !this.isLoadedFired\n });\n break;\n }\n case ChartModel.EVENT_LOADFINISHED:\n {\n var {\n onUpdate: _onUpdate\n } = this.props;\n this.isLoadedFired = true;\n _onUpdate({\n isLoading: false\n });\n break;\n }\n case ChartModel.EVENT_DISCONNECT:\n {\n var {\n onDisconnect\n } = this.props;\n onDisconnect();\n break;\n }\n case ChartModel.EVENT_RECONNECT:\n {\n var {\n onReconnect\n } = this.props;\n onReconnect();\n break;\n }\n case ChartModel.EVENT_DOWNSAMPLESTARTED:\n {\n this.setState({\n isDownsampleFinished: false,\n isDownsampleInProgress: true,\n downsamplingError: null\n });\n break;\n }\n case ChartModel.EVENT_DOWNSAMPLEFINISHED:\n {\n this.setState({\n isDownsampleFinished: true,\n isDownsampleInProgress: false,\n downsamplingError: null\n });\n break;\n }\n case ChartModel.EVENT_DOWNSAMPLENEEDED:\n case ChartModel.EVENT_DOWNSAMPLEFAILED:\n {\n var _message;\n var downsamplingError = (_message = detail.message) !== null && _message !== void 0 ? _message : detail;\n this.setState({\n isDownsampleFinished: false,\n isDownsampleInProgress: false,\n isDownsamplingDisabled: false,\n downsamplingError\n });\n var {\n onError\n } = this.props;\n onError(new DownsamplingError(downsamplingError == null ? undefined : \"\".concat(downsamplingError)));\n break;\n }\n case ChartModel.EVENT_ERROR:\n {\n var error = \"\".concat(detail);\n this.setState({\n error\n });\n var {\n onError: _onError\n } = this.props;\n _onError(new Error(error));\n break;\n }\n case ChartModel.EVENT_BLOCKER:\n {\n var blocker = \"\".concat(detail);\n this.setState({\n shownBlocker: blocker\n });\n break;\n }\n case ChartModel.EVENT_BLOCKER_CLEAR:\n {\n this.setState({\n shownBlocker: null\n });\n break;\n }\n case ChartModel.EVENT_LAYOUT_UPDATED:\n {\n var newLayout = detail;\n this.setState(_ref5 => {\n var {\n layout,\n revision\n } = _ref5;\n return {\n layout: _objectSpread(_objectSpread({}, layout), newLayout),\n revision: revision + 1\n };\n });\n break;\n }\n default:\n log.debug('Unknown event type', type, event);\n }\n }\n handlePlotUpdate(figure) {\n // User could have modified zoom/pan here, update the model dimensions\n // We don't need to update the datarevision, as we don't have any data changes\n // until an update comes back from the server anyway\n var {\n layout\n } = figure;\n var ranges = ChartUtils.getLayoutRanges(layout);\n var isRangesChanged = !deepEqual(ranges, this.ranges);\n if (isRangesChanged) {\n this.ranges = ranges;\n this.updateModelDimensions(true);\n }\n }\n handleRelayout(changes) {\n log.debug('handleRelayout', changes);\n if (changes.hiddenlabels != null) {\n var {\n onSettingsChanged\n } = this.props;\n // Pie charts store series visibility in layout.hiddenlabels and trigger relayout on changes\n // Series visibility for other types of charts is handled in handleRestyle\n var hiddenSeries = [...changes.hiddenlabels];\n onSettingsChanged({\n hiddenSeries\n });\n }\n this.updateModelDimensions();\n }\n handleResize() {\n this.updateDimensions();\n }\n handleRestyle(_ref6) {\n var [changes, seriesIndexes] = _ref6;\n log.debug('handleRestyle', changes, seriesIndexes);\n if (Object.keys(changes).includes('visible')) {\n var {\n data\n } = this.state;\n var {\n onSettingsChanged\n } = this.props;\n if (data != null) {\n var hiddenSeries = data.reduce((acc, _ref7) => {\n var {\n name,\n visible\n } = _ref7;\n return name != null && visible === 'legendonly' ? [...acc, name] : acc;\n }, []);\n onSettingsChanged({\n hiddenSeries\n });\n }\n }\n }\n handleThemeChange() {\n var {\n theme,\n model\n } = this.props;\n var {\n dh\n } = model;\n var chartUtils = new ChartUtils(dh);\n this.setState(_ref8 => {\n var {\n layout\n } = _ref8;\n return {\n layout: _objectSpread(_objectSpread({}, layout), {}, {\n template: chartUtils.makeDefaultTemplate(theme)\n })\n };\n });\n }\n\n /**\n * Toggle the error message. If it is already being displayed, then hide it.\n */\n toggleErrorMessage(error) {\n this.setState(_ref9 => {\n var {\n shownError\n } = _ref9;\n return {\n shownError: shownError === error ? null : error\n };\n });\n }\n\n /**\n * Update the models dimensions and ranges.\n * Note that this will update it all whether the plot size changes OR the range\n * the user is looking at has changed (eg. panning/zooming).\n * Could update each independently, but doing them at the same time keeps the\n * ChartModel API a bit cleaner.\n * @param force Force a change even if the chart dimensions haven't changed (eg. after pan/zoom)\n */\n updateModelDimensions() {\n var force = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;\n var rect = this.getPlotRect();\n if (!rect) {\n log.warn('Unable to get plotting rect');\n return;\n }\n var isRectChanged = !this.rect || this.rect.width !== rect.width || this.rect.height !== rect.height;\n if (isRectChanged || force) {\n this.rect = rect;\n var {\n isActive,\n model\n } = this.props;\n model.setDimensions(rect);\n // We may need to resubscribe if dimensions were too small before\n if (isActive) {\n this.subscribe(model);\n }\n }\n }\n initFormatter() {\n var {\n settings\n } = this.props;\n this.updateFormatterSettings(settings);\n }\n updateFormatterSettings(settings) {\n var columnFormats = FormatterUtils.getColumnFormats(settings);\n var dateTimeFormatterOptions = FormatterUtils.getDateTimeFormatterOptions(settings);\n var {\n defaultDecimalFormatOptions = {},\n defaultIntegerFormatOptions = {}\n } = settings;\n if (!deepEqual(this.columnFormats, columnFormats) || !deepEqual(this.dateTimeFormatterOptions, dateTimeFormatterOptions) || !deepEqual(this.decimalFormatOptions, defaultDecimalFormatOptions) || !deepEqual(this.integerFormatOptions, defaultIntegerFormatOptions)) {\n this.columnFormats = FormatterUtils.getColumnFormats(settings);\n this.dateTimeFormatterOptions = dateTimeFormatterOptions;\n this.decimalFormatOptions = defaultDecimalFormatOptions;\n this.integerFormatOptions = defaultIntegerFormatOptions;\n this.updateFormatter();\n }\n if (this.webgl !== settings.webgl) {\n this.webgl = settings.webgl;\n this.updateRenderOptions();\n }\n }\n updateFormatter() {\n var {\n model\n } = this.props;\n var formatter = new Formatter(model.dh, this.columnFormats, this.dateTimeFormatterOptions, this.decimalFormatOptions, this.integerFormatOptions);\n model.setFormatter(formatter);\n }\n updateRenderOptions() {\n var {\n model\n } = this.props;\n var renderOptions = {\n webgl: this.webgl\n };\n model.setRenderOptions(renderOptions);\n }\n updateDimensions() {\n var rect = this.getPlotRect();\n var {\n Plotly: PlotlyProp\n } = this.props;\n if (this.plot.current != null && rect != null && rect.width > 0 && rect.height > 0) {\n // Call relayout to resize avoiding the debouncing plotly does\n // https://github.com/plotly/plotly.js/issues/2769#issuecomment-402099552\n PlotlyProp.relayout(this.plot.current.el, {\n autosize: true\n }).catch(e => {\n log.debug('Unable to resize, promise rejected', e);\n });\n }\n }\n render() {\n var {\n PlotComponent\n } = this;\n var {\n data,\n downsamplingError,\n isDownsampleFinished,\n isDownsampleInProgress,\n isDownsamplingDisabled,\n error,\n shownError,\n layout,\n revision,\n shownBlocker\n } = this.state;\n var config = this.getCachedConfig(downsamplingError, isDownsampleFinished, isDownsampleInProgress, isDownsamplingDisabled, data !== null && data !== void 0 ? data : [], error);\n var {\n model\n } = this.props;\n var isPlotShown = data != null && shownBlocker == null;\n var errorOverlay = null;\n if (shownBlocker != null) {\n errorOverlay = /*#__PURE__*/_jsx(ChartErrorOverlay, {\n errorMessage: \"\".concat(shownBlocker),\n onConfirm: () => {\n model.fireBlockerClear();\n }\n });\n } else if (shownError != null) {\n errorOverlay = /*#__PURE__*/_jsx(ChartErrorOverlay, {\n errorMessage: \"\".concat(downsamplingError),\n onDiscard: () => {\n this.handleDownsampleErrorClose();\n },\n onConfirm: () => {\n this.handleDownsampleErrorClose();\n this.handleDownsampleClick();\n }\n });\n } else if (downsamplingError != null) {\n errorOverlay = /*#__PURE__*/_jsx(ChartErrorOverlay, {\n errorMessage: \"\".concat(downsamplingError),\n onDiscard: () => {\n this.handleDownsampleErrorClose();\n },\n onConfirm: () => {\n this.handleDownsampleErrorClose();\n this.handleDownsampleClick();\n }\n });\n }\n return /*#__PURE__*/_jsxs(\"div\", {\n className: \"h-100 w-100 chart-wrapper\",\n ref: this.plotWrapperMerged,\n children: [isPlotShown && /*#__PURE__*/_jsx(PlotComponent\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n , {\n ref: this.plot,\n data: data,\n layout: layout,\n revision: revision,\n config: config,\n onAfterPlot: this.handleAfterPlot,\n onError: log.error,\n onRelayout: this.handleRelayout,\n onUpdate: this.handlePlotUpdate,\n onRestyle: this.handleRestyle,\n style: {\n height: '100%',\n width: '100%'\n }\n }), errorOverlay]\n });\n }\n}\n_defineProperty(Chart, \"defaultProps\", {\n isActive: true,\n settings: {\n timeZone: 'America/New_York',\n defaultDateTimeFormat: DateUtils.FULL_DATE_FORMAT,\n showTimeZone: false,\n showTSeparator: true,\n formatter: [],\n webgl: true\n },\n Plotly,\n onDisconnect: () => undefined,\n onReconnect: () => undefined,\n onUpdate: () => undefined,\n onError: () => undefined,\n onSettingsChanged: () => undefined\n});\nexport default function ChartContainer(props) {\n var chartTheme = useChartTheme();\n // eslint-disable-next-line react/jsx-props-no-spreading\n return /*#__PURE__*/_jsx(Chart, _objectSpread(_objectSpread({}, props), {}, {\n theme: chartTheme\n }));\n}\n//# sourceMappingURL=Chart.js.map"],"names":["ChartErrorOverlay","_ref","errorMessage","onDiscard","onConfirm","onCancel","dataTestId","messageTestId","_jsx","_jsxs","CopyButton","Button","ownKeys","e","r","o","_objectSpread","_defineProperty","_toPropertyKey","t","i","_toPrimitive","log","Log","Chart","Component","faIcon","width","path","stringPath","isDownsampleInProgress","isDownsamplingDisabled","props","memoize","downsamplingError","isDownsampleFinished","data","error","customButtons","hasDownsampleError","dhWarningFilled","hasError","name","attr","icon","vsLoading","dhGraphLineDown","has2D","type","has3D","_ref2","buttons2D","buttons3D","bindAllMethods","createPlotlyComponent","React","mergeRefs","isActive","model","prevProps","settings","theme","_this$plotWrapper$cur","_this$plotWrapper$cur2","_ref3","layout","_ref4","event","detail","ChartModel","state","revision","onUpdate","_onUpdate","onDisconnect","onReconnect","_message","onError","DownsamplingError","_onError","blocker","newLayout","_ref5","figure","ranges","ChartUtils","isRangesChanged","deepEqual","changes","onSettingsChanged","hiddenSeries","_ref6","seriesIndexes","acc","_ref7","visible","dh","chartUtils","_ref8","_ref9","shownError","force","rect","isRectChanged","columnFormats","FormatterUtils","dateTimeFormatterOptions","defaultDecimalFormatOptions","defaultIntegerFormatOptions","formatter","Formatter","renderOptions","PlotlyProp","PlotComponent","shownBlocker","config","isPlotShown","errorOverlay","DateUtils","Plotly","ChartContainer","chartTheme","useChartTheme"],"mappings":"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"}