@deephaven/embed-grid 0.68.1-beta.0 → 0.68.1-beta.1
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.
- package/build/assets/{App-6e82690a.js → App-13d6c7bd.js} +2 -2
- package/build/assets/{App-6e82690a.js.map → App-13d6c7bd.js.map} +1 -1
- package/build/assets/{Chart-2f05db29.js → Chart-74e84387.js} +2 -2
- package/build/assets/{Chart-2f05db29.js.map → Chart-74e84387.js.map} +1 -1
- package/build/assets/{IrisGrid-3c954fee.js → IrisGrid-d9276cb5.js} +3 -3
- package/build/assets/{IrisGrid-3c954fee.js.map → IrisGrid-d9276cb5.js.map} +1 -1
- package/build/assets/{IrisGridThemeProvider-3d4aa37a.js → IrisGridThemeProvider-c6d80554.js} +2 -2
- package/build/assets/{IrisGridThemeProvider-3d4aa37a.js.map → IrisGridThemeProvider-c6d80554.js.map} +1 -1
- package/build/assets/{MarkdownEditor-1237322d.js → MarkdownEditor-e5ed39eb.js} +2 -2
- package/build/assets/{MarkdownEditor-1237322d.js.map → MarkdownEditor-e5ed39eb.js.map} +1 -1
- package/build/assets/{MarkdownNotebook-53687607.js → MarkdownNotebook-11e36a93.js} +2 -2
- package/build/assets/{MarkdownNotebook-53687607.js.map → MarkdownNotebook-11e36a93.js.map} +1 -1
- package/build/assets/{index-ccd98624.js → index-a266a95a.js} +4 -4
- package/build/assets/{index-ccd98624.js.map → index-a266a95a.js.map} +1 -1
- package/build/assets/{index-6f73be40.js → index-f44e25e6.js} +2 -2
- package/build/assets/{index-6f73be40.js.map → index-f44e25e6.js.map} +1 -1
- package/build/assets/{useUser-8d00d908.js → useUser-2189b430.js} +2 -2
- package/build/assets/{useUser-8d00d908.js.map → useUser-2189b430.js.map} +1 -1
- package/build/index.html +1 -1
- package/package.json +14 -14
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{r as s,D as d}from"./vendor-91b6f4e2.js";import{u as D,a as P,I as $,C as F,b as U,f as B}from"./useUser-
|
|
2
|
-
//# sourceMappingURL=App-
|
|
1
|
+
import{r as s,D as d}from"./vendor-91b6f4e2.js";import{u as D,a as P,I as $,C as F,b as U,f as B}from"./useUser-2189b430.js";import{L,a as N}from"./index-f44e25e6.js";import"./helpers-de833af9.js";import"./monaco-0b69f16f.js";var{dh:O}=globalThis;const a=O;L.setLogLevel(parseInt("2",10));const c=L.module("EmbedGrid.App"),k=[a.VariableType.TABLE,a.VariableType.TREETABLE,a.VariableType.HIERARCHICALTABLE,a.VariableType.PANDAS,a.VariableType.PARTITIONEDTABLE];async function G(r,i){c.info(`Fetching table ${i}...`);const e=await B(r,i);if(!k.includes(e.type))throw new Error(`Unsupported type '${e.type}' for variable named '${i}'`);return await r.getObject(e)}function J(){const r=D(),i=P(),[e,E]=s.useState(),[y,T]=s.useState(),[C,h]=s.useState(),[A,v]=s.useState(),[S,I]=s.useState(!0),g=s.useMemo(()=>new URLSearchParams(window.location.search),[]),{permissions:V}=i,{canCopy:x,canDownloadCsv:j}=V;s.useEffect(function(){async function l(){try{const t=g.get("name");if(t==null)throw new Error("No name param provided");c.debug("Loading table",t,"...");const p=await G(r,t);c.debug("Creating model...");const u=await U.makeModel(a,p);E(u),c.debug("Table successfully loaded!")}catch(t){c.error("Unable to load table",t),T(`${t}`)}I(!1)}l()},[r,g]),s.useEffect(function(){function l(t){const{command:p,value:u}=t.data;switch(p){case"filter":{const f=u.map(({name:o,value:b})=>{const n=e==null?void 0:e.columns.find(w=>w.name===o);if(n==null)throw new Error(`Could not find column named ${o}`);return{name:o,value:b,type:n.type}});h(f);break}case"sort":{const f=u.map(({name:o,direction:b})=>{const n=e==null?void 0:e.columns.find(w=>w.name===o);if(n==null)throw new Error(`Could not find column named ${o}`);return b==="DESC"?n.sort().desc():n.sort().asc()});v(f);break}}}return window.addEventListener("message",l),()=>{window.removeEventListener("message",l)}},[e]);const m=e!=null;return d.jsxs("div",{className:"App",children:[m&&d.jsx($,{canCopy:x,canDownloadCsv:j,model:e,inputFilters:C,sorts:A}),!m&&d.jsx(N,{isLoaded:m,isLoading:S,errorMessage:y??null}),d.jsx(F,{})]})}export{J as default};
|
|
2
|
+
//# sourceMappingURL=App-13d6c7bd.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"App-6e82690a.js","sources":["../../../jsapi-shim/dist/dh.js","../../src/App.tsx"],"sourcesContent":["// The Deephaven API script isn't packaged as a module (yet), and is just included in index.html, exported to the global namespace\n// This include file is simply a wrapper so that it behaves like a module, and can be mocked easily for unit tests\n\nvar {\n dh\n} = globalThis;\nexport default dh;\n//# sourceMappingURL=dh.js.map","import React, { useEffect, useMemo, useState } from 'react';\nimport { useConnection, useUser } from '@deephaven/app-utils';\nimport { ContextMenuRoot, LoadingOverlay } from '@deephaven/components'; // Use the loading spinner from the Deephaven components package\nimport {\n InputFilter,\n IrisGrid,\n IrisGridModel,\n IrisGridModelFactory,\n} from '@deephaven/iris-grid'; // iris-grid is used to display Deephaven tables\nimport dh from '@deephaven/jsapi-shim'; // Import the shim to use the JS API\nimport type { dh as DhType } from '@deephaven/jsapi-types';\nimport { fetchVariableDefinition } from '@deephaven/jsapi-utils';\nimport Log from '@deephaven/log';\nimport './App.scss'; // Styles for in this app\n\nLog.setLogLevel(parseInt(import.meta.env.VITE_LOG_LEVEL ?? '', 10));\n\nconst log = Log.module('EmbedGrid.App');\n\nconst SUPPORTED_TYPES: string[] = [\n dh.VariableType.TABLE,\n dh.VariableType.TREETABLE,\n dh.VariableType.HIERARCHICALTABLE,\n dh.VariableType.PANDAS,\n dh.VariableType.PARTITIONEDTABLE,\n];\n\nexport type Command = 'filter' | 'sort';\n\n/** Input value for filter commands */\nexport type FilterCommandType = {\n name: string;\n value: string;\n};\n\nexport type SortCommandType = {\n name: string;\n direction?: 'ASC' | 'DESC';\n};\n\n/**\n * Load an existing Deephaven table with the connection provided\n * @param connection The Deephaven session object\n * @param name Name of the table to load\n * @param type The type of table to load\n * @returns Deephaven table\n */\nasync function loadTable(\n connection: DhType.IdeConnection,\n name: string\n): Promise<DhType.Table> {\n log.info(`Fetching table ${name}...`);\n\n const definition = await fetchVariableDefinition(connection, name);\n if (!SUPPORTED_TYPES.includes(definition.type)) {\n throw new Error(\n `Unsupported type '${definition.type}' for variable named '${name}'`\n );\n }\n const object = await connection.getObject(definition);\n return object as DhType.Table;\n}\n\n/**\n * A functional React component that displays a Deephaven table in an IrisGrid using the @deephaven/iris-grid package.\n * It will attempt to open and display the table specified with the `name` parameter, expecting it to be present on the server.\n * E.g. http://localhost:3000/?name=myTable will attempt to open a table `myTable`\n * If no query param is provided, it will attempt to open a new session and create a basic time table and display that.\n * By default, tries to connect to the server defined in the VITE_CORE_API_URL variable, which is set to http://localhost:1000/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 connection = useConnection();\n const user = useUser();\n const [model, setModel] = useState<IrisGridModel>();\n const [error, setError] = useState<string>();\n const [inputFilters, setInputFilters] = useState<InputFilter[]>();\n const [sorts, setSorts] = useState<DhType.Sort[]>();\n const [isLoading, setIsLoading] = useState(true);\n const searchParams = useMemo(\n () => new URLSearchParams(window.location.search),\n []\n );\n const { permissions } = user;\n const { canCopy, canDownloadCsv } = permissions;\n\n useEffect(\n function initializeApp() {\n async function initApp(): Promise<void> {\n try {\n // Get the table name from the query param `name`.\n const name = searchParams.get('name');\n if (name == null) {\n throw new Error('No name param provided');\n }\n log.debug('Loading table', name, '...');\n // Load the table up.\n const table = await loadTable(connection, name);\n // Create the `IrisGridModel` for use with the `IrisGrid` component\n log.debug(`Creating model...`);\n const newModel = await IrisGridModelFactory.makeModel(dh, table);\n setModel(newModel);\n log.debug('Table successfully loaded!');\n } catch (e: unknown) {\n log.error('Unable to load table', e);\n setError(`${e}`);\n }\n setIsLoading(false);\n }\n initApp();\n },\n [connection, searchParams]\n );\n\n useEffect(\n function initCommandListener() {\n function receiveMessage(e: MessageEvent): void {\n const { command, value } = e.data as {\n command: Command;\n value: unknown;\n };\n switch (command) {\n case 'filter': {\n const filterCommandValues = value as FilterCommandType[];\n const newInputFilters = filterCommandValues.map(\n ({ name, value: filterValue }) => {\n const column = model?.columns.find(c => c.name === name);\n if (column == null) {\n throw new Error(`Could not find column named ${name}`);\n }\n return {\n name,\n value: filterValue,\n type: column.type,\n };\n }\n );\n setInputFilters(newInputFilters);\n break;\n }\n case 'sort': {\n const sortCommandValues = value as SortCommandType[];\n const newSorts = sortCommandValues.map(({ name, direction }) => {\n const column = model?.columns.find(c => c.name === name);\n if (column == null) {\n throw new Error(`Could not find column named ${name}`);\n }\n return direction === 'DESC'\n ? column.sort().desc()\n : column.sort().asc();\n });\n setSorts(newSorts);\n break;\n }\n }\n }\n window.addEventListener('message', receiveMessage);\n\n return () => {\n window.removeEventListener('message', receiveMessage);\n };\n },\n [model]\n );\n\n const isLoaded = model != null;\n\n return (\n <div className=\"App\">\n {isLoaded && (\n <IrisGrid\n canCopy={canCopy}\n canDownloadCsv={canDownloadCsv}\n model={model}\n inputFilters={inputFilters}\n sorts={sorts}\n />\n )}\n {!isLoaded && (\n <LoadingOverlay\n isLoaded={isLoaded}\n isLoading={isLoading}\n errorMessage={error ?? null}\n />\n )}\n <ContextMenuRoot />\n </div>\n );\n}\n\nexport default App;\n"],"names":["dh","shim","Log","log","SUPPORTED_TYPES","loadTable","connection","name","definition","fetchVariableDefinition","App","useConnection","user","useUser","model","setModel","useState","error","setError","inputFilters","setInputFilters","sorts","setSorts","isLoading","setIsLoading","searchParams","useMemo","permissions","canCopy","canDownloadCsv","useEffect","initApp","table","newModel","IrisGridModelFactory","e","receiveMessage","command","value","newInputFilters","filterValue","column","c","newSorts","direction","isLoaded","jsxs","jsx","IrisGrid","LoadingOverlay","ContextMenuRoot"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"App-13d6c7bd.js","sources":["../../../jsapi-shim/dist/dh.js","../../src/App.tsx"],"sourcesContent":["// The Deephaven API script isn't packaged as a module (yet), and is just included in index.html, exported to the global namespace\n// This include file is simply a wrapper so that it behaves like a module, and can be mocked easily for unit tests\n\nvar {\n dh\n} = globalThis;\nexport default dh;\n//# sourceMappingURL=dh.js.map","import React, { useEffect, useMemo, useState } from 'react';\nimport { useConnection, useUser } from '@deephaven/app-utils';\nimport { ContextMenuRoot, LoadingOverlay } from '@deephaven/components'; // Use the loading spinner from the Deephaven components package\nimport {\n InputFilter,\n IrisGrid,\n IrisGridModel,\n IrisGridModelFactory,\n} from '@deephaven/iris-grid'; // iris-grid is used to display Deephaven tables\nimport dh from '@deephaven/jsapi-shim'; // Import the shim to use the JS API\nimport type { dh as DhType } from '@deephaven/jsapi-types';\nimport { fetchVariableDefinition } from '@deephaven/jsapi-utils';\nimport Log from '@deephaven/log';\nimport './App.scss'; // Styles for in this app\n\nLog.setLogLevel(parseInt(import.meta.env.VITE_LOG_LEVEL ?? '', 10));\n\nconst log = Log.module('EmbedGrid.App');\n\nconst SUPPORTED_TYPES: string[] = [\n dh.VariableType.TABLE,\n dh.VariableType.TREETABLE,\n dh.VariableType.HIERARCHICALTABLE,\n dh.VariableType.PANDAS,\n dh.VariableType.PARTITIONEDTABLE,\n];\n\nexport type Command = 'filter' | 'sort';\n\n/** Input value for filter commands */\nexport type FilterCommandType = {\n name: string;\n value: string;\n};\n\nexport type SortCommandType = {\n name: string;\n direction?: 'ASC' | 'DESC';\n};\n\n/**\n * Load an existing Deephaven table with the connection provided\n * @param connection The Deephaven session object\n * @param name Name of the table to load\n * @param type The type of table to load\n * @returns Deephaven table\n */\nasync function loadTable(\n connection: DhType.IdeConnection,\n name: string\n): Promise<DhType.Table> {\n log.info(`Fetching table ${name}...`);\n\n const definition = await fetchVariableDefinition(connection, name);\n if (!SUPPORTED_TYPES.includes(definition.type)) {\n throw new Error(\n `Unsupported type '${definition.type}' for variable named '${name}'`\n );\n }\n const object = await connection.getObject(definition);\n return object as DhType.Table;\n}\n\n/**\n * A functional React component that displays a Deephaven table in an IrisGrid using the @deephaven/iris-grid package.\n * It will attempt to open and display the table specified with the `name` parameter, expecting it to be present on the server.\n * E.g. http://localhost:3000/?name=myTable will attempt to open a table `myTable`\n * If no query param is provided, it will attempt to open a new session and create a basic time table and display that.\n * By default, tries to connect to the server defined in the VITE_CORE_API_URL variable, which is set to http://localhost:1000/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 connection = useConnection();\n const user = useUser();\n const [model, setModel] = useState<IrisGridModel>();\n const [error, setError] = useState<string>();\n const [inputFilters, setInputFilters] = useState<InputFilter[]>();\n const [sorts, setSorts] = useState<DhType.Sort[]>();\n const [isLoading, setIsLoading] = useState(true);\n const searchParams = useMemo(\n () => new URLSearchParams(window.location.search),\n []\n );\n const { permissions } = user;\n const { canCopy, canDownloadCsv } = permissions;\n\n useEffect(\n function initializeApp() {\n async function initApp(): Promise<void> {\n try {\n // Get the table name from the query param `name`.\n const name = searchParams.get('name');\n if (name == null) {\n throw new Error('No name param provided');\n }\n log.debug('Loading table', name, '...');\n // Load the table up.\n const table = await loadTable(connection, name);\n // Create the `IrisGridModel` for use with the `IrisGrid` component\n log.debug(`Creating model...`);\n const newModel = await IrisGridModelFactory.makeModel(dh, table);\n setModel(newModel);\n log.debug('Table successfully loaded!');\n } catch (e: unknown) {\n log.error('Unable to load table', e);\n setError(`${e}`);\n }\n setIsLoading(false);\n }\n initApp();\n },\n [connection, searchParams]\n );\n\n useEffect(\n function initCommandListener() {\n function receiveMessage(e: MessageEvent): void {\n const { command, value } = e.data as {\n command: Command;\n value: unknown;\n };\n switch (command) {\n case 'filter': {\n const filterCommandValues = value as FilterCommandType[];\n const newInputFilters = filterCommandValues.map(\n ({ name, value: filterValue }) => {\n const column = model?.columns.find(c => c.name === name);\n if (column == null) {\n throw new Error(`Could not find column named ${name}`);\n }\n return {\n name,\n value: filterValue,\n type: column.type,\n };\n }\n );\n setInputFilters(newInputFilters);\n break;\n }\n case 'sort': {\n const sortCommandValues = value as SortCommandType[];\n const newSorts = sortCommandValues.map(({ name, direction }) => {\n const column = model?.columns.find(c => c.name === name);\n if (column == null) {\n throw new Error(`Could not find column named ${name}`);\n }\n return direction === 'DESC'\n ? column.sort().desc()\n : column.sort().asc();\n });\n setSorts(newSorts);\n break;\n }\n }\n }\n window.addEventListener('message', receiveMessage);\n\n return () => {\n window.removeEventListener('message', receiveMessage);\n };\n },\n [model]\n );\n\n const isLoaded = model != null;\n\n return (\n <div className=\"App\">\n {isLoaded && (\n <IrisGrid\n canCopy={canCopy}\n canDownloadCsv={canDownloadCsv}\n model={model}\n inputFilters={inputFilters}\n sorts={sorts}\n />\n )}\n {!isLoaded && (\n <LoadingOverlay\n isLoaded={isLoaded}\n isLoading={isLoading}\n errorMessage={error ?? null}\n />\n )}\n <ContextMenuRoot />\n </div>\n );\n}\n\nexport default App;\n"],"names":["dh","shim","Log","log","SUPPORTED_TYPES","loadTable","connection","name","definition","fetchVariableDefinition","App","useConnection","user","useUser","model","setModel","useState","error","setError","inputFilters","setInputFilters","sorts","setSorts","isLoading","setIsLoading","searchParams","useMemo","permissions","canCopy","canDownloadCsv","useEffect","initApp","table","newModel","IrisGridModelFactory","e","receiveMessage","command","value","newInputFilters","filterValue","column","c","newSorts","direction","isLoaded","jsxs","jsx","IrisGrid","LoadingOverlay","ContextMenuRoot"],"mappings":"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"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{D as c,r as L,am as M,H as P,ab as E}from"./vendor-91b6f4e2.js";import{L as k,b7 as R,bn as U,bo as x}from"./index-6f73be40.js";import{c as I}from"./Plotly-ddd8a788.js";import{u as W,C as p,D as z,a as T}from"./index-ccd98624.js";import{W as B,l as S,k as _,h as V}from"./useUser-8d00d908.js";import{P as H,k as $}from"./IrisGridThemeProvider-3d4aa37a.js";import{P as K}from"./plotly-bf47dad5.js";import"./helpers-de833af9.js";import"./monaco-0b69f16f.js";function C(i,e){var t=Object.keys(i);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(i);e&&(r=r.filter(function(s){return Object.getOwnPropertyDescriptor(i,s).enumerable})),t.push.apply(t,r)}return t}function g(i){for(var e=1;e<arguments.length;e++){var t=arguments[e]!=null?arguments[e]:{};e%2?C(Object(t),!0).forEach(function(r){o(i,r,t[r])}):Object.getOwnPropertyDescriptors?Object.defineProperties(i,Object.getOwnPropertyDescriptors(t)):C(Object(t)).forEach(function(r){Object.defineProperty(i,r,Object.getOwnPropertyDescriptor(t,r))})}return i}function o(i,e,t){return e=Z(e),e in i?Object.defineProperty(i,e,{value:t,enumerable:!0,configurable:!0,writable:!0}):i[e]=t,i}function Z(i){var e=q(i,"string");return typeof e=="symbol"?e:String(e)}function q(i,e){if(typeof i!="object"||i===null)return i;var t=i[Symbol.toPrimitive];if(t!==void 0){var r=t.call(i,e||"default");if(typeof r!="object")return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return(e==="string"?String:Number)(i)}var m=k.module("Chart");class v extends L.Component{static convertIcon(e){var[t,,,,r]=e.icon,s="".concat(r);return{width:t,path:s,ascent:t,descent:0,transform:"matrix(1, 0, 0, 1, 0, 0)"}}static downsampleButtonTitle(e,t){return e?"Downsampling in progress...":t?"Downsampling disabled, click to enable":"Downsampling enabled, click to disable"}static downsampleButtonAttr(e,t){return e?"animation-spin":t?void 0:"fill-active"}constructor(e){var t;super(e),o(this,"currentSeries",void 0),o(this,"PlotComponent",void 0),o(this,"plot",void 0),o(this,"plotWrapper",void 0),o(this,"columnFormats",void 0),o(this,"dateTimeFormatterOptions",void 0),o(this,"decimalFormatOptions",void 0),o(this,"integerFormatOptions",void 0),o(this,"rect",void 0),o(this,"ranges",void 0),o(this,"isSubscribed",void 0),o(this,"isLoadedFired",void 0),o(this,"resizeObserver",void 0),o(this,"getCachedConfig",M((r,s,a,h,d,n)=>{var l=[],u=!!r;u&&l.push({name:"Downsampling failed: ".concat(r),title:"Downsampling failed",click:()=>{this.toggleErrorMessage("".concat(r))},icon:v.convertIcon(R),attr:"fill-warning"});var f=!!n;if(f&&l.push({name:"Error: ".concat(n),title:"Error",click:()=>{this.toggleErrorMessage("".concat(n))},icon:v.convertIcon(R),attr:"fill-warning"}),s||a||h||u){var b=v.downsampleButtonTitle(a,h),y=v.downsampleButtonAttr(a,h),D=a?U:x;l.push({name:b,title:"Downsampling status",icon:v.convertIcon(D),click:this.handleDownsampleClick,attr:y})}var F=d.some(O=>{var{type:w}=O;return w!=null&&!w.includes("3d")}),N=d.some(O=>{var{type:w}=O;return w!=null&&w.includes("3d")}),A=["zoomIn2d","zoomOut2d","autoScale2d","resetScale2d"],j=["orbitRotation","tableRotation","resetCameraDefault3d"];return{displaylogo:!1,displayModeBar:a||u||f?!0:"hover",modeBarButtons:[l,["toImage"],["zoom2d","pan2d"],[...F?A:[],...N?j:[]]]}})),B(this),this.PlotComponent=I(e.Plotly),this.plot=P.createRef(),this.plotWrapper=(t=e.containerRef)!==null&&t!==void 0?t:P.createRef(),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}}componentDidMount(){this.updateDimensions(),this.updateModelDimensions(),this.initData(),this.initFormatter();var{isActive:e,model:t}=this.props;e&&this.subscribe(t),this.plotWrapper.current!=null&&this.resizeObserver.observe(this.plotWrapper.current),this.handleThemeChange()}componentDidUpdate(e){var{isActive:t,model:r,settings:s,theme:a}=this.props;this.updateFormatterSettings(s),r!==e.model&&(this.unsubscribe(e.model),this.subscribe(r)),t!==e.isActive&&(t?(this.updateDimensions(),this.subscribe(r)):this.unsubscribe(r)),a!==e.theme&&this.handleThemeChange()}componentWillUnmount(){var{model:e}=this.props;this.unsubscribe(e),this.resizeObserver.disconnect()}getPlotRect(){var e,t;return(e=(t=this.plotWrapper.current)===null||t===void 0?void 0:t.getBoundingClientRect())!==null&&e!==void 0?e:null}initData(){var{model:e}=this.props;this.setState(t=>{var{layout:r}=t;return{data:e.getData(),layout:g(g({},r),e.getLayout())}})}subscribe(e){if(!this.isSubscribed){if(!this.rect||this.rect.width===0||this.rect.height===0){m.debug2("Delaying subscription until model dimensions are set");return}e.subscribe(this.handleModelEvent),this.isSubscribed=!0}}unsubscribe(e){this.isSubscribed&&(e.unsubscribe(this.handleModelEvent),this.isSubscribed=!1)}handleAfterPlot(){this.plot.current!=null}handleDownsampleClick(){this.setState(e=>{var{isDownsamplingDisabled:t}=e;return{downsamplingError:null,isDownsampleInProgress:!1,isDownsampleFinished:!1,isDownsamplingDisabled:!t}},()=>{var{model:e}=this.props,{isDownsamplingDisabled:t}=this.state;e.setDownsamplingDisabled(t)})}handleErrorClose(){this.setState({shownError:null})}handleModelEvent(e){var{type:t,detail:r}=e;switch(m.debug2("Received data update",t,r),t){case p.EVENT_UPDATED:{this.currentSeries+=1,this.setState(y=>{var{layout:D,revision:F}=y;return typeof D.datarevision=="number"&&(D.datarevision+=1),{data:r,layout:D,revision:F+1}});var{onUpdate:s}=this.props;s({isLoading:!this.isLoadedFired});break}case p.EVENT_LOADFINISHED:{var{onUpdate:a}=this.props;this.isLoadedFired=!0,a({isLoading:!1});break}case p.EVENT_DISCONNECT:{var{onDisconnect:h}=this.props;h();break}case p.EVENT_RECONNECT:{var{onReconnect:d}=this.props;d();break}case p.EVENT_DOWNSAMPLESTARTED:{this.setState({isDownsampleFinished:!1,isDownsampleInProgress:!0,downsamplingError:null});break}case p.EVENT_DOWNSAMPLEFINISHED:{this.setState({isDownsampleFinished:!0,isDownsampleInProgress:!1,downsamplingError:null});break}case p.EVENT_DOWNSAMPLENEEDED:case p.EVENT_DOWNSAMPLEFAILED:{var n,l=(n=r.message)!==null&&n!==void 0?n:r;this.setState({isDownsampleFinished:!1,isDownsampleInProgress:!1,isDownsamplingDisabled:!1,downsamplingError:l});var{onError:u}=this.props;u(new z(l));break}case p.EVENT_ERROR:{var f="".concat(r);this.setState({error:f});var{onError:b}=this.props;b(new Error(f));break}default:m.debug("Unknown event type",t,e)}}handlePlotUpdate(e){var{layout:t}=e,r=T.getLayoutRanges(t),s=!E(r,this.ranges);s&&(this.ranges=r,this.updateModelDimensions(!0))}handleRelayout(e){if(m.debug("handleRelayout",e),e.hiddenlabels!=null){var{onSettingsChanged:t}=this.props,r=[...e.hiddenlabels];t({hiddenSeries:r})}this.updateModelDimensions()}handleResize(){this.updateDimensions()}handleRestyle(e){var[t,r]=e;if(m.debug("handleRestyle",t,r),Object.keys(t).includes("visible")){var{data:s}=this.state,{onSettingsChanged:a}=this.props;if(s!=null){var h=s.reduce((d,n)=>{var{name:l,visible:u}=n;return l!=null&&u==="legendonly"?[...d,l]:d},[]);a({hiddenSeries:h})}}}handleThemeChange(){var{theme:e,model:t}=this.props,{dh:r}=t,s=new T(r);this.setState(a=>{var{layout:h}=a;return{layout:g(g({},h),{},{template:s.makeDefaultTemplate(e)})}})}toggleErrorMessage(e){this.setState(t=>{var{shownError:r}=t;return{shownError:r===e?null:e}})}updateModelDimensions(){var e=arguments.length>0&&arguments[0]!==void 0?arguments[0]:!1,t=this.getPlotRect();if(!t){m.warn("Unable to get plotting rect");return}var r=!this.rect||this.rect.width!==t.width||this.rect.height!==t.height;if(r||e){this.rect=t;var{isActive:s,model:a}=this.props;a.setDimensions(t),s&&this.subscribe(a)}}initFormatter(){var{settings:e}=this.props;this.updateFormatterSettings(e)}updateFormatterSettings(e){var t=S.getColumnFormats(e),r=S.getDateTimeFormatterOptions(e),{decimalFormatOptions:s={},integerFormatOptions:a={}}=e;(!E(this.columnFormats,t)||!E(this.dateTimeFormatterOptions,r)||!E(this.decimalFormatOptions,s)||!E(this.integerFormatOptions,a))&&(this.columnFormats=S.getColumnFormats(e),this.dateTimeFormatterOptions=r,this.decimalFormatOptions=s,this.integerFormatOptions=a,this.updateFormatter())}updateFormatter(){var{model:e}=this.props,t=new _(e.dh,this.columnFormats,this.dateTimeFormatterOptions,this.decimalFormatOptions,this.integerFormatOptions);e.setFormatter(t)}updateDimensions(){var e=this.getPlotRect(),{Plotly:t}=this.props;this.plot.current!=null&&e!=null&&e.width>0&&e.height>0&&t.relayout(this.plot.current.el,{autosize:!0}).catch(r=>{m.debug("Unable to resize, promise rejected",r)})}render(){var{PlotComponent:e}=this,{data:t,downsamplingError:r,isDownsampleFinished:s,isDownsampleInProgress:a,isDownsamplingDisabled:h,error:d,shownError:n,layout:l,revision:u}=this.state,f=this.getCachedConfig(r,s,a,h,t??[],d),b=t!=null;return c.jsxs("div",{className:"h-100 w-100 chart-wrapper",ref:this.plotWrapper,children:[b&&c.jsx(e,{ref:this.plot,data:t,layout:l,revision:u,config:f,onAfterPlot:this.handleAfterPlot,onError:m.error,onRelayout:this.handleRelayout,onUpdate:this.handlePlotUpdate,onRestyle:this.handleRestyle,useResizeHandler:!0,style:{height:"100%",width:"100%"}}),c.jsx(H,{className:"chart-error-popper",options:{placement:"top"},isShown:n!=null,onExited:this.handleErrorClose,closeOnBlur:!0,interactive:!0,children:n!=null&&c.jsxs(c.Fragment,{children:[c.jsx("div",{className:"chart-error",children:n}),c.jsx($,{tooltip:"Copy Error",copy:n,children:"Copy Error"})]})})]})}}o(v,"defaultProps",{isActive:!0,settings:{timeZone:"America/New_York",defaultDateTimeFormat:V.FULL_DATE_FORMAT,showTimeZone:!1,showTSeparator:!0,formatter:[]},Plotly:K,onDisconnect:()=>{},onReconnect:()=>{},onUpdate:()=>{},onError:()=>{},onSettingsChanged:()=>{}});function se(i){var e=W();return c.jsx(v,g(g({},i),{},{theme:e}))}export{se as default};
|
|
2
|
-
//# sourceMappingURL=Chart-
|
|
1
|
+
import{D as c,r as L,am as M,H as P,ab as E}from"./vendor-91b6f4e2.js";import{L as k,b7 as R,bn as U,bo as x}from"./index-f44e25e6.js";import{c as I}from"./Plotly-ddd8a788.js";import{u as W,C as p,D as z,a as T}from"./index-a266a95a.js";import{W as B,l as S,k as _,h as V}from"./useUser-2189b430.js";import{P as H,k as $}from"./IrisGridThemeProvider-c6d80554.js";import{P as K}from"./plotly-bf47dad5.js";import"./helpers-de833af9.js";import"./monaco-0b69f16f.js";function C(i,e){var t=Object.keys(i);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(i);e&&(r=r.filter(function(s){return Object.getOwnPropertyDescriptor(i,s).enumerable})),t.push.apply(t,r)}return t}function g(i){for(var e=1;e<arguments.length;e++){var t=arguments[e]!=null?arguments[e]:{};e%2?C(Object(t),!0).forEach(function(r){o(i,r,t[r])}):Object.getOwnPropertyDescriptors?Object.defineProperties(i,Object.getOwnPropertyDescriptors(t)):C(Object(t)).forEach(function(r){Object.defineProperty(i,r,Object.getOwnPropertyDescriptor(t,r))})}return i}function o(i,e,t){return e=Z(e),e in i?Object.defineProperty(i,e,{value:t,enumerable:!0,configurable:!0,writable:!0}):i[e]=t,i}function Z(i){var e=q(i,"string");return typeof e=="symbol"?e:String(e)}function q(i,e){if(typeof i!="object"||i===null)return i;var t=i[Symbol.toPrimitive];if(t!==void 0){var r=t.call(i,e||"default");if(typeof r!="object")return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return(e==="string"?String:Number)(i)}var m=k.module("Chart");class v extends L.Component{static convertIcon(e){var[t,,,,r]=e.icon,s="".concat(r);return{width:t,path:s,ascent:t,descent:0,transform:"matrix(1, 0, 0, 1, 0, 0)"}}static downsampleButtonTitle(e,t){return e?"Downsampling in progress...":t?"Downsampling disabled, click to enable":"Downsampling enabled, click to disable"}static downsampleButtonAttr(e,t){return e?"animation-spin":t?void 0:"fill-active"}constructor(e){var t;super(e),o(this,"currentSeries",void 0),o(this,"PlotComponent",void 0),o(this,"plot",void 0),o(this,"plotWrapper",void 0),o(this,"columnFormats",void 0),o(this,"dateTimeFormatterOptions",void 0),o(this,"decimalFormatOptions",void 0),o(this,"integerFormatOptions",void 0),o(this,"rect",void 0),o(this,"ranges",void 0),o(this,"isSubscribed",void 0),o(this,"isLoadedFired",void 0),o(this,"resizeObserver",void 0),o(this,"getCachedConfig",M((r,s,a,h,d,n)=>{var l=[],u=!!r;u&&l.push({name:"Downsampling failed: ".concat(r),title:"Downsampling failed",click:()=>{this.toggleErrorMessage("".concat(r))},icon:v.convertIcon(R),attr:"fill-warning"});var f=!!n;if(f&&l.push({name:"Error: ".concat(n),title:"Error",click:()=>{this.toggleErrorMessage("".concat(n))},icon:v.convertIcon(R),attr:"fill-warning"}),s||a||h||u){var b=v.downsampleButtonTitle(a,h),y=v.downsampleButtonAttr(a,h),D=a?U:x;l.push({name:b,title:"Downsampling status",icon:v.convertIcon(D),click:this.handleDownsampleClick,attr:y})}var F=d.some(O=>{var{type:w}=O;return w!=null&&!w.includes("3d")}),N=d.some(O=>{var{type:w}=O;return w!=null&&w.includes("3d")}),A=["zoomIn2d","zoomOut2d","autoScale2d","resetScale2d"],j=["orbitRotation","tableRotation","resetCameraDefault3d"];return{displaylogo:!1,displayModeBar:a||u||f?!0:"hover",modeBarButtons:[l,["toImage"],["zoom2d","pan2d"],[...F?A:[],...N?j:[]]]}})),B(this),this.PlotComponent=I(e.Plotly),this.plot=P.createRef(),this.plotWrapper=(t=e.containerRef)!==null&&t!==void 0?t:P.createRef(),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}}componentDidMount(){this.updateDimensions(),this.updateModelDimensions(),this.initData(),this.initFormatter();var{isActive:e,model:t}=this.props;e&&this.subscribe(t),this.plotWrapper.current!=null&&this.resizeObserver.observe(this.plotWrapper.current),this.handleThemeChange()}componentDidUpdate(e){var{isActive:t,model:r,settings:s,theme:a}=this.props;this.updateFormatterSettings(s),r!==e.model&&(this.unsubscribe(e.model),this.subscribe(r)),t!==e.isActive&&(t?(this.updateDimensions(),this.subscribe(r)):this.unsubscribe(r)),a!==e.theme&&this.handleThemeChange()}componentWillUnmount(){var{model:e}=this.props;this.unsubscribe(e),this.resizeObserver.disconnect()}getPlotRect(){var e,t;return(e=(t=this.plotWrapper.current)===null||t===void 0?void 0:t.getBoundingClientRect())!==null&&e!==void 0?e:null}initData(){var{model:e}=this.props;this.setState(t=>{var{layout:r}=t;return{data:e.getData(),layout:g(g({},r),e.getLayout())}})}subscribe(e){if(!this.isSubscribed){if(!this.rect||this.rect.width===0||this.rect.height===0){m.debug2("Delaying subscription until model dimensions are set");return}e.subscribe(this.handleModelEvent),this.isSubscribed=!0}}unsubscribe(e){this.isSubscribed&&(e.unsubscribe(this.handleModelEvent),this.isSubscribed=!1)}handleAfterPlot(){this.plot.current!=null}handleDownsampleClick(){this.setState(e=>{var{isDownsamplingDisabled:t}=e;return{downsamplingError:null,isDownsampleInProgress:!1,isDownsampleFinished:!1,isDownsamplingDisabled:!t}},()=>{var{model:e}=this.props,{isDownsamplingDisabled:t}=this.state;e.setDownsamplingDisabled(t)})}handleErrorClose(){this.setState({shownError:null})}handleModelEvent(e){var{type:t,detail:r}=e;switch(m.debug2("Received data update",t,r),t){case p.EVENT_UPDATED:{this.currentSeries+=1,this.setState(y=>{var{layout:D,revision:F}=y;return typeof D.datarevision=="number"&&(D.datarevision+=1),{data:r,layout:D,revision:F+1}});var{onUpdate:s}=this.props;s({isLoading:!this.isLoadedFired});break}case p.EVENT_LOADFINISHED:{var{onUpdate:a}=this.props;this.isLoadedFired=!0,a({isLoading:!1});break}case p.EVENT_DISCONNECT:{var{onDisconnect:h}=this.props;h();break}case p.EVENT_RECONNECT:{var{onReconnect:d}=this.props;d();break}case p.EVENT_DOWNSAMPLESTARTED:{this.setState({isDownsampleFinished:!1,isDownsampleInProgress:!0,downsamplingError:null});break}case p.EVENT_DOWNSAMPLEFINISHED:{this.setState({isDownsampleFinished:!0,isDownsampleInProgress:!1,downsamplingError:null});break}case p.EVENT_DOWNSAMPLENEEDED:case p.EVENT_DOWNSAMPLEFAILED:{var n,l=(n=r.message)!==null&&n!==void 0?n:r;this.setState({isDownsampleFinished:!1,isDownsampleInProgress:!1,isDownsamplingDisabled:!1,downsamplingError:l});var{onError:u}=this.props;u(new z(l));break}case p.EVENT_ERROR:{var f="".concat(r);this.setState({error:f});var{onError:b}=this.props;b(new Error(f));break}default:m.debug("Unknown event type",t,e)}}handlePlotUpdate(e){var{layout:t}=e,r=T.getLayoutRanges(t),s=!E(r,this.ranges);s&&(this.ranges=r,this.updateModelDimensions(!0))}handleRelayout(e){if(m.debug("handleRelayout",e),e.hiddenlabels!=null){var{onSettingsChanged:t}=this.props,r=[...e.hiddenlabels];t({hiddenSeries:r})}this.updateModelDimensions()}handleResize(){this.updateDimensions()}handleRestyle(e){var[t,r]=e;if(m.debug("handleRestyle",t,r),Object.keys(t).includes("visible")){var{data:s}=this.state,{onSettingsChanged:a}=this.props;if(s!=null){var h=s.reduce((d,n)=>{var{name:l,visible:u}=n;return l!=null&&u==="legendonly"?[...d,l]:d},[]);a({hiddenSeries:h})}}}handleThemeChange(){var{theme:e,model:t}=this.props,{dh:r}=t,s=new T(r);this.setState(a=>{var{layout:h}=a;return{layout:g(g({},h),{},{template:s.makeDefaultTemplate(e)})}})}toggleErrorMessage(e){this.setState(t=>{var{shownError:r}=t;return{shownError:r===e?null:e}})}updateModelDimensions(){var e=arguments.length>0&&arguments[0]!==void 0?arguments[0]:!1,t=this.getPlotRect();if(!t){m.warn("Unable to get plotting rect");return}var r=!this.rect||this.rect.width!==t.width||this.rect.height!==t.height;if(r||e){this.rect=t;var{isActive:s,model:a}=this.props;a.setDimensions(t),s&&this.subscribe(a)}}initFormatter(){var{settings:e}=this.props;this.updateFormatterSettings(e)}updateFormatterSettings(e){var t=S.getColumnFormats(e),r=S.getDateTimeFormatterOptions(e),{decimalFormatOptions:s={},integerFormatOptions:a={}}=e;(!E(this.columnFormats,t)||!E(this.dateTimeFormatterOptions,r)||!E(this.decimalFormatOptions,s)||!E(this.integerFormatOptions,a))&&(this.columnFormats=S.getColumnFormats(e),this.dateTimeFormatterOptions=r,this.decimalFormatOptions=s,this.integerFormatOptions=a,this.updateFormatter())}updateFormatter(){var{model:e}=this.props,t=new _(e.dh,this.columnFormats,this.dateTimeFormatterOptions,this.decimalFormatOptions,this.integerFormatOptions);e.setFormatter(t)}updateDimensions(){var e=this.getPlotRect(),{Plotly:t}=this.props;this.plot.current!=null&&e!=null&&e.width>0&&e.height>0&&t.relayout(this.plot.current.el,{autosize:!0}).catch(r=>{m.debug("Unable to resize, promise rejected",r)})}render(){var{PlotComponent:e}=this,{data:t,downsamplingError:r,isDownsampleFinished:s,isDownsampleInProgress:a,isDownsamplingDisabled:h,error:d,shownError:n,layout:l,revision:u}=this.state,f=this.getCachedConfig(r,s,a,h,t??[],d),b=t!=null;return c.jsxs("div",{className:"h-100 w-100 chart-wrapper",ref:this.plotWrapper,children:[b&&c.jsx(e,{ref:this.plot,data:t,layout:l,revision:u,config:f,onAfterPlot:this.handleAfterPlot,onError:m.error,onRelayout:this.handleRelayout,onUpdate:this.handlePlotUpdate,onRestyle:this.handleRestyle,useResizeHandler:!0,style:{height:"100%",width:"100%"}}),c.jsx(H,{className:"chart-error-popper",options:{placement:"top"},isShown:n!=null,onExited:this.handleErrorClose,closeOnBlur:!0,interactive:!0,children:n!=null&&c.jsxs(c.Fragment,{children:[c.jsx("div",{className:"chart-error",children:n}),c.jsx($,{tooltip:"Copy Error",copy:n,children:"Copy Error"})]})})]})}}o(v,"defaultProps",{isActive:!0,settings:{timeZone:"America/New_York",defaultDateTimeFormat:V.FULL_DATE_FORMAT,showTimeZone:!1,showTSeparator:!0,formatter:[]},Plotly:K,onDisconnect:()=>{},onReconnect:()=>{},onUpdate:()=>{},onError:()=>{},onSettingsChanged:()=>{}});function se(i){var e=W();return c.jsx(v,g(g({},i),{},{theme:e}))}export{se as default};
|
|
2
|
+
//# sourceMappingURL=Chart-74e84387.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Chart-2f05db29.js","sources":["../../../chart/dist/Chart.js"],"sourcesContent":["function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }\nfunction _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return typeof key === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (typeof input !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (typeof res !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\nimport React, { Component } from 'react';\nimport deepEqual from 'deep-equal';\nimport memoize from 'memoize-one';\nimport { CopyButton, Popper } from '@deephaven/components';\nimport { vsLoading, dhGraphLineDown, dhWarningFilled } from '@deephaven/icons';\nimport { Formatter, FormatterUtils, DateUtils } from '@deephaven/jsapi-utils';\nimport Log from '@deephaven/log';\nimport { bindAllMethods } from '@deephaven/utils';\nimport createPlotlyComponent from \"./plotly/createPlotlyComponent.js\";\nimport Plotly from \"./plotly/Plotly.js\";\nimport ChartModel from \"./ChartModel.js\";\nimport ChartUtils from \"./ChartUtils.js\";\nimport \"./Chart.css\";\nimport DownsamplingError from \"./DownsamplingError.js\";\nimport useChartTheme from \"./useChartTheme.js\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nimport { Fragment as _Fragment } from \"react/jsx-runtime\";\nimport { 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.\nclass Chart extends Component {\n /**\n * Convert a font awesome icon definition to a plotly icon definition\n * @param faIcon The icon to convert\n */\n static convertIcon(faIcon) {\n var [width,,,, path] = faIcon.icon;\n // By default the icons are flipped upside down, so we need to add our own transform\n // https://github.com/plotly/plotly.js/issues/1335\n var stringPath = \"\".concat(path);\n return {\n width,\n path: stringPath,\n ascent: width,\n descent: 0,\n transform: \"matrix(1, 0, 0, 1, 0, 0)\"\n };\n }\n static downsampleButtonTitle(isDownsampleInProgress, isDownsamplingDisabled) {\n if (isDownsampleInProgress) {\n return 'Downsampling in progress...';\n }\n return isDownsamplingDisabled ? 'Downsampling disabled, click to enable' : 'Downsampling enabled, click to disable';\n }\n static downsampleButtonAttr(isDownsampleInProgress, isDownsamplingDisabled) {\n if (isDownsampleInProgress) {\n return 'animation-spin';\n }\n return isDownsamplingDisabled ? undefined : 'fill-active';\n }\n constructor(props) {\n var _props$containerRef;\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, \"columnFormats\", void 0);\n _defineProperty(this, \"dateTimeFormatterOptions\", void 0);\n _defineProperty(this, \"decimalFormatOptions\", void 0);\n _defineProperty(this, \"integerFormatOptions\", void 0);\n _defineProperty(this, \"rect\", void 0);\n _defineProperty(this, \"ranges\", void 0);\n _defineProperty(this, \"isSubscribed\", void 0);\n _defineProperty(this, \"isLoadedFired\", void 0);\n _defineProperty(this, \"resizeObserver\", void 0);\n _defineProperty(this, \"getCachedConfig\", memoize((downsamplingError, isDownsampleFinished, isDownsampleInProgress, isDownsamplingDisabled, data, error) => {\n var customButtons = [];\n var hasDownsampleError = Boolean(downsamplingError);\n if (hasDownsampleError) {\n customButtons.push({\n name: \"Downsampling failed: \".concat(downsamplingError),\n title: 'Downsampling failed',\n click: () => {\n this.toggleErrorMessage(\"\".concat(downsamplingError));\n },\n icon: Chart.convertIcon(dhWarningFilled),\n attr: 'fill-warning'\n });\n }\n var hasError = Boolean(error);\n if (hasError) {\n customButtons.push({\n name: \"Error: \".concat(error),\n title: \"Error\",\n click: () => {\n this.toggleErrorMessage(\"\".concat(error));\n },\n icon: Chart.convertIcon(dhWarningFilled),\n attr: 'fill-warning'\n });\n }\n if (isDownsampleFinished || isDownsampleInProgress || isDownsamplingDisabled || hasDownsampleError) {\n var name = Chart.downsampleButtonTitle(isDownsampleInProgress, isDownsamplingDisabled);\n var attr = Chart.downsampleButtonAttr(isDownsampleInProgress, isDownsamplingDisabled);\n var icon = isDownsampleInProgress ? vsLoading : dhGraphLineDown;\n customButtons.push({\n name,\n title: 'Downsampling status',\n icon: Chart.convertIcon(icon),\n click: this.handleDownsampleClick,\n attr\n });\n }\n var has2D = data.some(_ref => {\n var {\n type\n } = _ref;\n return type != null && !type.includes('3d');\n });\n var has3D = data.some(_ref2 => {\n var {\n type\n } = _ref2;\n return type != null && type.includes('3d');\n });\n var buttons2D = ['zoomIn2d', 'zoomOut2d', 'autoScale2d', 'resetScale2d'];\n var buttons3D = ['orbitRotation', 'tableRotation', 'resetCameraDefault3d'];\n return {\n displaylogo: false,\n // Display the mode bar if there's an error or downsampling so user can see progress\n // Yes, the value is a boolean or the string 'hover': https://github.com/plotly/plotly.js/blob/master/src/plot_api/plot_config.js#L249\n displayModeBar:\n // eslint-disable-next-line @typescript-eslint/strict-boolean-expressions\n isDownsampleInProgress || hasDownsampleError || hasError ? true : 'hover',\n // Each array gets grouped together in the mode bar\n modeBarButtons: [customButtons, ['toImage'], ['zoom2d', 'pan2d'],\n // These work the same for both 2d and 3d\n [...(has2D ? buttons2D : []), ...(has3D ? buttons3D : [])]]\n };\n }));\n bindAllMethods(this);\n this.PlotComponent = createPlotlyComponent(props.Plotly);\n this.plot = /*#__PURE__*/React.createRef();\n this.plotWrapper = (_props$containerRef = props.containerRef) !== null && _props$containerRef !== void 0 ? _props$containerRef : /*#__PURE__*/React.createRef();\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 };\n }\n componentDidMount() {\n // Need to make sure the model dimensions are up to date before initializing the data\n this.updateDimensions();\n this.updateModelDimensions();\n this.initData();\n this.initFormatter();\n var {\n isActive,\n model\n } = this.props;\n if (isActive) {\n this.subscribe(model);\n }\n if (this.plotWrapper.current != null) {\n this.resizeObserver.observe(this.plotWrapper.current);\n }\n this.handleThemeChange();\n }\n componentDidUpdate(prevProps) {\n var {\n isActive,\n model,\n settings,\n theme\n } = this.props;\n this.updateFormatterSettings(settings);\n if (model !== prevProps.model) {\n this.unsubscribe(prevProps.model);\n this.subscribe(model);\n }\n if (isActive !== prevProps.isActive) {\n if (isActive) {\n this.updateDimensions();\n this.subscribe(model);\n } else {\n this.unsubscribe(model);\n }\n }\n if (theme !== prevProps.theme) {\n this.handleThemeChange();\n }\n }\n componentWillUnmount() {\n var {\n model\n } = this.props;\n this.unsubscribe(model);\n this.resizeObserver.disconnect();\n }\n\n // Listen for resizing of the element and update the canvas appropriately\n\n getPlotRect() {\n var _this$plotWrapper$cur, _this$plotWrapper$cur2;\n return (_this$plotWrapper$cur = (_this$plotWrapper$cur2 = this.plotWrapper.current) === null || _this$plotWrapper$cur2 === void 0 ? void 0 : _this$plotWrapper$cur2.getBoundingClientRect()) !== null && _this$plotWrapper$cur !== void 0 ? _this$plotWrapper$cur : null;\n }\n initData() {\n var {\n model\n } = this.props;\n this.setState(_ref3 => {\n var {\n layout\n } = _ref3;\n return {\n data: model.getData(),\n layout: _objectSpread(_objectSpread({}, layout), model.getLayout())\n };\n });\n }\n subscribe(model) {\n if (this.isSubscribed) {\n return;\n }\n if (!this.rect || this.rect.width === 0 || this.rect.height === 0) {\n log.debug2('Delaying subscription until model dimensions are set');\n return;\n }\n model.subscribe(this.handleModelEvent);\n this.isSubscribed = true;\n }\n unsubscribe(model) {\n if (!this.isSubscribed) {\n return;\n }\n model.unsubscribe(this.handleModelEvent);\n this.isSubscribed = false;\n }\n handleAfterPlot() {\n if (this.plot.current != null) {\n // TODO: Translate whatever Don was doing in plotting.js in the afterplot here so that area graphs show up properly\n }\n }\n handleDownsampleClick() {\n this.setState(_ref4 => {\n var {\n isDownsamplingDisabled\n } = _ref4;\n return {\n downsamplingError: null,\n isDownsampleInProgress: false,\n isDownsampleFinished: false,\n isDownsamplingDisabled: !isDownsamplingDisabled\n };\n }, () => {\n var {\n model\n } = this.props;\n var {\n isDownsamplingDisabled\n } = this.state;\n model.setDownsamplingDisabled(isDownsamplingDisabled);\n });\n }\n handleErrorClose() {\n this.setState({\n shownError: null\n });\n }\n handleModelEvent(event) {\n var {\n type,\n detail\n } = event;\n log.debug2('Received data update', type, detail);\n switch (type) {\n case ChartModel.EVENT_UPDATED:\n {\n this.currentSeries += 1;\n this.setState(state => {\n var {\n layout,\n revision\n } = state;\n if (typeof layout.datarevision === 'number') {\n layout.datarevision += 1;\n }\n return {\n data: detail,\n layout,\n revision: revision + 1\n };\n });\n var {\n onUpdate\n } = this.props;\n onUpdate({\n isLoading: !this.isLoadedFired\n });\n break;\n }\n case ChartModel.EVENT_LOADFINISHED:\n {\n var {\n onUpdate: _onUpdate\n } = this.props;\n this.isLoadedFired = true;\n _onUpdate({\n isLoading: false\n });\n break;\n }\n case ChartModel.EVENT_DISCONNECT:\n {\n var {\n onDisconnect\n } = this.props;\n onDisconnect();\n break;\n }\n case ChartModel.EVENT_RECONNECT:\n {\n var {\n onReconnect\n } = this.props;\n onReconnect();\n break;\n }\n case ChartModel.EVENT_DOWNSAMPLESTARTED:\n {\n this.setState({\n isDownsampleFinished: false,\n isDownsampleInProgress: true,\n downsamplingError: null\n });\n break;\n }\n case ChartModel.EVENT_DOWNSAMPLEFINISHED:\n {\n this.setState({\n isDownsampleFinished: true,\n isDownsampleInProgress: false,\n downsamplingError: null\n });\n break;\n }\n case ChartModel.EVENT_DOWNSAMPLENEEDED:\n case ChartModel.EVENT_DOWNSAMPLEFAILED:\n {\n var _detail$message;\n var downsamplingError = (_detail$message = detail.message) !== null && _detail$message !== void 0 ? _detail$message : detail;\n this.setState({\n isDownsampleFinished: false,\n isDownsampleInProgress: false,\n isDownsamplingDisabled: false,\n downsamplingError\n });\n var {\n onError\n } = this.props;\n onError(new DownsamplingError(downsamplingError));\n break;\n }\n case ChartModel.EVENT_ERROR:\n {\n var _error = \"\".concat(detail);\n this.setState({\n error: _error\n });\n var {\n onError: _onError\n } = this.props;\n _onError(new Error(_error));\n break;\n }\n default:\n log.debug('Unknown event type', type, event);\n }\n }\n handlePlotUpdate(figure) {\n // User could have modified zoom/pan here, update the model dimensions\n // We don't need to update the datarevision, as we don't have any data changes\n // until an update comes back from the server anyway\n var {\n layout\n } = figure;\n var ranges = ChartUtils.getLayoutRanges(layout);\n var isRangesChanged = !deepEqual(ranges, this.ranges);\n if (isRangesChanged) {\n this.ranges = ranges;\n this.updateModelDimensions(true);\n }\n }\n handleRelayout(changes) {\n log.debug('handleRelayout', changes);\n if (changes.hiddenlabels != null) {\n var {\n onSettingsChanged\n } = this.props;\n // Pie charts store series visibility in layout.hiddenlabels and trigger relayout on changes\n // Series visibility for other types of charts is handled in handleRestyle\n var hiddenSeries = [...changes.hiddenlabels];\n onSettingsChanged({\n hiddenSeries\n });\n }\n this.updateModelDimensions();\n }\n handleResize() {\n this.updateDimensions();\n }\n handleRestyle(_ref5) {\n var [changes, seriesIndexes] = _ref5;\n log.debug('handleRestyle', changes, seriesIndexes);\n if (Object.keys(changes).includes('visible')) {\n var {\n data\n } = this.state;\n var {\n onSettingsChanged\n } = this.props;\n if (data != null) {\n var hiddenSeries = data.reduce((acc, _ref6) => {\n var {\n name,\n visible\n } = _ref6;\n return name != null && visible === 'legendonly' ? [...acc, name] : acc;\n }, []);\n onSettingsChanged({\n hiddenSeries\n });\n }\n }\n }\n handleThemeChange() {\n var {\n theme,\n model\n } = this.props;\n var {\n dh\n } = model;\n var chartUtils = new ChartUtils(dh);\n this.setState(_ref7 => {\n var {\n layout\n } = _ref7;\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(_ref8 => {\n var {\n shownError\n } = _ref8;\n return {\n shownError: shownError === error ? null : error\n };\n });\n }\n\n /**\n * Update the models dimensions and ranges.\n * Note that this will update it all whether the plot size changes OR the range\n * the user is looking at has changed (eg. panning/zooming).\n * Could update each independently, but doing them at the same time keeps the\n * ChartModel API a bit cleaner.\n * @param force Force a change even if the chart dimensions haven't changed (eg. after pan/zoom)\n */\n updateModelDimensions() {\n var force = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;\n var rect = this.getPlotRect();\n if (!rect) {\n log.warn('Unable to get plotting rect');\n return;\n }\n var isRectChanged = !this.rect || this.rect.width !== rect.width || this.rect.height !== rect.height;\n if (isRectChanged || force) {\n this.rect = rect;\n var {\n isActive,\n model\n } = this.props;\n model.setDimensions(rect);\n // We may need to resubscribe if dimensions were too small before\n if (isActive) {\n this.subscribe(model);\n }\n }\n }\n initFormatter() {\n var {\n settings\n } = this.props;\n this.updateFormatterSettings(settings);\n }\n updateFormatterSettings(settings) {\n var columnFormats = FormatterUtils.getColumnFormats(settings);\n var dateTimeFormatterOptions = FormatterUtils.getDateTimeFormatterOptions(settings);\n var {\n decimalFormatOptions = {},\n integerFormatOptions = {}\n } = settings;\n if (!deepEqual(this.columnFormats, columnFormats) || !deepEqual(this.dateTimeFormatterOptions, dateTimeFormatterOptions) || !deepEqual(this.decimalFormatOptions, decimalFormatOptions) || !deepEqual(this.integerFormatOptions, integerFormatOptions)) {\n this.columnFormats = FormatterUtils.getColumnFormats(settings);\n this.dateTimeFormatterOptions = dateTimeFormatterOptions;\n this.decimalFormatOptions = decimalFormatOptions;\n this.integerFormatOptions = integerFormatOptions;\n this.updateFormatter();\n }\n }\n updateFormatter() {\n var {\n model\n } = this.props;\n var formatter = new Formatter(model.dh, this.columnFormats, this.dateTimeFormatterOptions, this.decimalFormatOptions, this.integerFormatOptions);\n model.setFormatter(formatter);\n }\n updateDimensions() {\n var rect = this.getPlotRect();\n var {\n Plotly: PlotlyProp\n } = this.props;\n if (this.plot.current != null && rect != null && rect.width > 0 && rect.height > 0) {\n // Call relayout to resize avoiding the debouncing plotly does\n // https://github.com/plotly/plotly.js/issues/2769#issuecomment-402099552\n PlotlyProp.relayout(this.plot.current.el, {\n autosize: true\n }).catch(e => {\n log.debug('Unable to resize, promise rejected', e);\n });\n }\n }\n render() {\n var {\n PlotComponent\n } = this;\n var {\n data,\n downsamplingError,\n isDownsampleFinished,\n isDownsampleInProgress,\n isDownsamplingDisabled,\n error,\n shownError,\n layout,\n revision\n } = this.state;\n var config = this.getCachedConfig(downsamplingError, isDownsampleFinished, isDownsampleInProgress, isDownsamplingDisabled, data !== null && data !== void 0 ? data : [], error);\n var isPlotShown = data != null;\n return /*#__PURE__*/_jsxs(\"div\", {\n className: \"h-100 w-100 chart-wrapper\",\n ref: this.plotWrapper,\n children: [isPlotShown && /*#__PURE__*/_jsx(PlotComponent\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n , {\n ref: this.plot,\n data: data,\n layout: layout,\n revision: revision,\n config: config,\n onAfterPlot: this.handleAfterPlot,\n onError: log.error,\n onRelayout: this.handleRelayout,\n onUpdate: this.handlePlotUpdate,\n onRestyle: this.handleRestyle,\n useResizeHandler: true,\n style: {\n height: '100%',\n width: '100%'\n }\n }), /*#__PURE__*/_jsx(Popper, {\n className: \"chart-error-popper\",\n options: {\n placement: 'top'\n },\n isShown: shownError != null,\n onExited: this.handleErrorClose,\n closeOnBlur: true,\n interactive: true,\n children: shownError != null && /*#__PURE__*/_jsxs(_Fragment, {\n children: [/*#__PURE__*/_jsx(\"div\", {\n className: \"chart-error\",\n children: shownError\n }), /*#__PURE__*/_jsx(CopyButton, {\n tooltip: \"Copy Error\",\n copy: shownError,\n children: \"Copy Error\"\n })]\n })\n })]\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 },\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":["ownKeys","object","enumerableOnly","keys","symbols","sym","_objectSpread","target","i","source","key","_defineProperty","obj","value","_toPropertyKey","arg","_toPrimitive","input","hint","prim","res","log","Log","Chart","Component","faIcon","width","path","stringPath","isDownsampleInProgress","isDownsamplingDisabled","props","_props$containerRef","memoize","downsamplingError","isDownsampleFinished","data","error","customButtons","hasDownsampleError","dhWarningFilled","hasError","name","attr","icon","vsLoading","dhGraphLineDown","has2D","_ref","type","has3D","_ref2","buttons2D","buttons3D","bindAllMethods","createPlotlyComponent","React","isActive","model","prevProps","settings","theme","_this$plotWrapper$cur","_this$plotWrapper$cur2","_ref3","layout","_ref4","event","detail","ChartModel","state","revision","onUpdate","_onUpdate","onDisconnect","onReconnect","_detail$message","onError","DownsamplingError","_error","_onError","figure","ranges","ChartUtils","isRangesChanged","deepEqual","changes","onSettingsChanged","hiddenSeries","_ref5","seriesIndexes","acc","_ref6","visible","dh","chartUtils","_ref7","_ref8","shownError","force","rect","isRectChanged","columnFormats","FormatterUtils","dateTimeFormatterOptions","decimalFormatOptions","integerFormatOptions","formatter","Formatter","PlotlyProp","e","PlotComponent","config","isPlotShown","_jsxs","_jsx","Popper","_Fragment","CopyButton","DateUtils","Plotly","ChartContainer","chartTheme","useChartTheme"],"mappings":"+cAAA,SAASA,EAAQC,EAAQC,EAAgB,CAAE,IAAIC,EAAO,OAAO,KAAKF,CAAM,EAAG,GAAI,OAAO,sBAAuB,CAAE,IAAIG,EAAU,OAAO,sBAAsBH,CAAM,EAAGC,IAAmBE,EAAUA,EAAQ,OAAO,SAAUC,EAAK,CAAE,OAAO,OAAO,yBAAyBJ,EAAQI,CAAG,EAAE,UAAW,CAAE,GAAIF,EAAK,KAAK,MAAMA,EAAMC,CAAO,CAAE,CAAG,OAAOD,CAAO,CACrV,SAASG,EAAcC,EAAQ,CAAE,QAASC,EAAI,EAAGA,EAAI,UAAU,OAAQA,IAAK,CAAE,IAAIC,EAAiB,UAAUD,CAAC,GAAnB,KAAuB,UAAUA,CAAC,EAAI,CAAE,EAAEA,EAAI,EAAIR,EAAQ,OAAOS,CAAM,EAAG,EAAE,EAAE,QAAQ,SAAUC,EAAK,CAAEC,EAAgBJ,EAAQG,EAAKD,EAAOC,CAAG,CAAC,CAAI,CAAA,EAAI,OAAO,0BAA4B,OAAO,iBAAiBH,EAAQ,OAAO,0BAA0BE,CAAM,CAAC,EAAIT,EAAQ,OAAOS,CAAM,CAAC,EAAE,QAAQ,SAAUC,EAAK,CAAE,OAAO,eAAeH,EAAQG,EAAK,OAAO,yBAAyBD,EAAQC,CAAG,CAAC,CAAE,CAAE,CAAI,CAAC,OAAOH,CAAS,CAC1f,SAASI,EAAgBC,EAAKF,EAAKG,EAAO,CAAE,OAAAH,EAAMI,EAAeJ,CAAG,EAAOA,KAAOE,EAAO,OAAO,eAAeA,EAAKF,EAAK,CAAE,MAAOG,EAAO,WAAY,GAAM,aAAc,GAAM,SAAU,EAAM,CAAA,EAAYD,EAAIF,CAAG,EAAIG,EAAgBD,CAAM,CAC5O,SAASE,EAAeC,EAAK,CAAE,IAAIL,EAAMM,EAAaD,EAAK,QAAQ,EAAG,OAAO,OAAOL,GAAQ,SAAWA,EAAM,OAAOA,CAAG,CAAI,CAC3H,SAASM,EAAaC,EAAOC,EAAM,CAAE,GAAI,OAAOD,GAAU,UAAYA,IAAU,KAAM,OAAOA,EAAO,IAAIE,EAAOF,EAAM,OAAO,WAAW,EAAG,GAAIE,IAAS,OAAW,CAAE,IAAIC,EAAMD,EAAK,KAAKF,EAAOC,GAAQ,SAAS,EAAG,GAAI,OAAOE,GAAQ,SAAU,OAAOA,EAAK,MAAM,IAAI,UAAU,8CAA8C,CAAI,CAAC,OAAQF,IAAS,SAAW,OAAS,QAAQD,CAAK,CAAI,CAmBzX,IAAII,EAAMC,EAAI,OAAO,OAAO,EAI5B,MAAMC,UAAcC,EAAAA,SAAU,CAK5B,OAAO,YAAYC,EAAQ,CACzB,GAAI,CAACC,EAAU,CAAA,CAAA,CAAAC,CAAI,EAAIF,EAAO,KAG1BG,EAAa,GAAG,OAAOD,CAAI,EAC/B,MAAO,CACL,MAAAD,EACA,KAAME,EACN,OAAQF,EACR,QAAS,EACT,UAAW,0BACjB,CACG,CACD,OAAO,sBAAsBG,EAAwBC,EAAwB,CAC3E,OAAID,EACK,8BAEFC,EAAyB,yCAA2C,wCAC5E,CACD,OAAO,qBAAqBD,EAAwBC,EAAwB,CAC1E,OAAID,EACK,iBAEFC,EAAyB,OAAY,aAC7C,CACD,YAAYC,EAAO,CACjB,IAAIC,EACJ,MAAMD,CAAK,EACXpB,EAAgB,KAAM,gBAAiB,MAAM,EAC7CA,EAAgB,KAAM,gBAAiB,MAAM,EAC7CA,EAAgB,KAAM,OAAQ,MAAM,EACpCA,EAAgB,KAAM,cAAe,MAAM,EAC3CA,EAAgB,KAAM,gBAAiB,MAAM,EAC7CA,EAAgB,KAAM,2BAA4B,MAAM,EACxDA,EAAgB,KAAM,uBAAwB,MAAM,EACpDA,EAAgB,KAAM,uBAAwB,MAAM,EACpDA,EAAgB,KAAM,OAAQ,MAAM,EACpCA,EAAgB,KAAM,SAAU,MAAM,EACtCA,EAAgB,KAAM,eAAgB,MAAM,EAC5CA,EAAgB,KAAM,gBAAiB,MAAM,EAC7CA,EAAgB,KAAM,iBAAkB,MAAM,EAC9CA,EAAgB,KAAM,kBAAmBsB,EAAQ,CAACC,EAAmBC,EAAsBN,EAAwBC,EAAwBM,EAAMC,IAAU,CACzJ,IAAIC,EAAgB,CAAA,EAChBC,EAAqB,EAAQL,EAC7BK,GACFD,EAAc,KAAK,CACjB,KAAM,wBAAwB,OAAOJ,CAAiB,EACtD,MAAO,sBACP,MAAO,IAAM,CACX,KAAK,mBAAmB,GAAG,OAAOA,CAAiB,CAAC,CACrD,EACD,KAAMX,EAAM,YAAYiB,CAAe,EACvC,KAAM,cAChB,CAAS,EAEH,IAAIC,EAAW,EAAQJ,EAYvB,GAXII,GACFH,EAAc,KAAK,CACjB,KAAM,UAAU,OAAOD,CAAK,EAC5B,MAAO,QACP,MAAO,IAAM,CACX,KAAK,mBAAmB,GAAG,OAAOA,CAAK,CAAC,CACzC,EACD,KAAMd,EAAM,YAAYiB,CAAe,EACvC,KAAM,cAChB,CAAS,EAECL,GAAwBN,GAA0BC,GAA0BS,EAAoB,CAClG,IAAIG,EAAOnB,EAAM,sBAAsBM,EAAwBC,CAAsB,EACjFa,EAAOpB,EAAM,qBAAqBM,EAAwBC,CAAsB,EAChFc,EAAOf,EAAyBgB,EAAYC,EAChDR,EAAc,KAAK,CACjB,KAAAI,EACA,MAAO,sBACP,KAAMnB,EAAM,YAAYqB,CAAI,EAC5B,MAAO,KAAK,sBACZ,KAAAD,CACV,CAAS,CACF,CACD,IAAII,EAAQX,EAAK,KAAKY,GAAQ,CAC5B,GAAI,CACF,KAAAC,CACD,EAAGD,EACJ,OAAOC,GAAQ,MAAQ,CAACA,EAAK,SAAS,IAAI,CAClD,CAAO,EACGC,EAAQd,EAAK,KAAKe,GAAS,CAC7B,GAAI,CACF,KAAAF,CACD,EAAGE,EACJ,OAAOF,GAAQ,MAAQA,EAAK,SAAS,IAAI,CACjD,CAAO,EACGG,EAAY,CAAC,WAAY,YAAa,cAAe,cAAc,EACnEC,EAAY,CAAC,gBAAiB,gBAAiB,sBAAsB,EACzE,MAAO,CACL,YAAa,GAGb,eAEAxB,GAA0BU,GAAsBE,EAAW,GAAO,QAElE,eAAgB,CAACH,EAAe,CAAC,SAAS,EAAG,CAAC,SAAU,OAAO,EAE/D,CAAC,GAAIS,EAAQK,EAAY,CAAE,EAAG,GAAIF,EAAQG,EAAY,CAAE,CAAC,CAAC,CAClE,CACK,CAAA,CAAC,EACFC,EAAe,IAAI,EACnB,KAAK,cAAgBC,EAAsBxB,EAAM,MAAM,EACvD,KAAK,KAAoByB,EAAM,YAC/B,KAAK,aAAexB,EAAsBD,EAAM,gBAAkB,MAAQC,IAAwB,OAASA,EAAmCwB,EAAM,UAAS,EAC7J,KAAK,cAAgB,GACrB,KAAK,yBAA2B,GAChC,KAAK,qBAAuB,GAC5B,KAAK,qBAAuB,GAC5B,KAAK,aAAe,GACpB,KAAK,cAAgB,GACrB,KAAK,cAAgB,EACrB,KAAK,eAAiB,IAAI,OAAO,eAAe,KAAK,YAAY,EACjE,KAAK,MAAQ,CACX,KAAM,KACN,kBAAmB,KACnB,qBAAsB,GACtB,uBAAwB,GACxB,uBAAwB,GACxB,MAAO,KACP,WAAY,KACZ,OAAQ,CACN,aAAc,CACf,EACD,SAAU,CAChB,CACG,CACD,mBAAoB,CAElB,KAAK,iBAAgB,EACrB,KAAK,sBAAqB,EAC1B,KAAK,SAAQ,EACb,KAAK,cAAa,EAClB,GAAI,CACF,SAAAC,EACA,MAAAC,CACN,EAAQ,KAAK,MACLD,GACF,KAAK,UAAUC,CAAK,EAElB,KAAK,YAAY,SAAW,MAC9B,KAAK,eAAe,QAAQ,KAAK,YAAY,OAAO,EAEtD,KAAK,kBAAiB,CACvB,CACD,mBAAmBC,EAAW,CAC5B,GAAI,CACF,SAAAF,EACA,MAAAC,EACA,SAAAE,EACA,MAAAC,CACN,EAAQ,KAAK,MACT,KAAK,wBAAwBD,CAAQ,EACjCF,IAAUC,EAAU,QACtB,KAAK,YAAYA,EAAU,KAAK,EAChC,KAAK,UAAUD,CAAK,GAElBD,IAAaE,EAAU,WACrBF,GACF,KAAK,iBAAgB,EACrB,KAAK,UAAUC,CAAK,GAEpB,KAAK,YAAYA,CAAK,GAGtBG,IAAUF,EAAU,OACtB,KAAK,kBAAiB,CAEzB,CACD,sBAAuB,CACrB,GAAI,CACF,MAAAD,CACN,EAAQ,KAAK,MACT,KAAK,YAAYA,CAAK,EACtB,KAAK,eAAe,YACrB,CAID,aAAc,CACZ,IAAII,EAAuBC,EAC3B,OAAQD,GAAyBC,EAAyB,KAAK,YAAY,WAAa,MAAQA,IAA2B,OAAS,OAASA,EAAuB,2BAA6B,MAAQD,IAA0B,OAASA,EAAwB,IACrQ,CACD,UAAW,CACT,GAAI,CACF,MAAAJ,CACN,EAAQ,KAAK,MACT,KAAK,SAASM,GAAS,CACrB,GAAI,CACF,OAAAC,CACD,EAAGD,EACJ,MAAO,CACL,KAAMN,EAAM,QAAS,EACrB,OAAQpD,EAAcA,EAAc,CAAA,EAAI2D,CAAM,EAAGP,EAAM,WAAW,CAC1E,CACA,CAAK,CACF,CACD,UAAUA,EAAO,CACf,GAAI,MAAK,aAGT,IAAI,CAAC,KAAK,MAAQ,KAAK,KAAK,QAAU,GAAK,KAAK,KAAK,SAAW,EAAG,CACjErC,EAAI,OAAO,sDAAsD,EACjE,MACD,CACDqC,EAAM,UAAU,KAAK,gBAAgB,EACrC,KAAK,aAAe,GACrB,CACD,YAAYA,EAAO,CACZ,KAAK,eAGVA,EAAM,YAAY,KAAK,gBAAgB,EACvC,KAAK,aAAe,GACrB,CACD,iBAAkB,CACZ,KAAK,KAAK,SAAW,IAG1B,CACD,uBAAwB,CACtB,KAAK,SAASQ,GAAS,CACrB,GAAI,CACF,uBAAApC,CACD,EAAGoC,EACJ,MAAO,CACL,kBAAmB,KACnB,uBAAwB,GACxB,qBAAsB,GACtB,uBAAwB,CAACpC,CACjC,CACA,EAAO,IAAM,CACP,GAAI,CACF,MAAA4B,CACR,EAAU,KAAK,MACL,CACF,uBAAA5B,CACR,EAAU,KAAK,MACT4B,EAAM,wBAAwB5B,CAAsB,CAC1D,CAAK,CACF,CACD,kBAAmB,CACjB,KAAK,SAAS,CACZ,WAAY,IAClB,CAAK,CACF,CACD,iBAAiBqC,EAAO,CACtB,GAAI,CACF,KAAAlB,EACA,OAAAmB,CACD,EAAGD,EAEJ,OADA9C,EAAI,OAAO,uBAAwB4B,EAAMmB,CAAM,EACvCnB,EAAI,CACV,KAAKoB,EAAW,cACd,CACE,KAAK,eAAiB,EACtB,KAAK,SAASC,GAAS,CACrB,GAAI,CACF,OAAAL,EACA,SAAAM,CACD,EAAGD,EACJ,OAAI,OAAOL,EAAO,cAAiB,WACjCA,EAAO,cAAgB,GAElB,CACL,KAAMG,EACN,OAAAH,EACA,SAAUM,EAAW,CACnC,CACA,CAAW,EACD,GAAI,CACF,SAAAC,CACZ,EAAc,KAAK,MACTA,EAAS,CACP,UAAW,CAAC,KAAK,aAC7B,CAAW,EACD,KACD,CACH,KAAKH,EAAW,mBACd,CACE,GAAI,CACF,SAAUI,CACtB,EAAc,KAAK,MACT,KAAK,cAAgB,GACrBA,EAAU,CACR,UAAW,EACvB,CAAW,EACD,KACD,CACH,KAAKJ,EAAW,iBACd,CACE,GAAI,CACF,aAAAK,CACZ,EAAc,KAAK,MACTA,IACA,KACD,CACH,KAAKL,EAAW,gBACd,CACE,GAAI,CACF,YAAAM,CACZ,EAAc,KAAK,MACTA,IACA,KACD,CACH,KAAKN,EAAW,wBACd,CACE,KAAK,SAAS,CACZ,qBAAsB,GACtB,uBAAwB,GACxB,kBAAmB,IAC/B,CAAW,EACD,KACD,CACH,KAAKA,EAAW,yBACd,CACE,KAAK,SAAS,CACZ,qBAAsB,GACtB,uBAAwB,GACxB,kBAAmB,IAC/B,CAAW,EACD,KACD,CACH,KAAKA,EAAW,uBAChB,KAAKA,EAAW,uBACd,CACE,IAAIO,EACA1C,GAAqB0C,EAAkBR,EAAO,WAAa,MAAQQ,IAAoB,OAASA,EAAkBR,EACtH,KAAK,SAAS,CACZ,qBAAsB,GACtB,uBAAwB,GACxB,uBAAwB,GACxB,kBAAAlC,CACZ,CAAW,EACD,GAAI,CACF,QAAA2C,CACZ,EAAc,KAAK,MACTA,EAAQ,IAAIC,EAAkB5C,CAAiB,CAAC,EAChD,KACD,CACH,KAAKmC,EAAW,YACd,CACE,IAAIU,EAAS,GAAG,OAAOX,CAAM,EAC7B,KAAK,SAAS,CACZ,MAAOW,CACnB,CAAW,EACD,GAAI,CACF,QAASC,CACrB,EAAc,KAAK,MACTA,EAAS,IAAI,MAAMD,CAAM,CAAC,EAC1B,KACD,CACH,QACE1D,EAAI,MAAM,qBAAsB4B,EAAMkB,CAAK,CAC9C,CACF,CACD,iBAAiBc,EAAQ,CAIvB,GAAI,CACF,OAAAhB,CACD,EAAGgB,EACAC,EAASC,EAAW,gBAAgBlB,CAAM,EAC1CmB,EAAkB,CAACC,EAAUH,EAAQ,KAAK,MAAM,EAChDE,IACF,KAAK,OAASF,EACd,KAAK,sBAAsB,EAAI,EAElC,CACD,eAAeI,EAAS,CAEtB,GADAjE,EAAI,MAAM,iBAAkBiE,CAAO,EAC/BA,EAAQ,cAAgB,KAAM,CAChC,GAAI,CACF,kBAAAC,CACR,EAAU,KAAK,MAGLC,EAAe,CAAC,GAAGF,EAAQ,YAAY,EAC3CC,EAAkB,CAChB,aAAAC,CACR,CAAO,CACF,CACD,KAAK,sBAAqB,CAC3B,CACD,cAAe,CACb,KAAK,iBAAgB,CACtB,CACD,cAAcC,EAAO,CACnB,GAAI,CAACH,EAASI,CAAa,EAAID,EAE/B,GADApE,EAAI,MAAM,gBAAiBiE,EAASI,CAAa,EAC7C,OAAO,KAAKJ,CAAO,EAAE,SAAS,SAAS,EAAG,CAC5C,GAAI,CACF,KAAAlD,CACR,EAAU,KAAK,MACL,CACF,kBAAAmD,CACR,EAAU,KAAK,MACT,GAAInD,GAAQ,KAAM,CAChB,IAAIoD,EAAepD,EAAK,OAAO,CAACuD,EAAKC,IAAU,CAC7C,GAAI,CACF,KAAAlD,EACA,QAAAmD,CACD,EAAGD,EACJ,OAAOlD,GAAQ,MAAQmD,IAAY,aAAe,CAAC,GAAGF,EAAKjD,CAAI,EAAIiD,CACpE,EAAE,CAAE,CAAA,EACLJ,EAAkB,CAChB,aAAAC,CACV,CAAS,CACF,CACF,CACF,CACD,mBAAoB,CAClB,GAAI,CACF,MAAA3B,EACA,MAAAH,CACN,EAAQ,KAAK,MACL,CACF,GAAAoC,CACD,EAAGpC,EACAqC,EAAa,IAAIZ,EAAWW,CAAE,EAClC,KAAK,SAASE,GAAS,CACrB,GAAI,CACF,OAAA/B,CACD,EAAG+B,EACJ,MAAO,CACL,OAAQ1F,EAAcA,EAAc,CAAE,EAAE2D,CAAM,EAAG,CAAA,EAAI,CACnD,SAAU8B,EAAW,oBAAoBlC,CAAK,CACxD,CAAS,CACT,CACA,CAAK,CACF,CAKD,mBAAmBxB,EAAO,CACxB,KAAK,SAAS4D,GAAS,CACrB,GAAI,CACF,WAAAC,CACD,EAAGD,EACJ,MAAO,CACL,WAAYC,IAAe7D,EAAQ,KAAOA,CAClD,CACA,CAAK,CACF,CAUD,uBAAwB,CACtB,IAAI8D,EAAQ,UAAU,OAAS,GAAK,UAAU,CAAC,IAAM,OAAY,UAAU,CAAC,EAAI,GAC5EC,EAAO,KAAK,cAChB,GAAI,CAACA,EAAM,CACT/E,EAAI,KAAK,6BAA6B,EACtC,MACD,CACD,IAAIgF,EAAgB,CAAC,KAAK,MAAQ,KAAK,KAAK,QAAUD,EAAK,OAAS,KAAK,KAAK,SAAWA,EAAK,OAC9F,GAAIC,GAAiBF,EAAO,CAC1B,KAAK,KAAOC,EACZ,GAAI,CACF,SAAA3C,EACA,MAAAC,CACR,EAAU,KAAK,MACTA,EAAM,cAAc0C,CAAI,EAEpB3C,GACF,KAAK,UAAUC,CAAK,CAEvB,CACF,CACD,eAAgB,CACd,GAAI,CACF,SAAAE,CACN,EAAQ,KAAK,MACT,KAAK,wBAAwBA,CAAQ,CACtC,CACD,wBAAwBA,EAAU,CAChC,IAAI0C,EAAgBC,EAAe,iBAAiB3C,CAAQ,EACxD4C,EAA2BD,EAAe,4BAA4B3C,CAAQ,EAC9E,CACF,qBAAA6C,EAAuB,CAAE,EACzB,qBAAAC,EAAuB,CAAE,CAC1B,EAAG9C,GACA,CAACyB,EAAU,KAAK,cAAeiB,CAAa,GAAK,CAACjB,EAAU,KAAK,yBAA0BmB,CAAwB,GAAK,CAACnB,EAAU,KAAK,qBAAsBoB,CAAoB,GAAK,CAACpB,EAAU,KAAK,qBAAsBqB,CAAoB,KACnP,KAAK,cAAgBH,EAAe,iBAAiB3C,CAAQ,EAC7D,KAAK,yBAA2B4C,EAChC,KAAK,qBAAuBC,EAC5B,KAAK,qBAAuBC,EAC5B,KAAK,gBAAe,EAEvB,CACD,iBAAkB,CAChB,GAAI,CACF,MAAAhD,CACN,EAAQ,KAAK,MACLiD,EAAY,IAAIC,EAAUlD,EAAM,GAAI,KAAK,cAAe,KAAK,yBAA0B,KAAK,qBAAsB,KAAK,oBAAoB,EAC/IA,EAAM,aAAaiD,CAAS,CAC7B,CACD,kBAAmB,CACjB,IAAIP,EAAO,KAAK,cACZ,CACF,OAAQS,CACd,EAAQ,KAAK,MACL,KAAK,KAAK,SAAW,MAAQT,GAAQ,MAAQA,EAAK,MAAQ,GAAKA,EAAK,OAAS,GAG/ES,EAAW,SAAS,KAAK,KAAK,QAAQ,GAAI,CACxC,SAAU,EAClB,CAAO,EAAE,MAAMC,GAAK,CACZzF,EAAI,MAAM,qCAAsCyF,CAAC,CACzD,CAAO,CAEJ,CACD,QAAS,CACP,GAAI,CACF,cAAAC,CACD,EAAG,KACA,CACF,KAAA3E,EACA,kBAAAF,EACA,qBAAAC,EACA,uBAAAN,EACA,uBAAAC,EACA,MAAAO,EACA,WAAA6D,EACA,OAAAjC,EACA,SAAAM,CACN,EAAQ,KAAK,MACLyC,EAAS,KAAK,gBAAgB9E,EAAmBC,EAAsBN,EAAwBC,EAAwBM,GAA0C,CAAA,EAAIC,CAAK,EAC1K4E,EAAc7E,GAAQ,KAC1B,OAAoB8E,EAAAA,KAAM,MAAO,CAC/B,UAAW,4BACX,IAAK,KAAK,YACV,SAAU,CAACD,GAA4BE,EAAAA,IAAKJ,EAG1C,CACA,IAAK,KAAK,KACV,KAAM3E,EACN,OAAQ6B,EACR,SAAUM,EACV,OAAQyC,EACR,YAAa,KAAK,gBAClB,QAAS3F,EAAI,MACb,WAAY,KAAK,eACjB,SAAU,KAAK,iBACf,UAAW,KAAK,cAChB,iBAAkB,GAClB,MAAO,CACL,OAAQ,OACR,MAAO,MACR,CACT,CAAO,EAAgB8F,EAAI,IAACC,EAAQ,CAC5B,UAAW,qBACX,QAAS,CACP,UAAW,KACZ,EACD,QAASlB,GAAc,KACvB,SAAU,KAAK,iBACf,YAAa,GACb,YAAa,GACb,SAAUA,GAAc,MAAqBgB,EAAAA,KAAMG,EAAAA,SAAW,CAC5D,SAAU,CAAcF,EAAI,IAAC,MAAO,CAClC,UAAW,cACX,SAAUjB,CACtB,CAAW,EAAgBiB,EAAI,IAACG,EAAY,CAChC,QAAS,aACT,KAAMpB,EACN,SAAU,YACtB,CAAW,CAAC,CACZ,CAAS,CACT,CAAO,CAAC,CACR,CAAK,CACF,CACH,CACAvF,EAAgBY,EAAO,eAAgB,CACrC,SAAU,GACV,SAAU,CACR,SAAU,mBACV,sBAAuBgG,EAAU,iBACjC,aAAc,GACd,eAAgB,GAChB,UAAW,CAAE,CACd,EACD,OAAAC,EACA,aAAc,IAAA,GACd,YAAa,IAAA,GACb,SAAU,IAAA,GACV,QAAS,IAAA,GACT,kBAAmB,IAAA,EACrB,CAAC,EACc,SAASC,GAAe1F,EAAO,CAC5C,IAAI2F,EAAaC,IAEjB,OAAoBR,EAAAA,IAAK5F,EAAOjB,EAAcA,EAAc,GAAIyB,CAAK,EAAG,GAAI,CAC1E,MAAO2F,CACR,CAAA,CAAC,CACJ"}
|
|
1
|
+
{"version":3,"file":"Chart-74e84387.js","sources":["../../../chart/dist/Chart.js"],"sourcesContent":["function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }\nfunction _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return typeof key === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (typeof input !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (typeof res !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\nimport React, { Component } from 'react';\nimport deepEqual from 'deep-equal';\nimport memoize from 'memoize-one';\nimport { CopyButton, Popper } from '@deephaven/components';\nimport { vsLoading, dhGraphLineDown, dhWarningFilled } from '@deephaven/icons';\nimport { Formatter, FormatterUtils, DateUtils } from '@deephaven/jsapi-utils';\nimport Log from '@deephaven/log';\nimport { bindAllMethods } from '@deephaven/utils';\nimport createPlotlyComponent from \"./plotly/createPlotlyComponent.js\";\nimport Plotly from \"./plotly/Plotly.js\";\nimport ChartModel from \"./ChartModel.js\";\nimport ChartUtils from \"./ChartUtils.js\";\nimport \"./Chart.css\";\nimport DownsamplingError from \"./DownsamplingError.js\";\nimport useChartTheme from \"./useChartTheme.js\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nimport { Fragment as _Fragment } from \"react/jsx-runtime\";\nimport { 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.\nclass Chart extends Component {\n /**\n * Convert a font awesome icon definition to a plotly icon definition\n * @param faIcon The icon to convert\n */\n static convertIcon(faIcon) {\n var [width,,,, path] = faIcon.icon;\n // By default the icons are flipped upside down, so we need to add our own transform\n // https://github.com/plotly/plotly.js/issues/1335\n var stringPath = \"\".concat(path);\n return {\n width,\n path: stringPath,\n ascent: width,\n descent: 0,\n transform: \"matrix(1, 0, 0, 1, 0, 0)\"\n };\n }\n static downsampleButtonTitle(isDownsampleInProgress, isDownsamplingDisabled) {\n if (isDownsampleInProgress) {\n return 'Downsampling in progress...';\n }\n return isDownsamplingDisabled ? 'Downsampling disabled, click to enable' : 'Downsampling enabled, click to disable';\n }\n static downsampleButtonAttr(isDownsampleInProgress, isDownsamplingDisabled) {\n if (isDownsampleInProgress) {\n return 'animation-spin';\n }\n return isDownsamplingDisabled ? undefined : 'fill-active';\n }\n constructor(props) {\n var _props$containerRef;\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, \"columnFormats\", void 0);\n _defineProperty(this, \"dateTimeFormatterOptions\", void 0);\n _defineProperty(this, \"decimalFormatOptions\", void 0);\n _defineProperty(this, \"integerFormatOptions\", void 0);\n _defineProperty(this, \"rect\", void 0);\n _defineProperty(this, \"ranges\", void 0);\n _defineProperty(this, \"isSubscribed\", void 0);\n _defineProperty(this, \"isLoadedFired\", void 0);\n _defineProperty(this, \"resizeObserver\", void 0);\n _defineProperty(this, \"getCachedConfig\", memoize((downsamplingError, isDownsampleFinished, isDownsampleInProgress, isDownsamplingDisabled, data, error) => {\n var customButtons = [];\n var hasDownsampleError = Boolean(downsamplingError);\n if (hasDownsampleError) {\n customButtons.push({\n name: \"Downsampling failed: \".concat(downsamplingError),\n title: 'Downsampling failed',\n click: () => {\n this.toggleErrorMessage(\"\".concat(downsamplingError));\n },\n icon: Chart.convertIcon(dhWarningFilled),\n attr: 'fill-warning'\n });\n }\n var hasError = Boolean(error);\n if (hasError) {\n customButtons.push({\n name: \"Error: \".concat(error),\n title: \"Error\",\n click: () => {\n this.toggleErrorMessage(\"\".concat(error));\n },\n icon: Chart.convertIcon(dhWarningFilled),\n attr: 'fill-warning'\n });\n }\n if (isDownsampleFinished || isDownsampleInProgress || isDownsamplingDisabled || hasDownsampleError) {\n var name = Chart.downsampleButtonTitle(isDownsampleInProgress, isDownsamplingDisabled);\n var attr = Chart.downsampleButtonAttr(isDownsampleInProgress, isDownsamplingDisabled);\n var icon = isDownsampleInProgress ? vsLoading : dhGraphLineDown;\n customButtons.push({\n name,\n title: 'Downsampling status',\n icon: Chart.convertIcon(icon),\n click: this.handleDownsampleClick,\n attr\n });\n }\n var has2D = data.some(_ref => {\n var {\n type\n } = _ref;\n return type != null && !type.includes('3d');\n });\n var has3D = data.some(_ref2 => {\n var {\n type\n } = _ref2;\n return type != null && type.includes('3d');\n });\n var buttons2D = ['zoomIn2d', 'zoomOut2d', 'autoScale2d', 'resetScale2d'];\n var buttons3D = ['orbitRotation', 'tableRotation', 'resetCameraDefault3d'];\n return {\n displaylogo: false,\n // Display the mode bar if there's an error or downsampling so user can see progress\n // Yes, the value is a boolean or the string 'hover': https://github.com/plotly/plotly.js/blob/master/src/plot_api/plot_config.js#L249\n displayModeBar:\n // eslint-disable-next-line @typescript-eslint/strict-boolean-expressions\n isDownsampleInProgress || hasDownsampleError || hasError ? true : 'hover',\n // Each array gets grouped together in the mode bar\n modeBarButtons: [customButtons, ['toImage'], ['zoom2d', 'pan2d'],\n // These work the same for both 2d and 3d\n [...(has2D ? buttons2D : []), ...(has3D ? buttons3D : [])]]\n };\n }));\n bindAllMethods(this);\n this.PlotComponent = createPlotlyComponent(props.Plotly);\n this.plot = /*#__PURE__*/React.createRef();\n this.plotWrapper = (_props$containerRef = props.containerRef) !== null && _props$containerRef !== void 0 ? _props$containerRef : /*#__PURE__*/React.createRef();\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 };\n }\n componentDidMount() {\n // Need to make sure the model dimensions are up to date before initializing the data\n this.updateDimensions();\n this.updateModelDimensions();\n this.initData();\n this.initFormatter();\n var {\n isActive,\n model\n } = this.props;\n if (isActive) {\n this.subscribe(model);\n }\n if (this.plotWrapper.current != null) {\n this.resizeObserver.observe(this.plotWrapper.current);\n }\n this.handleThemeChange();\n }\n componentDidUpdate(prevProps) {\n var {\n isActive,\n model,\n settings,\n theme\n } = this.props;\n this.updateFormatterSettings(settings);\n if (model !== prevProps.model) {\n this.unsubscribe(prevProps.model);\n this.subscribe(model);\n }\n if (isActive !== prevProps.isActive) {\n if (isActive) {\n this.updateDimensions();\n this.subscribe(model);\n } else {\n this.unsubscribe(model);\n }\n }\n if (theme !== prevProps.theme) {\n this.handleThemeChange();\n }\n }\n componentWillUnmount() {\n var {\n model\n } = this.props;\n this.unsubscribe(model);\n this.resizeObserver.disconnect();\n }\n\n // Listen for resizing of the element and update the canvas appropriately\n\n getPlotRect() {\n var _this$plotWrapper$cur, _this$plotWrapper$cur2;\n return (_this$plotWrapper$cur = (_this$plotWrapper$cur2 = this.plotWrapper.current) === null || _this$plotWrapper$cur2 === void 0 ? void 0 : _this$plotWrapper$cur2.getBoundingClientRect()) !== null && _this$plotWrapper$cur !== void 0 ? _this$plotWrapper$cur : null;\n }\n initData() {\n var {\n model\n } = this.props;\n this.setState(_ref3 => {\n var {\n layout\n } = _ref3;\n return {\n data: model.getData(),\n layout: _objectSpread(_objectSpread({}, layout), model.getLayout())\n };\n });\n }\n subscribe(model) {\n if (this.isSubscribed) {\n return;\n }\n if (!this.rect || this.rect.width === 0 || this.rect.height === 0) {\n log.debug2('Delaying subscription until model dimensions are set');\n return;\n }\n model.subscribe(this.handleModelEvent);\n this.isSubscribed = true;\n }\n unsubscribe(model) {\n if (!this.isSubscribed) {\n return;\n }\n model.unsubscribe(this.handleModelEvent);\n this.isSubscribed = false;\n }\n handleAfterPlot() {\n if (this.plot.current != null) {\n // TODO: Translate whatever Don was doing in plotting.js in the afterplot here so that area graphs show up properly\n }\n }\n handleDownsampleClick() {\n this.setState(_ref4 => {\n var {\n isDownsamplingDisabled\n } = _ref4;\n return {\n downsamplingError: null,\n isDownsampleInProgress: false,\n isDownsampleFinished: false,\n isDownsamplingDisabled: !isDownsamplingDisabled\n };\n }, () => {\n var {\n model\n } = this.props;\n var {\n isDownsamplingDisabled\n } = this.state;\n model.setDownsamplingDisabled(isDownsamplingDisabled);\n });\n }\n handleErrorClose() {\n this.setState({\n shownError: null\n });\n }\n handleModelEvent(event) {\n var {\n type,\n detail\n } = event;\n log.debug2('Received data update', type, detail);\n switch (type) {\n case ChartModel.EVENT_UPDATED:\n {\n this.currentSeries += 1;\n this.setState(state => {\n var {\n layout,\n revision\n } = state;\n if (typeof layout.datarevision === 'number') {\n layout.datarevision += 1;\n }\n return {\n data: detail,\n layout,\n revision: revision + 1\n };\n });\n var {\n onUpdate\n } = this.props;\n onUpdate({\n isLoading: !this.isLoadedFired\n });\n break;\n }\n case ChartModel.EVENT_LOADFINISHED:\n {\n var {\n onUpdate: _onUpdate\n } = this.props;\n this.isLoadedFired = true;\n _onUpdate({\n isLoading: false\n });\n break;\n }\n case ChartModel.EVENT_DISCONNECT:\n {\n var {\n onDisconnect\n } = this.props;\n onDisconnect();\n break;\n }\n case ChartModel.EVENT_RECONNECT:\n {\n var {\n onReconnect\n } = this.props;\n onReconnect();\n break;\n }\n case ChartModel.EVENT_DOWNSAMPLESTARTED:\n {\n this.setState({\n isDownsampleFinished: false,\n isDownsampleInProgress: true,\n downsamplingError: null\n });\n break;\n }\n case ChartModel.EVENT_DOWNSAMPLEFINISHED:\n {\n this.setState({\n isDownsampleFinished: true,\n isDownsampleInProgress: false,\n downsamplingError: null\n });\n break;\n }\n case ChartModel.EVENT_DOWNSAMPLENEEDED:\n case ChartModel.EVENT_DOWNSAMPLEFAILED:\n {\n var _detail$message;\n var downsamplingError = (_detail$message = detail.message) !== null && _detail$message !== void 0 ? _detail$message : detail;\n this.setState({\n isDownsampleFinished: false,\n isDownsampleInProgress: false,\n isDownsamplingDisabled: false,\n downsamplingError\n });\n var {\n onError\n } = this.props;\n onError(new DownsamplingError(downsamplingError));\n break;\n }\n case ChartModel.EVENT_ERROR:\n {\n var _error = \"\".concat(detail);\n this.setState({\n error: _error\n });\n var {\n onError: _onError\n } = this.props;\n _onError(new Error(_error));\n break;\n }\n default:\n log.debug('Unknown event type', type, event);\n }\n }\n handlePlotUpdate(figure) {\n // User could have modified zoom/pan here, update the model dimensions\n // We don't need to update the datarevision, as we don't have any data changes\n // until an update comes back from the server anyway\n var {\n layout\n } = figure;\n var ranges = ChartUtils.getLayoutRanges(layout);\n var isRangesChanged = !deepEqual(ranges, this.ranges);\n if (isRangesChanged) {\n this.ranges = ranges;\n this.updateModelDimensions(true);\n }\n }\n handleRelayout(changes) {\n log.debug('handleRelayout', changes);\n if (changes.hiddenlabels != null) {\n var {\n onSettingsChanged\n } = this.props;\n // Pie charts store series visibility in layout.hiddenlabels and trigger relayout on changes\n // Series visibility for other types of charts is handled in handleRestyle\n var hiddenSeries = [...changes.hiddenlabels];\n onSettingsChanged({\n hiddenSeries\n });\n }\n this.updateModelDimensions();\n }\n handleResize() {\n this.updateDimensions();\n }\n handleRestyle(_ref5) {\n var [changes, seriesIndexes] = _ref5;\n log.debug('handleRestyle', changes, seriesIndexes);\n if (Object.keys(changes).includes('visible')) {\n var {\n data\n } = this.state;\n var {\n onSettingsChanged\n } = this.props;\n if (data != null) {\n var hiddenSeries = data.reduce((acc, _ref6) => {\n var {\n name,\n visible\n } = _ref6;\n return name != null && visible === 'legendonly' ? [...acc, name] : acc;\n }, []);\n onSettingsChanged({\n hiddenSeries\n });\n }\n }\n }\n handleThemeChange() {\n var {\n theme,\n model\n } = this.props;\n var {\n dh\n } = model;\n var chartUtils = new ChartUtils(dh);\n this.setState(_ref7 => {\n var {\n layout\n } = _ref7;\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(_ref8 => {\n var {\n shownError\n } = _ref8;\n return {\n shownError: shownError === error ? null : error\n };\n });\n }\n\n /**\n * Update the models dimensions and ranges.\n * Note that this will update it all whether the plot size changes OR the range\n * the user is looking at has changed (eg. panning/zooming).\n * Could update each independently, but doing them at the same time keeps the\n * ChartModel API a bit cleaner.\n * @param force Force a change even if the chart dimensions haven't changed (eg. after pan/zoom)\n */\n updateModelDimensions() {\n var force = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;\n var rect = this.getPlotRect();\n if (!rect) {\n log.warn('Unable to get plotting rect');\n return;\n }\n var isRectChanged = !this.rect || this.rect.width !== rect.width || this.rect.height !== rect.height;\n if (isRectChanged || force) {\n this.rect = rect;\n var {\n isActive,\n model\n } = this.props;\n model.setDimensions(rect);\n // We may need to resubscribe if dimensions were too small before\n if (isActive) {\n this.subscribe(model);\n }\n }\n }\n initFormatter() {\n var {\n settings\n } = this.props;\n this.updateFormatterSettings(settings);\n }\n updateFormatterSettings(settings) {\n var columnFormats = FormatterUtils.getColumnFormats(settings);\n var dateTimeFormatterOptions = FormatterUtils.getDateTimeFormatterOptions(settings);\n var {\n decimalFormatOptions = {},\n integerFormatOptions = {}\n } = settings;\n if (!deepEqual(this.columnFormats, columnFormats) || !deepEqual(this.dateTimeFormatterOptions, dateTimeFormatterOptions) || !deepEqual(this.decimalFormatOptions, decimalFormatOptions) || !deepEqual(this.integerFormatOptions, integerFormatOptions)) {\n this.columnFormats = FormatterUtils.getColumnFormats(settings);\n this.dateTimeFormatterOptions = dateTimeFormatterOptions;\n this.decimalFormatOptions = decimalFormatOptions;\n this.integerFormatOptions = integerFormatOptions;\n this.updateFormatter();\n }\n }\n updateFormatter() {\n var {\n model\n } = this.props;\n var formatter = new Formatter(model.dh, this.columnFormats, this.dateTimeFormatterOptions, this.decimalFormatOptions, this.integerFormatOptions);\n model.setFormatter(formatter);\n }\n updateDimensions() {\n var rect = this.getPlotRect();\n var {\n Plotly: PlotlyProp\n } = this.props;\n if (this.plot.current != null && rect != null && rect.width > 0 && rect.height > 0) {\n // Call relayout to resize avoiding the debouncing plotly does\n // https://github.com/plotly/plotly.js/issues/2769#issuecomment-402099552\n PlotlyProp.relayout(this.plot.current.el, {\n autosize: true\n }).catch(e => {\n log.debug('Unable to resize, promise rejected', e);\n });\n }\n }\n render() {\n var {\n PlotComponent\n } = this;\n var {\n data,\n downsamplingError,\n isDownsampleFinished,\n isDownsampleInProgress,\n isDownsamplingDisabled,\n error,\n shownError,\n layout,\n revision\n } = this.state;\n var config = this.getCachedConfig(downsamplingError, isDownsampleFinished, isDownsampleInProgress, isDownsamplingDisabled, data !== null && data !== void 0 ? data : [], error);\n var isPlotShown = data != null;\n return /*#__PURE__*/_jsxs(\"div\", {\n className: \"h-100 w-100 chart-wrapper\",\n ref: this.plotWrapper,\n children: [isPlotShown && /*#__PURE__*/_jsx(PlotComponent\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n , {\n ref: this.plot,\n data: data,\n layout: layout,\n revision: revision,\n config: config,\n onAfterPlot: this.handleAfterPlot,\n onError: log.error,\n onRelayout: this.handleRelayout,\n onUpdate: this.handlePlotUpdate,\n onRestyle: this.handleRestyle,\n useResizeHandler: true,\n style: {\n height: '100%',\n width: '100%'\n }\n }), /*#__PURE__*/_jsx(Popper, {\n className: \"chart-error-popper\",\n options: {\n placement: 'top'\n },\n isShown: shownError != null,\n onExited: this.handleErrorClose,\n closeOnBlur: true,\n interactive: true,\n children: shownError != null && /*#__PURE__*/_jsxs(_Fragment, {\n children: [/*#__PURE__*/_jsx(\"div\", {\n className: \"chart-error\",\n children: shownError\n }), /*#__PURE__*/_jsx(CopyButton, {\n tooltip: \"Copy Error\",\n copy: shownError,\n children: \"Copy Error\"\n })]\n })\n })]\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 },\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":["ownKeys","object","enumerableOnly","keys","symbols","sym","_objectSpread","target","i","source","key","_defineProperty","obj","value","_toPropertyKey","arg","_toPrimitive","input","hint","prim","res","log","Log","Chart","Component","faIcon","width","path","stringPath","isDownsampleInProgress","isDownsamplingDisabled","props","_props$containerRef","memoize","downsamplingError","isDownsampleFinished","data","error","customButtons","hasDownsampleError","dhWarningFilled","hasError","name","attr","icon","vsLoading","dhGraphLineDown","has2D","_ref","type","has3D","_ref2","buttons2D","buttons3D","bindAllMethods","createPlotlyComponent","React","isActive","model","prevProps","settings","theme","_this$plotWrapper$cur","_this$plotWrapper$cur2","_ref3","layout","_ref4","event","detail","ChartModel","state","revision","onUpdate","_onUpdate","onDisconnect","onReconnect","_detail$message","onError","DownsamplingError","_error","_onError","figure","ranges","ChartUtils","isRangesChanged","deepEqual","changes","onSettingsChanged","hiddenSeries","_ref5","seriesIndexes","acc","_ref6","visible","dh","chartUtils","_ref7","_ref8","shownError","force","rect","isRectChanged","columnFormats","FormatterUtils","dateTimeFormatterOptions","decimalFormatOptions","integerFormatOptions","formatter","Formatter","PlotlyProp","e","PlotComponent","config","isPlotShown","_jsxs","_jsx","Popper","_Fragment","CopyButton","DateUtils","Plotly","ChartContainer","chartTheme","useChartTheme"],"mappings":"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"}
|