@fluentui/react-charts 0.0.0-nightly-20250704-0407.1 → 0.0.0-nightly-20250708-0405.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 +28 -15
- package/lib/components/DonutChart/Arc/Arc.js +10 -3
- 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/Arc/useArcStyles.styles.js +7 -2
- package/lib/components/DonutChart/Arc/useArcStyles.styles.js.map +1 -1
- package/lib/components/HorizontalBarChart/HorizontalBarChart.js +14 -3
- package/lib/components/HorizontalBarChart/HorizontalBarChart.js.map +1 -1
- package/lib/components/ScatterChart/ScatterChart.js +2 -2
- package/lib/components/ScatterChart/ScatterChart.js.map +1 -1
- package/lib/components/ScatterChart/useScatterChartStyles.styles.js +1 -1
- package/lib/components/ScatterChart/useScatterChartStyles.styles.js.map +1 -1
- package/lib/components/VerticalBarChart/VerticalBarChart.js +11 -13
- package/lib/components/VerticalBarChart/VerticalBarChart.js.map +1 -1
- package/lib/components/VerticalStackedBarChart/VerticalStackedBarChart.js +14 -11
- package/lib/components/VerticalStackedBarChart/VerticalStackedBarChart.js.map +1 -1
- package/lib-commonjs/components/DonutChart/Arc/Arc.js +10 -3
- 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/Arc/useArcStyles.styles.js +10 -2
- package/lib-commonjs/components/DonutChart/Arc/useArcStyles.styles.js.map +1 -1
- package/lib-commonjs/components/HorizontalBarChart/HorizontalBarChart.js +14 -3
- package/lib-commonjs/components/HorizontalBarChart/HorizontalBarChart.js.map +1 -1
- package/lib-commonjs/components/ScatterChart/ScatterChart.js +1 -1
- package/lib-commonjs/components/ScatterChart/ScatterChart.js.map +1 -1
- package/lib-commonjs/components/ScatterChart/useScatterChartStyles.styles.js +3 -3
- package/lib-commonjs/components/ScatterChart/useScatterChartStyles.styles.js.map +1 -1
- package/lib-commonjs/components/VerticalBarChart/VerticalBarChart.js +11 -13
- package/lib-commonjs/components/VerticalBarChart/VerticalBarChart.js.map +1 -1
- package/lib-commonjs/components/VerticalStackedBarChart/VerticalStackedBarChart.js +14 -11
- package/lib-commonjs/components/VerticalStackedBarChart/VerticalStackedBarChart.js.map +1 -1
- package/package.json +12 -12
|
@@ -53,7 +53,19 @@ const HorizontalBarChart = /*#__PURE__*/ _react.forwardRef((props, forwardedRef)
|
|
|
53
53
|
function _hoverOn(event, hoverVal, point) {
|
|
54
54
|
if ((!isPopoverOpen || legend !== point.legend) && _calloutAnchorPoint !== point && (_legendHighlighted(point.legend) || _noLegendHighlighted())) {
|
|
55
55
|
_calloutAnchorPoint = point;
|
|
56
|
-
|
|
56
|
+
let x = 0;
|
|
57
|
+
let y = 0;
|
|
58
|
+
if ('clientX' in event && event.clientX && event.clientY) {
|
|
59
|
+
// Mouse event
|
|
60
|
+
x = event.clientX;
|
|
61
|
+
y = event.clientY;
|
|
62
|
+
} else {
|
|
63
|
+
// Focus event
|
|
64
|
+
const targetRect = event.target.getBoundingClientRect();
|
|
65
|
+
x = targetRect.left + targetRect.width / 2;
|
|
66
|
+
y = targetRect.top + targetRect.height / 2;
|
|
67
|
+
}
|
|
68
|
+
updatePosition(x, y);
|
|
57
69
|
setHoverValue(hoverVal);
|
|
58
70
|
setLineColor(point.color);
|
|
59
71
|
setLegend(point.legend);
|
|
@@ -250,12 +262,11 @@ const HorizontalBarChart = /*#__PURE__*/ _react.forwardRef((props, forwardedRef)
|
|
|
250
262
|
key: index,
|
|
251
263
|
x: `${_isRTL ? 100 - startingPoint[index] - value - index * barSpacingInPercent : startingPoint[index] + index * barSpacingInPercent}%`,
|
|
252
264
|
y: 0,
|
|
253
|
-
"data-is-focusable": point.legend !== '' ? true : false,
|
|
254
265
|
width: value + '%',
|
|
255
266
|
height: _barHeight,
|
|
256
267
|
fill: color,
|
|
257
268
|
onMouseOver: point.legend !== '' ? (event)=>_hoverOn(event, xValue, point) : undefined,
|
|
258
|
-
onFocus: point.legend !== '' ? (event)=>_hoverOn
|
|
269
|
+
onFocus: point.legend !== '' ? (event)=>_hoverOn(event, xValue, point) : undefined,
|
|
259
270
|
role: "img",
|
|
260
271
|
"aria-label": _getAriaLabel(point),
|
|
261
272
|
onBlur: _hoverOff,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["HorizontalBarChart.tsx"],"sourcesContent":["import * as React from 'react';\nimport { useHorizontalBarChartStyles } from './useHorizontalBarChartStyles.styles';\nimport { ChartProps, HorizontalBarChartProps, ChartDataPoint, RefArrayData, HorizontalBarChartVariant } from './index';\nimport { formatToLocaleString } from '@fluentui/chart-utilities';\nimport { formatScientificLimitWidth, getAccessibleDataObject, useRtl } from '../../utilities/index';\nimport { useId } from '@fluentui/react-utilities';\nimport { tokens } from '@fluentui/react-theme';\nimport { useFocusableGroup } from '@fluentui/react-tabster';\nimport { ChartPopover } from '../CommonComponents/ChartPopover';\nimport { FocusableTooltipText } from '../../utilities/FocusableTooltipText';\nimport { Legend, Legends } from '../../index';\n\n/**\n * HorizontalBarChart is the context wrapper and container for all HorizontalBarChart content/controls,\n * It has no direct style or slot opinions.\n *\n * HorizontalBarChart also provides API interfaces for callbacks that will occur on navigation events.\n */\nexport const HorizontalBarChart: React.FunctionComponent<HorizontalBarChartProps> = React.forwardRef<\n HTMLDivElement,\n HorizontalBarChartProps\n>((props, forwardedRef) => {\n const legendContainer = React.useRef<HTMLDivElement | null>(null);\n const _uniqLineText: string = '_HorizontalLine_' + Math.random().toString(36).substring(7);\n const _refArray: RefArrayData[] = [];\n const _isRTL: boolean = useRtl();\n const barChartSvgRef: React.RefObject<SVGSVGElement> = React.createRef<SVGSVGElement>();\n const _emptyChartId: string = useId('_HBC_empty');\n let _barHeight: number;\n let _calloutAnchorPoint: ChartDataPoint | null;\n let isSingleBar: boolean = true;\n\n const [hoverValue, setHoverValue] = React.useState<string | number | Date | null>('');\n const [lineColor, setLineColor] = React.useState<string>('');\n const [legend, setLegend] = React.useState<string | null>('');\n const [xCalloutValue, setXCalloutValue] = React.useState<string | undefined>('');\n const [yCalloutValue, setYCalloutValue] = React.useState<string | undefined>('');\n const [barCalloutProps, setBarCalloutProps] = React.useState<ChartDataPoint>();\n const [barSpacingInPercent, setBarSpacingInPercent] = React.useState<number>(0);\n const [isPopoverOpen, setPopoverOpen] = React.useState<boolean>(false);\n const [clickPosition, setClickPosition] = React.useState({ x: 0, y: 0 });\n const [selectedLegend, setSelectedLegend] = React.useState<string>('');\n const [activeLegend, setActiveLegend] = React.useState<string>('');\n\n function _refCallback(element: SVGGElement, legendTitle: string | undefined): void {\n _refArray.push({ index: legendTitle, refElement: element });\n }\n\n function _hoverOn(\n event: React.MouseEvent<SVGRectElement, MouseEvent>,\n hoverVal: string | number | Date,\n point: ChartDataPoint,\n ): void {\n if (\n (!isPopoverOpen || legend !== point.legend!) &&\n _calloutAnchorPoint !== point &&\n (_legendHighlighted(point.legend) || _noLegendHighlighted())\n ) {\n _calloutAnchorPoint = point;\n updatePosition(event.clientX, event.clientY);\n setHoverValue(hoverVal);\n setLineColor(point.color!);\n setLegend(point.legend!);\n setXCalloutValue(point.xAxisCalloutData!);\n setYCalloutValue(point.yAxisCalloutData!);\n setBarCalloutProps(point);\n // ToDo - Confirm setting multiple state variables like this is performant.\n }\n }\n\n function _hoverOff(): void {\n /*ToDo. To fix*/\n }\n\n const _handleChartMouseLeave = () => {\n _calloutAnchorPoint = null;\n if (isPopoverOpen) {\n setPopoverOpen(false);\n setHoverValue('');\n setLineColor('');\n setLegend('');\n }\n };\n\n const _adjustProps = (): void => {\n _barHeight = props.barHeight || 12;\n };\n\n const _getChartDataText = (data: ChartProps) => {\n /* return props.barChartCustomData ? (\n <div role=\"text\">{props.barChartCustomData(data)}</div>\n ) : ( */\n return _getDefaultTextData(data);\n //)\n };\n\n function _createLegends(chartProps: ChartProps[]): JSX.Element {\n const legendItems: Legend[] = [];\n chartProps.forEach((point: ChartProps) => {\n point.chartData!.forEach((dataPoint: ChartDataPoint) => {\n const color: string = dataPoint.color!;\n // mapping data to the format Legends component needs\n const legendItem: Legend = {\n title: dataPoint.legend!,\n color,\n action: () => {\n if (selectedLegend === dataPoint.legend) {\n setSelectedLegend('');\n } else {\n setSelectedLegend(dataPoint.legend!);\n }\n },\n hoverAction: () => {\n _handleChartMouseLeave();\n setActiveLegend(dataPoint.legend!);\n },\n onMouseOutAction: () => {\n setActiveLegend('');\n },\n };\n legendItems.push(legendItem);\n });\n });\n const legends = (\n <Legends legends={legendItems} centerLegends overflowText={props.legendsOverflowText} {...props.legendProps} />\n );\n return legends;\n }\n\n function _getDefaultTextData(data: ChartProps): JSX.Element {\n const { culture } = props;\n const accessibilityData = getAccessibleDataObject(data.chartDataAccessibilityData!, 'text', false);\n if (!isSingleBar) {\n const total = data.chartData!.reduce(\n (acc: number, point: ChartDataPoint) =>\n acc + (point.horizontalBarChartdata!.x ? point.horizontalBarChartdata!.x : 0),\n 0,\n );\n return (\n <div className={classes.chartTitleRight} {...accessibilityData}>\n {formatToLocaleString(total, culture) as React.ReactNode}\n </div>\n );\n }\n const chartDataMode = props.chartDataMode || 'default';\n const chartData: ChartDataPoint = data!.chartData![0];\n const x = chartData.horizontalBarChartdata!.x;\n const y = chartData.horizontalBarChartdata!.total!;\n\n switch (chartDataMode) {\n case 'default':\n return (\n <div className={classes.chartTitleRight} {...accessibilityData}>\n {formatToLocaleString(x, culture) as React.ReactNode}\n </div>\n );\n case 'fraction':\n return (\n <div {...accessibilityData}>\n <span className={classes.chartTitleRight}>{formatToLocaleString(x, culture) as React.ReactNode}</span>\n <span className={classes.chartDataTextDenominator}>{' / ' + formatToLocaleString(y, culture)}</span>\n </div>\n );\n case 'percentage':\n const dataRatioPercentage = `${formatToLocaleString(Math.round((x / y) * 100), culture)}%`;\n return (\n <div className={classes.chartTitleRight} {...accessibilityData}>\n {dataRatioPercentage}\n </div>\n );\n }\n }\n\n function _createBenchmark(data: ChartProps): JSX.Element {\n if (data.chartData![0].horizontalBarChartdata!.total === undefined) {\n return <></>;\n }\n const totalData = data.chartData![0].horizontalBarChartdata!.total!;\n const benchmarkData = data.chartData![0].data;\n const benchmarkRatio = Math.round(((benchmarkData ? benchmarkData : 0) / totalData) * 100);\n\n const benchmarkStyles = {\n left: 'calc(' + benchmarkRatio + '% - 4px)',\n };\n\n return (\n <div className={classes.benchmarkContainer}>\n <div className={classes.triangle} style={benchmarkStyles} />\n </div>\n );\n }\n\n /**\n * This functions returns an array of <rect> elements, which form the bars\n * For each bar an x value, and a width needs to be specified\n * The computations are done based on percentages\n * Extra margin is also provided, in the x value to provide some spacing in between the bars\n */\n\n function _createBars(data: ChartProps): JSX.Element[] {\n const noOfBars =\n data.chartData?.reduce((count: number, point: ChartDataPoint) => (count += (point.data || 0) > 0 ? 1 : 0), 0) ||\n 1;\n const totalMarginPercent = barSpacingInPercent * (noOfBars - 1);\n const defaultColors: string[] = [\n tokens.colorPaletteBlueForeground2,\n tokens.colorPaletteCornflowerForeground2,\n tokens.colorPaletteDarkGreenForeground2,\n tokens.colorPaletteNavyForeground2,\n tokens.colorPaletteDarkOrangeForeground2,\n ];\n // calculating starting point of each bar and it's range\n const startingPoint: number[] = [];\n const total = data.chartData!.reduce(\n (acc: number, point: ChartDataPoint) =>\n acc + (point.horizontalBarChartdata!.x ? point.horizontalBarChartdata!.x : 0),\n 0,\n );\n let prevPosition = 0;\n let value = 0;\n\n let sumOfPercent = 0;\n data.chartData!.map((point: ChartDataPoint, index: number) => {\n const pointData = point.horizontalBarChartdata!.x ? point.horizontalBarChartdata!.x : 0;\n value = (pointData / total) * 100;\n if (value < 0) {\n value = 0;\n } else if (value < 1 && value !== 0) {\n value = 1;\n }\n sumOfPercent += value;\n\n return sumOfPercent;\n });\n\n /**\n * The %age of the space occupied by the margin needs to subtracted\n * while computing the scaling ratio, since the margins are not being\n * scaled down, only the data is being scaled down from a higher percentage to lower percentage\n * Eg: 95% of the space is taken by the bars, 5% by the margins\n * Now if the sumOfPercent is 120% -> This needs to be scaled down to 95%, not 100%\n * since that's only space available to the bars\n */\n const scalingRatio = sumOfPercent !== 0 ? (sumOfPercent - totalMarginPercent) / 100 : 1;\n\n const bars = data.chartData!.map((point: ChartDataPoint, index: number) => {\n const color: string = point.color ? point.color : defaultColors[Math.floor(Math.random() * 4 + 1)];\n const pointData = point.horizontalBarChartdata!.x ? point.horizontalBarChartdata!.x : 0;\n if (index > 0) {\n prevPosition += value;\n }\n value = (pointData / total) * 100;\n if (value < 0) {\n value = 0;\n } else if (value < 1 && value !== 0) {\n value = 1 / scalingRatio;\n } else {\n value = value / scalingRatio;\n }\n startingPoint.push(prevPosition);\n\n const xValue = point.horizontalBarChartdata!.x;\n const placeholderIndex = 1;\n const isLegendSelected: boolean = _legendHighlighted(point.legend) || _noLegendHighlighted();\n\n // Render bar label instead of placeholder bar for absolute-scale variant\n if (index === placeholderIndex && props.variant === HorizontalBarChartVariant.AbsoluteScale) {\n if (props.hideLabels) {\n return <text key={index} />;\n }\n\n const barValue = data.chartData![0].horizontalBarChartdata!.x;\n\n return (\n <text\n key={index}\n x={`${_isRTL ? 100 - startingPoint[index] : startingPoint[index]}%`}\n y={_barHeight / 2}\n dominantBaseline=\"central\"\n transform={`translate(${_isRTL ? -4 : 4})`}\n className={classes.barLabel}\n aria-hidden={true}\n >\n {formatScientificLimitWidth(barValue)}\n </text>\n );\n }\n\n return (\n <rect\n key={index}\n x={`${\n _isRTL\n ? 100 - startingPoint[index] - value - index * barSpacingInPercent\n : startingPoint[index] + index * barSpacingInPercent\n }%`}\n y={0}\n data-is-focusable={point.legend !== '' ? true : false}\n width={value + '%'}\n height={_barHeight}\n fill={color}\n onMouseOver={point.legend !== '' ? event => _hoverOn(event, xValue, point) : undefined}\n onFocus={point.legend !== '' ? event => _hoverOn.bind(event, xValue, point) : undefined}\n role=\"img\"\n aria-label={_getAriaLabel(point)}\n onBlur={_hoverOff}\n onMouseLeave={_hoverOff}\n className={classes.barWrapper}\n opacity={isLegendSelected ? 1 : 0.1}\n tabIndex={point.legend !== '' ? 0 : undefined}\n />\n );\n });\n return bars;\n }\n\n const _getAriaLabel = (point: ChartDataPoint): string => {\n const legend = point.xAxisCalloutData || point.legend;\n const yValue =\n point.yAxisCalloutData ||\n (point.horizontalBarChartdata\n ? `${point.horizontalBarChartdata.x}/${point.horizontalBarChartdata.total ?? ''}`\n : 0);\n return point.callOutAccessibilityData?.ariaLabel || (legend ? `${legend}, ` : '') + `${yValue}.`;\n };\n\n function _isChartEmpty(): boolean {\n return !(props.data && props.data.length > 0);\n }\n\n function updatePosition(newX: number, newY: number): void {\n const threshold = 1; // Set a threshold for movement\n const { x, y } = clickPosition;\n\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 React.useEffect(() => {\n const svgWidth = barChartSvgRef?.current?.getBoundingClientRect().width || 0;\n const MARGIN_WIDTH_IN_PX = 3;\n if (svgWidth) {\n const currentBarSpacing = (MARGIN_WIDTH_IN_PX / svgWidth) * 100;\n setBarSpacingInPercent(currentBarSpacing);\n }\n }, [barChartSvgRef]);\n\n function _legendHighlighted(barLegend?: string) {\n if (barLegend === undefined) {\n return false;\n }\n return selectedLegend === barLegend || (selectedLegend === '' && activeLegend === barLegend);\n }\n\n /**\n * This function checks if none of the legends is selected or hovered.*/\n\n function _noLegendHighlighted() {\n return selectedLegend === '' && activeLegend === '';\n }\n\n const { data } = props;\n _adjustProps();\n const classes = useHorizontalBarChartStyles(props);\n const focusAttributes = useFocusableGroup();\n const legendButtons = _createLegends(data!);\n\n let datapoint: number | undefined = 0;\n return !_isChartEmpty() ? (\n <div className={classes.root} onMouseLeave={_handleChartMouseLeave}>\n {data!.map((points: ChartProps, index: number) => {\n if (points.chartData && points.chartData![0] && points.chartData![0].horizontalBarChartdata!.x) {\n datapoint = points.chartData![0].horizontalBarChartdata!.x;\n } else {\n datapoint = 0;\n }\n isSingleBar =\n points.chartData!.length === 1 || (points.chartData!.length > 1 && points.chartData![1].legend === '');\n if (isSingleBar) {\n points.chartData![1] = {\n legend: '',\n horizontalBarChartdata: {\n x: points.chartData![0].horizontalBarChartdata!.total! - datapoint!,\n total: points.chartData![0].horizontalBarChartdata!.total!,\n },\n color: tokens.colorBackgroundOverlay,\n };\n }\n\n // Hide right side text of chart title for absolute-scale variant\n const chartDataText =\n props.variant === HorizontalBarChartVariant.AbsoluteScale ? null : _getChartDataText(points!);\n const bars = _createBars(points!);\n const keyVal = _uniqLineText + '_' + index;\n // ToDo - Showtriangle property is per data series. How to account for it in the new stylesheet\n /* const classes = useHorizontalBarChartStyles(props.styles!, {\n width: props.width,\n showTriangle: !!points!.chartData![0].data,\n variant: props.variant,\n }); */\n\n return (\n <div key={index}>\n <div className={classes.items} {...focusAttributes}>\n <div className={classes.chartTitle}>\n {points!.chartTitle && (\n <FocusableTooltipText\n className={classes.chartTitleLeft}\n content={points!.chartTitle}\n accessibilityData={points!.chartTitleAccessibilityData}\n />\n )}\n {chartDataText}\n </div>\n {points!.chartData![0].data && _createBenchmark(points!)}\n <svg ref={barChartSvgRef} className={classes.chart} aria-label={points!.chartTitle}>\n <g\n id={keyVal}\n key={keyVal}\n ref={(e: SVGGElement) => {\n _refCallback(e, points!.chartData![0].legend);\n }}\n // NOTE: points.chartData![0] contains current data value\n onClick={() => {\n const p = points!.chartData![0];\n if (p && p.onClick) {\n p.onClick();\n }\n }}\n >\n {bars}\n </g>\n </svg>\n </div>\n </div>\n );\n })}\n <ChartPopover\n xCalloutValue={xCalloutValue}\n yCalloutValue={yCalloutValue}\n culture={props.culture ?? 'en-us'}\n clickPosition={clickPosition}\n isPopoverOpen={isPopoverOpen}\n legend={legend!}\n YValue={hoverValue!}\n color={lineColor}\n isCalloutForStack={false}\n customCallout={{\n customizedCallout: props.onRenderCalloutPerHorizontalBar\n ? props.onRenderCalloutPerHorizontalBar(barCalloutProps!)\n : undefined,\n customCalloutProps: props.calloutPropsPerDataPoint\n ? props.calloutPropsPerDataPoint(barCalloutProps!)\n : undefined,\n }}\n isCartesian={false}\n />\n {!isSingleBar && (\n <div ref={(e: HTMLDivElement) => (legendContainer.current = e)} className={classes.legendContainer}>\n {legendButtons}\n </div>\n )}\n </div>\n ) : (\n <div id={_emptyChartId} role={'alert'} style={{ opacity: '0' }} aria-label={'Graph has no data to display'} />\n );\n //TODO validate and fix focus border for issue for popover\n});\nHorizontalBarChart.displayName = 'HorizontalBarChart';\n"],"names":["HorizontalBarChart","React","forwardRef","props","forwardedRef","legendContainer","useRef","_uniqLineText","Math","random","toString","substring","_refArray","_isRTL","useRtl","barChartSvgRef","createRef","_emptyChartId","useId","_barHeight","_calloutAnchorPoint","isSingleBar","hoverValue","setHoverValue","useState","lineColor","setLineColor","legend","setLegend","xCalloutValue","setXCalloutValue","yCalloutValue","setYCalloutValue","barCalloutProps","setBarCalloutProps","barSpacingInPercent","setBarSpacingInPercent","isPopoverOpen","setPopoverOpen","clickPosition","setClickPosition","x","y","selectedLegend","setSelectedLegend","activeLegend","setActiveLegend","_refCallback","element","legendTitle","push","index","refElement","_hoverOn","event","hoverVal","point","_legendHighlighted","_noLegendHighlighted","updatePosition","clientX","clientY","color","xAxisCalloutData","yAxisCalloutData","_hoverOff","_handleChartMouseLeave","_adjustProps","barHeight","_getChartDataText","data","_getDefaultTextData","_createLegends","chartProps","legendItems","forEach","chartData","dataPoint","legendItem","title","action","hoverAction","onMouseOutAction","legends","createElement","Legends","centerLegends","overflowText","legendsOverflowText","legendProps","culture","accessibilityData","getAccessibleDataObject","chartDataAccessibilityData","total","reduce","acc","horizontalBarChartdata","div","className","classes","chartTitleRight","formatToLocaleString","chartDataMode","span","chartDataTextDenominator","dataRatioPercentage","round","_createBenchmark","undefined","Fragment","totalData","benchmarkData","benchmarkRatio","benchmarkStyles","left","benchmarkContainer","triangle","style","_createBars","noOfBars","count","totalMarginPercent","defaultColors","tokens","colorPaletteBlueForeground2","colorPaletteCornflowerForeground2","colorPaletteDarkGreenForeground2","colorPaletteNavyForeground2","colorPaletteDarkOrangeForeground2","startingPoint","prevPosition","value","sumOfPercent","map","pointData","scalingRatio","bars","floor","xValue","placeholderIndex","isLegendSelected","variant","HorizontalBarChartVariant","AbsoluteScale","hideLabels","text","key","barValue","dominantBaseline","transform","barLabel","aria-hidden","formatScientificLimitWidth","rect","data-is-focusable","width","height","fill","onMouseOver","onFocus","bind","role","aria-label","_getAriaLabel","onBlur","onMouseLeave","barWrapper","opacity","tabIndex","yValue","callOutAccessibilityData","ariaLabel","_isChartEmpty","length","newX","newY","threshold","distance","sqrt","pow","useEffect","svgWidth","current","getBoundingClientRect","MARGIN_WIDTH_IN_PX","currentBarSpacing","barLegend","useHorizontalBarChartStyles","focusAttributes","useFocusableGroup","legendButtons","datapoint","root","points","colorBackgroundOverlay","chartDataText","keyVal","items","chartTitle","FocusableTooltipText","chartTitleLeft","content","chartTitleAccessibilityData","svg","ref","chart","g","id","e","onClick","p","ChartPopover","YValue","isCalloutForStack","customCallout","customizedCallout","onRenderCalloutPerHorizontalBar","customCalloutProps","calloutPropsPerDataPoint","isCartesian","displayName"],"rangeMappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;","mappings":"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"}
|
|
1
|
+
{"version":3,"sources":["HorizontalBarChart.tsx"],"sourcesContent":["import * as React from 'react';\nimport { useHorizontalBarChartStyles } from './useHorizontalBarChartStyles.styles';\nimport { ChartProps, HorizontalBarChartProps, ChartDataPoint, RefArrayData, HorizontalBarChartVariant } from './index';\nimport { formatToLocaleString } from '@fluentui/chart-utilities';\nimport { formatScientificLimitWidth, getAccessibleDataObject, useRtl } from '../../utilities/index';\nimport { useId } from '@fluentui/react-utilities';\nimport { tokens } from '@fluentui/react-theme';\nimport { useFocusableGroup } from '@fluentui/react-tabster';\nimport { ChartPopover } from '../CommonComponents/ChartPopover';\nimport { FocusableTooltipText } from '../../utilities/FocusableTooltipText';\nimport { Legend, Legends } from '../../index';\n\n/**\n * HorizontalBarChart is the context wrapper and container for all HorizontalBarChart content/controls,\n * It has no direct style or slot opinions.\n *\n * HorizontalBarChart also provides API interfaces for callbacks that will occur on navigation events.\n */\nexport const HorizontalBarChart: React.FunctionComponent<HorizontalBarChartProps> = React.forwardRef<\n HTMLDivElement,\n HorizontalBarChartProps\n>((props, forwardedRef) => {\n const legendContainer = React.useRef<HTMLDivElement | null>(null);\n const _uniqLineText: string = '_HorizontalLine_' + Math.random().toString(36).substring(7);\n const _refArray: RefArrayData[] = [];\n const _isRTL: boolean = useRtl();\n const barChartSvgRef: React.RefObject<SVGSVGElement> = React.createRef<SVGSVGElement>();\n const _emptyChartId: string = useId('_HBC_empty');\n let _barHeight: number;\n let _calloutAnchorPoint: ChartDataPoint | null;\n let isSingleBar: boolean = true;\n\n const [hoverValue, setHoverValue] = React.useState<string | number | Date | null>('');\n const [lineColor, setLineColor] = React.useState<string>('');\n const [legend, setLegend] = React.useState<string | null>('');\n const [xCalloutValue, setXCalloutValue] = React.useState<string | undefined>('');\n const [yCalloutValue, setYCalloutValue] = React.useState<string | undefined>('');\n const [barCalloutProps, setBarCalloutProps] = React.useState<ChartDataPoint>();\n const [barSpacingInPercent, setBarSpacingInPercent] = React.useState<number>(0);\n const [isPopoverOpen, setPopoverOpen] = React.useState<boolean>(false);\n const [clickPosition, setClickPosition] = React.useState({ x: 0, y: 0 });\n const [selectedLegend, setSelectedLegend] = React.useState<string>('');\n const [activeLegend, setActiveLegend] = React.useState<string>('');\n\n function _refCallback(element: SVGGElement, legendTitle: string | undefined): void {\n _refArray.push({ index: legendTitle, refElement: element });\n }\n\n function _hoverOn(\n event: React.FocusEvent<SVGRectElement> | React.MouseEvent<SVGRectElement>,\n hoverVal: string | number | Date,\n point: ChartDataPoint,\n ): void {\n if (\n (!isPopoverOpen || legend !== point.legend!) &&\n _calloutAnchorPoint !== point &&\n (_legendHighlighted(point.legend) || _noLegendHighlighted())\n ) {\n _calloutAnchorPoint = point;\n let x = 0;\n let y = 0;\n\n if ('clientX' in event && event.clientX && event.clientY) {\n // Mouse event\n x = event.clientX;\n y = event.clientY;\n } else {\n // Focus event\n const targetRect = (event.target as SVGRectElement).getBoundingClientRect();\n x = targetRect.left + targetRect.width / 2;\n y = targetRect.top + targetRect.height / 2;\n }\n\n updatePosition(x, y);\n setHoverValue(hoverVal);\n setLineColor(point.color!);\n setLegend(point.legend!);\n setXCalloutValue(point.xAxisCalloutData!);\n setYCalloutValue(point.yAxisCalloutData!);\n setBarCalloutProps(point);\n // ToDo - Confirm setting multiple state variables like this is performant.\n }\n }\n\n function _hoverOff(): void {\n /*ToDo. To fix*/\n }\n\n const _handleChartMouseLeave = () => {\n _calloutAnchorPoint = null;\n if (isPopoverOpen) {\n setPopoverOpen(false);\n setHoverValue('');\n setLineColor('');\n setLegend('');\n }\n };\n\n const _adjustProps = (): void => {\n _barHeight = props.barHeight || 12;\n };\n\n const _getChartDataText = (data: ChartProps) => {\n /* return props.barChartCustomData ? (\n <div role=\"text\">{props.barChartCustomData(data)}</div>\n ) : ( */\n return _getDefaultTextData(data);\n //)\n };\n\n function _createLegends(chartProps: ChartProps[]): JSX.Element {\n const legendItems: Legend[] = [];\n chartProps.forEach((point: ChartProps) => {\n point.chartData!.forEach((dataPoint: ChartDataPoint) => {\n const color: string = dataPoint.color!;\n // mapping data to the format Legends component needs\n const legendItem: Legend = {\n title: dataPoint.legend!,\n color,\n action: () => {\n if (selectedLegend === dataPoint.legend) {\n setSelectedLegend('');\n } else {\n setSelectedLegend(dataPoint.legend!);\n }\n },\n hoverAction: () => {\n _handleChartMouseLeave();\n setActiveLegend(dataPoint.legend!);\n },\n onMouseOutAction: () => {\n setActiveLegend('');\n },\n };\n legendItems.push(legendItem);\n });\n });\n const legends = (\n <Legends legends={legendItems} centerLegends overflowText={props.legendsOverflowText} {...props.legendProps} />\n );\n return legends;\n }\n\n function _getDefaultTextData(data: ChartProps): JSX.Element {\n const { culture } = props;\n const accessibilityData = getAccessibleDataObject(data.chartDataAccessibilityData!, 'text', false);\n if (!isSingleBar) {\n const total = data.chartData!.reduce(\n (acc: number, point: ChartDataPoint) =>\n acc + (point.horizontalBarChartdata!.x ? point.horizontalBarChartdata!.x : 0),\n 0,\n );\n return (\n <div className={classes.chartTitleRight} {...accessibilityData}>\n {formatToLocaleString(total, culture) as React.ReactNode}\n </div>\n );\n }\n const chartDataMode = props.chartDataMode || 'default';\n const chartData: ChartDataPoint = data!.chartData![0];\n const x = chartData.horizontalBarChartdata!.x;\n const y = chartData.horizontalBarChartdata!.total!;\n\n switch (chartDataMode) {\n case 'default':\n return (\n <div className={classes.chartTitleRight} {...accessibilityData}>\n {formatToLocaleString(x, culture) as React.ReactNode}\n </div>\n );\n case 'fraction':\n return (\n <div {...accessibilityData}>\n <span className={classes.chartTitleRight}>{formatToLocaleString(x, culture) as React.ReactNode}</span>\n <span className={classes.chartDataTextDenominator}>{' / ' + formatToLocaleString(y, culture)}</span>\n </div>\n );\n case 'percentage':\n const dataRatioPercentage = `${formatToLocaleString(Math.round((x / y) * 100), culture)}%`;\n return (\n <div className={classes.chartTitleRight} {...accessibilityData}>\n {dataRatioPercentage}\n </div>\n );\n }\n }\n\n function _createBenchmark(data: ChartProps): JSX.Element {\n if (data.chartData![0].horizontalBarChartdata!.total === undefined) {\n return <></>;\n }\n const totalData = data.chartData![0].horizontalBarChartdata!.total!;\n const benchmarkData = data.chartData![0].data;\n const benchmarkRatio = Math.round(((benchmarkData ? benchmarkData : 0) / totalData) * 100);\n\n const benchmarkStyles = {\n left: 'calc(' + benchmarkRatio + '% - 4px)',\n };\n\n return (\n <div className={classes.benchmarkContainer}>\n <div className={classes.triangle} style={benchmarkStyles} />\n </div>\n );\n }\n\n /**\n * This functions returns an array of <rect> elements, which form the bars\n * For each bar an x value, and a width needs to be specified\n * The computations are done based on percentages\n * Extra margin is also provided, in the x value to provide some spacing in between the bars\n */\n\n function _createBars(data: ChartProps): JSX.Element[] {\n const noOfBars =\n data.chartData?.reduce((count: number, point: ChartDataPoint) => (count += (point.data || 0) > 0 ? 1 : 0), 0) ||\n 1;\n const totalMarginPercent = barSpacingInPercent * (noOfBars - 1);\n const defaultColors: string[] = [\n tokens.colorPaletteBlueForeground2,\n tokens.colorPaletteCornflowerForeground2,\n tokens.colorPaletteDarkGreenForeground2,\n tokens.colorPaletteNavyForeground2,\n tokens.colorPaletteDarkOrangeForeground2,\n ];\n // calculating starting point of each bar and it's range\n const startingPoint: number[] = [];\n const total = data.chartData!.reduce(\n (acc: number, point: ChartDataPoint) =>\n acc + (point.horizontalBarChartdata!.x ? point.horizontalBarChartdata!.x : 0),\n 0,\n );\n let prevPosition = 0;\n let value = 0;\n\n let sumOfPercent = 0;\n data.chartData!.map((point: ChartDataPoint, index: number) => {\n const pointData = point.horizontalBarChartdata!.x ? point.horizontalBarChartdata!.x : 0;\n value = (pointData / total) * 100;\n if (value < 0) {\n value = 0;\n } else if (value < 1 && value !== 0) {\n value = 1;\n }\n sumOfPercent += value;\n\n return sumOfPercent;\n });\n\n /**\n * The %age of the space occupied by the margin needs to subtracted\n * while computing the scaling ratio, since the margins are not being\n * scaled down, only the data is being scaled down from a higher percentage to lower percentage\n * Eg: 95% of the space is taken by the bars, 5% by the margins\n * Now if the sumOfPercent is 120% -> This needs to be scaled down to 95%, not 100%\n * since that's only space available to the bars\n */\n const scalingRatio = sumOfPercent !== 0 ? (sumOfPercent - totalMarginPercent) / 100 : 1;\n\n const bars = data.chartData!.map((point: ChartDataPoint, index: number) => {\n const color: string = point.color ? point.color : defaultColors[Math.floor(Math.random() * 4 + 1)];\n const pointData = point.horizontalBarChartdata!.x ? point.horizontalBarChartdata!.x : 0;\n if (index > 0) {\n prevPosition += value;\n }\n value = (pointData / total) * 100;\n if (value < 0) {\n value = 0;\n } else if (value < 1 && value !== 0) {\n value = 1 / scalingRatio;\n } else {\n value = value / scalingRatio;\n }\n startingPoint.push(prevPosition);\n\n const xValue = point.horizontalBarChartdata!.x;\n const placeholderIndex = 1;\n const isLegendSelected: boolean = _legendHighlighted(point.legend) || _noLegendHighlighted();\n\n // Render bar label instead of placeholder bar for absolute-scale variant\n if (index === placeholderIndex && props.variant === HorizontalBarChartVariant.AbsoluteScale) {\n if (props.hideLabels) {\n return <text key={index} />;\n }\n\n const barValue = data.chartData![0].horizontalBarChartdata!.x;\n\n return (\n <text\n key={index}\n x={`${_isRTL ? 100 - startingPoint[index] : startingPoint[index]}%`}\n y={_barHeight / 2}\n dominantBaseline=\"central\"\n transform={`translate(${_isRTL ? -4 : 4})`}\n className={classes.barLabel}\n aria-hidden={true}\n >\n {formatScientificLimitWidth(barValue)}\n </text>\n );\n }\n\n return (\n <rect\n key={index}\n x={`${\n _isRTL\n ? 100 - startingPoint[index] - value - index * barSpacingInPercent\n : startingPoint[index] + index * barSpacingInPercent\n }%`}\n y={0}\n width={value + '%'}\n height={_barHeight}\n fill={color}\n onMouseOver={point.legend !== '' ? event => _hoverOn(event, xValue, point) : undefined}\n onFocus={point.legend !== '' ? event => _hoverOn(event, xValue, point) : undefined}\n role=\"img\"\n aria-label={_getAriaLabel(point)}\n onBlur={_hoverOff}\n onMouseLeave={_hoverOff}\n className={classes.barWrapper}\n opacity={isLegendSelected ? 1 : 0.1}\n tabIndex={point.legend !== '' ? 0 : undefined}\n />\n );\n });\n return bars;\n }\n\n const _getAriaLabel = (point: ChartDataPoint): string => {\n const legend = point.xAxisCalloutData || point.legend;\n const yValue =\n point.yAxisCalloutData ||\n (point.horizontalBarChartdata\n ? `${point.horizontalBarChartdata.x}/${point.horizontalBarChartdata.total ?? ''}`\n : 0);\n return point.callOutAccessibilityData?.ariaLabel || (legend ? `${legend}, ` : '') + `${yValue}.`;\n };\n\n function _isChartEmpty(): boolean {\n return !(props.data && props.data.length > 0);\n }\n\n function updatePosition(newX: number, newY: number): void {\n const threshold = 1; // Set a threshold for movement\n const { x, y } = clickPosition;\n\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 React.useEffect(() => {\n const svgWidth = barChartSvgRef?.current?.getBoundingClientRect().width || 0;\n const MARGIN_WIDTH_IN_PX = 3;\n if (svgWidth) {\n const currentBarSpacing = (MARGIN_WIDTH_IN_PX / svgWidth) * 100;\n setBarSpacingInPercent(currentBarSpacing);\n }\n }, [barChartSvgRef]);\n\n function _legendHighlighted(barLegend?: string) {\n if (barLegend === undefined) {\n return false;\n }\n return selectedLegend === barLegend || (selectedLegend === '' && activeLegend === barLegend);\n }\n\n /**\n * This function checks if none of the legends is selected or hovered.*/\n\n function _noLegendHighlighted() {\n return selectedLegend === '' && activeLegend === '';\n }\n\n const { data } = props;\n _adjustProps();\n const classes = useHorizontalBarChartStyles(props);\n const focusAttributes = useFocusableGroup();\n const legendButtons = _createLegends(data!);\n\n let datapoint: number | undefined = 0;\n return !_isChartEmpty() ? (\n <div className={classes.root} onMouseLeave={_handleChartMouseLeave}>\n {data!.map((points: ChartProps, index: number) => {\n if (points.chartData && points.chartData![0] && points.chartData![0].horizontalBarChartdata!.x) {\n datapoint = points.chartData![0].horizontalBarChartdata!.x;\n } else {\n datapoint = 0;\n }\n isSingleBar =\n points.chartData!.length === 1 || (points.chartData!.length > 1 && points.chartData![1].legend === '');\n if (isSingleBar) {\n points.chartData![1] = {\n legend: '',\n horizontalBarChartdata: {\n x: points.chartData![0].horizontalBarChartdata!.total! - datapoint!,\n total: points.chartData![0].horizontalBarChartdata!.total!,\n },\n color: tokens.colorBackgroundOverlay,\n };\n }\n\n // Hide right side text of chart title for absolute-scale variant\n const chartDataText =\n props.variant === HorizontalBarChartVariant.AbsoluteScale ? null : _getChartDataText(points!);\n const bars = _createBars(points!);\n const keyVal = _uniqLineText + '_' + index;\n // ToDo - Showtriangle property is per data series. How to account for it in the new stylesheet\n /* const classes = useHorizontalBarChartStyles(props.styles!, {\n width: props.width,\n showTriangle: !!points!.chartData![0].data,\n variant: props.variant,\n }); */\n\n return (\n <div key={index}>\n <div className={classes.items} {...focusAttributes}>\n <div className={classes.chartTitle}>\n {points!.chartTitle && (\n <FocusableTooltipText\n className={classes.chartTitleLeft}\n content={points!.chartTitle}\n accessibilityData={points!.chartTitleAccessibilityData}\n />\n )}\n {chartDataText}\n </div>\n {points!.chartData![0].data && _createBenchmark(points!)}\n <svg ref={barChartSvgRef} className={classes.chart} aria-label={points!.chartTitle}>\n <g\n id={keyVal}\n key={keyVal}\n ref={(e: SVGGElement) => {\n _refCallback(e, points!.chartData![0].legend);\n }}\n // NOTE: points.chartData![0] contains current data value\n onClick={() => {\n const p = points!.chartData![0];\n if (p && p.onClick) {\n p.onClick();\n }\n }}\n >\n {bars}\n </g>\n </svg>\n </div>\n </div>\n );\n })}\n <ChartPopover\n xCalloutValue={xCalloutValue}\n yCalloutValue={yCalloutValue}\n culture={props.culture ?? 'en-us'}\n clickPosition={clickPosition}\n isPopoverOpen={isPopoverOpen}\n legend={legend!}\n YValue={hoverValue!}\n color={lineColor}\n isCalloutForStack={false}\n customCallout={{\n customizedCallout: props.onRenderCalloutPerHorizontalBar\n ? props.onRenderCalloutPerHorizontalBar(barCalloutProps!)\n : undefined,\n customCalloutProps: props.calloutPropsPerDataPoint\n ? props.calloutPropsPerDataPoint(barCalloutProps!)\n : undefined,\n }}\n isCartesian={false}\n />\n {!isSingleBar && (\n <div ref={(e: HTMLDivElement) => (legendContainer.current = e)} className={classes.legendContainer}>\n {legendButtons}\n </div>\n )}\n </div>\n ) : (\n <div id={_emptyChartId} role={'alert'} style={{ opacity: '0' }} aria-label={'Graph has no data to display'} />\n );\n //TODO validate and fix focus border for issue for popover\n});\nHorizontalBarChart.displayName = 'HorizontalBarChart';\n"],"names":["HorizontalBarChart","React","forwardRef","props","forwardedRef","legendContainer","useRef","_uniqLineText","Math","random","toString","substring","_refArray","_isRTL","useRtl","barChartSvgRef","createRef","_emptyChartId","useId","_barHeight","_calloutAnchorPoint","isSingleBar","hoverValue","setHoverValue","useState","lineColor","setLineColor","legend","setLegend","xCalloutValue","setXCalloutValue","yCalloutValue","setYCalloutValue","barCalloutProps","setBarCalloutProps","barSpacingInPercent","setBarSpacingInPercent","isPopoverOpen","setPopoverOpen","clickPosition","setClickPosition","x","y","selectedLegend","setSelectedLegend","activeLegend","setActiveLegend","_refCallback","element","legendTitle","push","index","refElement","_hoverOn","event","hoverVal","point","_legendHighlighted","_noLegendHighlighted","clientX","clientY","targetRect","target","getBoundingClientRect","left","width","top","height","updatePosition","color","xAxisCalloutData","yAxisCalloutData","_hoverOff","_handleChartMouseLeave","_adjustProps","barHeight","_getChartDataText","data","_getDefaultTextData","_createLegends","chartProps","legendItems","forEach","chartData","dataPoint","legendItem","title","action","hoverAction","onMouseOutAction","legends","createElement","Legends","centerLegends","overflowText","legendsOverflowText","legendProps","culture","accessibilityData","getAccessibleDataObject","chartDataAccessibilityData","total","reduce","acc","horizontalBarChartdata","div","className","classes","chartTitleRight","formatToLocaleString","chartDataMode","span","chartDataTextDenominator","dataRatioPercentage","round","_createBenchmark","undefined","Fragment","totalData","benchmarkData","benchmarkRatio","benchmarkStyles","benchmarkContainer","triangle","style","_createBars","noOfBars","count","totalMarginPercent","defaultColors","tokens","colorPaletteBlueForeground2","colorPaletteCornflowerForeground2","colorPaletteDarkGreenForeground2","colorPaletteNavyForeground2","colorPaletteDarkOrangeForeground2","startingPoint","prevPosition","value","sumOfPercent","map","pointData","scalingRatio","bars","floor","xValue","placeholderIndex","isLegendSelected","variant","HorizontalBarChartVariant","AbsoluteScale","hideLabels","text","key","barValue","dominantBaseline","transform","barLabel","aria-hidden","formatScientificLimitWidth","rect","fill","onMouseOver","onFocus","role","aria-label","_getAriaLabel","onBlur","onMouseLeave","barWrapper","opacity","tabIndex","yValue","callOutAccessibilityData","ariaLabel","_isChartEmpty","length","newX","newY","threshold","distance","sqrt","pow","useEffect","svgWidth","current","MARGIN_WIDTH_IN_PX","currentBarSpacing","barLegend","useHorizontalBarChartStyles","focusAttributes","useFocusableGroup","legendButtons","datapoint","root","points","colorBackgroundOverlay","chartDataText","keyVal","items","chartTitle","FocusableTooltipText","chartTitleLeft","content","chartTitleAccessibilityData","svg","ref","chart","g","id","e","onClick","p","ChartPopover","YValue","isCalloutForStack","customCallout","customizedCallout","onRenderCalloutPerHorizontalBar","customCalloutProps","calloutPropsPerDataPoint","isCartesian","displayName"],"rangeMappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;","mappings":"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"}
|
|
@@ -41,6 +41,7 @@ const ScatterChart = /*#__PURE__*/ _react.forwardRef((props, forwardedRef)=>{
|
|
|
41
41
|
let xAxisCalloutAccessibilityData = {};
|
|
42
42
|
let _xBandwidth = 0;
|
|
43
43
|
const cartesianChartRef = _react.useRef(null);
|
|
44
|
+
const classes = (0, _useScatterChartStylesstyles.useScatterChartStyles)(props);
|
|
44
45
|
const [hoverXValue, setHoverXValue] = _react.useState('');
|
|
45
46
|
const [activeLegend, setActiveLegend] = _react.useState('');
|
|
46
47
|
const [YValueHover, setYValueHover] = _react.useState([]);
|
|
@@ -277,7 +278,6 @@ const ScatterChart = /*#__PURE__*/ _react.forwardRef((props, forwardedRef)=>{
|
|
|
277
278
|
"aria-label": `${legendVal}, series ${i + 1} of ${_points.length} with ${_points[i].data.length} data points.`
|
|
278
279
|
}, pointsForSeries));
|
|
279
280
|
}
|
|
280
|
-
const classes = (0, _useScatterChartStylesstyles.useScatterChartStyles_unstable)(props);
|
|
281
281
|
// Removing un wanted tooltip div from DOM, when prop not provided.
|
|
282
282
|
if (!props.showXAxisLablesTooltip) {
|
|
283
283
|
try {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["ScatterChart.tsx"],"sourcesContent":["import * as React from 'react';\nimport { ScatterChartProps } from './ScatterChart.types';\nimport { useScatterChartStyles_unstable } 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 { areArraysEqual, find } from '../../utilities/index';\nimport {\n AccessibilityProps,\n CartesianChart,\n ChildProps,\n LineChartPoints,\n CustomizedCalloutData,\n Margins,\n RefArrayData,\n ScatterChartDataPoint,\n Chart,\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';\n\ntype NumericAxis = D3Axis<number | { valueOf(): number }>;\n\ntype ScatterChartDataWithIndex = LineChartPoints & { 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.lineChartData);\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: JSX.Element[];\n let _xAxisLabels: string[] = [];\n let xAxisCalloutAccessibilityData: AccessibilityProps = {};\n let _xBandwidth = 0;\n const cartesianChartRef = React.useRef<Chart>(null);\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\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 }),\n [],\n );\n\n const _xAxisType: XAxisTypes =\n props.data.lineChartData! &&\n props.data.lineChartData!.length > 0 &&\n props.data.lineChartData![0].data &&\n props.data.lineChartData![0].data.length > 0\n ? (getTypeOfAxis(props.data.lineChartData![0].data[0].x, true) as XAxisTypes)\n : XAxisTypes.StringAxis;\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.lineChartData) || props.data !== _points) {\n pointsRef.current = _injectIndexPropertyInScatterChartData(props.data.lineChartData);\n calloutPointsRef.current = calloutData(pointsRef.current);\n }\n }, [props.height, props.width, props.data, _points]);\n\n function _injectIndexPropertyInScatterChartData(\n scatterChartData?: LineChartPoints[],\n ): ScatterChartDataWithIndex[] | [] {\n return scatterChartData\n ? scatterChartData.map((item: LineChartPoints, 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 _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 renderSeries = _createPlot(xElement!, containerHeight!);\n }\n\n function _onHoverCardHide() {\n setSelectedLegendPoints([]);\n setIsSelectedLegend(false);\n }\n\n function _createLegends(data: ScatterChartDataWithIndex[]): JSX.Element {\n const { legendProps } = props;\n const isLegendMultiSelectEnabled = !!(legendProps && !!legendProps.canSelectMultipleLegends);\n const legendDataItems = data.map((point: ScatterChartDataWithIndex) => {\n const color: string = point.color!;\n // mapping data to the format Legends component needs\n const legend: Legend = {\n title: point.legend!,\n color,\n onMouseOutAction: () => {\n setActiveLegend('');\n },\n hoverAction: () => {\n _handleChartMouseLeave();\n setActiveLegend(point.legend);\n },\n ...(point.legendShape && {\n shape: point.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 />\n );\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): JSX.Element[] {\n const series: JSX.Element[] = [];\n if (isSelectedLegend) {\n _points = selectedLegendPoints;\n } else {\n _points = _injectIndexPropertyInScatterChartData(props.data.lineChartData);\n }\n\n const yMax = d3Max(points, (point: LineChartPoints) => {\n return d3Max(point.data as ScatterChartDataPoint[], (item: ScatterChartDataPoint) => item.y)!;\n })!;\n const yMin = d3Min(points, (point: LineChartPoints) => {\n return d3Min(point.data as ScatterChartDataPoint[], (item: ScatterChartDataPoint) => item.y)!;\n })!;\n const yPadding = (yMax - yMin) * 0.1;\n const yPaddingRange = Math.abs(_yAxisScale(yMin + yPadding) - _yAxisScale(yMin));\n\n let maxMarkerRange = 40;\n let xPaddingRange = 0;\n if (_xAxisType === XAxisTypes.StringAxis) {\n _xBandwidth = _xAxisScale.bandwidth() / 2;\n xPaddingRange = _xBandwidth;\n } else if (_xAxisType === XAxisTypes.DateAxis) {\n const xMin = d3Min(points, (point: LineChartPoints) => {\n return d3Min(point.data as ScatterChartDataPoint[], (item: ScatterChartDataPoint) => item.x as Date)!;\n })!;\n\n const xMax = d3Max(points, (point: LineChartPoints) => {\n return d3Max(point.data as ScatterChartDataPoint[], (item: ScatterChartDataPoint) => {\n return item.x as Date;\n });\n })!;\n\n const xPadding = (xMax.getTime() - xMin.getTime()) * 0.1;\n xPaddingRange = Math.abs(_xAxisScale(new Date(xMin.getTime() + xPadding)) - _xAxisScale(xMin));\n } else {\n const xMin = d3Min(points, (point: LineChartPoints) => {\n return d3Min(point.data as ScatterChartDataPoint[], (item: ScatterChartDataPoint) => item.x as number)!;\n })!;\n\n const xMax = d3Max(points, (point: LineChartPoints) => {\n return d3Max(point.data as ScatterChartDataPoint[], (item: ScatterChartDataPoint) => {\n return item.x as number;\n });\n })!;\n\n const xPadding = (xMax - xMin) * 0.1;\n xPaddingRange = Math.abs(_xAxisScale(xMin + xPadding) - _xAxisScale(xMin));\n }\n maxMarkerRange = Math.min(maxMarkerRange, Math.min(xPaddingRange, yPaddingRange));\n\n const maxMarkerSize = d3Max(_points, (point: LineChartPoints) => {\n return d3Max(point.data as ScatterChartDataPoint[], (item: ScatterChartDataPoint) => {\n return item.markerSize as number;\n });\n })!;\n\n for (let i = _points.length - 1; i >= 0; i--) {\n const pointsForSeries: JSX.Element[] = [];\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 seriesId = `${_seriesId}_${i}_${j}`;\n const circleId = `${_circleId}_${i}_${j}`;\n const { x, y, xAxisCalloutData, xAxisCalloutAccessibilityData } = _points[i].data[j];\n let circleRadius = 3.5;\n const pointMarkerSize = (_points[i].data[j] as ScatterChartDataPoint).markerSize;\n if ((pointMarkerSize as number) !== undefined) {\n circleRadius = Math.min((pointMarkerSize! * maxMarkerRange) / maxMarkerSize, pointMarkerSize!);\n }\n\n const isLegendSelected: boolean = _legendHighlighted(legendVal) || _noLegendHighlighted() || isSelectedLegend;\n\n const currentPointHidden = _points[i].hideNonActiveDots && activePoint !== circleId;\n pointsForSeries.push(\n <circle\n id={circleId}\n key={circleId}\n r={circleRadius}\n cx={_xAxisScale(x) + _xBandwidth}\n cy={_yAxisScale(y)}\n data-is-focusable={isLegendSelected}\n onMouseOver={(event: React.MouseEvent<SVGElement>) =>\n _handleHover(x, y, verticaLineHeight, xAxisCalloutData, circleId, xAxisCalloutAccessibilityData, event)\n }\n onMouseMove={(event: React.MouseEvent<SVGElement>) =>\n _handleHover(x, y, verticaLineHeight, xAxisCalloutData, circleId, xAxisCalloutAccessibilityData, event)\n }\n onMouseOut={_handleMouseOut}\n onFocus={() => _handleFocus(seriesId, x, xAxisCalloutData, circleId, xAxisCalloutAccessibilityData)}\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 }\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 const classes = useScatterChartStyles_unstable(props);\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 seriesId: string,\n x: number | Date | string,\n\n xAxisCalloutData: string | undefined,\n circleId: string,\n xAxisCalloutAccessibilityData?: AccessibilityProps,\n ) {\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.lineChartData &&\n props.data.lineChartData.length > 0 &&\n props.data.lineChartData.filter((item: LineChartPoints) => item.data.length).length > 0\n );\n }\n\n const { legendProps, tickValues, tickFormat } = props;\n _points = _injectIndexPropertyInScatterChartData(props.data.lineChartData);\n\n let points = _points;\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) {\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 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 onChartMouseLeave={_handleChartMouseLeave}\n enableFirstRenderOptimization={_firstRenderOptimization}\n datasetForXAxisDomain={_xAxisLabels}\n componentRef={cartesianChartRef}\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":["ScatterChart","React","forwardRef","props","forwardedRef","_circleId","useId","_seriesId","_verticalLine","_tooltipId","_firstRenderOptimization","_emptyChartId","_points","_injectIndexPropertyInScatterChartData","data","lineChartData","_calloutPoints","calloutData","_xAxisScale","_yAxisScale","_uniqueCallOutID","_refArray","margins","renderSeries","_xAxisLabels","xAxisCalloutAccessibilityData","_xBandwidth","cartesianChartRef","useRef","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","useEffect","current","areArraysEqual","useImperativeHandle","componentRef","chartContainer","_xAxisType","length","getTypeOfAxis","XAxisTypes","StringAxis","pointsRef","calloutPointsRef","height","width","scatterChartData","map","item","index","color","getNextColor","getColorFromToken","updatePosition","newX","newY","threshold","distance","Math","sqrt","pow","_getMargins","_margins","_initializeScatterChartData","xScale","yScale","containerHeight","containerWidth","xElement","_createPlot","_onHoverCardHide","_createLegends","isLegendMultiSelectEnabled","canSelectMultipleLegends","legendDataItems","point","legend","title","onMouseOutAction","hoverAction","_handleChartMouseLeave","legendShape","shape","createElement","Legends","legends","enabledWrapLines","enabledLegendsWrapLines","overflowText","legendsOverflowText","onLegendHoverCardLeave","onChange","_onLegendSelectionChange","legendsSelected","event","currentLegend","slice","_getPointFill","seriesColor","pointId","pointIndex","isLastPoint","tokens","colorNeutralBackground1","series","yMax","d3Max","points","yMin","d3Min","yPadding","yPaddingRange","abs","maxMarkerRange","xPaddingRange","bandwidth","DateAxis","xMin","xMax","xPadding","getTime","Date","min","maxMarkerSize","markerSize","i","pointsForSeries","legendVal","verticaLineHeight","bottom","j","seriesId","circleId","xAxisCalloutData","circleRadius","pointMarkerSize","isLegendSelected","_legendHighlighted","_noLegendHighlighted","currentPointHidden","hideNonActiveDots","push","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","g","classes","useScatterChartStyles_unstable","showXAxisLablesTooltip","document","getElementById","remove","e","wrapXAxisLables","xAxisElement","d3Select","call","tooltipProps","tooltipCls","tooltip","axis","tooltipOfAxislabels","formattedData","formatDate","useUTC","xVal","found","find","element","attr","forEach","obj","values","lineHeight","mouseEvent","persist","clientX","clientY","func","onClick","_getHighlightedLegend","includes","seriesIndex","formattedDate","xValue","yValue","yAxisCalloutData","callOutAccessibilityData","ariaLabel","_isChartEmpty","filter","tickValues","tickFormat","legendBars","hideLegend","calloutProps","descriptionMessage","getCalloutDescriptionMessage","isCalloutForStack","culture","isCartesian","tickParams","xAxisLabels","dp","flat","Set","CartesianChart","chartTitle","chartType","ChartTypes","getmargins","getGraphData","xAxisType","onChartMouseLeave","enableFirstRenderOptimization","datasetForXAxisDomain","children","yScalePrimary","Fragment","line","x1","y1","x2","y2","visibility","strokeDasharray","div","style","displayName"],"rangeMappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;","mappings":"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"}
|
|
1
|
+
{"version":3,"sources":["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, min as d3Min } from 'd3-array';\nimport { useId } from '@fluentui/react-utilities';\nimport { areArraysEqual, find } from '../../utilities/index';\nimport {\n AccessibilityProps,\n CartesianChart,\n ChildProps,\n LineChartPoints,\n CustomizedCalloutData,\n Margins,\n RefArrayData,\n ScatterChartDataPoint,\n Chart,\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';\n\ntype NumericAxis = D3Axis<number | { valueOf(): number }>;\n\ntype ScatterChartDataWithIndex = LineChartPoints & { 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.lineChartData);\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: JSX.Element[];\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\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\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 }),\n [],\n );\n\n const _xAxisType: XAxisTypes =\n props.data.lineChartData! &&\n props.data.lineChartData!.length > 0 &&\n props.data.lineChartData![0].data &&\n props.data.lineChartData![0].data.length > 0\n ? (getTypeOfAxis(props.data.lineChartData![0].data[0].x, true) as XAxisTypes)\n : XAxisTypes.StringAxis;\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.lineChartData) || props.data !== _points) {\n pointsRef.current = _injectIndexPropertyInScatterChartData(props.data.lineChartData);\n calloutPointsRef.current = calloutData(pointsRef.current);\n }\n }, [props.height, props.width, props.data, _points]);\n\n function _injectIndexPropertyInScatterChartData(\n scatterChartData?: LineChartPoints[],\n ): ScatterChartDataWithIndex[] | [] {\n return scatterChartData\n ? scatterChartData.map((item: LineChartPoints, 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 _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 renderSeries = _createPlot(xElement!, containerHeight!);\n }\n\n function _onHoverCardHide() {\n setSelectedLegendPoints([]);\n setIsSelectedLegend(false);\n }\n\n function _createLegends(data: ScatterChartDataWithIndex[]): JSX.Element {\n const { legendProps } = props;\n const isLegendMultiSelectEnabled = !!(legendProps && !!legendProps.canSelectMultipleLegends);\n const legendDataItems = data.map((point: ScatterChartDataWithIndex) => {\n const color: string = point.color!;\n // mapping data to the format Legends component needs\n const legend: Legend = {\n title: point.legend!,\n color,\n onMouseOutAction: () => {\n setActiveLegend('');\n },\n hoverAction: () => {\n _handleChartMouseLeave();\n setActiveLegend(point.legend);\n },\n ...(point.legendShape && {\n shape: point.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 />\n );\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): JSX.Element[] {\n const series: JSX.Element[] = [];\n if (isSelectedLegend) {\n _points = selectedLegendPoints;\n } else {\n _points = _injectIndexPropertyInScatterChartData(props.data.lineChartData);\n }\n\n const yMax = d3Max(points, (point: LineChartPoints) => {\n return d3Max(point.data as ScatterChartDataPoint[], (item: ScatterChartDataPoint) => item.y)!;\n })!;\n const yMin = d3Min(points, (point: LineChartPoints) => {\n return d3Min(point.data as ScatterChartDataPoint[], (item: ScatterChartDataPoint) => item.y)!;\n })!;\n const yPadding = (yMax - yMin) * 0.1;\n const yPaddingRange = Math.abs(_yAxisScale(yMin + yPadding) - _yAxisScale(yMin));\n\n let maxMarkerRange = 40;\n let xPaddingRange = 0;\n if (_xAxisType === XAxisTypes.StringAxis) {\n _xBandwidth = _xAxisScale.bandwidth() / 2;\n xPaddingRange = _xBandwidth;\n } else if (_xAxisType === XAxisTypes.DateAxis) {\n const xMin = d3Min(points, (point: LineChartPoints) => {\n return d3Min(point.data as ScatterChartDataPoint[], (item: ScatterChartDataPoint) => item.x as Date)!;\n })!;\n\n const xMax = d3Max(points, (point: LineChartPoints) => {\n return d3Max(point.data as ScatterChartDataPoint[], (item: ScatterChartDataPoint) => {\n return item.x as Date;\n });\n })!;\n\n const xPadding = (xMax.getTime() - xMin.getTime()) * 0.1;\n xPaddingRange = Math.abs(_xAxisScale(new Date(xMin.getTime() + xPadding)) - _xAxisScale(xMin));\n } else {\n const xMin = d3Min(points, (point: LineChartPoints) => {\n return d3Min(point.data as ScatterChartDataPoint[], (item: ScatterChartDataPoint) => item.x as number)!;\n })!;\n\n const xMax = d3Max(points, (point: LineChartPoints) => {\n return d3Max(point.data as ScatterChartDataPoint[], (item: ScatterChartDataPoint) => {\n return item.x as number;\n });\n })!;\n\n const xPadding = (xMax - xMin) * 0.1;\n xPaddingRange = Math.abs(_xAxisScale(xMin + xPadding) - _xAxisScale(xMin));\n }\n maxMarkerRange = Math.min(maxMarkerRange, Math.min(xPaddingRange, yPaddingRange));\n\n const maxMarkerSize = d3Max(_points, (point: LineChartPoints) => {\n return d3Max(point.data as ScatterChartDataPoint[], (item: ScatterChartDataPoint) => {\n return item.markerSize as number;\n });\n })!;\n\n for (let i = _points.length - 1; i >= 0; i--) {\n const pointsForSeries: JSX.Element[] = [];\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 seriesId = `${_seriesId}_${i}_${j}`;\n const circleId = `${_circleId}_${i}_${j}`;\n const { x, y, xAxisCalloutData, xAxisCalloutAccessibilityData } = _points[i].data[j];\n let circleRadius = 3.5;\n const pointMarkerSize = (_points[i].data[j] as ScatterChartDataPoint).markerSize;\n if ((pointMarkerSize as number) !== undefined) {\n circleRadius = Math.min((pointMarkerSize! * maxMarkerRange) / maxMarkerSize, pointMarkerSize!);\n }\n\n const isLegendSelected: boolean = _legendHighlighted(legendVal) || _noLegendHighlighted() || isSelectedLegend;\n\n const currentPointHidden = _points[i].hideNonActiveDots && activePoint !== circleId;\n pointsForSeries.push(\n <circle\n id={circleId}\n key={circleId}\n r={circleRadius}\n cx={_xAxisScale(x) + _xBandwidth}\n cy={_yAxisScale(y)}\n data-is-focusable={isLegendSelected}\n onMouseOver={(event: React.MouseEvent<SVGElement>) =>\n _handleHover(x, y, verticaLineHeight, xAxisCalloutData, circleId, xAxisCalloutAccessibilityData, event)\n }\n onMouseMove={(event: React.MouseEvent<SVGElement>) =>\n _handleHover(x, y, verticaLineHeight, xAxisCalloutData, circleId, xAxisCalloutAccessibilityData, event)\n }\n onMouseOut={_handleMouseOut}\n onFocus={() => _handleFocus(seriesId, x, xAxisCalloutData, circleId, xAxisCalloutAccessibilityData)}\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 }\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 seriesId: string,\n x: number | Date | string,\n\n xAxisCalloutData: string | undefined,\n circleId: string,\n xAxisCalloutAccessibilityData?: AccessibilityProps,\n ) {\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.lineChartData &&\n props.data.lineChartData.length > 0 &&\n props.data.lineChartData.filter((item: LineChartPoints) => item.data.length).length > 0\n );\n }\n\n const { legendProps, tickValues, tickFormat } = props;\n _points = _injectIndexPropertyInScatterChartData(props.data.lineChartData);\n\n let points = _points;\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) {\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 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 onChartMouseLeave={_handleChartMouseLeave}\n enableFirstRenderOptimization={_firstRenderOptimization}\n datasetForXAxisDomain={_xAxisLabels}\n componentRef={cartesianChartRef}\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":["ScatterChart","React","forwardRef","props","forwardedRef","_circleId","useId","_seriesId","_verticalLine","_tooltipId","_firstRenderOptimization","_emptyChartId","_points","_injectIndexPropertyInScatterChartData","data","lineChartData","_calloutPoints","calloutData","_xAxisScale","_yAxisScale","_uniqueCallOutID","_refArray","margins","renderSeries","_xAxisLabels","xAxisCalloutAccessibilityData","_xBandwidth","cartesianChartRef","useRef","classes","useScatterChartStyles","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","useEffect","current","areArraysEqual","useImperativeHandle","componentRef","chartContainer","_xAxisType","length","getTypeOfAxis","XAxisTypes","StringAxis","pointsRef","calloutPointsRef","height","width","scatterChartData","map","item","index","color","getNextColor","getColorFromToken","updatePosition","newX","newY","threshold","distance","Math","sqrt","pow","_getMargins","_margins","_initializeScatterChartData","xScale","yScale","containerHeight","containerWidth","xElement","_createPlot","_onHoverCardHide","_createLegends","isLegendMultiSelectEnabled","canSelectMultipleLegends","legendDataItems","point","legend","title","onMouseOutAction","hoverAction","_handleChartMouseLeave","legendShape","shape","createElement","Legends","legends","enabledWrapLines","enabledLegendsWrapLines","overflowText","legendsOverflowText","onLegendHoverCardLeave","onChange","_onLegendSelectionChange","legendsSelected","event","currentLegend","slice","_getPointFill","seriesColor","pointId","pointIndex","isLastPoint","tokens","colorNeutralBackground1","series","yMax","d3Max","points","yMin","d3Min","yPadding","yPaddingRange","abs","maxMarkerRange","xPaddingRange","bandwidth","DateAxis","xMin","xMax","xPadding","getTime","Date","min","maxMarkerSize","markerSize","i","pointsForSeries","legendVal","verticaLineHeight","bottom","j","seriesId","circleId","xAxisCalloutData","circleRadius","pointMarkerSize","isLegendSelected","_legendHighlighted","_noLegendHighlighted","currentPointHidden","hideNonActiveDots","push","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","g","showXAxisLablesTooltip","document","getElementById","remove","e","wrapXAxisLables","xAxisElement","d3Select","call","tooltipProps","tooltipCls","tooltip","axis","tooltipOfAxislabels","formattedData","formatDate","useUTC","xVal","found","find","element","attr","forEach","obj","values","lineHeight","mouseEvent","persist","clientX","clientY","func","onClick","_getHighlightedLegend","includes","seriesIndex","formattedDate","xValue","yValue","yAxisCalloutData","callOutAccessibilityData","ariaLabel","_isChartEmpty","filter","tickValues","tickFormat","legendBars","hideLegend","calloutProps","descriptionMessage","getCalloutDescriptionMessage","isCalloutForStack","culture","isCartesian","tickParams","xAxisLabels","dp","flat","Set","CartesianChart","chartTitle","chartType","ChartTypes","getmargins","getGraphData","xAxisType","onChartMouseLeave","enableFirstRenderOptimization","datasetForXAxisDomain","children","yScalePrimary","Fragment","line","x1","y1","x2","y2","visibility","strokeDasharray","div","style","displayName"],"rangeMappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;","mappings":"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"}
|
|
@@ -12,8 +12,8 @@ _export(exports, {
|
|
|
12
12
|
scatterChartClassNames: function() {
|
|
13
13
|
return scatterChartClassNames;
|
|
14
14
|
},
|
|
15
|
-
|
|
16
|
-
return
|
|
15
|
+
useScatterChartStyles: function() {
|
|
16
|
+
return useScatterChartStyles;
|
|
17
17
|
}
|
|
18
18
|
});
|
|
19
19
|
const _react = require("@griffel/react");
|
|
@@ -81,7 +81,7 @@ const scatterChartClassNames = {
|
|
|
81
81
|
".f1aehjj5{pointer-events:none;}"
|
|
82
82
|
]
|
|
83
83
|
});
|
|
84
|
-
const
|
|
84
|
+
const useScatterChartStyles = (props)=>{
|
|
85
85
|
const baseStyles = useStyles();
|
|
86
86
|
return {
|
|
87
87
|
tooltip: (0, _react.mergeClasses)(scatterChartClassNames.tooltip, baseStyles.tooltip /*props.styles?.tooltip*/ )
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["useScatterChartStyles.styles.js"],"sourcesContent":["import { makeStyles, mergeClasses, shorthands } from '@griffel/react';\nimport { tokens } from '@fluentui/react-theme';\n/**\n * @internal\n */ export const scatterChartClassNames = {\n tooltip: 'fui-line__tooltip',\n root: 'fui-line__root',\n xAxis: 'fui-line__xAxis',\n yAxis: 'fui-line__yAxis',\n legendContainer: 'fui-line__legendContainer',\n hover: 'fui-line__hover',\n descriptionMessage: 'fui-line__descriptionMessage',\n axisTitle: 'fui-line__axisTitle',\n chartTitle: 'fui-line__chartTitle',\n opacityChangeOnHover: 'fui-line__opacityChangeOnHover',\n shapeStyles: 'fui-line__shapeStyles',\n chartWrapper: 'fui-line__chartWrapper',\n svgTooltip: '',\n chart: ''\n};\n/**\n * Base Styles\n */ const useStyles = makeStyles({\n tooltip: {\n display: 'flex',\n flexDirection: 'column',\n ...shorthands.padding(tokens.spacingHorizontalS),\n position: 'absolute',\n textAlign: 'center',\n top: tokens.spacingVerticalNone,\n fill: tokens.colorNeutralBackground1,\n borderRadius: tokens.borderRadiusSmall,\n pointerEvents: 'none'\n }\n});\n/**\n * Apply styling to the Carousel slots based on the state\n */ export const
|
|
1
|
+
{"version":3,"sources":["useScatterChartStyles.styles.js"],"sourcesContent":["import { makeStyles, mergeClasses, shorthands } from '@griffel/react';\nimport { tokens } from '@fluentui/react-theme';\n/**\n * @internal\n */ export const scatterChartClassNames = {\n tooltip: 'fui-line__tooltip',\n root: 'fui-line__root',\n xAxis: 'fui-line__xAxis',\n yAxis: 'fui-line__yAxis',\n legendContainer: 'fui-line__legendContainer',\n hover: 'fui-line__hover',\n descriptionMessage: 'fui-line__descriptionMessage',\n axisTitle: 'fui-line__axisTitle',\n chartTitle: 'fui-line__chartTitle',\n opacityChangeOnHover: 'fui-line__opacityChangeOnHover',\n shapeStyles: 'fui-line__shapeStyles',\n chartWrapper: 'fui-line__chartWrapper',\n svgTooltip: '',\n chart: ''\n};\n/**\n * Base Styles\n */ const useStyles = makeStyles({\n tooltip: {\n display: 'flex',\n flexDirection: 'column',\n ...shorthands.padding(tokens.spacingHorizontalS),\n position: 'absolute',\n textAlign: 'center',\n top: tokens.spacingVerticalNone,\n fill: tokens.colorNeutralBackground1,\n borderRadius: tokens.borderRadiusSmall,\n pointerEvents: 'none'\n }\n});\n/**\n * Apply styling to the Carousel slots based on the state\n */ export const useScatterChartStyles = (props)=>{\n const baseStyles = useStyles();\n return {\n tooltip: mergeClasses(scatterChartClassNames.tooltip, baseStyles.tooltip /*props.styles?.tooltip*/ )\n };\n};\n"],"names":["scatterChartClassNames","useScatterChartStyles","tooltip","root","xAxis","yAxis","legendContainer","hover","descriptionMessage","axisTitle","chartTitle","opacityChangeOnHover","shapeStyles","chartWrapper","svgTooltip","chart","useStyles","__styles","mc9l5x","Beiy3e4","z8tnut","z189sj","Byoj8tv","uwmqm3","qhf8xq","fsow6f","Bhzewxz","Bkfmm31","Beyfa6y","Bbmb7ep","Btl43ni","B7oj6ja","Dimara","Bkecrkj","d","p","props","baseStyles","mergeClasses"],"rangeMappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;","mappings":";;;;;;;;;;;IAIiBA,sBAAsB;eAAtBA;;IAiCAC,qBAAqB;eAArBA;;;uBArCoC;AAI1C,MAAMD,yBAAyB;IACtCE,SAAS;IACTC,MAAM;IACNC,OAAO;IACPC,OAAO;IACPC,iBAAiB;IACjBC,OAAO;IACPC,oBAAoB;IACpBC,WAAW;IACXC,YAAY;IACZC,sBAAsB;IACtBC,aAAa;IACbC,cAAc;IACdC,YAAY;IACZC,OAAO;AACX;AACA;;CAEA,GAAI,MAAMC,YAAS,WAAA,GAAGC,IAAAA,eAAA,EAAA;IAAAf,SAAA;QAAAgB,QAAA;QAAAC,SAAA;QAAAC,QAAA;QAAAC,QAAA;YAAA;YAAA;SAAA;QAAAC,SAAA;QAAAC,QAAA;YAAA;YAAA;SAAA;QAAAC,QAAA;QAAAC,QAAA;QAAAC,SAAA;QAAAC,SAAA;QAAAC,SAAA;QAAAC,SAAA;QAAAC,SAAA;QAAAC,SAAA;QAAAC,QAAA;QAAAC,SAAA;IAAA;AAAA,GAAA;IAAAC,GAAA;QAAA;QAAA;QAAA;QAAA;QAAA;QAAA;QAAA;QAAA;QAAA;QAAA;QAAA;YAAA;YAAA;gBAAAC,GAAA,CAAA;YAAA;SAAA;QAAA;KAAA;AAAA;AAeX,MAAMlC,wBAAyBmC,CAAAA;IACtC,MAAMC,aAAarB;IACnB,OAAO;QACHd,SAASoC,IAAAA,mBAAY,EAACtC,uBAAuBE,OAAO,EAAEmC,WAAWnC,OAAO,CAAC,uBAAA;IAC7E;AACJ"}
|
|
@@ -163,8 +163,9 @@ const VerticalBarChart = /*#__PURE__*/ _react.forwardRef((props, forwardedRef)=>
|
|
|
163
163
|
// and avoid conveying duplicate info, make these line points non-focusable.
|
|
164
164
|
"data-is-focusable": _legendHighlighted(lineLegendText),
|
|
165
165
|
ref: (e)=>circleRef.refElement = e,
|
|
166
|
-
onFocus: _lineFocus
|
|
167
|
-
onBlur: _handleChartMouseLeave
|
|
166
|
+
onFocus: (event)=>_lineFocus(event, item.point, circleRef),
|
|
167
|
+
onBlur: _handleChartMouseLeave,
|
|
168
|
+
tabIndex: _legendHighlighted(lineLegendText) ? 0 : undefined
|
|
168
169
|
});
|
|
169
170
|
});
|
|
170
171
|
return /*#__PURE__*/ _react.createElement(_react.Fragment, null, line, dots);
|
|
@@ -356,7 +357,7 @@ const VerticalBarChart = /*#__PURE__*/ _react.forwardRef((props, forwardedRef)=>
|
|
|
356
357
|
setHoverXValue('');
|
|
357
358
|
}
|
|
358
359
|
// eslint-disable-next-line @typescript-eslint/no-shadow
|
|
359
|
-
function _onBarFocus(point, refArrayIndexNumber, color) {
|
|
360
|
+
function _onBarFocus(event, point, refArrayIndexNumber, color) {
|
|
360
361
|
// eslint-disable-next-line @typescript-eslint/no-shadow
|
|
361
362
|
const { YValueHover, hoverXValue } = _getCalloutContentForLineAndBar(point);
|
|
362
363
|
_refArray.forEach((obj, index)=>{
|
|
@@ -381,7 +382,7 @@ const VerticalBarChart = /*#__PURE__*/ _react.forwardRef((props, forwardedRef)=>
|
|
|
381
382
|
mouseEvent.persist();
|
|
382
383
|
_lineHoverFocus(point, mouseEvent);
|
|
383
384
|
}
|
|
384
|
-
function _lineFocus(point, ref) {
|
|
385
|
+
function _lineFocus(event, point, ref) {
|
|
385
386
|
if (ref.refElement) {
|
|
386
387
|
_lineHoverFocus(point, ref.refElement);
|
|
387
388
|
}
|
|
@@ -484,7 +485,6 @@ const VerticalBarChart = /*#__PURE__*/ _react.forwardRef((props, forwardedRef)=>
|
|
|
484
485
|
x: xPoint,
|
|
485
486
|
y: !isHeightNegative ? yPoint : baselineHeight,
|
|
486
487
|
width: _barWidth,
|
|
487
|
-
"data-is-focusable": !props.hideTooltip && shouldHighlight,
|
|
488
488
|
height: adjustedBarHeight,
|
|
489
489
|
ref: (e)=>{
|
|
490
490
|
_refCallback(e, point.legend);
|
|
@@ -494,10 +494,10 @@ const VerticalBarChart = /*#__PURE__*/ _react.forwardRef((props, forwardedRef)=>
|
|
|
494
494
|
"aria-label": _getAriaLabel(point),
|
|
495
495
|
role: "img",
|
|
496
496
|
onMouseLeave: _onBarLeave,
|
|
497
|
-
onFocus: _onBarFocus
|
|
497
|
+
onFocus: (event)=>_onBarFocus(event, point, index, colorScale(point.y)),
|
|
498
498
|
onBlur: _onBarLeave,
|
|
499
499
|
fill: point.color && !useSingleColor ? point.color : colorScale(point.y),
|
|
500
|
-
tabIndex:
|
|
500
|
+
tabIndex: !props.hideTooltip && shouldHighlight ? 0 : undefined,
|
|
501
501
|
opacity: shouldHighlight ? 1 : 0.1,
|
|
502
502
|
rx: props.roundCorners ? 3 : 0
|
|
503
503
|
}), _renderBarLabel(xPoint, yPoint, point.y, point.legend, isHeightNegative));
|
|
@@ -570,10 +570,9 @@ const VerticalBarChart = /*#__PURE__*/ _react.forwardRef((props, forwardedRef)=>
|
|
|
570
570
|
onMouseOver: (event)=>_onBarHover(point, colorScale(point.y), event),
|
|
571
571
|
onMouseLeave: _onBarLeave,
|
|
572
572
|
onBlur: _onBarLeave,
|
|
573
|
-
|
|
574
|
-
onFocus: _onBarFocus.bind(point, index, colorScale(point.y)),
|
|
573
|
+
onFocus: (event)=>_onBarFocus(event, point, index, colorScale(point.y)),
|
|
575
574
|
fill: point.color ? point.color : colorScale(point.y),
|
|
576
|
-
tabIndex:
|
|
575
|
+
tabIndex: !props.hideTooltip && shouldHighlight ? 0 : undefined,
|
|
577
576
|
rx: props.roundCorners ? 3 : 0,
|
|
578
577
|
opacity: shouldHighlight ? 1 : 0.1
|
|
579
578
|
}), _renderBarLabel(xPoint, yPoint, point.y, point.legend, isHeightNegative));
|
|
@@ -635,7 +634,6 @@ const VerticalBarChart = /*#__PURE__*/ _react.forwardRef((props, forwardedRef)=>
|
|
|
635
634
|
className: classes.opacityChangeOnHover,
|
|
636
635
|
y: !isHeightNegative ? yPoint : baselineHeight,
|
|
637
636
|
width: _barWidth,
|
|
638
|
-
"data-is-focusable": !props.hideTooltip && shouldHighlight,
|
|
639
637
|
height: adjustedBarHeight,
|
|
640
638
|
ref: (e)=>{
|
|
641
639
|
_refCallback(e, point.legend);
|
|
@@ -645,10 +643,10 @@ const VerticalBarChart = /*#__PURE__*/ _react.forwardRef((props, forwardedRef)=>
|
|
|
645
643
|
"aria-label": _getAriaLabel(point),
|
|
646
644
|
role: "img",
|
|
647
645
|
onMouseLeave: _onBarLeave,
|
|
648
|
-
onFocus: _onBarFocus
|
|
646
|
+
onFocus: (event)=>_onBarFocus(event, point, index, colorScale(point.y)),
|
|
649
647
|
onBlur: _onBarLeave,
|
|
650
648
|
fill: point.color && !useSingleColor ? point.color : colorScale(point.y),
|
|
651
|
-
tabIndex:
|
|
649
|
+
tabIndex: !props.hideTooltip && shouldHighlight ? 0 : undefined,
|
|
652
650
|
rx: props.roundCorners ? 3 : 0,
|
|
653
651
|
opacity: shouldHighlight ? 1 : 0.1
|
|
654
652
|
}), _renderBarLabel(xPoint, yPoint, point.y, point.legend, isHeightNegative));
|