@fluentui/react-charting 5.19.30 → 5.19.31
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.json +37 -1
- package/CHANGELOG.md +12 -2
- package/README.md +1 -1
- package/dist/react-charting.d.ts +61 -11
- package/dist/react-charting.js +1 -1
- package/dist/react-charting.min.js +1 -1
- package/etc/react-charting.api.md +12 -3
- package/lib/components/CommonComponents/CartesianChart.base.js +2 -1
- package/lib/components/CommonComponents/CartesianChart.base.js.map +1 -1
- package/lib/components/DonutChart/DonutChart.base.js +2 -1
- package/lib/components/DonutChart/DonutChart.base.js.map +1 -1
- package/lib/components/GaugeChart/GaugeChart.base.js +2 -1
- package/lib/components/GaugeChart/GaugeChart.base.js.map +1 -1
- package/lib/components/GroupedVerticalBarChart/GroupedVerticalBarChart.base.d.ts +3 -0
- package/lib/components/GroupedVerticalBarChart/GroupedVerticalBarChart.base.js +42 -29
- package/lib/components/GroupedVerticalBarChart/GroupedVerticalBarChart.base.js.map +1 -1
- package/lib/components/GroupedVerticalBarChart/GroupedVerticalBarChart.types.d.ts +22 -7
- package/lib/components/GroupedVerticalBarChart/GroupedVerticalBarChart.types.js.map +1 -1
- package/lib/components/HeatMapChart/HeatMapChart.base.d.ts +1 -1
- package/lib/components/HeatMapChart/HeatMapChart.base.js +3 -2
- package/lib/components/HeatMapChart/HeatMapChart.base.js.map +1 -1
- package/lib/components/HorizontalBarChart/HorizontalBarChart.base.js +2 -1
- package/lib/components/HorizontalBarChart/HorizontalBarChart.base.js.map +1 -1
- package/lib/components/HorizontalBarChartWithAxis/HorizontalBarChartWithAxis.base.d.ts +3 -1
- package/lib/components/HorizontalBarChartWithAxis/HorizontalBarChartWithAxis.base.js +3 -2
- package/lib/components/HorizontalBarChartWithAxis/HorizontalBarChartWithAxis.base.js.map +1 -1
- package/lib/components/HorizontalBarChartWithAxis/HorizontalBarChartWithAxis.js +1 -1
- package/lib/components/HorizontalBarChartWithAxis/HorizontalBarChartWithAxis.js.map +1 -1
- package/lib/components/PieChart/Arc/Arc.js +2 -1
- package/lib/components/PieChart/Arc/Arc.js.map +1 -1
- package/lib/components/StackedBarChart/MultiStackedBarChart.base.js +2 -1
- package/lib/components/StackedBarChart/MultiStackedBarChart.base.js.map +1 -1
- package/lib/components/StackedBarChart/StackedBarChart.base.js +2 -1
- package/lib/components/StackedBarChart/StackedBarChart.base.js.map +1 -1
- package/lib/components/VerticalBarChart/VerticalBarChart.base.d.ts +2 -0
- package/lib/components/VerticalBarChart/VerticalBarChart.base.js +31 -19
- package/lib/components/VerticalBarChart/VerticalBarChart.base.js.map +1 -1
- package/lib/components/VerticalBarChart/VerticalBarChart.types.d.ts +20 -2
- package/lib/components/VerticalBarChart/VerticalBarChart.types.js.map +1 -1
- package/lib/components/VerticalStackedBarChart/VerticalStackedBarChart.base.d.ts +2 -0
- package/lib/components/VerticalStackedBarChart/VerticalStackedBarChart.base.js +32 -20
- package/lib/components/VerticalStackedBarChart/VerticalStackedBarChart.base.js.map +1 -1
- package/lib/components/VerticalStackedBarChart/VerticalStackedBarChart.types.d.ts +19 -2
- package/lib/components/VerticalStackedBarChart/VerticalStackedBarChart.types.js.map +1 -1
- package/lib/utilities/ChartHoverCard/ChartHoverCard.base.js +1 -1
- package/lib/utilities/ChartHoverCard/ChartHoverCard.base.js.map +1 -1
- package/lib/utilities/ChartHoverCard/ChartHoverCard.js +1 -1
- package/lib/utilities/ChartHoverCard/ChartHoverCard.js.map +1 -1
- package/lib/utilities/locale-util.d.ts +3 -0
- package/lib/utilities/locale-util.js +18 -0
- package/lib/utilities/locale-util.js.map +1 -0
- package/lib/utilities/utilities.d.ts +3 -0
- package/lib/utilities/utilities.js +29 -0
- package/lib/utilities/utilities.js.map +1 -1
- package/lib/version.js +1 -1
- package/lib/version.js.map +1 -1
- package/lib-amd/components/CommonComponents/CartesianChart.base.js +6 -6
- package/lib-amd/components/CommonComponents/CartesianChart.base.js.map +1 -1
- package/lib-amd/components/DonutChart/DonutChart.base.js +2 -2
- package/lib-amd/components/DonutChart/DonutChart.base.js.map +1 -1
- package/lib-amd/components/GaugeChart/GaugeChart.base.js +6 -6
- package/lib-amd/components/GaugeChart/GaugeChart.base.js.map +1 -1
- package/lib-amd/components/GroupedVerticalBarChart/GroupedVerticalBarChart.base.d.ts +3 -0
- package/lib-amd/components/GroupedVerticalBarChart/GroupedVerticalBarChart.base.js +41 -28
- package/lib-amd/components/GroupedVerticalBarChart/GroupedVerticalBarChart.base.js.map +1 -1
- package/lib-amd/components/GroupedVerticalBarChart/GroupedVerticalBarChart.types.d.ts +22 -7
- package/lib-amd/components/GroupedVerticalBarChart/GroupedVerticalBarChart.types.js.map +1 -1
- package/lib-amd/components/HeatMapChart/HeatMapChart.base.d.ts +1 -1
- package/lib-amd/components/HeatMapChart/HeatMapChart.base.js +2 -2
- package/lib-amd/components/HeatMapChart/HeatMapChart.base.js.map +1 -1
- package/lib-amd/components/HorizontalBarChart/HorizontalBarChart.base.js +5 -5
- package/lib-amd/components/HorizontalBarChart/HorizontalBarChart.base.js.map +1 -1
- package/lib-amd/components/HorizontalBarChartWithAxis/HorizontalBarChartWithAxis.base.d.ts +3 -1
- package/lib-amd/components/HorizontalBarChartWithAxis/HorizontalBarChartWithAxis.base.js +18 -18
- package/lib-amd/components/HorizontalBarChartWithAxis/HorizontalBarChartWithAxis.base.js.map +1 -1
- package/lib-amd/components/HorizontalBarChartWithAxis/HorizontalBarChartWithAxis.js +1 -1
- package/lib-amd/components/HorizontalBarChartWithAxis/HorizontalBarChartWithAxis.js.map +1 -1
- package/lib-amd/components/PieChart/Arc/Arc.js +3 -3
- package/lib-amd/components/PieChart/Arc/Arc.js.map +1 -1
- package/lib-amd/components/StackedBarChart/MultiStackedBarChart.base.js +3 -3
- package/lib-amd/components/StackedBarChart/MultiStackedBarChart.base.js.map +1 -1
- package/lib-amd/components/StackedBarChart/StackedBarChart.base.js +3 -3
- package/lib-amd/components/StackedBarChart/StackedBarChart.base.js.map +1 -1
- package/lib-amd/components/VerticalBarChart/VerticalBarChart.base.d.ts +2 -0
- package/lib-amd/components/VerticalBarChart/VerticalBarChart.base.js +30 -18
- package/lib-amd/components/VerticalBarChart/VerticalBarChart.base.js.map +1 -1
- package/lib-amd/components/VerticalBarChart/VerticalBarChart.types.d.ts +20 -2
- package/lib-amd/components/VerticalBarChart/VerticalBarChart.types.js.map +1 -1
- package/lib-amd/components/VerticalStackedBarChart/VerticalStackedBarChart.base.d.ts +2 -0
- package/lib-amd/components/VerticalStackedBarChart/VerticalStackedBarChart.base.js +31 -19
- package/lib-amd/components/VerticalStackedBarChart/VerticalStackedBarChart.base.js.map +1 -1
- package/lib-amd/components/VerticalStackedBarChart/VerticalStackedBarChart.types.d.ts +19 -2
- package/lib-amd/components/VerticalStackedBarChart/VerticalStackedBarChart.types.js.map +1 -1
- package/lib-amd/utilities/ChartHoverCard/ChartHoverCard.base.js +5 -5
- package/lib-amd/utilities/ChartHoverCard/ChartHoverCard.base.js.map +1 -1
- package/lib-amd/utilities/ChartHoverCard/ChartHoverCard.js +1 -1
- package/lib-amd/utilities/ChartHoverCard/ChartHoverCard.js.map +1 -1
- package/lib-amd/utilities/locale-util.d.ts +3 -0
- package/lib-amd/utilities/locale-util.js +24 -0
- package/lib-amd/utilities/locale-util.js.map +1 -0
- package/lib-amd/utilities/utilities.d.ts +3 -0
- package/lib-amd/utilities/utilities.js +33 -1
- package/lib-amd/utilities/utilities.js.map +1 -1
- package/lib-amd/version.js +1 -1
- package/lib-amd/version.js.map +1 -1
- package/lib-commonjs/components/CommonComponents/CartesianChart.base.js +6 -5
- package/lib-commonjs/components/CommonComponents/CartesianChart.base.js.map +1 -1
- package/lib-commonjs/components/DonutChart/DonutChart.base.js +2 -1
- package/lib-commonjs/components/DonutChart/DonutChart.base.js.map +1 -1
- package/lib-commonjs/components/GaugeChart/GaugeChart.base.js +6 -5
- package/lib-commonjs/components/GaugeChart/GaugeChart.base.js.map +1 -1
- package/lib-commonjs/components/GroupedVerticalBarChart/GroupedVerticalBarChart.base.d.ts +3 -0
- package/lib-commonjs/components/GroupedVerticalBarChart/GroupedVerticalBarChart.base.js +41 -28
- package/lib-commonjs/components/GroupedVerticalBarChart/GroupedVerticalBarChart.base.js.map +1 -1
- package/lib-commonjs/components/GroupedVerticalBarChart/GroupedVerticalBarChart.types.d.ts +22 -7
- package/lib-commonjs/components/GroupedVerticalBarChart/GroupedVerticalBarChart.types.js.map +1 -1
- package/lib-commonjs/components/HeatMapChart/HeatMapChart.base.d.ts +1 -1
- package/lib-commonjs/components/HeatMapChart/HeatMapChart.base.js +3 -2
- package/lib-commonjs/components/HeatMapChart/HeatMapChart.base.js.map +1 -1
- package/lib-commonjs/components/HorizontalBarChart/HorizontalBarChart.base.js +5 -4
- package/lib-commonjs/components/HorizontalBarChart/HorizontalBarChart.base.js.map +1 -1
- package/lib-commonjs/components/HorizontalBarChartWithAxis/HorizontalBarChartWithAxis.base.d.ts +3 -1
- package/lib-commonjs/components/HorizontalBarChartWithAxis/HorizontalBarChartWithAxis.base.js +20 -19
- package/lib-commonjs/components/HorizontalBarChartWithAxis/HorizontalBarChartWithAxis.base.js.map +1 -1
- package/lib-commonjs/components/HorizontalBarChartWithAxis/HorizontalBarChartWithAxis.js +1 -1
- package/lib-commonjs/components/HorizontalBarChartWithAxis/HorizontalBarChartWithAxis.js.map +1 -1
- package/lib-commonjs/components/PieChart/Arc/Arc.js +3 -2
- package/lib-commonjs/components/PieChart/Arc/Arc.js.map +1 -1
- package/lib-commonjs/components/StackedBarChart/MultiStackedBarChart.base.js +3 -2
- package/lib-commonjs/components/StackedBarChart/MultiStackedBarChart.base.js.map +1 -1
- package/lib-commonjs/components/StackedBarChart/StackedBarChart.base.js +3 -2
- package/lib-commonjs/components/StackedBarChart/StackedBarChart.base.js.map +1 -1
- package/lib-commonjs/components/VerticalBarChart/VerticalBarChart.base.d.ts +2 -0
- package/lib-commonjs/components/VerticalBarChart/VerticalBarChart.base.js +30 -18
- package/lib-commonjs/components/VerticalBarChart/VerticalBarChart.base.js.map +1 -1
- package/lib-commonjs/components/VerticalBarChart/VerticalBarChart.types.d.ts +20 -2
- package/lib-commonjs/components/VerticalBarChart/VerticalBarChart.types.js.map +1 -1
- package/lib-commonjs/components/VerticalStackedBarChart/VerticalStackedBarChart.base.d.ts +2 -0
- package/lib-commonjs/components/VerticalStackedBarChart/VerticalStackedBarChart.base.js +31 -19
- package/lib-commonjs/components/VerticalStackedBarChart/VerticalStackedBarChart.base.js.map +1 -1
- package/lib-commonjs/components/VerticalStackedBarChart/VerticalStackedBarChart.types.d.ts +19 -2
- package/lib-commonjs/components/VerticalStackedBarChart/VerticalStackedBarChart.types.js.map +1 -1
- package/lib-commonjs/utilities/ChartHoverCard/ChartHoverCard.base.js +5 -5
- package/lib-commonjs/utilities/ChartHoverCard/ChartHoverCard.base.js.map +1 -1
- package/lib-commonjs/utilities/ChartHoverCard/ChartHoverCard.js +1 -1
- package/lib-commonjs/utilities/ChartHoverCard/ChartHoverCard.js.map +1 -1
- package/lib-commonjs/utilities/locale-util.d.ts +3 -0
- package/lib-commonjs/utilities/locale-util.js +22 -0
- package/lib-commonjs/utilities/locale-util.js.map +1 -0
- package/lib-commonjs/utilities/utilities.d.ts +3 -0
- package/lib-commonjs/utilities/utilities.js +33 -1
- package/lib-commonjs/utilities/utilities.js.map +1 -1
- package/lib-commonjs/version.js +1 -1
- package/lib-commonjs/version.js.map +1 -1
- package/package.json +1 -1
- package/src/components/VerticalBarChart/VerticalBarChart.types.ts +23 -2
- package/src/components/VerticalStackedBarChart/VerticalStackedBarChart.types.ts +22 -2
|
@@ -551,7 +551,7 @@ export interface IGroupedVerticalBarChartData {
|
|
|
551
551
|
|
|
552
552
|
// @public
|
|
553
553
|
export interface IGroupedVerticalBarChartProps extends ICartesianChartProps {
|
|
554
|
-
barwidth?: number;
|
|
554
|
+
barwidth?: number | 'default' | 'auto';
|
|
555
555
|
chartTitle?: string;
|
|
556
556
|
culture?: string;
|
|
557
557
|
data: IGroupedVerticalBarChartData[];
|
|
@@ -559,6 +559,7 @@ export interface IGroupedVerticalBarChartProps extends ICartesianChartProps {
|
|
|
559
559
|
isCalloutForStack?: boolean;
|
|
560
560
|
// @deprecated
|
|
561
561
|
legendColor?: string;
|
|
562
|
+
maxBarWidth?: number;
|
|
562
563
|
onRenderCalloutPerDataPoint?: IRenderFunction<IGVBarChartSeriesPoint>;
|
|
563
564
|
// @deprecated
|
|
564
565
|
showXAxisGridLines?: boolean;
|
|
@@ -569,6 +570,8 @@ export interface IGroupedVerticalBarChartProps extends ICartesianChartProps {
|
|
|
569
570
|
// @deprecated
|
|
570
571
|
showYAxisPath?: boolean;
|
|
571
572
|
styles?: IStyleFunctionOrObject<IGroupedVerticalBarChartStyleProps, IGroupedVerticalBarChartStyles>;
|
|
573
|
+
xAxisInnerPadding?: number;
|
|
574
|
+
xAxisOuterPadding?: number;
|
|
572
575
|
}
|
|
573
576
|
|
|
574
577
|
// @public
|
|
@@ -1332,7 +1335,7 @@ export interface IVerticalBarChartDataPoint {
|
|
|
1332
1335
|
|
|
1333
1336
|
// @public
|
|
1334
1337
|
export interface IVerticalBarChartProps extends ICartesianChartProps {
|
|
1335
|
-
barWidth?: number;
|
|
1338
|
+
barWidth?: number | 'default' | 'auto';
|
|
1336
1339
|
chartTitle?: string;
|
|
1337
1340
|
colors?: string[];
|
|
1338
1341
|
culture?: string;
|
|
@@ -1341,9 +1344,12 @@ export interface IVerticalBarChartProps extends ICartesianChartProps {
|
|
|
1341
1344
|
lineLegendColor?: string;
|
|
1342
1345
|
lineLegendText?: string;
|
|
1343
1346
|
lineOptions?: ILineChartLineOptions;
|
|
1347
|
+
maxBarWidth?: number;
|
|
1344
1348
|
onRenderCalloutPerDataPoint?: IRenderFunction<IVerticalBarChartDataPoint>;
|
|
1345
1349
|
styles?: IStyleFunctionOrObject<IVerticalBarChartStyleProps, IVerticalBarChartStyles>;
|
|
1346
1350
|
useSingleColor?: boolean;
|
|
1351
|
+
xAxisInnerPadding?: number;
|
|
1352
|
+
xAxisOuterPadding?: number;
|
|
1347
1353
|
xAxisPadding?: number;
|
|
1348
1354
|
}
|
|
1349
1355
|
|
|
@@ -1378,7 +1384,7 @@ export interface IVerticalStackedBarChartProps extends ICartesianChartProps {
|
|
|
1378
1384
|
barCornerRadius?: number;
|
|
1379
1385
|
barGapMax?: number;
|
|
1380
1386
|
barMinimumHeight?: number;
|
|
1381
|
-
barWidth?: number;
|
|
1387
|
+
barWidth?: number | 'default' | 'auto';
|
|
1382
1388
|
calloutProps?: Partial<ICalloutProps>;
|
|
1383
1389
|
chartTitle?: string;
|
|
1384
1390
|
// @deprecated
|
|
@@ -1388,10 +1394,13 @@ export interface IVerticalStackedBarChartProps extends ICartesianChartProps {
|
|
|
1388
1394
|
hideLabels?: boolean;
|
|
1389
1395
|
isCalloutForStack?: boolean;
|
|
1390
1396
|
lineOptions?: ILineChartLineOptions;
|
|
1397
|
+
maxBarWidth?: number;
|
|
1391
1398
|
onBarClick?: (event: React_2.MouseEvent<SVGElement>, data: IVerticalStackedChartProps | IVSChartDataPoint) => void;
|
|
1392
1399
|
onRenderCalloutPerDataPoint?: IRenderFunction<IVSChartDataPoint>;
|
|
1393
1400
|
onRenderCalloutPerStack?: IRenderFunction<IVerticalStackedChartProps>;
|
|
1394
1401
|
styles?: IStyleFunctionOrObject<IVerticalStackedBarChartStyleProps, IVerticalStackedBarChartStyles>;
|
|
1402
|
+
xAxisInnerPadding?: number;
|
|
1403
|
+
xAxisOuterPadding?: number;
|
|
1395
1404
|
xAxisPadding?: number;
|
|
1396
1405
|
yMinValue?: undefined;
|
|
1397
1406
|
}
|
|
@@ -4,7 +4,8 @@ import { lazy } from 'react';
|
|
|
4
4
|
import { classNamesFunction, getId, getRTL } from '@fluentui/react/lib/Utilities';
|
|
5
5
|
import { Callout } from '@fluentui/react/lib/Callout';
|
|
6
6
|
import { FocusZone, FocusZoneDirection } from '@fluentui/react-focus';
|
|
7
|
-
import { convertToLocaleString
|
|
7
|
+
import { convertToLocaleString } from '../../utilities/locale-util';
|
|
8
|
+
import { createNumericXAxis, createStringXAxis, getAccessibleDataObject, getDomainNRangeValues, createDateXAxis, createYAxis, createStringYAxis, getMinMaxOfYAxis, XAxisTypes, YAxisType, createWrapOfXLabels, rotateXAxisLabels, Points, pointTypes, calculateLongestLabelWidth, createYAxisLabels, ChartTypes, wrapContent, } from '../../utilities/index';
|
|
8
9
|
import { Shape } from '../Legends/index';
|
|
9
10
|
import { SVGTooltipText } from '../../utilities/SVGTooltipText';
|
|
10
11
|
var getClassNames = classNamesFunction();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CartesianChart.base.js","sourceRoot":"../src/","sources":["components/CommonComponents/CartesianChart.base.tsx"],"names":[],"mappings":"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","sourcesContent":["import * as React from 'react';\nimport { lazy } from 'react';\nimport { IProcessedStyleSet } from '@fluentui/react/lib/Styling';\nimport { classNamesFunction, getId, getRTL } from '@fluentui/react/lib/Utilities';\nimport { Callout } from '@fluentui/react/lib/Callout';\nimport { FocusZone, FocusZoneDirection } from '@fluentui/react-focus';\nimport {\n ICartesianChartStyles,\n ICartesianChartStyleProps,\n IModifiedCartesianChartProps,\n IYValueHover,\n IHorizontalBarChartWithAxisDataPoint,\n} from '../../index';\nimport {\n convertToLocaleString,\n createNumericXAxis,\n createStringXAxis,\n IAxisData,\n getAccessibleDataObject,\n getDomainNRangeValues,\n createDateXAxis,\n createYAxis,\n createStringYAxis,\n IMargins,\n getMinMaxOfYAxis,\n XAxisTypes,\n YAxisType,\n createWrapOfXLabels,\n rotateXAxisLabels,\n Points,\n pointTypes,\n calculateLongestLabelWidth,\n createYAxisLabels,\n ChartTypes,\n wrapContent,\n} from '../../utilities/index';\nimport { LegendShape, Shape } from '../Legends/index';\nimport { SVGTooltipText } from '../../utilities/SVGTooltipText';\n\nconst getClassNames = classNamesFunction<ICartesianChartStyleProps, ICartesianChartStyles>();\nconst ChartHoverCard = lazy(() =>\n import('../../utilities/ChartHoverCard/ChartHoverCard').then(module => ({ default: module.ChartHoverCard })),\n);\n\nexport interface ICartesianChartState {\n containerWidth: number;\n containerHeight: number;\n _width: number;\n _height: number;\n /* To update this values using setState in render method.\n * To avoid multiple re renders, Only first time setting the value.\n */\n isRemoveValCalculated?: boolean;\n /* Used for when WrapXAxisLabels props appeared.\n * To display the total word (space separated words), Need to have more space than usual.\n * This height will get total height need to disaply total word.\n * These value need to be removed from actual svg height/graph height.\n * Defalut value is 0. And this values calculted when 'wrapXAxisLables' or 'showXAxisLablesTooltip' is true.\n */\n _removalValueForTextTuncate?: number;\n startFromX: number;\n}\n\n/**\n * Cartesian chart used for\n * 1.draw X and Y axis of the chart\n * 2.Callout\n * 3.Fit parent Continer\n */\nexport class CartesianChartBase extends React.Component<IModifiedCartesianChartProps, ICartesianChartState> {\n private _classNames: IProcessedStyleSet<ICartesianChartStyles>;\n private chartContainer: HTMLDivElement;\n private legendContainer: HTMLDivElement;\n private minLegendContainerHeight: number = 32;\n private xAxisElement: SVGElement | null;\n private yAxisElement: SVGElement | null;\n private yAxisElementSecondary: SVGElement | null;\n private margins: IMargins;\n private idForGraph: string;\n private idForDefaultTabbableElement: string;\n private _reqID: number;\n private _isRtl: boolean = getRTL();\n private _tickValues: (string | number)[];\n private titleMargin: number;\n private _isFirstRender: boolean = true;\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n private _xScale: any;\n private isIntegralDataset: boolean = true;\n\n constructor(props: IModifiedCartesianChartProps) {\n super(props);\n this.state = {\n containerHeight: 0,\n containerWidth: 0,\n _width: this.props.width || 600,\n _height: this.props.height || 350,\n _removalValueForTextTuncate: 0,\n isRemoveValCalculated: true,\n startFromX: 0,\n };\n this.idForGraph = getId('chart_');\n this.titleMargin = 8;\n this.idForDefaultTabbableElement = getId('defaultTabbableElement_');\n /**\n * In RTL mode, Only graph will be rendered left/right. We need to provide left and right margins manually.\n * So that, in RTL, left margins becomes right margins and viceversa.\n * As graph needs to be drawn perfecty, these values consider as default values.\n * Same margins using for all other cartesian charts. Can be accessible through 'getMargins' call back method.\n */\n this.margins = {\n top: this.props.margins?.top ?? 20,\n bottom: this.props.margins?.bottom ?? 35,\n right: this._isRtl\n ? this.props.margins?.left ?? 40\n : this.props.margins?.right ?? this.props?.secondaryYScaleOptions\n ? 40\n : 20,\n left: this._isRtl\n ? this.props.margins?.right ?? this.props?.secondaryYScaleOptions\n ? 40\n : 20\n : this.props.margins?.left ?? 40,\n };\n if (this.props.xAxisTitle !== undefined && this.props.xAxisTitle !== '') {\n this.margins.bottom! = this.props.margins?.bottom ?? 55;\n }\n if (this.props.yAxisTitle !== undefined && this.props.yAxisTitle !== '') {\n this.margins.left! = this._isRtl\n ? this.props.margins?.right ?? this.props?.secondaryYAxistitle\n ? 60\n : 40\n : this.props.margins?.left ?? 60;\n this.margins.right! = this._isRtl\n ? this.props.margins?.left ?? 60\n : this.props.margins?.right ?? this.props?.secondaryYAxistitle\n ? 60\n : 40;\n }\n }\n\n public componentDidMount(): void {\n this._fitParentContainer();\n if (\n this.props.chartType === ChartTypes.HorizontalBarChartWithAxis &&\n this.props.showYAxisLables &&\n this.yAxisElement\n ) {\n const maxYAxisLabelLength = calculateLongestLabelWidth(\n this.props.points.map((point: IHorizontalBarChartWithAxisDataPoint) => point.y),\n `.${this._classNames.yAxis} text`,\n );\n if (this.state.startFromX !== maxYAxisLabelLength) {\n this.setState({\n startFromX: maxYAxisLabelLength,\n });\n }\n } else if (this.state.startFromX !== 0) {\n this.setState({\n startFromX: 0,\n });\n }\n this.isIntegralDataset = !this.props.points.some((point: { y: number }) => {\n return point.y % 1 !== 0;\n });\n }\n\n public componentWillUnmount(): void {\n cancelAnimationFrame(this._reqID);\n }\n\n public componentDidUpdate(prevProps: IModifiedCartesianChartProps): void {\n if (prevProps.height !== this.props.height || prevProps.width !== this.props.width) {\n this._fitParentContainer();\n }\n if (\n !this.props.wrapXAxisLables &&\n this.props.rotateXAxisLables &&\n this.props.xAxisType! === XAxisTypes.StringAxis\n ) {\n const rotateLabelProps = {\n node: this.xAxisElement,\n xAxis: this._xScale,\n };\n const rotatedHeight = rotateXAxisLabels(rotateLabelProps);\n if (\n this.state.isRemoveValCalculated &&\n this.state._removalValueForTextTuncate !== rotatedHeight! + this.margins.bottom! &&\n rotatedHeight! > 0\n ) {\n this.setState({\n _removalValueForTextTuncate: rotatedHeight! + this.margins.bottom!,\n isRemoveValCalculated: false,\n });\n }\n }\n if (\n this.props.chartType === ChartTypes.HorizontalBarChartWithAxis &&\n this.props.showYAxisLables &&\n this.yAxisElement\n ) {\n const maxYAxisLabelLength = calculateLongestLabelWidth(\n this.props.points.map((point: IHorizontalBarChartWithAxisDataPoint) => point.y),\n `.${this._classNames.yAxis} text`,\n );\n if (this.state.startFromX !== maxYAxisLabelLength) {\n this.setState({\n startFromX: maxYAxisLabelLength,\n });\n }\n } else if (this.state.startFromX !== 0) {\n this.setState({\n startFromX: 0,\n });\n }\n if (prevProps.points !== this.props.points) {\n this.isIntegralDataset = !this.props.points.some((point: { y: number }) => {\n return point.y % 1 !== 0;\n });\n }\n }\n\n public render(): JSX.Element {\n const {\n calloutProps,\n points,\n chartType,\n chartHoverProps,\n svgFocusZoneProps,\n svgProps,\n culture,\n dateLocalizeOptions,\n timeFormatLocale,\n customDateTimeFormatter,\n } = this.props;\n if (this.props.parentRef) {\n this._fitParentContainer();\n }\n\n const margin = { ...this.margins };\n if (this.props.chartType === ChartTypes.HorizontalBarChartWithAxis) {\n if (!this._isRtl) {\n margin.left! += this.state.startFromX;\n } else {\n margin.right! += this.state.startFromX;\n }\n }\n // Callback for margins to the chart\n this.props.getmargins && this.props.getmargins(margin);\n\n let callout: JSX.Element | null = null;\n\n let children = null;\n if (\n (this.props.enableFirstRenderOptimization && this.chartContainer) ||\n !this.props.enableFirstRenderOptimization\n ) {\n this._isFirstRender = false;\n const XAxisParams = {\n domainNRangeValues: getDomainNRangeValues(\n points,\n this.props.getDomainMargins ? this.props.getDomainMargins(this.state.containerWidth) : this.margins,\n this.state.containerWidth,\n chartType,\n this._isRtl,\n this.props.xAxisType,\n this.props.barwidth!,\n this.props.tickValues!,\n // This is only used for Horizontal Bar Chart with Axis for y as string axis\n this.state.startFromX,\n ),\n containerHeight: this.state.containerHeight - this.state._removalValueForTextTuncate!,\n margins: this.margins,\n xAxisElement: this.xAxisElement!,\n showRoundOffXTickValues: true,\n xAxisCount: this.props.xAxisTickCount,\n xAxistickSize: this.props.xAxistickSize,\n tickPadding: this.props.tickPadding || this.props.showXAxisLablesTooltip ? 5 : 10,\n xAxisPadding: this.props.xAxisPadding,\n xAxisInnerPadding: this.props.xAxisInnerPadding,\n xAxisOuterPadding: this.props.xAxisOuterPadding,\n };\n\n const YAxisParams = {\n margins: this.margins,\n containerWidth: this.state.containerWidth,\n containerHeight: this.state.containerHeight - this.state._removalValueForTextTuncate!,\n yAxisElement: this.yAxisElement,\n yAxisTickFormat: this.props.yAxisTickFormat!,\n yAxisTickCount: this.props.yAxisTickCount!,\n yMinValue: this.props.yMinValue || 0,\n yMaxValue: this.props.yMaxValue || 0,\n tickPadding: 10,\n maxOfYVal: this.props.maxOfYVal,\n yMinMaxValues: getMinMaxOfYAxis(points, chartType, this.props.yAxisType),\n // please note these padding default values must be consistent in here\n // and the parent chart(HBWA/Vertical etc..) for more details refer example\n // http://using-d3js.com/04_07_ordinal_scales.html\n yAxisPadding: this.props.yAxisPadding || 0,\n };\n /**\n * These scales used for 2 purposes.\n * 1. To create x and y axis\n * 2. To draw the graph.\n * For area/line chart using same scales. For other charts, creating their own scales to draw the graph.\n */\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n let xScale: any;\n let tickValues: (string | number)[];\n switch (this.props.xAxisType!) {\n case XAxisTypes.NumericAxis:\n ({ xScale, tickValues } = createNumericXAxis(XAxisParams, this.props.chartType, culture));\n break;\n case XAxisTypes.DateAxis:\n ({ xScale, tickValues } = createDateXAxis(\n XAxisParams,\n this.props.tickParams!,\n culture,\n dateLocalizeOptions,\n timeFormatLocale,\n customDateTimeFormatter,\n ));\n break;\n case XAxisTypes.StringAxis:\n ({ xScale, tickValues } = createStringXAxis(\n XAxisParams,\n this.props.tickParams!,\n this.props.datasetForXAxisDomain!,\n culture,\n ));\n break;\n default:\n ({ xScale, tickValues } = createNumericXAxis(XAxisParams, this.props.chartType, culture));\n }\n this._xScale = xScale;\n this._tickValues = tickValues;\n\n /*\n * To enable wrapping of x axis tick values or to display complete x axis tick values,\n * we need to calculate how much space it needed to render the text.\n * No need to re-calculate every time the chart renders and same time need to get an update. So using setState.\n * Required space will be calculated first time chart rendering and if any width/height of chart updated.\n * */\n if (this.props.wrapXAxisLables || this.props.showXAxisLablesTooltip) {\n const wrapLabelProps = {\n node: this.xAxisElement,\n xAxis: xScale,\n showXAxisLablesTooltip: this.props.showXAxisLablesTooltip || false,\n noOfCharsToTruncate: this.props.noOfCharsToTruncate || 4,\n };\n const temp = xScale && (createWrapOfXLabels(wrapLabelProps) as number);\n // this value need to be updated for draw graph updated. So instead of using private value, using set state.\n if (this.state.isRemoveValCalculated && this.state._removalValueForTextTuncate !== temp) {\n this.setState({ _removalValueForTextTuncate: temp, isRemoveValCalculated: false });\n }\n }\n\n /**\n * These scales used for 2 purposes.\n * 1. To create x and y axis\n * 2. To draw the graph.\n * For area/line chart using same scales. For other charts, creating their own scales to draw the graph.\n */\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n let yScale: any;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n let yScaleSecondary: any;\n const axisData: IAxisData = { yAxisDomainValues: [] };\n if (this.props.yAxisType && this.props.yAxisType === YAxisType.StringAxis) {\n yScale = createStringYAxis(\n YAxisParams,\n this.props.stringDatasetForYAxisDomain!,\n this._isRtl,\n this.props.chartType,\n this.props.barwidth,\n culture,\n );\n } else {\n if (this.props?.secondaryYScaleOptions) {\n const YAxisParamsSecondary = {\n margins: this.margins,\n containerWidth: this.state.containerWidth,\n containerHeight: this.state.containerHeight - this.state._removalValueForTextTuncate!,\n yAxisElement: this.yAxisElementSecondary,\n yAxisTickFormat: this.props.yAxisTickFormat!,\n yAxisTickCount: this.props.yAxisTickCount!,\n yMinValue: this.props.secondaryYScaleOptions?.yMinValue || 0,\n yMaxValue: this.props.secondaryYScaleOptions?.yMaxValue ?? 100,\n tickPadding: 10,\n maxOfYVal: this.props.secondaryYScaleOptions?.yMaxValue ?? 100,\n yMinMaxValues: getMinMaxOfYAxis(points, chartType),\n yAxisPadding: this.props.yAxisPadding,\n };\n\n yScaleSecondary = createYAxis(\n YAxisParamsSecondary,\n this._isRtl,\n axisData,\n chartType,\n this.props.barwidth!,\n this.isIntegralDataset,\n true,\n );\n }\n yScale = createYAxis(\n YAxisParams,\n this._isRtl,\n axisData,\n chartType,\n this.props.barwidth!,\n this.isIntegralDataset,\n );\n }\n\n /*\n * To create y axis tick values by if specified\n truncating the rest of the text and showing elipsis\n or showing the whole string,\n * */\n this.props.chartType === ChartTypes.HorizontalBarChartWithAxis &&\n yScale &&\n createYAxisLabels(\n this.yAxisElement,\n yScale,\n this.props.noOfCharsToTruncate || 4,\n this.props.showYAxisLablesTooltip || false,\n this.state.startFromX,\n this._isRtl,\n );\n\n this.props.getAxisData && this.props.getAxisData(axisData);\n // Callback function for chart, returns axis\n this._getData(xScale, yScale);\n\n children = this.props.children({\n ...this.state,\n xScale,\n yScale,\n yScaleSecondary,\n });\n\n if (!this.props.hideTooltip && calloutProps!.isCalloutVisible) {\n callout = this._generateCallout(calloutProps, chartHoverProps);\n }\n }\n\n this._classNames = getClassNames(this.props.styles!, {\n theme: this.props.theme!,\n width: this.state._width,\n height: this.state._height,\n className: this.props.className,\n isRtl: this._isRtl,\n });\n\n const svgDimensions = {\n width: this.state.containerWidth,\n height: this.state.containerHeight,\n };\n\n let focusDirection;\n if (this.props.focusZoneDirection === FocusZoneDirection.vertical) {\n focusDirection = this.props.focusZoneDirection;\n } else if (this.props.focusZoneDirection) {\n focusDirection = this.props.focusZoneDirection;\n } else {\n focusDirection = FocusZoneDirection.horizontal;\n }\n\n const xAxisTitleMaximumAllowedWidth =\n svgDimensions.width - this.margins.left! - this.margins.right! - this.state.startFromX!;\n const yAxisTitleMaximumAllowedHeight =\n svgDimensions.height -\n this.margins.bottom! -\n this.margins.top! -\n this.state._removalValueForTextTuncate! -\n this.titleMargin;\n /**\n * We have use the {@link defaultTabbableElement } to fix\n * the Focus not landing on chart while tabbing, instead goes to legend.\n * This issue is observed in Area, line chart after performance optimization done in the PR {@link https://github.com/microsoft/fluentui/pull/27721 }\n * This issue is observed in Bar charts after the changes done by FocusZone team in the PR: {@link https://github.com/microsoft/fluentui/pull/24175 }\n * The issue in Bar Charts(VB and VSB) is due to a {@link FocusZone } update where previously an event listener was\n * attached on keydown to the window, so that whenever the tab key is pressed all outer FocusZone's\n * tab-indexes are updated (an outer FocusZone is a FocusZone that is not within another one).\n * But now after the above PR : they are attaching the\n * listeners to the FocusZone elements instead of the window. So in the first render cycle in Bar charts\n * bars are not created as in the first render cycle the size of the chart container is not known( or is 0)\n * which creates bars of height 0 so instead we do not create any bars and instead return empty fragments.\n *\n * We have tried 2 Approaches to fix the issue:\n * 1. Using the {@link elementRef} property of FocusZone where we dispatch event for tab keydown\n * after the second render cycle which triggers an update of the tab index in FocusZone.\n * But this is a hacky solution and not a proper fix and also elementRef is deprecated.\n * 2. Using the default tabbable element to fix the issue.\n */\n\n return (\n <div\n id={this.idForGraph}\n className={this._classNames.root}\n role={'presentation'}\n ref={(rootElem: HTMLDivElement) => (this.chartContainer = rootElem)}\n onMouseLeave={this._onChartLeave}\n >\n {!this._isFirstRender && <div id={this.idForDefaultTabbableElement} />}\n <FocusZone\n direction={focusDirection}\n className={this._classNames.chartWrapper}\n defaultTabbableElement={`#${this.idForDefaultTabbableElement}`}\n {...svgFocusZoneProps}\n >\n {this._isFirstRender && <div id={this.idForDefaultTabbableElement} />}\n <svg\n width={svgDimensions.width}\n height={svgDimensions.height}\n aria-label={this.props.chartTitle}\n style={{ display: 'block' }}\n {...svgProps}\n >\n <g\n ref={(e: SVGElement | null) => {\n this.xAxisElement = e;\n }}\n id={`xAxisGElement${this.idForGraph}`}\n // To add wrap of x axis lables feature, need to remove word height from svg height.\n transform={`translate(0, ${\n svgDimensions.height - this.margins.bottom! - this.state._removalValueForTextTuncate!\n })`}\n className={this._classNames.xAxis}\n />\n {this.props.xAxisTitle !== undefined && this.props.xAxisTitle !== '' && (\n <SVGTooltipText\n content={this.props.xAxisTitle}\n textProps={{\n x: this.margins.left! + this.state.startFromX + xAxisTitleMaximumAllowedWidth / 2,\n y: svgDimensions.height - this.titleMargin,\n className: this._classNames.axisTitle!,\n textAnchor: 'middle',\n }}\n maxWidth={xAxisTitleMaximumAllowedWidth}\n wrapContent={wrapContent}\n />\n )}\n <g\n ref={(e: SVGElement | null) => {\n this.yAxisElement = e;\n }}\n id={`yAxisGElement${this.idForGraph}`}\n transform={`translate(${\n this._isRtl\n ? svgDimensions.width - this.margins.right! - this.state.startFromX\n : this.margins.left! + this.state.startFromX\n }, 0)`}\n className={this._classNames.yAxis}\n />\n {this.props.secondaryYScaleOptions && (\n <g>\n <g\n ref={(e: SVGElement | null) => {\n this.yAxisElementSecondary = e;\n }}\n id={`yAxisGElementSecondary${this.idForGraph}`}\n transform={`translate(${\n this._isRtl ? this.margins.left! : svgDimensions.width - this.margins.right!\n }, 0)`}\n className={this._classNames.yAxis}\n />\n {this.props.secondaryYAxistitle !== undefined && this.props.secondaryYAxistitle !== '' && (\n <SVGTooltipText\n content={this.props.secondaryYAxistitle}\n textProps={{\n x:\n (yAxisTitleMaximumAllowedHeight - this.margins.bottom!) / 2 +\n this.state._removalValueForTextTuncate!,\n y: this._isRtl\n ? this.state.startFromX - this.titleMargin\n : svgDimensions.width - this.margins.right!,\n textAnchor: 'middle',\n transform: `translate(${\n this._isRtl\n ? this.margins.right! / 2 - this.titleMargin\n : this.margins.right! / 2 + this.titleMargin\n },\n ${svgDimensions.height - this.margins.bottom! - this.margins.top! - this.titleMargin})rotate(-90)`,\n className: this._classNames.axisTitle!,\n }}\n maxWidth={yAxisTitleMaximumAllowedHeight}\n wrapContent={wrapContent}\n />\n )}\n </g>\n )}\n {children}\n {this.props.yAxisTitle !== undefined && this.props.yAxisTitle !== '' && (\n <SVGTooltipText\n content={this.props.yAxisTitle}\n textProps={{\n x:\n (yAxisTitleMaximumAllowedHeight - this.margins.bottom!) / 2 +\n this.state._removalValueForTextTuncate!,\n y: this._isRtl\n ? svgDimensions.width - this.margins.right! / 2 + this.titleMargin\n : this.margins.left! / 2 + this.state.startFromX - this.titleMargin,\n textAnchor: 'middle',\n transform: `translate(0,\n ${svgDimensions.height - this.margins.bottom! - this.margins.top! - this.titleMargin})rotate(-90)`,\n className: this._classNames.axisTitle!,\n }}\n maxWidth={yAxisTitleMaximumAllowedHeight}\n wrapContent={wrapContent}\n />\n )}\n </svg>\n </FocusZone>\n\n {!this.props.hideLegend && (\n <div ref={(e: HTMLDivElement) => (this.legendContainer = e)} className={this._classNames.legendContainer}>\n {this.props.legendBars}\n </div>\n )}\n {/** The callout is used for narration, so keep it mounted on the DOM */}\n {callout && <React.Suspense fallback={<div>Loading...</div>}>{callout}</React.Suspense>}\n </div>\n );\n }\n /**\n * Dedicated function to return the Callout JSX Element , which can further be used to only call this when\n * only the calloutprops and charthover props changes.\n * @param calloutProps\n * @param chartHoverProps\n * @returns\n */\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n private _generateCallout(calloutProps: any, chartHoverProps: any): JSX.Element {\n return (\n <Callout\n hidden={!(!this.props.hideTooltip && calloutProps!.isCalloutVisible)}\n /** Keep the callout updated with details of focused/hovered chart element */\n shouldUpdateWhenHidden={true}\n {...calloutProps}\n >\n {/** Given custom callout, then it will render */}\n {this.props.customizedCallout && this.props.customizedCallout}\n {/** single x point its corresponding y points of all the bars/lines in chart will render in callout */}\n {!this.props.customizedCallout && this.props.isCalloutForStack && this._multiValueCallout(calloutProps)}\n {/** single x point its corresponding y point of single line/bar in the chart will render in callout */}\n {!this.props.customizedCallout && !this.props.isCalloutForStack && (\n <ChartHoverCard\n XValue={calloutProps.XValue}\n Legend={calloutProps.legend!}\n YValue={calloutProps.YValue!}\n color={calloutProps.color!}\n culture={this.props.culture}\n {...chartHoverProps}\n />\n )}\n </Callout>\n );\n }\n\n // TO DO: Write a common functional component for Multi value callout and divide sub count method\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n private _multiValueCallout = (calloutProps: any) => {\n const yValueHoverSubCountsExists: boolean = this._yValueHoverSubCountsExists(calloutProps.YValueHover);\n return (\n <div className={this._classNames.calloutContentRoot}>\n <div\n className={this._classNames.calloutDateTimeContainer}\n style={yValueHoverSubCountsExists ? { marginBottom: '11px' } : {}}\n >\n <div\n className={this._classNames.calloutContentX}\n {...getAccessibleDataObject(calloutProps!.xAxisCalloutAccessibilityData, 'text', false)}\n >\n {convertToLocaleString(calloutProps!.hoverXValue, this.props.culture)}\n </div>\n </div>\n <div\n className={this._classNames.calloutInfoContainer}\n style={yValueHoverSubCountsExists ? { display: 'flex' } : {}}\n >\n {calloutProps!.YValueHover &&\n calloutProps!.YValueHover.map((yValue: IYValueHover, index: number, yValues: IYValueHover[]) => {\n const isLast: boolean = index + 1 === yValues.length;\n const { shouldDrawBorderBottom = false } = yValue;\n return (\n <div\n {...getAccessibleDataObject(yValue.callOutAccessibilityData, 'text', false)}\n key={`callout-content-${index}`}\n style={\n yValueHoverSubCountsExists\n ? {\n display: 'inline-block',\n ...(shouldDrawBorderBottom && {\n borderBottom: `1px solid ${this.props.theme!.semanticColors.menuDivider}`,\n paddingBottom: '10px',\n }),\n }\n : {\n ...(shouldDrawBorderBottom && {\n borderBottom: `1px solid ${this.props.theme!.semanticColors.menuDivider}`,\n paddingBottom: '10px',\n }),\n }\n }\n >\n {this._getCalloutContent(yValue, index, yValueHoverSubCountsExists, isLast)}\n </div>\n );\n })}\n {!!calloutProps.descriptionMessage && (\n <div className={this._classNames.descriptionMessage}>{calloutProps.descriptionMessage}</div>\n )}\n </div>\n </div>\n );\n };\n\n private _yValueHoverSubCountsExists(yValueHover?: IYValueHover[]) {\n if (yValueHover) {\n return yValueHover.some(\n (yValue: {\n legend?: string;\n y?: number;\n color?: string;\n yAxisCalloutData?: string | { [id: string]: number };\n }) => yValue.yAxisCalloutData && typeof yValue.yAxisCalloutData !== 'string',\n );\n }\n return false;\n }\n\n private _getCalloutContent(\n xValue: IYValueHover,\n index: number,\n yValueHoverSubCountsExists: boolean,\n isLast: boolean,\n ): React.ReactNode {\n const marginStyle: React.CSSProperties = isLast ? {} : { marginRight: '16px' };\n const toDrawShape = xValue.index !== undefined && xValue.index !== -1;\n const _classNames = getClassNames(this.props.styles!, {\n theme: this.props.theme!,\n width: this.state._width,\n height: this.state._height,\n className: this.props.className,\n isRtl: this._isRtl,\n lineColor: xValue.color,\n toDrawShape,\n });\n\n const { culture } = this.props;\n const yValue = convertToLocaleString(xValue.y, culture);\n if (!xValue.yAxisCalloutData || typeof xValue.yAxisCalloutData === 'string') {\n return (\n <div style={yValueHoverSubCountsExists ? marginStyle : {}}>\n {yValueHoverSubCountsExists && (\n <div className=\"ms-fontWeight-semibold\" style={{ fontSize: '12pt' }}>\n {xValue.legend!} ({yValue})\n </div>\n )}\n <div id={`${index}_${xValue.y}`} className={_classNames.calloutBlockContainer}>\n {toDrawShape && (\n <Shape\n svgProps={{\n className: _classNames.shapeStyles,\n }}\n pathProps={{ fill: xValue.color }}\n shape={Points[xValue.index! % Object.keys(pointTypes).length] as LegendShape}\n />\n )}\n <div>\n <div className={_classNames.calloutlegendText}> {xValue.legend}</div>\n <div className={_classNames.calloutContentY}>\n {convertToLocaleString(\n xValue.yAxisCalloutData ? xValue.yAxisCalloutData : xValue.y ?? xValue.data,\n culture,\n )}\n </div>\n </div>\n </div>\n </div>\n );\n } else {\n const subcounts: { [id: string]: number } = xValue.yAxisCalloutData as { [id: string]: number };\n return (\n <div style={marginStyle}>\n <div className=\"ms-fontWeight-semibold\" style={{ fontSize: '12pt' }}>\n {xValue.legend!} ({yValue})\n </div>\n {Object.keys(subcounts).map((subcountName: string) => {\n return (\n <div key={subcountName} className={_classNames.calloutBlockContainer}>\n <div className={_classNames.calloutlegendText}> {convertToLocaleString(subcountName, culture)}</div>\n <div className={_classNames.calloutContentY}>\n {convertToLocaleString(subcounts[subcountName], culture)}\n </div>\n </div>\n );\n })}\n </div>\n );\n }\n }\n\n /**\n * When screen resizes, along with screen, chart also auto adjusted.\n * This method used to adjust height and width of the charts.\n */\n private _fitParentContainer(): void {\n const { containerWidth, containerHeight } = this.state;\n this._reqID = requestAnimationFrame(() => {\n let legendContainerHeight;\n if (this.props.hideLegend) {\n // If there is no legend, need not to allocate some space from total chart space.\n legendContainerHeight = 0;\n } else {\n const legendContainerComputedStyles = this.legendContainer && getComputedStyle(this.legendContainer);\n legendContainerHeight =\n ((this.legendContainer && this.legendContainer.getBoundingClientRect().height) ||\n this.minLegendContainerHeight) +\n parseFloat((legendContainerComputedStyles && legendContainerComputedStyles.marginTop) || '0') +\n parseFloat((legendContainerComputedStyles && legendContainerComputedStyles.marginBottom) || '0');\n }\n if (this.props.parentRef || this.chartContainer) {\n const container = this.props.parentRef ? this.props.parentRef : this.chartContainer;\n const currentContainerWidth =\n this.props.enableReflow && !this._isFirstRender\n ? Math.max(container.getBoundingClientRect().width, this._calculateChartMinWidth())\n : container.getBoundingClientRect().width;\n const currentContainerHeight =\n container.getBoundingClientRect().height > legendContainerHeight\n ? container.getBoundingClientRect().height\n : 350;\n const shouldResize =\n containerWidth !== currentContainerWidth ||\n containerHeight !== currentContainerHeight - legendContainerHeight;\n if (shouldResize) {\n this.setState({\n containerWidth: currentContainerWidth,\n containerHeight: currentContainerHeight - legendContainerHeight,\n });\n }\n }\n });\n }\n\n // Call back to the chart.\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n private _getData = (xScale: any, yScale: any) => {\n this.props.getGraphData &&\n this.props.getGraphData(\n xScale,\n yScale,\n this.state.containerHeight - this.state._removalValueForTextTuncate!,\n this.state.containerWidth,\n this.xAxisElement,\n this.yAxisElement,\n );\n };\n\n private _onChartLeave = (): void => {\n this.props.onChartMouseLeave && this.props.onChartMouseLeave();\n };\n\n private _calculateChartMinWidth = (): number => {\n let labelWidth = 10; // Total padding on the left and right sides of the label\n\n // Case: rotated labels\n if (\n !this.props.wrapXAxisLables &&\n this.props.rotateXAxisLables &&\n this.props.xAxisType! === XAxisTypes.StringAxis\n ) {\n const longestLabelWidth = calculateLongestLabelWidth(this._tickValues, `.${this._classNames.xAxis} text`);\n labelWidth += Math.ceil(longestLabelWidth * Math.cos(Math.PI / 4));\n }\n // Case: truncated labels\n else if (this.props.showXAxisLablesTooltip) {\n const tickValues = this._tickValues.map(val => {\n const numChars = this.props.noOfCharsToTruncate || 4;\n return val.toString().length > numChars ? `${val.toString().slice(0, numChars)}...` : val;\n });\n\n const longestLabelWidth = calculateLongestLabelWidth(tickValues, `.${this._classNames.xAxis} text`);\n labelWidth += Math.ceil(longestLabelWidth);\n }\n // Case: wrapped labels\n else if (this.props.wrapXAxisLables) {\n const words: string[] = [];\n this._tickValues.forEach((val: string) => {\n words.push(...val.toString().split(/\\s+/));\n });\n\n const longestLabelWidth = calculateLongestLabelWidth(words, `.${this._classNames.xAxis} text`);\n labelWidth += Math.max(Math.ceil(longestLabelWidth), 10);\n }\n // Default case\n else {\n const longestLabelWidth = calculateLongestLabelWidth(this._tickValues, `.${this._classNames.xAxis} text`);\n labelWidth += Math.ceil(longestLabelWidth);\n }\n\n let minChartWidth = this.margins.left! + this.margins.right! + labelWidth * (this._tickValues.length - 1);\n\n if (\n [ChartTypes.GroupedVerticalBarChart, ChartTypes.VerticalBarChart, ChartTypes.VerticalStackedBarChart].includes(\n this.props.chartType,\n )\n ) {\n const minDomainMargin = 8;\n minChartWidth += minDomainMargin * 2;\n }\n\n return minChartWidth;\n };\n}\n"]}
|
|
1
|
+
{"version":3,"file":"CartesianChart.base.js","sourceRoot":"../src/","sources":["components/CommonComponents/CartesianChart.base.tsx"],"names":[],"mappings":"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","sourcesContent":["import * as React from 'react';\nimport { lazy } from 'react';\nimport { IProcessedStyleSet } from '@fluentui/react/lib/Styling';\nimport { classNamesFunction, getId, getRTL } from '@fluentui/react/lib/Utilities';\nimport { Callout } from '@fluentui/react/lib/Callout';\nimport { FocusZone, FocusZoneDirection } from '@fluentui/react-focus';\nimport {\n ICartesianChartStyles,\n ICartesianChartStyleProps,\n IModifiedCartesianChartProps,\n IYValueHover,\n IHorizontalBarChartWithAxisDataPoint,\n} from '../../index';\nimport { convertToLocaleString } from '../../utilities/locale-util';\nimport {\n createNumericXAxis,\n createStringXAxis,\n IAxisData,\n getAccessibleDataObject,\n getDomainNRangeValues,\n createDateXAxis,\n createYAxis,\n createStringYAxis,\n IMargins,\n getMinMaxOfYAxis,\n XAxisTypes,\n YAxisType,\n createWrapOfXLabels,\n rotateXAxisLabels,\n Points,\n pointTypes,\n calculateLongestLabelWidth,\n createYAxisLabels,\n ChartTypes,\n wrapContent,\n} from '../../utilities/index';\nimport { LegendShape, Shape } from '../Legends/index';\nimport { SVGTooltipText } from '../../utilities/SVGTooltipText';\n\nconst getClassNames = classNamesFunction<ICartesianChartStyleProps, ICartesianChartStyles>();\nconst ChartHoverCard = lazy(() =>\n import('../../utilities/ChartHoverCard/ChartHoverCard').then(module => ({ default: module.ChartHoverCard })),\n);\n\nexport interface ICartesianChartState {\n containerWidth: number;\n containerHeight: number;\n _width: number;\n _height: number;\n /* To update this values using setState in render method.\n * To avoid multiple re renders, Only first time setting the value.\n */\n isRemoveValCalculated?: boolean;\n /* Used for when WrapXAxisLabels props appeared.\n * To display the total word (space separated words), Need to have more space than usual.\n * This height will get total height need to disaply total word.\n * These value need to be removed from actual svg height/graph height.\n * Defalut value is 0. And this values calculted when 'wrapXAxisLables' or 'showXAxisLablesTooltip' is true.\n */\n _removalValueForTextTuncate?: number;\n startFromX: number;\n}\n\n/**\n * Cartesian chart used for\n * 1.draw X and Y axis of the chart\n * 2.Callout\n * 3.Fit parent Continer\n */\nexport class CartesianChartBase extends React.Component<IModifiedCartesianChartProps, ICartesianChartState> {\n private _classNames: IProcessedStyleSet<ICartesianChartStyles>;\n private chartContainer: HTMLDivElement;\n private legendContainer: HTMLDivElement;\n private minLegendContainerHeight: number = 32;\n private xAxisElement: SVGElement | null;\n private yAxisElement: SVGElement | null;\n private yAxisElementSecondary: SVGElement | null;\n private margins: IMargins;\n private idForGraph: string;\n private idForDefaultTabbableElement: string;\n private _reqID: number;\n private _isRtl: boolean = getRTL();\n private _tickValues: (string | number)[];\n private titleMargin: number;\n private _isFirstRender: boolean = true;\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n private _xScale: any;\n private isIntegralDataset: boolean = true;\n\n constructor(props: IModifiedCartesianChartProps) {\n super(props);\n this.state = {\n containerHeight: 0,\n containerWidth: 0,\n _width: this.props.width || 600,\n _height: this.props.height || 350,\n _removalValueForTextTuncate: 0,\n isRemoveValCalculated: true,\n startFromX: 0,\n };\n this.idForGraph = getId('chart_');\n this.titleMargin = 8;\n this.idForDefaultTabbableElement = getId('defaultTabbableElement_');\n /**\n * In RTL mode, Only graph will be rendered left/right. We need to provide left and right margins manually.\n * So that, in RTL, left margins becomes right margins and viceversa.\n * As graph needs to be drawn perfecty, these values consider as default values.\n * Same margins using for all other cartesian charts. Can be accessible through 'getMargins' call back method.\n */\n this.margins = {\n top: this.props.margins?.top ?? 20,\n bottom: this.props.margins?.bottom ?? 35,\n right: this._isRtl\n ? this.props.margins?.left ?? 40\n : this.props.margins?.right ?? this.props?.secondaryYScaleOptions\n ? 40\n : 20,\n left: this._isRtl\n ? this.props.margins?.right ?? this.props?.secondaryYScaleOptions\n ? 40\n : 20\n : this.props.margins?.left ?? 40,\n };\n if (this.props.xAxisTitle !== undefined && this.props.xAxisTitle !== '') {\n this.margins.bottom! = this.props.margins?.bottom ?? 55;\n }\n if (this.props.yAxisTitle !== undefined && this.props.yAxisTitle !== '') {\n this.margins.left! = this._isRtl\n ? this.props.margins?.right ?? this.props?.secondaryYAxistitle\n ? 60\n : 40\n : this.props.margins?.left ?? 60;\n this.margins.right! = this._isRtl\n ? this.props.margins?.left ?? 60\n : this.props.margins?.right ?? this.props?.secondaryYAxistitle\n ? 60\n : 40;\n }\n }\n\n public componentDidMount(): void {\n this._fitParentContainer();\n if (\n this.props.chartType === ChartTypes.HorizontalBarChartWithAxis &&\n this.props.showYAxisLables &&\n this.yAxisElement\n ) {\n const maxYAxisLabelLength = calculateLongestLabelWidth(\n this.props.points.map((point: IHorizontalBarChartWithAxisDataPoint) => point.y),\n `.${this._classNames.yAxis} text`,\n );\n if (this.state.startFromX !== maxYAxisLabelLength) {\n this.setState({\n startFromX: maxYAxisLabelLength,\n });\n }\n } else if (this.state.startFromX !== 0) {\n this.setState({\n startFromX: 0,\n });\n }\n this.isIntegralDataset = !this.props.points.some((point: { y: number }) => {\n return point.y % 1 !== 0;\n });\n }\n\n public componentWillUnmount(): void {\n cancelAnimationFrame(this._reqID);\n }\n\n public componentDidUpdate(prevProps: IModifiedCartesianChartProps): void {\n if (prevProps.height !== this.props.height || prevProps.width !== this.props.width) {\n this._fitParentContainer();\n }\n if (\n !this.props.wrapXAxisLables &&\n this.props.rotateXAxisLables &&\n this.props.xAxisType! === XAxisTypes.StringAxis\n ) {\n const rotateLabelProps = {\n node: this.xAxisElement,\n xAxis: this._xScale,\n };\n const rotatedHeight = rotateXAxisLabels(rotateLabelProps);\n if (\n this.state.isRemoveValCalculated &&\n this.state._removalValueForTextTuncate !== rotatedHeight! + this.margins.bottom! &&\n rotatedHeight! > 0\n ) {\n this.setState({\n _removalValueForTextTuncate: rotatedHeight! + this.margins.bottom!,\n isRemoveValCalculated: false,\n });\n }\n }\n if (\n this.props.chartType === ChartTypes.HorizontalBarChartWithAxis &&\n this.props.showYAxisLables &&\n this.yAxisElement\n ) {\n const maxYAxisLabelLength = calculateLongestLabelWidth(\n this.props.points.map((point: IHorizontalBarChartWithAxisDataPoint) => point.y),\n `.${this._classNames.yAxis} text`,\n );\n if (this.state.startFromX !== maxYAxisLabelLength) {\n this.setState({\n startFromX: maxYAxisLabelLength,\n });\n }\n } else if (this.state.startFromX !== 0) {\n this.setState({\n startFromX: 0,\n });\n }\n if (prevProps.points !== this.props.points) {\n this.isIntegralDataset = !this.props.points.some((point: { y: number }) => {\n return point.y % 1 !== 0;\n });\n }\n }\n\n public render(): JSX.Element {\n const {\n calloutProps,\n points,\n chartType,\n chartHoverProps,\n svgFocusZoneProps,\n svgProps,\n culture,\n dateLocalizeOptions,\n timeFormatLocale,\n customDateTimeFormatter,\n } = this.props;\n if (this.props.parentRef) {\n this._fitParentContainer();\n }\n\n const margin = { ...this.margins };\n if (this.props.chartType === ChartTypes.HorizontalBarChartWithAxis) {\n if (!this._isRtl) {\n margin.left! += this.state.startFromX;\n } else {\n margin.right! += this.state.startFromX;\n }\n }\n // Callback for margins to the chart\n this.props.getmargins && this.props.getmargins(margin);\n\n let callout: JSX.Element | null = null;\n\n let children = null;\n if (\n (this.props.enableFirstRenderOptimization && this.chartContainer) ||\n !this.props.enableFirstRenderOptimization\n ) {\n this._isFirstRender = false;\n const XAxisParams = {\n domainNRangeValues: getDomainNRangeValues(\n points,\n this.props.getDomainMargins ? this.props.getDomainMargins(this.state.containerWidth) : this.margins,\n this.state.containerWidth,\n chartType,\n this._isRtl,\n this.props.xAxisType,\n this.props.barwidth!,\n this.props.tickValues!,\n // This is only used for Horizontal Bar Chart with Axis for y as string axis\n this.state.startFromX,\n ),\n containerHeight: this.state.containerHeight - this.state._removalValueForTextTuncate!,\n margins: this.margins,\n xAxisElement: this.xAxisElement!,\n showRoundOffXTickValues: true,\n xAxisCount: this.props.xAxisTickCount,\n xAxistickSize: this.props.xAxistickSize,\n tickPadding: this.props.tickPadding || this.props.showXAxisLablesTooltip ? 5 : 10,\n xAxisPadding: this.props.xAxisPadding,\n xAxisInnerPadding: this.props.xAxisInnerPadding,\n xAxisOuterPadding: this.props.xAxisOuterPadding,\n };\n\n const YAxisParams = {\n margins: this.margins,\n containerWidth: this.state.containerWidth,\n containerHeight: this.state.containerHeight - this.state._removalValueForTextTuncate!,\n yAxisElement: this.yAxisElement,\n yAxisTickFormat: this.props.yAxisTickFormat!,\n yAxisTickCount: this.props.yAxisTickCount!,\n yMinValue: this.props.yMinValue || 0,\n yMaxValue: this.props.yMaxValue || 0,\n tickPadding: 10,\n maxOfYVal: this.props.maxOfYVal,\n yMinMaxValues: getMinMaxOfYAxis(points, chartType, this.props.yAxisType),\n // please note these padding default values must be consistent in here\n // and the parent chart(HBWA/Vertical etc..) for more details refer example\n // http://using-d3js.com/04_07_ordinal_scales.html\n yAxisPadding: this.props.yAxisPadding || 0,\n };\n /**\n * These scales used for 2 purposes.\n * 1. To create x and y axis\n * 2. To draw the graph.\n * For area/line chart using same scales. For other charts, creating their own scales to draw the graph.\n */\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n let xScale: any;\n let tickValues: (string | number)[];\n switch (this.props.xAxisType!) {\n case XAxisTypes.NumericAxis:\n ({ xScale, tickValues } = createNumericXAxis(XAxisParams, this.props.chartType, culture));\n break;\n case XAxisTypes.DateAxis:\n ({ xScale, tickValues } = createDateXAxis(\n XAxisParams,\n this.props.tickParams!,\n culture,\n dateLocalizeOptions,\n timeFormatLocale,\n customDateTimeFormatter,\n ));\n break;\n case XAxisTypes.StringAxis:\n ({ xScale, tickValues } = createStringXAxis(\n XAxisParams,\n this.props.tickParams!,\n this.props.datasetForXAxisDomain!,\n culture,\n ));\n break;\n default:\n ({ xScale, tickValues } = createNumericXAxis(XAxisParams, this.props.chartType, culture));\n }\n this._xScale = xScale;\n this._tickValues = tickValues;\n\n /*\n * To enable wrapping of x axis tick values or to display complete x axis tick values,\n * we need to calculate how much space it needed to render the text.\n * No need to re-calculate every time the chart renders and same time need to get an update. So using setState.\n * Required space will be calculated first time chart rendering and if any width/height of chart updated.\n * */\n if (this.props.wrapXAxisLables || this.props.showXAxisLablesTooltip) {\n const wrapLabelProps = {\n node: this.xAxisElement,\n xAxis: xScale,\n showXAxisLablesTooltip: this.props.showXAxisLablesTooltip || false,\n noOfCharsToTruncate: this.props.noOfCharsToTruncate || 4,\n };\n const temp = xScale && (createWrapOfXLabels(wrapLabelProps) as number);\n // this value need to be updated for draw graph updated. So instead of using private value, using set state.\n if (this.state.isRemoveValCalculated && this.state._removalValueForTextTuncate !== temp) {\n this.setState({ _removalValueForTextTuncate: temp, isRemoveValCalculated: false });\n }\n }\n\n /**\n * These scales used for 2 purposes.\n * 1. To create x and y axis\n * 2. To draw the graph.\n * For area/line chart using same scales. For other charts, creating their own scales to draw the graph.\n */\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n let yScale: any;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n let yScaleSecondary: any;\n const axisData: IAxisData = { yAxisDomainValues: [] };\n if (this.props.yAxisType && this.props.yAxisType === YAxisType.StringAxis) {\n yScale = createStringYAxis(\n YAxisParams,\n this.props.stringDatasetForYAxisDomain!,\n this._isRtl,\n this.props.chartType,\n this.props.barwidth,\n culture,\n );\n } else {\n if (this.props?.secondaryYScaleOptions) {\n const YAxisParamsSecondary = {\n margins: this.margins,\n containerWidth: this.state.containerWidth,\n containerHeight: this.state.containerHeight - this.state._removalValueForTextTuncate!,\n yAxisElement: this.yAxisElementSecondary,\n yAxisTickFormat: this.props.yAxisTickFormat!,\n yAxisTickCount: this.props.yAxisTickCount!,\n yMinValue: this.props.secondaryYScaleOptions?.yMinValue || 0,\n yMaxValue: this.props.secondaryYScaleOptions?.yMaxValue ?? 100,\n tickPadding: 10,\n maxOfYVal: this.props.secondaryYScaleOptions?.yMaxValue ?? 100,\n yMinMaxValues: getMinMaxOfYAxis(points, chartType),\n yAxisPadding: this.props.yAxisPadding,\n };\n\n yScaleSecondary = createYAxis(\n YAxisParamsSecondary,\n this._isRtl,\n axisData,\n chartType,\n this.props.barwidth!,\n this.isIntegralDataset,\n true,\n );\n }\n yScale = createYAxis(\n YAxisParams,\n this._isRtl,\n axisData,\n chartType,\n this.props.barwidth!,\n this.isIntegralDataset,\n );\n }\n\n /*\n * To create y axis tick values by if specified\n truncating the rest of the text and showing elipsis\n or showing the whole string,\n * */\n this.props.chartType === ChartTypes.HorizontalBarChartWithAxis &&\n yScale &&\n createYAxisLabels(\n this.yAxisElement,\n yScale,\n this.props.noOfCharsToTruncate || 4,\n this.props.showYAxisLablesTooltip || false,\n this.state.startFromX,\n this._isRtl,\n );\n\n this.props.getAxisData && this.props.getAxisData(axisData);\n // Callback function for chart, returns axis\n this._getData(xScale, yScale);\n\n children = this.props.children({\n ...this.state,\n xScale,\n yScale,\n yScaleSecondary,\n });\n\n if (!this.props.hideTooltip && calloutProps!.isCalloutVisible) {\n callout = this._generateCallout(calloutProps, chartHoverProps);\n }\n }\n\n this._classNames = getClassNames(this.props.styles!, {\n theme: this.props.theme!,\n width: this.state._width,\n height: this.state._height,\n className: this.props.className,\n isRtl: this._isRtl,\n });\n\n const svgDimensions = {\n width: this.state.containerWidth,\n height: this.state.containerHeight,\n };\n\n let focusDirection;\n if (this.props.focusZoneDirection === FocusZoneDirection.vertical) {\n focusDirection = this.props.focusZoneDirection;\n } else if (this.props.focusZoneDirection) {\n focusDirection = this.props.focusZoneDirection;\n } else {\n focusDirection = FocusZoneDirection.horizontal;\n }\n\n const xAxisTitleMaximumAllowedWidth =\n svgDimensions.width - this.margins.left! - this.margins.right! - this.state.startFromX!;\n const yAxisTitleMaximumAllowedHeight =\n svgDimensions.height -\n this.margins.bottom! -\n this.margins.top! -\n this.state._removalValueForTextTuncate! -\n this.titleMargin;\n /**\n * We have use the {@link defaultTabbableElement } to fix\n * the Focus not landing on chart while tabbing, instead goes to legend.\n * This issue is observed in Area, line chart after performance optimization done in the PR {@link https://github.com/microsoft/fluentui/pull/27721 }\n * This issue is observed in Bar charts after the changes done by FocusZone team in the PR: {@link https://github.com/microsoft/fluentui/pull/24175 }\n * The issue in Bar Charts(VB and VSB) is due to a {@link FocusZone } update where previously an event listener was\n * attached on keydown to the window, so that whenever the tab key is pressed all outer FocusZone's\n * tab-indexes are updated (an outer FocusZone is a FocusZone that is not within another one).\n * But now after the above PR : they are attaching the\n * listeners to the FocusZone elements instead of the window. So in the first render cycle in Bar charts\n * bars are not created as in the first render cycle the size of the chart container is not known( or is 0)\n * which creates bars of height 0 so instead we do not create any bars and instead return empty fragments.\n *\n * We have tried 2 Approaches to fix the issue:\n * 1. Using the {@link elementRef} property of FocusZone where we dispatch event for tab keydown\n * after the second render cycle which triggers an update of the tab index in FocusZone.\n * But this is a hacky solution and not a proper fix and also elementRef is deprecated.\n * 2. Using the default tabbable element to fix the issue.\n */\n\n return (\n <div\n id={this.idForGraph}\n className={this._classNames.root}\n role={'presentation'}\n ref={(rootElem: HTMLDivElement) => (this.chartContainer = rootElem)}\n onMouseLeave={this._onChartLeave}\n >\n {!this._isFirstRender && <div id={this.idForDefaultTabbableElement} />}\n <FocusZone\n direction={focusDirection}\n className={this._classNames.chartWrapper}\n defaultTabbableElement={`#${this.idForDefaultTabbableElement}`}\n {...svgFocusZoneProps}\n >\n {this._isFirstRender && <div id={this.idForDefaultTabbableElement} />}\n <svg\n width={svgDimensions.width}\n height={svgDimensions.height}\n aria-label={this.props.chartTitle}\n style={{ display: 'block' }}\n {...svgProps}\n >\n <g\n ref={(e: SVGElement | null) => {\n this.xAxisElement = e;\n }}\n id={`xAxisGElement${this.idForGraph}`}\n // To add wrap of x axis lables feature, need to remove word height from svg height.\n transform={`translate(0, ${\n svgDimensions.height - this.margins.bottom! - this.state._removalValueForTextTuncate!\n })`}\n className={this._classNames.xAxis}\n />\n {this.props.xAxisTitle !== undefined && this.props.xAxisTitle !== '' && (\n <SVGTooltipText\n content={this.props.xAxisTitle}\n textProps={{\n x: this.margins.left! + this.state.startFromX + xAxisTitleMaximumAllowedWidth / 2,\n y: svgDimensions.height - this.titleMargin,\n className: this._classNames.axisTitle!,\n textAnchor: 'middle',\n }}\n maxWidth={xAxisTitleMaximumAllowedWidth}\n wrapContent={wrapContent}\n />\n )}\n <g\n ref={(e: SVGElement | null) => {\n this.yAxisElement = e;\n }}\n id={`yAxisGElement${this.idForGraph}`}\n transform={`translate(${\n this._isRtl\n ? svgDimensions.width - this.margins.right! - this.state.startFromX\n : this.margins.left! + this.state.startFromX\n }, 0)`}\n className={this._classNames.yAxis}\n />\n {this.props.secondaryYScaleOptions && (\n <g>\n <g\n ref={(e: SVGElement | null) => {\n this.yAxisElementSecondary = e;\n }}\n id={`yAxisGElementSecondary${this.idForGraph}`}\n transform={`translate(${\n this._isRtl ? this.margins.left! : svgDimensions.width - this.margins.right!\n }, 0)`}\n className={this._classNames.yAxis}\n />\n {this.props.secondaryYAxistitle !== undefined && this.props.secondaryYAxistitle !== '' && (\n <SVGTooltipText\n content={this.props.secondaryYAxistitle}\n textProps={{\n x:\n (yAxisTitleMaximumAllowedHeight - this.margins.bottom!) / 2 +\n this.state._removalValueForTextTuncate!,\n y: this._isRtl\n ? this.state.startFromX - this.titleMargin\n : svgDimensions.width - this.margins.right!,\n textAnchor: 'middle',\n transform: `translate(${\n this._isRtl\n ? this.margins.right! / 2 - this.titleMargin\n : this.margins.right! / 2 + this.titleMargin\n },\n ${svgDimensions.height - this.margins.bottom! - this.margins.top! - this.titleMargin})rotate(-90)`,\n className: this._classNames.axisTitle!,\n }}\n maxWidth={yAxisTitleMaximumAllowedHeight}\n wrapContent={wrapContent}\n />\n )}\n </g>\n )}\n {children}\n {this.props.yAxisTitle !== undefined && this.props.yAxisTitle !== '' && (\n <SVGTooltipText\n content={this.props.yAxisTitle}\n textProps={{\n x:\n (yAxisTitleMaximumAllowedHeight - this.margins.bottom!) / 2 +\n this.state._removalValueForTextTuncate!,\n y: this._isRtl\n ? svgDimensions.width - this.margins.right! / 2 + this.titleMargin\n : this.margins.left! / 2 + this.state.startFromX - this.titleMargin,\n textAnchor: 'middle',\n transform: `translate(0,\n ${svgDimensions.height - this.margins.bottom! - this.margins.top! - this.titleMargin})rotate(-90)`,\n className: this._classNames.axisTitle!,\n }}\n maxWidth={yAxisTitleMaximumAllowedHeight}\n wrapContent={wrapContent}\n />\n )}\n </svg>\n </FocusZone>\n\n {!this.props.hideLegend && (\n <div ref={(e: HTMLDivElement) => (this.legendContainer = e)} className={this._classNames.legendContainer}>\n {this.props.legendBars}\n </div>\n )}\n {/** The callout is used for narration, so keep it mounted on the DOM */}\n {callout && <React.Suspense fallback={<div>Loading...</div>}>{callout}</React.Suspense>}\n </div>\n );\n }\n /**\n * Dedicated function to return the Callout JSX Element , which can further be used to only call this when\n * only the calloutprops and charthover props changes.\n * @param calloutProps\n * @param chartHoverProps\n * @returns\n */\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n private _generateCallout(calloutProps: any, chartHoverProps: any): JSX.Element {\n return (\n <Callout\n hidden={!(!this.props.hideTooltip && calloutProps!.isCalloutVisible)}\n /** Keep the callout updated with details of focused/hovered chart element */\n shouldUpdateWhenHidden={true}\n {...calloutProps}\n >\n {/** Given custom callout, then it will render */}\n {this.props.customizedCallout && this.props.customizedCallout}\n {/** single x point its corresponding y points of all the bars/lines in chart will render in callout */}\n {!this.props.customizedCallout && this.props.isCalloutForStack && this._multiValueCallout(calloutProps)}\n {/** single x point its corresponding y point of single line/bar in the chart will render in callout */}\n {!this.props.customizedCallout && !this.props.isCalloutForStack && (\n <ChartHoverCard\n XValue={calloutProps.XValue}\n Legend={calloutProps.legend!}\n YValue={calloutProps.YValue!}\n color={calloutProps.color!}\n culture={this.props.culture}\n {...chartHoverProps}\n />\n )}\n </Callout>\n );\n }\n\n // TO DO: Write a common functional component for Multi value callout and divide sub count method\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n private _multiValueCallout = (calloutProps: any) => {\n const yValueHoverSubCountsExists: boolean = this._yValueHoverSubCountsExists(calloutProps.YValueHover);\n return (\n <div className={this._classNames.calloutContentRoot}>\n <div\n className={this._classNames.calloutDateTimeContainer}\n style={yValueHoverSubCountsExists ? { marginBottom: '11px' } : {}}\n >\n <div\n className={this._classNames.calloutContentX}\n {...getAccessibleDataObject(calloutProps!.xAxisCalloutAccessibilityData, 'text', false)}\n >\n {convertToLocaleString(calloutProps!.hoverXValue, this.props.culture)}\n </div>\n </div>\n <div\n className={this._classNames.calloutInfoContainer}\n style={yValueHoverSubCountsExists ? { display: 'flex' } : {}}\n >\n {calloutProps!.YValueHover &&\n calloutProps!.YValueHover.map((yValue: IYValueHover, index: number, yValues: IYValueHover[]) => {\n const isLast: boolean = index + 1 === yValues.length;\n const { shouldDrawBorderBottom = false } = yValue;\n return (\n <div\n {...getAccessibleDataObject(yValue.callOutAccessibilityData, 'text', false)}\n key={`callout-content-${index}`}\n style={\n yValueHoverSubCountsExists\n ? {\n display: 'inline-block',\n ...(shouldDrawBorderBottom && {\n borderBottom: `1px solid ${this.props.theme!.semanticColors.menuDivider}`,\n paddingBottom: '10px',\n }),\n }\n : {\n ...(shouldDrawBorderBottom && {\n borderBottom: `1px solid ${this.props.theme!.semanticColors.menuDivider}`,\n paddingBottom: '10px',\n }),\n }\n }\n >\n {this._getCalloutContent(yValue, index, yValueHoverSubCountsExists, isLast)}\n </div>\n );\n })}\n {!!calloutProps.descriptionMessage && (\n <div className={this._classNames.descriptionMessage}>{calloutProps.descriptionMessage}</div>\n )}\n </div>\n </div>\n );\n };\n\n private _yValueHoverSubCountsExists(yValueHover?: IYValueHover[]) {\n if (yValueHover) {\n return yValueHover.some(\n (yValue: {\n legend?: string;\n y?: number;\n color?: string;\n yAxisCalloutData?: string | { [id: string]: number };\n }) => yValue.yAxisCalloutData && typeof yValue.yAxisCalloutData !== 'string',\n );\n }\n return false;\n }\n\n private _getCalloutContent(\n xValue: IYValueHover,\n index: number,\n yValueHoverSubCountsExists: boolean,\n isLast: boolean,\n ): React.ReactNode {\n const marginStyle: React.CSSProperties = isLast ? {} : { marginRight: '16px' };\n const toDrawShape = xValue.index !== undefined && xValue.index !== -1;\n const _classNames = getClassNames(this.props.styles!, {\n theme: this.props.theme!,\n width: this.state._width,\n height: this.state._height,\n className: this.props.className,\n isRtl: this._isRtl,\n lineColor: xValue.color,\n toDrawShape,\n });\n\n const { culture } = this.props;\n const yValue = convertToLocaleString(xValue.y, culture);\n if (!xValue.yAxisCalloutData || typeof xValue.yAxisCalloutData === 'string') {\n return (\n <div style={yValueHoverSubCountsExists ? marginStyle : {}}>\n {yValueHoverSubCountsExists && (\n <div className=\"ms-fontWeight-semibold\" style={{ fontSize: '12pt' }}>\n {xValue.legend!} ({yValue})\n </div>\n )}\n <div id={`${index}_${xValue.y}`} className={_classNames.calloutBlockContainer}>\n {toDrawShape && (\n <Shape\n svgProps={{\n className: _classNames.shapeStyles,\n }}\n pathProps={{ fill: xValue.color }}\n shape={Points[xValue.index! % Object.keys(pointTypes).length] as LegendShape}\n />\n )}\n <div>\n <div className={_classNames.calloutlegendText}> {xValue.legend}</div>\n <div className={_classNames.calloutContentY}>\n {convertToLocaleString(\n xValue.yAxisCalloutData ? xValue.yAxisCalloutData : xValue.y ?? xValue.data,\n culture,\n )}\n </div>\n </div>\n </div>\n </div>\n );\n } else {\n const subcounts: { [id: string]: number } = xValue.yAxisCalloutData as { [id: string]: number };\n return (\n <div style={marginStyle}>\n <div className=\"ms-fontWeight-semibold\" style={{ fontSize: '12pt' }}>\n {xValue.legend!} ({yValue})\n </div>\n {Object.keys(subcounts).map((subcountName: string) => {\n return (\n <div key={subcountName} className={_classNames.calloutBlockContainer}>\n <div className={_classNames.calloutlegendText}> {convertToLocaleString(subcountName, culture)}</div>\n <div className={_classNames.calloutContentY}>\n {convertToLocaleString(subcounts[subcountName], culture)}\n </div>\n </div>\n );\n })}\n </div>\n );\n }\n }\n\n /**\n * When screen resizes, along with screen, chart also auto adjusted.\n * This method used to adjust height and width of the charts.\n */\n private _fitParentContainer(): void {\n const { containerWidth, containerHeight } = this.state;\n this._reqID = requestAnimationFrame(() => {\n let legendContainerHeight;\n if (this.props.hideLegend) {\n // If there is no legend, need not to allocate some space from total chart space.\n legendContainerHeight = 0;\n } else {\n const legendContainerComputedStyles = this.legendContainer && getComputedStyle(this.legendContainer);\n legendContainerHeight =\n ((this.legendContainer && this.legendContainer.getBoundingClientRect().height) ||\n this.minLegendContainerHeight) +\n parseFloat((legendContainerComputedStyles && legendContainerComputedStyles.marginTop) || '0') +\n parseFloat((legendContainerComputedStyles && legendContainerComputedStyles.marginBottom) || '0');\n }\n if (this.props.parentRef || this.chartContainer) {\n const container = this.props.parentRef ? this.props.parentRef : this.chartContainer;\n const currentContainerWidth =\n this.props.enableReflow && !this._isFirstRender\n ? Math.max(container.getBoundingClientRect().width, this._calculateChartMinWidth())\n : container.getBoundingClientRect().width;\n const currentContainerHeight =\n container.getBoundingClientRect().height > legendContainerHeight\n ? container.getBoundingClientRect().height\n : 350;\n const shouldResize =\n containerWidth !== currentContainerWidth ||\n containerHeight !== currentContainerHeight - legendContainerHeight;\n if (shouldResize) {\n this.setState({\n containerWidth: currentContainerWidth,\n containerHeight: currentContainerHeight - legendContainerHeight,\n });\n }\n }\n });\n }\n\n // Call back to the chart.\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n private _getData = (xScale: any, yScale: any) => {\n this.props.getGraphData &&\n this.props.getGraphData(\n xScale,\n yScale,\n this.state.containerHeight - this.state._removalValueForTextTuncate!,\n this.state.containerWidth,\n this.xAxisElement,\n this.yAxisElement,\n );\n };\n\n private _onChartLeave = (): void => {\n this.props.onChartMouseLeave && this.props.onChartMouseLeave();\n };\n\n private _calculateChartMinWidth = (): number => {\n let labelWidth = 10; // Total padding on the left and right sides of the label\n\n // Case: rotated labels\n if (\n !this.props.wrapXAxisLables &&\n this.props.rotateXAxisLables &&\n this.props.xAxisType! === XAxisTypes.StringAxis\n ) {\n const longestLabelWidth = calculateLongestLabelWidth(this._tickValues, `.${this._classNames.xAxis} text`);\n labelWidth += Math.ceil(longestLabelWidth * Math.cos(Math.PI / 4));\n }\n // Case: truncated labels\n else if (this.props.showXAxisLablesTooltip) {\n const tickValues = this._tickValues.map(val => {\n const numChars = this.props.noOfCharsToTruncate || 4;\n return val.toString().length > numChars ? `${val.toString().slice(0, numChars)}...` : val;\n });\n\n const longestLabelWidth = calculateLongestLabelWidth(tickValues, `.${this._classNames.xAxis} text`);\n labelWidth += Math.ceil(longestLabelWidth);\n }\n // Case: wrapped labels\n else if (this.props.wrapXAxisLables) {\n const words: string[] = [];\n this._tickValues.forEach((val: string) => {\n words.push(...val.toString().split(/\\s+/));\n });\n\n const longestLabelWidth = calculateLongestLabelWidth(words, `.${this._classNames.xAxis} text`);\n labelWidth += Math.max(Math.ceil(longestLabelWidth), 10);\n }\n // Default case\n else {\n const longestLabelWidth = calculateLongestLabelWidth(this._tickValues, `.${this._classNames.xAxis} text`);\n labelWidth += Math.ceil(longestLabelWidth);\n }\n\n let minChartWidth = this.margins.left! + this.margins.right! + labelWidth * (this._tickValues.length - 1);\n\n if (\n [ChartTypes.GroupedVerticalBarChart, ChartTypes.VerticalBarChart, ChartTypes.VerticalStackedBarChart].includes(\n this.props.chartType,\n )\n ) {\n const minDomainMargin = 8;\n minChartWidth += minDomainMargin * 2;\n }\n\n return minChartWidth;\n };\n}\n"]}
|
|
@@ -5,7 +5,8 @@ import { Callout, DirectionalHint } from '@fluentui/react/lib/Callout';
|
|
|
5
5
|
import { FocusZone, FocusZoneDirection, FocusZoneTabbableElements } from '@fluentui/react-focus';
|
|
6
6
|
import { ChartHoverCard, Legends } from '../../index';
|
|
7
7
|
import { Pie } from './Pie/index';
|
|
8
|
-
import {
|
|
8
|
+
import { getAccessibleDataObject, getColorFromToken, getNextColor } from '../../utilities/index';
|
|
9
|
+
import { convertToLocaleString } from '../../utilities/locale-util';
|
|
9
10
|
var getClassNames = classNamesFunction();
|
|
10
11
|
var LEGEND_CONTAINER_HEIGHT = 40;
|
|
11
12
|
var DonutChartBase = /** @class */ (function (_super) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DonutChart.base.js","sourceRoot":"../src/","sources":["components/DonutChart/DonutChart.base.tsx"],"names":[],"mappings":";AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,EAAE,kBAAkB,EAAE,KAAK,EAAE,MAAM,+BAA+B,CAAC;AAG1E,OAAO,EAAE,OAAO,EAAE,eAAe,EAAE,MAAM,6BAA6B,CAAC;AACvE,OAAO,EAAE,SAAS,EAAE,kBAAkB,EAAE,yBAAyB,EAAE,MAAM,uBAAuB,CAAC;AACjG,OAAO,EAAuB,cAAc,EAAW,OAAO,EAAE,MAAM,aAAa,CAAC;AACpF,OAAO,EAAE,GAAG,EAAE,MAAM,aAAa,CAAC;AAElC,OAAO,EAAE,qBAAqB,EAAE,uBAAuB,EAAE,iBAAiB,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAExH,IAAM,aAAa,GAAG,kBAAkB,EAA4C,CAAC;AACrF,IAAM,uBAAuB,GAAG,EAAE,CAAC;AAkBnC;IAAoC,kCAAmD;IAgCrF,wBAAY,KAAuB;QAAnC,YACE,kBAAM,KAAK,CAAC,SAoBb;QAuGO,mBAAa,GAAG;YACtB,KAAI,CAAC,QAAQ,CAAC;gBACZ,SAAS,EAAE,KAAK;aACjB,CAAC,CAAC;QACL,CAAC,CAAC;QAqDM,oBAAc,GAAG,UAAC,IAAqB,EAAE,EAAU,EAAE,OAAuB;YAClF,KAAI,CAAC,oBAAoB,GAAG,OAAO,CAAC;YACpC,KAAI,CAAC,QAAQ,CAAC;gBACZ,iGAAiG;gBACjG,SAAS,EAAE,KAAI,CAAC,KAAK,CAAC,cAAc,KAAK,EAAE,IAAI,KAAI,CAAC,KAAK,CAAC,cAAc,KAAK,IAAI,CAAC,MAAM;gBACxF,KAAK,EAAE,IAAI,CAAC,IAAK,CAAC,QAAQ,EAAE;gBAC5B,MAAM,EAAE,IAAI,CAAC,MAAM;gBACnB,KAAK,EAAE,IAAI,CAAC,KAAM;gBAClB,aAAa,EAAE,IAAI,CAAC,gBAAiB;gBACrC,aAAa,EAAE,IAAI,CAAC,gBAAiB;gBACrC,YAAY,EAAE,EAAE;gBAChB,qBAAqB,EAAE,IAAI;gBAC3B,wBAAwB,EAAE,IAAI,CAAC,wBAAyB;aACzD,CAAC,CAAC;QACL,CAAC,CAAC;QAEM,oBAAc,GAAG,UAAC,IAAqB,EAAE,CAAmC;YAClF,IAAI,KAAI,CAAC,mBAAmB,KAAK,IAAI,EAAE;gBACrC,KAAI,CAAC,mBAAmB,GAAG,IAAI,CAAC;gBAChC,KAAI,CAAC,oBAAoB,GAAG,CAAC,CAAC;gBAC9B,KAAI,CAAC,QAAQ,CAAC;oBACZ,iGAAiG;oBACjG,SAAS,EAAE,KAAI,CAAC,KAAK,CAAC,cAAc,KAAK,EAAE,IAAI,KAAI,CAAC,KAAK,CAAC,cAAc,KAAK,IAAI,CAAC,MAAM;oBACxF,KAAK,EAAE,IAAI,CAAC,IAAK,CAAC,QAAQ,EAAE;oBAC5B,MAAM,EAAE,IAAI,CAAC,MAAM;oBACnB,KAAK,EAAE,IAAI,CAAC,KAAM;oBAClB,aAAa,EAAE,IAAI,CAAC,gBAAiB;oBACrC,aAAa,EAAE,IAAI,CAAC,gBAAiB;oBACrC,qBAAqB,EAAE,IAAI;oBAC3B,wBAAwB,EAAE,IAAI,CAAC,wBAAyB;iBACzD,CAAC,CAAC;aACJ;QACH,CAAC,CAAC;QACM,aAAO,GAAG;YAChB,KAAI,CAAC,QAAQ,CAAC,EAAE,YAAY,EAAE,EAAE,EAAE,CAAC,CAAC;QACtC,CAAC,CAAC;QAMM,4BAAsB,GAAG;YAC/B,KAAI,CAAC,mBAAmB,GAAG,IAAI,CAAC;YAChC,KAAI,CAAC,QAAQ,CAAC,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC,CAAC;QACtC,CAAC,CAAC;QA4CM,uBAAiB,GAAG,UAAC,mBAAuC;YAClE,OAAO,mBAAmB;gBACxB,CAAC,CAAC,mBAAmB,CAAC,GAAG,CAAC,UAAC,IAAI,EAAE,KAAK;;oBAClC,IAAI,KAAa,CAAC;oBAClB,sDAAsD;oBACtD,IAAI,OAAO,IAAI,CAAC,KAAK,KAAK,WAAW,EAAE;wBACrC,KAAK,GAAG,YAAY,CAAC,KAAK,EAAE,CAAC,EAAE,MAAA,KAAI,CAAC,KAAK,CAAC,KAAK,0CAAE,UAAU,CAAC,CAAC;qBAC9D;yBAAM;wBACL,KAAK,GAAG,iBAAiB,CAAC,IAAI,CAAC,KAAK,EAAE,MAAA,KAAI,CAAC,KAAK,CAAC,KAAK,0CAAE,UAAU,CAAC,CAAC;qBACrE;oBAED,6BAAY,IAAI,KAAE,KAAK,OAAA,IAAG;gBAC5B,CAAC,CAAC;gBACJ,CAAC,CAAC,EAAE,CAAC;QACT,CAAC,CAAC;QAzRA,KAAI,CAAC,KAAK,GAAG;YACX,SAAS,EAAE,KAAK;YAChB,KAAK,EAAE,EAAE;YACT,MAAM,EAAE,EAAE;YACV,MAAM,EAAE,KAAI,CAAC,KAAK,CAAC,KAAK,IAAI,GAAG;YAC/B,OAAO,EAAE,KAAI,CAAC,KAAK,CAAC,MAAM,IAAI,GAAG;YACjC,YAAY,EAAE,EAAE;YAChB,KAAK,EAAE,EAAE;YACT,aAAa,EAAE,EAAE;YACjB,aAAa,EAAE,EAAE;YACjB,cAAc,EAAE,EAAE;YAClB,YAAY,EAAE,EAAE;SACjB,CAAC;QACF,KAAI,CAAC,cAAc,GAAG,KAAI,CAAC,cAAc,CAAC,IAAI,CAAC,KAAI,CAAC,CAAC;QACrD,KAAI,CAAC,cAAc,GAAG,KAAI,CAAC,cAAc,CAAC,IAAI,CAAC,KAAI,CAAC,CAAC;QACrD,KAAI,CAAC,WAAW,GAAG,KAAI,CAAC,WAAW,CAAC,IAAI,CAAC,KAAI,CAAC,CAAC;QAC/C,KAAI,CAAC,UAAU,GAAG,KAAK,CAAC,SAAS,CAAC,CAAC;QACnC,KAAI,CAAC,SAAS,GAAG,KAAK,CAAC,OAAO,CAAC,CAAC;QAChC,KAAI,CAAC,aAAa,GAAG,KAAK,CAAC,mBAAmB,CAAC,CAAC;;IAClD,CAAC;IAtCa,uCAAwB,GAAtC,UACE,SAAqC,EACrC,SAAqC;QAErC,IAAI,UAA0C,CAAC;QAC/C,IAAI,SAAS,CAAC,KAAK,IAAI,SAAS,CAAC,KAAK,KAAK,SAAS,CAAC,MAAM,EAAE;YAC3D,UAAU,GAAG,EAAE,MAAM,EAAE,SAAS,CAAC,KAAK,EAAE,CAAC;SAC1C;QAED,IAAI,WAA4C,CAAC;QACjD,IAAI,SAAS,CAAC,MAAM,IAAI,SAAS,CAAC,MAAM,KAAK,SAAS,CAAC,OAAO,EAAE;YAC9D,WAAW,GAAG,EAAE,OAAO,EAAE,SAAS,CAAC,MAAM,GAAG,uBAAuB,EAAE,CAAC;SACvE;QAED,6BAAY,UAAU,GAAK,WAAW,EAAG;IAC3C,CAAC;IAwBM,0CAAiB,GAAxB;QACE,IAAI,IAAI,CAAC,SAAS,EAAE;YAClB,IAAI,CAAC,QAAQ,CAAC;gBACZ,MAAM,EAAE,IAAI,CAAC,SAAS,CAAC,WAAW;gBAClC,OAAO,EAAE,IAAI,CAAC,SAAS,CAAC,YAAY,GAAG,uBAAuB;aAC/D,CAAC,CAAC;SACJ;IACH,CAAC;IAEM,+BAAM,GAAb;QAAA,iBA2FC;QA1FO,IAAA,KAA+B,IAAI,CAAC,KAAK,EAAvC,IAAI,UAAA,EAAE,kBAAkB,EAAlB,UAAU,mBAAG,KAAK,KAAe,CAAC;QAChD,IAAM,MAAM,GAAG,IAAI,CAAC,iBAAiB,CAAC,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,SAAS,CAAC,CAAC;QAEvD,IAAI,CAAC,WAAW,GAAG,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC,MAAO,EAAE;YACnD,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,KAAM;YACxB,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,MAAO;YACzB,MAAM,EAAE,IAAI,CAAC,KAAK,CAAC,OAAQ;YAC3B,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,KAAM;YACxB,SAAS,EAAE,IAAI,CAAC,KAAK,CAAC,SAAU;SACjC,CAAC,CAAC;QAEH,IAAM,UAAU,GAAG,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC;QAC/C,IAAM,qBAAqB,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QAC7D,IAAM,mBAAmB,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QAC3D,IAAM,WAAW,GACf,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,MAAO,GAAG,qBAAqB,EAAE,IAAI,CAAC,KAAK,CAAC,OAAQ,GAAG,mBAAmB,CAAC,GAAG,CAAC,CAAC;QACtG,IAAM,SAAS,GAAG,MAAM,CAAC,MAAM,CAAC,UAAC,CAAkB,IAAK,OAAA,CAAC,CAAC,IAAK,IAAI,CAAC,EAAZ,CAAY,CAAC,CAAC;QACtE,IAAM,gBAAgB,GAAG,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,KAAK,CAAC,gBAAiB,EAAE,SAAU,CAAC,CAAC;QAC1F,OAAO,CAAC,IAAI,CAAC,aAAa,EAAE,CAAC,CAAC,CAAC,CAC7B,6BACE,SAAS,EAAE,IAAI,CAAC,WAAW,CAAC,IAAI,EAChC,GAAG,EAAE,UAAC,QAA4B,IAAK,OAAA,CAAC,KAAI,CAAC,SAAS,GAAG,QAAQ,CAAC,EAA3B,CAA2B,EAClE,YAAY,EAAE,IAAI,CAAC,sBAAsB;YAEzC,oBAAC,SAAS,IAAC,SAAS,EAAE,kBAAkB,CAAC,UAAU,EAAE,YAAY,EAAE,yBAAyB,CAAC,GAAG;gBAC9F;oBACE,6BACE,SAAS,EAAE,IAAI,CAAC,WAAW,CAAC,KAAK,gBACrB,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,UAAU,EAC5B,GAAG,EAAE,UAAC,IAAuB,IAAK,OAAA,KAAI,CAAC,WAAW,CAAC,IAAI,CAAC,EAAtB,CAAsB;wBAExD,oBAAC,GAAG,IACF,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,MAAO,EACzB,MAAM,EAAE,IAAI,CAAC,KAAK,CAAC,OAAQ,EAC3B,WAAW,EAAE,WAAW,EACxB,WAAW,EAAE,IAAI,CAAC,KAAK,CAAC,WAAY,EACpC,IAAI,EAAE,SAAU,EAChB,eAAe,EAAE,IAAI,CAAC,cAAc,EACpC,eAAe,EAAE,IAAI,CAAC,cAAc,EACpC,kBAAkB,EAAE,IAAI,CAAC,WAAW,EACpC,QAAQ,EAAE,IAAI,CAAC,SAAS,EACxB,cAAc,EAAE,IAAI,CAAC,OAAO,EAC5B,SAAS,EAAE,IAAI,CAAC,qBAAqB,EAAE,EACvC,YAAY,EAAE,IAAI,CAAC,KAAK,CAAC,YAAY,IAAI,EAAE,EAC3C,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,IAAK,EACtB,SAAS,EAAE,IAAI,CAAC,UAAU,EAC1B,gBAAgB,EAAE,IAAI,CAAC,eAAe,CAAC,gBAAgB,CAAC,EACxD,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,KAAM,EACxB,mBAAmB,EAAE,IAAI,CAAC,KAAK,CAAC,mBAAmB,EACnD,UAAU,EAAE,IAAI,CAAC,KAAK,CAAC,UAAU,GACjC,CACE,CACF,CACI;YACZ,oBAAC,OAAO,aACN,MAAM,EAAE,IAAI,CAAC,oBAAoB,EACjC,eAAe,EAAE,IAAI,EACrB,aAAa,EAAE,KAAK,EACpB,eAAe,EAAE,eAAe,CAAC,WAAW,EAC5C,QAAQ,EAAE,EAAE,EACZ,MAAM,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,WAAW,IAAI,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,EAC1D,EAAE,EAAE,IAAI,CAAC,UAAU,EACnB,SAAS,EAAE,IAAI,CAAC,aAAa,EAC7B,yBAAyB,EAAE,IAAI;gBAC/B,mEAAmE;gBACnE,sBAAsB,EAAE,IAAI,IACxB,IAAI,CAAC,KAAK,CAAC,YAAa,EACxB,uBAAuB,CAAC,IAAI,CAAC,KAAK,CAAC,wBAAwB,EAAE,MAAM,EAAE,KAAK,CAAC,GAE9E,IAAI,CAAC,KAAK,CAAC,2BAA2B,CAAC,CAAC,CAAC,CACxC,IAAI,CAAC,KAAK,CAAC,2BAA2B,CAAC,IAAI,CAAC,KAAK,CAAC,qBAAsB,CAAC,CAC1E,CAAC,CAAC,CAAC,CACF,oBAAC,cAAc,IACb,MAAM,EAAE,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,EAC/E,MAAM,EAAE,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,EAC9E,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,KAAK,EACvB,OAAO,EAAE,IAAI,CAAC,KAAK,CAAC,OAAO,GAC3B,CACH,CACO;YACT,CAAC,UAAU,IAAI,6BAAK,SAAS,EAAE,IAAI,CAAC,WAAW,CAAC,eAAe,IAAG,UAAU,CAAO,CAChF,CACP,CAAC,CAAC,CAAC,CACF,6BACE,EAAE,EAAE,IAAI,CAAC,aAAc,EACvB,IAAI,EAAE,OAAO,EACb,KAAK,EAAE,EAAE,OAAO,EAAE,GAAG,EAAE,gBACX,8BAA8B,GAC1C,CACH,CAAC;IACJ,CAAC;IAQO,oCAAW,GAAnB,UAAoB,IAAuB;;QACzC,IAAI,IAAI,KAAK,IAAI,EAAE;YACjB,OAAO;SACR;QAED,IAAM,QAAQ,GAAG,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC;QAEzF,IAAM,SAAS,GACb,IAAI,CAAC,aAAa,IAAI,CAAA,MAAA,IAAI,CAAC,aAAa,0CAAE,YAAY,IAAG,IAAI,CAAC,KAAK,CAAC,OAAQ;YAC1E,CAAC,CAAC,MAAA,IAAI,CAAC,aAAa,0CAAE,YAAY;YAClC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC;QACzB,IAAM,OAAO,GAAG,cAAO,QAAS,cAAI,SAAU,CAAE,CAAC;QACjD,IAAI,CAAC,YAAY,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;IACxC,CAAC;IACO,uCAAc,GAAtB,UAAuB,SAA4B;QAAnD,iBAmCC;QAlCC,IAAM,eAAe,GAAG,SAAS,CAAC,GAAG,CAAC,UAAC,KAAsB,EAAE,KAAa;YAC1E,IAAM,KAAK,GAAW,KAAK,CAAC,KAAM,CAAC;YACnC,qDAAqD;YACrD,IAAM,MAAM,GAAY;gBACtB,KAAK,EAAE,KAAK,CAAC,MAAO;gBACpB,KAAK,OAAA;gBACL,MAAM,EAAE;oBACN,IAAI,KAAI,CAAC,KAAK,CAAC,cAAc,KAAK,KAAK,CAAC,MAAM,EAAE;wBAC9C,KAAI,CAAC,QAAQ,CAAC,EAAE,cAAc,EAAE,EAAE,EAAE,CAAC,CAAC;qBACvC;yBAAM;wBACL,KAAI,CAAC,QAAQ,CAAC,EAAE,cAAc,EAAE,KAAK,CAAC,MAAO,EAAE,CAAC,CAAC;qBAClD;gBACH,CAAC;gBACD,WAAW,EAAE;oBACX,KAAI,CAAC,sBAAsB,EAAE,CAAC;oBAC9B,KAAI,CAAC,QAAQ,CAAC,EAAE,YAAY,EAAE,KAAK,CAAC,MAAO,EAAE,CAAC,CAAC;gBACjD,CAAC;gBACD,gBAAgB,EAAE;oBAChB,KAAI,CAAC,QAAQ,CAAC,EAAE,YAAY,EAAE,EAAE,EAAE,CAAC,CAAC;gBACtC,CAAC;aACF,CAAC;YACF,OAAO,MAAM,CAAC;QAChB,CAAC,CAAC,CAAC;QACH,IAAM,OAAO,GAAG,CACd,oBAAC,OAAO,aACN,OAAO,EAAE,eAAe,EACxB,aAAa,QACb,aAAa,EAAE,IAAI,CAAC,KAAK,CAAC,oBAAoB,EAC9C,yBAAyB,EAAE,IAAI,CAAC,KAAK,CAAC,mCAAmC,EACzE,YAAY,EAAE,IAAI,CAAC,KAAK,CAAC,mBAAmB,IACxC,IAAI,CAAC,KAAK,CAAC,WAAW,EAC1B,CACH,CAAC;QACF,OAAO,OAAO,CAAC;IACjB,CAAC;IAuCO,oCAAW,GAAnB;QACE,IAAI;IACN,CAAC;IAOO,0CAAiB,GAAzB,UAA0B,gBAA6C,EAAE,IAAuB;QAAhG,iBAcC;QAbC,IAAM,iBAAiB,GAAG,IAAI,CAAC,qBAAqB,EAAE,CAAC;QACvD,IAAI,gBAAgB,KAAK,SAAS,IAAI,CAAC,iBAAiB,KAAK,EAAE,IAAI,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,EAAE;YACxF,IAAI,aAAW,GAAG,gBAAgB,CAAC;YACnC,IAAK,CAAC,GAAG,CAAC,UAAC,KAAsB,EAAE,KAAa;gBAC9C,IAAI,KAAK,CAAC,MAAM,KAAK,iBAAiB,IAAI,CAAC,KAAI,CAAC,KAAK,CAAC,SAAS,IAAI,KAAK,CAAC,MAAM,KAAK,KAAI,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE;oBACtG,aAAW,GAAG,KAAK,CAAC,gBAAgB,CAAC,CAAC,CAAC,KAAK,CAAC,gBAAgB,CAAC,CAAC,CAAC,KAAK,CAAC,IAAK,CAAC;iBAC7E;gBACD,OAAO;YACT,CAAC,CAAC,CAAC;YACH,OAAO,aAAW,CAAC;SACpB;aAAM;YACL,OAAO,gBAAgB,CAAC;SACzB;IACH,CAAC;IAEO,wCAAe,GAAvB,UAAwB,IAAiC;QACvD,IAAM,YAAY,GAAG,qBAAqB,CAAC,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QACrE,IAAI,CAAC,YAAY,EAAE;YACjB,OAAO,IAAI,CAAC;SACb;QACD,OAAO,YAAY,aAAZ,YAAY,uBAAZ,YAAY,CAAE,QAAQ,EAAE,CAAC;IAClC,CAAC;IAED;;;;;OAKG;IACK,8CAAqB,GAA7B;QACE,OAAO,IAAI,CAAC,KAAK,CAAC,cAAc,IAAI,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC;IAC9D,CAAC;IAEO,sCAAa,GAArB;QACE,OAAO,CAAC,CACN,IAAI,CAAC,KAAK,CAAC,IAAI;YACf,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS;YACzB,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,SAAU,CAAC,MAAM,CAAC,UAAC,CAAkB,IAAK,OAAA,CAAC,CAAC,IAAK,GAAG,CAAC,EAAX,CAAW,CAAC,CAAC,MAAM,GAAG,CAAC,CAClF,CAAC;IACJ,CAAC;IA1Sa,2BAAY,GAA8B;QACtD,WAAW,EAAE,CAAC;QACd,UAAU,EAAE,IAAI;KACjB,CAAC;IAwTJ,qBAAC;CAAA,AA5TD,CAAoC,KAAK,CAAC,SAAS,GA4TlD;SA5TY,cAAc","sourcesContent":["import * as React from 'react';\nimport { classNamesFunction, getId } from '@fluentui/react/lib/Utilities';\nimport { ScaleOrdinal } from 'd3-scale';\nimport { IProcessedStyleSet } from '@fluentui/react/lib/Styling';\nimport { Callout, DirectionalHint } from '@fluentui/react/lib/Callout';\nimport { FocusZone, FocusZoneDirection, FocusZoneTabbableElements } from '@fluentui/react-focus';\nimport { IAccessibilityProps, ChartHoverCard, ILegend, Legends } from '../../index';\nimport { Pie } from './Pie/index';\nimport { IChartDataPoint, IDonutChartProps, IDonutChartStyleProps, IDonutChartStyles } from './index';\nimport { convertToLocaleString, getAccessibleDataObject, getColorFromToken, getNextColor } from '../../utilities/index';\n\nconst getClassNames = classNamesFunction<IDonutChartStyleProps, IDonutChartStyles>();\nconst LEGEND_CONTAINER_HEIGHT = 40;\n\nexport interface IDonutChartState {\n showHover?: boolean;\n value?: string | undefined;\n legend?: string | undefined;\n _width?: number | undefined;\n _height?: number | undefined;\n activeLegend?: string;\n color?: string | undefined;\n xCalloutValue?: string;\n yCalloutValue?: string;\n focusedArcId?: string;\n selectedLegend: string;\n dataPointCalloutProps?: IChartDataPoint;\n callOutAccessibilityData?: IAccessibilityProps;\n}\n\nexport class DonutChartBase extends React.Component<IDonutChartProps, IDonutChartState> {\n public static defaultProps: Partial<IDonutChartProps> = {\n innerRadius: 0,\n hideLabels: true,\n };\n public _colors: ScaleOrdinal<string, {}>;\n private _classNames: IProcessedStyleSet<IDonutChartStyles>;\n private _rootElem: HTMLElement | null;\n private _uniqText: string;\n /* eslint-disable @typescript-eslint/no-explicit-any */\n private _currentHoverElement: any;\n private _calloutId: string;\n private _calloutAnchorPoint: IChartDataPoint | null;\n private _emptyChartId: string | null;\n\n public static getDerivedStateFromProps(\n nextProps: Readonly<IDonutChartProps>,\n prevState: Readonly<IDonutChartState>,\n ): Partial<IDonutChartState> | null {\n let widthState: { _width: number } | undefined;\n if (nextProps.width && nextProps.width !== prevState._width) {\n widthState = { _width: nextProps.width };\n }\n\n let heightState: { _height: number } | undefined;\n if (nextProps.height && nextProps.height !== prevState._height) {\n heightState = { _height: nextProps.height - LEGEND_CONTAINER_HEIGHT };\n }\n\n return { ...widthState, ...heightState };\n }\n\n constructor(props: IDonutChartProps) {\n super(props);\n this.state = {\n showHover: false,\n value: '',\n legend: '',\n _width: this.props.width || 200,\n _height: this.props.height || 200,\n activeLegend: '',\n color: '',\n xCalloutValue: '',\n yCalloutValue: '',\n selectedLegend: '',\n focusedArcId: '',\n };\n this._hoverCallback = this._hoverCallback.bind(this);\n this._focusCallback = this._focusCallback.bind(this);\n this._hoverLeave = this._hoverLeave.bind(this);\n this._calloutId = getId('callout');\n this._uniqText = getId('_Pie_');\n this._emptyChartId = getId('_DonutChart_empty');\n }\n public componentDidMount(): void {\n if (this._rootElem) {\n this.setState({\n _width: this._rootElem.offsetWidth,\n _height: this._rootElem.offsetHeight - LEGEND_CONTAINER_HEIGHT,\n });\n }\n }\n\n public render(): JSX.Element {\n const { data, hideLegend = false } = this.props;\n const points = this._addDefaultColors(data?.chartData);\n\n this._classNames = getClassNames(this.props.styles!, {\n theme: this.props.theme!,\n width: this.state._width!,\n height: this.state._height!,\n color: this.state.color!,\n className: this.props.className!,\n });\n\n const legendBars = this._createLegends(points);\n const donutMarginHorizontal = this.props.hideLabels ? 0 : 80;\n const donutMarginVertical = this.props.hideLabels ? 0 : 40;\n const outerRadius =\n Math.min(this.state._width! - donutMarginHorizontal, this.state._height! - donutMarginVertical) / 2;\n const chartData = points.filter((d: IChartDataPoint) => d.data! >= 0);\n const valueInsideDonut = this._valueInsideDonut(this.props.valueInsideDonut!, chartData!);\n return !this._isChartEmpty() ? (\n <div\n className={this._classNames.root}\n ref={(rootElem: HTMLElement | null) => (this._rootElem = rootElem)}\n onMouseLeave={this._handleChartMouseLeave}\n >\n <FocusZone direction={FocusZoneDirection.horizontal} handleTabKey={FocusZoneTabbableElements.all}>\n <div>\n <svg\n className={this._classNames.chart}\n aria-label={data?.chartTitle}\n ref={(node: SVGElement | null) => this._setViewBox(node)}\n >\n <Pie\n width={this.state._width!}\n height={this.state._height!}\n outerRadius={outerRadius}\n innerRadius={this.props.innerRadius!}\n data={chartData!}\n onFocusCallback={this._focusCallback}\n hoverOnCallback={this._hoverCallback}\n hoverLeaveCallback={this._hoverLeave}\n uniqText={this._uniqText}\n onBlurCallback={this._onBlur}\n activeArc={this._getHighlightedLegend()}\n focusedArcId={this.state.focusedArcId || ''}\n href={this.props.href!}\n calloutId={this._calloutId}\n valueInsideDonut={this._toLocaleString(valueInsideDonut)}\n theme={this.props.theme!}\n showLabelsInPercent={this.props.showLabelsInPercent}\n hideLabels={this.props.hideLabels}\n />\n </svg>\n </div>\n </FocusZone>\n <Callout\n target={this._currentHoverElement}\n alignTargetEdge={true}\n isBeakVisible={false}\n directionalHint={DirectionalHint.topAutoEdge}\n gapSpace={15}\n hidden={!(!this.props.hideTooltip && this.state.showHover)}\n id={this._calloutId}\n onDismiss={this._closeCallout}\n preventDismissOnLostFocus={true}\n /** Keep the callout updated with details of focused/hovered arc */\n shouldUpdateWhenHidden={true}\n {...this.props.calloutProps!}\n {...getAccessibleDataObject(this.state.callOutAccessibilityData, 'text', false)}\n >\n {this.props.onRenderCalloutPerDataPoint ? (\n this.props.onRenderCalloutPerDataPoint(this.state.dataPointCalloutProps!)\n ) : (\n <ChartHoverCard\n Legend={this.state.xCalloutValue ? this.state.xCalloutValue : this.state.legend}\n YValue={this.state.yCalloutValue ? this.state.yCalloutValue : this.state.value}\n color={this.state.color}\n culture={this.props.culture}\n />\n )}\n </Callout>\n {!hideLegend && <div className={this._classNames.legendContainer}>{legendBars}</div>}\n </div>\n ) : (\n <div\n id={this._emptyChartId!}\n role={'alert'}\n style={{ opacity: '0' }}\n aria-label={'Graph has no data to display'}\n />\n );\n }\n\n private _closeCallout = () => {\n this.setState({\n showHover: false,\n });\n };\n\n private _setViewBox(node: SVGElement | null): void {\n if (node === null) {\n return;\n }\n\n const widthVal = node.parentElement ? node.parentElement.clientWidth : this.state._width;\n\n const heightVal =\n node.parentElement && node.parentElement?.offsetHeight > this.state._height!\n ? node.parentElement?.offsetHeight\n : this.state._height;\n const viewbox = `0 0 ${widthVal!} ${heightVal!}`;\n node.setAttribute('viewBox', viewbox);\n }\n private _createLegends(chartData: IChartDataPoint[]): JSX.Element {\n const legendDataItems = chartData.map((point: IChartDataPoint, index: number) => {\n const color: string = point.color!;\n // mapping data to the format Legends component needs\n const legend: ILegend = {\n title: point.legend!,\n color,\n action: () => {\n if (this.state.selectedLegend === point.legend) {\n this.setState({ selectedLegend: '' });\n } else {\n this.setState({ selectedLegend: point.legend! });\n }\n },\n hoverAction: () => {\n this._handleChartMouseLeave();\n this.setState({ activeLegend: point.legend! });\n },\n onMouseOutAction: () => {\n this.setState({ activeLegend: '' });\n },\n };\n return legend;\n });\n const legends = (\n <Legends\n legends={legendDataItems}\n centerLegends\n overflowProps={this.props.legendsOverflowProps}\n focusZonePropsInHoverCard={this.props.focusZonePropsForLegendsInHoverCard}\n overflowText={this.props.legendsOverflowText}\n {...this.props.legendProps}\n />\n );\n return legends;\n }\n\n private _focusCallback = (data: IChartDataPoint, id: string, element: SVGPathElement): void => {\n this._currentHoverElement = element;\n this.setState({\n /** Show the callout if highlighted arc is focused and Hide it if unhighlighted arc is focused */\n showHover: this.state.selectedLegend === '' || this.state.selectedLegend === data.legend,\n value: data.data!.toString(),\n legend: data.legend,\n color: data.color!,\n xCalloutValue: data.xAxisCalloutData!,\n yCalloutValue: data.yAxisCalloutData!,\n focusedArcId: id,\n dataPointCalloutProps: data,\n callOutAccessibilityData: data.callOutAccessibilityData!,\n });\n };\n\n private _hoverCallback = (data: IChartDataPoint, e: React.MouseEvent<SVGPathElement>): void => {\n if (this._calloutAnchorPoint !== data) {\n this._calloutAnchorPoint = data;\n this._currentHoverElement = e;\n this.setState({\n /** Show the callout if highlighted arc is hovered and Hide it if unhighlighted arc is hovered */\n showHover: this.state.selectedLegend === '' || this.state.selectedLegend === data.legend,\n value: data.data!.toString(),\n legend: data.legend,\n color: data.color!,\n xCalloutValue: data.xAxisCalloutData!,\n yCalloutValue: data.yAxisCalloutData!,\n dataPointCalloutProps: data,\n callOutAccessibilityData: data.callOutAccessibilityData!,\n });\n }\n };\n private _onBlur = (): void => {\n this.setState({ focusedArcId: '' });\n };\n\n private _hoverLeave(): void {\n /**/\n }\n\n private _handleChartMouseLeave = () => {\n this._calloutAnchorPoint = null;\n this.setState({ showHover: false });\n };\n\n private _valueInsideDonut(valueInsideDonut: string | number | undefined, data: IChartDataPoint[]) {\n const highlightedLegend = this._getHighlightedLegend();\n if (valueInsideDonut !== undefined && (highlightedLegend !== '' || this.state.showHover)) {\n let legendValue = valueInsideDonut;\n data!.map((point: IChartDataPoint, index: number) => {\n if (point.legend === highlightedLegend || (this.state.showHover && point.legend === this.state.legend)) {\n legendValue = point.yAxisCalloutData ? point.yAxisCalloutData : point.data!;\n }\n return;\n });\n return legendValue;\n } else {\n return valueInsideDonut;\n }\n }\n\n private _toLocaleString(data: string | number | undefined) {\n const localeString = convertToLocaleString(data, this.props.culture);\n if (!localeString) {\n return data;\n }\n return localeString?.toString();\n }\n\n /**\n * This function returns\n * the selected legend if there is one\n * or the hovered legend if none of the legends is selected.\n * Note: This won't work in case of multiple legends selection.\n */\n private _getHighlightedLegend() {\n return this.state.selectedLegend || this.state.activeLegend;\n }\n\n private _isChartEmpty(): boolean {\n return !(\n this.props.data &&\n this.props.data.chartData &&\n this.props.data.chartData!.filter((d: IChartDataPoint) => d.data! > 0).length > 0\n );\n }\n\n private _addDefaultColors = (donutChartDataPoint?: IChartDataPoint[]): IChartDataPoint[] => {\n return donutChartDataPoint\n ? donutChartDataPoint.map((item, index) => {\n let color: string;\n // isInverted property is applicable to v8 themes only\n if (typeof item.color === 'undefined') {\n color = getNextColor(index, 0, this.props.theme?.isInverted);\n } else {\n color = getColorFromToken(item.color, this.props.theme?.isInverted);\n }\n\n return { ...item, color };\n })\n : [];\n };\n}\n"]}
|
|
1
|
+
{"version":3,"file":"DonutChart.base.js","sourceRoot":"../src/","sources":["components/DonutChart/DonutChart.base.tsx"],"names":[],"mappings":"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","sourcesContent":["import * as React from 'react';\nimport { classNamesFunction, getId } from '@fluentui/react/lib/Utilities';\nimport { ScaleOrdinal } from 'd3-scale';\nimport { IProcessedStyleSet } from '@fluentui/react/lib/Styling';\nimport { Callout, DirectionalHint } from '@fluentui/react/lib/Callout';\nimport { FocusZone, FocusZoneDirection, FocusZoneTabbableElements } from '@fluentui/react-focus';\nimport { IAccessibilityProps, ChartHoverCard, ILegend, Legends } from '../../index';\nimport { Pie } from './Pie/index';\nimport { IChartDataPoint, IDonutChartProps, IDonutChartStyleProps, IDonutChartStyles } from './index';\nimport { getAccessibleDataObject, getColorFromToken, getNextColor } from '../../utilities/index';\nimport { convertToLocaleString } from '../../utilities/locale-util';\n\nconst getClassNames = classNamesFunction<IDonutChartStyleProps, IDonutChartStyles>();\nconst LEGEND_CONTAINER_HEIGHT = 40;\n\nexport interface IDonutChartState {\n showHover?: boolean;\n value?: string | undefined;\n legend?: string | undefined;\n _width?: number | undefined;\n _height?: number | undefined;\n activeLegend?: string;\n color?: string | undefined;\n xCalloutValue?: string;\n yCalloutValue?: string;\n focusedArcId?: string;\n selectedLegend: string;\n dataPointCalloutProps?: IChartDataPoint;\n callOutAccessibilityData?: IAccessibilityProps;\n}\n\nexport class DonutChartBase extends React.Component<IDonutChartProps, IDonutChartState> {\n public static defaultProps: Partial<IDonutChartProps> = {\n innerRadius: 0,\n hideLabels: true,\n };\n public _colors: ScaleOrdinal<string, {}>;\n private _classNames: IProcessedStyleSet<IDonutChartStyles>;\n private _rootElem: HTMLElement | null;\n private _uniqText: string;\n /* eslint-disable @typescript-eslint/no-explicit-any */\n private _currentHoverElement: any;\n private _calloutId: string;\n private _calloutAnchorPoint: IChartDataPoint | null;\n private _emptyChartId: string | null;\n\n public static getDerivedStateFromProps(\n nextProps: Readonly<IDonutChartProps>,\n prevState: Readonly<IDonutChartState>,\n ): Partial<IDonutChartState> | null {\n let widthState: { _width: number } | undefined;\n if (nextProps.width && nextProps.width !== prevState._width) {\n widthState = { _width: nextProps.width };\n }\n\n let heightState: { _height: number } | undefined;\n if (nextProps.height && nextProps.height !== prevState._height) {\n heightState = { _height: nextProps.height - LEGEND_CONTAINER_HEIGHT };\n }\n\n return { ...widthState, ...heightState };\n }\n\n constructor(props: IDonutChartProps) {\n super(props);\n this.state = {\n showHover: false,\n value: '',\n legend: '',\n _width: this.props.width || 200,\n _height: this.props.height || 200,\n activeLegend: '',\n color: '',\n xCalloutValue: '',\n yCalloutValue: '',\n selectedLegend: '',\n focusedArcId: '',\n };\n this._hoverCallback = this._hoverCallback.bind(this);\n this._focusCallback = this._focusCallback.bind(this);\n this._hoverLeave = this._hoverLeave.bind(this);\n this._calloutId = getId('callout');\n this._uniqText = getId('_Pie_');\n this._emptyChartId = getId('_DonutChart_empty');\n }\n public componentDidMount(): void {\n if (this._rootElem) {\n this.setState({\n _width: this._rootElem.offsetWidth,\n _height: this._rootElem.offsetHeight - LEGEND_CONTAINER_HEIGHT,\n });\n }\n }\n\n public render(): JSX.Element {\n const { data, hideLegend = false } = this.props;\n const points = this._addDefaultColors(data?.chartData);\n\n this._classNames = getClassNames(this.props.styles!, {\n theme: this.props.theme!,\n width: this.state._width!,\n height: this.state._height!,\n color: this.state.color!,\n className: this.props.className!,\n });\n\n const legendBars = this._createLegends(points);\n const donutMarginHorizontal = this.props.hideLabels ? 0 : 80;\n const donutMarginVertical = this.props.hideLabels ? 0 : 40;\n const outerRadius =\n Math.min(this.state._width! - donutMarginHorizontal, this.state._height! - donutMarginVertical) / 2;\n const chartData = points.filter((d: IChartDataPoint) => d.data! >= 0);\n const valueInsideDonut = this._valueInsideDonut(this.props.valueInsideDonut!, chartData!);\n return !this._isChartEmpty() ? (\n <div\n className={this._classNames.root}\n ref={(rootElem: HTMLElement | null) => (this._rootElem = rootElem)}\n onMouseLeave={this._handleChartMouseLeave}\n >\n <FocusZone direction={FocusZoneDirection.horizontal} handleTabKey={FocusZoneTabbableElements.all}>\n <div>\n <svg\n className={this._classNames.chart}\n aria-label={data?.chartTitle}\n ref={(node: SVGElement | null) => this._setViewBox(node)}\n >\n <Pie\n width={this.state._width!}\n height={this.state._height!}\n outerRadius={outerRadius}\n innerRadius={this.props.innerRadius!}\n data={chartData!}\n onFocusCallback={this._focusCallback}\n hoverOnCallback={this._hoverCallback}\n hoverLeaveCallback={this._hoverLeave}\n uniqText={this._uniqText}\n onBlurCallback={this._onBlur}\n activeArc={this._getHighlightedLegend()}\n focusedArcId={this.state.focusedArcId || ''}\n href={this.props.href!}\n calloutId={this._calloutId}\n valueInsideDonut={this._toLocaleString(valueInsideDonut)}\n theme={this.props.theme!}\n showLabelsInPercent={this.props.showLabelsInPercent}\n hideLabels={this.props.hideLabels}\n />\n </svg>\n </div>\n </FocusZone>\n <Callout\n target={this._currentHoverElement}\n alignTargetEdge={true}\n isBeakVisible={false}\n directionalHint={DirectionalHint.topAutoEdge}\n gapSpace={15}\n hidden={!(!this.props.hideTooltip && this.state.showHover)}\n id={this._calloutId}\n onDismiss={this._closeCallout}\n preventDismissOnLostFocus={true}\n /** Keep the callout updated with details of focused/hovered arc */\n shouldUpdateWhenHidden={true}\n {...this.props.calloutProps!}\n {...getAccessibleDataObject(this.state.callOutAccessibilityData, 'text', false)}\n >\n {this.props.onRenderCalloutPerDataPoint ? (\n this.props.onRenderCalloutPerDataPoint(this.state.dataPointCalloutProps!)\n ) : (\n <ChartHoverCard\n Legend={this.state.xCalloutValue ? this.state.xCalloutValue : this.state.legend}\n YValue={this.state.yCalloutValue ? this.state.yCalloutValue : this.state.value}\n color={this.state.color}\n culture={this.props.culture}\n />\n )}\n </Callout>\n {!hideLegend && <div className={this._classNames.legendContainer}>{legendBars}</div>}\n </div>\n ) : (\n <div\n id={this._emptyChartId!}\n role={'alert'}\n style={{ opacity: '0' }}\n aria-label={'Graph has no data to display'}\n />\n );\n }\n\n private _closeCallout = () => {\n this.setState({\n showHover: false,\n });\n };\n\n private _setViewBox(node: SVGElement | null): void {\n if (node === null) {\n return;\n }\n\n const widthVal = node.parentElement ? node.parentElement.clientWidth : this.state._width;\n\n const heightVal =\n node.parentElement && node.parentElement?.offsetHeight > this.state._height!\n ? node.parentElement?.offsetHeight\n : this.state._height;\n const viewbox = `0 0 ${widthVal!} ${heightVal!}`;\n node.setAttribute('viewBox', viewbox);\n }\n private _createLegends(chartData: IChartDataPoint[]): JSX.Element {\n const legendDataItems = chartData.map((point: IChartDataPoint, index: number) => {\n const color: string = point.color!;\n // mapping data to the format Legends component needs\n const legend: ILegend = {\n title: point.legend!,\n color,\n action: () => {\n if (this.state.selectedLegend === point.legend) {\n this.setState({ selectedLegend: '' });\n } else {\n this.setState({ selectedLegend: point.legend! });\n }\n },\n hoverAction: () => {\n this._handleChartMouseLeave();\n this.setState({ activeLegend: point.legend! });\n },\n onMouseOutAction: () => {\n this.setState({ activeLegend: '' });\n },\n };\n return legend;\n });\n const legends = (\n <Legends\n legends={legendDataItems}\n centerLegends\n overflowProps={this.props.legendsOverflowProps}\n focusZonePropsInHoverCard={this.props.focusZonePropsForLegendsInHoverCard}\n overflowText={this.props.legendsOverflowText}\n {...this.props.legendProps}\n />\n );\n return legends;\n }\n\n private _focusCallback = (data: IChartDataPoint, id: string, element: SVGPathElement): void => {\n this._currentHoverElement = element;\n this.setState({\n /** Show the callout if highlighted arc is focused and Hide it if unhighlighted arc is focused */\n showHover: this.state.selectedLegend === '' || this.state.selectedLegend === data.legend,\n value: data.data!.toString(),\n legend: data.legend,\n color: data.color!,\n xCalloutValue: data.xAxisCalloutData!,\n yCalloutValue: data.yAxisCalloutData!,\n focusedArcId: id,\n dataPointCalloutProps: data,\n callOutAccessibilityData: data.callOutAccessibilityData!,\n });\n };\n\n private _hoverCallback = (data: IChartDataPoint, e: React.MouseEvent<SVGPathElement>): void => {\n if (this._calloutAnchorPoint !== data) {\n this._calloutAnchorPoint = data;\n this._currentHoverElement = e;\n this.setState({\n /** Show the callout if highlighted arc is hovered and Hide it if unhighlighted arc is hovered */\n showHover: this.state.selectedLegend === '' || this.state.selectedLegend === data.legend,\n value: data.data!.toString(),\n legend: data.legend,\n color: data.color!,\n xCalloutValue: data.xAxisCalloutData!,\n yCalloutValue: data.yAxisCalloutData!,\n dataPointCalloutProps: data,\n callOutAccessibilityData: data.callOutAccessibilityData!,\n });\n }\n };\n private _onBlur = (): void => {\n this.setState({ focusedArcId: '' });\n };\n\n private _hoverLeave(): void {\n /**/\n }\n\n private _handleChartMouseLeave = () => {\n this._calloutAnchorPoint = null;\n this.setState({ showHover: false });\n };\n\n private _valueInsideDonut(valueInsideDonut: string | number | undefined, data: IChartDataPoint[]) {\n const highlightedLegend = this._getHighlightedLegend();\n if (valueInsideDonut !== undefined && (highlightedLegend !== '' || this.state.showHover)) {\n let legendValue = valueInsideDonut;\n data!.map((point: IChartDataPoint, index: number) => {\n if (point.legend === highlightedLegend || (this.state.showHover && point.legend === this.state.legend)) {\n legendValue = point.yAxisCalloutData ? point.yAxisCalloutData : point.data!;\n }\n return;\n });\n return legendValue;\n } else {\n return valueInsideDonut;\n }\n }\n\n private _toLocaleString(data: string | number | undefined) {\n const localeString = convertToLocaleString(data, this.props.culture);\n if (!localeString) {\n return data;\n }\n return localeString?.toString();\n }\n\n /**\n * This function returns\n * the selected legend if there is one\n * or the hovered legend if none of the legends is selected.\n * Note: This won't work in case of multiple legends selection.\n */\n private _getHighlightedLegend() {\n return this.state.selectedLegend || this.state.activeLegend;\n }\n\n private _isChartEmpty(): boolean {\n return !(\n this.props.data &&\n this.props.data.chartData &&\n this.props.data.chartData!.filter((d: IChartDataPoint) => d.data! > 0).length > 0\n );\n }\n\n private _addDefaultColors = (donutChartDataPoint?: IChartDataPoint[]): IChartDataPoint[] => {\n return donutChartDataPoint\n ? donutChartDataPoint.map((item, index) => {\n let color: string;\n // isInverted property is applicable to v8 themes only\n if (typeof item.color === 'undefined') {\n color = getNextColor(index, 0, this.props.theme?.isInverted);\n } else {\n color = getColorFromToken(item.color, this.props.theme?.isInverted);\n }\n\n return { ...item, color };\n })\n : [];\n };\n}\n"]}
|
|
@@ -3,7 +3,8 @@ import * as React from 'react';
|
|
|
3
3
|
import { arc as d3Arc } from 'd3-shape';
|
|
4
4
|
import { classNamesFunction, getRTL } from '@fluentui/react/lib/Utilities';
|
|
5
5
|
import { GaugeValueFormat, GaugeChartVariant, } from './GaugeChart.types';
|
|
6
|
-
import {
|
|
6
|
+
import { convertToLocaleString } from '../../utilities/locale-util';
|
|
7
|
+
import { Points, formatValueWithSIPrefix, getAccessibleDataObject, getColorFromToken, getNextColor, pointTypes, } from '../../utilities/index';
|
|
7
8
|
import { Legends, Shape } from '../Legends/index';
|
|
8
9
|
import { FocusZone, FocusZoneDirection } from '@fluentui/react-focus';
|
|
9
10
|
import { Callout, DirectionalHint } from '@fluentui/react/lib/Callout';
|