@fluentui/react-charts 9.1.1 → 9.1.3

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 (97) hide show
  1. package/CHANGELOG.md +38 -2
  2. package/dist/index.d.ts +89 -6
  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 +17 -13
  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/CommonComponents/useCartesianChartStyles.styles.js +4 -4
  9. package/lib/components/CommonComponents/useCartesianChartStyles.styles.js.map +1 -1
  10. package/lib/components/DeclarativeChart/DeclarativeChart.js +25 -13
  11. package/lib/components/DeclarativeChart/DeclarativeChart.js.map +1 -1
  12. package/lib/components/DeclarativeChart/PlotlySchemaAdapter.js +57 -36
  13. package/lib/components/DeclarativeChart/PlotlySchemaAdapter.js.map +1 -1
  14. package/lib/components/DonutChart/useDonutChartStyles.styles.js +3 -3
  15. package/lib/components/DonutChart/useDonutChartStyles.styles.js.map +1 -1
  16. package/lib/components/GaugeChart/useGaugeChartStyles.styles.js +4 -4
  17. package/lib/components/GaugeChart/useGaugeChartStyles.styles.js.map +1 -1
  18. package/lib/components/GroupedVerticalBarChart/GroupedVerticalBarChart.js +45 -19
  19. package/lib/components/GroupedVerticalBarChart/GroupedVerticalBarChart.js.map +1 -1
  20. package/lib/components/GroupedVerticalBarChart/GroupedVerticalBarChart.types.js.map +1 -1
  21. package/lib/components/HeatMapChart/HeatMapChart.js +1 -1
  22. package/lib/components/HeatMapChart/HeatMapChart.js.map +1 -1
  23. package/lib/components/LineChart/LineChart.js +40 -36
  24. package/lib/components/LineChart/LineChart.js.map +1 -1
  25. package/lib/components/LineChart/eventAnnotation/LabelLink.js +2 -1
  26. package/lib/components/LineChart/eventAnnotation/LabelLink.js.map +1 -1
  27. package/lib/components/ResponsiveContainer/ResponsiveContainer.js +51 -22
  28. package/lib/components/ResponsiveContainer/ResponsiveContainer.js.map +1 -1
  29. package/lib/components/ResponsiveContainer/ResponsiveContainer.types.js.map +1 -1
  30. package/lib/components/ResponsiveContainer/index.js +2 -0
  31. package/lib/components/ResponsiveContainer/index.js.map +1 -1
  32. package/lib/components/ResponsiveContainer/withResponsiveContainer.js +19 -0
  33. package/lib/components/ResponsiveContainer/withResponsiveContainer.js.map +1 -0
  34. package/lib/components/SankeyChart/useSankeyChartStyles.styles.js +3 -3
  35. package/lib/components/SankeyChart/useSankeyChartStyles.styles.js.map +1 -1
  36. package/lib/components/ScatterChart/ScatterChart.js +1 -1
  37. package/lib/components/ScatterChart/ScatterChart.js.map +1 -1
  38. package/lib/components/VerticalBarChart/VerticalBarChart.js +5 -5
  39. package/lib/components/VerticalBarChart/VerticalBarChart.js.map +1 -1
  40. package/lib/components/VerticalStackedBarChart/VerticalStackedBarChart.js +62 -24
  41. package/lib/components/VerticalStackedBarChart/VerticalStackedBarChart.js.map +1 -1
  42. package/lib/components/VerticalStackedBarChart/VerticalStackedBarChart.types.js.map +1 -1
  43. package/lib/types/DataPoint.js.map +1 -1
  44. package/lib/utilities/SVGTooltipText.js +3 -3
  45. package/lib/utilities/SVGTooltipText.js.map +1 -1
  46. package/lib/utilities/utilities.js +27 -36
  47. package/lib/utilities/utilities.js.map +1 -1
  48. package/lib-commonjs/components/AreaChart/AreaChart.js +16 -7
  49. package/lib-commonjs/components/AreaChart/AreaChart.js.map +1 -1
  50. package/lib-commonjs/components/CommonComponents/CartesianChart.js +17 -13
  51. package/lib-commonjs/components/CommonComponents/CartesianChart.js.map +1 -1
  52. package/lib-commonjs/components/CommonComponents/CartesianChart.types.js.map +1 -1
  53. package/lib-commonjs/components/CommonComponents/useCartesianChartStyles.styles.js +5 -5
  54. package/lib-commonjs/components/CommonComponents/useCartesianChartStyles.styles.js.map +1 -1
  55. package/lib-commonjs/components/DeclarativeChart/DeclarativeChart.js +25 -13
  56. package/lib-commonjs/components/DeclarativeChart/DeclarativeChart.js.map +1 -1
  57. package/lib-commonjs/components/DeclarativeChart/PlotlySchemaAdapter.js +57 -36
  58. package/lib-commonjs/components/DeclarativeChart/PlotlySchemaAdapter.js.map +1 -1
  59. package/lib-commonjs/components/DonutChart/useDonutChartStyles.styles.js +4 -4
  60. package/lib-commonjs/components/DonutChart/useDonutChartStyles.styles.js.map +1 -1
  61. package/lib-commonjs/components/GaugeChart/useGaugeChartStyles.styles.js +6 -4
  62. package/lib-commonjs/components/GaugeChart/useGaugeChartStyles.styles.js.map +1 -1
  63. package/lib-commonjs/components/GroupedVerticalBarChart/GroupedVerticalBarChart.js +44 -18
  64. package/lib-commonjs/components/GroupedVerticalBarChart/GroupedVerticalBarChart.js.map +1 -1
  65. package/lib-commonjs/components/GroupedVerticalBarChart/GroupedVerticalBarChart.types.js.map +1 -1
  66. package/lib-commonjs/components/HeatMapChart/HeatMapChart.js +1 -1
  67. package/lib-commonjs/components/HeatMapChart/HeatMapChart.js.map +1 -1
  68. package/lib-commonjs/components/LineChart/LineChart.js +40 -36
  69. package/lib-commonjs/components/LineChart/LineChart.js.map +1 -1
  70. package/lib-commonjs/components/LineChart/eventAnnotation/LabelLink.js +2 -1
  71. package/lib-commonjs/components/LineChart/eventAnnotation/LabelLink.js.map +1 -1
  72. package/lib-commonjs/components/ResponsiveContainer/ResponsiveContainer.js +47 -21
  73. package/lib-commonjs/components/ResponsiveContainer/ResponsiveContainer.js.map +1 -1
  74. package/lib-commonjs/components/ResponsiveContainer/ResponsiveContainer.types.js.map +1 -1
  75. package/lib-commonjs/components/ResponsiveContainer/index.js +2 -0
  76. package/lib-commonjs/components/ResponsiveContainer/index.js.map +1 -1
  77. package/lib-commonjs/components/ResponsiveContainer/withResponsiveContainer.js +27 -0
  78. package/lib-commonjs/components/ResponsiveContainer/withResponsiveContainer.js.map +1 -0
  79. package/lib-commonjs/components/SankeyChart/useSankeyChartStyles.styles.js +4 -4
  80. package/lib-commonjs/components/SankeyChart/useSankeyChartStyles.styles.js.map +1 -1
  81. package/lib-commonjs/components/ScatterChart/ScatterChart.js +1 -1
  82. package/lib-commonjs/components/ScatterChart/ScatterChart.js.map +1 -1
  83. package/lib-commonjs/components/VerticalBarChart/VerticalBarChart.js +5 -5
  84. package/lib-commonjs/components/VerticalBarChart/VerticalBarChart.js.map +1 -1
  85. package/lib-commonjs/components/VerticalStackedBarChart/VerticalStackedBarChart.js +61 -23
  86. package/lib-commonjs/components/VerticalStackedBarChart/VerticalStackedBarChart.js.map +1 -1
  87. package/lib-commonjs/components/VerticalStackedBarChart/VerticalStackedBarChart.types.js.map +1 -1
  88. package/lib-commonjs/types/DataPoint.js.map +1 -1
  89. package/lib-commonjs/utilities/SVGTooltipText.js +3 -3
  90. package/lib-commonjs/utilities/SVGTooltipText.js.map +1 -1
  91. package/lib-commonjs/utilities/utilities.js +27 -36
  92. package/lib-commonjs/utilities/utilities.js.map +1 -1
  93. package/package.json +10 -10
  94. package/lib/components/ResponsiveContainer/useResponsiveContainerStyles.styles.js +0 -23
  95. package/lib/components/ResponsiveContainer/useResponsiveContainerStyles.styles.js.map +0 -1
  96. package/lib-commonjs/components/ResponsiveContainer/useResponsiveContainerStyles.styles.js +0 -47
  97. package/lib-commonjs/components/ResponsiveContainer/useResponsiveContainerStyles.styles.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"sources":["HeatMapChart.tsx"],"sourcesContent":["import * as React from 'react';\nimport { HeatMapChartProps } from './HeatMapChart.types';\nimport { AccessibilityProps, Chart, HeatMapChartData, HeatMapChartDataPoint, Margins } from '../../types/index';\nimport {\n ChartTypes,\n getAccessibleDataObject,\n getColorContrast,\n getTypeOfAxis,\n resolveCSSVariables,\n XAxisTypes,\n YAxisType,\n} from '../../utilities/index';\nimport { formatToLocaleString } from '@fluentui/chart-utilities';\nimport { CartesianChart, ChartPopoverProps, ChildProps } from '../CommonComponents/index';\nimport { useId } from '@fluentui/react-utilities';\nimport { tokens } from '@fluentui/react-theme';\nimport { useHeatMapChartStyles } from './useHeatMapChartStyles.styles';\nimport { Legend, Legends } from '../Legends/index';\nimport { scaleLinear as d3ScaleLinear } from 'd3-scale';\nimport { format as d3Format } from 'd3-format';\nimport { timeFormat as d3TimeFormat } from 'd3-time-format';\n\ntype DataSet = {\n dataSet: RectanglesGraphData;\n yAxisPoints: string[];\n xAxisPoints: string[];\n};\ntype FlattenData = HeatMapChartDataPoint & {\n legend: string;\n};\ntype RectanglesGraphData = { [key: string]: FlattenData[] };\n\nexport const HeatMapChart: React.FunctionComponent<HeatMapChartProps> = React.forwardRef<\n HTMLDivElement,\n HeatMapChartProps\n>((props, forwardedRef) => {\n const classes = useHeatMapChartStyles(props);\n const _stringXAxisDataPoints = React.useRef<string[]>([]);\n const _stringYAxisDataPoints = React.useRef<string[]>([]);\n const _dataSet = React.useRef<RectanglesGraphData>({});\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const _colorScale = React.useRef<any>();\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const _xAxisScale = React.useRef<any>();\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const _yAxisScale = React.useRef<any>();\n const _xAxisType = React.useRef<XAxisTypes>();\n const _yAxisType = React.useRef<YAxisType>();\n const _calloutAnchorPoint = React.useRef<FlattenData | null>(null);\n const _emptyChartId = useId('_HeatMap_empty');\n const _margins = React.useRef<Margins>({});\n const cartesianChartRef = React.useRef<Chart>(null);\n\n const [selectedLegend, setSelectedLegend] = React.useState<string>('');\n const [activeLegend, setActiveLegend] = React.useState<string>('');\n const [isPopoverOpen, setPopoverOpen] = React.useState<boolean>(false);\n const [calloutLegend, setCalloutLegend] = React.useState<string>('');\n const [calloutTextColor, setCalloutTextColor] = React.useState<string>('');\n const [calloutYValue, setCalloutYValue] = React.useState<string>('');\n const [ratio, setRatio] = React.useState<[number, number]>();\n const [descriptionMessage, setDescriptionMessage] = React.useState<string>('');\n const [callOutAccessibilityData, setCallOutAccessibilityData] = React.useState<AccessibilityProps>();\n const [clickPosition, setClickPosition] = React.useState({ x: 0, y: 0 });\n\n React.useImperativeHandle(\n props.componentRef,\n () => ({\n chartContainer: cartesianChartRef.current?.chartContainer ?? null,\n }),\n [],\n );\n\n const _getXandY = (): { x: string | Date | number; y: string | Date | number } => {\n let x: string | Date | number = '';\n let y: string | Date | number = '';\n props.data.forEach((item: HeatMapChartData) => {\n if (item.data && item.data.length > 0) {\n x = item.data[0].x;\n y = item.data[0].y;\n return { x, y };\n }\n });\n return { x, y };\n };\n\n const _getMargins = (margins: Margins) => {\n _margins.current = margins;\n };\n\n const _getOpacity = (legendTitle: string): string => {\n const opacity = _legendHighlighted(legendTitle) || _noLegendHighlighted() ? '1' : '0.1';\n return opacity;\n };\n\n const _onRectFocus = (id: string, data: FlattenData, focusEvent: React.FocusEvent<SVGGElement>): void => {\n const boundingRect = focusEvent.currentTarget.getBoundingClientRect();\n const clientX = boundingRect.left + boundingRect.width / 2;\n const clientY = boundingRect.top + boundingRect.height / 2;\n updatePosition(clientX, clientY);\n /** Show the callout if highlighted rectangle is focused and Hide it if unhighlighted rectangle is focused */\n setPopoverOpen(selectedLegend === '' || selectedLegend === data.legend);\n setCalloutYValue(`${data.rectText}`);\n setCalloutTextColor(Number.isNaN(data.value) ? tokens.colorNeutralForeground1 : _colorScale.current(data.value));\n setCalloutLegend(data.legend);\n setRatio(data.ratio);\n setDescriptionMessage(data.descriptionMessage || '');\n setCallOutAccessibilityData(data.callOutAccessibilityData);\n };\n\n const _onRectMouseOver = (id: string, data: FlattenData, mouseEvent: React.MouseEvent<SVGGElement>): void => {\n mouseEvent.persist();\n if (_calloutAnchorPoint.current !== data) {\n _calloutAnchorPoint.current = data;\n updatePosition(mouseEvent.clientX, mouseEvent.clientY);\n /** Show the callout if highlighted rectangle is hovered and Hide it if unhighlighted rectangle is hovered */\n setPopoverOpen(selectedLegend === '' || selectedLegend === data.legend);\n setCalloutYValue(`${data.rectText}`);\n setCalloutTextColor(Number.isNaN(data.value) ? tokens.colorNeutralForeground1 : _colorScale.current(data.value));\n setCalloutLegend(data.legend);\n setRatio(data.ratio);\n setDescriptionMessage(data.descriptionMessage || '');\n setCallOutAccessibilityData(data.callOutAccessibilityData);\n }\n };\n\n const _onRectBlurOrMouseOut = (): void => {\n /**/\n };\n\n const _handleChartMouseLeave = (): void => {\n _calloutAnchorPoint.current = null;\n setPopoverOpen(false);\n };\n\n const _getInvertedTextColor = (color: string): string => {\n return color === tokens.colorNeutralForeground1 ? tokens.colorNeutralBackground1 : tokens.colorNeutralForeground1;\n };\n\n /**\n * This is the function which is responsible for\n * drawing the rectangle in the graph and also\n * attaching dom events to that rectangles\n */\n const _createRectangles = (): React.ReactNode => {\n const rectangles: JSX.Element[] = [];\n const yAxisDataPoints = _stringYAxisDataPoints.current.slice().reverse();\n /**\n * yAxisDataPoint is noting but the DataPoint\n * which will be rendered on the y-axis\n */\n yAxisDataPoints.forEach((yAxisDataPoint: string) => {\n let index = 0;\n _stringXAxisDataPoints.current.forEach((xAxisDataPoint: string) => {\n let rectElement: JSX.Element;\n const id = `x${xAxisDataPoint}y${yAxisDataPoint}`;\n if (\n _dataSet.current[yAxisDataPoint][index]?.x === xAxisDataPoint &&\n typeof _dataSet.current[yAxisDataPoint][index]?.value === 'number'\n ) {\n /**\n * dataPointObject is an object where it contains information on single\n * data point such as x, y , value, rectText property of the rectangle\n */\n const dataPointObject = _dataSet.current[yAxisDataPoint][index];\n let styleRules = '';\n let foregroundColor = tokens.colorNeutralForeground1;\n if (cartesianChartRef.current?.chartContainer) {\n styleRules = resolveCSSVariables(cartesianChartRef.current.chartContainer, foregroundColor);\n }\n const contrastRatio = getColorContrast(styleRules, _colorScale.current(dataPointObject.value));\n if (contrastRatio < 3) {\n foregroundColor = _getInvertedTextColor(foregroundColor);\n }\n rectElement = (\n <g\n key={id}\n role=\"img\"\n aria-label={_getAriaLabel(dataPointObject)}\n tabIndex={_legendHighlighted(dataPointObject.legend) || _noLegendHighlighted() ? 0 : -1}\n fillOpacity={_getOpacity(dataPointObject.legend)}\n transform={`translate(${_xAxisScale.current(dataPointObject.x)}, ${_yAxisScale.current(\n dataPointObject.y,\n )})`}\n onFocus={e => _onRectFocus(id, dataPointObject, e)}\n onBlur={_onRectBlurOrMouseOut}\n onMouseOver={e => _onRectMouseOver(id, dataPointObject, e)}\n onMouseOut={_onRectBlurOrMouseOut}\n >\n <rect\n fill={_colorScale.current(dataPointObject.value)}\n width={_xAxisScale.current.bandwidth()}\n height={_yAxisScale.current.bandwidth()}\n onClick={dataPointObject.onClick}\n />\n <text\n dominantBaseline={'middle'}\n textAnchor={'middle'}\n className={classes.text}\n transform={`translate(${_xAxisScale.current.bandwidth() / 2}, ${_yAxisScale.current.bandwidth() / 2})`}\n fill={foregroundColor}\n >\n {formatToLocaleString(dataPointObject.rectText, props.culture, props.useUTC)}\n </text>\n </g>\n );\n index++;\n } else {\n const dataPointObject: FlattenData = {\n x: xAxisDataPoint,\n y: yAxisDataPoint,\n value: NaN,\n rectText: 'No data available',\n legend: '',\n };\n rectElement = (\n <g\n key={id}\n role=\"img\"\n aria-label={_getAriaLabel(dataPointObject)}\n tabIndex={_noLegendHighlighted() ? 0 : -1}\n transform={`translate(${_xAxisScale.current(dataPointObject.x)}, ${_yAxisScale.current(\n dataPointObject.y,\n )})`}\n onFocus={e => _onRectFocus(id, dataPointObject, e)}\n onBlur={_onRectBlurOrMouseOut}\n onMouseOver={e => _onRectMouseOver(id, dataPointObject, e)}\n onMouseOut={_onRectBlurOrMouseOut}\n >\n <rect\n fill=\"transparent\"\n width={_xAxisScale.current.bandwidth()}\n height={_yAxisScale.current.bandwidth()}\n />\n </g>\n );\n }\n rectangles.push(rectElement);\n });\n });\n return rectangles;\n };\n /**\n * when the legend is hovered we need to highlight\n * all the rectangles which fall under that category\n * and un-highlight the rest of them\n * @param legendTitle\n */\n const _onLegendHover = (legendTitle: string): void => {\n setActiveLegend(legendTitle);\n };\n\n /**\n * when the mouse is out from the legend , we need\n * to show the graph in initial mode.\n */\n const _onLegendLeave = (): void => {\n setActiveLegend('');\n };\n /**\n * @param legendTitle\n * when the legend is clicked we need to highlight\n * all the rectangles which fall under that category\n * and un highlight the rest of them\n */\n const _onLegendClick = (legendTitle: string): void => {\n /**\n * check if the legend is already selceted,\n * if yes, un-select the legend, else\n * set the selected legend state to legendTitle\n */\n if (selectedLegend === legendTitle) {\n setSelectedLegend('');\n } else {\n setSelectedLegend(legendTitle);\n }\n };\n const _createLegendBars = (): JSX.Element => {\n const { data, legendProps } = props;\n const legends: Legend[] = [];\n data.forEach((item: HeatMapChartData) => {\n const legend: Legend = {\n title: item.legend,\n color: _colorScale.current(item.value),\n action: () => {\n _onLegendClick(item.legend);\n },\n hoverAction: () => {\n _handleChartMouseLeave();\n _onLegendHover(item.legend);\n },\n onMouseOutAction: () => {\n _onLegendLeave();\n },\n };\n legends.push(legend);\n });\n return <Legends {...legendProps} legends={legends} />;\n };\n\n const _getColorScale = () => {\n const { domainValuesForColorScale, rangeValuesForColorScale } = props;\n return d3ScaleLinear()\n .domain(domainValuesForColorScale)\n .range(rangeValuesForColorScale as unknown as number[]);\n };\n\n const _getXIndex = (value: string | Date | number): string => {\n if (_xAxisType.current === XAxisTypes.DateAxis) {\n return `${(value as Date).getTime()}`;\n } else if (_xAxisType.current === XAxisTypes.StringAxis) {\n return value as string;\n } else if (_xAxisType.current === XAxisTypes.NumericAxis) {\n return `${value}`;\n } else {\n return '';\n }\n };\n const _getYIndex = (value: string | Date | number): string => {\n if (_yAxisType.current === YAxisType.DateAxis) {\n return `${(value as Date).getTime()}`;\n } else if (_yAxisType.current === YAxisType.StringAxis) {\n return value as string;\n } else if (_yAxisType.current === YAxisType.NumericAxis) {\n return `${value}`;\n } else {\n return '';\n }\n };\n\n const { xAxisStringFormatter } = props;\n const _getFormattedLabelForXAxisDataPoint = React.useCallback(\n (point: string): string => {\n return xAxisStringFormatter ? xAxisStringFormatter(point) : point;\n },\n [xAxisStringFormatter],\n );\n\n const { yAxisStringFormatter } = props;\n const _getFormattedLabelForYAxisDataPoint = React.useCallback(\n (point: string): string => {\n return yAxisStringFormatter ? yAxisStringFormatter(point) : point;\n },\n [yAxisStringFormatter],\n );\n\n /**\n * This function will return the final sorted and formatted x-axis points\n * which will be rendered on the x-axis\n * @param points\n * @returns x-axis points\n */\n const _getXAxisDataPoints = React.useCallback(\n (points: { [key: string]: '1' }): string[] => {\n let xAxisPoints: string[] = [];\n const unFormattedXAxisDataPoints = Object.keys(points).sort((a: string, b: string) => {\n if (_xAxisType.current === XAxisTypes.DateAxis || _xAxisType.current === XAxisTypes.NumericAxis) {\n return +a - +b;\n } else {\n return props.sortOrder === 'none' ? 0 : a.toLowerCase() > b.toLowerCase() ? 1 : -1;\n }\n });\n xAxisPoints = unFormattedXAxisDataPoints.map((xPoint: string) => {\n if (_xAxisType.current === XAxisTypes.DateAxis) {\n return _getStringFormattedDate(xPoint, props.xAxisDateFormatString);\n } else if (_xAxisType.current === XAxisTypes.NumericAxis) {\n return _getStringFormattedNumber(xPoint, props.xAxisNumberFormatString);\n } else {\n return _getFormattedLabelForXAxisDataPoint(xPoint);\n }\n });\n\n return xAxisPoints;\n },\n [_getFormattedLabelForXAxisDataPoint, props.sortOrder, props.xAxisDateFormatString, props.xAxisNumberFormatString],\n );\n\n /**\n * This function will return the final sorted and formatted y-axis points\n * which will be rendered on the y-axis\n * @param points\n * @returns yaxis points\n */\n const _getYAxisDataPoints = React.useCallback(\n (points: { [key: string]: '1' }): string[] => {\n let yAxisPoints: string[] = [];\n const unFormattedYAxisDataPoints = Object.keys(points).sort((a: string, b: string) => {\n if (_yAxisType.current === YAxisType.DateAxis || _yAxisType.current === YAxisType.NumericAxis) {\n return +a - +b;\n } else {\n return props.sortOrder === 'none' ? 0 : a.toLowerCase() > b.toLowerCase() ? 1 : -1;\n }\n });\n yAxisPoints = unFormattedYAxisDataPoints.map((yPoint: string) => {\n if (_yAxisType.current === YAxisType.DateAxis) {\n return _getStringFormattedDate(yPoint, props.yAxisDateFormatString);\n } else if (_yAxisType.current === YAxisType.NumericAxis) {\n return _getStringFormattedNumber(yPoint, props.yAxisNumberFormatString);\n } else {\n return _getFormattedLabelForYAxisDataPoint(yPoint);\n }\n });\n\n return yAxisPoints;\n },\n [_getFormattedLabelForYAxisDataPoint, props.sortOrder, props.yAxisDateFormatString, props.yAxisNumberFormatString],\n );\n\n /**\n * This will create a new data set based on the prop\n * @data\n * We will be using This data set to contsruct our rectangles\n * in the chart, we use this data set becuase, when we loop in this\n * data and build the heat map, it will support accessibility as\n * specified in the figma\n */\n\n const _createNewDataSet = React.useCallback(\n (\n data: HeatMapChartData[],\n xAxisDateFormatString: string | undefined,\n xAxisNumberFormatString: string | undefined,\n yAxisDateFormatString: string | undefined,\n yAxisNumberFormatString: string | undefined,\n ): DataSet => {\n /**\n * please do not destructure any of the props here,\n * instead send them as parameter to this functions so that\n * this functions get called whenever the prop changes\n */\n const flattenData: FlattenData[] = [];\n /**\n * below for each loop will store all the datapoints in the one array.\n * basically it will flatten the nestesd array (data prop) into single array\n * of object. where each object contains x, y, rectText , value and legend propety of single\n * data point.\n */\n data.forEach((item: HeatMapChartData) => {\n item.data.forEach((point: HeatMapChartDataPoint) => {\n flattenData.push({ ...point, legend: item.legend });\n });\n });\n const yPoints: RectanglesGraphData = {};\n const uniqueYPoints: { [key: string]: '1' } = {};\n const uniqueXPoints: { [key: string]: '1' } = {};\n flattenData.forEach((item: FlattenData) => {\n const posX = _getXIndex(item.x);\n const posY = _getYIndex(item.y);\n\n uniqueXPoints[posX] = '1';\n uniqueYPoints[posY] = '1';\n /** we will check if the property(posY) is already there in object, if Yes,\n * then we will append the item in the Array related to the pos, if not\n * then we will simply append the item in the new Array and\n * assign that array to the property (posY) in the Object\n * and finally we will get the array of Objects associated to each\n * property (which is nothing but y data point) and object in the\n * array are noting but x data points associated to the property y\n */\n if (yPoints[posY]) {\n yPoints[posY] = [...yPoints[posY], item];\n } else {\n yPoints[posY] = [item];\n }\n });\n /**\n * we will now sort(ascending) the array's of y data point based on the x value\n * sorting is important to achive the accessibility order of the\n * rectangles and then format the x and y datapoints respectively\n */\n Object.keys(yPoints).forEach((item: string) => {\n yPoints[item]\n .sort((a: HeatMapChartDataPoint, b: HeatMapChartDataPoint) => {\n if (_xAxisType.current === XAxisTypes.StringAxis) {\n return props.sortOrder === 'none'\n ? 0\n : (a.x as string).toLowerCase() > (b.x as string).toLowerCase()\n ? 1\n : -1;\n } else if (_xAxisType.current === XAxisTypes.DateAxis) {\n return (a.x as Date).getTime() - (b.x as Date).getTime();\n } else if (_xAxisType.current === XAxisTypes.NumericAxis) {\n return +(a.x as string) > +(b.x as string) ? 1 : -1;\n } else {\n return a.x > b.x ? 1 : -1;\n }\n })\n .forEach((datapoint: HeatMapChartDataPoint) => {\n if (_xAxisType.current === XAxisTypes.DateAxis) {\n datapoint.x = _getStringFormattedDate(datapoint.x as string, xAxisDateFormatString);\n }\n if (_xAxisType.current === XAxisTypes.NumericAxis) {\n datapoint.x = _getStringFormattedNumber(datapoint.x as string, xAxisNumberFormatString);\n }\n if (_xAxisType.current === XAxisTypes.StringAxis) {\n datapoint.x = _getFormattedLabelForXAxisDataPoint(datapoint.x as string);\n }\n if (_yAxisType.current === YAxisType.DateAxis) {\n datapoint.y = _getStringFormattedDate(datapoint.y as string, yAxisDateFormatString);\n }\n if (_yAxisType.current === YAxisType.NumericAxis) {\n datapoint.y = _getStringFormattedNumber(datapoint.y as string, yAxisNumberFormatString);\n }\n if (_yAxisType.current === YAxisType.StringAxis) {\n datapoint.y = _getFormattedLabelForYAxisDataPoint(datapoint.y as string);\n }\n });\n });\n /**\n * if y-axis data points are of type date or number or if we have string formatter,\n * then we need to change data points to their respective string\n * format, becuase in the private variable this._stringYAxisDatapoints, points will be stored in\n * string format. and in here `yPoint` are not so we need to change, so that\n * function `this._createRectangles` should work perfetcly while looping, and if we don't change\n * then `this._createRectangles` will fail while looping, causing the error\n * Cannot read property 'forEach' of undefined\n */\n\n Object.keys(yPoints).forEach((yPoint: string) => {\n if (_yAxisType.current === YAxisType.DateAxis) {\n yPoints[_getStringFormattedDate(yPoint, yAxisDateFormatString)] = yPoints[yPoint];\n } else if (_yAxisType.current === YAxisType.NumericAxis) {\n yPoints[`${_getStringFormattedNumber(yPoint, yAxisNumberFormatString)}`] = yPoints[yPoint];\n } else {\n yPoints[_getFormattedLabelForYAxisDataPoint(yPoint)] = yPoints[yPoint];\n }\n });\n /**\n * assigning new data set\n */\n const dataSet = yPoints;\n /**\n * These are the Y axis data points which will get rendered in the\n * Y axis in graph\n */\n const yAxisPoints = _getYAxisDataPoints(uniqueYPoints);\n /**\n * These are the x axis data points which will get rendered in the\n * x axis in the graph\n */\n\n const xAxisPoints = _getXAxisDataPoints(uniqueXPoints);\n return {\n dataSet,\n yAxisPoints,\n xAxisPoints,\n };\n },\n [\n _getFormattedLabelForXAxisDataPoint,\n _getFormattedLabelForYAxisDataPoint,\n _getXAxisDataPoints,\n _getYAxisDataPoints,\n props.sortOrder,\n ],\n );\n\n const _getStringFormattedDate = (point: string, formatString?: string): string => {\n const date = new Date();\n date.setTime(+point);\n return d3TimeFormat(formatString || '%b/%d')(date);\n };\n\n const _getStringFormattedNumber = (point: string, formatString?: string): string => {\n return d3Format(formatString || '.2~s')(+point);\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 const _legendHighlighted = (legendTitle: string) => {\n return selectedLegend === legendTitle || (selectedLegend === '' && activeLegend === legendTitle);\n };\n\n /**\n * This function checks if none of the legends is selected or hovered.\n */\n const _noLegendHighlighted = () => {\n return selectedLegend === '' && activeLegend === '';\n };\n\n const _getAriaLabel = (point: FlattenData): string => {\n const xValue = point.x;\n const yValue = point.y;\n const legend = point.legend;\n const zValue = point.ratio ? `${point.ratio[0]}/${point.ratio[1]}` : point.rectText || point.value;\n const description = point.descriptionMessage;\n return (\n point.callOutAccessibilityData?.ariaLabel ||\n `${xValue}, ${yValue}. ${legend}, ${zValue}.` + (description ? ` ${description}.` : '')\n );\n };\n\n const _isChartEmpty = (): boolean => {\n return !(props.data && props.data.length > 0);\n };\n\n const _getChartTitle = (): string => {\n const { chartTitle } = props;\n const numDataPoints = props.data.reduce((acc, curr) => acc + curr.data.length, 0);\n return (chartTitle ? `${chartTitle}. ` : '') + `Heat map chart with ${numDataPoints} data points. `;\n };\n\n const updatePosition = (newX: number, newY: number) => {\n const threshold = 1; // Set a threshold for movement\n const { x, y } = clickPosition;\n // Calculate the distance moved\n const distance = Math.sqrt(Math.pow(newX - x, 2) + Math.pow(newY - y, 2));\n // Update the position only if the distance moved is greater than the threshold\n if (distance > threshold) {\n setClickPosition({ x: newX, y: newY });\n }\n };\n\n const { x, y } = _getXandY();\n _xAxisType.current = getTypeOfAxis(x, true) as XAxisTypes;\n _yAxisType.current = getTypeOfAxis(y, false) as YAxisType;\n const { data, xAxisDateFormatString, xAxisNumberFormatString, yAxisDateFormatString, yAxisNumberFormatString } =\n props;\n _colorScale.current = _getColorScale();\n const { dataSet, xAxisPoints, yAxisPoints } = React.useMemo(\n () =>\n _createNewDataSet(\n data,\n xAxisDateFormatString,\n xAxisNumberFormatString,\n yAxisDateFormatString,\n yAxisNumberFormatString,\n ),\n [\n _createNewDataSet,\n data,\n xAxisDateFormatString,\n xAxisNumberFormatString,\n yAxisDateFormatString,\n yAxisNumberFormatString,\n ],\n );\n _dataSet.current = dataSet;\n _stringYAxisDataPoints.current = yAxisPoints;\n _stringXAxisDataPoints.current = xAxisPoints;\n const calloutProps: ChartPopoverProps = {\n ...props.calloutProps,\n isPopoverOpen,\n YValue: calloutYValue,\n legend: calloutLegend,\n color: calloutTextColor,\n ratio,\n descriptionMessage,\n clickPosition,\n ...getAccessibleDataObject(callOutAccessibilityData, 'text', false),\n };\n const tickParams = {\n tickValues: props.tickValues,\n tickFormat: props.tickFormat,\n };\n return !_isChartEmpty() ? (\n <CartesianChart\n {...props}\n chartTitle={_getChartTitle()}\n points={data}\n chartType={ChartTypes.HeatMapChart}\n xAxisType={XAxisTypes.StringAxis}\n yAxisType={YAxisType.StringAxis}\n calloutProps={calloutProps}\n datasetForXAxisDomain={_stringXAxisDataPoints.current}\n stringDatasetForYAxisDomain={_stringYAxisDataPoints.current}\n getmargins={_getMargins}\n xAxisTickCount={_stringXAxisDataPoints.current.length}\n xAxistickSize={0}\n xAxisPadding={0.02}\n yAxisPadding={0.02}\n legendBars={_createLegendBars()}\n onChartMouseLeave={_handleChartMouseLeave}\n componentRef={cartesianChartRef}\n tickParams={tickParams}\n /* eslint-disable react/jsx-no-bind */\n children={(p: ChildProps) => {\n _xAxisScale.current = p.xScale;\n _yAxisScale.current = p.yScale;\n return _createRectangles();\n }}\n />\n ) : (\n <div id={_emptyChartId} role={'alert'} style={{ opacity: '0' }} aria-label={'Graph has no data to display'} />\n );\n});\n"],"names":["HeatMapChart","React","forwardRef","props","forwardedRef","classes","useHeatMapChartStyles","_stringXAxisDataPoints","useRef","_stringYAxisDataPoints","_dataSet","_colorScale","_xAxisScale","_yAxisScale","_xAxisType","_yAxisType","_calloutAnchorPoint","_emptyChartId","useId","_margins","cartesianChartRef","selectedLegend","setSelectedLegend","useState","activeLegend","setActiveLegend","isPopoverOpen","setPopoverOpen","calloutLegend","setCalloutLegend","calloutTextColor","setCalloutTextColor","calloutYValue","setCalloutYValue","ratio","setRatio","descriptionMessage","setDescriptionMessage","callOutAccessibilityData","setCallOutAccessibilityData","clickPosition","setClickPosition","x","y","useImperativeHandle","componentRef","chartContainer","current","_getXandY","data","forEach","item","length","_getMargins","margins","_getOpacity","legendTitle","opacity","_legendHighlighted","_noLegendHighlighted","_onRectFocus","id","focusEvent","boundingRect","currentTarget","getBoundingClientRect","clientX","left","width","clientY","top","height","updatePosition","legend","rectText","Number","isNaN","value","tokens","colorNeutralForeground1","_onRectMouseOver","mouseEvent","persist","_onRectBlurOrMouseOut","_handleChartMouseLeave","_getInvertedTextColor","color","colorNeutralBackground1","_createRectangles","rectangles","yAxisDataPoints","slice","reverse","yAxisDataPoint","index","xAxisDataPoint","rectElement","dataPointObject","styleRules","foregroundColor","resolveCSSVariables","contrastRatio","getColorContrast","createElement","g","key","role","aria-label","_getAriaLabel","tabIndex","fillOpacity","transform","onFocus","e","onBlur","onMouseOver","onMouseOut","rect","fill","bandwidth","onClick","text","dominantBaseline","textAnchor","className","formatToLocaleString","culture","useUTC","NaN","push","_onLegendHover","_onLegendLeave","_onLegendClick","_createLegendBars","legendProps","legends","title","action","hoverAction","onMouseOutAction","Legends","_getColorScale","domainValuesForColorScale","rangeValuesForColorScale","d3ScaleLinear","domain","range","_getXIndex","XAxisTypes","DateAxis","getTime","StringAxis","NumericAxis","_getYIndex","YAxisType","xAxisStringFormatter","_getFormattedLabelForXAxisDataPoint","useCallback","point","yAxisStringFormatter","_getFormattedLabelForYAxisDataPoint","_getXAxisDataPoints","points","xAxisPoints","unFormattedXAxisDataPoints","Object","keys","sort","a","b","sortOrder","toLowerCase","map","xPoint","_getStringFormattedDate","xAxisDateFormatString","_getStringFormattedNumber","xAxisNumberFormatString","_getYAxisDataPoints","yAxisPoints","unFormattedYAxisDataPoints","yPoint","yAxisDateFormatString","yAxisNumberFormatString","_createNewDataSet","flattenData","yPoints","uniqueYPoints","uniqueXPoints","posX","posY","datapoint","dataSet","formatString","date","Date","setTime","d3TimeFormat","d3Format","xValue","yValue","zValue","description","ariaLabel","_isChartEmpty","_getChartTitle","chartTitle","numDataPoints","reduce","acc","curr","newX","newY","threshold","distance","Math","sqrt","pow","getTypeOfAxis","useMemo","calloutProps","YValue","getAccessibleDataObject","tickParams","tickValues","tickFormat","CartesianChart","chartType","ChartTypes","xAxisType","yAxisType","datasetForXAxisDomain","stringDatasetForYAxisDomain","getmargins","xAxisTickCount","xAxistickSize","xAxisPadding","yAxisPadding","legendBars","onChartMouseLeave","children","p","xScale","yScale","div","style"],"rangeMappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;","mappings":"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"}
1
+ {"version":3,"sources":["HeatMapChart.tsx"],"sourcesContent":["import * as React from 'react';\nimport { HeatMapChartProps } from './HeatMapChart.types';\nimport { AccessibilityProps, Chart, HeatMapChartData, HeatMapChartDataPoint, Margins } from '../../types/index';\nimport {\n ChartTypes,\n getAccessibleDataObject,\n getColorContrast,\n getTypeOfAxis,\n resolveCSSVariables,\n XAxisTypes,\n YAxisType,\n} from '../../utilities/index';\nimport { formatToLocaleString } from '@fluentui/chart-utilities';\nimport { CartesianChart, ChartPopoverProps, ChildProps } from '../CommonComponents/index';\nimport { useId } from '@fluentui/react-utilities';\nimport { tokens } from '@fluentui/react-theme';\nimport { useHeatMapChartStyles } from './useHeatMapChartStyles.styles';\nimport { Legend, Legends } from '../Legends/index';\nimport { scaleLinear as d3ScaleLinear } from 'd3-scale';\nimport { format as d3Format } from 'd3-format';\nimport { timeFormat as d3TimeFormat } from 'd3-time-format';\n\ntype DataSet = {\n dataSet: RectanglesGraphData;\n yAxisPoints: string[];\n xAxisPoints: string[];\n};\ntype FlattenData = HeatMapChartDataPoint & {\n legend: string;\n};\ntype RectanglesGraphData = { [key: string]: FlattenData[] };\n\nexport const HeatMapChart: React.FunctionComponent<HeatMapChartProps> = React.forwardRef<\n HTMLDivElement,\n HeatMapChartProps\n>((props, forwardedRef) => {\n const classes = useHeatMapChartStyles(props);\n const _stringXAxisDataPoints = React.useRef<string[]>([]);\n const _stringYAxisDataPoints = React.useRef<string[]>([]);\n const _dataSet = React.useRef<RectanglesGraphData>({});\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const _colorScale = React.useRef<any>();\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const _xAxisScale = React.useRef<any>();\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const _yAxisScale = React.useRef<any>();\n const _xAxisType = React.useRef<XAxisTypes>();\n const _yAxisType = React.useRef<YAxisType>();\n const _calloutAnchorPoint = React.useRef<FlattenData | null>(null);\n const _emptyChartId = useId('_HeatMap_empty');\n const _margins = React.useRef<Margins>({});\n const cartesianChartRef = React.useRef<Chart>(null);\n\n const [selectedLegend, setSelectedLegend] = React.useState<string>('');\n const [activeLegend, setActiveLegend] = React.useState<string>('');\n const [isPopoverOpen, setPopoverOpen] = React.useState<boolean>(false);\n const [calloutLegend, setCalloutLegend] = React.useState<string>('');\n const [calloutTextColor, setCalloutTextColor] = React.useState<string>('');\n const [calloutYValue, setCalloutYValue] = React.useState<string>('');\n const [ratio, setRatio] = React.useState<[number, number]>();\n const [descriptionMessage, setDescriptionMessage] = React.useState<string>('');\n const [callOutAccessibilityData, setCallOutAccessibilityData] = React.useState<AccessibilityProps>();\n const [clickPosition, setClickPosition] = React.useState({ x: 0, y: 0 });\n\n React.useImperativeHandle(\n props.componentRef,\n () => ({\n chartContainer: cartesianChartRef.current?.chartContainer ?? null,\n }),\n [],\n );\n\n const _getXandY = (): { x: string | Date | number; y: string | Date | number } => {\n let x: string | Date | number = '';\n let y: string | Date | number = '';\n props.data.forEach((item: HeatMapChartData) => {\n if (item.data && item.data.length > 0) {\n x = item.data[0].x;\n y = item.data[0].y;\n return { x, y };\n }\n });\n return { x, y };\n };\n\n const _getMargins = (margins: Margins) => {\n _margins.current = margins;\n };\n\n const _getOpacity = (legendTitle: string): string => {\n const opacity = _legendHighlighted(legendTitle) || _noLegendHighlighted() ? '1' : '0.1';\n return opacity;\n };\n\n const _onRectFocus = (id: string, data: FlattenData, focusEvent: React.FocusEvent<SVGGElement>): void => {\n const boundingRect = focusEvent.currentTarget.getBoundingClientRect();\n const clientX = boundingRect.left + boundingRect.width / 2;\n const clientY = boundingRect.top + boundingRect.height / 2;\n updatePosition(clientX, clientY);\n /** Show the callout if highlighted rectangle is focused and Hide it if unhighlighted rectangle is focused */\n setPopoverOpen(selectedLegend === '' || selectedLegend === data.legend);\n setCalloutYValue(`${data.rectText}`);\n setCalloutTextColor(Number.isNaN(data.value) ? tokens.colorNeutralForeground1 : _colorScale.current(data.value));\n setCalloutLegend(data.legend);\n setRatio(data.ratio);\n setDescriptionMessage(data.descriptionMessage || '');\n setCallOutAccessibilityData(data.callOutAccessibilityData);\n };\n\n const _onRectMouseOver = (id: string, data: FlattenData, mouseEvent: React.MouseEvent<SVGGElement>): void => {\n mouseEvent.persist();\n if (_calloutAnchorPoint.current !== data) {\n _calloutAnchorPoint.current = data;\n updatePosition(mouseEvent.clientX, mouseEvent.clientY);\n /** Show the callout if highlighted rectangle is hovered and Hide it if unhighlighted rectangle is hovered */\n setPopoverOpen(selectedLegend === '' || selectedLegend === data.legend);\n setCalloutYValue(`${data.rectText}`);\n setCalloutTextColor(Number.isNaN(data.value) ? tokens.colorNeutralForeground1 : _colorScale.current(data.value));\n setCalloutLegend(data.legend);\n setRatio(data.ratio);\n setDescriptionMessage(data.descriptionMessage || '');\n setCallOutAccessibilityData(data.callOutAccessibilityData);\n }\n };\n\n const _onRectBlurOrMouseOut = (): void => {\n /**/\n };\n\n const _handleChartMouseLeave = (): void => {\n _calloutAnchorPoint.current = null;\n setPopoverOpen(false);\n };\n\n const _getInvertedTextColor = (color: string): string => {\n return color === tokens.colorNeutralForeground1 ? tokens.colorNeutralBackground1 : tokens.colorNeutralForeground1;\n };\n\n /**\n * This is the function which is responsible for\n * drawing the rectangle in the graph and also\n * attaching dom events to that rectangles\n */\n const _createRectangles = (): React.ReactNode => {\n const rectangles: JSX.Element[] = [];\n const yAxisDataPoints = _stringYAxisDataPoints.current.slice().reverse();\n /**\n * yAxisDataPoint is noting but the DataPoint\n * which will be rendered on the y-axis\n */\n yAxisDataPoints.forEach((yAxisDataPoint: string) => {\n let index = 0;\n _stringXAxisDataPoints.current.forEach((xAxisDataPoint: string) => {\n let rectElement: JSX.Element;\n const id = `x${xAxisDataPoint}y${yAxisDataPoint}`;\n if (\n _dataSet.current[yAxisDataPoint][index]?.x === xAxisDataPoint &&\n typeof _dataSet.current[yAxisDataPoint][index]?.value === 'number'\n ) {\n /**\n * dataPointObject is an object where it contains information on single\n * data point such as x, y , value, rectText property of the rectangle\n */\n const dataPointObject = _dataSet.current[yAxisDataPoint][index];\n let styleRules = '';\n let foregroundColor = tokens.colorNeutralForeground1;\n if (cartesianChartRef.current?.chartContainer) {\n styleRules = resolveCSSVariables(cartesianChartRef.current.chartContainer, foregroundColor);\n }\n const contrastRatio = getColorContrast(styleRules, _colorScale.current(dataPointObject.value));\n if (contrastRatio < 3) {\n foregroundColor = _getInvertedTextColor(foregroundColor);\n }\n rectElement = (\n <g\n key={id}\n role=\"img\"\n aria-label={_getAriaLabel(dataPointObject)}\n tabIndex={_legendHighlighted(dataPointObject.legend) || _noLegendHighlighted() ? 0 : -1}\n fillOpacity={_getOpacity(dataPointObject.legend)}\n transform={`translate(${_xAxisScale.current(dataPointObject.x)}, ${_yAxisScale.current(\n dataPointObject.y,\n )})`}\n onFocus={e => _onRectFocus(id, dataPointObject, e)}\n onBlur={_onRectBlurOrMouseOut}\n onMouseOver={e => _onRectMouseOver(id, dataPointObject, e)}\n onMouseOut={_onRectBlurOrMouseOut}\n >\n <rect\n fill={_colorScale.current(dataPointObject.value)}\n width={_xAxisScale.current.bandwidth()}\n height={_yAxisScale.current.bandwidth()}\n onClick={dataPointObject.onClick}\n />\n <text\n dominantBaseline={'middle'}\n textAnchor={'middle'}\n className={classes.text}\n transform={`translate(${_xAxisScale.current.bandwidth() / 2}, ${_yAxisScale.current.bandwidth() / 2})`}\n fill={foregroundColor}\n >\n {formatToLocaleString(dataPointObject.rectText, props.culture, props.useUTC)}\n </text>\n </g>\n );\n index++;\n } else {\n const dataPointObject: FlattenData = {\n x: xAxisDataPoint,\n y: yAxisDataPoint,\n value: NaN,\n rectText: 'No data available',\n legend: '',\n };\n rectElement = (\n <g\n key={id}\n role=\"img\"\n aria-label={_getAriaLabel(dataPointObject)}\n tabIndex={_noLegendHighlighted() ? 0 : -1}\n transform={`translate(${_xAxisScale.current(dataPointObject.x)}, ${_yAxisScale.current(\n dataPointObject.y,\n )})`}\n onFocus={e => _onRectFocus(id, dataPointObject, e)}\n onBlur={_onRectBlurOrMouseOut}\n onMouseOver={e => _onRectMouseOver(id, dataPointObject, e)}\n onMouseOut={_onRectBlurOrMouseOut}\n >\n <rect\n fill=\"transparent\"\n width={_xAxisScale.current.bandwidth()}\n height={_yAxisScale.current.bandwidth()}\n />\n </g>\n );\n }\n rectangles.push(rectElement);\n });\n });\n return rectangles;\n };\n /**\n * when the legend is hovered we need to highlight\n * all the rectangles which fall under that category\n * and un-highlight the rest of them\n * @param legendTitle\n */\n const _onLegendHover = (legendTitle: string): void => {\n setActiveLegend(legendTitle);\n };\n\n /**\n * when the mouse is out from the legend , we need\n * to show the graph in initial mode.\n */\n const _onLegendLeave = (): void => {\n setActiveLegend('');\n };\n /**\n * @param legendTitle\n * when the legend is clicked we need to highlight\n * all the rectangles which fall under that category\n * and un highlight the rest of them\n */\n const _onLegendClick = (legendTitle: string): void => {\n /**\n * check if the legend is already selceted,\n * if yes, un-select the legend, else\n * set the selected legend state to legendTitle\n */\n if (selectedLegend === legendTitle) {\n setSelectedLegend('');\n } else {\n setSelectedLegend(legendTitle);\n }\n };\n const _createLegendBars = (): JSX.Element => {\n const { data, legendProps } = props;\n const legends: Legend[] = [];\n data.forEach((item: HeatMapChartData) => {\n const legend: Legend = {\n title: item.legend,\n color: _colorScale.current(item.value),\n action: () => {\n _onLegendClick(item.legend);\n },\n hoverAction: () => {\n _handleChartMouseLeave();\n _onLegendHover(item.legend);\n },\n onMouseOutAction: () => {\n _onLegendLeave();\n },\n };\n legends.push(legend);\n });\n return <Legends {...legendProps} legends={legends} />;\n };\n\n const _getColorScale = () => {\n const { domainValuesForColorScale, rangeValuesForColorScale } = props;\n return d3ScaleLinear()\n .domain(domainValuesForColorScale)\n .range(rangeValuesForColorScale as unknown as number[]);\n };\n\n const _getXIndex = (value: string | Date | number): string => {\n if (_xAxisType.current === XAxisTypes.DateAxis) {\n return `${(value as Date).getTime()}`;\n } else if (_xAxisType.current === XAxisTypes.StringAxis) {\n return value as string;\n } else if (_xAxisType.current === XAxisTypes.NumericAxis) {\n return `${value}`;\n } else {\n return '';\n }\n };\n const _getYIndex = (value: string | Date | number): string => {\n if (_yAxisType.current === YAxisType.DateAxis) {\n return `${(value as Date).getTime()}`;\n } else if (_yAxisType.current === YAxisType.StringAxis) {\n return value as string;\n } else if (_yAxisType.current === YAxisType.NumericAxis) {\n return `${value}`;\n } else {\n return '';\n }\n };\n\n const { xAxisStringFormatter } = props;\n const _getFormattedLabelForXAxisDataPoint = React.useCallback(\n (point: string): string => {\n return xAxisStringFormatter ? xAxisStringFormatter(point) : point;\n },\n [xAxisStringFormatter],\n );\n\n const { yAxisStringFormatter } = props;\n const _getFormattedLabelForYAxisDataPoint = React.useCallback(\n (point: string): string => {\n return yAxisStringFormatter ? yAxisStringFormatter(point) : point;\n },\n [yAxisStringFormatter],\n );\n\n /**\n * This function will return the final sorted and formatted x-axis points\n * which will be rendered on the x-axis\n * @param points\n * @returns x-axis points\n */\n const _getXAxisDataPoints = React.useCallback(\n (points: { [key: string]: '1' }): string[] => {\n let xAxisPoints: string[] = [];\n const unFormattedXAxisDataPoints = Object.keys(points).sort((a: string, b: string) => {\n if (_xAxisType.current === XAxisTypes.DateAxis || _xAxisType.current === XAxisTypes.NumericAxis) {\n return +a - +b;\n } else {\n return props.sortOrder === 'none' ? 0 : a.toLowerCase() > b.toLowerCase() ? 1 : -1;\n }\n });\n xAxisPoints = unFormattedXAxisDataPoints.map((xPoint: string) => {\n if (_xAxisType.current === XAxisTypes.DateAxis) {\n return _getStringFormattedDate(xPoint, props.xAxisDateFormatString);\n } else if (_xAxisType.current === XAxisTypes.NumericAxis) {\n return _getStringFormattedNumber(xPoint, props.xAxisNumberFormatString);\n } else {\n return _getFormattedLabelForXAxisDataPoint(xPoint);\n }\n });\n\n return xAxisPoints;\n },\n [_getFormattedLabelForXAxisDataPoint, props.sortOrder, props.xAxisDateFormatString, props.xAxisNumberFormatString],\n );\n\n /**\n * This function will return the final sorted and formatted y-axis points\n * which will be rendered on the y-axis\n * @param points\n * @returns yaxis points\n */\n const _getYAxisDataPoints = React.useCallback(\n (points: { [key: string]: '1' }): string[] => {\n let yAxisPoints: string[] = [];\n const unFormattedYAxisDataPoints = Object.keys(points).sort((a: string, b: string) => {\n if (_yAxisType.current === YAxisType.DateAxis || _yAxisType.current === YAxisType.NumericAxis) {\n return +a - +b;\n } else {\n return props.sortOrder === 'none' ? 0 : a.toLowerCase() > b.toLowerCase() ? 1 : -1;\n }\n });\n yAxisPoints = unFormattedYAxisDataPoints.map((yPoint: string) => {\n if (_yAxisType.current === YAxisType.DateAxis) {\n return _getStringFormattedDate(yPoint, props.yAxisDateFormatString);\n } else if (_yAxisType.current === YAxisType.NumericAxis) {\n return _getStringFormattedNumber(yPoint, props.yAxisNumberFormatString);\n } else {\n return _getFormattedLabelForYAxisDataPoint(yPoint);\n }\n });\n\n return yAxisPoints;\n },\n [_getFormattedLabelForYAxisDataPoint, props.sortOrder, props.yAxisDateFormatString, props.yAxisNumberFormatString],\n );\n\n /**\n * This will create a new data set based on the prop\n * @data\n * We will be using This data set to contsruct our rectangles\n * in the chart, we use this data set becuase, when we loop in this\n * data and build the heat map, it will support accessibility as\n * specified in the figma\n */\n\n const _createNewDataSet = React.useCallback(\n (\n data: HeatMapChartData[],\n xAxisDateFormatString: string | undefined,\n xAxisNumberFormatString: string | undefined,\n yAxisDateFormatString: string | undefined,\n yAxisNumberFormatString: string | undefined,\n ): DataSet => {\n /**\n * please do not destructure any of the props here,\n * instead send them as parameter to this functions so that\n * this functions get called whenever the prop changes\n */\n const flattenData: FlattenData[] = [];\n /**\n * below for each loop will store all the datapoints in the one array.\n * basically it will flatten the nestesd array (data prop) into single array\n * of object. where each object contains x, y, rectText , value and legend propety of single\n * data point.\n */\n data.forEach((item: HeatMapChartData) => {\n item.data.forEach((point: HeatMapChartDataPoint) => {\n flattenData.push({ ...point, legend: item.legend });\n });\n });\n const yPoints: RectanglesGraphData = {};\n const uniqueYPoints: { [key: string]: '1' } = {};\n const uniqueXPoints: { [key: string]: '1' } = {};\n flattenData.forEach((item: FlattenData) => {\n const posX = _getXIndex(item.x);\n const posY = _getYIndex(item.y);\n\n uniqueXPoints[posX] = '1';\n uniqueYPoints[posY] = '1';\n /** we will check if the property(posY) is already there in object, if Yes,\n * then we will append the item in the Array related to the pos, if not\n * then we will simply append the item in the new Array and\n * assign that array to the property (posY) in the Object\n * and finally we will get the array of Objects associated to each\n * property (which is nothing but y data point) and object in the\n * array are noting but x data points associated to the property y\n */\n if (yPoints[posY]) {\n yPoints[posY] = [...yPoints[posY], item];\n } else {\n yPoints[posY] = [item];\n }\n });\n /**\n * we will now sort(ascending) the array's of y data point based on the x value\n * sorting is important to achive the accessibility order of the\n * rectangles and then format the x and y datapoints respectively\n */\n Object.keys(yPoints).forEach((item: string) => {\n yPoints[item]\n .sort((a: HeatMapChartDataPoint, b: HeatMapChartDataPoint) => {\n if (_xAxisType.current === XAxisTypes.StringAxis) {\n return props.sortOrder === 'none'\n ? 0\n : (a.x as string).toLowerCase() > (b.x as string).toLowerCase()\n ? 1\n : -1;\n } else if (_xAxisType.current === XAxisTypes.DateAxis) {\n return (a.x as Date).getTime() - (b.x as Date).getTime();\n } else if (_xAxisType.current === XAxisTypes.NumericAxis) {\n return +(a.x as string) > +(b.x as string) ? 1 : -1;\n } else {\n return a.x > b.x ? 1 : -1;\n }\n })\n .forEach((datapoint: HeatMapChartDataPoint) => {\n if (_xAxisType.current === XAxisTypes.DateAxis) {\n datapoint.x = _getStringFormattedDate(datapoint.x as string, xAxisDateFormatString);\n }\n if (_xAxisType.current === XAxisTypes.NumericAxis) {\n datapoint.x = _getStringFormattedNumber(datapoint.x as string, xAxisNumberFormatString);\n }\n if (_xAxisType.current === XAxisTypes.StringAxis) {\n datapoint.x = _getFormattedLabelForXAxisDataPoint(datapoint.x as string);\n }\n if (_yAxisType.current === YAxisType.DateAxis) {\n datapoint.y = _getStringFormattedDate(datapoint.y as string, yAxisDateFormatString);\n }\n if (_yAxisType.current === YAxisType.NumericAxis) {\n datapoint.y = _getStringFormattedNumber(datapoint.y as string, yAxisNumberFormatString);\n }\n if (_yAxisType.current === YAxisType.StringAxis) {\n datapoint.y = _getFormattedLabelForYAxisDataPoint(datapoint.y as string);\n }\n });\n });\n /**\n * if y-axis data points are of type date or number or if we have string formatter,\n * then we need to change data points to their respective string\n * format, becuase in the private variable this._stringYAxisDatapoints, points will be stored in\n * string format. and in here `yPoint` are not so we need to change, so that\n * function `this._createRectangles` should work perfetcly while looping, and if we don't change\n * then `this._createRectangles` will fail while looping, causing the error\n * Cannot read property 'forEach' of undefined\n */\n\n Object.keys(yPoints).forEach((yPoint: string) => {\n if (_yAxisType.current === YAxisType.DateAxis) {\n yPoints[_getStringFormattedDate(yPoint, yAxisDateFormatString)] = yPoints[yPoint];\n } else if (_yAxisType.current === YAxisType.NumericAxis) {\n yPoints[`${_getStringFormattedNumber(yPoint, yAxisNumberFormatString)}`] = yPoints[yPoint];\n } else {\n yPoints[_getFormattedLabelForYAxisDataPoint(yPoint)] = yPoints[yPoint];\n }\n });\n /**\n * assigning new data set\n */\n const dataSet = yPoints;\n /**\n * These are the Y axis data points which will get rendered in the\n * Y axis in graph\n */\n const yAxisPoints = _getYAxisDataPoints(uniqueYPoints);\n /**\n * These are the x axis data points which will get rendered in the\n * x axis in the graph\n */\n\n const xAxisPoints = _getXAxisDataPoints(uniqueXPoints);\n return {\n dataSet,\n yAxisPoints,\n xAxisPoints,\n };\n },\n [\n _getFormattedLabelForXAxisDataPoint,\n _getFormattedLabelForYAxisDataPoint,\n _getXAxisDataPoints,\n _getYAxisDataPoints,\n props.sortOrder,\n ],\n );\n\n const _getStringFormattedDate = (point: string, formatString?: string): string => {\n const date = new Date();\n date.setTime(+point);\n return d3TimeFormat(formatString || '%b/%d')(date);\n };\n\n const _getStringFormattedNumber = (point: string, formatString?: string): string => {\n return d3Format(formatString || '.2~s')(+point);\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 const _legendHighlighted = (legendTitle: string) => {\n return selectedLegend === legendTitle || (selectedLegend === '' && activeLegend === legendTitle);\n };\n\n /**\n * This function checks if none of the legends is selected or hovered.\n */\n const _noLegendHighlighted = () => {\n return selectedLegend === '' && activeLegend === '';\n };\n\n const _getAriaLabel = (point: FlattenData): string => {\n const xValue = point.x;\n const yValue = point.y;\n const legend = point.legend;\n const zValue = point.ratio ? `${point.ratio[0]}/${point.ratio[1]}` : point.rectText || point.value;\n const description = point.descriptionMessage;\n return (\n point.callOutAccessibilityData?.ariaLabel ||\n `${xValue}, ${yValue}. ${legend}, ${zValue}.` + (description ? ` ${description}.` : '')\n );\n };\n\n const _isChartEmpty = (): boolean => {\n return !(props.data && props.data.length > 0);\n };\n\n const _getChartTitle = (): string => {\n const { chartTitle } = props;\n const numDataPoints = props.data.reduce((acc, curr) => acc + curr.data.length, 0);\n return (chartTitle ? `${chartTitle}. ` : '') + `Heat map chart with ${numDataPoints} data points. `;\n };\n\n const updatePosition = (newX: number, newY: number) => {\n const threshold = 1; // Set a threshold for movement\n const { x, y } = clickPosition;\n // Calculate the distance moved\n const distance = Math.sqrt(Math.pow(newX - x, 2) + Math.pow(newY - y, 2));\n // Update the position only if the distance moved is greater than the threshold\n if (distance > threshold) {\n setClickPosition({ x: newX, y: newY });\n }\n };\n\n const { x, y } = _getXandY();\n _xAxisType.current = getTypeOfAxis(x, true) as XAxisTypes;\n _yAxisType.current = getTypeOfAxis(y, false) as YAxisType;\n const { data, xAxisDateFormatString, xAxisNumberFormatString, yAxisDateFormatString, yAxisNumberFormatString } =\n props;\n _colorScale.current = _getColorScale();\n const { dataSet, xAxisPoints, yAxisPoints } = React.useMemo(\n () =>\n _createNewDataSet(\n data,\n xAxisDateFormatString,\n xAxisNumberFormatString,\n yAxisDateFormatString,\n yAxisNumberFormatString,\n ),\n [\n _createNewDataSet,\n data,\n xAxisDateFormatString,\n xAxisNumberFormatString,\n yAxisDateFormatString,\n yAxisNumberFormatString,\n ],\n );\n _dataSet.current = dataSet;\n _stringYAxisDataPoints.current = yAxisPoints;\n _stringXAxisDataPoints.current = xAxisPoints;\n const calloutProps: ChartPopoverProps = {\n ...props.calloutProps,\n isPopoverOpen,\n YValue: calloutYValue,\n legend: calloutLegend,\n color: calloutTextColor,\n ratio,\n descriptionMessage,\n clickPosition,\n ...getAccessibleDataObject(callOutAccessibilityData, 'text', false),\n };\n const tickParams = {\n tickValues: props.tickValues,\n tickFormat: props.tickFormat,\n };\n return !_isChartEmpty() ? (\n <CartesianChart\n {...props}\n chartTitle={_getChartTitle()}\n points={data}\n chartType={ChartTypes.HeatMapChart}\n xAxisType={XAxisTypes.StringAxis}\n yAxisType={YAxisType.StringAxis}\n calloutProps={calloutProps}\n datasetForXAxisDomain={_stringXAxisDataPoints.current}\n stringDatasetForYAxisDomain={_stringYAxisDataPoints.current}\n getmargins={_getMargins}\n xAxisTickCount={_stringXAxisDataPoints.current.length}\n xAxistickSize={0}\n xAxisPadding={0.02}\n yAxisPadding={0.02}\n legendBars={_createLegendBars()}\n onChartMouseLeave={_handleChartMouseLeave}\n componentRef={cartesianChartRef}\n tickParams={tickParams}\n /* eslint-disable react/jsx-no-bind */\n children={(p: ChildProps) => {\n _xAxisScale.current = p.xScale;\n _yAxisScale.current = p.yScalePrimary;\n return _createRectangles();\n }}\n />\n ) : (\n <div id={_emptyChartId} role={'alert'} style={{ opacity: '0' }} aria-label={'Graph has no data to display'} />\n );\n});\n"],"names":["HeatMapChart","React","forwardRef","props","forwardedRef","classes","useHeatMapChartStyles","_stringXAxisDataPoints","useRef","_stringYAxisDataPoints","_dataSet","_colorScale","_xAxisScale","_yAxisScale","_xAxisType","_yAxisType","_calloutAnchorPoint","_emptyChartId","useId","_margins","cartesianChartRef","selectedLegend","setSelectedLegend","useState","activeLegend","setActiveLegend","isPopoverOpen","setPopoverOpen","calloutLegend","setCalloutLegend","calloutTextColor","setCalloutTextColor","calloutYValue","setCalloutYValue","ratio","setRatio","descriptionMessage","setDescriptionMessage","callOutAccessibilityData","setCallOutAccessibilityData","clickPosition","setClickPosition","x","y","useImperativeHandle","componentRef","chartContainer","current","_getXandY","data","forEach","item","length","_getMargins","margins","_getOpacity","legendTitle","opacity","_legendHighlighted","_noLegendHighlighted","_onRectFocus","id","focusEvent","boundingRect","currentTarget","getBoundingClientRect","clientX","left","width","clientY","top","height","updatePosition","legend","rectText","Number","isNaN","value","tokens","colorNeutralForeground1","_onRectMouseOver","mouseEvent","persist","_onRectBlurOrMouseOut","_handleChartMouseLeave","_getInvertedTextColor","color","colorNeutralBackground1","_createRectangles","rectangles","yAxisDataPoints","slice","reverse","yAxisDataPoint","index","xAxisDataPoint","rectElement","dataPointObject","styleRules","foregroundColor","resolveCSSVariables","contrastRatio","getColorContrast","createElement","g","key","role","aria-label","_getAriaLabel","tabIndex","fillOpacity","transform","onFocus","e","onBlur","onMouseOver","onMouseOut","rect","fill","bandwidth","onClick","text","dominantBaseline","textAnchor","className","formatToLocaleString","culture","useUTC","NaN","push","_onLegendHover","_onLegendLeave","_onLegendClick","_createLegendBars","legendProps","legends","title","action","hoverAction","onMouseOutAction","Legends","_getColorScale","domainValuesForColorScale","rangeValuesForColorScale","d3ScaleLinear","domain","range","_getXIndex","XAxisTypes","DateAxis","getTime","StringAxis","NumericAxis","_getYIndex","YAxisType","xAxisStringFormatter","_getFormattedLabelForXAxisDataPoint","useCallback","point","yAxisStringFormatter","_getFormattedLabelForYAxisDataPoint","_getXAxisDataPoints","points","xAxisPoints","unFormattedXAxisDataPoints","Object","keys","sort","a","b","sortOrder","toLowerCase","map","xPoint","_getStringFormattedDate","xAxisDateFormatString","_getStringFormattedNumber","xAxisNumberFormatString","_getYAxisDataPoints","yAxisPoints","unFormattedYAxisDataPoints","yPoint","yAxisDateFormatString","yAxisNumberFormatString","_createNewDataSet","flattenData","yPoints","uniqueYPoints","uniqueXPoints","posX","posY","datapoint","dataSet","formatString","date","Date","setTime","d3TimeFormat","d3Format","xValue","yValue","zValue","description","ariaLabel","_isChartEmpty","_getChartTitle","chartTitle","numDataPoints","reduce","acc","curr","newX","newY","threshold","distance","Math","sqrt","pow","getTypeOfAxis","useMemo","calloutProps","YValue","getAccessibleDataObject","tickParams","tickValues","tickFormat","CartesianChart","chartType","ChartTypes","xAxisType","yAxisType","datasetForXAxisDomain","stringDatasetForYAxisDomain","getmargins","xAxisTickCount","xAxistickSize","xAxisPadding","yAxisPadding","legendBars","onChartMouseLeave","children","p","xScale","yScalePrimary","div","style"],"rangeMappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;","mappings":"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"}
@@ -100,7 +100,7 @@ const LineChart = /*#__PURE__*/ _react.forwardRef((props, forwardedRef)=>{
100
100
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
101
101
  let _xAxisScale = '';
102
102
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
103
- let _yAxisScale = '';
103
+ let _yScalePrimary = '';
104
104
  let _circleId = (0, _reactutilities.useId)('circle');
105
105
  let _lineId = (0, _reactutilities.useId)('lineID');
106
106
  let _borderId = (0, _reactutilities.useId)('borderID');
@@ -122,6 +122,7 @@ const LineChart = /*#__PURE__*/ _react.forwardRef((props, forwardedRef)=>{
122
122
  const _isRTL = (0, _index1.useRtl)();
123
123
  let xAxisCalloutAccessibilityData = {};
124
124
  const cartesianChartRef = _react.useRef(null);
125
+ let _yScaleSecondary;
125
126
  props.eventAnnotationProps && props.eventAnnotationProps.labelHeight && (eventLabelHeight = props.eventAnnotationProps.labelHeight);
126
127
  const [hoverXValue, setHoverXValue] = _react.useState('');
127
128
  const [activeLegend, setActiveLegend] = _react.useState('');
@@ -203,9 +204,10 @@ const LineChart = /*#__PURE__*/ _react.forwardRef((props, forwardedRef)=>{
203
204
  function _getMargins(_margins) {
204
205
  margins = _margins;
205
206
  }
206
- function _initializeLineChartData(xScale, yScale, containerHeight, containerWidth, xElement) {
207
+ function _initializeLineChartData(xScale, yScalePrimary, containerHeight, containerWidth, xElement, yAxisElement, yScaleSecondary) {
207
208
  _xAxisScale = xScale;
208
- _yAxisScale = yScale;
209
+ _yScalePrimary = yScalePrimary;
210
+ _yScaleSecondary = yScaleSecondary;
209
211
  _renderedColorFillBars = props.colorFillBars ? _createColorFillBars(containerHeight) : [];
210
212
  lines = _createLines(xElement, containerHeight);
211
213
  }
@@ -363,6 +365,7 @@ const LineChart = /*#__PURE__*/ _react.forwardRef((props, forwardedRef)=>{
363
365
  const legendVal = _points[i].legend;
364
366
  const lineColor = _points[i].color;
365
367
  const verticaLineHeight = containerHeight - margins.bottom + 6;
368
+ const yScale = _points[i].useSecondaryYScale && _yScaleSecondary ? _yScaleSecondary : _yScalePrimary;
366
369
  if (_points[i].data.length === 1) {
367
370
  // eslint-disable-next-line @typescript-eslint/no-shadow
368
371
  const { x: x1, y: y1, xAxisCalloutData, xAxisCalloutAccessibilityData } = _points[i].data[0];
@@ -373,12 +376,12 @@ const LineChart = /*#__PURE__*/ _react.forwardRef((props, forwardedRef)=>{
373
376
  key: circleId,
374
377
  r: activePoint === circleId ? 5.5 : 3.5,
375
378
  cx: _xAxisScale(x1),
376
- cy: _yAxisScale(y1),
379
+ cy: yScale(y1),
377
380
  fill: activePoint === circleId ? _reacttheme.tokens.colorNeutralBackground1 : lineColor,
378
381
  opacity: isLegendSelected ? 1 : 0.1,
379
382
  tabIndex: isLegendSelected ? 0 : undefined,
380
- onMouseOver: (event)=>_handleHover(x1, y1, verticaLineHeight, xAxisCalloutData, circleId, xAxisCalloutAccessibilityData, event),
381
- onMouseMove: (event)=>_handleHover(x1, y1, verticaLineHeight, xAxisCalloutData, circleId, xAxisCalloutAccessibilityData, event),
383
+ onMouseOver: (event)=>_handleHover(x1, y1, verticaLineHeight, xAxisCalloutData, circleId, xAxisCalloutAccessibilityData, event, yScale),
384
+ onMouseMove: (event)=>_handleHover(x1, y1, verticaLineHeight, xAxisCalloutData, circleId, xAxisCalloutAccessibilityData, event, yScale),
382
385
  onMouseOut: _handleMouseOut,
383
386
  strokeWidth: activePoint === circleId ? DEFAULT_LINE_STROKE_SIZE : 0,
384
387
  stroke: activePoint === circleId ? lineColor : '',
@@ -402,7 +405,7 @@ const LineChart = /*#__PURE__*/ _react.forwardRef((props, forwardedRef)=>{
402
405
  var _points_i_lineOptions1;
403
406
  const line = (0, _d3shape.line)() // eslint-disable-next-line @typescript-eslint/no-explicit-any
404
407
  .x((d)=>_xAxisScale(d[0])) // eslint-disable-next-line @typescript-eslint/no-explicit-any
405
- .y((d)=>_yAxisScale(d[1])).curve((0, _index1.getCurveFactory)(lineCurve));
408
+ .y((d)=>yScale(d[1])).curve((0, _index1.getCurveFactory)(lineCurve));
406
409
  const lineId = `${_lineId}_${i}`;
407
410
  const borderId = `${_borderId}_${i}`;
408
411
  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;
@@ -441,8 +444,8 @@ const LineChart = /*#__PURE__*/ _react.forwardRef((props, forwardedRef)=>{
441
444
  stroke: lineColor,
442
445
  strokeWidth: strokeWidth,
443
446
  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',
444
- onMouseMove: (event)=>_onMouseOverLargeDataset.bind(i, verticaLineHeight, event),
445
- onMouseOver: (event)=>_onMouseOverLargeDataset.bind(i, verticaLineHeight, event),
447
+ onMouseMove: (event)=>_onMouseOverLargeDataset.bind(i, verticaLineHeight, event, yScale),
448
+ onMouseOver: (event)=>_onMouseOverLargeDataset.bind(i, verticaLineHeight, event, yScale),
446
449
  onMouseOut: _handleMouseOut,
447
450
  ..._getClickHandler(_points[i].onLineClick),
448
451
  opacity: 1,
@@ -473,8 +476,8 @@ const LineChart = /*#__PURE__*/ _react.forwardRef((props, forwardedRef)=>{
473
476
  strokeWidth: DEFAULT_LINE_STROKE_SIZE,
474
477
  stroke: lineColor,
475
478
  visibility: 'hidden',
476
- onMouseMove: (event)=>_onMouseOverLargeDataset.bind(i, verticaLineHeight, event),
477
- onMouseOver: (event)=>_onMouseOverLargeDataset.bind(i, verticaLineHeight, event),
479
+ onMouseMove: (event)=>_onMouseOverLargeDataset.bind(i, verticaLineHeight, event, yScale),
480
+ onMouseOver: (event)=>_onMouseOverLargeDataset.bind(i, verticaLineHeight, event, yScale),
478
481
  onMouseOut: _handleMouseOut
479
482
  }));
480
483
  } else if (!props.optimizeLargeData) {
@@ -488,7 +491,7 @@ const LineChart = /*#__PURE__*/ _react.forwardRef((props, forwardedRef)=>{
488
491
  const circleId = `${_circleId}_${i}_${j}`;
489
492
  const { x: x1, y: y1, xAxisCalloutData, xAxisCalloutAccessibilityData } = _points[i].data[j - 1];
490
493
  const { x: x2, y: y2 } = _points[i].data[j];
491
- let path = _getPath(_xAxisScale(x1), _yAxisScale(y1), circleId, j, false, _points[i].index);
494
+ let path = _getPath(_xAxisScale(x1), yScale(y1), circleId, j, false, _points[i].index);
492
495
  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;
493
496
  const isLegendSelected = _legendHighlighted(legendVal) || _noLegendHighlighted() || isSelectedLegend;
494
497
  const currentPointHidden = _points[i].hideNonActiveDots && activePoint !== circleId;
@@ -497,8 +500,8 @@ const LineChart = /*#__PURE__*/ _react.forwardRef((props, forwardedRef)=>{
497
500
  key: circleId,
498
501
  d: path,
499
502
  "data-is-focusable": isLegendSelected,
500
- onMouseOver: (event)=>_handleHover(x1, y1, verticaLineHeight, xAxisCalloutData, circleId, xAxisCalloutAccessibilityData, event),
501
- onMouseMove: (event)=>_handleHover(x1, y1, verticaLineHeight, xAxisCalloutData, circleId, xAxisCalloutAccessibilityData, event),
503
+ onMouseOver: (event)=>_handleHover(x1, y1, verticaLineHeight, xAxisCalloutData, circleId, xAxisCalloutAccessibilityData, event, yScale),
504
+ onMouseMove: (event)=>_handleHover(x1, y1, verticaLineHeight, xAxisCalloutData, circleId, xAxisCalloutAccessibilityData, event, yScale),
502
505
  onMouseOut: _handleMouseOut,
503
506
  onFocus: ()=>_handleFocus(lineId, x1, xAxisCalloutData, circleId, xAxisCalloutAccessibilityData),
504
507
  onBlur: _handleMouseOut,
@@ -516,7 +519,7 @@ const LineChart = /*#__PURE__*/ _react.forwardRef((props, forwardedRef)=>{
516
519
  const lastCircleId = `${circleId}${j}L`;
517
520
  const hiddenHoverCircleId = `${circleId}${j}D`;
518
521
  const lastPointHidden = _points[i].hideNonActiveDots && activePoint !== lastCircleId;
519
- path = _getPath(_xAxisScale(x2), _yAxisScale(y2), lastCircleId, j, true, _points[i].index);
522
+ path = _getPath(_xAxisScale(x2), yScale(y2), lastCircleId, j, true, _points[i].index);
520
523
  const { xAxisCalloutData: lastCirlceXCallout, xAxisCalloutAccessibilityData: lastCirlceXCalloutAccessibilityData } = _points[i].data[j];
521
524
  pointsForLine.push(/*#__PURE__*/ _react.createElement(_react.Fragment, {
522
525
  key: `${lastCircleId}_container`
@@ -525,8 +528,8 @@ const LineChart = /*#__PURE__*/ _react.forwardRef((props, forwardedRef)=>{
525
528
  key: lastCircleId,
526
529
  d: path,
527
530
  "data-is-focusable": isLegendSelected,
528
- onMouseOver: (event)=>_handleHover(x2, y2, verticaLineHeight, lastCirlceXCallout, lastCircleId, lastCirlceXCalloutAccessibilityData, event),
529
- onMouseMove: (event)=>_handleHover(x2, y2, verticaLineHeight, lastCirlceXCallout, lastCircleId, lastCirlceXCalloutAccessibilityData, event),
531
+ onMouseOver: (event)=>_handleHover(x2, y2, verticaLineHeight, lastCirlceXCallout, lastCircleId, lastCirlceXCalloutAccessibilityData, event, yScale),
532
+ onMouseMove: (event)=>_handleHover(x2, y2, verticaLineHeight, lastCirlceXCallout, lastCircleId, lastCirlceXCalloutAccessibilityData, event, yScale),
530
533
  onMouseOut: _handleMouseOut,
531
534
  onFocus: ()=>_handleFocus(lineId, x2, lastCirlceXCallout, lastCircleId, lastCirlceXCalloutAccessibilityData),
532
535
  onBlur: _handleMouseOut,
@@ -543,11 +546,11 @@ const LineChart = /*#__PURE__*/ _react.forwardRef((props, forwardedRef)=>{
543
546
  key: hiddenHoverCircleId,
544
547
  r: 8,
545
548
  cx: _xAxisScale(x2),
546
- cy: _yAxisScale(y2),
549
+ cy: yScale(y2),
547
550
  opacity: 0,
548
551
  width: 0,
549
- onMouseOver: (event)=>_handleHover(x2, y2, verticaLineHeight, lastCirlceXCallout, lastCircleId, lastCirlceXCalloutAccessibilityData, event),
550
- onMouseMove: (event)=>_handleHover(x2, y2, verticaLineHeight, lastCirlceXCallout, lastCircleId, lastCirlceXCalloutAccessibilityData, event),
552
+ onMouseOver: (event)=>_handleHover(x2, y2, verticaLineHeight, lastCirlceXCallout, lastCircleId, lastCirlceXCalloutAccessibilityData, event, yScale),
553
+ onMouseMove: (event)=>_handleHover(x2, y2, verticaLineHeight, lastCirlceXCallout, lastCircleId, lastCirlceXCalloutAccessibilityData, event, yScale),
551
554
  onMouseOut: _handleMouseOut,
552
555
  strokeWidth: 0,
553
556
  focusable: false,
@@ -566,9 +569,9 @@ const LineChart = /*#__PURE__*/ _react.forwardRef((props, forwardedRef)=>{
566
569
  id: borderId,
567
570
  key: borderId,
568
571
  x1: _xAxisScale(x1),
569
- y1: _yAxisScale(y1),
572
+ y1: yScale(y1),
570
573
  x2: _xAxisScale(x2),
571
- y2: _yAxisScale(y2),
574
+ y2: yScale(y2),
572
575
  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',
573
576
  strokeWidth: Number.parseFloat(strokeWidth.toString()) + lineBorderWidth,
574
577
  ...((_points_i_lineOptions13 = _points[i].lineOptions) === null || _points_i_lineOptions13 === void 0 ? void 0 : _points_i_lineOptions13.lineBorderColor) && {
@@ -583,15 +586,15 @@ const LineChart = /*#__PURE__*/ _react.forwardRef((props, forwardedRef)=>{
583
586
  id: lineId,
584
587
  key: lineId,
585
588
  x1: _xAxisScale(x1),
586
- y1: _yAxisScale(y1),
589
+ y1: yScale(y1),
587
590
  x2: _xAxisScale(x2),
588
- y2: _yAxisScale(y2),
591
+ y2: yScale(y2),
589
592
  strokeWidth: strokeWidth,
590
593
  ref: (e)=>{
591
594
  _refCallback(e, lineId);
592
595
  },
593
- onMouseOver: (event)=>_handleHover(x1, y1, verticaLineHeight, xAxisCalloutData, circleId, xAxisCalloutAccessibilityData, event),
594
- onMouseMove: (event)=>_handleHover(x1, y1, verticaLineHeight, xAxisCalloutData, circleId, xAxisCalloutAccessibilityData, event),
596
+ onMouseOver: (event)=>_handleHover(x1, y1, verticaLineHeight, xAxisCalloutData, circleId, xAxisCalloutAccessibilityData, event, yScale),
597
+ onMouseMove: (event)=>_handleHover(x1, y1, verticaLineHeight, xAxisCalloutData, circleId, xAxisCalloutAccessibilityData, event, yScale),
595
598
  onMouseOut: _handleMouseOut,
596
599
  stroke: lineColor,
597
600
  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',
@@ -609,9 +612,9 @@ const LineChart = /*#__PURE__*/ _react.forwardRef((props, forwardedRef)=>{
609
612
  id: lineId,
610
613
  key: lineId,
611
614
  x1: _xAxisScale(x1),
612
- y1: _yAxisScale(y1),
615
+ y1: yScale(y1),
613
616
  x2: _xAxisScale(x2),
614
- y2: _yAxisScale(y2),
617
+ y2: yScale(y2),
615
618
  strokeWidth: strokeWidth,
616
619
  stroke: lineColor,
617
620
  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',
@@ -677,9 +680,9 @@ const LineChart = /*#__PURE__*/ _react.forwardRef((props, forwardedRef)=>{
677
680
  fill: colorFillBar.applyPattern ? `url(#${_colorFillBarPatternId}_${i})` : color,
678
681
  fillOpacity: opacity,
679
682
  x: _isRTL ? _xAxisScale(endX) : _xAxisScale(startX),
680
- y: _yAxisScale(yMinMaxValues.endValue) - FILL_Y_PADDING,
683
+ y: _yScalePrimary(yMinMaxValues.endValue) - FILL_Y_PADDING,
681
684
  width: Math.abs(_xAxisScale(endX) - _xAxisScale(startX)),
682
- height: _yAxisScale(props.yMinValue || 0) - _yAxisScale(yMinMaxValues.endValue) + FILL_Y_PADDING,
685
+ height: _yScalePrimary(props.yMinValue || 0) - _yScalePrimary(yMinMaxValues.endValue) + FILL_Y_PADDING,
683
686
  key: `${colorFillBarId}${j}`
684
687
  }));
685
688
  }
@@ -722,7 +725,7 @@ const LineChart = /*#__PURE__*/ _react.forwardRef((props, forwardedRef)=>{
722
725
  refElement: element
723
726
  });
724
727
  }
725
- const _onMouseOverLargeDataset = (linenumber, lineHeight, mouseEvent)=>{
728
+ const _onMouseOverLargeDataset = (linenumber, lineHeight, mouseEvent, yScale)=>{
726
729
  mouseEvent.persist();
727
730
  const { data } = props;
728
731
  const { lineChartData } = data;
@@ -776,8 +779,8 @@ const LineChart = /*#__PURE__*/ _react.forwardRef((props, forwardedRef)=>{
776
779
  // if no points need to be called out then don't show vertical line and callout card
777
780
  if (found && pointToHighlightUpdated) {
778
781
  _uniqueCallOutID = `#${_staticHighlightCircle}_${linenumber}`;
779
- (0, _d3selection.select)(`#${_staticHighlightCircle}_${linenumber}`).attr('cx', `${_xAxisScale(pointToHighlight.x)}`).attr('cy', `${_yAxisScale(pointToHighlight.y)}`).attr('visibility', 'visibility');
780
- (0, _d3selection.select)(`#${_verticalLine}`).attr('transform', ()=>`translate(${_xAxisScale(pointToHighlight.x)}, ${_yAxisScale(pointToHighlight.y)})`).attr('visibility', 'visibility').attr('y2', `${lineHeight - 5 - _yAxisScale(pointToHighlight.y)}`);
782
+ (0, _d3selection.select)(`#${_staticHighlightCircle}_${linenumber}`).attr('cx', `${_xAxisScale(pointToHighlight.x)}`).attr('cy', `${yScale(pointToHighlight.y)}`).attr('visibility', 'visibility');
783
+ (0, _d3selection.select)(`#${_verticalLine}`).attr('transform', ()=>`translate(${_xAxisScale(pointToHighlight.x)}, ${yScale(pointToHighlight.y)})`).attr('visibility', 'visibility').attr('y2', `${lineHeight - 5 - yScale(pointToHighlight.y)}`);
781
784
  setNearestCircleToHighlight(pointToHighlight);
782
785
  updatePosition(mouseEvent.clientX, mouseEvent.clientY);
783
786
  setStackCalloutProps(found);
@@ -814,14 +817,14 @@ const LineChart = /*#__PURE__*/ _react.forwardRef((props, forwardedRef)=>{
814
817
  setActivePoint(circleId);
815
818
  }
816
819
  }
817
- function _handleHover(x, y, lineHeight, xAxisCalloutData, circleId, xAxisCalloutAccessibilityData, mouseEvent) {
820
+ function _handleHover(x, y, lineHeight, xAxisCalloutData, circleId, xAxisCalloutAccessibilityData, mouseEvent, yScale) {
818
821
  mouseEvent === null || mouseEvent === void 0 ? void 0 : mouseEvent.persist();
819
822
  const formattedData = x instanceof Date ? (0, _index1.formatDate)(x, props.useUTC) : x;
820
823
  const xVal = x instanceof Date ? x.getTime() : x;
821
824
  const found = (0, _index1.find)(_calloutPoints, (element)=>element.x === xVal);
822
825
  // if no points need to be called out then don't show vertical line and callout card
823
826
  if (found) {
824
- (0, _d3selection.select)(`#${_verticalLine}`).attr('transform', ()=>`translate(${_xAxisScale(x)}, ${_yAxisScale(y)})`).attr('visibility', 'visibility').attr('y2', `${lineHeight - 5 - _yAxisScale(y)}`);
827
+ (0, _d3selection.select)(`#${_verticalLine}`).attr('transform', ()=>`translate(${_xAxisScale(x)}, ${yScale(y)})`).attr('visibility', 'visibility').attr('y2', `${lineHeight - 5 - yScale(y)}`);
825
828
  if (_uniqueCallOutID !== circleId) {
826
829
  _uniqueCallOutID = circleId;
827
830
  updatePosition(mouseEvent.clientX, mouseEvent.clientY);
@@ -1009,7 +1012,8 @@ const LineChart = /*#__PURE__*/ _react.forwardRef((props, forwardedRef)=>{
1009
1012
  /* eslint-disable react/jsx-no-bind */ // eslint-disable-next-line react/no-children-prop
1010
1013
  children: (props)=>{
1011
1014
  _xAxisScale = props.xScale;
1012
- _yAxisScale = props.yScale;
1015
+ _yScalePrimary = props.yScalePrimary;
1016
+ _yScaleSecondary = props.yScaleSecondary;
1013
1017
  return /*#__PURE__*/ _react.createElement(_react.Fragment, null, /*#__PURE__*/ _react.createElement("g", null, /*#__PURE__*/ _react.createElement("line", {
1014
1018
  x1: 0,
1015
1019
  y1: 0,