@fluentui/react-charts 0.0.0-nightly-20250627-0405.1 → 0.0.0-nightly-20250701-0405.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +28 -15
- package/dist/index.d.ts +5 -0
- package/lib/components/AreaChart/AreaChart.js +3 -3
- package/lib/components/AreaChart/AreaChart.js.map +1 -1
- package/lib/components/CommonComponents/CartesianChart.js +41 -9
- package/lib/components/CommonComponents/CartesianChart.js.map +1 -1
- package/lib/components/CommonComponents/useCartesianChartStyles.styles.js +28 -3
- package/lib/components/CommonComponents/useCartesianChartStyles.styles.js.map +1 -1
- package/lib/components/DeclarativeChart/PlotlySchemaAdapter.js +8 -3
- package/lib/components/DeclarativeChart/PlotlySchemaAdapter.js.map +1 -1
- package/lib/components/GroupedVerticalBarChart/GroupedVerticalBarChart.js +3 -3
- package/lib/components/GroupedVerticalBarChart/GroupedVerticalBarChart.js.map +1 -1
- package/lib/components/HeatMapChart/HeatMapChart.types.js.map +1 -1
- package/lib/components/HorizontalBarChartWithAxis/HorizontalBarChartWithAxis.js +0 -61
- package/lib/components/HorizontalBarChartWithAxis/HorizontalBarChartWithAxis.js.map +1 -1
- package/lib/components/HorizontalBarChartWithAxis/useHorizontalBarChartWithAxisStyles.styles.js +4 -30
- package/lib/components/HorizontalBarChartWithAxis/useHorizontalBarChartWithAxisStyles.styles.js.map +1 -1
- package/lib/components/LineChart/LineChart.js +3 -3
- package/lib/components/LineChart/LineChart.js.map +1 -1
- package/lib/components/ScatterChart/ScatterChart.js +13 -15
- package/lib/components/ScatterChart/ScatterChart.js.map +1 -1
- package/lib/components/VerticalBarChart/VerticalBarChart.js +7 -7
- package/lib/components/VerticalBarChart/VerticalBarChart.js.map +1 -1
- package/lib/components/VerticalStackedBarChart/VerticalStackedBarChart.js +3 -3
- package/lib/components/VerticalStackedBarChart/VerticalStackedBarChart.js.map +1 -1
- package/lib/utilities/utilities.js +11 -5
- package/lib/utilities/utilities.js.map +1 -1
- package/lib-commonjs/components/AreaChart/AreaChart.js +2 -2
- package/lib-commonjs/components/AreaChart/AreaChart.js.map +1 -1
- package/lib-commonjs/components/CommonComponents/CartesianChart.js +40 -8
- package/lib-commonjs/components/CommonComponents/CartesianChart.js.map +1 -1
- package/lib-commonjs/components/CommonComponents/useCartesianChartStyles.styles.js +45 -2
- package/lib-commonjs/components/CommonComponents/useCartesianChartStyles.styles.js.map +1 -1
- package/lib-commonjs/components/DeclarativeChart/PlotlySchemaAdapter.js +8 -3
- package/lib-commonjs/components/DeclarativeChart/PlotlySchemaAdapter.js.map +1 -1
- package/lib-commonjs/components/GroupedVerticalBarChart/GroupedVerticalBarChart.js +2 -2
- package/lib-commonjs/components/GroupedVerticalBarChart/GroupedVerticalBarChart.js.map +1 -1
- package/lib-commonjs/components/HeatMapChart/HeatMapChart.types.js.map +1 -1
- package/lib-commonjs/components/HorizontalBarChartWithAxis/HorizontalBarChartWithAxis.js +0 -61
- package/lib-commonjs/components/HorizontalBarChartWithAxis/HorizontalBarChartWithAxis.js.map +1 -1
- package/lib-commonjs/components/HorizontalBarChartWithAxis/useHorizontalBarChartWithAxisStyles.styles.js +3 -53
- package/lib-commonjs/components/HorizontalBarChartWithAxis/useHorizontalBarChartWithAxisStyles.styles.js.map +1 -1
- package/lib-commonjs/components/LineChart/LineChart.js +2 -2
- package/lib-commonjs/components/LineChart/LineChart.js.map +1 -1
- package/lib-commonjs/components/ScatterChart/ScatterChart.js +12 -14
- package/lib-commonjs/components/ScatterChart/ScatterChart.js.map +1 -1
- package/lib-commonjs/components/VerticalBarChart/VerticalBarChart.js +6 -6
- package/lib-commonjs/components/VerticalBarChart/VerticalBarChart.js.map +1 -1
- package/lib-commonjs/components/VerticalStackedBarChart/VerticalStackedBarChart.js +2 -2
- package/lib-commonjs/components/VerticalStackedBarChart/VerticalStackedBarChart.js.map +1 -1
- package/lib-commonjs/utilities/utilities.js +16 -7
- package/lib-commonjs/utilities/utilities.js.map +1 -1
- package/package.json +13 -13
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["HeatMapChart.types.ts"],"sourcesContent":["import type { CartesianChartProps, CartesianChartStyles } from '../CommonComponents/CartesianChart.types';\nimport type { HeatMapChartData } from '../../types/DataPoint';\n\n/**\n * Heat Map Chart properties\n * {@docCategory HeatMapChart}\n */\nexport interface HeatMapChartProps extends CartesianChartProps {\n /**\n * chart title for the chart\n */\n chartTitle?: string;\n /**\n * data to provide for Heat Map\n */\n data: HeatMapChartData[];\n /**\n * The domain value for the color scale,\n *\n */\n domainValuesForColorScale: number[];\n /**\n * The range values for the color scale,\n * fill the array with colors in hex format\n * note:- it should contain values exactly as many as values in the array\n * `domainValuesForColorScale`\n */\n rangeValuesForColorScale: string[];\n /**\n * date formatter of x axis,\n * if the x-axis data point are of date type then user can use this\n * prop to format the date\n * refer to https://github.com/d3/d3-time-format for string values\n * @default '%b/%d'\n */\n xAxisDateFormatString?: string;\n /**\n * date formatter of y axis,\n * if the y-axis data point are or date type then user can use this\n * prop to format the date\n * refer to https://github.com/d3/d3-time-format for string values\n * @default '%b/%d'\n */\n yAxisDateFormatString?: string;\n /**\n * number formatter of x axis\n * if the x-axis data pints are of number type then user can\n * use this prop to format the number\n * refer to https://github.com/d3/d3-format for string values\n * @default '.2~s'\n */\n xAxisNumberFormatString?: string;\n /**\n * number formatter of y axis\n * if the y-axis data pints are of number type then user can\n * use this prop to format the number\n * refer to https://github.com/d3/d3-format for string values\n * @default '.2~s'\n */\n yAxisNumberFormatString?: string;\n /**\n * string formatter for x-axis.\n * This prop only applies if the x-axis is of string type\n *\n * For the accessiblity reason we sort the x-axis data point given by the consumer in ascending\n * order and then render in the x-axis. this behaviour would force the order of the data points.\n * to overcome , user can give x-axis point names as p1 p2...etc and map those p1 and p2 to custom name.\n * behind the scene the charting will actually sort the p1 and p2 and then we can attach the custom\n * name to that point by using this prop, hence giving the us the flexiblity of the order in which\n * label should render\n *\n * see the example file for the usage of the prop\n */\n xAxisStringFormatter?: (point: string) => string;\n\n /**\n * string formatter for y-axis.\n * This prop only applies if the y-axis is of string type\n *\n * For the accessiblity reason we sort the x-axis data point given by the consumer in ascending\n * order and then render in the y-axis. this behaviour would force the order of the data points.\n * to overcome , user can give y-axis point names as p1 p2...etc and map those p1 and p2 to custom name.\n * behind the scene the charting will actually sort the p1 and p2 and then we can attach the custom\n * name to that point by using this prop, hence giving the us the flexiblity of the order in which\n * label should render\n *\n * see the exaple file for the usage of the prop\n */\n yAxisStringFormatter?: (point: string) => string;\n /**\n * Call to provide customized styling that will layer on top of the variant rules.\n */\n styles?: HeatMapChartStyles;\n\n /**\n * The prop used to define the culture to localized the numbers\n */\n culture?: string;\n\n /**\n *@default false\n *Used for showing complete y axis lables */\n showYAxisLables?: boolean;\n\n /**\n * @default alphabetical\n * The prop used to decide order of string axis labels */\n sortOrder?: 'none' | 'alphabetical';\n}\n\n/**\n * Heat Map Chart styles\n * {@docCategory HeatMapChart}\n */\nexport interface HeatMapChartStyles extends CartesianChartStyles {\n root?: string;\n text?: string;\n}\n"],"names":[],"rangeMappings":";;;","mappings":"
|
|
1
|
+
{"version":3,"sources":["HeatMapChart.types.ts"],"sourcesContent":["import type { CartesianChartProps, CartesianChartStyles } from '../CommonComponents/CartesianChart.types';\nimport type { HeatMapChartData } from '../../types/DataPoint';\n\n/**\n * Heat Map Chart properties\n * {@docCategory HeatMapChart}\n */\nexport interface HeatMapChartProps extends CartesianChartProps {\n /**\n * chart title for the chart\n */\n chartTitle?: string;\n /**\n * data to provide for Heat Map\n */\n data: HeatMapChartData[];\n /**\n * The domain value for the color scale,\n *\n */\n domainValuesForColorScale: number[];\n /**\n * The range values for the color scale,\n * fill the array with colors in hex format\n * note:- it should contain values exactly as many as values in the array\n * `domainValuesForColorScale`\n */\n rangeValuesForColorScale: string[];\n /**\n * date formatter of x axis,\n * if the x-axis data point are of date type then user can use this\n * prop to format the date\n * refer to https://github.com/d3/d3-time-format for string values\n * @default '%b/%d'\n */\n xAxisDateFormatString?: string;\n /**\n * date formatter of y axis,\n * if the y-axis data point are or date type then user can use this\n * prop to format the date\n * refer to https://github.com/d3/d3-time-format for string values\n * @default '%b/%d'\n */\n yAxisDateFormatString?: string;\n /**\n * number formatter of x axis\n * if the x-axis data pints are of number type then user can\n * use this prop to format the number\n * refer to https://github.com/d3/d3-format for string values\n * @default '.2~s'\n */\n xAxisNumberFormatString?: string;\n /**\n * number formatter of y axis\n * if the y-axis data pints are of number type then user can\n * use this prop to format the number\n * refer to https://github.com/d3/d3-format for string values\n * @default '.2~s'\n */\n yAxisNumberFormatString?: string;\n /**\n * string formatter for x-axis.\n * This prop only applies if the x-axis is of string type\n *\n * For the accessiblity reason we sort the x-axis data point given by the consumer in ascending\n * order and then render in the x-axis. this behaviour would force the order of the data points.\n * to overcome , user can give x-axis point names as p1 p2...etc and map those p1 and p2 to custom name.\n * behind the scene the charting will actually sort the p1 and p2 and then we can attach the custom\n * name to that point by using this prop, hence giving the us the flexiblity of the order in which\n * label should render\n *\n * see the example file for the usage of the prop\n */\n xAxisStringFormatter?: (point: string) => string;\n\n /**\n * string formatter for y-axis.\n * This prop only applies if the y-axis is of string type\n *\n * For the accessiblity reason we sort the x-axis data point given by the consumer in ascending\n * order and then render in the y-axis. this behaviour would force the order of the data points.\n * to overcome , user can give y-axis point names as p1 p2...etc and map those p1 and p2 to custom name.\n * behind the scene the charting will actually sort the p1 and p2 and then we can attach the custom\n * name to that point by using this prop, hence giving the us the flexiblity of the order in which\n * label should render\n *\n * see the exaple file for the usage of the prop\n */\n yAxisStringFormatter?: (point: string) => string;\n /**\n * Call to provide customized styling that will layer on top of the variant rules.\n */\n styles?: HeatMapChartStyles;\n\n /**\n * The prop used to define the culture to localized the numbers\n */\n culture?: string;\n\n /**\n *@default false\n *Used for showing complete y axis lables */\n showYAxisLables?: boolean;\n\n /**\n * @default alphabetical\n * The prop used to decide order of string axis labels */\n sortOrder?: 'none' | 'alphabetical';\n\n /**\n *@default false\n *Used for to elipse y axis labes and show tooltip on x axis labels\n */\n showYAxisLablesTooltip?: boolean;\n}\n\n/**\n * Heat Map Chart styles\n * {@docCategory HeatMapChart}\n */\nexport interface HeatMapChartStyles extends CartesianChartStyles {\n root?: string;\n text?: string;\n}\n"],"names":[],"rangeMappings":";;;","mappings":"AAoHA;;;CAGC,GACD,WAGC"}
|
|
@@ -1,10 +1,8 @@
|
|
|
1
1
|
import * as React from 'react';
|
|
2
2
|
import { max as d3Max, min as d3Min } from 'd3-array';
|
|
3
|
-
import { select as d3Select } from 'd3-selection';
|
|
4
3
|
import { scaleLinear as d3ScaleLinear, scaleBand as d3ScaleBand } from 'd3-scale';
|
|
5
4
|
import { Legends } from '../../components/Legends/Legends';
|
|
6
5
|
import { useId } from '@fluentui/react-utilities';
|
|
7
|
-
import { useHorizontalBarChartWithAxisStyles } from './useHorizontalBarChartWithAxisStyles.styles';
|
|
8
6
|
import { CartesianChart } from '../CommonComponents/CartesianChart';
|
|
9
7
|
import { ChartPopover } from '../CommonComponents/ChartPopover';
|
|
10
8
|
import { ChartTypes, getAccessibleDataObject, YAxisType, XAxisTypes, getTypeOfAxis, getNextColor, areArraysEqual, useRtl, DataVizPalette, getColorFromToken, computeLongestBars, domainRangeOfNumericForHorizontalBarChartWithAxis, groupChartDataByYValue, MIN_DOMAIN_MARGIN } from '../../utilities/index';
|
|
@@ -14,7 +12,6 @@ export const HorizontalBarChartWithAxis = /*#__PURE__*/ React.forwardRef((props,
|
|
|
14
12
|
const _refArray = [];
|
|
15
13
|
const _calloutId = useId('callout');
|
|
16
14
|
const _isRtl = useRtl();
|
|
17
|
-
const _tooltipId = useId('HBCWATooltipID_');
|
|
18
15
|
const _xAxisType = props.data && props.data.length > 0 ? getTypeOfAxis(props.data[0].x, true) : XAxisTypes.NumericAxis;
|
|
19
16
|
const _yAxisType = props.data && props.data.length > 0 ? getTypeOfAxis(props.data[0].y, false) : YAxisType.StringAxis;
|
|
20
17
|
const _emptyChartId = useId('_HBCWithAxis_empty');
|
|
@@ -27,7 +24,6 @@ export const HorizontalBarChartWithAxis = /*#__PURE__*/ React.forwardRef((props,
|
|
|
27
24
|
let _xMax;
|
|
28
25
|
let _calloutAnchorPoint;
|
|
29
26
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
30
|
-
let tooltipElement;
|
|
31
27
|
let _longestBarPositiveTotalValue;
|
|
32
28
|
let _longestBarNegativeTotalValue;
|
|
33
29
|
let _domainMargin = MIN_DOMAIN_MARGIN;
|
|
@@ -72,7 +68,6 @@ export const HorizontalBarChartWithAxis = /*#__PURE__*/ React.forwardRef((props,
|
|
|
72
68
|
chartContainer: (_cartesianChartRef_current_chartContainer = (_cartesianChartRef_current = cartesianChartRef.current) === null || _cartesianChartRef_current === void 0 ? void 0 : _cartesianChartRef_current.chartContainer) !== null && _cartesianChartRef_current_chartContainer !== void 0 ? _cartesianChartRef_current_chartContainer : null
|
|
73
69
|
};
|
|
74
70
|
}, []);
|
|
75
|
-
const classes = useHorizontalBarChartWithAxisStyles(props);
|
|
76
71
|
function _adjustProps() {
|
|
77
72
|
_points = props.data || [];
|
|
78
73
|
_barHeight = props.barHeight || 32;
|
|
@@ -387,35 +382,6 @@ export const HorizontalBarChartWithAxis = /*#__PURE__*/ React.forwardRef((props,
|
|
|
387
382
|
bottom: _margins.bottom + _domainMargin
|
|
388
383
|
};
|
|
389
384
|
}
|
|
390
|
-
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
391
|
-
function _tooltipOfYAxislabels(ytooltipProps) {
|
|
392
|
-
const { tooltipCls, yAxis, id } = ytooltipProps;
|
|
393
|
-
if (yAxis === null) {
|
|
394
|
-
return null;
|
|
395
|
-
}
|
|
396
|
-
const div = d3Select('body').append('div').attr('id', id).attr('class', tooltipCls).style('opacity', 0);
|
|
397
|
-
const aa = yAxis.selectAll('#BaseSpan')._groups[0];
|
|
398
|
-
const baseSpanLength = aa && Object.keys(aa).length;
|
|
399
|
-
const originalDataArray = [];
|
|
400
|
-
for(let i = 0; i < baseSpanLength; i++){
|
|
401
|
-
const originalData = aa[i].dataset && Object.values(aa[i].dataset)[0];
|
|
402
|
-
originalDataArray.push(originalData);
|
|
403
|
-
}
|
|
404
|
-
const tickObject = yAxis.selectAll('.tick')._groups[0];
|
|
405
|
-
const tickObjectLength = tickObject && Object.keys(tickObject).length;
|
|
406
|
-
for(let i = 0; i < tickObjectLength; i++){
|
|
407
|
-
const d1 = tickObject[i];
|
|
408
|
-
d3Select(d1)// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
409
|
-
.on('mouseover', (event, d)=>{
|
|
410
|
-
if (!tooltipElement) {
|
|
411
|
-
div.style('opacity', 0.9);
|
|
412
|
-
div.text(originalDataArray[i]).style('left', event.pageX + 'px').style('top', event.pageY - 28 + 'px');
|
|
413
|
-
}
|
|
414
|
-
}).on('mouseout', (d)=>{
|
|
415
|
-
div.style('opacity', 0);
|
|
416
|
-
});
|
|
417
|
-
}
|
|
418
|
-
}
|
|
419
385
|
function _createStringBars(containerHeight, containerWidth, xElement, yElement, singleBarData, // eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
420
386
|
xBarScale, // eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
421
387
|
yBarScale) {
|
|
@@ -493,33 +459,6 @@ export const HorizontalBarChartWithAxis = /*#__PURE__*/ React.forwardRef((props,
|
|
|
493
459
|
tabIndex: point.legend !== '' ? 0 : undefined
|
|
494
460
|
}));
|
|
495
461
|
});
|
|
496
|
-
// Removing un wanted tooltip div from DOM, when prop not provided, for proper cleanup
|
|
497
|
-
// of unwanted DOM elements, to prevent flacky behaviour in tooltips , that might occur
|
|
498
|
-
// in creating tooltips when tooltips are enabled( as we try to recreate a tspan with _tooltipId)
|
|
499
|
-
if (!props.showYAxisLablesTooltip) {
|
|
500
|
-
try {
|
|
501
|
-
// eslint-disable-next-line @nx/workspace-no-restricted-globals
|
|
502
|
-
document.getElementById(_tooltipId) && document.getElementById(_tooltipId).remove();
|
|
503
|
-
//eslint-disable-next-line no-empty
|
|
504
|
-
} catch (e) {}
|
|
505
|
-
}
|
|
506
|
-
// Used to display tooltip at y axis labels.
|
|
507
|
-
if (props.showYAxisLablesTooltip) {
|
|
508
|
-
const yAxisElement = d3Select(yElement).call(yBarScale);
|
|
509
|
-
if (!tooltipElement) {
|
|
510
|
-
try {
|
|
511
|
-
// eslint-disable-next-line @nx/workspace-no-restricted-globals
|
|
512
|
-
document.getElementById(_tooltipId) && document.getElementById(_tooltipId).remove();
|
|
513
|
-
//eslint-disable-next-line no-empty
|
|
514
|
-
} catch (e) {}
|
|
515
|
-
}
|
|
516
|
-
const ytooltipProps = {
|
|
517
|
-
tooltipCls: classes.tooltip,
|
|
518
|
-
id: _tooltipId,
|
|
519
|
-
yAxis: yAxisElement
|
|
520
|
-
};
|
|
521
|
-
yAxisElement && _tooltipOfYAxislabels(ytooltipProps);
|
|
522
|
-
}
|
|
523
462
|
return bars;
|
|
524
463
|
}
|
|
525
464
|
function _onLegendHover(customMessage) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["HorizontalBarChartWithAxis.tsx"],"sourcesContent":["import * as React from 'react';\nimport { max as d3Max, min as d3Min } from 'd3-array';\nimport { select as d3Select } from 'd3-selection';\nimport { scaleLinear as d3ScaleLinear, ScaleLinear as D3ScaleLinear, scaleBand as d3ScaleBand } from 'd3-scale';\nimport { Legend } from '../../components/Legends/Legends.types';\nimport { Legends } from '../../components/Legends/Legends';\nimport { useId } from '@fluentui/react-utilities';\nimport { useHorizontalBarChartWithAxisStyles } from './useHorizontalBarChartWithAxisStyles.styles';\nimport {\n AccessibilityProps,\n HorizontalBarChartWithAxisDataPoint,\n RefArrayData,\n Margins,\n ChartPopoverProps,\n Chart,\n} from '../../index';\nimport { ChildProps } from '../CommonComponents/CartesianChart.types';\nimport { CartesianChart } from '../CommonComponents/CartesianChart';\nimport { HorizontalBarChartWithAxisProps } from './HorizontalBarChartWithAxis.types';\nimport { ChartPopover } from '../CommonComponents/ChartPopover';\nimport {\n ChartTypes,\n IAxisData,\n getAccessibleDataObject,\n YAxisType,\n XAxisTypes,\n NumericAxis,\n StringAxis,\n getTypeOfAxis,\n getNextColor,\n areArraysEqual,\n useRtl,\n DataVizPalette,\n getColorFromToken,\n computeLongestBars,\n IDomainNRange,\n domainRangeOfNumericForHorizontalBarChartWithAxis,\n groupChartDataByYValue,\n MIN_DOMAIN_MARGIN,\n} from '../../utilities/index';\nimport { getClosestPairDiffAndRange } from '../../utilities/vbc-utils';\ntype ColorScale = (_p?: number) => string;\n\nexport const HorizontalBarChartWithAxis: React.FunctionComponent<HorizontalBarChartWithAxisProps> = React.forwardRef<\n HTMLDivElement,\n HorizontalBarChartWithAxisProps\n>((props, forwardedRef) => {\n const _refArray: RefArrayData[] = [];\n const _calloutId: string = useId('callout');\n const _isRtl: boolean = useRtl();\n const _tooltipId: string = useId('HBCWATooltipID_');\n const _xAxisType: XAxisTypes =\n props.data! && props.data!.length > 0\n ? (getTypeOfAxis(props.data![0].x, true) as XAxisTypes)\n : XAxisTypes.NumericAxis;\n const _yAxisType: YAxisType =\n props.data! && props.data!.length > 0\n ? (getTypeOfAxis(props.data![0].y, false) as YAxisType)\n : YAxisType.StringAxis;\n const _emptyChartId: string = useId('_HBCWithAxis_empty');\n let _points: HorizontalBarChartWithAxisDataPoint[] = [];\n let _barHeight: number = 0;\n let _colors: string[] = [];\n let _margins: Margins;\n let _bars: JSX.Element[];\n let _yAxisLabels: string[];\n let _xMax: number;\n let _calloutAnchorPoint: HorizontalBarChartWithAxisDataPoint | null;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n let tooltipElement: any;\n let _longestBarPositiveTotalValue: number;\n let _longestBarNegativeTotalValue: number;\n let _domainMargin: number = MIN_DOMAIN_MARGIN;\n let _yAxisPadding: number = props.yAxisPadding ?? 0.5;\n const cartesianChartRef = React.useRef<Chart>(null);\n const X_ORIGIN: number = 0;\n\n const [color, setColor] = React.useState<string>('');\n const [dataForHoverCard, setDataForHoverCard] = React.useState<number>(0);\n const [isLegendSelected, setIsLegendSelected] = React.useState<boolean>(\n (props.legendProps?.selectedLegends && props.legendProps.selectedLegends.length > 0) ||\n props.legendProps?.selectedLegend !== undefined,\n );\n const [isLegendHovered, setIsLegendHovered] = React.useState<boolean>(false);\n const [selectedLegendTitle, setSelectedLegendTitle] = React.useState<string>(props.legendProps?.selectedLegend ?? '');\n const [xCalloutValue, setXCalloutValue] = React.useState<string>('');\n const [yCalloutValue, setYCalloutValue] = React.useState<string>('');\n const [selectedLegends, setSelectedLegends] = React.useState<string[]>(props.legendProps?.selectedLegends || []);\n const [dataPointCalloutProps, setDataPointCalloutProps] = React.useState<HorizontalBarChartWithAxisDataPoint>();\n const [callOutAccessibilityData, setCallOutAccessibilityData] = React.useState<AccessibilityProps>();\n const [isPopoverOpen, setPopoverOpen] = React.useState<boolean>(false);\n const [clickPosition, setClickPosition] = React.useState({ x: 0, y: 0 });\n const prevPropsRef = React.useRef<HorizontalBarChartWithAxisProps | null>(null);\n\n React.useEffect(() => {\n if (prevPropsRef.current) {\n const prevProps = prevPropsRef.current;\n if (!areArraysEqual(prevProps.legendProps?.selectedLegends, props.legendProps?.selectedLegends)) {\n setSelectedLegends(props.legendProps?.selectedLegends || []);\n }\n }\n prevPropsRef.current = props;\n }, [props]);\n\n React.useImperativeHandle(\n props.componentRef,\n () => ({\n chartContainer: cartesianChartRef.current?.chartContainer ?? null,\n }),\n [],\n );\n\n const classes = useHorizontalBarChartWithAxisStyles(props);\n function _adjustProps(): void {\n _points = props.data || [];\n _barHeight = props.barHeight || 32;\n const defaultPalette: string[] = [\n getColorFromToken(DataVizPalette.color6),\n getColorFromToken(DataVizPalette.color1),\n getColorFromToken(DataVizPalette.color5),\n getColorFromToken(DataVizPalette.color7),\n ];\n _colors = props.colors! || defaultPalette;\n }\n\n function _getMargins(margins: Margins) {\n _margins = margins;\n }\n\n function _renderContentForOnlyBars(point: HorizontalBarChartWithAxisDataPoint): JSX.Element {\n const { useSingleColor = false } = props;\n let selectedPointIndex = 0;\n props.data!.forEach((yDataPoint: HorizontalBarChartWithAxisDataPoint, index: number) => {\n if (yDataPoint.y === point.y) {\n selectedPointIndex = index;\n }\n });\n // eslint-disable-next-line @typescript-eslint/no-shadow\n let color: string;\n if (useSingleColor) {\n //if useSingle color , then check if user has given a palette or not\n // and pick the first color from that or else from our paltette.\n color = props.colors ? _createColors()(1) : getNextColor(1, 0);\n } else {\n color = point.color ? point.color : props.colors ? _createColors()(point.x) : getNextColor(selectedPointIndex, 0);\n }\n return (\n <>\n <ChartPopover\n XValue={point.xAxisCalloutData || point.x.toString()}\n legend={point.legend}\n YValue={point.yAxisCalloutData || point.y}\n color={color}\n culture={props.culture ?? 'en-us'}\n clickPosition={clickPosition}\n isPopoverOpen={isPopoverOpen}\n />\n </>\n );\n }\n\n // eslint-disable-next-line @typescript-eslint/no-shadow\n function _renderCallout(props?: HorizontalBarChartWithAxisDataPoint): JSX.Element | null {\n return props ? _renderContentForOnlyBars(props) : null;\n }\n\n function _getCustomizedCallout() {\n return props.onRenderCalloutPerDataPoint\n ? props.onRenderCalloutPerDataPoint(dataPointCalloutProps, _renderCallout)\n : null;\n }\n\n function _getGraphData(\n xScale: NumericAxis,\n yScale: NumericAxis | StringAxis,\n containerHeight: number,\n containerWidth: number,\n xElement?: SVGElement | null,\n yElement?: SVGElement | null,\n ) {\n const stackedChartData = groupChartDataByYValue(_points);\n const longestBars = computeLongestBars(stackedChartData, X_ORIGIN);\n _longestBarPositiveTotalValue = longestBars.longestPositiveBar;\n _longestBarNegativeTotalValue = longestBars.longestNegativeBar;\n\n const { xBarScale, yBarScale } =\n _yAxisType === YAxisType.NumericAxis\n ? _getScales(containerHeight, containerWidth, true)\n : _getScales(containerHeight, containerWidth, false);\n const xRange = xBarScale.range();\n let allBars: JSX.Element[] = [];\n // when the chart mounts, the xRange[1] is sometimes seen to be < 0 (like -40) while xRange[0] > 0.\n if (xRange[0] < xRange[1]) {\n allBars = stackedChartData\n .map(singleBarData =>\n _yAxisType === YAxisType.NumericAxis\n ? _createNumericBars(\n containerHeight,\n containerWidth,\n xElement!,\n yElement!,\n singleBarData,\n xBarScale,\n yBarScale,\n )\n : _createStringBars(\n containerHeight,\n containerWidth,\n xElement!,\n yElement!,\n singleBarData,\n xBarScale,\n yBarScale,\n ),\n )\n .flat();\n }\n\n return (_bars = allBars);\n }\n\n function _createColors(): D3ScaleLinear<string, string> | ColorScale {\n const increment = _colors.length <= 1 ? 1 : 1 / (_colors.length - 1);\n const { useSingleColor = false } = props;\n if (useSingleColor) {\n return (_p?: number) => {\n const { colors } = props;\n return colors && colors.length > 0 ? colors[0] : getColorFromToken(DataVizPalette.color16);\n };\n }\n const domainValues = [];\n for (let i = 0; i < _colors.length; i++) {\n domainValues.push(increment * i * _xMax);\n }\n const colorScale = d3ScaleLinear<string>().domain(domainValues).range(_colors);\n return colorScale;\n }\n\n function _refCallback(element: SVGRectElement, legendTitle: string): void {\n _refArray.push({ index: legendTitle, refElement: element });\n }\n\n function _onBarHover(\n point: HorizontalBarChartWithAxisDataPoint,\n // eslint-disable-next-line @typescript-eslint/no-shadow\n color: string,\n mouseEvent: React.MouseEvent<SVGElement, MouseEvent>,\n ): void {\n mouseEvent.persist();\n // eslint-disable-next-line @typescript-eslint/no-shadow\n if ((isLegendSelected === false || _isLegendHighlighted(point.legend)) && _calloutAnchorPoint !== point) {\n _calloutAnchorPoint = point;\n setPopoverOpen(true);\n _updatePosition(mouseEvent.clientX, mouseEvent.clientY);\n setDataForHoverCard(point.x);\n setSelectedLegendTitle(point.legend!);\n setColor(props.useSingleColor || props.enableGradient ? color : point.color!);\n // To display callout value, if no callout value given, taking given point.x value as a string.\n setXCalloutValue(point.yAxisCalloutData! || point.y.toString());\n setYCalloutValue(point.xAxisCalloutData || point.x.toString());\n setDataPointCalloutProps(point);\n setCallOutAccessibilityData(point.callOutAccessibilityData);\n }\n }\n\n function _onBarLeave(): void {\n setPopoverOpen(false);\n }\n\n function _handleChartMouseLeave(): void {\n _calloutAnchorPoint = null;\n setPopoverOpen(false);\n }\n\n // eslint-disable-next-line @typescript-eslint/no-shadow\n function _onBarFocus(point: HorizontalBarChartWithAxisDataPoint, refArrayIndexNumber: number, color: string): void {\n if ((isLegendSelected === false || _isLegendHighlighted(point.legend)) && _calloutAnchorPoint !== point) {\n // eslint-disable-next-line @typescript-eslint/no-shadow\n _refArray.forEach((obj: RefArrayData, index: number) => {\n if (refArrayIndexNumber === index) {\n setPopoverOpen(true);\n setSelectedLegendTitle(point.legend!);\n setDataForHoverCard(point.x);\n setColor(props.useSingleColor ? color : point.color!);\n setXCalloutValue(point.yAxisCalloutData || point.y.toString());\n setYCalloutValue(point.xAxisCalloutData! || point.x.toString());\n setDataPointCalloutProps(point);\n setCallOutAccessibilityData(point.callOutAccessibilityData);\n }\n });\n }\n }\n\n function _getScales(\n containerHeight: number,\n containerWidth: number,\n isNumericScale: boolean,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n ): { xBarScale: any; yBarScale: any } {\n const xMax = _longestBarPositiveTotalValue;\n const xMin = _longestBarNegativeTotalValue;\n const xDomain = [Math.min(X_ORIGIN, xMin), Math.max(X_ORIGIN, xMax)];\n if (isNumericScale) {\n const yMax = d3Max(_points, (point: HorizontalBarChartWithAxisDataPoint) => point.y as number)!;\n const yMin = d3Min(_points, (point: HorizontalBarChartWithAxisDataPoint) => point.y as number)!;\n const yDomainMax = Math.max(yMax, props.yMaxValue || 0);\n // Default to 0 if yMinValue is not provided.\n const yMinProp = props.yMinValue || 0;\n const yDomainMin = Math.min(yMin, yMinProp);\n const xBarScale = d3ScaleLinear()\n .domain(xDomain)\n .nice()\n .range([_margins.left!, containerWidth - _margins.right!]);\n const yBarScale = d3ScaleLinear()\n .domain([yDomainMin, yDomainMax])\n .range([containerHeight - (_margins.bottom! + _domainMargin), _margins.top! + _domainMargin]);\n return { xBarScale, yBarScale };\n } else {\n // please note these padding default values must be consistent in here\n // and CatrtesianChartBase w for more details refer example\n // http://using-d3js.com/04_07_ordinal_scales.html\n const yBarScale = d3ScaleBand()\n .domain(_yAxisLabels)\n .range([containerHeight - (_margins.bottom! + _domainMargin), _margins.top! + _domainMargin])\n .padding(_yAxisPadding);\n\n const xBarScale = d3ScaleLinear()\n .domain(xDomain)\n .nice()\n .range([_margins.left!, containerWidth - _margins.right!]);\n return { xBarScale, yBarScale };\n }\n }\n\n function _createNumericBars(\n containerHeight: number,\n containerWidth: number,\n xElement: SVGElement,\n yElement: SVGElement,\n singleBarData: HorizontalBarChartWithAxisDataPoint[],\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n xBarScale: any,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n yBarScale: any,\n ): JSX.Element[] {\n const { useSingleColor = false } = props;\n const sortedBars: HorizontalBarChartWithAxisDataPoint[] = [...singleBarData];\n sortedBars.sort((a, b) => {\n const aValue = typeof a.y === 'number' ? a.y : parseFloat(a.y);\n const bValue = typeof b.y === 'number' ? b.y : parseFloat(b.y);\n return bValue - aValue;\n });\n\n let prevWidthPositive = 0;\n let prevWidthNegative = 0;\n let prevPoint = 0;\n\n const totalPositiveBars = singleBarData.filter(\n (point: HorizontalBarChartWithAxisDataPoint) => point.x >= X_ORIGIN,\n ).length;\n const totalNegativeBars = singleBarData.length - totalPositiveBars;\n let currPositiveCounter = 0;\n let currNegativeCounter = 0;\n\n const bars = sortedBars.map((point: HorizontalBarChartWithAxisDataPoint, index: number) => {\n let shouldHighlight = true;\n if (isLegendHovered || isLegendSelected) {\n shouldHighlight = _isLegendHighlighted(point.legend);\n }\n if (point.x >= X_ORIGIN) {\n ++currPositiveCounter;\n }\n if (point.x < X_ORIGIN) {\n ++currNegativeCounter;\n }\n const barStartX = _isRtl\n ? containerWidth -\n (_margins.right! + Math.max(xBarScale(point.x + X_ORIGIN), xBarScale(X_ORIGIN)) - _margins.left!)\n : Math.min(xBarScale(point.x + X_ORIGIN), xBarScale(X_ORIGIN));\n const barHeight: number = Math.max(yBarScale(point.y), 0);\n if (barHeight < 1) {\n return <React.Fragment key={point.x}> </React.Fragment>;\n }\n let startColor: string;\n if (useSingleColor) {\n //if useSingle color , then check if user has given a palette or not\n // and pick the first color from that or else from our paltette.\n startColor = props.colors ? _createColors()(1) : getNextColor(1, 0);\n } else {\n startColor = props.colors ? _createColors()(point.x) : getNextColor(index, 0);\n }\n\n startColor = point.color && !useSingleColor ? point.color : startColor;\n\n const prevBarWidth = Math.abs(xBarScale(prevPoint + X_ORIGIN) - xBarScale(X_ORIGIN));\n prevPoint > X_ORIGIN ? (prevWidthPositive += prevBarWidth) : (prevWidthNegative += prevBarWidth);\n const currentWidth = Math.abs(xBarScale(point.x + X_ORIGIN) - xBarScale(X_ORIGIN));\n const gapWidthLTR =\n currentWidth > 2 &&\n ((point.x > X_ORIGIN && currPositiveCounter !== totalPositiveBars) ||\n (point.x < X_ORIGIN && (totalPositiveBars !== 0 || currNegativeCounter > 1)))\n ? 2\n : 0;\n const gapWidthRTL =\n currentWidth > 2 &&\n ((point.x > X_ORIGIN && (totalNegativeBars !== 0 || currPositiveCounter > 1)) ||\n (point.x < X_ORIGIN && currNegativeCounter !== totalNegativeBars))\n ? 2\n : 0;\n let xStart = X_ORIGIN;\n if (_isRtl) {\n xStart = point.x > X_ORIGIN ? barStartX - prevWidthPositive : barStartX + prevWidthNegative;\n } else {\n xStart = point.x > X_ORIGIN ? barStartX + prevWidthPositive : barStartX - prevWidthNegative;\n }\n prevPoint = point.x;\n\n return (\n <React.Fragment key={`${index}_${point.x}`}>\n <rect\n key={point.y}\n x={xStart}\n y={yBarScale(point.y) - _barHeight / 2}\n data-is-focusable={shouldHighlight}\n width={currentWidth - (_isRtl ? gapWidthRTL : gapWidthLTR)}\n height={_barHeight}\n ref={(e: SVGRectElement) => {\n _refCallback(e, point.legend!);\n }}\n rx={props.roundCorners ? 3 : 0}\n onClick={point.onClick}\n onMouseOver={(event: React.MouseEvent<SVGElement, MouseEvent>) => _onBarHover(point, startColor, event)}\n aria-label={_getAriaLabel(point)}\n role=\"img\"\n aria-labelledby={`toolTip${_calloutId}`}\n onMouseLeave={_onBarLeave}\n onFocus={() => _onBarFocus(point, index, startColor)}\n onBlur={_onBarLeave}\n fill={startColor}\n opacity={shouldHighlight ? 1 : 0.1}\n tabIndex={point.legend !== '' ? 0 : undefined}\n />\n </React.Fragment>\n );\n });\n return bars;\n }\n\n function _getUniqueYValues() {\n const mapY: Record<string, number | string> = {};\n props.data?.forEach((point: HorizontalBarChartWithAxisDataPoint) => {\n mapY[point.y] = point.y;\n });\n const uniqueY = Object.values(mapY);\n return uniqueY;\n }\n\n function _calculateAppropriateBarHeight(data: number[] | Date[], totalWidth: number, innerPadding: number) {\n const result = getClosestPairDiffAndRange(data);\n if (!result || result[1] === 0) {\n return 16;\n }\n const closestPairDiff = result[0];\n let range = result[1];\n const yMax = d3Max(_points, (point: HorizontalBarChartWithAxisDataPoint) => point.y as number)!;\n // Since we are always rendering from 0 to yMax, we need to ensure that the range is at least yMax\n // to calculate the bar height correctly.\n range = Math.max(range, yMax);\n // Refer to https://microsoft.github.io/fluentui-charting-contrib/docs/rfcs/fix-overlapping-bars-on-continuous-axes\n // for the derivation of the following formula.\n const barWidth = Math.floor(\n (totalWidth * closestPairDiff * (1 - innerPadding)) / (range + closestPairDiff * (1 - innerPadding)),\n );\n return barWidth;\n }\n\n function _getDomainMarginsForHorizontalBarChart(containerHeight: number): Margins {\n _domainMargin = MIN_DOMAIN_MARGIN;\n const uniqueY = _getUniqueYValues();\n /** Rate at which the space between the bars changes wrt the bar height */\n _yAxisPadding = _yAxisPadding === 1 ? 0.99 : _yAxisPadding;\n const barGapRate = _yAxisPadding / (1 - _yAxisPadding);\n const numBars = uniqueY.length + (uniqueY.length - 1) * barGapRate;\n // Total height available to render the bars\n const totalHeight = containerHeight - (_margins.top! + MIN_DOMAIN_MARGIN) - (_margins.bottom! + MIN_DOMAIN_MARGIN);\n if (_yAxisType !== YAxisType.StringAxis) {\n // Calculate bar height dynamically\n _barHeight =\n props.barHeight || _calculateAppropriateBarHeight(uniqueY as number[] | Date[], totalHeight, _yAxisPadding);\n _barHeight = Math.max(_barHeight, 1);\n _domainMargin += _barHeight / 2;\n } else {\n // Calculate the appropriate bar height\n _barHeight = props.barHeight || totalHeight / numBars;\n /** Total height required to render the bars. Directly proportional to bar height */\n const reqHeight = numBars * _barHeight;\n if (totalHeight >= reqHeight) {\n // Center align the chart by setting equal left and right margins for domain\n _domainMargin = MIN_DOMAIN_MARGIN + (totalHeight - reqHeight) / 2;\n }\n }\n\n return {\n ..._margins,\n top: _margins.top! + _domainMargin,\n bottom: _margins.bottom! + _domainMargin,\n };\n }\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n function _tooltipOfYAxislabels(ytooltipProps: any) {\n const { tooltipCls, yAxis, id } = ytooltipProps;\n if (yAxis === null) {\n return null;\n }\n const div = d3Select('body').append('div').attr('id', id).attr('class', tooltipCls).style('opacity', 0);\n const aa = yAxis!.selectAll('#BaseSpan')._groups[0];\n const baseSpanLength = aa && Object.keys(aa)!.length;\n const originalDataArray: string[] = [];\n for (let i = 0; i < baseSpanLength; i++) {\n const originalData = aa[i].dataset && (Object.values(aa[i].dataset)[0] as string);\n originalDataArray.push(originalData);\n }\n const tickObject = yAxis!.selectAll('.tick')._groups[0];\n const tickObjectLength = tickObject && Object.keys(tickObject)!.length;\n for (let i = 0; i < tickObjectLength; i++) {\n const d1 = tickObject[i];\n d3Select(d1)\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n .on('mouseover', (event: any, d) => {\n if (!tooltipElement) {\n div.style('opacity', 0.9);\n div\n .text(originalDataArray[i])\n .style('left', event.pageX + 'px')\n .style('top', event.pageY - 28 + 'px');\n }\n })\n .on('mouseout', d => {\n div.style('opacity', 0);\n });\n }\n }\n\n function _createStringBars(\n containerHeight: number,\n containerWidth: number,\n xElement: SVGElement,\n yElement: SVGElement,\n singleBarData: HorizontalBarChartWithAxisDataPoint[],\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n xBarScale: any,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n yBarScale: any,\n ): JSX.Element[] {\n const { useSingleColor = false } = props;\n let prevWidthPositive = 0;\n let prevWidthNegative = 0;\n let prevPoint = 0;\n const totalPositiveBars = singleBarData.filter(\n (point: HorizontalBarChartWithAxisDataPoint) => point.x >= X_ORIGIN,\n ).length;\n const totalNegativeBars = singleBarData.length - totalPositiveBars;\n let currPositiveCounter = 0;\n let currNegativeCounter = 0;\n const bars = singleBarData.map((point: HorizontalBarChartWithAxisDataPoint, index: number) => {\n let shouldHighlight = true;\n if (isLegendHovered || isLegendSelected) {\n shouldHighlight = _isLegendHighlighted(point.legend);\n }\n if (point.x >= X_ORIGIN) {\n ++currPositiveCounter;\n }\n if (point.x < X_ORIGIN) {\n ++currNegativeCounter;\n }\n const barStartX = _isRtl\n ? containerWidth -\n (_margins.right! + Math.max(xBarScale(point.x + X_ORIGIN), xBarScale(X_ORIGIN)) - _margins.left!)\n : Math.min(xBarScale(point.x + X_ORIGIN), xBarScale(X_ORIGIN));\n const barHeight: number = Math.max(yBarScale(point.y), 0);\n if (barHeight < 1) {\n return <React.Fragment key={point.x}> </React.Fragment>;\n }\n let startColor: string;\n if (useSingleColor) {\n //if useSingle color , then check if user has given a palette or not\n // and pick the first color from that or else from our paltette.\n startColor = props.colors ? _createColors()(1) : getNextColor(1, 0);\n } else {\n startColor = props.colors ? _createColors()(point.x) : getNextColor(index, 0);\n }\n\n startColor = point.color && !useSingleColor ? point.color : startColor;\n const prevBarWidth = Math.abs(xBarScale(prevPoint + X_ORIGIN) - xBarScale(X_ORIGIN));\n prevPoint > 0 ? (prevWidthPositive += prevBarWidth) : (prevWidthNegative += prevBarWidth);\n const currentWidth = Math.abs(xBarScale(point.x + X_ORIGIN) - xBarScale(X_ORIGIN));\n const gapWidthLTR =\n currentWidth > 2 &&\n ((point.x > X_ORIGIN && currPositiveCounter !== totalPositiveBars) ||\n (point.x < X_ORIGIN && (totalPositiveBars !== 0 || currNegativeCounter > 1)))\n ? 2\n : 0;\n const gapWidthRTL =\n currentWidth > 2 &&\n ((point.x > X_ORIGIN && (totalNegativeBars !== 0 || currPositiveCounter > 1)) ||\n (point.x < X_ORIGIN && currNegativeCounter !== totalNegativeBars))\n ? 2\n : 0;\n prevPoint = point.x;\n let xStart = X_ORIGIN;\n if (_isRtl) {\n xStart = point.x > X_ORIGIN ? barStartX - prevWidthPositive : barStartX + prevWidthNegative;\n } else {\n xStart = point.x > X_ORIGIN ? barStartX + prevWidthPositive : barStartX - prevWidthNegative;\n }\n return (\n <React.Fragment key={`${index}_${point.x}`}>\n <rect\n transform={`translate(0,${0.5 * (yBarScale.bandwidth() - _barHeight)})`}\n key={point.x}\n x={xStart}\n y={yBarScale(point.y)}\n rx={props.roundCorners ? 3 : 0}\n width={currentWidth - (_isRtl ? gapWidthRTL : gapWidthLTR)}\n height={_barHeight}\n aria-labelledby={`toolTip${_calloutId}`}\n aria-label={_getAriaLabel(point)}\n role=\"img\"\n ref={(e: SVGRectElement) => {\n _refCallback(e, point.legend!);\n }}\n onClick={point.onClick}\n onMouseOver={(event: React.MouseEvent<SVGElement, MouseEvent>) => _onBarHover(point, startColor, event)}\n onMouseLeave={_onBarLeave}\n onBlur={_onBarLeave}\n data-is-focusable={shouldHighlight}\n opacity={shouldHighlight ? 1 : 0.1}\n onFocus={() => _onBarFocus(point, index, startColor)}\n fill={startColor}\n tabIndex={point.legend !== '' ? 0 : undefined}\n />\n </React.Fragment>\n );\n });\n\n // Removing un wanted tooltip div from DOM, when prop not provided, for proper cleanup\n // of unwanted DOM elements, to prevent flacky behaviour in tooltips , that might occur\n // in creating tooltips when tooltips are enabled( as we try to recreate a tspan with _tooltipId)\n if (!props.showYAxisLablesTooltip) {\n try {\n // eslint-disable-next-line @nx/workspace-no-restricted-globals\n document.getElementById(_tooltipId) && document.getElementById(_tooltipId)!.remove();\n //eslint-disable-next-line no-empty\n } catch (e) {}\n }\n // Used to display tooltip at y axis labels.\n if (props.showYAxisLablesTooltip) {\n const yAxisElement = d3Select(yElement).call(yBarScale);\n if (!tooltipElement) {\n try {\n // eslint-disable-next-line @nx/workspace-no-restricted-globals\n document.getElementById(_tooltipId) && document.getElementById(_tooltipId)!.remove();\n //eslint-disable-next-line no-empty\n } catch (e) {}\n }\n const ytooltipProps = {\n tooltipCls: classes.tooltip!,\n id: _tooltipId,\n yAxis: yAxisElement,\n };\n yAxisElement && _tooltipOfYAxislabels(ytooltipProps);\n }\n return bars;\n }\n\n function _onLegendHover(customMessage: string): void {\n if (!_isLegendSelected()) {\n setIsLegendHovered(true);\n setSelectedLegendTitle(customMessage);\n }\n }\n\n function _onLegendLeave(isLegendFocused?: boolean): void {\n if (!!isLegendFocused || !_isLegendSelected()) {\n setIsLegendHovered(false);\n setSelectedLegendTitle('');\n setIsLegendSelected(isLegendFocused ? false : _isLegendSelected());\n }\n }\n\n function _getLegendData(data: HorizontalBarChartWithAxisDataPoint[]): JSX.Element {\n const { useSingleColor } = props;\n const actions: Legend[] = [];\n const mapLegendToColor: Record<string, string> = {};\n\n data.forEach((point: HorizontalBarChartWithAxisDataPoint, _index: number) => {\n // eslint-disable-next-line @typescript-eslint/no-shadow\n const color: string = useSingleColor ? (props.colors ? _createColors()(1) : getNextColor(1, 0)) : point.color!;\n\n mapLegendToColor[point.legend!] = color;\n });\n Object.entries(mapLegendToColor).forEach(([legendTitle, color]) => {\n // mapping data to the format Legends component needs\n const legend: Legend = {\n title: legendTitle,\n color,\n hoverAction: () => {\n _handleChartMouseLeave();\n _onLegendHover(legendTitle);\n },\n // eslint-disable-next-line @typescript-eslint/no-shadow\n onMouseOutAction: (isLegendSelected?: boolean) => {\n _onLegendLeave(isLegendSelected);\n },\n };\n actions.push(legend);\n });\n const legends = (\n <Legends\n legends={actions}\n enabledWrapLines={props.enabledLegendsWrapLines}\n overflowText={props.legendsOverflowText}\n {...props.legendProps}\n onChange={_onLegendSelectionChange}\n />\n );\n return legends;\n }\n\n function _isLegendSelected(): boolean {\n return isLegendSelected!;\n }\n\n /**\n * This function checks if the given legend is highlighted or not.\n * A legend can be highlighted in 2 ways:\n * 1. selection: if the user clicks on it\n * 2. hovering: if there is no selected legend and the user hovers over it\n */\n function _isLegendHighlighted(legend?: string) {\n return _getHighlightedLegend().includes(legend!);\n }\n\n function _getHighlightedLegend() {\n return selectedLegends.length > 0 ? selectedLegends : selectedLegendTitle ? [selectedLegendTitle] : [];\n }\n\n function _onLegendSelectionChange(\n // eslint-disable-next-line @typescript-eslint/no-shadow\n selectedLegends: string[],\n event: React.MouseEvent<HTMLButtonElement>,\n currentLegend?: Legend,\n ): void {\n if (props.legendProps?.canSelectMultipleLegends) {\n setSelectedLegends(selectedLegends);\n setSelectedLegendTitle(currentLegend?.title!);\n } else {\n setSelectedLegends(selectedLegends.slice(-1));\n setSelectedLegendTitle(currentLegend?.title!);\n }\n setIsLegendSelected(selectedLegends.length > 0);\n if (props.legendProps?.onChange) {\n props.legendProps.onChange(selectedLegends, event, currentLegend);\n }\n }\n\n function _getAxisData(yAxisData: IAxisData) {\n if (yAxisData && yAxisData.yAxisDomainValues.length) {\n // For HBCWA x and y Values are swapped\n const { yAxisDomainValues: domainValue } = yAxisData;\n _xMax = Math.max(domainValue[domainValue.length - 1], props.xMaxValue || 0);\n }\n }\n function _getAriaLabel(point: HorizontalBarChartWithAxisDataPoint): string {\n const xValue = point.xAxisCalloutData || point.x;\n const yValue = point.yAxisCalloutData || point.y;\n return point.callOutAccessibilityData?.ariaLabel || `${xValue}. ` + `${yValue}.`;\n }\n\n function _getChartTitle(): string {\n const { chartTitle, data } = props;\n return (chartTitle ? `${chartTitle}. ` : '') + `Horizontal bar chart with ${data?.length || 0} bars. `;\n }\n\n function _isChartEmpty(): boolean {\n return !(props.data && props.data.length > 0);\n }\n\n function _updatePosition(newX: number, newY: number): void {\n const threshold = 1; // Set a threshold for movement\n const { x, y } = clickPosition;\n\n // Calculate the distance moved\n const distance = Math.sqrt(Math.pow(newX - x, 2) + Math.pow(newY - y, 2));\n // Update the position only if the distance moved is greater than the threshold\n if (distance > threshold) {\n setClickPosition({ x: newX, y: newY });\n setPopoverOpen(true);\n }\n }\n\n function _getDomainNRangeValues(\n points: HorizontalBarChartWithAxisDataPoint[],\n margins: Margins,\n width: number,\n chartType: ChartTypes,\n isRTL: boolean,\n xAxisType: XAxisTypes,\n barWidth: number,\n tickValues: Date[] | number[] | undefined,\n shiftX: number,\n ) {\n let domainNRangeValue: IDomainNRange;\n if (xAxisType === XAxisTypes.NumericAxis) {\n domainNRangeValue = domainRangeOfNumericForHorizontalBarChartWithAxis(\n points,\n margins,\n width,\n isRTL,\n shiftX,\n X_ORIGIN,\n );\n } else {\n domainNRangeValue = { dStartValue: 0, dEndValue: 0, rStartValue: 0, rEndValue: 0 };\n }\n return domainNRangeValue;\n }\n\n if (!_isChartEmpty()) {\n _adjustProps();\n const calloutProps: ChartPopoverProps = {\n color: color,\n legend: selectedLegendTitle,\n XValue: xCalloutValue,\n YValue: yCalloutValue ? yCalloutValue : dataForHoverCard,\n ...props.calloutProps,\n ...getAccessibleDataObject(callOutAccessibilityData),\n customCallout: {\n customizedCallout: _getCustomizedCallout() !== null ? _getCustomizedCallout()! : undefined,\n customCalloutProps: props.calloutPropsPerDataPoint\n ? props.calloutPropsPerDataPoint(dataPointCalloutProps!)\n : undefined,\n },\n isCartesian: true,\n isPopoverOpen,\n clickPosition,\n };\n const tickParams = {\n tickValues: props.tickValues,\n tickFormat: props.tickFormat,\n };\n\n const reversedBars = [..._points].reverse();\n _yAxisLabels = reversedBars.map((point: HorizontalBarChartWithAxisDataPoint) => point.y as string);\n _xMax = Math.max(d3Max(_points, (point: HorizontalBarChartWithAxisDataPoint) => point.x)!, props.xMaxValue || 0);\n const legendBars: JSX.Element = _getLegendData(_points);\n return (\n <CartesianChart\n yAxisPadding={_yAxisPadding}\n {...props}\n chartTitle={_getChartTitle()}\n points={_points}\n chartType={ChartTypes.HorizontalBarChartWithAxis}\n xAxisType={_xAxisType}\n yAxisType={_yAxisType}\n getDomainNRangeValues={_getDomainNRangeValues}\n stringDatasetForYAxisDomain={_yAxisLabels}\n calloutProps={calloutProps}\n tickParams={tickParams}\n legendBars={legendBars}\n barwidth={_barHeight}\n getmargins={_getMargins}\n getYDomainMargins={_getDomainMarginsForHorizontalBarChart}\n getGraphData={_getGraphData}\n getAxisData={_getAxisData}\n onChartMouseLeave={_handleChartMouseLeave}\n componentRef={cartesianChartRef}\n /* eslint-disable react/jsx-no-bind */\n // eslint-disable-next-line @typescript-eslint/no-shadow\n children={(props: ChildProps) => {\n return (\n <>\n <g>{_bars}</g>\n </>\n );\n }}\n />\n );\n } else {\n return (\n <div id={_emptyChartId} role={'alert'} style={{ opacity: '0' }} aria-label={'Graph has no data to display'} />\n );\n }\n});\nHorizontalBarChartWithAxis.displayName = 'HorizontalBarChartWithAxis';\n"],"names":["React","max","d3Max","min","d3Min","select","d3Select","scaleLinear","d3ScaleLinear","scaleBand","d3ScaleBand","Legends","useId","useHorizontalBarChartWithAxisStyles","CartesianChart","ChartPopover","ChartTypes","getAccessibleDataObject","YAxisType","XAxisTypes","getTypeOfAxis","getNextColor","areArraysEqual","useRtl","DataVizPalette","getColorFromToken","computeLongestBars","domainRangeOfNumericForHorizontalBarChartWithAxis","groupChartDataByYValue","MIN_DOMAIN_MARGIN","getClosestPairDiffAndRange","HorizontalBarChartWithAxis","forwardRef","props","forwardedRef","_refArray","_calloutId","_isRtl","_tooltipId","_xAxisType","data","length","x","NumericAxis","_yAxisType","y","StringAxis","_emptyChartId","_points","_barHeight","_colors","_margins","_bars","_yAxisLabels","_xMax","_calloutAnchorPoint","tooltipElement","_longestBarPositiveTotalValue","_longestBarNegativeTotalValue","_domainMargin","_yAxisPadding","yAxisPadding","cartesianChartRef","useRef","X_ORIGIN","color","setColor","useState","dataForHoverCard","setDataForHoverCard","isLegendSelected","setIsLegendSelected","legendProps","selectedLegends","selectedLegend","undefined","isLegendHovered","setIsLegendHovered","selectedLegendTitle","setSelectedLegendTitle","xCalloutValue","setXCalloutValue","yCalloutValue","setYCalloutValue","setSelectedLegends","dataPointCalloutProps","setDataPointCalloutProps","callOutAccessibilityData","setCallOutAccessibilityData","isPopoverOpen","setPopoverOpen","clickPosition","setClickPosition","prevPropsRef","useEffect","current","prevProps","useImperativeHandle","componentRef","chartContainer","classes","_adjustProps","barHeight","defaultPalette","color6","color1","color5","color7","colors","_getMargins","margins","_renderContentForOnlyBars","point","useSingleColor","selectedPointIndex","forEach","yDataPoint","index","_createColors","XValue","xAxisCalloutData","toString","legend","YValue","yAxisCalloutData","culture","_renderCallout","_getCustomizedCallout","onRenderCalloutPerDataPoint","_getGraphData","xScale","yScale","containerHeight","containerWidth","xElement","yElement","stackedChartData","longestBars","longestPositiveBar","longestNegativeBar","xBarScale","yBarScale","_getScales","xRange","range","allBars","map","singleBarData","_createNumericBars","_createStringBars","flat","increment","_p","color16","domainValues","i","push","colorScale","domain","_refCallback","element","legendTitle","refElement","_onBarHover","mouseEvent","persist","_isLegendHighlighted","_updatePosition","clientX","clientY","enableGradient","_onBarLeave","_handleChartMouseLeave","_onBarFocus","refArrayIndexNumber","obj","isNumericScale","xMax","xMin","xDomain","Math","yMax","yMin","yDomainMax","yMaxValue","yMinProp","yMinValue","yDomainMin","nice","left","right","bottom","top","padding","sortedBars","sort","a","b","aValue","parseFloat","bValue","prevWidthPositive","prevWidthNegative","prevPoint","totalPositiveBars","filter","totalNegativeBars","currPositiveCounter","currNegativeCounter","bars","shouldHighlight","barStartX","Fragment","key","startColor","prevBarWidth","abs","currentWidth","gapWidthLTR","gapWidthRTL","xStart","rect","data-is-focusable","width","height","ref","e","rx","roundCorners","onClick","onMouseOver","event","aria-label","_getAriaLabel","role","aria-labelledby","onMouseLeave","onFocus","onBlur","fill","opacity","tabIndex","_getUniqueYValues","mapY","uniqueY","Object","values","_calculateAppropriateBarHeight","totalWidth","innerPadding","result","closestPairDiff","barWidth","floor","_getDomainMarginsForHorizontalBarChart","barGapRate","numBars","totalHeight","reqHeight","_tooltipOfYAxislabels","ytooltipProps","tooltipCls","yAxis","id","div","append","attr","style","aa","selectAll","_groups","baseSpanLength","keys","originalDataArray","originalData","dataset","tickObject","tickObjectLength","d1","on","d","text","pageX","pageY","transform","bandwidth","showYAxisLablesTooltip","document","getElementById","remove","yAxisElement","call","tooltip","_onLegendHover","customMessage","_isLegendSelected","_onLegendLeave","isLegendFocused","_getLegendData","actions","mapLegendToColor","_index","entries","title","hoverAction","onMouseOutAction","legends","enabledWrapLines","enabledLegendsWrapLines","overflowText","legendsOverflowText","onChange","_onLegendSelectionChange","_getHighlightedLegend","includes","currentLegend","canSelectMultipleLegends","slice","_getAxisData","yAxisData","yAxisDomainValues","domainValue","xMaxValue","xValue","yValue","ariaLabel","_getChartTitle","chartTitle","_isChartEmpty","newX","newY","threshold","distance","sqrt","pow","_getDomainNRangeValues","points","chartType","isRTL","xAxisType","tickValues","shiftX","domainNRangeValue","dStartValue","dEndValue","rStartValue","rEndValue","calloutProps","customCallout","customizedCallout","customCalloutProps","calloutPropsPerDataPoint","isCartesian","tickParams","tickFormat","reversedBars","reverse","legendBars","yAxisType","getDomainNRangeValues","stringDatasetForYAxisDomain","barwidth","getmargins","getYDomainMargins","getGraphData","getAxisData","onChartMouseLeave","children","g","displayName"],"rangeMappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;","mappings":"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"}
|
|
1
|
+
{"version":3,"sources":["HorizontalBarChartWithAxis.tsx"],"sourcesContent":["import * as React from 'react';\nimport { max as d3Max, min as d3Min } from 'd3-array';\nimport { scaleLinear as d3ScaleLinear, ScaleLinear as D3ScaleLinear, scaleBand as d3ScaleBand } from 'd3-scale';\nimport { Legend } from '../../components/Legends/Legends.types';\nimport { Legends } from '../../components/Legends/Legends';\nimport { useId } from '@fluentui/react-utilities';\nimport {\n AccessibilityProps,\n HorizontalBarChartWithAxisDataPoint,\n RefArrayData,\n Margins,\n ChartPopoverProps,\n Chart,\n} from '../../index';\nimport { ChildProps } from '../CommonComponents/CartesianChart.types';\nimport { CartesianChart } from '../CommonComponents/CartesianChart';\nimport { HorizontalBarChartWithAxisProps } from './HorizontalBarChartWithAxis.types';\nimport { ChartPopover } from '../CommonComponents/ChartPopover';\nimport {\n ChartTypes,\n IAxisData,\n getAccessibleDataObject,\n YAxisType,\n XAxisTypes,\n NumericAxis,\n StringAxis,\n getTypeOfAxis,\n getNextColor,\n areArraysEqual,\n useRtl,\n DataVizPalette,\n getColorFromToken,\n computeLongestBars,\n IDomainNRange,\n domainRangeOfNumericForHorizontalBarChartWithAxis,\n groupChartDataByYValue,\n MIN_DOMAIN_MARGIN,\n} from '../../utilities/index';\nimport { getClosestPairDiffAndRange } from '../../utilities/vbc-utils';\ntype ColorScale = (_p?: number) => string;\n\nexport const HorizontalBarChartWithAxis: React.FunctionComponent<HorizontalBarChartWithAxisProps> = React.forwardRef<\n HTMLDivElement,\n HorizontalBarChartWithAxisProps\n>((props, forwardedRef) => {\n const _refArray: RefArrayData[] = [];\n const _calloutId: string = useId('callout');\n const _isRtl: boolean = useRtl();\n const _xAxisType: XAxisTypes =\n props.data! && props.data!.length > 0\n ? (getTypeOfAxis(props.data![0].x, true) as XAxisTypes)\n : XAxisTypes.NumericAxis;\n const _yAxisType: YAxisType =\n props.data! && props.data!.length > 0\n ? (getTypeOfAxis(props.data![0].y, false) as YAxisType)\n : YAxisType.StringAxis;\n const _emptyChartId: string = useId('_HBCWithAxis_empty');\n let _points: HorizontalBarChartWithAxisDataPoint[] = [];\n let _barHeight: number = 0;\n let _colors: string[] = [];\n let _margins: Margins;\n let _bars: JSX.Element[];\n let _yAxisLabels: string[];\n let _xMax: number;\n let _calloutAnchorPoint: HorizontalBarChartWithAxisDataPoint | null;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n let _longestBarPositiveTotalValue: number;\n let _longestBarNegativeTotalValue: number;\n let _domainMargin: number = MIN_DOMAIN_MARGIN;\n let _yAxisPadding: number = props.yAxisPadding ?? 0.5;\n const cartesianChartRef = React.useRef<Chart>(null);\n const X_ORIGIN: number = 0;\n\n const [color, setColor] = React.useState<string>('');\n const [dataForHoverCard, setDataForHoverCard] = React.useState<number>(0);\n const [isLegendSelected, setIsLegendSelected] = React.useState<boolean>(\n (props.legendProps?.selectedLegends && props.legendProps.selectedLegends.length > 0) ||\n props.legendProps?.selectedLegend !== undefined,\n );\n const [isLegendHovered, setIsLegendHovered] = React.useState<boolean>(false);\n const [selectedLegendTitle, setSelectedLegendTitle] = React.useState<string>(props.legendProps?.selectedLegend ?? '');\n const [xCalloutValue, setXCalloutValue] = React.useState<string>('');\n const [yCalloutValue, setYCalloutValue] = React.useState<string>('');\n const [selectedLegends, setSelectedLegends] = React.useState<string[]>(props.legendProps?.selectedLegends || []);\n const [dataPointCalloutProps, setDataPointCalloutProps] = React.useState<HorizontalBarChartWithAxisDataPoint>();\n const [callOutAccessibilityData, setCallOutAccessibilityData] = React.useState<AccessibilityProps>();\n const [isPopoverOpen, setPopoverOpen] = React.useState<boolean>(false);\n const [clickPosition, setClickPosition] = React.useState({ x: 0, y: 0 });\n const prevPropsRef = React.useRef<HorizontalBarChartWithAxisProps | null>(null);\n\n React.useEffect(() => {\n if (prevPropsRef.current) {\n const prevProps = prevPropsRef.current;\n if (!areArraysEqual(prevProps.legendProps?.selectedLegends, props.legendProps?.selectedLegends)) {\n setSelectedLegends(props.legendProps?.selectedLegends || []);\n }\n }\n prevPropsRef.current = props;\n }, [props]);\n\n React.useImperativeHandle(\n props.componentRef,\n () => ({\n chartContainer: cartesianChartRef.current?.chartContainer ?? null,\n }),\n [],\n );\n\n function _adjustProps(): void {\n _points = props.data || [];\n _barHeight = props.barHeight || 32;\n const defaultPalette: string[] = [\n getColorFromToken(DataVizPalette.color6),\n getColorFromToken(DataVizPalette.color1),\n getColorFromToken(DataVizPalette.color5),\n getColorFromToken(DataVizPalette.color7),\n ];\n _colors = props.colors! || defaultPalette;\n }\n\n function _getMargins(margins: Margins) {\n _margins = margins;\n }\n\n function _renderContentForOnlyBars(point: HorizontalBarChartWithAxisDataPoint): JSX.Element {\n const { useSingleColor = false } = props;\n let selectedPointIndex = 0;\n props.data!.forEach((yDataPoint: HorizontalBarChartWithAxisDataPoint, index: number) => {\n if (yDataPoint.y === point.y) {\n selectedPointIndex = index;\n }\n });\n // eslint-disable-next-line @typescript-eslint/no-shadow\n let color: string;\n if (useSingleColor) {\n //if useSingle color , then check if user has given a palette or not\n // and pick the first color from that or else from our paltette.\n color = props.colors ? _createColors()(1) : getNextColor(1, 0);\n } else {\n color = point.color ? point.color : props.colors ? _createColors()(point.x) : getNextColor(selectedPointIndex, 0);\n }\n return (\n <>\n <ChartPopover\n XValue={point.xAxisCalloutData || point.x.toString()}\n legend={point.legend}\n YValue={point.yAxisCalloutData || point.y}\n color={color}\n culture={props.culture ?? 'en-us'}\n clickPosition={clickPosition}\n isPopoverOpen={isPopoverOpen}\n />\n </>\n );\n }\n\n // eslint-disable-next-line @typescript-eslint/no-shadow\n function _renderCallout(props?: HorizontalBarChartWithAxisDataPoint): JSX.Element | null {\n return props ? _renderContentForOnlyBars(props) : null;\n }\n\n function _getCustomizedCallout() {\n return props.onRenderCalloutPerDataPoint\n ? props.onRenderCalloutPerDataPoint(dataPointCalloutProps, _renderCallout)\n : null;\n }\n\n function _getGraphData(\n xScale: NumericAxis,\n yScale: NumericAxis | StringAxis,\n containerHeight: number,\n containerWidth: number,\n xElement?: SVGElement | null,\n yElement?: SVGElement | null,\n ) {\n const stackedChartData = groupChartDataByYValue(_points);\n const longestBars = computeLongestBars(stackedChartData, X_ORIGIN);\n _longestBarPositiveTotalValue = longestBars.longestPositiveBar;\n _longestBarNegativeTotalValue = longestBars.longestNegativeBar;\n\n const { xBarScale, yBarScale } =\n _yAxisType === YAxisType.NumericAxis\n ? _getScales(containerHeight, containerWidth, true)\n : _getScales(containerHeight, containerWidth, false);\n const xRange = xBarScale.range();\n let allBars: JSX.Element[] = [];\n // when the chart mounts, the xRange[1] is sometimes seen to be < 0 (like -40) while xRange[0] > 0.\n if (xRange[0] < xRange[1]) {\n allBars = stackedChartData\n .map(singleBarData =>\n _yAxisType === YAxisType.NumericAxis\n ? _createNumericBars(\n containerHeight,\n containerWidth,\n xElement!,\n yElement!,\n singleBarData,\n xBarScale,\n yBarScale,\n )\n : _createStringBars(\n containerHeight,\n containerWidth,\n xElement!,\n yElement!,\n singleBarData,\n xBarScale,\n yBarScale,\n ),\n )\n .flat();\n }\n\n return (_bars = allBars);\n }\n\n function _createColors(): D3ScaleLinear<string, string> | ColorScale {\n const increment = _colors.length <= 1 ? 1 : 1 / (_colors.length - 1);\n const { useSingleColor = false } = props;\n if (useSingleColor) {\n return (_p?: number) => {\n const { colors } = props;\n return colors && colors.length > 0 ? colors[0] : getColorFromToken(DataVizPalette.color16);\n };\n }\n const domainValues = [];\n for (let i = 0; i < _colors.length; i++) {\n domainValues.push(increment * i * _xMax);\n }\n const colorScale = d3ScaleLinear<string>().domain(domainValues).range(_colors);\n return colorScale;\n }\n\n function _refCallback(element: SVGRectElement, legendTitle: string): void {\n _refArray.push({ index: legendTitle, refElement: element });\n }\n\n function _onBarHover(\n point: HorizontalBarChartWithAxisDataPoint,\n // eslint-disable-next-line @typescript-eslint/no-shadow\n color: string,\n mouseEvent: React.MouseEvent<SVGElement, MouseEvent>,\n ): void {\n mouseEvent.persist();\n // eslint-disable-next-line @typescript-eslint/no-shadow\n if ((isLegendSelected === false || _isLegendHighlighted(point.legend)) && _calloutAnchorPoint !== point) {\n _calloutAnchorPoint = point;\n setPopoverOpen(true);\n _updatePosition(mouseEvent.clientX, mouseEvent.clientY);\n setDataForHoverCard(point.x);\n setSelectedLegendTitle(point.legend!);\n setColor(props.useSingleColor || props.enableGradient ? color : point.color!);\n // To display callout value, if no callout value given, taking given point.x value as a string.\n setXCalloutValue(point.yAxisCalloutData! || point.y.toString());\n setYCalloutValue(point.xAxisCalloutData || point.x.toString());\n setDataPointCalloutProps(point);\n setCallOutAccessibilityData(point.callOutAccessibilityData);\n }\n }\n\n function _onBarLeave(): void {\n setPopoverOpen(false);\n }\n\n function _handleChartMouseLeave(): void {\n _calloutAnchorPoint = null;\n setPopoverOpen(false);\n }\n\n // eslint-disable-next-line @typescript-eslint/no-shadow\n function _onBarFocus(point: HorizontalBarChartWithAxisDataPoint, refArrayIndexNumber: number, color: string): void {\n if ((isLegendSelected === false || _isLegendHighlighted(point.legend)) && _calloutAnchorPoint !== point) {\n // eslint-disable-next-line @typescript-eslint/no-shadow\n _refArray.forEach((obj: RefArrayData, index: number) => {\n if (refArrayIndexNumber === index) {\n setPopoverOpen(true);\n setSelectedLegendTitle(point.legend!);\n setDataForHoverCard(point.x);\n setColor(props.useSingleColor ? color : point.color!);\n setXCalloutValue(point.yAxisCalloutData || point.y.toString());\n setYCalloutValue(point.xAxisCalloutData! || point.x.toString());\n setDataPointCalloutProps(point);\n setCallOutAccessibilityData(point.callOutAccessibilityData);\n }\n });\n }\n }\n\n function _getScales(\n containerHeight: number,\n containerWidth: number,\n isNumericScale: boolean,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n ): { xBarScale: any; yBarScale: any } {\n const xMax = _longestBarPositiveTotalValue;\n const xMin = _longestBarNegativeTotalValue;\n const xDomain = [Math.min(X_ORIGIN, xMin), Math.max(X_ORIGIN, xMax)];\n if (isNumericScale) {\n const yMax = d3Max(_points, (point: HorizontalBarChartWithAxisDataPoint) => point.y as number)!;\n const yMin = d3Min(_points, (point: HorizontalBarChartWithAxisDataPoint) => point.y as number)!;\n const yDomainMax = Math.max(yMax, props.yMaxValue || 0);\n // Default to 0 if yMinValue is not provided.\n const yMinProp = props.yMinValue || 0;\n const yDomainMin = Math.min(yMin, yMinProp);\n const xBarScale = d3ScaleLinear()\n .domain(xDomain)\n .nice()\n .range([_margins.left!, containerWidth - _margins.right!]);\n const yBarScale = d3ScaleLinear()\n .domain([yDomainMin, yDomainMax])\n .range([containerHeight - (_margins.bottom! + _domainMargin), _margins.top! + _domainMargin]);\n return { xBarScale, yBarScale };\n } else {\n // please note these padding default values must be consistent in here\n // and CatrtesianChartBase w for more details refer example\n // http://using-d3js.com/04_07_ordinal_scales.html\n const yBarScale = d3ScaleBand()\n .domain(_yAxisLabels)\n .range([containerHeight - (_margins.bottom! + _domainMargin), _margins.top! + _domainMargin])\n .padding(_yAxisPadding);\n\n const xBarScale = d3ScaleLinear()\n .domain(xDomain)\n .nice()\n .range([_margins.left!, containerWidth - _margins.right!]);\n return { xBarScale, yBarScale };\n }\n }\n\n function _createNumericBars(\n containerHeight: number,\n containerWidth: number,\n xElement: SVGElement,\n yElement: SVGElement,\n singleBarData: HorizontalBarChartWithAxisDataPoint[],\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n xBarScale: any,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n yBarScale: any,\n ): JSX.Element[] {\n const { useSingleColor = false } = props;\n const sortedBars: HorizontalBarChartWithAxisDataPoint[] = [...singleBarData];\n sortedBars.sort((a, b) => {\n const aValue = typeof a.y === 'number' ? a.y : parseFloat(a.y);\n const bValue = typeof b.y === 'number' ? b.y : parseFloat(b.y);\n return bValue - aValue;\n });\n\n let prevWidthPositive = 0;\n let prevWidthNegative = 0;\n let prevPoint = 0;\n\n const totalPositiveBars = singleBarData.filter(\n (point: HorizontalBarChartWithAxisDataPoint) => point.x >= X_ORIGIN,\n ).length;\n const totalNegativeBars = singleBarData.length - totalPositiveBars;\n let currPositiveCounter = 0;\n let currNegativeCounter = 0;\n\n const bars = sortedBars.map((point: HorizontalBarChartWithAxisDataPoint, index: number) => {\n let shouldHighlight = true;\n if (isLegendHovered || isLegendSelected) {\n shouldHighlight = _isLegendHighlighted(point.legend);\n }\n if (point.x >= X_ORIGIN) {\n ++currPositiveCounter;\n }\n if (point.x < X_ORIGIN) {\n ++currNegativeCounter;\n }\n const barStartX = _isRtl\n ? containerWidth -\n (_margins.right! + Math.max(xBarScale(point.x + X_ORIGIN), xBarScale(X_ORIGIN)) - _margins.left!)\n : Math.min(xBarScale(point.x + X_ORIGIN), xBarScale(X_ORIGIN));\n const barHeight: number = Math.max(yBarScale(point.y), 0);\n if (barHeight < 1) {\n return <React.Fragment key={point.x}> </React.Fragment>;\n }\n let startColor: string;\n if (useSingleColor) {\n //if useSingle color , then check if user has given a palette or not\n // and pick the first color from that or else from our paltette.\n startColor = props.colors ? _createColors()(1) : getNextColor(1, 0);\n } else {\n startColor = props.colors ? _createColors()(point.x) : getNextColor(index, 0);\n }\n\n startColor = point.color && !useSingleColor ? point.color : startColor;\n\n const prevBarWidth = Math.abs(xBarScale(prevPoint + X_ORIGIN) - xBarScale(X_ORIGIN));\n prevPoint > X_ORIGIN ? (prevWidthPositive += prevBarWidth) : (prevWidthNegative += prevBarWidth);\n const currentWidth = Math.abs(xBarScale(point.x + X_ORIGIN) - xBarScale(X_ORIGIN));\n const gapWidthLTR =\n currentWidth > 2 &&\n ((point.x > X_ORIGIN && currPositiveCounter !== totalPositiveBars) ||\n (point.x < X_ORIGIN && (totalPositiveBars !== 0 || currNegativeCounter > 1)))\n ? 2\n : 0;\n const gapWidthRTL =\n currentWidth > 2 &&\n ((point.x > X_ORIGIN && (totalNegativeBars !== 0 || currPositiveCounter > 1)) ||\n (point.x < X_ORIGIN && currNegativeCounter !== totalNegativeBars))\n ? 2\n : 0;\n let xStart = X_ORIGIN;\n if (_isRtl) {\n xStart = point.x > X_ORIGIN ? barStartX - prevWidthPositive : barStartX + prevWidthNegative;\n } else {\n xStart = point.x > X_ORIGIN ? barStartX + prevWidthPositive : barStartX - prevWidthNegative;\n }\n prevPoint = point.x;\n\n return (\n <React.Fragment key={`${index}_${point.x}`}>\n <rect\n key={point.y}\n x={xStart}\n y={yBarScale(point.y) - _barHeight / 2}\n data-is-focusable={shouldHighlight}\n width={currentWidth - (_isRtl ? gapWidthRTL : gapWidthLTR)}\n height={_barHeight}\n ref={(e: SVGRectElement) => {\n _refCallback(e, point.legend!);\n }}\n rx={props.roundCorners ? 3 : 0}\n onClick={point.onClick}\n onMouseOver={(event: React.MouseEvent<SVGElement, MouseEvent>) => _onBarHover(point, startColor, event)}\n aria-label={_getAriaLabel(point)}\n role=\"img\"\n aria-labelledby={`toolTip${_calloutId}`}\n onMouseLeave={_onBarLeave}\n onFocus={() => _onBarFocus(point, index, startColor)}\n onBlur={_onBarLeave}\n fill={startColor}\n opacity={shouldHighlight ? 1 : 0.1}\n tabIndex={point.legend !== '' ? 0 : undefined}\n />\n </React.Fragment>\n );\n });\n return bars;\n }\n\n function _getUniqueYValues() {\n const mapY: Record<string, number | string> = {};\n props.data?.forEach((point: HorizontalBarChartWithAxisDataPoint) => {\n mapY[point.y] = point.y;\n });\n const uniqueY = Object.values(mapY);\n return uniqueY;\n }\n\n function _calculateAppropriateBarHeight(data: number[] | Date[], totalWidth: number, innerPadding: number) {\n const result = getClosestPairDiffAndRange(data);\n if (!result || result[1] === 0) {\n return 16;\n }\n const closestPairDiff = result[0];\n let range = result[1];\n const yMax = d3Max(_points, (point: HorizontalBarChartWithAxisDataPoint) => point.y as number)!;\n // Since we are always rendering from 0 to yMax, we need to ensure that the range is at least yMax\n // to calculate the bar height correctly.\n range = Math.max(range, yMax);\n // Refer to https://microsoft.github.io/fluentui-charting-contrib/docs/rfcs/fix-overlapping-bars-on-continuous-axes\n // for the derivation of the following formula.\n const barWidth = Math.floor(\n (totalWidth * closestPairDiff * (1 - innerPadding)) / (range + closestPairDiff * (1 - innerPadding)),\n );\n return barWidth;\n }\n\n function _getDomainMarginsForHorizontalBarChart(containerHeight: number): Margins {\n _domainMargin = MIN_DOMAIN_MARGIN;\n const uniqueY = _getUniqueYValues();\n /** Rate at which the space between the bars changes wrt the bar height */\n _yAxisPadding = _yAxisPadding === 1 ? 0.99 : _yAxisPadding;\n const barGapRate = _yAxisPadding / (1 - _yAxisPadding);\n const numBars = uniqueY.length + (uniqueY.length - 1) * barGapRate;\n // Total height available to render the bars\n const totalHeight = containerHeight - (_margins.top! + MIN_DOMAIN_MARGIN) - (_margins.bottom! + MIN_DOMAIN_MARGIN);\n if (_yAxisType !== YAxisType.StringAxis) {\n // Calculate bar height dynamically\n _barHeight =\n props.barHeight || _calculateAppropriateBarHeight(uniqueY as number[] | Date[], totalHeight, _yAxisPadding);\n _barHeight = Math.max(_barHeight, 1);\n _domainMargin += _barHeight / 2;\n } else {\n // Calculate the appropriate bar height\n _barHeight = props.barHeight || totalHeight / numBars;\n /** Total height required to render the bars. Directly proportional to bar height */\n const reqHeight = numBars * _barHeight;\n if (totalHeight >= reqHeight) {\n // Center align the chart by setting equal left and right margins for domain\n _domainMargin = MIN_DOMAIN_MARGIN + (totalHeight - reqHeight) / 2;\n }\n }\n\n return {\n ..._margins,\n top: _margins.top! + _domainMargin,\n bottom: _margins.bottom! + _domainMargin,\n };\n }\n\n function _createStringBars(\n containerHeight: number,\n containerWidth: number,\n xElement: SVGElement,\n yElement: SVGElement,\n singleBarData: HorizontalBarChartWithAxisDataPoint[],\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n xBarScale: any,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n yBarScale: any,\n ): JSX.Element[] {\n const { useSingleColor = false } = props;\n let prevWidthPositive = 0;\n let prevWidthNegative = 0;\n let prevPoint = 0;\n const totalPositiveBars = singleBarData.filter(\n (point: HorizontalBarChartWithAxisDataPoint) => point.x >= X_ORIGIN,\n ).length;\n const totalNegativeBars = singleBarData.length - totalPositiveBars;\n let currPositiveCounter = 0;\n let currNegativeCounter = 0;\n const bars = singleBarData.map((point: HorizontalBarChartWithAxisDataPoint, index: number) => {\n let shouldHighlight = true;\n if (isLegendHovered || isLegendSelected) {\n shouldHighlight = _isLegendHighlighted(point.legend);\n }\n if (point.x >= X_ORIGIN) {\n ++currPositiveCounter;\n }\n if (point.x < X_ORIGIN) {\n ++currNegativeCounter;\n }\n const barStartX = _isRtl\n ? containerWidth -\n (_margins.right! + Math.max(xBarScale(point.x + X_ORIGIN), xBarScale(X_ORIGIN)) - _margins.left!)\n : Math.min(xBarScale(point.x + X_ORIGIN), xBarScale(X_ORIGIN));\n const barHeight: number = Math.max(yBarScale(point.y), 0);\n if (barHeight < 1) {\n return <React.Fragment key={point.x}> </React.Fragment>;\n }\n let startColor: string;\n if (useSingleColor) {\n //if useSingle color , then check if user has given a palette or not\n // and pick the first color from that or else from our paltette.\n startColor = props.colors ? _createColors()(1) : getNextColor(1, 0);\n } else {\n startColor = props.colors ? _createColors()(point.x) : getNextColor(index, 0);\n }\n\n startColor = point.color && !useSingleColor ? point.color : startColor;\n const prevBarWidth = Math.abs(xBarScale(prevPoint + X_ORIGIN) - xBarScale(X_ORIGIN));\n prevPoint > 0 ? (prevWidthPositive += prevBarWidth) : (prevWidthNegative += prevBarWidth);\n const currentWidth = Math.abs(xBarScale(point.x + X_ORIGIN) - xBarScale(X_ORIGIN));\n const gapWidthLTR =\n currentWidth > 2 &&\n ((point.x > X_ORIGIN && currPositiveCounter !== totalPositiveBars) ||\n (point.x < X_ORIGIN && (totalPositiveBars !== 0 || currNegativeCounter > 1)))\n ? 2\n : 0;\n const gapWidthRTL =\n currentWidth > 2 &&\n ((point.x > X_ORIGIN && (totalNegativeBars !== 0 || currPositiveCounter > 1)) ||\n (point.x < X_ORIGIN && currNegativeCounter !== totalNegativeBars))\n ? 2\n : 0;\n prevPoint = point.x;\n let xStart = X_ORIGIN;\n if (_isRtl) {\n xStart = point.x > X_ORIGIN ? barStartX - prevWidthPositive : barStartX + prevWidthNegative;\n } else {\n xStart = point.x > X_ORIGIN ? barStartX + prevWidthPositive : barStartX - prevWidthNegative;\n }\n return (\n <React.Fragment key={`${index}_${point.x}`}>\n <rect\n transform={`translate(0,${0.5 * (yBarScale.bandwidth() - _barHeight)})`}\n key={point.x}\n x={xStart}\n y={yBarScale(point.y)}\n rx={props.roundCorners ? 3 : 0}\n width={currentWidth - (_isRtl ? gapWidthRTL : gapWidthLTR)}\n height={_barHeight}\n aria-labelledby={`toolTip${_calloutId}`}\n aria-label={_getAriaLabel(point)}\n role=\"img\"\n ref={(e: SVGRectElement) => {\n _refCallback(e, point.legend!);\n }}\n onClick={point.onClick}\n onMouseOver={(event: React.MouseEvent<SVGElement, MouseEvent>) => _onBarHover(point, startColor, event)}\n onMouseLeave={_onBarLeave}\n onBlur={_onBarLeave}\n data-is-focusable={shouldHighlight}\n opacity={shouldHighlight ? 1 : 0.1}\n onFocus={() => _onBarFocus(point, index, startColor)}\n fill={startColor}\n tabIndex={point.legend !== '' ? 0 : undefined}\n />\n </React.Fragment>\n );\n });\n return bars;\n }\n\n function _onLegendHover(customMessage: string): void {\n if (!_isLegendSelected()) {\n setIsLegendHovered(true);\n setSelectedLegendTitle(customMessage);\n }\n }\n\n function _onLegendLeave(isLegendFocused?: boolean): void {\n if (!!isLegendFocused || !_isLegendSelected()) {\n setIsLegendHovered(false);\n setSelectedLegendTitle('');\n setIsLegendSelected(isLegendFocused ? false : _isLegendSelected());\n }\n }\n\n function _getLegendData(data: HorizontalBarChartWithAxisDataPoint[]): JSX.Element {\n const { useSingleColor } = props;\n const actions: Legend[] = [];\n const mapLegendToColor: Record<string, string> = {};\n\n data.forEach((point: HorizontalBarChartWithAxisDataPoint, _index: number) => {\n // eslint-disable-next-line @typescript-eslint/no-shadow\n const color: string = useSingleColor ? (props.colors ? _createColors()(1) : getNextColor(1, 0)) : point.color!;\n\n mapLegendToColor[point.legend!] = color;\n });\n Object.entries(mapLegendToColor).forEach(([legendTitle, color]) => {\n // mapping data to the format Legends component needs\n const legend: Legend = {\n title: legendTitle,\n color,\n hoverAction: () => {\n _handleChartMouseLeave();\n _onLegendHover(legendTitle);\n },\n // eslint-disable-next-line @typescript-eslint/no-shadow\n onMouseOutAction: (isLegendSelected?: boolean) => {\n _onLegendLeave(isLegendSelected);\n },\n };\n actions.push(legend);\n });\n const legends = (\n <Legends\n legends={actions}\n enabledWrapLines={props.enabledLegendsWrapLines}\n overflowText={props.legendsOverflowText}\n {...props.legendProps}\n onChange={_onLegendSelectionChange}\n />\n );\n return legends;\n }\n\n function _isLegendSelected(): boolean {\n return isLegendSelected!;\n }\n\n /**\n * This function checks if the given legend is highlighted or not.\n * A legend can be highlighted in 2 ways:\n * 1. selection: if the user clicks on it\n * 2. hovering: if there is no selected legend and the user hovers over it\n */\n function _isLegendHighlighted(legend?: string) {\n return _getHighlightedLegend().includes(legend!);\n }\n\n function _getHighlightedLegend() {\n return selectedLegends.length > 0 ? selectedLegends : selectedLegendTitle ? [selectedLegendTitle] : [];\n }\n\n function _onLegendSelectionChange(\n // eslint-disable-next-line @typescript-eslint/no-shadow\n selectedLegends: string[],\n event: React.MouseEvent<HTMLButtonElement>,\n currentLegend?: Legend,\n ): void {\n if (props.legendProps?.canSelectMultipleLegends) {\n setSelectedLegends(selectedLegends);\n setSelectedLegendTitle(currentLegend?.title!);\n } else {\n setSelectedLegends(selectedLegends.slice(-1));\n setSelectedLegendTitle(currentLegend?.title!);\n }\n setIsLegendSelected(selectedLegends.length > 0);\n if (props.legendProps?.onChange) {\n props.legendProps.onChange(selectedLegends, event, currentLegend);\n }\n }\n\n function _getAxisData(yAxisData: IAxisData) {\n if (yAxisData && yAxisData.yAxisDomainValues.length) {\n // For HBCWA x and y Values are swapped\n const { yAxisDomainValues: domainValue } = yAxisData;\n _xMax = Math.max(domainValue[domainValue.length - 1], props.xMaxValue || 0);\n }\n }\n function _getAriaLabel(point: HorizontalBarChartWithAxisDataPoint): string {\n const xValue = point.xAxisCalloutData || point.x;\n const yValue = point.yAxisCalloutData || point.y;\n return point.callOutAccessibilityData?.ariaLabel || `${xValue}. ` + `${yValue}.`;\n }\n\n function _getChartTitle(): string {\n const { chartTitle, data } = props;\n return (chartTitle ? `${chartTitle}. ` : '') + `Horizontal bar chart with ${data?.length || 0} bars. `;\n }\n\n function _isChartEmpty(): boolean {\n return !(props.data && props.data.length > 0);\n }\n\n function _updatePosition(newX: number, newY: number): void {\n const threshold = 1; // Set a threshold for movement\n const { x, y } = clickPosition;\n\n // Calculate the distance moved\n const distance = Math.sqrt(Math.pow(newX - x, 2) + Math.pow(newY - y, 2));\n // Update the position only if the distance moved is greater than the threshold\n if (distance > threshold) {\n setClickPosition({ x: newX, y: newY });\n setPopoverOpen(true);\n }\n }\n\n function _getDomainNRangeValues(\n points: HorizontalBarChartWithAxisDataPoint[],\n margins: Margins,\n width: number,\n chartType: ChartTypes,\n isRTL: boolean,\n xAxisType: XAxisTypes,\n barWidth: number,\n tickValues: Date[] | number[] | undefined,\n shiftX: number,\n ) {\n let domainNRangeValue: IDomainNRange;\n if (xAxisType === XAxisTypes.NumericAxis) {\n domainNRangeValue = domainRangeOfNumericForHorizontalBarChartWithAxis(\n points,\n margins,\n width,\n isRTL,\n shiftX,\n X_ORIGIN,\n );\n } else {\n domainNRangeValue = { dStartValue: 0, dEndValue: 0, rStartValue: 0, rEndValue: 0 };\n }\n return domainNRangeValue;\n }\n\n if (!_isChartEmpty()) {\n _adjustProps();\n const calloutProps: ChartPopoverProps = {\n color: color,\n legend: selectedLegendTitle,\n XValue: xCalloutValue,\n YValue: yCalloutValue ? yCalloutValue : dataForHoverCard,\n ...props.calloutProps,\n ...getAccessibleDataObject(callOutAccessibilityData),\n customCallout: {\n customizedCallout: _getCustomizedCallout() !== null ? _getCustomizedCallout()! : undefined,\n customCalloutProps: props.calloutPropsPerDataPoint\n ? props.calloutPropsPerDataPoint(dataPointCalloutProps!)\n : undefined,\n },\n isCartesian: true,\n isPopoverOpen,\n clickPosition,\n };\n const tickParams = {\n tickValues: props.tickValues,\n tickFormat: props.tickFormat,\n };\n\n const reversedBars = [..._points].reverse();\n _yAxisLabels = reversedBars.map((point: HorizontalBarChartWithAxisDataPoint) => point.y as string);\n _xMax = Math.max(d3Max(_points, (point: HorizontalBarChartWithAxisDataPoint) => point.x)!, props.xMaxValue || 0);\n const legendBars: JSX.Element = _getLegendData(_points);\n return (\n <CartesianChart\n yAxisPadding={_yAxisPadding}\n {...props}\n chartTitle={_getChartTitle()}\n points={_points}\n chartType={ChartTypes.HorizontalBarChartWithAxis}\n xAxisType={_xAxisType}\n yAxisType={_yAxisType}\n getDomainNRangeValues={_getDomainNRangeValues}\n stringDatasetForYAxisDomain={_yAxisLabels}\n calloutProps={calloutProps}\n tickParams={tickParams}\n legendBars={legendBars}\n barwidth={_barHeight}\n getmargins={_getMargins}\n getYDomainMargins={_getDomainMarginsForHorizontalBarChart}\n getGraphData={_getGraphData}\n getAxisData={_getAxisData}\n onChartMouseLeave={_handleChartMouseLeave}\n componentRef={cartesianChartRef}\n /* eslint-disable react/jsx-no-bind */\n // eslint-disable-next-line @typescript-eslint/no-shadow\n children={(props: ChildProps) => {\n return (\n <>\n <g>{_bars}</g>\n </>\n );\n }}\n />\n );\n } else {\n return (\n <div id={_emptyChartId} role={'alert'} style={{ opacity: '0' }} aria-label={'Graph has no data to display'} />\n );\n }\n});\nHorizontalBarChartWithAxis.displayName = 'HorizontalBarChartWithAxis';\n"],"names":["React","max","d3Max","min","d3Min","scaleLinear","d3ScaleLinear","scaleBand","d3ScaleBand","Legends","useId","CartesianChart","ChartPopover","ChartTypes","getAccessibleDataObject","YAxisType","XAxisTypes","getTypeOfAxis","getNextColor","areArraysEqual","useRtl","DataVizPalette","getColorFromToken","computeLongestBars","domainRangeOfNumericForHorizontalBarChartWithAxis","groupChartDataByYValue","MIN_DOMAIN_MARGIN","getClosestPairDiffAndRange","HorizontalBarChartWithAxis","forwardRef","props","forwardedRef","_refArray","_calloutId","_isRtl","_xAxisType","data","length","x","NumericAxis","_yAxisType","y","StringAxis","_emptyChartId","_points","_barHeight","_colors","_margins","_bars","_yAxisLabels","_xMax","_calloutAnchorPoint","_longestBarPositiveTotalValue","_longestBarNegativeTotalValue","_domainMargin","_yAxisPadding","yAxisPadding","cartesianChartRef","useRef","X_ORIGIN","color","setColor","useState","dataForHoverCard","setDataForHoverCard","isLegendSelected","setIsLegendSelected","legendProps","selectedLegends","selectedLegend","undefined","isLegendHovered","setIsLegendHovered","selectedLegendTitle","setSelectedLegendTitle","xCalloutValue","setXCalloutValue","yCalloutValue","setYCalloutValue","setSelectedLegends","dataPointCalloutProps","setDataPointCalloutProps","callOutAccessibilityData","setCallOutAccessibilityData","isPopoverOpen","setPopoverOpen","clickPosition","setClickPosition","prevPropsRef","useEffect","current","prevProps","useImperativeHandle","componentRef","chartContainer","_adjustProps","barHeight","defaultPalette","color6","color1","color5","color7","colors","_getMargins","margins","_renderContentForOnlyBars","point","useSingleColor","selectedPointIndex","forEach","yDataPoint","index","_createColors","XValue","xAxisCalloutData","toString","legend","YValue","yAxisCalloutData","culture","_renderCallout","_getCustomizedCallout","onRenderCalloutPerDataPoint","_getGraphData","xScale","yScale","containerHeight","containerWidth","xElement","yElement","stackedChartData","longestBars","longestPositiveBar","longestNegativeBar","xBarScale","yBarScale","_getScales","xRange","range","allBars","map","singleBarData","_createNumericBars","_createStringBars","flat","increment","_p","color16","domainValues","i","push","colorScale","domain","_refCallback","element","legendTitle","refElement","_onBarHover","mouseEvent","persist","_isLegendHighlighted","_updatePosition","clientX","clientY","enableGradient","_onBarLeave","_handleChartMouseLeave","_onBarFocus","refArrayIndexNumber","obj","isNumericScale","xMax","xMin","xDomain","Math","yMax","yMin","yDomainMax","yMaxValue","yMinProp","yMinValue","yDomainMin","nice","left","right","bottom","top","padding","sortedBars","sort","a","b","aValue","parseFloat","bValue","prevWidthPositive","prevWidthNegative","prevPoint","totalPositiveBars","filter","totalNegativeBars","currPositiveCounter","currNegativeCounter","bars","shouldHighlight","barStartX","Fragment","key","startColor","prevBarWidth","abs","currentWidth","gapWidthLTR","gapWidthRTL","xStart","rect","data-is-focusable","width","height","ref","e","rx","roundCorners","onClick","onMouseOver","event","aria-label","_getAriaLabel","role","aria-labelledby","onMouseLeave","onFocus","onBlur","fill","opacity","tabIndex","_getUniqueYValues","mapY","uniqueY","Object","values","_calculateAppropriateBarHeight","totalWidth","innerPadding","result","closestPairDiff","barWidth","floor","_getDomainMarginsForHorizontalBarChart","barGapRate","numBars","totalHeight","reqHeight","transform","bandwidth","_onLegendHover","customMessage","_isLegendSelected","_onLegendLeave","isLegendFocused","_getLegendData","actions","mapLegendToColor","_index","entries","title","hoverAction","onMouseOutAction","legends","enabledWrapLines","enabledLegendsWrapLines","overflowText","legendsOverflowText","onChange","_onLegendSelectionChange","_getHighlightedLegend","includes","currentLegend","canSelectMultipleLegends","slice","_getAxisData","yAxisData","yAxisDomainValues","domainValue","xMaxValue","xValue","yValue","ariaLabel","_getChartTitle","chartTitle","_isChartEmpty","newX","newY","threshold","distance","sqrt","pow","_getDomainNRangeValues","points","chartType","isRTL","xAxisType","tickValues","shiftX","domainNRangeValue","dStartValue","dEndValue","rStartValue","rEndValue","calloutProps","customCallout","customizedCallout","customCalloutProps","calloutPropsPerDataPoint","isCartesian","tickParams","tickFormat","reversedBars","reverse","legendBars","yAxisType","getDomainNRangeValues","stringDatasetForYAxisDomain","barwidth","getmargins","getYDomainMargins","getGraphData","getAxisData","onChartMouseLeave","children","g","div","id","style","displayName"],"rangeMappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;","mappings":"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"}
|
package/lib/components/HorizontalBarChartWithAxis/useHorizontalBarChartWithAxisStyles.styles.js
CHANGED
|
@@ -1,5 +1,4 @@
|
|
|
1
|
-
import { __styles, mergeClasses
|
|
2
|
-
import { tokens, typographyStyles } from '@fluentui/react-theme';
|
|
1
|
+
import { __styles, mergeClasses } from '@griffel/react';
|
|
3
2
|
export const hbcWithAxisClassNames = {
|
|
4
3
|
opacityChangeOnHover: 'fui-hbcwa__opacityChangeOnHover',
|
|
5
4
|
xAxisTicks: 'fui-hbcwa__xAxisTicks',
|
|
@@ -26,33 +25,9 @@ const useStyles = /*#__PURE__*/__styles({
|
|
|
26
25
|
opacityChangeOnHover: {
|
|
27
26
|
abs64n: "f9das1l"
|
|
28
27
|
},
|
|
29
|
-
xAxisTicks: {}
|
|
30
|
-
tooltip: {
|
|
31
|
-
Bahqtrf: "fk6fouc",
|
|
32
|
-
Be2twd7: "fkhj508",
|
|
33
|
-
Bhrd7zp: "figsok6",
|
|
34
|
-
Bg96gwp: "f1i3iumi",
|
|
35
|
-
mc9l5x: "f22iagw",
|
|
36
|
-
Beiy3e4: "f1vx9l62",
|
|
37
|
-
z8tnut: "f17mpqex",
|
|
38
|
-
z189sj: ["f1vdfbxk", "f1f5gg8d"],
|
|
39
|
-
Byoj8tv: "fdvome7",
|
|
40
|
-
uwmqm3: ["f1f5gg8d", "f1vdfbxk"],
|
|
41
|
-
qhf8xq: "f1euv43f",
|
|
42
|
-
fsow6f: "f17mccla",
|
|
43
|
-
Bhzewxz: "fr6rvge",
|
|
44
|
-
De3pzq: "fxugw4r",
|
|
45
|
-
Beyfa6y: 0,
|
|
46
|
-
Bbmb7ep: 0,
|
|
47
|
-
Btl43ni: 0,
|
|
48
|
-
B7oj6ja: 0,
|
|
49
|
-
Dimara: "fq9zq91",
|
|
50
|
-
Bkecrkj: "f1aehjj5"
|
|
51
|
-
}
|
|
28
|
+
xAxisTicks: {}
|
|
52
29
|
}, {
|
|
53
|
-
d: [".f9das1l{opacity:0.1;}"
|
|
54
|
-
p: -1
|
|
55
|
-
}], ".f1aehjj5{pointer-events:none;}"]
|
|
30
|
+
d: [".f9das1l{opacity:0.1;}"]
|
|
56
31
|
});
|
|
57
32
|
/**
|
|
58
33
|
* Apply styling to the HorizontalBarChartWithAxis slots based on the state
|
|
@@ -61,8 +36,7 @@ export const useHorizontalBarChartWithAxisStyles = props => {
|
|
|
61
36
|
const baseStyles = useStyles();
|
|
62
37
|
return {
|
|
63
38
|
opacityChangeOnHover: mergeClasses(hbcWithAxisClassNames.opacityChangeOnHover, baseStyles.opacityChangeOnHover),
|
|
64
|
-
xAxisTicks: mergeClasses(hbcWithAxisClassNames.xAxisTicks, baseStyles.xAxisTicks)
|
|
65
|
-
tooltip: mergeClasses(hbcWithAxisClassNames.tooltip, baseStyles.tooltip)
|
|
39
|
+
xAxisTicks: mergeClasses(hbcWithAxisClassNames.xAxisTicks, baseStyles.xAxisTicks)
|
|
66
40
|
};
|
|
67
41
|
};
|
|
68
42
|
//# sourceMappingURL=useHorizontalBarChartWithAxisStyles.styles.js.map
|
package/lib/components/HorizontalBarChartWithAxis/useHorizontalBarChartWithAxisStyles.styles.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["__styles","mergeClasses","
|
|
1
|
+
{"version":3,"names":["__styles","mergeClasses","hbcWithAxisClassNames","opacityChangeOnHover","xAxisTicks","tooltip","chartLabel","xAxisDomain","xAxisText","yAxisDomain","yAxisTicks","yAxisText","root","xAxis","yAxis","legendContainer","hover","descriptionMessage","axisTitle","chartTitle","shapeStyles","chartWrapper","svgTooltip","useStyles","abs64n","d","useHorizontalBarChartWithAxisStyles","props","baseStyles"],"sources":["useHorizontalBarChartWithAxisStyles.styles.js"],"sourcesContent":["import { makeStyles, mergeClasses } from '@griffel/react';\nexport const hbcWithAxisClassNames = {\n opacityChangeOnHover: 'fui-hbcwa__opacityChangeOnHover',\n xAxisTicks: 'fui-hbcwa__xAxisTicks',\n tooltip: 'fui-hbcwa__tooltip',\n chartLabel: '',\n xAxisDomain: '',\n xAxisText: '',\n yAxisDomain: '',\n yAxisTicks: '',\n yAxisText: '',\n root: '',\n xAxis: '',\n yAxis: '',\n legendContainer: '',\n hover: '',\n descriptionMessage: '',\n axisTitle: '',\n chartTitle: '',\n shapeStyles: '',\n chartWrapper: '',\n svgTooltip: ''\n};\nconst useStyles = makeStyles({\n opacityChangeOnHover: {\n opacity: 0.1\n },\n xAxisTicks: {}\n});\n/**\n * Apply styling to the HorizontalBarChartWithAxis slots based on the state\n */ export const useHorizontalBarChartWithAxisStyles = (props)=>{\n const baseStyles = useStyles();\n return {\n opacityChangeOnHover: mergeClasses(hbcWithAxisClassNames.opacityChangeOnHover, baseStyles.opacityChangeOnHover),\n xAxisTicks: mergeClasses(hbcWithAxisClassNames.xAxisTicks, baseStyles.xAxisTicks)\n };\n};\n"],"mappings":"AAAA,SAAAA,QAAA,EAAqBC,YAAY,QAAQ,gBAAgB;AACzD,OAAO,MAAMC,qBAAqB,GAAG;EACjCC,oBAAoB,EAAE,iCAAiC;EACvDC,UAAU,EAAE,uBAAuB;EACnCC,OAAO,EAAE,oBAAoB;EAC7BC,UAAU,EAAE,EAAE;EACdC,WAAW,EAAE,EAAE;EACfC,SAAS,EAAE,EAAE;EACbC,WAAW,EAAE,EAAE;EACfC,UAAU,EAAE,EAAE;EACdC,SAAS,EAAE,EAAE;EACbC,IAAI,EAAE,EAAE;EACRC,KAAK,EAAE,EAAE;EACTC,KAAK,EAAE,EAAE;EACTC,eAAe,EAAE,EAAE;EACnBC,KAAK,EAAE,EAAE;EACTC,kBAAkB,EAAE,EAAE;EACtBC,SAAS,EAAE,EAAE;EACbC,UAAU,EAAE,EAAE;EACdC,WAAW,EAAE,EAAE;EACfC,YAAY,EAAE,EAAE;EAChBC,UAAU,EAAE;AAChB,CAAC;AACD,MAAMC,SAAS,gBAAGvB,QAAA;EAAAG,oBAAA;IAAAqB,MAAA;EAAA;EAAApB,UAAA;AAAA;EAAAqB,CAAA;AAAA,CAKjB,CAAC;AACF;AACA;AACA;AAAI,OAAO,MAAMC,mCAAmC,GAAIC,KAAK,IAAG;EAC5D,MAAMC,UAAU,GAAGL,SAAS,CAAC,CAAC;EAC9B,OAAO;IACHpB,oBAAoB,EAAEF,YAAY,CAACC,qBAAqB,CAACC,oBAAoB,EAAEyB,UAAU,CAACzB,oBAAoB,CAAC;IAC/GC,UAAU,EAAEH,YAAY,CAACC,qBAAqB,CAACE,UAAU,EAAEwB,UAAU,CAACxB,UAAU;EACpF,CAAC;AACL,CAAC","ignoreList":[]}
|
|
@@ -9,7 +9,7 @@ import { find } from '../../utilities/index';
|
|
|
9
9
|
import { CartesianChart } from '../../index';
|
|
10
10
|
import { EventsAnnotation } from './eventAnnotation/EventAnnotation';
|
|
11
11
|
import { tokens } from '@fluentui/react-theme';
|
|
12
|
-
import { calloutData, ChartTypes, getXAxisType, XAxisTypes,
|
|
12
|
+
import { calloutData, ChartTypes, getXAxisType, XAxisTypes, tooltipOfAxislabels, Points, pointTypes, getMinMaxOfYAxis, getTypeOfAxis, getNextColor, getColorFromToken, useRtl, formatDate, getCurveFactory } from '../../utilities/index';
|
|
13
13
|
var PointSize;
|
|
14
14
|
(function(PointSize) {
|
|
15
15
|
PointSize[PointSize["hoverSize"] = 11] = "hoverSize";
|
|
@@ -643,9 +643,9 @@ const PATH_MULTIPLY_SIZE = 2.5;
|
|
|
643
643
|
const tooltipProps = {
|
|
644
644
|
tooltipCls: classes.tooltip,
|
|
645
645
|
id: _tooltipId,
|
|
646
|
-
|
|
646
|
+
axis: xAxisElement
|
|
647
647
|
};
|
|
648
|
-
xAxisElement &&
|
|
648
|
+
xAxisElement && tooltipOfAxislabels(tooltipProps);
|
|
649
649
|
}
|
|
650
650
|
return lines;
|
|
651
651
|
}
|