@deephaven/chart 0.54.1-ui.0 → 0.55.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.
- package/dist/Chart.d.ts +1 -0
- package/dist/Chart.d.ts.map +1 -1
- package/dist/Chart.js +2 -1
- package/dist/Chart.js.map +1 -1
- package/dist/MockChartModel.d.ts +1 -0
- package/dist/MockChartModel.d.ts.map +1 -1
- package/dist/MockChartModel.js +6 -3
- package/dist/MockChartModel.js.map +1 -1
- package/package.json +11 -11
package/dist/Chart.d.ts
CHANGED
package/dist/Chart.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Chart.d.ts","sourceRoot":"","sources":["../src/Chart.tsx"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"Chart.d.ts","sourceRoot":"","sources":["../src/Chart.tsx"],"names":[],"mappings":"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"}
|
package/dist/Chart.js
CHANGED
|
@@ -51,6 +51,7 @@ export class Chart extends Component {
|
|
|
51
51
|
return isDownsamplingDisabled ? undefined : 'fill-active';
|
|
52
52
|
}
|
|
53
53
|
constructor(props) {
|
|
54
|
+
var _props$containerRef;
|
|
54
55
|
super(props);
|
|
55
56
|
_defineProperty(this, "currentSeries", void 0);
|
|
56
57
|
_defineProperty(this, "PlotComponent", void 0);
|
|
@@ -140,7 +141,7 @@ export class Chart extends Component {
|
|
|
140
141
|
this.handleRestyle = this.handleRestyle.bind(this);
|
|
141
142
|
this.PlotComponent = createPlotlyComponent(props.Plotly);
|
|
142
143
|
this.plot = /*#__PURE__*/React.createRef();
|
|
143
|
-
this.plotWrapper = /*#__PURE__*/React.createRef();
|
|
144
|
+
this.plotWrapper = (_props$containerRef = props.containerRef) !== null && _props$containerRef !== void 0 ? _props$containerRef : /*#__PURE__*/React.createRef();
|
|
144
145
|
this.columnFormats = [];
|
|
145
146
|
this.dateTimeFormatterOptions = {};
|
|
146
147
|
this.decimalFormatOptions = {};
|
package/dist/Chart.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Chart.js","names":["React","Component","deepEqual","memoize","CopyButton","Popper","vsLoading","dhGraphLineDown","dhWarningFilled","Formatter","FormatterUtils","DateUtils","Log","createPlotlyComponent","Plotly","ChartModel","ChartUtils","DownsamplingError","jsx","_jsx","Fragment","_Fragment","jsxs","_jsxs","log","module","Chart","convertIcon","faIcon","width","path","icon","stringPath","concat","ascent","descent","transform","downsampleButtonTitle","isDownsampleInProgress","isDownsamplingDisabled","downsampleButtonAttr","undefined","constructor","props","_defineProperty","downsamplingError","isDownsampleFinished","data","error","customButtons","hasDownsampleError","Boolean","push","name","title","click","toggleErrorMessage","attr","hasError","handleDownsampleClick","has2D","some","_ref","type","includes","has3D","_ref2","buttons2D","buttons3D","displaylogo","displayModeBar","modeBarButtons","handleAfterPlot","bind","handleErrorClose","handleModelEvent","handlePlotUpdate","handleRelayout","handleResize","handleRestyle","PlotComponent","plot","createRef","plotWrapper","columnFormats","dateTimeFormatterOptions","decimalFormatOptions","integerFormatOptions","isSubscribed","isLoadedFired","currentSeries","resizeObserver","window","ResizeObserver","state","shownError","layout","datarevision","revision","componentDidMount","updateDimensions","updateModelDimensions","initData","initFormatter","isActive","model","subscribe","current","observe","componentDidUpdate","prevProps","settings","updateFormatterSettings","unsubscribe","componentWillUnmount","disconnect","getPlotRect","_this$plotWrapper$cur","_this$plotWrapper$cur2","getBoundingClientRect","setState","getData","_objectSpread","getLayout","rect","height","debug2","_ref3","setDownsamplingDisabled","event","detail","EVENT_UPDATED","onUpdate","isLoading","EVENT_LOADFINISHED","EVENT_DISCONNECT","onDisconnect","EVENT_RECONNECT","onReconnect","EVENT_DOWNSAMPLESTARTED","EVENT_DOWNSAMPLEFINISHED","EVENT_DOWNSAMPLENEEDED","EVENT_DOWNSAMPLEFAILED","_detail$message","message","onError","EVENT_ERROR","Error","debug","figure","ranges","getLayoutRanges","isRangesChanged","changes","hiddenlabels","onSettingsChanged","hiddenSeries","_ref4","seriesIndexes","Object","keys","reduce","acc","_ref5","visible","_ref6","force","arguments","length","warn","isRectChanged","setDimensions","getColumnFormats","getDateTimeFormatterOptions","updateFormatter","formatter","dh","setFormatter","PlotlyProp","relayout","el","autosize","catch","e","render","config","getCachedConfig","isPlotShown","className","ref","children","onAfterPlot","onRelayout","onRestyle","useResizeHandler","style","options","placement","isShown","onExited","closeOnBlur","interactive","tooltip","copy","timeZone","defaultDateTimeFormat","FULL_DATE_FORMAT","showTimeZone","showTSeparator"],"sources":["../src/Chart.tsx"],"sourcesContent":["import React, { Component, ReactElement, RefObject } from 'react';\nimport deepEqual from 'deep-equal';\nimport memoize from 'memoize-one';\nimport { CopyButton, Popper } from '@deephaven/components';\nimport {\n vsLoading,\n dhGraphLineDown,\n dhWarningFilled,\n IconDefinition,\n} from '@deephaven/icons';\nimport {\n Formatter,\n FormatterUtils,\n DateUtils,\n DateTimeColumnFormatterOptions,\n DecimalColumnFormatterOptions,\n IntegerColumnFormatterOptions,\n FormattingRule,\n ColumnFormatSettings,\n DateTimeFormatSettings,\n} from '@deephaven/jsapi-utils';\nimport Log from '@deephaven/log';\nimport {\n Config as PlotlyConfig,\n Layout,\n Icon,\n Data,\n PlotData,\n ModeBarButtonAny,\n} from 'plotly.js';\nimport type { PlotParams } from 'react-plotly.js';\nimport createPlotlyComponent from './plotly/createPlotlyComponent';\nimport Plotly from './plotly/Plotly';\nimport ChartModel from './ChartModel';\nimport ChartUtils, { ChartModelSettings } from './ChartUtils';\nimport './Chart.scss';\nimport DownsamplingError from './DownsamplingError';\n\nconst log = Log.module('Chart');\n\ntype FormatterSettings = ColumnFormatSettings &\n DateTimeFormatSettings & {\n decimalFormatOptions?: DecimalColumnFormatterOptions;\n integerFormatOptions?: IntegerColumnFormatterOptions;\n };\n\ninterface ChartProps {\n model: ChartModel;\n settings: FormatterSettings;\n isActive: boolean;\n Plotly: typeof Plotly;\n onDisconnect: () => void;\n onReconnect: () => void;\n onUpdate: (obj: { isLoading: boolean }) => void;\n onError: (error: Error) => void;\n onSettingsChanged: (settings: Partial<ChartModelSettings>) => void;\n}\n\ninterface ChartState {\n data: Partial<Data>[] | null;\n /** An error specific to downsampling */\n downsamplingError: unknown;\n isDownsampleFinished: boolean;\n isDownsampleInProgress: boolean;\n isDownsamplingDisabled: boolean;\n\n /** Any other kind of error */\n error: unknown;\n shownError: string | null;\n layout: Partial<Layout>;\n revision: number;\n}\n\nexport class Chart extends Component<ChartProps, ChartState> {\n static 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: (): void => undefined,\n onReconnect: (): void => undefined,\n onUpdate: (): void => undefined,\n onError: (): void => undefined,\n onSettingsChanged: (): void => undefined,\n };\n\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: IconDefinition): Icon {\n const [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 const stringPath = `${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\n static downsampleButtonTitle(\n isDownsampleInProgress: boolean,\n isDownsamplingDisabled: boolean\n ): string {\n if (isDownsampleInProgress) {\n return 'Downsampling in progress...';\n }\n\n return isDownsamplingDisabled\n ? 'Downsampling disabled, click to enable'\n : 'Downsampling enabled, click to disable';\n }\n\n static downsampleButtonAttr(\n isDownsampleInProgress: boolean,\n isDownsamplingDisabled: boolean\n ): string | undefined {\n if (isDownsampleInProgress) {\n return 'animation-spin';\n }\n\n return isDownsamplingDisabled ? undefined : 'fill-active';\n }\n\n constructor(props: ChartProps) {\n super(props);\n\n this.handleAfterPlot = this.handleAfterPlot.bind(this);\n this.handleDownsampleClick = this.handleDownsampleClick.bind(this);\n this.handleErrorClose = this.handleErrorClose.bind(this);\n this.handleModelEvent = this.handleModelEvent.bind(this);\n this.handlePlotUpdate = this.handlePlotUpdate.bind(this);\n this.handleRelayout = this.handleRelayout.bind(this);\n this.handleResize = this.handleResize.bind(this);\n this.handleRestyle = this.handleRestyle.bind(this);\n\n this.PlotComponent = createPlotlyComponent(props.Plotly);\n this.plot = React.createRef();\n this.plotWrapper = 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\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\n componentDidMount(): void {\n // Need to make sure the model dimensions are up to date before initializing the data\n this.updateDimensions();\n this.updateModelDimensions();\n\n this.initData();\n this.initFormatter();\n\n const { isActive, model } = 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 }\n\n componentDidUpdate(prevProps: ChartProps): void {\n const { isActive, model, settings } = this.props;\n this.updateFormatterSettings(settings as FormatterSettings);\n\n if (model !== prevProps.model) {\n this.unsubscribe(prevProps.model);\n this.subscribe(model);\n }\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 }\n\n componentWillUnmount(): void {\n const { model } = this.props;\n this.unsubscribe(model);\n\n this.resizeObserver.disconnect();\n }\n\n currentSeries: number;\n\n PlotComponent: React.ComponentType<PlotParams>;\n\n plot: RefObject<typeof this.PlotComponent>;\n\n plotWrapper: RefObject<HTMLDivElement>;\n\n columnFormats?: FormattingRule[];\n\n dateTimeFormatterOptions?: DateTimeColumnFormatterOptions;\n\n decimalFormatOptions: DecimalColumnFormatterOptions;\n\n integerFormatOptions: IntegerColumnFormatterOptions;\n\n rect?: DOMRect;\n\n ranges?: unknown;\n\n isSubscribed: boolean;\n\n isLoadedFired: boolean;\n\n // Listen for resizing of the element and update the canvas appropriately\n resizeObserver: ResizeObserver;\n\n getCachedConfig = memoize(\n (\n downsamplingError: unknown,\n isDownsampleFinished: boolean,\n isDownsampleInProgress: boolean,\n isDownsamplingDisabled: boolean,\n data: Partial<Data>[],\n error: unknown\n ): Partial<PlotlyConfig> => {\n const customButtons: ModeBarButtonAny[] = [];\n const hasDownsampleError = Boolean(downsamplingError);\n if (hasDownsampleError) {\n customButtons.push({\n name: `Downsampling failed: ${downsamplingError}`,\n title: 'Downsampling failed',\n click: () => {\n this.toggleErrorMessage(`${downsamplingError}`);\n },\n icon: Chart.convertIcon(dhWarningFilled),\n attr: 'fill-warning',\n });\n }\n const hasError = Boolean(error);\n if (hasError) {\n customButtons.push({\n name: `Error: ${error}`,\n title: `Error`,\n click: () => {\n this.toggleErrorMessage(`${error}`);\n },\n icon: Chart.convertIcon(dhWarningFilled),\n attr: 'fill-warning',\n });\n }\n\n if (\n isDownsampleFinished ||\n isDownsampleInProgress ||\n isDownsamplingDisabled ||\n hasDownsampleError\n ) {\n const name = Chart.downsampleButtonTitle(\n isDownsampleInProgress,\n isDownsamplingDisabled\n );\n const attr = Chart.downsampleButtonAttr(\n isDownsampleInProgress,\n isDownsamplingDisabled\n );\n\n const 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\n const has2D = data.some(\n ({ type }) => type != null && !type.includes('3d')\n );\n const has3D = data.some(\n ({ type }) => type != null && type.includes('3d')\n );\n\n const buttons2D = [\n 'zoomIn2d',\n 'zoomOut2d',\n 'autoScale2d',\n 'resetScale2d',\n ] as const;\n const buttons3D = [\n 'orbitRotation',\n 'tableRotation',\n 'resetCameraDefault3d',\n ] as const;\n\n return {\n displaylogo: false,\n\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\n ? true\n : ('hover' as const),\n\n // Each array gets grouped together in the mode bar\n modeBarButtons: [\n customButtons,\n ['toImage'],\n ['zoom2d', 'pan2d'], // These work the same for both 2d and 3d\n [...(has2D ? buttons2D : []), ...(has3D ? buttons3D : [])],\n ],\n };\n }\n );\n\n getPlotRect(): DOMRect | null {\n return this.plotWrapper.current?.getBoundingClientRect() ?? null;\n }\n\n initData(): void {\n const { model } = this.props;\n const { layout } = this.state;\n this.setState({\n data: model.getData(),\n layout: {\n ...layout,\n ...model.getLayout(),\n },\n });\n }\n\n subscribe(model: ChartModel): void {\n if (this.isSubscribed) {\n return;\n }\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\n unsubscribe(model: ChartModel): void {\n if (!this.isSubscribed) {\n return;\n }\n\n model.unsubscribe(this.handleModelEvent);\n this.isSubscribed = false;\n }\n\n handleAfterPlot(): void {\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\n handleDownsampleClick(): void {\n this.setState(\n ({ isDownsamplingDisabled }) => ({\n downsamplingError: null,\n isDownsampleInProgress: false,\n isDownsampleFinished: false,\n isDownsamplingDisabled: !isDownsamplingDisabled,\n }),\n () => {\n const { model } = this.props;\n const { isDownsamplingDisabled } = this.state;\n model.setDownsamplingDisabled(isDownsamplingDisabled);\n }\n );\n }\n\n handleErrorClose(): void {\n this.setState({ shownError: null });\n }\n\n handleModelEvent(event: CustomEvent): void {\n const { type, detail } = event;\n log.debug2('Received data update', type, detail);\n\n switch (type) {\n case ChartModel.EVENT_UPDATED: {\n this.currentSeries += 1;\n this.setState(state => {\n const { layout, revision } = 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\n const { onUpdate } = this.props;\n onUpdate({ isLoading: !this.isLoadedFired });\n break;\n }\n case ChartModel.EVENT_LOADFINISHED: {\n const { onUpdate } = this.props;\n this.isLoadedFired = true;\n onUpdate({ isLoading: false });\n break;\n }\n case ChartModel.EVENT_DISCONNECT: {\n const { onDisconnect } = this.props;\n onDisconnect();\n break;\n }\n case ChartModel.EVENT_RECONNECT: {\n const { onReconnect } = this.props;\n onReconnect();\n break;\n }\n case ChartModel.EVENT_DOWNSAMPLESTARTED: {\n this.setState({\n isDownsampleFinished: false,\n isDownsampleInProgress: true,\n downsamplingError: null,\n });\n break;\n }\n case ChartModel.EVENT_DOWNSAMPLEFINISHED: {\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 const downsamplingError = detail.message ?? detail;\n this.setState({\n isDownsampleFinished: false,\n isDownsampleInProgress: false,\n isDownsamplingDisabled: false,\n downsamplingError,\n });\n\n const { onError } = this.props;\n onError(new DownsamplingError(downsamplingError));\n break;\n }\n case ChartModel.EVENT_ERROR: {\n const error = `${detail}`;\n this.setState({ error });\n const { onError } = this.props;\n onError(new Error(error));\n break;\n }\n default:\n log.debug('Unknown event type', type, event);\n }\n }\n\n handlePlotUpdate(figure: Readonly<{ layout: Partial<Layout> }>): void {\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 const { layout } = figure;\n const ranges = ChartUtils.getLayoutRanges(layout);\n\n const isRangesChanged = !deepEqual(ranges, this.ranges);\n\n if (isRangesChanged) {\n this.ranges = ranges;\n\n this.updateModelDimensions(true);\n }\n }\n\n handleRelayout(changes: { hiddenlabels?: string[] }): void {\n log.debug('handleRelayout', changes);\n if (changes.hiddenlabels != null) {\n const { onSettingsChanged } = 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 const hiddenSeries = [...changes.hiddenlabels];\n onSettingsChanged({ hiddenSeries });\n }\n\n this.updateModelDimensions();\n }\n\n handleResize(): void {\n this.updateDimensions();\n }\n\n handleRestyle([changes, seriesIndexes]: readonly [\n Record<string, unknown>,\n number[],\n ]): void {\n log.debug('handleRestyle', changes, seriesIndexes);\n if (Object.keys(changes).includes('visible')) {\n const { data } = this.state;\n const { onSettingsChanged } = this.props;\n if (data != null) {\n const hiddenSeries = (data as Partial<PlotData>[]).reduce(\n (acc: string[], { name, visible }) =>\n name != null && visible === 'legendonly' ? [...acc, name] : acc,\n []\n );\n onSettingsChanged({ hiddenSeries });\n }\n }\n }\n\n /**\n * Toggle the error message. If it is already being displayed, then hide it.\n */\n toggleErrorMessage(error: string): void {\n this.setState(({ shownError }) => ({\n shownError: shownError === error ? null : error,\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(force = false): void {\n const rect = this.getPlotRect();\n if (!rect) {\n log.warn('Unable to get plotting rect');\n return;\n }\n\n const isRectChanged =\n !this.rect ||\n this.rect.width !== rect.width ||\n this.rect.height !== rect.height;\n\n if (isRectChanged || force) {\n this.rect = rect;\n\n const { isActive, model } = 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\n initFormatter(): void {\n const { settings } = this.props;\n this.updateFormatterSettings(settings as FormatterSettings);\n }\n\n updateFormatterSettings(settings: FormatterSettings): void {\n const columnFormats = FormatterUtils.getColumnFormats(settings);\n const dateTimeFormatterOptions =\n FormatterUtils.getDateTimeFormatterOptions(settings);\n const { decimalFormatOptions = {}, integerFormatOptions = {} } = settings;\n\n if (\n !deepEqual(this.columnFormats, columnFormats) ||\n !deepEqual(this.dateTimeFormatterOptions, dateTimeFormatterOptions) ||\n !deepEqual(this.decimalFormatOptions, decimalFormatOptions) ||\n !deepEqual(this.integerFormatOptions, integerFormatOptions)\n ) {\n this.columnFormats = FormatterUtils.getColumnFormats(settings);\n this.dateTimeFormatterOptions = dateTimeFormatterOptions;\n this.decimalFormatOptions = decimalFormatOptions;\n this.integerFormatOptions = integerFormatOptions;\n this.updateFormatter();\n }\n }\n\n updateFormatter(): void {\n const { model } = this.props;\n const formatter = new Formatter(\n model.dh,\n this.columnFormats,\n this.dateTimeFormatterOptions,\n this.decimalFormatOptions,\n this.integerFormatOptions\n );\n model.setFormatter(formatter);\n }\n\n updateDimensions(): void {\n const rect = this.getPlotRect();\n const { Plotly: PlotlyProp } = this.props;\n if (\n this.plot.current != null &&\n rect != null &&\n rect.width > 0 &&\n rect.height > 0\n ) {\n // Call relayout to resize avoiding the debouncing plotly does\n // https://github.com/plotly/plotly.js/issues/2769#issuecomment-402099552\n PlotlyProp.relayout(\n (this.plot.current as unknown as { el: HTMLElement }).el,\n {\n autosize: true,\n }\n ).catch((e: unknown) => {\n log.debug('Unable to resize, promise rejected', e);\n });\n }\n }\n\n render(): ReactElement {\n const { PlotComponent } = this;\n const {\n data,\n downsamplingError,\n isDownsampleFinished,\n isDownsampleInProgress,\n isDownsamplingDisabled,\n error,\n shownError,\n layout,\n revision,\n } = this.state;\n const config = this.getCachedConfig(\n downsamplingError,\n isDownsampleFinished,\n isDownsampleInProgress,\n isDownsamplingDisabled,\n data ?? [],\n error\n );\n const isPlotShown = data != null;\n return (\n <div className=\"h-100 w-100 chart-wrapper\" ref={this.plotWrapper}>\n {isPlotShown && (\n <PlotComponent\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\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\n style={{ height: '100%', width: '100%' }}\n />\n )}\n <Popper\n className=\"chart-error-popper\"\n options={{ placement: 'top' }}\n isShown={shownError != null}\n onExited={this.handleErrorClose}\n closeOnBlur\n interactive\n >\n {shownError != null && (\n <>\n <div className=\"chart-error\">{shownError}</div>\n <CopyButton tooltip=\"Copy Error\" copy={shownError}>\n Copy Error\n </CopyButton>\n </>\n )}\n </Popper>\n </div>\n );\n }\n}\n\nexport default Chart;\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"Chart.js","names":["React","Component","deepEqual","memoize","CopyButton","Popper","vsLoading","dhGraphLineDown","dhWarningFilled","Formatter","FormatterUtils","DateUtils","Log","createPlotlyComponent","Plotly","ChartModel","ChartUtils","DownsamplingError","jsx","_jsx","Fragment","_Fragment","jsxs","_jsxs","log","module","Chart","convertIcon","faIcon","width","path","icon","stringPath","concat","ascent","descent","transform","downsampleButtonTitle","isDownsampleInProgress","isDownsamplingDisabled","downsampleButtonAttr","undefined","constructor","props","_props$containerRef","_defineProperty","downsamplingError","isDownsampleFinished","data","error","customButtons","hasDownsampleError","Boolean","push","name","title","click","toggleErrorMessage","attr","hasError","handleDownsampleClick","has2D","some","_ref","type","includes","has3D","_ref2","buttons2D","buttons3D","displaylogo","displayModeBar","modeBarButtons","handleAfterPlot","bind","handleErrorClose","handleModelEvent","handlePlotUpdate","handleRelayout","handleResize","handleRestyle","PlotComponent","plot","createRef","plotWrapper","containerRef","columnFormats","dateTimeFormatterOptions","decimalFormatOptions","integerFormatOptions","isSubscribed","isLoadedFired","currentSeries","resizeObserver","window","ResizeObserver","state","shownError","layout","datarevision","revision","componentDidMount","updateDimensions","updateModelDimensions","initData","initFormatter","isActive","model","subscribe","current","observe","componentDidUpdate","prevProps","settings","updateFormatterSettings","unsubscribe","componentWillUnmount","disconnect","getPlotRect","_this$plotWrapper$cur","_this$plotWrapper$cur2","getBoundingClientRect","setState","getData","_objectSpread","getLayout","rect","height","debug2","_ref3","setDownsamplingDisabled","event","detail","EVENT_UPDATED","onUpdate","isLoading","EVENT_LOADFINISHED","EVENT_DISCONNECT","onDisconnect","EVENT_RECONNECT","onReconnect","EVENT_DOWNSAMPLESTARTED","EVENT_DOWNSAMPLEFINISHED","EVENT_DOWNSAMPLENEEDED","EVENT_DOWNSAMPLEFAILED","_detail$message","message","onError","EVENT_ERROR","Error","debug","figure","ranges","getLayoutRanges","isRangesChanged","changes","hiddenlabels","onSettingsChanged","hiddenSeries","_ref4","seriesIndexes","Object","keys","reduce","acc","_ref5","visible","_ref6","force","arguments","length","warn","isRectChanged","setDimensions","getColumnFormats","getDateTimeFormatterOptions","updateFormatter","formatter","dh","setFormatter","PlotlyProp","relayout","el","autosize","catch","e","render","config","getCachedConfig","isPlotShown","className","ref","children","onAfterPlot","onRelayout","onRestyle","useResizeHandler","style","options","placement","isShown","onExited","closeOnBlur","interactive","tooltip","copy","timeZone","defaultDateTimeFormat","FULL_DATE_FORMAT","showTimeZone","showTSeparator"],"sources":["../src/Chart.tsx"],"sourcesContent":["import React, { Component, ReactElement, RefObject } from 'react';\nimport deepEqual from 'deep-equal';\nimport memoize from 'memoize-one';\nimport { CopyButton, Popper } from '@deephaven/components';\nimport {\n vsLoading,\n dhGraphLineDown,\n dhWarningFilled,\n IconDefinition,\n} from '@deephaven/icons';\nimport {\n Formatter,\n FormatterUtils,\n DateUtils,\n DateTimeColumnFormatterOptions,\n DecimalColumnFormatterOptions,\n IntegerColumnFormatterOptions,\n FormattingRule,\n ColumnFormatSettings,\n DateTimeFormatSettings,\n} from '@deephaven/jsapi-utils';\nimport Log from '@deephaven/log';\nimport {\n Config as PlotlyConfig,\n Layout,\n Icon,\n Data,\n PlotData,\n ModeBarButtonAny,\n} from 'plotly.js';\nimport type { PlotParams } from 'react-plotly.js';\nimport createPlotlyComponent from './plotly/createPlotlyComponent';\nimport Plotly from './plotly/Plotly';\nimport ChartModel from './ChartModel';\nimport ChartUtils, { ChartModelSettings } from './ChartUtils';\nimport './Chart.scss';\nimport DownsamplingError from './DownsamplingError';\n\nconst log = Log.module('Chart');\n\ntype FormatterSettings = ColumnFormatSettings &\n DateTimeFormatSettings & {\n decimalFormatOptions?: DecimalColumnFormatterOptions;\n integerFormatOptions?: IntegerColumnFormatterOptions;\n };\n\ninterface ChartProps {\n model: ChartModel;\n settings: FormatterSettings;\n isActive: boolean;\n Plotly: typeof Plotly;\n containerRef?: React.RefObject<HTMLDivElement>;\n onDisconnect: () => void;\n onReconnect: () => void;\n onUpdate: (obj: { isLoading: boolean }) => void;\n onError: (error: Error) => void;\n onSettingsChanged: (settings: Partial<ChartModelSettings>) => void;\n}\n\ninterface ChartState {\n data: Partial<Data>[] | null;\n /** An error specific to downsampling */\n downsamplingError: unknown;\n isDownsampleFinished: boolean;\n isDownsampleInProgress: boolean;\n isDownsamplingDisabled: boolean;\n\n /** Any other kind of error */\n error: unknown;\n shownError: string | null;\n layout: Partial<Layout>;\n revision: number;\n}\n\nexport class Chart extends Component<ChartProps, ChartState> {\n static 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: (): void => undefined,\n onReconnect: (): void => undefined,\n onUpdate: (): void => undefined,\n onError: (): void => undefined,\n onSettingsChanged: (): void => undefined,\n };\n\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: IconDefinition): Icon {\n const [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 const stringPath = `${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\n static downsampleButtonTitle(\n isDownsampleInProgress: boolean,\n isDownsamplingDisabled: boolean\n ): string {\n if (isDownsampleInProgress) {\n return 'Downsampling in progress...';\n }\n\n return isDownsamplingDisabled\n ? 'Downsampling disabled, click to enable'\n : 'Downsampling enabled, click to disable';\n }\n\n static downsampleButtonAttr(\n isDownsampleInProgress: boolean,\n isDownsamplingDisabled: boolean\n ): string | undefined {\n if (isDownsampleInProgress) {\n return 'animation-spin';\n }\n\n return isDownsamplingDisabled ? undefined : 'fill-active';\n }\n\n constructor(props: ChartProps) {\n super(props);\n\n this.handleAfterPlot = this.handleAfterPlot.bind(this);\n this.handleDownsampleClick = this.handleDownsampleClick.bind(this);\n this.handleErrorClose = this.handleErrorClose.bind(this);\n this.handleModelEvent = this.handleModelEvent.bind(this);\n this.handlePlotUpdate = this.handlePlotUpdate.bind(this);\n this.handleRelayout = this.handleRelayout.bind(this);\n this.handleResize = this.handleResize.bind(this);\n this.handleRestyle = this.handleRestyle.bind(this);\n\n this.PlotComponent = createPlotlyComponent(props.Plotly);\n this.plot = React.createRef();\n this.plotWrapper = props.containerRef ?? 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\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\n componentDidMount(): void {\n // Need to make sure the model dimensions are up to date before initializing the data\n this.updateDimensions();\n this.updateModelDimensions();\n\n this.initData();\n this.initFormatter();\n\n const { isActive, model } = 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 }\n\n componentDidUpdate(prevProps: ChartProps): void {\n const { isActive, model, settings } = this.props;\n this.updateFormatterSettings(settings as FormatterSettings);\n\n if (model !== prevProps.model) {\n this.unsubscribe(prevProps.model);\n this.subscribe(model);\n }\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 }\n\n componentWillUnmount(): void {\n const { model } = this.props;\n this.unsubscribe(model);\n\n this.resizeObserver.disconnect();\n }\n\n currentSeries: number;\n\n PlotComponent: React.ComponentType<PlotParams>;\n\n plot: RefObject<typeof this.PlotComponent>;\n\n plotWrapper: RefObject<HTMLDivElement>;\n\n columnFormats?: FormattingRule[];\n\n dateTimeFormatterOptions?: DateTimeColumnFormatterOptions;\n\n decimalFormatOptions: DecimalColumnFormatterOptions;\n\n integerFormatOptions: IntegerColumnFormatterOptions;\n\n rect?: DOMRect;\n\n ranges?: unknown;\n\n isSubscribed: boolean;\n\n isLoadedFired: boolean;\n\n // Listen for resizing of the element and update the canvas appropriately\n resizeObserver: ResizeObserver;\n\n getCachedConfig = memoize(\n (\n downsamplingError: unknown,\n isDownsampleFinished: boolean,\n isDownsampleInProgress: boolean,\n isDownsamplingDisabled: boolean,\n data: Partial<Data>[],\n error: unknown\n ): Partial<PlotlyConfig> => {\n const customButtons: ModeBarButtonAny[] = [];\n const hasDownsampleError = Boolean(downsamplingError);\n if (hasDownsampleError) {\n customButtons.push({\n name: `Downsampling failed: ${downsamplingError}`,\n title: 'Downsampling failed',\n click: () => {\n this.toggleErrorMessage(`${downsamplingError}`);\n },\n icon: Chart.convertIcon(dhWarningFilled),\n attr: 'fill-warning',\n });\n }\n const hasError = Boolean(error);\n if (hasError) {\n customButtons.push({\n name: `Error: ${error}`,\n title: `Error`,\n click: () => {\n this.toggleErrorMessage(`${error}`);\n },\n icon: Chart.convertIcon(dhWarningFilled),\n attr: 'fill-warning',\n });\n }\n\n if (\n isDownsampleFinished ||\n isDownsampleInProgress ||\n isDownsamplingDisabled ||\n hasDownsampleError\n ) {\n const name = Chart.downsampleButtonTitle(\n isDownsampleInProgress,\n isDownsamplingDisabled\n );\n const attr = Chart.downsampleButtonAttr(\n isDownsampleInProgress,\n isDownsamplingDisabled\n );\n\n const 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\n const has2D = data.some(\n ({ type }) => type != null && !type.includes('3d')\n );\n const has3D = data.some(\n ({ type }) => type != null && type.includes('3d')\n );\n\n const buttons2D = [\n 'zoomIn2d',\n 'zoomOut2d',\n 'autoScale2d',\n 'resetScale2d',\n ] as const;\n const buttons3D = [\n 'orbitRotation',\n 'tableRotation',\n 'resetCameraDefault3d',\n ] as const;\n\n return {\n displaylogo: false,\n\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\n ? true\n : ('hover' as const),\n\n // Each array gets grouped together in the mode bar\n modeBarButtons: [\n customButtons,\n ['toImage'],\n ['zoom2d', 'pan2d'], // These work the same for both 2d and 3d\n [...(has2D ? buttons2D : []), ...(has3D ? buttons3D : [])],\n ],\n };\n }\n );\n\n getPlotRect(): DOMRect | null {\n return this.plotWrapper.current?.getBoundingClientRect() ?? null;\n }\n\n initData(): void {\n const { model } = this.props;\n const { layout } = this.state;\n this.setState({\n data: model.getData(),\n layout: {\n ...layout,\n ...model.getLayout(),\n },\n });\n }\n\n subscribe(model: ChartModel): void {\n if (this.isSubscribed) {\n return;\n }\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\n unsubscribe(model: ChartModel): void {\n if (!this.isSubscribed) {\n return;\n }\n\n model.unsubscribe(this.handleModelEvent);\n this.isSubscribed = false;\n }\n\n handleAfterPlot(): void {\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\n handleDownsampleClick(): void {\n this.setState(\n ({ isDownsamplingDisabled }) => ({\n downsamplingError: null,\n isDownsampleInProgress: false,\n isDownsampleFinished: false,\n isDownsamplingDisabled: !isDownsamplingDisabled,\n }),\n () => {\n const { model } = this.props;\n const { isDownsamplingDisabled } = this.state;\n model.setDownsamplingDisabled(isDownsamplingDisabled);\n }\n );\n }\n\n handleErrorClose(): void {\n this.setState({ shownError: null });\n }\n\n handleModelEvent(event: CustomEvent): void {\n const { type, detail } = event;\n log.debug2('Received data update', type, detail);\n\n switch (type) {\n case ChartModel.EVENT_UPDATED: {\n this.currentSeries += 1;\n this.setState(state => {\n const { layout, revision } = 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\n const { onUpdate } = this.props;\n onUpdate({ isLoading: !this.isLoadedFired });\n break;\n }\n case ChartModel.EVENT_LOADFINISHED: {\n const { onUpdate } = this.props;\n this.isLoadedFired = true;\n onUpdate({ isLoading: false });\n break;\n }\n case ChartModel.EVENT_DISCONNECT: {\n const { onDisconnect } = this.props;\n onDisconnect();\n break;\n }\n case ChartModel.EVENT_RECONNECT: {\n const { onReconnect } = this.props;\n onReconnect();\n break;\n }\n case ChartModel.EVENT_DOWNSAMPLESTARTED: {\n this.setState({\n isDownsampleFinished: false,\n isDownsampleInProgress: true,\n downsamplingError: null,\n });\n break;\n }\n case ChartModel.EVENT_DOWNSAMPLEFINISHED: {\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 const downsamplingError = detail.message ?? detail;\n this.setState({\n isDownsampleFinished: false,\n isDownsampleInProgress: false,\n isDownsamplingDisabled: false,\n downsamplingError,\n });\n\n const { onError } = this.props;\n onError(new DownsamplingError(downsamplingError));\n break;\n }\n case ChartModel.EVENT_ERROR: {\n const error = `${detail}`;\n this.setState({ error });\n const { onError } = this.props;\n onError(new Error(error));\n break;\n }\n default:\n log.debug('Unknown event type', type, event);\n }\n }\n\n handlePlotUpdate(figure: Readonly<{ layout: Partial<Layout> }>): void {\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 const { layout } = figure;\n const ranges = ChartUtils.getLayoutRanges(layout);\n\n const isRangesChanged = !deepEqual(ranges, this.ranges);\n\n if (isRangesChanged) {\n this.ranges = ranges;\n\n this.updateModelDimensions(true);\n }\n }\n\n handleRelayout(changes: { hiddenlabels?: string[] }): void {\n log.debug('handleRelayout', changes);\n if (changes.hiddenlabels != null) {\n const { onSettingsChanged } = 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 const hiddenSeries = [...changes.hiddenlabels];\n onSettingsChanged({ hiddenSeries });\n }\n\n this.updateModelDimensions();\n }\n\n handleResize(): void {\n this.updateDimensions();\n }\n\n handleRestyle([changes, seriesIndexes]: readonly [\n Record<string, unknown>,\n number[],\n ]): void {\n log.debug('handleRestyle', changes, seriesIndexes);\n if (Object.keys(changes).includes('visible')) {\n const { data } = this.state;\n const { onSettingsChanged } = this.props;\n if (data != null) {\n const hiddenSeries = (data as Partial<PlotData>[]).reduce(\n (acc: string[], { name, visible }) =>\n name != null && visible === 'legendonly' ? [...acc, name] : acc,\n []\n );\n onSettingsChanged({ hiddenSeries });\n }\n }\n }\n\n /**\n * Toggle the error message. If it is already being displayed, then hide it.\n */\n toggleErrorMessage(error: string): void {\n this.setState(({ shownError }) => ({\n shownError: shownError === error ? null : error,\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(force = false): void {\n const rect = this.getPlotRect();\n if (!rect) {\n log.warn('Unable to get plotting rect');\n return;\n }\n\n const isRectChanged =\n !this.rect ||\n this.rect.width !== rect.width ||\n this.rect.height !== rect.height;\n\n if (isRectChanged || force) {\n this.rect = rect;\n\n const { isActive, model } = 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\n initFormatter(): void {\n const { settings } = this.props;\n this.updateFormatterSettings(settings as FormatterSettings);\n }\n\n updateFormatterSettings(settings: FormatterSettings): void {\n const columnFormats = FormatterUtils.getColumnFormats(settings);\n const dateTimeFormatterOptions =\n FormatterUtils.getDateTimeFormatterOptions(settings);\n const { decimalFormatOptions = {}, integerFormatOptions = {} } = settings;\n\n if (\n !deepEqual(this.columnFormats, columnFormats) ||\n !deepEqual(this.dateTimeFormatterOptions, dateTimeFormatterOptions) ||\n !deepEqual(this.decimalFormatOptions, decimalFormatOptions) ||\n !deepEqual(this.integerFormatOptions, integerFormatOptions)\n ) {\n this.columnFormats = FormatterUtils.getColumnFormats(settings);\n this.dateTimeFormatterOptions = dateTimeFormatterOptions;\n this.decimalFormatOptions = decimalFormatOptions;\n this.integerFormatOptions = integerFormatOptions;\n this.updateFormatter();\n }\n }\n\n updateFormatter(): void {\n const { model } = this.props;\n const formatter = new Formatter(\n model.dh,\n this.columnFormats,\n this.dateTimeFormatterOptions,\n this.decimalFormatOptions,\n this.integerFormatOptions\n );\n model.setFormatter(formatter);\n }\n\n updateDimensions(): void {\n const rect = this.getPlotRect();\n const { Plotly: PlotlyProp } = this.props;\n if (\n this.plot.current != null &&\n rect != null &&\n rect.width > 0 &&\n rect.height > 0\n ) {\n // Call relayout to resize avoiding the debouncing plotly does\n // https://github.com/plotly/plotly.js/issues/2769#issuecomment-402099552\n PlotlyProp.relayout(\n (this.plot.current as unknown as { el: HTMLElement }).el,\n {\n autosize: true,\n }\n ).catch((e: unknown) => {\n log.debug('Unable to resize, promise rejected', e);\n });\n }\n }\n\n render(): ReactElement {\n const { PlotComponent } = this;\n const {\n data,\n downsamplingError,\n isDownsampleFinished,\n isDownsampleInProgress,\n isDownsamplingDisabled,\n error,\n shownError,\n layout,\n revision,\n } = this.state;\n const config = this.getCachedConfig(\n downsamplingError,\n isDownsampleFinished,\n isDownsampleInProgress,\n isDownsamplingDisabled,\n data ?? [],\n error\n );\n const isPlotShown = data != null;\n return (\n <div className=\"h-100 w-100 chart-wrapper\" ref={this.plotWrapper}>\n {isPlotShown && (\n <PlotComponent\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\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\n style={{ height: '100%', width: '100%' }}\n />\n )}\n <Popper\n className=\"chart-error-popper\"\n options={{ placement: 'top' }}\n isShown={shownError != null}\n onExited={this.handleErrorClose}\n closeOnBlur\n interactive\n >\n {shownError != null && (\n <>\n <div className=\"chart-error\">{shownError}</div>\n <CopyButton tooltip=\"Copy Error\" copy={shownError}>\n Copy Error\n </CopyButton>\n </>\n )}\n </Popper>\n </div>\n );\n }\n}\n\nexport default Chart;\n"],"mappings":"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"}
|
package/dist/MockChartModel.d.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MockChartModel.d.ts","sourceRoot":"","sources":["../src/MockChartModel.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,EAAE,IAAI,MAAM,EAAE,MAAM,wBAAwB,CAAC;AAC3D,OAAO,KAAK,EAAS,MAAM,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AACzD,OAAO,UAAU,MAAM,cAAc,CAAC;AACtC,OAAO,EAAE,UAAU,EAAqB,MAAM,cAAc,CAAC;AAG7D,UAAU,MAAM;IACd,CAAC,EAAE,QAAQ,CAAC,GAAG,CAAC,CAAC;IACjB,CAAC,EAAE,QAAQ,CAAC,GAAG,CAAC,CAAC;IACjB,CAAC,EAAE,MAAM,EAAE,CAAC;IACZ,CAAC,EAAE,MAAM,EAAE,CAAC;CACb;AAED,oCAAoC;AACpC,cAAM,cAAe,SAAQ,UAAU;IACrC,MAAM,CAAC,SAAS,SAAO;IAEvB,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC;IAE1B,MAAM,KAAK,KAAK,IAAI,UAAU,CAQ7B;IAED,MAAM,CAAC,gBAAgB,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,SAAI,EAAE,KAAK,SAAM,GAAG,MAAM;
|
|
1
|
+
{"version":3,"file":"MockChartModel.d.ts","sourceRoot":"","sources":["../src/MockChartModel.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,EAAE,IAAI,MAAM,EAAE,MAAM,wBAAwB,CAAC;AAC3D,OAAO,KAAK,EAAS,MAAM,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AACzD,OAAO,UAAU,MAAM,cAAc,CAAC;AACtC,OAAO,EAAE,UAAU,EAAqB,MAAM,cAAc,CAAC;AAG7D,UAAU,MAAM;IACd,CAAC,EAAE,QAAQ,CAAC,GAAG,CAAC,CAAC;IACjB,CAAC,EAAE,QAAQ,CAAC,GAAG,CAAC,CAAC;IACjB,CAAC,EAAE,MAAM,EAAE,CAAC;IACZ,CAAC,EAAE,MAAM,EAAE,CAAC;CACb;AAED,oCAAoC;AACpC,cAAM,cAAe,SAAQ,UAAU;IACrC,MAAM,CAAC,MAAM,EAAE,MAAM,MAAM,CAA0B;IAErD,MAAM,CAAC,SAAS,SAAO;IAEvB,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC;IAE1B,MAAM,KAAK,KAAK,IAAI,UAAU,CAQ7B;IAED,MAAM,CAAC,gBAAgB,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,SAAI,EAAE,KAAK,SAAM,GAAG,MAAM;IAyCvE,MAAM,CAAC,WAAW,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,QAAQ,CAAC;IAcrD,MAAM,CAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,QAAQ,CAAC;IAiBlD,MAAM,CAAC,aAAa,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,QAAQ,CAAC;IAkBvD,MAAM,CAAC,aAAa,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,QAAQ,CAAC;IA8BvD,MAAM,CAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,QAAQ,CAAC;IAelD,MAAM,CAAC,cAAc,IAAI,OAAO,CAAC,QAAQ,CAAC,EAAE;IAY5C,MAAM,CAAC,iBAAiB,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;gBAgBnD,EAAE,EAAE,MAAM,EACV,EACE,IAAsC,EACtC,MAA6C,EAC7C,YAAiB,GAClB;;;;KAAK;IASR,IAAI,EAAE,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC;IAE1B,YAAY,EAAE,MAAM,EAAE,CAAC;IAEvB,MAAM,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC;IAExB,OAAO,IAAI,OAAO,CAAC,QAAQ,CAAC,EAAE;IAI9B,SAAS,IAAI,OAAO,CAAC,MAAM,CAAC;IAI5B,kBAAkB,IAAI,GAAG,CAAC,MAAM,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC;IAYjE,gBAAgB,IAAI,OAAO;IAI3B,SAAS,IAAI,IAAI;CAGlB;AAED,eAAe,cAAc,CAAC"}
|
package/dist/MockChartModel.js
CHANGED
|
@@ -24,18 +24,20 @@ class MockChartModel extends ChartModel {
|
|
|
24
24
|
var values = [];
|
|
25
25
|
var smooth = [];
|
|
26
26
|
var linear = [];
|
|
27
|
-
|
|
27
|
+
|
|
28
|
+
// Setting to a fixed seed date so that e2e tests can be deterministic.
|
|
29
|
+
var startDate = new Date('2018-06-01');
|
|
28
30
|
for (var i = 0; i < steps; i += 1) {
|
|
29
31
|
var date = new Date(startDate.getFullYear(), startDate.getMonth(), startDate.getDate() + i - steps);
|
|
30
32
|
dates.push("".concat(date.getFullYear(), "-").concat(date.getMonth() + 1, "-").concat(date.getDate()));
|
|
31
|
-
var v = (Math.sin(i / steps * offset) * steps / 3 + Math.cos(i * 0.2) * steps / 6 + Math.sin(i * 0.5) * steps / 10 +
|
|
33
|
+
var v = (Math.sin(i / steps * offset) * steps / 3 + Math.cos(i * 0.2) * steps / 6 + Math.sin(i * 0.5) * steps / 10 + MockChartModel.random() * steps / 5 + i * MockChartModel.smoothing) * scale;
|
|
32
34
|
v = Math.round(v * 100) / 100; // 2 decimals only
|
|
33
35
|
// using steps acts as amplititude scaling based on value
|
|
34
36
|
// large sine wave for course shape + small sine waves for bumpiness +
|
|
35
37
|
// general randomness noise + index to be constantly up and to the right + smoothing factor
|
|
36
38
|
values.push(v);
|
|
37
39
|
linear.push(40 + i * MockChartModel.smoothing);
|
|
38
|
-
smooth.push(Math.sin(i / steps * offset) * steps / 3 +
|
|
40
|
+
smooth.push(Math.sin(i / steps * offset) * steps / 3 + MockChartModel.random() * steps / 10 + i * MockChartModel.smoothing); // push a smoother version of the same thing
|
|
39
41
|
}
|
|
40
42
|
|
|
41
43
|
return {
|
|
@@ -197,6 +199,7 @@ class MockChartModel extends ChartModel {
|
|
|
197
199
|
this.fireUpdate(this.data);
|
|
198
200
|
}
|
|
199
201
|
}
|
|
202
|
+
_defineProperty(MockChartModel, "random", Math.random.bind(Math));
|
|
200
203
|
_defineProperty(MockChartModel, "smoothing", 1.5);
|
|
201
204
|
_defineProperty(MockChartModel, "_theme", void 0);
|
|
202
205
|
export default MockChartModel;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MockChartModel.js","names":["ChartModel","defaultChartTheme","ChartUtils","MockChartModel","theme","_theme","makeRandomSeries","offset","scale","arguments","length","undefined","steps","dates","values","smooth","linear","startDate","Date","i","date","getFullYear","getMonth","getDate","push","concat","v","Math","sin","cos","random","smoothing","round","x","y","s","l","makeScatter","series","name","type","mode","hoverinfo","marker","size","makeArea","fill","line","color","area_color","width","makeTrendline","dash","trend_color","makeErrorBand","erroryforward","errorybackward","value","errory","reverse","slice","fillcolor","error_band_fill_color","error_band_line_color","shape","makeLine","line_color","makeRandomData","series1","areaPattern","trendLine","series2","errorBand","makeDefaultLayout","dh","layout","title","xaxis","yaxis","constructor","data","filterFields","_defineProperty","getData","getLayout","getFilterColumnMap","map","Map","set","isFilterRequired","setFilter","fireUpdate"],"sources":["../src/MockChartModel.ts"],"sourcesContent":["/* eslint-disable @typescript-eslint/explicit-module-boundary-types */\n// eslint-disable-next-line @typescript-eslint/ban-ts-comment\n\nimport type { dh as DhType } from '@deephaven/jsapi-types';\nimport type { Datum, Layout, PlotData } from 'plotly.js';\nimport ChartModel from './ChartModel';\nimport { ChartTheme, defaultChartTheme } from './ChartTheme';\nimport ChartUtils from './ChartUtils';\n\ninterface Series {\n x: PlotData['x'];\n y: PlotData['y'];\n s: number[];\n l: number[];\n}\n\n/** Displays a basic random chart */\nclass MockChartModel extends ChartModel {\n static smoothing = 1.5;\n\n static _theme: ChartTheme;\n\n static get theme(): ChartTheme {\n /* eslint-disable no-underscore-dangle */\n if (MockChartModel._theme == null) {\n MockChartModel._theme = defaultChartTheme();\n }\n\n return MockChartModel._theme;\n /* eslint-enable no-underscore-dangle */\n }\n\n static makeRandomSeries(offset: number, scale = 1, steps = 100): Series {\n const dates = [];\n const values = [];\n const smooth = [];\n const linear = [];\n const startDate = new Date();\n\n for (let i = 0; i < steps; i += 1) {\n const date = new Date(\n startDate.getFullYear(),\n startDate.getMonth(),\n startDate.getDate() + i - steps\n );\n dates.push(\n `${date.getFullYear()}-${date.getMonth() + 1}-${date.getDate()}`\n );\n let v =\n ((Math.sin((i / steps) * offset) * steps) / 3 +\n (Math.cos(i * 0.2) * steps) / 6 +\n (Math.sin(i * 0.5) * steps) / 10 +\n (Math.random() * steps) / 5 +\n i * MockChartModel.smoothing) *\n scale;\n v = Math.round(v * 100) / 100; // 2 decimals only\n // using steps acts as amplititude scaling based on value\n // large sine wave for course shape + small sine waves for bumpiness +\n // general randomness noise + index to be constantly up and to the right + smoothing factor\n values.push(v);\n linear.push(40 + i * MockChartModel.smoothing);\n smooth.push(\n (Math.sin((i / steps) * offset) * steps) / 3 +\n (Math.random() * steps) / 10 +\n i * MockChartModel.smoothing\n ); // push a smoother version of the same thing\n }\n\n return { x: dates, y: values, s: smooth, l: linear };\n }\n\n static makeScatter(series: Series): Partial<PlotData> {\n return {\n name: 'SCTR',\n x: series.x,\n y: series.y,\n type: 'scatter',\n mode: 'markers',\n hoverinfo: 'skip',\n marker: {\n size: 5,\n },\n };\n }\n\n static makeArea(series: Series): Partial<PlotData> {\n return {\n name: 'AREA',\n x: series.x,\n y: series.s,\n type: 'scatter',\n mode: 'line' as PlotData['mode'],\n fill: 'tozeroy',\n hoverinfo: 'all',\n line: {\n color: MockChartModel.theme.area_color,\n width: 3,\n // area patten gets applied as hack in post render plot.ly callback + css\n },\n };\n }\n\n static makeTrendline(series: Series): Partial<PlotData> {\n return {\n // we probably want to toss the line formula in legend I guess? either that or render it as text manually on plot\n name: 'Trendline <br>R<sup>2</sup> = 0.91',\n x: series.x,\n y: series.l,\n type: 'scatter',\n mode: 'line' as PlotData['mode'],\n hoverinfo: 'skip',\n line: {\n width: 3,\n dash: 'dot', // trendlines should follow some sort of color convention + dots/dashed. Remember there can multiple\n color: MockChartModel.theme.trend_color,\n // chroma(c.$green).brighten(1.2).hex()\n },\n };\n }\n\n static makeErrorBand(series: Series): Partial<PlotData> {\n // generate continouous error bands values and text\n const erroryforward = [];\n const errorybackward = [];\n for (let i = 0; i < series.y.length; i += 1) {\n const value = series.y[i] as number;\n erroryforward[i] = Math.round((value + 18) * 100) / 100;\n errorybackward[i] = Math.round((value - 18) * 100) / 100;\n }\n\n // makes a closed shape of points winding clockwise for y values\n const errory = erroryforward.concat(errorybackward.reverse());\n\n return {\n name: 'error',\n x: (series.x as Datum[]).concat((series.x as Datum[]).slice().reverse()), // winding for x values, that slice just clones so reverse doesn't apply inplace\n y: errory,\n type: 'scatter',\n mode: 'line' as PlotData['mode'],\n hoverinfo: 'skip',\n fill: 'toself', // there's some ordering bug with scattergl where if the areas traces are ordered after the lines they don't render\n fillcolor: MockChartModel.theme.error_band_fill_color,\n line: {\n width: 0,\n color: MockChartModel.theme.error_band_line_color,\n shape: 'spline',\n },\n };\n }\n\n static makeLine(series: Series): Partial<PlotData> {\n return {\n name: 'LINE',\n x: series.x,\n y: series.y,\n type: 'scatter',\n mode: 'line' as PlotData['mode'],\n hoverinfo: 'x+y+text+name' as PlotData['hoverinfo'],\n line: {\n color: MockChartModel.theme.line_color,\n width: 3,\n },\n };\n }\n\n static makeRandomData(): Partial<PlotData>[] {\n const series1 = MockChartModel.makeRandomSeries(6);\n const areaPattern = MockChartModel.makeArea(series1);\n const trendLine = MockChartModel.makeTrendline(series1);\n\n const series2 = MockChartModel.makeRandomSeries(2);\n const line = MockChartModel.makeLine(series2);\n const errorBand = MockChartModel.makeErrorBand(series2);\n\n return [areaPattern, trendLine, line, errorBand];\n }\n\n static makeDefaultLayout(dh: DhType): Partial<Layout> {\n const layout = new ChartUtils(dh).makeDefaultLayout(MockChartModel.theme);\n layout.title = 'Chart';\n\n if (layout.xaxis) {\n layout.xaxis.title = 'Datestamp';\n }\n\n if (layout.yaxis) {\n layout.yaxis.title = 'Price';\n }\n\n return layout;\n }\n\n constructor(\n dh: DhType,\n {\n data = MockChartModel.makeRandomData(),\n layout = MockChartModel.makeDefaultLayout(dh),\n filterFields = [],\n } = {}\n ) {\n super(dh);\n\n this.data = data;\n this.layout = layout;\n this.filterFields = filterFields;\n }\n\n data: Partial<PlotData>[];\n\n filterFields: string[];\n\n layout: Partial<Layout>;\n\n getData(): Partial<PlotData>[] {\n return this.data;\n }\n\n getLayout(): Partial<Layout> {\n return this.layout;\n }\n\n getFilterColumnMap(): Map<string, { name: string; type: string }> {\n const map = new Map();\n\n for (let i = 0; i < this.filterFields.length; i += 1) {\n const name = this.filterFields[i];\n const type = 'java.lang.String';\n map.set(name, { name, type });\n }\n\n return map;\n }\n\n isFilterRequired(): boolean {\n return this.filterFields.length > 0;\n }\n\n setFilter(): void {\n this.fireUpdate(this.data);\n }\n}\n\nexport default MockChartModel;\n"],"mappings":";;;AAAA;AACA;AAAA,OAIOA,UAAU;AAAA,SACIC,iBAAiB;AAAA,OAC/BC,UAAU;AASjB;AACA,MAAMC,cAAc,SAASH,UAAU,CAAC;EAKtC,WAAWI,KAAKA,CAAA,EAAe;IAC7B;IACA,IAAID,cAAc,CAACE,MAAM,IAAI,IAAI,EAAE;MACjCF,cAAc,CAACE,MAAM,GAAGJ,iBAAiB,CAAC,CAAC;IAC7C;IAEA,OAAOE,cAAc,CAACE,MAAM;IAC5B;EACF;;EAEA,OAAOC,gBAAgBA,CAACC,MAAc,EAAkC;IAAA,IAAhCC,KAAK,GAAAC,SAAA,CAAAC,MAAA,QAAAD,SAAA,QAAAE,SAAA,GAAAF,SAAA,MAAG,CAAC;IAAA,IAAEG,KAAK,GAAAH,SAAA,CAAAC,MAAA,QAAAD,SAAA,QAAAE,SAAA,GAAAF,SAAA,MAAG,GAAG;IAC5D,IAAMI,KAAK,GAAG,EAAE;IAChB,IAAMC,MAAM,GAAG,EAAE;IACjB,IAAMC,MAAM,GAAG,EAAE;IACjB,IAAMC,MAAM,GAAG,EAAE;IACjB,IAAMC,SAAS,GAAG,IAAIC,IAAI,CAAC,CAAC;IAE5B,KAAK,IAAIC,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGP,KAAK,EAAEO,CAAC,IAAI,CAAC,EAAE;MACjC,IAAMC,IAAI,GAAG,IAAIF,IAAI,CACnBD,SAAS,CAACI,WAAW,CAAC,CAAC,EACvBJ,SAAS,CAACK,QAAQ,CAAC,CAAC,EACpBL,SAAS,CAACM,OAAO,CAAC,CAAC,GAAGJ,CAAC,GAAGP,KAC5B,CAAC;MACDC,KAAK,CAACW,IAAI,IAAAC,MAAA,CACLL,IAAI,CAACC,WAAW,CAAC,CAAC,OAAAI,MAAA,CAAIL,IAAI,CAACE,QAAQ,CAAC,CAAC,GAAG,CAAC,OAAAG,MAAA,CAAIL,IAAI,CAACG,OAAO,CAAC,CAAC,CAChE,CAAC;MACD,IAAIG,CAAC,GACH,CAAEC,IAAI,CAACC,GAAG,CAAET,CAAC,GAAGP,KAAK,GAAIL,MAAM,CAAC,GAAGK,KAAK,GAAI,CAAC,GAC1Ce,IAAI,CAACE,GAAG,CAACV,CAAC,GAAG,GAAG,CAAC,GAAGP,KAAK,GAAI,CAAC,GAC9Be,IAAI,CAACC,GAAG,CAACT,CAAC,GAAG,GAAG,CAAC,GAAGP,KAAK,GAAI,EAAE,GAC/Be,IAAI,CAACG,MAAM,CAAC,CAAC,GAAGlB,KAAK,GAAI,CAAC,GAC3BO,CAAC,GAAGhB,cAAc,CAAC4B,SAAS,IAC9BvB,KAAK;MACPkB,CAAC,GAAGC,IAAI,CAACK,KAAK,CAACN,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,CAAC;MAC/B;MACA;MACA;MACAZ,MAAM,CAACU,IAAI,CAACE,CAAC,CAAC;MACdV,MAAM,CAACQ,IAAI,CAAC,EAAE,GAAGL,CAAC,GAAGhB,cAAc,CAAC4B,SAAS,CAAC;MAC9ChB,MAAM,CAACS,IAAI,CACRG,IAAI,CAACC,GAAG,CAAET,CAAC,GAAGP,KAAK,GAAIL,MAAM,CAAC,GAAGK,KAAK,GAAI,CAAC,GACzCe,IAAI,CAACG,MAAM,CAAC,CAAC,GAAGlB,KAAK,GAAI,EAAE,GAC5BO,CAAC,GAAGhB,cAAc,CAAC4B,SACvB,CAAC,CAAC,CAAC;IACL;;IAEA,OAAO;MAAEE,CAAC,EAAEpB,KAAK;MAAEqB,CAAC,EAAEpB,MAAM;MAAEqB,CAAC,EAAEpB,MAAM;MAAEqB,CAAC,EAAEpB;IAAO,CAAC;EACtD;EAEA,OAAOqB,WAAWA,CAACC,MAAc,EAAqB;IACpD,OAAO;MACLC,IAAI,EAAE,MAAM;MACZN,CAAC,EAAEK,MAAM,CAACL,CAAC;MACXC,CAAC,EAAEI,MAAM,CAACJ,CAAC;MACXM,IAAI,EAAE,SAAS;MACfC,IAAI,EAAE,SAAS;MACfC,SAAS,EAAE,MAAM;MACjBC,MAAM,EAAE;QACNC,IAAI,EAAE;MACR;IACF,CAAC;EACH;EAEA,OAAOC,QAAQA,CAACP,MAAc,EAAqB;IACjD,OAAO;MACLC,IAAI,EAAE,MAAM;MACZN,CAAC,EAAEK,MAAM,CAACL,CAAC;MACXC,CAAC,EAAEI,MAAM,CAACH,CAAC;MACXK,IAAI,EAAE,SAAS;MACfC,IAAI,EAAE,MAA0B;MAChCK,IAAI,EAAE,SAAS;MACfJ,SAAS,EAAE,KAAK;MAChBK,IAAI,EAAE;QACJC,KAAK,EAAE7C,cAAc,CAACC,KAAK,CAAC6C,UAAU;QACtCC,KAAK,EAAE;QACP;MACF;IACF,CAAC;EACH;;EAEA,OAAOC,aAAaA,CAACb,MAAc,EAAqB;IACtD,OAAO;MACL;MACAC,IAAI,EAAE,oCAAoC;MAC1CN,CAAC,EAAEK,MAAM,CAACL,CAAC;MACXC,CAAC,EAAEI,MAAM,CAACF,CAAC;MACXI,IAAI,EAAE,SAAS;MACfC,IAAI,EAAE,MAA0B;MAChCC,SAAS,EAAE,MAAM;MACjBK,IAAI,EAAE;QACJG,KAAK,EAAE,CAAC;QACRE,IAAI,EAAE,KAAK;QAAE;QACbJ,KAAK,EAAE7C,cAAc,CAACC,KAAK,CAACiD;QAC5B;MACF;IACF,CAAC;EACH;;EAEA,OAAOC,aAAaA,CAAChB,MAAc,EAAqB;IACtD;IACA,IAAMiB,aAAa,GAAG,EAAE;IACxB,IAAMC,cAAc,GAAG,EAAE;IACzB,KAAK,IAAIrC,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGmB,MAAM,CAACJ,CAAC,CAACxB,MAAM,EAAES,CAAC,IAAI,CAAC,EAAE;MAC3C,IAAMsC,KAAK,GAAGnB,MAAM,CAACJ,CAAC,CAACf,CAAC,CAAW;MACnCoC,aAAa,CAACpC,CAAC,CAAC,GAAGQ,IAAI,CAACK,KAAK,CAAC,CAACyB,KAAK,GAAG,EAAE,IAAI,GAAG,CAAC,GAAG,GAAG;MACvDD,cAAc,CAACrC,CAAC,CAAC,GAAGQ,IAAI,CAACK,KAAK,CAAC,CAACyB,KAAK,GAAG,EAAE,IAAI,GAAG,CAAC,GAAG,GAAG;IAC1D;;IAEA;IACA,IAAMC,MAAM,GAAGH,aAAa,CAAC9B,MAAM,CAAC+B,cAAc,CAACG,OAAO,CAAC,CAAC,CAAC;IAE7D,OAAO;MACLpB,IAAI,EAAE,OAAO;MACbN,CAAC,EAAGK,MAAM,CAACL,CAAC,CAAaR,MAAM,CAAEa,MAAM,CAACL,CAAC,CAAa2B,KAAK,CAAC,CAAC,CAACD,OAAO,CAAC,CAAC,CAAC;MAAE;MAC1EzB,CAAC,EAAEwB,MAAM;MACTlB,IAAI,EAAE,SAAS;MACfC,IAAI,EAAE,MAA0B;MAChCC,SAAS,EAAE,MAAM;MACjBI,IAAI,EAAE,QAAQ;MAAE;MAChBe,SAAS,EAAE1D,cAAc,CAACC,KAAK,CAAC0D,qBAAqB;MACrDf,IAAI,EAAE;QACJG,KAAK,EAAE,CAAC;QACRF,KAAK,EAAE7C,cAAc,CAACC,KAAK,CAAC2D,qBAAqB;QACjDC,KAAK,EAAE;MACT;IACF,CAAC;EACH;EAEA,OAAOC,QAAQA,CAAC3B,MAAc,EAAqB;IACjD,OAAO;MACLC,IAAI,EAAE,MAAM;MACZN,CAAC,EAAEK,MAAM,CAACL,CAAC;MACXC,CAAC,EAAEI,MAAM,CAACJ,CAAC;MACXM,IAAI,EAAE,SAAS;MACfC,IAAI,EAAE,MAA0B;MAChCC,SAAS,EAAE,eAAwC;MACnDK,IAAI,EAAE;QACJC,KAAK,EAAE7C,cAAc,CAACC,KAAK,CAAC8D,UAAU;QACtChB,KAAK,EAAE;MACT;IACF,CAAC;EACH;EAEA,OAAOiB,cAAcA,CAAA,EAAwB;IAC3C,IAAMC,OAAO,GAAGjE,cAAc,CAACG,gBAAgB,CAAC,CAAC,CAAC;IAClD,IAAM+D,WAAW,GAAGlE,cAAc,CAAC0C,QAAQ,CAACuB,OAAO,CAAC;IACpD,IAAME,SAAS,GAAGnE,cAAc,CAACgD,aAAa,CAACiB,OAAO,CAAC;IAEvD,IAAMG,OAAO,GAAGpE,cAAc,CAACG,gBAAgB,CAAC,CAAC,CAAC;IAClD,IAAMyC,IAAI,GAAG5C,cAAc,CAAC8D,QAAQ,CAACM,OAAO,CAAC;IAC7C,IAAMC,SAAS,GAAGrE,cAAc,CAACmD,aAAa,CAACiB,OAAO,CAAC;IAEvD,OAAO,CAACF,WAAW,EAAEC,SAAS,EAAEvB,IAAI,EAAEyB,SAAS,CAAC;EAClD;EAEA,OAAOC,iBAAiBA,CAACC,EAAU,EAAmB;IACpD,IAAMC,MAAM,GAAG,IAAIzE,UAAU,CAACwE,EAAE,CAAC,CAACD,iBAAiB,CAACtE,cAAc,CAACC,KAAK,CAAC;IACzEuE,MAAM,CAACC,KAAK,GAAG,OAAO;IAEtB,IAAID,MAAM,CAACE,KAAK,EAAE;MAChBF,MAAM,CAACE,KAAK,CAACD,KAAK,GAAG,WAAW;IAClC;IAEA,IAAID,MAAM,CAACG,KAAK,EAAE;MAChBH,MAAM,CAACG,KAAK,CAACF,KAAK,GAAG,OAAO;IAC9B;IAEA,OAAOD,MAAM;EACf;EAEAI,WAAWA,CACTL,EAAU,EAMV;IAAA,IALA;MACEM,IAAI,GAAG7E,cAAc,CAACgE,cAAc,CAAC,CAAC;MACtCQ,MAAM,GAAGxE,cAAc,CAACsE,iBAAiB,CAACC,EAAE,CAAC;MAC7CO,YAAY,GAAG;IACjB,CAAC,GAAAxE,SAAA,CAAAC,MAAA,QAAAD,SAAA,QAAAE,SAAA,GAAAF,SAAA,MAAG,CAAC,CAAC;IAEN,KAAK,CAACiE,EAAE,CAAC;IAACQ,eAAA;IAAAA,eAAA;IAAAA,eAAA;IAEV,IAAI,CAACF,IAAI,GAAGA,IAAI;IAChB,IAAI,CAACL,MAAM,GAAGA,MAAM;IACpB,IAAI,CAACM,YAAY,GAAGA,YAAY;EAClC;EAQAE,OAAOA,CAAA,EAAwB;IAC7B,OAAO,IAAI,CAACH,IAAI;EAClB;EAEAI,SAASA,CAAA,EAAoB;IAC3B,OAAO,IAAI,CAACT,MAAM;EACpB;EAEAU,kBAAkBA,CAAA,EAAgD;IAChE,IAAMC,GAAG,GAAG,IAAIC,GAAG,CAAC,CAAC;IAErB,KAAK,IAAIpE,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAG,IAAI,CAAC8D,YAAY,CAACvE,MAAM,EAAES,CAAC,IAAI,CAAC,EAAE;MACpD,IAAMoB,IAAI,GAAG,IAAI,CAAC0C,YAAY,CAAC9D,CAAC,CAAC;MACjC,IAAMqB,IAAI,GAAG,kBAAkB;MAC/B8C,GAAG,CAACE,GAAG,CAACjD,IAAI,EAAE;QAAEA,IAAI;QAAEC;MAAK,CAAC,CAAC;IAC/B;IAEA,OAAO8C,GAAG;EACZ;EAEAG,gBAAgBA,CAAA,EAAY;IAC1B,OAAO,IAAI,CAACR,YAAY,CAACvE,MAAM,GAAG,CAAC;EACrC;EAEAgF,SAASA,CAAA,EAAS;IAChB,IAAI,CAACC,UAAU,CAAC,IAAI,CAACX,IAAI,CAAC;EAC5B;AACF;AAACE,eAAA,CA/NK/E,cAAc,eACC,GAAG;AAAA+E,eAAA,CADlB/E,cAAc;AAiOpB,eAAeA,cAAc"}
|
|
1
|
+
{"version":3,"file":"MockChartModel.js","names":["ChartModel","defaultChartTheme","ChartUtils","MockChartModel","theme","_theme","makeRandomSeries","offset","scale","arguments","length","undefined","steps","dates","values","smooth","linear","startDate","Date","i","date","getFullYear","getMonth","getDate","push","concat","v","Math","sin","cos","random","smoothing","round","x","y","s","l","makeScatter","series","name","type","mode","hoverinfo","marker","size","makeArea","fill","line","color","area_color","width","makeTrendline","dash","trend_color","makeErrorBand","erroryforward","errorybackward","value","errory","reverse","slice","fillcolor","error_band_fill_color","error_band_line_color","shape","makeLine","line_color","makeRandomData","series1","areaPattern","trendLine","series2","errorBand","makeDefaultLayout","dh","layout","title","xaxis","yaxis","constructor","data","filterFields","_defineProperty","getData","getLayout","getFilterColumnMap","map","Map","set","isFilterRequired","setFilter","fireUpdate","bind"],"sources":["../src/MockChartModel.ts"],"sourcesContent":["/* eslint-disable @typescript-eslint/explicit-module-boundary-types */\n// eslint-disable-next-line @typescript-eslint/ban-ts-comment\n\nimport type { dh as DhType } from '@deephaven/jsapi-types';\nimport type { Datum, Layout, PlotData } from 'plotly.js';\nimport ChartModel from './ChartModel';\nimport { ChartTheme, defaultChartTheme } from './ChartTheme';\nimport ChartUtils from './ChartUtils';\n\ninterface Series {\n x: PlotData['x'];\n y: PlotData['y'];\n s: number[];\n l: number[];\n}\n\n/** Displays a basic random chart */\nclass MockChartModel extends ChartModel {\n static random: () => number = Math.random.bind(Math);\n\n static smoothing = 1.5;\n\n static _theme: ChartTheme;\n\n static get theme(): ChartTheme {\n /* eslint-disable no-underscore-dangle */\n if (MockChartModel._theme == null) {\n MockChartModel._theme = defaultChartTheme();\n }\n\n return MockChartModel._theme;\n /* eslint-enable no-underscore-dangle */\n }\n\n static makeRandomSeries(offset: number, scale = 1, steps = 100): Series {\n const dates = [];\n const values = [];\n const smooth = [];\n const linear = [];\n\n // Setting to a fixed seed date so that e2e tests can be deterministic.\n const startDate = new Date('2018-06-01');\n\n for (let i = 0; i < steps; i += 1) {\n const date = new Date(\n startDate.getFullYear(),\n startDate.getMonth(),\n startDate.getDate() + i - steps\n );\n dates.push(\n `${date.getFullYear()}-${date.getMonth() + 1}-${date.getDate()}`\n );\n let v =\n ((Math.sin((i / steps) * offset) * steps) / 3 +\n (Math.cos(i * 0.2) * steps) / 6 +\n (Math.sin(i * 0.5) * steps) / 10 +\n (MockChartModel.random() * steps) / 5 +\n i * MockChartModel.smoothing) *\n scale;\n v = Math.round(v * 100) / 100; // 2 decimals only\n // using steps acts as amplititude scaling based on value\n // large sine wave for course shape + small sine waves for bumpiness +\n // general randomness noise + index to be constantly up and to the right + smoothing factor\n values.push(v);\n linear.push(40 + i * MockChartModel.smoothing);\n smooth.push(\n (Math.sin((i / steps) * offset) * steps) / 3 +\n (MockChartModel.random() * steps) / 10 +\n i * MockChartModel.smoothing\n ); // push a smoother version of the same thing\n }\n\n return { x: dates, y: values, s: smooth, l: linear };\n }\n\n static makeScatter(series: Series): Partial<PlotData> {\n return {\n name: 'SCTR',\n x: series.x,\n y: series.y,\n type: 'scatter',\n mode: 'markers',\n hoverinfo: 'skip',\n marker: {\n size: 5,\n },\n };\n }\n\n static makeArea(series: Series): Partial<PlotData> {\n return {\n name: 'AREA',\n x: series.x,\n y: series.s,\n type: 'scatter',\n mode: 'line' as PlotData['mode'],\n fill: 'tozeroy',\n hoverinfo: 'all',\n line: {\n color: MockChartModel.theme.area_color,\n width: 3,\n // area patten gets applied as hack in post render plot.ly callback + css\n },\n };\n }\n\n static makeTrendline(series: Series): Partial<PlotData> {\n return {\n // we probably want to toss the line formula in legend I guess? either that or render it as text manually on plot\n name: 'Trendline <br>R<sup>2</sup> = 0.91',\n x: series.x,\n y: series.l,\n type: 'scatter',\n mode: 'line' as PlotData['mode'],\n hoverinfo: 'skip',\n line: {\n width: 3,\n dash: 'dot', // trendlines should follow some sort of color convention + dots/dashed. Remember there can multiple\n color: MockChartModel.theme.trend_color,\n // chroma(c.$green).brighten(1.2).hex()\n },\n };\n }\n\n static makeErrorBand(series: Series): Partial<PlotData> {\n // generate continouous error bands values and text\n const erroryforward = [];\n const errorybackward = [];\n for (let i = 0; i < series.y.length; i += 1) {\n const value = series.y[i] as number;\n erroryforward[i] = Math.round((value + 18) * 100) / 100;\n errorybackward[i] = Math.round((value - 18) * 100) / 100;\n }\n\n // makes a closed shape of points winding clockwise for y values\n const errory = erroryforward.concat(errorybackward.reverse());\n\n return {\n name: 'error',\n x: (series.x as Datum[]).concat((series.x as Datum[]).slice().reverse()), // winding for x values, that slice just clones so reverse doesn't apply inplace\n y: errory,\n type: 'scatter',\n mode: 'line' as PlotData['mode'],\n hoverinfo: 'skip',\n fill: 'toself', // there's some ordering bug with scattergl where if the areas traces are ordered after the lines they don't render\n fillcolor: MockChartModel.theme.error_band_fill_color,\n line: {\n width: 0,\n color: MockChartModel.theme.error_band_line_color,\n shape: 'spline',\n },\n };\n }\n\n static makeLine(series: Series): Partial<PlotData> {\n return {\n name: 'LINE',\n x: series.x,\n y: series.y,\n type: 'scatter',\n mode: 'line' as PlotData['mode'],\n hoverinfo: 'x+y+text+name' as PlotData['hoverinfo'],\n line: {\n color: MockChartModel.theme.line_color,\n width: 3,\n },\n };\n }\n\n static makeRandomData(): Partial<PlotData>[] {\n const series1 = MockChartModel.makeRandomSeries(6);\n const areaPattern = MockChartModel.makeArea(series1);\n const trendLine = MockChartModel.makeTrendline(series1);\n\n const series2 = MockChartModel.makeRandomSeries(2);\n const line = MockChartModel.makeLine(series2);\n const errorBand = MockChartModel.makeErrorBand(series2);\n\n return [areaPattern, trendLine, line, errorBand];\n }\n\n static makeDefaultLayout(dh: DhType): Partial<Layout> {\n const layout = new ChartUtils(dh).makeDefaultLayout(MockChartModel.theme);\n layout.title = 'Chart';\n\n if (layout.xaxis) {\n layout.xaxis.title = 'Datestamp';\n }\n\n if (layout.yaxis) {\n layout.yaxis.title = 'Price';\n }\n\n return layout;\n }\n\n constructor(\n dh: DhType,\n {\n data = MockChartModel.makeRandomData(),\n layout = MockChartModel.makeDefaultLayout(dh),\n filterFields = [],\n } = {}\n ) {\n super(dh);\n\n this.data = data;\n this.layout = layout;\n this.filterFields = filterFields;\n }\n\n data: Partial<PlotData>[];\n\n filterFields: string[];\n\n layout: Partial<Layout>;\n\n getData(): Partial<PlotData>[] {\n return this.data;\n }\n\n getLayout(): Partial<Layout> {\n return this.layout;\n }\n\n getFilterColumnMap(): Map<string, { name: string; type: string }> {\n const map = new Map();\n\n for (let i = 0; i < this.filterFields.length; i += 1) {\n const name = this.filterFields[i];\n const type = 'java.lang.String';\n map.set(name, { name, type });\n }\n\n return map;\n }\n\n isFilterRequired(): boolean {\n return this.filterFields.length > 0;\n }\n\n setFilter(): void {\n this.fireUpdate(this.data);\n }\n}\n\nexport default MockChartModel;\n"],"mappings":";;;AAAA;AACA;AAAA,OAIOA,UAAU;AAAA,SACIC,iBAAiB;AAAA,OAC/BC,UAAU;AASjB;AACA,MAAMC,cAAc,SAASH,UAAU,CAAC;EAOtC,WAAWI,KAAKA,CAAA,EAAe;IAC7B;IACA,IAAID,cAAc,CAACE,MAAM,IAAI,IAAI,EAAE;MACjCF,cAAc,CAACE,MAAM,GAAGJ,iBAAiB,CAAC,CAAC;IAC7C;IAEA,OAAOE,cAAc,CAACE,MAAM;IAC5B;EACF;;EAEA,OAAOC,gBAAgBA,CAACC,MAAc,EAAkC;IAAA,IAAhCC,KAAK,GAAAC,SAAA,CAAAC,MAAA,QAAAD,SAAA,QAAAE,SAAA,GAAAF,SAAA,MAAG,CAAC;IAAA,IAAEG,KAAK,GAAAH,SAAA,CAAAC,MAAA,QAAAD,SAAA,QAAAE,SAAA,GAAAF,SAAA,MAAG,GAAG;IAC5D,IAAMI,KAAK,GAAG,EAAE;IAChB,IAAMC,MAAM,GAAG,EAAE;IACjB,IAAMC,MAAM,GAAG,EAAE;IACjB,IAAMC,MAAM,GAAG,EAAE;;IAEjB;IACA,IAAMC,SAAS,GAAG,IAAIC,IAAI,CAAC,YAAY,CAAC;IAExC,KAAK,IAAIC,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGP,KAAK,EAAEO,CAAC,IAAI,CAAC,EAAE;MACjC,IAAMC,IAAI,GAAG,IAAIF,IAAI,CACnBD,SAAS,CAACI,WAAW,CAAC,CAAC,EACvBJ,SAAS,CAACK,QAAQ,CAAC,CAAC,EACpBL,SAAS,CAACM,OAAO,CAAC,CAAC,GAAGJ,CAAC,GAAGP,KAC5B,CAAC;MACDC,KAAK,CAACW,IAAI,IAAAC,MAAA,CACLL,IAAI,CAACC,WAAW,CAAC,CAAC,OAAAI,MAAA,CAAIL,IAAI,CAACE,QAAQ,CAAC,CAAC,GAAG,CAAC,OAAAG,MAAA,CAAIL,IAAI,CAACG,OAAO,CAAC,CAAC,CAChE,CAAC;MACD,IAAIG,CAAC,GACH,CAAEC,IAAI,CAACC,GAAG,CAAET,CAAC,GAAGP,KAAK,GAAIL,MAAM,CAAC,GAAGK,KAAK,GAAI,CAAC,GAC1Ce,IAAI,CAACE,GAAG,CAACV,CAAC,GAAG,GAAG,CAAC,GAAGP,KAAK,GAAI,CAAC,GAC9Be,IAAI,CAACC,GAAG,CAACT,CAAC,GAAG,GAAG,CAAC,GAAGP,KAAK,GAAI,EAAE,GAC/BT,cAAc,CAAC2B,MAAM,CAAC,CAAC,GAAGlB,KAAK,GAAI,CAAC,GACrCO,CAAC,GAAGhB,cAAc,CAAC4B,SAAS,IAC9BvB,KAAK;MACPkB,CAAC,GAAGC,IAAI,CAACK,KAAK,CAACN,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,CAAC;MAC/B;MACA;MACA;MACAZ,MAAM,CAACU,IAAI,CAACE,CAAC,CAAC;MACdV,MAAM,CAACQ,IAAI,CAAC,EAAE,GAAGL,CAAC,GAAGhB,cAAc,CAAC4B,SAAS,CAAC;MAC9ChB,MAAM,CAACS,IAAI,CACRG,IAAI,CAACC,GAAG,CAAET,CAAC,GAAGP,KAAK,GAAIL,MAAM,CAAC,GAAGK,KAAK,GAAI,CAAC,GACzCT,cAAc,CAAC2B,MAAM,CAAC,CAAC,GAAGlB,KAAK,GAAI,EAAE,GACtCO,CAAC,GAAGhB,cAAc,CAAC4B,SACvB,CAAC,CAAC,CAAC;IACL;;IAEA,OAAO;MAAEE,CAAC,EAAEpB,KAAK;MAAEqB,CAAC,EAAEpB,MAAM;MAAEqB,CAAC,EAAEpB,MAAM;MAAEqB,CAAC,EAAEpB;IAAO,CAAC;EACtD;EAEA,OAAOqB,WAAWA,CAACC,MAAc,EAAqB;IACpD,OAAO;MACLC,IAAI,EAAE,MAAM;MACZN,CAAC,EAAEK,MAAM,CAACL,CAAC;MACXC,CAAC,EAAEI,MAAM,CAACJ,CAAC;MACXM,IAAI,EAAE,SAAS;MACfC,IAAI,EAAE,SAAS;MACfC,SAAS,EAAE,MAAM;MACjBC,MAAM,EAAE;QACNC,IAAI,EAAE;MACR;IACF,CAAC;EACH;EAEA,OAAOC,QAAQA,CAACP,MAAc,EAAqB;IACjD,OAAO;MACLC,IAAI,EAAE,MAAM;MACZN,CAAC,EAAEK,MAAM,CAACL,CAAC;MACXC,CAAC,EAAEI,MAAM,CAACH,CAAC;MACXK,IAAI,EAAE,SAAS;MACfC,IAAI,EAAE,MAA0B;MAChCK,IAAI,EAAE,SAAS;MACfJ,SAAS,EAAE,KAAK;MAChBK,IAAI,EAAE;QACJC,KAAK,EAAE7C,cAAc,CAACC,KAAK,CAAC6C,UAAU;QACtCC,KAAK,EAAE;QACP;MACF;IACF,CAAC;EACH;;EAEA,OAAOC,aAAaA,CAACb,MAAc,EAAqB;IACtD,OAAO;MACL;MACAC,IAAI,EAAE,oCAAoC;MAC1CN,CAAC,EAAEK,MAAM,CAACL,CAAC;MACXC,CAAC,EAAEI,MAAM,CAACF,CAAC;MACXI,IAAI,EAAE,SAAS;MACfC,IAAI,EAAE,MAA0B;MAChCC,SAAS,EAAE,MAAM;MACjBK,IAAI,EAAE;QACJG,KAAK,EAAE,CAAC;QACRE,IAAI,EAAE,KAAK;QAAE;QACbJ,KAAK,EAAE7C,cAAc,CAACC,KAAK,CAACiD;QAC5B;MACF;IACF,CAAC;EACH;;EAEA,OAAOC,aAAaA,CAAChB,MAAc,EAAqB;IACtD;IACA,IAAMiB,aAAa,GAAG,EAAE;IACxB,IAAMC,cAAc,GAAG,EAAE;IACzB,KAAK,IAAIrC,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGmB,MAAM,CAACJ,CAAC,CAACxB,MAAM,EAAES,CAAC,IAAI,CAAC,EAAE;MAC3C,IAAMsC,KAAK,GAAGnB,MAAM,CAACJ,CAAC,CAACf,CAAC,CAAW;MACnCoC,aAAa,CAACpC,CAAC,CAAC,GAAGQ,IAAI,CAACK,KAAK,CAAC,CAACyB,KAAK,GAAG,EAAE,IAAI,GAAG,CAAC,GAAG,GAAG;MACvDD,cAAc,CAACrC,CAAC,CAAC,GAAGQ,IAAI,CAACK,KAAK,CAAC,CAACyB,KAAK,GAAG,EAAE,IAAI,GAAG,CAAC,GAAG,GAAG;IAC1D;;IAEA;IACA,IAAMC,MAAM,GAAGH,aAAa,CAAC9B,MAAM,CAAC+B,cAAc,CAACG,OAAO,CAAC,CAAC,CAAC;IAE7D,OAAO;MACLpB,IAAI,EAAE,OAAO;MACbN,CAAC,EAAGK,MAAM,CAACL,CAAC,CAAaR,MAAM,CAAEa,MAAM,CAACL,CAAC,CAAa2B,KAAK,CAAC,CAAC,CAACD,OAAO,CAAC,CAAC,CAAC;MAAE;MAC1EzB,CAAC,EAAEwB,MAAM;MACTlB,IAAI,EAAE,SAAS;MACfC,IAAI,EAAE,MAA0B;MAChCC,SAAS,EAAE,MAAM;MACjBI,IAAI,EAAE,QAAQ;MAAE;MAChBe,SAAS,EAAE1D,cAAc,CAACC,KAAK,CAAC0D,qBAAqB;MACrDf,IAAI,EAAE;QACJG,KAAK,EAAE,CAAC;QACRF,KAAK,EAAE7C,cAAc,CAACC,KAAK,CAAC2D,qBAAqB;QACjDC,KAAK,EAAE;MACT;IACF,CAAC;EACH;EAEA,OAAOC,QAAQA,CAAC3B,MAAc,EAAqB;IACjD,OAAO;MACLC,IAAI,EAAE,MAAM;MACZN,CAAC,EAAEK,MAAM,CAACL,CAAC;MACXC,CAAC,EAAEI,MAAM,CAACJ,CAAC;MACXM,IAAI,EAAE,SAAS;MACfC,IAAI,EAAE,MAA0B;MAChCC,SAAS,EAAE,eAAwC;MACnDK,IAAI,EAAE;QACJC,KAAK,EAAE7C,cAAc,CAACC,KAAK,CAAC8D,UAAU;QACtChB,KAAK,EAAE;MACT;IACF,CAAC;EACH;EAEA,OAAOiB,cAAcA,CAAA,EAAwB;IAC3C,IAAMC,OAAO,GAAGjE,cAAc,CAACG,gBAAgB,CAAC,CAAC,CAAC;IAClD,IAAM+D,WAAW,GAAGlE,cAAc,CAAC0C,QAAQ,CAACuB,OAAO,CAAC;IACpD,IAAME,SAAS,GAAGnE,cAAc,CAACgD,aAAa,CAACiB,OAAO,CAAC;IAEvD,IAAMG,OAAO,GAAGpE,cAAc,CAACG,gBAAgB,CAAC,CAAC,CAAC;IAClD,IAAMyC,IAAI,GAAG5C,cAAc,CAAC8D,QAAQ,CAACM,OAAO,CAAC;IAC7C,IAAMC,SAAS,GAAGrE,cAAc,CAACmD,aAAa,CAACiB,OAAO,CAAC;IAEvD,OAAO,CAACF,WAAW,EAAEC,SAAS,EAAEvB,IAAI,EAAEyB,SAAS,CAAC;EAClD;EAEA,OAAOC,iBAAiBA,CAACC,EAAU,EAAmB;IACpD,IAAMC,MAAM,GAAG,IAAIzE,UAAU,CAACwE,EAAE,CAAC,CAACD,iBAAiB,CAACtE,cAAc,CAACC,KAAK,CAAC;IACzEuE,MAAM,CAACC,KAAK,GAAG,OAAO;IAEtB,IAAID,MAAM,CAACE,KAAK,EAAE;MAChBF,MAAM,CAACE,KAAK,CAACD,KAAK,GAAG,WAAW;IAClC;IAEA,IAAID,MAAM,CAACG,KAAK,EAAE;MAChBH,MAAM,CAACG,KAAK,CAACF,KAAK,GAAG,OAAO;IAC9B;IAEA,OAAOD,MAAM;EACf;EAEAI,WAAWA,CACTL,EAAU,EAMV;IAAA,IALA;MACEM,IAAI,GAAG7E,cAAc,CAACgE,cAAc,CAAC,CAAC;MACtCQ,MAAM,GAAGxE,cAAc,CAACsE,iBAAiB,CAACC,EAAE,CAAC;MAC7CO,YAAY,GAAG;IACjB,CAAC,GAAAxE,SAAA,CAAAC,MAAA,QAAAD,SAAA,QAAAE,SAAA,GAAAF,SAAA,MAAG,CAAC,CAAC;IAEN,KAAK,CAACiE,EAAE,CAAC;IAACQ,eAAA;IAAAA,eAAA;IAAAA,eAAA;IAEV,IAAI,CAACF,IAAI,GAAGA,IAAI;IAChB,IAAI,CAACL,MAAM,GAAGA,MAAM;IACpB,IAAI,CAACM,YAAY,GAAGA,YAAY;EAClC;EAQAE,OAAOA,CAAA,EAAwB;IAC7B,OAAO,IAAI,CAACH,IAAI;EAClB;EAEAI,SAASA,CAAA,EAAoB;IAC3B,OAAO,IAAI,CAACT,MAAM;EACpB;EAEAU,kBAAkBA,CAAA,EAAgD;IAChE,IAAMC,GAAG,GAAG,IAAIC,GAAG,CAAC,CAAC;IAErB,KAAK,IAAIpE,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAG,IAAI,CAAC8D,YAAY,CAACvE,MAAM,EAAES,CAAC,IAAI,CAAC,EAAE;MACpD,IAAMoB,IAAI,GAAG,IAAI,CAAC0C,YAAY,CAAC9D,CAAC,CAAC;MACjC,IAAMqB,IAAI,GAAG,kBAAkB;MAC/B8C,GAAG,CAACE,GAAG,CAACjD,IAAI,EAAE;QAAEA,IAAI;QAAEC;MAAK,CAAC,CAAC;IAC/B;IAEA,OAAO8C,GAAG;EACZ;EAEAG,gBAAgBA,CAAA,EAAY;IAC1B,OAAO,IAAI,CAACR,YAAY,CAACvE,MAAM,GAAG,CAAC;EACrC;EAEAgF,SAASA,CAAA,EAAS;IAChB,IAAI,CAACC,UAAU,CAAC,IAAI,CAACX,IAAI,CAAC;EAC5B;AACF;AAACE,eAAA,CAnOK/E,cAAc,YACYwB,IAAI,CAACG,MAAM,CAAC8D,IAAI,CAACjE,IAAI,CAAC;AAAAuD,eAAA,CADhD/E,cAAc,eAGC,GAAG;AAAA+E,eAAA,CAHlB/E,cAAc;AAqOpB,eAAeA,cAAc"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@deephaven/chart",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.55.0",
|
|
4
4
|
"description": "Deephaven Chart",
|
|
5
5
|
"author": "Deephaven Data Labs LLC",
|
|
6
6
|
"license": "Apache-2.0",
|
|
@@ -27,13 +27,13 @@
|
|
|
27
27
|
"build:sass": "sass --embed-sources --load-path=../../node_modules ./src:./dist"
|
|
28
28
|
},
|
|
29
29
|
"dependencies": {
|
|
30
|
-
"@deephaven/components": "^0.
|
|
31
|
-
"@deephaven/icons": "^0.
|
|
32
|
-
"@deephaven/jsapi-types": "^0.
|
|
33
|
-
"@deephaven/jsapi-utils": "^0.
|
|
34
|
-
"@deephaven/log": "^0.
|
|
35
|
-
"@deephaven/react-hooks": "^0.
|
|
36
|
-
"@deephaven/utils": "^0.
|
|
30
|
+
"@deephaven/components": "^0.55.0",
|
|
31
|
+
"@deephaven/icons": "^0.55.0",
|
|
32
|
+
"@deephaven/jsapi-types": "^0.55.0",
|
|
33
|
+
"@deephaven/jsapi-utils": "^0.55.0",
|
|
34
|
+
"@deephaven/log": "^0.55.0",
|
|
35
|
+
"@deephaven/react-hooks": "^0.55.0",
|
|
36
|
+
"@deephaven/utils": "^0.55.0",
|
|
37
37
|
"deep-equal": "^2.0.5",
|
|
38
38
|
"lodash.debounce": "^4.0.8",
|
|
39
39
|
"lodash.set": "^4.3.2",
|
|
@@ -47,8 +47,8 @@
|
|
|
47
47
|
"react": "^17.x"
|
|
48
48
|
},
|
|
49
49
|
"devDependencies": {
|
|
50
|
-
"@deephaven/jsapi-shim": "^0.
|
|
51
|
-
"@deephaven/mocks": "^0.
|
|
50
|
+
"@deephaven/jsapi-shim": "^0.55.0",
|
|
51
|
+
"@deephaven/mocks": "^0.55.0",
|
|
52
52
|
"@types/plotly.js": "^2.12.11"
|
|
53
53
|
},
|
|
54
54
|
"files": [
|
|
@@ -60,5 +60,5 @@
|
|
|
60
60
|
"publishConfig": {
|
|
61
61
|
"access": "public"
|
|
62
62
|
},
|
|
63
|
-
"gitHead": "
|
|
63
|
+
"gitHead": "c6c1e12a7c05ee082baf7def89e1e4f597f1e38a"
|
|
64
64
|
}
|