@deephaven/chart 0.22.3-beta.15 → 0.22.3-beta.21
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.js +11 -85
- package/dist/Chart.js.map +1 -1
- package/dist/ChartModel.js +7 -45
- package/dist/ChartModel.js.map +1 -1
- package/dist/ChartModelFactory.js +2 -9
- package/dist/ChartModelFactory.js.map +1 -1
- package/dist/ChartTestUtils.js +0 -14
- package/dist/ChartTestUtils.js.map +1 -1
- package/dist/ChartTheme.js.map +1 -1
- package/dist/ChartUtils.js +72 -273
- package/dist/ChartUtils.js.map +1 -1
- package/dist/FigureChartModel.d.ts +4 -4
- package/dist/FigureChartModel.d.ts.map +1 -1
- package/dist/FigureChartModel.js +24 -134
- package/dist/FigureChartModel.js.map +1 -1
- package/dist/MockChartModel.js +6 -27
- package/dist/MockChartModel.js.map +1 -1
- package/dist/index.js.map +1 -1
- package/dist/isFigureChartModel.js.map +1 -1
- package/dist/plotly/Plot.js +0 -1
- package/dist/plotly/Plot.js.map +1 -1
- package/dist/plotly/Plotly.js +3 -1
- package/dist/plotly/Plotly.js.map +1 -1
- package/package.json +9 -9
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FigureChartModel.js","names":["memoize","debounce","set","dh","Log","ChartModel","ChartUtils","ChartTheme","log","module","FigureChartModel","constructor","figure","settings","theme","axes","getAllAxes","pendingSeries","i","length","series","addSeries","subscribe","ADD_SERIES_DEBOUNCE","columnType","formatter","dataFormatter","getColumnTypeFormatter","dhTimeZone","timeZone","getTimeZone","value","unwrapValue","wrapValue","range","rangeStart","rangeEnd","valueParser","getValueParser","chart","axis","source","getSourceForAxis","getRangeParser","handleFigureUpdated","bind","handleFigureDisconnected","handleFigureReconnected","handleFigureSeriesAdded","handleDownsampleStart","handleDownsampleFinish","handleDownsampleFail","handleDownsampleNeeded","handleRequestFailed","data","template","layout","makeDefaultLayout","grid","rows","columns","cols","pattern","seriesDataMap","Map","oneClicks","filterColumnMap","lastFilter","isConnected","seriesToProcess","Set","setTitle","getDefaultTitle","initAllSeries","updateAxisPositions","startListeningFigure","close","addPendingSeries","cancel","stopListeningFigure","charts","title","clear","activeSeriesNames","j","push","name","allSeriesNames","keys","inactiveSeriesNames","filter","seriesName","indexOf","delete","axisTypeMap","groupArray","seriesData","makeSeriesDataFromSeries","getSeriesVisibility","values","plotStyle","plot","SeriesPlotStyle","STACKED_BAR","barmode","PIE","hiddenlabels","getHiddenLabels","showlegend","oneClick","updateLayoutFormats","callback","listeners","subscribeFigure","unsubscribe","unsubscribeFigure","debug","isDownsamplingDisabled","DownsampleOptions","DISABLE","DEFAULT","addEventListener","Figure","EVENT_UPDATED","EVENT_SERIES_ADDED","EVENT_DISCONNECT","EVENT_RECONNECT","EVENT_DOWNSAMPLESTARTED","EVENT_DOWNSAMPLEFINISHED","EVENT_DOWNSAMPLEFAILED","EVENT_DOWNSAMPLENEEDED","Client","EVENT_REQUEST_FAILED","removeEventListener","event","fireDownsampleStart","detail","fireDownsampleFinish","error","fireDownsampleFail","info","fireDownsampleNeeded","figureUpdateEvent","seriesArray","debug2","sources","type","valueTranslator","getValueTranslator","dataArray","getArray","setDataArrayForSeries","size","fireLoadFinished","cleanSeries","fireUpdate","resubscribe","setFormatter","setDownsamplingDisabled","fireDisconnect","fireReconnect","setDimensions","rect","subtitleCount","match","margin","DEFAULT_MARGIN","t","SUBTITLE_LINE_HEIGHT","text","pad","DEFAULT_TITLE_PADDING","getPlotWidth","width","Math","max","l","r","getPlotHeight","height","b","plotWidth","plotHeight","updateFigureAxes","getAxisRangeParser","axisFormats","getAxisFormats","forEach","axisFormat","axisLayoutProperty","props","Object","assign","sourceType","get","property","getPlotlyProperty","HISTOGRAM","xLow","xHigh","LINE","x","y","yLow","yHigh","error_x","getPlotlyErrorBars","error_y","TREEMAP","ids","labels","undefined","getData","getLayout","getFilterColumnMap","isFilterRequired","find","requireAllFiltersToDisplay","setFilter","filterMap","warn","key","column","setValueForColumn","setFigure","updateSettings"],"sources":["../src/FigureChartModel.ts"],"sourcesContent":["/* eslint class-methods-use-this: \"off\" */\nimport memoize from 'memoizee';\nimport debounce from 'lodash.debounce';\nimport set from 'lodash.set';\nimport dh, {\n Axis,\n Chart,\n Figure,\n OneClick,\n Series,\n SourceType,\n} from '@deephaven/jsapi-shim';\nimport Log from '@deephaven/log';\nimport { Range } from '@deephaven/utils';\nimport { Layout, PlotData } from 'plotly.js';\nimport { Formatter } from '@deephaven/jsapi-utils';\nimport ChartModel, { ChartEvent, FilterColumnMap } from './ChartModel';\nimport ChartUtils, { AxisTypeMap, ChartModelSettings } from './ChartUtils';\nimport ChartTheme from './ChartTheme';\n\nconst log = Log.module('FigureChartModel');\n\n/**\n * Takes a Figure object from a widget to make a model for a chart\n */\nclass FigureChartModel extends ChartModel {\n static ADD_SERIES_DEBOUNCE = 50;\n\n /**\n * @param figure The figure object created by the API\n * @param settings Chart settings\n */\n constructor(\n figure: Figure,\n settings: Partial<ChartModelSettings> = {},\n theme: typeof ChartTheme = ChartTheme\n ) {\n super();\n\n this.handleFigureUpdated = this.handleFigureUpdated.bind(this);\n this.handleFigureDisconnected = this.handleFigureDisconnected.bind(this);\n this.handleFigureReconnected = this.handleFigureReconnected.bind(this);\n this.handleFigureSeriesAdded = this.handleFigureSeriesAdded.bind(this);\n this.handleDownsampleStart = this.handleDownsampleStart.bind(this);\n this.handleDownsampleFinish = this.handleDownsampleFinish.bind(this);\n this.handleDownsampleFail = this.handleDownsampleFail.bind(this);\n this.handleDownsampleNeeded = this.handleDownsampleNeeded.bind(this);\n this.handleRequestFailed = this.handleRequestFailed.bind(this);\n\n this.figure = figure;\n this.settings = settings;\n this.theme = theme;\n this.data = [];\n const template = { data: {}, layout: ChartUtils.makeDefaultLayout(theme) };\n this.layout = {\n grid: {\n rows: figure.rows,\n columns: figure.cols,\n pattern: 'independent',\n },\n template,\n };\n this.seriesDataMap = new Map();\n this.pendingSeries = [];\n this.oneClicks = [];\n this.filterColumnMap = new Map();\n this.lastFilter = new Map();\n this.isConnected = true; // Assume figure is connected to start\n this.seriesToProcess = new Set();\n\n this.setTitle(this.getDefaultTitle());\n this.initAllSeries();\n this.updateAxisPositions();\n this.startListeningFigure();\n }\n\n figure: Figure;\n\n settings: Partial<ChartModelSettings>;\n\n theme: typeof ChartTheme;\n\n data: Partial<PlotData>[];\n\n layout: Partial<Layout>;\n\n seriesDataMap: Map<\n string,\n Partial<PlotData> & {\n xLow?: number[];\n xHigh?: number[];\n yLow?: number[];\n yHigh?: number[];\n }\n >;\n\n pendingSeries: Series[];\n\n oneClicks: OneClick[];\n\n filterColumnMap: FilterColumnMap;\n\n lastFilter: Map<string, string>;\n\n isConnected: boolean; // Assume figure is connected to start\n\n seriesToProcess;\n\n close(): void {\n this.figure.close();\n this.addPendingSeries.cancel();\n this.stopListeningFigure();\n }\n\n getDefaultTitle(): string {\n if (this.figure.charts.length > 0) {\n const chart = this.figure.charts[0];\n return chart.title;\n }\n\n return '';\n }\n\n initAllSeries(): void {\n this.oneClicks = [];\n this.filterColumnMap.clear();\n\n const { charts } = this.figure;\n const axes = ChartUtils.getAllAxes(this.figure);\n const activeSeriesNames: string[] = [];\n for (let i = 0; i < charts.length; i += 1) {\n const chart = charts[i];\n\n for (let j = 0; j < chart.series.length; j += 1) {\n const series = chart.series[j];\n activeSeriesNames.push(series.name);\n this.addSeries(series, axes);\n }\n }\n\n // Remove any series that no longer exist\n const allSeriesNames = [...this.seriesDataMap.keys()];\n const inactiveSeriesNames = allSeriesNames.filter(\n seriesName => activeSeriesNames.indexOf(seriesName) < 0\n );\n for (let i = 0; i < inactiveSeriesNames.length; i += 1) {\n const seriesName = inactiveSeriesNames[i];\n this.seriesDataMap.delete(seriesName);\n }\n this.seriesToProcess = new Set([...this.seriesDataMap.keys()]);\n }\n\n /**\n * Add a series to the model\n * @param series Series object to add\n * @param axes All the axis in this figure\n */\n addSeries(series: Series, axes: Axis[]): void {\n const axisTypeMap: AxisTypeMap = ChartUtils.groupArray(axes, 'type');\n\n const seriesData = ChartUtils.makeSeriesDataFromSeries(\n series,\n axisTypeMap,\n ChartUtils.getSeriesVisibility(series.name, this.settings),\n this.theme\n );\n\n this.seriesDataMap.set(series.name, seriesData);\n\n this.data = [...this.seriesDataMap.values()];\n\n if (series.plotStyle === dh.plot.SeriesPlotStyle.STACKED_BAR) {\n this.layout.barmode = 'stack';\n } else if (series.plotStyle === dh.plot.SeriesPlotStyle.PIE) {\n this.layout.hiddenlabels = ChartUtils.getHiddenLabels(this.settings);\n }\n\n this.layout.showlegend =\n this.data.length > 1 || series.plotStyle === dh.plot.SeriesPlotStyle.PIE;\n\n if (series.oneClick != null) {\n const { oneClick } = series;\n const { columns } = oneClick;\n for (let i = 0; i < columns.length; i += 1) {\n this.filterColumnMap.set(columns[i].name, columns[i]);\n }\n\n this.oneClicks.push(oneClick);\n }\n\n this.updateLayoutFormats();\n }\n\n // We need to debounce adding series so we subscribe to them all in the same tick\n // This should no longer be necessary after IDS-5049 lands\n addPendingSeries = debounce(() => {\n const axes = ChartUtils.getAllAxes(this.figure);\n const { pendingSeries } = this;\n for (let i = 0; i < pendingSeries.length; i += 1) {\n const series = pendingSeries[i];\n this.addSeries(series, axes);\n\n series.subscribe();\n // We'll get an update with the data after subscribing\n }\n\n this.pendingSeries = [];\n }, FigureChartModel.ADD_SERIES_DEBOUNCE);\n\n subscribe(callback: (event: ChartEvent) => void): void {\n super.subscribe(callback);\n\n if (this.listeners.length === 1) {\n // Need to initialize the series here as we may have missed some series when not subscribed\n this.initAllSeries();\n this.subscribeFigure();\n }\n }\n\n unsubscribe(callback: (event: ChartEvent) => void): void {\n super.unsubscribe(callback);\n\n if (this.listeners.length === 0) {\n this.unsubscribeFigure();\n }\n }\n\n subscribeFigure(): void {\n if (!this.isConnected) {\n log.debug('Ignoring subscribe when figure in disconnected state');\n return;\n }\n\n this.figure.subscribe(\n this.isDownsamplingDisabled\n ? dh.plot.DownsampleOptions.DISABLE\n : dh.plot.DownsampleOptions.DEFAULT\n );\n }\n\n unsubscribeFigure(): void {\n this.figure.unsubscribe();\n }\n\n startListeningFigure(): void {\n this.figure.addEventListener(\n dh.plot.Figure.EVENT_UPDATED,\n this.handleFigureUpdated\n );\n this.figure.addEventListener(\n dh.plot.Figure.EVENT_SERIES_ADDED,\n this.handleFigureSeriesAdded\n );\n this.figure.addEventListener(\n dh.plot.Figure.EVENT_DISCONNECT,\n this.handleFigureDisconnected\n );\n this.figure.addEventListener(\n dh.plot.Figure.EVENT_RECONNECT,\n this.handleFigureReconnected\n );\n this.figure.addEventListener(\n dh.plot.Figure.EVENT_DOWNSAMPLESTARTED,\n this.handleDownsampleStart\n );\n this.figure.addEventListener(\n dh.plot.Figure.EVENT_DOWNSAMPLEFINISHED,\n this.handleDownsampleFinish\n );\n this.figure.addEventListener(\n dh.plot.Figure.EVENT_DOWNSAMPLEFAILED,\n this.handleDownsampleFail\n );\n this.figure.addEventListener(\n dh.plot.Figure.EVENT_DOWNSAMPLENEEDED,\n this.handleDownsampleNeeded\n );\n this.figure.addEventListener(\n dh.Client.EVENT_REQUEST_FAILED,\n this.handleRequestFailed\n );\n }\n\n stopListeningFigure(): void {\n this.figure.removeEventListener(\n dh.plot.Figure.EVENT_UPDATED,\n this.handleFigureUpdated\n );\n this.figure.removeEventListener(\n dh.plot.Figure.EVENT_SERIES_ADDED,\n this.handleFigureSeriesAdded\n );\n this.figure.removeEventListener(\n dh.plot.Figure.EVENT_DISCONNECT,\n this.handleFigureDisconnected\n );\n this.figure.removeEventListener(\n dh.plot.Figure.EVENT_RECONNECT,\n this.handleFigureReconnected\n );\n this.figure.removeEventListener(\n dh.plot.Figure.EVENT_DOWNSAMPLESTARTED,\n this.handleDownsampleStart\n );\n this.figure.removeEventListener(\n dh.plot.Figure.EVENT_DOWNSAMPLEFINISHED,\n this.handleDownsampleFinish\n );\n this.figure.removeEventListener(\n dh.plot.Figure.EVENT_DOWNSAMPLEFAILED,\n this.handleDownsampleFail\n );\n this.figure.removeEventListener(\n dh.plot.Figure.EVENT_DOWNSAMPLENEEDED,\n this.handleDownsampleNeeded\n );\n this.figure.removeEventListener(\n dh.Client.EVENT_REQUEST_FAILED,\n this.handleRequestFailed\n );\n }\n\n getTimeZone = memoize((columnType, formatter) => {\n if (formatter != null) {\n const dataFormatter = formatter.getColumnTypeFormatter(columnType);\n if (dataFormatter != null) {\n return dataFormatter.dhTimeZone;\n }\n }\n return null;\n });\n\n getValueTranslator = memoize((columnType, formatter) => {\n const timeZone = this.getTimeZone(columnType, formatter);\n return (value: unknown) => ChartUtils.unwrapValue(value, timeZone);\n });\n\n /** Gets the parser for a value with the provided column type */\n getValueParser = memoize((columnType, formatter) => {\n const timeZone = this.getTimeZone(columnType, formatter);\n return (value: unknown) =>\n ChartUtils.wrapValue(value, columnType, timeZone);\n });\n\n /**\n * Gets the range parser for a particular column type\n */\n getRangeParser = memoize(\n (columnType: string, formatter?: Formatter) => (range: Range) => {\n let [rangeStart, rangeEnd]: [unknown, unknown] = range;\n const valueParser = this.getValueParser(columnType, formatter);\n rangeStart = valueParser(rangeStart);\n rangeEnd = valueParser(rangeEnd);\n return [rangeStart, rangeEnd];\n }\n );\n\n /**\n * Gets the parser for parsing the range from an axis within the given chart\n */\n getAxisRangeParser = memoize(\n (chart: Chart, formatter?: Formatter) => (axis: Axis) => {\n const source = ChartUtils.getSourceForAxis(chart, axis);\n if (source) {\n return this.getRangeParser(source.columnType, formatter);\n }\n\n return (range: [unknown, unknown]) => range;\n }\n );\n\n handleDownsampleStart(event: ChartEvent): void {\n log.debug('Downsample started', event);\n\n this.fireDownsampleStart(event.detail);\n }\n\n handleDownsampleFinish(event: ChartEvent): void {\n log.debug('Downsample finished', event);\n\n this.fireDownsampleFinish(event.detail);\n }\n\n handleDownsampleFail(event: ChartEvent): void {\n log.error('Downsample failed', event);\n\n this.fireDownsampleFail(event.detail);\n }\n\n handleDownsampleNeeded(event: ChartEvent): void {\n log.info('Downsample needed', event);\n\n this.fireDownsampleNeeded(event.detail);\n }\n\n handleFigureUpdated(event: ChartEvent): void {\n const { detail: figureUpdateEvent } = event;\n const { series: seriesArray } = figureUpdateEvent;\n\n log.debug2('handleFigureUpdated', seriesArray);\n\n for (let i = 0; i < seriesArray.length; i += 1) {\n const series = seriesArray[i];\n\n log.debug2('handleFigureUpdated updating series', series.name);\n\n const { sources } = series;\n for (let j = 0; j < sources.length; j += 1) {\n const source = sources[j];\n const { columnType, type } = source;\n const valueTranslator = this.getValueTranslator(\n columnType,\n this.formatter\n );\n const dataArray = figureUpdateEvent.getArray(\n series,\n type,\n valueTranslator\n );\n this.setDataArrayForSeries(series, type, dataArray);\n }\n\n this.seriesToProcess.delete(series.name);\n if (this.seriesToProcess.size === 0) {\n this.fireLoadFinished();\n }\n\n this.cleanSeries(series);\n }\n\n const { data } = this;\n this.fireUpdate(data);\n }\n\n handleRequestFailed(event: ChartEvent): void {\n log.error('Request failed', event);\n }\n\n /**\n * Resubscribe to the figure, should be done if settings change\n */\n resubscribe(): void {\n if (this.listeners.length > 0) {\n this.unsubscribeFigure();\n this.subscribeFigure();\n }\n }\n\n setFormatter(formatter: Formatter): void {\n super.setFormatter(formatter);\n\n this.updateLayoutFormats();\n\n // Unsubscribe and resubscribe to trigger a data update\n // Data may need to be translated again because of the new formatter\n this.resubscribe();\n }\n\n setDownsamplingDisabled(isDownsamplingDisabled: boolean): void {\n super.setDownsamplingDisabled(isDownsamplingDisabled);\n\n this.resubscribe();\n }\n\n handleFigureDisconnected(event: CustomEvent): void {\n log.debug('Figure disconnected', event);\n\n this.isConnected = false;\n\n if (this.listeners.length > 0) {\n this.unsubscribeFigure();\n }\n\n this.fireDisconnect();\n }\n\n handleFigureReconnected(event: CustomEvent): void {\n log.debug('Figure reconnected', event);\n\n this.isConnected = true;\n\n // It's possible the series have changed completely, as the query could have been changed\n this.initAllSeries();\n\n this.fireReconnect();\n\n if (this.listeners.length > 0) {\n this.subscribeFigure();\n }\n }\n\n handleFigureSeriesAdded(event: { detail: Series }): void {\n const { detail: series } = event;\n log.debug('handleFigureSeriesAdded', series);\n\n this.pendingSeries.push(series);\n this.addPendingSeries();\n }\n\n setDimensions(rect: DOMRect): void {\n super.setDimensions(rect);\n\n this.updateAxisPositions();\n }\n\n setTitle(title: string): void {\n super.setTitle(title);\n\n // Need to recalculate the padding based on how many lines of text the title is\n // Plotly doesn't handle positioning it correctly, and it's an undocumented feature\n const subtitleCount = (title ?? '').match(/<br>/g)?.length ?? 0;\n const margin =\n ChartUtils.DEFAULT_MARGIN.t +\n subtitleCount * ChartUtils.SUBTITLE_LINE_HEIGHT;\n\n if (this.layout.margin) {\n this.layout.margin.t = margin;\n } else {\n this.layout.margin = { t: margin };\n }\n\n if (typeof this.layout.title === 'string') {\n this.layout.title = title;\n } else {\n this.layout.title = { ...this.layout.title };\n this.layout.title.text = title;\n this.layout.title.pad = { ...this.layout.title.pad };\n this.layout.title.pad.t =\n ChartUtils.DEFAULT_TITLE_PADDING.t +\n subtitleCount * ChartUtils.SUBTITLE_LINE_HEIGHT * 0.5;\n }\n }\n\n getPlotWidth(): number {\n if (!this.rect || !this.rect.width) {\n return 0;\n }\n\n return Math.max(\n this.rect.width -\n (this.layout.margin?.l ?? 0) -\n (this.layout.margin?.r ?? 0),\n 0\n );\n }\n\n getPlotHeight(): number {\n if (!this.rect || !this.rect.height) {\n return 0;\n }\n\n return Math.max(\n this.rect.height -\n (this.layout.margin?.t ?? 0) -\n (this.layout.margin?.b ?? 0),\n 0\n );\n }\n\n updateAxisPositions(): void {\n const plotWidth = this.getPlotWidth();\n const plotHeight = this.getPlotHeight();\n ChartUtils.updateFigureAxes(\n this.layout,\n this.figure,\n chart => this.getAxisRangeParser(chart, this.formatter),\n plotWidth,\n plotHeight,\n this.theme\n );\n }\n\n /**\n * Updates the format patterns used\n */\n updateLayoutFormats(): void {\n if (!this.formatter) {\n return;\n }\n\n const axisFormats = ChartUtils.getAxisFormats(this.figure, this.formatter);\n axisFormats.forEach((axisFormat, axisLayoutProperty) => {\n log.debug(\n `Assigning ${axisLayoutProperty}`,\n this.layout[axisLayoutProperty],\n axisFormat\n );\n\n const props = this.layout[axisLayoutProperty];\n if (props != null) {\n Object.assign(props, axisFormat);\n } else {\n log.debug(`Ignoring null layout.${axisLayoutProperty}`);\n }\n });\n }\n\n /**\n * Set a specific array for the array of series properties specified.\n * @param series The series to set the data array for.\n * @param sourceType The source type within that series to set the data for.\n * @param dataArray The array to use for the data for this series source.\n */\n setDataArrayForSeries(\n series: Series,\n sourceType: SourceType,\n dataArray: unknown[]\n ): void {\n const { name, plotStyle } = series;\n\n const seriesData = this.seriesDataMap.get(name);\n const property = ChartUtils.getPlotlyProperty(plotStyle, sourceType);\n\n if (seriesData) {\n set(seriesData, property, dataArray);\n }\n }\n\n /**\n * After setting all the data in the series data, we may need to adjust some other properties\n * Eg. Calculating the width from the xLow/xHigh values; Plot.ly uses `width` instead of a low/high\n * value for x.\n * @param series The series to clean the data for\n */\n cleanSeries(series: Series): void {\n const { name, plotStyle } = series;\n const seriesData = this.seriesDataMap.get(name);\n if (seriesData == null) {\n return;\n }\n if (plotStyle === dh.plot.SeriesPlotStyle.HISTOGRAM) {\n const { xLow, xHigh } = seriesData;\n if (xLow && xHigh && xLow.length === xHigh.length) {\n const width = [];\n for (let i = 0; i < xLow.length; i += 1) {\n width.push(xHigh[i] - xLow[i]);\n }\n seriesData.width = width;\n }\n } else if (plotStyle === dh.plot.SeriesPlotStyle.LINE) {\n const { x, xLow, xHigh, y, yLow, yHigh } = seriesData;\n if (xLow && xHigh && xLow !== x) {\n seriesData.error_x = ChartUtils.getPlotlyErrorBars(\n x as number[],\n xLow,\n xHigh\n );\n }\n if (yLow && yHigh && yLow !== y) {\n seriesData.error_y = ChartUtils.getPlotlyErrorBars(\n y as number[],\n yLow,\n yHigh\n );\n }\n } else if (plotStyle === dh.plot.SeriesPlotStyle.TREEMAP) {\n const { ids, labels } = seriesData;\n if (ids !== undefined && labels === undefined) {\n // If the user only provided IDs, we assign the IDs to the labels property as well automatically\n // Plotly uses the labels primarily, which from our API perspective seems kind of backwards\n seriesData.labels = ids;\n }\n }\n }\n\n getData(): Partial<PlotData>[] {\n return this.data;\n }\n\n getLayout(): Partial<Layout> {\n return this.layout;\n }\n\n getFilterColumnMap(): FilterColumnMap {\n return new Map(this.filterColumnMap);\n }\n\n isFilterRequired(): boolean {\n return (\n this.oneClicks.find(oneClick => oneClick.requireAllFiltersToDisplay) !=\n null\n );\n }\n\n /**\n * Sets the filter on the model. Will only set the values that have changed.\n * @param filterMap Map of filter column names to values\n */\n setFilter(filterMap: Map<string, string>): void {\n if (this.oneClicks.length === 0) {\n log.warn('Trying to set a filter, but no one click!');\n return;\n }\n\n log.debug('setFilter', filterMap);\n\n for (let i = 0; i < this.oneClicks.length; i += 1) {\n const oneClick = this.oneClicks[i];\n const { columns } = oneClick;\n // Need to get all the keys in case a filter was removed\n const keys = new Set([...filterMap.keys(), ...this.lastFilter.keys()]);\n keys.forEach(key => {\n const value = filterMap.get(key);\n if (\n this.lastFilter.get(key) !== value &&\n columns.find(column => column.name === key) != null\n ) {\n oneClick.setValueForColumn(key, value);\n }\n });\n }\n\n this.lastFilter = new Map(filterMap);\n }\n\n setFigure(figure: Figure): void {\n this.close();\n\n this.figure = figure;\n\n this.setTitle(this.getDefaultTitle());\n this.initAllSeries();\n this.updateAxisPositions();\n this.startListeningFigure();\n if (this.listeners.length > 0) {\n this.subscribeFigure();\n }\n }\n\n updateSettings(settings: Partial<ChartModelSettings>): void {\n this.settings = settings;\n }\n}\n\nexport default FigureChartModel;\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"FigureChartModel.js","names":["memoize","debounce","set","dh","Log","ChartModel","ChartUtils","ChartTheme","log","module","FigureChartModel","constructor","figure","settings","theme","axes","getAllAxes","pendingSeries","i","length","series","addSeries","subscribe","ADD_SERIES_DEBOUNCE","columnType","formatter","dataFormatter","getColumnTypeFormatter","dhTimeZone","undefined","timeZone","getTimeZone","value","unwrapValue","wrapValue","range","rangeStart","rangeEnd","valueParser","getValueParser","chart","axis","source","getSourceForAxis","getRangeParser","handleFigureUpdated","bind","handleFigureDisconnected","handleFigureReconnected","handleFigureSeriesAdded","handleDownsampleStart","handleDownsampleFinish","handleDownsampleFail","handleDownsampleNeeded","handleRequestFailed","data","template","layout","makeDefaultLayout","grid","rows","columns","cols","pattern","seriesDataMap","Map","oneClicks","filterColumnMap","lastFilter","isConnected","seriesToProcess","Set","setTitle","getDefaultTitle","initAllSeries","updateAxisPositions","startListeningFigure","close","addPendingSeries","cancel","stopListeningFigure","charts","title","clear","activeSeriesNames","j","push","name","allSeriesNames","keys","inactiveSeriesNames","filter","seriesName","indexOf","delete","axisTypeMap","groupArray","seriesData","makeSeriesDataFromSeries","getSeriesVisibility","values","plotStyle","plot","SeriesPlotStyle","STACKED_BAR","barmode","PIE","hiddenlabels","getHiddenLabels","showlegend","oneClick","updateLayoutFormats","callback","listeners","subscribeFigure","unsubscribe","unsubscribeFigure","debug","isDownsamplingDisabled","DownsampleOptions","DISABLE","DEFAULT","addEventListener","Figure","EVENT_UPDATED","EVENT_SERIES_ADDED","EVENT_DISCONNECT","EVENT_RECONNECT","EVENT_DOWNSAMPLESTARTED","EVENT_DOWNSAMPLEFINISHED","EVENT_DOWNSAMPLEFAILED","EVENT_DOWNSAMPLENEEDED","Client","EVENT_REQUEST_FAILED","removeEventListener","event","fireDownsampleStart","detail","fireDownsampleFinish","error","fireDownsampleFail","info","fireDownsampleNeeded","figureUpdateEvent","seriesArray","debug2","sources","type","valueTranslator","getValueTranslator","dataArray","getArray","setDataArrayForSeries","size","fireLoadFinished","cleanSeries","fireUpdate","resubscribe","setFormatter","setDownsamplingDisabled","fireDisconnect","fireReconnect","setDimensions","rect","subtitleCount","match","margin","DEFAULT_MARGIN","t","SUBTITLE_LINE_HEIGHT","text","pad","DEFAULT_TITLE_PADDING","getPlotWidth","width","Math","max","l","r","getPlotHeight","height","b","plotWidth","plotHeight","updateFigureAxes","getAxisRangeParser","axisFormats","getAxisFormats","forEach","axisFormat","axisLayoutProperty","props","Object","assign","sourceType","get","property","getPlotlyProperty","HISTOGRAM","xLow","xHigh","LINE","x","y","yLow","yHigh","error_x","getPlotlyErrorBars","error_y","TREEMAP","ids","labels","getData","getLayout","getFilterColumnMap","isFilterRequired","find","requireAllFiltersToDisplay","setFilter","filterMap","warn","key","column","setValueForColumn","setFigure","updateSettings"],"sources":["../src/FigureChartModel.ts"],"sourcesContent":["/* eslint class-methods-use-this: \"off\" */\nimport memoize from 'memoizee';\nimport debounce from 'lodash.debounce';\nimport set from 'lodash.set';\nimport dh, {\n Axis,\n Chart,\n Figure,\n OneClick,\n Series,\n SourceType,\n} from '@deephaven/jsapi-shim';\nimport Log from '@deephaven/log';\nimport { Range } from '@deephaven/utils';\nimport { Layout, PlotData } from 'plotly.js';\nimport type {\n DateTimeColumnFormatter,\n Formatter,\n} from '@deephaven/jsapi-utils';\nimport ChartModel, { ChartEvent, FilterColumnMap } from './ChartModel';\nimport ChartUtils, { AxisTypeMap, ChartModelSettings } from './ChartUtils';\nimport ChartTheme from './ChartTheme';\n\nconst log = Log.module('FigureChartModel');\n\n/**\n * Takes a Figure object from a widget to make a model for a chart\n */\nclass FigureChartModel extends ChartModel {\n static ADD_SERIES_DEBOUNCE = 50;\n\n /**\n * @param figure The figure object created by the API\n * @param settings Chart settings\n */\n constructor(\n figure: Figure,\n settings: Partial<ChartModelSettings> = {},\n theme: typeof ChartTheme = ChartTheme\n ) {\n super();\n\n this.handleFigureUpdated = this.handleFigureUpdated.bind(this);\n this.handleFigureDisconnected = this.handleFigureDisconnected.bind(this);\n this.handleFigureReconnected = this.handleFigureReconnected.bind(this);\n this.handleFigureSeriesAdded = this.handleFigureSeriesAdded.bind(this);\n this.handleDownsampleStart = this.handleDownsampleStart.bind(this);\n this.handleDownsampleFinish = this.handleDownsampleFinish.bind(this);\n this.handleDownsampleFail = this.handleDownsampleFail.bind(this);\n this.handleDownsampleNeeded = this.handleDownsampleNeeded.bind(this);\n this.handleRequestFailed = this.handleRequestFailed.bind(this);\n\n this.figure = figure;\n this.settings = settings;\n this.theme = theme;\n this.data = [];\n const template = { data: {}, layout: ChartUtils.makeDefaultLayout(theme) };\n this.layout = {\n grid: {\n rows: figure.rows,\n columns: figure.cols,\n pattern: 'independent',\n },\n template,\n };\n this.seriesDataMap = new Map();\n this.pendingSeries = [];\n this.oneClicks = [];\n this.filterColumnMap = new Map();\n this.lastFilter = new Map();\n this.isConnected = true; // Assume figure is connected to start\n this.seriesToProcess = new Set();\n\n this.setTitle(this.getDefaultTitle());\n this.initAllSeries();\n this.updateAxisPositions();\n this.startListeningFigure();\n }\n\n figure: Figure;\n\n settings: Partial<ChartModelSettings>;\n\n theme: typeof ChartTheme;\n\n data: Partial<PlotData>[];\n\n layout: Partial<Layout>;\n\n seriesDataMap: Map<\n string,\n Partial<PlotData> & {\n xLow?: number[];\n xHigh?: number[];\n yLow?: number[];\n yHigh?: number[];\n }\n >;\n\n pendingSeries: Series[];\n\n oneClicks: OneClick[];\n\n filterColumnMap: FilterColumnMap;\n\n lastFilter: Map<string, string>;\n\n isConnected: boolean; // Assume figure is connected to start\n\n seriesToProcess;\n\n close(): void {\n this.figure.close();\n this.addPendingSeries.cancel();\n this.stopListeningFigure();\n }\n\n getDefaultTitle(): string {\n if (this.figure.charts.length > 0) {\n const chart = this.figure.charts[0];\n return chart.title;\n }\n\n return '';\n }\n\n initAllSeries(): void {\n this.oneClicks = [];\n this.filterColumnMap.clear();\n\n const { charts } = this.figure;\n const axes = ChartUtils.getAllAxes(this.figure);\n const activeSeriesNames: string[] = [];\n for (let i = 0; i < charts.length; i += 1) {\n const chart = charts[i];\n\n for (let j = 0; j < chart.series.length; j += 1) {\n const series = chart.series[j];\n activeSeriesNames.push(series.name);\n this.addSeries(series, axes);\n }\n }\n\n // Remove any series that no longer exist\n const allSeriesNames = [...this.seriesDataMap.keys()];\n const inactiveSeriesNames = allSeriesNames.filter(\n seriesName => activeSeriesNames.indexOf(seriesName) < 0\n );\n for (let i = 0; i < inactiveSeriesNames.length; i += 1) {\n const seriesName = inactiveSeriesNames[i];\n this.seriesDataMap.delete(seriesName);\n }\n this.seriesToProcess = new Set([...this.seriesDataMap.keys()]);\n }\n\n /**\n * Add a series to the model\n * @param series Series object to add\n * @param axes All the axis in this figure\n */\n addSeries(series: Series, axes: Axis[]): void {\n const axisTypeMap: AxisTypeMap = ChartUtils.groupArray(axes, 'type');\n\n const seriesData = ChartUtils.makeSeriesDataFromSeries(\n series,\n axisTypeMap,\n ChartUtils.getSeriesVisibility(series.name, this.settings),\n this.theme\n );\n\n this.seriesDataMap.set(series.name, seriesData);\n\n this.data = [...this.seriesDataMap.values()];\n\n if (series.plotStyle === dh.plot.SeriesPlotStyle.STACKED_BAR) {\n this.layout.barmode = 'stack';\n } else if (series.plotStyle === dh.plot.SeriesPlotStyle.PIE) {\n this.layout.hiddenlabels = ChartUtils.getHiddenLabels(this.settings);\n }\n\n this.layout.showlegend =\n this.data.length > 1 || series.plotStyle === dh.plot.SeriesPlotStyle.PIE;\n\n if (series.oneClick != null) {\n const { oneClick } = series;\n const { columns } = oneClick;\n for (let i = 0; i < columns.length; i += 1) {\n this.filterColumnMap.set(columns[i].name, columns[i]);\n }\n\n this.oneClicks.push(oneClick);\n }\n\n this.updateLayoutFormats();\n }\n\n // We need to debounce adding series so we subscribe to them all in the same tick\n // This should no longer be necessary after IDS-5049 lands\n addPendingSeries = debounce(() => {\n const axes = ChartUtils.getAllAxes(this.figure);\n const { pendingSeries } = this;\n for (let i = 0; i < pendingSeries.length; i += 1) {\n const series = pendingSeries[i];\n this.addSeries(series, axes);\n\n series.subscribe();\n // We'll get an update with the data after subscribing\n }\n\n this.pendingSeries = [];\n }, FigureChartModel.ADD_SERIES_DEBOUNCE);\n\n subscribe(callback: (event: ChartEvent) => void): void {\n super.subscribe(callback);\n\n if (this.listeners.length === 1) {\n // Need to initialize the series here as we may have missed some series when not subscribed\n this.initAllSeries();\n this.subscribeFigure();\n }\n }\n\n unsubscribe(callback: (event: ChartEvent) => void): void {\n super.unsubscribe(callback);\n\n if (this.listeners.length === 0) {\n this.unsubscribeFigure();\n }\n }\n\n subscribeFigure(): void {\n if (!this.isConnected) {\n log.debug('Ignoring subscribe when figure in disconnected state');\n return;\n }\n\n this.figure.subscribe(\n this.isDownsamplingDisabled\n ? dh.plot.DownsampleOptions.DISABLE\n : dh.plot.DownsampleOptions.DEFAULT\n );\n }\n\n unsubscribeFigure(): void {\n this.figure.unsubscribe();\n }\n\n startListeningFigure(): void {\n this.figure.addEventListener(\n dh.plot.Figure.EVENT_UPDATED,\n this.handleFigureUpdated\n );\n this.figure.addEventListener(\n dh.plot.Figure.EVENT_SERIES_ADDED,\n this.handleFigureSeriesAdded\n );\n this.figure.addEventListener(\n dh.plot.Figure.EVENT_DISCONNECT,\n this.handleFigureDisconnected\n );\n this.figure.addEventListener(\n dh.plot.Figure.EVENT_RECONNECT,\n this.handleFigureReconnected\n );\n this.figure.addEventListener(\n dh.plot.Figure.EVENT_DOWNSAMPLESTARTED,\n this.handleDownsampleStart\n );\n this.figure.addEventListener(\n dh.plot.Figure.EVENT_DOWNSAMPLEFINISHED,\n this.handleDownsampleFinish\n );\n this.figure.addEventListener(\n dh.plot.Figure.EVENT_DOWNSAMPLEFAILED,\n this.handleDownsampleFail\n );\n this.figure.addEventListener(\n dh.plot.Figure.EVENT_DOWNSAMPLENEEDED,\n this.handleDownsampleNeeded\n );\n this.figure.addEventListener(\n dh.Client.EVENT_REQUEST_FAILED,\n this.handleRequestFailed\n );\n }\n\n stopListeningFigure(): void {\n this.figure.removeEventListener(\n dh.plot.Figure.EVENT_UPDATED,\n this.handleFigureUpdated\n );\n this.figure.removeEventListener(\n dh.plot.Figure.EVENT_SERIES_ADDED,\n this.handleFigureSeriesAdded\n );\n this.figure.removeEventListener(\n dh.plot.Figure.EVENT_DISCONNECT,\n this.handleFigureDisconnected\n );\n this.figure.removeEventListener(\n dh.plot.Figure.EVENT_RECONNECT,\n this.handleFigureReconnected\n );\n this.figure.removeEventListener(\n dh.plot.Figure.EVENT_DOWNSAMPLESTARTED,\n this.handleDownsampleStart\n );\n this.figure.removeEventListener(\n dh.plot.Figure.EVENT_DOWNSAMPLEFINISHED,\n this.handleDownsampleFinish\n );\n this.figure.removeEventListener(\n dh.plot.Figure.EVENT_DOWNSAMPLEFAILED,\n this.handleDownsampleFail\n );\n this.figure.removeEventListener(\n dh.plot.Figure.EVENT_DOWNSAMPLENEEDED,\n this.handleDownsampleNeeded\n );\n this.figure.removeEventListener(\n dh.Client.EVENT_REQUEST_FAILED,\n this.handleRequestFailed\n );\n }\n\n getTimeZone = memoize(\n (columnType: string, formatter: Formatter | undefined) => {\n if (formatter != null) {\n const dataFormatter = formatter.getColumnTypeFormatter(columnType);\n if (dataFormatter != null) {\n return (dataFormatter as DateTimeColumnFormatter).dhTimeZone;\n }\n }\n return undefined;\n }\n );\n\n getValueTranslator = memoize(\n (columnType: string, formatter: Formatter | undefined) => {\n const timeZone = this.getTimeZone(columnType, formatter);\n return (value: unknown) => ChartUtils.unwrapValue(value, timeZone);\n }\n );\n\n /** Gets the parser for a value with the provided column type */\n getValueParser = memoize(\n (columnType: string, formatter: Formatter | undefined) => {\n const timeZone = this.getTimeZone(columnType, formatter);\n return (value: unknown) =>\n ChartUtils.wrapValue(value, columnType, timeZone);\n }\n );\n\n /**\n * Gets the range parser for a particular column type\n */\n getRangeParser = memoize(\n (columnType: string, formatter?: Formatter) => (range: Range) => {\n let [rangeStart, rangeEnd]: [unknown, unknown] = range;\n const valueParser = this.getValueParser(columnType, formatter);\n rangeStart = valueParser(rangeStart);\n rangeEnd = valueParser(rangeEnd);\n return [rangeStart, rangeEnd];\n }\n );\n\n /**\n * Gets the parser for parsing the range from an axis within the given chart\n */\n getAxisRangeParser = memoize(\n (chart: Chart, formatter?: Formatter) => (axis: Axis) => {\n const source = ChartUtils.getSourceForAxis(chart, axis);\n if (source) {\n return this.getRangeParser(source.columnType, formatter);\n }\n\n return (range: [unknown, unknown]) => range;\n }\n );\n\n handleDownsampleStart(event: ChartEvent): void {\n log.debug('Downsample started', event);\n\n this.fireDownsampleStart(event.detail);\n }\n\n handleDownsampleFinish(event: ChartEvent): void {\n log.debug('Downsample finished', event);\n\n this.fireDownsampleFinish(event.detail);\n }\n\n handleDownsampleFail(event: ChartEvent): void {\n log.error('Downsample failed', event);\n\n this.fireDownsampleFail(event.detail);\n }\n\n handleDownsampleNeeded(event: ChartEvent): void {\n log.info('Downsample needed', event);\n\n this.fireDownsampleNeeded(event.detail);\n }\n\n handleFigureUpdated(event: ChartEvent): void {\n const { detail: figureUpdateEvent } = event;\n const { series: seriesArray } = figureUpdateEvent;\n\n log.debug2('handleFigureUpdated', seriesArray);\n\n for (let i = 0; i < seriesArray.length; i += 1) {\n const series = seriesArray[i];\n\n log.debug2('handleFigureUpdated updating series', series.name);\n\n const { sources } = series;\n for (let j = 0; j < sources.length; j += 1) {\n const source = sources[j];\n const { columnType, type } = source;\n const valueTranslator = this.getValueTranslator(\n columnType,\n this.formatter\n );\n const dataArray = figureUpdateEvent.getArray(\n series,\n type,\n valueTranslator\n );\n this.setDataArrayForSeries(series, type, dataArray);\n }\n\n this.seriesToProcess.delete(series.name);\n if (this.seriesToProcess.size === 0) {\n this.fireLoadFinished();\n }\n\n this.cleanSeries(series);\n }\n\n const { data } = this;\n this.fireUpdate(data);\n }\n\n handleRequestFailed(event: ChartEvent): void {\n log.error('Request failed', event);\n }\n\n /**\n * Resubscribe to the figure, should be done if settings change\n */\n resubscribe(): void {\n if (this.listeners.length > 0) {\n this.unsubscribeFigure();\n this.subscribeFigure();\n }\n }\n\n setFormatter(formatter: Formatter): void {\n super.setFormatter(formatter);\n\n this.updateLayoutFormats();\n\n // Unsubscribe and resubscribe to trigger a data update\n // Data may need to be translated again because of the new formatter\n this.resubscribe();\n }\n\n setDownsamplingDisabled(isDownsamplingDisabled: boolean): void {\n super.setDownsamplingDisabled(isDownsamplingDisabled);\n\n this.resubscribe();\n }\n\n handleFigureDisconnected(event: CustomEvent): void {\n log.debug('Figure disconnected', event);\n\n this.isConnected = false;\n\n if (this.listeners.length > 0) {\n this.unsubscribeFigure();\n }\n\n this.fireDisconnect();\n }\n\n handleFigureReconnected(event: CustomEvent): void {\n log.debug('Figure reconnected', event);\n\n this.isConnected = true;\n\n // It's possible the series have changed completely, as the query could have been changed\n this.initAllSeries();\n\n this.fireReconnect();\n\n if (this.listeners.length > 0) {\n this.subscribeFigure();\n }\n }\n\n handleFigureSeriesAdded(event: { detail: Series }): void {\n const { detail: series } = event;\n log.debug('handleFigureSeriesAdded', series);\n\n this.pendingSeries.push(series);\n this.addPendingSeries();\n }\n\n setDimensions(rect: DOMRect): void {\n super.setDimensions(rect);\n\n this.updateAxisPositions();\n }\n\n setTitle(title: string): void {\n super.setTitle(title);\n\n // Need to recalculate the padding based on how many lines of text the title is\n // Plotly doesn't handle positioning it correctly, and it's an undocumented feature\n const subtitleCount = (title ?? '').match(/<br>/g)?.length ?? 0;\n const margin =\n ChartUtils.DEFAULT_MARGIN.t +\n subtitleCount * ChartUtils.SUBTITLE_LINE_HEIGHT;\n\n if (this.layout.margin) {\n this.layout.margin.t = margin;\n } else {\n this.layout.margin = { t: margin };\n }\n\n if (typeof this.layout.title === 'string') {\n this.layout.title = title;\n } else {\n this.layout.title = { ...this.layout.title };\n this.layout.title.text = title;\n this.layout.title.pad = { ...this.layout.title.pad };\n this.layout.title.pad.t =\n ChartUtils.DEFAULT_TITLE_PADDING.t +\n subtitleCount * ChartUtils.SUBTITLE_LINE_HEIGHT * 0.5;\n }\n }\n\n getPlotWidth(): number {\n if (!this.rect || !this.rect.width) {\n return 0;\n }\n\n return Math.max(\n this.rect.width -\n (this.layout.margin?.l ?? 0) -\n (this.layout.margin?.r ?? 0),\n 0\n );\n }\n\n getPlotHeight(): number {\n if (!this.rect || !this.rect.height) {\n return 0;\n }\n\n return Math.max(\n this.rect.height -\n (this.layout.margin?.t ?? 0) -\n (this.layout.margin?.b ?? 0),\n 0\n );\n }\n\n updateAxisPositions(): void {\n const plotWidth = this.getPlotWidth();\n const plotHeight = this.getPlotHeight();\n ChartUtils.updateFigureAxes(\n this.layout,\n this.figure,\n chart => this.getAxisRangeParser(chart, this.formatter),\n plotWidth,\n plotHeight,\n this.theme\n );\n }\n\n /**\n * Updates the format patterns used\n */\n updateLayoutFormats(): void {\n if (!this.formatter) {\n return;\n }\n\n const axisFormats = ChartUtils.getAxisFormats(this.figure, this.formatter);\n axisFormats.forEach((axisFormat, axisLayoutProperty) => {\n log.debug(\n `Assigning ${axisLayoutProperty}`,\n this.layout[axisLayoutProperty],\n axisFormat\n );\n\n const props = this.layout[axisLayoutProperty];\n if (props != null) {\n Object.assign(props, axisFormat);\n } else {\n log.debug(`Ignoring null layout.${axisLayoutProperty}`);\n }\n });\n }\n\n /**\n * Set a specific array for the array of series properties specified.\n * @param series The series to set the data array for.\n * @param sourceType The source type within that series to set the data for.\n * @param dataArray The array to use for the data for this series source.\n */\n setDataArrayForSeries(\n series: Series,\n sourceType: SourceType,\n dataArray: unknown[]\n ): void {\n const { name, plotStyle } = series;\n\n const seriesData = this.seriesDataMap.get(name);\n const property = ChartUtils.getPlotlyProperty(plotStyle, sourceType);\n\n if (seriesData) {\n set(seriesData, property, dataArray);\n }\n }\n\n /**\n * After setting all the data in the series data, we may need to adjust some other properties\n * Eg. Calculating the width from the xLow/xHigh values; Plot.ly uses `width` instead of a low/high\n * value for x.\n * @param series The series to clean the data for\n */\n cleanSeries(series: Series): void {\n const { name, plotStyle } = series;\n const seriesData = this.seriesDataMap.get(name);\n if (seriesData == null) {\n return;\n }\n if (plotStyle === dh.plot.SeriesPlotStyle.HISTOGRAM) {\n const { xLow, xHigh } = seriesData;\n if (xLow && xHigh && xLow.length === xHigh.length) {\n const width = [];\n for (let i = 0; i < xLow.length; i += 1) {\n width.push(xHigh[i] - xLow[i]);\n }\n seriesData.width = width;\n }\n } else if (plotStyle === dh.plot.SeriesPlotStyle.LINE) {\n const { x, xLow, xHigh, y, yLow, yHigh } = seriesData;\n if (xLow && xHigh && xLow !== x) {\n seriesData.error_x = ChartUtils.getPlotlyErrorBars(\n x as number[],\n xLow,\n xHigh\n );\n }\n if (yLow && yHigh && yLow !== y) {\n seriesData.error_y = ChartUtils.getPlotlyErrorBars(\n y as number[],\n yLow,\n yHigh\n );\n }\n } else if (plotStyle === dh.plot.SeriesPlotStyle.TREEMAP) {\n const { ids, labels } = seriesData;\n if (ids !== undefined && labels === undefined) {\n // If the user only provided IDs, we assign the IDs to the labels property as well automatically\n // Plotly uses the labels primarily, which from our API perspective seems kind of backwards\n seriesData.labels = ids;\n }\n }\n }\n\n getData(): Partial<PlotData>[] {\n return this.data;\n }\n\n getLayout(): Partial<Layout> {\n return this.layout;\n }\n\n getFilterColumnMap(): FilterColumnMap {\n return new Map(this.filterColumnMap);\n }\n\n isFilterRequired(): boolean {\n return (\n this.oneClicks.find(oneClick => oneClick.requireAllFiltersToDisplay) !=\n null\n );\n }\n\n /**\n * Sets the filter on the model. Will only set the values that have changed.\n * @param filterMap Map of filter column names to values\n */\n setFilter(filterMap: Map<string, string>): void {\n if (this.oneClicks.length === 0) {\n log.warn('Trying to set a filter, but no one click!');\n return;\n }\n\n log.debug('setFilter', filterMap);\n\n for (let i = 0; i < this.oneClicks.length; i += 1) {\n const oneClick = this.oneClicks[i];\n const { columns } = oneClick;\n // Need to get all the keys in case a filter was removed\n const keys = new Set([...filterMap.keys(), ...this.lastFilter.keys()]);\n keys.forEach(key => {\n const value = filterMap.get(key);\n if (\n this.lastFilter.get(key) !== value &&\n columns.find(column => column.name === key) != null\n ) {\n oneClick.setValueForColumn(key, value);\n }\n });\n }\n\n this.lastFilter = new Map(filterMap);\n }\n\n setFigure(figure: Figure): void {\n this.close();\n\n this.figure = figure;\n\n this.setTitle(this.getDefaultTitle());\n this.initAllSeries();\n this.updateAxisPositions();\n this.startListeningFigure();\n if (this.listeners.length > 0) {\n this.subscribeFigure();\n }\n }\n\n updateSettings(settings: Partial<ChartModelSettings>): void {\n this.settings = settings;\n }\n}\n\nexport default FigureChartModel;\n"],"mappings":"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"}
|
package/dist/MockChartModel.js
CHANGED
|
@@ -1,10 +1,8 @@
|
|
|
1
1
|
function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
|
|
2
|
-
|
|
3
2
|
import ChartModel from "./ChartModel.js";
|
|
4
3
|
import ChartTheme from "./ChartTheme.js";
|
|
5
4
|
import ChartUtils from "./ChartUtils.js";
|
|
6
5
|
/** Displays a basic random chark */
|
|
7
|
-
|
|
8
6
|
class MockChartModel extends ChartModel {
|
|
9
7
|
static makeRandomSeries(offset) {
|
|
10
8
|
var scale = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 1;
|
|
@@ -14,7 +12,6 @@ class MockChartModel extends ChartModel {
|
|
|
14
12
|
var smooth = [];
|
|
15
13
|
var linear = [];
|
|
16
14
|
var startDate = new Date();
|
|
17
|
-
|
|
18
15
|
for (var i = 0; i < steps; i += 1) {
|
|
19
16
|
var date = new Date(startDate.getFullYear(), startDate.getMonth(), startDate.getDate() + i - steps);
|
|
20
17
|
dates.push("".concat(date.getFullYear(), "-").concat(date.getMonth() + 1, "-").concat(date.getDate()));
|
|
@@ -23,7 +20,6 @@ class MockChartModel extends ChartModel {
|
|
|
23
20
|
// using steps acts as amplititude scaling based on value
|
|
24
21
|
// large sine wave for course shape + small sine waves for bumpiness +
|
|
25
22
|
// general randomness noise + index to be constantly up and to the right + smoothing factor
|
|
26
|
-
|
|
27
23
|
values.push(v);
|
|
28
24
|
linear.push(40 + i * MockChartModel.smoothing);
|
|
29
25
|
smooth.push(Math.sin(i / steps * offset) * steps / 3 + Math.random() * steps / 10 + i * MockChartModel.smoothing); // push a smoother version of the same thing
|
|
@@ -36,7 +32,6 @@ class MockChartModel extends ChartModel {
|
|
|
36
32
|
l: linear
|
|
37
33
|
};
|
|
38
34
|
}
|
|
39
|
-
|
|
40
35
|
static makeScatter(series) {
|
|
41
36
|
return {
|
|
42
37
|
name: 'SCTR',
|
|
@@ -50,7 +45,6 @@ class MockChartModel extends ChartModel {
|
|
|
50
45
|
}
|
|
51
46
|
};
|
|
52
47
|
}
|
|
53
|
-
|
|
54
48
|
static makeArea(series) {
|
|
55
49
|
return {
|
|
56
50
|
name: 'AREA',
|
|
@@ -62,8 +56,8 @@ class MockChartModel extends ChartModel {
|
|
|
62
56
|
hoverinfo: 'all',
|
|
63
57
|
line: {
|
|
64
58
|
color: ChartTheme.area_color,
|
|
65
|
-
width: 3
|
|
66
|
-
|
|
59
|
+
width: 3
|
|
60
|
+
// area patten gets applied as hack in post render plot.ly callback + css
|
|
67
61
|
}
|
|
68
62
|
};
|
|
69
63
|
}
|
|
@@ -81,8 +75,8 @@ class MockChartModel extends ChartModel {
|
|
|
81
75
|
width: 3,
|
|
82
76
|
dash: 'dot',
|
|
83
77
|
// trendlines should follow some sort of color convention + dots/dashed. Remember there can multiple
|
|
84
|
-
color: ChartTheme.trend_color
|
|
85
|
-
|
|
78
|
+
color: ChartTheme.trend_color
|
|
79
|
+
// chroma(c.$green).brighten(1.2).hex()
|
|
86
80
|
}
|
|
87
81
|
};
|
|
88
82
|
}
|
|
@@ -91,14 +85,13 @@ class MockChartModel extends ChartModel {
|
|
|
91
85
|
// generate continouous error bands values and text
|
|
92
86
|
var erroryforward = [];
|
|
93
87
|
var errorybackward = [];
|
|
94
|
-
|
|
95
88
|
for (var i = 0; i < series.y.length; i += 1) {
|
|
96
89
|
var value = series.y[i];
|
|
97
90
|
erroryforward[i] = Math.round((value + 18) * 100) / 100;
|
|
98
91
|
errorybackward[i] = Math.round((value - 18) * 100) / 100;
|
|
99
|
-
}
|
|
100
|
-
|
|
92
|
+
}
|
|
101
93
|
|
|
94
|
+
// makes a closed shape of points winding clockwise for y values
|
|
102
95
|
var errory = erroryforward.concat(errorybackward.reverse());
|
|
103
96
|
return {
|
|
104
97
|
name: 'error',
|
|
@@ -118,7 +111,6 @@ class MockChartModel extends ChartModel {
|
|
|
118
111
|
}
|
|
119
112
|
};
|
|
120
113
|
}
|
|
121
|
-
|
|
122
114
|
static makeLine(series) {
|
|
123
115
|
return {
|
|
124
116
|
name: 'LINE',
|
|
@@ -133,7 +125,6 @@ class MockChartModel extends ChartModel {
|
|
|
133
125
|
}
|
|
134
126
|
};
|
|
135
127
|
}
|
|
136
|
-
|
|
137
128
|
static makeRandomData() {
|
|
138
129
|
var series1 = MockChartModel.makeRandomSeries(6);
|
|
139
130
|
var areaPattern = MockChartModel.makeArea(series1);
|
|
@@ -143,7 +134,6 @@ class MockChartModel extends ChartModel {
|
|
|
143
134
|
var errorBand = MockChartModel.makeErrorBand(series2);
|
|
144
135
|
return [areaPattern, trendLine, line, errorBand];
|
|
145
136
|
}
|
|
146
|
-
|
|
147
137
|
static makeDefaultLayout() {
|
|
148
138
|
var layout = ChartUtils.makeDefaultLayout(ChartTheme);
|
|
149
139
|
layout.title = 'Chart';
|
|
@@ -151,7 +141,6 @@ class MockChartModel extends ChartModel {
|
|
|
151
141
|
layout.yaxis.title = 'Price';
|
|
152
142
|
return layout;
|
|
153
143
|
}
|
|
154
|
-
|
|
155
144
|
constructor() {
|
|
156
145
|
var {
|
|
157
146
|
data = MockChartModel.makeRandomData(),
|
|
@@ -163,18 +152,14 @@ class MockChartModel extends ChartModel {
|
|
|
163
152
|
this.layout = layout;
|
|
164
153
|
this.filterFields = filterFields;
|
|
165
154
|
}
|
|
166
|
-
|
|
167
155
|
getData() {
|
|
168
156
|
return this.data;
|
|
169
157
|
}
|
|
170
|
-
|
|
171
158
|
getLayout() {
|
|
172
159
|
return this.layout;
|
|
173
160
|
}
|
|
174
|
-
|
|
175
161
|
getFilterColumnMap() {
|
|
176
162
|
var map = new Map();
|
|
177
|
-
|
|
178
163
|
for (var i = 0; i < this.filterFields.length; i += 1) {
|
|
179
164
|
var name = this.filterFields[i];
|
|
180
165
|
var type = 'java.lang.String';
|
|
@@ -183,21 +168,15 @@ class MockChartModel extends ChartModel {
|
|
|
183
168
|
type
|
|
184
169
|
});
|
|
185
170
|
}
|
|
186
|
-
|
|
187
171
|
return map;
|
|
188
172
|
}
|
|
189
|
-
|
|
190
173
|
isFilterRequired() {
|
|
191
174
|
return this.filterFields.length > 0;
|
|
192
175
|
}
|
|
193
|
-
|
|
194
176
|
setFilter() {
|
|
195
177
|
this.fireUpdate(this.data);
|
|
196
178
|
}
|
|
197
|
-
|
|
198
179
|
}
|
|
199
|
-
|
|
200
180
|
_defineProperty(MockChartModel, "smoothing", 1.5);
|
|
201
|
-
|
|
202
181
|
export default MockChartModel;
|
|
203
182
|
//# sourceMappingURL=MockChartModel.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MockChartModel.js","names":["ChartModel","ChartTheme","ChartUtils","MockChartModel","makeRandomSeries","offset","scale","steps","dates","values","smooth","linear","startDate","Date","i","date","getFullYear","getMonth","getDate","push","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","length","value","errory","concat","reverse","slice","fillcolor","error_band_fill_color","error_band_line_color","shape","makeLine","line_color","makeRandomData","series1","areaPattern","trendLine","series2","errorBand","makeDefaultLayout","layout","title","xaxis","yaxis","constructor","data","filterFields","getData","getLayout","getFilterColumnMap","map","Map","set","isFilterRequired","setFilter","fireUpdate"],"sources":["../src/MockChartModel.js"],"sourcesContent":["import ChartModel from './ChartModel';\nimport ChartTheme from './ChartTheme';\nimport ChartUtils from './ChartUtils';\n\n/** Displays a basic random chark */\nclass MockChartModel extends ChartModel {\n static smoothing = 1.5;\n\n static makeRandomSeries(offset, scale = 1, steps = 100) {\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) {\n return {\n name: 'SCTR',\n x: series.x,\n y: series.y,\n type: 'scattergl',\n mode: 'markers',\n hoverinfo: 'skip',\n marker: {\n size: 5,\n },\n };\n }\n\n static makeArea(series) {\n return {\n name: 'AREA',\n x: series.x,\n y: series.s,\n type: 'scatter',\n mode: 'line',\n fill: 'tozeroy',\n hoverinfo: 'all',\n line: {\n color: ChartTheme.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) {\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: 'scattergl',\n mode: 'line',\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: ChartTheme.trend_color,\n // chroma(c.$green).brighten(1.2).hex()\n },\n };\n }\n\n static makeErrorBand(series) {\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];\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.concat(series.x.slice().reverse()), // winding for x values, that slice just clones so reverse doesn't apply inplace\n y: errory,\n type: 'scattergl',\n mode: 'line',\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: ChartTheme.error_band_fill_color,\n line: {\n width: 0,\n color: ChartTheme.error_band_line_color,\n shape: 'spline',\n },\n };\n }\n\n static makeLine(series) {\n return {\n name: 'LINE',\n x: series.x,\n y: series.y,\n type: 'scattergl',\n mode: 'line',\n hoverinfo: 'x+y+text+name',\n line: {\n color: ChartTheme.line_color,\n width: 3,\n },\n };\n }\n\n static makeRandomData() {\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() {\n const layout = ChartUtils.makeDefaultLayout(ChartTheme);\n layout.title = 'Chart';\n layout.xaxis.title = 'Datestamp';\n layout.yaxis.title = 'Price';\n return layout;\n }\n\n constructor({\n data = MockChartModel.makeRandomData(),\n layout = MockChartModel.makeDefaultLayout(),\n filterFields = [],\n } = {}) {\n super();\n\n this.data = data;\n this.layout = layout;\n this.filterFields = filterFields;\n }\n\n getData() {\n return this.data;\n }\n\n getLayout() {\n return this.layout;\n }\n\n getFilterColumnMap() {\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() {\n return this.filterFields.length > 0;\n }\n\n setFilter() {\n this.fireUpdate(this.data);\n }\n}\n\nexport default MockChartModel;\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"MockChartModel.js","names":["ChartModel","ChartTheme","ChartUtils","MockChartModel","makeRandomSeries","offset","scale","steps","dates","values","smooth","linear","startDate","Date","i","date","getFullYear","getMonth","getDate","push","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","length","value","errory","concat","reverse","slice","fillcolor","error_band_fill_color","error_band_line_color","shape","makeLine","line_color","makeRandomData","series1","areaPattern","trendLine","series2","errorBand","makeDefaultLayout","layout","title","xaxis","yaxis","constructor","data","filterFields","getData","getLayout","getFilterColumnMap","map","Map","set","isFilterRequired","setFilter","fireUpdate"],"sources":["../src/MockChartModel.js"],"sourcesContent":["import ChartModel from './ChartModel';\nimport ChartTheme from './ChartTheme';\nimport ChartUtils from './ChartUtils';\n\n/** Displays a basic random chark */\nclass MockChartModel extends ChartModel {\n static smoothing = 1.5;\n\n static makeRandomSeries(offset, scale = 1, steps = 100) {\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) {\n return {\n name: 'SCTR',\n x: series.x,\n y: series.y,\n type: 'scattergl',\n mode: 'markers',\n hoverinfo: 'skip',\n marker: {\n size: 5,\n },\n };\n }\n\n static makeArea(series) {\n return {\n name: 'AREA',\n x: series.x,\n y: series.s,\n type: 'scatter',\n mode: 'line',\n fill: 'tozeroy',\n hoverinfo: 'all',\n line: {\n color: ChartTheme.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) {\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: 'scattergl',\n mode: 'line',\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: ChartTheme.trend_color,\n // chroma(c.$green).brighten(1.2).hex()\n },\n };\n }\n\n static makeErrorBand(series) {\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];\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.concat(series.x.slice().reverse()), // winding for x values, that slice just clones so reverse doesn't apply inplace\n y: errory,\n type: 'scattergl',\n mode: 'line',\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: ChartTheme.error_band_fill_color,\n line: {\n width: 0,\n color: ChartTheme.error_band_line_color,\n shape: 'spline',\n },\n };\n }\n\n static makeLine(series) {\n return {\n name: 'LINE',\n x: series.x,\n y: series.y,\n type: 'scattergl',\n mode: 'line',\n hoverinfo: 'x+y+text+name',\n line: {\n color: ChartTheme.line_color,\n width: 3,\n },\n };\n }\n\n static makeRandomData() {\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() {\n const layout = ChartUtils.makeDefaultLayout(ChartTheme);\n layout.title = 'Chart';\n layout.xaxis.title = 'Datestamp';\n layout.yaxis.title = 'Price';\n return layout;\n }\n\n constructor({\n data = MockChartModel.makeRandomData(),\n layout = MockChartModel.makeDefaultLayout(),\n filterFields = [],\n } = {}) {\n super();\n\n this.data = data;\n this.layout = layout;\n this.filterFields = filterFields;\n }\n\n getData() {\n return this.data;\n }\n\n getLayout() {\n return this.layout;\n }\n\n getFilterColumnMap() {\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() {\n return this.filterFields.length > 0;\n }\n\n setFilter() {\n this.fireUpdate(this.data);\n }\n}\n\nexport default MockChartModel;\n"],"mappings":"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"}
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","names":["default","Chart","ChartModelFactory","ChartModel","ChartUtils","FigureChartModel","MockChartModel","Plot","ChartTheme","isFigureChartModel"],"sources":["../src/index.ts"],"sourcesContent":["export { default as Chart } from './Chart';\nexport { default as ChartModelFactory } from './ChartModelFactory';\nexport { default as ChartModel } from './ChartModel';\nexport { default as ChartUtils } from './ChartUtils';\nexport * from './ChartUtils';\nexport { default as FigureChartModel } from './FigureChartModel';\nexport { default as MockChartModel } from './MockChartModel';\nexport { default as Plot } from './plotly/Plot';\nexport { default as ChartTheme } from './ChartTheme';\nexport { default as isFigureChartModel } from './isFigureChartModel';\n"],"mappings":"SAASA,OAAO,IAAIC,
|
|
1
|
+
{"version":3,"file":"index.js","names":["default","Chart","ChartModelFactory","ChartModel","ChartUtils","FigureChartModel","MockChartModel","Plot","ChartTheme","isFigureChartModel"],"sources":["../src/index.ts"],"sourcesContent":["export { default as Chart } from './Chart';\nexport { default as ChartModelFactory } from './ChartModelFactory';\nexport { default as ChartModel } from './ChartModel';\nexport { default as ChartUtils } from './ChartUtils';\nexport * from './ChartUtils';\nexport { default as FigureChartModel } from './FigureChartModel';\nexport { default as MockChartModel } from './MockChartModel';\nexport { default as Plot } from './plotly/Plot';\nexport { default as ChartTheme } from './ChartTheme';\nexport { default as isFigureChartModel } from './isFigureChartModel';\n"],"mappings":"SAASA,OAAO,IAAIC,KAAK;AAAA,SAChBD,OAAO,IAAIE,iBAAiB;AAAA,SAC5BF,OAAO,IAAIG,UAAU;AAAA,SACrBH,OAAO,IAAII,UAAU;AAAA;AAAA,SAErBJ,OAAO,IAAIK,gBAAgB;AAAA,SAC3BL,OAAO,IAAIM,cAAc;AAAA,SACzBN,OAAO,IAAIO,IAAI;AAAA,SACfP,OAAO,IAAIQ,UAAU;AAAA,SACrBR,OAAO,IAAIS,kBAAkB"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"isFigureChartModel.js","names":["isFigureChartModel","model","setFigure","undefined"],"sources":["../src/isFigureChartModel.ts"],"sourcesContent":["import ChartModel from './ChartModel';\nimport FigureChartModel from './FigureChartModel';\n\nexport default function isFigureChartModel(\n model: ChartModel\n): model is FigureChartModel {\n return (model as FigureChartModel).setFigure !== undefined;\n}\n"],"mappings":"AAGA,eAAe,SAASA,
|
|
1
|
+
{"version":3,"file":"isFigureChartModel.js","names":["isFigureChartModel","model","setFigure","undefined"],"sources":["../src/isFigureChartModel.ts"],"sourcesContent":["import ChartModel from './ChartModel';\nimport FigureChartModel from './FigureChartModel';\n\nexport default function isFigureChartModel(\n model: ChartModel\n): model is FigureChartModel {\n return (model as FigureChartModel).setFigure !== undefined;\n}\n"],"mappings":"AAGA,eAAe,SAASA,kBAAkB,CACxCC,KAAiB,EACU;EAC3B,OAAQA,KAAK,CAAsBC,SAAS,KAAKC,SAAS;AAC5D"}
|
package/dist/plotly/Plot.js
CHANGED
|
@@ -5,6 +5,5 @@ import createPlotlyComponent from 'react-plotly.js/factory.js';
|
|
|
5
5
|
import Plotly from "./Plotly.js"; // Webpack 4 (used in CRA) handles this import such that createPlotlyComponent is a function
|
|
6
6
|
// Webpack 5 (used in docusaurus) gives an object w/ a default key
|
|
7
7
|
// This is probably something on react-plotly.js's side
|
|
8
|
-
|
|
9
8
|
export default typeof createPlotlyComponent === 'function' ? createPlotlyComponent(Plotly) : createPlotlyComponent.default(Plotly);
|
|
10
9
|
//# sourceMappingURL=Plot.js.map
|
package/dist/plotly/Plot.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Plot.js","names":["createPlotlyComponent","Plotly","default"],"sources":["../../src/plotly/Plot.js"],"sourcesContent":["// Import the react customizable bundle for building, only pull in the modules we need\n// This reduces the build size. Plotly has a lot of modules we don't need/use.\n// https://github.com/plotly/react-plotly.js#customizing-the-plotlyjs-bundle\nimport createPlotlyComponent from 'react-plotly.js/factory.js';\nimport Plotly from './Plotly';\n\n// Webpack 4 (used in CRA) handles this import such that createPlotlyComponent is a function\n// Webpack 5 (used in docusaurus) gives an object w/ a default key\n// This is probably something on react-plotly.js's side\nexport default typeof createPlotlyComponent === 'function'\n ? createPlotlyComponent(Plotly)\n : createPlotlyComponent.default(Plotly);\n"],"mappings":"AAAA;AACA;AACA;AACA,OAAOA,
|
|
1
|
+
{"version":3,"file":"Plot.js","names":["createPlotlyComponent","Plotly","default"],"sources":["../../src/plotly/Plot.js"],"sourcesContent":["// Import the react customizable bundle for building, only pull in the modules we need\n// This reduces the build size. Plotly has a lot of modules we don't need/use.\n// https://github.com/plotly/react-plotly.js#customizing-the-plotlyjs-bundle\nimport createPlotlyComponent from 'react-plotly.js/factory.js';\nimport Plotly from './Plotly';\n\n// Webpack 4 (used in CRA) handles this import such that createPlotlyComponent is a function\n// Webpack 5 (used in docusaurus) gives an object w/ a default key\n// This is probably something on react-plotly.js's side\nexport default typeof createPlotlyComponent === 'function'\n ? createPlotlyComponent(Plotly)\n : createPlotlyComponent.default(Plotly);\n"],"mappings":"AAAA;AACA;AACA;AACA,OAAOA,qBAAqB,MAAM,4BAA4B;AAAC,OACxDC,MAAM,qBAEb;AACA;AACA;AACA,eAAe,OAAOD,qBAAqB,KAAK,UAAU,GACtDA,qBAAqB,CAACC,MAAM,CAAC,GAC7BD,qBAAqB,CAACE,OAAO,CAACD,MAAM,CAAC"}
|
package/dist/plotly/Plotly.js
CHANGED
|
@@ -1,14 +1,16 @@
|
|
|
1
1
|
/* eslint-disable global-require */
|
|
2
2
|
// Create a partial plot with only the kinds of charts we need
|
|
3
3
|
// https://github.com/plotly/plotly.js/#modules
|
|
4
|
+
|
|
4
5
|
import Plotly from 'plotly.js/lib/core.js';
|
|
5
6
|
import bar from 'plotly.js/lib/bar.js';
|
|
6
7
|
import histogram from 'plotly.js/lib/histogram.js';
|
|
7
8
|
import pie from 'plotly.js/lib/pie.js';
|
|
8
9
|
import ohlc from 'plotly.js/lib/ohlc.js';
|
|
9
10
|
import scattergl from 'plotly.js/lib/scattergl.js';
|
|
10
|
-
import treemap from 'plotly.js/lib/treemap.js';
|
|
11
|
+
import treemap from 'plotly.js/lib/treemap.js';
|
|
11
12
|
|
|
13
|
+
// Load in the trace types we need/support
|
|
12
14
|
Plotly.register([bar, histogram, pie, ohlc, scattergl, treemap]);
|
|
13
15
|
export default Plotly;
|
|
14
16
|
//# sourceMappingURL=Plotly.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Plotly.js","names":["Plotly","bar","histogram","pie","ohlc","scattergl","treemap","register"],"sources":["../../src/plotly/Plotly.js"],"sourcesContent":["/* eslint-disable global-require */\n// Create a partial plot with only the kinds of charts we need\n// https://github.com/plotly/plotly.js/#modules\n\nimport Plotly from 'plotly.js/lib/core.js';\nimport bar from 'plotly.js/lib/bar.js';\nimport histogram from 'plotly.js/lib/histogram.js';\nimport pie from 'plotly.js/lib/pie.js';\nimport ohlc from 'plotly.js/lib/ohlc.js';\nimport scattergl from 'plotly.js/lib/scattergl.js';\nimport treemap from 'plotly.js/lib/treemap.js';\n\n// Load in the trace types we need/support\nPlotly.register([bar, histogram, pie, ohlc, scattergl, treemap]);\n\nexport default Plotly;\n"],"mappings":"AAAA;AACA;AACA
|
|
1
|
+
{"version":3,"file":"Plotly.js","names":["Plotly","bar","histogram","pie","ohlc","scattergl","treemap","register"],"sources":["../../src/plotly/Plotly.js"],"sourcesContent":["/* eslint-disable global-require */\n// Create a partial plot with only the kinds of charts we need\n// https://github.com/plotly/plotly.js/#modules\n\nimport Plotly from 'plotly.js/lib/core.js';\nimport bar from 'plotly.js/lib/bar.js';\nimport histogram from 'plotly.js/lib/histogram.js';\nimport pie from 'plotly.js/lib/pie.js';\nimport ohlc from 'plotly.js/lib/ohlc.js';\nimport scattergl from 'plotly.js/lib/scattergl.js';\nimport treemap from 'plotly.js/lib/treemap.js';\n\n// Load in the trace types we need/support\nPlotly.register([bar, histogram, pie, ohlc, scattergl, treemap]);\n\nexport default Plotly;\n"],"mappings":"AAAA;AACA;AACA;;AAEA,OAAOA,MAAM,MAAM,uBAAuB;AAC1C,OAAOC,GAAG,MAAM,sBAAsB;AACtC,OAAOC,SAAS,MAAM,4BAA4B;AAClD,OAAOC,GAAG,MAAM,sBAAsB;AACtC,OAAOC,IAAI,MAAM,uBAAuB;AACxC,OAAOC,SAAS,MAAM,4BAA4B;AAClD,OAAOC,OAAO,MAAM,0BAA0B;;AAE9C;AACAN,MAAM,CAACO,QAAQ,CAAC,CAACN,GAAG,EAAEC,SAAS,EAAEC,GAAG,EAAEC,IAAI,EAAEC,SAAS,EAAEC,OAAO,CAAC,CAAC;AAEhE,eAAeN,MAAM"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@deephaven/chart",
|
|
3
|
-
"version": "0.22.3-beta.
|
|
3
|
+
"version": "0.22.3-beta.21+6d63afd",
|
|
4
4
|
"description": "Deephaven Chart",
|
|
5
5
|
"author": "Deephaven Data Labs LLC",
|
|
6
6
|
"license": "Apache-2.0",
|
|
@@ -22,11 +22,11 @@
|
|
|
22
22
|
"build:sass": "sass --embed-sources --load-path=../../node_modules ./src:./dist"
|
|
23
23
|
},
|
|
24
24
|
"dependencies": {
|
|
25
|
-
"@deephaven/icons": "^0.22.3-beta.
|
|
26
|
-
"@deephaven/jsapi-shim": "^0.22.3-beta.
|
|
27
|
-
"@deephaven/jsapi-utils": "^0.22.3-beta.
|
|
28
|
-
"@deephaven/log": "^0.22.3-beta.
|
|
29
|
-
"@deephaven/utils": "^0.22.3-beta.
|
|
25
|
+
"@deephaven/icons": "^0.22.3-beta.21+6d63afd",
|
|
26
|
+
"@deephaven/jsapi-shim": "^0.22.3-beta.21+6d63afd",
|
|
27
|
+
"@deephaven/jsapi-utils": "^0.22.3-beta.21+6d63afd",
|
|
28
|
+
"@deephaven/log": "^0.22.3-beta.21+6d63afd",
|
|
29
|
+
"@deephaven/utils": "^0.22.3-beta.21+6d63afd",
|
|
30
30
|
"deep-equal": "^2.0.5",
|
|
31
31
|
"lodash.debounce": "^4.0.8",
|
|
32
32
|
"lodash.set": "^4.3.2",
|
|
@@ -40,8 +40,8 @@
|
|
|
40
40
|
"react": "^17.x"
|
|
41
41
|
},
|
|
42
42
|
"devDependencies": {
|
|
43
|
-
"@deephaven/mocks": "^0.22.3-beta.
|
|
44
|
-
"@deephaven/tsconfig": "^0.22.3-beta.
|
|
43
|
+
"@deephaven/mocks": "^0.22.3-beta.21+6d63afd",
|
|
44
|
+
"@deephaven/tsconfig": "^0.22.3-beta.21+6d63afd",
|
|
45
45
|
"@types/plotly.js": "^2.12.2"
|
|
46
46
|
},
|
|
47
47
|
"files": [
|
|
@@ -53,5 +53,5 @@
|
|
|
53
53
|
"publishConfig": {
|
|
54
54
|
"access": "public"
|
|
55
55
|
},
|
|
56
|
-
"gitHead": "
|
|
56
|
+
"gitHead": "6d63afd124485605d545e0104d0cb437eb8993ab"
|
|
57
57
|
}
|