@deephaven/embed-widget 1.24.0 → 1.26.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-WbT4PZ7h.js → App-B4TgHwbQ.js} +2 -2
  2. package/build/assets/{App-WbT4PZ7h.js.map → App-B4TgHwbQ.js.map} +1 -1
  3. package/build/assets/Chart-CesvWUEf.js +3 -0
  4. package/build/assets/Chart-CesvWUEf.js.map +1 -0
  5. package/build/assets/IrisGrid-CS05lwoE.css +1 -0
  6. package/build/assets/IrisGrid-DWzMm-AU.js +18 -0
  7. package/build/assets/IrisGrid-DWzMm-AU.js.map +1 -0
  8. package/build/assets/IrisGridContextProvider-BctTNITb.js +40 -0
  9. package/build/assets/IrisGridContextProvider-BctTNITb.js.map +1 -0
  10. package/build/assets/{IrisGridThemeProvider-CEV9kNOj.css → IrisGridContextProvider-C0N1SVMb.css} +1 -1
  11. package/build/assets/{LocalWorkspaceStorage-D7nM6Uc0.js → LocalWorkspaceStorage-AzbcD4zU.js} +2 -2
  12. package/build/assets/{LocalWorkspaceStorage-D7nM6Uc0.js.map → LocalWorkspaceStorage-AzbcD4zU.js.map} +1 -1
  13. package/build/assets/{LogPanel-DzqyvYDR.js → LogPanel-CPk1kjlL.js} +2 -2
  14. package/build/assets/{LogPanel-DzqyvYDR.js.map → LogPanel-CPk1kjlL.js.map} +1 -1
  15. package/build/assets/{MarkdownEditor-qZLPf--d.js → MarkdownEditor-CpEeQXWS.js} +2 -2
  16. package/build/assets/{MarkdownEditor-qZLPf--d.js.map → MarkdownEditor-CpEeQXWS.js.map} +1 -1
  17. package/build/assets/{MarkdownNotebook-CZKR3cna.js → MarkdownNotebook-BXbETULX.js} +2 -2
  18. package/build/assets/{MarkdownNotebook-CZKR3cna.js.map → MarkdownNotebook-BXbETULX.js.map} +1 -1
  19. package/build/assets/index-Bvqt-wO5.js +39 -0
  20. package/build/assets/index-Bvqt-wO5.js.map +1 -0
  21. package/build/assets/{index-BIotQEOH.js → index-CsS4tphQ.js} +45 -45
  22. package/build/assets/{index-BIotQEOH.js.map → index-CsS4tphQ.js.map} +1 -1
  23. package/build/assets/{index-D4IWyDq_.css → index-MtXEV8lM.css} +1 -1
  24. package/build/assets/{index-jF_4wnuH.js → index-nMCuy2rX.js} +3 -3
  25. package/build/assets/{index-jF_4wnuH.js.map → index-nMCuy2rX.js.map} +1 -1
  26. package/build/index.html +2 -2
  27. package/package.json +5 -5
  28. package/build/assets/Chart-Do7O4T6U.js +0 -3
  29. package/build/assets/Chart-Do7O4T6U.js.map +0 -1
  30. package/build/assets/IrisGrid-Dzcv4aAu.css +0 -1
  31. package/build/assets/IrisGrid-fI-xRu3X.js +0 -20
  32. package/build/assets/IrisGrid-fI-xRu3X.js.map +0 -1
  33. package/build/assets/IrisGridThemeProvider-DW8JrkAj.js +0 -37
  34. package/build/assets/IrisGridThemeProvider-DW8JrkAj.js.map +0 -1
  35. package/build/assets/index-CQm54PSx.js +0 -39
  36. package/build/assets/index-CQm54PSx.js.map +0 -1
@@ -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-Iv4yoqlt.js";import{L as q,a as F}from"./index-jF_4wnuH.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-DzqyvYDR.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-D7nM6Uc0.js";import"./helpers-BosuxZz1.js";import"./useResizeObserver-D66yMPy1.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-WbT4PZ7h.js.map
1
+ import{r as e,L as Y,M as _,N as B,D as u,O as K}from"./vendor-Iv4yoqlt.js";import{L as q,a as F}from"./index-nMCuy2rX.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-CPk1kjlL.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-AzbcD4zU.js";import"./helpers-BosuxZz1.js";import"./useResizeObserver-D66yMPy1.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-B4TgHwbQ.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"App-WbT4PZ7h.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-B4TgHwbQ.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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"}
@@ -0,0 +1,3 @@
1
+ import{D as u,r as B,J as R,bR as O,bO as _}from"./vendor-Iv4yoqlt.js";import{a as W,bc as L,bB as U,bC as z}from"./index-nMCuy2rX.js";import{c as V}from"./Plotly-CrH1R1wr.js";import{ak as $,K as m,L as A,d as S,c as G,D as K}from"./index-Bvqt-wO5.js";import{L as H,J as F,bT as J}from"./LogPanel-CPk1kjlL.js";import{D as Y}from"./DownsamplingError--AAvWHv_.js";import{m as Z}from"./useMergeRef-CQuqzBxC.js";import{P as q}from"./plotly-g-Pezqd_.js";import"./helpers-BosuxZz1.js";function T(r){var e=r.errorMessage,t=r.onDiscard,i=r.onConfirm,o=r.onCancel,n=r["data-testid"],s=n!=null?"".concat(n,"-message"):void 0;return u.jsx("div",{className:"chart-panel-overlay chart-error-overlay",children:u.jsxs("div",{className:"chart-panel-overlay-content chart-error-overlay-content",children:[u.jsxs("div",{className:"info-message","data-testid":s,children:[e,u.jsx(H,{copy:e,UNSAFE_style:{margin:"0"},isQuiet:!0})]}),u.jsxs("div",{children:[o&&u.jsx(F,{onClick:o,kind:"secondary",children:"Cancel"}),t&&u.jsx(F,{onClick:t,kind:"secondary",children:"Dismiss"}),i&&u.jsx(F,{onClick:i,kind:"primary",children:"Continue"})]})]})})}function j(r,e){var t=Object.keys(r);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(r);e&&(i=i.filter(function(o){return Object.getOwnPropertyDescriptor(r,o).enumerable})),t.push.apply(t,i)}return t}function f(r){for(var e=1;e<arguments.length;e++){var t=arguments[e]!=null?arguments[e]:{};e%2?j(Object(t),!0).forEach(function(i){d(r,i,t[i])}):Object.getOwnPropertyDescriptors?Object.defineProperties(r,Object.getOwnPropertyDescriptors(t)):j(Object(t)).forEach(function(i){Object.defineProperty(r,i,Object.getOwnPropertyDescriptor(t,i))})}return r}function I(r,e){return te(r)||ee(r,e)||X(r,e)||Q()}function Q(){throw new TypeError(`Invalid attempt to destructure non-iterable instance.
2
+ In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}function X(r,e){if(r){if(typeof r=="string")return N(r,e);var t={}.toString.call(r).slice(8,-1);return t==="Object"&&r.constructor&&(t=r.constructor.name),t==="Map"||t==="Set"?Array.from(r):t==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t)?N(r,e):void 0}}function N(r,e){(e==null||e>r.length)&&(e=r.length);for(var t=0,i=Array(e);t<e;t++)i[t]=r[t];return i}function ee(r,e){var t=r==null?null:typeof Symbol<"u"&&r[Symbol.iterator]||r["@@iterator"];if(t!=null){var i,o,n,s,a=[],l=!0,h=!1;try{if(n=(t=t.call(r)).next,e===0){if(Object(t)!==t)return;l=!1}else for(;!(l=(i=n.call(t)).done)&&(a.push(i.value),a.length!==e);l=!0);}catch(c){h=!0,o=c}finally{try{if(!l&&t.return!=null&&(s=t.return(),Object(s)!==s))return}finally{if(h)throw o}}return a}}function te(r){if(Array.isArray(r))return r}function d(r,e,t){return(e=ie(e))in r?Object.defineProperty(r,e,{value:t,enumerable:!0,configurable:!0,writable:!0}):r[e]=t,r}function ie(r){var e=re(r,"string");return typeof e=="symbol"?e:e+""}function re(r,e){if(typeof r!="object"||!r)return r;var t=r[Symbol.toPrimitive];if(t!==void 0){var i=t.call(r,e);if(typeof i!="object")return i;throw new TypeError("@@toPrimitive must return a primitive value.")}return(e==="string"?String:Number)(r)}var b=W.module("Chart");class y extends B.Component{static convertIcon(e){var t=I(e.icon,5),i=t[0],o=t[4],n="".concat(o);return{width:i,path:n,ascent:i,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),d(this,"currentSeries",void 0),d(this,"PlotComponent",void 0),d(this,"plot",void 0),d(this,"plotWrapper",void 0),d(this,"plotWrapperMerged",void 0),d(this,"columnFormats",void 0),d(this,"dateTimeFormatterOptions",void 0),d(this,"decimalFormatOptions",void 0),d(this,"integerFormatOptions",void 0),d(this,"webgl",void 0),d(this,"plotElement",null),d(this,"rect",void 0),d(this,"ranges",void 0),d(this,"isSubscribed",void 0),d(this,"isLoadedFired",void 0),d(this,"resizeObserver",void 0),d(this,"getCachedConfig",_((t,i,o,n,s,a,l)=>{var h=[],c=!!t;c&&h.push({name:"Downsampling failed: ".concat(t),title:"Downsampling failed",click:()=>{this.toggleErrorMessage("".concat(t))},icon:y.convertIcon(L),attr:"fill-warning"});var g=!!a;if(g&&h.push({name:"Error: ".concat(a),title:"Error",click:()=>{this.toggleErrorMessage("".concat(a))},icon:y.convertIcon(L),attr:"fill-warning"}),i||o||n||c){var D=y.downsampleButtonTitle(o,n),w=y.downsampleButtonAttr(o,n),C=o?U:z;h.push({name:D,title:"Downsampling status",icon:y.convertIcon(C),click:this.handleDownsampleClick,attr:w})}var v=s.some(k=>{var P=k.type;return P!=null&&!P.includes("3d")}),p=s.some(k=>{var P=k.type;return P!=null&&P.includes("3d")}),E=["zoom2d","pan2d",...l&&v?["select2d","lasso2d"]:[]],M=[...v?["zoomIn2d","zoomOut2d","autoScale2d","resetScale2d"]:[],...p?["orbitRotation","tableRotation","resetCameraDefault3d"]:[]],x=o||c||g;return{displaylogo:!1,responsive:!0,displayModeBar:x?!0:"hover",modeBarButtons:[h,["toImage"],E,M]}})),$(this),this.PlotComponent=V(e.Plotly),this.plot=R.createRef(),this.plotWrapper=R.createRef(),this.plotWrapperMerged=Z(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 e=this.props,t=e.isActive,i=e.model;t&&this.subscribe(i),this.plotWrapper.current!=null&&this.resizeObserver.observe(this.plotWrapper.current),this.handleThemeChange()}componentDidUpdate(e){var t=this.props,i=t.isActive,o=t.model,n=t.settings,s=t.theme,a=t.onPlotElementChange;if(this.updateFormatterSettings(n),o!==e.model){var l;(l=e.onPlotElementChange)===null||l===void 0||l.call(e,null),this.unsubscribe(e.model),a==null||a(this.plotElement),this.subscribe(o)}i!==e.isActive&&(i?(this.updateDimensions(),this.subscribe(o)):this.unsubscribe(o)),s!==e.theme&&this.handleThemeChange()}componentWillUnmount(){var e=this.props.model;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 e=this.props.model;this.setState(t=>{var i=t.layout;return{data:e.getData(),layout:f(f({},i),e.getLayout())}})}subscribe(e){if(!this.isSubscribed){if(!this.rect||this.rect.width===0||this.rect.height===0){b.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}handlePlotInitialized(e,t){this.plotElement=t;var i=this.props.onPlotElementChange;i==null||i(t)}handlePlotPurge(){this.plotElement=null;var e=this.props.onPlotElementChange;e==null||e(null)}handleDownsampleClick(){this.setState(e=>{var t=e.isDownsamplingDisabled;return{downsamplingError:null,isDownsampleInProgress:!1,isDownsampleFinished:!1,isDownsamplingDisabled:!t}},()=>{var e=this.props.model,t=this.state.isDownsamplingDisabled;e.setDownsamplingDisabled(t)})}handleErrorClose(){this.setState({shownError:null})}handleDownsampleErrorClose(){this.setState({downsamplingError:null})}handleModelEvent(e){var t=e.type,i=e.detail;switch(b.debug2("Received data update",t,i),t){case m.EVENT_UPDATED:{this.currentSeries+=1,this.setState(v=>{var p=v.layout,E=v.revision;return typeof p.datarevision=="number"&&(p.datarevision+=1),{data:i,layout:p,revision:E+1}});var o=this.props.onUpdate;o({isLoading:!this.isLoadedFired});break}case m.EVENT_LOADFINISHED:{var n=this.props.onUpdate;this.isLoadedFired=!0,n({isLoading:!1});break}case m.EVENT_DISCONNECT:{var s=this.props.onDisconnect;s();break}case m.EVENT_RECONNECT:{var a=this.props.onReconnect;a();break}case m.EVENT_DOWNSAMPLESTARTED:{this.setState({isDownsampleFinished:!1,isDownsampleInProgress:!0,downsamplingError:null});break}case m.EVENT_DOWNSAMPLEFINISHED:{this.setState({isDownsampleFinished:!0,isDownsampleInProgress:!1,downsamplingError:null});break}case m.EVENT_DOWNSAMPLENEEDED:case m.EVENT_DOWNSAMPLEFAILED:{var l,h=(l=i.message)!==null&&l!==void 0?l:i;this.setState({isDownsampleFinished:!1,isDownsampleInProgress:!1,isDownsamplingDisabled:!1,downsamplingError:h});var c=this.props.onError;c(new Y(h==null?void 0:"".concat(h)));break}case m.EVENT_ERROR:{var g="".concat(i);this.setState({error:g});var D=this.props.onError;D(new Error(g));break}case m.EVENT_BLOCKER:{var w="".concat(i);this.setState({shownBlocker:w});break}case m.EVENT_BLOCKER_CLEAR:{this.setState({shownBlocker:null});break}case m.EVENT_LAYOUT_UPDATED:{var C=i;this.setState(v=>{var p=v.layout,E=v.revision;return{layout:f(f({},p),C),revision:E+1}});break}default:b.debug("Unknown event type",t,e)}}handlePlotUpdate(e){var t=e.layout,i=A.getLayoutRanges(t),o=!O(i,this.ranges);o&&(this.ranges=i,this.updateModelDimensions(!0))}handleRelayout(e){if(b.debug("handleRelayout",e),e.hiddenlabels!=null){var t=this.props.onSettingsChanged,i=[...e.hiddenlabels];t({hiddenSeries:i})}this.updateModelDimensions();var o=this.props.onPlotlyRelayout;o==null||o(e)}handleClick(e){var t=this.props.onPlotlyClick;t==null||t(e)}handleDoubleClick(){var e=this.props.onPlotlyDoubleClick;e==null||e()}handleSelected(e){var t=this.props.onPlotlySelected;t==null||t(e)}handleDeselect(){var e=this.props.onPlotlyDeselect;e==null||e()}handleClickAnnotation(e){var t=this.props.onPlotlyClickAnnotation;t==null||t(e)}handleLegendClick(e){var t,i=this.props.onPlotlyLegendClick;return(t=i==null?void 0:i(e))!==null&&t!==void 0?t:!0}handleLegendDoubleClick(e){var t,i=this.props.onPlotlyLegendDoubleClick;return(t=i==null?void 0:i(e))!==null&&t!==void 0?t:!0}handleWebGlContextLost(){var e=this.props.onPlotlyWebGlContextLost;e==null||e()}handleResize(){this.updateDimensions()}handleRestyle(e){var t=I(e,2),i=t[0],o=t[1];if(b.debug("handleRestyle",i,o),Object.keys(i).includes("visible")){var n=this.state.data,s=this.props.onSettingsChanged;if(n!=null){var a=n.reduce((l,h)=>{var c=h.name,g=h.visible;return c!=null&&g==="legendonly"?[...l,c]:l},[]);s({hiddenSeries:a})}}}handleThemeChange(){var e=this.props,t=e.theme,i=e.model,o=i.dh,n=new A(o);this.setState(s=>{var a=s.layout;return{layout:f(f({},a),{},{template:n.makeDefaultTemplate(t)})}})}toggleErrorMessage(e){this.setState(t=>{var i=t.shownError;return{shownError:i===e?null:e}})}updateModelDimensions(){var e=arguments.length>0&&arguments[0]!==void 0?arguments[0]:!1,t=this.getPlotRect();if(!t){b.warn("Unable to get plotting rect");return}var i=!this.rect||this.rect.width!==t.width||this.rect.height!==t.height;if(i||e){this.rect=t;var o=this.props,n=o.isActive,s=o.model;s.setDimensions(t),n&&this.subscribe(s)}}initFormatter(){var e=this.props.settings;this.updateFormatterSettings(e)}updateFormatterSettings(e){var t=S.getColumnFormats(e),i=S.getDateTimeFormatterOptions(e),o=e.defaultDecimalFormatOptions,n=o===void 0?{}:o,s=e.defaultIntegerFormatOptions,a=s===void 0?{}:s;(!O(this.columnFormats,t)||!O(this.dateTimeFormatterOptions,i)||!O(this.decimalFormatOptions,n)||!O(this.integerFormatOptions,a))&&(this.columnFormats=S.getColumnFormats(e),this.dateTimeFormatterOptions=i,this.decimalFormatOptions=n,this.integerFormatOptions=a,this.updateFormatter()),this.webgl!==e.webgl&&(this.webgl=e.webgl,this.updateRenderOptions())}updateFormatter(){var e=this.props.model,t=new G(e.dh,this.columnFormats,this.dateTimeFormatterOptions,this.decimalFormatOptions,this.integerFormatOptions);e.setFormatter(t)}updateRenderOptions(){var e=this.props.model,t={webgl:this.webgl};e.setRenderOptions(t)}updateDimensions(){var e=this.getPlotRect(),t=this.props.Plotly;this.plot.current!=null&&e!=null&&e.width>0&&e.height>0&&t.relayout(this.plot.current.el,{autosize:!0}).catch(i=>{b.debug("Unable to resize, promise rejected",i)})}render(){var e=this.PlotComponent,t=this.state,i=t.data,o=t.downsamplingError,n=t.isDownsampleFinished,s=t.isDownsampleInProgress,a=t.isDownsamplingDisabled,l=t.error,h=t.shownError,c=t.layout,g=t.revision,D=t.shownBlocker,w=this.props.model,C=this.getCachedConfig(o,n,s,a,i??[],l,w.hasSelectionCallbacks()),v=i!=null&&D==null,p=null;return D!=null?p=u.jsx(T,{errorMessage:"".concat(D),onConfirm:()=>{w.fireBlockerClear()}}):h!=null?p=u.jsx(T,{errorMessage:"".concat(o),onDiscard:()=>{this.handleDownsampleErrorClose()},onConfirm:()=>{this.handleDownsampleErrorClose(),this.handleDownsampleClick()}}):o!=null&&(p=u.jsx(T,{errorMessage:"".concat(o),onDiscard:()=>{this.handleDownsampleErrorClose()},onConfirm:()=>{this.handleDownsampleErrorClose(),this.handleDownsampleClick()}})),u.jsxs("div",{className:"h-100 w-100 chart-wrapper",ref:this.plotWrapperMerged,children:[v&&u.jsx(e,{ref:this.plot,data:i,layout:c,revision:g,config:C,onAfterPlot:this.handleAfterPlot,onError:b.error,onInitialized:this.handlePlotInitialized,onPurge:this.handlePlotPurge,onRelayout:this.handleRelayout,onUpdate:this.handlePlotUpdate,onRestyle:this.handleRestyle,onClick:this.handleClick,onDoubleClick:this.handleDoubleClick,onSelected:this.handleSelected,onDeselect:this.handleDeselect,onClickAnnotation:this.handleClickAnnotation,onLegendClick:this.handleLegendClick,onLegendDoubleClick:this.handleLegendDoubleClick,onWebGlContextLost:this.handleWebGlContextLost,style:{height:"100%",width:"100%"}}),p]})}}d(y,"defaultProps",{isActive:!0,settings:{timeZone:"America/New_York",defaultDateTimeFormat:K.FULL_DATE_FORMAT,showTimeZone:!1,showTSeparator:!0,formatter:[],webgl:!0},Plotly:q,onDisconnect:()=>{},onReconnect:()=>{},onUpdate:()=>{},onError:()=>{},onSettingsChanged:()=>{}});function pe(r){var e=J();return u.jsx(y,f(f({},r),{},{theme:e}))}export{pe as default};
3
+ //# sourceMappingURL=Chart-CesvWUEf.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Chart-CesvWUEf.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 errorMessage = _ref.errorMessage,\n onDiscard = _ref.onDiscard,\n onConfirm = _ref.onConfirm,\n onCancel = _ref.onCancel,\n dataTestId = _ref['data-testid'];\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 _slicedToArray(r, e) { return _arrayWithHoles(r) || _iterableToArrayLimit(r, e) || _unsupportedIterableToArray(r, e) || _nonIterableRest(); }\nfunction _nonIterableRest() { throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\nfunction _unsupportedIterableToArray(r, a) { if (r) { if (\"string\" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return \"Object\" === t && r.constructor && (t = r.constructor.name), \"Map\" === t || \"Set\" === t ? Array.from(r) : \"Arguments\" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }\nfunction _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }\nfunction _iterableToArrayLimit(r, l) { var t = null == r ? null : \"undefined\" != typeof Symbol && r[Symbol.iterator] || r[\"@@iterator\"]; if (null != t) { var e, n, i, u, a = [], f = !0, o = !1; try { if (i = (t = t.call(r)).next, 0 === l) { if (Object(t) !== t) return; f = !1; } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0); } catch (r) { o = !0, n = r; } finally { try { if (!f && null != t.return && (u = t.return(), Object(u) !== u)) return; } finally { if (o) throw n; } } return a; } }\nfunction _arrayWithHoles(r) { if (Array.isArray(r)) return r; }\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 _faIcon$icon = _slicedToArray(faIcon.icon, 5),\n width = _faIcon$icon[0],\n path = _faIcon$icon[4];\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, \"plotElement\", null);\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, hasSelectionCallbacks) => {\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 type = _ref.type;\n return type != null && !type.includes('3d');\n });\n var has3D = data.some(_ref2 => {\n var type = _ref2.type;\n return type != null && type.includes('3d');\n });\n\n // zoom2d and pan2d work for both 2D and 3D charts\n var interactionButtons = ['zoom2d', 'pan2d', ...(hasSelectionCallbacks && has2D ? ['select2d', 'lasso2d'] : [])];\n var dimensionButtons = [...(has2D ? ['zoomIn2d', 'zoomOut2d', 'autoScale2d', 'resetScale2d'] : []), ...(has3D ? ['orbitRotation', 'tableRotation', 'resetCameraDefault3d'] : [])];\n\n // Display the mode bar persistently 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 var alwaysShowModeBar =\n // eslint-disable-next-line @typescript-eslint/strict-boolean-expressions\n isDownsampleInProgress || hasDownsampleError || hasError;\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 displayModeBar: alwaysShowModeBar ? true : 'hover',\n // Each array gets grouped together in the mode bar\n modeBarButtons: [customButtons, ['toImage'], interactionButtons, dimensionButtons]\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 _this$props = this.props,\n isActive = _this$props.isActive,\n model = _this$props.model;\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 _this$props2 = this.props,\n isActive = _this$props2.isActive,\n model = _this$props2.model,\n settings = _this$props2.settings,\n theme = _this$props2.theme,\n onPlotElementChange = _this$props2.onPlotElementChange;\n this.updateFormatterSettings(settings);\n if (model !== prevProps.model) {\n var _prevProps$onPlotElem;\n (_prevProps$onPlotElem = prevProps.onPlotElementChange) === null || _prevProps$onPlotElem === void 0 || _prevProps$onPlotElem.call(prevProps, null);\n this.unsubscribe(prevProps.model);\n onPlotElementChange === null || onPlotElementChange === void 0 || onPlotElementChange(this.plotElement);\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 model = this.props.model;\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 model = this.props.model;\n this.setState(_ref3 => {\n var layout = _ref3.layout;\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 handlePlotInitialized(_figure, graphDiv) {\n // Provide the actual Plotly graph div to consumers so they can attach\n // imperative event listeners (needed for some events that Plotly doesn't\n // support in react-plotly.js)\n this.plotElement = graphDiv;\n var onPlotElementChange = this.props.onPlotElementChange;\n onPlotElementChange === null || onPlotElementChange === void 0 || onPlotElementChange(graphDiv);\n }\n handlePlotPurge() {\n this.plotElement = null;\n var onPlotElementChange = this.props.onPlotElementChange;\n onPlotElementChange === null || onPlotElementChange === void 0 || onPlotElementChange(null);\n }\n handleDownsampleClick() {\n this.setState(_ref4 => {\n var isDownsamplingDisabled = _ref4.isDownsamplingDisabled;\n return {\n downsamplingError: null,\n isDownsampleInProgress: false,\n isDownsampleFinished: false,\n isDownsamplingDisabled: !isDownsamplingDisabled\n };\n }, () => {\n var model = this.props.model;\n var isDownsamplingDisabled = this.state.isDownsamplingDisabled;\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 type = event.type,\n detail = event.detail;\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 layout = state.layout,\n revision = state.revision;\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 onUpdate = this.props.onUpdate;\n onUpdate({\n isLoading: !this.isLoadedFired\n });\n break;\n }\n case ChartModel.EVENT_LOADFINISHED:\n {\n var _onUpdate = this.props.onUpdate;\n this.isLoadedFired = true;\n _onUpdate({\n isLoading: false\n });\n break;\n }\n case ChartModel.EVENT_DISCONNECT:\n {\n var onDisconnect = this.props.onDisconnect;\n onDisconnect();\n break;\n }\n case ChartModel.EVENT_RECONNECT:\n {\n var onReconnect = this.props.onReconnect;\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 onError = this.props.onError;\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 _onError = this.props.onError;\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 layout = _ref5.layout,\n revision = _ref5.revision;\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 layout = figure.layout;\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 onSettingsChanged = this.props.onSettingsChanged;\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 var onPlotlyRelayout = this.props.onPlotlyRelayout;\n onPlotlyRelayout === null || onPlotlyRelayout === void 0 || onPlotlyRelayout(changes);\n }\n handleClick(data) {\n var onPlotlyClick = this.props.onPlotlyClick;\n onPlotlyClick === null || onPlotlyClick === void 0 || onPlotlyClick(data);\n }\n handleDoubleClick() {\n var onPlotlyDoubleClick = this.props.onPlotlyDoubleClick;\n onPlotlyDoubleClick === null || onPlotlyDoubleClick === void 0 || onPlotlyDoubleClick();\n }\n handleSelected(data) {\n var onPlotlySelected = this.props.onPlotlySelected;\n onPlotlySelected === null || onPlotlySelected === void 0 || onPlotlySelected(data);\n }\n handleDeselect() {\n var onPlotlyDeselect = this.props.onPlotlyDeselect;\n onPlotlyDeselect === null || onPlotlyDeselect === void 0 || onPlotlyDeselect();\n }\n handleClickAnnotation(data) {\n var onPlotlyClickAnnotation = this.props.onPlotlyClickAnnotation;\n onPlotlyClickAnnotation === null || onPlotlyClickAnnotation === void 0 || onPlotlyClickAnnotation(data);\n }\n handleLegendClick(data) {\n var _onPlotlyLegendClick;\n var onPlotlyLegendClick = this.props.onPlotlyLegendClick;\n return (_onPlotlyLegendClick = onPlotlyLegendClick === null || onPlotlyLegendClick === void 0 ? void 0 : onPlotlyLegendClick(data)) !== null && _onPlotlyLegendClick !== void 0 ? _onPlotlyLegendClick : true;\n }\n handleLegendDoubleClick(data) {\n var _onPlotlyLegendDouble;\n var onPlotlyLegendDoubleClick = this.props.onPlotlyLegendDoubleClick;\n return (_onPlotlyLegendDouble = onPlotlyLegendDoubleClick === null || onPlotlyLegendDoubleClick === void 0 ? void 0 : onPlotlyLegendDoubleClick(data)) !== null && _onPlotlyLegendDouble !== void 0 ? _onPlotlyLegendDouble : true;\n }\n handleWebGlContextLost() {\n var onPlotlyWebGlContextLost = this.props.onPlotlyWebGlContextLost;\n onPlotlyWebGlContextLost === null || onPlotlyWebGlContextLost === void 0 || onPlotlyWebGlContextLost();\n }\n handleResize() {\n this.updateDimensions();\n }\n handleRestyle(_ref6) {\n var _ref7 = _slicedToArray(_ref6, 2),\n changes = _ref7[0],\n seriesIndexes = _ref7[1];\n log.debug('handleRestyle', changes, seriesIndexes);\n if (Object.keys(changes).includes('visible')) {\n var data = this.state.data;\n var onSettingsChanged = this.props.onSettingsChanged;\n if (data != null) {\n var hiddenSeries = data.reduce((acc, _ref8) => {\n var name = _ref8.name,\n visible = _ref8.visible;\n return name != null && visible === 'legendonly' ? [...acc, name] : acc;\n }, []);\n onSettingsChanged({\n hiddenSeries\n });\n }\n }\n }\n handleThemeChange() {\n var _this$props3 = this.props,\n theme = _this$props3.theme,\n model = _this$props3.model;\n var dh = model.dh;\n var chartUtils = new ChartUtils(dh);\n this.setState(_ref9 => {\n var layout = _ref9.layout;\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(_ref0 => {\n var shownError = _ref0.shownError;\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 _this$props4 = this.props,\n isActive = _this$props4.isActive,\n model = _this$props4.model;\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 settings = this.props.settings;\n this.updateFormatterSettings(settings);\n }\n updateFormatterSettings(settings) {\n var columnFormats = FormatterUtils.getColumnFormats(settings);\n var dateTimeFormatterOptions = FormatterUtils.getDateTimeFormatterOptions(settings);\n var _settings$defaultDeci = settings.defaultDecimalFormatOptions,\n defaultDecimalFormatOptions = _settings$defaultDeci === void 0 ? {} : _settings$defaultDeci,\n _settings$defaultInte = settings.defaultIntegerFormatOptions,\n defaultIntegerFormatOptions = _settings$defaultInte === void 0 ? {} : _settings$defaultInte;\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 model = this.props.model;\n var formatter = new Formatter(model.dh, this.columnFormats, this.dateTimeFormatterOptions, this.decimalFormatOptions, this.integerFormatOptions);\n model.setFormatter(formatter);\n }\n updateRenderOptions() {\n var model = this.props.model;\n var renderOptions = {\n webgl: this.webgl\n };\n model.setRenderOptions(renderOptions);\n }\n updateDimensions() {\n var rect = this.getPlotRect();\n var PlotlyProp = this.props.Plotly;\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 PlotComponent = this.PlotComponent;\n var _this$state = this.state,\n data = _this$state.data,\n downsamplingError = _this$state.downsamplingError,\n isDownsampleFinished = _this$state.isDownsampleFinished,\n isDownsampleInProgress = _this$state.isDownsampleInProgress,\n isDownsamplingDisabled = _this$state.isDownsamplingDisabled,\n error = _this$state.error,\n shownError = _this$state.shownError,\n layout = _this$state.layout,\n revision = _this$state.revision,\n shownBlocker = _this$state.shownBlocker;\n var model = this.props.model;\n var config = this.getCachedConfig(downsamplingError, isDownsampleFinished, isDownsampleInProgress, isDownsamplingDisabled, data !== null && data !== void 0 ? data : [], error, model.hasSelectionCallbacks());\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 onInitialized: this.handlePlotInitialized,\n onPurge: this.handlePlotPurge,\n onRelayout: this.handleRelayout,\n onUpdate: this.handlePlotUpdate,\n onRestyle: this.handleRestyle,\n onClick: this.handleClick,\n onDoubleClick: this.handleDoubleClick,\n onSelected: this.handleSelected,\n onDeselect: this.handleDeselect,\n onClickAnnotation: this.handleClickAnnotation,\n onLegendClick: this.handleLegendClick,\n onLegendDoubleClick: this.handleLegendDoubleClick,\n onWebGlContextLost: this.handleWebGlContextLost,\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","_slicedToArray","_arrayWithHoles","_iterableToArrayLimit","_unsupportedIterableToArray","_nonIterableRest","a","_arrayLikeToArray","n","l","i","u","f","_toPropertyKey","t","_toPrimitive","log","Log","Chart","Component","faIcon","_faIcon$icon","width","path","stringPath","isDownsampleInProgress","isDownsamplingDisabled","props","memoize","downsamplingError","isDownsampleFinished","data","error","hasSelectionCallbacks","customButtons","hasDownsampleError","dhWarningFilled","hasError","name","attr","icon","vsLoading","dhGraphLineDown","has2D","type","has3D","_ref2","interactionButtons","dimensionButtons","alwaysShowModeBar","bindAllMethods","createPlotlyComponent","React","mergeRefs","_this$props","isActive","model","prevProps","_this$props2","settings","theme","onPlotElementChange","_prevProps$onPlotElem","_this$plotWrapper$cur","_this$plotWrapper$cur2","_ref3","layout","_figure","graphDiv","_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","onPlotlyRelayout","onPlotlyClick","onPlotlyDoubleClick","onPlotlySelected","onPlotlyDeselect","onPlotlyClickAnnotation","_onPlotlyLegendClick","onPlotlyLegendClick","_onPlotlyLegendDouble","onPlotlyLegendDoubleClick","onPlotlyWebGlContextLost","_ref6","_ref7","seriesIndexes","acc","_ref8","visible","_this$props3","dh","chartUtils","_ref9","_ref0","shownError","force","rect","isRectChanged","_this$props4","columnFormats","FormatterUtils","dateTimeFormatterOptions","_settings$defaultDeci","defaultDecimalFormatOptions","_settings$defaultInte","defaultIntegerFormatOptions","formatter","Formatter","renderOptions","PlotlyProp","PlotComponent","_this$state","shownBlocker","config","isPlotShown","errorOverlay","DateUtils","Plotly","ChartContainer","chartTheme","useChartTheme"],"mappings":"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"}
@@ -0,0 +1 @@
1
+ .grid-cell-input-field{color:#e5e5e5;background:#393939;border:none;width:100%;height:100%;padding:calc((var(--grid-row-height, 19px) - var(--grid-font-size, 12px)) / 2 - 1px) var(--grid-cell-horizontal-padding, 5px) calc((var(--grid-row-height, 19px) - var(--grid-font-size, 12px)) / 2 + 1px);border-radius:2px;font-size:var(--grid-font-size, 12px);line-height:1;resize:none}.grid-cell-input-field:focus{outline:none;border:none;box-shadow:0 0 0 2px #00f}.grid-cell-input-field.error{color:red}.grid-cell-input-field.error:focus{box-shadow:0 0 0 2px red}.grid-wrapper{flex:1 1 0;max-width:100%;max-height:100%;min-width:0;min-height:0;position:relative;font-family:sans-serif;font-feature-settings:"tnum"}.grid-canvas{display:block}.grid-canvas:focus{outline:none}.grid-cursor-default{cursor:default}.grid-cursor-move{cursor:grabbing}.grid-cursor-not-allowed{cursor:not-allowed}.grid-cursor-s-resize{cursor:s-resize}.grid-cursor-row-resize{cursor:row-resize}.grid-cursor-e-resize{cursor:e-resize}.grid-cursor-col-resize{cursor:col-resize}.grid-cursor-pointer{cursor:pointer}.grid-block-events{pointer-events:none}.advanced-filter-creator-filter-item input.error{color:var(--dh-color-negative-bg)}.advanced-filter-creator-filter-item input.error:focus{box-shadow:inset 0 0 0 2px var(--dh-color-negative-bg),0 0 0 .2rem color-mix(in srgb,var(--dh-color-accent) 35%,transparent)}.advanced-filter-creator-select-value .select-value-list-scroll-pane{min-height:120px;height:120px;max-height:120px;overflow-x:auto}.advanced-filter-creator-select-value .advanced-filter-creator-select-meta-row{display:flex;flex-wrap:wrap;justify-content:space-between;padding-top:.25rem}.advanced-filter-creator-select-value .row-count-info{padding-top:calc(.25rem + 2px);padding-bottom:calc(.25rem + 2px);color:var(--dh-color-gray-600);-webkit-user-select:none;user-select:none}.advanced-filter-creator-select-value .btn-link{color:var(--dh-color-fg, #f0f0ee);text-decoration:underline}.advanced-filter-creator-select-value .btn-link:hover{color:var(--dh-color-accent-bg)}.advanced-filter-creator-select-value .select-value-list-wrapper{position:relative;display:flex;background:var(--dh-color-input-bg)}.advanced-filter-creator-select-value .select-value-list-wrapper .value-list-item label{white-space:nowrap}.advanced-filter-creator-select-value .select-value-list-wrapper .loading-list{position:absolute;top:0;bottom:0;left:0;right:0;display:flex;flex-direction:column;justify-content:center;align-content:center}.advanced-filter-creator-select-value .select-value-list-wrapper .loading-list .fa-layers{margin:auto}.advanced-filter-creator{padding:.5rem .75rem}.advanced-filter-creator .btn-link{padding-left:.25rem;padding-right:.25rem}.advanced-filter-creator hr{margin:.5rem -.75rem;background:var(--dh-color-gray-300)}.advanced-filter-creator .form-row.justify-content-end{margin-right:0}.advanced-filter-creator .advanced-filter-column-name{padding-bottom:.5rem}.advanced-filter-creator .advanced-filter-column-name .column-type{font-style:italic;color:var(--dh-color-gray-600);font-weight:400;text-overflow:ellipsis;overflow:hidden;white-space:nowrap}.advanced-filter-creator .title-bar{display:flex;align-items:baseline;-webkit-user-select:none;user-select:none}.advanced-filter-creator .title-bar .advanced-filter-title{flex-grow:1}.advanced-filter-creator .advanced-filter-menu-buttons .sort-operator.btn{font-size:14px;color:var(--dh-color-gray-600);text-decoration:none;padding-top:0;padding-bottom:0;margin-left:.5rem}.advanced-filter-creator .advanced-filter-menu-buttons .sort-operator.active{color:var(--dh-color-fg, #f0f0ee)}.advanced-filter-creator .add-filter-item,.advanced-filter-creator .advanced-filter-creator-filter-operator{-webkit-user-select:none;user-select:none;padding-right:25px;padding-top:2px;padding-bottom:2px;margin-top:-1rem;transition:.15s opacity}.advanced-filter-creator .add-filter-item span,.advanced-filter-creator .advanced-filter-creator-filter-operator span{font-size:14px;padding-top:4px;padding-right:.25rem;color:var(--dh-color-gray-700)}.advanced-filter-creator .add-filter-item .btn-link.filter-operator,.advanced-filter-creator .add-filter-item .btn-link.btn-filter-item,.advanced-filter-creator .advanced-filter-creator-filter-operator .btn-link.filter-operator,.advanced-filter-creator .advanced-filter-creator-filter-operator .btn-link.btn-filter-item{font-size:12px;color:var(--dh-color-fg, #f0f0ee);text-decoration:underline;margin-right:0}.advanced-filter-creator .add-filter-item .btn-link.filter-operator:hover,.advanced-filter-creator .add-filter-item .btn-link.btn-filter-item:hover,.advanced-filter-creator .advanced-filter-creator-filter-operator .btn-link.filter-operator:hover,.advanced-filter-creator .advanced-filter-creator-filter-operator .btn-link.btn-filter-item:hover{color:var(--dh-color-accent-bg);text-decoration:underline}.advanced-filter-creator .add-filter-item.hidden{transition:none;opacity:0;pointer-events:none}.advanced-filter-creator .advanced-filter-creator-filter-operator .filter-operator:not(.active){color:var(--dh-color-gray-600)}.advanced-filter-creator .advanced-filter-creator-filter-operator .filter-operator.btn-link{text-decoration:none}.advanced-filter-creator .advanced-filter-creator-filter-operator .filter-operator.btn-link.active{color:var(--dh-color-fg, #f0f0ee)}.advanced-filter-creator .advanced-filter-creator-filter-operator .filter-operator.btn-link.active:hover{color:var(--dh-color-fg, #f0f0ee);cursor:default}.advanced-filter-creator .advanced-filter-creator-filter-operator .filter-operator.btn-link:hover{color:var(--dh-color-accent-bg)}.advanced-filter-creator .advanced-filter-creator-filter-operator .filter-operator.btn-link:focus{text-decoration:underline}.advanced-filter-creator>form{display:flex;flex-direction:column;flex:1 1 auto;min-height:0;overflow:hidden}.advanced-filter-creator>form>.advanced-filter-values-group{display:flex;flex-direction:column;flex:1 1 auto;min-height:0}.advanced-filter-creator .advanced-filter-creator-select-value{display:flex;flex-direction:column;flex:1 1 auto;min-height:0}.advanced-filter-creator .advanced-filter-creator-select-value .select-value-list-wrapper{flex:1 1 auto;min-height:120px;position:relative;overflow:hidden}.advanced-filter-creator .advanced-filter-creator-select-value .select-value-list-scroll-pane{position:absolute;top:0;right:0;bottom:0;left:0;height:auto;max-height:none;min-height:0}.popper-container.maximized .advanced-filter-creator{width:min(94vw,2200px)!important;height:85vh!important;max-width:none!important;max-height:none!important;overflow:hidden;display:flex;flex-direction:column}.iris-grid-bottom-bar{position:absolute;bottom:-50px;left:0;right:0;height:100px;background-color:var(--dh-color-surface-bg);display:flex;flex-direction:row;align-content:center;padding-left:1em;padding-right:1em;padding-bottom:50px}.iris-grid-bottom-bar .status-message,.iris-grid-bottom-bar .error-message{flex-grow:1;flex-shrink:1;font-weight:600;margin-right:1em;overflow:hidden;display:flex;flex-direction:row;align-items:center;margin-top:-4px;-webkit-user-select:none;user-select:none}.iris-grid-bottom-bar .status-message span,.iris-grid-bottom-bar .error-message span{white-space:nowrap;text-overflow:ellipsis;overflow:hidden}.iris-grid-bottom-bar .status-message .svg-inline--fa,.iris-grid-bottom-bar .error-message .svg-inline--fa{margin-right:.5rem}.iris-grid-bottom-bar .error-message{color:var(--dh-color-negative-bg)}.iris-grid-bottom-bar .buttons-container{flex-grow:0;display:flex;flex-direction:row;align-items:center}.iris-grid-bottom-bar .buttons-container .btn{min-width:10rem}.iris-grid-bottom-bar .buttons-container .btn .svg-inline--fa,.iris-grid-bottom-bar .buttons-container .btn .loading-spinner{margin:0 .25rem 0 0}.iris-grid-bottom-bar .buttons-container .btn:not(:last-child){margin-right:.5em}.iris-grid-bottom-bar-slide-up-enter{transform:translate3d(0,100%,0)}.iris-grid-bottom-bar-slide-up-enter-active{transform:initial;transition:transform .3s cubic-bezier(.175,.885,.32,1.275)}.iris-grid-bottom-bar-slide-up-enter-done{position:relative;bottom:0;padding-bottom:0;height:50px;transition:transform .3s cubic-bezier(.175,.885,.32,1.275)}.iris-grid-bottom-bar-slide-up-exit{transform:initial}.iris-grid-bottom-bar-slide-up-exit-active{transform:translate3d(0,100%,0);transition:transform .3s cubic-bezier(.175,.885,.32,1.275)}.pending-data-bottom-bar{background-color:var(--dh-color-surface-bg)}.iris-grid-copy-handler{position:absolute;bottom:-50px;left:0;right:0;height:100px;background-color:var(--dh-color-surface-bg);display:flex;flex-direction:row;align-content:center;padding-left:1em;padding-right:1em;padding-bottom:50px}.iris-grid-copy-handler .status-message{flex-grow:1;font-weight:600;margin-right:1em;text-overflow:ellipsis;display:flex;flex-direction:row;align-items:center;margin-top:-4px;-webkit-user-select:none;user-select:none}.iris-grid-copy-handler .buttons-container{flex-grow:0;display:flex;flex-direction:row;align-items:center}.iris-grid-copy-handler .buttons-container .btn{min-width:10rem}.iris-grid-copy-handler .buttons-container .btn-cancel{color:var(--dh-color-gray-900, #fcfcfa);border-color:var(--dh-color-gray-900, #fcfcfa);margin-right:.5em}.iris-grid-copy-handler .buttons-container .btn-copy:disabled{opacity:1}.copy-slide-up-enter{transform:translateY(50px)}.copy-slide-up-enter-active{transform:initial;transition:transform .3s cubic-bezier(.175,.885,.32,1.275)}.copy-slide-up-exit{transform:initial}.copy-slide-up-exit-active{transform:translateY(50px);transition:transform .3s cubic-bezier(.175,.885,.32,1.275)}.iris-grid .grid-cursor-copy{cursor:url("data:image/svg+xml,%3c?xml%20version='1.0'%20encoding='utf-8'?%3e%3c!--%20Generator:%20Adobe%20Illustrator%2028.1.0,%20SVG%20Export%20Plug-In%20.%20SVG%20Version:%206.00%20Build%200)%20--%3e%3csvg%20version='1.1'%20id='Layer_1'%20xmlns='http://www.w3.org/2000/svg'%20xmlns:xlink='http://www.w3.org/1999/xlink'%20x='0px'%20y='0px'%20viewBox='0%200%2032%2032'%20style='enable-background:new%200%200%2032%2032;'%20xml:space='preserve'%3e%3cstyle%20type='text/css'%3e%20.st0{fill:%23FFFFFF;}%20%3c/style%3e%3cpath%20class='st0'%20d='M10,6V0H6v6H0v4h6v6h4v-6h6V6H10z'/%3e%3cpath%20class='st0'%20d='M30.8,18.6l-7.7-7.5l-0.3-0.3h-8.2l-0.3,0.3l-1.1,1.1l-0.3,0.3v15l0.3,0.3l1.1,1.1l0.3,0.3h1.1v0.1l0.3,0.3%20l1.4,1.3l0.3,0.3h11.8l0.3-0.3l1.1-1.1l0.3-0.3V18.9L30.8,18.6z%20M27,27h-7v-9h3.2l3.8,3.6V27z'/%3e%3cpolygon%20points='15,7%2015,9%209,9%209,15%207,15%207,9%201,9%201,7%207,7%207,1%209,1%209,7%20'/%3e%3cpath%20d='M25.2,15h-6.8L17,16.3v12.4l1.3,1.3h10.3l1.3-1.3v-9.1L25.2,15z%20M28,28h-9V17h5.3l3.6,3.5V28z'/%3e%3cpolygon%20points='24.2,14%2016,14%2016,28%2015.3,28%2014,26.7%2014,13.3%2015.3,12%2022.2,12%20'/%3e%3c/svg%3e") 8 8,copy}.iris-grid .grid-cursor-linker{cursor:url("data:image/svg+xml,%3c?xml%20version='1.0'%20encoding='UTF-8'?%3e%3csvg%20width='32px'%20height='32px'%20viewBox='0%200%2032%2032'%20version='1.1'%20xmlns='http://www.w3.org/2000/svg'%20xmlns:xlink='http://www.w3.org/1999/xlink'%3e%3c!--%20Generator:%20Sketch%2057.1%20(83088)%20-%20https://sketch.com%20--%3e%3ctitle%3eLinker-Cursor%3c/title%3e%3cdesc%3eCreated%20with%20Sketch.%3c/desc%3e%3cg%20id='Linker-Cursor'%20stroke='none'%20stroke-width='1'%20fill='none'%20fill-rule='evenodd'%3e%3cpath%20d='M10,0%20L10,6%20L16,6%20L16,10%20L10,10%20L10,16%20L6,16%20L6,9.999%20L0,10%20L0,6%20L6,5.999%20L6,0%20L10,0%20Z'%20id='Combined-Shape'%20fill='%23FFFFFF'%20fill-rule='nonzero'%3e%3c/path%3e%3cpath%20d='M9,1%20L9,7%20L15,7%20L15,9%20L9,9%20L9,15%20L7,15%20L7,8.999%20L1,9%20L1,7%20L7,6.999%20L7,1%20L9,1%20Z'%20id='Combined-Shape'%20fill='%23000000'%20fill-rule='nonzero'%3e%3c/path%3e%3cpath%20d='M23.3122552,17.6878176%20C25.6116171,19.9871318%2025.7901567,23.662742%2023.7547165,26.1654976%20C23.5833367,26.3777443%2023.5209886,26.4458987%2023.1396187,26.8304173%20C22.8830192,27.0891352%2020.7307279,29.2385612%2020.2283175,29.7409647%20C17.7499276,32.2193505%2013.7371996,32.2200342%2011.2591784,29.7410442%20C8.78045185,27.2632509%208.78012366,23.2507735%2011.2591052,20.7717519%20C12.0357312,19.9951503%2013.6762106,18.3524397%2013.860171,18.1687279%20C14.540081,17.4897978%2015.710173,17.9560661%2015.7242838,18.9205122%20C15.7300062,19.3106007%2015.8117058,19.9618048%2015.9024447,20.3408301%20C15.9909079,20.7094261%2015.8794815,21.0969175%2015.6119283,21.3644702%20L13.7315545,23.2444002%20C12.6202221,24.3563935%2012.6188426,26.1553262%2013.7312953,27.268504%20C14.8433304,28.3798414%2016.6422678,28.381221%2017.7555202,27.2686643%20L20.8394851,24.184304%20C21.9480707,23.0754886%2021.9486959,21.2697147%2020.8391558,20.1601762%20C20.6596216,19.9803257%2020.2956854,19.721446%2020.0670453,19.610923%20C19.6447842,19.4069286%2019.4070035,18.9541834%2019.4633663,18.4916722%20C19.5365962,17.8907974%2019.8060706,17.3292435%2020.2423197,16.8929452%20L20.4217058,16.7135593%20C20.7527888,16.3823878%2021.2598634,16.296726%2021.6795491,16.5074181%20C22.2786917,16.8080916%2022.8290743,17.2046376%2023.3122592,17.6878217%20Z%20M29.7408999,11.2590391%20C32.2195351,13.736871%2032.2198504,17.7492834%2029.7409299,20.2282882%20C28.9643038,21.0048898%2027.3238244,22.6476004%2027.139864,22.8313121%20C26.4599541,23.5102422%2025.289862,23.043974%2025.2757512,22.0795278%20C25.2700289,21.6894393%2025.1883293,21.0382352%2025.0975904,20.65921%20C25.0091272,20.290614%2025.1205535,19.9031226%2025.3880977,19.6355789%20L27.2684405,17.7555998%20C28.3797729,16.6436065%2028.3811524,14.8446738%2027.2686997,13.731496%20C26.1566646,12.6201586%2024.3577272,12.618779%2023.2444748,13.7313357%20L20.1605099,16.815696%20C19.0519243,17.9245114%2019.0512991,19.7302853%2020.1608392,20.8398238%20C20.3403734,21.0196743%2020.7043096,21.278554%2020.9329497,21.389077%20C21.3552108,21.5930714%2021.5929915,22.0458166%2021.5366287,22.5083278%20C21.4633904,23.109271%2021.1939171,23.6708638%2020.7576753,24.1070548%20L20.5781177,24.2866121%20C20.2469607,24.6175903%2019.7400148,24.7032603%2019.3204459,24.4925819%20C18.7213033,24.1919084%2018.1709207,23.7953624%2017.6877398,23.3121824%20C15.3883779,21.0128682%2015.2098383,17.337258%2017.2452785,14.8345024%20C17.416623,14.6222994%2017.4789742,14.5541442%2017.8603788,14.1695952%20C18.1165342,13.9113281%2020.2634949,11.767217%2020.7716774,11.2590353%20C23.2500409,8.78067603%2027.2627096,8.7799658%2029.7408999,11.2590391%20Z'%20id='l'%20stroke='%23FFFFFF'%20stroke-width='1.2'%20fill='%23000000'%20fill-rule='nonzero'%3e%3c/path%3e%3c/g%3e%3c/svg%3e") 8 8,crosshair}.iris-grid .grid-cursor-linker-not-allowed{cursor:url("data:image/svg+xml,%3csvg%20width='32'%20height='32'%20viewBox='0%200%2032%2032'%20fill='none'%20xmlns='http://www.w3.org/2000/svg'%3e%3cg%20id='Not-Allowed-Cursor'%3e%3cpath%20id='Combined%20Shape%20Copy%2010'%20fill-rule='evenodd'%20clip-rule='evenodd'%20d='M10%200H6V6H0V10H6V16H10V10H16V6H10V0Z'%20fill='white'%20/%3e%3cpath%20id='Combined%20Shape%20Copy%2011'%20fill-rule='evenodd'%20clip-rule='evenodd'%20d='M9%201H7V7H1V9H7V15H9V9H15V7H9V1Z'%20fill='black'%20/%3e%3cpath%20id='Union'%20d='M15.3579%2017.6559L23.3441%2025.6421C22.5017%2026.1091%2021.5325%2026.375%2020.5%2026.375C17.2553%2026.375%2014.625%2023.7447%2014.625%2020.5C14.625%2019.4675%2014.8909%2018.4983%2015.3579%2017.6559ZM26.375%2020.5C26.375%2021.5324%2026.1092%2022.5015%2025.6422%2023.3439L17.6561%2015.3578C18.4985%2014.8908%2019.4676%2014.625%2020.5%2014.625C23.7447%2014.625%2026.375%2017.2553%2026.375%2020.5ZM20.5%2029.625C25.5396%2029.625%2029.625%2025.5396%2029.625%2020.5C29.625%2015.4604%2025.5396%2011.375%2020.5%2011.375C15.4604%2011.375%2011.375%2015.4604%2011.375%2020.5C11.375%2025.5396%2015.4604%2029.625%2020.5%2029.625Z'%20fill='black'%20stroke='white'%20stroke-width='1.25'%20/%3e%3c/g%3e%3c/svg%3e") 8 8,not-allowed}.iris-grid-input-autosized-wrapper{position:absolute;display:inline-grid;height:100%;align-items:center;z-index:1}.iris-grid-input-autosized-wrapper .advanced-filter-button{position:absolute;top:2px;right:.25rem;height:23px;margin:0}.iris-grid-input-autosized-wrapper:after{content:attr(data-value) " ";width:auto;height:100%;border:1px solid;padding:3px 2px 3px 3px;margin-right:24px;overflow:hidden;visibility:hidden;white-space:nowrap;grid-area:1/1;font:12px fira sans,sans-serif;font-feature-settings:"tnum"}@-moz-document url-prefix(""){.iris-grid-input-autosized-wrapper:after{font-feature-settings:normal}}.iris-grid-input-autosized-wrapper .iris-grid-input-field{position:absolute;color:var(--dh-color-text);background:var(--dh-color-grid-filter-bar-expanded-bg);border:1px solid var(--dh-color-input-border);width:100%;height:100%;padding:3px 2px 3px 3px;border-radius:1px;font:12px fira sans,sans-serif;font-feature-settings:"tnum"}@-moz-document url-prefix(""){.iris-grid-input-autosized-wrapper .iris-grid-input-field{font-feature-settings:normal}}.iris-grid-input-autosized-wrapper .iris-grid-input-field.iris-grid-has-filter{background:linear-gradient(var(--dh-color-grid-filter-bar-expanded-active-bg) 100%,var(--dh-color-grid-filter-bar-expanded-active-bg)),linear-gradient(var(--dh-color-grid-bg) 100%,var(--dh-color-grid-bg))}.iris-grid-input-autosized-wrapper .iris-grid-input-field.active{background:linear-gradient(var(--dh-color-grid-filter-bar-expanded-active-cell-bg) 100%,var(--dh-color-grid-filter-bar-expanded-active-cell-bg)),linear-gradient(var(--dh-color-grid-filter-bar-expanded-active-bg) 100%,var(--dh-color-grid-filter-bar-expanded-active-bg)),linear-gradient(var(--dh-color-grid-bg) 100%,var(--dh-color-grid-bg))}.iris-grid-input-autosized-wrapper .iris-grid-input-field:focus{outline:0;border:1px solid var(--dh-color-input-focus-border);box-shadow:0 0 0 .2rem color-mix(in srgb,var(--dh-color-accent) 35%,transparent)}.iris-grid-input-autosized-wrapper .iris-grid-input-field.error{color:var(--dh-color-negative-bg)}.iris-grid-input-autosized-wrapper .iris-grid-input-field.error:focus{box-shadow:inset 0 0 0 2px var(--dh-color-negative-bg),0 0 0 .2rem color-mix(in srgb,var(--dh-color-accent) 35%,transparent)}.column-statistics{min-width:175px;max-width:350px;color:var(--dh-color-fg, #f0f0ee);text-align:left;font-size:small;font-weight:300}.column-statistics-title{display:flex;align-items:center;font-weight:500;word-break:break-all}.column-statistics-type{font-style:italic;color:var(--dh-color-gray-600);font-weight:400;-webkit-user-select:none;user-select:none;white-space:nowrap}.column-statistics-status{margin:.25rem 0 .25rem -1px}.column-statistics-grid{display:grid;grid-template-columns:auto auto;row-gap:.25rem;padding-top:.25rem}.column-statistics-grid>div{border-bottom:1px solid var(--dh-color-gray-500)}.column-statistics-grid>div:last-child,.column-statistics-grid>div:nth-last-child(2){border-bottom:none}.column-statistics-grid .column-statistics-unique-value{margin-left:1rem}.column-statistics-grid .column-statistic-operation{flex-grow:0;padding-right:1rem;text-overflow:ellipsis;overflow:hidden;white-space:nowrap}.column-statistics-grid .column-statistic-value{font-feature-settings:"tnum";text-align:right;text-overflow:ellipsis;overflow:hidden;white-space:nowrap}.column-statistics .btn-link{text-decoration:underline;padding-top:0;padding-bottom:0}.column-statistics-loading,.column-statistics-loading .loading{padding-bottom:2px;display:inline-block;color:var(--dh-color-gray-600)}.column-statistics-loading .loading-spinner{margin-right:5px}:export{grid-bg:var(--dh-color-grid-bg);font:12px Fira Sans,sans-serif;white:var(--dh-color-white);black:var(--dh-color-black);header-bg:var(--dh-color-grid-header-bg);header-color:var(--dh-color-grid-header-text);header-height:30px;header-separator-color:var(--dh-color-grid-header-separator);header-separator-hover-color:var(--dh-color-grid-header-separator-hover);header-hidden-separator-hover-color:var(--dh-color-grid-header-separator-hidden-hover);header-sort-bar-color:var(--dh-color-grid-header-sort-bar);header-reverse-bar-color:var(--dh-color-grid-header-reverse-bar);header-bar-casing-color:var(--dh-color-grid-header-bar-casing);header-font:600 12px Fira Sans,sans-serif;row-height:19px;row-background-colors:var(--dh-color-grid-row-0-bg) var(--dh-color-grid-row-1-bg);active-cell-selection-border-width:2px;selection-color:var(--dh-color-grid-selection);selection-outline-color:var(--dh-color-grid-selection-outline);selection-outline-casing-color:var(--dh-color-grid-selection-outline-casing);row-hover-bg:var(--dh-color-grid-row-hover-bg);row-shadow-alpha:var(--dh-color-grid-row-shadow-alpha);selected-row-hover-bg:var(--dh-color-grid-row-hover-bg-selected);scroll-bar-active-selection-tick-color:var(--dh-color-grid-scroll-bar-active-selection-tick);scroll-bar-bg:var(--dh-color-grid-scroll-bar-bg);scroll-bar-hover-bg:var(--dh-color-grid-scroll-bar-hover-bg);scroll-bar-casing-color:var(--dh-color-grid-scroll-bar-casing);scroll-bar-corner-color:var(--dh-color-grid-scroll-bar-corner);scroll-bar-color:var(--dh-color-grid-scroll-bar);scroll-bar-hover-color:var(--dh-color-grid-scroll-bar-hover);scroll-bar-active-color:var(--dh-color-grid-scroll-bar-active);text-color:var(--dh-color-grid-text);hyperlink-color:var(--dh-color-grid-text-hyperlink);positive-number-color:var(--dh-color-grid-number-positive);negative-number-color:var(--dh-color-grid-number-negative);zero-number-color:var(--dh-color-grid-number-zero);date-color:var(--dh-color-grid-date);pending-text-color:var(--dh-color-grid-text-pending);error-text-color:var(--dh-color-grid-text-error);null-string-color:var(--dh-color-grid-string-null);filter-bar-active-bg:var(--dh-color-grid-filter-bar-active-bg);filter-bar-active-color:var(--dh-color-grid-filter-bar-active);filter-bar-expanded-bg:var(--dh-color-grid-filter-bar-expanded-bg);filter-bar-expanded-active-bg:var(--dh-color-grid-filter-bar-expanded-active-bg);filter-bar-expanded-active-cell-bg:var(--dh-color-grid-filter-bar-expanded-active-cell-bg);filter-bar-separator-color:var(--dh-color-grid-filter-bar-separator);filter-bar-error-color:var(--dh-color-grid-filter-bar-error);filter-icon-color:var(--dh-color-grid-filter-icon);scrim-color:var(--dh-color-grid-scrim);context-menu-sort-icon-color:var(--dh-color-grid-context-menu-sort-icon);context-menu-reverse-icon-color:var(--dh-color-grid-context-menu-reverse-icon);linker-column-hover-bg:var(--dh-color-grid-column-linker-hover-bg);tree-line-color:var(--dh-color-grid-tree-line);tree-marker-color:var(--dh-color-grid-tree-marker);tree-marker-hover-color:var(--dh-color-grid-tree-marker-hover);grouped-column-divider-color:var(--dh-color-grid-column-grouped-divider);floating-grid-row-color:var(--dh-color-grid-floating-row);floating-row-background-colors:var(--dh-color-grid-floating-row-bg);floating-divider-inner-color:var(--dh-color-grid-floating-divider-inner);floating-divider-outer-color:var(--dh-color-grid-floating-divider-outer);overflow-button-color:var(--dh-color-grid-overflow-button);overflow-button-hover-color:var(--dh-color-grid-overflow-button-hover);zero-line-color:var(--dh-color-grid-data-bar-zero-line);positive-bar-color:var(--dh-color-grid-data-bar-positive);negative-bar-color:var(--dh-color-grid-data-bar-negative);marker-bar-color:var(--dh-color-grid-data-bar-marker)}.iris-grid{--table-sidebar-bg: var(--dh-color-surface-bg);--dh-color-hr: var(--dh-color-gray-500);width:100%;height:100%;position:relative;display:flex;flex-direction:row;overflow:hidden}.iris-grid .iris-grid-column{flex:1 1;min-width:0;transition:all .2s;display:flex;flex-direction:column;position:relative}.iris-grid .grid-cursor-copy{cursor:url("data:image/svg+xml,%3c?xml%20version='1.0'%20encoding='utf-8'?%3e%3c!--%20Generator:%20Adobe%20Illustrator%2028.1.0,%20SVG%20Export%20Plug-In%20.%20SVG%20Version:%206.00%20Build%200)%20--%3e%3csvg%20version='1.1'%20id='Layer_1'%20xmlns='http://www.w3.org/2000/svg'%20xmlns:xlink='http://www.w3.org/1999/xlink'%20x='0px'%20y='0px'%20viewBox='0%200%2032%2032'%20style='enable-background:new%200%200%2032%2032;'%20xml:space='preserve'%3e%3cstyle%20type='text/css'%3e%20.st0{fill:%23FFFFFF;}%20%3c/style%3e%3cpath%20class='st0'%20d='M10,6V0H6v6H0v4h6v6h4v-6h6V6H10z'/%3e%3cpath%20class='st0'%20d='M30.8,18.6l-7.7-7.5l-0.3-0.3h-8.2l-0.3,0.3l-1.1,1.1l-0.3,0.3v15l0.3,0.3l1.1,1.1l0.3,0.3h1.1v0.1l0.3,0.3%20l1.4,1.3l0.3,0.3h11.8l0.3-0.3l1.1-1.1l0.3-0.3V18.9L30.8,18.6z%20M27,27h-7v-9h3.2l3.8,3.6V27z'/%3e%3cpolygon%20points='15,7%2015,9%209,9%209,15%207,15%207,9%201,9%201,7%207,7%207,1%209,1%209,7%20'/%3e%3cpath%20d='M25.2,15h-6.8L17,16.3v12.4l1.3,1.3h10.3l1.3-1.3v-9.1L25.2,15z%20M28,28h-9V17h5.3l3.6,3.5V28z'/%3e%3cpolygon%20points='24.2,14%2016,14%2016,28%2015.3,28%2014,26.7%2014,13.3%2015.3,12%2022.2,12%20'/%3e%3c/svg%3e") 8 8,copy}.iris-grid .grid-cursor-linker{cursor:url("data:image/svg+xml,%3c?xml%20version='1.0'%20encoding='UTF-8'?%3e%3csvg%20width='32px'%20height='32px'%20viewBox='0%200%2032%2032'%20version='1.1'%20xmlns='http://www.w3.org/2000/svg'%20xmlns:xlink='http://www.w3.org/1999/xlink'%3e%3c!--%20Generator:%20Sketch%2057.1%20(83088)%20-%20https://sketch.com%20--%3e%3ctitle%3eLinker-Cursor%3c/title%3e%3cdesc%3eCreated%20with%20Sketch.%3c/desc%3e%3cg%20id='Linker-Cursor'%20stroke='none'%20stroke-width='1'%20fill='none'%20fill-rule='evenodd'%3e%3cpath%20d='M10,0%20L10,6%20L16,6%20L16,10%20L10,10%20L10,16%20L6,16%20L6,9.999%20L0,10%20L0,6%20L6,5.999%20L6,0%20L10,0%20Z'%20id='Combined-Shape'%20fill='%23FFFFFF'%20fill-rule='nonzero'%3e%3c/path%3e%3cpath%20d='M9,1%20L9,7%20L15,7%20L15,9%20L9,9%20L9,15%20L7,15%20L7,8.999%20L1,9%20L1,7%20L7,6.999%20L7,1%20L9,1%20Z'%20id='Combined-Shape'%20fill='%23000000'%20fill-rule='nonzero'%3e%3c/path%3e%3cpath%20d='M23.3122552,17.6878176%20C25.6116171,19.9871318%2025.7901567,23.662742%2023.7547165,26.1654976%20C23.5833367,26.3777443%2023.5209886,26.4458987%2023.1396187,26.8304173%20C22.8830192,27.0891352%2020.7307279,29.2385612%2020.2283175,29.7409647%20C17.7499276,32.2193505%2013.7371996,32.2200342%2011.2591784,29.7410442%20C8.78045185,27.2632509%208.78012366,23.2507735%2011.2591052,20.7717519%20C12.0357312,19.9951503%2013.6762106,18.3524397%2013.860171,18.1687279%20C14.540081,17.4897978%2015.710173,17.9560661%2015.7242838,18.9205122%20C15.7300062,19.3106007%2015.8117058,19.9618048%2015.9024447,20.3408301%20C15.9909079,20.7094261%2015.8794815,21.0969175%2015.6119283,21.3644702%20L13.7315545,23.2444002%20C12.6202221,24.3563935%2012.6188426,26.1553262%2013.7312953,27.268504%20C14.8433304,28.3798414%2016.6422678,28.381221%2017.7555202,27.2686643%20L20.8394851,24.184304%20C21.9480707,23.0754886%2021.9486959,21.2697147%2020.8391558,20.1601762%20C20.6596216,19.9803257%2020.2956854,19.721446%2020.0670453,19.610923%20C19.6447842,19.4069286%2019.4070035,18.9541834%2019.4633663,18.4916722%20C19.5365962,17.8907974%2019.8060706,17.3292435%2020.2423197,16.8929452%20L20.4217058,16.7135593%20C20.7527888,16.3823878%2021.2598634,16.296726%2021.6795491,16.5074181%20C22.2786917,16.8080916%2022.8290743,17.2046376%2023.3122592,17.6878217%20Z%20M29.7408999,11.2590391%20C32.2195351,13.736871%2032.2198504,17.7492834%2029.7409299,20.2282882%20C28.9643038,21.0048898%2027.3238244,22.6476004%2027.139864,22.8313121%20C26.4599541,23.5102422%2025.289862,23.043974%2025.2757512,22.0795278%20C25.2700289,21.6894393%2025.1883293,21.0382352%2025.0975904,20.65921%20C25.0091272,20.290614%2025.1205535,19.9031226%2025.3880977,19.6355789%20L27.2684405,17.7555998%20C28.3797729,16.6436065%2028.3811524,14.8446738%2027.2686997,13.731496%20C26.1566646,12.6201586%2024.3577272,12.618779%2023.2444748,13.7313357%20L20.1605099,16.815696%20C19.0519243,17.9245114%2019.0512991,19.7302853%2020.1608392,20.8398238%20C20.3403734,21.0196743%2020.7043096,21.278554%2020.9329497,21.389077%20C21.3552108,21.5930714%2021.5929915,22.0458166%2021.5366287,22.5083278%20C21.4633904,23.109271%2021.1939171,23.6708638%2020.7576753,24.1070548%20L20.5781177,24.2866121%20C20.2469607,24.6175903%2019.7400148,24.7032603%2019.3204459,24.4925819%20C18.7213033,24.1919084%2018.1709207,23.7953624%2017.6877398,23.3121824%20C15.3883779,21.0128682%2015.2098383,17.337258%2017.2452785,14.8345024%20C17.416623,14.6222994%2017.4789742,14.5541442%2017.8603788,14.1695952%20C18.1165342,13.9113281%2020.2634949,11.767217%2020.7716774,11.2590353%20C23.2500409,8.78067603%2027.2627096,8.7799658%2029.7408999,11.2590391%20Z'%20id='l'%20stroke='%23FFFFFF'%20stroke-width='1.2'%20fill='%23000000'%20fill-rule='nonzero'%3e%3c/path%3e%3c/g%3e%3c/svg%3e") 8 8,crosshair}.iris-grid .grid-cursor-linker-not-allowed{cursor:url("data:image/svg+xml,%3csvg%20width='32'%20height='32'%20viewBox='0%200%2032%2032'%20fill='none'%20xmlns='http://www.w3.org/2000/svg'%3e%3cg%20id='Not-Allowed-Cursor'%3e%3cpath%20id='Combined%20Shape%20Copy%2010'%20fill-rule='evenodd'%20clip-rule='evenodd'%20d='M10%200H6V6H0V10H6V16H10V10H16V6H10V0Z'%20fill='white'%20/%3e%3cpath%20id='Combined%20Shape%20Copy%2011'%20fill-rule='evenodd'%20clip-rule='evenodd'%20d='M9%201H7V7H1V9H7V15H9V9H15V7H9V1Z'%20fill='black'%20/%3e%3cpath%20id='Union'%20d='M15.3579%2017.6559L23.3441%2025.6421C22.5017%2026.1091%2021.5325%2026.375%2020.5%2026.375C17.2553%2026.375%2014.625%2023.7447%2014.625%2020.5C14.625%2019.4675%2014.8909%2018.4983%2015.3579%2017.6559ZM26.375%2020.5C26.375%2021.5324%2026.1092%2022.5015%2025.6422%2023.3439L17.6561%2015.3578C18.4985%2014.8908%2019.4676%2014.625%2020.5%2014.625C23.7447%2014.625%2026.375%2017.2553%2026.375%2020.5ZM20.5%2029.625C25.5396%2029.625%2029.625%2025.5396%2029.625%2020.5C29.625%2015.4604%2025.5396%2011.375%2020.5%2011.375C15.4604%2011.375%2011.375%2015.4604%2011.375%2020.5C11.375%2025.5396%2015.4604%2029.625%2020.5%2029.625Z'%20fill='black'%20stroke='white'%20stroke-width='1.25'%20/%3e%3c/g%3e%3c/svg%3e") 8 8,not-allowed}.iris-grid .table-sidebar{height:100%;flex:0 0 320px;width:320px;max-width:320px;background:var(--table-sidebar-bg);box-shadow:0 0 6px var(--dh-color-dropshadow);z-index:1;position:absolute;right:0}.iris-grid .table-sidebar .pushing-view,.iris-grid .table-sidebar .popping-view,.iris-grid .table-sidebar .main-view{background:var(--table-sidebar-bg)}.iris-grid .table-sidebar.slide-left-enter-done{position:relative}.iris-grid .table-sidebar .navigation-content{overflow-y:auto}.iris-grid .plugin-sidebar-error{padding:1rem 1.5em}.iris-grid .section-title{padding:1rem 0;font-weight:500;text-align:left}.iris-grid .section-footer{flex-grow:2;display:flex;justify-content:flex-end;margin-bottom:1rem}.iris-grid .grid-wrapper{font:12px fira sans,sans-serif;font-feature-settings:"tnum";transition:all .2s}.iris-grid .grid-wrapper .grid-settings-button{position:absolute;top:0;right:0;height:30px;width:30px;background-color:var(--dh-color-grid-header-bg);border-bottom:1px solid var(--dh-color-grid-header-separator);transition:transform .2s ease-out,opacity .2s ease-out}.iris-grid .grid-wrapper .grid-settings-button .btn{height:100%;width:100%}.iris-grid .grid-wrapper .grid-settings-button .btn:after{border-radius:0}.iris-grid .grid-wrapper .grid-settings-button .btn:focus:after{box-shadow:none}.iris-grid .grid-wrapper .grid-settings-button.is-menu-shown{opacity:0}.iris-grid .grid-wrapper .grid-cell-input-field{color:var(--dh-color-input-fg);background:var(--dh-color-input-bg)}.iris-grid .grid-wrapper .grid-cell-input-field:focus{box-shadow:0 0 0 2px var(--dh-color-grid-selection-outline),0 0 0 5px color-mix(in srgb,var(--dh-color-accent) 25%,transparent)}.iris-grid .grid-wrapper .grid-cell-input-field.error{color:var(--dh-color-negative-bg)}.iris-grid .grid-wrapper .grid-cell-input-field.error:focus{box-shadow:0 0 0 2px var(--dh-color-negative),0 0 0 5px color-mix(in srgb,var(--dh-color-negative) 25%,transparent)}.iris-grid-loading{position:absolute;bottom:0;left:0;right:0;display:flex;flex-direction:column;justify-content:center;align-content:center}.iris-grid-loading-status{display:flex;position:absolute;bottom:0;left:0;z-index:30;min-width:min(320px,100%)}.iris-grid-loading-status .iris-grid-loading-status-bar{position:relative;padding:5px;background:var(--dh-color-content-bg, #2d2a2e);color:var(--dh-color-gray-700);border-top:1px solid var(--dh-color-gray-500);border-right:1px solid var(--dh-color-gray-500);overflow:hidden;word-wrap:break-word;z-index:2;flex-grow:1}.iris-grid-loading-status .iris-grid-loading-status-bar:after{content:"";position:absolute;bottom:0;left:0;width:100%;height:2px;z-index:-1;background:var(--dh-color-accent-bg);transform-origin:0% 50%;opacity:0}.iris-grid-loading-status .iris-grid-loading-status-bar.show:after{opacity:1;animation:1.5s indeterminateAnimation infinite linear}@keyframes indeterminateAnimation{0%{transform:translate(-50%) scaleX(.5)}50%{transform:translate(0) scaleX(.5)}to{transform:translate(100%) scaleX(.2)}}.iris-grid-loading-status .iris-grid-btn-cancel{z-index:1;opacity:0;border:1px solid var(--dh-color-gray-500);border-left:0;border-bottom:0;padding:0 7px 2px 4px;background:var(--dh-color-content-bg, #2d2a2e);color:var(--dh-color-gray-700);transform:translate(-100%);transition:all .1s ease-out 0s;white-space:nowrap;outline-offset:-1px;outline:var(--dh-color-accent-bg)}.iris-grid-loading-status .iris-grid-btn-cancel:hover{color:var(--dh-color-fg, #f0f0ee);background:var(--dh-color-negative-bg)}.iris-grid-loading-status .iris-grid-btn-cancel:focus{outline:1px solid var(--dh-color-accent-bg)}.iris-grid-loading-status .iris-grid-btn-cancel:active{background:var(--dh-color-negative-hover-bg)}.iris-grid-loading-status .iris-grid-btn-cancel:active:focus{outline-color:var(--dh-color-negative-bg)}.iris-grid-loading-status .iris-grid-btn-cancel.show{opacity:1;transform:translate(0);transition:all .25s ease-out .1s}.advanced-filter-button-container{background:none}.advanced-filter-button-container .advanced-filter-button{height:23px;margin:0}.advanced-filter-button-container .advanced-filter-button .filter-solid{opacity:0;transition:.15s opacity}.advanced-filter-button-container .advanced-filter-button .filter-light{opacity:1;transition:.15s opacity}.advanced-filter-button-container .advanced-filter-button.filter-set .filter-solid,.advanced-filter-button-container .advanced-filter-button:hover .filter-solid{opacity:1}.advanced-filter-button-container .advanced-filter-button.filter-set .filter-light,.advanced-filter-button-container .advanced-filter-button:hover .filter-light{opacity:0}.advanced-filter-button-container .advanced-filter-button:hover{color:var(--dh-color-gray-400)}.advanced-filter-button-container .advanced-filter-button:hover .filter-solid{color:var(--dh-color-accent-bg)}.advanced-filter-menu-popper{background:var(--dh-color-gray-400)}.advanced-filter-menu-popper .popper-content .advanced-filter-creator{max-height:550px;overflow-y:auto;background:var(--dh-color-gray-400);width:320px;box-shadow:none}.advanced-filter-menu-popper .popper-content .popper-arrow{border-color:var(--dh-color-gray-400)}.advanced-filter-menu-container{pointer-events:none;visibility:hidden}.iris-grid-bar{overflow:hidden;flex:0 0 auto}.iris-grid-bar.iris-grid-bar-horizontal-enter{max-height:0}.iris-grid-bar.iris-grid-bar-horizontal-enter-active{transition:background-color 1s ease-in,max-height .15s ease-in;max-height:250px}.iris-grid-bar.iris-grid-bar-horizontal-enter-done{max-height:250px}.iris-grid-bar.iris-grid-bar-horizontal-exit{max-height:250px;transition:max-height .15s ease-out}.iris-grid-bar.iris-grid-bar-horizontal-exit-active,.iris-grid-bar.iris-grid-bar-horizontal-exit-done{max-height:0}.iris-grid-bar.iris-grid-bar-vertical-enter{max-width:0}.iris-grid-bar.iris-grid-bar-vertical-enter-active{transition:background-color 1s ease-in,max-width .15s ease-in;max-width:320px}.iris-grid-bar.iris-grid-bar-vertical-enter-done{max-width:320px}.iris-grid-bar.iris-grid-bar-vertical-exit{max-width:320px;transition:max-width .15s ease-out}.iris-grid-bar.iris-grid-bar-vertical-exit-active,.iris-grid-bar.iris-grid-bar-vertical-exit-done{max-width:0}.iris-grid-bar-primary{background-color:var(--dh-color-accent-down-bg)}.iris-grid-bar-primary.iris-grid-bar-horizontal-enter,.iris-grid-bar-primary.iris-grid-bar-vertical-enter{background-color:var(--dh-color-accent-bg)}.link-hover-tooltip{text-align:left;max-width:500px;overflow-wrap:break-word}.cross-column-container{display:flex;flex-direction:row;margin:.25rem;align-items:stretch;flex:0 1 auto}.cross-column-container .cross-column-search{flex:1;margin-right:.25rem}.cross-column-popup{padding:.5rem 1rem .1rem}.cross-column-popup .cross-column-scroll{display:grid;grid-template-columns:max-content auto;grid-column-gap:.5rem;grid-row-gap:0;overflow-y:auto;max-height:15rem;padding:.2rem .5rem;border:1px solid var(--dh-color-input-border)}.cross-column-button-bar{display:flex}.cross-column-button-bar :last-child{margin-left:auto}.iris-grid-partition-selector{display:flex;flex-wrap:wrap;background:var(--dh-color-surface-bg);align-items:center;padding:.5rem;gap:.5rem}.iris-grid-partition-selector .column-selector{display:flex;align-items:center;gap:.5rem}.iris-grid-partition-selector .column-selector .custom-select{min-width:4rem}.iris-grid-partition-selector .partition-button-group{display:flex;border-right:1px solid var(--dh-color-hr);padding:0 .5rem;gap:.5rem}.select-distinct-builder-container{width:100%;height:100%;padding:0;overflow:auto;display:flex;justify-content:space-between;flex-flow:column}.select-distinct-builder-container .select-distinct-title{padding:1rem;font-weight:500;text-align:left}.select-distinct-builder-container .select-distinct-input-container{padding:1rem}.select-distinct-builder-container .select-distinct-builder-footer{margin:1rem;margin-bottom:auto;display:flex;flex-direction:column;padding-bottom:1rem}.select-distinct-builder-container .select-distinct-builder-hint{color:var(--dh-color-gray-600);font-size:smaller}.select-distinct-builder-container .select-distinct-builder-hint .inline-code-snippet{display:inline;color:var(--dh-color-visual-yellow);font-family:Fira Mono,menlo,monaco,consolas,Liberation Mono,Courier New,monospace}.select-distinct-builder-container hr{background:var(--dh-color-gray-300);margin:0;width:100%}.conditional-formatting-rules{padding:.25rem}.conditional-formatting-list-item{display:flex;flex-direction:row;margin-bottom:2px;padding:0 .25rem}.conditional-formatting-list-item:first-child{padding-top:.25rem}.conditional-formatting-list-item .formatting-item{border-radius:4px;display:flex;padding:.25rem;flex-grow:1;align-items:center;-webkit-user-select:none;user-select:none;transition:color .12s ease-in-out,background-color .12s ease-in-out,border-color .12s ease-in-out,box-shadow .12s ease-in-out;border:1px solid transparent;line-height:1.3;cursor:pointer}.conditional-formatting-list-item .formatting-item .btn-drag-handle{cursor:grab}.conditional-formatting-list-item .formatting-item .rule-icon{padding-right:.5rem}.conditional-formatting-list-item .formatting-item .rule-icon-bg{min-width:2rem;height:2rem;display:flex;font-size:x-small;justify-content:center;align-items:center}.conditional-formatting-list-item .formatting-item .rule-title{overflow-x:hidden;text-overflow:ellipsis;padding-right:2px;display:flex;flex-grow:1}.conditional-formatting-list-item .formatting-item:focus{outline:0;border:1px solid var(--dh-color-input-focus-border);box-shadow:0 0 0 .2rem color-mix(in srgb,var(--dh-color-accent) 35%,transparent)}.conditional-formatting-list-item .formatting-item:hover{background:var(--dh-color-item-list-hover-bg)}.dragging>.conditional-formatting-list-item .formatting-item{background:var(--dh-color-accent-bg);box-shadow:0 .1rem 1rem var(--dh-color-dropshadow);color:var(--dh-color-accent-contrast)}.dragging>.conditional-formatting-list-item .formatting-item .btn{color:var(--dh-color-accent-contrast)}.style-editor .cs-dropdown{display:flex;text-align:left;padding-left:.5rem;width:100%;justify-content:space-between;border-radius:4px;border:1px solid var(--dh-color-input-border);min-width:14rem;background-position:right .75rem center;background-size:10px 6px;background-repeat:no-repeat}.style-editor .cs-dropdown:focus{border-color:var(--dh-color-input-focus-border)}.style-editor .cs-dropdown.btn-inline:active{background:var(--dh-svg-icon-select-indicator) right .75rem center/10px 6px no-repeat,var(--dh-color-action-down-bg)}.style-dropdown-menu{border-radius:4px}.style-dropdown-menu .style-options{max-height:400px;overflow:auto}.style-dropdown-menu .style-option-btn{border:none;border-radius:0;width:100%;padding:.42145rem .75rem;white-space:nowrap;text-decoration:none;background-color:transparent;text-align:left;cursor:pointer;-webkit-user-select:none;user-select:none;display:block}.style-dropdown-menu .style-option-btn:hover{opacity:.8}.style-dropdown-menu .style-option-btn:focus{outline:none;box-shadow:none}.style-dropdown-menu .style-option-btn:first-child{border-top-left-radius:4px;border-top-right-radius:4px}.style-dropdown-menu .style-option-btn:last-child{border-bottom-left-radius:4px;border-bottom-right-radius:4px}.conditional-format-editor{padding:1rem}.conditional-format-editor .formatter-list{display:flex;justify-content:flex-start;padding-top:.5rem}.conditional-format-editor .formatter-type{margin:0 1rem 0 0;display:flex}.conditional-format-editor .btn-formatter-type{font-size:smaller;width:100%}.conditional-format-editor .color-select{padding:0 2em 0 .25em}.conditional-format-editor .dh-combobox{width:100%}.cell-overflow-modal .modal-title{width:100%;display:flex;align-items:center;gap:.5rem}.cell-overflow-modal .modal-title .overflow-modal-title{margin:0;flex-grow:1}.cell-overflow-modal .modal-body{max-height:80vh;flex-shrink:1}.iris-grid-bottom-bar.goto-row{height:auto}.goto-row{background-color:var(--dh-color-content-bg, #2d2a2e);border-top:1px solid var(--dh-color-black, #1a171a);display:block}.goto-row .goto-row-row{display:flex;padding:.5rem;justify-content:space-between;align-items:flex-start;gap:.5rem}.goto-row .goto-row-wrapper{display:flex;align-items:center;gap:.5rem;flex-wrap:wrap}.goto-row .goto-row-text{min-width:10ch;margin:0;font-size:14px}.goto-row .goto-row-close{display:flex}.goto-row input{max-width:calc(1.5rem + 12ch)}.goto-row select{max-width:calc(1.5rem + 25ch)}.goto-row .is-inactive{color:var(--dh-color-gray-600)}.goto-row .goto-value-date-time-input{min-width:30ch}