@fluentui/react-charts 0.0.0-nightly-20251212-0406.1 → 0.0.0-nightly-20251215-0407.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 +13 -13
- package/dist/index.d.ts +4 -0
- package/lib/components/CommonComponents/Annotations/ChartAnnotationLayer.js +20 -18
- package/lib/components/CommonComponents/Annotations/ChartAnnotationLayer.js.map +1 -1
- package/lib/components/CommonComponents/Annotations/useChartAnnotationLayer.styles.js +7 -1
- package/lib/components/CommonComponents/Annotations/useChartAnnotationLayer.styles.js.map +1 -1
- package/lib/components/CommonComponents/Annotations/useChartAnnotationLayer.styles.raw.js +7 -1
- package/lib/components/CommonComponents/Annotations/useChartAnnotationLayer.styles.raw.js.map +1 -1
- package/lib/components/CommonComponents/CartesianChart.js +8 -1
- package/lib/components/CommonComponents/CartesianChart.js.map +1 -1
- package/lib/components/LineChart/LineChart.js +5 -1
- package/lib/components/LineChart/LineChart.js.map +1 -1
- package/lib/components/ScatterChart/ScatterChart.js +11 -1
- package/lib/components/ScatterChart/ScatterChart.js.map +1 -1
- package/lib/components/ScatterChart/ScatterChart.types.js.map +1 -1
- package/lib/components/VerticalBarChart/VerticalBarChart.js +5 -0
- package/lib/components/VerticalBarChart/VerticalBarChart.js.map +1 -1
- package/lib/utilities/utilities.js +2 -2
- package/lib/utilities/utilities.js.map +1 -1
- package/lib-commonjs/components/CommonComponents/Annotations/ChartAnnotationLayer.js +20 -18
- package/lib-commonjs/components/CommonComponents/Annotations/ChartAnnotationLayer.js.map +1 -1
- package/lib-commonjs/components/CommonComponents/Annotations/useChartAnnotationLayer.styles.js +7 -1
- package/lib-commonjs/components/CommonComponents/Annotations/useChartAnnotationLayer.styles.js.map +1 -1
- package/lib-commonjs/components/CommonComponents/Annotations/useChartAnnotationLayer.styles.raw.js +7 -1
- package/lib-commonjs/components/CommonComponents/Annotations/useChartAnnotationLayer.styles.raw.js.map +1 -1
- package/lib-commonjs/components/CommonComponents/CartesianChart.js +8 -1
- package/lib-commonjs/components/CommonComponents/CartesianChart.js.map +1 -1
- package/lib-commonjs/components/LineChart/LineChart.js +5 -1
- package/lib-commonjs/components/LineChart/LineChart.js.map +1 -1
- package/lib-commonjs/components/ScatterChart/ScatterChart.js +11 -1
- package/lib-commonjs/components/ScatterChart/ScatterChart.js.map +1 -1
- package/lib-commonjs/components/ScatterChart/ScatterChart.types.js.map +1 -1
- package/lib-commonjs/components/VerticalBarChart/VerticalBarChart.js +5 -0
- package/lib-commonjs/components/VerticalBarChart/VerticalBarChart.js.map +1 -1
- package/lib-commonjs/utilities/utilities.js +2 -2
- package/lib-commonjs/utilities/utilities.js.map +1 -1
- package/package.json +12 -12
|
@@ -46,6 +46,7 @@ import { useImageExport } from '../../utilities/hooks';
|
|
|
46
46
|
const [isSelectedLegend, setIsSelectedLegend] = React.useState(false);
|
|
47
47
|
const [activePoint, setActivePoint] = React.useState('');
|
|
48
48
|
const [stackCalloutProps, setStackCalloutProps] = React.useState();
|
|
49
|
+
const [dataPointCalloutProps, setDataPointCalloutProps] = React.useState();
|
|
49
50
|
const [clickPosition, setClickPosition] = React.useState({
|
|
50
51
|
x: 0,
|
|
51
52
|
y: 0
|
|
@@ -395,6 +396,7 @@ import { useImageExport } from '../../utilities/hooks';
|
|
|
395
396
|
xAxisCalloutData ? setHoverXValue(xAxisCalloutData) : setHoverXValue('' + formattedData);
|
|
396
397
|
setYValueHover(found.values);
|
|
397
398
|
setStackCalloutProps(found);
|
|
399
|
+
setDataPointCalloutProps(found);
|
|
398
400
|
setActivePoint(circleId);
|
|
399
401
|
}
|
|
400
402
|
});
|
|
@@ -415,6 +417,7 @@ import { useImageExport } from '../../utilities/hooks';
|
|
|
415
417
|
xAxisCalloutData ? setHoverXValue(xAxisCalloutData) : setHoverXValue('' + formattedData);
|
|
416
418
|
setYValueHover(found.values);
|
|
417
419
|
setStackCalloutProps(found);
|
|
420
|
+
setDataPointCalloutProps(found);
|
|
418
421
|
setActivePoint(circleId);
|
|
419
422
|
}
|
|
420
423
|
} else {
|
|
@@ -441,6 +444,9 @@ import { useImageExport } from '../../utilities/hooks';
|
|
|
441
444
|
setPopoverOpen(false);
|
|
442
445
|
}
|
|
443
446
|
}
|
|
447
|
+
function _getCustomizedCallout() {
|
|
448
|
+
return props.onRenderCalloutPerStack ? props.onRenderCalloutPerStack(stackCalloutProps) : props.onRenderCalloutPerDataPoint ? props.onRenderCalloutPerDataPoint(dataPointCalloutProps) : null;
|
|
449
|
+
}
|
|
444
450
|
/**
|
|
445
451
|
* This function checks if the given legend is highlighted or not.
|
|
446
452
|
* A legend can be highlighted in 2 ways:
|
|
@@ -495,7 +501,11 @@ import { useImageExport } from '../../utilities/hooks';
|
|
|
495
501
|
isPopoverOpen,
|
|
496
502
|
isCalloutForStack: true,
|
|
497
503
|
culture: props.culture,
|
|
498
|
-
isCartesian: true
|
|
504
|
+
isCartesian: true,
|
|
505
|
+
customCallout: {
|
|
506
|
+
customizedCallout: _getCustomizedCallout() !== null ? _getCustomizedCallout() : undefined,
|
|
507
|
+
customCalloutProps: props.calloutPropsPerDataPoint ? props.calloutPropsPerDataPoint(dataPointCalloutProps) : undefined
|
|
508
|
+
}
|
|
499
509
|
};
|
|
500
510
|
const tickParams = {
|
|
501
511
|
tickValues,
|
|
@@ -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, 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 props.xMinValue,\n props.xMaxValue,\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 xMinValue: props.xMinValue,\n xMaxValue: props.xMaxValue,\n yMinValue: props.yMinValue,\n yMaxValue: props.yMaxValue,\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","xMinValue","xMaxValue","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","yMinValue","yMaxValue","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","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 [dataPointCalloutProps, setDataPointCalloutProps] = 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 props.xMinValue,\n props.xMaxValue,\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 xMinValue: props.xMinValue,\n xMaxValue: props.xMaxValue,\n yMinValue: props.yMinValue,\n yMaxValue: props.yMaxValue,\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 setDataPointCalloutProps(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 setDataPointCalloutProps(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 function _getCustomizedCallout() {\n return props.onRenderCalloutPerStack\n ? props.onRenderCalloutPerStack(stackCalloutProps)\n : props.onRenderCalloutPerDataPoint\n ? props.onRenderCalloutPerDataPoint(dataPointCalloutProps)\n : null;\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 customCallout: {\n customizedCallout: _getCustomizedCallout() !== null ? _getCustomizedCallout()! : undefined,\n customCalloutProps: props.calloutPropsPerDataPoint\n ? props.calloutPropsPerDataPoint(dataPointCalloutProps!)\n : undefined,\n },\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","dataPointCalloutProps","setDataPointCalloutProps","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","xMinValue","xMaxValue","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","yMinValue","yMaxValue","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","_getCustomizedCallout","onRenderCalloutPerStack","onRenderCalloutPerDataPoint","_getHighlightedLegend","includes","seriesIndex","formattedDate","xValue","yValue","yAxisCalloutData","callOutAccessibilityData","ariaLabel","_isChartEmpty","filter","tickFormat","legendBars","calloutProps","YValueHover","descriptionMessage","getCalloutDescriptionMessage","isCalloutForStack","isCartesian","customCallout","customizedCallout","customCalloutProps","calloutPropsPerDataPoint","tickParams","xAxisLabels","dp","flat","_yAxisLabels","chartTitle","getmargins","getGraphData","stringDatasetForYAxisDomain","getMinMaxOfYAxis","getDomainNRangeValues","createYAxis","onChartMouseLeave","enableFirstRenderOptimization","datasetForXAxisDomain","children","line","x1","y1","x2","y2","visibility","strokeDasharray","div","style","displayName"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/components/ScatterChart/ScatterChart.types.ts"],"sourcesContent":["/* eslint-disable @typescript-eslint/naming-convention */\nimport { RenderFunction } from '../../utilities/index';\nimport {\n ChartProps,\n LineChartPoints,\n Margins,\n Basestate,\n RefArrayData,\n CustomizedCalloutData,\n} from '../../types/index';\nimport {\n CartesianChartProps,\n CartesianChartStyleProps,\n CartesianChartStyles,\n ChildProps,\n} from '../CommonComponents/index';\n\nexport type { ChildProps, LineChartPoints, Margins, Basestate, RefArrayData };\n\n/**\n * Line Chart properties\n * {@docCategory LineChart}\n */\nexport interface ScatterChartProps extends CartesianChartProps {\n /**\n * Data to render in the chart.\n */\n data: ChartProps;\n\n /**\n * Call to provide customized styling that will layer on top of the variant rules.\n */\n styles?: ScatterChartStyles;\n\n /**\n * Define a custom callout renderer for a data point\n */\n onRenderCalloutPerDataPoint?: RenderFunction<CustomizedCalloutData>;\n\n /**\n * Callback for getting callout description message\n */\n getCalloutDescriptionMessage?: (calloutDataProps: CustomizedCalloutData) => string | undefined;\n\n /**\n * The prop used to define the culture to localized the numbers\n */\n culture?: string;\n}\n\n/**\n * Scatter Chart styles\n * {@docCategory ScatterChart}\n */\nexport interface ScatterChartStyles extends CartesianChartStyles {\n /**\n * Style for the marker label\n */\n markerLabel?: string;\n}\n\n/**\n * Scatter Chart style properties\n * {@docCategory ScatterChart}\n */\nexport interface ScatterChartStyleProps extends CartesianChartStyleProps {}\n"],"names":[],"mappings":"AAAA,uDAAuD,
|
|
1
|
+
{"version":3,"sources":["../src/components/ScatterChart/ScatterChart.types.ts"],"sourcesContent":["/* eslint-disable @typescript-eslint/naming-convention */\nimport { RenderFunction } from '../../utilities/index';\nimport {\n ChartProps,\n LineChartPoints,\n Margins,\n Basestate,\n RefArrayData,\n CustomizedCalloutData,\n} from '../../types/index';\nimport {\n CartesianChartProps,\n CartesianChartStyleProps,\n CartesianChartStyles,\n ChildProps,\n} from '../CommonComponents/index';\n\nexport type { ChildProps, LineChartPoints, Margins, Basestate, RefArrayData };\n\n/**\n * Line Chart properties\n * {@docCategory LineChart}\n */\nexport interface ScatterChartProps extends CartesianChartProps {\n /**\n * Data to render in the chart.\n */\n data: ChartProps;\n\n /**\n * Call to provide customized styling that will layer on top of the variant rules.\n */\n styles?: ScatterChartStyles;\n\n /**\n * Define a custom callout renderer for a data point\n */\n onRenderCalloutPerDataPoint?: RenderFunction<CustomizedCalloutData>;\n\n /**\n * Define a custom callout renderer for a stack; default is to render per data point\n */\n onRenderCalloutPerStack?: RenderFunction<CustomizedCalloutData>;\n\n /**\n * Callback for getting callout description message\n */\n getCalloutDescriptionMessage?: (calloutDataProps: CustomizedCalloutData) => string | undefined;\n\n /**\n * The prop used to define the culture to localized the numbers\n */\n culture?: string;\n}\n\n/**\n * Scatter Chart styles\n * {@docCategory ScatterChart}\n */\nexport interface ScatterChartStyles extends CartesianChartStyles {\n /**\n * Style for the marker label\n */\n markerLabel?: string;\n}\n\n/**\n * Scatter Chart style properties\n * {@docCategory ScatterChart}\n */\nexport interface ScatterChartStyleProps extends CartesianChartStyleProps {}\n"],"names":[],"mappings":"AAAA,uDAAuD,GAkEvD;;;CAGC,GACD,WAA2E"}
|
|
@@ -887,6 +887,10 @@ const MIN_DOMAIN_MARGIN = 8;
|
|
|
887
887
|
right: margins.right + _domainMargin
|
|
888
888
|
};
|
|
889
889
|
}
|
|
890
|
+
function _getChartTitle() {
|
|
891
|
+
const { chartTitle, data } = props;
|
|
892
|
+
return (chartTitle ? `${chartTitle}. ` : '') + `Vertical bar chart with ${(data === null || data === void 0 ? void 0 : data.length) || 0} bars` + (_isHavingLine ? ' and 1 line' : '') + '. ';
|
|
893
|
+
}
|
|
890
894
|
function _isChartEmpty() {
|
|
891
895
|
return _points.length === 0 || _points.every((point)=>point.y === 0) && !_isHavingLine;
|
|
892
896
|
}
|
|
@@ -957,6 +961,7 @@ const MIN_DOMAIN_MARGIN = 8;
|
|
|
957
961
|
return !_isChartEmpty() ? /*#__PURE__*/ React.createElement(CartesianChart, {
|
|
958
962
|
...props,
|
|
959
963
|
points: _points,
|
|
964
|
+
chartTitle: _getChartTitle(),
|
|
960
965
|
chartType: ChartTypes.VerticalBarChart,
|
|
961
966
|
xAxisType: _xAxisType,
|
|
962
967
|
createYAxis: createNumericYAxis,
|