@fluentui/react-charts 9.3.20 → 9.3.22

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (22) hide show
  1. package/CHANGELOG.md +21 -2
  2. package/lib/components/GroupedVerticalBarChart/GroupedVerticalBarChart.js +9 -3
  3. package/lib/components/GroupedVerticalBarChart/GroupedVerticalBarChart.js.map +1 -1
  4. package/lib/components/HorizontalBarChart/HorizontalBarChart.js +8 -5
  5. package/lib/components/HorizontalBarChart/HorizontalBarChart.js.map +1 -1
  6. package/lib/components/HorizontalBarChartWithAxis/HorizontalBarChartWithAxis.js +15 -3
  7. package/lib/components/HorizontalBarChartWithAxis/HorizontalBarChartWithAxis.js.map +1 -1
  8. package/lib/components/VerticalBarChart/VerticalBarChart.js +13 -4
  9. package/lib/components/VerticalBarChart/VerticalBarChart.js.map +1 -1
  10. package/lib/components/VerticalStackedBarChart/VerticalStackedBarChart.js +16 -10
  11. package/lib/components/VerticalStackedBarChart/VerticalStackedBarChart.js.map +1 -1
  12. package/lib-commonjs/components/GroupedVerticalBarChart/GroupedVerticalBarChart.js +9 -3
  13. package/lib-commonjs/components/GroupedVerticalBarChart/GroupedVerticalBarChart.js.map +1 -1
  14. package/lib-commonjs/components/HorizontalBarChart/HorizontalBarChart.js +8 -5
  15. package/lib-commonjs/components/HorizontalBarChart/HorizontalBarChart.js.map +1 -1
  16. package/lib-commonjs/components/HorizontalBarChartWithAxis/HorizontalBarChartWithAxis.js +15 -3
  17. package/lib-commonjs/components/HorizontalBarChartWithAxis/HorizontalBarChartWithAxis.js.map +1 -1
  18. package/lib-commonjs/components/VerticalBarChart/VerticalBarChart.js +13 -4
  19. package/lib-commonjs/components/VerticalBarChart/VerticalBarChart.js.map +1 -1
  20. package/lib-commonjs/components/VerticalStackedBarChart/VerticalStackedBarChart.js +16 -10
  21. package/lib-commonjs/components/VerticalStackedBarChart/VerticalStackedBarChart.js.map +1 -1
  22. package/package.json +3 -3
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/components/HorizontalBarChart/HorizontalBarChart.tsx"],"sourcesContent":["'use client';\n\nimport * as React from 'react';\nimport { useHorizontalBarChartStyles } from './useHorizontalBarChartStyles.styles';\nimport type { ChartProps, HorizontalBarChartProps, ChartDataPoint, RefArrayData } from './index';\nimport { HorizontalBarChartVariant } from './index';\nimport { formatToLocaleString } from '@fluentui/chart-utilities';\nimport { formatScientificLimitWidth, getAccessibleDataObject, useRtl } from '../../utilities/index';\nimport { useId } from '@fluentui/react-utilities';\nimport type { JSXElement } 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 type { Legend } from '../../index';\nimport { 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 = useId('_HorizontalLine_');\n const _refArray: RefArrayData[] = [];\n const _isRTL: boolean = useRtl();\n const barChartSvgRef: React.RefObject<SVGSVGElement | null> = 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 const _showToolTipOnSegment: boolean = !props.hideTooltip;\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[]): JSXElement {\n const legendItems: Legend[] = chartProps.flatMap(\n point =>\n point.chartData?.map((dataPoint): Legend => {\n const legend = dataPoint.legend ?? '';\n const color = dataPoint.color ?? '';\n\n return {\n title: legend,\n color,\n action: () => setSelectedLegend(selectedLegend === legend ? '' : legend),\n hoverAction: () => {\n _handleChartMouseLeave();\n setActiveLegend(legend);\n },\n onMouseOutAction: () => setActiveLegend(''),\n };\n }) ?? [],\n );\n\n return (\n <Legends legends={legendItems} centerLegends overflowText={props.legendsOverflowText} {...props.legendProps} />\n );\n }\n\n function _getDefaultTextData(data: ChartProps): JSXElement {\n const chartDataMode = props.chartDataMode || 'default';\n\n if (chartDataMode === 'hidden') {\n return <></>; // No text data for hidden mode\n }\n\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\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): JSXElement {\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): JSXElement[] {\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={\n _showToolTipOnSegment && point.legend !== '' ? event => _hoverOn(event, xValue, point) : undefined\n }\n onFocus={_showToolTipOnSegment && 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={_legendHighlighted(point.legend!) || _noLegendHighlighted() ? 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 = props.showLegendForSinglePointBar\n ? false\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 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}\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\n ref={(e: HTMLDivElement) => {\n legendContainer.current = e;\n }}\n className={classes.legendContainer}\n >\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":["React","useHorizontalBarChartStyles","HorizontalBarChartVariant","formatToLocaleString","formatScientificLimitWidth","getAccessibleDataObject","useRtl","useId","tokens","useFocusableGroup","ChartPopover","FocusableTooltipText","Legends","HorizontalBarChart","forwardRef","props","forwardedRef","legendContainer","useRef","_uniqLineText","_refArray","_isRTL","barChartSvgRef","createRef","_emptyChartId","_barHeight","_calloutAnchorPoint","isSingleBar","_showToolTipOnSegment","hideTooltip","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","flatMap","chartData","map","dataPoint","title","action","hoverAction","onMouseOutAction","legends","centerLegends","overflowText","legendsOverflowText","legendProps","chartDataMode","culture","accessibilityData","chartDataAccessibilityData","total","reduce","acc","horizontalBarChartdata","div","className","classes","chartTitleRight","span","chartDataTextDenominator","dataRatioPercentage","Math","round","_createBenchmark","undefined","totalData","benchmarkData","benchmarkRatio","benchmarkStyles","benchmarkContainer","triangle","style","_createBars","noOfBars","count","totalMarginPercent","defaultColors","colorPaletteBlueForeground2","colorPaletteCornflowerForeground2","colorPaletteDarkGreenForeground2","colorPaletteNavyForeground2","colorPaletteDarkOrangeForeground2","startingPoint","prevPosition","value","sumOfPercent","pointData","scalingRatio","bars","floor","random","xValue","placeholderIndex","isLegendSelected","variant","AbsoluteScale","hideLabels","text","key","barValue","dominantBaseline","transform","barLabel","aria-hidden","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","focusAttributes","legendButtons","datapoint","root","points","showLegendForSinglePointBar","colorBackgroundOverlay","chartDataText","keyVal","items","chartTitle","chartTitleLeft","content","chartTitleAccessibilityData","svg","ref","chart","g","id","e","onClick","p","YValue","isCalloutForStack","customCallout","customizedCallout","onRenderCalloutPerHorizontalBar","customCalloutProps","calloutPropsPerDataPoint","isCartesian","displayName"],"mappings":"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"}
1
+ {"version":3,"sources":["../src/components/HorizontalBarChart/HorizontalBarChart.tsx"],"sourcesContent":["'use client';\n\nimport * as React from 'react';\nimport { useHorizontalBarChartStyles } from './useHorizontalBarChartStyles.styles';\nimport type { ChartProps, HorizontalBarChartProps, ChartDataPoint, RefArrayData } from './index';\nimport { HorizontalBarChartVariant } from './index';\nimport { formatToLocaleString } from '@fluentui/chart-utilities';\nimport { formatScientificLimitWidth, getAccessibleDataObject, useRtl } from '../../utilities/index';\nimport { useId } from '@fluentui/react-utilities';\nimport type { JSXElement } 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 type { Legend } from '../../index';\nimport { 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 = useId('_HorizontalLine_');\n const _refArray: RefArrayData[] = [];\n const _isRTL: boolean = useRtl();\n const barChartSvgRef: React.RefObject<SVGSVGElement | null> = 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 const _showToolTipOnSegment: boolean = !props.hideTooltip;\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[]): JSXElement {\n const legendItems: Legend[] = chartProps.flatMap(\n point =>\n point.chartData?.map((dataPoint): Legend => {\n const legend = dataPoint.legend ?? '';\n const color = dataPoint.color ?? '';\n\n return {\n title: legend,\n color,\n action: () => setSelectedLegend(selectedLegend === legend ? '' : legend),\n hoverAction: () => {\n _handleChartMouseLeave();\n setActiveLegend(legend);\n },\n onMouseOutAction: () => setActiveLegend(''),\n };\n }) ?? [],\n );\n\n return (\n <Legends legends={legendItems} centerLegends overflowText={props.legendsOverflowText} {...props.legendProps} />\n );\n }\n\n function _getDefaultTextData(data: ChartProps): JSXElement {\n const chartDataMode = props.chartDataMode || 'default';\n\n if (chartDataMode === 'hidden') {\n return <></>; // No text data for hidden mode\n }\n\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\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): JSXElement {\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): JSXElement[] {\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 isLegendSelected: boolean = _legendHighlighted(point.legend) || _noLegendHighlighted();\n\n // Render bar label instead of placeholder bar for absolute-scale variant\n if (point.placeHolder && 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={\n _showToolTipOnSegment && point.legend !== '' ? event => _hoverOn(event, xValue, point) : undefined\n }\n onFocus={_showToolTipOnSegment && point.legend !== '' ? event => _hoverOn(event, xValue, point) : undefined}\n role={!point.placeHolder ? 'option' : ''}\n aria-label={!point.placeHolder ? _getAriaLabel(point) : undefined}\n onBlur={_hoverOff}\n onMouseLeave={_hoverOff}\n className={classes.barWrapper}\n opacity={isLegendSelected ? 1 : 0.1}\n tabIndex={!point.placeHolder && (_legendHighlighted(point.legend!) || _noLegendHighlighted()) ? 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 = props.showLegendForSinglePointBar\n ? false\n : points.chartData!.length === 1 || (points.chartData!.length > 1 && points.chartData![1].legend === '');\n if (isSingleBar) {\n points.chartData![1] = {\n placeHolder: true,\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 const barGroupAriaLabel = `bar ${index + 1} of ${data!.length}.`;\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 role=\"listbox\"\n id={keyVal}\n aria-label={barGroupAriaLabel}\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}\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\n ref={(e: HTMLDivElement) => {\n legendContainer.current = e;\n }}\n className={classes.legendContainer}\n >\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":["React","useHorizontalBarChartStyles","HorizontalBarChartVariant","formatToLocaleString","formatScientificLimitWidth","getAccessibleDataObject","useRtl","useId","tokens","useFocusableGroup","ChartPopover","FocusableTooltipText","Legends","HorizontalBarChart","forwardRef","props","forwardedRef","legendContainer","useRef","_uniqLineText","_refArray","_isRTL","barChartSvgRef","createRef","_emptyChartId","_barHeight","_calloutAnchorPoint","isSingleBar","_showToolTipOnSegment","hideTooltip","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","flatMap","chartData","map","dataPoint","title","action","hoverAction","onMouseOutAction","legends","centerLegends","overflowText","legendsOverflowText","legendProps","chartDataMode","culture","accessibilityData","chartDataAccessibilityData","total","reduce","acc","horizontalBarChartdata","div","className","classes","chartTitleRight","span","chartDataTextDenominator","dataRatioPercentage","Math","round","_createBenchmark","undefined","totalData","benchmarkData","benchmarkRatio","benchmarkStyles","benchmarkContainer","triangle","style","_createBars","noOfBars","count","totalMarginPercent","defaultColors","colorPaletteBlueForeground2","colorPaletteCornflowerForeground2","colorPaletteDarkGreenForeground2","colorPaletteNavyForeground2","colorPaletteDarkOrangeForeground2","startingPoint","prevPosition","value","sumOfPercent","pointData","scalingRatio","bars","floor","random","xValue","isLegendSelected","placeHolder","variant","AbsoluteScale","hideLabels","text","key","barValue","dominantBaseline","transform","barLabel","aria-hidden","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","focusAttributes","legendButtons","datapoint","root","points","showLegendForSinglePointBar","colorBackgroundOverlay","chartDataText","keyVal","barGroupAriaLabel","items","chartTitle","chartTitleLeft","content","chartTitleAccessibilityData","svg","ref","chart","g","id","e","onClick","p","YValue","isCalloutForStack","customCallout","customizedCallout","onRenderCalloutPerHorizontalBar","customCalloutProps","calloutPropsPerDataPoint","isCartesian","displayName"],"mappings":"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"}
@@ -122,7 +122,14 @@ export const HorizontalBarChartWithAxis = /*#__PURE__*/ React.forwardRef((props
122
122
  let allBars = [];
123
123
  // when the chart mounts, the xRange[1] is sometimes seen to be < 0 (like -40) while xRange[0] > 0.
124
124
  if (xRange[0] < xRange[1]) {
125
- allBars = stackedChartData.map((singleBarData)=>_yAxisType === YAxisType.NumericAxis ? _createNumericBars(containerHeight, containerWidth, xElement, yElement, singleBarData, xBarScale, yBarScale) : _createStringBars(containerHeight, containerWidth, xElement, yElement, singleBarData, xBarScale, yBarScale)).flat();
125
+ allBars = stackedChartData.map((singleBarData, groupIndex)=>{
126
+ const groupBars = _yAxisType === YAxisType.NumericAxis ? _createNumericBars(containerHeight, containerWidth, xElement, yElement, singleBarData, xBarScale, yBarScale) : _createStringBars(containerHeight, containerWidth, xElement, yElement, singleBarData, xBarScale, yBarScale);
127
+ return /*#__PURE__*/ React.createElement("g", {
128
+ key: `bar-group-${groupIndex}`,
129
+ role: "listbox",
130
+ "aria-label": _getBarGroupAriaLabel(singleBarData, groupIndex)
131
+ }, groupBars);
132
+ });
126
133
  }
127
134
  return _bars = allBars;
128
135
  }
@@ -338,7 +345,7 @@ export const HorizontalBarChartWithAxis = /*#__PURE__*/ React.forwardRef((props
338
345
  onClick: point.onClick,
339
346
  onMouseOver: (event)=>_onBarHover(point, startColor, event),
340
347
  "aria-label": _getAriaLabel(point),
341
- role: "img",
348
+ role: "option",
342
349
  "aria-labelledby": `toolTip${_calloutId}`,
343
350
  onMouseLeave: _onBarLeave,
344
351
  onFocus: (event)=>_onBarFocus(event, point, index, startColor),
@@ -471,7 +478,7 @@ export const HorizontalBarChartWithAxis = /*#__PURE__*/ React.forwardRef((props
471
478
  height: _barHeight,
472
479
  "aria-labelledby": `toolTip${_calloutId}`,
473
480
  "aria-label": _getAriaLabel(point),
474
- role: "img",
481
+ role: "option",
475
482
  ref: (e)=>{
476
483
  _refCallback(e, point.legend);
477
484
  },
@@ -580,6 +587,11 @@ export const HorizontalBarChartWithAxis = /*#__PURE__*/ React.forwardRef((props
580
587
  const yValue = point.yAxisCalloutData || point.y;
581
588
  return ((_point_callOutAccessibilityData = point.callOutAccessibilityData) === null || _point_callOutAccessibilityData === void 0 ? void 0 : _point_callOutAccessibilityData.ariaLabel) || `${yValue}. ` + (legend ? `${legend}, ` : '') + `${xValue}.`;
582
589
  }
590
+ function _getBarGroupAriaLabel(singleBarData, groupIndex) {
591
+ var _singleBarData__y, _singleBarData_;
592
+ const yGroupLabel = ((_singleBarData_ = singleBarData[0]) === null || _singleBarData_ === void 0 ? void 0 : (_singleBarData__y = _singleBarData_.y) === null || _singleBarData__y === void 0 ? void 0 : _singleBarData__y.toString()) || `Group ${groupIndex + 1}`;
593
+ return `${yGroupLabel}, bar group ${groupIndex + 1} of ${_yAxisLabels.length}, with ${singleBarData.length} bars.`;
594
+ }
583
595
  function _renderBarLabel(xPosition, yPosition, value, isPositiveBar) {
584
596
  if (props.hideLabels || _barHeight < 16) {
585
597
  return null;
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/components/HorizontalBarChartWithAxis/HorizontalBarChartWithAxis.tsx"],"sourcesContent":["'use client';\n\nimport * as React from 'react';\nimport { max as d3Max, min as d3Min } from 'd3-array';\nimport type { ScaleLinear as D3ScaleLinear } from 'd3-scale';\nimport { scaleLinear as d3ScaleLinear, scaleBand as d3ScaleBand } from 'd3-scale';\nimport type { Legend } from '../../components/Legends/Legends.types';\nimport { Legends } from '../../components/Legends/Legends';\nimport { useId } from '@fluentui/react-utilities';\nimport type { JSXElement } from '@fluentui/react-utilities';\nimport type {\n AccessibilityProps,\n HorizontalBarChartWithAxisDataPoint,\n RefArrayData,\n Margins,\n ChartPopoverProps,\n} from '../../index';\nimport type { ChildProps } from '../CommonComponents/CartesianChart.types';\nimport { CartesianChart } from '../CommonComponents/CartesianChart';\nimport type { HorizontalBarChartWithAxisProps } from './HorizontalBarChartWithAxis.types';\nimport { useHorizontalBarChartWithAxisStyles } from './useHorizontalBarChartWithAxisStyles.styles';\nimport { ChartPopover } from '../CommonComponents/ChartPopover';\nimport type { IAxisData, NumericAxis, StringAxis, IDomainNRange } from '../../utilities/index';\nimport {\n ChartTypes,\n getAccessibleDataObject,\n YAxisType,\n XAxisTypes,\n getTypeOfAxis,\n getNextColor,\n findHBCWANumericMinMaxOfY,\n createYAxisForHorizontalBarChartWithAxis,\n domainRangeOfNumericForHorizontalBarChartWithAxis,\n createStringYAxisForHorizontalBarChartWithAxis,\n areArraysEqual,\n useRtl,\n DataVizPalette,\n getColorFromToken,\n computeLongestBars,\n groupChartDataByYValue,\n MIN_DOMAIN_MARGIN,\n sortAxisCategories,\n formatScientificLimitWidth,\n} from '../../utilities/index';\nimport { getClosestPairDiffAndRange } from '../../utilities/vbc-utils';\nimport { useImageExport } from '../../utilities/hooks';\ntype ColorScale = (_p?: number) => string;\n\nexport const HorizontalBarChartWithAxis: React.FunctionComponent<HorizontalBarChartWithAxisProps> = React.forwardRef<\n HTMLDivElement,\n HorizontalBarChartWithAxisProps\n>((props = { yAxisCategoryOrder: 'default' }, forwardedRef) => {\n const _refArray: RefArrayData[] = [];\n const _calloutId: string = useId('callout');\n const _isRtl: boolean = useRtl();\n const _xAxisType: XAxisTypes =\n props.data! && props.data!.length > 0\n ? (getTypeOfAxis(props.data![0].x, true) as XAxisTypes)\n : XAxisTypes.NumericAxis;\n const _yAxisType: YAxisType =\n props.data! && props.data!.length > 0\n ? (getTypeOfAxis(props.data![0].y, false) as YAxisType)\n : YAxisType.StringAxis;\n const _emptyChartId: string = useId('_HBCWithAxis_empty');\n let _points: HorizontalBarChartWithAxisDataPoint[] = [];\n let _barHeight: number = 0;\n let _colors: string[] = [];\n let _margins: Margins;\n let _bars: JSXElement[];\n let _yAxisLabels: string[];\n let _xMax: number;\n let _calloutAnchorPoint: HorizontalBarChartWithAxisDataPoint | null;\n\n let _longestBarPositiveTotalValue: number;\n let _longestBarNegativeTotalValue: number;\n let _domainMargin: number = MIN_DOMAIN_MARGIN;\n let _yAxisPadding: number = props.yAxisPadding ?? 0.5;\n const { cartesianChartRef, legendsRef: _legendsRef } = useImageExport(props.componentRef, props.hideLegend);\n const styles = useHorizontalBarChartWithAxisStyles(props);\n const X_ORIGIN: number = 0;\n\n const [color, setColor] = React.useState<string>('');\n const [dataForHoverCard, setDataForHoverCard] = React.useState<number>(0);\n const [isLegendSelected, setIsLegendSelected] = React.useState<boolean>(\n (props.legendProps?.selectedLegends && props.legendProps.selectedLegends.length > 0) ||\n props.legendProps?.selectedLegend !== undefined,\n );\n const [isLegendHovered, setIsLegendHovered] = React.useState<boolean>(false);\n const [selectedLegendTitle, setSelectedLegendTitle] = React.useState<string>(props.legendProps?.selectedLegend ?? '');\n const [xCalloutValue, setXCalloutValue] = React.useState<string>('');\n const [yCalloutValue, setYCalloutValue] = React.useState<string>('');\n const [selectedLegends, setSelectedLegends] = React.useState<string[]>(props.legendProps?.selectedLegends || []);\n const [dataPointCalloutProps, setDataPointCalloutProps] = React.useState<HorizontalBarChartWithAxisDataPoint>();\n const [callOutAccessibilityData, setCallOutAccessibilityData] = React.useState<AccessibilityProps>();\n const [isPopoverOpen, setPopoverOpen] = React.useState<boolean>(false);\n const [clickPosition, setClickPosition] = React.useState({ x: 0, y: 0 });\n const prevPropsRef = React.useRef<HorizontalBarChartWithAxisProps | null>(null);\n\n React.useEffect(() => {\n if (prevPropsRef.current) {\n const prevProps = prevPropsRef.current;\n if (!areArraysEqual(prevProps.legendProps?.selectedLegends, props.legendProps?.selectedLegends)) {\n setSelectedLegends(props.legendProps?.selectedLegends || []);\n }\n }\n prevPropsRef.current = props;\n }, [props]);\n\n function _adjustProps(): void {\n _points = props.data || [];\n _barHeight = props.barHeight || 32;\n const defaultPalette: string[] = [\n getColorFromToken(DataVizPalette.color6),\n getColorFromToken(DataVizPalette.color1),\n getColorFromToken(DataVizPalette.color5),\n getColorFromToken(DataVizPalette.color7),\n ];\n _colors = props.colors! || defaultPalette;\n }\n\n function _getMargins(margins: Margins) {\n _margins = margins;\n }\n\n function _renderContentForOnlyBars(point: HorizontalBarChartWithAxisDataPoint): JSXElement {\n const { useSingleColor = false } = props;\n let selectedPointIndex = 0;\n props.data!.forEach((yDataPoint: HorizontalBarChartWithAxisDataPoint, index: number) => {\n if (yDataPoint.y === point.y) {\n selectedPointIndex = index;\n }\n });\n let color: string;\n if (useSingleColor) {\n //if useSingle color , then check if user has given a palette or not\n // and pick the first color from that or else from our paltette.\n color = props.colors ? _createColors()(1) : getNextColor(1, 0);\n } else {\n color = point.color ? point.color : props.colors ? _createColors()(point.x) : getNextColor(selectedPointIndex, 0);\n }\n return (\n <>\n <ChartPopover\n XValue={point.xAxisCalloutData || point.x.toString()}\n legend={point.legend}\n YValue={point.yAxisCalloutData || point.y}\n color={color}\n culture={props.culture}\n clickPosition={clickPosition}\n isPopoverOpen={isPopoverOpen}\n />\n </>\n );\n }\n\n function _renderCallout(props?: HorizontalBarChartWithAxisDataPoint): JSXElement | null {\n return props ? _renderContentForOnlyBars(props) : null;\n }\n\n function _getCustomizedCallout() {\n return props.onRenderCalloutPerDataPoint\n ? props.onRenderCalloutPerDataPoint(dataPointCalloutProps, _renderCallout)\n : null;\n }\n\n function _getGraphData(\n xScale: NumericAxis,\n yScale: NumericAxis | StringAxis,\n containerHeight: number,\n containerWidth: number,\n xElement?: SVGElement | null,\n yElement?: SVGElement | null,\n ) {\n const stackedChartData = groupChartDataByYValue(_points);\n const longestBars = computeLongestBars(stackedChartData, X_ORIGIN);\n _longestBarPositiveTotalValue = longestBars.longestPositiveBar;\n _longestBarNegativeTotalValue = longestBars.longestNegativeBar;\n\n const { xBarScale, yBarScale } =\n _yAxisType === YAxisType.NumericAxis\n ? _getScales(containerHeight, containerWidth, true)\n : _getScales(containerHeight, containerWidth, false);\n const xRange = xBarScale.range();\n let allBars: JSXElement[] = [];\n // when the chart mounts, the xRange[1] is sometimes seen to be < 0 (like -40) while xRange[0] > 0.\n if (xRange[0] < xRange[1]) {\n allBars = stackedChartData\n .map(singleBarData =>\n _yAxisType === YAxisType.NumericAxis\n ? _createNumericBars(\n containerHeight,\n containerWidth,\n xElement!,\n yElement!,\n singleBarData,\n xBarScale,\n yBarScale,\n )\n : _createStringBars(\n containerHeight,\n containerWidth,\n xElement!,\n yElement!,\n singleBarData,\n xBarScale,\n yBarScale,\n ),\n )\n .flat();\n }\n\n return (_bars = allBars);\n }\n\n function _createColors(): D3ScaleLinear<string, string> | ColorScale {\n const increment = _colors.length <= 1 ? 1 : 1 / (_colors.length - 1);\n const { useSingleColor = false } = props;\n if (useSingleColor) {\n return (_p?: number) => {\n const { colors } = props;\n return colors && colors.length > 0 ? colors[0] : getColorFromToken(DataVizPalette.color16);\n };\n }\n const domainValues = [];\n for (let i = 0; i < _colors.length; i++) {\n domainValues.push(increment * i * _xMax);\n }\n const colorScale = d3ScaleLinear<string>().domain(domainValues).range(_colors);\n return colorScale;\n }\n\n function _refCallback(element: SVGRectElement, legendTitle: string): void {\n _refArray.push({ index: legendTitle, refElement: element });\n }\n\n function _onBarHover(\n point: HorizontalBarChartWithAxisDataPoint,\n color: string,\n mouseEvent: React.MouseEvent<SVGElement, MouseEvent>,\n ): void {\n mouseEvent.persist();\n if ((isLegendSelected === false || _isLegendHighlighted(point.legend)) && _calloutAnchorPoint !== point) {\n _calloutAnchorPoint = point;\n setPopoverOpen(true);\n _updatePosition(mouseEvent.clientX, mouseEvent.clientY);\n setDataForHoverCard(point.x);\n setSelectedLegendTitle(point.legend!);\n setColor(props.useSingleColor || props.enableGradient ? color : point.color!);\n // To display callout value, if no callout value given, taking given point.x value as a string.\n setXCalloutValue(point.yAxisCalloutData! || point.y.toString());\n setYCalloutValue(point.xAxisCalloutData || point.x.toString());\n setDataPointCalloutProps(point);\n setCallOutAccessibilityData(point.callOutAccessibilityData);\n }\n }\n\n function _onBarLeave(): void {\n setPopoverOpen(false);\n }\n\n function _handleChartMouseLeave(): void {\n _calloutAnchorPoint = null;\n setPopoverOpen(false);\n }\n\n function _onBarFocus(\n event: React.FocusEvent<SVGRectElement, Element>,\n point: HorizontalBarChartWithAxisDataPoint,\n refArrayIndexNumber: number,\n color: string,\n ): void {\n let cx = 0;\n let cy = 0;\n\n const targetRect = (event.target as SVGRectElement).getBoundingClientRect();\n cx = targetRect.left + targetRect.width / 2;\n cy = targetRect.top + targetRect.height / 2;\n _updatePosition(cx, cy);\n if ((isLegendSelected === false || _isLegendHighlighted(point.legend)) && _calloutAnchorPoint !== point) {\n _refArray.forEach((obj: RefArrayData, index: number) => {\n if (refArrayIndexNumber === index) {\n setPopoverOpen(true);\n setSelectedLegendTitle(point.legend!);\n setDataForHoverCard(point.x);\n setColor(props.useSingleColor ? color : point.color!);\n setXCalloutValue(point.yAxisCalloutData || point.y.toString());\n setYCalloutValue(point.xAxisCalloutData! || point.x.toString());\n setDataPointCalloutProps(point);\n setCallOutAccessibilityData(point.callOutAccessibilityData);\n }\n });\n }\n }\n\n function _getScales(\n containerHeight: number,\n containerWidth: number,\n isNumericScale: boolean,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n ): { xBarScale: any; yBarScale: any } {\n const xMax = _longestBarPositiveTotalValue;\n const xMin = _longestBarNegativeTotalValue;\n const xDomain = [Math.min(X_ORIGIN, xMin), Math.max(X_ORIGIN, xMax)];\n if (isNumericScale) {\n const yMax = d3Max(_points, (point: HorizontalBarChartWithAxisDataPoint) => point.y as number)!;\n const yMin = d3Min(_points, (point: HorizontalBarChartWithAxisDataPoint) => point.y as number)!;\n const yDomainMax = Math.max(yMax, props.yMaxValue || 0);\n // Default to 0 if yMinValue is not provided.\n const yMinProp = props.yMinValue || 0;\n const yDomainMin = Math.min(yMin, yMinProp);\n const xBarScale = d3ScaleLinear()\n .domain(xDomain)\n .nice()\n .range([_margins.left!, containerWidth - _margins.right!]);\n const yBarScale = d3ScaleLinear()\n .domain([yDomainMin, yDomainMax])\n .range([containerHeight - (_margins.bottom! + _domainMargin), _margins.top! + _domainMargin]);\n return { xBarScale, yBarScale };\n } else {\n // please note these padding default values must be consistent in here\n // and CatrtesianChartBase w for more details refer example\n // http://using-d3js.com/04_07_ordinal_scales.html\n const yBarScale = d3ScaleBand()\n .domain(_yAxisLabels)\n .range([containerHeight - (_margins.bottom! + _domainMargin), _margins.top! + _domainMargin])\n .padding(_yAxisPadding);\n\n const xBarScale = d3ScaleLinear()\n .domain(xDomain)\n .nice()\n .range([_margins.left!, containerWidth - _margins.right!]);\n return { xBarScale, yBarScale };\n }\n }\n\n function _calculateBarTotals(singleBarData: HorizontalBarChartWithAxisDataPoint[]) {\n const totalPositiveValue = singleBarData\n .filter(point => point.x >= X_ORIGIN)\n .reduce((sum, point) => sum + point.x, 0);\n const totalNegativeValue = singleBarData\n .filter(point => point.x < X_ORIGIN)\n .reduce((sum, point) => sum + point.x, 0);\n const totalBarValue = totalPositiveValue + totalNegativeValue;\n const showLabelOnPositiveSide = totalBarValue >= 0;\n\n const totalPositiveBars = singleBarData.filter(point => point.x >= X_ORIGIN).length;\n const totalNegativeBars = singleBarData.length - totalPositiveBars;\n\n const shouldShowLabel = (\n isPositiveBar: boolean,\n currPositiveCounter: number,\n currNegativeCounter: number,\n ): boolean => {\n const isLastPositiveBar = isPositiveBar && currPositiveCounter === totalPositiveBars;\n const isLastNegativeBar = !isPositiveBar && currNegativeCounter === totalNegativeBars;\n return showLabelOnPositiveSide ? isLastPositiveBar : isLastNegativeBar;\n };\n\n return { totalPositiveValue, totalNegativeValue, totalBarValue, showLabelOnPositiveSide, shouldShowLabel };\n }\n\n function _createNumericBars(\n containerHeight: number,\n containerWidth: number,\n xElement: SVGElement,\n yElement: SVGElement,\n singleBarData: HorizontalBarChartWithAxisDataPoint[],\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n xBarScale: any,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n yBarScale: any,\n ): JSXElement[] {\n const { useSingleColor = false } = props;\n const sortedBars: HorizontalBarChartWithAxisDataPoint[] = [...singleBarData];\n sortedBars.sort((a, b) => {\n const aValue = typeof a.y === 'number' ? a.y : parseFloat(a.y);\n const bValue = typeof b.y === 'number' ? b.y : parseFloat(b.y);\n return bValue - aValue;\n });\n\n let prevWidthPositive = 0;\n let prevWidthNegative = 0;\n let prevPoint = 0;\n\n const totalPositiveBars = singleBarData.filter(\n (point: HorizontalBarChartWithAxisDataPoint) => point.x >= X_ORIGIN,\n ).length;\n const totalNegativeBars = singleBarData.length - totalPositiveBars;\n\n const { totalBarValue, shouldShowLabel } = _calculateBarTotals(singleBarData);\n\n let currPositiveCounter = 0;\n let currNegativeCounter = 0;\n\n const bars = sortedBars.map((point: HorizontalBarChartWithAxisDataPoint, index: number) => {\n let shouldHighlight = true;\n if (isLegendHovered || isLegendSelected) {\n shouldHighlight = _isLegendHighlighted(point.legend);\n }\n if (point.x >= X_ORIGIN) {\n ++currPositiveCounter;\n }\n if (point.x < X_ORIGIN) {\n ++currNegativeCounter;\n }\n const barStartX = _isRtl\n ? containerWidth -\n (_margins.right! + Math.max(xBarScale(point.x + X_ORIGIN), xBarScale(X_ORIGIN)) - _margins.left!)\n : Math.min(xBarScale(point.x + X_ORIGIN), xBarScale(X_ORIGIN));\n const barHeight: number = Math.max(yBarScale(point.y), 0);\n if (barHeight < 1) {\n return <React.Fragment key={point.x}> </React.Fragment>;\n }\n let startColor: string;\n if (useSingleColor) {\n //if useSingle color , then check if user has given a palette or not\n // and pick the first color from that or else from our paltette.\n startColor = props.colors ? _createColors()(1) : getNextColor(1, 0);\n } else {\n startColor = props.colors ? _createColors()(point.x) : getNextColor(index, 0);\n }\n\n startColor = point.color && !useSingleColor ? point.color : startColor;\n\n const prevBarWidth = Math.abs(xBarScale(prevPoint + X_ORIGIN) - xBarScale(X_ORIGIN));\n prevPoint > X_ORIGIN ? (prevWidthPositive += prevBarWidth) : (prevWidthNegative += prevBarWidth);\n const currentWidth = Math.abs(xBarScale(point.x + X_ORIGIN) - xBarScale(X_ORIGIN));\n const gapWidthLTR =\n currentWidth > 2 &&\n ((point.x > X_ORIGIN && currPositiveCounter !== totalPositiveBars) ||\n (point.x < X_ORIGIN && (totalPositiveBars !== 0 || currNegativeCounter > 1)))\n ? 2\n : 0;\n const gapWidthRTL =\n currentWidth > 2 &&\n ((point.x > X_ORIGIN && (totalNegativeBars !== 0 || currPositiveCounter > 1)) ||\n (point.x < X_ORIGIN && currNegativeCounter !== totalNegativeBars))\n ? 2\n : 0;\n let xStart = X_ORIGIN;\n if (_isRtl) {\n xStart = point.x > X_ORIGIN ? barStartX - prevWidthPositive : barStartX + prevWidthNegative;\n } else {\n xStart = point.x > X_ORIGIN ? barStartX + prevWidthPositive : barStartX - prevWidthNegative;\n }\n prevPoint = point.x;\n\n const barWidth = currentWidth - (_isRtl ? gapWidthRTL : gapWidthLTR);\n const barEndX = _isRtl\n ? point.x >= X_ORIGIN\n ? xStart\n : xStart + barWidth\n : point.x >= X_ORIGIN\n ? xStart + barWidth\n : xStart;\n const isPositiveBar = point.x >= X_ORIGIN;\n const showLabel = shouldShowLabel(isPositiveBar, currPositiveCounter, currNegativeCounter);\n\n return (\n <React.Fragment key={`${index}_${point.x}`}>\n <rect\n key={point.y}\n x={xStart}\n y={yBarScale(point.y) - _barHeight / 2}\n width={barWidth}\n height={_barHeight}\n ref={(e: SVGRectElement) => {\n _refCallback(e, point.legend!);\n }}\n rx={props.roundCorners ? 3 : 0}\n onClick={point.onClick}\n onMouseOver={(event: React.MouseEvent<SVGElement, MouseEvent>) => _onBarHover(point, startColor, event)}\n aria-label={_getAriaLabel(point)}\n role=\"img\"\n aria-labelledby={`toolTip${_calloutId}`}\n onMouseLeave={_onBarLeave}\n onFocus={event => _onBarFocus(event, point, index, startColor)}\n onBlur={_onBarLeave}\n fill={startColor}\n opacity={shouldHighlight ? 1 : 0.1}\n tabIndex={shouldHighlight ? 0 : undefined}\n />\n {showLabel && _renderBarLabel(barEndX, yBarScale(point.y) - _barHeight / 2, totalBarValue, isPositiveBar)}\n </React.Fragment>\n );\n });\n return bars;\n }\n\n function _getUniqueYValues() {\n const mapY: Record<string, number | string> = {};\n props.data?.forEach((point: HorizontalBarChartWithAxisDataPoint) => {\n mapY[point.y] = point.y;\n });\n const uniqueY = Object.values(mapY);\n return uniqueY;\n }\n\n function _calculateAppropriateBarHeight(data: number[] | Date[], totalWidth: number, innerPadding: number) {\n const result = getClosestPairDiffAndRange(data);\n if (!result || result[1] === 0) {\n return 16;\n }\n const closestPairDiff = result[0];\n let range = result[1];\n const yMax = d3Max(_points, (point: HorizontalBarChartWithAxisDataPoint) => point.y as number)!;\n // Since we are always rendering from 0 to yMax, we need to ensure that the range is at least yMax\n // to calculate the bar height correctly.\n range = Math.max(range, yMax);\n // Refer to https://microsoft.github.io/fluentui-charting-contrib/docs/rfcs/fix-overlapping-bars-on-continuous-axes\n // for the derivation of the following formula.\n const barWidth = Math.floor(\n (totalWidth * closestPairDiff * (1 - innerPadding)) / (range + closestPairDiff * (1 - innerPadding)),\n );\n return barWidth;\n }\n\n function _getDomainMarginsForHorizontalBarChart(containerHeight: number): Margins {\n _domainMargin = MIN_DOMAIN_MARGIN;\n const uniqueY = _getUniqueYValues();\n /** Rate at which the space between the bars changes wrt the bar height */\n _yAxisPadding = _yAxisPadding === 1 ? 0.99 : _yAxisPadding;\n const barGapRate = _yAxisPadding / (1 - _yAxisPadding);\n const numBars = uniqueY.length + (uniqueY.length - 1) * barGapRate;\n // Total height available to render the bars\n const totalHeight = containerHeight - (_margins.top! + MIN_DOMAIN_MARGIN) - (_margins.bottom! + MIN_DOMAIN_MARGIN);\n if (_yAxisType !== YAxisType.StringAxis) {\n // Calculate bar height dynamically\n _barHeight =\n props.barHeight || _calculateAppropriateBarHeight(uniqueY as number[] | Date[], totalHeight, _yAxisPadding);\n _barHeight = Math.max(_barHeight, 1);\n _domainMargin += _barHeight / 2;\n } else {\n // Calculate the appropriate bar height\n _barHeight = props.barHeight || totalHeight / numBars;\n /** Total height required to render the bars. Directly proportional to bar height */\n const reqHeight = numBars * _barHeight;\n if (totalHeight >= reqHeight) {\n // Center align the chart by setting equal left and right margins for domain\n _domainMargin = MIN_DOMAIN_MARGIN + (totalHeight - reqHeight) / 2;\n }\n }\n\n return {\n ..._margins,\n top: _margins.top! + _domainMargin,\n bottom: _margins.bottom! + _domainMargin,\n };\n }\n\n function _createStringBars(\n containerHeight: number,\n containerWidth: number,\n xElement: SVGElement,\n yElement: SVGElement,\n singleBarData: HorizontalBarChartWithAxisDataPoint[],\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n xBarScale: any,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n yBarScale: any,\n ): JSXElement[] {\n const { useSingleColor = false } = props;\n let prevWidthPositive = 0;\n let prevWidthNegative = 0;\n let prevPoint = 0;\n const totalPositiveBars = singleBarData.filter(\n (point: HorizontalBarChartWithAxisDataPoint) => point.x >= X_ORIGIN,\n ).length;\n const totalNegativeBars = singleBarData.length - totalPositiveBars;\n const { totalBarValue, shouldShowLabel } = _calculateBarTotals(singleBarData);\n let currPositiveCounter = 0;\n let currNegativeCounter = 0;\n const bars = singleBarData.map((point: HorizontalBarChartWithAxisDataPoint, index: number) => {\n let shouldHighlight = true;\n if (isLegendHovered || isLegendSelected) {\n shouldHighlight = _isLegendHighlighted(point.legend);\n }\n if (point.x >= X_ORIGIN) {\n ++currPositiveCounter;\n }\n if (point.x < X_ORIGIN) {\n ++currNegativeCounter;\n }\n const barStartX = _isRtl\n ? containerWidth -\n (_margins.right! + Math.max(xBarScale(point.x + X_ORIGIN), xBarScale(X_ORIGIN)) - _margins.left!)\n : Math.min(xBarScale(point.x + X_ORIGIN), xBarScale(X_ORIGIN));\n const barHeight: number = Math.max(yBarScale(point.y), 0);\n if (barHeight < 1) {\n return <React.Fragment key={point.x}> </React.Fragment>;\n }\n let startColor: string;\n if (useSingleColor) {\n //if useSingle color , then check if user has given a palette or not\n // and pick the first color from that or else from our paltette.\n startColor = props.colors ? _createColors()(1) : getNextColor(1, 0);\n } else {\n startColor = props.colors ? _createColors()(point.x) : getNextColor(index, 0);\n }\n\n startColor = point.color && !useSingleColor ? point.color : startColor;\n const prevBarWidth = Math.abs(xBarScale(prevPoint + X_ORIGIN) - xBarScale(X_ORIGIN));\n prevPoint > 0 ? (prevWidthPositive += prevBarWidth) : (prevWidthNegative += prevBarWidth);\n const currentWidth = Math.abs(xBarScale(point.x + X_ORIGIN) - xBarScale(X_ORIGIN));\n const gapWidthLTR =\n currentWidth > 2 &&\n ((point.x > X_ORIGIN && currPositiveCounter !== totalPositiveBars) ||\n (point.x < X_ORIGIN && (totalPositiveBars !== 0 || currNegativeCounter > 1)))\n ? 2\n : 0;\n const gapWidthRTL =\n currentWidth > 2 &&\n ((point.x > X_ORIGIN && (totalNegativeBars !== 0 || currPositiveCounter > 1)) ||\n (point.x < X_ORIGIN && currNegativeCounter !== totalNegativeBars))\n ? 2\n : 0;\n prevPoint = point.x;\n let xStart = X_ORIGIN;\n if (_isRtl) {\n xStart = point.x > X_ORIGIN ? barStartX - prevWidthPositive : barStartX + prevWidthNegative;\n } else {\n xStart = point.x > X_ORIGIN ? barStartX + prevWidthPositive : barStartX - prevWidthNegative;\n }\n\n const barWidth = currentWidth - (_isRtl ? gapWidthRTL : gapWidthLTR);\n const barEndX = _isRtl\n ? point.x >= X_ORIGIN\n ? xStart\n : xStart + barWidth\n : point.x >= X_ORIGIN\n ? xStart + barWidth\n : xStart;\n const isPositiveBar = point.x >= X_ORIGIN;\n const yPosition = yBarScale(point.y) + 0.5 * (yBarScale.bandwidth() - _barHeight);\n const showLabel = shouldShowLabel(isPositiveBar, currPositiveCounter, currNegativeCounter);\n\n return (\n <React.Fragment key={`${index}_${point.x}`}>\n <rect\n transform={`translate(0,${0.5 * (yBarScale.bandwidth() - _barHeight)})`}\n key={point.x}\n x={xStart}\n y={yBarScale(point.y)}\n rx={props.roundCorners ? 3 : 0}\n width={barWidth}\n height={_barHeight}\n aria-labelledby={`toolTip${_calloutId}`}\n aria-label={_getAriaLabel(point)}\n role=\"img\"\n ref={(e: SVGRectElement) => {\n _refCallback(e, point.legend!);\n }}\n onClick={point.onClick}\n onMouseOver={(event: React.MouseEvent<SVGElement, MouseEvent>) => _onBarHover(point, startColor, event)}\n onMouseLeave={_onBarLeave}\n onBlur={_onBarLeave}\n opacity={shouldHighlight ? 1 : 0.1}\n onFocus={event => _onBarFocus(event, point, index, startColor)}\n fill={startColor}\n tabIndex={shouldHighlight ? 0 : undefined}\n />\n {showLabel && _renderBarLabel(barEndX, yPosition, totalBarValue, isPositiveBar)}\n </React.Fragment>\n );\n });\n return bars;\n }\n\n function _onLegendHover(customMessage: string): void {\n if (!_isLegendSelected()) {\n setIsLegendHovered(true);\n setSelectedLegendTitle(customMessage);\n }\n }\n\n function _onLegendLeave(isLegendFocused?: boolean): void {\n if (!!isLegendFocused || !_isLegendSelected()) {\n setIsLegendHovered(false);\n setSelectedLegendTitle('');\n setIsLegendSelected(isLegendFocused ? false : _isLegendSelected());\n }\n }\n\n function _getLegendData(data: HorizontalBarChartWithAxisDataPoint[]): JSXElement {\n const { useSingleColor } = props;\n const actions: Legend[] = [];\n const mapLegendToColor: Record<string, string> = {};\n\n data.forEach((point: HorizontalBarChartWithAxisDataPoint, _index: number) => {\n // eslint-disable-next-line @typescript-eslint/no-shadow\n const color: string = useSingleColor ? (props.colors ? _createColors()(1) : getNextColor(1, 0)) : point.color!;\n\n mapLegendToColor[point.legend!] = color;\n });\n Object.entries(mapLegendToColor).forEach(([legendTitle, color]) => {\n // mapping data to the format Legends component needs\n const legend: Legend = {\n title: legendTitle,\n color,\n hoverAction: () => {\n _handleChartMouseLeave();\n _onLegendHover(legendTitle);\n },\n // eslint-disable-next-line @typescript-eslint/no-shadow\n onMouseOutAction: (isLegendSelected?: boolean) => {\n _onLegendLeave(isLegendSelected);\n },\n };\n actions.push(legend);\n });\n const legends = (\n <Legends\n legends={actions}\n enabledWrapLines={props.enabledLegendsWrapLines}\n overflowText={props.legendsOverflowText}\n {...props.legendProps}\n onChange={_onLegendSelectionChange}\n legendRef={_legendsRef}\n />\n );\n return legends;\n }\n\n function _isLegendSelected(): boolean {\n return isLegendSelected!;\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 _isLegendHighlighted(legend?: string) {\n return _getHighlightedLegend().includes(legend!);\n }\n\n function _getHighlightedLegend() {\n return selectedLegends.length > 0 ? selectedLegends : selectedLegendTitle ? [selectedLegendTitle] : [];\n }\n function _onLegendSelectionChange(\n // eslint-disable-next-line @typescript-eslint/no-shadow\n selectedLegends: string[],\n event: React.MouseEvent<HTMLButtonElement>,\n currentLegend?: Legend,\n ): void {\n if (props.legendProps?.canSelectMultipleLegends) {\n setSelectedLegends(selectedLegends);\n setSelectedLegendTitle(currentLegend?.title!);\n } else {\n setSelectedLegends(selectedLegends.slice(-1));\n setSelectedLegendTitle(currentLegend?.title!);\n }\n setIsLegendSelected(selectedLegends.length > 0);\n if (props.legendProps?.onChange) {\n props.legendProps.onChange(selectedLegends, event, currentLegend);\n }\n }\n\n function _getAxisData(yAxisData: IAxisData) {\n if (yAxisData && yAxisData.yAxisDomainValues.length) {\n // For HBCWA x and y Values are swapped\n const { yAxisDomainValues: domainValue } = yAxisData;\n _xMax = Math.max(domainValue[domainValue.length - 1], props.xMaxValue || 0);\n }\n }\n function _getAriaLabel(point: HorizontalBarChartWithAxisDataPoint): string {\n const xValue = point.xAxisCalloutData || point.x;\n const legend = point.legend;\n const yValue = point.yAxisCalloutData || point.y;\n return point.callOutAccessibilityData?.ariaLabel || `${yValue}. ` + (legend ? `${legend}, ` : '') + `${xValue}.`;\n }\n\n function _renderBarLabel(\n xPosition: number,\n yPosition: number,\n value: number,\n isPositiveBar: boolean,\n ): JSXElement | null {\n if (props.hideLabels || _barHeight < 16) {\n return null;\n }\n\n return (\n <text\n x={xPosition}\n y={yPosition + _barHeight / 2}\n textAnchor={_isRtl ? (isPositiveBar ? 'end' : 'start') : isPositiveBar ? 'start' : 'end'}\n transform={`translate(${isPositiveBar ? (_isRtl ? -4 : 4) : _isRtl ? 4 : -4})`}\n dominantBaseline=\"central\"\n className={styles.barLabel}\n aria-hidden={true}\n style={{ direction: 'ltr', unicodeBidi: 'isolate' }}\n >\n {formatScientificLimitWidth(value)}\n </text>\n );\n }\n\n function _getChartTitle(): string {\n const { chartTitle, data } = props;\n return (chartTitle ? `${chartTitle}. ` : '') + `Horizontal bar chart with ${data?.length || 0} bars. `;\n }\n\n function _getOrderedYAxisLabels() {\n const shouldOrderYAxisLabelsByCategoryOrder =\n _yAxisType === YAxisType.StringAxis && props.yAxisCategoryOrder !== 'default';\n if (!shouldOrderYAxisLabelsByCategoryOrder) {\n // Keep the original ordering logic as the default behavior to ensure backward compatibility\n const reversedBars = [..._points].reverse();\n return reversedBars.map((point: HorizontalBarChartWithAxisDataPoint) => point.y as string);\n }\n\n return sortAxisCategories(_mapCategoryToValues(), props.yAxisCategoryOrder);\n }\n\n function _mapCategoryToValues() {\n const categoryToValues: Record<string, number[]> = {};\n _points.forEach(point => {\n if (!categoryToValues[point.y]) {\n categoryToValues[point.y] = [];\n }\n categoryToValues[point.y].push(point.x);\n });\n return categoryToValues;\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 function _getDomainNRangeValues(\n points: HorizontalBarChartWithAxisDataPoint[],\n margins: Margins,\n width: number,\n chartType: ChartTypes,\n isRTL: boolean,\n xAxisType: XAxisTypes,\n barWidth: number,\n tickValues: Date[] | number[] | undefined,\n ) {\n let domainNRangeValue: IDomainNRange;\n if (xAxisType === XAxisTypes.NumericAxis) {\n domainNRangeValue = domainRangeOfNumericForHorizontalBarChartWithAxis(points, margins, width, isRTL, X_ORIGIN);\n } else {\n domainNRangeValue = { dStartValue: 0, dEndValue: 0, rStartValue: 0, rEndValue: 0 };\n }\n return domainNRangeValue;\n }\n\n if (!_isChartEmpty()) {\n _adjustProps();\n const calloutProps: ChartPopoverProps = {\n color,\n legend: selectedLegendTitle,\n XValue: xCalloutValue,\n YValue: yCalloutValue ? yCalloutValue : dataForHoverCard,\n ...props.calloutProps,\n ...getAccessibleDataObject(callOutAccessibilityData),\n customCallout: {\n customizedCallout: _getCustomizedCallout() !== null ? _getCustomizedCallout()! : undefined,\n customCalloutProps: props.calloutPropsPerDataPoint\n ? props.calloutPropsPerDataPoint(dataPointCalloutProps!)\n : undefined,\n },\n isCartesian: true,\n isPopoverOpen,\n clickPosition,\n };\n const tickParams = {\n tickValues: props.tickValues,\n tickFormat: props.tickFormat,\n };\n\n _yAxisLabels = _getOrderedYAxisLabels();\n _xMax = Math.max(d3Max(_points, (point: HorizontalBarChartWithAxisDataPoint) => point.x)!, props.xMaxValue || 0);\n const legendBars: JSXElement = _getLegendData(_points);\n return (\n <CartesianChart\n yAxisPadding={_yAxisPadding}\n {...props}\n chartTitle={_getChartTitle()}\n points={_points}\n chartType={ChartTypes.HorizontalBarChartWithAxis}\n xAxisType={_xAxisType}\n yAxisType={_yAxisType}\n getDomainNRangeValues={_getDomainNRangeValues}\n stringDatasetForYAxisDomain={_yAxisLabels}\n calloutProps={calloutProps}\n tickParams={tickParams}\n legendBars={legendBars}\n createYAxis={createYAxisForHorizontalBarChartWithAxis}\n createStringYAxis={createStringYAxisForHorizontalBarChartWithAxis}\n getMinMaxOfYAxis={findHBCWANumericMinMaxOfY}\n barwidth={_barHeight}\n getmargins={_getMargins}\n getYDomainMargins={_getDomainMarginsForHorizontalBarChart}\n getGraphData={_getGraphData}\n getAxisData={_getAxisData}\n onChartMouseLeave={_handleChartMouseLeave}\n componentRef={cartesianChartRef}\n /* eslint-disable react/jsx-no-bind */\n // eslint-disable-next-line @typescript-eslint/no-shadow\n children={(props: ChildProps) => {\n return (\n <>\n <g>{_bars}</g>\n </>\n );\n }}\n />\n );\n } else {\n return (\n <div id={_emptyChartId} role={'alert'} style={{ opacity: '0' }} aria-label={'Graph has no data to display'} />\n );\n }\n});\nHorizontalBarChartWithAxis.displayName = 'HorizontalBarChartWithAxis';\n"],"names":["React","max","d3Max","min","d3Min","scaleLinear","d3ScaleLinear","scaleBand","d3ScaleBand","Legends","useId","CartesianChart","useHorizontalBarChartWithAxisStyles","ChartPopover","ChartTypes","getAccessibleDataObject","YAxisType","XAxisTypes","getTypeOfAxis","getNextColor","findHBCWANumericMinMaxOfY","createYAxisForHorizontalBarChartWithAxis","domainRangeOfNumericForHorizontalBarChartWithAxis","createStringYAxisForHorizontalBarChartWithAxis","areArraysEqual","useRtl","DataVizPalette","getColorFromToken","computeLongestBars","groupChartDataByYValue","MIN_DOMAIN_MARGIN","sortAxisCategories","formatScientificLimitWidth","getClosestPairDiffAndRange","useImageExport","HorizontalBarChartWithAxis","forwardRef","props","yAxisCategoryOrder","forwardedRef","_refArray","_calloutId","_isRtl","_xAxisType","data","length","x","NumericAxis","_yAxisType","y","StringAxis","_emptyChartId","_points","_barHeight","_colors","_margins","_bars","_yAxisLabels","_xMax","_calloutAnchorPoint","_longestBarPositiveTotalValue","_longestBarNegativeTotalValue","_domainMargin","_yAxisPadding","yAxisPadding","cartesianChartRef","legendsRef","_legendsRef","componentRef","hideLegend","styles","X_ORIGIN","color","setColor","useState","dataForHoverCard","setDataForHoverCard","isLegendSelected","setIsLegendSelected","legendProps","selectedLegends","selectedLegend","undefined","isLegendHovered","setIsLegendHovered","selectedLegendTitle","setSelectedLegendTitle","xCalloutValue","setXCalloutValue","yCalloutValue","setYCalloutValue","setSelectedLegends","dataPointCalloutProps","setDataPointCalloutProps","callOutAccessibilityData","setCallOutAccessibilityData","isPopoverOpen","setPopoverOpen","clickPosition","setClickPosition","prevPropsRef","useRef","useEffect","current","prevProps","_adjustProps","barHeight","defaultPalette","color6","color1","color5","color7","colors","_getMargins","margins","_renderContentForOnlyBars","point","useSingleColor","selectedPointIndex","forEach","yDataPoint","index","_createColors","XValue","xAxisCalloutData","toString","legend","YValue","yAxisCalloutData","culture","_renderCallout","_getCustomizedCallout","onRenderCalloutPerDataPoint","_getGraphData","xScale","yScale","containerHeight","containerWidth","xElement","yElement","stackedChartData","longestBars","longestPositiveBar","longestNegativeBar","xBarScale","yBarScale","_getScales","xRange","range","allBars","map","singleBarData","_createNumericBars","_createStringBars","flat","increment","_p","color16","domainValues","i","push","colorScale","domain","_refCallback","element","legendTitle","refElement","_onBarHover","mouseEvent","persist","_isLegendHighlighted","_updatePosition","clientX","clientY","enableGradient","_onBarLeave","_handleChartMouseLeave","_onBarFocus","event","refArrayIndexNumber","cx","cy","targetRect","target","getBoundingClientRect","left","width","top","height","obj","isNumericScale","xMax","xMin","xDomain","Math","yMax","yMin","yDomainMax","yMaxValue","yMinProp","yMinValue","yDomainMin","nice","right","bottom","padding","_calculateBarTotals","totalPositiveValue","filter","reduce","sum","totalNegativeValue","totalBarValue","showLabelOnPositiveSide","totalPositiveBars","totalNegativeBars","shouldShowLabel","isPositiveBar","currPositiveCounter","currNegativeCounter","isLastPositiveBar","isLastNegativeBar","sortedBars","sort","a","b","aValue","parseFloat","bValue","prevWidthPositive","prevWidthNegative","prevPoint","bars","shouldHighlight","barStartX","Fragment","key","startColor","prevBarWidth","abs","currentWidth","gapWidthLTR","gapWidthRTL","xStart","barWidth","barEndX","showLabel","rect","ref","e","rx","roundCorners","onClick","onMouseOver","aria-label","_getAriaLabel","role","aria-labelledby","onMouseLeave","onFocus","onBlur","fill","opacity","tabIndex","_renderBarLabel","_getUniqueYValues","mapY","uniqueY","Object","values","_calculateAppropriateBarHeight","totalWidth","innerPadding","result","closestPairDiff","floor","_getDomainMarginsForHorizontalBarChart","barGapRate","numBars","totalHeight","reqHeight","yPosition","bandwidth","transform","_onLegendHover","customMessage","_isLegendSelected","_onLegendLeave","isLegendFocused","_getLegendData","actions","mapLegendToColor","_index","entries","title","hoverAction","onMouseOutAction","legends","enabledWrapLines","enabledLegendsWrapLines","overflowText","legendsOverflowText","onChange","_onLegendSelectionChange","legendRef","_getHighlightedLegend","includes","currentLegend","canSelectMultipleLegends","slice","_getAxisData","yAxisData","yAxisDomainValues","domainValue","xMaxValue","xValue","yValue","ariaLabel","xPosition","value","hideLabels","text","textAnchor","dominantBaseline","className","barLabel","aria-hidden","style","direction","unicodeBidi","_getChartTitle","chartTitle","_getOrderedYAxisLabels","shouldOrderYAxisLabelsByCategoryOrder","reversedBars","reverse","_mapCategoryToValues","categoryToValues","_isChartEmpty","newX","newY","threshold","distance","sqrt","pow","_getDomainNRangeValues","points","chartType","isRTL","xAxisType","tickValues","domainNRangeValue","dStartValue","dEndValue","rStartValue","rEndValue","calloutProps","customCallout","customizedCallout","customCalloutProps","calloutPropsPerDataPoint","isCartesian","tickParams","tickFormat","legendBars","yAxisType","getDomainNRangeValues","stringDatasetForYAxisDomain","createYAxis","createStringYAxis","getMinMaxOfYAxis","barwidth","getmargins","getYDomainMargins","getGraphData","getAxisData","onChartMouseLeave","children","g","div","id","displayName"],"mappings":"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"}
1
+ {"version":3,"sources":["../src/components/HorizontalBarChartWithAxis/HorizontalBarChartWithAxis.tsx"],"sourcesContent":["'use client';\n\nimport * as React from 'react';\nimport { max as d3Max, min as d3Min } from 'd3-array';\nimport type { ScaleLinear as D3ScaleLinear } from 'd3-scale';\nimport { scaleLinear as d3ScaleLinear, scaleBand as d3ScaleBand } from 'd3-scale';\nimport type { Legend } from '../../components/Legends/Legends.types';\nimport { Legends } from '../../components/Legends/Legends';\nimport { useId } from '@fluentui/react-utilities';\nimport type { JSXElement } from '@fluentui/react-utilities';\nimport type {\n AccessibilityProps,\n HorizontalBarChartWithAxisDataPoint,\n RefArrayData,\n Margins,\n ChartPopoverProps,\n} from '../../index';\nimport type { ChildProps } from '../CommonComponents/CartesianChart.types';\nimport { CartesianChart } from '../CommonComponents/CartesianChart';\nimport type { HorizontalBarChartWithAxisProps } from './HorizontalBarChartWithAxis.types';\nimport { useHorizontalBarChartWithAxisStyles } from './useHorizontalBarChartWithAxisStyles.styles';\nimport { ChartPopover } from '../CommonComponents/ChartPopover';\nimport type { IAxisData, NumericAxis, StringAxis, IDomainNRange } from '../../utilities/index';\nimport {\n ChartTypes,\n getAccessibleDataObject,\n YAxisType,\n XAxisTypes,\n getTypeOfAxis,\n getNextColor,\n findHBCWANumericMinMaxOfY,\n createYAxisForHorizontalBarChartWithAxis,\n domainRangeOfNumericForHorizontalBarChartWithAxis,\n createStringYAxisForHorizontalBarChartWithAxis,\n areArraysEqual,\n useRtl,\n DataVizPalette,\n getColorFromToken,\n computeLongestBars,\n groupChartDataByYValue,\n MIN_DOMAIN_MARGIN,\n sortAxisCategories,\n formatScientificLimitWidth,\n} from '../../utilities/index';\nimport { getClosestPairDiffAndRange } from '../../utilities/vbc-utils';\nimport { useImageExport } from '../../utilities/hooks';\ntype ColorScale = (_p?: number) => string;\n\nexport const HorizontalBarChartWithAxis: React.FunctionComponent<HorizontalBarChartWithAxisProps> = React.forwardRef<\n HTMLDivElement,\n HorizontalBarChartWithAxisProps\n>((props = { yAxisCategoryOrder: 'default' }, forwardedRef) => {\n const _refArray: RefArrayData[] = [];\n const _calloutId: string = useId('callout');\n const _isRtl: boolean = useRtl();\n const _xAxisType: XAxisTypes =\n props.data! && props.data!.length > 0\n ? (getTypeOfAxis(props.data![0].x, true) as XAxisTypes)\n : XAxisTypes.NumericAxis;\n const _yAxisType: YAxisType =\n props.data! && props.data!.length > 0\n ? (getTypeOfAxis(props.data![0].y, false) as YAxisType)\n : YAxisType.StringAxis;\n const _emptyChartId: string = useId('_HBCWithAxis_empty');\n let _points: HorizontalBarChartWithAxisDataPoint[] = [];\n let _barHeight: number = 0;\n let _colors: string[] = [];\n let _margins: Margins;\n let _bars: JSXElement[];\n let _yAxisLabels: string[];\n let _xMax: number;\n let _calloutAnchorPoint: HorizontalBarChartWithAxisDataPoint | null;\n\n let _longestBarPositiveTotalValue: number;\n let _longestBarNegativeTotalValue: number;\n let _domainMargin: number = MIN_DOMAIN_MARGIN;\n let _yAxisPadding: number = props.yAxisPadding ?? 0.5;\n const { cartesianChartRef, legendsRef: _legendsRef } = useImageExport(props.componentRef, props.hideLegend);\n const styles = useHorizontalBarChartWithAxisStyles(props);\n const X_ORIGIN: number = 0;\n\n const [color, setColor] = React.useState<string>('');\n const [dataForHoverCard, setDataForHoverCard] = React.useState<number>(0);\n const [isLegendSelected, setIsLegendSelected] = React.useState<boolean>(\n (props.legendProps?.selectedLegends && props.legendProps.selectedLegends.length > 0) ||\n props.legendProps?.selectedLegend !== undefined,\n );\n const [isLegendHovered, setIsLegendHovered] = React.useState<boolean>(false);\n const [selectedLegendTitle, setSelectedLegendTitle] = React.useState<string>(props.legendProps?.selectedLegend ?? '');\n const [xCalloutValue, setXCalloutValue] = React.useState<string>('');\n const [yCalloutValue, setYCalloutValue] = React.useState<string>('');\n const [selectedLegends, setSelectedLegends] = React.useState<string[]>(props.legendProps?.selectedLegends || []);\n const [dataPointCalloutProps, setDataPointCalloutProps] = React.useState<HorizontalBarChartWithAxisDataPoint>();\n const [callOutAccessibilityData, setCallOutAccessibilityData] = React.useState<AccessibilityProps>();\n const [isPopoverOpen, setPopoverOpen] = React.useState<boolean>(false);\n const [clickPosition, setClickPosition] = React.useState({ x: 0, y: 0 });\n const prevPropsRef = React.useRef<HorizontalBarChartWithAxisProps | null>(null);\n\n React.useEffect(() => {\n if (prevPropsRef.current) {\n const prevProps = prevPropsRef.current;\n if (!areArraysEqual(prevProps.legendProps?.selectedLegends, props.legendProps?.selectedLegends)) {\n setSelectedLegends(props.legendProps?.selectedLegends || []);\n }\n }\n prevPropsRef.current = props;\n }, [props]);\n\n function _adjustProps(): void {\n _points = props.data || [];\n _barHeight = props.barHeight || 32;\n const defaultPalette: string[] = [\n getColorFromToken(DataVizPalette.color6),\n getColorFromToken(DataVizPalette.color1),\n getColorFromToken(DataVizPalette.color5),\n getColorFromToken(DataVizPalette.color7),\n ];\n _colors = props.colors! || defaultPalette;\n }\n\n function _getMargins(margins: Margins) {\n _margins = margins;\n }\n\n function _renderContentForOnlyBars(point: HorizontalBarChartWithAxisDataPoint): JSXElement {\n const { useSingleColor = false } = props;\n let selectedPointIndex = 0;\n props.data!.forEach((yDataPoint: HorizontalBarChartWithAxisDataPoint, index: number) => {\n if (yDataPoint.y === point.y) {\n selectedPointIndex = index;\n }\n });\n let color: string;\n if (useSingleColor) {\n //if useSingle color , then check if user has given a palette or not\n // and pick the first color from that or else from our paltette.\n color = props.colors ? _createColors()(1) : getNextColor(1, 0);\n } else {\n color = point.color ? point.color : props.colors ? _createColors()(point.x) : getNextColor(selectedPointIndex, 0);\n }\n return (\n <>\n <ChartPopover\n XValue={point.xAxisCalloutData || point.x.toString()}\n legend={point.legend}\n YValue={point.yAxisCalloutData || point.y}\n color={color}\n culture={props.culture}\n clickPosition={clickPosition}\n isPopoverOpen={isPopoverOpen}\n />\n </>\n );\n }\n\n function _renderCallout(props?: HorizontalBarChartWithAxisDataPoint): JSXElement | null {\n return props ? _renderContentForOnlyBars(props) : null;\n }\n\n function _getCustomizedCallout() {\n return props.onRenderCalloutPerDataPoint\n ? props.onRenderCalloutPerDataPoint(dataPointCalloutProps, _renderCallout)\n : null;\n }\n\n function _getGraphData(\n xScale: NumericAxis,\n yScale: NumericAxis | StringAxis,\n containerHeight: number,\n containerWidth: number,\n xElement?: SVGElement | null,\n yElement?: SVGElement | null,\n ) {\n const stackedChartData = groupChartDataByYValue(_points);\n const longestBars = computeLongestBars(stackedChartData, X_ORIGIN);\n _longestBarPositiveTotalValue = longestBars.longestPositiveBar;\n _longestBarNegativeTotalValue = longestBars.longestNegativeBar;\n\n const { xBarScale, yBarScale } =\n _yAxisType === YAxisType.NumericAxis\n ? _getScales(containerHeight, containerWidth, true)\n : _getScales(containerHeight, containerWidth, false);\n const xRange = xBarScale.range();\n let allBars: JSXElement[] = [];\n // when the chart mounts, the xRange[1] is sometimes seen to be < 0 (like -40) while xRange[0] > 0.\n if (xRange[0] < xRange[1]) {\n allBars = stackedChartData.map((singleBarData, groupIndex) => {\n const groupBars =\n _yAxisType === YAxisType.NumericAxis\n ? _createNumericBars(\n containerHeight,\n containerWidth,\n xElement!,\n yElement!,\n singleBarData,\n xBarScale,\n yBarScale,\n )\n : _createStringBars(\n containerHeight,\n containerWidth,\n xElement!,\n yElement!,\n singleBarData,\n xBarScale,\n yBarScale,\n );\n\n return (\n <g\n key={`bar-group-${groupIndex}`}\n role=\"listbox\"\n aria-label={_getBarGroupAriaLabel(singleBarData, groupIndex)}\n >\n {groupBars}\n </g>\n );\n });\n }\n\n return (_bars = allBars);\n }\n\n function _createColors(): D3ScaleLinear<string, string> | ColorScale {\n const increment = _colors.length <= 1 ? 1 : 1 / (_colors.length - 1);\n const { useSingleColor = false } = props;\n if (useSingleColor) {\n return (_p?: number) => {\n const { colors } = props;\n return colors && colors.length > 0 ? colors[0] : getColorFromToken(DataVizPalette.color16);\n };\n }\n const domainValues = [];\n for (let i = 0; i < _colors.length; i++) {\n domainValues.push(increment * i * _xMax);\n }\n const colorScale = d3ScaleLinear<string>().domain(domainValues).range(_colors);\n return colorScale;\n }\n\n function _refCallback(element: SVGRectElement, legendTitle: string): void {\n _refArray.push({ index: legendTitle, refElement: element });\n }\n\n function _onBarHover(\n point: HorizontalBarChartWithAxisDataPoint,\n color: string,\n mouseEvent: React.MouseEvent<SVGElement, MouseEvent>,\n ): void {\n mouseEvent.persist();\n if ((isLegendSelected === false || _isLegendHighlighted(point.legend)) && _calloutAnchorPoint !== point) {\n _calloutAnchorPoint = point;\n setPopoverOpen(true);\n _updatePosition(mouseEvent.clientX, mouseEvent.clientY);\n setDataForHoverCard(point.x);\n setSelectedLegendTitle(point.legend!);\n setColor(props.useSingleColor || props.enableGradient ? color : point.color!);\n // To display callout value, if no callout value given, taking given point.x value as a string.\n setXCalloutValue(point.yAxisCalloutData! || point.y.toString());\n setYCalloutValue(point.xAxisCalloutData || point.x.toString());\n setDataPointCalloutProps(point);\n setCallOutAccessibilityData(point.callOutAccessibilityData);\n }\n }\n\n function _onBarLeave(): void {\n setPopoverOpen(false);\n }\n\n function _handleChartMouseLeave(): void {\n _calloutAnchorPoint = null;\n setPopoverOpen(false);\n }\n\n function _onBarFocus(\n event: React.FocusEvent<SVGRectElement, Element>,\n point: HorizontalBarChartWithAxisDataPoint,\n refArrayIndexNumber: number,\n color: string,\n ): void {\n let cx = 0;\n let cy = 0;\n\n const targetRect = (event.target as SVGRectElement).getBoundingClientRect();\n cx = targetRect.left + targetRect.width / 2;\n cy = targetRect.top + targetRect.height / 2;\n _updatePosition(cx, cy);\n if ((isLegendSelected === false || _isLegendHighlighted(point.legend)) && _calloutAnchorPoint !== point) {\n _refArray.forEach((obj: RefArrayData, index: number) => {\n if (refArrayIndexNumber === index) {\n setPopoverOpen(true);\n setSelectedLegendTitle(point.legend!);\n setDataForHoverCard(point.x);\n setColor(props.useSingleColor ? color : point.color!);\n setXCalloutValue(point.yAxisCalloutData || point.y.toString());\n setYCalloutValue(point.xAxisCalloutData! || point.x.toString());\n setDataPointCalloutProps(point);\n setCallOutAccessibilityData(point.callOutAccessibilityData);\n }\n });\n }\n }\n\n function _getScales(\n containerHeight: number,\n containerWidth: number,\n isNumericScale: boolean,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n ): { xBarScale: any; yBarScale: any } {\n const xMax = _longestBarPositiveTotalValue;\n const xMin = _longestBarNegativeTotalValue;\n const xDomain = [Math.min(X_ORIGIN, xMin), Math.max(X_ORIGIN, xMax)];\n if (isNumericScale) {\n const yMax = d3Max(_points, (point: HorizontalBarChartWithAxisDataPoint) => point.y as number)!;\n const yMin = d3Min(_points, (point: HorizontalBarChartWithAxisDataPoint) => point.y as number)!;\n const yDomainMax = Math.max(yMax, props.yMaxValue || 0);\n // Default to 0 if yMinValue is not provided.\n const yMinProp = props.yMinValue || 0;\n const yDomainMin = Math.min(yMin, yMinProp);\n const xBarScale = d3ScaleLinear()\n .domain(xDomain)\n .nice()\n .range([_margins.left!, containerWidth - _margins.right!]);\n const yBarScale = d3ScaleLinear()\n .domain([yDomainMin, yDomainMax])\n .range([containerHeight - (_margins.bottom! + _domainMargin), _margins.top! + _domainMargin]);\n return { xBarScale, yBarScale };\n } else {\n // please note these padding default values must be consistent in here\n // and CatrtesianChartBase w for more details refer example\n // http://using-d3js.com/04_07_ordinal_scales.html\n const yBarScale = d3ScaleBand()\n .domain(_yAxisLabels)\n .range([containerHeight - (_margins.bottom! + _domainMargin), _margins.top! + _domainMargin])\n .padding(_yAxisPadding);\n\n const xBarScale = d3ScaleLinear()\n .domain(xDomain)\n .nice()\n .range([_margins.left!, containerWidth - _margins.right!]);\n return { xBarScale, yBarScale };\n }\n }\n\n function _calculateBarTotals(singleBarData: HorizontalBarChartWithAxisDataPoint[]) {\n const totalPositiveValue = singleBarData\n .filter(point => point.x >= X_ORIGIN)\n .reduce((sum, point) => sum + point.x, 0);\n const totalNegativeValue = singleBarData\n .filter(point => point.x < X_ORIGIN)\n .reduce((sum, point) => sum + point.x, 0);\n const totalBarValue = totalPositiveValue + totalNegativeValue;\n const showLabelOnPositiveSide = totalBarValue >= 0;\n\n const totalPositiveBars = singleBarData.filter(point => point.x >= X_ORIGIN).length;\n const totalNegativeBars = singleBarData.length - totalPositiveBars;\n\n const shouldShowLabel = (\n isPositiveBar: boolean,\n currPositiveCounter: number,\n currNegativeCounter: number,\n ): boolean => {\n const isLastPositiveBar = isPositiveBar && currPositiveCounter === totalPositiveBars;\n const isLastNegativeBar = !isPositiveBar && currNegativeCounter === totalNegativeBars;\n return showLabelOnPositiveSide ? isLastPositiveBar : isLastNegativeBar;\n };\n\n return { totalPositiveValue, totalNegativeValue, totalBarValue, showLabelOnPositiveSide, shouldShowLabel };\n }\n\n function _createNumericBars(\n containerHeight: number,\n containerWidth: number,\n xElement: SVGElement,\n yElement: SVGElement,\n singleBarData: HorizontalBarChartWithAxisDataPoint[],\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n xBarScale: any,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n yBarScale: any,\n ): JSXElement[] {\n const { useSingleColor = false } = props;\n const sortedBars: HorizontalBarChartWithAxisDataPoint[] = [...singleBarData];\n sortedBars.sort((a, b) => {\n const aValue = typeof a.y === 'number' ? a.y : parseFloat(a.y);\n const bValue = typeof b.y === 'number' ? b.y : parseFloat(b.y);\n return bValue - aValue;\n });\n\n let prevWidthPositive = 0;\n let prevWidthNegative = 0;\n let prevPoint = 0;\n\n const totalPositiveBars = singleBarData.filter(\n (point: HorizontalBarChartWithAxisDataPoint) => point.x >= X_ORIGIN,\n ).length;\n const totalNegativeBars = singleBarData.length - totalPositiveBars;\n\n const { totalBarValue, shouldShowLabel } = _calculateBarTotals(singleBarData);\n\n let currPositiveCounter = 0;\n let currNegativeCounter = 0;\n\n const bars = sortedBars.map((point: HorizontalBarChartWithAxisDataPoint, index: number) => {\n let shouldHighlight = true;\n if (isLegendHovered || isLegendSelected) {\n shouldHighlight = _isLegendHighlighted(point.legend);\n }\n if (point.x >= X_ORIGIN) {\n ++currPositiveCounter;\n }\n if (point.x < X_ORIGIN) {\n ++currNegativeCounter;\n }\n const barStartX = _isRtl\n ? containerWidth -\n (_margins.right! + Math.max(xBarScale(point.x + X_ORIGIN), xBarScale(X_ORIGIN)) - _margins.left!)\n : Math.min(xBarScale(point.x + X_ORIGIN), xBarScale(X_ORIGIN));\n const barHeight: number = Math.max(yBarScale(point.y), 0);\n if (barHeight < 1) {\n return <React.Fragment key={point.x}> </React.Fragment>;\n }\n let startColor: string;\n if (useSingleColor) {\n //if useSingle color , then check if user has given a palette or not\n // and pick the first color from that or else from our paltette.\n startColor = props.colors ? _createColors()(1) : getNextColor(1, 0);\n } else {\n startColor = props.colors ? _createColors()(point.x) : getNextColor(index, 0);\n }\n\n startColor = point.color && !useSingleColor ? point.color : startColor;\n\n const prevBarWidth = Math.abs(xBarScale(prevPoint + X_ORIGIN) - xBarScale(X_ORIGIN));\n prevPoint > X_ORIGIN ? (prevWidthPositive += prevBarWidth) : (prevWidthNegative += prevBarWidth);\n const currentWidth = Math.abs(xBarScale(point.x + X_ORIGIN) - xBarScale(X_ORIGIN));\n const gapWidthLTR =\n currentWidth > 2 &&\n ((point.x > X_ORIGIN && currPositiveCounter !== totalPositiveBars) ||\n (point.x < X_ORIGIN && (totalPositiveBars !== 0 || currNegativeCounter > 1)))\n ? 2\n : 0;\n const gapWidthRTL =\n currentWidth > 2 &&\n ((point.x > X_ORIGIN && (totalNegativeBars !== 0 || currPositiveCounter > 1)) ||\n (point.x < X_ORIGIN && currNegativeCounter !== totalNegativeBars))\n ? 2\n : 0;\n let xStart = X_ORIGIN;\n if (_isRtl) {\n xStart = point.x > X_ORIGIN ? barStartX - prevWidthPositive : barStartX + prevWidthNegative;\n } else {\n xStart = point.x > X_ORIGIN ? barStartX + prevWidthPositive : barStartX - prevWidthNegative;\n }\n prevPoint = point.x;\n\n const barWidth = currentWidth - (_isRtl ? gapWidthRTL : gapWidthLTR);\n const barEndX = _isRtl\n ? point.x >= X_ORIGIN\n ? xStart\n : xStart + barWidth\n : point.x >= X_ORIGIN\n ? xStart + barWidth\n : xStart;\n const isPositiveBar = point.x >= X_ORIGIN;\n const showLabel = shouldShowLabel(isPositiveBar, currPositiveCounter, currNegativeCounter);\n\n return (\n <React.Fragment key={`${index}_${point.x}`}>\n <rect\n key={point.y}\n x={xStart}\n y={yBarScale(point.y) - _barHeight / 2}\n width={barWidth}\n height={_barHeight}\n ref={(e: SVGRectElement) => {\n _refCallback(e, point.legend!);\n }}\n rx={props.roundCorners ? 3 : 0}\n onClick={point.onClick}\n onMouseOver={(event: React.MouseEvent<SVGElement, MouseEvent>) => _onBarHover(point, startColor, event)}\n aria-label={_getAriaLabel(point)}\n role=\"option\"\n aria-labelledby={`toolTip${_calloutId}`}\n onMouseLeave={_onBarLeave}\n onFocus={event => _onBarFocus(event, point, index, startColor)}\n onBlur={_onBarLeave}\n fill={startColor}\n opacity={shouldHighlight ? 1 : 0.1}\n tabIndex={shouldHighlight ? 0 : undefined}\n />\n {showLabel && _renderBarLabel(barEndX, yBarScale(point.y) - _barHeight / 2, totalBarValue, isPositiveBar)}\n </React.Fragment>\n );\n });\n return bars;\n }\n\n function _getUniqueYValues() {\n const mapY: Record<string, number | string> = {};\n props.data?.forEach((point: HorizontalBarChartWithAxisDataPoint) => {\n mapY[point.y] = point.y;\n });\n const uniqueY = Object.values(mapY);\n return uniqueY;\n }\n\n function _calculateAppropriateBarHeight(data: number[] | Date[], totalWidth: number, innerPadding: number) {\n const result = getClosestPairDiffAndRange(data);\n if (!result || result[1] === 0) {\n return 16;\n }\n const closestPairDiff = result[0];\n let range = result[1];\n const yMax = d3Max(_points, (point: HorizontalBarChartWithAxisDataPoint) => point.y as number)!;\n // Since we are always rendering from 0 to yMax, we need to ensure that the range is at least yMax\n // to calculate the bar height correctly.\n range = Math.max(range, yMax);\n // Refer to https://microsoft.github.io/fluentui-charting-contrib/docs/rfcs/fix-overlapping-bars-on-continuous-axes\n // for the derivation of the following formula.\n const barWidth = Math.floor(\n (totalWidth * closestPairDiff * (1 - innerPadding)) / (range + closestPairDiff * (1 - innerPadding)),\n );\n return barWidth;\n }\n\n function _getDomainMarginsForHorizontalBarChart(containerHeight: number): Margins {\n _domainMargin = MIN_DOMAIN_MARGIN;\n const uniqueY = _getUniqueYValues();\n /** Rate at which the space between the bars changes wrt the bar height */\n _yAxisPadding = _yAxisPadding === 1 ? 0.99 : _yAxisPadding;\n const barGapRate = _yAxisPadding / (1 - _yAxisPadding);\n const numBars = uniqueY.length + (uniqueY.length - 1) * barGapRate;\n // Total height available to render the bars\n const totalHeight = containerHeight - (_margins.top! + MIN_DOMAIN_MARGIN) - (_margins.bottom! + MIN_DOMAIN_MARGIN);\n if (_yAxisType !== YAxisType.StringAxis) {\n // Calculate bar height dynamically\n _barHeight =\n props.barHeight || _calculateAppropriateBarHeight(uniqueY as number[] | Date[], totalHeight, _yAxisPadding);\n _barHeight = Math.max(_barHeight, 1);\n _domainMargin += _barHeight / 2;\n } else {\n // Calculate the appropriate bar height\n _barHeight = props.barHeight || totalHeight / numBars;\n /** Total height required to render the bars. Directly proportional to bar height */\n const reqHeight = numBars * _barHeight;\n if (totalHeight >= reqHeight) {\n // Center align the chart by setting equal left and right margins for domain\n _domainMargin = MIN_DOMAIN_MARGIN + (totalHeight - reqHeight) / 2;\n }\n }\n\n return {\n ..._margins,\n top: _margins.top! + _domainMargin,\n bottom: _margins.bottom! + _domainMargin,\n };\n }\n\n function _createStringBars(\n containerHeight: number,\n containerWidth: number,\n xElement: SVGElement,\n yElement: SVGElement,\n singleBarData: HorizontalBarChartWithAxisDataPoint[],\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n xBarScale: any,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n yBarScale: any,\n ): JSXElement[] {\n const { useSingleColor = false } = props;\n let prevWidthPositive = 0;\n let prevWidthNegative = 0;\n let prevPoint = 0;\n const totalPositiveBars = singleBarData.filter(\n (point: HorizontalBarChartWithAxisDataPoint) => point.x >= X_ORIGIN,\n ).length;\n const totalNegativeBars = singleBarData.length - totalPositiveBars;\n const { totalBarValue, shouldShowLabel } = _calculateBarTotals(singleBarData);\n let currPositiveCounter = 0;\n let currNegativeCounter = 0;\n const bars = singleBarData.map((point: HorizontalBarChartWithAxisDataPoint, index: number) => {\n let shouldHighlight = true;\n if (isLegendHovered || isLegendSelected) {\n shouldHighlight = _isLegendHighlighted(point.legend);\n }\n if (point.x >= X_ORIGIN) {\n ++currPositiveCounter;\n }\n if (point.x < X_ORIGIN) {\n ++currNegativeCounter;\n }\n const barStartX = _isRtl\n ? containerWidth -\n (_margins.right! + Math.max(xBarScale(point.x + X_ORIGIN), xBarScale(X_ORIGIN)) - _margins.left!)\n : Math.min(xBarScale(point.x + X_ORIGIN), xBarScale(X_ORIGIN));\n const barHeight: number = Math.max(yBarScale(point.y), 0);\n if (barHeight < 1) {\n return <React.Fragment key={point.x}> </React.Fragment>;\n }\n let startColor: string;\n if (useSingleColor) {\n //if useSingle color , then check if user has given a palette or not\n // and pick the first color from that or else from our paltette.\n startColor = props.colors ? _createColors()(1) : getNextColor(1, 0);\n } else {\n startColor = props.colors ? _createColors()(point.x) : getNextColor(index, 0);\n }\n\n startColor = point.color && !useSingleColor ? point.color : startColor;\n const prevBarWidth = Math.abs(xBarScale(prevPoint + X_ORIGIN) - xBarScale(X_ORIGIN));\n prevPoint > 0 ? (prevWidthPositive += prevBarWidth) : (prevWidthNegative += prevBarWidth);\n const currentWidth = Math.abs(xBarScale(point.x + X_ORIGIN) - xBarScale(X_ORIGIN));\n const gapWidthLTR =\n currentWidth > 2 &&\n ((point.x > X_ORIGIN && currPositiveCounter !== totalPositiveBars) ||\n (point.x < X_ORIGIN && (totalPositiveBars !== 0 || currNegativeCounter > 1)))\n ? 2\n : 0;\n const gapWidthRTL =\n currentWidth > 2 &&\n ((point.x > X_ORIGIN && (totalNegativeBars !== 0 || currPositiveCounter > 1)) ||\n (point.x < X_ORIGIN && currNegativeCounter !== totalNegativeBars))\n ? 2\n : 0;\n prevPoint = point.x;\n let xStart = X_ORIGIN;\n if (_isRtl) {\n xStart = point.x > X_ORIGIN ? barStartX - prevWidthPositive : barStartX + prevWidthNegative;\n } else {\n xStart = point.x > X_ORIGIN ? barStartX + prevWidthPositive : barStartX - prevWidthNegative;\n }\n\n const barWidth = currentWidth - (_isRtl ? gapWidthRTL : gapWidthLTR);\n const barEndX = _isRtl\n ? point.x >= X_ORIGIN\n ? xStart\n : xStart + barWidth\n : point.x >= X_ORIGIN\n ? xStart + barWidth\n : xStart;\n const isPositiveBar = point.x >= X_ORIGIN;\n const yPosition = yBarScale(point.y) + 0.5 * (yBarScale.bandwidth() - _barHeight);\n const showLabel = shouldShowLabel(isPositiveBar, currPositiveCounter, currNegativeCounter);\n\n return (\n <React.Fragment key={`${index}_${point.x}`}>\n <rect\n transform={`translate(0,${0.5 * (yBarScale.bandwidth() - _barHeight)})`}\n key={point.x}\n x={xStart}\n y={yBarScale(point.y)}\n rx={props.roundCorners ? 3 : 0}\n width={barWidth}\n height={_barHeight}\n aria-labelledby={`toolTip${_calloutId}`}\n aria-label={_getAriaLabel(point)}\n role=\"option\"\n ref={(e: SVGRectElement) => {\n _refCallback(e, point.legend!);\n }}\n onClick={point.onClick}\n onMouseOver={(event: React.MouseEvent<SVGElement, MouseEvent>) => _onBarHover(point, startColor, event)}\n onMouseLeave={_onBarLeave}\n onBlur={_onBarLeave}\n opacity={shouldHighlight ? 1 : 0.1}\n onFocus={event => _onBarFocus(event, point, index, startColor)}\n fill={startColor}\n tabIndex={shouldHighlight ? 0 : undefined}\n />\n {showLabel && _renderBarLabel(barEndX, yPosition, totalBarValue, isPositiveBar)}\n </React.Fragment>\n );\n });\n return bars;\n }\n\n function _onLegendHover(customMessage: string): void {\n if (!_isLegendSelected()) {\n setIsLegendHovered(true);\n setSelectedLegendTitle(customMessage);\n }\n }\n\n function _onLegendLeave(isLegendFocused?: boolean): void {\n if (!!isLegendFocused || !_isLegendSelected()) {\n setIsLegendHovered(false);\n setSelectedLegendTitle('');\n setIsLegendSelected(isLegendFocused ? false : _isLegendSelected());\n }\n }\n\n function _getLegendData(data: HorizontalBarChartWithAxisDataPoint[]): JSXElement {\n const { useSingleColor } = props;\n const actions: Legend[] = [];\n const mapLegendToColor: Record<string, string> = {};\n\n data.forEach((point: HorizontalBarChartWithAxisDataPoint, _index: number) => {\n // eslint-disable-next-line @typescript-eslint/no-shadow\n const color: string = useSingleColor ? (props.colors ? _createColors()(1) : getNextColor(1, 0)) : point.color!;\n\n mapLegendToColor[point.legend!] = color;\n });\n Object.entries(mapLegendToColor).forEach(([legendTitle, color]) => {\n // mapping data to the format Legends component needs\n const legend: Legend = {\n title: legendTitle,\n color,\n hoverAction: () => {\n _handleChartMouseLeave();\n _onLegendHover(legendTitle);\n },\n // eslint-disable-next-line @typescript-eslint/no-shadow\n onMouseOutAction: (isLegendSelected?: boolean) => {\n _onLegendLeave(isLegendSelected);\n },\n };\n actions.push(legend);\n });\n const legends = (\n <Legends\n legends={actions}\n enabledWrapLines={props.enabledLegendsWrapLines}\n overflowText={props.legendsOverflowText}\n {...props.legendProps}\n onChange={_onLegendSelectionChange}\n legendRef={_legendsRef}\n />\n );\n return legends;\n }\n\n function _isLegendSelected(): boolean {\n return isLegendSelected!;\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 _isLegendHighlighted(legend?: string) {\n return _getHighlightedLegend().includes(legend!);\n }\n\n function _getHighlightedLegend() {\n return selectedLegends.length > 0 ? selectedLegends : selectedLegendTitle ? [selectedLegendTitle] : [];\n }\n function _onLegendSelectionChange(\n // eslint-disable-next-line @typescript-eslint/no-shadow\n selectedLegends: string[],\n event: React.MouseEvent<HTMLButtonElement>,\n currentLegend?: Legend,\n ): void {\n if (props.legendProps?.canSelectMultipleLegends) {\n setSelectedLegends(selectedLegends);\n setSelectedLegendTitle(currentLegend?.title!);\n } else {\n setSelectedLegends(selectedLegends.slice(-1));\n setSelectedLegendTitle(currentLegend?.title!);\n }\n setIsLegendSelected(selectedLegends.length > 0);\n if (props.legendProps?.onChange) {\n props.legendProps.onChange(selectedLegends, event, currentLegend);\n }\n }\n\n function _getAxisData(yAxisData: IAxisData) {\n if (yAxisData && yAxisData.yAxisDomainValues.length) {\n // For HBCWA x and y Values are swapped\n const { yAxisDomainValues: domainValue } = yAxisData;\n _xMax = Math.max(domainValue[domainValue.length - 1], props.xMaxValue || 0);\n }\n }\n function _getAriaLabel(point: HorizontalBarChartWithAxisDataPoint): string {\n const xValue = point.xAxisCalloutData || point.x;\n const legend = point.legend;\n const yValue = point.yAxisCalloutData || point.y;\n return point.callOutAccessibilityData?.ariaLabel || `${yValue}. ` + (legend ? `${legend}, ` : '') + `${xValue}.`;\n }\n\n function _getBarGroupAriaLabel(singleBarData: HorizontalBarChartWithAxisDataPoint[], groupIndex: number): string {\n const yGroupLabel = singleBarData[0]?.y?.toString() || `Group ${groupIndex + 1}`;\n return `${yGroupLabel}, bar group ${groupIndex + 1} of ${_yAxisLabels.length}, with ${singleBarData.length} bars.`;\n }\n\n function _renderBarLabel(\n xPosition: number,\n yPosition: number,\n value: number,\n isPositiveBar: boolean,\n ): JSXElement | null {\n if (props.hideLabels || _barHeight < 16) {\n return null;\n }\n\n return (\n <text\n x={xPosition}\n y={yPosition + _barHeight / 2}\n textAnchor={_isRtl ? (isPositiveBar ? 'end' : 'start') : isPositiveBar ? 'start' : 'end'}\n transform={`translate(${isPositiveBar ? (_isRtl ? -4 : 4) : _isRtl ? 4 : -4})`}\n dominantBaseline=\"central\"\n className={styles.barLabel}\n aria-hidden={true}\n style={{ direction: 'ltr', unicodeBidi: 'isolate' }}\n >\n {formatScientificLimitWidth(value)}\n </text>\n );\n }\n\n function _getChartTitle(): string {\n const { chartTitle, data } = props;\n return (chartTitle ? `${chartTitle}. ` : '') + `Horizontal bar chart with ${data?.length || 0} bars. `;\n }\n\n function _getOrderedYAxisLabels() {\n const shouldOrderYAxisLabelsByCategoryOrder =\n _yAxisType === YAxisType.StringAxis && props.yAxisCategoryOrder !== 'default';\n if (!shouldOrderYAxisLabelsByCategoryOrder) {\n // Keep the original ordering logic as the default behavior to ensure backward compatibility\n const reversedBars = [..._points].reverse();\n return reversedBars.map((point: HorizontalBarChartWithAxisDataPoint) => point.y as string);\n }\n\n return sortAxisCategories(_mapCategoryToValues(), props.yAxisCategoryOrder);\n }\n\n function _mapCategoryToValues() {\n const categoryToValues: Record<string, number[]> = {};\n _points.forEach(point => {\n if (!categoryToValues[point.y]) {\n categoryToValues[point.y] = [];\n }\n categoryToValues[point.y].push(point.x);\n });\n return categoryToValues;\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 function _getDomainNRangeValues(\n points: HorizontalBarChartWithAxisDataPoint[],\n margins: Margins,\n width: number,\n chartType: ChartTypes,\n isRTL: boolean,\n xAxisType: XAxisTypes,\n barWidth: number,\n tickValues: Date[] | number[] | undefined,\n ) {\n let domainNRangeValue: IDomainNRange;\n if (xAxisType === XAxisTypes.NumericAxis) {\n domainNRangeValue = domainRangeOfNumericForHorizontalBarChartWithAxis(points, margins, width, isRTL, X_ORIGIN);\n } else {\n domainNRangeValue = { dStartValue: 0, dEndValue: 0, rStartValue: 0, rEndValue: 0 };\n }\n return domainNRangeValue;\n }\n\n if (!_isChartEmpty()) {\n _adjustProps();\n const calloutProps: ChartPopoverProps = {\n color,\n legend: selectedLegendTitle,\n XValue: xCalloutValue,\n YValue: yCalloutValue ? yCalloutValue : dataForHoverCard,\n ...props.calloutProps,\n ...getAccessibleDataObject(callOutAccessibilityData),\n customCallout: {\n customizedCallout: _getCustomizedCallout() !== null ? _getCustomizedCallout()! : undefined,\n customCalloutProps: props.calloutPropsPerDataPoint\n ? props.calloutPropsPerDataPoint(dataPointCalloutProps!)\n : undefined,\n },\n isCartesian: true,\n isPopoverOpen,\n clickPosition,\n };\n const tickParams = {\n tickValues: props.tickValues,\n tickFormat: props.tickFormat,\n };\n\n _yAxisLabels = _getOrderedYAxisLabels();\n _xMax = Math.max(d3Max(_points, (point: HorizontalBarChartWithAxisDataPoint) => point.x)!, props.xMaxValue || 0);\n const legendBars: JSXElement = _getLegendData(_points);\n return (\n <CartesianChart\n yAxisPadding={_yAxisPadding}\n {...props}\n chartTitle={_getChartTitle()}\n points={_points}\n chartType={ChartTypes.HorizontalBarChartWithAxis}\n xAxisType={_xAxisType}\n yAxisType={_yAxisType}\n getDomainNRangeValues={_getDomainNRangeValues}\n stringDatasetForYAxisDomain={_yAxisLabels}\n calloutProps={calloutProps}\n tickParams={tickParams}\n legendBars={legendBars}\n createYAxis={createYAxisForHorizontalBarChartWithAxis}\n createStringYAxis={createStringYAxisForHorizontalBarChartWithAxis}\n getMinMaxOfYAxis={findHBCWANumericMinMaxOfY}\n barwidth={_barHeight}\n getmargins={_getMargins}\n getYDomainMargins={_getDomainMarginsForHorizontalBarChart}\n getGraphData={_getGraphData}\n getAxisData={_getAxisData}\n onChartMouseLeave={_handleChartMouseLeave}\n componentRef={cartesianChartRef}\n /* eslint-disable react/jsx-no-bind */\n // eslint-disable-next-line @typescript-eslint/no-shadow\n children={(props: ChildProps) => {\n return (\n <>\n <g>{_bars}</g>\n </>\n );\n }}\n />\n );\n } else {\n return (\n <div id={_emptyChartId} role={'alert'} style={{ opacity: '0' }} aria-label={'Graph has no data to display'} />\n );\n }\n});\nHorizontalBarChartWithAxis.displayName = 'HorizontalBarChartWithAxis';\n"],"names":["React","max","d3Max","min","d3Min","scaleLinear","d3ScaleLinear","scaleBand","d3ScaleBand","Legends","useId","CartesianChart","useHorizontalBarChartWithAxisStyles","ChartPopover","ChartTypes","getAccessibleDataObject","YAxisType","XAxisTypes","getTypeOfAxis","getNextColor","findHBCWANumericMinMaxOfY","createYAxisForHorizontalBarChartWithAxis","domainRangeOfNumericForHorizontalBarChartWithAxis","createStringYAxisForHorizontalBarChartWithAxis","areArraysEqual","useRtl","DataVizPalette","getColorFromToken","computeLongestBars","groupChartDataByYValue","MIN_DOMAIN_MARGIN","sortAxisCategories","formatScientificLimitWidth","getClosestPairDiffAndRange","useImageExport","HorizontalBarChartWithAxis","forwardRef","props","yAxisCategoryOrder","forwardedRef","_refArray","_calloutId","_isRtl","_xAxisType","data","length","x","NumericAxis","_yAxisType","y","StringAxis","_emptyChartId","_points","_barHeight","_colors","_margins","_bars","_yAxisLabels","_xMax","_calloutAnchorPoint","_longestBarPositiveTotalValue","_longestBarNegativeTotalValue","_domainMargin","_yAxisPadding","yAxisPadding","cartesianChartRef","legendsRef","_legendsRef","componentRef","hideLegend","styles","X_ORIGIN","color","setColor","useState","dataForHoverCard","setDataForHoverCard","isLegendSelected","setIsLegendSelected","legendProps","selectedLegends","selectedLegend","undefined","isLegendHovered","setIsLegendHovered","selectedLegendTitle","setSelectedLegendTitle","xCalloutValue","setXCalloutValue","yCalloutValue","setYCalloutValue","setSelectedLegends","dataPointCalloutProps","setDataPointCalloutProps","callOutAccessibilityData","setCallOutAccessibilityData","isPopoverOpen","setPopoverOpen","clickPosition","setClickPosition","prevPropsRef","useRef","useEffect","current","prevProps","_adjustProps","barHeight","defaultPalette","color6","color1","color5","color7","colors","_getMargins","margins","_renderContentForOnlyBars","point","useSingleColor","selectedPointIndex","forEach","yDataPoint","index","_createColors","XValue","xAxisCalloutData","toString","legend","YValue","yAxisCalloutData","culture","_renderCallout","_getCustomizedCallout","onRenderCalloutPerDataPoint","_getGraphData","xScale","yScale","containerHeight","containerWidth","xElement","yElement","stackedChartData","longestBars","longestPositiveBar","longestNegativeBar","xBarScale","yBarScale","_getScales","xRange","range","allBars","map","singleBarData","groupIndex","groupBars","_createNumericBars","_createStringBars","g","key","role","aria-label","_getBarGroupAriaLabel","increment","_p","color16","domainValues","i","push","colorScale","domain","_refCallback","element","legendTitle","refElement","_onBarHover","mouseEvent","persist","_isLegendHighlighted","_updatePosition","clientX","clientY","enableGradient","_onBarLeave","_handleChartMouseLeave","_onBarFocus","event","refArrayIndexNumber","cx","cy","targetRect","target","getBoundingClientRect","left","width","top","height","obj","isNumericScale","xMax","xMin","xDomain","Math","yMax","yMin","yDomainMax","yMaxValue","yMinProp","yMinValue","yDomainMin","nice","right","bottom","padding","_calculateBarTotals","totalPositiveValue","filter","reduce","sum","totalNegativeValue","totalBarValue","showLabelOnPositiveSide","totalPositiveBars","totalNegativeBars","shouldShowLabel","isPositiveBar","currPositiveCounter","currNegativeCounter","isLastPositiveBar","isLastNegativeBar","sortedBars","sort","a","b","aValue","parseFloat","bValue","prevWidthPositive","prevWidthNegative","prevPoint","bars","shouldHighlight","barStartX","Fragment","startColor","prevBarWidth","abs","currentWidth","gapWidthLTR","gapWidthRTL","xStart","barWidth","barEndX","showLabel","rect","ref","e","rx","roundCorners","onClick","onMouseOver","_getAriaLabel","aria-labelledby","onMouseLeave","onFocus","onBlur","fill","opacity","tabIndex","_renderBarLabel","_getUniqueYValues","mapY","uniqueY","Object","values","_calculateAppropriateBarHeight","totalWidth","innerPadding","result","closestPairDiff","floor","_getDomainMarginsForHorizontalBarChart","barGapRate","numBars","totalHeight","reqHeight","yPosition","bandwidth","transform","_onLegendHover","customMessage","_isLegendSelected","_onLegendLeave","isLegendFocused","_getLegendData","actions","mapLegendToColor","_index","entries","title","hoverAction","onMouseOutAction","legends","enabledWrapLines","enabledLegendsWrapLines","overflowText","legendsOverflowText","onChange","_onLegendSelectionChange","legendRef","_getHighlightedLegend","includes","currentLegend","canSelectMultipleLegends","slice","_getAxisData","yAxisData","yAxisDomainValues","domainValue","xMaxValue","xValue","yValue","ariaLabel","yGroupLabel","xPosition","value","hideLabels","text","textAnchor","dominantBaseline","className","barLabel","aria-hidden","style","direction","unicodeBidi","_getChartTitle","chartTitle","_getOrderedYAxisLabels","shouldOrderYAxisLabelsByCategoryOrder","reversedBars","reverse","_mapCategoryToValues","categoryToValues","_isChartEmpty","newX","newY","threshold","distance","sqrt","pow","_getDomainNRangeValues","points","chartType","isRTL","xAxisType","tickValues","domainNRangeValue","dStartValue","dEndValue","rStartValue","rEndValue","calloutProps","customCallout","customizedCallout","customCalloutProps","calloutPropsPerDataPoint","isCartesian","tickParams","tickFormat","legendBars","yAxisType","getDomainNRangeValues","stringDatasetForYAxisDomain","createYAxis","createStringYAxis","getMinMaxOfYAxis","barwidth","getmargins","getYDomainMargins","getGraphData","getAxisData","onChartMouseLeave","children","div","id","displayName"],"mappings":"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"}
@@ -507,7 +507,7 @@ const MIN_DOMAIN_MARGIN = 8;
507
507
  onClick: point.onClick,
508
508
  onMouseOver: (event)=>_onBarHover(point, colorScale(point.y), event),
509
509
  "aria-label": _getAriaLabel(point),
510
- role: "img",
510
+ role: "option",
511
511
  onMouseLeave: _onBarLeave,
512
512
  onFocus: (event)=>_onBarFocus(event, point, index, colorScale(point.y)),
513
513
  onBlur: _onBarLeave,
@@ -554,7 +554,7 @@ const MIN_DOMAIN_MARGIN = 8;
554
554
  width: _barWidth,
555
555
  height: adjustedBarHeight,
556
556
  "aria-label": _getAriaLabel(point),
557
- role: "img",
557
+ role: "option",
558
558
  ref: (e)=>{
559
559
  _refCallback(e, point.legend);
560
560
  },
@@ -609,7 +609,7 @@ const MIN_DOMAIN_MARGIN = 8;
609
609
  onClick: point.onClick,
610
610
  onMouseOver: (event)=>_onBarHover(point, colorScale(point.y), event),
611
611
  "aria-label": _getAriaLabel(point),
612
- role: "img",
612
+ role: "option",
613
613
  onMouseLeave: _onBarLeave,
614
614
  onFocus: (event)=>_onBarFocus(event, point, index, colorScale(point.y)),
615
615
  onBlur: _onBarLeave,
@@ -842,6 +842,12 @@ const MIN_DOMAIN_MARGIN = 8;
842
842
  });
843
843
  return categoryToValues;
844
844
  }
845
+ function _getBarsGroupLabel() {
846
+ // Calculate number of unique series and total data points for accessibility label
847
+ const uniqueSeries = new Set(_points.map((point)=>point.legend)).size;
848
+ const totalDataPoints = _points.length;
849
+ return `${uniqueSeries} series and ${totalDataPoints} bars`;
850
+ }
845
851
  function updatePosition(newX, newY) {
846
852
  const threshold = 1; // Set a threshold for movement
847
853
  const { x, y } = clickPosition;
@@ -916,7 +922,10 @@ const MIN_DOMAIN_MARGIN = 8;
916
922
  componentRef: cartesianChartRef,
917
923
  showRoundOffXTickValues: !isScalePaddingDefined(props.xAxisInnerPadding, props.xAxisPadding) && props.mode !== 'histogram',
918
924
  /* eslint-disable react/jsx-no-bind */ children: (props)=>{
919
- return /*#__PURE__*/ React.createElement(React.Fragment, null, /*#__PURE__*/ React.createElement("g", null, _bars), _isHavingLine && /*#__PURE__*/ React.createElement("g", null, _createLine(props.xScale, props.yScalePrimary, props.containerHeight, props.containerWidth, props.yScaleSecondary)));
925
+ return /*#__PURE__*/ React.createElement(React.Fragment, null, /*#__PURE__*/ React.createElement("g", {
926
+ role: "listbox",
927
+ "aria-label": _getBarsGroupLabel()
928
+ }, _bars), _isHavingLine && /*#__PURE__*/ React.createElement("g", null, _createLine(props.xScale, props.yScalePrimary, props.containerHeight, props.containerWidth, props.yScaleSecondary)));
920
929
  }
921
930
  }) : /*#__PURE__*/ React.createElement("div", {
922
931
  id: _emptyChartId,