@fluentui/react-charts 0.0.0-nightly-20250820-0406.1 → 0.0.0-nightly-20250821-0406.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (34) hide show
  1. package/CHANGELOG.md +15 -15
  2. package/lib/components/DeclarativeChart/PlotlyColorAdapter.js +1 -1
  3. package/lib/components/DeclarativeChart/PlotlyColorAdapter.js.map +1 -1
  4. package/lib/components/DeclarativeChart/PlotlySchemaAdapter.js +53 -8
  5. package/lib/components/DeclarativeChart/PlotlySchemaAdapter.js.map +1 -1
  6. package/lib/components/GroupedVerticalBarChart/GroupedVerticalBarChart.js +23 -4
  7. package/lib/components/GroupedVerticalBarChart/GroupedVerticalBarChart.js.map +1 -1
  8. package/lib/components/HeatMapChart/HeatMapChart.js +175 -114
  9. package/lib/components/HeatMapChart/HeatMapChart.js.map +1 -1
  10. package/lib/components/HorizontalBarChartWithAxis/HorizontalBarChartWithAxis.js +26 -6
  11. package/lib/components/HorizontalBarChartWithAxis/HorizontalBarChartWithAxis.js.map +1 -1
  12. package/lib/components/ScatterChart/ScatterChart.js +4 -2
  13. package/lib/components/ScatterChart/ScatterChart.js.map +1 -1
  14. package/lib/components/VerticalBarChart/VerticalBarChart.js +27 -4
  15. package/lib/components/VerticalBarChart/VerticalBarChart.js.map +1 -1
  16. package/lib/components/VerticalStackedBarChart/VerticalStackedBarChart.js +61 -44
  17. package/lib/components/VerticalStackedBarChart/VerticalStackedBarChart.js.map +1 -1
  18. package/lib-commonjs/components/DeclarativeChart/PlotlyColorAdapter.js +1 -1
  19. package/lib-commonjs/components/DeclarativeChart/PlotlyColorAdapter.js.map +1 -1
  20. package/lib-commonjs/components/DeclarativeChart/PlotlySchemaAdapter.js +53 -8
  21. package/lib-commonjs/components/DeclarativeChart/PlotlySchemaAdapter.js.map +1 -1
  22. package/lib-commonjs/components/GroupedVerticalBarChart/GroupedVerticalBarChart.js +22 -3
  23. package/lib-commonjs/components/GroupedVerticalBarChart/GroupedVerticalBarChart.js.map +1 -1
  24. package/lib-commonjs/components/HeatMapChart/HeatMapChart.js +174 -113
  25. package/lib-commonjs/components/HeatMapChart/HeatMapChart.js.map +1 -1
  26. package/lib-commonjs/components/HorizontalBarChartWithAxis/HorizontalBarChartWithAxis.js +25 -5
  27. package/lib-commonjs/components/HorizontalBarChartWithAxis/HorizontalBarChartWithAxis.js.map +1 -1
  28. package/lib-commonjs/components/ScatterChart/ScatterChart.js +4 -2
  29. package/lib-commonjs/components/ScatterChart/ScatterChart.js.map +1 -1
  30. package/lib-commonjs/components/VerticalBarChart/VerticalBarChart.js +26 -3
  31. package/lib-commonjs/components/VerticalBarChart/VerticalBarChart.js.map +1 -1
  32. package/lib-commonjs/components/VerticalStackedBarChart/VerticalStackedBarChart.js +60 -43
  33. package/lib-commonjs/components/VerticalStackedBarChart/VerticalStackedBarChart.js.map +1 -1
  34. package/package.json +12 -12
@@ -4,7 +4,7 @@ import { select as d3Select } from 'd3-selection';
4
4
  import { max as d3Max, min as d3Min } from 'd3-array';
5
5
  import { scaleBand as d3ScaleBand } from 'd3-scale';
6
6
  import { useId } from '@fluentui/react-utilities';
7
- import { ChartTypes, getAccessibleDataObject, tooltipOfAxislabels, XAxisTypes, getTypeOfAxis, formatScientificLimitWidth, getScalePadding, getBarWidth, isScalePaddingDefined, createNumericYAxis, domainRangeOfXStringAxis, createStringYAxis, getNextColor, areArraysEqual, calculateLongestLabelWidth, useRtl, calcRequiredWidth, calcTotalWidth, calcBandwidth, calcTotalBandUnits } from '../../utilities/index';
7
+ import { ChartTypes, getAccessibleDataObject, tooltipOfAxislabels, XAxisTypes, getTypeOfAxis, formatScientificLimitWidth, getScalePadding, getBarWidth, isScalePaddingDefined, createNumericYAxis, domainRangeOfXStringAxis, createStringYAxis, getNextColor, areArraysEqual, calculateLongestLabelWidth, useRtl, calcRequiredWidth, calcTotalWidth, calcBandwidth, calcTotalBandUnits, sortAxisCategories } from '../../utilities/index';
8
8
  import { CartesianChart, Legends } from '../../index';
9
9
  import { toImage } from '../../utilities/image-export-utils';
10
10
  const MIN_DOMAIN_MARGIN = 8;
@@ -12,7 +12,8 @@ const X1_INNER_PADDING = 0.1;
12
12
  const VERTICAL_BAR_GAP = 1;
13
13
  const MIN_BAR_HEIGHT = 1;
14
14
  export const GroupedVerticalBarChart = /*#__PURE__*/ React.forwardRef((props = {
15
- maxBarWidth: 24
15
+ maxBarWidth: 24,
16
+ xAxisCategoryOrder: 'default'
16
17
  }, forwardedRef)=>{
17
18
  var _props_legendProps, _props_legendProps1;
18
19
  const _tooltipId = useId('GVBCTooltipId_');
@@ -117,7 +118,7 @@ export const GroupedVerticalBarChart = /*#__PURE__*/ React.forwardRef((props = {
117
118
  };
118
119
  const _createDataSetOfGVBC = (points)=>{
119
120
  const legends = new Set();
120
- const xAxisLabels = points.map((singlePoint)=>singlePoint.name);
121
+ const xAxisLabels = _getOrderedXAxisLabels(points);
121
122
  points.forEach((point)=>{
122
123
  point.series.forEach((seriesPoint)=>{
123
124
  legends.add(seriesPoint.legend);
@@ -196,12 +197,30 @@ export const GroupedVerticalBarChart = /*#__PURE__*/ React.forwardRef((props = {
196
197
  };
197
198
  })) !== null && _data_map !== void 0 ? _data_map : [];
198
199
  };
200
+ const _getOrderedXAxisLabels = (points)=>{
201
+ if (_xAxisType !== XAxisTypes.StringAxis) {
202
+ return [];
203
+ }
204
+ return sortAxisCategories(_mapCategoryToValues(points), props.xAxisCategoryOrder);
205
+ };
206
+ const _mapCategoryToValues = (points)=>{
207
+ const categoryToValues = {};
208
+ points.forEach((point)=>{
209
+ if (!categoryToValues[point.name]) {
210
+ categoryToValues[point.name] = [];
211
+ }
212
+ point.series.forEach((seriesPoint)=>{
213
+ categoryToValues[point.name].push(seriesPoint.data);
214
+ });
215
+ });
216
+ return categoryToValues;
217
+ };
199
218
  const points = _addDefaultColors(props.data);
219
+ const _xAxisType = getTypeOfAxis(points[0].name, true);
200
220
  const { legends, xAxisLabels, datasetForBars } = _createDataSetOfGVBC(points);
201
221
  _legends = legends;
202
222
  _xAxisLabels = xAxisLabels;
203
223
  _datasetForBars = datasetForBars;
204
- const _xAxisType = getTypeOfAxis(points[0].name, true);
205
224
  const legendBars = _getLegendData(points);
206
225
  _adjustProps();
207
226
  // eslint-disable-next-line @typescript-eslint/no-explicit-any -- Add commentMore actions
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/components/GroupedVerticalBarChart/GroupedVerticalBarChart.tsx"],"sourcesContent":["import * as React from 'react';\nimport { useGroupedVerticalBarChartStyles_unstable } from './useGroupedVerticalBarChartStyles.styles';\nimport { select as d3Select } from 'd3-selection';\nimport { Axis as D3Axis } from 'd3-axis';\nimport { max as d3Max, min as d3Min } from 'd3-array';\nimport { ScaleLinear, scaleBand as d3ScaleBand } from 'd3-scale';\n\nimport { useId, JSXElement } from '@fluentui/react-utilities';\nimport {\n ChartTypes,\n IAxisData,\n getAccessibleDataObject,\n tooltipOfAxislabels,\n XAxisTypes,\n getTypeOfAxis,\n formatScientificLimitWidth,\n getScalePadding,\n getBarWidth,\n isScalePaddingDefined,\n createNumericYAxis,\n IDomainNRange,\n domainRangeOfXStringAxis,\n createStringYAxis,\n getNextColor,\n areArraysEqual,\n calculateLongestLabelWidth,\n useRtl,\n YAxisType,\n calcRequiredWidth,\n calcTotalWidth,\n calcBandwidth,\n calcTotalBandUnits,\n} from '../../utilities/index';\n\nimport {\n AccessibilityProps,\n CartesianChart,\n Margins,\n Legend,\n GroupedVerticalBarChartProps,\n GroupedVerticalBarChartData,\n GVBarChartSeriesPoint,\n Legends,\n YValueHover,\n ChartPopoverProps,\n Chart,\n ImageExportOptions,\n LegendContainer,\n} from '../../index';\nimport { toImage } from '../../utilities/image-export-utils';\n\ntype StringAxis = D3Axis<string>;\ntype NumericAxis = D3Axis<number | { valueOf(): number }>;\n\nconst MIN_DOMAIN_MARGIN = 8;\nconst X1_INNER_PADDING = 0.1;\nconst VERTICAL_BAR_GAP = 1;\nconst MIN_BAR_HEIGHT = 1;\n\n// This interface used for - While forming datapoints from given prop \"data\" in code\ninterface GVDataPoint {\n [key: string]: number | string;\n}\n\n// While forming datapoints from given prop \"data\" in code. These datapoints are used for to draw graph easily.\ninterface GVSingleDataPoint {\n [key: string]: GVDataPoint;\n}\n\nexport const GroupedVerticalBarChart: React.FC<GroupedVerticalBarChartProps> = React.forwardRef<\n HTMLDivElement,\n GroupedVerticalBarChartProps\n>((props = { maxBarWidth: 24 }, forwardedRef) => {\n const _tooltipId: string = useId('GVBCTooltipId_');\n const _emptyChartId: string = useId('_GVBC_empty');\n const _useRtl: boolean = useRtl();\n let _domainMargin: number = MIN_DOMAIN_MARGIN;\n let _xAxisLabels: string[] = [];\n let _datasetForBars: any[] = [];\n let _margins: Margins = { top: 0, right: 0, bottom: 0, left: 0 };\n let _groupedVerticalBarGraph: JSXElement[] = [];\n let _yMax: number = 0;\n let _calloutAnchorPoint: GVBarChartSeriesPoint | null = null;\n let _barWidth: number = 0;\n let _groupWidth: number = 0;\n let _xAxisInnerPadding: number = 0;\n let _xAxisOuterPadding: number = 0;\n let _legends: string[] = [];\n let _legendColorMap: Record<string, [string, string]> = {};\n const cartesianChartRef = React.useRef<Chart>(null);\n const Y_ORIGIN: number = 0;\n const _legendsRef = React.useRef<LegendContainer>(null);\n\n const [color, setColor] = React.useState<string>('');\n const [dataForHoverCard, setDataForHoverCard] = React.useState<number>(0);\n const [selectedLegends, setSelectedLegends] = React.useState<string[]>(props.legendProps?.selectedLegends || []);\n const [xCalloutValue, setXCalloutValue] = React.useState<string>('');\n const [yCalloutValue, setYCalloutValue] = React.useState<string>('');\n const [YValueHover, setYValueHover] = React.useState<YValueHover[]>([]);\n const [hoverXValue, setHoverXValue] = React.useState<string>('');\n const [calloutLegend, setCalloutLegend] = React.useState<string>('');\n const [activeLegend, setActiveLegend] = React.useState<string>('');\n const [callOutAccessibilityData, setCallOutAccessibilityData] = React.useState<AccessibilityProps | undefined>(\n undefined,\n );\n const [clickPosition, setClickPosition] = React.useState({ x: 0, y: 0 });\n const [isPopoverOpen, setPopoverOpen] = React.useState<boolean>(false);\n const classes = useGroupedVerticalBarChartStyles_unstable(props);\n\n React.useEffect(() => {\n if (!areArraysEqual(props.legendProps?.selectedLegends, selectedLegends)) {\n setSelectedLegends(props.legendProps?.selectedLegends || []);\n }\n }, [props.legendProps?.selectedLegends]);\n\n React.useImperativeHandle(\n props.componentRef,\n () => ({\n chartContainer: cartesianChartRef.current?.chartContainer ?? null,\n toImage: (opts?: ImageExportOptions): Promise<string> => {\n return toImage(cartesianChartRef.current?.chartContainer, _legendsRef.current?.toSVG, _useRtl, opts);\n },\n }),\n [],\n );\n\n const _adjustProps = () => {\n _barWidth = getBarWidth(props.barWidth, props.maxBarWidth);\n // x0_inner_padding = space_between_groups / (space_between_groups + group_width)\n // space_between_groups = 2 * bar_width\n // group_width = _legends.length * bar_width + (_legends.length - 1) * space_between_bars\n _xAxisInnerPadding = getScalePadding(\n props.xAxisInnerPadding,\n undefined,\n 2 / (2 + calcTotalBandUnits(_legends.length, X1_INNER_PADDING)),\n );\n _xAxisOuterPadding = getScalePadding(props.xAxisOuterPadding);\n };\n\n const _createDataset = (points: GroupedVerticalBarChartData[]) => {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const datasetForBars: any = [];\n\n points.forEach((point: GroupedVerticalBarChartData, index: number) => {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const singleDatasetPointForBars: any = {};\n const legendToBarPoint: Record<string, GVBarChartSeriesPoint> = {};\n\n point.series.forEach((seriesPoint: GVBarChartSeriesPoint) => {\n if (!singleDatasetPointForBars[seriesPoint.legend]) {\n singleDatasetPointForBars[seriesPoint.legend] = [{ ...seriesPoint }];\n legendToBarPoint[seriesPoint.legend] = { ...seriesPoint };\n } else {\n singleDatasetPointForBars[seriesPoint.legend].push({ ...seriesPoint });\n legendToBarPoint[seriesPoint.legend].data += seriesPoint.data;\n }\n });\n\n singleDatasetPointForBars.xAxisPoint = point.name;\n singleDatasetPointForBars.indexNum = index;\n singleDatasetPointForBars.groupSeries = Object.values(legendToBarPoint);\n singleDatasetPointForBars.stackCallOutAccessibilityData = point.stackCallOutAccessibilityData;\n datasetForBars.push(singleDatasetPointForBars);\n });\n return datasetForBars;\n };\n\n const _createDataSetOfGVBC = (points: GroupedVerticalBarChartData[]) => {\n const legends = new Set<string>();\n const xAxisLabels: string[] = points.map(singlePoint => singlePoint.name);\n points.forEach((point: GroupedVerticalBarChartData) => {\n point.series.forEach((seriesPoint: GVBarChartSeriesPoint) => {\n legends.add(seriesPoint.legend);\n });\n });\n const datasetForBars = _createDataset(points);\n return {\n legends: Array.from(legends),\n xAxisLabels,\n datasetForBars,\n };\n };\n\n const onLegendSelectionChange = (\n selectedLegends: string[],\n event: React.MouseEvent<HTMLButtonElement>,\n currentLegend?: Legend,\n ): void => {\n if (props.legendProps?.canSelectMultipleLegends) {\n setSelectedLegends(selectedLegends);\n } else {\n setSelectedLegends(selectedLegends.slice(-1));\n }\n if (props.legendProps?.onChange) {\n props.legendProps.onChange(selectedLegends, event, currentLegend);\n }\n };\n\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n const _getLegendData = (points: GroupedVerticalBarChartData[]): JSXElement => {\n const actions: Legend[] = [];\n\n _legends.forEach((legendTitle: string) => {\n const legend: Legend = {\n title: legendTitle,\n color: _legendColorMap[legendTitle][0],\n hoverAction: () => {\n _handleChartMouseLeave();\n _onLegendHover(legendTitle);\n },\n onMouseOutAction: () => {\n _onLegendLeave();\n },\n };\n\n actions.push(legend);\n });\n return (\n <Legends\n legends={actions}\n enabledWrapLines={props.enabledLegendsWrapLines}\n overflowText={props.legendsOverflowText}\n {...props.legendProps}\n onChange={onLegendSelectionChange}\n legendRef={_legendsRef}\n />\n );\n };\n\n const _addDefaultColors = (data?: GroupedVerticalBarChartData[]): GroupedVerticalBarChartData[] => {\n _legendColorMap = {};\n let colorIndex = 0;\n\n return (\n data?.map(point => {\n return {\n ...point,\n series:\n point.series?.map(seriesPoint => {\n // TODO: Add support for gradient colors\n let startColor = seriesPoint.color ? seriesPoint.color : getNextColor(colorIndex, 0);\n let endColor = startColor;\n if (!_legendColorMap[seriesPoint.legend]) {\n _legendColorMap[seriesPoint.legend] = [startColor, endColor];\n }\n colorIndex += 1;\n\n return {\n ...seriesPoint,\n color: seriesPoint.color ?? _legendColorMap[seriesPoint.legend][0],\n };\n }) ?? [],\n };\n }) ?? []\n );\n };\n\n const points = _addDefaultColors(props.data);\n const { legends, xAxisLabels, datasetForBars } = _createDataSetOfGVBC(points!);\n _legends = legends;\n _xAxisLabels = xAxisLabels;\n _datasetForBars = datasetForBars;\n const _xAxisType: XAxisTypes = getTypeOfAxis(points![0].name, true) as XAxisTypes;\n const legendBars: JSXElement = _getLegendData(points);\n _adjustProps();\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any -- Add commentMore actions\n function _getMinMaxOfYAxis(datasetForBars: any, yAxisType?: YAxisType, useSecondaryYScale?: boolean) {\n const values: number[] = [];\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n datasetForBars.forEach((data: any) => {\n data.groupSeries.forEach((point: GVBarChartSeriesPoint) => {\n if (!useSecondaryYScale === !point.useSecondaryYScale) {\n values.push(point.data);\n }\n });\n });\n\n return { startValue: d3Min(values)!, endValue: d3Max(values)! };\n }\n\n function _getDomainNRangeValues(\n points: GroupedVerticalBarChartData[],\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 || xAxisType === XAxisTypes.DateAxis) {\n domainNRangeValue = { dStartValue: 0, dEndValue: 0, rStartValue: 0, rEndValue: 0 };\n } else {\n domainNRangeValue = domainRangeOfXStringAxis(margins, width, isRTL);\n }\n return domainNRangeValue;\n }\n\n // The maxOfYVal prop is only required for the primary y-axis, so yMax should be calculated\n // using only the data points associated with the primary y-axis.\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const yMax = _getMinMaxOfYAxis(_datasetForBars).endValue;\n _yMax = Math.max(yMax, props.yMaxValue || 0);\n\n const calloutProps: ChartPopoverProps = {\n clickPosition,\n isPopoverOpen,\n color,\n legend: calloutLegend,\n XValue: xCalloutValue,\n YValue: yCalloutValue ? yCalloutValue : dataForHoverCard,\n YValueHover,\n hoverXValue,\n culture: props.culture ?? 'en-us',\n isCartesian: true,\n ...props.calloutProps,\n ...getAccessibleDataObject(callOutAccessibilityData, 'text', false),\n };\n const tickParams = {\n tickValues: props.tickValues!,\n tickFormat: props.tickFormat!,\n };\n\n const _getGraphData = (\n xScale: StringAxis | NumericAxis,\n yScalePrimary: ScaleLinear<number, number>,\n containerHeight: number,\n containerWidth: number,\n xElement?: SVGElement | null,\n yAxisElement?: SVGElement | null,\n yScaleSecondary?: ScaleLinear<number, number>,\n ) => {\n const xScale0 = _createX0Scale(containerWidth);\n\n // Setting the bar width here is safe because there are no dependencies earlier in the code\n // that rely on the width of bars in vertical bar charts with string x-axis.\n _barWidth = getBarWidth(\n props.barWidth,\n props.maxBarWidth,\n calcBandwidth(xScale0.bandwidth(), _legends.length, X1_INNER_PADDING),\n );\n _groupWidth = calcRequiredWidth(_barWidth, _legends.length, X1_INNER_PADDING);\n\n const xScale1 = _createX1Scale();\n const allGroupsBars: JSXElement[] = [];\n _datasetForBars.forEach((singleSet: GVSingleDataPoint) => {\n allGroupsBars.push(\n _buildGraph(singleSet, xScale0, xScale1, yScalePrimary, yScaleSecondary, containerHeight, xElement!),\n );\n });\n _groupedVerticalBarGraph = allGroupsBars;\n };\n\n const _getMargins = (margins: Margins) => {\n _margins = margins;\n };\n\n function updatePosition(newX: number, newY: number) {\n const threshold = 1; // Set a threshold for movement\n const { x, y } = clickPosition;\n // Calculate the distance moved\n const distance = Math.sqrt(Math.pow(newX - x, 2) + Math.pow(newY - y, 2));\n // Update the position only if the distance moved is greater than the threshold\n if (distance > threshold) {\n setClickPosition({ x: newX, y: newY });\n setPopoverOpen(true);\n }\n }\n\n const onBarHover = (\n pointData: GVBarChartSeriesPoint,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n groupData: any,\n mouseEvent: React.MouseEvent<SVGElement>,\n ): void => {\n mouseEvent.persist();\n if (_calloutAnchorPoint !== pointData) {\n _calloutAnchorPoint = pointData;\n updatePosition(mouseEvent.clientX, mouseEvent.clientY);\n setPopoverOpen(_noLegendHighlighted() || _legendHighlighted(pointData.legend));\n setCalloutLegend(pointData.legend);\n setDataForHoverCard(pointData.data);\n setColor(pointData.color);\n setXCalloutValue(pointData.xAxisCalloutData!);\n setYCalloutValue(pointData.yAxisCalloutData!);\n setCallOutAccessibilityData(\n props.isCalloutForStack ? groupData.stackCallOutAccessibilityData : pointData.callOutAccessibilityData,\n );\n setYValueHover(groupData.groupSeries);\n setHoverXValue(pointData.xAxisCalloutData!);\n }\n };\n\n const _onBarLeave = (): void => {\n /**/\n };\n\n const _handleChartMouseLeave = (): void => {\n _calloutAnchorPoint = null;\n setPopoverOpen(false);\n };\n\n const onBarFocus = (\n event: React.FocusEvent<SVGRectElement, Element>,\n pointData: GVBarChartSeriesPoint,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n groupData: any,\n ): void => {\n let x = 0;\n let y = 0;\n\n const targetRect = (event.target as SVGRectElement).getBoundingClientRect();\n x = targetRect.left + targetRect.width / 2;\n y = targetRect.top + targetRect.height / 2;\n updatePosition(x, y);\n setPopoverOpen(_noLegendHighlighted() || _legendHighlighted(pointData.legend));\n setCalloutLegend(pointData.legend);\n setDataForHoverCard(pointData.data);\n setColor(pointData.color);\n setXCalloutValue(pointData.xAxisCalloutData!);\n setYCalloutValue(pointData.yAxisCalloutData!);\n setCallOutAccessibilityData(\n props.isCalloutForStack ? groupData.stackCallOutAccessibilityData : pointData.callOutAccessibilityData,\n );\n setYValueHover(groupData.groupSeries);\n setHoverXValue(pointData.xAxisCalloutData!);\n };\n\n const _buildGraph = (\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n singleSet: any,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n xScale0: any,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n xScale1: any,\n yScalePrimary: ScaleLinear<number, number>,\n yScaleSecondary: ScaleLinear<number, number> | undefined,\n containerHeight: number,\n xElement: SVGElement,\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n ): JSXElement => {\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n const singleGroup: JSXElement[] = [];\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n const barLabelsForGroup: JSXElement[] = [];\n\n // Get the actual legends present at this x-axis point\n const presentLegends = Object.keys(singleSet).filter(key => key in _legendColorMap);\n const effectiveGroupWidth = calcRequiredWidth(_barWidth, presentLegends.length, X1_INNER_PADDING);\n\n // For stacked bars, center the single bar group in the available space\n // Instead of using the global legend position, use the local position within present legends\n const localScale = d3ScaleBand()\n .domain(presentLegends)\n .range(_useRtl ? [effectiveGroupWidth, 0] : [0, effectiveGroupWidth])\n .paddingInner(X1_INNER_PADDING);\n _legends.forEach((legendTitle: string, legendIndex: number) => {\n const barPoints = singleSet[legendTitle];\n if (barPoints) {\n const yBarScale = barPoints[0].useSecondaryYScale && yScaleSecondary ? yScaleSecondary : yScalePrimary;\n\n const xPoint = (localScale(legendTitle) ?? 0) + (localScale.bandwidth() - _barWidth) / 2;\n const isLegendActive = _legendHighlighted(legendTitle) || _noLegendHighlighted();\n const barOpacity = isLegendActive ? '' : '0.1';\n\n let barTotalValue = 0;\n const yBaseline = yBarScale(Y_ORIGIN);\n let yPositiveStart = yBaseline;\n let yNegativeStart = yBaseline;\n let yPoint = Y_ORIGIN;\n\n barPoints.forEach((pointData: GVBarChartSeriesPoint, pointIndex: number) => {\n if (!pointData.data) {\n // Not rendering data with 0.\n return;\n }\n const barGap = (VERTICAL_BAR_GAP / 2) * (pointIndex > 0 ? 2 : 0);\n const height = Math.max(yBarScale(Y_ORIGIN) - yBarScale(Math.abs(pointData.data)), MIN_BAR_HEIGHT);\n const pointColor = pointData.color; // Use the color of the current point\n\n if (pointData.data >= Y_ORIGIN) {\n yPositiveStart -= height + barGap;\n yPoint = yPositiveStart;\n } else {\n yPoint = yNegativeStart + barGap;\n yNegativeStart = yPoint + height;\n }\n\n singleGroup.push(\n <rect\n key={`${singleSet.indexNum}-${legendIndex}-${pointIndex}`}\n className={classes.opacityChangeOnHover}\n height={height}\n width={_barWidth}\n x={xPoint}\n y={yPoint}\n opacity={barOpacity}\n fill={pointColor}\n rx={0}\n onMouseOver={event => onBarHover(pointData, singleSet, event)}\n onMouseMove={event => onBarHover(pointData, singleSet, event)}\n onMouseOut={_onBarLeave}\n onFocus={event => onBarFocus(event, pointData, singleSet)}\n onBlur={_onBarLeave}\n onClick={pointData.onClick}\n aria-label={getAriaLabel(pointData, singleSet.xAxisPoint)}\n tabIndex={_legendHighlighted(pointData.legend) || _noLegendHighlighted() ? 0 : undefined}\n role=\"img\"\n />,\n );\n\n barTotalValue += pointData.data;\n });\n if (barTotalValue !== null && !props.hideLabels && _barWidth >= 16 && isLegendActive) {\n barLabelsForGroup.push(\n <text\n key={`${singleSet.indexNum}-${legendIndex}`}\n x={xPoint + _barWidth / 2}\n y={barTotalValue >= Y_ORIGIN ? yPositiveStart - 6 : yNegativeStart + 12}\n textAnchor=\"middle\"\n className={classes.barLabel}\n aria-hidden={true}\n >\n {typeof props.yAxisTickFormat === 'function'\n ? props.yAxisTickFormat(barTotalValue)\n : formatScientificLimitWidth(barTotalValue)}\n </text>,\n );\n }\n }\n });\n // Used to display tooltip at x axis labels.\n if (!props.wrapXAxisLables && props.showXAxisLablesTooltip) {\n const xAxisElement = d3Select(xElement).call(xScale0);\n try {\n document.getElementById(_tooltipId) && document.getElementById(_tooltipId)!.remove();\n // eslint-disable-next-line no-empty\n } catch (e) {}\n const tooltipProps = {\n tooltipCls: classes.tooltip!,\n id: _tooltipId,\n axis: xAxisElement,\n };\n xAxisElement && tooltipOfAxislabels(tooltipProps);\n }\n return (\n <g\n key={singleSet.indexNum}\n transform={`translate(${xScale0(singleSet.xAxisPoint) + (xScale0.bandwidth() - effectiveGroupWidth) / 2}, 0)`}\n >\n {singleGroup}\n {barLabelsForGroup}\n </g>\n );\n };\n\n // For grouped vertical bar chart, First need to define total scale (from start to end)\n // From that need to define scale for single group of bars - done by createX1Scale\n const _createX0Scale = (containerWidth: number) => {\n const x0Axis = d3ScaleBand()\n .domain(xAxisLabels)\n .range(\n _useRtl\n ? [containerWidth! - _margins.right! - _domainMargin, _margins.left! + _domainMargin]\n : [_margins.left! + _domainMargin, containerWidth! - _margins.right! - _domainMargin],\n )\n .paddingInner(_xAxisInnerPadding)\n .paddingOuter(_xAxisOuterPadding);\n return x0Axis;\n };\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const _createX1Scale = (): any => {\n return (\n d3ScaleBand()\n .domain(_legends)\n // When there is only one group, xScale0 adds padding around it,\n // causing the bandwidth to become smaller than the actual group width.\n // So to render bars in the group correctly, use groupWidth instead of the generated scale bandwidth.\n .range(_useRtl ? [_groupWidth, 0] : [0, _groupWidth])\n .paddingInner(X1_INNER_PADDING)\n );\n };\n\n const _onLegendHover = (legendTitle: string): void => {\n setActiveLegend(legendTitle);\n };\n\n const _onLegendLeave = (): void => {\n setActiveLegend('');\n };\n\n const _getAxisData = React.useCallback(\n (yAxisData: IAxisData) => {\n if (yAxisData && yAxisData.yAxisDomainValues.length) {\n const { yAxisDomainValues: domainValue } = yAxisData;\n _yMax = Math.max(domainValue[domainValue.length - 1], props.yMaxValue || 0);\n }\n },\n [props.yMaxValue],\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 _getHighlightedLegend().includes(legendTitle!);\n };\n\n /**\n * This function checks if none of the legends is selected or hovered.\n */\n const _noLegendHighlighted = () => {\n return _getHighlightedLegend().length === 0;\n };\n\n const _getHighlightedLegend = () => {\n return selectedLegends.length > 0 ? selectedLegends : activeLegend ? [activeLegend] : [];\n };\n\n const getAriaLabel = (point: GVBarChartSeriesPoint, xAxisPoint: string): string => {\n const xValue = point.xAxisCalloutData || xAxisPoint;\n const legend = point.legend;\n const yValue = point.yAxisCalloutData || point.data;\n return point.callOutAccessibilityData?.ariaLabel || `${xValue}. ${legend}, ${yValue}.`;\n };\n\n const _getDomainMargins = (containerWidth: number): Margins => {\n /** Total width available to render the bars */\n const totalWidth = calcTotalWidth(containerWidth, _margins, MIN_DOMAIN_MARGIN);\n\n if (_xAxisType === XAxisTypes.StringAxis) {\n if (isScalePaddingDefined(props.xAxisOuterPadding)) {\n // Setting the domain margin for string x-axis to 0 because the xAxisOuterPadding prop is now available\n // to adjust the space before the first group and after the last group.\n _domainMargin = 0;\n } else if (props.barWidth !== 'auto') {\n // Update the bar width so that when CartesianChart rerenders,\n // the following calculations don't use the previous bar width.\n _barWidth = getBarWidth(props.barWidth, props.maxBarWidth);\n const groupWidth = calcRequiredWidth(_barWidth, _legends.length, X1_INNER_PADDING);\n /** Total width required to render the groups. Directly proportional to group width */\n const reqWidth = calcRequiredWidth(groupWidth, _xAxisLabels.length, _xAxisInnerPadding);\n\n if (totalWidth >= reqWidth) {\n // Center align the chart by setting equal left and right margins for domain\n _domainMargin = MIN_DOMAIN_MARGIN + (totalWidth - reqWidth) / 2;\n }\n } else if (props.mode === 'plotly' && xAxisLabels.length > 1) {\n // Calculate the remaining width after rendering groups at their maximum allowable width\n const groupBandwidth = calcBandwidth(totalWidth, _xAxisLabels.length, _xAxisInnerPadding);\n const barBandwidth = calcBandwidth(groupBandwidth, _legends.length, X1_INNER_PADDING);\n const barWidth = getBarWidth(props.barWidth, props.maxBarWidth, barBandwidth);\n const groupWidth = calcRequiredWidth(barWidth, _legends.length, X1_INNER_PADDING);\n let reqWidth = calcRequiredWidth(groupWidth, _xAxisLabels.length, _xAxisInnerPadding);\n const margin1 = (totalWidth - reqWidth) / 2;\n\n let margin2 = Number.POSITIVE_INFINITY;\n if (!props.hideTickOverlap) {\n // Calculate the remaining width after accounting for the space required to render x-axis labels\n const step = calculateLongestLabelWidth(_xAxisLabels) + 20;\n reqWidth = (_xAxisLabels.length - _xAxisInnerPadding) * step;\n margin2 = (totalWidth - reqWidth) / 2;\n }\n\n _domainMargin = MIN_DOMAIN_MARGIN + Math.max(0, Math.min(margin1, margin2));\n }\n }\n\n return {\n ..._margins,\n left: _margins.left! + _domainMargin,\n right: _margins.right! + _domainMargin,\n };\n };\n\n const _isChartEmpty = (): boolean => {\n return !(\n props.data &&\n props.data.length > 0 &&\n props.data.filter((item: GroupedVerticalBarChartData) => item.series.length).length > 0\n );\n };\n\n const _getChartTitle = (): string => {\n return (\n (props.chartTitle ? `${props.chartTitle}. ` : '') +\n `Vertical bar chart with ${_xAxisLabels.length} groups of ${_legends.length} bars each. `\n );\n };\n\n return !_isChartEmpty() ? (\n <CartesianChart\n {...props}\n chartTitle={_getChartTitle()}\n points={_datasetForBars}\n chartType={ChartTypes.GroupedVerticalBarChart}\n getDomainNRangeValues={_getDomainNRangeValues}\n getMinMaxOfYAxis={_getMinMaxOfYAxis}\n createStringYAxis={createStringYAxis}\n calloutProps={calloutProps}\n legendBars={legendBars}\n xAxisType={_xAxisType}\n createYAxis={createNumericYAxis}\n datasetForXAxisDomain={_xAxisLabels}\n tickParams={tickParams}\n tickPadding={props.tickPadding || 5}\n maxOfYVal={_yMax}\n getmargins={_getMargins}\n getGraphData={_getGraphData}\n getAxisData={_getAxisData}\n onChartMouseLeave={_handleChartMouseLeave}\n getDomainMargins={_getDomainMargins}\n {...(_xAxisType === XAxisTypes.StringAxis && {\n xAxisInnerPadding: _xAxisInnerPadding,\n xAxisOuterPadding: _xAxisOuterPadding,\n })}\n barwidth={_barWidth}\n componentRef={cartesianChartRef}\n /* eslint-disable react/jsx-no-bind */\n children={() => {\n return <g>{_groupedVerticalBarGraph}</g>;\n }}\n />\n ) : (\n <div id={_emptyChartId} role={'alert'} style={{ opacity: '0' }} aria-label={'Graph has no data to display'} />\n );\n});\nGroupedVerticalBarChart.displayName = 'GroupedVerticalBarChart';\n"],"names":["React","useGroupedVerticalBarChartStyles_unstable","select","d3Select","max","d3Max","min","d3Min","scaleBand","d3ScaleBand","useId","ChartTypes","getAccessibleDataObject","tooltipOfAxislabels","XAxisTypes","getTypeOfAxis","formatScientificLimitWidth","getScalePadding","getBarWidth","isScalePaddingDefined","createNumericYAxis","domainRangeOfXStringAxis","createStringYAxis","getNextColor","areArraysEqual","calculateLongestLabelWidth","useRtl","calcRequiredWidth","calcTotalWidth","calcBandwidth","calcTotalBandUnits","CartesianChart","Legends","toImage","MIN_DOMAIN_MARGIN","X1_INNER_PADDING","VERTICAL_BAR_GAP","MIN_BAR_HEIGHT","GroupedVerticalBarChart","forwardRef","props","maxBarWidth","forwardedRef","_tooltipId","_emptyChartId","_useRtl","_domainMargin","_xAxisLabels","_datasetForBars","_margins","top","right","bottom","left","_groupedVerticalBarGraph","_yMax","_calloutAnchorPoint","_barWidth","_groupWidth","_xAxisInnerPadding","_xAxisOuterPadding","_legends","_legendColorMap","cartesianChartRef","useRef","Y_ORIGIN","_legendsRef","color","setColor","useState","dataForHoverCard","setDataForHoverCard","selectedLegends","setSelectedLegends","legendProps","xCalloutValue","setXCalloutValue","yCalloutValue","setYCalloutValue","YValueHover","setYValueHover","hoverXValue","setHoverXValue","calloutLegend","setCalloutLegend","activeLegend","setActiveLegend","callOutAccessibilityData","setCallOutAccessibilityData","undefined","clickPosition","setClickPosition","x","y","isPopoverOpen","setPopoverOpen","classes","useEffect","useImperativeHandle","componentRef","chartContainer","current","opts","toSVG","_adjustProps","barWidth","xAxisInnerPadding","length","xAxisOuterPadding","_createDataset","points","datasetForBars","forEach","point","index","singleDatasetPointForBars","legendToBarPoint","series","seriesPoint","legend","push","data","xAxisPoint","name","indexNum","groupSeries","Object","values","stackCallOutAccessibilityData","_createDataSetOfGVBC","legends","Set","xAxisLabels","map","singlePoint","add","Array","from","onLegendSelectionChange","event","currentLegend","canSelectMultipleLegends","slice","onChange","_getLegendData","actions","legendTitle","title","hoverAction","_handleChartMouseLeave","_onLegendHover","onMouseOutAction","_onLegendLeave","enabledWrapLines","enabledLegendsWrapLines","overflowText","legendsOverflowText","legendRef","_addDefaultColors","colorIndex","startColor","endColor","_xAxisType","legendBars","_getMinMaxOfYAxis","yAxisType","useSecondaryYScale","startValue","endValue","_getDomainNRangeValues","margins","width","chartType","isRTL","xAxisType","tickValues","shiftX","domainNRangeValue","NumericAxis","DateAxis","dStartValue","dEndValue","rStartValue","rEndValue","yMax","Math","yMaxValue","calloutProps","XValue","YValue","culture","isCartesian","tickParams","tickFormat","_getGraphData","xScale","yScalePrimary","containerHeight","containerWidth","xElement","yAxisElement","yScaleSecondary","xScale0","_createX0Scale","bandwidth","xScale1","_createX1Scale","allGroupsBars","singleSet","_buildGraph","_getMargins","updatePosition","newX","newY","threshold","distance","sqrt","pow","onBarHover","pointData","groupData","mouseEvent","persist","clientX","clientY","_noLegendHighlighted","_legendHighlighted","xAxisCalloutData","yAxisCalloutData","isCalloutForStack","_onBarLeave","onBarFocus","targetRect","target","getBoundingClientRect","height","singleGroup","barLabelsForGroup","presentLegends","keys","filter","key","effectiveGroupWidth","localScale","domain","range","paddingInner","legendIndex","barPoints","yBarScale","xPoint","isLegendActive","barOpacity","barTotalValue","yBaseline","yPositiveStart","yNegativeStart","yPoint","pointIndex","barGap","abs","pointColor","rect","className","opacityChangeOnHover","opacity","fill","rx","onMouseOver","onMouseMove","onMouseOut","onFocus","onBlur","onClick","aria-label","getAriaLabel","tabIndex","role","hideLabels","text","textAnchor","barLabel","aria-hidden","yAxisTickFormat","wrapXAxisLables","showXAxisLablesTooltip","xAxisElement","call","document","getElementById","remove","e","tooltipProps","tooltipCls","tooltip","id","axis","g","transform","x0Axis","paddingOuter","_getAxisData","useCallback","yAxisData","yAxisDomainValues","domainValue","_getHighlightedLegend","includes","xValue","yValue","ariaLabel","_getDomainMargins","totalWidth","StringAxis","groupWidth","reqWidth","mode","groupBandwidth","barBandwidth","margin1","margin2","Number","POSITIVE_INFINITY","hideTickOverlap","step","_isChartEmpty","item","_getChartTitle","chartTitle","getDomainNRangeValues","getMinMaxOfYAxis","createYAxis","datasetForXAxisDomain","tickPadding","maxOfYVal","getmargins","getGraphData","getAxisData","onChartMouseLeave","getDomainMargins","barwidth","children","div","style","displayName"],"mappings":"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"}
1
+ {"version":3,"sources":["../src/components/GroupedVerticalBarChart/GroupedVerticalBarChart.tsx"],"sourcesContent":["import * as React from 'react';\nimport { useGroupedVerticalBarChartStyles_unstable } from './useGroupedVerticalBarChartStyles.styles';\nimport { select as d3Select } from 'd3-selection';\nimport { Axis as D3Axis } from 'd3-axis';\nimport { max as d3Max, min as d3Min } from 'd3-array';\nimport { ScaleLinear, scaleBand as d3ScaleBand } from 'd3-scale';\n\nimport { useId, JSXElement } from '@fluentui/react-utilities';\nimport {\n ChartTypes,\n IAxisData,\n getAccessibleDataObject,\n tooltipOfAxislabels,\n XAxisTypes,\n getTypeOfAxis,\n formatScientificLimitWidth,\n getScalePadding,\n getBarWidth,\n isScalePaddingDefined,\n createNumericYAxis,\n IDomainNRange,\n domainRangeOfXStringAxis,\n createStringYAxis,\n getNextColor,\n areArraysEqual,\n calculateLongestLabelWidth,\n useRtl,\n YAxisType,\n calcRequiredWidth,\n calcTotalWidth,\n calcBandwidth,\n calcTotalBandUnits,\n sortAxisCategories,\n} from '../../utilities/index';\n\nimport {\n AccessibilityProps,\n CartesianChart,\n Margins,\n Legend,\n GroupedVerticalBarChartProps,\n GroupedVerticalBarChartData,\n GVBarChartSeriesPoint,\n Legends,\n YValueHover,\n ChartPopoverProps,\n Chart,\n ImageExportOptions,\n LegendContainer,\n} from '../../index';\nimport { toImage } from '../../utilities/image-export-utils';\n\ntype StringAxis = D3Axis<string>;\ntype NumericAxis = D3Axis<number | { valueOf(): number }>;\n\nconst MIN_DOMAIN_MARGIN = 8;\nconst X1_INNER_PADDING = 0.1;\nconst VERTICAL_BAR_GAP = 1;\nconst MIN_BAR_HEIGHT = 1;\n\n// This interface used for - While forming datapoints from given prop \"data\" in code\ninterface GVDataPoint {\n [key: string]: number | string;\n}\n\n// While forming datapoints from given prop \"data\" in code. These datapoints are used for to draw graph easily.\ninterface GVSingleDataPoint {\n [key: string]: GVDataPoint;\n}\n\nexport const GroupedVerticalBarChart: React.FC<GroupedVerticalBarChartProps> = React.forwardRef<\n HTMLDivElement,\n GroupedVerticalBarChartProps\n>((props = { maxBarWidth: 24, xAxisCategoryOrder: 'default' }, forwardedRef) => {\n const _tooltipId: string = useId('GVBCTooltipId_');\n const _emptyChartId: string = useId('_GVBC_empty');\n const _useRtl: boolean = useRtl();\n let _domainMargin: number = MIN_DOMAIN_MARGIN;\n let _xAxisLabels: string[] = [];\n let _datasetForBars: any[] = [];\n let _margins: Margins = { top: 0, right: 0, bottom: 0, left: 0 };\n let _groupedVerticalBarGraph: JSXElement[] = [];\n let _yMax: number = 0;\n let _calloutAnchorPoint: GVBarChartSeriesPoint | null = null;\n let _barWidth: number = 0;\n let _groupWidth: number = 0;\n let _xAxisInnerPadding: number = 0;\n let _xAxisOuterPadding: number = 0;\n let _legends: string[] = [];\n let _legendColorMap: Record<string, [string, string]> = {};\n const cartesianChartRef = React.useRef<Chart>(null);\n const Y_ORIGIN: number = 0;\n const _legendsRef = React.useRef<LegendContainer>(null);\n\n const [color, setColor] = React.useState<string>('');\n const [dataForHoverCard, setDataForHoverCard] = React.useState<number>(0);\n const [selectedLegends, setSelectedLegends] = React.useState<string[]>(props.legendProps?.selectedLegends || []);\n const [xCalloutValue, setXCalloutValue] = React.useState<string>('');\n const [yCalloutValue, setYCalloutValue] = React.useState<string>('');\n const [YValueHover, setYValueHover] = React.useState<YValueHover[]>([]);\n const [hoverXValue, setHoverXValue] = React.useState<string>('');\n const [calloutLegend, setCalloutLegend] = React.useState<string>('');\n const [activeLegend, setActiveLegend] = React.useState<string>('');\n const [callOutAccessibilityData, setCallOutAccessibilityData] = React.useState<AccessibilityProps | undefined>(\n undefined,\n );\n const [clickPosition, setClickPosition] = React.useState({ x: 0, y: 0 });\n const [isPopoverOpen, setPopoverOpen] = React.useState<boolean>(false);\n const classes = useGroupedVerticalBarChartStyles_unstable(props);\n\n React.useEffect(() => {\n if (!areArraysEqual(props.legendProps?.selectedLegends, selectedLegends)) {\n setSelectedLegends(props.legendProps?.selectedLegends || []);\n }\n }, [props.legendProps?.selectedLegends]);\n\n React.useImperativeHandle(\n props.componentRef,\n () => ({\n chartContainer: cartesianChartRef.current?.chartContainer ?? null,\n toImage: (opts?: ImageExportOptions): Promise<string> => {\n return toImage(cartesianChartRef.current?.chartContainer, _legendsRef.current?.toSVG, _useRtl, opts);\n },\n }),\n [],\n );\n\n const _adjustProps = () => {\n _barWidth = getBarWidth(props.barWidth, props.maxBarWidth);\n // x0_inner_padding = space_between_groups / (space_between_groups + group_width)\n // space_between_groups = 2 * bar_width\n // group_width = _legends.length * bar_width + (_legends.length - 1) * space_between_bars\n _xAxisInnerPadding = getScalePadding(\n props.xAxisInnerPadding,\n undefined,\n 2 / (2 + calcTotalBandUnits(_legends.length, X1_INNER_PADDING)),\n );\n _xAxisOuterPadding = getScalePadding(props.xAxisOuterPadding);\n };\n\n const _createDataset = (points: GroupedVerticalBarChartData[]) => {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const datasetForBars: any = [];\n\n points.forEach((point: GroupedVerticalBarChartData, index: number) => {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const singleDatasetPointForBars: any = {};\n const legendToBarPoint: Record<string, GVBarChartSeriesPoint> = {};\n\n point.series.forEach((seriesPoint: GVBarChartSeriesPoint) => {\n if (!singleDatasetPointForBars[seriesPoint.legend]) {\n singleDatasetPointForBars[seriesPoint.legend] = [{ ...seriesPoint }];\n legendToBarPoint[seriesPoint.legend] = { ...seriesPoint };\n } else {\n singleDatasetPointForBars[seriesPoint.legend].push({ ...seriesPoint });\n legendToBarPoint[seriesPoint.legend].data += seriesPoint.data;\n }\n });\n\n singleDatasetPointForBars.xAxisPoint = point.name;\n singleDatasetPointForBars.indexNum = index;\n singleDatasetPointForBars.groupSeries = Object.values(legendToBarPoint);\n singleDatasetPointForBars.stackCallOutAccessibilityData = point.stackCallOutAccessibilityData;\n datasetForBars.push(singleDatasetPointForBars);\n });\n return datasetForBars;\n };\n\n const _createDataSetOfGVBC = (points: GroupedVerticalBarChartData[]) => {\n const legends = new Set<string>();\n const xAxisLabels: string[] = _getOrderedXAxisLabels(points);\n points.forEach((point: GroupedVerticalBarChartData) => {\n point.series.forEach((seriesPoint: GVBarChartSeriesPoint) => {\n legends.add(seriesPoint.legend);\n });\n });\n const datasetForBars = _createDataset(points);\n return {\n legends: Array.from(legends),\n xAxisLabels,\n datasetForBars,\n };\n };\n\n const onLegendSelectionChange = (\n selectedLegends: string[],\n event: React.MouseEvent<HTMLButtonElement>,\n currentLegend?: Legend,\n ): void => {\n if (props.legendProps?.canSelectMultipleLegends) {\n setSelectedLegends(selectedLegends);\n } else {\n setSelectedLegends(selectedLegends.slice(-1));\n }\n if (props.legendProps?.onChange) {\n props.legendProps.onChange(selectedLegends, event, currentLegend);\n }\n };\n\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n const _getLegendData = (points: GroupedVerticalBarChartData[]): JSXElement => {\n const actions: Legend[] = [];\n\n _legends.forEach((legendTitle: string) => {\n const legend: Legend = {\n title: legendTitle,\n color: _legendColorMap[legendTitle][0],\n hoverAction: () => {\n _handleChartMouseLeave();\n _onLegendHover(legendTitle);\n },\n onMouseOutAction: () => {\n _onLegendLeave();\n },\n };\n\n actions.push(legend);\n });\n return (\n <Legends\n legends={actions}\n enabledWrapLines={props.enabledLegendsWrapLines}\n overflowText={props.legendsOverflowText}\n {...props.legendProps}\n onChange={onLegendSelectionChange}\n legendRef={_legendsRef}\n />\n );\n };\n\n const _addDefaultColors = (data?: GroupedVerticalBarChartData[]): GroupedVerticalBarChartData[] => {\n _legendColorMap = {};\n let colorIndex = 0;\n\n return (\n data?.map(point => {\n return {\n ...point,\n series:\n point.series?.map(seriesPoint => {\n // TODO: Add support for gradient colors\n let startColor = seriesPoint.color ? seriesPoint.color : getNextColor(colorIndex, 0);\n let endColor = startColor;\n if (!_legendColorMap[seriesPoint.legend]) {\n _legendColorMap[seriesPoint.legend] = [startColor, endColor];\n }\n colorIndex += 1;\n\n return {\n ...seriesPoint,\n color: seriesPoint.color ?? _legendColorMap[seriesPoint.legend][0],\n };\n }) ?? [],\n };\n }) ?? []\n );\n };\n\n const _getOrderedXAxisLabels = (points: GroupedVerticalBarChartData[]) => {\n if (_xAxisType !== XAxisTypes.StringAxis) {\n return [];\n }\n\n return sortAxisCategories(_mapCategoryToValues(points), props.xAxisCategoryOrder);\n };\n\n const _mapCategoryToValues = (points: GroupedVerticalBarChartData[]) => {\n const categoryToValues: Record<string, number[]> = {};\n points.forEach(point => {\n if (!categoryToValues[point.name]) {\n categoryToValues[point.name] = [];\n }\n point.series.forEach(seriesPoint => {\n categoryToValues[point.name].push(seriesPoint.data);\n });\n });\n return categoryToValues;\n };\n\n const points = _addDefaultColors(props.data);\n const _xAxisType: XAxisTypes = getTypeOfAxis(points![0].name, true) as XAxisTypes;\n const { legends, xAxisLabels, datasetForBars } = _createDataSetOfGVBC(points!);\n _legends = legends;\n _xAxisLabels = xAxisLabels;\n _datasetForBars = datasetForBars;\n const legendBars: JSXElement = _getLegendData(points);\n _adjustProps();\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any -- Add commentMore actions\n function _getMinMaxOfYAxis(datasetForBars: any, yAxisType?: YAxisType, useSecondaryYScale?: boolean) {\n const values: number[] = [];\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n datasetForBars.forEach((data: any) => {\n data.groupSeries.forEach((point: GVBarChartSeriesPoint) => {\n if (!useSecondaryYScale === !point.useSecondaryYScale) {\n values.push(point.data);\n }\n });\n });\n\n return { startValue: d3Min(values)!, endValue: d3Max(values)! };\n }\n\n function _getDomainNRangeValues(\n points: GroupedVerticalBarChartData[],\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 || xAxisType === XAxisTypes.DateAxis) {\n domainNRangeValue = { dStartValue: 0, dEndValue: 0, rStartValue: 0, rEndValue: 0 };\n } else {\n domainNRangeValue = domainRangeOfXStringAxis(margins, width, isRTL);\n }\n return domainNRangeValue;\n }\n\n // The maxOfYVal prop is only required for the primary y-axis, so yMax should be calculated\n // using only the data points associated with the primary y-axis.\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const yMax = _getMinMaxOfYAxis(_datasetForBars).endValue;\n _yMax = Math.max(yMax, props.yMaxValue || 0);\n\n const calloutProps: ChartPopoverProps = {\n clickPosition,\n isPopoverOpen,\n color,\n legend: calloutLegend,\n XValue: xCalloutValue,\n YValue: yCalloutValue ? yCalloutValue : dataForHoverCard,\n YValueHover,\n hoverXValue,\n culture: props.culture ?? 'en-us',\n isCartesian: true,\n ...props.calloutProps,\n ...getAccessibleDataObject(callOutAccessibilityData, 'text', false),\n };\n const tickParams = {\n tickValues: props.tickValues!,\n tickFormat: props.tickFormat!,\n };\n\n const _getGraphData = (\n xScale: StringAxis | NumericAxis,\n yScalePrimary: ScaleLinear<number, number>,\n containerHeight: number,\n containerWidth: number,\n xElement?: SVGElement | null,\n yAxisElement?: SVGElement | null,\n yScaleSecondary?: ScaleLinear<number, number>,\n ) => {\n const xScale0 = _createX0Scale(containerWidth);\n\n // Setting the bar width here is safe because there are no dependencies earlier in the code\n // that rely on the width of bars in vertical bar charts with string x-axis.\n _barWidth = getBarWidth(\n props.barWidth,\n props.maxBarWidth,\n calcBandwidth(xScale0.bandwidth(), _legends.length, X1_INNER_PADDING),\n );\n _groupWidth = calcRequiredWidth(_barWidth, _legends.length, X1_INNER_PADDING);\n\n const xScale1 = _createX1Scale();\n const allGroupsBars: JSXElement[] = [];\n _datasetForBars.forEach((singleSet: GVSingleDataPoint) => {\n allGroupsBars.push(\n _buildGraph(singleSet, xScale0, xScale1, yScalePrimary, yScaleSecondary, containerHeight, xElement!),\n );\n });\n _groupedVerticalBarGraph = allGroupsBars;\n };\n\n const _getMargins = (margins: Margins) => {\n _margins = margins;\n };\n\n function updatePosition(newX: number, newY: number) {\n const threshold = 1; // Set a threshold for movement\n const { x, y } = clickPosition;\n // Calculate the distance moved\n const distance = Math.sqrt(Math.pow(newX - x, 2) + Math.pow(newY - y, 2));\n // Update the position only if the distance moved is greater than the threshold\n if (distance > threshold) {\n setClickPosition({ x: newX, y: newY });\n setPopoverOpen(true);\n }\n }\n\n const onBarHover = (\n pointData: GVBarChartSeriesPoint,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n groupData: any,\n mouseEvent: React.MouseEvent<SVGElement>,\n ): void => {\n mouseEvent.persist();\n if (_calloutAnchorPoint !== pointData) {\n _calloutAnchorPoint = pointData;\n updatePosition(mouseEvent.clientX, mouseEvent.clientY);\n setPopoverOpen(_noLegendHighlighted() || _legendHighlighted(pointData.legend));\n setCalloutLegend(pointData.legend);\n setDataForHoverCard(pointData.data);\n setColor(pointData.color);\n setXCalloutValue(pointData.xAxisCalloutData!);\n setYCalloutValue(pointData.yAxisCalloutData!);\n setCallOutAccessibilityData(\n props.isCalloutForStack ? groupData.stackCallOutAccessibilityData : pointData.callOutAccessibilityData,\n );\n setYValueHover(groupData.groupSeries);\n setHoverXValue(pointData.xAxisCalloutData!);\n }\n };\n\n const _onBarLeave = (): void => {\n /**/\n };\n\n const _handleChartMouseLeave = (): void => {\n _calloutAnchorPoint = null;\n setPopoverOpen(false);\n };\n\n const onBarFocus = (\n event: React.FocusEvent<SVGRectElement, Element>,\n pointData: GVBarChartSeriesPoint,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n groupData: any,\n ): void => {\n let x = 0;\n let y = 0;\n\n const targetRect = (event.target as SVGRectElement).getBoundingClientRect();\n x = targetRect.left + targetRect.width / 2;\n y = targetRect.top + targetRect.height / 2;\n updatePosition(x, y);\n setPopoverOpen(_noLegendHighlighted() || _legendHighlighted(pointData.legend));\n setCalloutLegend(pointData.legend);\n setDataForHoverCard(pointData.data);\n setColor(pointData.color);\n setXCalloutValue(pointData.xAxisCalloutData!);\n setYCalloutValue(pointData.yAxisCalloutData!);\n setCallOutAccessibilityData(\n props.isCalloutForStack ? groupData.stackCallOutAccessibilityData : pointData.callOutAccessibilityData,\n );\n setYValueHover(groupData.groupSeries);\n setHoverXValue(pointData.xAxisCalloutData!);\n };\n\n const _buildGraph = (\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n singleSet: any,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n xScale0: any,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n xScale1: any,\n yScalePrimary: ScaleLinear<number, number>,\n yScaleSecondary: ScaleLinear<number, number> | undefined,\n containerHeight: number,\n xElement: SVGElement,\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n ): JSXElement => {\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n const singleGroup: JSXElement[] = [];\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n const barLabelsForGroup: JSXElement[] = [];\n\n // Get the actual legends present at this x-axis point\n const presentLegends = Object.keys(singleSet).filter(key => key in _legendColorMap);\n const effectiveGroupWidth = calcRequiredWidth(_barWidth, presentLegends.length, X1_INNER_PADDING);\n\n // For stacked bars, center the single bar group in the available space\n // Instead of using the global legend position, use the local position within present legends\n const localScale = d3ScaleBand()\n .domain(presentLegends)\n .range(_useRtl ? [effectiveGroupWidth, 0] : [0, effectiveGroupWidth])\n .paddingInner(X1_INNER_PADDING);\n _legends.forEach((legendTitle: string, legendIndex: number) => {\n const barPoints = singleSet[legendTitle];\n if (barPoints) {\n const yBarScale = barPoints[0].useSecondaryYScale && yScaleSecondary ? yScaleSecondary : yScalePrimary;\n\n const xPoint = (localScale(legendTitle) ?? 0) + (localScale.bandwidth() - _barWidth) / 2;\n const isLegendActive = _legendHighlighted(legendTitle) || _noLegendHighlighted();\n const barOpacity = isLegendActive ? '' : '0.1';\n\n let barTotalValue = 0;\n const yBaseline = yBarScale(Y_ORIGIN);\n let yPositiveStart = yBaseline;\n let yNegativeStart = yBaseline;\n let yPoint = Y_ORIGIN;\n\n barPoints.forEach((pointData: GVBarChartSeriesPoint, pointIndex: number) => {\n if (!pointData.data) {\n // Not rendering data with 0.\n return;\n }\n const barGap = (VERTICAL_BAR_GAP / 2) * (pointIndex > 0 ? 2 : 0);\n const height = Math.max(yBarScale(Y_ORIGIN) - yBarScale(Math.abs(pointData.data)), MIN_BAR_HEIGHT);\n const pointColor = pointData.color; // Use the color of the current point\n\n if (pointData.data >= Y_ORIGIN) {\n yPositiveStart -= height + barGap;\n yPoint = yPositiveStart;\n } else {\n yPoint = yNegativeStart + barGap;\n yNegativeStart = yPoint + height;\n }\n\n singleGroup.push(\n <rect\n key={`${singleSet.indexNum}-${legendIndex}-${pointIndex}`}\n className={classes.opacityChangeOnHover}\n height={height}\n width={_barWidth}\n x={xPoint}\n y={yPoint}\n opacity={barOpacity}\n fill={pointColor}\n rx={0}\n onMouseOver={event => onBarHover(pointData, singleSet, event)}\n onMouseMove={event => onBarHover(pointData, singleSet, event)}\n onMouseOut={_onBarLeave}\n onFocus={event => onBarFocus(event, pointData, singleSet)}\n onBlur={_onBarLeave}\n onClick={pointData.onClick}\n aria-label={getAriaLabel(pointData, singleSet.xAxisPoint)}\n tabIndex={_legendHighlighted(pointData.legend) || _noLegendHighlighted() ? 0 : undefined}\n role=\"img\"\n />,\n );\n\n barTotalValue += pointData.data;\n });\n if (barTotalValue !== null && !props.hideLabels && _barWidth >= 16 && isLegendActive) {\n barLabelsForGroup.push(\n <text\n key={`${singleSet.indexNum}-${legendIndex}`}\n x={xPoint + _barWidth / 2}\n y={barTotalValue >= Y_ORIGIN ? yPositiveStart - 6 : yNegativeStart + 12}\n textAnchor=\"middle\"\n className={classes.barLabel}\n aria-hidden={true}\n >\n {typeof props.yAxisTickFormat === 'function'\n ? props.yAxisTickFormat(barTotalValue)\n : formatScientificLimitWidth(barTotalValue)}\n </text>,\n );\n }\n }\n });\n // Used to display tooltip at x axis labels.\n if (!props.wrapXAxisLables && props.showXAxisLablesTooltip) {\n const xAxisElement = d3Select(xElement).call(xScale0);\n try {\n document.getElementById(_tooltipId) && document.getElementById(_tooltipId)!.remove();\n // eslint-disable-next-line no-empty\n } catch (e) {}\n const tooltipProps = {\n tooltipCls: classes.tooltip!,\n id: _tooltipId,\n axis: xAxisElement,\n };\n xAxisElement && tooltipOfAxislabels(tooltipProps);\n }\n return (\n <g\n key={singleSet.indexNum}\n transform={`translate(${xScale0(singleSet.xAxisPoint) + (xScale0.bandwidth() - effectiveGroupWidth) / 2}, 0)`}\n >\n {singleGroup}\n {barLabelsForGroup}\n </g>\n );\n };\n\n // For grouped vertical bar chart, First need to define total scale (from start to end)\n // From that need to define scale for single group of bars - done by createX1Scale\n const _createX0Scale = (containerWidth: number) => {\n const x0Axis = d3ScaleBand()\n .domain(xAxisLabels)\n .range(\n _useRtl\n ? [containerWidth! - _margins.right! - _domainMargin, _margins.left! + _domainMargin]\n : [_margins.left! + _domainMargin, containerWidth! - _margins.right! - _domainMargin],\n )\n .paddingInner(_xAxisInnerPadding)\n .paddingOuter(_xAxisOuterPadding);\n return x0Axis;\n };\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const _createX1Scale = (): any => {\n return (\n d3ScaleBand()\n .domain(_legends)\n // When there is only one group, xScale0 adds padding around it,\n // causing the bandwidth to become smaller than the actual group width.\n // So to render bars in the group correctly, use groupWidth instead of the generated scale bandwidth.\n .range(_useRtl ? [_groupWidth, 0] : [0, _groupWidth])\n .paddingInner(X1_INNER_PADDING)\n );\n };\n\n const _onLegendHover = (legendTitle: string): void => {\n setActiveLegend(legendTitle);\n };\n\n const _onLegendLeave = (): void => {\n setActiveLegend('');\n };\n\n const _getAxisData = React.useCallback(\n (yAxisData: IAxisData) => {\n if (yAxisData && yAxisData.yAxisDomainValues.length) {\n const { yAxisDomainValues: domainValue } = yAxisData;\n _yMax = Math.max(domainValue[domainValue.length - 1], props.yMaxValue || 0);\n }\n },\n [props.yMaxValue],\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 _getHighlightedLegend().includes(legendTitle!);\n };\n\n /**\n * This function checks if none of the legends is selected or hovered.\n */\n const _noLegendHighlighted = () => {\n return _getHighlightedLegend().length === 0;\n };\n\n const _getHighlightedLegend = () => {\n return selectedLegends.length > 0 ? selectedLegends : activeLegend ? [activeLegend] : [];\n };\n\n const getAriaLabel = (point: GVBarChartSeriesPoint, xAxisPoint: string): string => {\n const xValue = point.xAxisCalloutData || xAxisPoint;\n const legend = point.legend;\n const yValue = point.yAxisCalloutData || point.data;\n return point.callOutAccessibilityData?.ariaLabel || `${xValue}. ${legend}, ${yValue}.`;\n };\n\n const _getDomainMargins = (containerWidth: number): Margins => {\n /** Total width available to render the bars */\n const totalWidth = calcTotalWidth(containerWidth, _margins, MIN_DOMAIN_MARGIN);\n\n if (_xAxisType === XAxisTypes.StringAxis) {\n if (isScalePaddingDefined(props.xAxisOuterPadding)) {\n // Setting the domain margin for string x-axis to 0 because the xAxisOuterPadding prop is now available\n // to adjust the space before the first group and after the last group.\n _domainMargin = 0;\n } else if (props.barWidth !== 'auto') {\n // Update the bar width so that when CartesianChart rerenders,\n // the following calculations don't use the previous bar width.\n _barWidth = getBarWidth(props.barWidth, props.maxBarWidth);\n const groupWidth = calcRequiredWidth(_barWidth, _legends.length, X1_INNER_PADDING);\n /** Total width required to render the groups. Directly proportional to group width */\n const reqWidth = calcRequiredWidth(groupWidth, _xAxisLabels.length, _xAxisInnerPadding);\n\n if (totalWidth >= reqWidth) {\n // Center align the chart by setting equal left and right margins for domain\n _domainMargin = MIN_DOMAIN_MARGIN + (totalWidth - reqWidth) / 2;\n }\n } else if (props.mode === 'plotly' && xAxisLabels.length > 1) {\n // Calculate the remaining width after rendering groups at their maximum allowable width\n const groupBandwidth = calcBandwidth(totalWidth, _xAxisLabels.length, _xAxisInnerPadding);\n const barBandwidth = calcBandwidth(groupBandwidth, _legends.length, X1_INNER_PADDING);\n const barWidth = getBarWidth(props.barWidth, props.maxBarWidth, barBandwidth);\n const groupWidth = calcRequiredWidth(barWidth, _legends.length, X1_INNER_PADDING);\n let reqWidth = calcRequiredWidth(groupWidth, _xAxisLabels.length, _xAxisInnerPadding);\n const margin1 = (totalWidth - reqWidth) / 2;\n\n let margin2 = Number.POSITIVE_INFINITY;\n if (!props.hideTickOverlap) {\n // Calculate the remaining width after accounting for the space required to render x-axis labels\n const step = calculateLongestLabelWidth(_xAxisLabels) + 20;\n reqWidth = (_xAxisLabels.length - _xAxisInnerPadding) * step;\n margin2 = (totalWidth - reqWidth) / 2;\n }\n\n _domainMargin = MIN_DOMAIN_MARGIN + Math.max(0, Math.min(margin1, margin2));\n }\n }\n\n return {\n ..._margins,\n left: _margins.left! + _domainMargin,\n right: _margins.right! + _domainMargin,\n };\n };\n\n const _isChartEmpty = (): boolean => {\n return !(\n props.data &&\n props.data.length > 0 &&\n props.data.filter((item: GroupedVerticalBarChartData) => item.series.length).length > 0\n );\n };\n\n const _getChartTitle = (): string => {\n return (\n (props.chartTitle ? `${props.chartTitle}. ` : '') +\n `Vertical bar chart with ${_xAxisLabels.length} groups of ${_legends.length} bars each. `\n );\n };\n\n return !_isChartEmpty() ? (\n <CartesianChart\n {...props}\n chartTitle={_getChartTitle()}\n points={_datasetForBars}\n chartType={ChartTypes.GroupedVerticalBarChart}\n getDomainNRangeValues={_getDomainNRangeValues}\n getMinMaxOfYAxis={_getMinMaxOfYAxis}\n createStringYAxis={createStringYAxis}\n calloutProps={calloutProps}\n legendBars={legendBars}\n xAxisType={_xAxisType}\n createYAxis={createNumericYAxis}\n datasetForXAxisDomain={_xAxisLabels}\n tickParams={tickParams}\n tickPadding={props.tickPadding || 5}\n maxOfYVal={_yMax}\n getmargins={_getMargins}\n getGraphData={_getGraphData}\n getAxisData={_getAxisData}\n onChartMouseLeave={_handleChartMouseLeave}\n getDomainMargins={_getDomainMargins}\n {...(_xAxisType === XAxisTypes.StringAxis && {\n xAxisInnerPadding: _xAxisInnerPadding,\n xAxisOuterPadding: _xAxisOuterPadding,\n })}\n barwidth={_barWidth}\n componentRef={cartesianChartRef}\n /* eslint-disable react/jsx-no-bind */\n children={() => {\n return <g>{_groupedVerticalBarGraph}</g>;\n }}\n />\n ) : (\n <div id={_emptyChartId} role={'alert'} style={{ opacity: '0' }} aria-label={'Graph has no data to display'} />\n );\n});\nGroupedVerticalBarChart.displayName = 'GroupedVerticalBarChart';\n"],"names":["React","useGroupedVerticalBarChartStyles_unstable","select","d3Select","max","d3Max","min","d3Min","scaleBand","d3ScaleBand","useId","ChartTypes","getAccessibleDataObject","tooltipOfAxislabels","XAxisTypes","getTypeOfAxis","formatScientificLimitWidth","getScalePadding","getBarWidth","isScalePaddingDefined","createNumericYAxis","domainRangeOfXStringAxis","createStringYAxis","getNextColor","areArraysEqual","calculateLongestLabelWidth","useRtl","calcRequiredWidth","calcTotalWidth","calcBandwidth","calcTotalBandUnits","sortAxisCategories","CartesianChart","Legends","toImage","MIN_DOMAIN_MARGIN","X1_INNER_PADDING","VERTICAL_BAR_GAP","MIN_BAR_HEIGHT","GroupedVerticalBarChart","forwardRef","props","maxBarWidth","xAxisCategoryOrder","forwardedRef","_tooltipId","_emptyChartId","_useRtl","_domainMargin","_xAxisLabels","_datasetForBars","_margins","top","right","bottom","left","_groupedVerticalBarGraph","_yMax","_calloutAnchorPoint","_barWidth","_groupWidth","_xAxisInnerPadding","_xAxisOuterPadding","_legends","_legendColorMap","cartesianChartRef","useRef","Y_ORIGIN","_legendsRef","color","setColor","useState","dataForHoverCard","setDataForHoverCard","selectedLegends","setSelectedLegends","legendProps","xCalloutValue","setXCalloutValue","yCalloutValue","setYCalloutValue","YValueHover","setYValueHover","hoverXValue","setHoverXValue","calloutLegend","setCalloutLegend","activeLegend","setActiveLegend","callOutAccessibilityData","setCallOutAccessibilityData","undefined","clickPosition","setClickPosition","x","y","isPopoverOpen","setPopoverOpen","classes","useEffect","useImperativeHandle","componentRef","chartContainer","current","opts","toSVG","_adjustProps","barWidth","xAxisInnerPadding","length","xAxisOuterPadding","_createDataset","points","datasetForBars","forEach","point","index","singleDatasetPointForBars","legendToBarPoint","series","seriesPoint","legend","push","data","xAxisPoint","name","indexNum","groupSeries","Object","values","stackCallOutAccessibilityData","_createDataSetOfGVBC","legends","Set","xAxisLabels","_getOrderedXAxisLabels","add","Array","from","onLegendSelectionChange","event","currentLegend","canSelectMultipleLegends","slice","onChange","_getLegendData","actions","legendTitle","title","hoverAction","_handleChartMouseLeave","_onLegendHover","onMouseOutAction","_onLegendLeave","enabledWrapLines","enabledLegendsWrapLines","overflowText","legendsOverflowText","legendRef","_addDefaultColors","colorIndex","map","startColor","endColor","_xAxisType","StringAxis","_mapCategoryToValues","categoryToValues","legendBars","_getMinMaxOfYAxis","yAxisType","useSecondaryYScale","startValue","endValue","_getDomainNRangeValues","margins","width","chartType","isRTL","xAxisType","tickValues","shiftX","domainNRangeValue","NumericAxis","DateAxis","dStartValue","dEndValue","rStartValue","rEndValue","yMax","Math","yMaxValue","calloutProps","XValue","YValue","culture","isCartesian","tickParams","tickFormat","_getGraphData","xScale","yScalePrimary","containerHeight","containerWidth","xElement","yAxisElement","yScaleSecondary","xScale0","_createX0Scale","bandwidth","xScale1","_createX1Scale","allGroupsBars","singleSet","_buildGraph","_getMargins","updatePosition","newX","newY","threshold","distance","sqrt","pow","onBarHover","pointData","groupData","mouseEvent","persist","clientX","clientY","_noLegendHighlighted","_legendHighlighted","xAxisCalloutData","yAxisCalloutData","isCalloutForStack","_onBarLeave","onBarFocus","targetRect","target","getBoundingClientRect","height","singleGroup","barLabelsForGroup","presentLegends","keys","filter","key","effectiveGroupWidth","localScale","domain","range","paddingInner","legendIndex","barPoints","yBarScale","xPoint","isLegendActive","barOpacity","barTotalValue","yBaseline","yPositiveStart","yNegativeStart","yPoint","pointIndex","barGap","abs","pointColor","rect","className","opacityChangeOnHover","opacity","fill","rx","onMouseOver","onMouseMove","onMouseOut","onFocus","onBlur","onClick","aria-label","getAriaLabel","tabIndex","role","hideLabels","text","textAnchor","barLabel","aria-hidden","yAxisTickFormat","wrapXAxisLables","showXAxisLablesTooltip","xAxisElement","call","document","getElementById","remove","e","tooltipProps","tooltipCls","tooltip","id","axis","g","transform","x0Axis","paddingOuter","_getAxisData","useCallback","yAxisData","yAxisDomainValues","domainValue","_getHighlightedLegend","includes","xValue","yValue","ariaLabel","_getDomainMargins","totalWidth","groupWidth","reqWidth","mode","groupBandwidth","barBandwidth","margin1","margin2","Number","POSITIVE_INFINITY","hideTickOverlap","step","_isChartEmpty","item","_getChartTitle","chartTitle","getDomainNRangeValues","getMinMaxOfYAxis","createYAxis","datasetForXAxisDomain","tickPadding","maxOfYVal","getmargins","getGraphData","getAxisData","onChartMouseLeave","getDomainMargins","barwidth","children","div","style","displayName"],"mappings":"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"}