@fluentui/react-charts 0.0.0-nightly-20250909-0406.1 → 0.0.0-nightly-20250911-0406.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +15 -15
- package/lib/components/AreaChart/AreaChart.js +5 -4
- package/lib/components/AreaChart/AreaChart.js.map +1 -1
- package/lib/components/ChartTable/ChartTable.js +1 -2
- package/lib/components/ChartTable/ChartTable.js.map +1 -1
- package/lib/components/ChartTable/useChartTableStyles.styles.js +3 -3
- package/lib/components/ChartTable/useChartTableStyles.styles.js.map +1 -1
- package/lib/components/ChartTable/useChartTableStyles.styles.raw.js +2 -2
- package/lib/components/ChartTable/useChartTableStyles.styles.raw.js.map +1 -1
- package/lib/components/CommonComponents/ChartPopover.js +6 -3
- package/lib/components/CommonComponents/ChartPopover.js.map +1 -1
- package/lib/components/CommonComponents/useChartPopoverStyles.styles.js +3 -3
- package/lib/components/CommonComponents/useChartPopoverStyles.styles.js.map +1 -1
- package/lib/components/CommonComponents/useChartPopoverStyles.styles.raw.js +2 -2
- package/lib/components/CommonComponents/useChartPopoverStyles.styles.raw.js.map +1 -1
- package/lib/components/DeclarativeChart/PlotlySchemaAdapter.js +36 -3
- package/lib/components/DeclarativeChart/PlotlySchemaAdapter.js.map +1 -1
- package/lib/components/DonutChart/Arc/Arc.js +7 -8
- package/lib/components/DonutChart/Arc/Arc.js.map +1 -1
- package/lib/components/DonutChart/Arc/Arc.types.js.map +1 -1
- package/lib/components/DonutChart/DonutChart.js +53 -23
- package/lib/components/DonutChart/DonutChart.js.map +1 -1
- package/lib/components/DonutChart/Pie/Pie.types.js.map +1 -1
- package/lib/components/FunnelChart/FunnelChart.js +1 -2
- package/lib/components/FunnelChart/FunnelChart.js.map +1 -1
- package/lib/components/GroupedVerticalBarChart/GroupedVerticalBarChart.js +1 -2
- package/lib/components/GroupedVerticalBarChart/GroupedVerticalBarChart.js.map +1 -1
- package/lib/components/HorizontalBarChart/HorizontalBarChart.js +1 -2
- package/lib/components/HorizontalBarChart/HorizontalBarChart.js.map +1 -1
- package/lib/components/HorizontalBarChartWithAxis/HorizontalBarChartWithAxis.js +1 -2
- package/lib/components/HorizontalBarChartWithAxis/HorizontalBarChartWithAxis.js.map +1 -1
- package/lib/components/LineChart/LineChart.js +7 -7
- package/lib/components/LineChart/LineChart.js.map +1 -1
- package/lib/components/ScatterChart/ScatterChart.js +6 -6
- package/lib/components/ScatterChart/ScatterChart.js.map +1 -1
- package/lib/components/VerticalBarChart/VerticalBarChart.js +3 -6
- package/lib/components/VerticalBarChart/VerticalBarChart.js.map +1 -1
- package/lib/components/VerticalStackedBarChart/VerticalStackedBarChart.js +5 -6
- package/lib/components/VerticalStackedBarChart/VerticalStackedBarChart.js.map +1 -1
- package/lib-commonjs/components/AreaChart/AreaChart.js +4 -3
- package/lib-commonjs/components/AreaChart/AreaChart.js.map +1 -1
- package/lib-commonjs/components/ChartTable/ChartTable.js +1 -2
- package/lib-commonjs/components/ChartTable/ChartTable.js.map +1 -1
- package/lib-commonjs/components/ChartTable/useChartTableStyles.styles.js +3 -3
- package/lib-commonjs/components/ChartTable/useChartTableStyles.styles.js.map +1 -1
- package/lib-commonjs/components/ChartTable/useChartTableStyles.styles.raw.js +2 -2
- package/lib-commonjs/components/ChartTable/useChartTableStyles.styles.raw.js.map +1 -1
- package/lib-commonjs/components/CommonComponents/ChartPopover.js +6 -3
- package/lib-commonjs/components/CommonComponents/ChartPopover.js.map +1 -1
- package/lib-commonjs/components/CommonComponents/useChartPopoverStyles.styles.js +3 -3
- package/lib-commonjs/components/CommonComponents/useChartPopoverStyles.styles.js.map +1 -1
- package/lib-commonjs/components/CommonComponents/useChartPopoverStyles.styles.raw.js +2 -2
- package/lib-commonjs/components/CommonComponents/useChartPopoverStyles.styles.raw.js.map +1 -1
- package/lib-commonjs/components/DeclarativeChart/PlotlySchemaAdapter.js +36 -3
- package/lib-commonjs/components/DeclarativeChart/PlotlySchemaAdapter.js.map +1 -1
- package/lib-commonjs/components/DonutChart/Arc/Arc.js +7 -8
- package/lib-commonjs/components/DonutChart/Arc/Arc.js.map +1 -1
- package/lib-commonjs/components/DonutChart/Arc/Arc.types.js.map +1 -1
- package/lib-commonjs/components/DonutChart/DonutChart.js +52 -22
- package/lib-commonjs/components/DonutChart/DonutChart.js.map +1 -1
- package/lib-commonjs/components/DonutChart/Pie/Pie.types.js.map +1 -1
- package/lib-commonjs/components/FunnelChart/FunnelChart.js +1 -2
- package/lib-commonjs/components/FunnelChart/FunnelChart.js.map +1 -1
- package/lib-commonjs/components/GroupedVerticalBarChart/GroupedVerticalBarChart.js +1 -2
- package/lib-commonjs/components/GroupedVerticalBarChart/GroupedVerticalBarChart.js.map +1 -1
- package/lib-commonjs/components/HorizontalBarChart/HorizontalBarChart.js +1 -2
- package/lib-commonjs/components/HorizontalBarChart/HorizontalBarChart.js.map +1 -1
- package/lib-commonjs/components/HorizontalBarChartWithAxis/HorizontalBarChartWithAxis.js +1 -2
- package/lib-commonjs/components/HorizontalBarChartWithAxis/HorizontalBarChartWithAxis.js.map +1 -1
- package/lib-commonjs/components/LineChart/LineChart.js +6 -6
- package/lib-commonjs/components/LineChart/LineChart.js.map +1 -1
- package/lib-commonjs/components/ScatterChart/ScatterChart.js +5 -5
- package/lib-commonjs/components/ScatterChart/ScatterChart.js.map +1 -1
- package/lib-commonjs/components/VerticalBarChart/VerticalBarChart.js +3 -6
- package/lib-commonjs/components/VerticalBarChart/VerticalBarChart.js.map +1 -1
- package/lib-commonjs/components/VerticalStackedBarChart/VerticalStackedBarChart.js +4 -5
- package/lib-commonjs/components/VerticalStackedBarChart/VerticalStackedBarChart.js.map +1 -1
- package/package.json +13 -13
|
@@ -7,9 +7,10 @@ import { useId } from '@fluentui/react-utilities';
|
|
|
7
7
|
import { areArraysEqual, createNumericYAxis, createStringYAxis, getDomainPaddingForMarkers, domainRangeOfXStringAxis, find, findNumericMinMaxOfY, YAxisType, useRtl, isTextMode, isScatterPolarSeries, isPlottable, getRangeForScatterMarkerSize, domainRangeOfDateForAreaLineScatterVerticalBarCharts, domainRangeOfNumericForAreaLineScatterCharts, sortAxisCategories } from '../../utilities/index';
|
|
8
8
|
import { CartesianChart } from '../../index';
|
|
9
9
|
import { tokens } from '@fluentui/react-theme';
|
|
10
|
-
import { calloutData, ChartTypes, XAxisTypes, tooltipOfAxislabels, getTypeOfAxis, getNextColor, getColorFromToken
|
|
10
|
+
import { calloutData, ChartTypes, XAxisTypes, tooltipOfAxislabels, getTypeOfAxis, getNextColor, getColorFromToken } from '../../utilities/index';
|
|
11
11
|
import { toImage } from '../../utilities/image-export-utils';
|
|
12
12
|
import { renderScatterPolarCategoryLabels } from '../../utilities/scatterpolar-utils';
|
|
13
|
+
import { formatDateToLocaleString } from '@fluentui/chart-utilities';
|
|
13
14
|
// Create a ScatterChart variant which uses these default styles and this styled subcomponent.
|
|
14
15
|
/**
|
|
15
16
|
* ScatterChart component
|
|
@@ -380,7 +381,7 @@ import { renderScatterPolarCategoryLabels } from '../../utilities/scatterpolar-u
|
|
|
380
381
|
cy = targetRect.top + targetRect.height / 2;
|
|
381
382
|
updatePosition(cx, cy);
|
|
382
383
|
_uniqueCallOutID = circleId;
|
|
383
|
-
const formattedData = x instanceof Date ?
|
|
384
|
+
const formattedData = x instanceof Date ? formatDateToLocaleString(x, props.culture, props.useUTC) : x;
|
|
384
385
|
const xVal = x instanceof Date ? x.getTime() : x;
|
|
385
386
|
const found = find(_calloutPoints, (element)=>element.x === xVal);
|
|
386
387
|
// if no points need to be called out then don't show vertical line and callout card
|
|
@@ -401,7 +402,7 @@ import { renderScatterPolarCategoryLabels } from '../../utilities/scatterpolar-u
|
|
|
401
402
|
}
|
|
402
403
|
function _handleHover(x, y, lineHeight, xAxisCalloutData, circleId, xAxisCalloutAccessibilityData, mouseEvent) {
|
|
403
404
|
mouseEvent === null || mouseEvent === void 0 ? void 0 : mouseEvent.persist();
|
|
404
|
-
const formattedData = x instanceof Date ?
|
|
405
|
+
const formattedData = x instanceof Date ? formatDateToLocaleString(x, props.culture, props.useUTC) : x;
|
|
405
406
|
const xVal = x instanceof Date ? x.getTime() : x;
|
|
406
407
|
const found = find(_calloutPoints, (element)=>element.x === xVal);
|
|
407
408
|
// if no points need to be called out then don't show vertical line and callout card
|
|
@@ -459,7 +460,7 @@ import { renderScatterPolarCategoryLabels } from '../../utilities/scatterpolar-u
|
|
|
459
460
|
var _point_callOutAccessibilityData;
|
|
460
461
|
const series = _points[seriesIndex];
|
|
461
462
|
const point = series.data[pointIndex];
|
|
462
|
-
const formattedDate = point.x instanceof Date ?
|
|
463
|
+
const formattedDate = point.x instanceof Date ? formatDateToLocaleString(point.x, props.culture, props.useUTC) : point.x;
|
|
463
464
|
const xValue = point.xAxisCalloutData || formattedDate;
|
|
464
465
|
const legend = series.legend;
|
|
465
466
|
const yValue = point.yAxisCalloutData || point.y;
|
|
@@ -482,7 +483,6 @@ import { renderScatterPolarCategoryLabels } from '../../utilities/scatterpolar-u
|
|
|
482
483
|
if (!props.hideLegend && !_isTextMode.current) {
|
|
483
484
|
legendBars = _createLegends(_points); // ToDo: Memoize legends to improve performance.
|
|
484
485
|
}
|
|
485
|
-
var _props_culture;
|
|
486
486
|
const calloutProps = {
|
|
487
487
|
YValueHover,
|
|
488
488
|
hoverXValue,
|
|
@@ -493,7 +493,7 @@ import { renderScatterPolarCategoryLabels } from '../../utilities/scatterpolar-u
|
|
|
493
493
|
clickPosition,
|
|
494
494
|
isPopoverOpen,
|
|
495
495
|
isCalloutForStack: true,
|
|
496
|
-
culture:
|
|
496
|
+
culture: props.culture,
|
|
497
497
|
isCartesian: true
|
|
498
498
|
};
|
|
499
499
|
const tickParams = {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/components/ScatterChart/ScatterChart.tsx"],"sourcesContent":["import * 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 find,\n findNumericMinMaxOfY,\n IDomainNRange,\n YAxisType,\n useRtl,\n isTextMode,\n isScatterPolarSeries,\n isPlottable,\n getRangeForScatterMarkerSize,\n domainRangeOfDateForAreaLineScatterVerticalBarCharts,\n domainRangeOfNumericForAreaLineScatterCharts,\n sortAxisCategories,\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} from '../../index';\nimport { tokens } from '@fluentui/react-theme';\nimport {\n calloutData,\n ChartTypes,\n XAxisTypes,\n tooltipOfAxislabels,\n getTypeOfAxis,\n getNextColor,\n getColorFromToken,\n formatDate,\n} from '../../utilities/index';\nimport { LineChartPoints } from '../../types/DataPoint';\nimport { toImage } from '../../utilities/image-export-utils';\nimport { renderScatterPolarCategoryLabels } from '../../utilities/scatterpolar-utils';\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 _calloutPoints: any[] = calloutData(_points) || [];\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<[]>([]);\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<any[]>([]);\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 shiftX: number,\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 ? formatDate(x, props.useUTC) : x;\n const xVal = x instanceof Date ? x.getTime() : x;\n const found = find(_calloutPoints, (element: { x: string | number }) => element.x === xVal);\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 | Date,\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 ? formatDate(x, props.useUTC) : x;\n const xVal = x instanceof Date ? x.getTime() : x;\n const found = find(_calloutPoints, (element: { x: string | number }) => element.x === xVal);\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 = point.x instanceof Date ? formatDate(point.x, props.useUTC) : 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 _calloutPoints = 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,\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 ?? 'en-us',\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","find","findNumericMinMaxOfY","YAxisType","useRtl","isTextMode","isScatterPolarSeries","isPlottable","getRangeForScatterMarkerSize","domainRangeOfDateForAreaLineScatterVerticalBarCharts","domainRangeOfNumericForAreaLineScatterCharts","sortAxisCategories","CartesianChart","tokens","calloutData","ChartTypes","XAxisTypes","tooltipOfAxislabels","getTypeOfAxis","getNextColor","getColorFromToken","formatDate","toImage","renderScatterPolarCategoryLabels","ScatterChart","forwardRef","props","forwardedRef","_circleId","_seriesId","_verticalLine","_tooltipId","_firstRenderOptimization","_emptyChartId","_points","_injectIndexPropertyInScatterChartData","data","scatterChartData","_calloutPoints","_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","shiftX","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","useUTC","xVal","getTime","found","element","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","descriptionMessage","getCalloutDescriptionMessage","isCalloutForStack","culture","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,YAAYA,WAAW,QAAQ;AAE/B,SAASC,qBAAqB,QAAQ,iCAAiC;AAEvE,SAASC,UAAUC,QAAQ,QAAQ,eAAe;AAClD,SAAiBC,OAAO,QAAQ,mBAAmB;AACnD,SAASC,OAAOC,KAAK,QAAQ,WAAW;AACxC,SAASC,KAAK,QAAQ,4BAA4B;AAElD,SACEC,cAAc,EACdC,kBAAkB,EAClBC,iBAAiB,EACjBC,0BAA0B,EAC1BC,wBAAwB,EACxBC,IAAI,EACJC,oBAAoB,EAEpBC,SAAS,EACTC,MAAM,EACNC,UAAU,EACVC,oBAAoB,EACpBC,WAAW,EACXC,4BAA4B,EAC5BC,oDAAoD,EACpDC,4CAA4C,EAC5CC,kBAAkB,QACb,wBAAwB;AAC/B,SAEEC,cAAc,QAUT,cAAc;AACrB,SAASC,MAAM,QAAQ,wBAAwB;AAC/C,SACEC,WAAW,EACXC,UAAU,EACVC,UAAU,EACVC,mBAAmB,EACnBC,aAAa,EACbC,YAAY,EACZC,iBAAiB,EACjBC,UAAU,QACL,wBAAwB;AAE/B,SAASC,OAAO,QAAQ,qCAAqC;AAC7D,SAASC,gCAAgC,QAAQ,qCAAqC;AAMtF,8FAA8F;AAC9F;;;CAGC,GACD,OAAO,MAAMC,6BAA2DpC,MAAMqC,UAAU,CAGtF,CAACC,OAAOC;QAoC+DD,oBAanEA;IAhDJ,MAAME,YAAoBjC,MAAM;IAChC,MAAMkC,YAAoBlC,MAAM;IAChC,MAAMmC,gBAAwBnC,MAAM;IACpC,MAAMoC,aAAqBpC,MAAM;IACjC,MAAMqC,2BAA2B;IACjC,MAAMC,gBAAwBtC,MAAM;IACpC,IAAIuC,UAAuCC,uCAAuCT,MAAMU,IAAI,CAACC,gBAAgB;IAC7G,8DAA8D;IAC9D,IAAIC,iBAAwBxB,YAAYoB,YAAY,EAAE;IACtD,8DAA8D;IAC9D,IAAIK,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,MAAMC,oBAAoB5D,MAAM6D,MAAM,CAAQ;IAC9C,MAAMC,UAAU7D,sBAAsBqC;IACtC,MAAMyB,cAAc/D,MAAM6D,MAAM,CAAkB;IAClD,MAAMG,SAAkBhD;IAExB,MAAM,CAACiD,aAAaC,eAAe,GAAGlE,MAAMmE,QAAQ,CAAkB;IACtE,MAAM,CAACC,cAAcC,gBAAgB,GAAGrE,MAAMmE,QAAQ,CAAS;IAC/D,MAAM,CAACG,aAAaC,eAAe,GAAGvE,MAAMmE,QAAQ,CAAK,EAAE;IAC3D,8DAA8D;IAC9D,MAAM,CAACK,sBAAsBC,wBAAwB,GAAGzE,MAAMmE,QAAQ,CAAQ,EAAE;IAChF,MAAM,CAACO,kBAAkBC,oBAAoB,GAAG3E,MAAMmE,QAAQ,CAAU;IACxE,MAAM,CAACS,aAAaC,eAAe,GAAG7E,MAAMmE,QAAQ,CAAS;IAC7D,MAAM,CAACW,mBAAmBC,qBAAqB,GAAG/E,MAAMmE,QAAQ;IAChE,MAAM,CAACa,eAAeC,iBAAiB,GAAGjF,MAAMmE,QAAQ,CAAC;QAAEe,GAAG;QAAGC,GAAG;IAAE;IACtE,MAAM,CAACC,eAAeC,eAAe,GAAGrF,MAAMmE,QAAQ,CAAC;IACvD,MAAM,CAACmB,iBAAiBC,mBAAmB,GAAGvF,MAAMmE,QAAQ,CAAW7B,EAAAA,qBAAAA,MAAMkD,WAAW,cAAjBlD,yCAAAA,mBAAmBgD,eAAe,KAAI,EAAE;IAC/G,MAAMG,yBAAyBzF,MAAM6D,MAAM,CAAuB6B;IAClE,MAAMC,cAAc3F,MAAM6D,MAAM,CAAC;IACjC,MAAM+B,qBAAqB5F,MAAM6D,MAAM,CAAC;IAExC7D,MAAM6F,SAAS,CAAC;YAGoCvD,oBAIjBA;QANjC,IACEmD,uBAAuBK,OAAO,IAC9B,CAACtF,eAAeiF,uBAAuBK,OAAO,GAAExD,qBAAAA,MAAMkD,WAAW,cAAjBlD,yCAAAA,mBAAmBgD,eAAe,GAClF;gBACmBhD;YAAnBiD,mBAAmBjD,EAAAA,sBAAAA,MAAMkD,WAAW,cAAjBlD,0CAAAA,oBAAmBgD,eAAe,KAAI,EAAE;QAC7D;QACAG,uBAAuBK,OAAO,IAAGxD,sBAAAA,MAAMkD,WAAW,cAAjBlD,0CAAAA,oBAAmBgD,eAAe;IACrE,GAAG;SAAChD,sBAAAA,MAAMkD,WAAW,cAAjBlD,0CAAAA,oBAAmBgD,eAAe;KAAC;IAEvCtF,MAAM+F,mBAAmB,CACvBzD,MAAM0D,YAAY,EAClB;YACkBpC;YAAAA;eADX;YACLqC,gBAAgBrC,CAAAA,6CAAAA,6BAAAA,kBAAkBkC,OAAO,cAAzBlC,iDAAAA,2BAA2BqC,cAAc,cAAzCrC,uDAAAA,4CAA6C;YAC7D1B,SAAS,CAACgE;oBACOtC,4BAA2CG;gBAA1D,OAAO7B,SAAQ0B,6BAAAA,kBAAkBkC,OAAO,cAAzBlC,iDAAAA,2BAA2BqC,cAAc,GAAElC,sBAAAA,YAAY+B,OAAO,cAAnB/B,0CAAAA,oBAAqBoC,KAAK,EAAEnC,QAAQkC;YAChG;QACF;OACA,EAAE;IAGJ,MAAME,aACJ9D,MAAMU,IAAI,CAACC,gBAAgB,IAC3BX,MAAMU,IAAI,CAACC,gBAAgB,CAAEoD,MAAM,GAAG,KACtC/D,MAAMU,IAAI,CAACC,gBAAgB,AAAC,CAAC,EAAE,CAACD,IAAI,IACpCV,MAAMU,IAAI,CAACC,gBAAgB,AAAC,CAAC,EAAE,CAACD,IAAI,CAACqD,MAAM,GAAG,IACzCvE,cAAcQ,MAAMU,IAAI,CAACC,gBAAgB,AAAC,CAAC,EAAE,CAACD,IAAI,CAAC,EAAE,CAACkC,CAAC,EAAE,QAC1DtD,WAAW0E,UAAU;IAE3B,yCAAyC;IACzC,MAAMC,aACJjE,MAAMU,IAAI,CAACC,gBAAgB,IAC3BX,MAAMU,IAAI,CAACC,gBAAgB,CAACoD,MAAM,GAAG,KACrC/D,MAAMU,IAAI,CAACC,gBAAgB,CAAC,EAAE,CAACD,IAAI,IACnCV,MAAMU,IAAI,CAACC,gBAAgB,CAAC,EAAE,CAACD,IAAI,CAACqD,MAAM,GAAG,IACzC,OAAO/D,MAAMU,IAAI,CAACC,gBAAgB,CAAC,EAAE,CAACD,IAAI,CAAC,EAAE,CAACmC,CAAC,KAAK,WAClDpE,UAAUuF,UAAU,GACpBvF,UAAUyF,WAAW,GACvBzF,UAAUyF,WAAW;IAE3B,MAAMC,YAAYzG,MAAM6D,MAAM,CAAmC,EAAE;IACnE,8DAA8D;IAC9D,MAAM6C,mBAAmB1G,MAAM6D,MAAM,CAAQ,EAAE;IAC/C7D,MAAM6F,SAAS,CAAC;QACd;;KAEC,GAED,IAAI/C,YAAYC,uCAAuCT,MAAMU,IAAI,CAACC,gBAAgB,KAAKX,MAAMU,IAAI,KAAKF,SAAS;YAC7G2D,UAAUX,OAAO,GAAG/C,uCAAuCT,MAAMU,IAAI,CAACC,gBAAgB;YACtFyD,iBAAiBZ,OAAO,GAAGpE,YAAY+E,UAAUX,OAAO;QAC1D;IACF,GAAG;QAACxD,MAAMqE,MAAM;QAAErE,MAAMsE,KAAK;QAAEtE,MAAMU,IAAI;QAAEF;KAAQ;IAEnD,SAASC,uCACPE,gBAAuC;QAEvC,OAAOA,mBACHA,iBAAiB4D,GAAG,CAAC,CAACC,MAA0BC;YAC9C,IAAIC;YACJ,IAAI,OAAOF,KAAKE,KAAK,KAAK,aAAa;gBACrCA,QAAQjF,aAAagF,OAAO;YAC9B,OAAO;gBACLC,QAAQhF,kBAAkB8E,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,EAAElC,CAAC,EAAEC,CAAC,EAAE,GAAGH;QACjB,+BAA+B;QAC/B,MAAMqC,WAAWC,KAAKC,IAAI,CAACD,KAAKE,GAAG,CAACN,OAAOhC,GAAG,KAAKoC,KAAKE,GAAG,CAACL,OAAOhC,GAAG;QACtE,+EAA+E;QAC/E,IAAIkC,WAAWD,WAAW;YACxBnC,iBAAiB;gBAAEC,GAAGgC;gBAAM/B,GAAGgC;YAAK;YACpC9B,eAAe;QACjB;IACF;IAEA,SAASoC,qBACPC,MAA4B,EAC5BC,SAAqB;QAErB,wDAAwD;QACxD,MAAM,EAAEC,UAAU,EAAEC,QAAQ,EAAE,GAAG/G,qBAAqB4G,QAAQC;QAC9D,MAAMG,WAAWnH,2BAA2BiH,YAAYC,UAAUvF,MAAMyF,UAAU;QAElF,OAAO;YACLH,YAAYA,aAAaE,SAASE,KAAK;YACvCH,UAAUA,WAAWC,SAASG,GAAG;QACnC;IACF;IAEA,SAASC,uBACPR,MAAW,EACXnE,OAAgB,EAChBqD,KAAa,EACbuB,SAAqB,EACrBC,KAAc,EACdC,SAAqB,EACrBC,QAAgB,EAChBC,UAAyC,EACzCC,MAAc;QAEd,IAAIC;QACJ,IAAIJ,cAAczG,WAAW4E,WAAW,EAAE;YACxCiC,oBAAoBnH,6CAClBoG,QACAnE,SACAqD,OACAwB,OACA9F,MAAMoG,UAAU,EAChB;QAEJ,OAAO,IAAIL,cAAczG,WAAW+G,QAAQ,EAAE;YAC5CF,oBAAoBpH,qDAClBqG,QACAnE,SACAqD,OACAwB,OACAG,YACAJ;QAEJ,OAAO;YACLM,oBAAoB7H,yBAAyB2C,SAASqD,OAAOwB;QAC/D;QACA,OAAOK;IACT;IAEA,SAASG,YAAYC,QAAiB;QACpCtF,UAAUsF;IACZ;IAEA,SAASC,4BACPC,MAAmB,EACnBC,MAAmB,EACnBC,eAAuB,EACvBC,cAAsB,EACtBC,QAA2B;QAE3BhG,cAAc4F;QACd3F,cAAc4F;QACdrD,YAAYG,OAAO,GAAG7E,WAAW6B;QACjC8C,mBAAmBE,OAAO,GAAG5E,qBAAqB4B;QAClDU,eAAe4F,YAAYD,UAAWF;IACxC;IAEA,SAASI;QACP5E,wBAAwB,EAAE;QAC1BE,oBAAoB;IACtB;IAEA,SAAS2E,eAAetG,IAAiC;QACvD,MAAM,EAAEwC,WAAW,EAAE,GAAGlD;QACxB,MAAMiH,6BAA6B,CAAC,CAAE/D,CAAAA,eAAe,CAAC,CAACA,YAAYgE,wBAAwB,AAAD;QAC1F,MAAMC,oBAAiE,CAAC;QACxEzG,KAAK0G,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,mBAAmB5C,GAAG,CAAC,CAAC,CAACoD,aAAavC,OAAO;YAC5F,MAAMwC,sBAAsBxC,MAAM,CAAC,EAAE;YACrC,qDAAqD;YACrD,MAAMkC,SAAiB;gBACrBO,OAAOF;gBACPjD,OAAOkD,oBAAoBlD,KAAK;gBAChCoD,kBAAkB;oBAChB/F,gBAAgB;gBAClB;gBACAgG,aAAa;oBACXC;oBACAjG,gBAAgB4F;gBAClB;gBACA,GAAIC,oBAAoBK,WAAW,IAAI;oBACrCC,OAAON,oBAAoBK,WAAW;gBACxC,CAAC;YACH;YACA,OAAOX;QACT;QAEA,qBACE,oBAACxJ;YACCqK,SAAS;mBAAIX;aAAgB;YAC7BY,kBAAkBpI,MAAMqI,uBAAuB;YAC/CC,cAActI,MAAMuI,mBAAmB;YACtC,GAAItB,8BAA8B;gBAAEuB,wBAAwBzB;YAAiB,CAAC;YAC9E,GAAG/G,MAAMkD,WAAW;YACrBF,iBAAiBA;YACjByF,UAAUC;YACVC,WAAWlH;;IAGjB;IAEA,SAASmH;QACP,MAAMC,wCACJ5E,eAAexF,UAAUuF,UAAU,IAAIhE,MAAM8I,kBAAkB,KAAK;QACtE,IAAI,CAACD,uCAAuC;YAC1C,0FAA0F;YAC1F,MAAME,aAAa,IAAIC;YACvB,IAAK,IAAIC,IAAIzI,QAAQuD,MAAM,GAAG,GAAGkF,KAAK,GAAGA,IAAK;gBAC5C,MAAM5B,QAAQ7G,OAAO,CAACyI,EAAE;gBACxB,IAAI5B,MAAM3G,IAAI,IAAIwI,MAAMC,OAAO,CAAC9B,MAAM3G,IAAI,GAAG;oBAC3C,KAAK,MAAM0I,KAAK/B,MAAM3G,IAAI,CAAE;wBAC1B,IAAI,OAAO0I,EAAEvG,CAAC,KAAK,UAAU;4BAC3BkG,WAAWM,GAAG,CAACD,EAAEvG,CAAC;wBACpB;oBACF;gBACF;YACF;YACA,OAAOqG,MAAMI,IAAI,CAACP;QACpB;QAEA,OAAO9J,mBAAmBsK,wBAAwBvJ,MAAM8I,kBAAkB;IAC5E;IAEA,SAASS;QACP,MAAMC,mBAA6C,CAAC;QACpDhJ,QAAQ4G,OAAO,CAACC,CAAAA;YACd,IAAIA,MAAM3G,IAAI,IAAIwI,MAAMC,OAAO,CAAC9B,MAAM3G,IAAI,GAAG;gBAC3C2G,MAAM3G,IAAI,CAAC0G,OAAO,CAACgC,CAAAA;oBACjB,IAAI,OAAOA,EAAEvG,CAAC,KAAK,UAAU;wBAC3B,IAAI,CAAC2G,gBAAgB,CAACJ,EAAEvG,CAAC,CAAC,EAAE;4BAC1B2G,gBAAgB,CAACJ,EAAEvG,CAAC,CAAC,GAAG,EAAE;wBAC5B;wBACA,IAAI,OAAOuG,EAAExG,CAAC,KAAK,UAAU;4BAC3B4G,gBAAgB,CAACJ,EAAEvG,CAAC,CAAC,CAAC0E,IAAI,CAAC6B,EAAExG,CAAC;wBAChC;oBACF;gBACF;YACF;QACF;QACA,OAAO4G;IACT;IAEA,SAASd,yBACPe,eAAyB,EACzBC,KAA0C,EAC1CC,aAAsB;YAElB3J,oBAMAA;QANJ,KAAIA,qBAAAA,MAAMkD,WAAW,cAAjBlD,yCAAAA,mBAAmBkH,wBAAwB,EAAE;YAC/CjE,mBAAmBwG;QACrB,OAAO;YACLxG,mBAAmBwG,gBAAgBG,KAAK,CAAC,CAAC;QAC5C;QAEA,KAAI5J,sBAAAA,MAAMkD,WAAW,cAAjBlD,0CAAAA,oBAAmByI,QAAQ,EAAE;YAC/BzI,MAAMkD,WAAW,CAACuF,QAAQ,CAACgB,iBAAiBC,OAAOC;QACrD;IACF;IAEA,SAASE,cAAcC,WAAmB,EAAEC,OAAe,EAAEC,UAAkB,EAAEC,WAAoB;QACnG,IAAI3H,gBAAgByH,SAAS;YAC3B,OAAO5K,OAAO+K,uBAAuB;QACvC,OAAO;YACL,OAAOJ;QACT;IACF;IAEA,SAAShD,YAAYD,QAAoB,EAAEF,eAAuB;QAChE,MAAMwD,SAAuB,EAAE;QAC/B,IAAI/H,kBAAkB;YACpB5B,UAAU0B;QACZ,OAAO;YACL1B,UAAUC,uCAAuCT,MAAMU,IAAI,CAACC,gBAAgB;QAC9E;QAEA,IAAImD,eAAexE,WAAW0E,UAAU,EAAE;YACxC3C,cAAcR,YAAYuJ,SAAS,KAAK;QAC1C;QAEA,MAAMC,gBAAgBrM,MAAMwC,SAAS,CAAC6G;YACpC,OAAOrJ,MAAMqJ,MAAM3G,IAAI,EAA6B,CAAC8D;gBACnD,OAAOA,KAAK8F,UAAU;YACxB;QACF;QAEA,MAAMC,iBACJzG,eAAexE,WAAW0E,UAAU,IAAIC,eAAexF,UAAUuF,UAAU,GACvElF,6BAA6B;YAC3B4B,MAAMF;YACNiG,QAAQ5F;YACR2J,eAAe1J;YACfsF,YAAYpG,MAAMoG,UAAU;YAC5BX,YAAYzF,MAAMyF,UAAU;QAC9B,KACA;QAEN,IAAK,IAAIwD,IAAIzI,QAAQuD,MAAM,GAAG,GAAGkF,KAAK,GAAGA,IAAK;YAC5C,MAAMwB,kBAAgC,EAAE;YAExC,MAAMC,YAAoBlK,OAAO,CAACyI,EAAE,CAAC3B,MAAM;YAC3C,MAAMwC,cAAsBtJ,OAAO,CAACyI,EAAE,CAACvE,KAAK;YAC5C,MAAMiG,oBAAoBhE,kBAAkB1F,QAAQ2J,MAAM,GAAI;YAE9D,IAAK,IAAIC,IAAI,GAAGA,IAAIrK,OAAO,CAACyI,EAAE,CAACvI,IAAI,CAACqD,MAAM,EAAE8G,IAAK;oBACmBrK,WA2BrDA;gBA3Bb,MAAM,EAAEoC,CAAC,EAAEC,CAAC,EAAEiI,gBAAgB,EAAE1J,6BAA6B,EAAE,GAAGZ,oBAAAA,+BAAAA,YAAAA,OAAS,CAACyI,EAAE,cAAZzI,gCAAAA,UAAcE,IAAI,CAACmK,EAAE;gBACvF,MAAME,SAASlK,wBAAAA,kCAAAA,YAAc+B;gBAC7B,oCAAoC;gBACpC,MAAMoI,SACJ/G,eAAexF,UAAUuF,UAAU,GAC/BlD,CAAAA,wBAAAA,kCAAAA,YAAc+B,MAAM/B,CAAAA,CAAAA,wBAAAA,kCAAAA,YAAasJ,SAAS,IAAGtJ,YAAYsJ,SAAS,KAAK,IAAI,CAAA,IAC3EtJ,wBAAAA,kCAAAA,YAAc+B;gBACpB,IAAI,CAAChE,YAAYkM,QAAQC,SAAS;oBAChC;gBACF;gBACA,MAAMC,WAAW,GAAG9K,UAAU,CAAC,EAAE8I,EAAE,CAAC,EAAE4B,GAAG;gBACzC,MAAMK,WAAW,GAAGhL,UAAU,CAAC,EAAE+I,EAAE,CAAC,EAAE4B,GAAG;gBACzC,MAAMM,kBAAkB,AAAC3K,OAAO,CAACyI,EAAE,CAACvI,IAAI,CAACmK,EAAE,CAA2BP,UAAU;gBAChF,MAAMc,WAAW;gBACjB,MAAMC,WAAW;gBACjB,MAAMC,eACJH,mBAAmBd,kBAAkB,IACjCvG,eAAexE,WAAW0E,UAAU,GAClC,AAACmH,kBAAkBZ,iBAAkBF,gBACrCe,WAAW,AAAED,CAAAA,kBAAkBC,QAAO,IAAMf,CAAAA,gBAAgBe,QAAO,IAAOC,CAAAA,WAAWD,QAAO,IAC9F9I,gBAAgB4I,WAChB,IACA;gBAEN,MAAMK,mBAA4BC,mBAAmBd,cAAce,0BAA0BrJ;gBAE7F,MAAMsJ,qBAAqBlL,OAAO,CAACyI,EAAE,CAAC0C,iBAAiB,IAAIrJ,gBAAgB4I;gBAC3E,MAAMU,OAAOpL,oBAAAA,+BAAAA,mBAAAA,OAAS,CAACyI,EAAE,CAACvI,IAAI,CAACmK,EAAE,cAApBrK,uCAAAA,iBAAsBoL,IAAI;gBACvC,IAAI,CAACvI,YAAYG,OAAO,EAAE;oBACxBiH,gBAAgBlD,IAAI,eAClB,wDACE,oBAACsE;wBACCC,IAAIZ;wBACJa,KAAKb;wBACLc,GAAGhH,KAAKjH,GAAG,CAACuN,cAAc;wBAC1BW,IAAIlB,SAAS1J;wBACb6K,IAAIlB;wBACJmB,qBAAmBZ;wBACnBa,aAAa,CAAC1C,QACZ2C,aACEzJ,GACAC,GACA8H,mBACAG,kBACAI,UACA9J,+BACAsI;wBAGJ4C,aAAa,CAAC5C,QACZ2C,aACEzJ,GACAC,GACA8H,mBACAG,kBACAI,UACA9J,+BACAsI;wBAGJ6C,YAAYC;wBACZC,SAAS/C,CAAAA,QACPgD,aAAahD,OAAOuB,UAAUrI,GAAGkI,kBAAkBI,UAAU9J;wBAE/DuL,QAAQH;wBACP,GAAGI,iBAAiBpM,OAAO,CAACyI,EAAE,CAACvI,IAAI,CAACmK,EAAE,CAACgC,gBAAgB,CAAC;wBACzDC,SAASvB,oBAAoB,CAACG,qBAAqB,IAAI;wBACvDqB,MAAMlD,cAAcC,aAAaoB,UAAUL,GAAG;wBAC9CmC,QAAQlD;wBACRmD,MAAK;wBACLC,cAAYC,cAAclE,GAAG4B;wBAC7BuC,UAAU7B,mBAAmB,IAAInI;wBACjC,KAEDwI,sBACC,oBAACA;wBACCG,KAAK,GAAGb,SAAS,MAAM,CAAC;wBACxBtI,GAAGmI,SAAS1J;wBACZwB,GAAGmI,SAAShG,KAAKjH,GAAG,CAACuN,eAAe,IAAI;wBACxC+B,WAAW7L,QAAQ8L,WAAW;uBAE7B1B;gBAKX;YACF;YAEA,IAAItI,mBAAmBE,OAAO,EAAE;oBAMZhD;gBALlBiK,gBAAgBlD,IAAI,IACf1H,iCAAiC;oBAClC0N,YAAY1M;oBACZ2M,YAAY1M;oBACZuM,WAAW7L,QAAQ8L,WAAW,IAAI;oBAClCG,WAAW,EAAGjN,oBAAAA,+BAAAA,aAAAA,OAAS,CAACyI,EAAE,cAAZzI,iCAAD,AAACA,WAA2CiN,WAAW;gBACtE;YAEJ;YAEAtD,OAAO5C,IAAI,eACT,oBAACmG;gBACC3B,KAAK,CAAC,OAAO,EAAE9C,GAAG;gBAClBgE,MAAK;gBACLC,cAAY,GAAGxC,UAAU,SAAS,EAAEzB,IAAI,EAAE,IAAI,EAAEzI,QAAQuD,MAAM,CAAC,MAAM,EAAEvD,OAAO,CAACyI,EAAE,CAACvI,IAAI,CAACqD,MAAM,CAAC,aAAa,CAAC;eAE3G0G;QAGP;QACA,mEAAmE;QACnE,IAAI,CAACzK,MAAM2N,sBAAsB,EAAE;YACjC,IAAI;gBACFC,SAASC,cAAc,CAACxN,eAAeuN,SAASC,cAAc,CAACxN,YAAayN,MAAM;YAClF,oCAAoC;YACtC,EAAE,OAAOC,GAAG,CAAC;QACf;QACA,4CAA4C;QAC5C,IAAI,CAAC/N,MAAMgO,eAAe,IAAIhO,MAAM2N,sBAAsB,EAAE;YAC1D,MAAMM,eAAepQ,SAASgJ,UAAUqH,IAAI,CAACrN;YAC7C,IAAI;gBACF+M,SAASC,cAAc,CAACxN,eAAeuN,SAASC,cAAc,CAACxN,YAAayN,MAAM;YAClF,oCAAoC;YACtC,EAAE,OAAOC,GAAG,CAAC;YACb,MAAMI,eAAe;gBACnBC,YAAY5M,QAAQ6M,OAAO;gBAC3BvC,IAAIzL;gBACJiO,MAAML;YACR;YACAA,gBAAgB1O,oBAAoB4O;QACtC;QACA,OAAOhE;IACT;IAEA,SAASuC,aACPhD,KAAkD,EAClDuB,QAAgB,EAChBrI,CAAyB,EACzBkI,gBAAoC,EACpCI,QAAgB,EAChB9J,6BAAkD;QAElD,IAAI6K,KAAK;QACT,IAAIC,KAAK;QAET,MAAMqC,aAAa,AAAC7E,MAAM8E,MAAM,CAAsBC,qBAAqB;QAC3ExC,KAAKsC,WAAWG,IAAI,GAAGH,WAAWjK,KAAK,GAAG;QAC1C4H,KAAKqC,WAAWI,GAAG,GAAGJ,WAAWlK,MAAM,GAAG;QAC1CM,eAAesH,IAAIC;QACnBnL,mBAAmBmK;QACnB,MAAM0D,gBAAgBhM,aAAaiM,OAAOlP,WAAWiD,GAAG5C,MAAM8O,MAAM,IAAIlM;QACxE,MAAMmM,OAAOnM,aAAaiM,OAAOjM,EAAEoM,OAAO,KAAKpM;QAC/C,MAAMqM,QAAQ1Q,KAAKqC,gBAAgB,CAACsO,UAAoCA,QAAQtM,CAAC,KAAKmM;QACtF,oFAAoF;QAEpF,IAAIE,OAAO;YACTpR,SAAS,CAAC,CAAC,EAAEuC,eAAe,EACzB+O,IAAI,CAAC,aAAa,IAAM,CAAC,UAAU,EAAEtO,YAAY+B,KAAKvB,YAAY,IAAI,CAAC,EACvE8N,IAAI,CAAC,cAAc;YACtBnO,UAAUoG,OAAO,CAAC,CAACgI;gBACjB,IAAIA,IAAI3K,KAAK,KAAKwG,UAAU;oBAC1BlI,eAAe;oBACf+H,mBAAmBlJ,eAAekJ,oBAAoBlJ,eAAe,KAAKgN;oBAC1E3M,eAAegN,MAAMI,MAAM;oBAC3B5M,qBAAqBwM;oBACrB1M,eAAe2I;gBACjB;YACF;QACF,OAAO;YACL3I,eAAe2I;QACjB;IACF;IAEA,SAASmB,aACPzJ,CAAyB,EACzBC,CAAgB,EAChByM,UAAkB,EAClBxE,gBAAoC,EACpCI,QAAgB,EAChB9J,6BAA6D,EAC7DmO,UAAwC;QAExCA,uBAAAA,iCAAAA,WAAYC,OAAO;QACnB,MAAMZ,gBAAgBhM,aAAaiM,OAAOlP,WAAWiD,GAAG5C,MAAM8O,MAAM,IAAIlM;QACxE,MAAMmM,OAAOnM,aAAaiM,OAAOjM,EAAEoM,OAAO,KAAKpM;QAC/C,MAAMqM,QAAQ1Q,KAAKqC,gBAAgB,CAACsO,UAAoCA,QAAQtM,CAAC,KAAKmM;QACtF,oFAAoF;QAEpF,IAAIE,OAAO;YACTpR,SAAS,CAAC,CAAC,EAAEuC,eAAe,EACzB+O,IAAI,CAAC,aAAa,IAAM,CAAC,UAAU,EAAEtO,YAAY+B,KAAKvB,YAAY,EAAE,EAAEP,YAAY+B,GAAG,CAAC,CAAC,EACvFsM,IAAI,CAAC,cAAc,cACnBA,IAAI,CAAC,MAAM,GAAGG,aAAaxO,YAAY+B,IAAI;YAE9C,IAAI9B,qBAAqBmK,UAAU;gBACjCnK,mBAAmBmK;gBACnBvG,eAAe4K,WAAWE,OAAO,EAAEF,WAAWG,OAAO;gBACrD5E,mBAAmBlJ,eAAekJ,oBAAoBlJ,eAAe,KAAKgN;gBAC1E3M,eAAegN,MAAMI,MAAM;gBAC3B5M,qBAAqBwM;gBACrB1M,eAAe2I;YACjB;QACF,OAAO;YACL3I,eAAe2I;QACjB;IACF;IAEA;;kFAEgF,GAEhF,SAAS0B,iBAAiB+C,IAAiB;QACzC,IAAIA,MAAM;YACR,OAAO;gBACLC,SAASD;YACX;QACF;QAEA,OAAO,CAAC;IACV;IAEA,SAASnD;QACP3O,SAAS,CAAC,CAAC,EAAEuC,eAAe,EAAE+O,IAAI,CAAC,cAAc;IACnD;IAEA,SAASnH;QACPjH,mBAAmB;QACnBwB,eAAe;QACf,IAAIO,eAAe;YACjBC,eAAe;QACjB;IACF;IAEA;;;;4EAI0E,GAE1E,SAASyI,mBAAmBlE,MAAc;QACxC,OAAOuI,wBAAwBC,QAAQ,CAACxI;IAC1C;IAEA;wEACsE,GAEtE,SAASmE;QACP,OAAOoE,wBAAwB9L,MAAM,KAAK;IAC5C;IAEA,SAAS8L;QACP,OAAO7M,gBAAgBe,MAAM,GAAG,IAAIf,kBAAkBlB,eAAe;YAACA;SAAa,GAAG,EAAE;IAC1F;IAEA,SAASqL,cAAc4C,WAAmB,EAAE/F,UAAkB;YAOrD3C;QANP,MAAM8C,SAAS3J,OAAO,CAACuP,YAAY;QACnC,MAAM1I,QAAQ8C,OAAOzJ,IAAI,CAACsJ,WAAW;QACrC,MAAMgG,gBAAgB3I,MAAMzE,CAAC,YAAYiM,OAAOlP,WAAW0H,MAAMzE,CAAC,EAAE5C,MAAM8O,MAAM,IAAIzH,MAAMzE,CAAC;QAC3F,MAAMqN,SAAS5I,MAAMyD,gBAAgB,IAAIkF;QACzC,MAAM1I,SAAS6C,OAAO7C,MAAM;QAC5B,MAAM4I,SAAS7I,MAAM8I,gBAAgB,IAAI9I,MAAMxE,CAAC;QAChD,OAAOwE,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,CACLtQ,CAAAA,MAAMU,IAAI,IACVV,MAAMU,IAAI,CAACC,gBAAgB,IAC3BX,MAAMU,IAAI,CAACC,gBAAgB,CAACoD,MAAM,GAAG,KACrC/D,MAAMU,IAAI,CAACC,gBAAgB,CAAC4P,MAAM,CAAC,CAAC/L,OAA6BA,KAAK9D,IAAI,CAACqD,MAAM,EAAEA,MAAM,GAAG,CAAA;IAEhG;IAEA,MAAM,EAAEb,WAAW,EAAE+C,UAAU,EAAEuK,UAAU,EAAE,GAAGxQ;IAChDQ,UAAUC,uCAAuCT,MAAMU,IAAI,CAACC,gBAAgB;IAE5E,IAAIyE,SAAS5E;IACb,IAAI0C,eAAe,CAAC,CAACA,YAAYgE,wBAAwB,EAAE;QACzD9B,SAASlD,qBAAqB6B,MAAM,IAAI,IAAI7B,uBAAuB1B;QACnEI,iBAAiBxB,YAAYgG;IAC/B;IAEA,IAAIqL,aAAa;IACjB,sDAAsD;IACtD,+BAA+B;IAC/B,2EAA2E;IAC3E,IAAI,CAACzQ,MAAM0Q,UAAU,IAAI,CAACrN,YAAYG,OAAO,EAAE;QAC7CiN,aAAazJ,eAAexG,UAAW,gDAAgD;IACzF;QAcWR;IAbX,MAAM2Q,eAAe;QACnB3O;QACAL;QACAiP,oBACE5Q,MAAM6Q,4BAA4B,IAAIrO,oBAClCxC,MAAM6Q,4BAA4B,CAACrO,qBACnCY;QACN,qBAAqB;QACrBhC;QACA,GAAGpB,MAAM2Q,YAAY;QACrBjO;QACAI;QACAgO,mBAAmB;QACnBC,SAAS/Q,CAAAA,iBAAAA,MAAM+Q,OAAO,cAAb/Q,4BAAAA,iBAAiB;QAC1BgR,aAAa;IACf;IACA,MAAMC,aAAa;QACjBhL;QACAuK;IACF;IAEA,MAAMU,cAAwB1Q,QAC3B+D,GAAG,CAAC,CAAC8C,QAAqCA,MAAM3G,IAAI,CAAC6D,GAAG,CAAC,CAAC4M,KAA8BA,GAAGvO,CAAC,GAC5FwO,IAAI;IAEPjQ,eAAe;WAAI,IAAI6H,IAAIkI;KAAa;IAExC,iDAAiD;IACjD,MAAMG,eAAyBzI;IAE/B,OAAO,CAAC0H,gCACN,oBAACpR;QACE,GAAGc,KAAK;QACTsR,YAAYtR,MAAMU,IAAI,CAAC4Q,UAAU;QACjClM,QAAQA;QACRS,WAAWxG,WAAWS,YAAY;QAClC6Q,cAAcA;QACdM,YAAYA;QACZR,YAAYA;QACZc,YAAYjL;QACZkL,cAAchL;QACdT,WAAWjC;QACXuB,WAAWpB;QAEV,GAAIA,eAAexF,UAAUuF,UAAU,GAAG;YAAEyN,6BAA6BJ;QAAa,IAAI,CAAC,CAAC;QAC7FK,kBAAkBvM;QAClBwM,uBAAuB/L;QACvBgM,aAAazT;QACbC,mBAAmBA;QACnByT,mBAAmB7J;QACnB8J,+BAA+BxR;QAC/ByR,uBAAuB5Q;QACvBuC,cAAcpC;QACb,GAAIgC,mBAAmBE,OAAO,GAAG;YAAEwO,WAAW;YAAGC,WAAW,CAAC;QAAE,IAAI,CAAC,CAAC;QACtE,oCAAoC,GACpC,kDAAkD;QAClDC,UAAU,CAAClS;YACTa,cAAcb,MAAMyG,MAAM;YAC1B3F,cAAcd,MAAMwK,aAAa;YACjC,qBACE,wDACE,oBAACkD,yBACC,oBAACyE;gBACCC,IAAI;gBACJC,IAAI;gBACJC,IAAI;gBACJC,IAAIvS,MAAM2G,eAAe;gBACzBqG,QAAQ;gBACRlB,IAAI1L;gBACJoS,YAAY;gBACZC,iBAAiB;8BAEnB,oBAAC/E,WAAGxM;QAIZ;uBAGF,oBAACwR;QAAI5G,IAAIvL;QAAe0M,MAAM;QAAS0F,OAAO;YAAE7F,SAAS;QAAI;QAAGI,cAAY;;AAEhF,GAAG;AACHpN,aAAa8S,WAAW,GAAG"}
|
|
1
|
+
{"version":3,"sources":["../src/components/ScatterChart/ScatterChart.tsx"],"sourcesContent":["import * 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 find,\n findNumericMinMaxOfY,\n IDomainNRange,\n YAxisType,\n useRtl,\n isTextMode,\n isScatterPolarSeries,\n isPlottable,\n getRangeForScatterMarkerSize,\n domainRangeOfDateForAreaLineScatterVerticalBarCharts,\n domainRangeOfNumericForAreaLineScatterCharts,\n sortAxisCategories,\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} 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 _calloutPoints: any[] = calloutData(_points) || [];\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<[]>([]);\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<any[]>([]);\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 shiftX: number,\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 xVal = x instanceof Date ? x.getTime() : x;\n const found = find(_calloutPoints, (element: { x: string | number }) => element.x === xVal);\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 | Date,\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 xVal = x instanceof Date ? x.getTime() : x;\n const found = find(_calloutPoints, (element: { x: string | number }) => element.x === xVal);\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 _calloutPoints = 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,\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","find","findNumericMinMaxOfY","YAxisType","useRtl","isTextMode","isScatterPolarSeries","isPlottable","getRangeForScatterMarkerSize","domainRangeOfDateForAreaLineScatterVerticalBarCharts","domainRangeOfNumericForAreaLineScatterCharts","sortAxisCategories","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","_calloutPoints","_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","shiftX","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","xVal","getTime","found","element","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","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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"}
|
|
@@ -242,9 +242,8 @@ const MIN_DOMAIN_MARGIN = 8;
|
|
|
242
242
|
// eslint-disable-next-line @typescript-eslint/no-shadow
|
|
243
243
|
const { YValueHover, hoverXValue } = _getCalloutContentForLineAndBar(point);
|
|
244
244
|
const content = YValueHover.map((item, index)=>{
|
|
245
|
-
var _props_culture;
|
|
246
245
|
return /*#__PURE__*/ React.createElement(React.Fragment, null, /*#__PURE__*/ React.createElement(ChartPopover, {
|
|
247
|
-
culture:
|
|
246
|
+
culture: props.culture,
|
|
248
247
|
clickPosition: clickPosition,
|
|
249
248
|
isPopoverOpen: isPopoverOpen,
|
|
250
249
|
legend: item.legend,
|
|
@@ -259,12 +258,11 @@ const MIN_DOMAIN_MARGIN = 8;
|
|
|
259
258
|
return /*#__PURE__*/ React.createElement(React.Fragment, null, content);
|
|
260
259
|
}
|
|
261
260
|
function _renderContentForOnlyBars(_props) {
|
|
262
|
-
var _props_culture;
|
|
263
261
|
return /*#__PURE__*/ React.createElement(React.Fragment, null, /*#__PURE__*/ React.createElement(ChartPopover, {
|
|
264
262
|
XValue: _props.xAxisCalloutData || _props.x,
|
|
265
263
|
xCalloutValue: xCalloutValue,
|
|
266
264
|
yCalloutValue: yCalloutValue,
|
|
267
|
-
culture:
|
|
265
|
+
culture: props.culture,
|
|
268
266
|
clickPosition: clickPosition,
|
|
269
267
|
isPopoverOpen: isPopoverOpen,
|
|
270
268
|
legend: _props.legend,
|
|
@@ -937,7 +935,6 @@ const MIN_DOMAIN_MARGIN = 8;
|
|
|
937
935
|
_yMax = Math.max(d3Max(_points, (point)=>point.y), props.yMaxValue || 0);
|
|
938
936
|
_yMin = Math.min(d3Min(_points, (point)=>point.y), props.yMinValue || 0);
|
|
939
937
|
const legendBars = _getLegendData(_points);
|
|
940
|
-
var _props_culture;
|
|
941
938
|
const calloutProps = {
|
|
942
939
|
..._isHavingLine && {
|
|
943
940
|
YValueHover: hoveredYValues,
|
|
@@ -952,7 +949,7 @@ const MIN_DOMAIN_MARGIN = 8;
|
|
|
952
949
|
clickPosition: clickPosition,
|
|
953
950
|
isPopoverOpen: isPopoverOpen,
|
|
954
951
|
isCalloutForStack: _isHavingLine && (_noLegendHighlighted() || _getHighlightedLegend().length > 1),
|
|
955
|
-
culture:
|
|
952
|
+
culture: props.culture,
|
|
956
953
|
isCartesian: true,
|
|
957
954
|
customCallout: {
|
|
958
955
|
customizedCallout: _getCustomizedCallout() != null ? _getCustomizedCallout() : undefined,
|