@deephaven/chart 0.15.5-vite.12 → 0.15.6-vite.19

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (41) hide show
  1. package/dist/Chart.d.ts +84 -85
  2. package/dist/Chart.d.ts.map +1 -1
  3. package/dist/Chart.js +56 -49
  4. package/dist/Chart.js.map +1 -1
  5. package/dist/ChartModel.d.ts +30 -22
  6. package/dist/ChartModel.d.ts.map +1 -1
  7. package/dist/ChartModel.js +18 -9
  8. package/dist/ChartModel.js.map +1 -1
  9. package/dist/ChartModelFactory.d.ts +67 -43
  10. package/dist/ChartModelFactory.d.ts.map +1 -1
  11. package/dist/ChartModelFactory.js +27 -27
  12. package/dist/ChartModelFactory.js.map +1 -1
  13. package/dist/ChartTestUtils.d.ts +16 -15
  14. package/dist/ChartTestUtils.d.ts.map +1 -1
  15. package/dist/ChartTestUtils.js +5 -0
  16. package/dist/ChartTestUtils.js.map +1 -1
  17. package/dist/ChartTheme.d.ts +17 -17
  18. package/dist/ChartTheme.d.ts.map +1 -1
  19. package/dist/ChartTheme.js.map +1 -1
  20. package/dist/ChartUtils.d.ts +252 -225
  21. package/dist/ChartUtils.d.ts.map +1 -1
  22. package/dist/ChartUtils.js +219 -174
  23. package/dist/ChartUtils.js.map +1 -1
  24. package/dist/FigureChartModel.d.ts +70 -106
  25. package/dist/FigureChartModel.d.ts.map +1 -1
  26. package/dist/FigureChartModel.js +90 -36
  27. package/dist/FigureChartModel.js.map +1 -1
  28. package/dist/MockChartModel.d.ts +11 -209
  29. package/dist/MockChartModel.d.ts.map +1 -1
  30. package/dist/declaration.d.js +2 -0
  31. package/dist/declaration.d.js.map +1 -0
  32. package/dist/index.d.ts +2 -0
  33. package/dist/index.d.ts.map +1 -1
  34. package/dist/index.js +2 -0
  35. package/dist/index.js.map +1 -1
  36. package/dist/isFigureChartModel.d.ts +4 -0
  37. package/dist/isFigureChartModel.d.ts.map +1 -0
  38. package/dist/isFigureChartModel.js +4 -0
  39. package/dist/isFigureChartModel.js.map +1 -0
  40. package/dist/plotly/Plotly.d.ts +1 -0
  41. package/package.json +11 -8
@@ -1 +1 @@
1
- {"version":3,"file":"FigureChartModel.js","names":["memoize","debounce","set","dh","Log","ChartModel","ChartUtils","log","module","FigureChartModel","constructor","figure","settings","theme","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","addPendingSeries","ADD_SERIES_DEBOUNCE","data","layout","makeDefaultLayout","seriesDataMap","Map","pendingSeries","oneClicks","filterColumnMap","lastFilter","isConnected","seriesToProcess","Set","setTitle","getDefaultTitle","initAllSeries","updateAxisPositions","startListeningFigure","close","cancel","stopListeningFigure","charts","length","title","clear","activeSeriesNames","i","j","series","push","name","addSeries","allSeriesNames","keys","inactiveSeriesNames","filter","seriesName","indexOf","delete","getChartForSeries","error","axisTypeMap","groupArray","axes","seriesData","makeSeriesDataFromSeries","getSeriesVisibility","values","plotStyle","plot","SeriesPlotStyle","STACKED_BAR","barmode","PIE","hiddenlabels","getHiddenLabels","showlegend","oneClick","columns","updateLayoutFormats","subscribe","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","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","t","DEFAULT_MARGIN","SUBTITLE_LINE_HEIGHT","text","pad","DEFAULT_TITLE_PADDING","getPlotWidth","width","Math","max","l","r","getPlotHeight","height","b","plotWidth","plotHeight","axisRangeParser","getAxisRangeParser","updateLayoutAxes","axisFormats","getAxisFormats","forEach","axisFormat","axisLayoutProperty","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.js"],"sourcesContent":["/* eslint class-methods-use-this: \"off\" */\nimport memoize from 'memoizee';\nimport debounce from 'lodash.debounce';\nimport set from 'lodash.set';\nimport dh from '@deephaven/jsapi-shim';\nimport Log from '@deephaven/log';\nimport ChartModel from './ChartModel';\nimport ChartUtils from './ChartUtils';\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 {dh.plot.Figure} figure The figure object created by the API\n * @param {Object} settings Chart settings\n */\n constructor(figure, settings = {}, theme = {}) {\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 // 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 this.addPendingSeries = debounce(\n this.addPendingSeries.bind(this),\n FigureChartModel.ADD_SERIES_DEBOUNCE\n );\n\n this.figure = figure;\n this.settings = settings;\n this.theme = theme;\n this.data = [];\n this.layout = ChartUtils.makeDefaultLayout(theme);\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 close() {\n this.figure.close();\n this.addPendingSeries.cancel();\n this.stopListeningFigure();\n }\n\n getDefaultTitle() {\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() {\n this.oneClicks = [];\n this.filterColumnMap.clear();\n\n const { charts } = this.figure;\n const activeSeriesNames = [];\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);\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; i += 1) {\n const seriesName = inactiveSeriesNames[i];\n this.seriesDataMap.delete(seriesName);\n }\n this.seriesToProcess = new Set([...this.seriesDataMap.keys()]);\n }\n\n addSeries(series) {\n const chart = ChartUtils.getChartForSeries(this.figure, series);\n if (chart == null) {\n log.error('Unable to find matching chart for series', series);\n return;\n }\n\n const axisTypeMap = ChartUtils.groupArray(chart.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) {\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 addPendingSeries() {\n const { pendingSeries } = this;\n for (let i = 0; i < pendingSeries.length; i += 1) {\n const series = pendingSeries[i];\n this.addSeries(series);\n\n series.subscribe();\n // We'll get an update with the data after subscribing\n }\n\n this.pendingSeries = [];\n }\n\n subscribe(...args) {\n super.subscribe(...args);\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(...args) {\n super.unsubscribe(...args);\n\n if (this.listeners.length === 0) {\n this.unsubscribeFigure();\n }\n }\n\n subscribeFigure() {\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() {\n this.figure.unsubscribe();\n }\n\n startListeningFigure() {\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() {\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 => 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 => ChartUtils.wrapValue(value, columnType, timeZone);\n });\n\n /**\n * Gets the range parser for a particular column type\n */\n getRangeParser = memoize((columnType, formatter) => range => {\n let [rangeStart, rangeEnd] = range;\n const valueParser = this.getValueParser(columnType, formatter);\n rangeStart = valueParser(rangeStart);\n rangeEnd = valueParser(rangeEnd);\n return [rangeStart, rangeEnd];\n });\n\n /**\n * Gets the parser for parsing the range from an axis within the given chart\n */\n getAxisRangeParser = memoize((chart, formatter) => axis => {\n const source = ChartUtils.getSourceForAxis(chart, axis);\n if (source) {\n return this.getRangeParser(source.columnType, formatter);\n }\n\n return range => range;\n });\n\n handleDownsampleStart(event) {\n log.debug('Downsample started', event);\n\n this.fireDownsampleStart(event.detail);\n }\n\n handleDownsampleFinish(event) {\n log.debug('Downsample finished', event);\n\n this.fireDownsampleFinish(event.detail);\n }\n\n handleDownsampleFail(event) {\n log.error('Downsample failed', event);\n\n this.fireDownsampleFail(event.detail);\n }\n\n handleDownsampleNeeded(event) {\n log.info('Downsample needed', event);\n\n this.fireDownsampleNeeded(event.detail);\n }\n\n handleFigureUpdated(event) {\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) {\n log.error('Request failed', event);\n }\n\n /**\n * Resubscribe to the figure, should be done if settings change\n */\n resubscribe() {\n if (this.listeners.length > 0) {\n this.unsubscribeFigure();\n this.subscribeFigure();\n }\n }\n\n setFormatter(formatter) {\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(...args) {\n super.setDownsamplingDisabled(...args);\n\n this.resubscribe();\n }\n\n handleFigureDisconnected(event) {\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) {\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) {\n const { detail: series } = event;\n log.debug('handleFigureSeriesAdded', series);\n\n this.pendingSeries.push(series);\n\n this.addPendingSeries();\n }\n\n setDimensions(rect) {\n super.setDimensions(rect);\n\n this.updateAxisPositions();\n }\n\n setTitle(title) {\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 this.layout.margin.t =\n ChartUtils.DEFAULT_MARGIN.t +\n subtitleCount * ChartUtils.SUBTITLE_LINE_HEIGHT;\n this.layout.title.text = title;\n this.layout.title.pad.t =\n ChartUtils.DEFAULT_TITLE_PADDING.t +\n subtitleCount * ChartUtils.SUBTITLE_LINE_HEIGHT * 0.5;\n }\n\n getPlotWidth() {\n if (!this.rect || !this.rect.width) {\n return 0;\n }\n\n return Math.max(\n this.rect.width - this.layout.margin.l - this.layout.margin.r,\n 0\n );\n }\n\n getPlotHeight() {\n if (!this.rect || !this.rect.height) {\n return 0;\n }\n\n return Math.max(\n this.rect.height - this.layout.margin.t - this.layout.margin.b,\n 0\n );\n }\n\n updateAxisPositions() {\n const plotWidth = this.getPlotWidth();\n const plotHeight = this.getPlotHeight();\n\n for (let i = 0; i < this.figure.charts.length; i += 1) {\n const chart = this.figure.charts[i];\n const axisRangeParser = this.getAxisRangeParser(chart, this.formatter);\n ChartUtils.updateLayoutAxes(\n this.layout,\n chart.axes,\n plotWidth,\n plotHeight,\n axisRangeParser,\n this.theme\n );\n }\n }\n\n /**\n * Updates the format patterns used\n */\n updateLayoutFormats() {\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 if (this.layout[axisLayoutProperty] != null) {\n Object.assign(this.layout[axisLayoutProperty], 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 {dh.Series} series The series to set the data array for.\n * @param {dh.plot.SourceType} sourceType The source type within that series to set the data for.\n * @param {Any[]} dataArray The array to use for the data for this series source.\n */\n setDataArrayForSeries(series, sourceType, dataArray) {\n const { name, plotStyle } = series;\n\n const seriesData = this.seriesDataMap.get(name);\n const property = ChartUtils.getPlotlyProperty(plotStyle, sourceType);\n set(seriesData, property, dataArray);\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 {dh.Series} series The series to clean the data for\n */\n cleanSeries(series) {\n const { name, plotStyle } = series;\n const seriesData = this.seriesDataMap.get(name);\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(x, xLow, xHigh);\n }\n if (yLow && yHigh && yLow !== y) {\n seriesData.error_y = ChartUtils.getPlotlyErrorBars(y, yLow, yHigh);\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() {\n return this.data;\n }\n\n getLayout() {\n return this.layout;\n }\n\n getFilterColumnMap() {\n return new Map(this.filterColumnMap);\n }\n\n isFilterRequired() {\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 {Map<String, String>} filterMap Map of filter column names to values\n */\n setFilter(filterMap) {\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) {\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) {\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","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","layout","makeDefaultLayout","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","getChartForSeries","error","axisTypeMap","groupArray","axes","seriesData","makeSeriesDataFromSeries","getSeriesVisibility","values","plotStyle","plot","SeriesPlotStyle","STACKED_BAR","barmode","PIE","hiddenlabels","getHiddenLabels","showlegend","oneClick","columns","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","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","axisRangeParser","getAxisRangeParser","updateLayoutAxes","axisFormats","getAxisFormats","forEach","axisFormat","axisLayoutProperty","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 // 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\n this.figure = figure;\n this.settings = settings;\n this.theme = theme;\n this.data = [];\n this.layout = ChartUtils.makeDefaultLayout(theme);\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 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);\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 addSeries(series: Series): void {\n const chart = ChartUtils.getChartForSeries(this.figure, series);\n if (chart == null) {\n log.error('Unable to find matching chart for series', series);\n return;\n }\n\n const axisTypeMap: AxisTypeMap = ChartUtils.groupArray(chart.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) {\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 addPendingSeries = debounce(() => {\n const { pendingSeries } = this;\n for (let i = 0; i < pendingSeries.length; i += 1) {\n const series = pendingSeries[i];\n this.addSeries(series);\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\n for (let i = 0; i < this.figure.charts.length; i += 1) {\n const chart = this.figure.charts[i];\n const axisRangeParser = this.getAxisRangeParser(chart, this.formatter);\n ChartUtils.updateLayoutAxes(\n this.layout,\n chart.axes,\n plotWidth,\n plotHeight,\n axisRangeParser,\n this.theme\n );\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 if (this.layout[axisLayoutProperty] != null) {\n Object.assign(this.layout[axisLayoutProperty], 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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"}
@@ -28,7 +28,7 @@ declare class MockChartModel extends ChartModel {
28
28
  fill: string;
29
29
  hoverinfo: string;
30
30
  line: {
31
- color: any;
31
+ color: string;
32
32
  width: number;
33
33
  };
34
34
  };
@@ -42,7 +42,7 @@ declare class MockChartModel extends ChartModel {
42
42
  line: {
43
43
  width: number;
44
44
  dash: string;
45
- color: any;
45
+ color: string;
46
46
  };
47
47
  };
48
48
  static makeErrorBand(series: any): {
@@ -53,10 +53,10 @@ declare class MockChartModel extends ChartModel {
53
53
  mode: string;
54
54
  hoverinfo: string;
55
55
  fill: string;
56
- fillcolor: any;
56
+ fillcolor: string;
57
57
  line: {
58
58
  width: number;
59
- color: any;
59
+ color: string;
60
60
  shape: string;
61
61
  };
62
62
  };
@@ -68,7 +68,7 @@ declare class MockChartModel extends ChartModel {
68
68
  mode: string;
69
69
  hoverinfo: string;
70
70
  line: {
71
- color: any;
71
+ color: string;
72
72
  width: number;
73
73
  };
74
74
  };
@@ -80,77 +80,11 @@ declare class MockChartModel extends ChartModel {
80
80
  mode: string;
81
81
  hoverinfo: string;
82
82
  line: {
83
- color: any;
83
+ color: string;
84
84
  width: number;
85
85
  };
86
86
  }[];
87
- static makeDefaultLayout(): {
88
- autosize: boolean;
89
- colorway: string[];
90
- font: {
91
- family: string;
92
- };
93
- title: {
94
- font: {
95
- color: any;
96
- };
97
- yanchor: string;
98
- pad: {
99
- t: number;
100
- };
101
- y: number;
102
- };
103
- legend: {
104
- font: {
105
- color: any;
106
- };
107
- };
108
- margin: {
109
- l: number;
110
- r: number;
111
- t: number;
112
- b: number;
113
- pad: number;
114
- };
115
- xaxis: {
116
- automargin: boolean;
117
- gridcolor: any;
118
- linecolor: any;
119
- rangeslider: {
120
- visible: boolean;
121
- };
122
- showline: boolean;
123
- ticklen: number;
124
- tickcolor: any;
125
- tickfont: {
126
- color: any;
127
- };
128
- title: {
129
- font: {
130
- color: any;
131
- };
132
- };
133
- };
134
- yaxis: {
135
- automargin: boolean;
136
- gridcolor: any;
137
- linecolor: any;
138
- rangeslider: {
139
- visible: boolean;
140
- };
141
- showline: boolean;
142
- ticklen: number;
143
- tickcolor: any;
144
- tickfont: {
145
- color: any;
146
- };
147
- title: {
148
- font: {
149
- color: any;
150
- };
151
- };
152
- };
153
- };
87
+ static makeDefaultLayout(): Partial<import("plotly.js").Layout>;
154
88
  constructor({ data, layout, filterFields, }?: {
155
89
  data?: {
156
90
  name: string;
@@ -160,77 +94,11 @@ declare class MockChartModel extends ChartModel {
160
94
  mode: string;
161
95
  hoverinfo: string;
162
96
  line: {
163
- color: any;
97
+ color: string;
164
98
  width: number;
165
99
  };
166
100
  }[] | undefined;
167
- layout?: {
168
- autosize: boolean;
169
- colorway: string[];
170
- font: {
171
- family: string;
172
- };
173
- title: {
174
- font: {
175
- color: any;
176
- };
177
- yanchor: string;
178
- pad: {
179
- t: number;
180
- };
181
- y: number;
182
- };
183
- legend: {
184
- font: {
185
- color: any;
186
- };
187
- };
188
- margin: {
189
- l: number;
190
- r: number;
191
- t: number;
192
- b: number;
193
- pad: number;
194
- };
195
- xaxis: {
196
- automargin: boolean;
197
- gridcolor: any;
198
- linecolor: any;
199
- rangeslider: {
200
- visible: boolean;
201
- };
202
- showline: boolean;
203
- ticklen: number;
204
- tickcolor: any;
205
- tickfont: {
206
- color: any;
207
- };
208
- title: {
209
- font: {
210
- color: any;
211
- };
212
- };
213
- };
214
- yaxis: {
215
- automargin: boolean;
216
- gridcolor: any;
217
- linecolor: any;
218
- rangeslider: {
219
- visible: boolean;
220
- };
221
- showline: boolean;
222
- ticklen: number;
223
- tickcolor: any;
224
- tickfont: {
225
- color: any;
226
- };
227
- title: {
228
- font: {
229
- color: any;
230
- };
231
- };
232
- };
233
- } | undefined;
101
+ layout?: Partial<import("plotly.js").Layout> | undefined;
234
102
  filterFields?: any[] | undefined;
235
103
  });
236
104
  data: {
@@ -241,77 +109,11 @@ declare class MockChartModel extends ChartModel {
241
109
  mode: string;
242
110
  hoverinfo: string;
243
111
  line: {
244
- color: any;
112
+ color: string;
245
113
  width: number;
246
114
  };
247
115
  }[];
248
- layout: {
249
- autosize: boolean;
250
- colorway: string[];
251
- font: {
252
- family: string;
253
- };
254
- title: {
255
- font: {
256
- color: any;
257
- };
258
- yanchor: string;
259
- pad: {
260
- t: number;
261
- };
262
- y: number;
263
- };
264
- legend: {
265
- font: {
266
- color: any;
267
- };
268
- };
269
- margin: {
270
- l: number;
271
- r: number;
272
- t: number;
273
- b: number;
274
- pad: number;
275
- };
276
- xaxis: {
277
- automargin: boolean;
278
- gridcolor: any;
279
- linecolor: any;
280
- rangeslider: {
281
- visible: boolean;
282
- };
283
- showline: boolean;
284
- ticklen: number;
285
- tickcolor: any;
286
- tickfont: {
287
- color: any;
288
- };
289
- title: {
290
- font: {
291
- color: any;
292
- };
293
- };
294
- };
295
- yaxis: {
296
- automargin: boolean;
297
- gridcolor: any;
298
- linecolor: any;
299
- rangeslider: {
300
- visible: boolean;
301
- };
302
- showline: boolean;
303
- ticklen: number;
304
- tickcolor: any;
305
- tickfont: {
306
- color: any;
307
- };
308
- title: {
309
- font: {
310
- color: any;
311
- };
312
- };
313
- };
314
- };
116
+ layout: Partial<import("plotly.js").Layout>;
315
117
  filterFields: any[];
316
118
  }
317
119
  import ChartModel from "./ChartModel";
@@ -1 +1 @@
1
- {"version":3,"file":"MockChartModel.d.ts","sourceRoot":"","sources":["../src/MockChartModel.js"],"names":[],"mappings":";AAIA,oCAAoC;AACpC;IACE,yBAAuB;IAEvB;;;;;MAqCC;IAED;;;;;;;;;;MAYC;IAED;;;;;;;;;;;;MAeC;IAED;;;;;;;;;;;;MAgBC;IAED;;;;;;;;;;;;;;MA4BC;IAED;;;;;;;;;;;MAaC;IAED;;;;;;;;;;;QAUC;IAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;MAMC;IAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OAUC;IAHC;;;;;;;;;;;QAAgB;IAChB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;MAAoB;IACpB,oBAAgC;CA8BnC"}
1
+ {"version":3,"file":"MockChartModel.d.ts","sourceRoot":"","sources":["../src/MockChartModel.js"],"names":[],"mappings":";AAIA,oCAAoC;AACpC;IACE,yBAAuB;IAEvB;;;;;MAqCC;IAED;;;;;;;;;;MAYC;IAED;;;;;;;;;;;;MAeC;IAED;;;;;;;;;;;;MAgBC;IAED;;;;;;;;;;;;;;MA4BC;IAED;;;;;;;;;;;MAaC;IAED;;;;;;;;;;;QAUC;IAED,gEAMC;IAED;;;;;;;;;;;;;;;OAUC;IAHC;;;;;;;;;;;QAAgB;IAChB,4CAAoB;IACpB,oBAAgC;CA8BnC"}
@@ -0,0 +1,2 @@
1
+
2
+ //# sourceMappingURL=declaration.d.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"declaration.d.js","names":[],"sources":["../src/declaration.d.ts"],"sourcesContent":["declare module '*.module.scss' {\n const content: Record<string, string>;\n export default content;\n}\n\ndeclare module '*.scss';\n"],"mappings":""}
package/dist/index.d.ts CHANGED
@@ -2,7 +2,9 @@ export { default as Chart } from './Chart';
2
2
  export { default as ChartModelFactory } from './ChartModelFactory';
3
3
  export { default as ChartModel } from './ChartModel';
4
4
  export { default as ChartUtils } from './ChartUtils';
5
+ export * from './ChartUtils';
5
6
  export { default as FigureChartModel } from './FigureChartModel';
6
7
  export { default as MockChartModel } from './MockChartModel';
7
8
  export { default as Plot } from './plotly/Plot';
9
+ export { default as isFigureChartModel } from './isFigureChartModel';
8
10
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,IAAI,KAAK,EAAE,MAAM,SAAS,CAAC;AAC3C,OAAO,EAAE,OAAO,IAAI,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AACnE,OAAO,EAAE,OAAO,IAAI,UAAU,EAAE,MAAM,cAAc,CAAC;AACrD,OAAO,EAAE,OAAO,IAAI,UAAU,EAAE,MAAM,cAAc,CAAC;AACrD,OAAO,EAAE,OAAO,IAAI,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AACjE,OAAO,EAAE,OAAO,IAAI,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAC7D,OAAO,EAAE,OAAO,IAAI,IAAI,EAAE,MAAM,eAAe,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,IAAI,KAAK,EAAE,MAAM,SAAS,CAAC;AAC3C,OAAO,EAAE,OAAO,IAAI,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AACnE,OAAO,EAAE,OAAO,IAAI,UAAU,EAAE,MAAM,cAAc,CAAC;AACrD,OAAO,EAAE,OAAO,IAAI,UAAU,EAAE,MAAM,cAAc,CAAC;AACrD,cAAc,cAAc,CAAC;AAC7B,OAAO,EAAE,OAAO,IAAI,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AACjE,OAAO,EAAE,OAAO,IAAI,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAC7D,OAAO,EAAE,OAAO,IAAI,IAAI,EAAE,MAAM,eAAe,CAAC;AAChD,OAAO,EAAE,OAAO,IAAI,kBAAkB,EAAE,MAAM,sBAAsB,CAAC"}
package/dist/index.js CHANGED
@@ -2,7 +2,9 @@ export { default as Chart } from "./Chart.js";
2
2
  export { default as ChartModelFactory } from "./ChartModelFactory.js";
3
3
  export { default as ChartModel } from "./ChartModel.js";
4
4
  export { default as ChartUtils } from "./ChartUtils.js";
5
+ export * from "./ChartUtils.js";
5
6
  export { default as FigureChartModel } from "./FigureChartModel.js";
6
7
  export { default as MockChartModel } from "./MockChartModel.js";
7
8
  export { default as Plot } from "./plotly/Plot.js";
9
+ export { default as isFigureChartModel } from "./isFigureChartModel.js";
8
10
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":["default","Chart","ChartModelFactory","ChartModel","ChartUtils","FigureChartModel","MockChartModel","Plot"],"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 { default as FigureChartModel } from './FigureChartModel';\nexport { default as MockChartModel } from './MockChartModel';\nexport { default as Plot } from './plotly/Plot';\n"],"mappings":"SAASA,OAAO,IAAIC,K;SACXD,OAAO,IAAIE,iB;SACXF,OAAO,IAAIG,U;SACXH,OAAO,IAAII,U;SACXJ,OAAO,IAAIK,gB;SACXL,OAAO,IAAIM,c;SACXN,OAAO,IAAIO,I"}
1
+ {"version":3,"file":"index.js","names":["default","Chart","ChartModelFactory","ChartModel","ChartUtils","FigureChartModel","MockChartModel","Plot","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 isFigureChartModel } from './isFigureChartModel';\n"],"mappings":"SAASA,OAAO,IAAIC,K;SACXD,OAAO,IAAIE,iB;SACXF,OAAO,IAAIG,U;SACXH,OAAO,IAAII,U;;SAEXJ,OAAO,IAAIK,gB;SACXL,OAAO,IAAIM,c;SACXN,OAAO,IAAIO,I;SACXP,OAAO,IAAIQ,kB"}
@@ -0,0 +1,4 @@
1
+ import ChartModel from './ChartModel';
2
+ import FigureChartModel from './FigureChartModel';
3
+ export default function isFigureChartModel(model: ChartModel): model is FigureChartModel;
4
+ //# sourceMappingURL=isFigureChartModel.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"isFigureChartModel.d.ts","sourceRoot":"","sources":["../src/isFigureChartModel.ts"],"names":[],"mappings":"AAAA,OAAO,UAAU,MAAM,cAAc,CAAC;AACtC,OAAO,gBAAgB,MAAM,oBAAoB,CAAC;AAElD,MAAM,CAAC,OAAO,UAAU,kBAAkB,CACxC,KAAK,EAAE,UAAU,GAChB,KAAK,IAAI,gBAAgB,CAE3B"}
@@ -0,0 +1,4 @@
1
+ export default function isFigureChartModel(model) {
2
+ return model.setFigure !== undefined;
3
+ }
4
+ //# sourceMappingURL=isFigureChartModel.js.map
@@ -0,0 +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,kBAAT,CACbC,KADa,EAEc;EAC3B,OAAQA,KAAD,CAA4BC,SAA5B,KAA0CC,SAAjD;AACD"}
@@ -1,2 +1,3 @@
1
1
  export default Plotly;
2
+ import Plotly from "plotly.js/lib/core.js";
2
3
  //# sourceMappingURL=Plotly.d.ts.map
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@deephaven/chart",
3
- "version": "0.15.5-vite.12+52a2dd9",
3
+ "version": "0.15.6-vite.19+fdb234b",
4
4
  "description": "Deephaven Chart",
5
5
  "author": "Deephaven Data Labs LLC",
6
6
  "license": "Apache-2.0",
@@ -30,10 +30,12 @@
30
30
  "start": "cross-env NODE_ENV=development npm run watch"
31
31
  },
32
32
  "dependencies": {
33
- "@deephaven/icons": "^0.15.5-vite.12+52a2dd9",
34
- "@deephaven/jsapi-shim": "^0.15.5-vite.12+52a2dd9",
35
- "@deephaven/jsapi-utils": "^0.15.5-vite.12+52a2dd9",
36
- "@deephaven/log": "^0.15.5-vite.12+52a2dd9",
33
+ "@deephaven/icons": "^0.15.6-vite.19+fdb234b",
34
+ "@deephaven/jsapi-shim": "^0.15.6-vite.19+fdb234b",
35
+ "@deephaven/jsapi-utils": "^0.15.6-vite.19+fdb234b",
36
+ "@deephaven/log": "^0.15.6-vite.19+fdb234b",
37
+ "@deephaven/redux": "^0.15.6-vite.19+fdb234b",
38
+ "@deephaven/utils": "^0.15.6-vite.19+fdb234b",
37
39
  "deep-equal": "^2.0.5",
38
40
  "lodash.debounce": "^4.0.8",
39
41
  "lodash.set": "^4.3.2",
@@ -47,8 +49,9 @@
47
49
  "react": "^17.x"
48
50
  },
49
51
  "devDependencies": {
50
- "@deephaven/mocks": "^0.15.5-vite.12+52a2dd9",
51
- "@deephaven/tsconfig": "^0.15.5-vite.12+52a2dd9"
52
+ "@deephaven/mocks": "^0.15.6-vite.19+fdb234b",
53
+ "@deephaven/tsconfig": "^0.15.6-vite.19+fdb234b",
54
+ "@types/plotly.js": "^2.12.2"
52
55
  },
53
56
  "files": [
54
57
  "dist"
@@ -59,5 +62,5 @@
59
62
  "publishConfig": {
60
63
  "access": "public"
61
64
  },
62
- "gitHead": "52a2dd9b2d7e16dec8c678e270e78d6d2db6a7e5"
65
+ "gitHead": "fdb234b997a7487ba41ba33ac0328253e222b0e1"
63
66
  }