@fluentui/react-charts 9.2.0 → 9.2.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -1,12 +1,25 @@
1
1
  # Change Log - @fluentui/react-charts
2
2
 
3
- This log was last generated on Wed, 30 Jul 2025 08:41:04 GMT and should not be manually modified.
3
+ This log was last generated on Wed, 30 Jul 2025 16:53:06 GMT and should not be manually modified.
4
4
 
5
5
  <!-- Start content -->
6
6
 
7
+ ## [9.2.1](https://github.com/microsoft/fluentui/tree/@fluentui/react-charts_v9.2.1)
8
+
9
+ Wed, 30 Jul 2025 16:53:06 GMT
10
+ [Compare changes](https://github.com/microsoft/fluentui/compare/@fluentui/react-charts_v9.2.0..@fluentui/react-charts_v9.2.1)
11
+
12
+ ### Patches
13
+
14
+ - make legends of dotted lines dotted ([PR #34947](https://github.com/microsoft/fluentui/pull/34947) by anushgupta@microsoft.com)
15
+ - support hidelegend property from plotly schema ([PR #34946](https://github.com/microsoft/fluentui/pull/34946) by anushgupta@microsoft.com)
16
+ - Bump @fluentui/react-button to v9.6.3 ([PR #34945](https://github.com/microsoft/fluentui/pull/34945) by beachball)
17
+ - Bump @fluentui/react-overflow to v9.5.3 ([PR #34945](https://github.com/microsoft/fluentui/pull/34945) by beachball)
18
+ - Bump @fluentui/react-popover to v9.12.3 ([PR #34945](https://github.com/microsoft/fluentui/pull/34945) by beachball)
19
+
7
20
  ## [9.2.0](https://github.com/microsoft/fluentui/tree/@fluentui/react-charts_v9.2.0)
8
21
 
9
- Wed, 30 Jul 2025 08:41:04 GMT
22
+ Wed, 30 Jul 2025 13:10:55 GMT
10
23
  [Compare changes](https://github.com/microsoft/fluentui/compare/@fluentui/react-charts_v9.1.10..@fluentui/react-charts_v9.2.0)
11
24
 
12
25
  ### Minor changes
@@ -24,11 +37,11 @@ Wed, 30 Jul 2025 08:41:04 GMT
24
37
 
25
38
  ### Patches
26
39
 
40
+ - GVBC FIX ([PR #34932](https://github.com/microsoft/fluentui/pull/34932) by anushgupta@microsoft.com)
27
41
  - Adding a variation of horizontal stacked bar chart with inline legends that accept optiona annotation JSX from client to be displayed next the legend items. Also an option to hide the hover callout card. ([PR #34895](https://github.com/microsoft/fluentui/pull/34895) by aknowles@microsoft.com)
28
42
  - support image export in v9 charts ([PR #34929](https://github.com/microsoft/fluentui/pull/34929) by anushgupta@microsoft.com)
29
43
  - add histogram mode to vbc ([PR #34930](https://github.com/microsoft/fluentui/pull/34930) by anushgupta@microsoft.com)
30
44
  - add support for scatter polar trace type ([PR #34933](https://github.com/microsoft/fluentui/pull/34933) by anushgupta@microsoft.com)
31
- - GVBC FIX ([PR #34932](https://github.com/microsoft/fluentui/pull/34932) by anushgupta@microsoft.com)
32
45
 
33
46
  ## [9.1.10](https://github.com/microsoft/fluentui/tree/@fluentui/react-charts_v9.1.10)
34
47
 
package/dist/index.d.ts CHANGED
@@ -2750,6 +2750,11 @@ export declare interface LineDataInVerticalStackedBarChart {
2750
2750
  y: number;
2751
2751
  color: string;
2752
2752
  legend: string;
2753
+ /**
2754
+ * The shape for the legend
2755
+ * default: show the rect legend
2756
+ */
2757
+ legendShape?: LegendShape;
2753
2758
  /**
2754
2759
  * Data to show in callout
2755
2760
  */
@@ -43,9 +43,6 @@ const dashOptions = {
43
43
  lineBorderWidth: '4'
44
44
  }
45
45
  };
46
- const getLegend = (series, index)=>{
47
- return series.name || `Series ${index + 1}`;
48
- };
49
46
  function getTitles(layout) {
50
47
  var _layout_title, _layout_xaxis, _layout_xaxis1, _layout_xaxis_title, _layout_xaxis2, _layout_yaxis, _layout_yaxis1, _layout_yaxis_title, _layout_yaxis2;
51
48
  var _layout_title_text, _layout_xaxis_title_text, _layout_yaxis_title_text;
@@ -181,6 +178,7 @@ export const transformPlotlyJsonToVSBCProps = (input, colorMap, isDarkTheme, fal
181
178
  const mapXToDataPoints = {};
182
179
  let yMaxValue = 0;
183
180
  const secondaryYAxisValues = getSecondaryYAxisValues(input.data, input.layout);
181
+ const { legends, hideLegend } = getLegendProps(input.data, input.layout);
184
182
  let yMinValue = 0;
185
183
  input.data.forEach((series, index1)=>{
186
184
  var _series_x;
@@ -194,7 +192,7 @@ export const transformPlotlyJsonToVSBCProps = (input, colorMap, isDarkTheme, fal
194
192
  lineData: []
195
193
  };
196
194
  }
197
- const legend = getLegend(series, index1);
195
+ const legend = legends[index1];
198
196
  var _series_y_index2;
199
197
  const yVal = (_series_y_index2 = (_series_y = series.y) === null || _series_y === void 0 ? void 0 : _series_y[index2]) !== null && _series_y_index2 !== void 0 ? _series_y_index2 : 0;
200
198
  if (series.type === 'bar') {
@@ -206,10 +204,14 @@ export const transformPlotlyJsonToVSBCProps = (input, colorMap, isDarkTheme, fal
206
204
  });
207
205
  yMaxValue = Math.max(yMaxValue, yVal);
208
206
  } else if (series.type === 'scatter' || !!fallbackVSBC) {
207
+ var _series_line;
209
208
  const color = getColor(legend, colorMap, isDarkTheme);
210
209
  const lineOptions = getLineOptions(series.line);
210
+ const dashType = ((_series_line = series.line) === null || _series_line === void 0 ? void 0 : _series_line.dash) || 'solid';
211
+ const legendShape = dashType === 'dot' || dashType === 'dash' || dashType === 'dashdot' ? 'dottedLine' : 'default';
211
212
  mapXToDataPoints[x].lineData.push({
212
213
  legend,
214
+ legendShape,
213
215
  y: yVal,
214
216
  color,
215
217
  ...lineOptions ? {
@@ -240,13 +242,15 @@ export const transformPlotlyJsonToVSBCProps = (input, colorMap, isDarkTheme, fal
240
242
  mode: 'plotly',
241
243
  ...secondaryYAxisValues,
242
244
  hideTickOverlap: true,
243
- barGapMax: 2
245
+ barGapMax: 2,
246
+ hideLegend
244
247
  };
245
248
  };
246
249
  export const transformPlotlyJsonToGVBCProps = (input, colorMap, isDarkTheme)=>{
247
250
  var _input_layout, _input_layout1;
248
251
  const mapXToDataPoints = {};
249
252
  const secondaryYAxisValues = getSecondaryYAxisValues(input.data, input.layout, 0, 0);
253
+ const { legends, hideLegend } = getLegendProps(input.data, input.layout);
250
254
  input.data.forEach((series, index1)=>{
251
255
  var _series_x;
252
256
  (_series_x = series.x) === null || _series_x === void 0 ? void 0 : _series_x.forEach((x, index2)=>{
@@ -258,7 +262,7 @@ export const transformPlotlyJsonToGVBCProps = (input, colorMap, isDarkTheme)=>{
258
262
  }
259
263
  if (series.type === 'bar') {
260
264
  var _series_y;
261
- const legend = getLegend(series, index1);
265
+ const legend = legends[index1];
262
266
  const color = getColor(legend, colorMap, isDarkTheme);
263
267
  var _series_y_index2;
264
268
  mapXToDataPoints[x].series.push({
@@ -284,12 +288,14 @@ export const transformPlotlyJsonToGVBCProps = (input, colorMap, isDarkTheme)=>{
284
288
  yAxisTitle,
285
289
  mode: 'plotly',
286
290
  ...secondaryYAxisValues,
287
- hideTickOverlap: true
291
+ hideTickOverlap: true,
292
+ hideLegend
288
293
  };
289
294
  };
290
295
  export const transformPlotlyJsonToVBCProps = (input, colorMap, isDarkTheme)=>{
291
296
  var _input_layout, _input_layout1;
292
297
  const vbcData = [];
298
+ const { legends, hideLegend } = getLegendProps(input.data, input.layout);
293
299
  input.data.forEach((series, seriesIdx)=>{
294
300
  var _series_xbins, _series_xbins1, _series_xbins2;
295
301
  if (!series.x) {
@@ -315,7 +321,7 @@ export const transformPlotlyJsonToVBCProps = (input, colorMap, isDarkTheme)=>{
315
321
  return yVal;
316
322
  });
317
323
  xBins.forEach((bin, index)=>{
318
- const legend = getLegend(series, seriesIdx);
324
+ const legend = legends[seriesIdx];
319
325
  const color = getColor(legend, colorMap, isDarkTheme);
320
326
  const yVal = calculateHistNorm(series.histnorm, y[index], total, isXString ? bin.length : getBinSize(bin));
321
327
  vbcData.push({
@@ -340,23 +346,29 @@ export const transformPlotlyJsonToVBCProps = (input, colorMap, isDarkTheme)=>{
340
346
  yAxisTitle,
341
347
  mode: 'histogram',
342
348
  hideTickOverlap: true,
343
- maxBarWidth: 50
349
+ maxBarWidth: 50,
350
+ hideLegend
344
351
  };
345
352
  };
346
353
  export const transformPlotlyJsonToScatterChartProps = (input, isAreaChart, colorMap, isDarkTheme)=>{
347
354
  const secondaryYAxisValues = getSecondaryYAxisValues(input.data, input.layout, isAreaChart ? 0 : undefined, isAreaChart ? 0 : undefined);
348
355
  let mode = 'tonexty';
356
+ const { legends, hideLegend } = getLegendProps(input.data, input.layout);
349
357
  const chartData = input.data.map((series, index)=>{
358
+ var _series_line;
350
359
  const xValues = series.x;
351
360
  const isString = typeof xValues[0] === 'string';
352
361
  const isXDate = isDateArray(xValues);
353
362
  const isXNumber = isNumberArray(xValues);
354
- const legend = getLegend(series, index);
363
+ const legend = legends[index];
355
364
  const lineColor = getColor(legend, colorMap, isDarkTheme);
356
365
  mode = series.fill === 'tozeroy' ? 'tozeroy' : 'tonexty';
357
366
  const lineOptions = getLineOptions(series.line);
367
+ const dashType = ((_series_line = series.line) === null || _series_line === void 0 ? void 0 : _series_line.dash) || 'solid';
368
+ const legendShape = dashType === 'dot' || dashType === 'dash' || dashType === 'dashdot' ? 'dottedLine' : 'default';
358
369
  return {
359
370
  legend,
371
+ legendShape,
360
372
  data: xValues.map((x, i)=>{
361
373
  var _series_marker, _series_marker1;
362
374
  return {
@@ -395,7 +407,8 @@ export const transformPlotlyJsonToScatterChartProps = (input, isAreaChart, color
395
407
  width: (_input_layout = input.layout) === null || _input_layout === void 0 ? void 0 : _input_layout.width,
396
408
  height: (_input_layout_height = (_input_layout1 = input.layout) === null || _input_layout1 === void 0 ? void 0 : _input_layout1.height) !== null && _input_layout_height !== void 0 ? _input_layout_height : 350,
397
409
  hideTickOverlap: true,
398
- useUTC: false
410
+ useUTC: false,
411
+ hideLegend
399
412
  };
400
413
  } else {
401
414
  var _input_layout2, _input_layout3;
@@ -412,21 +425,22 @@ export const transformPlotlyJsonToScatterChartProps = (input, isAreaChart, color
412
425
  width: (_input_layout2 = input.layout) === null || _input_layout2 === void 0 ? void 0 : _input_layout2.width,
413
426
  height: (_input_layout_height1 = (_input_layout3 = input.layout) === null || _input_layout3 === void 0 ? void 0 : _input_layout3.height) !== null && _input_layout_height1 !== void 0 ? _input_layout_height1 : 350,
414
427
  hideTickOverlap: true,
415
- useUTC: false
428
+ useUTC: false,
429
+ hideLegend
416
430
  };
417
431
  }
418
432
  };
419
433
  export const transformPlotlyJsonToHorizontalBarWithAxisProps = (input, colorMap, isDarkTheme)=>{
420
434
  var _input_layout, _input_layout_margin, _input_layout1, _input_layout_margin1, _input_layout2, _input_layout_yaxis2, _input_layout3, _input_layout_yaxis21, _input_layout4, _input_layout_yaxis2_title, _input_layout_yaxis22, _input_layout5, _input_layout6;
435
+ const { legends, hideLegend } = getLegendProps(input.data, input.layout);
421
436
  const chartData = input.data.map((series, index)=>{
437
+ const legend = legends[index];
438
+ const color = getColor(legend, colorMap, isDarkTheme);
422
439
  return series.y.map((yValue, i)=>{
423
- var _series_name;
424
- const legendName = (_series_name = series.name) !== null && _series_name !== void 0 ? _series_name : yValue;
425
- const color = getColor(legendName, colorMap, isDarkTheme);
426
440
  return {
427
441
  x: series.x[i],
428
442
  y: yValue,
429
- legend: legendName,
443
+ legend,
430
444
  color
431
445
  };
432
446
  });
@@ -456,7 +470,8 @@ export const transformPlotlyJsonToHorizontalBarWithAxisProps = (input, colorMap,
456
470
  width: (_input_layout6 = input.layout) === null || _input_layout6 === void 0 ? void 0 : _input_layout6.width,
457
471
  hideTickOverlap: true,
458
472
  noOfCharsToTruncate: 20,
459
- showYAxisLablesTooltip: true
473
+ showYAxisLablesTooltip: true,
474
+ hideLegend
460
475
  };
461
476
  };
462
477
  export const transformPlotlyJsonToHeatmapProps = (input)=>{
@@ -854,3 +869,18 @@ const precisionRound = (value, precision)=>{
854
869
  const factor = Math.pow(10, precision);
855
870
  return Math.round(value * factor) / factor;
856
871
  };
872
+ const getLegendProps = (data, layout)=>{
873
+ const legends = [];
874
+ if (data.length === 1) {
875
+ legends.push(data[0].name || '');
876
+ } else {
877
+ data.forEach((series, index)=>{
878
+ legends.push(series.name || `Series ${index + 1}`);
879
+ });
880
+ }
881
+ const hideLegends = data.every((series)=>series.showlegend === false);
882
+ return {
883
+ legends,
884
+ hideLegend: (layout === null || layout === void 0 ? void 0 : layout.showlegend) === false ? true : hideLegends
885
+ };
886
+ };
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/components/DeclarativeChart/PlotlySchemaAdapter.ts"],"sourcesContent":["/* eslint-disable one-var */\n/* eslint-disable vars-on-top */\n/* eslint-disable no-var */\n/* eslint-disable @typescript-eslint/no-explicit-any */\nimport * as React from 'react';\nimport {\n bin as d3Bin,\n extent as d3Extent,\n sum as d3Sum,\n min as d3Min,\n max as d3Max,\n range as d3Range,\n Bin,\n} from 'd3-array';\nimport { scaleLinear as d3ScaleLinear } from 'd3-scale';\nimport { DonutChartProps } from '../DonutChart/index';\nimport {\n ChartDataPoint,\n ChartProps,\n HorizontalBarChartWithAxisDataPoint,\n LineChartPoints,\n VerticalStackedChartProps,\n HeatMapChartData,\n HeatMapChartDataPoint,\n GroupedVerticalBarChartData,\n VerticalBarChartDataPoint,\n SankeyChartData,\n LineChartLineOptions,\n} from '../../types/DataPoint';\nimport { SankeyChartProps } from '../SankeyChart/index';\nimport { VerticalStackedBarChartProps } from '../VerticalStackedBarChart/index';\nimport { HorizontalBarChartWithAxisProps } from '../HorizontalBarChartWithAxis/index';\nimport { LineChartProps } from '../LineChart/index';\nimport { AreaChartProps } from '../AreaChart/index';\nimport { HeatMapChartProps } from '../HeatMapChart/index';\nimport { DataVizPalette, getColorFromToken, getNextColor } from '../../utilities/colors';\nimport { GaugeChartProps, GaugeChartSegment } from '../GaugeChart/index';\nimport { GroupedVerticalBarChartProps } from '../GroupedVerticalBarChart/index';\nimport { VerticalBarChartProps } from '../VerticalBarChart/index';\nimport { findNumericMinMaxOfY } from '../../utilities/utilities';\nimport type {\n Datum,\n Layout,\n PlotlySchema,\n PieData,\n PlotData,\n SankeyData,\n ScatterLine,\n TypedArray,\n Data,\n} from '@fluentui/chart-utilities';\nimport {\n isArrayOfType,\n isArrayOrTypedArray,\n isDate,\n isDateArray,\n isNumberArray,\n isYearArray,\n} from '@fluentui/chart-utilities';\nimport { curveCardinal as d3CurveCardinal } from 'd3-shape';\n\ninterface SecondaryYAxisValues {\n secondaryYAxistitle?: string;\n secondaryYScaleOptions?: { yMinValue?: number; yMaxValue?: number };\n}\n\nconst dashOptions = {\n dot: {\n strokeDasharray: '1, 5',\n strokeLinecap: 'round',\n strokeWidth: '2',\n lineBorderWidth: '4',\n },\n dash: {\n strokeDasharray: '5, 5',\n strokeLinecap: 'butt',\n strokeWidth: '2',\n lineBorderWidth: '4',\n },\n longdash: {\n strokeDasharray: '10, 5',\n strokeLinecap: 'butt',\n strokeWidth: '2',\n lineBorderWidth: '4',\n },\n dashdot: {\n strokeDasharray: '5, 5, 1, 5',\n strokeLinecap: 'butt',\n strokeWidth: '2',\n lineBorderWidth: '4',\n },\n longdashdot: {\n strokeDasharray: '10, 5, 1, 5',\n strokeLinecap: 'butt',\n strokeWidth: '2',\n lineBorderWidth: '4',\n },\n solid: {\n strokeDasharray: '0',\n strokeLinecap: 'butt',\n strokeWidth: '2',\n lineBorderWidth: '4',\n },\n} as const;\n\nconst getLegend = (series: Partial<PlotData>, index: number): string => {\n return series.name || `Series ${index + 1}`;\n};\n\nfunction getTitles(layout: Partial<Layout> | undefined) {\n const titles = {\n chartTitle: typeof layout?.title === 'string' ? layout.title : layout?.title?.text ?? '',\n xAxisTitle: typeof layout?.xaxis?.title === 'string' ? layout?.xaxis?.title : layout?.xaxis?.title?.text ?? '',\n yAxisTitle: typeof layout?.yaxis?.title === 'string' ? layout?.yaxis?.title : layout?.yaxis?.title?.text ?? '',\n };\n return titles;\n}\n\nexport const correctYearMonth = (xValues: Datum[] | Datum[][] | TypedArray): any[] => {\n const presentYear = new Date().getFullYear();\n if (xValues.length > 0 && Array.isArray(xValues[0])) {\n throw new Error('updateXValues:: 2D array not supported');\n }\n const dates = (xValues as Datum[]).map(possiblyMonthValue => {\n const parsedDate = `${possiblyMonthValue} 01, ${presentYear}`;\n return isDate(parsedDate) ? new Date(parsedDate) : null;\n });\n for (let i = dates.length - 1; i > 0; i--) {\n const currentMonth = dates[i]!.getMonth();\n const previousMonth = dates[i - 1]!.getMonth();\n const currentYear = dates[i]!.getFullYear();\n const previousYear = dates[i - 1]!.getFullYear();\n if (previousMonth >= currentMonth) {\n dates[i - 1]!.setFullYear(dates[i]!.getFullYear() - 1);\n } else if (previousYear > currentYear) {\n dates[i - 1]!.setFullYear(currentYear);\n }\n }\n xValues = (xValues as Datum[]).map((month, index) => {\n return `${month} 01, ${dates[index]!.getFullYear()}`;\n });\n return xValues;\n};\n\nexport const getColor = (\n legendLabel: string,\n colorMap: React.MutableRefObject<Map<string, string>>,\n isDarkTheme?: boolean,\n): string => {\n if (!colorMap.current.has(legendLabel)) {\n const nextColor = getNextColor(colorMap.current.size + 1, 0, isDarkTheme);\n colorMap.current.set(legendLabel, nextColor);\n return nextColor;\n }\n\n return colorMap.current.get(legendLabel) as string;\n};\n\nconst usesSecondaryYScale = (series: Partial<PlotData>): boolean => {\n return series.yaxis === 'y2';\n};\n\nconst getSecondaryYAxisValues = (\n data: Data[],\n layout: Partial<Layout> | undefined,\n maxAllowedMinY?: number,\n minAllowedMaxY?: number,\n): SecondaryYAxisValues => {\n let containsSecondaryYAxis = false;\n let yMinValue: number | undefined;\n let yMaxValue: number | undefined;\n\n data.forEach((series: Partial<PlotData>) => {\n if (usesSecondaryYScale(series)) {\n containsSecondaryYAxis = true;\n const yValues = series.y as number[];\n if (yValues) {\n yMinValue = Math.min(...yValues);\n yMaxValue = Math.max(...yValues);\n }\n }\n });\n\n if (!containsSecondaryYAxis) {\n return {};\n }\n\n if (typeof yMinValue === 'number' && typeof maxAllowedMinY === 'number') {\n yMinValue = Math.min(yMinValue, maxAllowedMinY);\n }\n if (typeof yMaxValue === 'number' && typeof minAllowedMaxY === 'number') {\n yMaxValue = Math.max(yMaxValue, minAllowedMaxY);\n }\n if (layout?.yaxis2?.range) {\n yMinValue = layout.yaxis2.range[0];\n yMaxValue = layout.yaxis2.range[1];\n }\n\n return {\n secondaryYAxistitle:\n typeof layout?.yaxis2?.title === 'string'\n ? layout.yaxis2.title\n : typeof layout?.yaxis2?.title?.text === 'string'\n ? layout.yaxis2.title.text\n : undefined,\n secondaryYScaleOptions: {\n yMinValue,\n yMaxValue,\n },\n };\n};\n\nexport const transformPlotlyJsonToDonutProps = (\n input: PlotlySchema,\n colorMap: React.MutableRefObject<Map<string, string>>,\n isDarkTheme?: boolean,\n): DonutChartProps => {\n const firstData = input.data[0] as PieData;\n\n const mapLegendToDataPoint: Record<string, ChartDataPoint> = {};\n firstData.labels?.forEach((label: string, index: number) => {\n const color = getColor(label, colorMap, isDarkTheme);\n //ToDo how to handle string data?\n const value = typeof firstData.values?.[index] === 'number' ? (firstData.values[index] as number) : 1;\n\n if (!mapLegendToDataPoint[label]) {\n mapLegendToDataPoint[label] = {\n legend: label,\n data: value,\n color,\n };\n } else {\n mapLegendToDataPoint[label].data! += value;\n }\n });\n\n const width: number = input.layout?.width ?? 440;\n const height: number = input.layout?.height ?? 220;\n const hideLabels: boolean = firstData.textinfo\n ? !['value', 'percent', 'label+percent'].includes(firstData.textinfo)\n : false;\n const donutMarginHorizontal: number = hideLabels ? 0 : 80;\n const donutMarginVertical: number = 40 + (hideLabels ? 0 : 40);\n const innerRadius: number = firstData.hole\n ? firstData.hole * (Math.min(width - donutMarginHorizontal, height - donutMarginVertical) / 2)\n : 0;\n const { chartTitle } = getTitles(input.layout);\n\n return {\n data: {\n chartTitle,\n chartData: Object.values(mapLegendToDataPoint),\n },\n hideLegend: input.layout?.showlegend === false ? true : false,\n width: input.layout?.width,\n height,\n innerRadius,\n hideLabels,\n showLabelsInPercent: firstData.textinfo ? ['percent', 'label+percent'].includes(firstData.textinfo) : true,\n };\n};\n\nexport const transformPlotlyJsonToVSBCProps = (\n input: PlotlySchema,\n colorMap: React.MutableRefObject<Map<string, string>>,\n isDarkTheme?: boolean,\n fallbackVSBC?: boolean,\n): VerticalStackedBarChartProps => {\n const mapXToDataPoints: { [key: string]: VerticalStackedChartProps } = {};\n let yMaxValue = 0;\n const secondaryYAxisValues = getSecondaryYAxisValues(input.data, input.layout);\n let yMinValue = 0;\n input.data.forEach((series: PlotData, index1: number) => {\n const isXYearCategory = isYearArray(series.x); // Consider year as categorical not numeric continuous axis\n (series.x as Datum[])?.forEach((x: string | number, index2: number) => {\n if (!mapXToDataPoints[x]) {\n mapXToDataPoints[x] = { xAxisPoint: isXYearCategory ? x.toString() : x, chartData: [], lineData: [] };\n }\n const legend: string = getLegend(series, index1);\n const yVal: number = (series.y?.[index2] as number) ?? 0;\n if (series.type === 'bar') {\n const color = getColor(legend, colorMap, isDarkTheme);\n mapXToDataPoints[x].chartData.push({\n legend,\n data: yVal,\n color,\n });\n yMaxValue = Math.max(yMaxValue, yVal);\n } else if (series.type === 'scatter' || !!fallbackVSBC) {\n const color = getColor(legend, colorMap, isDarkTheme);\n const lineOptions = getLineOptions(series.line);\n mapXToDataPoints[x].lineData!.push({\n legend,\n y: yVal,\n color,\n ...(lineOptions ? { lineOptions } : {}),\n useSecondaryYScale: usesSecondaryYScale(series),\n });\n if (!usesSecondaryYScale(series)) {\n yMaxValue = Math.max(yMaxValue, yVal);\n }\n }\n\n yMaxValue = Math.max(yMaxValue, yVal);\n yMinValue = Math.min(yMinValue, yVal);\n });\n });\n\n const { chartTitle, xAxisTitle, yAxisTitle } = getTitles(input.layout);\n\n return {\n data: Object.values(mapXToDataPoints),\n width: input.layout?.width,\n height: input.layout?.height ?? 350,\n barWidth: 'auto',\n yMaxValue,\n yMinValue,\n chartTitle,\n xAxisTitle,\n yAxisTitle,\n mode: 'plotly',\n ...secondaryYAxisValues,\n hideTickOverlap: true,\n barGapMax: 2,\n };\n};\n\nexport const transformPlotlyJsonToGVBCProps = (\n input: PlotlySchema,\n colorMap: React.MutableRefObject<Map<string, string>>,\n isDarkTheme?: boolean,\n): GroupedVerticalBarChartProps => {\n const mapXToDataPoints: Record<string, GroupedVerticalBarChartData> = {};\n const secondaryYAxisValues = getSecondaryYAxisValues(input.data, input.layout, 0, 0);\n input.data.forEach((series: PlotData, index1: number) => {\n (series.x as Datum[])?.forEach((x: string | number, index2: number) => {\n if (!mapXToDataPoints[x]) {\n mapXToDataPoints[x] = { name: x.toString(), series: [] };\n }\n if (series.type === 'bar') {\n const legend: string = getLegend(series, index1);\n const color = getColor(legend, colorMap, isDarkTheme);\n\n mapXToDataPoints[x].series.push({\n key: legend,\n data: (series.y?.[index2] as number) ?? 0,\n xAxisCalloutData: x as string,\n color,\n legend,\n useSecondaryYScale: usesSecondaryYScale(series),\n });\n }\n });\n });\n\n const { chartTitle, xAxisTitle, yAxisTitle } = getTitles(input.layout);\n\n return {\n data: Object.values(mapXToDataPoints),\n width: input.layout?.width,\n height: input.layout?.height ?? 350,\n barWidth: 'auto',\n chartTitle,\n xAxisTitle,\n yAxisTitle,\n mode: 'plotly',\n ...secondaryYAxisValues,\n hideTickOverlap: true,\n };\n};\n\nexport const transformPlotlyJsonToVBCProps = (\n input: PlotlySchema,\n colorMap: React.MutableRefObject<Map<string, string>>,\n isDarkTheme?: boolean,\n): VerticalBarChartProps => {\n const vbcData: VerticalBarChartDataPoint[] = [];\n\n input.data.forEach((series: Partial<PlotData>, seriesIdx: number) => {\n if (!series.x) {\n return;\n }\n\n const isXString = isStringArray(series.x);\n // TODO: In case of a single bin, add an empty bin of the same size to prevent the\n // default bar width from being used and ensure the bar spans the full intended range.\n const xBins = createBins(series.x, series.xbins?.start, series.xbins?.end, series.xbins?.size);\n const yBins: number[][] = xBins.map(() => []);\n let total = 0;\n\n series.x.forEach((xVal, index) => {\n const binIdx = findBinIndex(xBins, xVal as string | number | null, isXString);\n if (binIdx !== -1) {\n yBins[binIdx].push((series.y?.[index] as number | null | undefined) ?? 1);\n }\n });\n\n const y = yBins.map(bin => {\n const yVal = calculateHistFunc(series.histfunc, bin);\n total += yVal;\n return yVal;\n });\n\n xBins.forEach((bin, index) => {\n const legend: string = getLegend(series, seriesIdx);\n const color: string = getColor(legend, colorMap, isDarkTheme);\n const yVal = calculateHistNorm(\n series.histnorm,\n y[index],\n total,\n isXString ? bin.length : getBinSize(bin as Bin<number, number>),\n );\n\n vbcData.push({\n x: isXString ? bin.join(', ') : getBinCenter(bin as Bin<number, number>),\n y: yVal,\n legend,\n color,\n ...(isXString\n ? {}\n : { xAxisCalloutData: `[${(bin as Bin<number, number>).x0} - ${(bin as Bin<number, number>).x1})` }),\n });\n });\n });\n\n const { chartTitle, xAxisTitle, yAxisTitle } = getTitles(input.layout);\n\n return {\n data: vbcData,\n width: input.layout?.width,\n height: input.layout?.height ?? 350,\n chartTitle,\n xAxisTitle,\n yAxisTitle,\n mode: 'histogram',\n hideTickOverlap: true,\n maxBarWidth: 50,\n };\n};\n\nexport const transformPlotlyJsonToScatterChartProps = (\n input: PlotlySchema,\n isAreaChart: boolean,\n colorMap: React.MutableRefObject<Map<string, string>>,\n isDarkTheme?: boolean,\n): LineChartProps | AreaChartProps => {\n const secondaryYAxisValues = getSecondaryYAxisValues(\n input.data,\n input.layout,\n isAreaChart ? 0 : undefined,\n isAreaChart ? 0 : undefined,\n );\n let mode: string = 'tonexty';\n const chartData: LineChartPoints[] = input.data.map((series: PlotData, index: number) => {\n const xValues = series.x as Datum[];\n const isString = typeof xValues[0] === 'string';\n const isXDate = isDateArray(xValues);\n const isXNumber = isNumberArray(xValues);\n const legend: string = getLegend(series, index);\n const lineColor = getColor(legend, colorMap, isDarkTheme);\n mode = series.fill === 'tozeroy' ? 'tozeroy' : 'tonexty';\n const lineOptions = getLineOptions(series.line);\n\n return {\n legend,\n data: xValues.map((x, i: number) => ({\n x: isString ? (isXDate ? new Date(x as string) : isXNumber ? parseFloat(x as string) : x) : x,\n y: series.y[i],\n ...(Array.isArray(series.marker?.size)\n ? { markerSize: series.marker.size[i] }\n : typeof series.marker?.size === 'number'\n ? { markerSize: series.marker.size }\n : {}),\n })),\n color: lineColor,\n ...(lineOptions ? { lineOptions } : {}),\n useSecondaryYScale: usesSecondaryYScale(series),\n } as LineChartPoints;\n });\n\n const yMinMaxValues = findNumericMinMaxOfY(chartData);\n const { chartTitle, xAxisTitle, yAxisTitle } = getTitles(input.layout);\n\n const chartProps: ChartProps = {\n chartTitle,\n lineChartData: chartData,\n };\n\n if (isAreaChart) {\n return {\n data: chartProps,\n supportNegativeData: true,\n xAxisTitle,\n yAxisTitle,\n ...secondaryYAxisValues,\n mode,\n width: input.layout?.width,\n height: input.layout?.height ?? 350,\n hideTickOverlap: true,\n useUTC: false,\n } as AreaChartProps;\n } else {\n return {\n data: chartProps,\n supportNegativeData: true,\n xAxisTitle,\n yAxisTitle,\n ...secondaryYAxisValues,\n roundedTicks: true,\n yMinValue: yMinMaxValues.startValue,\n yMaxValue: yMinMaxValues.endValue,\n width: input.layout?.width,\n height: input.layout?.height ?? 350,\n hideTickOverlap: true,\n useUTC: false,\n } as LineChartProps;\n }\n};\n\nexport const transformPlotlyJsonToHorizontalBarWithAxisProps = (\n input: PlotlySchema,\n colorMap: React.MutableRefObject<Map<string, string>>,\n isDarkTheme?: boolean,\n): HorizontalBarChartWithAxisProps => {\n const chartData: HorizontalBarChartWithAxisDataPoint[] = input.data\n .map((series: PlotData, index: number) => {\n return (series.y as Datum[]).map((yValue: string, i: number) => {\n const legendName = series.name ?? yValue;\n const color = getColor(legendName, colorMap, isDarkTheme);\n return {\n x: series.x[i],\n y: yValue,\n legend: legendName,\n color,\n } as HorizontalBarChartWithAxisDataPoint;\n });\n })\n .reverse()\n .flat()\n //reversing the order to invert the Y bars order as required by plotly.\n .reverse();\n\n const chartHeight: number = input.layout?.height ?? 450;\n const margin: number = input.layout?.margin?.l ?? 0;\n const padding: number = input.layout?.margin?.pad ?? 0;\n const availableHeight: number = chartHeight - margin - padding;\n const numberOfRows = new Set(chartData.map(d => d.y)).size || 1;\n const scalingFactor = 0.01;\n const gapFactor = 1 / (1 + scalingFactor * numberOfRows);\n const barHeight = availableHeight / (numberOfRows * (1 + gapFactor));\n\n const { chartTitle, xAxisTitle, yAxisTitle } = getTitles(input.layout);\n\n return {\n data: chartData,\n chartTitle,\n xAxisTitle,\n yAxisTitle,\n secondaryYAxistitle:\n typeof input.layout?.yaxis2?.title === 'string'\n ? input.layout?.yaxis2?.title\n : input.layout?.yaxis2?.title?.text || '',\n barHeight,\n showYAxisLables: true,\n height: chartHeight,\n width: input.layout?.width,\n hideTickOverlap: true,\n noOfCharsToTruncate: 20,\n showYAxisLablesTooltip: true,\n };\n};\n\nexport const transformPlotlyJsonToHeatmapProps = (input: PlotlySchema): HeatMapChartProps => {\n const firstData = input.data[0] as Partial<PlotData>;\n const heatmapDataPoints: HeatMapChartDataPoint[] = [];\n let zMin = Number.POSITIVE_INFINITY;\n let zMax = Number.NEGATIVE_INFINITY;\n\n if (firstData.type === 'histogram2d') {\n const isXString = isStringArray(firstData.x);\n const isYString = isStringArray(firstData.y);\n const xBins = createBins(firstData.x, firstData.xbins?.start, firstData.xbins?.end, firstData.xbins?.size);\n const yBins = createBins(firstData.y, firstData.ybins?.start, firstData.ybins?.end, firstData.ybins?.size);\n const zBins: number[][][] = yBins.map(() => xBins.map(() => []));\n let total = 0;\n\n firstData.x?.forEach((xVal, index) => {\n const xBinIdx = findBinIndex(xBins, xVal as string | number | null, isXString);\n const yBinIdx = findBinIndex(yBins, firstData.y?.[index] as string | number | null | undefined, isYString);\n\n if (xBinIdx !== -1 && yBinIdx !== -1) {\n zBins[yBinIdx][xBinIdx].push((firstData.z?.[index] as number | null | undefined) ?? 1);\n }\n });\n\n const z = zBins.map(row => {\n return row.map(bin => {\n const zVal = calculateHistFunc(firstData.histfunc, bin);\n total += zVal;\n return zVal;\n });\n });\n\n xBins.forEach((xBin, xIdx) => {\n yBins.forEach((yBin, yIdx) => {\n const zVal = calculateHistNorm(\n firstData.histnorm,\n z[yIdx][xIdx],\n total,\n isXString ? xBin.length : getBinSize(xBin as Bin<number, number>),\n isYString ? yBin.length : getBinSize(yBin as Bin<number, number>),\n );\n\n heatmapDataPoints.push({\n x: isXString ? xBin.join(', ') : getBinCenter(xBin as Bin<number, number>),\n y: isYString ? yBin.join(', ') : getBinCenter(yBin as Bin<number, number>),\n value: zVal,\n rectText: zVal,\n });\n\n if (typeof zVal === 'number') {\n zMin = Math.min(zMin, zVal);\n zMax = Math.max(zMax, zVal);\n }\n });\n });\n } else {\n (firstData.x as Datum[])?.forEach((xVal, xIdx: number) => {\n firstData.y?.forEach((yVal: any, yIdx: number) => {\n const zVal = (firstData.z as number[][])?.[yIdx]?.[xIdx];\n\n heatmapDataPoints.push({\n x: input.layout?.xaxis?.type === 'date' ? (xVal as Date) : xVal ?? 0,\n y: input.layout?.yaxis?.type === 'date' ? (yVal as Date) : yVal,\n value: zVal,\n rectText: zVal,\n });\n\n if (typeof zVal === 'number') {\n zMin = Math.min(zMin, zVal);\n zMax = Math.max(zMax, zVal);\n }\n });\n });\n }\n\n const heatmapData: HeatMapChartData = {\n legend: firstData.name ?? '',\n data: heatmapDataPoints,\n value: 0,\n };\n\n // Initialize domain and range to default values\n const defaultDomain = [zMin, (zMax + zMin) / 2, zMax];\n const defaultRange = [\n getColorFromToken(DataVizPalette.color1),\n getColorFromToken(DataVizPalette.color2),\n getColorFromToken(DataVizPalette.color3),\n ];\n const domainValuesForColorScale: number[] = Array.isArray(firstData.colorscale)\n ? (firstData.colorscale as Array<[number, string]>).map(arr => arr[0] * (zMax - zMin) + zMin)\n : defaultDomain;\n\n const rangeValuesForColorScale: string[] = Array.isArray(firstData.colorscale)\n ? (firstData.colorscale as Array<[number, string]>).map(arr => arr[1])\n : defaultRange;\n\n const { chartTitle, xAxisTitle, yAxisTitle } = getTitles(input.layout);\n\n return {\n data: [heatmapData],\n domainValuesForColorScale,\n rangeValuesForColorScale,\n hideLegend: true,\n showYAxisLables: true,\n chartTitle,\n xAxisTitle,\n yAxisTitle,\n sortOrder: 'none',\n width: input.layout?.width,\n height: input.layout?.height ?? 350,\n hideTickOverlap: true,\n noOfCharsToTruncate: 20,\n showYAxisLablesTooltip: true,\n };\n};\n\nexport const transformPlotlyJsonToSankeyProps = (\n input: PlotlySchema,\n colorMap: React.MutableRefObject<Map<string, string>>,\n isDarkTheme?: boolean,\n): SankeyChartProps => {\n const { link, node } = input.data[0] as SankeyData;\n const validLinks = (link?.value ?? [])\n .map((val: number, index: number) => ({\n value: val,\n source: link?.source![index],\n target: link?.target![index],\n }))\n // eslint-disable-next-line @typescript-eslint/no-shadow\n // Filter out negative nodes, unequal nodes and self-references (circular links)\n .filter(x => x.source >= 0 && x.target >= 0 && x.source !== x.target);\n\n const sankeyChartData = {\n nodes: node.label?.map((label: string, index: number) => {\n const color = getColor(label, colorMap, isDarkTheme);\n\n return {\n nodeId: index,\n name: label,\n color,\n };\n }),\n links: validLinks.map((validLink: any, index: number) => {\n return {\n ...validLink,\n };\n }),\n } as SankeyChartData;\n\n // const styles: SankeyChartProps['styles'] = {\n // root: {\n // ...(input.layout?.font?.size ? { fontSize: input.layout.font?.size } : {}),\n // },\n // };\n\n const { chartTitle } = getTitles(input.layout);\n\n return {\n data: {\n chartTitle,\n SankeyChartData: sankeyChartData,\n },\n width: input.layout?.width,\n height: input.layout?.height ?? 468,\n // TODO\n // styles,\n };\n};\n\nexport const transformPlotlyJsonToGaugeProps = (\n input: PlotlySchema,\n colorMap: React.MutableRefObject<Map<string, string>>,\n isDarkTheme?: boolean,\n): GaugeChartProps => {\n const firstData = input.data[0] as PlotData;\n\n const segments = firstData.gauge?.steps?.length\n ? firstData.gauge.steps.map((step: any, index: number): GaugeChartSegment => {\n const legend = step.name || `Segment ${index + 1}`;\n const color = getColor(legend, colorMap, isDarkTheme);\n return {\n legend,\n size: step.range?.[1] - step.range?.[0],\n color,\n };\n })\n : [\n {\n legend: 'Current',\n size: firstData.value ?? 0 - (firstData.gauge?.axis?.range?.[0] ?? 0),\n color: getColor('Current', colorMap, isDarkTheme),\n },\n {\n legend: 'Target',\n size: (firstData.gauge?.axis?.range?.[1] ?? 100) - (firstData.value ?? 0),\n color: DataVizPalette.disabled,\n },\n ];\n\n let sublabel: string | undefined;\n // let sublabelColor: string | undefined;\n if (firstData.delta?.reference) {\n const diff = firstData.value - firstData.delta.reference;\n if (diff >= 0) {\n sublabel = `\\u25B2 ${diff}`;\n // const color = getColorFromToken(DataVizPalette.success, isDarkTheme);\n // sublabelColor = color;\n } else {\n sublabel = `\\u25BC ${Math.abs(diff)}`;\n // const color = getColorFromToken(DataVizPalette.error, isDarkTheme);\n // sublabelColor = color;\n }\n }\n\n // const styles: GaugeChartProps['styles'] = {\n // sublabel: {\n // fill: sublabelColor,\n // },\n // };\n\n const { chartTitle } = getTitles(input.layout);\n\n return {\n segments,\n chartValue: firstData.value ?? 0,\n chartTitle,\n sublabel,\n // range values can be null\n minValue: typeof firstData.gauge?.axis?.range?.[0] === 'number' ? firstData.gauge?.axis?.range?.[0] : undefined,\n maxValue: typeof firstData.gauge?.axis?.range?.[1] === 'number' ? firstData.gauge?.axis?.range?.[1] : undefined,\n chartValueFormat: () => firstData.value?.toString() ?? '',\n width: input.layout?.width,\n height: input.layout?.height ?? 220,\n // TODO\n // styles,\n variant: firstData.gauge?.steps?.length ? 'multiple-segments' : 'single-segment',\n };\n};\n\nexport const projectPolarToCartesian = (input: PlotlySchema): PlotlySchema => {\n const projection: PlotlySchema = { ...input };\n for (let sindex = 0; sindex < input.data.length; sindex++) {\n const series: PlotData = input.data[sindex] as PlotData;\n series.x = [];\n series.y = [];\n for (let ptindex = 0; ptindex < series.r.length; ptindex++) {\n const thetaRad = ((series.theta[ptindex] as number) * Math.PI) / 180;\n const radius = series.r[ptindex] as number;\n series.x[ptindex] = radius * Math.cos(thetaRad);\n series.y[ptindex] = radius * Math.sin(thetaRad);\n }\n projection.data[sindex] = series;\n }\n\n return projection;\n};\n\nfunction isPlainObject(obj: any) {\n return (\n Object.prototype.toString.call(obj) === '[object Object]' &&\n Object.getPrototypeOf(obj).hasOwnProperty('hasOwnProperty')\n );\n}\n\nvar arrayAttributes: any[] = [];\nvar stack: any[] = [];\nvar isArrayStack: any[] = [];\nvar baseContainer: any, baseAttrName: any;\n/**\n * Interate iteratively through the trace object and find all the array attributes.\n * 1 trace record = 1 series of data\n * @param trace\n */\nexport function findArrayAttributes(trace: any) {\n // Init basecontainer and baseAttrName\n crawlIntoTrace(baseContainer, 0, '');\n}\n\nfunction crawlIntoTrace(container: any, i: number, astrPartial: any) {\n var item = container[stack[i]];\n var newAstrPartial = astrPartial + stack[i];\n if (i === stack.length - 1) {\n if (isArrayOrTypedArray(item)) {\n arrayAttributes.push(baseAttrName + newAstrPartial);\n }\n } else {\n if (isArrayStack[i]) {\n if (Array.isArray(item)) {\n for (var j = 0; j < item.length; j++) {\n if (isPlainObject(item[j])) {\n crawlIntoTrace(item[j], i + 1, newAstrPartial + '[' + j + '].');\n }\n }\n }\n } else if (isPlainObject(item)) {\n crawlIntoTrace(item, i + 1, newAstrPartial + '.');\n }\n }\n}\n\nfunction getLineOptions(line: Partial<ScatterLine> | undefined): LineChartLineOptions | undefined {\n if (!line) {\n return;\n }\n\n let lineOptions: LineChartLineOptions = {};\n if (line.dash) {\n lineOptions = { ...lineOptions, ...dashOptions[line.dash] };\n }\n\n switch (line.shape) {\n case 'spline':\n const smoothing = typeof line.smoothing === 'number' ? line.smoothing : 1;\n lineOptions.curve = d3CurveCardinal.tension(1 - smoothing / 1.3);\n break;\n case 'hv':\n lineOptions.curve = 'stepAfter';\n break;\n case 'vh':\n lineOptions.curve = 'stepBefore';\n break;\n case 'hvh':\n lineOptions.curve = 'step';\n break;\n default:\n lineOptions.curve = 'linear';\n }\n\n return Object.keys(lineOptions).length > 0 ? lineOptions : undefined;\n}\n\nconst isStringArray = (arr: any) => {\n return isArrayOfType(arr, (value: any) => typeof value === 'string');\n};\n\n// TODO: Use binary search to find the appropriate bin for numeric value.\nconst findBinIndex = (\n bins: string[][] | Bin<number, number>[],\n value: string | number | null | undefined,\n isString: boolean,\n) => {\n if (typeof value === 'undefined' || value === null) {\n return -1;\n }\n\n return isString\n ? (bins as string[][]).findIndex(bin => bin.includes(value as string))\n : (bins as Bin<number, number>[]).findIndex(\n (bin, index) =>\n (value as number) >= bin.x0! &&\n (index === bins.length - 1 ? (value as number) <= bin.x1! : (value as number) < bin.x1!),\n );\n};\n\nconst getBinSize = (bin: Bin<number, number>) => {\n return bin.x1! - bin.x0!;\n};\n\nconst getBinCenter = (bin: Bin<number, number>) => {\n return (bin.x1! + bin.x0!) / 2;\n};\n\n// TODO: Add support for date axes\nconst createBins = (\n data: TypedArray | Datum[] | Datum[][] | undefined,\n binStart?: number | string,\n binEnd?: number | string,\n binSize?: number | string,\n) => {\n if (!data || data.length === 0) {\n return [];\n }\n\n if (isStringArray(data)) {\n const categories = Array.from(new Set(data as string[]));\n const start = typeof binStart === 'number' ? Math.ceil(binStart) : 0;\n const stop = typeof binEnd === 'number' ? Math.floor(binEnd) + 1 : categories.length;\n const step = typeof binSize === 'number' ? binSize : 1;\n\n return d3Range(start, stop, step).map(i => categories.slice(i, i + step));\n }\n\n const scale = d3ScaleLinear()\n .domain(d3Extent<number>(data as number[]) as [number, number])\n .nice();\n let [minVal, maxVal] = scale.domain();\n\n minVal = typeof binStart === 'number' ? binStart : minVal;\n maxVal = typeof binEnd === 'number' ? binEnd : maxVal;\n\n const binGenerator = d3Bin().domain([minVal, maxVal]);\n\n if (typeof binSize === 'number' && binSize > 0) {\n const thresholds: number[] = [];\n const precision = Math.max(getPrecision(minVal), getPrecision(binSize));\n let th = precisionRound(minVal, precision);\n\n while (th < precisionRound(maxVal + binSize, precision)) {\n thresholds.push(th);\n th = precisionRound(th + binSize, precision);\n }\n\n minVal = thresholds[0];\n maxVal = thresholds[thresholds.length - 1];\n binGenerator.domain([minVal, maxVal]).thresholds(thresholds);\n\n // When the domain ends at the last threshold (maxVal), d3Bin creates an extra final bin where\n // both x0 and x1 are equal to maxVal and inclusive. The previous bin also has x1 equal to maxVal,\n // but it is exclusive. To maintain consistent bin widths, remove the final bin,\n // making the previous bin the last one, with both x0 and x1 inclusive.\n return binGenerator(data as number[]).slice(0, -1);\n }\n return binGenerator(data as number[]);\n};\n\nconst calculateHistFunc = (histfunc: PlotData['histfunc'] | undefined, bin: number[]) => {\n switch (histfunc) {\n case 'sum':\n return d3Sum(bin);\n case 'avg':\n return bin.length === 0 ? 0 : d3Sum(bin) / bin.length;\n case 'min':\n return d3Min(bin) ?? 0;\n case 'max':\n return d3Max(bin) ?? 0;\n default:\n return bin.length;\n }\n};\n\nconst calculateHistNorm = (\n histnorm: PlotData['histnorm'] | undefined,\n value: number,\n total: number,\n dx: number,\n dy: number = 1,\n) => {\n switch (histnorm) {\n case 'percent':\n return total === 0 ? 0 : (value / total) * 100;\n case 'probability':\n return total === 0 ? 0 : value / total;\n case 'density':\n return dx * dy === 0 ? 0 : value / (dx * dy);\n case 'probability density':\n return total * dx * dy === 0 ? 0 : value / (total * dx * dy);\n default:\n return value;\n }\n};\n\nconst getPrecision = (value: number) => {\n return value.toString().split('.')[1]?.length ?? 0;\n};\n\nconst precisionRound = (value: number, precision: number) => {\n const factor = Math.pow(10, precision);\n return Math.round(value * factor) / factor;\n};\n"],"names":["React","bin","d3Bin","extent","d3Extent","sum","d3Sum","min","d3Min","max","d3Max","range","d3Range","scaleLinear","d3ScaleLinear","DataVizPalette","getColorFromToken","getNextColor","findNumericMinMaxOfY","isArrayOfType","isArrayOrTypedArray","isDate","isDateArray","isNumberArray","isYearArray","curveCardinal","d3CurveCardinal","dashOptions","dot","strokeDasharray","strokeLinecap","strokeWidth","lineBorderWidth","dash","longdash","dashdot","longdashdot","solid","getLegend","series","index","name","getTitles","layout","titles","chartTitle","title","text","xAxisTitle","xaxis","yAxisTitle","yaxis","correctYearMonth","xValues","presentYear","Date","getFullYear","length","Array","isArray","Error","dates","map","possiblyMonthValue","parsedDate","i","currentMonth","getMonth","previousMonth","currentYear","previousYear","setFullYear","month","getColor","legendLabel","colorMap","isDarkTheme","current","has","nextColor","size","set","get","usesSecondaryYScale","getSecondaryYAxisValues","data","maxAllowedMinY","minAllowedMaxY","containsSecondaryYAxis","yMinValue","yMaxValue","forEach","yValues","y","Math","yaxis2","secondaryYAxistitle","undefined","secondaryYScaleOptions","transformPlotlyJsonToDonutProps","input","firstData","mapLegendToDataPoint","labels","label","color","value","values","legend","width","height","hideLabels","textinfo","includes","donutMarginHorizontal","donutMarginVertical","innerRadius","hole","chartData","Object","hideLegend","showlegend","showLabelsInPercent","transformPlotlyJsonToVSBCProps","fallbackVSBC","mapXToDataPoints","secondaryYAxisValues","index1","isXYearCategory","x","index2","xAxisPoint","toString","lineData","yVal","type","push","lineOptions","getLineOptions","line","useSecondaryYScale","barWidth","mode","hideTickOverlap","barGapMax","transformPlotlyJsonToGVBCProps","key","xAxisCalloutData","transformPlotlyJsonToVBCProps","vbcData","seriesIdx","isXString","isStringArray","xBins","createBins","xbins","start","end","yBins","total","xVal","binIdx","findBinIndex","calculateHistFunc","histfunc","calculateHistNorm","histnorm","getBinSize","join","getBinCenter","x0","x1","maxBarWidth","transformPlotlyJsonToScatterChartProps","isAreaChart","isString","isXDate","isXNumber","lineColor","fill","parseFloat","marker","markerSize","yMinMaxValues","chartProps","lineChartData","supportNegativeData","useUTC","roundedTicks","startValue","endValue","transformPlotlyJsonToHorizontalBarWithAxisProps","yValue","legendName","reverse","flat","chartHeight","margin","l","padding","pad","availableHeight","numberOfRows","Set","d","scalingFactor","gapFactor","barHeight","showYAxisLables","noOfCharsToTruncate","showYAxisLablesTooltip","transformPlotlyJsonToHeatmapProps","heatmapDataPoints","zMin","Number","POSITIVE_INFINITY","zMax","NEGATIVE_INFINITY","isYString","ybins","zBins","xBinIdx","yBinIdx","z","row","zVal","xBin","xIdx","yBin","yIdx","rectText","heatmapData","defaultDomain","defaultRange","color1","color2","color3","domainValuesForColorScale","colorscale","arr","rangeValuesForColorScale","sortOrder","transformPlotlyJsonToSankeyProps","node","link","validLinks","val","source","target","filter","sankeyChartData","nodes","nodeId","links","validLink","SankeyChartData","transformPlotlyJsonToGaugeProps","segments","gauge","steps","step","axis","disabled","sublabel","delta","reference","diff","abs","chartValue","minValue","maxValue","chartValueFormat","variant","projectPolarToCartesian","projection","sindex","ptindex","r","thetaRad","theta","PI","radius","cos","sin","isPlainObject","obj","prototype","call","getPrototypeOf","hasOwnProperty","arrayAttributes","stack","isArrayStack","baseContainer","baseAttrName","findArrayAttributes","trace","crawlIntoTrace","container","astrPartial","item","newAstrPartial","j","shape","smoothing","curve","tension","keys","bins","findIndex","binStart","binEnd","binSize","categories","from","ceil","stop","floor","slice","scale","domain","nice","minVal","maxVal","binGenerator","thresholds","precision","getPrecision","th","precisionRound","dx","dy","split","factor","pow","round"],"mappings":"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"}
1
+ {"version":3,"sources":["../src/components/DeclarativeChart/PlotlySchemaAdapter.ts"],"sourcesContent":["/* eslint-disable one-var */\n/* eslint-disable vars-on-top */\n/* eslint-disable no-var */\n/* eslint-disable @typescript-eslint/no-explicit-any */\nimport * as React from 'react';\nimport {\n bin as d3Bin,\n extent as d3Extent,\n sum as d3Sum,\n min as d3Min,\n max as d3Max,\n range as d3Range,\n Bin,\n} from 'd3-array';\nimport { scaleLinear as d3ScaleLinear } from 'd3-scale';\nimport { DonutChartProps } from '../DonutChart/index';\nimport {\n ChartDataPoint,\n ChartProps,\n HorizontalBarChartWithAxisDataPoint,\n LineChartPoints,\n VerticalStackedChartProps,\n HeatMapChartData,\n HeatMapChartDataPoint,\n GroupedVerticalBarChartData,\n VerticalBarChartDataPoint,\n SankeyChartData,\n LineChartLineOptions,\n} from '../../types/DataPoint';\nimport { SankeyChartProps } from '../SankeyChart/index';\nimport { VerticalStackedBarChartProps } from '../VerticalStackedBarChart/index';\nimport { HorizontalBarChartWithAxisProps } from '../HorizontalBarChartWithAxis/index';\nimport { LineChartProps } from '../LineChart/index';\nimport { AreaChartProps } from '../AreaChart/index';\nimport { HeatMapChartProps } from '../HeatMapChart/index';\nimport { DataVizPalette, getColorFromToken, getNextColor } from '../../utilities/colors';\nimport { GaugeChartProps, GaugeChartSegment } from '../GaugeChart/index';\nimport { GroupedVerticalBarChartProps } from '../GroupedVerticalBarChart/index';\nimport { VerticalBarChartProps } from '../VerticalBarChart/index';\nimport { findNumericMinMaxOfY } from '../../utilities/utilities';\nimport type {\n Datum,\n Layout,\n PlotlySchema,\n PieData,\n PlotData,\n SankeyData,\n ScatterLine,\n TypedArray,\n Data,\n} from '@fluentui/chart-utilities';\nimport {\n isArrayOfType,\n isArrayOrTypedArray,\n isDate,\n isDateArray,\n isNumberArray,\n isYearArray,\n} from '@fluentui/chart-utilities';\nimport { curveCardinal as d3CurveCardinal } from 'd3-shape';\n\ninterface SecondaryYAxisValues {\n secondaryYAxistitle?: string;\n secondaryYScaleOptions?: { yMinValue?: number; yMaxValue?: number };\n}\n\nconst dashOptions = {\n dot: {\n strokeDasharray: '1, 5',\n strokeLinecap: 'round',\n strokeWidth: '2',\n lineBorderWidth: '4',\n },\n dash: {\n strokeDasharray: '5, 5',\n strokeLinecap: 'butt',\n strokeWidth: '2',\n lineBorderWidth: '4',\n },\n longdash: {\n strokeDasharray: '10, 5',\n strokeLinecap: 'butt',\n strokeWidth: '2',\n lineBorderWidth: '4',\n },\n dashdot: {\n strokeDasharray: '5, 5, 1, 5',\n strokeLinecap: 'butt',\n strokeWidth: '2',\n lineBorderWidth: '4',\n },\n longdashdot: {\n strokeDasharray: '10, 5, 1, 5',\n strokeLinecap: 'butt',\n strokeWidth: '2',\n lineBorderWidth: '4',\n },\n solid: {\n strokeDasharray: '0',\n strokeLinecap: 'butt',\n strokeWidth: '2',\n lineBorderWidth: '4',\n },\n} as const;\n\nfunction getTitles(layout: Partial<Layout> | undefined) {\n const titles = {\n chartTitle: typeof layout?.title === 'string' ? layout.title : layout?.title?.text ?? '',\n xAxisTitle: typeof layout?.xaxis?.title === 'string' ? layout?.xaxis?.title : layout?.xaxis?.title?.text ?? '',\n yAxisTitle: typeof layout?.yaxis?.title === 'string' ? layout?.yaxis?.title : layout?.yaxis?.title?.text ?? '',\n };\n return titles;\n}\n\nexport const correctYearMonth = (xValues: Datum[] | Datum[][] | TypedArray): any[] => {\n const presentYear = new Date().getFullYear();\n if (xValues.length > 0 && Array.isArray(xValues[0])) {\n throw new Error('updateXValues:: 2D array not supported');\n }\n const dates = (xValues as Datum[]).map(possiblyMonthValue => {\n const parsedDate = `${possiblyMonthValue} 01, ${presentYear}`;\n return isDate(parsedDate) ? new Date(parsedDate) : null;\n });\n for (let i = dates.length - 1; i > 0; i--) {\n const currentMonth = dates[i]!.getMonth();\n const previousMonth = dates[i - 1]!.getMonth();\n const currentYear = dates[i]!.getFullYear();\n const previousYear = dates[i - 1]!.getFullYear();\n if (previousMonth >= currentMonth) {\n dates[i - 1]!.setFullYear(dates[i]!.getFullYear() - 1);\n } else if (previousYear > currentYear) {\n dates[i - 1]!.setFullYear(currentYear);\n }\n }\n xValues = (xValues as Datum[]).map((month, index) => {\n return `${month} 01, ${dates[index]!.getFullYear()}`;\n });\n return xValues;\n};\n\nexport const getColor = (\n legendLabel: string,\n colorMap: React.MutableRefObject<Map<string, string>>,\n isDarkTheme?: boolean,\n): string => {\n if (!colorMap.current.has(legendLabel)) {\n const nextColor = getNextColor(colorMap.current.size + 1, 0, isDarkTheme);\n colorMap.current.set(legendLabel, nextColor);\n return nextColor;\n }\n\n return colorMap.current.get(legendLabel) as string;\n};\n\nconst usesSecondaryYScale = (series: Partial<PlotData>): boolean => {\n return series.yaxis === 'y2';\n};\n\nconst getSecondaryYAxisValues = (\n data: Data[],\n layout: Partial<Layout> | undefined,\n maxAllowedMinY?: number,\n minAllowedMaxY?: number,\n): SecondaryYAxisValues => {\n let containsSecondaryYAxis = false;\n let yMinValue: number | undefined;\n let yMaxValue: number | undefined;\n\n data.forEach((series: Partial<PlotData>) => {\n if (usesSecondaryYScale(series)) {\n containsSecondaryYAxis = true;\n const yValues = series.y as number[];\n if (yValues) {\n yMinValue = Math.min(...yValues);\n yMaxValue = Math.max(...yValues);\n }\n }\n });\n\n if (!containsSecondaryYAxis) {\n return {};\n }\n\n if (typeof yMinValue === 'number' && typeof maxAllowedMinY === 'number') {\n yMinValue = Math.min(yMinValue, maxAllowedMinY);\n }\n if (typeof yMaxValue === 'number' && typeof minAllowedMaxY === 'number') {\n yMaxValue = Math.max(yMaxValue, minAllowedMaxY);\n }\n if (layout?.yaxis2?.range) {\n yMinValue = layout.yaxis2.range[0];\n yMaxValue = layout.yaxis2.range[1];\n }\n\n return {\n secondaryYAxistitle:\n typeof layout?.yaxis2?.title === 'string'\n ? layout.yaxis2.title\n : typeof layout?.yaxis2?.title?.text === 'string'\n ? layout.yaxis2.title.text\n : undefined,\n secondaryYScaleOptions: {\n yMinValue,\n yMaxValue,\n },\n };\n};\n\nexport const transformPlotlyJsonToDonutProps = (\n input: PlotlySchema,\n colorMap: React.MutableRefObject<Map<string, string>>,\n isDarkTheme?: boolean,\n): DonutChartProps => {\n const firstData = input.data[0] as PieData;\n\n const mapLegendToDataPoint: Record<string, ChartDataPoint> = {};\n firstData.labels?.forEach((label: string, index: number) => {\n const color = getColor(label, colorMap, isDarkTheme);\n //ToDo how to handle string data?\n const value = typeof firstData.values?.[index] === 'number' ? (firstData.values[index] as number) : 1;\n\n if (!mapLegendToDataPoint[label]) {\n mapLegendToDataPoint[label] = {\n legend: label,\n data: value,\n color,\n };\n } else {\n mapLegendToDataPoint[label].data! += value;\n }\n });\n\n const width: number = input.layout?.width ?? 440;\n const height: number = input.layout?.height ?? 220;\n const hideLabels: boolean = firstData.textinfo\n ? !['value', 'percent', 'label+percent'].includes(firstData.textinfo)\n : false;\n const donutMarginHorizontal: number = hideLabels ? 0 : 80;\n const donutMarginVertical: number = 40 + (hideLabels ? 0 : 40);\n const innerRadius: number = firstData.hole\n ? firstData.hole * (Math.min(width - donutMarginHorizontal, height - donutMarginVertical) / 2)\n : 0;\n const { chartTitle } = getTitles(input.layout);\n\n return {\n data: {\n chartTitle,\n chartData: Object.values(mapLegendToDataPoint),\n },\n hideLegend: input.layout?.showlegend === false ? true : false,\n width: input.layout?.width,\n height,\n innerRadius,\n hideLabels,\n showLabelsInPercent: firstData.textinfo ? ['percent', 'label+percent'].includes(firstData.textinfo) : true,\n };\n};\n\nexport const transformPlotlyJsonToVSBCProps = (\n input: PlotlySchema,\n colorMap: React.MutableRefObject<Map<string, string>>,\n isDarkTheme?: boolean,\n fallbackVSBC?: boolean,\n): VerticalStackedBarChartProps => {\n const mapXToDataPoints: { [key: string]: VerticalStackedChartProps } = {};\n let yMaxValue = 0;\n const secondaryYAxisValues = getSecondaryYAxisValues(input.data, input.layout);\n const { legends, hideLegend } = getLegendProps(input.data, input.layout);\n let yMinValue = 0;\n input.data.forEach((series: PlotData, index1: number) => {\n const isXYearCategory = isYearArray(series.x); // Consider year as categorical not numeric continuous axis\n (series.x as Datum[])?.forEach((x: string | number, index2: number) => {\n if (!mapXToDataPoints[x]) {\n mapXToDataPoints[x] = { xAxisPoint: isXYearCategory ? x.toString() : x, chartData: [], lineData: [] };\n }\n const legend: string = legends[index1];\n const yVal: number = (series.y?.[index2] as number) ?? 0;\n if (series.type === 'bar') {\n const color = getColor(legend, colorMap, isDarkTheme);\n mapXToDataPoints[x].chartData.push({\n legend,\n data: yVal,\n color,\n });\n yMaxValue = Math.max(yMaxValue, yVal);\n } else if (series.type === 'scatter' || !!fallbackVSBC) {\n const color = getColor(legend, colorMap, isDarkTheme);\n const lineOptions = getLineOptions(series.line);\n const dashType = series.line?.dash || 'solid';\n const legendShape =\n dashType === 'dot' || dashType === 'dash' || dashType === 'dashdot' ? 'dottedLine' : 'default';\n mapXToDataPoints[x].lineData!.push({\n legend,\n legendShape,\n y: yVal,\n color,\n ...(lineOptions ? { lineOptions } : {}),\n useSecondaryYScale: usesSecondaryYScale(series),\n });\n if (!usesSecondaryYScale(series)) {\n yMaxValue = Math.max(yMaxValue, yVal);\n }\n }\n\n yMaxValue = Math.max(yMaxValue, yVal);\n yMinValue = Math.min(yMinValue, yVal);\n });\n });\n\n const { chartTitle, xAxisTitle, yAxisTitle } = getTitles(input.layout);\n\n return {\n data: Object.values(mapXToDataPoints),\n width: input.layout?.width,\n height: input.layout?.height ?? 350,\n barWidth: 'auto',\n yMaxValue,\n yMinValue,\n chartTitle,\n xAxisTitle,\n yAxisTitle,\n mode: 'plotly',\n ...secondaryYAxisValues,\n hideTickOverlap: true,\n barGapMax: 2,\n hideLegend,\n };\n};\n\nexport const transformPlotlyJsonToGVBCProps = (\n input: PlotlySchema,\n colorMap: React.MutableRefObject<Map<string, string>>,\n isDarkTheme?: boolean,\n): GroupedVerticalBarChartProps => {\n const mapXToDataPoints: Record<string, GroupedVerticalBarChartData> = {};\n const secondaryYAxisValues = getSecondaryYAxisValues(input.data, input.layout, 0, 0);\n const { legends, hideLegend } = getLegendProps(input.data, input.layout);\n input.data.forEach((series: PlotData, index1: number) => {\n (series.x as Datum[])?.forEach((x: string | number, index2: number) => {\n if (!mapXToDataPoints[x]) {\n mapXToDataPoints[x] = { name: x.toString(), series: [] };\n }\n if (series.type === 'bar') {\n const legend: string = legends[index1];\n const color = getColor(legend, colorMap, isDarkTheme);\n\n mapXToDataPoints[x].series.push({\n key: legend,\n data: (series.y?.[index2] as number) ?? 0,\n xAxisCalloutData: x as string,\n color,\n legend,\n useSecondaryYScale: usesSecondaryYScale(series),\n });\n }\n });\n });\n\n const { chartTitle, xAxisTitle, yAxisTitle } = getTitles(input.layout);\n\n return {\n data: Object.values(mapXToDataPoints),\n width: input.layout?.width,\n height: input.layout?.height ?? 350,\n barWidth: 'auto',\n chartTitle,\n xAxisTitle,\n yAxisTitle,\n mode: 'plotly',\n ...secondaryYAxisValues,\n hideTickOverlap: true,\n hideLegend,\n };\n};\n\nexport const transformPlotlyJsonToVBCProps = (\n input: PlotlySchema,\n colorMap: React.MutableRefObject<Map<string, string>>,\n isDarkTheme?: boolean,\n): VerticalBarChartProps => {\n const vbcData: VerticalBarChartDataPoint[] = [];\n const { legends, hideLegend } = getLegendProps(input.data, input.layout);\n\n input.data.forEach((series: Partial<PlotData>, seriesIdx: number) => {\n if (!series.x) {\n return;\n }\n\n const isXString = isStringArray(series.x);\n // TODO: In case of a single bin, add an empty bin of the same size to prevent the\n // default bar width from being used and ensure the bar spans the full intended range.\n const xBins = createBins(series.x, series.xbins?.start, series.xbins?.end, series.xbins?.size);\n const yBins: number[][] = xBins.map(() => []);\n let total = 0;\n\n series.x.forEach((xVal, index) => {\n const binIdx = findBinIndex(xBins, xVal as string | number | null, isXString);\n if (binIdx !== -1) {\n yBins[binIdx].push((series.y?.[index] as number | null | undefined) ?? 1);\n }\n });\n\n const y = yBins.map(bin => {\n const yVal = calculateHistFunc(series.histfunc, bin);\n total += yVal;\n return yVal;\n });\n\n xBins.forEach((bin, index) => {\n const legend: string = legends[seriesIdx];\n const color: string = getColor(legend, colorMap, isDarkTheme);\n const yVal = calculateHistNorm(\n series.histnorm,\n y[index],\n total,\n isXString ? bin.length : getBinSize(bin as Bin<number, number>),\n );\n\n vbcData.push({\n x: isXString ? bin.join(', ') : getBinCenter(bin as Bin<number, number>),\n y: yVal,\n legend,\n color,\n ...(isXString\n ? {}\n : { xAxisCalloutData: `[${(bin as Bin<number, number>).x0} - ${(bin as Bin<number, number>).x1})` }),\n });\n });\n });\n\n const { chartTitle, xAxisTitle, yAxisTitle } = getTitles(input.layout);\n\n return {\n data: vbcData,\n width: input.layout?.width,\n height: input.layout?.height ?? 350,\n chartTitle,\n xAxisTitle,\n yAxisTitle,\n mode: 'histogram',\n hideTickOverlap: true,\n maxBarWidth: 50,\n hideLegend,\n };\n};\n\nexport const transformPlotlyJsonToScatterChartProps = (\n input: PlotlySchema,\n isAreaChart: boolean,\n colorMap: React.MutableRefObject<Map<string, string>>,\n isDarkTheme?: boolean,\n): LineChartProps | AreaChartProps => {\n const secondaryYAxisValues = getSecondaryYAxisValues(\n input.data,\n input.layout,\n isAreaChart ? 0 : undefined,\n isAreaChart ? 0 : undefined,\n );\n let mode: string = 'tonexty';\n const { legends, hideLegend } = getLegendProps(input.data, input.layout);\n const chartData: LineChartPoints[] = input.data.map((series: PlotData, index: number) => {\n const xValues = series.x as Datum[];\n const isString = typeof xValues[0] === 'string';\n const isXDate = isDateArray(xValues);\n const isXNumber = isNumberArray(xValues);\n const legend: string = legends[index];\n const lineColor = getColor(legend, colorMap, isDarkTheme);\n mode = series.fill === 'tozeroy' ? 'tozeroy' : 'tonexty';\n const lineOptions = getLineOptions(series.line);\n const dashType = series.line?.dash || 'solid';\n const legendShape = dashType === 'dot' || dashType === 'dash' || dashType === 'dashdot' ? 'dottedLine' : 'default';\n\n return {\n legend,\n legendShape,\n data: xValues.map((x, i: number) => ({\n x: isString ? (isXDate ? new Date(x as string) : isXNumber ? parseFloat(x as string) : x) : x,\n y: series.y[i],\n ...(Array.isArray(series.marker?.size)\n ? { markerSize: series.marker.size[i] }\n : typeof series.marker?.size === 'number'\n ? { markerSize: series.marker.size }\n : {}),\n })),\n color: lineColor,\n ...(lineOptions ? { lineOptions } : {}),\n useSecondaryYScale: usesSecondaryYScale(series),\n } as LineChartPoints;\n });\n\n const yMinMaxValues = findNumericMinMaxOfY(chartData);\n const { chartTitle, xAxisTitle, yAxisTitle } = getTitles(input.layout);\n\n const chartProps: ChartProps = {\n chartTitle,\n lineChartData: chartData,\n };\n\n if (isAreaChart) {\n return {\n data: chartProps,\n supportNegativeData: true,\n xAxisTitle,\n yAxisTitle,\n ...secondaryYAxisValues,\n mode,\n width: input.layout?.width,\n height: input.layout?.height ?? 350,\n hideTickOverlap: true,\n useUTC: false,\n hideLegend,\n } as AreaChartProps;\n } else {\n return {\n data: chartProps,\n supportNegativeData: true,\n xAxisTitle,\n yAxisTitle,\n ...secondaryYAxisValues,\n roundedTicks: true,\n yMinValue: yMinMaxValues.startValue,\n yMaxValue: yMinMaxValues.endValue,\n width: input.layout?.width,\n height: input.layout?.height ?? 350,\n hideTickOverlap: true,\n useUTC: false,\n hideLegend,\n } as LineChartProps;\n }\n};\n\nexport const transformPlotlyJsonToHorizontalBarWithAxisProps = (\n input: PlotlySchema,\n colorMap: React.MutableRefObject<Map<string, string>>,\n isDarkTheme?: boolean,\n): HorizontalBarChartWithAxisProps => {\n const { legends, hideLegend } = getLegendProps(input.data, input.layout);\n const chartData: HorizontalBarChartWithAxisDataPoint[] = input.data\n .map((series: PlotData, index: number) => {\n const legend = legends[index];\n const color = getColor(legend, colorMap, isDarkTheme);\n return (series.y as Datum[]).map((yValue: string, i: number) => {\n return {\n x: series.x[i],\n y: yValue,\n legend,\n color,\n } as HorizontalBarChartWithAxisDataPoint;\n });\n })\n .reverse()\n .flat()\n //reversing the order to invert the Y bars order as required by plotly.\n .reverse();\n\n const chartHeight: number = input.layout?.height ?? 450;\n const margin: number = input.layout?.margin?.l ?? 0;\n const padding: number = input.layout?.margin?.pad ?? 0;\n const availableHeight: number = chartHeight - margin - padding;\n const numberOfRows = new Set(chartData.map(d => d.y)).size || 1;\n const scalingFactor = 0.01;\n const gapFactor = 1 / (1 + scalingFactor * numberOfRows);\n const barHeight = availableHeight / (numberOfRows * (1 + gapFactor));\n\n const { chartTitle, xAxisTitle, yAxisTitle } = getTitles(input.layout);\n\n return {\n data: chartData,\n chartTitle,\n xAxisTitle,\n yAxisTitle,\n secondaryYAxistitle:\n typeof input.layout?.yaxis2?.title === 'string'\n ? input.layout?.yaxis2?.title\n : input.layout?.yaxis2?.title?.text || '',\n barHeight,\n showYAxisLables: true,\n height: chartHeight,\n width: input.layout?.width,\n hideTickOverlap: true,\n noOfCharsToTruncate: 20,\n showYAxisLablesTooltip: true,\n hideLegend,\n };\n};\n\nexport const transformPlotlyJsonToHeatmapProps = (input: PlotlySchema): HeatMapChartProps => {\n const firstData = input.data[0] as Partial<PlotData>;\n const heatmapDataPoints: HeatMapChartDataPoint[] = [];\n let zMin = Number.POSITIVE_INFINITY;\n let zMax = Number.NEGATIVE_INFINITY;\n\n if (firstData.type === 'histogram2d') {\n const isXString = isStringArray(firstData.x);\n const isYString = isStringArray(firstData.y);\n const xBins = createBins(firstData.x, firstData.xbins?.start, firstData.xbins?.end, firstData.xbins?.size);\n const yBins = createBins(firstData.y, firstData.ybins?.start, firstData.ybins?.end, firstData.ybins?.size);\n const zBins: number[][][] = yBins.map(() => xBins.map(() => []));\n let total = 0;\n\n firstData.x?.forEach((xVal, index) => {\n const xBinIdx = findBinIndex(xBins, xVal as string | number | null, isXString);\n const yBinIdx = findBinIndex(yBins, firstData.y?.[index] as string | number | null | undefined, isYString);\n\n if (xBinIdx !== -1 && yBinIdx !== -1) {\n zBins[yBinIdx][xBinIdx].push((firstData.z?.[index] as number | null | undefined) ?? 1);\n }\n });\n\n const z = zBins.map(row => {\n return row.map(bin => {\n const zVal = calculateHistFunc(firstData.histfunc, bin);\n total += zVal;\n return zVal;\n });\n });\n\n xBins.forEach((xBin, xIdx) => {\n yBins.forEach((yBin, yIdx) => {\n const zVal = calculateHistNorm(\n firstData.histnorm,\n z[yIdx][xIdx],\n total,\n isXString ? xBin.length : getBinSize(xBin as Bin<number, number>),\n isYString ? yBin.length : getBinSize(yBin as Bin<number, number>),\n );\n\n heatmapDataPoints.push({\n x: isXString ? xBin.join(', ') : getBinCenter(xBin as Bin<number, number>),\n y: isYString ? yBin.join(', ') : getBinCenter(yBin as Bin<number, number>),\n value: zVal,\n rectText: zVal,\n });\n\n if (typeof zVal === 'number') {\n zMin = Math.min(zMin, zVal);\n zMax = Math.max(zMax, zVal);\n }\n });\n });\n } else {\n (firstData.x as Datum[])?.forEach((xVal, xIdx: number) => {\n firstData.y?.forEach((yVal: any, yIdx: number) => {\n const zVal = (firstData.z as number[][])?.[yIdx]?.[xIdx];\n\n heatmapDataPoints.push({\n x: input.layout?.xaxis?.type === 'date' ? (xVal as Date) : xVal ?? 0,\n y: input.layout?.yaxis?.type === 'date' ? (yVal as Date) : yVal,\n value: zVal,\n rectText: zVal,\n });\n\n if (typeof zVal === 'number') {\n zMin = Math.min(zMin, zVal);\n zMax = Math.max(zMax, zVal);\n }\n });\n });\n }\n\n const heatmapData: HeatMapChartData = {\n legend: firstData.name ?? '',\n data: heatmapDataPoints,\n value: 0,\n };\n\n // Initialize domain and range to default values\n const defaultDomain = [zMin, (zMax + zMin) / 2, zMax];\n const defaultRange = [\n getColorFromToken(DataVizPalette.color1),\n getColorFromToken(DataVizPalette.color2),\n getColorFromToken(DataVizPalette.color3),\n ];\n const domainValuesForColorScale: number[] = Array.isArray(firstData.colorscale)\n ? (firstData.colorscale as Array<[number, string]>).map(arr => arr[0] * (zMax - zMin) + zMin)\n : defaultDomain;\n\n const rangeValuesForColorScale: string[] = Array.isArray(firstData.colorscale)\n ? (firstData.colorscale as Array<[number, string]>).map(arr => arr[1])\n : defaultRange;\n\n const { chartTitle, xAxisTitle, yAxisTitle } = getTitles(input.layout);\n\n return {\n data: [heatmapData],\n domainValuesForColorScale,\n rangeValuesForColorScale,\n hideLegend: true,\n showYAxisLables: true,\n chartTitle,\n xAxisTitle,\n yAxisTitle,\n sortOrder: 'none',\n width: input.layout?.width,\n height: input.layout?.height ?? 350,\n hideTickOverlap: true,\n noOfCharsToTruncate: 20,\n showYAxisLablesTooltip: true,\n };\n};\n\nexport const transformPlotlyJsonToSankeyProps = (\n input: PlotlySchema,\n colorMap: React.MutableRefObject<Map<string, string>>,\n isDarkTheme?: boolean,\n): SankeyChartProps => {\n const { link, node } = input.data[0] as SankeyData;\n const validLinks = (link?.value ?? [])\n .map((val: number, index: number) => ({\n value: val,\n source: link?.source![index],\n target: link?.target![index],\n }))\n // eslint-disable-next-line @typescript-eslint/no-shadow\n // Filter out negative nodes, unequal nodes and self-references (circular links)\n .filter(x => x.source >= 0 && x.target >= 0 && x.source !== x.target);\n\n const sankeyChartData = {\n nodes: node.label?.map((label: string, index: number) => {\n const color = getColor(label, colorMap, isDarkTheme);\n\n return {\n nodeId: index,\n name: label,\n color,\n };\n }),\n links: validLinks.map((validLink: any, index: number) => {\n return {\n ...validLink,\n };\n }),\n } as SankeyChartData;\n\n // const styles: SankeyChartProps['styles'] = {\n // root: {\n // ...(input.layout?.font?.size ? { fontSize: input.layout.font?.size } : {}),\n // },\n // };\n\n const { chartTitle } = getTitles(input.layout);\n\n return {\n data: {\n chartTitle,\n SankeyChartData: sankeyChartData,\n },\n width: input.layout?.width,\n height: input.layout?.height ?? 468,\n // TODO\n // styles,\n };\n};\n\nexport const transformPlotlyJsonToGaugeProps = (\n input: PlotlySchema,\n colorMap: React.MutableRefObject<Map<string, string>>,\n isDarkTheme?: boolean,\n): GaugeChartProps => {\n const firstData = input.data[0] as PlotData;\n\n const segments = firstData.gauge?.steps?.length\n ? firstData.gauge.steps.map((step: any, index: number): GaugeChartSegment => {\n const legend = step.name || `Segment ${index + 1}`;\n const color = getColor(legend, colorMap, isDarkTheme);\n return {\n legend,\n size: step.range?.[1] - step.range?.[0],\n color,\n };\n })\n : [\n {\n legend: 'Current',\n size: firstData.value ?? 0 - (firstData.gauge?.axis?.range?.[0] ?? 0),\n color: getColor('Current', colorMap, isDarkTheme),\n },\n {\n legend: 'Target',\n size: (firstData.gauge?.axis?.range?.[1] ?? 100) - (firstData.value ?? 0),\n color: DataVizPalette.disabled,\n },\n ];\n\n let sublabel: string | undefined;\n // let sublabelColor: string | undefined;\n if (firstData.delta?.reference) {\n const diff = firstData.value - firstData.delta.reference;\n if (diff >= 0) {\n sublabel = `\\u25B2 ${diff}`;\n // const color = getColorFromToken(DataVizPalette.success, isDarkTheme);\n // sublabelColor = color;\n } else {\n sublabel = `\\u25BC ${Math.abs(diff)}`;\n // const color = getColorFromToken(DataVizPalette.error, isDarkTheme);\n // sublabelColor = color;\n }\n }\n\n // const styles: GaugeChartProps['styles'] = {\n // sublabel: {\n // fill: sublabelColor,\n // },\n // };\n\n const { chartTitle } = getTitles(input.layout);\n\n return {\n segments,\n chartValue: firstData.value ?? 0,\n chartTitle,\n sublabel,\n // range values can be null\n minValue: typeof firstData.gauge?.axis?.range?.[0] === 'number' ? firstData.gauge?.axis?.range?.[0] : undefined,\n maxValue: typeof firstData.gauge?.axis?.range?.[1] === 'number' ? firstData.gauge?.axis?.range?.[1] : undefined,\n chartValueFormat: () => firstData.value?.toString() ?? '',\n width: input.layout?.width,\n height: input.layout?.height ?? 220,\n // TODO\n // styles,\n variant: firstData.gauge?.steps?.length ? 'multiple-segments' : 'single-segment',\n };\n};\n\nexport const projectPolarToCartesian = (input: PlotlySchema): PlotlySchema => {\n const projection: PlotlySchema = { ...input };\n for (let sindex = 0; sindex < input.data.length; sindex++) {\n const series: PlotData = input.data[sindex] as PlotData;\n series.x = [];\n series.y = [];\n for (let ptindex = 0; ptindex < series.r.length; ptindex++) {\n const thetaRad = ((series.theta[ptindex] as number) * Math.PI) / 180;\n const radius = series.r[ptindex] as number;\n series.x[ptindex] = radius * Math.cos(thetaRad);\n series.y[ptindex] = radius * Math.sin(thetaRad);\n }\n projection.data[sindex] = series;\n }\n\n return projection;\n};\n\nfunction isPlainObject(obj: any) {\n return (\n Object.prototype.toString.call(obj) === '[object Object]' &&\n Object.getPrototypeOf(obj).hasOwnProperty('hasOwnProperty')\n );\n}\n\nvar arrayAttributes: any[] = [];\nvar stack: any[] = [];\nvar isArrayStack: any[] = [];\nvar baseContainer: any, baseAttrName: any;\n/**\n * Interate iteratively through the trace object and find all the array attributes.\n * 1 trace record = 1 series of data\n * @param trace\n */\nexport function findArrayAttributes(trace: any) {\n // Init basecontainer and baseAttrName\n crawlIntoTrace(baseContainer, 0, '');\n}\n\nfunction crawlIntoTrace(container: any, i: number, astrPartial: any) {\n var item = container[stack[i]];\n var newAstrPartial = astrPartial + stack[i];\n if (i === stack.length - 1) {\n if (isArrayOrTypedArray(item)) {\n arrayAttributes.push(baseAttrName + newAstrPartial);\n }\n } else {\n if (isArrayStack[i]) {\n if (Array.isArray(item)) {\n for (var j = 0; j < item.length; j++) {\n if (isPlainObject(item[j])) {\n crawlIntoTrace(item[j], i + 1, newAstrPartial + '[' + j + '].');\n }\n }\n }\n } else if (isPlainObject(item)) {\n crawlIntoTrace(item, i + 1, newAstrPartial + '.');\n }\n }\n}\n\nfunction getLineOptions(line: Partial<ScatterLine> | undefined): LineChartLineOptions | undefined {\n if (!line) {\n return;\n }\n\n let lineOptions: LineChartLineOptions = {};\n if (line.dash) {\n lineOptions = { ...lineOptions, ...dashOptions[line.dash] };\n }\n\n switch (line.shape) {\n case 'spline':\n const smoothing = typeof line.smoothing === 'number' ? line.smoothing : 1;\n lineOptions.curve = d3CurveCardinal.tension(1 - smoothing / 1.3);\n break;\n case 'hv':\n lineOptions.curve = 'stepAfter';\n break;\n case 'vh':\n lineOptions.curve = 'stepBefore';\n break;\n case 'hvh':\n lineOptions.curve = 'step';\n break;\n default:\n lineOptions.curve = 'linear';\n }\n\n return Object.keys(lineOptions).length > 0 ? lineOptions : undefined;\n}\n\nconst isStringArray = (arr: any) => {\n return isArrayOfType(arr, (value: any) => typeof value === 'string');\n};\n\n// TODO: Use binary search to find the appropriate bin for numeric value.\nconst findBinIndex = (\n bins: string[][] | Bin<number, number>[],\n value: string | number | null | undefined,\n isString: boolean,\n) => {\n if (typeof value === 'undefined' || value === null) {\n return -1;\n }\n\n return isString\n ? (bins as string[][]).findIndex(bin => bin.includes(value as string))\n : (bins as Bin<number, number>[]).findIndex(\n (bin, index) =>\n (value as number) >= bin.x0! &&\n (index === bins.length - 1 ? (value as number) <= bin.x1! : (value as number) < bin.x1!),\n );\n};\n\nconst getBinSize = (bin: Bin<number, number>) => {\n return bin.x1! - bin.x0!;\n};\n\nconst getBinCenter = (bin: Bin<number, number>) => {\n return (bin.x1! + bin.x0!) / 2;\n};\n\n// TODO: Add support for date axes\nconst createBins = (\n data: TypedArray | Datum[] | Datum[][] | undefined,\n binStart?: number | string,\n binEnd?: number | string,\n binSize?: number | string,\n) => {\n if (!data || data.length === 0) {\n return [];\n }\n\n if (isStringArray(data)) {\n const categories = Array.from(new Set(data as string[]));\n const start = typeof binStart === 'number' ? Math.ceil(binStart) : 0;\n const stop = typeof binEnd === 'number' ? Math.floor(binEnd) + 1 : categories.length;\n const step = typeof binSize === 'number' ? binSize : 1;\n\n return d3Range(start, stop, step).map(i => categories.slice(i, i + step));\n }\n\n const scale = d3ScaleLinear()\n .domain(d3Extent<number>(data as number[]) as [number, number])\n .nice();\n let [minVal, maxVal] = scale.domain();\n\n minVal = typeof binStart === 'number' ? binStart : minVal;\n maxVal = typeof binEnd === 'number' ? binEnd : maxVal;\n\n const binGenerator = d3Bin().domain([minVal, maxVal]);\n\n if (typeof binSize === 'number' && binSize > 0) {\n const thresholds: number[] = [];\n const precision = Math.max(getPrecision(minVal), getPrecision(binSize));\n let th = precisionRound(minVal, precision);\n\n while (th < precisionRound(maxVal + binSize, precision)) {\n thresholds.push(th);\n th = precisionRound(th + binSize, precision);\n }\n\n minVal = thresholds[0];\n maxVal = thresholds[thresholds.length - 1];\n binGenerator.domain([minVal, maxVal]).thresholds(thresholds);\n\n // When the domain ends at the last threshold (maxVal), d3Bin creates an extra final bin where\n // both x0 and x1 are equal to maxVal and inclusive. The previous bin also has x1 equal to maxVal,\n // but it is exclusive. To maintain consistent bin widths, remove the final bin,\n // making the previous bin the last one, with both x0 and x1 inclusive.\n return binGenerator(data as number[]).slice(0, -1);\n }\n return binGenerator(data as number[]);\n};\n\nconst calculateHistFunc = (histfunc: PlotData['histfunc'] | undefined, bin: number[]) => {\n switch (histfunc) {\n case 'sum':\n return d3Sum(bin);\n case 'avg':\n return bin.length === 0 ? 0 : d3Sum(bin) / bin.length;\n case 'min':\n return d3Min(bin) ?? 0;\n case 'max':\n return d3Max(bin) ?? 0;\n default:\n return bin.length;\n }\n};\n\nconst calculateHistNorm = (\n histnorm: PlotData['histnorm'] | undefined,\n value: number,\n total: number,\n dx: number,\n dy: number = 1,\n) => {\n switch (histnorm) {\n case 'percent':\n return total === 0 ? 0 : (value / total) * 100;\n case 'probability':\n return total === 0 ? 0 : value / total;\n case 'density':\n return dx * dy === 0 ? 0 : value / (dx * dy);\n case 'probability density':\n return total * dx * dy === 0 ? 0 : value / (total * dx * dy);\n default:\n return value;\n }\n};\n\nconst getPrecision = (value: number) => {\n return value.toString().split('.')[1]?.length ?? 0;\n};\n\nconst precisionRound = (value: number, precision: number) => {\n const factor = Math.pow(10, precision);\n return Math.round(value * factor) / factor;\n};\n\nconst getLegendProps = (data: Data[], layout: Partial<Layout> | undefined) => {\n const legends: string[] = [];\n if (data.length === 1) {\n legends.push(data[0].name || '');\n } else {\n data.forEach((series, index) => {\n legends.push(series.name || `Series ${index + 1}`);\n });\n }\n\n const hideLegends = data.every((series: Partial<PlotData>) => series.showlegend === false);\n\n return {\n legends,\n hideLegend: layout?.showlegend === false ? true : hideLegends,\n };\n};\n"],"names":["React","bin","d3Bin","extent","d3Extent","sum","d3Sum","min","d3Min","max","d3Max","range","d3Range","scaleLinear","d3ScaleLinear","DataVizPalette","getColorFromToken","getNextColor","findNumericMinMaxOfY","isArrayOfType","isArrayOrTypedArray","isDate","isDateArray","isNumberArray","isYearArray","curveCardinal","d3CurveCardinal","dashOptions","dot","strokeDasharray","strokeLinecap","strokeWidth","lineBorderWidth","dash","longdash","dashdot","longdashdot","solid","getTitles","layout","titles","chartTitle","title","text","xAxisTitle","xaxis","yAxisTitle","yaxis","correctYearMonth","xValues","presentYear","Date","getFullYear","length","Array","isArray","Error","dates","map","possiblyMonthValue","parsedDate","i","currentMonth","getMonth","previousMonth","currentYear","previousYear","setFullYear","month","index","getColor","legendLabel","colorMap","isDarkTheme","current","has","nextColor","size","set","get","usesSecondaryYScale","series","getSecondaryYAxisValues","data","maxAllowedMinY","minAllowedMaxY","containsSecondaryYAxis","yMinValue","yMaxValue","forEach","yValues","y","Math","yaxis2","secondaryYAxistitle","undefined","secondaryYScaleOptions","transformPlotlyJsonToDonutProps","input","firstData","mapLegendToDataPoint","labels","label","color","value","values","legend","width","height","hideLabels","textinfo","includes","donutMarginHorizontal","donutMarginVertical","innerRadius","hole","chartData","Object","hideLegend","showlegend","showLabelsInPercent","transformPlotlyJsonToVSBCProps","fallbackVSBC","mapXToDataPoints","secondaryYAxisValues","legends","getLegendProps","index1","isXYearCategory","x","index2","xAxisPoint","toString","lineData","yVal","type","push","lineOptions","getLineOptions","line","dashType","legendShape","useSecondaryYScale","barWidth","mode","hideTickOverlap","barGapMax","transformPlotlyJsonToGVBCProps","name","key","xAxisCalloutData","transformPlotlyJsonToVBCProps","vbcData","seriesIdx","isXString","isStringArray","xBins","createBins","xbins","start","end","yBins","total","xVal","binIdx","findBinIndex","calculateHistFunc","histfunc","calculateHistNorm","histnorm","getBinSize","join","getBinCenter","x0","x1","maxBarWidth","transformPlotlyJsonToScatterChartProps","isAreaChart","isString","isXDate","isXNumber","lineColor","fill","parseFloat","marker","markerSize","yMinMaxValues","chartProps","lineChartData","supportNegativeData","useUTC","roundedTicks","startValue","endValue","transformPlotlyJsonToHorizontalBarWithAxisProps","yValue","reverse","flat","chartHeight","margin","l","padding","pad","availableHeight","numberOfRows","Set","d","scalingFactor","gapFactor","barHeight","showYAxisLables","noOfCharsToTruncate","showYAxisLablesTooltip","transformPlotlyJsonToHeatmapProps","heatmapDataPoints","zMin","Number","POSITIVE_INFINITY","zMax","NEGATIVE_INFINITY","isYString","ybins","zBins","xBinIdx","yBinIdx","z","row","zVal","xBin","xIdx","yBin","yIdx","rectText","heatmapData","defaultDomain","defaultRange","color1","color2","color3","domainValuesForColorScale","colorscale","arr","rangeValuesForColorScale","sortOrder","transformPlotlyJsonToSankeyProps","node","link","validLinks","val","source","target","filter","sankeyChartData","nodes","nodeId","links","validLink","SankeyChartData","transformPlotlyJsonToGaugeProps","segments","gauge","steps","step","axis","disabled","sublabel","delta","reference","diff","abs","chartValue","minValue","maxValue","chartValueFormat","variant","projectPolarToCartesian","projection","sindex","ptindex","r","thetaRad","theta","PI","radius","cos","sin","isPlainObject","obj","prototype","call","getPrototypeOf","hasOwnProperty","arrayAttributes","stack","isArrayStack","baseContainer","baseAttrName","findArrayAttributes","trace","crawlIntoTrace","container","astrPartial","item","newAstrPartial","j","shape","smoothing","curve","tension","keys","bins","findIndex","binStart","binEnd","binSize","categories","from","ceil","stop","floor","slice","scale","domain","nice","minVal","maxVal","binGenerator","thresholds","precision","getPrecision","th","precisionRound","dx","dy","split","factor","pow","round","hideLegends","every"],"mappings":"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"}