@fluentui/react-charts 9.1.2 → 9.1.4

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 (65) hide show
  1. package/CHANGELOG.md +34 -2
  2. package/dist/index.d.ts +36 -1
  3. package/lib/components/AreaChart/AreaChart.js +18 -8
  4. package/lib/components/AreaChart/AreaChart.js.map +1 -1
  5. package/lib/components/CommonComponents/CartesianChart.js +20 -15
  6. package/lib/components/CommonComponents/CartesianChart.js.map +1 -1
  7. package/lib/components/CommonComponents/CartesianChart.types.js.map +1 -1
  8. package/lib/components/DeclarativeChart/PlotlySchemaAdapter.js +57 -43
  9. package/lib/components/DeclarativeChart/PlotlySchemaAdapter.js.map +1 -1
  10. package/lib/components/GaugeChart/useGaugeChartStyles.styles.js +4 -2
  11. package/lib/components/GaugeChart/useGaugeChartStyles.styles.js.map +1 -1
  12. package/lib/components/GroupedVerticalBarChart/GroupedVerticalBarChart.js +44 -18
  13. package/lib/components/GroupedVerticalBarChart/GroupedVerticalBarChart.js.map +1 -1
  14. package/lib/components/GroupedVerticalBarChart/GroupedVerticalBarChart.types.js.map +1 -1
  15. package/lib/components/GroupedVerticalBarChart/useGroupedVerticalBarChartStyles.styles.js +3 -2
  16. package/lib/components/GroupedVerticalBarChart/useGroupedVerticalBarChartStyles.styles.js.map +1 -1
  17. package/lib/components/HeatMapChart/HeatMapChart.js +1 -1
  18. package/lib/components/HeatMapChart/HeatMapChart.js.map +1 -1
  19. package/lib/components/HorizontalBarChartWithAxis/HorizontalBarChartWithAxis.js +181 -38
  20. package/lib/components/HorizontalBarChartWithAxis/HorizontalBarChartWithAxis.js.map +1 -1
  21. package/lib/components/LineChart/LineChart.js +40 -36
  22. package/lib/components/LineChart/LineChart.js.map +1 -1
  23. package/lib/components/SankeyChart/useSankeyChartStyles.styles.js +8 -8
  24. package/lib/components/SankeyChart/useSankeyChartStyles.styles.js.map +1 -1
  25. package/lib/components/ScatterChart/ScatterChart.js +1 -1
  26. package/lib/components/ScatterChart/ScatterChart.js.map +1 -1
  27. package/lib/components/VerticalBarChart/VerticalBarChart.js +4 -4
  28. package/lib/components/VerticalBarChart/VerticalBarChart.js.map +1 -1
  29. package/lib/components/VerticalStackedBarChart/VerticalStackedBarChart.js +61 -23
  30. package/lib/components/VerticalStackedBarChart/VerticalStackedBarChart.js.map +1 -1
  31. package/lib/types/DataPoint.js.map +1 -1
  32. package/lib/utilities/utilities.js +77 -46
  33. package/lib/utilities/utilities.js.map +1 -1
  34. package/lib-commonjs/components/AreaChart/AreaChart.js +16 -7
  35. package/lib-commonjs/components/AreaChart/AreaChart.js.map +1 -1
  36. package/lib-commonjs/components/CommonComponents/CartesianChart.js +19 -15
  37. package/lib-commonjs/components/CommonComponents/CartesianChart.js.map +1 -1
  38. package/lib-commonjs/components/CommonComponents/CartesianChart.types.js.map +1 -1
  39. package/lib-commonjs/components/DeclarativeChart/PlotlySchemaAdapter.js +57 -43
  40. package/lib-commonjs/components/DeclarativeChart/PlotlySchemaAdapter.js.map +1 -1
  41. package/lib-commonjs/components/GaugeChart/useGaugeChartStyles.styles.js +4 -2
  42. package/lib-commonjs/components/GaugeChart/useGaugeChartStyles.styles.js.map +1 -1
  43. package/lib-commonjs/components/GroupedVerticalBarChart/GroupedVerticalBarChart.js +43 -17
  44. package/lib-commonjs/components/GroupedVerticalBarChart/GroupedVerticalBarChart.js.map +1 -1
  45. package/lib-commonjs/components/GroupedVerticalBarChart/GroupedVerticalBarChart.types.js.map +1 -1
  46. package/lib-commonjs/components/GroupedVerticalBarChart/useGroupedVerticalBarChartStyles.styles.js +4 -2
  47. package/lib-commonjs/components/GroupedVerticalBarChart/useGroupedVerticalBarChartStyles.styles.js.map +1 -1
  48. package/lib-commonjs/components/HeatMapChart/HeatMapChart.js +1 -1
  49. package/lib-commonjs/components/HeatMapChart/HeatMapChart.js.map +1 -1
  50. package/lib-commonjs/components/HorizontalBarChartWithAxis/HorizontalBarChartWithAxis.js +175 -36
  51. package/lib-commonjs/components/HorizontalBarChartWithAxis/HorizontalBarChartWithAxis.js.map +1 -1
  52. package/lib-commonjs/components/LineChart/LineChart.js +40 -36
  53. package/lib-commonjs/components/LineChart/LineChart.js.map +1 -1
  54. package/lib-commonjs/components/SankeyChart/useSankeyChartStyles.styles.js +7 -7
  55. package/lib-commonjs/components/SankeyChart/useSankeyChartStyles.styles.js.map +1 -1
  56. package/lib-commonjs/components/ScatterChart/ScatterChart.js +1 -1
  57. package/lib-commonjs/components/ScatterChart/ScatterChart.js.map +1 -1
  58. package/lib-commonjs/components/VerticalBarChart/VerticalBarChart.js +4 -4
  59. package/lib-commonjs/components/VerticalBarChart/VerticalBarChart.js.map +1 -1
  60. package/lib-commonjs/components/VerticalStackedBarChart/VerticalStackedBarChart.js +60 -22
  61. package/lib-commonjs/components/VerticalStackedBarChart/VerticalStackedBarChart.js.map +1 -1
  62. package/lib-commonjs/types/DataPoint.js.map +1 -1
  63. package/lib-commonjs/utilities/utilities.js +76 -46
  64. package/lib-commonjs/utilities/utilities.js.map +1 -1
  65. package/package.json +8 -8
@@ -1 +1 @@
1
- {"version":3,"sources":["HorizontalBarChartWithAxis.tsx"],"sourcesContent":["import * as React from 'react';\nimport { max as d3Max } from 'd3-array';\nimport { select as d3Select } from 'd3-selection';\nimport { scaleLinear as d3ScaleLinear, ScaleLinear as D3ScaleLinear, scaleBand as d3ScaleBand } from 'd3-scale';\nimport { Legend } from '../../components/Legends/Legends.types';\nimport { Legends } from '../../components/Legends/Legends';\nimport { useId } from '@fluentui/react-utilities';\nimport { useHorizontalBarChartWithAxisStyles } from './useHorizontalBarChartWithAxisStyles.styles';\nimport {\n AccessibilityProps,\n HorizontalBarChartWithAxisDataPoint,\n RefArrayData,\n Margins,\n ChartPopoverProps,\n Chart,\n} from '../../index';\nimport { ChildProps } from '../CommonComponents/CartesianChart.types';\nimport { CartesianChart } from '../CommonComponents/CartesianChart';\nimport { HorizontalBarChartWithAxisProps } from './HorizontalBarChartWithAxis.types';\nimport { ChartPopover } from '../CommonComponents/ChartPopover';\nimport {\n ChartTypes,\n IAxisData,\n getAccessibleDataObject,\n YAxisType,\n XAxisTypes,\n NumericAxis,\n StringAxis,\n getTypeOfAxis,\n getNextColor,\n areArraysEqual,\n useRtl,\n DataVizPalette,\n getColorFromToken,\n} from '../../utilities/index';\ntype ColorScale = (_p?: number) => string;\n\nexport const HorizontalBarChartWithAxis: React.FunctionComponent<HorizontalBarChartWithAxisProps> = React.forwardRef<\n HTMLDivElement,\n HorizontalBarChartWithAxisProps\n>((props, forwardedRef) => {\n const _refArray: RefArrayData[] = [];\n const _calloutId: string = useId('callout');\n const _isRtl: boolean = useRtl();\n const _tooltipId: string = useId('HBCWATooltipID_');\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: JSX.Element[];\n let _yAxisLabels: string[];\n let _xMax: number;\n let _calloutAnchorPoint: HorizontalBarChartWithAxisDataPoint | null;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n let tooltipElement: any;\n const cartesianChartRef = React.useRef<Chart>(null);\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 React.useImperativeHandle(\n props.componentRef,\n () => ({\n chartContainer: cartesianChartRef.current?.chartContainer ?? null,\n }),\n [],\n );\n\n const classes = useHorizontalBarChartWithAxisStyles(props);\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): JSX.Element {\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 // eslint-disable-next-line @typescript-eslint/no-shadow\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 ?? 'en-us'}\n clickPosition={clickPosition}\n isPopoverOpen={isPopoverOpen}\n />\n </>\n );\n }\n\n // eslint-disable-next-line @typescript-eslint/no-shadow\n function _renderCallout(props?: HorizontalBarChartWithAxisDataPoint): JSX.Element | 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 return (_bars =\n _yAxisType === YAxisType.NumericAxis\n ? _createNumericBars(containerHeight, containerWidth, xElement!, yElement!)\n : _createStringBars(containerHeight, containerWidth, xElement!, yElement!));\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 // eslint-disable-next-line @typescript-eslint/no-shadow\n color: string,\n mouseEvent: React.MouseEvent<SVGElement, MouseEvent>,\n ): void {\n mouseEvent.persist();\n // eslint-disable-next-line @typescript-eslint/no-shadow\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 // eslint-disable-next-line @typescript-eslint/no-shadow\n function _onBarFocus(point: HorizontalBarChartWithAxisDataPoint, refArrayIndexNumber: number, color: string): void {\n if ((isLegendSelected === false || _isLegendHighlighted(point.legend)) && _calloutAnchorPoint !== point) {\n // eslint-disable-next-line @typescript-eslint/no-shadow\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 if (isNumericScale) {\n const xMax = d3Max(_points, (point: HorizontalBarChartWithAxisDataPoint) => point.x as number)!;\n const yMax = d3Max(_points, (point: HorizontalBarChartWithAxisDataPoint) => point.y as number)!;\n const xBarScale = d3ScaleLinear()\n .domain(_isRtl ? [xMax, 0] : [0, xMax])\n .nice()\n .range([_margins.left!, containerWidth - _margins.right!]);\n const yBarScale = d3ScaleLinear()\n .domain([0, yMax])\n .range([containerHeight - _margins.bottom!, _margins.top!]);\n return { xBarScale, yBarScale };\n } else {\n const xMax = d3Max(_points, (point: HorizontalBarChartWithAxisDataPoint) => point.x as number)!;\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! - _barHeight / 2, _margins.top! + _barHeight / 2])\n .padding(props.yAxisPadding || 0);\n\n const xBarScale = d3ScaleLinear()\n .domain(_isRtl ? [xMax, 0] : [0, xMax])\n .nice()\n .range([_margins.left!, containerWidth - _margins.right!]);\n return { xBarScale, yBarScale };\n }\n }\n\n function _createNumericBars(\n containerHeight: number,\n containerWidth: number,\n xElement: SVGElement,\n yElement: SVGElement,\n ): JSX.Element[] {\n const { useSingleColor = false } = props;\n const { xBarScale, yBarScale } = _getScales(containerHeight, containerWidth, true);\n const sortedBars: HorizontalBarChartWithAxisDataPoint[] = [..._points];\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 const bars = sortedBars.map((point: HorizontalBarChartWithAxisDataPoint, index: number) => {\n let shouldHighlight = true;\n if (isLegendHovered || isLegendSelected) {\n shouldHighlight = _isLegendHighlighted(point.legend);\n }\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 return (\n <React.Fragment key={`${index}_${point.x}`}>\n <rect\n key={point.y}\n x={_isRtl ? xBarScale(point.x) : _margins.left!}\n y={yBarScale(point.y) - _barHeight / 2}\n data-is-focusable={shouldHighlight}\n width={\n _isRtl\n ? containerWidth - _margins.right! - Math.max(xBarScale(point.x), 0)\n : Math.max(xBarScale(point.x), 0) - _margins.left!\n }\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={() => _onBarFocus(point, index, startColor)}\n onBlur={_onBarLeave}\n fill={startColor}\n opacity={shouldHighlight ? 1 : 0.1}\n tabIndex={point.legend !== '' ? 0 : undefined}\n />\n </React.Fragment>\n );\n });\n return bars;\n }\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n function _tooltipOfYAxislabels(ytooltipProps: any) {\n const { tooltipCls, yAxis, id } = ytooltipProps;\n if (yAxis === null) {\n return null;\n }\n const div = d3Select('body').append('div').attr('id', id).attr('class', tooltipCls).style('opacity', 0);\n const aa = yAxis!.selectAll('#BaseSpan')._groups[0];\n const baseSpanLength = aa && Object.keys(aa)!.length;\n const originalDataArray: string[] = [];\n for (let i = 0; i < baseSpanLength; i++) {\n const originalData = aa[i].dataset && (Object.values(aa[i].dataset)[0] as string);\n originalDataArray.push(originalData);\n }\n const tickObject = yAxis!.selectAll('.tick')._groups[0];\n const tickObjectLength = tickObject && Object.keys(tickObject)!.length;\n for (let i = 0; i < tickObjectLength; i++) {\n const d1 = tickObject[i];\n d3Select(d1)\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n .on('mouseover', (event: any, d) => {\n if (!tooltipElement) {\n div.style('opacity', 0.9);\n div\n .text(originalDataArray[i])\n .style('left', event.pageX + 'px')\n .style('top', event.pageY - 28 + 'px');\n }\n })\n .on('mouseout', d => {\n div.style('opacity', 0);\n });\n }\n }\n\n function _createStringBars(\n containerHeight: number,\n containerWidth: number,\n xElement: SVGElement,\n yElement: SVGElement,\n ): JSX.Element[] {\n const { xBarScale, yBarScale } = _getScales(containerHeight, containerWidth, false);\n const { useSingleColor = false } = props;\n const bars = _points.map((point: HorizontalBarChartWithAxisDataPoint, index: number) => {\n let shouldHighlight = true;\n if (isLegendHovered || isLegendSelected) {\n shouldHighlight = _isLegendHighlighted(point.legend);\n }\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 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={_isRtl ? xBarScale(point.x) : _margins.left!}\n y={yBarScale(point.y)}\n rx={props.roundCorners ? 3 : 0}\n width={\n _isRtl\n ? containerWidth - _margins.right! - Math.max(xBarScale(point.x), 0)\n : Math.max(xBarScale(point.x), 0) - _margins.left!\n }\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 data-is-focusable={shouldHighlight}\n opacity={shouldHighlight ? 1 : 0.1}\n onFocus={() => _onBarFocus(point, index, startColor)}\n fill={startColor}\n tabIndex={point.legend !== '' ? 0 : undefined}\n />\n </React.Fragment>\n );\n });\n\n // Removing un wanted tooltip div from DOM, when prop not provided, for proper cleanup\n // of unwanted DOM elements, to prevent flacky behaviour in tooltips , that might occur\n // in creating tooltips when tooltips are enabled( as we try to recreate a tspan with _tooltipId)\n if (!props.showYAxisLablesTooltip) {\n try {\n // eslint-disable-next-line @nx/workspace-no-restricted-globals\n document.getElementById(_tooltipId) && document.getElementById(_tooltipId)!.remove();\n //eslint-disable-next-line no-empty\n } catch (e) {}\n }\n // Used to display tooltip at y axis labels.\n if (props.showYAxisLablesTooltip) {\n const yAxisElement = d3Select(yElement).call(yBarScale);\n if (!tooltipElement) {\n try {\n // eslint-disable-next-line @nx/workspace-no-restricted-globals\n document.getElementById(_tooltipId) && document.getElementById(_tooltipId)!.remove();\n //eslint-disable-next-line no-empty\n } catch (e) {}\n }\n const ytooltipProps = {\n tooltipCls: classes.tooltip!,\n id: _tooltipId,\n yAxis: yAxisElement,\n };\n yAxisElement && _tooltipOfYAxislabels(ytooltipProps);\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[]): JSX.Element {\n const { useSingleColor } = props;\n const actions: Legend[] = [];\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 // mapping data to the format Legends component needs\n const legend: Legend = {\n title: point.legend!,\n color,\n hoverAction: () => {\n _handleChartMouseLeave();\n _onLegendHover(point.legend!);\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 />\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\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 yValue = point.yAxisCalloutData || point.y;\n return point.callOutAccessibilityData?.ariaLabel || `${xValue}. ` + `${yValue}.`;\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 _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 if (!_isChartEmpty()) {\n _adjustProps();\n const calloutProps: ChartPopoverProps = {\n color: 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 const reversedBars = [..._points].reverse();\n _yAxisLabels = reversedBars.map((point: HorizontalBarChartWithAxisDataPoint) => point.y as string);\n _xMax = Math.max(d3Max(_points, (point: HorizontalBarChartWithAxisDataPoint) => point.x)!, props.xMaxValue || 0);\n const legendBars: JSX.Element = _getLegendData(_points);\n return (\n <CartesianChart\n {...props}\n chartTitle={_getChartTitle()}\n points={_points}\n chartType={ChartTypes.HorizontalBarChartWithAxis}\n xAxisType={_xAxisType}\n yAxisType={_yAxisType}\n stringDatasetForYAxisDomain={_yAxisLabels}\n calloutProps={calloutProps}\n tickParams={tickParams}\n legendBars={legendBars}\n barwidth={_barHeight}\n getmargins={_getMargins}\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","select","d3Select","scaleLinear","d3ScaleLinear","scaleBand","d3ScaleBand","Legends","useId","useHorizontalBarChartWithAxisStyles","CartesianChart","ChartPopover","ChartTypes","getAccessibleDataObject","YAxisType","XAxisTypes","getTypeOfAxis","getNextColor","areArraysEqual","useRtl","DataVizPalette","getColorFromToken","HorizontalBarChartWithAxis","forwardRef","props","forwardedRef","_refArray","_calloutId","_isRtl","_tooltipId","_xAxisType","data","length","x","NumericAxis","_yAxisType","y","StringAxis","_emptyChartId","_points","_barHeight","_colors","_margins","_bars","_yAxisLabels","_xMax","_calloutAnchorPoint","tooltipElement","cartesianChartRef","useRef","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","useEffect","current","prevProps","useImperativeHandle","componentRef","chartContainer","classes","_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","_createNumericBars","_createStringBars","increment","_p","color16","domainValues","i","push","colorScale","domain","range","_refCallback","element","legendTitle","refElement","_onBarHover","mouseEvent","persist","_isLegendHighlighted","_updatePosition","clientX","clientY","enableGradient","_onBarLeave","_handleChartMouseLeave","_onBarFocus","refArrayIndexNumber","obj","_getScales","isNumericScale","xMax","yMax","xBarScale","nice","left","right","yBarScale","bottom","top","padding","yAxisPadding","sortedBars","sort","a","b","aValue","parseFloat","bValue","bars","map","shouldHighlight","Math","Fragment","key","startColor","rect","data-is-focusable","width","height","ref","e","rx","roundCorners","onClick","onMouseOver","event","aria-label","_getAriaLabel","role","aria-labelledby","onMouseLeave","onFocus","onBlur","fill","opacity","tabIndex","_tooltipOfYAxislabels","ytooltipProps","tooltipCls","yAxis","id","div","append","attr","style","aa","selectAll","_groups","baseSpanLength","Object","keys","originalDataArray","originalData","dataset","values","tickObject","tickObjectLength","d1","on","d","text","pageX","pageY","transform","bandwidth","showYAxisLablesTooltip","document","getElementById","remove","yAxisElement","call","tooltip","_onLegendHover","customMessage","_isLegendSelected","_onLegendLeave","isLegendFocused","_getLegendData","actions","_index","title","hoverAction","onMouseOutAction","legends","enabledWrapLines","enabledLegendsWrapLines","overflowText","legendsOverflowText","onChange","_onLegendSelectionChange","_getHighlightedLegend","includes","currentLegend","canSelectMultipleLegends","slice","_getAxisData","yAxisData","yAxisDomainValues","domainValue","xMaxValue","xValue","yValue","ariaLabel","_getChartTitle","chartTitle","_isChartEmpty","newX","newY","threshold","distance","sqrt","pow","calloutProps","customCallout","customizedCallout","customCalloutProps","calloutPropsPerDataPoint","isCartesian","tickParams","tickValues","tickFormat","reversedBars","reverse","legendBars","points","chartType","xAxisType","yAxisType","stringDatasetForYAxisDomain","barwidth","getmargins","getGraphData","getAxisData","onChartMouseLeave","children","g","displayName"],"rangeMappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;","mappings":"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"}
1
+ {"version":3,"sources":["HorizontalBarChartWithAxis.tsx"],"sourcesContent":["import * as React from 'react';\nimport { max as d3Max, min as d3Min } from 'd3-array';\nimport { select as d3Select } from 'd3-selection';\nimport { scaleLinear as d3ScaleLinear, ScaleLinear as D3ScaleLinear, scaleBand as d3ScaleBand } from 'd3-scale';\nimport { Legend } from '../../components/Legends/Legends.types';\nimport { Legends } from '../../components/Legends/Legends';\nimport { useId } from '@fluentui/react-utilities';\nimport { useHorizontalBarChartWithAxisStyles } from './useHorizontalBarChartWithAxisStyles.styles';\nimport {\n AccessibilityProps,\n HorizontalBarChartWithAxisDataPoint,\n RefArrayData,\n Margins,\n ChartPopoverProps,\n Chart,\n} from '../../index';\nimport { ChildProps } from '../CommonComponents/CartesianChart.types';\nimport { CartesianChart } from '../CommonComponents/CartesianChart';\nimport { HorizontalBarChartWithAxisProps } from './HorizontalBarChartWithAxis.types';\nimport { ChartPopover } from '../CommonComponents/ChartPopover';\nimport {\n ChartTypes,\n IAxisData,\n getAccessibleDataObject,\n YAxisType,\n XAxisTypes,\n NumericAxis,\n StringAxis,\n getTypeOfAxis,\n getNextColor,\n areArraysEqual,\n useRtl,\n DataVizPalette,\n getColorFromToken,\n computeLongestBars,\n IDomainNRange,\n domainRangeOfNumericForHorizontalBarChartWithAxis,\n groupChartDataByYValue,\n MIN_DOMAIN_MARGIN,\n} from '../../utilities/index';\nimport { getClosestPairDiffAndRange } from '../../utilities/vbc-utils';\ntype ColorScale = (_p?: number) => string;\n\nexport const HorizontalBarChartWithAxis: React.FunctionComponent<HorizontalBarChartWithAxisProps> = React.forwardRef<\n HTMLDivElement,\n HorizontalBarChartWithAxisProps\n>((props, forwardedRef) => {\n const _refArray: RefArrayData[] = [];\n const _calloutId: string = useId('callout');\n const _isRtl: boolean = useRtl();\n const _tooltipId: string = useId('HBCWATooltipID_');\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: JSX.Element[];\n let _yAxisLabels: string[];\n let _xMax: number;\n let _calloutAnchorPoint: HorizontalBarChartWithAxisDataPoint | null;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n let tooltipElement: any;\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 = React.useRef<Chart>(null);\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 React.useImperativeHandle(\n props.componentRef,\n () => ({\n chartContainer: cartesianChartRef.current?.chartContainer ?? null,\n }),\n [],\n );\n\n const classes = useHorizontalBarChartWithAxisStyles(props);\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): JSX.Element {\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 // eslint-disable-next-line @typescript-eslint/no-shadow\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 ?? 'en-us'}\n clickPosition={clickPosition}\n isPopoverOpen={isPopoverOpen}\n />\n </>\n );\n }\n\n // eslint-disable-next-line @typescript-eslint/no-shadow\n function _renderCallout(props?: HorizontalBarChartWithAxisDataPoint): JSX.Element | 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: JSX.Element[] = [];\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 // eslint-disable-next-line @typescript-eslint/no-shadow\n color: string,\n mouseEvent: React.MouseEvent<SVGElement, MouseEvent>,\n ): void {\n mouseEvent.persist();\n // eslint-disable-next-line @typescript-eslint/no-shadow\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 // eslint-disable-next-line @typescript-eslint/no-shadow\n function _onBarFocus(point: HorizontalBarChartWithAxisDataPoint, refArrayIndexNumber: number, color: string): void {\n if ((isLegendSelected === false || _isLegendHighlighted(point.legend)) && _calloutAnchorPoint !== point) {\n // eslint-disable-next-line @typescript-eslint/no-shadow\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 _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 ): JSX.Element[] {\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 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 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 data-is-focusable={shouldHighlight}\n width={currentWidth - (_isRtl ? gapWidthRTL : gapWidthLTR)}\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={() => _onBarFocus(point, index, startColor)}\n onBlur={_onBarLeave}\n fill={startColor}\n opacity={shouldHighlight ? 1 : 0.1}\n tabIndex={point.legend !== '' ? 0 : undefined}\n />\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 // eslint-disable-next-line @typescript-eslint/no-explicit-any\n function _tooltipOfYAxislabels(ytooltipProps: any) {\n const { tooltipCls, yAxis, id } = ytooltipProps;\n if (yAxis === null) {\n return null;\n }\n const div = d3Select('body').append('div').attr('id', id).attr('class', tooltipCls).style('opacity', 0);\n const aa = yAxis!.selectAll('#BaseSpan')._groups[0];\n const baseSpanLength = aa && Object.keys(aa)!.length;\n const originalDataArray: string[] = [];\n for (let i = 0; i < baseSpanLength; i++) {\n const originalData = aa[i].dataset && (Object.values(aa[i].dataset)[0] as string);\n originalDataArray.push(originalData);\n }\n const tickObject = yAxis!.selectAll('.tick')._groups[0];\n const tickObjectLength = tickObject && Object.keys(tickObject)!.length;\n for (let i = 0; i < tickObjectLength; i++) {\n const d1 = tickObject[i];\n d3Select(d1)\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n .on('mouseover', (event: any, d) => {\n if (!tooltipElement) {\n div.style('opacity', 0.9);\n div\n .text(originalDataArray[i])\n .style('left', event.pageX + 'px')\n .style('top', event.pageY - 28 + 'px');\n }\n })\n .on('mouseout', d => {\n div.style('opacity', 0);\n });\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 ): JSX.Element[] {\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 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 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={currentWidth - (_isRtl ? gapWidthRTL : gapWidthLTR)}\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 data-is-focusable={shouldHighlight}\n opacity={shouldHighlight ? 1 : 0.1}\n onFocus={() => _onBarFocus(point, index, startColor)}\n fill={startColor}\n tabIndex={point.legend !== '' ? 0 : undefined}\n />\n </React.Fragment>\n );\n });\n\n // Removing un wanted tooltip div from DOM, when prop not provided, for proper cleanup\n // of unwanted DOM elements, to prevent flacky behaviour in tooltips , that might occur\n // in creating tooltips when tooltips are enabled( as we try to recreate a tspan with _tooltipId)\n if (!props.showYAxisLablesTooltip) {\n try {\n // eslint-disable-next-line @nx/workspace-no-restricted-globals\n document.getElementById(_tooltipId) && document.getElementById(_tooltipId)!.remove();\n //eslint-disable-next-line no-empty\n } catch (e) {}\n }\n // Used to display tooltip at y axis labels.\n if (props.showYAxisLablesTooltip) {\n const yAxisElement = d3Select(yElement).call(yBarScale);\n if (!tooltipElement) {\n try {\n // eslint-disable-next-line @nx/workspace-no-restricted-globals\n document.getElementById(_tooltipId) && document.getElementById(_tooltipId)!.remove();\n //eslint-disable-next-line no-empty\n } catch (e) {}\n }\n const ytooltipProps = {\n tooltipCls: classes.tooltip!,\n id: _tooltipId,\n yAxis: yAxisElement,\n };\n yAxisElement && _tooltipOfYAxislabels(ytooltipProps);\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[]): JSX.Element {\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 />\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\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 yValue = point.yAxisCalloutData || point.y;\n return point.callOutAccessibilityData?.ariaLabel || `${xValue}. ` + `${yValue}.`;\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 _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 shiftX: number,\n ) {\n let domainNRangeValue: IDomainNRange;\n if (xAxisType === XAxisTypes.NumericAxis) {\n domainNRangeValue = domainRangeOfNumericForHorizontalBarChartWithAxis(\n points,\n margins,\n width,\n isRTL,\n shiftX,\n X_ORIGIN,\n );\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: 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 const reversedBars = [..._points].reverse();\n _yAxisLabels = reversedBars.map((point: HorizontalBarChartWithAxisDataPoint) => point.y as string);\n _xMax = Math.max(d3Max(_points, (point: HorizontalBarChartWithAxisDataPoint) => point.x)!, props.xMaxValue || 0);\n const legendBars: JSX.Element = _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 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","select","d3Select","scaleLinear","d3ScaleLinear","scaleBand","d3ScaleBand","Legends","useId","useHorizontalBarChartWithAxisStyles","CartesianChart","ChartPopover","ChartTypes","getAccessibleDataObject","YAxisType","XAxisTypes","getTypeOfAxis","getNextColor","areArraysEqual","useRtl","DataVizPalette","getColorFromToken","computeLongestBars","domainRangeOfNumericForHorizontalBarChartWithAxis","groupChartDataByYValue","MIN_DOMAIN_MARGIN","getClosestPairDiffAndRange","HorizontalBarChartWithAxis","forwardRef","props","forwardedRef","_refArray","_calloutId","_isRtl","_tooltipId","_xAxisType","data","length","x","NumericAxis","_yAxisType","y","StringAxis","_emptyChartId","_points","_barHeight","_colors","_margins","_bars","_yAxisLabels","_xMax","_calloutAnchorPoint","tooltipElement","_longestBarPositiveTotalValue","_longestBarNegativeTotalValue","_domainMargin","_yAxisPadding","yAxisPadding","cartesianChartRef","useRef","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","useEffect","current","prevProps","useImperativeHandle","componentRef","chartContainer","classes","_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","refArrayIndexNumber","obj","isNumericScale","xMax","xMin","xDomain","Math","yMax","yMin","yDomainMax","yMaxValue","yMinProp","yMinValue","yDomainMin","nice","left","right","bottom","top","padding","sortedBars","sort","a","b","aValue","parseFloat","bValue","prevWidthPositive","prevWidthNegative","prevPoint","totalPositiveBars","filter","totalNegativeBars","currPositiveCounter","currNegativeCounter","bars","shouldHighlight","barStartX","Fragment","key","startColor","prevBarWidth","abs","currentWidth","gapWidthLTR","gapWidthRTL","xStart","rect","data-is-focusable","width","height","ref","e","rx","roundCorners","onClick","onMouseOver","event","aria-label","_getAriaLabel","role","aria-labelledby","onMouseLeave","onFocus","onBlur","fill","opacity","tabIndex","_getUniqueYValues","mapY","uniqueY","Object","values","_calculateAppropriateBarHeight","totalWidth","innerPadding","result","closestPairDiff","barWidth","floor","_getDomainMarginsForHorizontalBarChart","barGapRate","numBars","totalHeight","reqHeight","_tooltipOfYAxislabels","ytooltipProps","tooltipCls","yAxis","id","div","append","attr","style","aa","selectAll","_groups","baseSpanLength","keys","originalDataArray","originalData","dataset","tickObject","tickObjectLength","d1","on","d","text","pageX","pageY","transform","bandwidth","showYAxisLablesTooltip","document","getElementById","remove","yAxisElement","call","tooltip","_onLegendHover","customMessage","_isLegendSelected","_onLegendLeave","isLegendFocused","_getLegendData","actions","mapLegendToColor","_index","entries","title","hoverAction","onMouseOutAction","legends","enabledWrapLines","enabledLegendsWrapLines","overflowText","legendsOverflowText","onChange","_onLegendSelectionChange","_getHighlightedLegend","includes","currentLegend","canSelectMultipleLegends","slice","_getAxisData","yAxisData","yAxisDomainValues","domainValue","xMaxValue","xValue","yValue","ariaLabel","_getChartTitle","chartTitle","_isChartEmpty","newX","newY","threshold","distance","sqrt","pow","_getDomainNRangeValues","points","chartType","isRTL","xAxisType","tickValues","shiftX","domainNRangeValue","dStartValue","dEndValue","rStartValue","rEndValue","calloutProps","customCallout","customizedCallout","customCalloutProps","calloutPropsPerDataPoint","isCartesian","tickParams","tickFormat","reversedBars","reverse","legendBars","yAxisType","getDomainNRangeValues","stringDatasetForYAxisDomain","barwidth","getmargins","getYDomainMargins","getGraphData","getAxisData","onChartMouseLeave","children","g","displayName"],"rangeMappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;","mappings":"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"}
@@ -94,7 +94,7 @@ const PATH_MULTIPLY_SIZE = 2.5;
94
94
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
95
95
  let _xAxisScale = '';
96
96
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
97
- let _yAxisScale = '';
97
+ let _yScalePrimary = '';
98
98
  let _circleId = useId('circle');
99
99
  let _lineId = useId('lineID');
100
100
  let _borderId = useId('borderID');
@@ -116,6 +116,7 @@ const PATH_MULTIPLY_SIZE = 2.5;
116
116
  const _isRTL = useRtl();
117
117
  let xAxisCalloutAccessibilityData = {};
118
118
  const cartesianChartRef = React.useRef(null);
119
+ let _yScaleSecondary;
119
120
  props.eventAnnotationProps && props.eventAnnotationProps.labelHeight && (eventLabelHeight = props.eventAnnotationProps.labelHeight);
120
121
  const [hoverXValue, setHoverXValue] = React.useState('');
121
122
  const [activeLegend, setActiveLegend] = React.useState('');
@@ -197,9 +198,10 @@ const PATH_MULTIPLY_SIZE = 2.5;
197
198
  function _getMargins(_margins) {
198
199
  margins = _margins;
199
200
  }
200
- function _initializeLineChartData(xScale, yScale, containerHeight, containerWidth, xElement) {
201
+ function _initializeLineChartData(xScale, yScalePrimary, containerHeight, containerWidth, xElement, yAxisElement, yScaleSecondary) {
201
202
  _xAxisScale = xScale;
202
- _yAxisScale = yScale;
203
+ _yScalePrimary = yScalePrimary;
204
+ _yScaleSecondary = yScaleSecondary;
203
205
  _renderedColorFillBars = props.colorFillBars ? _createColorFillBars(containerHeight) : [];
204
206
  lines = _createLines(xElement, containerHeight);
205
207
  }
@@ -357,6 +359,7 @@ const PATH_MULTIPLY_SIZE = 2.5;
357
359
  const legendVal = _points[i].legend;
358
360
  const lineColor = _points[i].color;
359
361
  const verticaLineHeight = containerHeight - margins.bottom + 6;
362
+ const yScale = _points[i].useSecondaryYScale && _yScaleSecondary ? _yScaleSecondary : _yScalePrimary;
360
363
  if (_points[i].data.length === 1) {
361
364
  // eslint-disable-next-line @typescript-eslint/no-shadow
362
365
  const { x: x1, y: y1, xAxisCalloutData, xAxisCalloutAccessibilityData } = _points[i].data[0];
@@ -367,12 +370,12 @@ const PATH_MULTIPLY_SIZE = 2.5;
367
370
  key: circleId,
368
371
  r: activePoint === circleId ? 5.5 : 3.5,
369
372
  cx: _xAxisScale(x1),
370
- cy: _yAxisScale(y1),
373
+ cy: yScale(y1),
371
374
  fill: activePoint === circleId ? tokens.colorNeutralBackground1 : lineColor,
372
375
  opacity: isLegendSelected ? 1 : 0.1,
373
376
  tabIndex: isLegendSelected ? 0 : undefined,
374
- onMouseOver: (event)=>_handleHover(x1, y1, verticaLineHeight, xAxisCalloutData, circleId, xAxisCalloutAccessibilityData, event),
375
- onMouseMove: (event)=>_handleHover(x1, y1, verticaLineHeight, xAxisCalloutData, circleId, xAxisCalloutAccessibilityData, event),
377
+ onMouseOver: (event)=>_handleHover(x1, y1, verticaLineHeight, xAxisCalloutData, circleId, xAxisCalloutAccessibilityData, event, yScale),
378
+ onMouseMove: (event)=>_handleHover(x1, y1, verticaLineHeight, xAxisCalloutData, circleId, xAxisCalloutAccessibilityData, event, yScale),
376
379
  onMouseOut: _handleMouseOut,
377
380
  strokeWidth: activePoint === circleId ? DEFAULT_LINE_STROKE_SIZE : 0,
378
381
  stroke: activePoint === circleId ? lineColor : '',
@@ -396,7 +399,7 @@ const PATH_MULTIPLY_SIZE = 2.5;
396
399
  var _points_i_lineOptions1;
397
400
  const line = d3Line()// eslint-disable-next-line @typescript-eslint/no-explicit-any
398
401
  .x((d)=>_xAxisScale(d[0]))// eslint-disable-next-line @typescript-eslint/no-explicit-any
399
- .y((d)=>_yAxisScale(d[1])).curve(getCurveFactory(lineCurve));
402
+ .y((d)=>yScale(d[1])).curve(getCurveFactory(lineCurve));
400
403
  const lineId = `${_lineId}_${i}`;
401
404
  const borderId = `${_borderId}_${i}`;
402
405
  const strokeWidth = ((_points_i_lineOptions1 = _points[i].lineOptions) === null || _points_i_lineOptions1 === void 0 ? void 0 : _points_i_lineOptions1.strokeWidth) || props.strokeWidth || DEFAULT_LINE_STROKE_SIZE;
@@ -435,8 +438,8 @@ const PATH_MULTIPLY_SIZE = 2.5;
435
438
  stroke: lineColor,
436
439
  strokeWidth: strokeWidth,
437
440
  strokeLinecap: (_points_i_lineOptions_strokeLinecap1 = (_points_i_lineOptions3 = _points[i].lineOptions) === null || _points_i_lineOptions3 === void 0 ? void 0 : _points_i_lineOptions3.strokeLinecap) !== null && _points_i_lineOptions_strokeLinecap1 !== void 0 ? _points_i_lineOptions_strokeLinecap1 : 'round',
438
- onMouseMove: (event)=>_onMouseOverLargeDataset.bind(i, verticaLineHeight, event),
439
- onMouseOver: (event)=>_onMouseOverLargeDataset.bind(i, verticaLineHeight, event),
441
+ onMouseMove: (event)=>_onMouseOverLargeDataset.bind(i, verticaLineHeight, event, yScale),
442
+ onMouseOver: (event)=>_onMouseOverLargeDataset.bind(i, verticaLineHeight, event, yScale),
440
443
  onMouseOut: _handleMouseOut,
441
444
  ..._getClickHandler(_points[i].onLineClick),
442
445
  opacity: 1,
@@ -467,8 +470,8 @@ const PATH_MULTIPLY_SIZE = 2.5;
467
470
  strokeWidth: DEFAULT_LINE_STROKE_SIZE,
468
471
  stroke: lineColor,
469
472
  visibility: 'hidden',
470
- onMouseMove: (event)=>_onMouseOverLargeDataset.bind(i, verticaLineHeight, event),
471
- onMouseOver: (event)=>_onMouseOverLargeDataset.bind(i, verticaLineHeight, event),
473
+ onMouseMove: (event)=>_onMouseOverLargeDataset.bind(i, verticaLineHeight, event, yScale),
474
+ onMouseOver: (event)=>_onMouseOverLargeDataset.bind(i, verticaLineHeight, event, yScale),
472
475
  onMouseOut: _handleMouseOut
473
476
  }));
474
477
  } else if (!props.optimizeLargeData) {
@@ -482,7 +485,7 @@ const PATH_MULTIPLY_SIZE = 2.5;
482
485
  const circleId = `${_circleId}_${i}_${j}`;
483
486
  const { x: x1, y: y1, xAxisCalloutData, xAxisCalloutAccessibilityData } = _points[i].data[j - 1];
484
487
  const { x: x2, y: y2 } = _points[i].data[j];
485
- let path = _getPath(_xAxisScale(x1), _yAxisScale(y1), circleId, j, false, _points[i].index);
488
+ let path = _getPath(_xAxisScale(x1), yScale(y1), circleId, j, false, _points[i].index);
486
489
  const strokeWidth = ((_points_i_lineOptions7 = _points[i].lineOptions) === null || _points_i_lineOptions7 === void 0 ? void 0 : _points_i_lineOptions7.strokeWidth) || props.strokeWidth || DEFAULT_LINE_STROKE_SIZE;
487
490
  const isLegendSelected = _legendHighlighted(legendVal) || _noLegendHighlighted() || isSelectedLegend;
488
491
  const currentPointHidden = _points[i].hideNonActiveDots && activePoint !== circleId;
@@ -491,8 +494,8 @@ const PATH_MULTIPLY_SIZE = 2.5;
491
494
  key: circleId,
492
495
  d: path,
493
496
  "data-is-focusable": isLegendSelected,
494
- onMouseOver: (event)=>_handleHover(x1, y1, verticaLineHeight, xAxisCalloutData, circleId, xAxisCalloutAccessibilityData, event),
495
- onMouseMove: (event)=>_handleHover(x1, y1, verticaLineHeight, xAxisCalloutData, circleId, xAxisCalloutAccessibilityData, event),
497
+ onMouseOver: (event)=>_handleHover(x1, y1, verticaLineHeight, xAxisCalloutData, circleId, xAxisCalloutAccessibilityData, event, yScale),
498
+ onMouseMove: (event)=>_handleHover(x1, y1, verticaLineHeight, xAxisCalloutData, circleId, xAxisCalloutAccessibilityData, event, yScale),
496
499
  onMouseOut: _handleMouseOut,
497
500
  onFocus: ()=>_handleFocus(lineId, x1, xAxisCalloutData, circleId, xAxisCalloutAccessibilityData),
498
501
  onBlur: _handleMouseOut,
@@ -510,7 +513,7 @@ const PATH_MULTIPLY_SIZE = 2.5;
510
513
  const lastCircleId = `${circleId}${j}L`;
511
514
  const hiddenHoverCircleId = `${circleId}${j}D`;
512
515
  const lastPointHidden = _points[i].hideNonActiveDots && activePoint !== lastCircleId;
513
- path = _getPath(_xAxisScale(x2), _yAxisScale(y2), lastCircleId, j, true, _points[i].index);
516
+ path = _getPath(_xAxisScale(x2), yScale(y2), lastCircleId, j, true, _points[i].index);
514
517
  const { xAxisCalloutData: lastCirlceXCallout, xAxisCalloutAccessibilityData: lastCirlceXCalloutAccessibilityData } = _points[i].data[j];
515
518
  pointsForLine.push(/*#__PURE__*/ React.createElement(React.Fragment, {
516
519
  key: `${lastCircleId}_container`
@@ -519,8 +522,8 @@ const PATH_MULTIPLY_SIZE = 2.5;
519
522
  key: lastCircleId,
520
523
  d: path,
521
524
  "data-is-focusable": isLegendSelected,
522
- onMouseOver: (event)=>_handleHover(x2, y2, verticaLineHeight, lastCirlceXCallout, lastCircleId, lastCirlceXCalloutAccessibilityData, event),
523
- onMouseMove: (event)=>_handleHover(x2, y2, verticaLineHeight, lastCirlceXCallout, lastCircleId, lastCirlceXCalloutAccessibilityData, event),
525
+ onMouseOver: (event)=>_handleHover(x2, y2, verticaLineHeight, lastCirlceXCallout, lastCircleId, lastCirlceXCalloutAccessibilityData, event, yScale),
526
+ onMouseMove: (event)=>_handleHover(x2, y2, verticaLineHeight, lastCirlceXCallout, lastCircleId, lastCirlceXCalloutAccessibilityData, event, yScale),
524
527
  onMouseOut: _handleMouseOut,
525
528
  onFocus: ()=>_handleFocus(lineId, x2, lastCirlceXCallout, lastCircleId, lastCirlceXCalloutAccessibilityData),
526
529
  onBlur: _handleMouseOut,
@@ -537,11 +540,11 @@ const PATH_MULTIPLY_SIZE = 2.5;
537
540
  key: hiddenHoverCircleId,
538
541
  r: 8,
539
542
  cx: _xAxisScale(x2),
540
- cy: _yAxisScale(y2),
543
+ cy: yScale(y2),
541
544
  opacity: 0,
542
545
  width: 0,
543
- onMouseOver: (event)=>_handleHover(x2, y2, verticaLineHeight, lastCirlceXCallout, lastCircleId, lastCirlceXCalloutAccessibilityData, event),
544
- onMouseMove: (event)=>_handleHover(x2, y2, verticaLineHeight, lastCirlceXCallout, lastCircleId, lastCirlceXCalloutAccessibilityData, event),
546
+ onMouseOver: (event)=>_handleHover(x2, y2, verticaLineHeight, lastCirlceXCallout, lastCircleId, lastCirlceXCalloutAccessibilityData, event, yScale),
547
+ onMouseMove: (event)=>_handleHover(x2, y2, verticaLineHeight, lastCirlceXCallout, lastCircleId, lastCirlceXCalloutAccessibilityData, event, yScale),
545
548
  onMouseOut: _handleMouseOut,
546
549
  strokeWidth: 0,
547
550
  focusable: false,
@@ -560,9 +563,9 @@ const PATH_MULTIPLY_SIZE = 2.5;
560
563
  id: borderId,
561
564
  key: borderId,
562
565
  x1: _xAxisScale(x1),
563
- y1: _yAxisScale(y1),
566
+ y1: yScale(y1),
564
567
  x2: _xAxisScale(x2),
565
- y2: _yAxisScale(y2),
568
+ y2: yScale(y2),
566
569
  strokeLinecap: (_points_i_lineOptions_strokeLinecap3 = (_points_i_lineOptions12 = _points[i].lineOptions) === null || _points_i_lineOptions12 === void 0 ? void 0 : _points_i_lineOptions12.strokeLinecap) !== null && _points_i_lineOptions_strokeLinecap3 !== void 0 ? _points_i_lineOptions_strokeLinecap3 : 'round',
567
570
  strokeWidth: Number.parseFloat(strokeWidth.toString()) + lineBorderWidth,
568
571
  ...((_points_i_lineOptions13 = _points[i].lineOptions) === null || _points_i_lineOptions13 === void 0 ? void 0 : _points_i_lineOptions13.lineBorderColor) && {
@@ -577,15 +580,15 @@ const PATH_MULTIPLY_SIZE = 2.5;
577
580
  id: lineId,
578
581
  key: lineId,
579
582
  x1: _xAxisScale(x1),
580
- y1: _yAxisScale(y1),
583
+ y1: yScale(y1),
581
584
  x2: _xAxisScale(x2),
582
- y2: _yAxisScale(y2),
585
+ y2: yScale(y2),
583
586
  strokeWidth: strokeWidth,
584
587
  ref: (e)=>{
585
588
  _refCallback(e, lineId);
586
589
  },
587
- onMouseOver: (event)=>_handleHover(x1, y1, verticaLineHeight, xAxisCalloutData, circleId, xAxisCalloutAccessibilityData, event),
588
- onMouseMove: (event)=>_handleHover(x1, y1, verticaLineHeight, xAxisCalloutData, circleId, xAxisCalloutAccessibilityData, event),
590
+ onMouseOver: (event)=>_handleHover(x1, y1, verticaLineHeight, xAxisCalloutData, circleId, xAxisCalloutAccessibilityData, event, yScale),
591
+ onMouseMove: (event)=>_handleHover(x1, y1, verticaLineHeight, xAxisCalloutData, circleId, xAxisCalloutAccessibilityData, event, yScale),
589
592
  onMouseOut: _handleMouseOut,
590
593
  stroke: lineColor,
591
594
  strokeLinecap: (_points_i_lineOptions_strokeLinecap4 = (_points_i_lineOptions9 = _points[i].lineOptions) === null || _points_i_lineOptions9 === void 0 ? void 0 : _points_i_lineOptions9.strokeLinecap) !== null && _points_i_lineOptions_strokeLinecap4 !== void 0 ? _points_i_lineOptions_strokeLinecap4 : 'round',
@@ -603,9 +606,9 @@ const PATH_MULTIPLY_SIZE = 2.5;
603
606
  id: lineId,
604
607
  key: lineId,
605
608
  x1: _xAxisScale(x1),
606
- y1: _yAxisScale(y1),
609
+ y1: yScale(y1),
607
610
  x2: _xAxisScale(x2),
608
- y2: _yAxisScale(y2),
611
+ y2: yScale(y2),
609
612
  strokeWidth: strokeWidth,
610
613
  stroke: lineColor,
611
614
  strokeLinecap: (_points_i_lineOptions_strokeLinecap5 = (_points_i_lineOptions15 = _points[i].lineOptions) === null || _points_i_lineOptions15 === void 0 ? void 0 : _points_i_lineOptions15.strokeLinecap) !== null && _points_i_lineOptions_strokeLinecap5 !== void 0 ? _points_i_lineOptions_strokeLinecap5 : 'round',
@@ -671,9 +674,9 @@ const PATH_MULTIPLY_SIZE = 2.5;
671
674
  fill: colorFillBar.applyPattern ? `url(#${_colorFillBarPatternId}_${i})` : color,
672
675
  fillOpacity: opacity,
673
676
  x: _isRTL ? _xAxisScale(endX) : _xAxisScale(startX),
674
- y: _yAxisScale(yMinMaxValues.endValue) - FILL_Y_PADDING,
677
+ y: _yScalePrimary(yMinMaxValues.endValue) - FILL_Y_PADDING,
675
678
  width: Math.abs(_xAxisScale(endX) - _xAxisScale(startX)),
676
- height: _yAxisScale(props.yMinValue || 0) - _yAxisScale(yMinMaxValues.endValue) + FILL_Y_PADDING,
679
+ height: _yScalePrimary(props.yMinValue || 0) - _yScalePrimary(yMinMaxValues.endValue) + FILL_Y_PADDING,
677
680
  key: `${colorFillBarId}${j}`
678
681
  }));
679
682
  }
@@ -716,7 +719,7 @@ const PATH_MULTIPLY_SIZE = 2.5;
716
719
  refElement: element
717
720
  });
718
721
  }
719
- const _onMouseOverLargeDataset = (linenumber, lineHeight, mouseEvent)=>{
722
+ const _onMouseOverLargeDataset = (linenumber, lineHeight, mouseEvent, yScale)=>{
720
723
  mouseEvent.persist();
721
724
  const { data } = props;
722
725
  const { lineChartData } = data;
@@ -770,8 +773,8 @@ const PATH_MULTIPLY_SIZE = 2.5;
770
773
  // if no points need to be called out then don't show vertical line and callout card
771
774
  if (found && pointToHighlightUpdated) {
772
775
  _uniqueCallOutID = `#${_staticHighlightCircle}_${linenumber}`;
773
- d3Select(`#${_staticHighlightCircle}_${linenumber}`).attr('cx', `${_xAxisScale(pointToHighlight.x)}`).attr('cy', `${_yAxisScale(pointToHighlight.y)}`).attr('visibility', 'visibility');
774
- d3Select(`#${_verticalLine}`).attr('transform', ()=>`translate(${_xAxisScale(pointToHighlight.x)}, ${_yAxisScale(pointToHighlight.y)})`).attr('visibility', 'visibility').attr('y2', `${lineHeight - 5 - _yAxisScale(pointToHighlight.y)}`);
776
+ d3Select(`#${_staticHighlightCircle}_${linenumber}`).attr('cx', `${_xAxisScale(pointToHighlight.x)}`).attr('cy', `${yScale(pointToHighlight.y)}`).attr('visibility', 'visibility');
777
+ d3Select(`#${_verticalLine}`).attr('transform', ()=>`translate(${_xAxisScale(pointToHighlight.x)}, ${yScale(pointToHighlight.y)})`).attr('visibility', 'visibility').attr('y2', `${lineHeight - 5 - yScale(pointToHighlight.y)}`);
775
778
  setNearestCircleToHighlight(pointToHighlight);
776
779
  updatePosition(mouseEvent.clientX, mouseEvent.clientY);
777
780
  setStackCalloutProps(found);
@@ -808,14 +811,14 @@ const PATH_MULTIPLY_SIZE = 2.5;
808
811
  setActivePoint(circleId);
809
812
  }
810
813
  }
811
- function _handleHover(x, y, lineHeight, xAxisCalloutData, circleId, xAxisCalloutAccessibilityData, mouseEvent) {
814
+ function _handleHover(x, y, lineHeight, xAxisCalloutData, circleId, xAxisCalloutAccessibilityData, mouseEvent, yScale) {
812
815
  mouseEvent === null || mouseEvent === void 0 ? void 0 : mouseEvent.persist();
813
816
  const formattedData = x instanceof Date ? formatDate(x, props.useUTC) : x;
814
817
  const xVal = x instanceof Date ? x.getTime() : x;
815
818
  const found = find(_calloutPoints, (element)=>element.x === xVal);
816
819
  // if no points need to be called out then don't show vertical line and callout card
817
820
  if (found) {
818
- d3Select(`#${_verticalLine}`).attr('transform', ()=>`translate(${_xAxisScale(x)}, ${_yAxisScale(y)})`).attr('visibility', 'visibility').attr('y2', `${lineHeight - 5 - _yAxisScale(y)}`);
821
+ d3Select(`#${_verticalLine}`).attr('transform', ()=>`translate(${_xAxisScale(x)}, ${yScale(y)})`).attr('visibility', 'visibility').attr('y2', `${lineHeight - 5 - yScale(y)}`);
819
822
  if (_uniqueCallOutID !== circleId) {
820
823
  _uniqueCallOutID = circleId;
821
824
  updatePosition(mouseEvent.clientX, mouseEvent.clientY);
@@ -1003,7 +1006,8 @@ const PATH_MULTIPLY_SIZE = 2.5;
1003
1006
  /* eslint-disable react/jsx-no-bind */ // eslint-disable-next-line react/no-children-prop
1004
1007
  children: (props)=>{
1005
1008
  _xAxisScale = props.xScale;
1006
- _yAxisScale = props.yScale;
1009
+ _yScalePrimary = props.yScalePrimary;
1010
+ _yScaleSecondary = props.yScaleSecondary;
1007
1011
  return /*#__PURE__*/ React.createElement(React.Fragment, null, /*#__PURE__*/ React.createElement("g", null, /*#__PURE__*/ React.createElement("line", {
1008
1012
  x1: 0,
1009
1013
  y1: 0,