@fluentui/react-charts 9.3.6 → 9.3.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (150) hide show
  1. package/CHANGELOG.md +21 -2
  2. package/dist/index.d.ts +17 -12
  3. package/lib/components/AnnotationOnlyChart/AnnotationOnlyChart.js +2 -16
  4. package/lib/components/AnnotationOnlyChart/AnnotationOnlyChart.js.map +1 -1
  5. package/lib/components/AnnotationOnlyChart/AnnotationOnlyChart.types.js.map +1 -1
  6. package/lib/components/AreaChart/AreaChart.js +3 -16
  7. package/lib/components/AreaChart/AreaChart.js.map +1 -1
  8. package/lib/components/ChartTable/ChartTable.js +2 -10
  9. package/lib/components/ChartTable/ChartTable.js.map +1 -1
  10. package/lib/components/ChartTable/ChartTable.types.js.map +1 -1
  11. package/lib/components/CommonComponents/CartesianChart.js +2 -0
  12. package/lib/components/CommonComponents/CartesianChart.js.map +1 -1
  13. package/lib/components/CommonComponents/CartesianChart.types.js.map +1 -1
  14. package/lib/components/CommonComponents/ChartPopover.js +1 -2
  15. package/lib/components/CommonComponents/ChartPopover.js.map +1 -1
  16. package/lib/components/CommonComponents/useCartesianChartStyles.styles.js +4 -2
  17. package/lib/components/CommonComponents/useCartesianChartStyles.styles.js.map +1 -1
  18. package/lib/components/CommonComponents/useCartesianChartStyles.styles.raw.js +4 -2
  19. package/lib/components/CommonComponents/useCartesianChartStyles.styles.raw.js.map +1 -1
  20. package/lib/components/CommonComponents/useChartPopoverStyles.styles.js.map +1 -1
  21. package/lib/components/CommonComponents/useChartPopoverStyles.styles.raw.js +0 -2
  22. package/lib/components/CommonComponents/useChartPopoverStyles.styles.raw.js.map +1 -1
  23. package/lib/components/DeclarativeChart/DeclarativeChart.js +48 -25
  24. package/lib/components/DeclarativeChart/DeclarativeChart.js.map +1 -1
  25. package/lib/components/DeclarativeChart/PlotlySchemaAdapter.js +48 -22
  26. package/lib/components/DeclarativeChart/PlotlySchemaAdapter.js.map +1 -1
  27. package/lib/components/DonutChart/DonutChart.js +3 -12
  28. package/lib/components/DonutChart/DonutChart.js.map +1 -1
  29. package/lib/components/DonutChart/DonutChart.types.js.map +1 -1
  30. package/lib/components/DonutChart/Pie/Pie.js +4 -2
  31. package/lib/components/DonutChart/Pie/Pie.js.map +1 -1
  32. package/lib/components/FunnelChart/FunnelChart.js +2 -10
  33. package/lib/components/FunnelChart/FunnelChart.js.map +1 -1
  34. package/lib/components/FunnelChart/FunnelChart.types.js.map +1 -1
  35. package/lib/components/GanttChart/GanttChart.js +3 -16
  36. package/lib/components/GanttChart/GanttChart.js.map +1 -1
  37. package/lib/components/GaugeChart/GaugeChart.js +2 -10
  38. package/lib/components/GaugeChart/GaugeChart.js.map +1 -1
  39. package/lib/components/GaugeChart/GaugeChart.types.js.map +1 -1
  40. package/lib/components/GroupedVerticalBarChart/GroupedVerticalBarChart.js +7 -19
  41. package/lib/components/GroupedVerticalBarChart/GroupedVerticalBarChart.js.map +1 -1
  42. package/lib/components/HeatMapChart/HeatMapChart.js +3 -16
  43. package/lib/components/HeatMapChart/HeatMapChart.js.map +1 -1
  44. package/lib/components/HorizontalBarChartWithAxis/HorizontalBarChartWithAxis.js +3 -21
  45. package/lib/components/HorizontalBarChartWithAxis/HorizontalBarChartWithAxis.js.map +1 -1
  46. package/lib/components/Legends/Legends.types.js.map +1 -1
  47. package/lib/components/Legends/OverflowMenu.js.map +1 -1
  48. package/lib/components/Legends/useLegendsStyles.styles.raw.js.map +1 -1
  49. package/lib/components/LineChart/LineChart.js +10 -19
  50. package/lib/components/LineChart/LineChart.js.map +1 -1
  51. package/lib/components/LineChart/LineChart.types.js +1 -1
  52. package/lib/components/LineChart/LineChart.types.js.map +1 -1
  53. package/lib/components/LineChart/eventAnnotation/EventAnnotation.js +3 -4
  54. package/lib/components/LineChart/eventAnnotation/EventAnnotation.js.map +1 -1
  55. package/lib/components/SankeyChart/SankeyChart.js +3 -9
  56. package/lib/components/SankeyChart/SankeyChart.js.map +1 -1
  57. package/lib/components/SankeyChart/SankeyChart.types.js.map +1 -1
  58. package/lib/components/ScatterChart/ScatterChart.js +23 -23
  59. package/lib/components/ScatterChart/ScatterChart.js.map +1 -1
  60. package/lib/components/Sparkline/Sparkline.js +11 -7
  61. package/lib/components/Sparkline/Sparkline.js.map +1 -1
  62. package/lib/components/VerticalBarChart/VerticalBarChart.js +2 -14
  63. package/lib/components/VerticalBarChart/VerticalBarChart.js.map +1 -1
  64. package/lib/components/VerticalStackedBarChart/VerticalStackedBarChart.js +7 -17
  65. package/lib/components/VerticalStackedBarChart/VerticalStackedBarChart.js.map +1 -1
  66. package/lib/types/DataPoint.js.map +1 -1
  67. package/lib/utilities/FocusableTooltipText.js +1 -1
  68. package/lib/utilities/FocusableTooltipText.js.map +1 -1
  69. package/lib/utilities/getWindow.js +0 -1
  70. package/lib/utilities/getWindow.js.map +1 -1
  71. package/lib/utilities/hooks.js +34 -0
  72. package/lib/utilities/hooks.js.map +1 -0
  73. package/lib/utilities/image-export-utils.js +115 -75
  74. package/lib/utilities/image-export-utils.js.map +1 -1
  75. package/lib/utilities/utilities.js +23 -24
  76. package/lib/utilities/utilities.js.map +1 -1
  77. package/lib-commonjs/components/AnnotationOnlyChart/AnnotationOnlyChart.js +2 -16
  78. package/lib-commonjs/components/AnnotationOnlyChart/AnnotationOnlyChart.js.map +1 -1
  79. package/lib-commonjs/components/AnnotationOnlyChart/AnnotationOnlyChart.types.js.map +1 -1
  80. package/lib-commonjs/components/AreaChart/AreaChart.js +2 -15
  81. package/lib-commonjs/components/AreaChart/AreaChart.js.map +1 -1
  82. package/lib-commonjs/components/ChartTable/ChartTable.js +3 -10
  83. package/lib-commonjs/components/ChartTable/ChartTable.js.map +1 -1
  84. package/lib-commonjs/components/ChartTable/ChartTable.types.js.map +1 -1
  85. package/lib-commonjs/components/CommonComponents/CartesianChart.js +2 -0
  86. package/lib-commonjs/components/CommonComponents/CartesianChart.js.map +1 -1
  87. package/lib-commonjs/components/CommonComponents/CartesianChart.types.js.map +1 -1
  88. package/lib-commonjs/components/CommonComponents/ChartPopover.js +1 -2
  89. package/lib-commonjs/components/CommonComponents/ChartPopover.js.map +1 -1
  90. package/lib-commonjs/components/CommonComponents/useCartesianChartStyles.styles.js +4 -2
  91. package/lib-commonjs/components/CommonComponents/useCartesianChartStyles.styles.js.map +1 -1
  92. package/lib-commonjs/components/CommonComponents/useCartesianChartStyles.styles.raw.js +4 -2
  93. package/lib-commonjs/components/CommonComponents/useCartesianChartStyles.styles.raw.js.map +1 -1
  94. package/lib-commonjs/components/CommonComponents/useChartPopoverStyles.styles.js.map +1 -1
  95. package/lib-commonjs/components/CommonComponents/useChartPopoverStyles.styles.raw.js +0 -2
  96. package/lib-commonjs/components/CommonComponents/useChartPopoverStyles.styles.raw.js.map +1 -1
  97. package/lib-commonjs/components/DeclarativeChart/DeclarativeChart.js +48 -25
  98. package/lib-commonjs/components/DeclarativeChart/DeclarativeChart.js.map +1 -1
  99. package/lib-commonjs/components/DeclarativeChart/PlotlySchemaAdapter.js +48 -22
  100. package/lib-commonjs/components/DeclarativeChart/PlotlySchemaAdapter.js.map +1 -1
  101. package/lib-commonjs/components/DonutChart/DonutChart.js +2 -11
  102. package/lib-commonjs/components/DonutChart/DonutChart.js.map +1 -1
  103. package/lib-commonjs/components/DonutChart/DonutChart.types.js.map +1 -1
  104. package/lib-commonjs/components/DonutChart/Pie/Pie.js +4 -2
  105. package/lib-commonjs/components/DonutChart/Pie/Pie.js.map +1 -1
  106. package/lib-commonjs/components/FunnelChart/FunnelChart.js +2 -10
  107. package/lib-commonjs/components/FunnelChart/FunnelChart.js.map +1 -1
  108. package/lib-commonjs/components/FunnelChart/FunnelChart.types.js.map +1 -1
  109. package/lib-commonjs/components/GanttChart/GanttChart.js +2 -15
  110. package/lib-commonjs/components/GanttChart/GanttChart.js.map +1 -1
  111. package/lib-commonjs/components/GaugeChart/GaugeChart.js +2 -10
  112. package/lib-commonjs/components/GaugeChart/GaugeChart.js.map +1 -1
  113. package/lib-commonjs/components/GaugeChart/GaugeChart.types.js.map +1 -1
  114. package/lib-commonjs/components/GroupedVerticalBarChart/GroupedVerticalBarChart.js +7 -19
  115. package/lib-commonjs/components/GroupedVerticalBarChart/GroupedVerticalBarChart.js.map +1 -1
  116. package/lib-commonjs/components/HeatMapChart/HeatMapChart.js +2 -15
  117. package/lib-commonjs/components/HeatMapChart/HeatMapChart.js.map +1 -1
  118. package/lib-commonjs/components/HorizontalBarChartWithAxis/HorizontalBarChartWithAxis.js +2 -19
  119. package/lib-commonjs/components/HorizontalBarChartWithAxis/HorizontalBarChartWithAxis.js.map +1 -1
  120. package/lib-commonjs/components/Legends/Legends.types.js.map +1 -1
  121. package/lib-commonjs/components/Legends/OverflowMenu.js.map +1 -1
  122. package/lib-commonjs/components/Legends/useLegendsStyles.styles.raw.js.map +1 -1
  123. package/lib-commonjs/components/LineChart/LineChart.js +10 -19
  124. package/lib-commonjs/components/LineChart/LineChart.js.map +1 -1
  125. package/lib-commonjs/components/LineChart/LineChart.types.js +1 -1
  126. package/lib-commonjs/components/LineChart/LineChart.types.js.map +1 -1
  127. package/lib-commonjs/components/LineChart/eventAnnotation/EventAnnotation.js +2 -2
  128. package/lib-commonjs/components/LineChart/eventAnnotation/EventAnnotation.js.map +1 -1
  129. package/lib-commonjs/components/SankeyChart/SankeyChart.js +3 -9
  130. package/lib-commonjs/components/SankeyChart/SankeyChart.js.map +1 -1
  131. package/lib-commonjs/components/SankeyChart/SankeyChart.types.js.map +1 -1
  132. package/lib-commonjs/components/ScatterChart/ScatterChart.js +21 -21
  133. package/lib-commonjs/components/ScatterChart/ScatterChart.js.map +1 -1
  134. package/lib-commonjs/components/Sparkline/Sparkline.js +11 -7
  135. package/lib-commonjs/components/Sparkline/Sparkline.js.map +1 -1
  136. package/lib-commonjs/components/VerticalBarChart/VerticalBarChart.js +2 -14
  137. package/lib-commonjs/components/VerticalBarChart/VerticalBarChart.js.map +1 -1
  138. package/lib-commonjs/components/VerticalStackedBarChart/VerticalStackedBarChart.js +6 -16
  139. package/lib-commonjs/components/VerticalStackedBarChart/VerticalStackedBarChart.js.map +1 -1
  140. package/lib-commonjs/types/DataPoint.js.map +1 -1
  141. package/lib-commonjs/utilities/FocusableTooltipText.js.map +1 -1
  142. package/lib-commonjs/utilities/getWindow.js +0 -1
  143. package/lib-commonjs/utilities/getWindow.js.map +1 -1
  144. package/lib-commonjs/utilities/hooks.js +45 -0
  145. package/lib-commonjs/utilities/hooks.js.map +1 -0
  146. package/lib-commonjs/utilities/image-export-utils.js +116 -76
  147. package/lib-commonjs/utilities/image-export-utils.js.map +1 -1
  148. package/lib-commonjs/utilities/utilities.js +21 -20
  149. package/lib-commonjs/utilities/utilities.js.map +1 -1
  150. package/package.json +3 -3
@@ -3,15 +3,15 @@ import * as React from 'react';
3
3
  import { useScatterChartStyles } from './useScatterChartStyles.styles';
4
4
  import { select as d3Select } from 'd3-selection';
5
5
  import { Legends } from '../Legends/index';
6
- import { max as d3Max } from 'd3-array';
6
+ import { max as d3Max, min as d3Min } from 'd3-array';
7
7
  import { useId } from '@fluentui/react-utilities';
8
- import { areArraysEqual, createNumericYAxis, createStringYAxis, getDomainPaddingForMarkers, domainRangeOfXStringAxis, findNumericMinMaxOfY, YAxisType, useRtl, isTextMode, isScatterPolarSeries, isPlottable, getRangeForScatterMarkerSize, domainRangeOfDateForAreaLineScatterVerticalBarCharts, domainRangeOfNumericForAreaLineScatterCharts, sortAxisCategories, findCalloutPoints } from '../../utilities/index';
8
+ import { areArraysEqual, createNumericYAxis, createStringYAxis, getDomainPaddingForMarkers, domainRangeOfXStringAxis, findNumericMinMaxOfY, YAxisType, isTextMode, isScatterPolarSeries, isPlottable, getRangeForScatterMarkerSize, domainRangeOfDateForAreaLineScatterVerticalBarCharts, domainRangeOfNumericForAreaLineScatterCharts, sortAxisCategories, findCalloutPoints } from '../../utilities/index';
9
9
  import { CartesianChart } from '../../index';
10
10
  import { tokens } from '@fluentui/react-theme';
11
11
  import { calloutData, ChartTypes, XAxisTypes, tooltipOfAxislabels, getTypeOfAxis, getNextColor, getColorFromToken } from '../../utilities/index';
12
- import { toImage } from '../../utilities/image-export-utils';
13
12
  import { renderScatterPolarCategoryLabels } from '../../utilities/scatterpolar-utils';
14
13
  import { formatDateToLocaleString } from '@fluentui/chart-utilities';
14
+ import { useImageExport } from '../../utilities/hooks';
15
15
  // Create a ScatterChart variant which uses these default styles and this styled subcomponent.
16
16
  /**
17
17
  * ScatterChart component
@@ -36,10 +36,8 @@ import { formatDateToLocaleString } from '@fluentui/chart-utilities';
36
36
  let _xAxisLabels = [];
37
37
  let xAxisCalloutAccessibilityData = {};
38
38
  let _xBandwidth = 0;
39
- const cartesianChartRef = React.useRef(null);
39
+ const { cartesianChartRef, legendsRef: _legendsRef } = useImageExport(props.componentRef, props.hideLegend);
40
40
  const classes = useScatterChartStyles(props);
41
- const _legendsRef = React.useRef(null);
42
- const _isRTL = useRtl();
43
41
  const [hoverXValue, setHoverXValue] = React.useState('');
44
42
  const [activeLegend, setActiveLegend] = React.useState('');
45
43
  const [yValueHover, setYValueHover] = React.useState([]);
@@ -67,22 +65,10 @@ import { formatDateToLocaleString } from '@fluentui/chart-utilities';
67
65
  }, [
68
66
  (_props_legendProps1 = props.legendProps) === null || _props_legendProps1 === void 0 ? void 0 : _props_legendProps1.selectedLegends
69
67
  ]);
70
- React.useImperativeHandle(props.componentRef, ()=>{
71
- var _cartesianChartRef_current;
72
- var _cartesianChartRef_current_chartContainer;
73
- return {
74
- chartContainer: (_cartesianChartRef_current_chartContainer = (_cartesianChartRef_current = cartesianChartRef.current) === null || _cartesianChartRef_current === void 0 ? void 0 : _cartesianChartRef_current.chartContainer) !== null && _cartesianChartRef_current_chartContainer !== void 0 ? _cartesianChartRef_current_chartContainer : null,
75
- toImage: (opts)=>{
76
- var _cartesianChartRef_current, _legendsRef_current;
77
- return toImage((_cartesianChartRef_current = cartesianChartRef.current) === null || _cartesianChartRef_current === void 0 ? void 0 : _cartesianChartRef_current.chartContainer, (_legendsRef_current = _legendsRef.current) === null || _legendsRef_current === void 0 ? void 0 : _legendsRef_current.toSVG, _isRTL, opts);
78
- }
79
- };
80
- }, []);
81
68
  const _xAxisType = props.data.scatterChartData && props.data.scatterChartData.length > 0 && props.data.scatterChartData[0].data && props.data.scatterChartData[0].data.length > 0 ? getTypeOfAxis(props.data.scatterChartData[0].data[0].x, true) : XAxisTypes.StringAxis;
82
69
  // Detect y axis type (numeric or string)
83
70
  const _yAxisType = props.data.scatterChartData && props.data.scatterChartData.length > 0 && props.data.scatterChartData[0].data && props.data.scatterChartData[0].data.length > 0 ? typeof props.data.scatterChartData[0].data[0].y === 'string' ? YAxisType.StringAxis : YAxisType.NumericAxis : YAxisType.NumericAxis;
84
71
  const pointsRef = React.useRef([]);
85
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
86
72
  const calloutPointsRef = React.useRef({});
87
73
  React.useEffect(()=>{
88
74
  /** note that height and width are not used to resize or set as dimesions of the chart,
@@ -127,7 +113,6 @@ import { formatDateToLocaleString } from '@fluentui/chart-utilities';
127
113
  }
128
114
  }
129
115
  function _getNumericMinMaxOfY(points, yAxisType) {
130
- // eslint-disable-next-line @typescript-eslint/no-shadow
131
116
  const { startValue, endValue } = findNumericMinMaxOfY(points, yAxisType);
132
117
  const yPadding = getDomainPaddingForMarkers(startValue, endValue, props.yScaleType);
133
118
  return {
@@ -271,12 +256,20 @@ import { formatDateToLocaleString } from '@fluentui/chart-utilities';
271
256
  if (_xAxisType === XAxisTypes.StringAxis) {
272
257
  _xBandwidth = _xAxisScale.bandwidth() / 2;
273
258
  }
274
- const maxMarkerSize = d3Max(_points, (point)=>{
259
+ var _d3Min;
260
+ const minMarkerSize = (_d3Min = d3Min(_points, (point)=>{
261
+ return d3Min(point.data, (item)=>{
262
+ return item.markerSize;
263
+ });
264
+ })) !== null && _d3Min !== void 0 ? _d3Min : 0;
265
+ var _d3Max;
266
+ const maxMarkerSize = (_d3Max = d3Max(_points, (point)=>{
275
267
  return d3Max(point.data, (item)=>{
276
268
  return item.markerSize;
277
269
  });
278
- });
279
- const extraMaxPixels = _xAxisType !== XAxisTypes.StringAxis && _yAxisType !== YAxisType.StringAxis ? getRangeForScatterMarkerSize({
270
+ })) !== null && _d3Max !== void 0 ? _d3Max : 0;
271
+ const isContinuousXY = _xAxisType !== XAxisTypes.StringAxis && _yAxisType !== YAxisType.StringAxis;
272
+ const extraMaxPixels = isContinuousXY ? getRangeForScatterMarkerSize({
280
273
  data: _points,
281
274
  xScale: _xAxisScale,
282
275
  yScalePrimary: _yAxisScale,
@@ -302,7 +295,14 @@ import { formatDateToLocaleString } from '@fluentui/chart-utilities';
302
295
  const pointMarkerSize = _points[i].data[j].markerSize;
303
296
  const minPixel = 4;
304
297
  const maxPixel = 16;
305
- const circleRadius = pointMarkerSize && maxMarkerSize !== 0 ? _xAxisType !== XAxisTypes.StringAxis ? pointMarkerSize * extraMaxPixels / maxMarkerSize : minPixel + (pointMarkerSize - minPixel) / (maxMarkerSize - minPixel) * (maxPixel - minPixel) : activePoint === circleId ? 6 : 4;
298
+ let circleRadius = activePoint === circleId ? 6 : 4;
299
+ if (pointMarkerSize) {
300
+ if (isContinuousXY && maxMarkerSize !== 0) {
301
+ circleRadius = pointMarkerSize * extraMaxPixels / maxMarkerSize;
302
+ } else if (!isContinuousXY && maxMarkerSize !== minMarkerSize) {
303
+ circleRadius = minPixel + (pointMarkerSize - minMarkerSize) / (maxMarkerSize - minMarkerSize) * (maxPixel - minPixel);
304
+ }
305
+ }
306
306
  const isLegendSelected = _legendHighlighted(legendVal) || _noLegendHighlighted() || isSelectedLegend;
307
307
  const currentPointHidden = _points[i].hideNonActiveDots && activePoint !== circleId;
308
308
  const text = _points === null || _points === void 0 ? void 0 : (_points_i_data_j = _points[i].data[j]) === null || _points_i_data_j === void 0 ? void 0 : _points_i_data_j.text;
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/components/ScatterChart/ScatterChart.tsx"],"sourcesContent":["'use client';\n\nimport * as React from 'react';\nimport { ScatterChartProps } from './ScatterChart.types';\nimport { useScatterChartStyles } from './useScatterChartStyles.styles';\nimport { Axis as D3Axis } from 'd3-axis';\nimport { select as d3Select } from 'd3-selection';\nimport { Legend, Legends } from '../Legends/index';\nimport { max as d3Max } from 'd3-array';\nimport { useId } from '@fluentui/react-utilities';\nimport type { JSXElement } from '@fluentui/react-utilities';\nimport {\n areArraysEqual,\n createNumericYAxis,\n createStringYAxis,\n getDomainPaddingForMarkers,\n domainRangeOfXStringAxis,\n findNumericMinMaxOfY,\n IDomainNRange,\n YAxisType,\n useRtl,\n isTextMode,\n isScatterPolarSeries,\n isPlottable,\n getRangeForScatterMarkerSize,\n domainRangeOfDateForAreaLineScatterVerticalBarCharts,\n domainRangeOfNumericForAreaLineScatterCharts,\n sortAxisCategories,\n findCalloutPoints,\n} from '../../utilities/index';\nimport {\n AccessibilityProps,\n CartesianChart,\n ChildProps,\n CustomizedCalloutData,\n Margins,\n RefArrayData,\n ScatterChartDataPoint,\n Chart,\n ImageExportOptions,\n LegendContainer,\n ScatterChartPoints,\n YValueHover,\n} from '../../index';\nimport { tokens } from '@fluentui/react-theme';\nimport {\n calloutData,\n ChartTypes,\n XAxisTypes,\n tooltipOfAxislabels,\n getTypeOfAxis,\n getNextColor,\n getColorFromToken,\n} from '../../utilities/index';\nimport { LineChartPoints } from '../../types/DataPoint';\nimport { toImage } from '../../utilities/image-export-utils';\nimport { renderScatterPolarCategoryLabels } from '../../utilities/scatterpolar-utils';\nimport { formatDateToLocaleString } from '@fluentui/chart-utilities';\n\ntype NumericAxis = D3Axis<number | { valueOf(): number }>;\n\ntype ScatterChartDataWithIndex = ScatterChartPoints & { index: number };\n\n// Create a ScatterChart variant which uses these default styles and this styled subcomponent.\n/**\n * ScatterChart component\n * {@docCategory ScatterChart}\n */\nexport const ScatterChart: React.FunctionComponent<ScatterChartProps> = React.forwardRef<\n HTMLDivElement,\n ScatterChartProps\n>((props, forwardedRef) => {\n const _circleId: string = useId('circle');\n const _seriesId: string = useId('seriesID');\n const _verticalLine: string = useId('verticalLine');\n const _tooltipId: string = useId('ScatterChartTooltipId_');\n const _firstRenderOptimization = true;\n const _emptyChartId: string = useId('_ScatterChart_empty');\n let _points: ScatterChartDataWithIndex[] = _injectIndexPropertyInScatterChartData(props.data.scatterChartData);\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n let _xAxisScale: any = '';\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n let _yAxisScale: any = '';\n let _uniqueCallOutID: string | null = '';\n let _refArray: RefArrayData[] = [];\n let margins: Margins;\n let renderSeries: JSXElement[];\n let _xAxisLabels: string[] = [];\n let xAxisCalloutAccessibilityData: AccessibilityProps = {};\n let _xBandwidth = 0;\n const cartesianChartRef = React.useRef<Chart>(null);\n const classes = useScatterChartStyles(props);\n const _legendsRef = React.useRef<LegendContainer>(null);\n const _isRTL: boolean = useRtl();\n\n const [hoverXValue, setHoverXValue] = React.useState<string | number>('');\n const [activeLegend, setActiveLegend] = React.useState<string>('');\n const [yValueHover, setYValueHover] = React.useState<YValueHover[]>([]);\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const [selectedLegendPoints, setSelectedLegendPoints] = React.useState<any[]>([]);\n const [isSelectedLegend, setIsSelectedLegend] = React.useState<boolean>(false);\n const [activePoint, setActivePoint] = React.useState<string>('');\n const [stackCalloutProps, setStackCalloutProps] = React.useState<CustomizedCalloutData>();\n const [clickPosition, setClickPosition] = React.useState({ x: 0, y: 0 });\n const [isPopoverOpen, setPopoverOpen] = React.useState(false);\n const [selectedLegends, setSelectedLegends] = React.useState<string[]>(props.legendProps?.selectedLegends || []);\n const prevSelectedLegendsRef = React.useRef<string[] | undefined>(undefined);\n const _isTextMode = React.useRef(false);\n const _isScatterPolarRef = React.useRef(false);\n\n React.useEffect(() => {\n if (\n prevSelectedLegendsRef.current &&\n !areArraysEqual(prevSelectedLegendsRef.current, props.legendProps?.selectedLegends)\n ) {\n setSelectedLegends(props.legendProps?.selectedLegends || []);\n }\n prevSelectedLegendsRef.current = props.legendProps?.selectedLegends;\n }, [props.legendProps?.selectedLegends]);\n\n React.useImperativeHandle(\n props.componentRef,\n () => ({\n chartContainer: cartesianChartRef.current?.chartContainer ?? null,\n toImage: (opts?: ImageExportOptions): Promise<string> => {\n return toImage(cartesianChartRef.current?.chartContainer, _legendsRef.current?.toSVG, _isRTL, opts);\n },\n }),\n [],\n );\n\n const _xAxisType: XAxisTypes =\n props.data.scatterChartData! &&\n props.data.scatterChartData!.length > 0 &&\n props.data.scatterChartData![0].data &&\n props.data.scatterChartData![0].data.length > 0\n ? (getTypeOfAxis(props.data.scatterChartData![0].data[0].x, true) as XAxisTypes)\n : XAxisTypes.StringAxis;\n\n // Detect y axis type (numeric or string)\n const _yAxisType: YAxisType =\n props.data.scatterChartData &&\n props.data.scatterChartData.length > 0 &&\n props.data.scatterChartData[0].data &&\n props.data.scatterChartData[0].data.length > 0\n ? typeof props.data.scatterChartData[0].data[0].y === 'string'\n ? YAxisType.StringAxis\n : YAxisType.NumericAxis\n : YAxisType.NumericAxis;\n\n const pointsRef = React.useRef<ScatterChartDataWithIndex[] | []>([]);\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const calloutPointsRef = React.useRef<Record<string, YValueHover[]>>({});\n React.useEffect(() => {\n /** note that height and width are not used to resize or set as dimesions of the chart,\n * fitParentContainer is responisble for setting the height and width or resizing of the svg/chart\n */\n\n if (_points !== _injectIndexPropertyInScatterChartData(props.data.scatterChartData) || props.data !== _points) {\n pointsRef.current = _injectIndexPropertyInScatterChartData(props.data.scatterChartData);\n calloutPointsRef.current = calloutData(pointsRef.current);\n }\n }, [props.height, props.width, props.data, _points]);\n\n function _injectIndexPropertyInScatterChartData(\n scatterChartData?: ScatterChartPoints[],\n ): ScatterChartDataWithIndex[] | [] {\n return scatterChartData\n ? scatterChartData.map((item: ScatterChartPoints, index: number) => {\n let color: string;\n if (typeof item.color === 'undefined') {\n color = getNextColor(index, 0);\n } else {\n color = getColorFromToken(item.color);\n }\n return {\n ...item,\n index: -1,\n color,\n };\n })\n : [];\n }\n\n function updatePosition(newX: number, newY: number) {\n const threshold = 1; // Set a threshold for movement\n const { x, y } = clickPosition;\n // Calculate the distance moved\n const distance = Math.sqrt(Math.pow(newX - x, 2) + Math.pow(newY - y, 2));\n // Update the position only if the distance moved is greater than the threshold\n if (distance > threshold) {\n setClickPosition({ x: newX, y: newY });\n setPopoverOpen(true);\n }\n }\n\n function _getNumericMinMaxOfY(\n points: ScatterChartPoints[],\n yAxisType?: YAxisType,\n ): { startValue: number; endValue: number } {\n // eslint-disable-next-line @typescript-eslint/no-shadow\n const { startValue, endValue } = findNumericMinMaxOfY(points, yAxisType);\n const yPadding = getDomainPaddingForMarkers(startValue, endValue, props.yScaleType);\n\n return {\n startValue: startValue - yPadding.start,\n endValue: endValue + yPadding.end,\n };\n }\n\n function _getDomainNRangeValues(\n points: any,\n margins: Margins,\n width: number,\n chartType: ChartTypes,\n isRTL: boolean,\n xAxisType: XAxisTypes,\n barWidth: number,\n tickValues: Date[] | number[] | undefined,\n ) {\n let domainNRangeValue: IDomainNRange;\n if (xAxisType === XAxisTypes.NumericAxis) {\n domainNRangeValue = domainRangeOfNumericForAreaLineScatterCharts(\n points,\n margins,\n width,\n isRTL,\n props.xScaleType,\n true,\n );\n } else if (xAxisType === XAxisTypes.DateAxis) {\n domainNRangeValue = domainRangeOfDateForAreaLineScatterVerticalBarCharts(\n points,\n margins,\n width,\n isRTL,\n tickValues! as Date[],\n chartType,\n );\n } else {\n domainNRangeValue = domainRangeOfXStringAxis(margins, width, isRTL);\n }\n return domainNRangeValue;\n }\n\n function _getMargins(_margins: Margins) {\n margins = _margins;\n }\n\n function _initializeScatterChartData(\n xScale: NumericAxis,\n yScale: NumericAxis,\n containerHeight: number,\n containerWidth: number,\n xElement: SVGElement | null,\n ) {\n _xAxisScale = xScale;\n _yAxisScale = yScale;\n _isTextMode.current = isTextMode(_points);\n _isScatterPolarRef.current = isScatterPolarSeries(_points);\n renderSeries = _createPlot(xElement!, containerHeight!);\n }\n\n function _onHoverCardHide() {\n setSelectedLegendPoints([]);\n setIsSelectedLegend(false);\n }\n\n function _createLegends(data: ScatterChartDataWithIndex[]): JSXElement {\n const { legendProps } = props;\n const isLegendMultiSelectEnabled = !!(legendProps && !!legendProps.canSelectMultipleLegends);\n const mapLegendToPoints: Record<string, ScatterChartDataWithIndex[]> = {};\n data.forEach((point: ScatterChartDataWithIndex) => {\n if (point.legend) {\n if (!mapLegendToPoints[point.legend]) {\n mapLegendToPoints[point.legend] = [];\n }\n mapLegendToPoints[point.legend].push(point);\n }\n });\n const legendDataItems: Legend[] = Object.entries(mapLegendToPoints).map(([legendTitle, points]) => {\n const representativePoint = points[0];\n // mapping data to the format Legends component needs\n const legend: Legend = {\n title: legendTitle,\n color: representativePoint.color!,\n onMouseOutAction: () => {\n setActiveLegend('');\n },\n hoverAction: () => {\n _handleChartMouseLeave();\n setActiveLegend(legendTitle);\n },\n ...(representativePoint.legendShape && {\n shape: representativePoint.legendShape,\n }),\n };\n return legend;\n });\n\n return (\n <Legends\n legends={[...legendDataItems]}\n enabledWrapLines={props.enabledLegendsWrapLines}\n overflowText={props.legendsOverflowText}\n {...(isLegendMultiSelectEnabled && { onLegendHoverCardLeave: _onHoverCardHide })}\n {...props.legendProps}\n selectedLegends={selectedLegends}\n onChange={_onLegendSelectionChange}\n legendRef={_legendsRef}\n />\n );\n }\n\n function _getOrderedYAxisLabels() {\n const shouldOrderYAxisLabelsByCategoryOrder =\n _yAxisType === YAxisType.StringAxis && props.yAxisCategoryOrder !== 'default';\n if (!shouldOrderYAxisLabelsByCategoryOrder) {\n // Collect all unique string y values from all data points in all series, in reverse order\n const yLabelsSet = new Set<string>();\n for (let i = _points.length - 1; i >= 0; i--) {\n const point = _points[i];\n if (point.data && Array.isArray(point.data)) {\n for (const d of point.data) {\n if (typeof d.y === 'string') {\n yLabelsSet.add(d.y);\n }\n }\n }\n }\n return Array.from(yLabelsSet);\n }\n\n return sortAxisCategories(_mapCategoryToValues(), props.yAxisCategoryOrder);\n }\n\n function _mapCategoryToValues() {\n const categoryToValues: Record<string, number[]> = {};\n _points.forEach(point => {\n if (point.data && Array.isArray(point.data)) {\n point.data.forEach(d => {\n if (typeof d.y === 'string') {\n if (!categoryToValues[d.y]) {\n categoryToValues[d.y] = [];\n }\n if (typeof d.x === 'number') {\n categoryToValues[d.y].push(d.x);\n }\n }\n });\n }\n });\n return categoryToValues;\n }\n\n function _onLegendSelectionChange(\n legendsSelected: string[],\n event: React.MouseEvent<HTMLButtonElement>,\n currentLegend?: Legend,\n ): void {\n if (props.legendProps?.canSelectMultipleLegends) {\n setSelectedLegends(legendsSelected);\n } else {\n setSelectedLegends(legendsSelected.slice(-1));\n }\n\n if (props.legendProps?.onChange) {\n props.legendProps.onChange(legendsSelected, event, currentLegend);\n }\n }\n\n function _getPointFill(seriesColor: string, pointId: string, pointIndex: number, isLastPoint: boolean) {\n if (activePoint === pointId) {\n return tokens.colorNeutralBackground1;\n } else {\n return seriesColor;\n }\n }\n\n function _createPlot(xElement: SVGElement, containerHeight: number): JSXElement[] {\n const series: JSXElement[] = [];\n if (isSelectedLegend) {\n _points = selectedLegendPoints;\n } else {\n _points = _injectIndexPropertyInScatterChartData(props.data.scatterChartData);\n }\n\n if (_xAxisType === XAxisTypes.StringAxis) {\n _xBandwidth = _xAxisScale.bandwidth() / 2;\n }\n\n const maxMarkerSize = d3Max(_points, (point: ScatterChartPoints) => {\n return d3Max(point.data as ScatterChartDataPoint[], (item: ScatterChartDataPoint) => {\n return item.markerSize as number;\n });\n })!;\n\n const extraMaxPixels =\n _xAxisType !== XAxisTypes.StringAxis && _yAxisType !== YAxisType.StringAxis\n ? getRangeForScatterMarkerSize({\n data: _points,\n xScale: _xAxisScale,\n yScalePrimary: _yAxisScale,\n xScaleType: props.xScaleType,\n yScaleType: props.yScaleType,\n })\n : 0;\n\n for (let i = _points.length - 1; i >= 0; i--) {\n const pointsForSeries: JSXElement[] = [];\n\n const legendVal: string = _points[i].legend;\n const seriesColor: string = _points[i].color!;\n const verticaLineHeight = containerHeight - margins.bottom! + 6;\n\n for (let j = 0; j < _points[i].data.length; j++) {\n const { x, y, xAxisCalloutData, xAxisCalloutAccessibilityData } = _points?.[i]?.data[j];\n const xPoint = _xAxisScale?.(x);\n // Use string y axis scale if needed\n const yPoint =\n _yAxisType === YAxisType.StringAxis\n ? _yAxisScale?.(y) + (_yAxisScale?.bandwidth ? _yAxisScale.bandwidth() / 2 : 0)\n : _yAxisScale?.(y);\n if (!isPlottable(xPoint, yPoint)) {\n continue;\n }\n const seriesId = `${_seriesId}_${i}_${j}`;\n const circleId = `${_circleId}_${i}_${j}`;\n const pointMarkerSize = (_points[i].data[j] as ScatterChartDataPoint).markerSize;\n const minPixel = 4;\n const maxPixel = 16;\n const circleRadius =\n pointMarkerSize && maxMarkerSize !== 0\n ? _xAxisType !== XAxisTypes.StringAxis\n ? (pointMarkerSize * extraMaxPixels) / maxMarkerSize\n : minPixel + ((pointMarkerSize - minPixel) / (maxMarkerSize - minPixel)) * (maxPixel - minPixel)\n : activePoint === circleId\n ? 6\n : 4;\n\n const isLegendSelected: boolean = _legendHighlighted(legendVal) || _noLegendHighlighted() || isSelectedLegend;\n\n const currentPointHidden = _points[i].hideNonActiveDots && activePoint !== circleId;\n const text = _points?.[i].data[j]?.text;\n if (!_isTextMode.current) {\n pointsForSeries.push(\n <>\n <circle\n id={circleId}\n key={circleId}\n r={Math.max(circleRadius, 4)}\n cx={xPoint + _xBandwidth}\n cy={yPoint}\n data-is-focusable={isLegendSelected}\n onMouseOver={(event: React.MouseEvent<SVGElement>) =>\n _handleHover(\n x,\n y,\n verticaLineHeight,\n xAxisCalloutData,\n circleId,\n xAxisCalloutAccessibilityData,\n event,\n )\n }\n onMouseMove={(event: React.MouseEvent<SVGElement>) =>\n _handleHover(\n x,\n y,\n verticaLineHeight,\n xAxisCalloutData,\n circleId,\n xAxisCalloutAccessibilityData,\n event,\n )\n }\n onMouseOut={_handleMouseOut}\n onFocus={event =>\n _handleFocus(event, seriesId, x, xAxisCalloutData, circleId, xAxisCalloutAccessibilityData)\n }\n onBlur={_handleMouseOut}\n {..._getClickHandler(_points[i].data[j].onDataPointClick)}\n opacity={isLegendSelected && !currentPointHidden ? 1 : 0.1}\n fill={_getPointFill(seriesColor, circleId, j, false)}\n stroke={seriesColor}\n role=\"img\"\n aria-label={_getAriaLabel(i, j)}\n tabIndex={isLegendSelected ? 0 : undefined}\n />\n ,\n {text && (\n <text\n key={`${circleId}-label`}\n x={xPoint + _xBandwidth}\n y={yPoint + Math.max(circleRadius + 12, 16)}\n className={classes.markerLabel}\n >\n {text}\n </text>\n )}\n </>,\n );\n }\n }\n\n if (_isScatterPolarRef.current) {\n pointsForSeries.push(\n ...renderScatterPolarCategoryLabels({\n xAxisScale: _xAxisScale,\n yAxisScale: _yAxisScale,\n className: classes.markerLabel || '',\n lineOptions: (_points?.[i] as Partial<LineChartPoints>)?.lineOptions,\n }),\n );\n }\n\n series.push(\n <g\n key={`series_${i}`}\n role=\"region\"\n aria-label={`${legendVal}, series ${i + 1} of ${_points.length} with ${_points[i].data.length} data points.`}\n >\n {pointsForSeries}\n </g>,\n );\n }\n // Removing un wanted tooltip div from DOM, when prop not provided.\n if (!props.showXAxisLablesTooltip) {\n try {\n document.getElementById(_tooltipId) && document.getElementById(_tooltipId)!.remove();\n // eslint-disable-next-line no-empty\n } catch (e) {}\n }\n // Used to display tooltip at x axis labels.\n if (!props.wrapXAxisLables && props.showXAxisLablesTooltip) {\n const xAxisElement = d3Select(xElement).call(_xAxisScale);\n try {\n document.getElementById(_tooltipId) && document.getElementById(_tooltipId)!.remove();\n // eslint-disable-next-line no-empty\n } catch (e) {}\n const tooltipProps = {\n tooltipCls: classes.tooltip!,\n id: _tooltipId,\n axis: xAxisElement,\n };\n xAxisElement && tooltipOfAxislabels(tooltipProps);\n }\n return series;\n }\n\n function _handleFocus(\n event: React.FocusEvent<SVGCircleElement, Element>,\n seriesId: string,\n x: number | Date | string,\n xAxisCalloutData: string | undefined,\n circleId: string,\n xAxisCalloutAccessibilityData?: AccessibilityProps,\n ) {\n let cx = 0;\n let cy = 0;\n\n const targetRect = (event.target as SVGCircleElement).getBoundingClientRect();\n cx = targetRect.left + targetRect.width / 2;\n cy = targetRect.top + targetRect.height / 2;\n updatePosition(cx, cy);\n _uniqueCallOutID = circleId;\n const formattedData = x instanceof Date ? formatDateToLocaleString(x, props.culture, props.useUTC as boolean) : x;\n const found = findCalloutPoints(calloutPointsRef.current, x) as CustomizedCalloutData | undefined;\n // if no points need to be called out then don't show vertical line and callout card\n\n if (found) {\n d3Select(`#${_verticalLine}`)\n .attr('transform', () => `translate(${_xAxisScale(x) + _xBandwidth}, 0)`)\n .attr('visibility', 'visibility');\n _refArray.forEach((obj: RefArrayData) => {\n if (obj.index === seriesId) {\n setPopoverOpen(true);\n xAxisCalloutData ? setHoverXValue(xAxisCalloutData) : setHoverXValue('' + formattedData);\n setYValueHover(found.values);\n setStackCalloutProps(found!);\n setActivePoint(circleId);\n }\n });\n } else {\n setActivePoint(circleId);\n }\n }\n\n function _handleHover(\n x: number | Date | string,\n y: number,\n lineHeight: number,\n xAxisCalloutData: string | undefined,\n circleId: string,\n xAxisCalloutAccessibilityData: AccessibilityProps | undefined,\n mouseEvent: React.MouseEvent<SVGElement>,\n ) {\n mouseEvent?.persist();\n const formattedData = x instanceof Date ? formatDateToLocaleString(x, props.culture, props.useUTC as boolean) : x;\n const found = findCalloutPoints(calloutPointsRef.current, x) as CustomizedCalloutData | undefined;\n // if no points need to be called out then don't show vertical line and callout card\n\n if (found) {\n d3Select(`#${_verticalLine}`)\n .attr('transform', () => `translate(${_xAxisScale(x) + _xBandwidth}, ${_yAxisScale(y)})`)\n .attr('visibility', 'visibility')\n .attr('y2', `${lineHeight - _yAxisScale(y)}`);\n\n if (_uniqueCallOutID !== circleId) {\n _uniqueCallOutID = circleId;\n updatePosition(mouseEvent.clientX, mouseEvent.clientY);\n xAxisCalloutData ? setHoverXValue(xAxisCalloutData) : setHoverXValue('' + formattedData);\n setYValueHover(found.values);\n setStackCalloutProps(found!);\n setActivePoint(circleId);\n }\n } else {\n setActivePoint(circleId);\n }\n }\n\n /**\n * Screen readers announce an element as clickable if the onClick attribute is set.\n * This function sets the attribute only when a click event handler is provided.*/\n\n function _getClickHandler(func?: () => void): { onClick?: () => void } {\n if (func) {\n return {\n onClick: func,\n };\n }\n\n return {};\n }\n\n function _handleMouseOut() {\n d3Select(`#${_verticalLine}`).attr('visibility', 'hidden');\n }\n\n function _handleChartMouseLeave() {\n _uniqueCallOutID = null;\n setActivePoint('');\n if (isPopoverOpen) {\n setPopoverOpen(false);\n }\n }\n\n /**\n * This function checks if the given legend is highlighted or not.\n * A legend can be highlighted in 2 ways:\n * 1. selection: if the user clicks on it\n * 2. hovering: if there is no selected legend and the user hovers over it*/\n\n function _legendHighlighted(legend: string): boolean {\n return _getHighlightedLegend().includes(legend);\n }\n\n /**\n * This function checks if none of the legends is selected or hovered.*/\n\n function _noLegendHighlighted(): boolean {\n return _getHighlightedLegend().length === 0;\n }\n\n function _getHighlightedLegend(): string[] {\n return selectedLegends.length > 0 ? selectedLegends : activeLegend ? [activeLegend] : [];\n }\n\n function _getAriaLabel(seriesIndex: number, pointIndex: number): string {\n const series = _points[seriesIndex];\n const point = series.data[pointIndex];\n const formattedDate =\n point.x instanceof Date ? formatDateToLocaleString(point.x, props.culture, props.useUTC as boolean) : point.x;\n const xValue = point.xAxisCalloutData || formattedDate;\n const legend = series.legend;\n const yValue = point.yAxisCalloutData || point.y;\n return point.callOutAccessibilityData?.ariaLabel || `${xValue}. ${legend}, ${yValue}.`;\n }\n\n function _isChartEmpty(): boolean {\n return !(\n props.data &&\n props.data.scatterChartData &&\n props.data.scatterChartData.length > 0 &&\n props.data.scatterChartData.filter((item: ScatterChartPoints) => item.data.length).length > 0\n );\n }\n\n const { legendProps, tickValues, tickFormat } = props;\n _points = _injectIndexPropertyInScatterChartData(props.data.scatterChartData);\n\n let points = _points as ScatterChartPoints[];\n if (legendProps && !!legendProps.canSelectMultipleLegends) {\n points = selectedLegendPoints.length >= 1 ? selectedLegendPoints : _points;\n calloutPointsRef.current = calloutData(points);\n }\n\n let legendBars = null;\n // reduce computation cost by only creating legendBars\n // if when hideLegend is false.\n // NOTE: they are rendered only when hideLegend is false in CartesianChart.\n if (!props.hideLegend && !_isTextMode.current) {\n legendBars = _createLegends(_points!); // ToDo: Memoize legends to improve performance.\n }\n const calloutProps = {\n YValueHover: yValueHover,\n hoverXValue,\n descriptionMessage:\n props.getCalloutDescriptionMessage && stackCalloutProps\n ? props.getCalloutDescriptionMessage(stackCalloutProps)\n : undefined,\n 'data-is-focusable': true,\n xAxisCalloutAccessibilityData,\n ...props.calloutProps,\n clickPosition,\n isPopoverOpen,\n isCalloutForStack: true,\n culture: props.culture,\n isCartesian: true,\n };\n const tickParams = {\n tickValues,\n tickFormat,\n };\n\n const xAxisLabels: string[] = _points\n .map((point: ScatterChartDataWithIndex) => point.data.map((dp: ScatterChartDataPoint) => dp.x as string))\n .flat();\n\n _xAxisLabels = [...new Set(xAxisLabels)];\n\n // Compute unique y axis labels for string y axis\n const _yAxisLabels: string[] = _getOrderedYAxisLabels();\n\n return !_isChartEmpty() ? (\n <CartesianChart\n {...props}\n chartTitle={props.data.chartTitle}\n points={points}\n chartType={ChartTypes.ScatterChart}\n calloutProps={calloutProps}\n tickParams={tickParams}\n legendBars={legendBars}\n getmargins={_getMargins}\n getGraphData={_initializeScatterChartData}\n xAxisType={_xAxisType}\n yAxisType={_yAxisType}\n // Pass stringDatasetForYAxisDomain only if y axis is string\n {...(_yAxisType === YAxisType.StringAxis ? { stringDatasetForYAxisDomain: _yAxisLabels } : {})}\n getMinMaxOfYAxis={_getNumericMinMaxOfY}\n getDomainNRangeValues={_getDomainNRangeValues}\n createYAxis={createNumericYAxis}\n createStringYAxis={createStringYAxis}\n onChartMouseLeave={_handleChartMouseLeave}\n enableFirstRenderOptimization={_firstRenderOptimization}\n datasetForXAxisDomain={_xAxisLabels}\n componentRef={cartesianChartRef}\n {...(_isScatterPolarRef.current ? { yMaxValue: 1, yMinValue: -1 } : {})}\n /* eslint-disable react/jsx-no-bind */\n // eslint-disable-next-line react/no-children-prop\n children={(props: ChildProps) => {\n _xAxisScale = props.xScale!;\n _yAxisScale = props.yScalePrimary!;\n return (\n <>\n <g>\n <line\n x1={0}\n y1={0}\n x2={0}\n y2={props.containerHeight}\n stroke={'#323130'}\n id={_verticalLine}\n visibility={'hidden'}\n strokeDasharray={'5,5'}\n />\n <g>{renderSeries}</g>\n </g>\n </>\n );\n }}\n />\n ) : (\n <div id={_emptyChartId} role={'alert'} style={{ opacity: '0' }} aria-label={'Graph has no data to display'} />\n );\n});\nScatterChart.displayName = 'ScatterChart';\n"],"names":["React","useScatterChartStyles","select","d3Select","Legends","max","d3Max","useId","areArraysEqual","createNumericYAxis","createStringYAxis","getDomainPaddingForMarkers","domainRangeOfXStringAxis","findNumericMinMaxOfY","YAxisType","useRtl","isTextMode","isScatterPolarSeries","isPlottable","getRangeForScatterMarkerSize","domainRangeOfDateForAreaLineScatterVerticalBarCharts","domainRangeOfNumericForAreaLineScatterCharts","sortAxisCategories","findCalloutPoints","CartesianChart","tokens","calloutData","ChartTypes","XAxisTypes","tooltipOfAxislabels","getTypeOfAxis","getNextColor","getColorFromToken","toImage","renderScatterPolarCategoryLabels","formatDateToLocaleString","ScatterChart","forwardRef","props","forwardedRef","_circleId","_seriesId","_verticalLine","_tooltipId","_firstRenderOptimization","_emptyChartId","_points","_injectIndexPropertyInScatterChartData","data","scatterChartData","_xAxisScale","_yAxisScale","_uniqueCallOutID","_refArray","margins","renderSeries","_xAxisLabels","xAxisCalloutAccessibilityData","_xBandwidth","cartesianChartRef","useRef","classes","_legendsRef","_isRTL","hoverXValue","setHoverXValue","useState","activeLegend","setActiveLegend","yValueHover","setYValueHover","selectedLegendPoints","setSelectedLegendPoints","isSelectedLegend","setIsSelectedLegend","activePoint","setActivePoint","stackCalloutProps","setStackCalloutProps","clickPosition","setClickPosition","x","y","isPopoverOpen","setPopoverOpen","selectedLegends","setSelectedLegends","legendProps","prevSelectedLegendsRef","undefined","_isTextMode","_isScatterPolarRef","useEffect","current","useImperativeHandle","componentRef","chartContainer","opts","toSVG","_xAxisType","length","StringAxis","_yAxisType","NumericAxis","pointsRef","calloutPointsRef","height","width","map","item","index","color","updatePosition","newX","newY","threshold","distance","Math","sqrt","pow","_getNumericMinMaxOfY","points","yAxisType","startValue","endValue","yPadding","yScaleType","start","end","_getDomainNRangeValues","chartType","isRTL","xAxisType","barWidth","tickValues","domainNRangeValue","xScaleType","DateAxis","_getMargins","_margins","_initializeScatterChartData","xScale","yScale","containerHeight","containerWidth","xElement","_createPlot","_onHoverCardHide","_createLegends","isLegendMultiSelectEnabled","canSelectMultipleLegends","mapLegendToPoints","forEach","point","legend","push","legendDataItems","Object","entries","legendTitle","representativePoint","title","onMouseOutAction","hoverAction","_handleChartMouseLeave","legendShape","shape","legends","enabledWrapLines","enabledLegendsWrapLines","overflowText","legendsOverflowText","onLegendHoverCardLeave","onChange","_onLegendSelectionChange","legendRef","_getOrderedYAxisLabels","shouldOrderYAxisLabelsByCategoryOrder","yAxisCategoryOrder","yLabelsSet","Set","i","Array","isArray","d","add","from","_mapCategoryToValues","categoryToValues","legendsSelected","event","currentLegend","slice","_getPointFill","seriesColor","pointId","pointIndex","isLastPoint","colorNeutralBackground1","series","bandwidth","maxMarkerSize","markerSize","extraMaxPixels","yScalePrimary","pointsForSeries","legendVal","verticaLineHeight","bottom","j","xAxisCalloutData","xPoint","yPoint","seriesId","circleId","pointMarkerSize","minPixel","maxPixel","circleRadius","isLegendSelected","_legendHighlighted","_noLegendHighlighted","currentPointHidden","hideNonActiveDots","text","circle","id","key","r","cx","cy","data-is-focusable","onMouseOver","_handleHover","onMouseMove","onMouseOut","_handleMouseOut","onFocus","_handleFocus","onBlur","_getClickHandler","onDataPointClick","opacity","fill","stroke","role","aria-label","_getAriaLabel","tabIndex","className","markerLabel","xAxisScale","yAxisScale","lineOptions","g","showXAxisLablesTooltip","document","getElementById","remove","e","wrapXAxisLables","xAxisElement","call","tooltipProps","tooltipCls","tooltip","axis","targetRect","target","getBoundingClientRect","left","top","formattedData","Date","culture","useUTC","found","attr","obj","values","lineHeight","mouseEvent","persist","clientX","clientY","func","onClick","_getHighlightedLegend","includes","seriesIndex","formattedDate","xValue","yValue","yAxisCalloutData","callOutAccessibilityData","ariaLabel","_isChartEmpty","filter","tickFormat","legendBars","hideLegend","calloutProps","YValueHover","descriptionMessage","getCalloutDescriptionMessage","isCalloutForStack","isCartesian","tickParams","xAxisLabels","dp","flat","_yAxisLabels","chartTitle","getmargins","getGraphData","stringDatasetForYAxisDomain","getMinMaxOfYAxis","getDomainNRangeValues","createYAxis","onChartMouseLeave","enableFirstRenderOptimization","datasetForXAxisDomain","yMaxValue","yMinValue","children","line","x1","y1","x2","y2","visibility","strokeDasharray","div","style","displayName"],"mappings":"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"}
1
+ {"version":3,"sources":["../src/components/ScatterChart/ScatterChart.tsx"],"sourcesContent":["'use client';\n\nimport * as React from 'react';\nimport { ScatterChartProps } from './ScatterChart.types';\nimport { useScatterChartStyles } from './useScatterChartStyles.styles';\nimport { Axis as D3Axis } from 'd3-axis';\nimport { select as d3Select } from 'd3-selection';\nimport { Legend, Legends } from '../Legends/index';\nimport { max as d3Max, min as d3Min } from 'd3-array';\nimport { useId } from '@fluentui/react-utilities';\nimport type { JSXElement } from '@fluentui/react-utilities';\nimport {\n areArraysEqual,\n createNumericYAxis,\n createStringYAxis,\n getDomainPaddingForMarkers,\n domainRangeOfXStringAxis,\n findNumericMinMaxOfY,\n IDomainNRange,\n YAxisType,\n isTextMode,\n isScatterPolarSeries,\n isPlottable,\n getRangeForScatterMarkerSize,\n domainRangeOfDateForAreaLineScatterVerticalBarCharts,\n domainRangeOfNumericForAreaLineScatterCharts,\n sortAxisCategories,\n findCalloutPoints,\n} from '../../utilities/index';\nimport {\n AccessibilityProps,\n CartesianChart,\n ChildProps,\n CustomizedCalloutData,\n Margins,\n RefArrayData,\n ScatterChartDataPoint,\n ScatterChartPoints,\n YValueHover,\n} from '../../index';\nimport { tokens } from '@fluentui/react-theme';\nimport {\n calloutData,\n ChartTypes,\n XAxisTypes,\n tooltipOfAxislabels,\n getTypeOfAxis,\n getNextColor,\n getColorFromToken,\n} from '../../utilities/index';\nimport { LineChartPoints } from '../../types/DataPoint';\nimport { renderScatterPolarCategoryLabels } from '../../utilities/scatterpolar-utils';\nimport { formatDateToLocaleString } from '@fluentui/chart-utilities';\nimport { useImageExport } from '../../utilities/hooks';\n\ntype NumericAxis = D3Axis<number | { valueOf(): number }>;\n\ntype ScatterChartDataWithIndex = ScatterChartPoints & { index: number };\n\n// Create a ScatterChart variant which uses these default styles and this styled subcomponent.\n/**\n * ScatterChart component\n * {@docCategory ScatterChart}\n */\nexport const ScatterChart: React.FunctionComponent<ScatterChartProps> = React.forwardRef<\n HTMLDivElement,\n ScatterChartProps\n>((props, forwardedRef) => {\n const _circleId: string = useId('circle');\n const _seriesId: string = useId('seriesID');\n const _verticalLine: string = useId('verticalLine');\n const _tooltipId: string = useId('ScatterChartTooltipId_');\n const _firstRenderOptimization = true;\n const _emptyChartId: string = useId('_ScatterChart_empty');\n let _points: ScatterChartDataWithIndex[] = _injectIndexPropertyInScatterChartData(props.data.scatterChartData);\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n let _xAxisScale: any = '';\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n let _yAxisScale: any = '';\n let _uniqueCallOutID: string | null = '';\n let _refArray: RefArrayData[] = [];\n let margins: Margins;\n let renderSeries: JSXElement[];\n let _xAxisLabels: string[] = [];\n let xAxisCalloutAccessibilityData: AccessibilityProps = {};\n let _xBandwidth = 0;\n const { cartesianChartRef, legendsRef: _legendsRef } = useImageExport(props.componentRef, props.hideLegend);\n const classes = useScatterChartStyles(props);\n\n const [hoverXValue, setHoverXValue] = React.useState<string | number>('');\n const [activeLegend, setActiveLegend] = React.useState<string>('');\n const [yValueHover, setYValueHover] = React.useState<YValueHover[]>([]);\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const [selectedLegendPoints, setSelectedLegendPoints] = React.useState<any[]>([]);\n const [isSelectedLegend, setIsSelectedLegend] = React.useState<boolean>(false);\n const [activePoint, setActivePoint] = React.useState<string>('');\n const [stackCalloutProps, setStackCalloutProps] = React.useState<CustomizedCalloutData>();\n const [clickPosition, setClickPosition] = React.useState({ x: 0, y: 0 });\n const [isPopoverOpen, setPopoverOpen] = React.useState(false);\n const [selectedLegends, setSelectedLegends] = React.useState<string[]>(props.legendProps?.selectedLegends || []);\n const prevSelectedLegendsRef = React.useRef<string[] | undefined>(undefined);\n const _isTextMode = React.useRef(false);\n const _isScatterPolarRef = React.useRef(false);\n\n React.useEffect(() => {\n if (\n prevSelectedLegendsRef.current &&\n !areArraysEqual(prevSelectedLegendsRef.current, props.legendProps?.selectedLegends)\n ) {\n setSelectedLegends(props.legendProps?.selectedLegends || []);\n }\n prevSelectedLegendsRef.current = props.legendProps?.selectedLegends;\n }, [props.legendProps?.selectedLegends]);\n\n const _xAxisType: XAxisTypes =\n props.data.scatterChartData! &&\n props.data.scatterChartData!.length > 0 &&\n props.data.scatterChartData![0].data &&\n props.data.scatterChartData![0].data.length > 0\n ? (getTypeOfAxis(props.data.scatterChartData![0].data[0].x, true) as XAxisTypes)\n : XAxisTypes.StringAxis;\n\n // Detect y axis type (numeric or string)\n const _yAxisType: YAxisType =\n props.data.scatterChartData &&\n props.data.scatterChartData.length > 0 &&\n props.data.scatterChartData[0].data &&\n props.data.scatterChartData[0].data.length > 0\n ? typeof props.data.scatterChartData[0].data[0].y === 'string'\n ? YAxisType.StringAxis\n : YAxisType.NumericAxis\n : YAxisType.NumericAxis;\n\n const pointsRef = React.useRef<ScatterChartDataWithIndex[] | []>([]);\n const calloutPointsRef = React.useRef<Record<string, YValueHover[]>>({});\n React.useEffect(() => {\n /** note that height and width are not used to resize or set as dimesions of the chart,\n * fitParentContainer is responisble for setting the height and width or resizing of the svg/chart\n */\n\n if (_points !== _injectIndexPropertyInScatterChartData(props.data.scatterChartData) || props.data !== _points) {\n pointsRef.current = _injectIndexPropertyInScatterChartData(props.data.scatterChartData);\n calloutPointsRef.current = calloutData(pointsRef.current);\n }\n }, [props.height, props.width, props.data, _points]);\n\n function _injectIndexPropertyInScatterChartData(\n scatterChartData?: ScatterChartPoints[],\n ): ScatterChartDataWithIndex[] | [] {\n return scatterChartData\n ? scatterChartData.map((item: ScatterChartPoints, index: number) => {\n let color: string;\n if (typeof item.color === 'undefined') {\n color = getNextColor(index, 0);\n } else {\n color = getColorFromToken(item.color);\n }\n return {\n ...item,\n index: -1,\n color,\n };\n })\n : [];\n }\n\n function updatePosition(newX: number, newY: number) {\n const threshold = 1; // Set a threshold for movement\n const { x, y } = clickPosition;\n // Calculate the distance moved\n const distance = Math.sqrt(Math.pow(newX - x, 2) + Math.pow(newY - y, 2));\n // Update the position only if the distance moved is greater than the threshold\n if (distance > threshold) {\n setClickPosition({ x: newX, y: newY });\n setPopoverOpen(true);\n }\n }\n\n function _getNumericMinMaxOfY(\n points: ScatterChartPoints[],\n yAxisType?: YAxisType,\n ): { startValue: number; endValue: number } {\n const { startValue, endValue } = findNumericMinMaxOfY(points, yAxisType);\n const yPadding = getDomainPaddingForMarkers(startValue, endValue, props.yScaleType);\n\n return {\n startValue: startValue - yPadding.start,\n endValue: endValue + yPadding.end,\n };\n }\n\n function _getDomainNRangeValues(\n points: any,\n margins: Margins,\n width: number,\n chartType: ChartTypes,\n isRTL: boolean,\n xAxisType: XAxisTypes,\n barWidth: number,\n tickValues: Date[] | number[] | undefined,\n ) {\n let domainNRangeValue: IDomainNRange;\n if (xAxisType === XAxisTypes.NumericAxis) {\n domainNRangeValue = domainRangeOfNumericForAreaLineScatterCharts(\n points,\n margins,\n width,\n isRTL,\n props.xScaleType,\n true,\n );\n } else if (xAxisType === XAxisTypes.DateAxis) {\n domainNRangeValue = domainRangeOfDateForAreaLineScatterVerticalBarCharts(\n points,\n margins,\n width,\n isRTL,\n tickValues! as Date[],\n chartType,\n );\n } else {\n domainNRangeValue = domainRangeOfXStringAxis(margins, width, isRTL);\n }\n return domainNRangeValue;\n }\n\n function _getMargins(_margins: Margins) {\n margins = _margins;\n }\n\n function _initializeScatterChartData(\n xScale: NumericAxis,\n yScale: NumericAxis,\n containerHeight: number,\n containerWidth: number,\n xElement: SVGElement | null,\n ) {\n _xAxisScale = xScale;\n _yAxisScale = yScale;\n _isTextMode.current = isTextMode(_points);\n _isScatterPolarRef.current = isScatterPolarSeries(_points);\n renderSeries = _createPlot(xElement!, containerHeight!);\n }\n\n function _onHoverCardHide() {\n setSelectedLegendPoints([]);\n setIsSelectedLegend(false);\n }\n\n function _createLegends(data: ScatterChartDataWithIndex[]): JSXElement {\n const { legendProps } = props;\n const isLegendMultiSelectEnabled = !!(legendProps && !!legendProps.canSelectMultipleLegends);\n const mapLegendToPoints: Record<string, ScatterChartDataWithIndex[]> = {};\n data.forEach((point: ScatterChartDataWithIndex) => {\n if (point.legend) {\n if (!mapLegendToPoints[point.legend]) {\n mapLegendToPoints[point.legend] = [];\n }\n mapLegendToPoints[point.legend].push(point);\n }\n });\n const legendDataItems: Legend[] = Object.entries(mapLegendToPoints).map(([legendTitle, points]) => {\n const representativePoint = points[0];\n // mapping data to the format Legends component needs\n const legend: Legend = {\n title: legendTitle,\n color: representativePoint.color!,\n onMouseOutAction: () => {\n setActiveLegend('');\n },\n hoverAction: () => {\n _handleChartMouseLeave();\n setActiveLegend(legendTitle);\n },\n ...(representativePoint.legendShape && {\n shape: representativePoint.legendShape,\n }),\n };\n return legend;\n });\n\n return (\n <Legends\n legends={[...legendDataItems]}\n enabledWrapLines={props.enabledLegendsWrapLines}\n overflowText={props.legendsOverflowText}\n {...(isLegendMultiSelectEnabled && { onLegendHoverCardLeave: _onHoverCardHide })}\n {...props.legendProps}\n selectedLegends={selectedLegends}\n onChange={_onLegendSelectionChange}\n legendRef={_legendsRef}\n />\n );\n }\n\n function _getOrderedYAxisLabels() {\n const shouldOrderYAxisLabelsByCategoryOrder =\n _yAxisType === YAxisType.StringAxis && props.yAxisCategoryOrder !== 'default';\n if (!shouldOrderYAxisLabelsByCategoryOrder) {\n // Collect all unique string y values from all data points in all series, in reverse order\n const yLabelsSet = new Set<string>();\n for (let i = _points.length - 1; i >= 0; i--) {\n const point = _points[i];\n if (point.data && Array.isArray(point.data)) {\n for (const d of point.data) {\n if (typeof d.y === 'string') {\n yLabelsSet.add(d.y);\n }\n }\n }\n }\n return Array.from(yLabelsSet);\n }\n\n return sortAxisCategories(_mapCategoryToValues(), props.yAxisCategoryOrder);\n }\n\n function _mapCategoryToValues() {\n const categoryToValues: Record<string, number[]> = {};\n _points.forEach(point => {\n if (point.data && Array.isArray(point.data)) {\n point.data.forEach(d => {\n if (typeof d.y === 'string') {\n if (!categoryToValues[d.y]) {\n categoryToValues[d.y] = [];\n }\n if (typeof d.x === 'number') {\n categoryToValues[d.y].push(d.x);\n }\n }\n });\n }\n });\n return categoryToValues;\n }\n\n function _onLegendSelectionChange(\n legendsSelected: string[],\n event: React.MouseEvent<HTMLButtonElement>,\n currentLegend?: Legend,\n ): void {\n if (props.legendProps?.canSelectMultipleLegends) {\n setSelectedLegends(legendsSelected);\n } else {\n setSelectedLegends(legendsSelected.slice(-1));\n }\n\n if (props.legendProps?.onChange) {\n props.legendProps.onChange(legendsSelected, event, currentLegend);\n }\n }\n\n function _getPointFill(seriesColor: string, pointId: string, pointIndex: number, isLastPoint: boolean) {\n if (activePoint === pointId) {\n return tokens.colorNeutralBackground1;\n } else {\n return seriesColor;\n }\n }\n\n function _createPlot(xElement: SVGElement, containerHeight: number): JSXElement[] {\n const series: JSXElement[] = [];\n if (isSelectedLegend) {\n _points = selectedLegendPoints;\n } else {\n _points = _injectIndexPropertyInScatterChartData(props.data.scatterChartData);\n }\n\n if (_xAxisType === XAxisTypes.StringAxis) {\n _xBandwidth = _xAxisScale.bandwidth() / 2;\n }\n\n const minMarkerSize =\n d3Min(_points, (point: ScatterChartPoints) => {\n return d3Min(point.data as ScatterChartDataPoint[], (item: ScatterChartDataPoint) => {\n return item.markerSize as number;\n });\n }) ?? 0;\n const maxMarkerSize =\n d3Max(_points, (point: ScatterChartPoints) => {\n return d3Max(point.data as ScatterChartDataPoint[], (item: ScatterChartDataPoint) => {\n return item.markerSize as number;\n });\n }) ?? 0;\n const isContinuousXY = _xAxisType !== XAxisTypes.StringAxis && _yAxisType !== YAxisType.StringAxis;\n const extraMaxPixels = isContinuousXY\n ? getRangeForScatterMarkerSize({\n data: _points,\n xScale: _xAxisScale,\n yScalePrimary: _yAxisScale,\n xScaleType: props.xScaleType,\n yScaleType: props.yScaleType,\n })\n : 0;\n\n for (let i = _points.length - 1; i >= 0; i--) {\n const pointsForSeries: JSXElement[] = [];\n\n const legendVal: string = _points[i].legend;\n const seriesColor: string = _points[i].color!;\n const verticaLineHeight = containerHeight - margins.bottom! + 6;\n\n for (let j = 0; j < _points[i].data.length; j++) {\n const { x, y, xAxisCalloutData, xAxisCalloutAccessibilityData } = _points?.[i]?.data[j];\n const xPoint = _xAxisScale?.(x);\n // Use string y axis scale if needed\n const yPoint =\n _yAxisType === YAxisType.StringAxis\n ? _yAxisScale?.(y) + (_yAxisScale?.bandwidth ? _yAxisScale.bandwidth() / 2 : 0)\n : _yAxisScale?.(y);\n if (!isPlottable(xPoint, yPoint)) {\n continue;\n }\n const seriesId = `${_seriesId}_${i}_${j}`;\n const circleId = `${_circleId}_${i}_${j}`;\n const pointMarkerSize = (_points[i].data[j] as ScatterChartDataPoint).markerSize;\n const minPixel = 4;\n const maxPixel = 16;\n let circleRadius = activePoint === circleId ? 6 : 4;\n\n if (pointMarkerSize) {\n if (isContinuousXY && maxMarkerSize !== 0) {\n circleRadius = (pointMarkerSize * extraMaxPixels) / maxMarkerSize;\n } else if (!isContinuousXY && maxMarkerSize !== minMarkerSize) {\n circleRadius =\n minPixel + ((pointMarkerSize - minMarkerSize) / (maxMarkerSize - minMarkerSize)) * (maxPixel - minPixel);\n }\n }\n\n const isLegendSelected: boolean = _legendHighlighted(legendVal) || _noLegendHighlighted() || isSelectedLegend;\n\n const currentPointHidden = _points[i].hideNonActiveDots && activePoint !== circleId;\n const text = _points?.[i].data[j]?.text;\n if (!_isTextMode.current) {\n pointsForSeries.push(\n <>\n <circle\n id={circleId}\n key={circleId}\n r={Math.max(circleRadius, 4)}\n cx={xPoint + _xBandwidth}\n cy={yPoint}\n data-is-focusable={isLegendSelected}\n onMouseOver={(event: React.MouseEvent<SVGElement>) =>\n _handleHover(\n x,\n y,\n verticaLineHeight,\n xAxisCalloutData,\n circleId,\n xAxisCalloutAccessibilityData,\n event,\n )\n }\n onMouseMove={(event: React.MouseEvent<SVGElement>) =>\n _handleHover(\n x,\n y,\n verticaLineHeight,\n xAxisCalloutData,\n circleId,\n xAxisCalloutAccessibilityData,\n event,\n )\n }\n onMouseOut={_handleMouseOut}\n onFocus={event =>\n _handleFocus(event, seriesId, x, xAxisCalloutData, circleId, xAxisCalloutAccessibilityData)\n }\n onBlur={_handleMouseOut}\n {..._getClickHandler(_points[i].data[j].onDataPointClick)}\n opacity={isLegendSelected && !currentPointHidden ? 1 : 0.1}\n fill={_getPointFill(seriesColor, circleId, j, false)}\n stroke={seriesColor}\n role=\"img\"\n aria-label={_getAriaLabel(i, j)}\n tabIndex={isLegendSelected ? 0 : undefined}\n />\n ,\n {text && (\n <text\n key={`${circleId}-label`}\n x={xPoint + _xBandwidth}\n y={yPoint + Math.max(circleRadius + 12, 16)}\n className={classes.markerLabel}\n >\n {text}\n </text>\n )}\n </>,\n );\n }\n }\n\n if (_isScatterPolarRef.current) {\n pointsForSeries.push(\n ...renderScatterPolarCategoryLabels({\n xAxisScale: _xAxisScale,\n yAxisScale: _yAxisScale,\n className: classes.markerLabel || '',\n lineOptions: (_points?.[i] as Partial<LineChartPoints>)?.lineOptions,\n }),\n );\n }\n\n series.push(\n <g\n key={`series_${i}`}\n role=\"region\"\n aria-label={`${legendVal}, series ${i + 1} of ${_points.length} with ${_points[i].data.length} data points.`}\n >\n {pointsForSeries}\n </g>,\n );\n }\n // Removing un wanted tooltip div from DOM, when prop not provided.\n if (!props.showXAxisLablesTooltip) {\n try {\n document.getElementById(_tooltipId) && document.getElementById(_tooltipId)!.remove();\n // eslint-disable-next-line no-empty\n } catch (e) {}\n }\n // Used to display tooltip at x axis labels.\n if (!props.wrapXAxisLables && props.showXAxisLablesTooltip) {\n const xAxisElement = d3Select(xElement).call(_xAxisScale);\n try {\n document.getElementById(_tooltipId) && document.getElementById(_tooltipId)!.remove();\n // eslint-disable-next-line no-empty\n } catch (e) {}\n const tooltipProps = {\n tooltipCls: classes.tooltip!,\n id: _tooltipId,\n axis: xAxisElement,\n };\n xAxisElement && tooltipOfAxislabels(tooltipProps);\n }\n return series;\n }\n\n function _handleFocus(\n event: React.FocusEvent<SVGCircleElement, Element>,\n seriesId: string,\n x: number | Date | string,\n xAxisCalloutData: string | undefined,\n circleId: string,\n xAxisCalloutAccessibilityData?: AccessibilityProps,\n ) {\n let cx = 0;\n let cy = 0;\n\n const targetRect = (event.target as SVGCircleElement).getBoundingClientRect();\n cx = targetRect.left + targetRect.width / 2;\n cy = targetRect.top + targetRect.height / 2;\n updatePosition(cx, cy);\n _uniqueCallOutID = circleId;\n const formattedData = x instanceof Date ? formatDateToLocaleString(x, props.culture, props.useUTC as boolean) : x;\n const found = findCalloutPoints(calloutPointsRef.current, x) as CustomizedCalloutData | undefined;\n // if no points need to be called out then don't show vertical line and callout card\n\n if (found) {\n d3Select(`#${_verticalLine}`)\n .attr('transform', () => `translate(${_xAxisScale(x) + _xBandwidth}, 0)`)\n .attr('visibility', 'visibility');\n _refArray.forEach((obj: RefArrayData) => {\n if (obj.index === seriesId) {\n setPopoverOpen(true);\n xAxisCalloutData ? setHoverXValue(xAxisCalloutData) : setHoverXValue('' + formattedData);\n setYValueHover(found.values);\n setStackCalloutProps(found!);\n setActivePoint(circleId);\n }\n });\n } else {\n setActivePoint(circleId);\n }\n }\n\n function _handleHover(\n x: number | Date | string,\n y: number,\n lineHeight: number,\n xAxisCalloutData: string | undefined,\n circleId: string,\n xAxisCalloutAccessibilityData: AccessibilityProps | undefined,\n mouseEvent: React.MouseEvent<SVGElement>,\n ) {\n mouseEvent?.persist();\n const formattedData = x instanceof Date ? formatDateToLocaleString(x, props.culture, props.useUTC as boolean) : x;\n const found = findCalloutPoints(calloutPointsRef.current, x) as CustomizedCalloutData | undefined;\n // if no points need to be called out then don't show vertical line and callout card\n\n if (found) {\n d3Select(`#${_verticalLine}`)\n .attr('transform', () => `translate(${_xAxisScale(x) + _xBandwidth}, ${_yAxisScale(y)})`)\n .attr('visibility', 'visibility')\n .attr('y2', `${lineHeight - _yAxisScale(y)}`);\n\n if (_uniqueCallOutID !== circleId) {\n _uniqueCallOutID = circleId;\n updatePosition(mouseEvent.clientX, mouseEvent.clientY);\n xAxisCalloutData ? setHoverXValue(xAxisCalloutData) : setHoverXValue('' + formattedData);\n setYValueHover(found.values);\n setStackCalloutProps(found!);\n setActivePoint(circleId);\n }\n } else {\n setActivePoint(circleId);\n }\n }\n\n /**\n * Screen readers announce an element as clickable if the onClick attribute is set.\n * This function sets the attribute only when a click event handler is provided.*/\n\n function _getClickHandler(func?: () => void): { onClick?: () => void } {\n if (func) {\n return {\n onClick: func,\n };\n }\n\n return {};\n }\n\n function _handleMouseOut() {\n d3Select(`#${_verticalLine}`).attr('visibility', 'hidden');\n }\n\n function _handleChartMouseLeave() {\n _uniqueCallOutID = null;\n setActivePoint('');\n if (isPopoverOpen) {\n setPopoverOpen(false);\n }\n }\n\n /**\n * This function checks if the given legend is highlighted or not.\n * A legend can be highlighted in 2 ways:\n * 1. selection: if the user clicks on it\n * 2. hovering: if there is no selected legend and the user hovers over it*/\n\n function _legendHighlighted(legend: string): boolean {\n return _getHighlightedLegend().includes(legend);\n }\n\n /**\n * This function checks if none of the legends is selected or hovered.*/\n\n function _noLegendHighlighted(): boolean {\n return _getHighlightedLegend().length === 0;\n }\n\n function _getHighlightedLegend(): string[] {\n return selectedLegends.length > 0 ? selectedLegends : activeLegend ? [activeLegend] : [];\n }\n\n function _getAriaLabel(seriesIndex: number, pointIndex: number): string {\n const series = _points[seriesIndex];\n const point = series.data[pointIndex];\n const formattedDate =\n point.x instanceof Date ? formatDateToLocaleString(point.x, props.culture, props.useUTC as boolean) : point.x;\n const xValue = point.xAxisCalloutData || formattedDate;\n const legend = series.legend;\n const yValue = point.yAxisCalloutData || point.y;\n return point.callOutAccessibilityData?.ariaLabel || `${xValue}. ${legend}, ${yValue}.`;\n }\n\n function _isChartEmpty(): boolean {\n return !(\n props.data &&\n props.data.scatterChartData &&\n props.data.scatterChartData.length > 0 &&\n props.data.scatterChartData.filter((item: ScatterChartPoints) => item.data.length).length > 0\n );\n }\n\n const { legendProps, tickValues, tickFormat } = props;\n _points = _injectIndexPropertyInScatterChartData(props.data.scatterChartData);\n\n let points = _points as ScatterChartPoints[];\n if (legendProps && !!legendProps.canSelectMultipleLegends) {\n points = selectedLegendPoints.length >= 1 ? selectedLegendPoints : _points;\n calloutPointsRef.current = calloutData(points);\n }\n\n let legendBars = null;\n // reduce computation cost by only creating legendBars\n // if when hideLegend is false.\n // NOTE: they are rendered only when hideLegend is false in CartesianChart.\n if (!props.hideLegend && !_isTextMode.current) {\n legendBars = _createLegends(_points!); // ToDo: Memoize legends to improve performance.\n }\n const calloutProps = {\n YValueHover: yValueHover,\n hoverXValue,\n descriptionMessage:\n props.getCalloutDescriptionMessage && stackCalloutProps\n ? props.getCalloutDescriptionMessage(stackCalloutProps)\n : undefined,\n 'data-is-focusable': true,\n xAxisCalloutAccessibilityData,\n ...props.calloutProps,\n clickPosition,\n isPopoverOpen,\n isCalloutForStack: true,\n culture: props.culture,\n isCartesian: true,\n };\n const tickParams = {\n tickValues,\n tickFormat,\n };\n\n const xAxisLabels: string[] = _points\n .map((point: ScatterChartDataWithIndex) => point.data.map((dp: ScatterChartDataPoint) => dp.x as string))\n .flat();\n\n _xAxisLabels = [...new Set(xAxisLabels)];\n\n // Compute unique y axis labels for string y axis\n const _yAxisLabels: string[] = _getOrderedYAxisLabels();\n\n return !_isChartEmpty() ? (\n <CartesianChart\n {...props}\n chartTitle={props.data.chartTitle}\n points={points}\n chartType={ChartTypes.ScatterChart}\n calloutProps={calloutProps}\n tickParams={tickParams}\n legendBars={legendBars}\n getmargins={_getMargins}\n getGraphData={_initializeScatterChartData}\n xAxisType={_xAxisType}\n yAxisType={_yAxisType}\n // Pass stringDatasetForYAxisDomain only if y axis is string\n {...(_yAxisType === YAxisType.StringAxis ? { stringDatasetForYAxisDomain: _yAxisLabels } : {})}\n getMinMaxOfYAxis={_getNumericMinMaxOfY}\n getDomainNRangeValues={_getDomainNRangeValues}\n createYAxis={createNumericYAxis}\n createStringYAxis={createStringYAxis}\n onChartMouseLeave={_handleChartMouseLeave}\n enableFirstRenderOptimization={_firstRenderOptimization}\n datasetForXAxisDomain={_xAxisLabels}\n componentRef={cartesianChartRef}\n {...(_isScatterPolarRef.current ? { yMaxValue: 1, yMinValue: -1 } : {})}\n /* eslint-disable react/jsx-no-bind */\n // eslint-disable-next-line react/no-children-prop\n children={(props: ChildProps) => {\n _xAxisScale = props.xScale!;\n _yAxisScale = props.yScalePrimary!;\n return (\n <>\n <g>\n <line\n x1={0}\n y1={0}\n x2={0}\n y2={props.containerHeight}\n stroke={'#323130'}\n id={_verticalLine}\n visibility={'hidden'}\n strokeDasharray={'5,5'}\n />\n <g>{renderSeries}</g>\n </g>\n </>\n );\n }}\n />\n ) : (\n <div id={_emptyChartId} role={'alert'} style={{ opacity: '0' }} aria-label={'Graph has no data to display'} />\n );\n});\nScatterChart.displayName = 'ScatterChart';\n"],"names":["React","useScatterChartStyles","select","d3Select","Legends","max","d3Max","min","d3Min","useId","areArraysEqual","createNumericYAxis","createStringYAxis","getDomainPaddingForMarkers","domainRangeOfXStringAxis","findNumericMinMaxOfY","YAxisType","isTextMode","isScatterPolarSeries","isPlottable","getRangeForScatterMarkerSize","domainRangeOfDateForAreaLineScatterVerticalBarCharts","domainRangeOfNumericForAreaLineScatterCharts","sortAxisCategories","findCalloutPoints","CartesianChart","tokens","calloutData","ChartTypes","XAxisTypes","tooltipOfAxislabels","getTypeOfAxis","getNextColor","getColorFromToken","renderScatterPolarCategoryLabels","formatDateToLocaleString","useImageExport","ScatterChart","forwardRef","props","forwardedRef","_circleId","_seriesId","_verticalLine","_tooltipId","_firstRenderOptimization","_emptyChartId","_points","_injectIndexPropertyInScatterChartData","data","scatterChartData","_xAxisScale","_yAxisScale","_uniqueCallOutID","_refArray","margins","renderSeries","_xAxisLabels","xAxisCalloutAccessibilityData","_xBandwidth","cartesianChartRef","legendsRef","_legendsRef","componentRef","hideLegend","classes","hoverXValue","setHoverXValue","useState","activeLegend","setActiveLegend","yValueHover","setYValueHover","selectedLegendPoints","setSelectedLegendPoints","isSelectedLegend","setIsSelectedLegend","activePoint","setActivePoint","stackCalloutProps","setStackCalloutProps","clickPosition","setClickPosition","x","y","isPopoverOpen","setPopoverOpen","selectedLegends","setSelectedLegends","legendProps","prevSelectedLegendsRef","useRef","undefined","_isTextMode","_isScatterPolarRef","useEffect","current","_xAxisType","length","StringAxis","_yAxisType","NumericAxis","pointsRef","calloutPointsRef","height","width","map","item","index","color","updatePosition","newX","newY","threshold","distance","Math","sqrt","pow","_getNumericMinMaxOfY","points","yAxisType","startValue","endValue","yPadding","yScaleType","start","end","_getDomainNRangeValues","chartType","isRTL","xAxisType","barWidth","tickValues","domainNRangeValue","xScaleType","DateAxis","_getMargins","_margins","_initializeScatterChartData","xScale","yScale","containerHeight","containerWidth","xElement","_createPlot","_onHoverCardHide","_createLegends","isLegendMultiSelectEnabled","canSelectMultipleLegends","mapLegendToPoints","forEach","point","legend","push","legendDataItems","Object","entries","legendTitle","representativePoint","title","onMouseOutAction","hoverAction","_handleChartMouseLeave","legendShape","shape","legends","enabledWrapLines","enabledLegendsWrapLines","overflowText","legendsOverflowText","onLegendHoverCardLeave","onChange","_onLegendSelectionChange","legendRef","_getOrderedYAxisLabels","shouldOrderYAxisLabelsByCategoryOrder","yAxisCategoryOrder","yLabelsSet","Set","i","Array","isArray","d","add","from","_mapCategoryToValues","categoryToValues","legendsSelected","event","currentLegend","slice","_getPointFill","seriesColor","pointId","pointIndex","isLastPoint","colorNeutralBackground1","series","bandwidth","minMarkerSize","markerSize","maxMarkerSize","isContinuousXY","extraMaxPixels","yScalePrimary","pointsForSeries","legendVal","verticaLineHeight","bottom","j","xAxisCalloutData","xPoint","yPoint","seriesId","circleId","pointMarkerSize","minPixel","maxPixel","circleRadius","isLegendSelected","_legendHighlighted","_noLegendHighlighted","currentPointHidden","hideNonActiveDots","text","circle","id","key","r","cx","cy","data-is-focusable","onMouseOver","_handleHover","onMouseMove","onMouseOut","_handleMouseOut","onFocus","_handleFocus","onBlur","_getClickHandler","onDataPointClick","opacity","fill","stroke","role","aria-label","_getAriaLabel","tabIndex","className","markerLabel","xAxisScale","yAxisScale","lineOptions","g","showXAxisLablesTooltip","document","getElementById","remove","e","wrapXAxisLables","xAxisElement","call","tooltipProps","tooltipCls","tooltip","axis","targetRect","target","getBoundingClientRect","left","top","formattedData","Date","culture","useUTC","found","attr","obj","values","lineHeight","mouseEvent","persist","clientX","clientY","func","onClick","_getHighlightedLegend","includes","seriesIndex","formattedDate","xValue","yValue","yAxisCalloutData","callOutAccessibilityData","ariaLabel","_isChartEmpty","filter","tickFormat","legendBars","calloutProps","YValueHover","descriptionMessage","getCalloutDescriptionMessage","isCalloutForStack","isCartesian","tickParams","xAxisLabels","dp","flat","_yAxisLabels","chartTitle","getmargins","getGraphData","stringDatasetForYAxisDomain","getMinMaxOfYAxis","getDomainNRangeValues","createYAxis","onChartMouseLeave","enableFirstRenderOptimization","datasetForXAxisDomain","yMaxValue","yMinValue","children","line","x1","y1","x2","y2","visibility","strokeDasharray","div","style","displayName"],"mappings":"AAAA;AAEA,YAAYA,WAAW,QAAQ;AAE/B,SAASC,qBAAqB,QAAQ,iCAAiC;AAEvE,SAASC,UAAUC,QAAQ,QAAQ,eAAe;AAClD,SAAiBC,OAAO,QAAQ,mBAAmB;AACnD,SAASC,OAAOC,KAAK,EAAEC,OAAOC,KAAK,QAAQ,WAAW;AACtD,SAASC,KAAK,QAAQ,4BAA4B;AAElD,SACEC,cAAc,EACdC,kBAAkB,EAClBC,iBAAiB,EACjBC,0BAA0B,EAC1BC,wBAAwB,EACxBC,oBAAoB,EAEpBC,SAAS,EACTC,UAAU,EACVC,oBAAoB,EACpBC,WAAW,EACXC,4BAA4B,EAC5BC,oDAAoD,EACpDC,4CAA4C,EAC5CC,kBAAkB,EAClBC,iBAAiB,QACZ,wBAAwB;AAC/B,SAEEC,cAAc,QAQT,cAAc;AACrB,SAASC,MAAM,QAAQ,wBAAwB;AAC/C,SACEC,WAAW,EACXC,UAAU,EACVC,UAAU,EACVC,mBAAmB,EACnBC,aAAa,EACbC,YAAY,EACZC,iBAAiB,QACZ,wBAAwB;AAE/B,SAASC,gCAAgC,QAAQ,qCAAqC;AACtF,SAASC,wBAAwB,QAAQ,4BAA4B;AACrE,SAASC,cAAc,QAAQ,wBAAwB;AAMvD,8FAA8F;AAC9F;;;CAGC,GACD,OAAO,MAAMC,6BAA2DrC,MAAMsC,UAAU,CAGtF,CAACC,OAAOC;QAgC+DD,oBAanEA;IA5CJ,MAAME,YAAoBhC,MAAM;IAChC,MAAMiC,YAAoBjC,MAAM;IAChC,MAAMkC,gBAAwBlC,MAAM;IACpC,MAAMmC,aAAqBnC,MAAM;IACjC,MAAMoC,2BAA2B;IACjC,MAAMC,gBAAwBrC,MAAM;IACpC,IAAIsC,UAAuCC,uCAAuCT,MAAMU,IAAI,CAACC,gBAAgB;IAC7G,8DAA8D;IAC9D,IAAIC,cAAmB;IACvB,8DAA8D;IAC9D,IAAIC,cAAmB;IACvB,IAAIC,mBAAkC;IACtC,IAAIC,YAA4B,EAAE;IAClC,IAAIC;IACJ,IAAIC;IACJ,IAAIC,eAAyB,EAAE;IAC/B,IAAIC,gCAAoD,CAAC;IACzD,IAAIC,cAAc;IAClB,MAAM,EAAEC,iBAAiB,EAAEC,YAAYC,WAAW,EAAE,GAAG1B,eAAeG,MAAMwB,YAAY,EAAExB,MAAMyB,UAAU;IAC1G,MAAMC,UAAUhE,sBAAsBsC;IAEtC,MAAM,CAAC2B,aAAaC,eAAe,GAAGnE,MAAMoE,QAAQ,CAAkB;IACtE,MAAM,CAACC,cAAcC,gBAAgB,GAAGtE,MAAMoE,QAAQ,CAAS;IAC/D,MAAM,CAACG,aAAaC,eAAe,GAAGxE,MAAMoE,QAAQ,CAAgB,EAAE;IACtE,8DAA8D;IAC9D,MAAM,CAACK,sBAAsBC,wBAAwB,GAAG1E,MAAMoE,QAAQ,CAAQ,EAAE;IAChF,MAAM,CAACO,kBAAkBC,oBAAoB,GAAG5E,MAAMoE,QAAQ,CAAU;IACxE,MAAM,CAACS,aAAaC,eAAe,GAAG9E,MAAMoE,QAAQ,CAAS;IAC7D,MAAM,CAACW,mBAAmBC,qBAAqB,GAAGhF,MAAMoE,QAAQ;IAChE,MAAM,CAACa,eAAeC,iBAAiB,GAAGlF,MAAMoE,QAAQ,CAAC;QAAEe,GAAG;QAAGC,GAAG;IAAE;IACtE,MAAM,CAACC,eAAeC,eAAe,GAAGtF,MAAMoE,QAAQ,CAAC;IACvD,MAAM,CAACmB,iBAAiBC,mBAAmB,GAAGxF,MAAMoE,QAAQ,CAAW7B,EAAAA,qBAAAA,MAAMkD,WAAW,cAAjBlD,yCAAAA,mBAAmBgD,eAAe,KAAI,EAAE;IAC/G,MAAMG,yBAAyB1F,MAAM2F,MAAM,CAAuBC;IAClE,MAAMC,cAAc7F,MAAM2F,MAAM,CAAC;IACjC,MAAMG,qBAAqB9F,MAAM2F,MAAM,CAAC;IAExC3F,MAAM+F,SAAS,CAAC;YAGoCxD,oBAIjBA;QANjC,IACEmD,uBAAuBM,OAAO,IAC9B,CAACtF,eAAegF,uBAAuBM,OAAO,GAAEzD,qBAAAA,MAAMkD,WAAW,cAAjBlD,yCAAAA,mBAAmBgD,eAAe,GAClF;gBACmBhD;YAAnBiD,mBAAmBjD,EAAAA,sBAAAA,MAAMkD,WAAW,cAAjBlD,0CAAAA,oBAAmBgD,eAAe,KAAI,EAAE;QAC7D;QACAG,uBAAuBM,OAAO,IAAGzD,sBAAAA,MAAMkD,WAAW,cAAjBlD,0CAAAA,oBAAmBgD,eAAe;IACrE,GAAG;SAAChD,sBAAAA,MAAMkD,WAAW,cAAjBlD,0CAAAA,oBAAmBgD,eAAe;KAAC;IAEvC,MAAMU,aACJ1D,MAAMU,IAAI,CAACC,gBAAgB,IAC3BX,MAAMU,IAAI,CAACC,gBAAgB,CAAEgD,MAAM,GAAG,KACtC3D,MAAMU,IAAI,CAACC,gBAAgB,AAAC,CAAC,EAAE,CAACD,IAAI,IACpCV,MAAMU,IAAI,CAACC,gBAAgB,AAAC,CAAC,EAAE,CAACD,IAAI,CAACiD,MAAM,GAAG,IACzCnE,cAAcQ,MAAMU,IAAI,CAACC,gBAAgB,AAAC,CAAC,EAAE,CAACD,IAAI,CAAC,EAAE,CAACkC,CAAC,EAAE,QAC1DtD,WAAWsE,UAAU;IAE3B,yCAAyC;IACzC,MAAMC,aACJ7D,MAAMU,IAAI,CAACC,gBAAgB,IAC3BX,MAAMU,IAAI,CAACC,gBAAgB,CAACgD,MAAM,GAAG,KACrC3D,MAAMU,IAAI,CAACC,gBAAgB,CAAC,EAAE,CAACD,IAAI,IACnCV,MAAMU,IAAI,CAACC,gBAAgB,CAAC,EAAE,CAACD,IAAI,CAACiD,MAAM,GAAG,IACzC,OAAO3D,MAAMU,IAAI,CAACC,gBAAgB,CAAC,EAAE,CAACD,IAAI,CAAC,EAAE,CAACmC,CAAC,KAAK,WAClDpE,UAAUmF,UAAU,GACpBnF,UAAUqF,WAAW,GACvBrF,UAAUqF,WAAW;IAE3B,MAAMC,YAAYtG,MAAM2F,MAAM,CAAmC,EAAE;IACnE,MAAMY,mBAAmBvG,MAAM2F,MAAM,CAAgC,CAAC;IACtE3F,MAAM+F,SAAS,CAAC;QACd;;KAEC,GAED,IAAIhD,YAAYC,uCAAuCT,MAAMU,IAAI,CAACC,gBAAgB,KAAKX,MAAMU,IAAI,KAAKF,SAAS;YAC7GuD,UAAUN,OAAO,GAAGhD,uCAAuCT,MAAMU,IAAI,CAACC,gBAAgB;YACtFqD,iBAAiBP,OAAO,GAAGrE,YAAY2E,UAAUN,OAAO;QAC1D;IACF,GAAG;QAACzD,MAAMiE,MAAM;QAAEjE,MAAMkE,KAAK;QAAElE,MAAMU,IAAI;QAAEF;KAAQ;IAEnD,SAASC,uCACPE,gBAAuC;QAEvC,OAAOA,mBACHA,iBAAiBwD,GAAG,CAAC,CAACC,MAA0BC;YAC9C,IAAIC;YACJ,IAAI,OAAOF,KAAKE,KAAK,KAAK,aAAa;gBACrCA,QAAQ7E,aAAa4E,OAAO;YAC9B,OAAO;gBACLC,QAAQ5E,kBAAkB0E,KAAKE,KAAK;YACtC;YACA,OAAO;gBACL,GAAGF,IAAI;gBACPC,OAAO,CAAC;gBACRC;YACF;QACF,KACA,EAAE;IACR;IAEA,SAASC,eAAeC,IAAY,EAAEC,IAAY;QAChD,MAAMC,YAAY,GAAG,+BAA+B;QACpD,MAAM,EAAE9B,CAAC,EAAEC,CAAC,EAAE,GAAGH;QACjB,+BAA+B;QAC/B,MAAMiC,WAAWC,KAAKC,IAAI,CAACD,KAAKE,GAAG,CAACN,OAAO5B,GAAG,KAAKgC,KAAKE,GAAG,CAACL,OAAO5B,GAAG;QACtE,+EAA+E;QAC/E,IAAI8B,WAAWD,WAAW;YACxB/B,iBAAiB;gBAAEC,GAAG4B;gBAAM3B,GAAG4B;YAAK;YACpC1B,eAAe;QACjB;IACF;IAEA,SAASgC,qBACPC,MAA4B,EAC5BC,SAAqB;QAErB,MAAM,EAAEC,UAAU,EAAEC,QAAQ,EAAE,GAAG3G,qBAAqBwG,QAAQC;QAC9D,MAAMG,WAAW9G,2BAA2B4G,YAAYC,UAAUnF,MAAMqF,UAAU;QAElF,OAAO;YACLH,YAAYA,aAAaE,SAASE,KAAK;YACvCH,UAAUA,WAAWC,SAASG,GAAG;QACnC;IACF;IAEA,SAASC,uBACPR,MAAW,EACXhE,OAAgB,EAChBkD,KAAa,EACbuB,SAAqB,EACrBC,KAAc,EACdC,SAAqB,EACrBC,QAAgB,EAChBC,UAAyC;QAEzC,IAAIC;QACJ,IAAIH,cAAcrG,WAAWwE,WAAW,EAAE;YACxCgC,oBAAoB/G,6CAClBiG,QACAhE,SACAkD,OACAwB,OACA1F,MAAM+F,UAAU,EAChB;QAEJ,OAAO,IAAIJ,cAAcrG,WAAW0G,QAAQ,EAAE;YAC5CF,oBAAoBhH,qDAClBkG,QACAhE,SACAkD,OACAwB,OACAG,YACAJ;QAEJ,OAAO;YACLK,oBAAoBvH,yBAAyByC,SAASkD,OAAOwB;QAC/D;QACA,OAAOI;IACT;IAEA,SAASG,YAAYC,QAAiB;QACpClF,UAAUkF;IACZ;IAEA,SAASC,4BACPC,MAAmB,EACnBC,MAAmB,EACnBC,eAAuB,EACvBC,cAAsB,EACtBC,QAA2B;QAE3B5F,cAAcwF;QACdvF,cAAcwF;QACd/C,YAAYG,OAAO,GAAG/E,WAAW8B;QACjC+C,mBAAmBE,OAAO,GAAG9E,qBAAqB6B;QAClDS,eAAewF,YAAYD,UAAWF;IACxC;IAEA,SAASI;QACPvE,wBAAwB,EAAE;QAC1BE,oBAAoB;IACtB;IAEA,SAASsE,eAAejG,IAAiC;QACvD,MAAM,EAAEwC,WAAW,EAAE,GAAGlD;QACxB,MAAM4G,6BAA6B,CAAC,CAAE1D,CAAAA,eAAe,CAAC,CAACA,YAAY2D,wBAAwB,AAAD;QAC1F,MAAMC,oBAAiE,CAAC;QACxEpG,KAAKqG,OAAO,CAAC,CAACC;YACZ,IAAIA,MAAMC,MAAM,EAAE;gBAChB,IAAI,CAACH,iBAAiB,CAACE,MAAMC,MAAM,CAAC,EAAE;oBACpCH,iBAAiB,CAACE,MAAMC,MAAM,CAAC,GAAG,EAAE;gBACtC;gBACAH,iBAAiB,CAACE,MAAMC,MAAM,CAAC,CAACC,IAAI,CAACF;YACvC;QACF;QACA,MAAMG,kBAA4BC,OAAOC,OAAO,CAACP,mBAAmB3C,GAAG,CAAC,CAAC,CAACmD,aAAatC,OAAO;YAC5F,MAAMuC,sBAAsBvC,MAAM,CAAC,EAAE;YACrC,qDAAqD;YACrD,MAAMiC,SAAiB;gBACrBO,OAAOF;gBACPhD,OAAOiD,oBAAoBjD,KAAK;gBAChCmD,kBAAkB;oBAChB1F,gBAAgB;gBAClB;gBACA2F,aAAa;oBACXC;oBACA5F,gBAAgBuF;gBAClB;gBACA,GAAIC,oBAAoBK,WAAW,IAAI;oBACrCC,OAAON,oBAAoBK,WAAW;gBACxC,CAAC;YACH;YACA,OAAOX;QACT;QAEA,qBACE,oBAACpJ;YACCiK,SAAS;mBAAIX;aAAgB;YAC7BY,kBAAkB/H,MAAMgI,uBAAuB;YAC/CC,cAAcjI,MAAMkI,mBAAmB;YACtC,GAAItB,8BAA8B;gBAAEuB,wBAAwBzB;YAAiB,CAAC;YAC9E,GAAG1G,MAAMkD,WAAW;YACrBF,iBAAiBA;YACjBoF,UAAUC;YACVC,WAAW/G;;IAGjB;IAEA,SAASgH;QACP,MAAMC,wCACJ3E,eAAepF,UAAUmF,UAAU,IAAI5D,MAAMyI,kBAAkB,KAAK;QACtE,IAAI,CAACD,uCAAuC;YAC1C,0FAA0F;YAC1F,MAAME,aAAa,IAAIC;YACvB,IAAK,IAAIC,IAAIpI,QAAQmD,MAAM,GAAG,GAAGiF,KAAK,GAAGA,IAAK;gBAC5C,MAAM5B,QAAQxG,OAAO,CAACoI,EAAE;gBACxB,IAAI5B,MAAMtG,IAAI,IAAImI,MAAMC,OAAO,CAAC9B,MAAMtG,IAAI,GAAG;oBAC3C,KAAK,MAAMqI,KAAK/B,MAAMtG,IAAI,CAAE;wBAC1B,IAAI,OAAOqI,EAAElG,CAAC,KAAK,UAAU;4BAC3B6F,WAAWM,GAAG,CAACD,EAAElG,CAAC;wBACpB;oBACF;gBACF;YACF;YACA,OAAOgG,MAAMI,IAAI,CAACP;QACpB;QAEA,OAAO1J,mBAAmBkK,wBAAwBlJ,MAAMyI,kBAAkB;IAC5E;IAEA,SAASS;QACP,MAAMC,mBAA6C,CAAC;QACpD3I,QAAQuG,OAAO,CAACC,CAAAA;YACd,IAAIA,MAAMtG,IAAI,IAAImI,MAAMC,OAAO,CAAC9B,MAAMtG,IAAI,GAAG;gBAC3CsG,MAAMtG,IAAI,CAACqG,OAAO,CAACgC,CAAAA;oBACjB,IAAI,OAAOA,EAAElG,CAAC,KAAK,UAAU;wBAC3B,IAAI,CAACsG,gBAAgB,CAACJ,EAAElG,CAAC,CAAC,EAAE;4BAC1BsG,gBAAgB,CAACJ,EAAElG,CAAC,CAAC,GAAG,EAAE;wBAC5B;wBACA,IAAI,OAAOkG,EAAEnG,CAAC,KAAK,UAAU;4BAC3BuG,gBAAgB,CAACJ,EAAElG,CAAC,CAAC,CAACqE,IAAI,CAAC6B,EAAEnG,CAAC;wBAChC;oBACF;gBACF;YACF;QACF;QACA,OAAOuG;IACT;IAEA,SAASd,yBACPe,eAAyB,EACzBC,KAA0C,EAC1CC,aAAsB;YAElBtJ,oBAMAA;QANJ,KAAIA,qBAAAA,MAAMkD,WAAW,cAAjBlD,yCAAAA,mBAAmB6G,wBAAwB,EAAE;YAC/C5D,mBAAmBmG;QACrB,OAAO;YACLnG,mBAAmBmG,gBAAgBG,KAAK,CAAC,CAAC;QAC5C;QAEA,KAAIvJ,sBAAAA,MAAMkD,WAAW,cAAjBlD,0CAAAA,oBAAmBoI,QAAQ,EAAE;YAC/BpI,MAAMkD,WAAW,CAACkF,QAAQ,CAACgB,iBAAiBC,OAAOC;QACrD;IACF;IAEA,SAASE,cAAcC,WAAmB,EAAEC,OAAe,EAAEC,UAAkB,EAAEC,WAAoB;QACnG,IAAItH,gBAAgBoH,SAAS;YAC3B,OAAOvK,OAAO0K,uBAAuB;QACvC,OAAO;YACL,OAAOJ;QACT;IACF;IAEA,SAAShD,YAAYD,QAAoB,EAAEF,eAAuB;QAChE,MAAMwD,SAAuB,EAAE;QAC/B,IAAI1H,kBAAkB;YACpB5B,UAAU0B;QACZ,OAAO;YACL1B,UAAUC,uCAAuCT,MAAMU,IAAI,CAACC,gBAAgB;QAC9E;QAEA,IAAI+C,eAAepE,WAAWsE,UAAU,EAAE;YACxCxC,cAAcR,YAAYmJ,SAAS,KAAK;QAC1C;YAGE9L;QADF,MAAM+L,gBACJ/L,CAAAA,SAAAA,MAAMuC,SAAS,CAACwG;YACd,OAAO/I,MAAM+I,MAAMtG,IAAI,EAA6B,CAAC0D;gBACnD,OAAOA,KAAK6F,UAAU;YACxB;QACF,gBAJAhM,oBAAAA,SAIM;YAENF;QADF,MAAMmM,gBACJnM,CAAAA,SAAAA,MAAMyC,SAAS,CAACwG;YACd,OAAOjJ,MAAMiJ,MAAMtG,IAAI,EAA6B,CAAC0D;gBACnD,OAAOA,KAAK6F,UAAU;YACxB;QACF,gBAJAlM,oBAAAA,SAIM;QACR,MAAMoM,iBAAiBzG,eAAepE,WAAWsE,UAAU,IAAIC,eAAepF,UAAUmF,UAAU;QAClG,MAAMwG,iBAAiBD,iBACnBtL,6BAA6B;YAC3B6B,MAAMF;YACN4F,QAAQxF;YACRyJ,eAAexJ;YACfkF,YAAY/F,MAAM+F,UAAU;YAC5BV,YAAYrF,MAAMqF,UAAU;QAC9B,KACA;QAEJ,IAAK,IAAIuD,IAAIpI,QAAQmD,MAAM,GAAG,GAAGiF,KAAK,GAAGA,IAAK;YAC5C,MAAM0B,kBAAgC,EAAE;YAExC,MAAMC,YAAoB/J,OAAO,CAACoI,EAAE,CAAC3B,MAAM;YAC3C,MAAMwC,cAAsBjJ,OAAO,CAACoI,EAAE,CAACtE,KAAK;YAC5C,MAAMkG,oBAAoBlE,kBAAkBtF,QAAQyJ,MAAM,GAAI;YAE9D,IAAK,IAAIC,IAAI,GAAGA,IAAIlK,OAAO,CAACoI,EAAE,CAAClI,IAAI,CAACiD,MAAM,EAAE+G,IAAK;oBACmBlK,WA6BrDA;gBA7Bb,MAAM,EAAEoC,CAAC,EAAEC,CAAC,EAAE8H,gBAAgB,EAAExJ,6BAA6B,EAAE,GAAGX,oBAAAA,+BAAAA,YAAAA,OAAS,CAACoI,EAAE,cAAZpI,gCAAAA,UAAcE,IAAI,CAACgK,EAAE;gBACvF,MAAME,SAAShK,wBAAAA,kCAAAA,YAAcgC;gBAC7B,oCAAoC;gBACpC,MAAMiI,SACJhH,eAAepF,UAAUmF,UAAU,GAC/B/C,CAAAA,wBAAAA,kCAAAA,YAAcgC,MAAMhC,CAAAA,CAAAA,wBAAAA,kCAAAA,YAAakJ,SAAS,IAAGlJ,YAAYkJ,SAAS,KAAK,IAAI,CAAA,IAC3ElJ,wBAAAA,kCAAAA,YAAcgC;gBACpB,IAAI,CAACjE,YAAYgM,QAAQC,SAAS;oBAChC;gBACF;gBACA,MAAMC,WAAW,GAAG3K,UAAU,CAAC,EAAEyI,EAAE,CAAC,EAAE8B,GAAG;gBACzC,MAAMK,WAAW,GAAG7K,UAAU,CAAC,EAAE0I,EAAE,CAAC,EAAE8B,GAAG;gBACzC,MAAMM,kBAAkB,AAACxK,OAAO,CAACoI,EAAE,CAAClI,IAAI,CAACgK,EAAE,CAA2BT,UAAU;gBAChF,MAAMgB,WAAW;gBACjB,MAAMC,WAAW;gBACjB,IAAIC,eAAe7I,gBAAgByI,WAAW,IAAI;gBAElD,IAAIC,iBAAiB;oBACnB,IAAIb,kBAAkBD,kBAAkB,GAAG;wBACzCiB,eAAe,AAACH,kBAAkBZ,iBAAkBF;oBACtD,OAAO,IAAI,CAACC,kBAAkBD,kBAAkBF,eAAe;wBAC7DmB,eACEF,WAAW,AAAED,CAAAA,kBAAkBhB,aAAY,IAAME,CAAAA,gBAAgBF,aAAY,IAAOkB,CAAAA,WAAWD,QAAO;oBAC1G;gBACF;gBAEA,MAAMG,mBAA4BC,mBAAmBd,cAAce,0BAA0BlJ;gBAE7F,MAAMmJ,qBAAqB/K,OAAO,CAACoI,EAAE,CAAC4C,iBAAiB,IAAIlJ,gBAAgByI;gBAC3E,MAAMU,OAAOjL,oBAAAA,+BAAAA,mBAAAA,OAAS,CAACoI,EAAE,CAAClI,IAAI,CAACgK,EAAE,cAApBlK,uCAAAA,iBAAsBiL,IAAI;gBACvC,IAAI,CAACnI,YAAYG,OAAO,EAAE;oBACxB6G,gBAAgBpD,IAAI,eAClB,wDACE,oBAACwE;wBACCC,IAAIZ;wBACJa,KAAKb;wBACLc,GAAGjH,KAAK9G,GAAG,CAACqN,cAAc;wBAC1BW,IAAIlB,SAASxJ;wBACb2K,IAAIlB;wBACJmB,qBAAmBZ;wBACnBa,aAAa,CAAC5C,QACZ6C,aACEtJ,GACAC,GACA2H,mBACAG,kBACAI,UACA5J,+BACAkI;wBAGJ8C,aAAa,CAAC9C,QACZ6C,aACEtJ,GACAC,GACA2H,mBACAG,kBACAI,UACA5J,+BACAkI;wBAGJ+C,YAAYC;wBACZC,SAASjD,CAAAA,QACPkD,aAAalD,OAAOyB,UAAUlI,GAAG+H,kBAAkBI,UAAU5J;wBAE/DqL,QAAQH;wBACP,GAAGI,iBAAiBjM,OAAO,CAACoI,EAAE,CAAClI,IAAI,CAACgK,EAAE,CAACgC,gBAAgB,CAAC;wBACzDC,SAASvB,oBAAoB,CAACG,qBAAqB,IAAI;wBACvDqB,MAAMpD,cAAcC,aAAasB,UAAUL,GAAG;wBAC9CmC,QAAQpD;wBACRqD,MAAK;wBACLC,cAAYC,cAAcpE,GAAG8B;wBAC7BuC,UAAU7B,mBAAmB,IAAI/H;wBACjC,KAEDoI,sBACC,oBAACA;wBACCG,KAAK,GAAGb,SAAS,MAAM,CAAC;wBACxBnI,GAAGgI,SAASxJ;wBACZyB,GAAGgI,SAASjG,KAAK9G,GAAG,CAACqN,eAAe,IAAI;wBACxC+B,WAAWxL,QAAQyL,WAAW;uBAE7B1B;gBAKX;YACF;YAEA,IAAIlI,mBAAmBE,OAAO,EAAE;oBAMZjD;gBALlB8J,gBAAgBpD,IAAI,IACfvH,iCAAiC;oBAClCyN,YAAYxM;oBACZyM,YAAYxM;oBACZqM,WAAWxL,QAAQyL,WAAW,IAAI;oBAClCG,WAAW,EAAG9M,oBAAAA,+BAAAA,aAAAA,OAAS,CAACoI,EAAE,cAAZpI,iCAAD,AAACA,WAA2C8M,WAAW;gBACtE;YAEJ;YAEAxD,OAAO5C,IAAI,eACT,oBAACqG;gBACC3B,KAAK,CAAC,OAAO,EAAEhD,GAAG;gBAClBkE,MAAK;gBACLC,cAAY,GAAGxC,UAAU,SAAS,EAAE3B,IAAI,EAAE,IAAI,EAAEpI,QAAQmD,MAAM,CAAC,MAAM,EAAEnD,OAAO,CAACoI,EAAE,CAAClI,IAAI,CAACiD,MAAM,CAAC,aAAa,CAAC;eAE3G2G;QAGP;QACA,mEAAmE;QACnE,IAAI,CAACtK,MAAMwN,sBAAsB,EAAE;YACjC,IAAI;gBACFC,SAASC,cAAc,CAACrN,eAAeoN,SAASC,cAAc,CAACrN,YAAasN,MAAM;YAClF,oCAAoC;YACtC,EAAE,OAAOC,GAAG,CAAC;QACf;QACA,4CAA4C;QAC5C,IAAI,CAAC5N,MAAM6N,eAAe,IAAI7N,MAAMwN,sBAAsB,EAAE;YAC1D,MAAMM,eAAelQ,SAAS4I,UAAUuH,IAAI,CAACnN;YAC7C,IAAI;gBACF6M,SAASC,cAAc,CAACrN,eAAeoN,SAASC,cAAc,CAACrN,YAAasN,MAAM;YAClF,oCAAoC;YACtC,EAAE,OAAOC,GAAG,CAAC;YACb,MAAMI,eAAe;gBACnBC,YAAYvM,QAAQwM,OAAO;gBAC3BvC,IAAItL;gBACJ8N,MAAML;YACR;YACAA,gBAAgBvO,oBAAoByO;QACtC;QACA,OAAOlE;IACT;IAEA,SAASyC,aACPlD,KAAkD,EAClDyB,QAAgB,EAChBlI,CAAyB,EACzB+H,gBAAoC,EACpCI,QAAgB,EAChB5J,6BAAkD;QAElD,IAAI2K,KAAK;QACT,IAAIC,KAAK;QAET,MAAMqC,aAAa,AAAC/E,MAAMgF,MAAM,CAAsBC,qBAAqB;QAC3ExC,KAAKsC,WAAWG,IAAI,GAAGH,WAAWlK,KAAK,GAAG;QAC1C6H,KAAKqC,WAAWI,GAAG,GAAGJ,WAAWnK,MAAM,GAAG;QAC1CM,eAAeuH,IAAIC;QACnBjL,mBAAmBiK;QACnB,MAAM0D,gBAAgB7L,aAAa8L,OAAO9O,yBAAyBgD,GAAG5C,MAAM2O,OAAO,EAAE3O,MAAM4O,MAAM,IAAehM;QAChH,MAAMiM,QAAQ5P,kBAAkB+E,iBAAiBP,OAAO,EAAEb;QAC1D,oFAAoF;QAEpF,IAAIiM,OAAO;YACTjR,SAAS,CAAC,CAAC,EAAEwC,eAAe,EACzB0O,IAAI,CAAC,aAAa,IAAM,CAAC,UAAU,EAAElO,YAAYgC,KAAKxB,YAAY,IAAI,CAAC,EACvE0N,IAAI,CAAC,cAAc;YACtB/N,UAAUgG,OAAO,CAAC,CAACgI;gBACjB,IAAIA,IAAI1K,KAAK,KAAKyG,UAAU;oBAC1B/H,eAAe;oBACf4H,mBAAmB/I,eAAe+I,oBAAoB/I,eAAe,KAAK6M;oBAC1ExM,eAAe4M,MAAMG,MAAM;oBAC3BvM,qBAAqBoM;oBACrBtM,eAAewI;gBACjB;YACF;QACF,OAAO;YACLxI,eAAewI;QACjB;IACF;IAEA,SAASmB,aACPtJ,CAAyB,EACzBC,CAAS,EACToM,UAAkB,EAClBtE,gBAAoC,EACpCI,QAAgB,EAChB5J,6BAA6D,EAC7D+N,UAAwC;QAExCA,uBAAAA,iCAAAA,WAAYC,OAAO;QACnB,MAAMV,gBAAgB7L,aAAa8L,OAAO9O,yBAAyBgD,GAAG5C,MAAM2O,OAAO,EAAE3O,MAAM4O,MAAM,IAAehM;QAChH,MAAMiM,QAAQ5P,kBAAkB+E,iBAAiBP,OAAO,EAAEb;QAC1D,oFAAoF;QAEpF,IAAIiM,OAAO;YACTjR,SAAS,CAAC,CAAC,EAAEwC,eAAe,EACzB0O,IAAI,CAAC,aAAa,IAAM,CAAC,UAAU,EAAElO,YAAYgC,KAAKxB,YAAY,EAAE,EAAEP,YAAYgC,GAAG,CAAC,CAAC,EACvFiM,IAAI,CAAC,cAAc,cACnBA,IAAI,CAAC,MAAM,GAAGG,aAAapO,YAAYgC,IAAI;YAE9C,IAAI/B,qBAAqBiK,UAAU;gBACjCjK,mBAAmBiK;gBACnBxG,eAAe2K,WAAWE,OAAO,EAAEF,WAAWG,OAAO;gBACrD1E,mBAAmB/I,eAAe+I,oBAAoB/I,eAAe,KAAK6M;gBAC1ExM,eAAe4M,MAAMG,MAAM;gBAC3BvM,qBAAqBoM;gBACrBtM,eAAewI;YACjB;QACF,OAAO;YACLxI,eAAewI;QACjB;IACF;IAEA;;kFAEgF,GAEhF,SAAS0B,iBAAiB6C,IAAiB;QACzC,IAAIA,MAAM;YACR,OAAO;gBACLC,SAASD;YACX;QACF;QAEA,OAAO,CAAC;IACV;IAEA,SAASjD;QACPzO,SAAS,CAAC,CAAC,EAAEwC,eAAe,EAAE0O,IAAI,CAAC,cAAc;IACnD;IAEA,SAASnH;QACP7G,mBAAmB;QACnByB,eAAe;QACf,IAAIO,eAAe;YACjBC,eAAe;QACjB;IACF;IAEA;;;;4EAI0E,GAE1E,SAASsI,mBAAmBpE,MAAc;QACxC,OAAOuI,wBAAwBC,QAAQ,CAACxI;IAC1C;IAEA;wEACsE,GAEtE,SAASqE;QACP,OAAOkE,wBAAwB7L,MAAM,KAAK;IAC5C;IAEA,SAAS6L;QACP,OAAOxM,gBAAgBW,MAAM,GAAG,IAAIX,kBAAkBlB,eAAe;YAACA;SAAa,GAAG,EAAE;IAC1F;IAEA,SAASkL,cAAc0C,WAAmB,EAAE/F,UAAkB;YAQrD3C;QAPP,MAAM8C,SAAStJ,OAAO,CAACkP,YAAY;QACnC,MAAM1I,QAAQ8C,OAAOpJ,IAAI,CAACiJ,WAAW;QACrC,MAAMgG,gBACJ3I,MAAMpE,CAAC,YAAY8L,OAAO9O,yBAAyBoH,MAAMpE,CAAC,EAAE5C,MAAM2O,OAAO,EAAE3O,MAAM4O,MAAM,IAAe5H,MAAMpE,CAAC;QAC/G,MAAMgN,SAAS5I,MAAM2D,gBAAgB,IAAIgF;QACzC,MAAM1I,SAAS6C,OAAO7C,MAAM;QAC5B,MAAM4I,SAAS7I,MAAM8I,gBAAgB,IAAI9I,MAAMnE,CAAC;QAChD,OAAOmE,EAAAA,kCAAAA,MAAM+I,wBAAwB,cAA9B/I,sDAAAA,gCAAgCgJ,SAAS,KAAI,GAAGJ,OAAO,EAAE,EAAE3I,OAAO,EAAE,EAAE4I,OAAO,CAAC,CAAC;IACxF;IAEA,SAASI;QACP,OAAO,CACLjQ,CAAAA,MAAMU,IAAI,IACVV,MAAMU,IAAI,CAACC,gBAAgB,IAC3BX,MAAMU,IAAI,CAACC,gBAAgB,CAACgD,MAAM,GAAG,KACrC3D,MAAMU,IAAI,CAACC,gBAAgB,CAACuP,MAAM,CAAC,CAAC9L,OAA6BA,KAAK1D,IAAI,CAACiD,MAAM,EAAEA,MAAM,GAAG,CAAA;IAEhG;IAEA,MAAM,EAAET,WAAW,EAAE2C,UAAU,EAAEsK,UAAU,EAAE,GAAGnQ;IAChDQ,UAAUC,uCAAuCT,MAAMU,IAAI,CAACC,gBAAgB;IAE5E,IAAIqE,SAASxE;IACb,IAAI0C,eAAe,CAAC,CAACA,YAAY2D,wBAAwB,EAAE;QACzD7B,SAAS9C,qBAAqByB,MAAM,IAAI,IAAIzB,uBAAuB1B;QACnEwD,iBAAiBP,OAAO,GAAGrE,YAAY4F;IACzC;IAEA,IAAIoL,aAAa;IACjB,sDAAsD;IACtD,+BAA+B;IAC/B,2EAA2E;IAC3E,IAAI,CAACpQ,MAAMyB,UAAU,IAAI,CAAC6B,YAAYG,OAAO,EAAE;QAC7C2M,aAAazJ,eAAenG,UAAW,gDAAgD;IACzF;IACA,MAAM6P,eAAe;QACnBC,aAAatO;QACbL;QACA4O,oBACEvQ,MAAMwQ,4BAA4B,IAAIhO,oBAClCxC,MAAMwQ,4BAA4B,CAAChO,qBACnCa;QACN,qBAAqB;QACrBlC;QACA,GAAGnB,MAAMqQ,YAAY;QACrB3N;QACAI;QACA2N,mBAAmB;QACnB9B,SAAS3O,MAAM2O,OAAO;QACtB+B,aAAa;IACf;IACA,MAAMC,aAAa;QACjB9K;QACAsK;IACF;IAEA,MAAMS,cAAwBpQ,QAC3B2D,GAAG,CAAC,CAAC6C,QAAqCA,MAAMtG,IAAI,CAACyD,GAAG,CAAC,CAAC0M,KAA8BA,GAAGjO,CAAC,GAC5FkO,IAAI;IAEP5P,eAAe;WAAI,IAAIyH,IAAIiI;KAAa;IAExC,iDAAiD;IACjD,MAAMG,eAAyBxI;IAE/B,OAAO,CAAC0H,gCACN,oBAAC/Q;QACE,GAAGc,KAAK;QACTgR,YAAYhR,MAAMU,IAAI,CAACsQ,UAAU;QACjChM,QAAQA;QACRS,WAAWpG,WAAWS,YAAY;QAClCuQ,cAAcA;QACdM,YAAYA;QACZP,YAAYA;QACZa,YAAYhL;QACZiL,cAAc/K;QACdR,WAAWjC;QACXuB,WAAWpB;QAEV,GAAIA,eAAepF,UAAUmF,UAAU,GAAG;YAAEuN,6BAA6BJ;QAAa,IAAI,CAAC,CAAC;QAC7FK,kBAAkBrM;QAClBsM,uBAAuB7L;QACvB8L,aAAalT;QACbC,mBAAmBA;QACnBkT,mBAAmB5J;QACnB6J,+BAA+BlR;QAC/BmR,uBAAuBvQ;QACvBM,cAAcH;QACb,GAAIkC,mBAAmBE,OAAO,GAAG;YAAEiO,WAAW;YAAGC,WAAW,CAAC;QAAE,IAAI,CAAC,CAAC;QACtE,oCAAoC,GACpC,kDAAkD;QAClDC,UAAU,CAAC5R;YACTY,cAAcZ,MAAMoG,MAAM;YAC1BvF,cAAcb,MAAMqK,aAAa;YACjC,qBACE,wDACE,oBAACkD,yBACC,oBAACsE;gBACCC,IAAI;gBACJC,IAAI;gBACJC,IAAI;gBACJC,IAAIjS,MAAMsG,eAAe;gBACzBuG,QAAQ;gBACRlB,IAAIvL;gBACJ8R,YAAY;gBACZC,iBAAiB;8BAEnB,oBAAC5E,WAAGtM;QAIZ;uBAGF,oBAACmR;QAAIzG,IAAIpL;QAAeuM,MAAM;QAASuF,OAAO;YAAE1F,SAAS;QAAI;QAAGI,cAAY;;AAEhF,GAAG;AACHjN,aAAawS,WAAW,GAAG"}
@@ -1,11 +1,11 @@
1
1
  'use client';
2
- import * as React from 'react';
3
- import { useSparklineStyles } from './useSparklineStyles.styles';
2
+ import { useFocusableGroup } from '@fluentui/react-tabster';
3
+ import { extent as d3Extent, max as d3Max } from 'd3-array';
4
4
  import { scaleLinear as d3ScaleLinear } from 'd3-scale';
5
5
  import { area as d3Area, line as d3Line, curveLinear as d3curveLinear } from 'd3-shape';
6
- import { max as d3Max, extent as d3Extent } from 'd3-array';
7
- import { useFocusableGroup } from '@fluentui/react-tabster';
6
+ import * as React from 'react';
8
7
  import { useRtl } from '../../utilities/index';
8
+ import { useSparklineStyles } from './useSparklineStyles.styles';
9
9
  /**
10
10
  * Sparkline is the context wrapper and container for all Sparkline content/controls,
11
11
  * It has no direct style or slot opinions.
@@ -23,9 +23,13 @@ import { useRtl } from '../../utilities/index';
23
23
  let _emptyChartId = '_SparklineChart_empty';
24
24
  let _isRTL = useRtl();
25
25
  const [points, setPoints] = React.useState([]);
26
- const width = 80;
27
- const height = 20;
28
- const valueTextWidth = 80;
26
+ var _props_width;
27
+ // Use props with default fallbacks instead of hardcoded values
28
+ const width = (_props_width = props.width) !== null && _props_width !== void 0 ? _props_width : 80;
29
+ var _props_height;
30
+ const height = (_props_height = props.height) !== null && _props_height !== void 0 ? _props_height : 20;
31
+ var _props_valueTextWidth;
32
+ const valueTextWidth = (_props_valueTextWidth = props.valueTextWidth) !== null && _props_valueTextWidth !== void 0 ? _props_valueTextWidth : 80;
29
33
  const line = React.useMemo(()=>{
30
34
  return d3Line().x((d)=>x(d.x)).y((d)=>y(d.y)).curve(d3curveLinear);
31
35
  }, [
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/components/Sparkline/Sparkline.tsx"],"sourcesContent":["'use client';\n\nimport * as React from 'react';\nimport { useSparklineStyles } from './useSparklineStyles.styles';\nimport { scaleLinear as d3ScaleLinear } from 'd3-scale';\nimport { area as d3Area, line as d3Line, curveLinear as d3curveLinear } from 'd3-shape';\nimport { max as d3Max, extent as d3Extent } from 'd3-array';\nimport { useFocusableGroup } from '@fluentui/react-tabster';\nimport { LineChartDataPoint } from '../../types/DataPoint';\nimport { useRtl } from '../../utilities/index';\nimport { SparklineProps } from '../../index';\n\n/**\n * Sparkline is the context wrapper and container for all Sparkline content/controls,\n * It has no direct style or slot opinions.\n *\n * Sparkline also provides API interfaces for callbacks that will occur on navigation events.\n */\nexport const Sparkline: React.FunctionComponent<SparklineProps> = React.forwardRef<HTMLDivElement, SparklineProps>(\n (props, forwardedRef) => {\n let margin = {\n top: 2,\n right: 0,\n bottom: 0,\n left: 0,\n };\n let x: any;\n let y: any;\n let _emptyChartId: string = '_SparklineChart_empty';\n let _isRTL: boolean = useRtl();\n const [points, setPoints] = React.useState<LineChartDataPoint[]>([]);\n const width = 80;\n const height = 20;\n const valueTextWidth = 80;\n\n const line = React.useMemo(() => {\n return d3Line<LineChartDataPoint>()\n .x((d: LineChartDataPoint) => x(d.x))\n .y((d: LineChartDataPoint) => y(d.y))\n .curve(d3curveLinear);\n }, [x, y]);\n\n const area = React.useMemo(() => {\n return d3Area<LineChartDataPoint>()\n .x((d: LineChartDataPoint) => x(d.x))\n .y0(height)\n .y1((d: LineChartDataPoint) => y(d.y))\n .curve(d3curveLinear);\n }, [height, x, y]);\n\n React.useEffect(() => {\n if (!_isChartEmpty()) {\n // eslint-disable-next-line @typescript-eslint/no-shadow\n const _points = props.data!.lineChartData![0].data;\n\n /* eslint-disable @typescript-eslint/no-explicit-any */\n const [xMin, xMax] = d3Extent(_points, (d: any) => d.x);\n\n // eslint-disable-next-line react-hooks/exhaustive-deps\n x = d3ScaleLinear()\n .domain([xMin, xMax])\n .range([margin.left!, width - margin.right!]);\n // eslint-disable-next-line react-hooks/exhaustive-deps\n y = d3ScaleLinear()\n /* eslint-disable @typescript-eslint/no-explicit-any */\n .domain([0, d3Max(_points, (d: any) => d.y)])\n .range([height - margin.bottom!, margin.top!]);\n\n setPoints(_points as LineChartDataPoint[]);\n }\n }, []);\n\n const { data } = props;\n function _isChartEmpty(): boolean {\n return !(\n data &&\n data.lineChartData &&\n data.lineChartData.length > 0 &&\n data.lineChartData.filter(item => item.data.length === 0).length === 0\n );\n }\n function drawSparkline() {\n if (!line || !area) {\n return null;\n }\n return (\n <>\n <path\n className=\"line\"\n d={line(points)!}\n fill={'transparent'}\n opacity={1}\n strokeWidth={2}\n stroke={data!.lineChartData![0].color!}\n />\n <path\n className=\"area\"\n d={area(points)!}\n opacity={1}\n fillOpacity={0.2}\n fill={data!.lineChartData![0].color!}\n role=\"img\"\n aria-hidden\n />\n </>\n );\n }\n\n const classes = useSparklineStyles(props);\n const focusAttributes = useFocusableGroup();\n return !_isChartEmpty() ? (\n <div className={classes.inlineBlock} {...focusAttributes}>\n {width >= 50 && height >= 16 ? (\n <svg\n width={width}\n height={height}\n aria-label={`Sparkline with label ${data!.lineChartData![0].legend!}`}\n tabIndex={0}\n >\n {points ? drawSparkline() : null}\n </svg>\n ) : (\n <></>\n )}\n {props.showLegend && props.data!.lineChartData![0].legend ? (\n <svg width={valueTextWidth} height={height}>\n <text x=\"0%\" textAnchor={_isRTL ? 'end' : 'start'} dx={8} y=\"100%\" dy={-5} className={classes.valueText}>\n {props.data!.lineChartData![0].legend!}\n </text>\n </svg>\n ) : (\n <></>\n )}\n </div>\n ) : (\n <div id={_emptyChartId} role={'alert'} style={{ opacity: '0' }} aria-label={'Graph has no data to display'} />\n );\n },\n);\nSparkline.displayName = 'Sparkline';\n"],"names":["React","useSparklineStyles","scaleLinear","d3ScaleLinear","area","d3Area","line","d3Line","curveLinear","d3curveLinear","max","d3Max","extent","d3Extent","useFocusableGroup","useRtl","Sparkline","forwardRef","props","forwardedRef","margin","top","right","bottom","left","x","y","_emptyChartId","_isRTL","points","setPoints","useState","width","height","valueTextWidth","useMemo","d","curve","y0","y1","useEffect","_isChartEmpty","_points","data","lineChartData","xMin","xMax","domain","range","length","filter","item","drawSparkline","path","className","fill","opacity","strokeWidth","stroke","color","fillOpacity","role","aria-hidden","classes","focusAttributes","div","inlineBlock","svg","aria-label","legend","tabIndex","showLegend","text","textAnchor","dx","dy","valueText","id","style","displayName"],"mappings":"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"}
1
+ {"version":3,"sources":["../src/components/Sparkline/Sparkline.tsx"],"sourcesContent":["'use client';\n\nimport { useFocusableGroup } from '@fluentui/react-tabster';\nimport { extent as d3Extent, max as d3Max } from 'd3-array';\nimport { scaleLinear as d3ScaleLinear } from 'd3-scale';\nimport { area as d3Area, line as d3Line, curveLinear as d3curveLinear } from 'd3-shape';\nimport * as React from 'react';\nimport { SparklineProps } from '../../index';\nimport { LineChartDataPoint } from '../../types/DataPoint';\nimport { useRtl } from '../../utilities/index';\nimport { useSparklineStyles } from './useSparklineStyles.styles';\n\n/**\n * Sparkline is the context wrapper and container for all Sparkline content/controls,\n * It has no direct style or slot opinions.\n *\n * Sparkline also provides API interfaces for callbacks that will occur on navigation events.\n */\nexport const Sparkline: React.FunctionComponent<SparklineProps> = React.forwardRef<HTMLDivElement, SparklineProps>(\n (props, forwardedRef) => {\n let margin = {\n top: 2,\n right: 0,\n bottom: 0,\n left: 0,\n };\n let x: any;\n let y: any;\n let _emptyChartId: string = '_SparklineChart_empty';\n let _isRTL: boolean = useRtl();\n const [points, setPoints] = React.useState<LineChartDataPoint[]>([]);\n\n // Use props with default fallbacks instead of hardcoded values\n const width = props.width ?? 80;\n const height = props.height ?? 20;\n const valueTextWidth = props.valueTextWidth ?? 80;\n\n const line = React.useMemo(() => {\n return d3Line<LineChartDataPoint>()\n .x((d: LineChartDataPoint) => x(d.x))\n .y((d: LineChartDataPoint) => y(d.y))\n .curve(d3curveLinear);\n }, [x, y]);\n\n const area = React.useMemo(() => {\n return d3Area<LineChartDataPoint>()\n .x((d: LineChartDataPoint) => x(d.x))\n .y0(height)\n .y1((d: LineChartDataPoint) => y(d.y))\n .curve(d3curveLinear);\n }, [height, x, y]);\n\n React.useEffect(() => {\n if (!_isChartEmpty()) {\n // eslint-disable-next-line @typescript-eslint/no-shadow\n const _points = props.data!.lineChartData![0].data;\n\n /* eslint-disable @typescript-eslint/no-explicit-any */\n const [xMin, xMax] = d3Extent(_points, (d: any) => d.x);\n\n // eslint-disable-next-line react-hooks/exhaustive-deps\n x = d3ScaleLinear()\n .domain([xMin, xMax])\n .range([margin.left!, width - margin.right!]);\n // eslint-disable-next-line react-hooks/exhaustive-deps\n y = d3ScaleLinear()\n /* eslint-disable @typescript-eslint/no-explicit-any */\n .domain([0, d3Max(_points, (d: any) => d.y)])\n .range([height - margin.bottom!, margin.top!]);\n\n setPoints(_points as LineChartDataPoint[]);\n }\n }, []);\n\n const { data } = props;\n function _isChartEmpty(): boolean {\n return !(\n data &&\n data.lineChartData &&\n data.lineChartData.length > 0 &&\n data.lineChartData.filter(item => item.data.length === 0).length === 0\n );\n }\n function drawSparkline() {\n if (!line || !area) {\n return null;\n }\n return (\n <>\n <path\n className=\"line\"\n d={line(points)!}\n fill={'transparent'}\n opacity={1}\n strokeWidth={2}\n stroke={data!.lineChartData![0].color!}\n />\n <path\n className=\"area\"\n d={area(points)!}\n opacity={1}\n fillOpacity={0.2}\n fill={data!.lineChartData![0].color!}\n role=\"img\"\n aria-hidden\n />\n </>\n );\n }\n\n const classes = useSparklineStyles(props);\n const focusAttributes = useFocusableGroup();\n return !_isChartEmpty() ? (\n <div className={classes.inlineBlock} {...focusAttributes}>\n {width >= 50 && height >= 16 ? (\n <svg\n width={width}\n height={height}\n aria-label={`Sparkline with label ${data!.lineChartData![0].legend!}`}\n tabIndex={0}\n >\n {points ? drawSparkline() : null}\n </svg>\n ) : (\n <></>\n )}\n {props.showLegend && props.data!.lineChartData![0].legend ? (\n <svg width={valueTextWidth} height={height}>\n <text x=\"0%\" textAnchor={_isRTL ? 'end' : 'start'} dx={8} y=\"100%\" dy={-5} className={classes.valueText}>\n {props.data!.lineChartData![0].legend!}\n </text>\n </svg>\n ) : (\n <></>\n )}\n </div>\n ) : (\n <div id={_emptyChartId} role={'alert'} style={{ opacity: '0' }} aria-label={'Graph has no data to display'} />\n );\n },\n);\nSparkline.displayName = 'Sparkline';\n"],"names":["useFocusableGroup","extent","d3Extent","max","d3Max","scaleLinear","d3ScaleLinear","area","d3Area","line","d3Line","curveLinear","d3curveLinear","React","useRtl","useSparklineStyles","Sparkline","forwardRef","props","forwardedRef","margin","top","right","bottom","left","x","y","_emptyChartId","_isRTL","points","setPoints","useState","width","height","valueTextWidth","useMemo","d","curve","y0","y1","useEffect","_isChartEmpty","_points","data","lineChartData","xMin","xMax","domain","range","length","filter","item","drawSparkline","path","className","fill","opacity","strokeWidth","stroke","color","fillOpacity","role","aria-hidden","classes","focusAttributes","div","inlineBlock","svg","aria-label","legend","tabIndex","showLegend","text","textAnchor","dx","dy","valueText","id","style","displayName"],"mappings":"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"}
@@ -9,7 +9,7 @@ import { useId } from '@fluentui/react-utilities';
9
9
  import { tokens } from '@fluentui/react-theme';
10
10
  import { CartesianChart, Legends, ChartPopover } from '../../index';
11
11
  import { ChartTypes, getAccessibleDataObject, XAxisTypes, getTypeOfAxis, tooltipOfAxislabels, formatScientificLimitWidth, getBarWidth, getScalePadding, isScalePaddingDefined, calculateAppropriateBarWidth, useRtl, areArraysEqual, calculateLongestLabelWidth, findVerticalNumericMinMaxOfY, createNumericYAxis, domainRangeOfVerticalNumeric, domainRangeOfDateForAreaLineScatterVerticalBarCharts, domainRangeOfXStringAxis, createStringYAxis, calcTotalWidth, calcBandwidth, calcRequiredWidth, sortAxisCategories } from '../../utilities/index';
12
- import { toImage } from '../../utilities/image-export-utils';
12
+ import { useImageExport } from '../../utilities/hooks';
13
13
  var CircleVisbility = /*#__PURE__*/ function(CircleVisbility) {
14
14
  CircleVisbility["show"] = "visibility";
15
15
  CircleVisbility["hide"] = "hidden";
@@ -48,8 +48,7 @@ const MIN_DOMAIN_MARGIN = 8;
48
48
  const _vbcBarId = useId('_VBC_bar_');
49
49
  let _xAxisInnerPadding = 0;
50
50
  let _xAxisOuterPadding = 0;
51
- const cartesianChartRef = React.useRef(null);
52
- const _legendsRef = React.useRef(null);
51
+ const { cartesianChartRef, legendsRef: _legendsRef } = useImageExport(props.componentRef, props.hideLegend);
53
52
  const [color, setColor] = React.useState('');
54
53
  const [dataForHoverCard, setDataForHoverCard] = React.useState(0);
55
54
  const [activeLegend, setActiveLegend] = React.useState(undefined);
@@ -68,17 +67,6 @@ const MIN_DOMAIN_MARGIN = 8;
68
67
  const [isPopoverOpen, setPopoverOpen] = React.useState(false);
69
68
  const [selectedLegends, setSelectedLegends] = React.useState(((_props_legendProps = props.legendProps) === null || _props_legendProps === void 0 ? void 0 : _props_legendProps.selectedLegends) || []);
70
69
  const prevPropsRef = React.useRef(null);
71
- React.useImperativeHandle(props.componentRef, ()=>{
72
- var _cartesianChartRef_current;
73
- var _cartesianChartRef_current_chartContainer;
74
- return {
75
- chartContainer: (_cartesianChartRef_current_chartContainer = (_cartesianChartRef_current = cartesianChartRef.current) === null || _cartesianChartRef_current === void 0 ? void 0 : _cartesianChartRef_current.chartContainer) !== null && _cartesianChartRef_current_chartContainer !== void 0 ? _cartesianChartRef_current_chartContainer : null,
76
- toImage: (opts)=>{
77
- var _cartesianChartRef_current, _legendsRef_current;
78
- return toImage((_cartesianChartRef_current = cartesianChartRef.current) === null || _cartesianChartRef_current === void 0 ? void 0 : _cartesianChartRef_current.chartContainer, (_legendsRef_current = _legendsRef.current) === null || _legendsRef_current === void 0 ? void 0 : _legendsRef_current.toSVG, _useRtl, opts);
79
- }
80
- };
81
- }, []);
82
70
  React.useEffect(()=>{
83
71
  if (prevPropsRef.current) {
84
72
  var _prevProps_legendProps, _props_legendProps;