@deephaven/chart 1.22.1-alpha-pivot-builder.0 → 1.22.2-alpha-pivot-builder.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,5 +1,11 @@
1
1
  function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
2
2
  function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
3
+ function _slicedToArray(r, e) { return _arrayWithHoles(r) || _iterableToArrayLimit(r, e) || _unsupportedIterableToArray(r, e) || _nonIterableRest(); }
4
+ function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
5
+ function _unsupportedIterableToArray(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }
6
+ function _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }
7
+ function _iterableToArrayLimit(r, l) { var t = null == r ? null : "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (null != t) { var e, n, i, u, a = [], f = !0, o = !1; try { if (i = (t = t.call(r)).next, 0 === l) { if (Object(t) !== t) return; f = !1; } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0); } catch (r) { o = !0, n = r; } finally { try { if (!f && null != t.return && (u = t.return(), Object(u) !== u)) return; } finally { if (o) throw n; } } return a; } }
8
+ function _arrayWithHoles(r) { if (Array.isArray(r)) return r; }
3
9
  function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
4
10
  function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; }
5
11
  function _toPrimitive(t, r) { if ("object" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != typeof i) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
@@ -44,9 +50,7 @@ class FigureChartModel extends ChartModel {
44
50
  // This should no longer be necessary after IDS-5049 lands
45
51
  _defineProperty(this, "addPendingSeries", debounce(() => {
46
52
  var axisTypeMap = ChartUtils.getAxisTypeMap(this.figure);
47
- var {
48
- pendingSeries
49
- } = this;
53
+ var pendingSeries = this.pendingSeries;
50
54
  var _loop = function _loop() {
51
55
  var _chart$showLegend;
52
56
  var series = pendingSeries[i];
@@ -88,7 +92,9 @@ class FigureChartModel extends ChartModel {
88
92
  * Gets the range parser for a particular column type
89
93
  */
90
94
  _defineProperty(this, "getRangeParser", memoize((columnType, formatter) => range => {
91
- var [rangeStart, rangeEnd] = range;
95
+ var _range = _slicedToArray(range, 2),
96
+ rangeStart = _range[0],
97
+ rangeEnd = _range[1];
92
98
  var valueParser = this.getValueParser(columnType, formatter);
93
99
  rangeStart = valueParser(rangeStart);
94
100
  rangeEnd = valueParser(rangeEnd);
@@ -160,9 +166,7 @@ class FigureChartModel extends ChartModel {
160
166
  var _this2 = this;
161
167
  this.oneClicks = [];
162
168
  this.filterColumnMap.clear();
163
- var {
164
- charts
165
- } = this.figure;
169
+ var charts = this.figure.charts;
166
170
  var axisTypeMap = ChartUtils.getAxisTypeMap(this.figure);
167
171
  var activeSeriesNames = [];
168
172
  this.seriesToProcess = new Set();
@@ -175,10 +179,8 @@ class FigureChartModel extends ChartModel {
175
179
  }
176
180
 
177
181
  // Need to add the chart titles as annotations if they are set
178
- var {
179
- axes,
180
- title
181
- } = chart;
182
+ var axes = chart.axes,
183
+ title = chart.title;
182
184
  if (title != null && title.length > 0 && (charts.length > 1 || _this2.figure.title != null)) {
183
185
  var xAxis = axes.find(axis => axis.type === _this2.dh.plot.AxisType.X);
184
186
  var yAxis = axes.find(axis => axis.type === _this2.dh.plot.AxisType.Y);
@@ -228,9 +230,7 @@ class FigureChartModel extends ChartModel {
228
230
  */
229
231
  addSeries(series, axisTypeMap, showLegend) {
230
232
  var _this$renderOptions$w, _this$renderOptions;
231
- var {
232
- dh
233
- } = this;
233
+ var dh = this.dh;
234
234
  var seriesData = this.chartUtils.makeSeriesDataFromSeries(series, axisTypeMap, ChartUtils.getSeriesVisibility(series.name, this.settings), showLegend, (_this$renderOptions$w = (_this$renderOptions = this.renderOptions) === null || _this$renderOptions === void 0 ? void 0 : _this$renderOptions.webgl) !== null && _this$renderOptions$w !== void 0 ? _this$renderOptions$w : true);
235
235
  this.seriesDataMap.set(series.name, seriesData);
236
236
  this.seriesToProcess.add(series.name);
@@ -246,12 +246,8 @@ class FigureChartModel extends ChartModel {
246
246
  // TODO: deephaven-core#3254, once done, this can be removed.
247
247
  this.layout.showlegend = this.data.length > 1 || series.plotStyle === dh.plot.SeriesPlotStyle.PIE ? showLegend !== null && showLegend !== void 0 ? showLegend : undefined : false;
248
248
  if (series.oneClick != null) {
249
- var {
250
- oneClick
251
- } = series;
252
- var {
253
- columns
254
- } = oneClick;
249
+ var oneClick = series.oneClick;
250
+ var columns = oneClick.columns;
255
251
  for (var i = 0; i < columns.length; i += 1) {
256
252
  this.filterColumnMap.set(columns[i].name, columns[i]);
257
253
  }
@@ -288,9 +284,7 @@ class FigureChartModel extends ChartModel {
288
284
  this.figure.unsubscribe();
289
285
  }
290
286
  startListeningFigure() {
291
- var {
292
- dh
293
- } = this;
287
+ var dh = this.dh;
294
288
  this.figure.addEventListener(dh.plot.Figure.EVENT_UPDATED, this.handleFigureUpdated);
295
289
  this.figure.addEventListener(dh.plot.Figure.EVENT_SERIES_ADDED, this.handleFigureSeriesAdded);
296
290
  this.figure.addEventListener(dh.plot.Figure.EVENT_DISCONNECT, this.handleFigureDisconnected);
@@ -302,9 +296,7 @@ class FigureChartModel extends ChartModel {
302
296
  this.figure.addEventListener(dh.Client.EVENT_REQUEST_FAILED, this.handleRequestFailed);
303
297
  }
304
298
  stopListeningFigure() {
305
- var {
306
- dh
307
- } = this;
299
+ var dh = this.dh;
308
300
  this.figure.removeEventListener(dh.plot.Figure.EVENT_UPDATED, this.handleFigureUpdated);
309
301
  this.figure.removeEventListener(dh.plot.Figure.EVENT_SERIES_ADDED, this.handleFigureSeriesAdded);
310
302
  this.figure.removeEventListener(dh.plot.Figure.EVENT_DISCONNECT, this.handleFigureDisconnected);
@@ -332,25 +324,17 @@ class FigureChartModel extends ChartModel {
332
324
  this.fireDownsampleNeeded(event.detail);
333
325
  }
334
326
  handleFigureUpdated(event) {
335
- var {
336
- detail: figureUpdateEvent
337
- } = event;
338
- var {
339
- series: seriesArray
340
- } = figureUpdateEvent;
327
+ var figureUpdateEvent = event.detail;
328
+ var seriesArray = figureUpdateEvent.series;
341
329
  log.debug2('handleFigureUpdated', seriesArray);
342
330
  for (var i = 0; i < seriesArray.length; i += 1) {
343
331
  var series = seriesArray[i];
344
332
  log.debug2('handleFigureUpdated updating series', series.name);
345
- var {
346
- sources
347
- } = series;
333
+ var sources = series.sources;
348
334
  for (var j = 0; j < sources.length; j += 1) {
349
335
  var source = sources[j];
350
- var {
351
- columnType,
352
- type
353
- } = source;
336
+ var columnType = source.columnType,
337
+ type = source.type;
354
338
  var valueTranslator = this.getValueTranslator(columnType, this.formatter);
355
339
  var dataArray = figureUpdateEvent.getArray(series, type, valueTranslator);
356
340
  this.setDataArrayForSeries(series, type, dataArray);
@@ -361,9 +345,7 @@ class FigureChartModel extends ChartModel {
361
345
  if (this.seriesToProcess.size === 0) {
362
346
  this.fireLoadFinished();
363
347
  }
364
- var {
365
- data
366
- } = this;
348
+ var data = this.data;
367
349
  this.fireUpdate(data);
368
350
  }
369
351
  handleRequestFailed(event) {
@@ -418,9 +400,7 @@ class FigureChartModel extends ChartModel {
418
400
  }
419
401
  }
420
402
  handleFigureSeriesAdded(event) {
421
- var {
422
- detail: series
423
- } = event;
403
+ var series = event.detail;
424
404
  log.debug('handleFigureSeriesAdded', series);
425
405
  this.pendingSeries.push(series);
426
406
  this.addPendingSeries();
@@ -504,10 +484,8 @@ class FigureChartModel extends ChartModel {
504
484
  * @param dataArray The array to use for the data for this series source.
505
485
  */
506
486
  setDataArrayForSeries(series, sourceType, dataArray) {
507
- var {
508
- name,
509
- plotStyle
510
- } = series;
487
+ var name = series.name,
488
+ plotStyle = series.plotStyle;
511
489
  var seriesData = this.seriesDataMap.get(name);
512
490
  var property = this.chartUtils.getPlotlyProperty(plotStyle, sourceType);
513
491
  if (seriesData) {
@@ -522,22 +500,16 @@ class FigureChartModel extends ChartModel {
522
500
  * @param series The series to clean the data for
523
501
  */
524
502
  cleanSeries(series) {
525
- var {
526
- dh
527
- } = this;
528
- var {
529
- name,
530
- plotStyle
531
- } = series;
503
+ var dh = this.dh;
504
+ var name = series.name,
505
+ plotStyle = series.plotStyle;
532
506
  var seriesData = this.seriesDataMap.get(name);
533
507
  if (seriesData == null) {
534
508
  return;
535
509
  }
536
510
  if (plotStyle === dh.plot.SeriesPlotStyle.HISTOGRAM) {
537
- var {
538
- xLow,
539
- xHigh
540
- } = seriesData;
511
+ var xLow = seriesData.xLow,
512
+ xHigh = seriesData.xHigh;
541
513
  if (xLow && xHigh && xLow.length === xHigh.length) {
542
514
  var width = [];
543
515
  for (var i = 0; i < xLow.length; i += 1) {
@@ -546,14 +518,12 @@ class FigureChartModel extends ChartModel {
546
518
  seriesData.width = width;
547
519
  }
548
520
  } else if (plotStyle === dh.plot.SeriesPlotStyle.LINE || plotStyle === dh.plot.SeriesPlotStyle.ERROR_BAR || plotStyle === dh.plot.SeriesPlotStyle.BAR) {
549
- var {
550
- x,
551
- xLow: _xLow,
552
- xHigh: _xHigh,
553
- y,
554
- yLow,
555
- yHigh
556
- } = seriesData;
521
+ var x = seriesData.x,
522
+ _xLow = seriesData.xLow,
523
+ _xHigh = seriesData.xHigh,
524
+ y = seriesData.y,
525
+ yLow = seriesData.yLow,
526
+ yHigh = seriesData.yHigh;
557
527
  if (_xLow && _xHigh && _xLow !== x) {
558
528
  seriesData.error_x = ChartUtils.getPlotlyErrorBars(x, _xLow, _xHigh);
559
529
  }
@@ -561,10 +531,8 @@ class FigureChartModel extends ChartModel {
561
531
  seriesData.error_y = ChartUtils.getPlotlyErrorBars(y, yLow, yHigh);
562
532
  }
563
533
  } else if (plotStyle === dh.plot.SeriesPlotStyle.TREEMAP) {
564
- var {
565
- ids,
566
- labels
567
- } = seriesData;
534
+ var ids = seriesData.ids,
535
+ labels = seriesData.labels;
568
536
  if (ids !== undefined && labels === undefined) {
569
537
  // If the user only provided IDs, we assign the IDs to the labels property as well automatically
570
538
  // Plotly uses the labels primarily, which from our API perspective seems kind of backwards
@@ -617,9 +585,7 @@ class FigureChartModel extends ChartModel {
617
585
  log.debug('setFilter', filterMap);
618
586
  var _loop3 = function _loop3() {
619
587
  var oneClick = _this3.oneClicks[i];
620
- var {
621
- columns
622
- } = oneClick;
588
+ var columns = oneClick.columns;
623
589
  // Need to get all the keys in case a filter was removed
624
590
  var keys = new Set([...filterMap.keys(), ..._this3.lastFilter.keys()]);
625
591
  keys.forEach(key => {
@@ -1 +1 @@
1
- {"version":3,"file":"FigureChartModel.js","names":["memoize","debounce","set","Log","TableUtils","ChartModel","ChartUtils","log","module","FigureChartModel","constructor","dh","figure","_this","settings","arguments","length","undefined","this","_defineProperty","axisTypeMap","getAxisTypeMap","pendingSeries","_loop","_chart$showLegend","series","i","chart","charts","find","c","includes","addSeries","showLegend","subscribe","ADD_SERIES_DEBOUNCE","columnType","formatter","dataFormatter","getColumnTypeFormatter","dhTimeZone","max","timeZone","getTimeZone","value","chartUtils","unwrapValue","wrapValue","range","rangeStart","rangeEnd","valueParser","getValueParser","axis","source","getSourceForAxis","getRangeParser","handleFigureUpdated","bind","handleFigureDisconnected","handleFigureReconnected","handleFigureSeriesAdded","handleDownsampleStart","handleDownsampleFinish","handleDownsampleFail","handleDownsampleNeeded","handleRequestFailed","data","layout","grid","rows","columns","cols","pattern","seriesDataMap","Map","oneClicks","filterColumnMap","lastFilter","isConnected","seriesToProcess","Set","setTitle","getDefaultTitle","initAllSeries","updateAxisPositions","startListeningFigure","close","addPendingSeries","cancel","stopListeningFigure","title","_this$figure$charts$","_this2","clear","activeSeriesNames","_loop2","j","push","name","axes","xAxis","type","plot","AxisType","X","yAxis","Y","warn","_axisTypeMap$get$find","_axisTypeMap$get","_axisTypeMap$get$find2","_axisTypeMap$get2","xAxisIndex","get","findIndex","a","yAxisIndex","annotation","align","x","y","yshift","text","showarrow","xref","concat","yref","annotations","allSeriesNames","keys","inactiveSeriesNames","filter","seriesName","indexOf","delete","_this$renderOptions$w","_this$renderOptions","seriesData","makeSeriesDataFromSeries","getSeriesVisibility","renderOptions","webgl","add","values","plotStyle","SeriesPlotStyle","STACKED_BAR","barmode","PIE","hiddenlabels","getHiddenLabels","showlegend","oneClick","updateLayoutFormats","callback","listeners","subscribeFigure","unsubscribe","unsubscribeFigure","debug","isDownsamplingDisabled","DownsampleOptions","DISABLE","DEFAULT","errors","error","fireError","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","valueTranslator","getValueTranslator","dataArray","getArray","setDataArrayForSeries","cleanSeries","size","fireLoadFinished","fireUpdate","resubscribe","setFormatter","setRenderOptions","setDownsamplingDisabled","fireDisconnect","fireReconnect","setDimensions","rect","_match$length","_match","subtitleCount","match","margin","DEFAULT_MARGIN","t","SUBTITLE_LINE_HEIGHT","_objectSpread","pad","DEFAULT_TITLE_PADDING","fireLayoutUpdated","getPlotWidth","_this$layout$margin$l","_this$layout$margin","_this$layout$margin$r","_this$layout$margin2","width","Math","l","r","getPlotHeight","_this$layout$margin$t","_this$layout$margin3","_this$layout$margin$b","_this$layout$margin4","height","b","plotWidth","plotHeight","updateFigureAxes","getAxisRangeParser","axisFormats","getAxisFormats","forEach","axisFormat","axisLayoutProperty","props","Object","assign","sourceType","property","getPlotlyProperty","HISTOGRAM","xLow","xHigh","LINE","ERROR_BAR","BAR","yLow","yHigh","error_x","getPlotlyErrorBars","error_y","TREEMAP","ids","labels","getData","getLayout","getFilterColumnMap","isFilterRequired","requireAllFiltersToDisplay","coerceFilterValue","isNumberType","num","Number","isNaN","setFilter","filterMap","_this3","_loop3","key","rawValue","column","setValueForColumn","setFigure","updateSettings"],"sources":["../src/FigureChartModel.ts"],"sourcesContent":["/* eslint class-methods-use-this: \"off\" */\nimport memoize from 'memoizee';\nimport { debounce, set } from 'lodash';\nimport type { dh as DhType } from '@deephaven/jsapi-types';\nimport Log from '@deephaven/log';\nimport { type Range } from '@deephaven/utils';\nimport type {\n Annotations,\n Layout,\n Data,\n PlotData,\n XAxisName,\n YAxisName,\n} from 'plotly.js';\nimport {\n TableUtils,\n type DateTimeColumnFormatter,\n type Formatter,\n} from '@deephaven/jsapi-utils';\nimport ChartModel, {\n type ChartEvent,\n type FigureUpdateEventData,\n type RenderOptions,\n} from './ChartModel';\nimport ChartUtils, {\n type AxisTypeMap,\n type ChartModelSettings,\n type FilterColumnMap,\n type FilterMap,\n} 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 JSAPI instance\n * @param figure The figure object created by the API\n * @param settings Chart settings\n */\n constructor(\n dh: typeof DhType,\n figure: DhType.plot.Figure,\n settings: Partial<ChartModelSettings> = {}\n ) {\n super(dh);\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.dh = dh;\n this.chartUtils = new ChartUtils(dh);\n this.figure = figure;\n this.settings = settings;\n this.data = [];\n this.layout = {\n grid: {\n rows: figure.rows,\n columns: figure.cols,\n pattern: 'independent',\n },\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 chartUtils: ChartUtils;\n\n dh: typeof DhType;\n\n figure: DhType.plot.Figure;\n\n settings: Partial<ChartModelSettings>;\n\n data: Partial<Data>[];\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: DhType.plot.Series[];\n\n oneClicks: DhType.plot.OneClick[];\n\n filterColumnMap: FilterColumnMap;\n\n lastFilter: FilterMap;\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.title != null && this.figure.title.length > 0) {\n return this.figure.title;\n }\n if (this.figure.charts.length === 1) {\n return this.figure.charts[0].title ?? '';\n }\n return '';\n }\n\n initAllSeries(): void {\n this.oneClicks = [];\n this.filterColumnMap.clear();\n\n const { charts } = this.figure;\n const axisTypeMap = ChartUtils.getAxisTypeMap(this.figure);\n const activeSeriesNames: string[] = [];\n\n this.seriesToProcess = new Set();\n\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, axisTypeMap, chart.showLegend);\n }\n\n // Need to add the chart titles as annotations if they are set\n const { axes, title } = chart;\n if (\n title != null &&\n title.length > 0 &&\n (charts.length > 1 || this.figure.title != null)\n ) {\n const xAxis = axes.find(axis => axis.type === this.dh.plot.AxisType.X);\n const yAxis = axes.find(axis => axis.type === this.dh.plot.AxisType.Y);\n if (xAxis == null || yAxis == null) {\n log.warn(\n 'Chart title provided, but unknown how to map to the correct axes for this chart type',\n chart\n );\n } else {\n const xAxisIndex =\n (axisTypeMap.get(xAxis.type)?.findIndex(a => a === xAxis) ?? 0) + 1;\n const yAxisIndex =\n (axisTypeMap.get(yAxis.type)?.findIndex(a => a === yAxis) ?? 0) + 1;\n\n const annotation: Partial<Annotations> = {\n align: 'center',\n x: 0.5,\n y: 1,\n yshift: 17,\n text: title,\n showarrow: false,\n\n // Typing is incorrect in Plotly for this, as it doesn't seem to be typed for the \"domain\" part: https://plotly.com/javascript/reference/layout/annotations/#layout-annotations-items-annotation-xref\n xref: `x${xAxisIndex} domain` as XAxisName,\n yref: `y${yAxisIndex} domain` as YAxisName,\n };\n if (this.layout.annotations == null) {\n this.layout.annotations = [annotation];\n } else {\n this.layout.annotations.push(annotation);\n }\n }\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 }\n\n /**\n * Add a series to the model\n * @param series Series object to add\n * @param axisTypeMap Map of axis type to the axes in this Figure\n * @param showLegend Whether this series should show the legend or not\n */\n addSeries(\n series: DhType.plot.Series,\n axisTypeMap: AxisTypeMap,\n showLegend: boolean | null\n ): void {\n const { dh } = this;\n\n const seriesData = this.chartUtils.makeSeriesDataFromSeries(\n series,\n axisTypeMap,\n ChartUtils.getSeriesVisibility(series.name, this.settings),\n showLegend,\n this.renderOptions?.webgl ?? true\n );\n\n this.seriesDataMap.set(series.name, seriesData);\n this.seriesToProcess.add(series.name);\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 // We only want to force hide the legend if there is only one series that is not a PIE\n // Right now this means that if the user only has one series, they cannot explicitly show the legend until deephaven-core#3254 is implemented\n // TODO: deephaven-core#3254, once done, this can be removed.\n this.layout.showlegend =\n this.data.length > 1 || series.plotStyle === dh.plot.SeriesPlotStyle.PIE\n ? showLegend ?? undefined\n : false;\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 axisTypeMap = ChartUtils.getAxisTypeMap(this.figure);\n const { pendingSeries } = this;\n for (let i = 0; i < pendingSeries.length; i += 1) {\n const series = pendingSeries[i];\n const chart = this.figure.charts.find(c => c.series.includes(series));\n this.addSeries(series, axisTypeMap, chart?.showLegend ?? null);\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 ? this.dh.plot.DownsampleOptions.DISABLE\n : this.dh.plot.DownsampleOptions.DEFAULT\n );\n\n if (this.figure.errors.length > 0) {\n log.error('Errors in figure', this.figure.errors);\n this.fireError(this.figure.errors);\n }\n }\n\n unsubscribeFigure(): void {\n this.figure.unsubscribe();\n }\n\n startListeningFigure(): void {\n const { dh } = this;\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 const { dh } = this;\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 { max: 100 }\n );\n\n getValueTranslator = memoize(\n (columnType: string, formatter: Formatter | undefined) => {\n const timeZone = this.getTimeZone(columnType, formatter);\n return (value: unknown) => this.chartUtils.unwrapValue(value, timeZone);\n },\n { max: 100 }\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 this.chartUtils.wrapValue(value, columnType, timeZone);\n },\n { max: 100 }\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 { max: 100 }\n );\n\n /**\n * Gets the parser for parsing the range from an axis within the given chart\n */\n getAxisRangeParser = memoize(\n (chart: DhType.plot.Chart, formatter?: Formatter) =>\n (axis: DhType.plot.Axis) => {\n const source = ChartUtils.getSourceForAxis(chart, axis);\n if (source != null) {\n return this.getRangeParser(source.columnType, formatter);\n }\n\n return (range: [unknown, unknown]) => range;\n },\n { max: 100 }\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: DhType.Event<FigureUpdateEventData>): 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\n this.cleanSeries(series);\n }\n if (this.seriesToProcess.size === 0) {\n this.fireLoadFinished();\n }\n\n const { data } = this;\n this.fireUpdate(data);\n }\n\n handleRequestFailed(event: ChartEvent): void {\n log.error('Request failed', event);\n this.fireError([`${event.detail}`]);\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 setRenderOptions(renderOptions: RenderOptions): void {\n super.setRenderOptions(renderOptions);\n\n // Reset all the series to re-render them with the correct rendering options\n this.initAllSeries();\n }\n\n setDownsamplingDisabled(isDownsamplingDisabled: boolean): void {\n super.setDownsamplingDisabled(isDownsamplingDisabled);\n\n this.resubscribe();\n }\n\n handleFigureDisconnected(event: DhType.Event<unknown>): 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: DhType.Event<unknown>): 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: DhType.plot.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 = {\n text: title,\n };\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 this.fireLayoutUpdated({ title: this.layout.title });\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 this.chartUtils.updateFigureAxes(\n this.layout,\n this.figure,\n chart => this.getAxisRangeParser(chart, this.formatter),\n plotWidth,\n plotHeight\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 = this.chartUtils.getAxisFormats(\n this.figure,\n this.formatter\n );\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: DhType.plot.Series,\n sourceType: DhType.plot.SourceType,\n dataArray: unknown[]\n ): void {\n const { name, plotStyle } = series;\n\n const seriesData = this.seriesDataMap.get(name);\n const property = this.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: DhType.plot.Series): void {\n const { dh } = this;\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 (\n plotStyle === dh.plot.SeriesPlotStyle.LINE ||\n plotStyle === dh.plot.SeriesPlotStyle.ERROR_BAR ||\n plotStyle === dh.plot.SeriesPlotStyle.BAR\n ) {\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<Data>[] {\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 * Coerce a filter value to the appropriate type based on column type.\n * Input filter controls always provide string values, but OneClick expects the\n * native type (e.g. number for numeric columns) to match partition keys.\n * Linkers provide the raw value, so that value should be returned as is.\n */\n private coerceFilterValue(value: unknown, columnType: string): unknown {\n if (value == null) {\n return value;\n }\n if (typeof value === 'string' && TableUtils.isNumberType(columnType)) {\n const num = Number(value);\n if (!Number.isNaN(num)) {\n return num;\n }\n }\n return value;\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: FilterMap): 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 rawValue = filterMap.get(key);\n const column = columns.find(c => c.name === key);\n if (this.lastFilter.get(key) !== rawValue && column != null) {\n const value =\n rawValue != null\n ? this.coerceFilterValue(rawValue, column.type)\n : rawValue;\n oneClick.setValueForColumn(key, value);\n }\n });\n }\n\n this.lastFilter = new Map(filterMap);\n }\n\n setFigure(figure: DhType.plot.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":";;;;;AAAA;AACA,OAAOA,OAAO,MAAM,UAAU;AAC9B,SAASC,QAAQ,EAAEC,GAAG,QAAQ,QAAQ;AAEtC,OAAOC,GAAG,MAAM,gBAAgB;AAUhC,SACEC,UAAU,QAGL,wBAAwB;AAAC,OACzBC,UAAU;AAAA,OAKVC,UAAU;AAOjB,IAAMC,GAAG,GAAGJ,GAAG,CAACK,MAAM,CAAC,kBAAkB,CAAC;;AAE1C;AACA;AACA;AACA,MAAMC,gBAAgB,SAASJ,UAAU,CAAC;EAGxC;AACF;AACA;AACA;AACA;EACEK,WAAWA,CACTC,EAAiB,EACjBC,MAA0B,EAE1B;IAAA,IAAAC,KAAA;IAAA,IADAC,QAAqC,GAAAC,SAAA,CAAAC,MAAA,QAAAD,SAAA,QAAAE,SAAA,GAAAF,SAAA,MAAG,CAAC,CAAC;IAE1C,KAAK,CAACJ,EAAE,CAAC;IAAAE,KAAA,GAAAK,IAAA;IAAAC,eAAA;IAAAA,eAAA;IAAAA,eAAA;IAAAA,eAAA;IAAAA,eAAA;IAAAA,eAAA;IAAAA,eAAA;IAAAA,eAAA;IAAAA,eAAA;IAAAA,eAAA;IAAAA,eAAA;IAAAA,eAAA;IAoEW;IAAAA,eAAA;IAgJtB;IACA;IAAAA,eAAA,2BACmBlB,QAAQ,CAAC,MAAM;MAChC,IAAMmB,WAAW,GAAGd,UAAU,CAACe,cAAc,CAAC,IAAI,CAACT,MAAM,CAAC;MAC1D,IAAM;QAAEU;MAAc,CAAC,GAAG,IAAI;MAAC,IAAAC,KAAA,YAAAA,MAAA,EACmB;QAAA,IAAAC,iBAAA;QAChD,IAAMC,MAAM,GAAGH,aAAa,CAACI,CAAC,CAAC;QAC/B,IAAMC,KAAK,GAAGd,KAAI,CAACD,MAAM,CAACgB,MAAM,CAACC,IAAI,CAACC,CAAC,IAAIA,CAAC,CAACL,MAAM,CAACM,QAAQ,CAACN,MAAM,CAAC,CAAC;QACrEZ,KAAI,CAACmB,SAAS,CAACP,MAAM,EAAEL,WAAW,GAAAI,iBAAA,GAAEG,KAAK,aAALA,KAAK,uBAALA,KAAK,CAAEM,UAAU,cAAAT,iBAAA,cAAAA,iBAAA,GAAI,IAAI,CAAC;QAE9DC,MAAM,CAACS,SAAS,CAAC,CAAC;QAClB;MACF,CAAC;MAPD,KAAK,IAAIR,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGJ,aAAa,CAACN,MAAM,EAAEU,CAAC,IAAI,CAAC;QAAAH,KAAA;MAAA;MAShD,IAAI,CAACD,aAAa,GAAG,EAAE;IACzB,CAAC,EAAEb,gBAAgB,CAAC0B,mBAAmB,CAAC;IAAAhB,eAAA,sBA0H1BnB,OAAO,CACnB,CAACoC,UAAkB,EAAEC,SAAgC,KAAK;MACxD,IAAIA,SAAS,IAAI,IAAI,EAAE;QACrB,IAAMC,aAAa,GAAGD,SAAS,CAACE,sBAAsB,CAACH,UAAU,CAAC;QAClE,IAAIE,aAAa,IAAI,IAAI,EAAE;UACzB,OAAQA,aAAa,CAA6BE,UAAU;QAC9D;MACF;MACA,OAAOvB,SAAS;IAClB,CAAC,EACD;MAAEwB,GAAG,EAAE;IAAI,CACb,CAAC;IAAAtB,eAAA,6BAEoBnB,OAAO,CAC1B,CAACoC,UAAkB,EAAEC,SAAgC,KAAK;MACxD,IAAMK,QAAQ,GAAG,IAAI,CAACC,WAAW,CAACP,UAAU,EAAEC,SAAS,CAAC;MACxD,OAAQO,KAAc,IAAK,IAAI,CAACC,UAAU,CAACC,WAAW,CAACF,KAAK,EAAEF,QAAQ,CAAC;IACzE,CAAC,EACD;MAAED,GAAG,EAAE;IAAI,CACb,CAAC;IAED;IAAAtB,eAAA,yBACiBnB,OAAO,CACtB,CAACoC,UAAkB,EAAEC,SAAgC,KAAK;MACxD,IAAMK,QAAQ,GAAG,IAAI,CAACC,WAAW,CAACP,UAAU,EAAEC,SAAS,CAAC;MACxD,OAAQO,KAAc,IACpB,IAAI,CAACC,UAAU,CAACE,SAAS,CAACH,KAAK,EAAER,UAAU,EAAEM,QAAQ,CAAC;IAC1D,CAAC,EACD;MAAED,GAAG,EAAE;IAAI,CACb,CAAC;IAED;AACF;AACA;IAFEtB,eAAA,yBAGiBnB,OAAO,CACtB,CAACoC,UAAkB,EAAEC,SAAqB,KAAMW,KAAY,IAAK;MAC/D,IAAI,CAACC,UAAU,EAAEC,QAAQ,CAAqB,GAAGF,KAAK;MACtD,IAAMG,WAAW,GAAG,IAAI,CAACC,cAAc,CAAChB,UAAU,EAAEC,SAAS,CAAC;MAC9DY,UAAU,GAAGE,WAAW,CAACF,UAAU,CAAC;MACpCC,QAAQ,GAAGC,WAAW,CAACD,QAAQ,CAAC;MAChC,OAAO,CAACD,UAAU,EAAEC,QAAQ,CAAC;IAC/B,CAAC,EACD;MAAET,GAAG,EAAE;IAAI,CACb,CAAC;IAED;AACF;AACA;IAFEtB,eAAA,6BAGqBnB,OAAO,CAC1B,CAAC2B,KAAwB,EAAEU,SAAqB,KAC7CgB,IAAsB,IAAK;MAC1B,IAAMC,MAAM,GAAGhD,UAAU,CAACiD,gBAAgB,CAAC5B,KAAK,EAAE0B,IAAI,CAAC;MACvD,IAAIC,MAAM,IAAI,IAAI,EAAE;QAClB,OAAO,IAAI,CAACE,cAAc,CAACF,MAAM,CAAClB,UAAU,EAAEC,SAAS,CAAC;MAC1D;MAEA,OAAQW,KAAyB,IAAKA,KAAK;IAC7C,CAAC,EACH;MAAEP,GAAG,EAAE;IAAI,CACb,CAAC;IAtZC,IAAI,CAACgB,mBAAmB,GAAG,IAAI,CAACA,mBAAmB,CAACC,IAAI,CAAC,IAAI,CAAC;IAC9D,IAAI,CAACC,wBAAwB,GAAG,IAAI,CAACA,wBAAwB,CAACD,IAAI,CAAC,IAAI,CAAC;IACxE,IAAI,CAACE,uBAAuB,GAAG,IAAI,CAACA,uBAAuB,CAACF,IAAI,CAAC,IAAI,CAAC;IACtE,IAAI,CAACG,uBAAuB,GAAG,IAAI,CAACA,uBAAuB,CAACH,IAAI,CAAC,IAAI,CAAC;IACtE,IAAI,CAACI,qBAAqB,GAAG,IAAI,CAACA,qBAAqB,CAACJ,IAAI,CAAC,IAAI,CAAC;IAClE,IAAI,CAACK,sBAAsB,GAAG,IAAI,CAACA,sBAAsB,CAACL,IAAI,CAAC,IAAI,CAAC;IACpE,IAAI,CAACM,oBAAoB,GAAG,IAAI,CAACA,oBAAoB,CAACN,IAAI,CAAC,IAAI,CAAC;IAChE,IAAI,CAACO,sBAAsB,GAAG,IAAI,CAACA,sBAAsB,CAACP,IAAI,CAAC,IAAI,CAAC;IACpE,IAAI,CAACQ,mBAAmB,GAAG,IAAI,CAACA,mBAAmB,CAACR,IAAI,CAAC,IAAI,CAAC;IAE9D,IAAI,CAAC/C,EAAE,GAAGA,EAAE;IACZ,IAAI,CAACkC,UAAU,GAAG,IAAIvC,UAAU,CAACK,EAAE,CAAC;IACpC,IAAI,CAACC,MAAM,GAAGA,MAAM;IACpB,IAAI,CAACE,QAAQ,GAAGA,QAAQ;IACxB,IAAI,CAACqD,IAAI,GAAG,EAAE;IACd,IAAI,CAACC,MAAM,GAAG;MACZC,IAAI,EAAE;QACJC,IAAI,EAAE1D,MAAM,CAAC0D,IAAI;QACjBC,OAAO,EAAE3D,MAAM,CAAC4D,IAAI;QACpBC,OAAO,EAAE;MACX;IACF,CAAC;IACD,IAAI,CAACC,aAAa,GAAG,IAAIC,GAAG,CAAC,CAAC;IAC9B,IAAI,CAACrD,aAAa,GAAG,EAAE;IACvB,IAAI,CAACsD,SAAS,GAAG,EAAE;IACnB,IAAI,CAACC,eAAe,GAAG,IAAIF,GAAG,CAAC,CAAC;IAChC,IAAI,CAACG,UAAU,GAAG,IAAIH,GAAG,CAAC,CAAC;IAC3B,IAAI,CAACI,WAAW,GAAG,IAAI,CAAC,CAAC;IACzB,IAAI,CAACC,eAAe,GAAG,IAAIC,GAAG,CAAC,CAAC;IAEhC,IAAI,CAACC,QAAQ,CAAC,IAAI,CAACC,eAAe,CAAC,CAAC,CAAC;IACrC,IAAI,CAACC,aAAa,CAAC,CAAC;IACpB,IAAI,CAACC,mBAAmB,CAAC,CAAC;IAC1B,IAAI,CAACC,oBAAoB,CAAC,CAAC;EAC7B;EAoCAC,KAAKA,CAAA,EAAS;IACZ,IAAI,CAAC3E,MAAM,CAAC2E,KAAK,CAAC,CAAC;IACnB,IAAI,CAACC,gBAAgB,CAACC,MAAM,CAAC,CAAC;IAC9B,IAAI,CAACC,mBAAmB,CAAC,CAAC;EAC5B;EAEAP,eAAeA,CAAA,EAAW;IACxB,IAAI,IAAI,CAACvE,MAAM,CAAC+E,KAAK,IAAI,IAAI,IAAI,IAAI,CAAC/E,MAAM,CAAC+E,KAAK,CAAC3E,MAAM,GAAG,CAAC,EAAE;MAC7D,OAAO,IAAI,CAACJ,MAAM,CAAC+E,KAAK;IAC1B;IACA,IAAI,IAAI,CAAC/E,MAAM,CAACgB,MAAM,CAACZ,MAAM,KAAK,CAAC,EAAE;MAAA,IAAA4E,oBAAA;MACnC,QAAAA,oBAAA,GAAO,IAAI,CAAChF,MAAM,CAACgB,MAAM,CAAC,CAAC,CAAC,CAAC+D,KAAK,cAAAC,oBAAA,cAAAA,oBAAA,GAAI,EAAE;IAC1C;IACA,OAAO,EAAE;EACX;EAEAR,aAAaA,CAAA,EAAS;IAAA,IAAAS,MAAA;IACpB,IAAI,CAACjB,SAAS,GAAG,EAAE;IACnB,IAAI,CAACC,eAAe,CAACiB,KAAK,CAAC,CAAC;IAE5B,IAAM;MAAElE;IAAO,CAAC,GAAG,IAAI,CAAChB,MAAM;IAC9B,IAAMQ,WAAW,GAAGd,UAAU,CAACe,cAAc,CAAC,IAAI,CAACT,MAAM,CAAC;IAC1D,IAAMmF,iBAA2B,GAAG,EAAE;IAEtC,IAAI,CAACf,eAAe,GAAG,IAAIC,GAAG,CAAC,CAAC;IAAC,IAAAe,MAAA,YAAAA,OAAA,EAEU;MACzC,IAAMrE,KAAK,GAAGC,MAAM,CAACF,CAAC,CAAC;MAEvB,KAAK,IAAIuE,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGtE,KAAK,CAACF,MAAM,CAACT,MAAM,EAAEiF,CAAC,IAAI,CAAC,EAAE;QAC/C,IAAMxE,MAAM,GAAGE,KAAK,CAACF,MAAM,CAACwE,CAAC,CAAC;QAC9BF,iBAAiB,CAACG,IAAI,CAACzE,MAAM,CAAC0E,IAAI,CAAC;QACnCN,MAAI,CAAC7D,SAAS,CAACP,MAAM,EAAEL,WAAW,EAAEO,KAAK,CAACM,UAAU,CAAC;MACvD;;MAEA;MACA,IAAM;QAAEmE,IAAI;QAAET;MAAM,CAAC,GAAGhE,KAAK;MAC7B,IACEgE,KAAK,IAAI,IAAI,IACbA,KAAK,CAAC3E,MAAM,GAAG,CAAC,KACfY,MAAM,CAACZ,MAAM,GAAG,CAAC,IAAI6E,MAAI,CAACjF,MAAM,CAAC+E,KAAK,IAAI,IAAI,CAAC,EAChD;QACA,IAAMU,KAAK,GAAGD,IAAI,CAACvE,IAAI,CAACwB,IAAI,IAAIA,IAAI,CAACiD,IAAI,KAAKT,MAAI,CAAClF,EAAE,CAAC4F,IAAI,CAACC,QAAQ,CAACC,CAAC,CAAC;QACtE,IAAMC,KAAK,GAAGN,IAAI,CAACvE,IAAI,CAACwB,IAAI,IAAIA,IAAI,CAACiD,IAAI,KAAKT,MAAI,CAAClF,EAAE,CAAC4F,IAAI,CAACC,QAAQ,CAACG,CAAC,CAAC;QACtE,IAAIN,KAAK,IAAI,IAAI,IAAIK,KAAK,IAAI,IAAI,EAAE;UAClCnG,GAAG,CAACqG,IAAI,CACN,sFAAsF,EACtFjF,KACF,CAAC;QACH,CAAC,MAAM;UAAA,IAAAkF,qBAAA,EAAAC,gBAAA,EAAAC,sBAAA,EAAAC,iBAAA;UACL,IAAMC,UAAU,GACd,EAAAJ,qBAAA,IAAAC,gBAAA,GAAC1F,WAAW,CAAC8F,GAAG,CAACb,KAAK,CAACC,IAAI,CAAC,cAAAQ,gBAAA,uBAA3BA,gBAAA,CAA6BK,SAAS,CAACC,CAAC,IAAIA,CAAC,KAAKf,KAAK,CAAC,cAAAQ,qBAAA,cAAAA,qBAAA,GAAI,CAAC,IAAI,CAAC;UACrE,IAAMQ,UAAU,GACd,EAAAN,sBAAA,IAAAC,iBAAA,GAAC5F,WAAW,CAAC8F,GAAG,CAACR,KAAK,CAACJ,IAAI,CAAC,cAAAU,iBAAA,uBAA3BA,iBAAA,CAA6BG,SAAS,CAACC,CAAC,IAAIA,CAAC,KAAKV,KAAK,CAAC,cAAAK,sBAAA,cAAAA,sBAAA,GAAI,CAAC,IAAI,CAAC;UAErE,IAAMO,UAAgC,GAAG;YACvCC,KAAK,EAAE,QAAQ;YACfC,CAAC,EAAE,GAAG;YACNC,CAAC,EAAE,CAAC;YACJC,MAAM,EAAE,EAAE;YACVC,IAAI,EAAEhC,KAAK;YACXiC,SAAS,EAAE,KAAK;YAEhB;YACAC,IAAI,MAAAC,MAAA,CAAMb,UAAU,YAAsB;YAC1Cc,IAAI,MAAAD,MAAA,CAAMT,UAAU;UACtB,CAAC;UACD,IAAIxB,MAAI,CAACzB,MAAM,CAAC4D,WAAW,IAAI,IAAI,EAAE;YACnCnC,MAAI,CAACzB,MAAM,CAAC4D,WAAW,GAAG,CAACV,UAAU,CAAC;UACxC,CAAC,MAAM;YACLzB,MAAI,CAACzB,MAAM,CAAC4D,WAAW,CAAC9B,IAAI,CAACoB,UAAU,CAAC;UAC1C;QACF;MACF;IACF,CAAC;IAhDD,KAAK,IAAI5F,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGE,MAAM,CAACZ,MAAM,EAAEU,CAAC,IAAI,CAAC;MAAAsE,MAAA;IAAA;;IAkDzC;IACA,IAAMiC,cAAc,GAAG,CAAC,GAAG,IAAI,CAACvD,aAAa,CAACwD,IAAI,CAAC,CAAC,CAAC;IACrD,IAAMC,mBAAmB,GAAGF,cAAc,CAACG,MAAM,CAC/CC,UAAU,IAAItC,iBAAiB,CAACuC,OAAO,CAACD,UAAU,CAAC,GAAG,CACxD,CAAC;IACD,KAAK,IAAI3G,EAAC,GAAG,CAAC,EAAEA,EAAC,GAAGyG,mBAAmB,CAACnH,MAAM,EAAEU,EAAC,IAAI,CAAC,EAAE;MACtD,IAAM2G,UAAU,GAAGF,mBAAmB,CAACzG,EAAC,CAAC;MACzC,IAAI,CAACgD,aAAa,CAAC6D,MAAM,CAACF,UAAU,CAAC;IACvC;EACF;;EAEA;AACF;AACA;AACA;AACA;AACA;EACErG,SAASA,CACPP,MAA0B,EAC1BL,WAAwB,EACxBa,UAA0B,EACpB;IAAA,IAAAuG,qBAAA,EAAAC,mBAAA;IACN,IAAM;MAAE9H;IAAG,CAAC,GAAG,IAAI;IAEnB,IAAM+H,UAAU,GAAG,IAAI,CAAC7F,UAAU,CAAC8F,wBAAwB,CACzDlH,MAAM,EACNL,WAAW,EACXd,UAAU,CAACsI,mBAAmB,CAACnH,MAAM,CAAC0E,IAAI,EAAE,IAAI,CAACrF,QAAQ,CAAC,EAC1DmB,UAAU,GAAAuG,qBAAA,IAAAC,mBAAA,GACV,IAAI,CAACI,aAAa,cAAAJ,mBAAA,uBAAlBA,mBAAA,CAAoBK,KAAK,cAAAN,qBAAA,cAAAA,qBAAA,GAAI,IAC/B,CAAC;IAED,IAAI,CAAC9D,aAAa,CAACxE,GAAG,CAACuB,MAAM,CAAC0E,IAAI,EAAEuC,UAAU,CAAC;IAC/C,IAAI,CAAC1D,eAAe,CAAC+D,GAAG,CAACtH,MAAM,CAAC0E,IAAI,CAAC;IAErC,IAAI,CAAChC,IAAI,GAAG,CAAC,GAAG,IAAI,CAACO,aAAa,CAACsE,MAAM,CAAC,CAAC,CAAC;IAE5C,IAAIvH,MAAM,CAACwH,SAAS,KAAKtI,EAAE,CAAC4F,IAAI,CAAC2C,eAAe,CAACC,WAAW,EAAE;MAC5D,IAAI,CAAC/E,MAAM,CAACgF,OAAO,GAAG,OAAO;IAC/B,CAAC,MAAM,IAAI3H,MAAM,CAACwH,SAAS,KAAKtI,EAAE,CAAC4F,IAAI,CAAC2C,eAAe,CAACG,GAAG,EAAE;MAC3D,IAAI,CAACjF,MAAM,CAACkF,YAAY,GAAGhJ,UAAU,CAACiJ,eAAe,CAAC,IAAI,CAACzI,QAAQ,CAAC;IACtE;;IAEA;IACA;IACA;IACA,IAAI,CAACsD,MAAM,CAACoF,UAAU,GACpB,IAAI,CAACrF,IAAI,CAACnD,MAAM,GAAG,CAAC,IAAIS,MAAM,CAACwH,SAAS,KAAKtI,EAAE,CAAC4F,IAAI,CAAC2C,eAAe,CAACG,GAAG,GACpEpH,UAAU,aAAVA,UAAU,cAAVA,UAAU,GAAIhB,SAAS,GACvB,KAAK;IAEX,IAAIQ,MAAM,CAACgI,QAAQ,IAAI,IAAI,EAAE;MAC3B,IAAM;QAAEA;MAAS,CAAC,GAAGhI,MAAM;MAC3B,IAAM;QAAE8C;MAAQ,CAAC,GAAGkF,QAAQ;MAC5B,KAAK,IAAI/H,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAG6C,OAAO,CAACvD,MAAM,EAAEU,CAAC,IAAI,CAAC,EAAE;QAC1C,IAAI,CAACmD,eAAe,CAAC3E,GAAG,CAACqE,OAAO,CAAC7C,CAAC,CAAC,CAACyE,IAAI,EAAE5B,OAAO,CAAC7C,CAAC,CAAC,CAAC;MACvD;MAEA,IAAI,CAACkD,SAAS,CAACsB,IAAI,CAACuD,QAAQ,CAAC;IAC/B;IAEA,IAAI,CAACC,mBAAmB,CAAC,CAAC;EAC5B;EAmBAxH,SAASA,CAACyH,QAAqC,EAAQ;IACrD,KAAK,CAACzH,SAAS,CAACyH,QAAQ,CAAC;IAEzB,IAAI,IAAI,CAACC,SAAS,CAAC5I,MAAM,KAAK,CAAC,EAAE;MAC/B;MACA,IAAI,CAACoE,aAAa,CAAC,CAAC;MACpB,IAAI,CAACyE,eAAe,CAAC,CAAC;IACxB;EACF;EAEAC,WAAWA,CAACH,QAAqC,EAAQ;IACvD,KAAK,CAACG,WAAW,CAACH,QAAQ,CAAC;IAE3B,IAAI,IAAI,CAACC,SAAS,CAAC5I,MAAM,KAAK,CAAC,EAAE;MAC/B,IAAI,CAAC+I,iBAAiB,CAAC,CAAC;IAC1B;EACF;EAEAF,eAAeA,CAAA,EAAS;IACtB,IAAI,CAAC,IAAI,CAAC9E,WAAW,EAAE;MACrBxE,GAAG,CAACyJ,KAAK,CAAC,sDAAsD,CAAC;MACjE;IACF;IAEA,IAAI,CAACpJ,MAAM,CAACsB,SAAS,CACnB,IAAI,CAAC+H,sBAAsB,GACvB,IAAI,CAACtJ,EAAE,CAAC4F,IAAI,CAAC2D,iBAAiB,CAACC,OAAO,GACtC,IAAI,CAACxJ,EAAE,CAAC4F,IAAI,CAAC2D,iBAAiB,CAACE,OACrC,CAAC;IAED,IAAI,IAAI,CAACxJ,MAAM,CAACyJ,MAAM,CAACrJ,MAAM,GAAG,CAAC,EAAE;MACjCT,GAAG,CAAC+J,KAAK,CAAC,kBAAkB,EAAE,IAAI,CAAC1J,MAAM,CAACyJ,MAAM,CAAC;MACjD,IAAI,CAACE,SAAS,CAAC,IAAI,CAAC3J,MAAM,CAACyJ,MAAM,CAAC;IACpC;EACF;EAEAN,iBAAiBA,CAAA,EAAS;IACxB,IAAI,CAACnJ,MAAM,CAACkJ,WAAW,CAAC,CAAC;EAC3B;EAEAxE,oBAAoBA,CAAA,EAAS;IAC3B,IAAM;MAAE3E;IAAG,CAAC,GAAG,IAAI;IACnB,IAAI,CAACC,MAAM,CAAC4J,gBAAgB,CAC1B7J,EAAE,CAAC4F,IAAI,CAACkE,MAAM,CAACC,aAAa,EAC5B,IAAI,CAACjH,mBACP,CAAC;IACD,IAAI,CAAC7C,MAAM,CAAC4J,gBAAgB,CAC1B7J,EAAE,CAAC4F,IAAI,CAACkE,MAAM,CAACE,kBAAkB,EACjC,IAAI,CAAC9G,uBACP,CAAC;IACD,IAAI,CAACjD,MAAM,CAAC4J,gBAAgB,CAC1B7J,EAAE,CAAC4F,IAAI,CAACkE,MAAM,CAACG,gBAAgB,EAC/B,IAAI,CAACjH,wBACP,CAAC;IACD,IAAI,CAAC/C,MAAM,CAAC4J,gBAAgB,CAC1B7J,EAAE,CAAC4F,IAAI,CAACkE,MAAM,CAACI,eAAe,EAC9B,IAAI,CAACjH,uBACP,CAAC;IACD,IAAI,CAAChD,MAAM,CAAC4J,gBAAgB,CAC1B7J,EAAE,CAAC4F,IAAI,CAACkE,MAAM,CAACK,uBAAuB,EACtC,IAAI,CAAChH,qBACP,CAAC;IACD,IAAI,CAAClD,MAAM,CAAC4J,gBAAgB,CAC1B7J,EAAE,CAAC4F,IAAI,CAACkE,MAAM,CAACM,wBAAwB,EACvC,IAAI,CAAChH,sBACP,CAAC;IACD,IAAI,CAACnD,MAAM,CAAC4J,gBAAgB,CAC1B7J,EAAE,CAAC4F,IAAI,CAACkE,MAAM,CAACO,sBAAsB,EACrC,IAAI,CAAChH,oBACP,CAAC;IACD,IAAI,CAACpD,MAAM,CAAC4J,gBAAgB,CAC1B7J,EAAE,CAAC4F,IAAI,CAACkE,MAAM,CAACQ,sBAAsB,EACrC,IAAI,CAAChH,sBACP,CAAC;IACD,IAAI,CAACrD,MAAM,CAAC4J,gBAAgB,CAC1B7J,EAAE,CAACuK,MAAM,CAACC,oBAAoB,EAC9B,IAAI,CAACjH,mBACP,CAAC;EACH;EAEAwB,mBAAmBA,CAAA,EAAS;IAC1B,IAAM;MAAE/E;IAAG,CAAC,GAAG,IAAI;IACnB,IAAI,CAACC,MAAM,CAACwK,mBAAmB,CAC7BzK,EAAE,CAAC4F,IAAI,CAACkE,MAAM,CAACC,aAAa,EAC5B,IAAI,CAACjH,mBACP,CAAC;IACD,IAAI,CAAC7C,MAAM,CAACwK,mBAAmB,CAC7BzK,EAAE,CAAC4F,IAAI,CAACkE,MAAM,CAACE,kBAAkB,EACjC,IAAI,CAAC9G,uBACP,CAAC;IACD,IAAI,CAACjD,MAAM,CAACwK,mBAAmB,CAC7BzK,EAAE,CAAC4F,IAAI,CAACkE,MAAM,CAACG,gBAAgB,EAC/B,IAAI,CAACjH,wBACP,CAAC;IACD,IAAI,CAAC/C,MAAM,CAACwK,mBAAmB,CAC7BzK,EAAE,CAAC4F,IAAI,CAACkE,MAAM,CAACI,eAAe,EAC9B,IAAI,CAACjH,uBACP,CAAC;IACD,IAAI,CAAChD,MAAM,CAACwK,mBAAmB,CAC7BzK,EAAE,CAAC4F,IAAI,CAACkE,MAAM,CAACK,uBAAuB,EACtC,IAAI,CAAChH,qBACP,CAAC;IACD,IAAI,CAAClD,MAAM,CAACwK,mBAAmB,CAC7BzK,EAAE,CAAC4F,IAAI,CAACkE,MAAM,CAACM,wBAAwB,EACvC,IAAI,CAAChH,sBACP,CAAC;IACD,IAAI,CAACnD,MAAM,CAACwK,mBAAmB,CAC7BzK,EAAE,CAAC4F,IAAI,CAACkE,MAAM,CAACO,sBAAsB,EACrC,IAAI,CAAChH,oBACP,CAAC;IACD,IAAI,CAACpD,MAAM,CAACwK,mBAAmB,CAC7BzK,EAAE,CAAC4F,IAAI,CAACkE,MAAM,CAACQ,sBAAsB,EACrC,IAAI,CAAChH,sBACP,CAAC;IACD,IAAI,CAACrD,MAAM,CAACwK,mBAAmB,CAC7BzK,EAAE,CAACuK,MAAM,CAACC,oBAAoB,EAC9B,IAAI,CAACjH,mBACP,CAAC;EACH;EA+DAJ,qBAAqBA,CAACuH,KAAiB,EAAQ;IAC7C9K,GAAG,CAACyJ,KAAK,CAAC,oBAAoB,EAAEqB,KAAK,CAAC;IAEtC,IAAI,CAACC,mBAAmB,CAACD,KAAK,CAACE,MAAM,CAAC;EACxC;EAEAxH,sBAAsBA,CAACsH,KAAiB,EAAQ;IAC9C9K,GAAG,CAACyJ,KAAK,CAAC,qBAAqB,EAAEqB,KAAK,CAAC;IAEvC,IAAI,CAACG,oBAAoB,CAACH,KAAK,CAACE,MAAM,CAAC;EACzC;EAEAvH,oBAAoBA,CAACqH,KAAiB,EAAQ;IAC5C9K,GAAG,CAAC+J,KAAK,CAAC,mBAAmB,EAAEe,KAAK,CAAC;IAErC,IAAI,CAACI,kBAAkB,CAACJ,KAAK,CAACE,MAAM,CAAC;EACvC;EAEAtH,sBAAsBA,CAACoH,KAAiB,EAAQ;IAC9C9K,GAAG,CAACmL,IAAI,CAAC,mBAAmB,EAAEL,KAAK,CAAC;IAEpC,IAAI,CAACM,oBAAoB,CAACN,KAAK,CAACE,MAAM,CAAC;EACzC;EAEA9H,mBAAmBA,CAAC4H,KAA0C,EAAQ;IACpE,IAAM;MAAEE,MAAM,EAAEK;IAAkB,CAAC,GAAGP,KAAK;IAC3C,IAAM;MAAE5J,MAAM,EAAEoK;IAAY,CAAC,GAAGD,iBAAiB;IAEjDrL,GAAG,CAACuL,MAAM,CAAC,qBAAqB,EAAED,WAAW,CAAC;IAE9C,KAAK,IAAInK,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGmK,WAAW,CAAC7K,MAAM,EAAEU,CAAC,IAAI,CAAC,EAAE;MAC9C,IAAMD,MAAM,GAAGoK,WAAW,CAACnK,CAAC,CAAC;MAE7BnB,GAAG,CAACuL,MAAM,CAAC,qCAAqC,EAAErK,MAAM,CAAC0E,IAAI,CAAC;MAE9D,IAAM;QAAE4F;MAAQ,CAAC,GAAGtK,MAAM;MAC1B,KAAK,IAAIwE,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAG8F,OAAO,CAAC/K,MAAM,EAAEiF,CAAC,IAAI,CAAC,EAAE;QAC1C,IAAM3C,MAAM,GAAGyI,OAAO,CAAC9F,CAAC,CAAC;QACzB,IAAM;UAAE7D,UAAU;UAAEkE;QAAK,CAAC,GAAGhD,MAAM;QACnC,IAAM0I,eAAe,GAAG,IAAI,CAACC,kBAAkB,CAC7C7J,UAAU,EACV,IAAI,CAACC,SACP,CAAC;QACD,IAAM6J,SAAS,GAAGN,iBAAiB,CAACO,QAAQ,CAC1C1K,MAAM,EACN6E,IAAI,EACJ0F,eACF,CAAC;QACD,IAAI,CAACI,qBAAqB,CAAC3K,MAAM,EAAE6E,IAAI,EAAE4F,SAAS,CAAC;MACrD;MAEA,IAAI,CAAClH,eAAe,CAACuD,MAAM,CAAC9G,MAAM,CAAC0E,IAAI,CAAC;MAExC,IAAI,CAACkG,WAAW,CAAC5K,MAAM,CAAC;IAC1B;IACA,IAAI,IAAI,CAACuD,eAAe,CAACsH,IAAI,KAAK,CAAC,EAAE;MACnC,IAAI,CAACC,gBAAgB,CAAC,CAAC;IACzB;IAEA,IAAM;MAAEpI;IAAK,CAAC,GAAG,IAAI;IACrB,IAAI,CAACqI,UAAU,CAACrI,IAAI,CAAC;EACvB;EAEAD,mBAAmBA,CAACmH,KAAiB,EAAQ;IAC3C9K,GAAG,CAAC+J,KAAK,CAAC,gBAAgB,EAAEe,KAAK,CAAC;IAClC,IAAI,CAACd,SAAS,CAAC,IAAAzC,MAAA,CAAIuD,KAAK,CAACE,MAAM,EAAG,CAAC;EACrC;;EAEA;AACF;AACA;EACEkB,WAAWA,CAAA,EAAS;IAClB,IAAI,IAAI,CAAC7C,SAAS,CAAC5I,MAAM,GAAG,CAAC,EAAE;MAC7B,IAAI,CAAC+I,iBAAiB,CAAC,CAAC;MACxB,IAAI,CAACF,eAAe,CAAC,CAAC;IACxB;EACF;EAEA6C,YAAYA,CAACrK,SAAoB,EAAQ;IACvC,KAAK,CAACqK,YAAY,CAACrK,SAAS,CAAC;IAE7B,IAAI,CAACqH,mBAAmB,CAAC,CAAC;;IAE1B;IACA;IACA,IAAI,CAAC+C,WAAW,CAAC,CAAC;EACpB;EAEAE,gBAAgBA,CAAC9D,aAA4B,EAAQ;IACnD,KAAK,CAAC8D,gBAAgB,CAAC9D,aAAa,CAAC;;IAErC;IACA,IAAI,CAACzD,aAAa,CAAC,CAAC;EACtB;EAEAwH,uBAAuBA,CAAC3C,sBAA+B,EAAQ;IAC7D,KAAK,CAAC2C,uBAAuB,CAAC3C,sBAAsB,CAAC;IAErD,IAAI,CAACwC,WAAW,CAAC,CAAC;EACpB;EAEA9I,wBAAwBA,CAAC0H,KAA4B,EAAQ;IAC3D9K,GAAG,CAACyJ,KAAK,CAAC,qBAAqB,EAAEqB,KAAK,CAAC;IAEvC,IAAI,CAACtG,WAAW,GAAG,KAAK;IAExB,IAAI,IAAI,CAAC6E,SAAS,CAAC5I,MAAM,GAAG,CAAC,EAAE;MAC7B,IAAI,CAAC+I,iBAAiB,CAAC,CAAC;IAC1B;IAEA,IAAI,CAAC8C,cAAc,CAAC,CAAC;EACvB;EAEAjJ,uBAAuBA,CAACyH,KAA4B,EAAQ;IAC1D9K,GAAG,CAACyJ,KAAK,CAAC,oBAAoB,EAAEqB,KAAK,CAAC;IAEtC,IAAI,CAACtG,WAAW,GAAG,IAAI;;IAEvB;IACA,IAAI,CAACK,aAAa,CAAC,CAAC;IAEpB,IAAI,CAAC0H,aAAa,CAAC,CAAC;IAEpB,IAAI,IAAI,CAAClD,SAAS,CAAC5I,MAAM,GAAG,CAAC,EAAE;MAC7B,IAAI,CAAC6I,eAAe,CAAC,CAAC;IACxB;EACF;EAEAhG,uBAAuBA,CAACwH,KAAqC,EAAQ;IACnE,IAAM;MAAEE,MAAM,EAAE9J;IAAO,CAAC,GAAG4J,KAAK;IAChC9K,GAAG,CAACyJ,KAAK,CAAC,yBAAyB,EAAEvI,MAAM,CAAC;IAE5C,IAAI,CAACH,aAAa,CAAC4E,IAAI,CAACzE,MAAM,CAAC;IAC/B,IAAI,CAAC+D,gBAAgB,CAAC,CAAC;EACzB;EAEAuH,aAAaA,CAACC,IAAa,EAAQ;IACjC,KAAK,CAACD,aAAa,CAACC,IAAI,CAAC;IAEzB,IAAI,CAAC3H,mBAAmB,CAAC,CAAC;EAC5B;EAEAH,QAAQA,CAACS,KAAa,EAAQ;IAAA,IAAAsH,aAAA,EAAAC,MAAA;IAC5B,KAAK,CAAChI,QAAQ,CAACS,KAAK,CAAC;;IAErB;IACA;IACA,IAAMwH,aAAa,IAAAF,aAAA,IAAAC,MAAA,GAAG,CAACvH,KAAK,aAALA,KAAK,cAALA,KAAK,GAAI,EAAE,EAAEyH,KAAK,CAAC,OAAO,CAAC,cAAAF,MAAA,uBAA5BA,MAAA,CAA8BlM,MAAM,cAAAiM,aAAA,cAAAA,aAAA,GAAI,CAAC;IAC/D,IAAMI,MAAM,GACV/M,UAAU,CAACgN,cAAc,CAACC,CAAC,GAC3BJ,aAAa,GAAG7M,UAAU,CAACkN,oBAAoB;IAEjD,IAAI,IAAI,CAACpJ,MAAM,CAACiJ,MAAM,EAAE;MACtB,IAAI,CAACjJ,MAAM,CAACiJ,MAAM,CAACE,CAAC,GAAGF,MAAM;IAC/B,CAAC,MAAM;MACL,IAAI,CAACjJ,MAAM,CAACiJ,MAAM,GAAG;QAAEE,CAAC,EAAEF;MAAO,CAAC;IACpC;IAEA,IAAI,OAAO,IAAI,CAACjJ,MAAM,CAACuB,KAAK,KAAK,QAAQ,EAAE;MACzC,IAAI,CAACvB,MAAM,CAACuB,KAAK,GAAG;QAClBgC,IAAI,EAAEhC;MACR,CAAC;IACH,CAAC,MAAM;MACL,IAAI,CAACvB,MAAM,CAACuB,KAAK,GAAA8H,aAAA,KAAQ,IAAI,CAACrJ,MAAM,CAACuB,KAAK,CAAE;MAC5C,IAAI,CAACvB,MAAM,CAACuB,KAAK,CAACgC,IAAI,GAAGhC,KAAK;MAC9B,IAAI,CAACvB,MAAM,CAACuB,KAAK,CAAC+H,GAAG,GAAAD,aAAA,KAAQ,IAAI,CAACrJ,MAAM,CAACuB,KAAK,CAAC+H,GAAG,CAAE;MACpD,IAAI,CAACtJ,MAAM,CAACuB,KAAK,CAAC+H,GAAG,CAACH,CAAC,GACrBjN,UAAU,CAACqN,qBAAqB,CAACJ,CAAC,GAClCJ,aAAa,GAAG7M,UAAU,CAACkN,oBAAoB,GAAG,GAAG;IACzD;IAEA,IAAI,CAACI,iBAAiB,CAAC;MAAEjI,KAAK,EAAE,IAAI,CAACvB,MAAM,CAACuB;IAAM,CAAC,CAAC;EACtD;EAEAkI,YAAYA,CAAA,EAAW;IAAA,IAAAC,qBAAA,EAAAC,mBAAA,EAAAC,qBAAA,EAAAC,oBAAA;IACrB,IAAI,CAAC,IAAI,CAACjB,IAAI,IAAI,CAAC,IAAI,CAACA,IAAI,CAACkB,KAAK,EAAE;MAClC,OAAO,CAAC;IACV;IAEA,OAAOC,IAAI,CAAC1L,GAAG,CACb,IAAI,CAACuK,IAAI,CAACkB,KAAK,KAAAJ,qBAAA,IAAAC,mBAAA,GACZ,IAAI,CAAC3J,MAAM,CAACiJ,MAAM,cAAAU,mBAAA,uBAAlBA,mBAAA,CAAoBK,CAAC,cAAAN,qBAAA,cAAAA,qBAAA,GAAI,CAAC,CAAC,KAAAE,qBAAA,IAAAC,oBAAA,GAC3B,IAAI,CAAC7J,MAAM,CAACiJ,MAAM,cAAAY,oBAAA,uBAAlBA,oBAAA,CAAoBI,CAAC,cAAAL,qBAAA,cAAAA,qBAAA,GAAI,CAAC,CAAC,EAC9B,CACF,CAAC;EACH;EAEAM,aAAaA,CAAA,EAAW;IAAA,IAAAC,qBAAA,EAAAC,oBAAA,EAAAC,qBAAA,EAAAC,oBAAA;IACtB,IAAI,CAAC,IAAI,CAAC1B,IAAI,IAAI,CAAC,IAAI,CAACA,IAAI,CAAC2B,MAAM,EAAE;MACnC,OAAO,CAAC;IACV;IAEA,OAAOR,IAAI,CAAC1L,GAAG,CACb,IAAI,CAACuK,IAAI,CAAC2B,MAAM,KAAAJ,qBAAA,IAAAC,oBAAA,GACb,IAAI,CAACpK,MAAM,CAACiJ,MAAM,cAAAmB,oBAAA,uBAAlBA,oBAAA,CAAoBjB,CAAC,cAAAgB,qBAAA,cAAAA,qBAAA,GAAI,CAAC,CAAC,KAAAE,qBAAA,IAAAC,oBAAA,GAC3B,IAAI,CAACtK,MAAM,CAACiJ,MAAM,cAAAqB,oBAAA,uBAAlBA,oBAAA,CAAoBE,CAAC,cAAAH,qBAAA,cAAAA,qBAAA,GAAI,CAAC,CAAC,EAC9B,CACF,CAAC;EACH;EAEApJ,mBAAmBA,CAAA,EAAS;IAC1B,IAAMwJ,SAAS,GAAG,IAAI,CAAChB,YAAY,CAAC,CAAC;IACrC,IAAMiB,UAAU,GAAG,IAAI,CAACR,aAAa,CAAC,CAAC;IACvC,IAAI,CAACzL,UAAU,CAACkM,gBAAgB,CAC9B,IAAI,CAAC3K,MAAM,EACX,IAAI,CAACxD,MAAM,EACXe,KAAK,IAAI,IAAI,CAACqN,kBAAkB,CAACrN,KAAK,EAAE,IAAI,CAACU,SAAS,CAAC,EACvDwM,SAAS,EACTC,UACF,CAAC;EACH;;EAEA;AACF;AACA;EACEpF,mBAAmBA,CAAA,EAAS;IAC1B,IAAI,CAAC,IAAI,CAACrH,SAAS,EAAE;MACnB;IACF;IAEA,IAAM4M,WAAW,GAAG,IAAI,CAACpM,UAAU,CAACqM,cAAc,CAChD,IAAI,CAACtO,MAAM,EACX,IAAI,CAACyB,SACP,CAAC;IACD4M,WAAW,CAACE,OAAO,CAAC,CAACC,UAAU,EAAEC,kBAAkB,KAAK;MACtD9O,GAAG,CAACyJ,KAAK,cAAAlC,MAAA,CACMuH,kBAAkB,GAC/B,IAAI,CAACjL,MAAM,CAACiL,kBAAkB,CAAC,EAC/BD,UACF,CAAC;MAED,IAAME,KAAK,GAAG,IAAI,CAAClL,MAAM,CAACiL,kBAAkB,CAAC;MAC7C,IAAIC,KAAK,IAAI,IAAI,EAAE;QACjBC,MAAM,CAACC,MAAM,CAACF,KAAK,EAAEF,UAAU,CAAC;MAClC,CAAC,MAAM;QACL7O,GAAG,CAACyJ,KAAK,yBAAAlC,MAAA,CAAyBuH,kBAAkB,CAAE,CAAC;MACzD;IACF,CAAC,CAAC;EACJ;;EAEA;AACF;AACA;AACA;AACA;AACA;EACEjD,qBAAqBA,CACnB3K,MAA0B,EAC1BgO,UAAkC,EAClCvD,SAAoB,EACd;IACN,IAAM;MAAE/F,IAAI;MAAE8C;IAAU,CAAC,GAAGxH,MAAM;IAElC,IAAMiH,UAAU,GAAG,IAAI,CAAChE,aAAa,CAACwC,GAAG,CAACf,IAAI,CAAC;IAC/C,IAAMuJ,QAAQ,GAAG,IAAI,CAAC7M,UAAU,CAAC8M,iBAAiB,CAAC1G,SAAS,EAAEwG,UAAU,CAAC;IAEzE,IAAI/G,UAAU,EAAE;MACdxI,GAAG,CAACwI,UAAU,EAAEgH,QAAQ,EAAExD,SAAS,CAAC;IACtC;EACF;;EAEA;AACF;AACA;AACA;AACA;AACA;EACEG,WAAWA,CAAC5K,MAA0B,EAAQ;IAC5C,IAAM;MAAEd;IAAG,CAAC,GAAG,IAAI;IACnB,IAAM;MAAEwF,IAAI;MAAE8C;IAAU,CAAC,GAAGxH,MAAM;IAClC,IAAMiH,UAAU,GAAG,IAAI,CAAChE,aAAa,CAACwC,GAAG,CAACf,IAAI,CAAC;IAC/C,IAAIuC,UAAU,IAAI,IAAI,EAAE;MACtB;IACF;IACA,IAAIO,SAAS,KAAKtI,EAAE,CAAC4F,IAAI,CAAC2C,eAAe,CAAC0G,SAAS,EAAE;MACnD,IAAM;QAAEC,IAAI;QAAEC;MAAM,CAAC,GAAGpH,UAAU;MAClC,IAAImH,IAAI,IAAIC,KAAK,IAAID,IAAI,CAAC7O,MAAM,KAAK8O,KAAK,CAAC9O,MAAM,EAAE;QACjD,IAAMkN,KAAK,GAAG,EAAE;QAChB,KAAK,IAAIxM,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGmO,IAAI,CAAC7O,MAAM,EAAEU,CAAC,IAAI,CAAC,EAAE;UACvCwM,KAAK,CAAChI,IAAI,CAAC4J,KAAK,CAACpO,CAAC,CAAC,GAAGmO,IAAI,CAACnO,CAAC,CAAC,CAAC;QAChC;QACAgH,UAAU,CAACwF,KAAK,GAAGA,KAAK;MAC1B;IACF,CAAC,MAAM,IACLjF,SAAS,KAAKtI,EAAE,CAAC4F,IAAI,CAAC2C,eAAe,CAAC6G,IAAI,IAC1C9G,SAAS,KAAKtI,EAAE,CAAC4F,IAAI,CAAC2C,eAAe,CAAC8G,SAAS,IAC/C/G,SAAS,KAAKtI,EAAE,CAAC4F,IAAI,CAAC2C,eAAe,CAAC+G,GAAG,EACzC;MACA,IAAM;QAAEzI,CAAC;QAAEqI,IAAI,EAAJA,KAAI;QAAEC,KAAK,EAALA,MAAK;QAAErI,CAAC;QAAEyI,IAAI;QAAEC;MAAM,CAAC,GAAGzH,UAAU;MACrD,IAAImH,KAAI,IAAIC,MAAK,IAAID,KAAI,KAAKrI,CAAC,EAAE;QAC/BkB,UAAU,CAAC0H,OAAO,GAAG9P,UAAU,CAAC+P,kBAAkB,CAChD7I,CAAC,EACDqI,KAAI,EACJC,MACF,CAAC;MACH;MACA,IAAII,IAAI,IAAIC,KAAK,IAAID,IAAI,KAAKzI,CAAC,EAAE;QAC/BiB,UAAU,CAAC4H,OAAO,GAAGhQ,UAAU,CAAC+P,kBAAkB,CAChD5I,CAAC,EACDyI,IAAI,EACJC,KACF,CAAC;MACH;IACF,CAAC,MAAM,IAAIlH,SAAS,KAAKtI,EAAE,CAAC4F,IAAI,CAAC2C,eAAe,CAACqH,OAAO,EAAE;MACxD,IAAM;QAAEC,GAAG;QAAEC;MAAO,CAAC,GAAG/H,UAAU;MAClC,IAAI8H,GAAG,KAAKvP,SAAS,IAAIwP,MAAM,KAAKxP,SAAS,EAAE;QAC7C;QACA;QACAyH,UAAU,CAAC+H,MAAM,GAAGD,GAAG;MACzB;IACF;EACF;EAEAE,OAAOA,CAAA,EAAoB;IACzB,OAAO,IAAI,CAACvM,IAAI;EAClB;EAEAwM,SAASA,CAAA,EAAoB;IAC3B,OAAO,IAAI,CAACvM,MAAM;EACpB;EAEAwM,kBAAkBA,CAAA,EAAoB;IACpC,OAAO,IAAIjM,GAAG,CAAC,IAAI,CAACE,eAAe,CAAC;EACtC;EAEAgM,gBAAgBA,CAAA,EAAY;IAC1B,OACE,IAAI,CAACjM,SAAS,CAAC/C,IAAI,CAAC4H,QAAQ,IAAIA,QAAQ,CAACqH,0BAA0B,CAAC,IACpE,IAAI;EAER;;EAEA;AACF;AACA;AACA;AACA;AACA;EACUC,iBAAiBA,CAACnO,KAAc,EAAER,UAAkB,EAAW;IACrE,IAAIQ,KAAK,IAAI,IAAI,EAAE;MACjB,OAAOA,KAAK;IACd;IACA,IAAI,OAAOA,KAAK,KAAK,QAAQ,IAAIxC,UAAU,CAAC4Q,YAAY,CAAC5O,UAAU,CAAC,EAAE;MACpE,IAAM6O,GAAG,GAAGC,MAAM,CAACtO,KAAK,CAAC;MACzB,IAAI,CAACsO,MAAM,CAACC,KAAK,CAACF,GAAG,CAAC,EAAE;QACtB,OAAOA,GAAG;MACZ;IACF;IACA,OAAOrO,KAAK;EACd;;EAEA;AACF;AACA;AACA;EACEwO,SAASA,CAACC,SAAoB,EAAQ;IAAA,IAAAC,MAAA;IACpC,IAAI,IAAI,CAAC1M,SAAS,CAAC5D,MAAM,KAAK,CAAC,EAAE;MAC/BT,GAAG,CAACqG,IAAI,CAAC,2CAA2C,CAAC;MACrD;IACF;IAEArG,GAAG,CAACyJ,KAAK,CAAC,WAAW,EAAEqH,SAAS,CAAC;IAAC,IAAAE,MAAA,YAAAA,OAAA,EAEiB;MACjD,IAAM9H,QAAQ,GAAG6H,MAAI,CAAC1M,SAAS,CAAClD,CAAC,CAAC;MAClC,IAAM;QAAE6C;MAAQ,CAAC,GAAGkF,QAAQ;MAC5B;MACA,IAAMvB,IAAI,GAAG,IAAIjD,GAAG,CAAC,CAAC,GAAGoM,SAAS,CAACnJ,IAAI,CAAC,CAAC,EAAE,GAAGoJ,MAAI,CAACxM,UAAU,CAACoD,IAAI,CAAC,CAAC,CAAC,CAAC;MACtEA,IAAI,CAACiH,OAAO,CAACqC,GAAG,IAAI;QAClB,IAAMC,QAAQ,GAAGJ,SAAS,CAACnK,GAAG,CAACsK,GAAG,CAAC;QACnC,IAAME,MAAM,GAAGnN,OAAO,CAAC1C,IAAI,CAACC,CAAC,IAAIA,CAAC,CAACqE,IAAI,KAAKqL,GAAG,CAAC;QAChD,IAAIF,MAAI,CAACxM,UAAU,CAACoC,GAAG,CAACsK,GAAG,CAAC,KAAKC,QAAQ,IAAIC,MAAM,IAAI,IAAI,EAAE;UAC3D,IAAM9O,KAAK,GACT6O,QAAQ,IAAI,IAAI,GACZH,MAAI,CAACP,iBAAiB,CAACU,QAAQ,EAAEC,MAAM,CAACpL,IAAI,CAAC,GAC7CmL,QAAQ;UACdhI,QAAQ,CAACkI,iBAAiB,CAACH,GAAG,EAAE5O,KAAK,CAAC;QACxC;MACF,CAAC,CAAC;IACJ,CAAC;IAhBD,KAAK,IAAIlB,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAG,IAAI,CAACkD,SAAS,CAAC5D,MAAM,EAAEU,CAAC,IAAI,CAAC;MAAA6P,MAAA;IAAA;IAkBjD,IAAI,CAACzM,UAAU,GAAG,IAAIH,GAAG,CAAC0M,SAAS,CAAC;EACtC;EAEAO,SAASA,CAAChR,MAA0B,EAAQ;IAC1C,IAAI,CAAC2E,KAAK,CAAC,CAAC;IAEZ,IAAI,CAAC3E,MAAM,GAAGA,MAAM;IAEpB,IAAI,CAACsE,QAAQ,CAAC,IAAI,CAACC,eAAe,CAAC,CAAC,CAAC;IACrC,IAAI,CAACC,aAAa,CAAC,CAAC;IACpB,IAAI,CAACC,mBAAmB,CAAC,CAAC;IAC1B,IAAI,CAACC,oBAAoB,CAAC,CAAC;IAC3B,IAAI,IAAI,CAACsE,SAAS,CAAC5I,MAAM,GAAG,CAAC,EAAE;MAC7B,IAAI,CAAC6I,eAAe,CAAC,CAAC;IACxB;EACF;EAEAgI,cAAcA,CAAC/Q,QAAqC,EAAQ;IAC1D,IAAI,CAACA,QAAQ,GAAGA,QAAQ;EAC1B;AACF;AAACK,eAAA,CAxzBKV,gBAAgB,yBACS,EAAE;AAyzBjC,eAAeA,gBAAgB","ignoreList":[]}
1
+ {"version":3,"file":"FigureChartModel.js","names":["memoize","debounce","set","Log","TableUtils","ChartModel","ChartUtils","log","module","FigureChartModel","constructor","dh","figure","_this","settings","arguments","length","undefined","this","_defineProperty","axisTypeMap","getAxisTypeMap","pendingSeries","_loop","_chart$showLegend","series","i","chart","charts","find","c","includes","addSeries","showLegend","subscribe","ADD_SERIES_DEBOUNCE","columnType","formatter","dataFormatter","getColumnTypeFormatter","dhTimeZone","max","timeZone","getTimeZone","value","chartUtils","unwrapValue","wrapValue","range","_range","_slicedToArray","rangeStart","rangeEnd","valueParser","getValueParser","axis","source","getSourceForAxis","getRangeParser","handleFigureUpdated","bind","handleFigureDisconnected","handleFigureReconnected","handleFigureSeriesAdded","handleDownsampleStart","handleDownsampleFinish","handleDownsampleFail","handleDownsampleNeeded","handleRequestFailed","data","layout","grid","rows","columns","cols","pattern","seriesDataMap","Map","oneClicks","filterColumnMap","lastFilter","isConnected","seriesToProcess","Set","setTitle","getDefaultTitle","initAllSeries","updateAxisPositions","startListeningFigure","close","addPendingSeries","cancel","stopListeningFigure","title","_this$figure$charts$","_this2","clear","activeSeriesNames","_loop2","j","push","name","axes","xAxis","type","plot","AxisType","X","yAxis","Y","warn","_axisTypeMap$get$find","_axisTypeMap$get","_axisTypeMap$get$find2","_axisTypeMap$get2","xAxisIndex","get","findIndex","a","yAxisIndex","annotation","align","x","y","yshift","text","showarrow","xref","concat","yref","annotations","allSeriesNames","keys","inactiveSeriesNames","filter","seriesName","indexOf","delete","_this$renderOptions$w","_this$renderOptions","seriesData","makeSeriesDataFromSeries","getSeriesVisibility","renderOptions","webgl","add","values","plotStyle","SeriesPlotStyle","STACKED_BAR","barmode","PIE","hiddenlabels","getHiddenLabels","showlegend","oneClick","updateLayoutFormats","callback","listeners","subscribeFigure","unsubscribe","unsubscribeFigure","debug","isDownsamplingDisabled","DownsampleOptions","DISABLE","DEFAULT","errors","error","fireError","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","valueTranslator","getValueTranslator","dataArray","getArray","setDataArrayForSeries","cleanSeries","size","fireLoadFinished","fireUpdate","resubscribe","setFormatter","setRenderOptions","setDownsamplingDisabled","fireDisconnect","fireReconnect","setDimensions","rect","_match$length","_match","subtitleCount","match","margin","DEFAULT_MARGIN","t","SUBTITLE_LINE_HEIGHT","_objectSpread","pad","DEFAULT_TITLE_PADDING","fireLayoutUpdated","getPlotWidth","_this$layout$margin$l","_this$layout$margin","_this$layout$margin$r","_this$layout$margin2","width","Math","l","r","getPlotHeight","_this$layout$margin$t","_this$layout$margin3","_this$layout$margin$b","_this$layout$margin4","height","b","plotWidth","plotHeight","updateFigureAxes","getAxisRangeParser","axisFormats","getAxisFormats","forEach","axisFormat","axisLayoutProperty","props","Object","assign","sourceType","property","getPlotlyProperty","HISTOGRAM","xLow","xHigh","LINE","ERROR_BAR","BAR","yLow","yHigh","error_x","getPlotlyErrorBars","error_y","TREEMAP","ids","labels","getData","getLayout","getFilterColumnMap","isFilterRequired","requireAllFiltersToDisplay","coerceFilterValue","isNumberType","num","Number","isNaN","setFilter","filterMap","_this3","_loop3","key","rawValue","column","setValueForColumn","setFigure","updateSettings"],"sources":["../src/FigureChartModel.ts"],"sourcesContent":["/* eslint class-methods-use-this: \"off\" */\nimport memoize from 'memoizee';\nimport { debounce, set } from 'lodash';\nimport type { dh as DhType } from '@deephaven/jsapi-types';\nimport Log from '@deephaven/log';\nimport { type Range } from '@deephaven/utils';\nimport type {\n Annotations,\n Layout,\n Data,\n PlotData,\n XAxisName,\n YAxisName,\n} from 'plotly.js';\nimport {\n TableUtils,\n type DateTimeColumnFormatter,\n type Formatter,\n} from '@deephaven/jsapi-utils';\nimport ChartModel, {\n type ChartEvent,\n type FigureUpdateEventData,\n type RenderOptions,\n} from './ChartModel';\nimport ChartUtils, {\n type AxisTypeMap,\n type ChartModelSettings,\n type FilterColumnMap,\n type FilterMap,\n} 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 JSAPI instance\n * @param figure The figure object created by the API\n * @param settings Chart settings\n */\n constructor(\n dh: typeof DhType,\n figure: DhType.plot.Figure,\n settings: Partial<ChartModelSettings> = {}\n ) {\n super(dh);\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.dh = dh;\n this.chartUtils = new ChartUtils(dh);\n this.figure = figure;\n this.settings = settings;\n this.data = [];\n this.layout = {\n grid: {\n rows: figure.rows,\n columns: figure.cols,\n pattern: 'independent',\n },\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 chartUtils: ChartUtils;\n\n dh: typeof DhType;\n\n figure: DhType.plot.Figure;\n\n settings: Partial<ChartModelSettings>;\n\n data: Partial<Data>[];\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: DhType.plot.Series[];\n\n oneClicks: DhType.plot.OneClick[];\n\n filterColumnMap: FilterColumnMap;\n\n lastFilter: FilterMap;\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.title != null && this.figure.title.length > 0) {\n return this.figure.title;\n }\n if (this.figure.charts.length === 1) {\n return this.figure.charts[0].title ?? '';\n }\n return '';\n }\n\n initAllSeries(): void {\n this.oneClicks = [];\n this.filterColumnMap.clear();\n\n const { charts } = this.figure;\n const axisTypeMap = ChartUtils.getAxisTypeMap(this.figure);\n const activeSeriesNames: string[] = [];\n\n this.seriesToProcess = new Set();\n\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, axisTypeMap, chart.showLegend);\n }\n\n // Need to add the chart titles as annotations if they are set\n const { axes, title } = chart;\n if (\n title != null &&\n title.length > 0 &&\n (charts.length > 1 || this.figure.title != null)\n ) {\n const xAxis = axes.find(axis => axis.type === this.dh.plot.AxisType.X);\n const yAxis = axes.find(axis => axis.type === this.dh.plot.AxisType.Y);\n if (xAxis == null || yAxis == null) {\n log.warn(\n 'Chart title provided, but unknown how to map to the correct axes for this chart type',\n chart\n );\n } else {\n const xAxisIndex =\n (axisTypeMap.get(xAxis.type)?.findIndex(a => a === xAxis) ?? 0) + 1;\n const yAxisIndex =\n (axisTypeMap.get(yAxis.type)?.findIndex(a => a === yAxis) ?? 0) + 1;\n\n const annotation: Partial<Annotations> = {\n align: 'center',\n x: 0.5,\n y: 1,\n yshift: 17,\n text: title,\n showarrow: false,\n\n // Typing is incorrect in Plotly for this, as it doesn't seem to be typed for the \"domain\" part: https://plotly.com/javascript/reference/layout/annotations/#layout-annotations-items-annotation-xref\n xref: `x${xAxisIndex} domain` as XAxisName,\n yref: `y${yAxisIndex} domain` as YAxisName,\n };\n if (this.layout.annotations == null) {\n this.layout.annotations = [annotation];\n } else {\n this.layout.annotations.push(annotation);\n }\n }\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 }\n\n /**\n * Add a series to the model\n * @param series Series object to add\n * @param axisTypeMap Map of axis type to the axes in this Figure\n * @param showLegend Whether this series should show the legend or not\n */\n addSeries(\n series: DhType.plot.Series,\n axisTypeMap: AxisTypeMap,\n showLegend: boolean | null\n ): void {\n const { dh } = this;\n\n const seriesData = this.chartUtils.makeSeriesDataFromSeries(\n series,\n axisTypeMap,\n ChartUtils.getSeriesVisibility(series.name, this.settings),\n showLegend,\n this.renderOptions?.webgl ?? true\n );\n\n this.seriesDataMap.set(series.name, seriesData);\n this.seriesToProcess.add(series.name);\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 // We only want to force hide the legend if there is only one series that is not a PIE\n // Right now this means that if the user only has one series, they cannot explicitly show the legend until deephaven-core#3254 is implemented\n // TODO: deephaven-core#3254, once done, this can be removed.\n this.layout.showlegend =\n this.data.length > 1 || series.plotStyle === dh.plot.SeriesPlotStyle.PIE\n ? showLegend ?? undefined\n : false;\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 axisTypeMap = ChartUtils.getAxisTypeMap(this.figure);\n const { pendingSeries } = this;\n for (let i = 0; i < pendingSeries.length; i += 1) {\n const series = pendingSeries[i];\n const chart = this.figure.charts.find(c => c.series.includes(series));\n this.addSeries(series, axisTypeMap, chart?.showLegend ?? null);\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 ? this.dh.plot.DownsampleOptions.DISABLE\n : this.dh.plot.DownsampleOptions.DEFAULT\n );\n\n if (this.figure.errors.length > 0) {\n log.error('Errors in figure', this.figure.errors);\n this.fireError(this.figure.errors);\n }\n }\n\n unsubscribeFigure(): void {\n this.figure.unsubscribe();\n }\n\n startListeningFigure(): void {\n const { dh } = this;\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 const { dh } = this;\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 { max: 100 }\n );\n\n getValueTranslator = memoize(\n (columnType: string, formatter: Formatter | undefined) => {\n const timeZone = this.getTimeZone(columnType, formatter);\n return (value: unknown) => this.chartUtils.unwrapValue(value, timeZone);\n },\n { max: 100 }\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 this.chartUtils.wrapValue(value, columnType, timeZone);\n },\n { max: 100 }\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 { max: 100 }\n );\n\n /**\n * Gets the parser for parsing the range from an axis within the given chart\n */\n getAxisRangeParser = memoize(\n (chart: DhType.plot.Chart, formatter?: Formatter) =>\n (axis: DhType.plot.Axis) => {\n const source = ChartUtils.getSourceForAxis(chart, axis);\n if (source != null) {\n return this.getRangeParser(source.columnType, formatter);\n }\n\n return (range: [unknown, unknown]) => range;\n },\n { max: 100 }\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: DhType.Event<FigureUpdateEventData>): 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\n this.cleanSeries(series);\n }\n if (this.seriesToProcess.size === 0) {\n this.fireLoadFinished();\n }\n\n const { data } = this;\n this.fireUpdate(data);\n }\n\n handleRequestFailed(event: ChartEvent): void {\n log.error('Request failed', event);\n this.fireError([`${event.detail}`]);\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 setRenderOptions(renderOptions: RenderOptions): void {\n super.setRenderOptions(renderOptions);\n\n // Reset all the series to re-render them with the correct rendering options\n this.initAllSeries();\n }\n\n setDownsamplingDisabled(isDownsamplingDisabled: boolean): void {\n super.setDownsamplingDisabled(isDownsamplingDisabled);\n\n this.resubscribe();\n }\n\n handleFigureDisconnected(event: DhType.Event<unknown>): 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: DhType.Event<unknown>): 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: DhType.plot.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 = {\n text: title,\n };\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 this.fireLayoutUpdated({ title: this.layout.title });\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 this.chartUtils.updateFigureAxes(\n this.layout,\n this.figure,\n chart => this.getAxisRangeParser(chart, this.formatter),\n plotWidth,\n plotHeight\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 = this.chartUtils.getAxisFormats(\n this.figure,\n this.formatter\n );\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: DhType.plot.Series,\n sourceType: DhType.plot.SourceType,\n dataArray: unknown[]\n ): void {\n const { name, plotStyle } = series;\n\n const seriesData = this.seriesDataMap.get(name);\n const property = this.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: DhType.plot.Series): void {\n const { dh } = this;\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 (\n plotStyle === dh.plot.SeriesPlotStyle.LINE ||\n plotStyle === dh.plot.SeriesPlotStyle.ERROR_BAR ||\n plotStyle === dh.plot.SeriesPlotStyle.BAR\n ) {\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<Data>[] {\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 * Coerce a filter value to the appropriate type based on column type.\n * Input filter controls always provide string values, but OneClick expects the\n * native type (e.g. number for numeric columns) to match partition keys.\n * Linkers provide the raw value, so that value should be returned as is.\n */\n private coerceFilterValue(value: unknown, columnType: string): unknown {\n if (value == null) {\n return value;\n }\n if (typeof value === 'string' && TableUtils.isNumberType(columnType)) {\n const num = Number(value);\n if (!Number.isNaN(num)) {\n return num;\n }\n }\n return value;\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: FilterMap): 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 rawValue = filterMap.get(key);\n const column = columns.find(c => c.name === key);\n if (this.lastFilter.get(key) !== rawValue && column != null) {\n const value =\n rawValue != null\n ? this.coerceFilterValue(rawValue, column.type)\n : rawValue;\n oneClick.setValueForColumn(key, value);\n }\n });\n }\n\n this.lastFilter = new Map(filterMap);\n }\n\n setFigure(figure: DhType.plot.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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","ignoreList":[]}
@@ -160,11 +160,13 @@ class MockChartModel extends ChartModel {
160
160
  return layout;
161
161
  }
162
162
  constructor(dh) {
163
- var {
164
- data = MockChartModel.makeRandomData(),
165
- layout = MockChartModel.makeDefaultLayout(dh),
166
- filterFields = []
167
- } = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
163
+ var _ref = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {},
164
+ _ref$data = _ref.data,
165
+ data = _ref$data === void 0 ? MockChartModel.makeRandomData() : _ref$data,
166
+ _ref$layout = _ref.layout,
167
+ layout = _ref$layout === void 0 ? MockChartModel.makeDefaultLayout(dh) : _ref$layout,
168
+ _ref$filterFields = _ref.filterFields,
169
+ filterFields = _ref$filterFields === void 0 ? [] : _ref$filterFields;
168
170
  super(dh);
169
171
  _defineProperty(this, "data", void 0);
170
172
  _defineProperty(this, "filterFields", void 0);
@@ -1 +1 @@
1
- {"version":3,"file":"MockChartModel.js","names":["ChartModel","defaultChartTheme","ChartUtils","MockChartModel","theme","_theme","makeRandomSeries","offset","scale","arguments","length","undefined","steps","dates","values","smooth","linear","startDate","Date","i","date","getFullYear","getMonth","getDate","push","concat","v","Math","sin","cos","random","smoothing","round","x","y","s","l","makeScatter","series","name","type","mode","hoverinfo","marker","size","makeArea","fill","line","width","makeTrendline","dash","makeErrorBand","erroryforward","errorybackward","value","errory","reverse","slice","color","error_band_line_color","shape","makeLine","makeRandomData","series1","areaPattern","trendLine","series2","errorBand","makeDefaultLayout","dh","layout","template","makeDefaultTemplate","title","text","xaxis","yaxis","constructor","data","filterFields","_defineProperty","getData","getLayout","getFilterColumnMap","map","Map","set","isFilterRequired","setFilter","fireUpdate","bind"],"sources":["../src/MockChartModel.ts"],"sourcesContent":["/* eslint-disable @typescript-eslint/explicit-module-boundary-types */\n// eslint-disable-next-line @typescript-eslint/ban-ts-comment\n\nimport type { dh as DhType } from '@deephaven/jsapi-types';\nimport type { Datum, Layout, PlotData } from 'plotly.js';\nimport ChartModel from './ChartModel';\nimport { type ChartTheme, defaultChartTheme } from './ChartTheme';\nimport ChartUtils from './ChartUtils';\n\ninterface Series {\n x: PlotData['x'];\n y: PlotData['y'];\n s: number[];\n l: number[];\n}\n\n/** Displays a basic random chart */\nclass MockChartModel extends ChartModel {\n static random: () => number = Math.random.bind(Math);\n\n static smoothing = 1.5;\n\n static _theme: ChartTheme | null;\n\n static get theme(): ChartTheme {\n /* eslint-disable no-underscore-dangle */\n if (MockChartModel._theme == null) {\n MockChartModel._theme = defaultChartTheme();\n }\n\n return MockChartModel._theme;\n /* eslint-enable no-underscore-dangle */\n }\n\n static makeRandomSeries(offset: number, scale = 1, steps = 100): Series {\n const dates = [];\n const values = [];\n const smooth = [];\n const linear = [];\n\n // Setting to a fixed seed date so that e2e tests can be deterministic.\n const startDate = new Date('2018-06-01');\n\n for (let i = 0; i < steps; i += 1) {\n const date = new Date(\n startDate.getFullYear(),\n startDate.getMonth(),\n startDate.getDate() + i - steps\n );\n dates.push(\n `${date.getFullYear()}-${date.getMonth() + 1}-${date.getDate()}`\n );\n let v =\n ((Math.sin((i / steps) * offset) * steps) / 3 +\n (Math.cos(i * 0.2) * steps) / 6 +\n (Math.sin(i * 0.5) * steps) / 10 +\n (MockChartModel.random() * steps) / 5 +\n i * MockChartModel.smoothing) *\n scale;\n v = Math.round(v * 100) / 100; // 2 decimals only\n // using steps acts as amplititude scaling based on value\n // large sine wave for course shape + small sine waves for bumpiness +\n // general randomness noise + index to be constantly up and to the right + smoothing factor\n values.push(v);\n linear.push(40 + i * MockChartModel.smoothing);\n smooth.push(\n (Math.sin((i / steps) * offset) * steps) / 3 +\n (MockChartModel.random() * steps) / 10 +\n i * MockChartModel.smoothing\n ); // push a smoother version of the same thing\n }\n\n return { x: dates, y: values, s: smooth, l: linear };\n }\n\n static makeScatter(series: Series): Partial<PlotData> {\n return {\n name: 'SCTR',\n x: series.x,\n y: series.y,\n type: 'scatter',\n mode: 'markers',\n hoverinfo: 'skip',\n marker: {\n size: 5,\n },\n };\n }\n\n static makeArea(series: Series): Partial<PlotData> {\n return {\n name: 'AREA',\n x: series.x,\n y: series.s,\n type: 'scatter',\n mode: 'line' as PlotData['mode'],\n fill: 'tozeroy',\n hoverinfo: 'all',\n line: {\n width: 3,\n // area patten gets applied as hack in post render plot.ly callback + css\n },\n };\n }\n\n static makeTrendline(series: Series): Partial<PlotData> {\n return {\n // we probably want to toss the line formula in legend I guess? either that or render it as text manually on plot\n name: 'Trendline <br>R<sup>2</sup> = 0.91',\n x: series.x,\n y: series.l,\n type: 'scatter',\n mode: 'line' as PlotData['mode'],\n hoverinfo: 'skip',\n line: {\n width: 3,\n dash: 'dot', // trendlines should follow some sort of color convention + dots/dashed. Remember there can multiple\n // chroma(c.$green).brighten(1.2).hex()\n },\n };\n }\n\n static makeErrorBand(series: Series): Partial<PlotData> {\n // generate continouous error bands values and text\n const erroryforward = [];\n const errorybackward = [];\n for (let i = 0; i < series.y.length; i += 1) {\n const value = series.y[i] as number;\n erroryforward[i] = Math.round((value + 18) * 100) / 100;\n errorybackward[i] = Math.round((value - 18) * 100) / 100;\n }\n\n // makes a closed shape of points winding clockwise for y values\n const errory = erroryforward.concat(errorybackward.reverse());\n\n return {\n name: 'error',\n x: (series.x as Datum[]).concat((series.x as Datum[]).slice().reverse()), // winding for x values, that slice just clones so reverse doesn't apply inplace\n y: errory,\n type: 'scatter',\n mode: 'line' as PlotData['mode'],\n hoverinfo: 'skip',\n fill: 'toself', // there's some ordering bug with scattergl where if the areas traces are ordered after the lines they don't render\n line: {\n width: 0,\n color: MockChartModel.theme.error_band_line_color,\n shape: 'spline',\n },\n };\n }\n\n static makeLine(series: Series): Partial<PlotData> {\n return {\n name: 'LINE',\n x: series.x,\n y: series.y,\n type: 'scatter',\n mode: 'line' as PlotData['mode'],\n hoverinfo: 'x+y+text+name' as PlotData['hoverinfo'],\n line: {\n width: 3,\n },\n };\n }\n\n static makeRandomData(): Partial<PlotData>[] {\n const series1 = MockChartModel.makeRandomSeries(6);\n const areaPattern = MockChartModel.makeArea(series1);\n const trendLine = MockChartModel.makeTrendline(series1);\n\n const series2 = MockChartModel.makeRandomSeries(2);\n const line = MockChartModel.makeLine(series2);\n const errorBand = MockChartModel.makeErrorBand(series2);\n\n return [areaPattern, trendLine, line, errorBand];\n }\n\n static makeDefaultLayout(dh: typeof DhType): Partial<Layout> {\n const layout: Partial<Layout> = {\n template: new ChartUtils(dh).makeDefaultTemplate(MockChartModel.theme),\n };\n\n layout.title = { text: 'Chart' };\n\n layout.xaxis = { title: { text: 'Datestamp' } };\n layout.yaxis = { title: { text: 'Price' } };\n\n return layout;\n }\n\n constructor(\n dh: typeof DhType,\n {\n data = MockChartModel.makeRandomData(),\n layout = MockChartModel.makeDefaultLayout(dh),\n filterFields = [],\n } = {}\n ) {\n super(dh);\n\n this.data = data;\n this.layout = layout;\n this.filterFields = filterFields;\n }\n\n data: Partial<PlotData>[];\n\n filterFields: string[];\n\n layout: Partial<Layout>;\n\n getData(): Partial<PlotData>[] {\n return this.data;\n }\n\n getLayout(): Partial<Layout> {\n return this.layout;\n }\n\n getFilterColumnMap(): Map<string, { name: string; type: string }> {\n const map = new Map();\n\n for (let i = 0; i < this.filterFields.length; i += 1) {\n const name = this.filterFields[i];\n const type = 'java.lang.String';\n map.set(name, { name, type });\n }\n\n return map;\n }\n\n isFilterRequired(): boolean {\n return this.filterFields.length > 0;\n }\n\n setFilter(): void {\n this.fireUpdate(this.data);\n }\n}\n\nexport default MockChartModel;\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"MockChartModel.js","names":["ChartModel","defaultChartTheme","ChartUtils","MockChartModel","theme","_theme","makeRandomSeries","offset","scale","arguments","length","undefined","steps","dates","values","smooth","linear","startDate","Date","i","date","getFullYear","getMonth","getDate","push","concat","v","Math","sin","cos","random","smoothing","round","x","y","s","l","makeScatter","series","name","type","mode","hoverinfo","marker","size","makeArea","fill","line","width","makeTrendline","dash","makeErrorBand","erroryforward","errorybackward","value","errory","reverse","slice","color","error_band_line_color","shape","makeLine","makeRandomData","series1","areaPattern","trendLine","series2","errorBand","makeDefaultLayout","dh","layout","template","makeDefaultTemplate","title","text","xaxis","yaxis","constructor","_ref","_ref$data","data","_ref$layout","_ref$filterFields","filterFields","_defineProperty","getData","getLayout","getFilterColumnMap","map","Map","set","isFilterRequired","setFilter","fireUpdate","bind"],"sources":["../src/MockChartModel.ts"],"sourcesContent":["/* eslint-disable @typescript-eslint/explicit-module-boundary-types */\n// eslint-disable-next-line @typescript-eslint/ban-ts-comment\n\nimport type { dh as DhType } from '@deephaven/jsapi-types';\nimport type { Datum, Layout, PlotData } from 'plotly.js';\nimport ChartModel from './ChartModel';\nimport { type ChartTheme, defaultChartTheme } from './ChartTheme';\nimport ChartUtils from './ChartUtils';\n\ninterface Series {\n x: PlotData['x'];\n y: PlotData['y'];\n s: number[];\n l: number[];\n}\n\n/** Displays a basic random chart */\nclass MockChartModel extends ChartModel {\n static random: () => number = Math.random.bind(Math);\n\n static smoothing = 1.5;\n\n static _theme: ChartTheme | null;\n\n static get theme(): ChartTheme {\n /* eslint-disable no-underscore-dangle */\n if (MockChartModel._theme == null) {\n MockChartModel._theme = defaultChartTheme();\n }\n\n return MockChartModel._theme;\n /* eslint-enable no-underscore-dangle */\n }\n\n static makeRandomSeries(offset: number, scale = 1, steps = 100): Series {\n const dates = [];\n const values = [];\n const smooth = [];\n const linear = [];\n\n // Setting to a fixed seed date so that e2e tests can be deterministic.\n const startDate = new Date('2018-06-01');\n\n for (let i = 0; i < steps; i += 1) {\n const date = new Date(\n startDate.getFullYear(),\n startDate.getMonth(),\n startDate.getDate() + i - steps\n );\n dates.push(\n `${date.getFullYear()}-${date.getMonth() + 1}-${date.getDate()}`\n );\n let v =\n ((Math.sin((i / steps) * offset) * steps) / 3 +\n (Math.cos(i * 0.2) * steps) / 6 +\n (Math.sin(i * 0.5) * steps) / 10 +\n (MockChartModel.random() * steps) / 5 +\n i * MockChartModel.smoothing) *\n scale;\n v = Math.round(v * 100) / 100; // 2 decimals only\n // using steps acts as amplititude scaling based on value\n // large sine wave for course shape + small sine waves for bumpiness +\n // general randomness noise + index to be constantly up and to the right + smoothing factor\n values.push(v);\n linear.push(40 + i * MockChartModel.smoothing);\n smooth.push(\n (Math.sin((i / steps) * offset) * steps) / 3 +\n (MockChartModel.random() * steps) / 10 +\n i * MockChartModel.smoothing\n ); // push a smoother version of the same thing\n }\n\n return { x: dates, y: values, s: smooth, l: linear };\n }\n\n static makeScatter(series: Series): Partial<PlotData> {\n return {\n name: 'SCTR',\n x: series.x,\n y: series.y,\n type: 'scatter',\n mode: 'markers',\n hoverinfo: 'skip',\n marker: {\n size: 5,\n },\n };\n }\n\n static makeArea(series: Series): Partial<PlotData> {\n return {\n name: 'AREA',\n x: series.x,\n y: series.s,\n type: 'scatter',\n mode: 'line' as PlotData['mode'],\n fill: 'tozeroy',\n hoverinfo: 'all',\n line: {\n width: 3,\n // area patten gets applied as hack in post render plot.ly callback + css\n },\n };\n }\n\n static makeTrendline(series: Series): Partial<PlotData> {\n return {\n // we probably want to toss the line formula in legend I guess? either that or render it as text manually on plot\n name: 'Trendline <br>R<sup>2</sup> = 0.91',\n x: series.x,\n y: series.l,\n type: 'scatter',\n mode: 'line' as PlotData['mode'],\n hoverinfo: 'skip',\n line: {\n width: 3,\n dash: 'dot', // trendlines should follow some sort of color convention + dots/dashed. Remember there can multiple\n // chroma(c.$green).brighten(1.2).hex()\n },\n };\n }\n\n static makeErrorBand(series: Series): Partial<PlotData> {\n // generate continouous error bands values and text\n const erroryforward = [];\n const errorybackward = [];\n for (let i = 0; i < series.y.length; i += 1) {\n const value = series.y[i] as number;\n erroryforward[i] = Math.round((value + 18) * 100) / 100;\n errorybackward[i] = Math.round((value - 18) * 100) / 100;\n }\n\n // makes a closed shape of points winding clockwise for y values\n const errory = erroryforward.concat(errorybackward.reverse());\n\n return {\n name: 'error',\n x: (series.x as Datum[]).concat((series.x as Datum[]).slice().reverse()), // winding for x values, that slice just clones so reverse doesn't apply inplace\n y: errory,\n type: 'scatter',\n mode: 'line' as PlotData['mode'],\n hoverinfo: 'skip',\n fill: 'toself', // there's some ordering bug with scattergl where if the areas traces are ordered after the lines they don't render\n line: {\n width: 0,\n color: MockChartModel.theme.error_band_line_color,\n shape: 'spline',\n },\n };\n }\n\n static makeLine(series: Series): Partial<PlotData> {\n return {\n name: 'LINE',\n x: series.x,\n y: series.y,\n type: 'scatter',\n mode: 'line' as PlotData['mode'],\n hoverinfo: 'x+y+text+name' as PlotData['hoverinfo'],\n line: {\n width: 3,\n },\n };\n }\n\n static makeRandomData(): Partial<PlotData>[] {\n const series1 = MockChartModel.makeRandomSeries(6);\n const areaPattern = MockChartModel.makeArea(series1);\n const trendLine = MockChartModel.makeTrendline(series1);\n\n const series2 = MockChartModel.makeRandomSeries(2);\n const line = MockChartModel.makeLine(series2);\n const errorBand = MockChartModel.makeErrorBand(series2);\n\n return [areaPattern, trendLine, line, errorBand];\n }\n\n static makeDefaultLayout(dh: typeof DhType): Partial<Layout> {\n const layout: Partial<Layout> = {\n template: new ChartUtils(dh).makeDefaultTemplate(MockChartModel.theme),\n };\n\n layout.title = { text: 'Chart' };\n\n layout.xaxis = { title: { text: 'Datestamp' } };\n layout.yaxis = { title: { text: 'Price' } };\n\n return layout;\n }\n\n constructor(\n dh: typeof DhType,\n {\n data = MockChartModel.makeRandomData(),\n layout = MockChartModel.makeDefaultLayout(dh),\n filterFields = [],\n } = {}\n ) {\n super(dh);\n\n this.data = data;\n this.layout = layout;\n this.filterFields = filterFields;\n }\n\n data: Partial<PlotData>[];\n\n filterFields: string[];\n\n layout: Partial<Layout>;\n\n getData(): Partial<PlotData>[] {\n return this.data;\n }\n\n getLayout(): Partial<Layout> {\n return this.layout;\n }\n\n getFilterColumnMap(): Map<string, { name: string; type: string }> {\n const map = new Map();\n\n for (let i = 0; i < this.filterFields.length; i += 1) {\n const name = this.filterFields[i];\n const type = 'java.lang.String';\n map.set(name, { name, type });\n }\n\n return map;\n }\n\n isFilterRequired(): boolean {\n return this.filterFields.length > 0;\n }\n\n setFilter(): void {\n this.fireUpdate(this.data);\n }\n}\n\nexport default MockChartModel;\n"],"mappings":"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","ignoreList":[]}