@fluentui/react-charting 5.24.39 → 5.25.0
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 +60 -1
- package/CHANGELOG.md +21 -2
- package/dist/react-charting.d.ts +127 -0
- package/dist/react-charting.js +1 -1
- package/dist/react-charting.min.js +1 -1
- package/etc/react-charting.api.md +74 -0
- package/lib/components/CommonComponents/Annotations/ChartAnnotationLayer.d.ts +3 -0
- package/lib/components/CommonComponents/Annotations/ChartAnnotationLayer.js +343 -0
- package/lib/components/CommonComponents/Annotations/ChartAnnotationLayer.js.map +1 -0
- package/lib/components/CommonComponents/Annotations/ChartAnnotationLayer.styles.d.ts +28 -0
- package/lib/components/CommonComponents/Annotations/ChartAnnotationLayer.styles.js +111 -0
- package/lib/components/CommonComponents/Annotations/ChartAnnotationLayer.styles.js.map +1 -0
- package/lib/components/CommonComponents/Annotations/ChartAnnotationLayer.types.d.ts +52 -0
- package/lib/components/CommonComponents/Annotations/ChartAnnotationLayer.types.js +2 -0
- package/lib/components/CommonComponents/Annotations/ChartAnnotationLayer.types.js.map +1 -0
- package/lib/components/CommonComponents/CartesianChart.base.js +38 -46
- package/lib/components/CommonComponents/CartesianChart.base.js.map +1 -1
- package/lib/components/CommonComponents/CartesianChart.styles.js +9 -1
- package/lib/components/CommonComponents/CartesianChart.styles.js.map +1 -1
- package/lib/components/CommonComponents/CartesianChart.types.d.ts +17 -1
- package/lib/components/CommonComponents/CartesianChart.types.js.map +1 -1
- package/lib/components/CommonComponents/index.d.ts +2 -0
- package/lib/components/CommonComponents/index.js +2 -0
- package/lib/components/CommonComponents/index.js.map +1 -1
- package/lib/components/DeclarativeChart/PlotlySchemaAdapter.js +641 -76
- package/lib/components/DeclarativeChart/PlotlySchemaAdapter.js.map +1 -1
- package/lib/index.d.ts +1 -1
- package/lib/index.js.map +1 -1
- package/lib/types/IChartAnnotation.d.ts +99 -0
- package/lib/types/IChartAnnotation.js +2 -0
- package/lib/types/IChartAnnotation.js.map +1 -0
- package/lib/types/IDataPoint.d.ts +4 -0
- package/lib/types/IDataPoint.js.map +1 -1
- package/lib/types/index.d.ts +1 -0
- package/lib/types/index.js +1 -0
- package/lib/types/index.js.map +1 -1
- package/lib/utilities/image-export-utils.js +55 -0
- package/lib/utilities/image-export-utils.js.map +1 -1
- package/lib/utilities/utilities.js +72 -20
- package/lib/utilities/utilities.js.map +1 -1
- package/lib-amd/components/CommonComponents/Annotations/ChartAnnotationLayer.d.ts +3 -0
- package/lib-amd/components/CommonComponents/Annotations/ChartAnnotationLayer.js +344 -0
- package/lib-amd/components/CommonComponents/Annotations/ChartAnnotationLayer.js.map +1 -0
- package/lib-amd/components/CommonComponents/Annotations/ChartAnnotationLayer.styles.d.ts +28 -0
- package/lib-amd/components/CommonComponents/Annotations/ChartAnnotationLayer.styles.js +119 -0
- package/lib-amd/components/CommonComponents/Annotations/ChartAnnotationLayer.styles.js.map +1 -0
- package/lib-amd/components/CommonComponents/Annotations/ChartAnnotationLayer.types.d.ts +52 -0
- package/lib-amd/components/CommonComponents/Annotations/ChartAnnotationLayer.types.js +5 -0
- package/lib-amd/components/CommonComponents/Annotations/ChartAnnotationLayer.types.js.map +1 -0
- package/lib-amd/components/CommonComponents/CartesianChart.base.js +38 -47
- package/lib-amd/components/CommonComponents/CartesianChart.base.js.map +1 -1
- package/lib-amd/components/CommonComponents/CartesianChart.styles.js +9 -1
- package/lib-amd/components/CommonComponents/CartesianChart.styles.js.map +1 -1
- package/lib-amd/components/CommonComponents/CartesianChart.types.d.ts +17 -1
- package/lib-amd/components/CommonComponents/CartesianChart.types.js.map +1 -1
- package/lib-amd/components/CommonComponents/index.d.ts +2 -0
- package/lib-amd/components/CommonComponents/index.js +3 -1
- package/lib-amd/components/CommonComponents/index.js.map +1 -1
- package/lib-amd/components/DeclarativeChart/PlotlySchemaAdapter.js +641 -76
- package/lib-amd/components/DeclarativeChart/PlotlySchemaAdapter.js.map +1 -1
- package/lib-amd/index.d.ts +1 -1
- package/lib-amd/index.js.map +1 -1
- package/lib-amd/types/IChartAnnotation.d.ts +99 -0
- package/lib-amd/types/IChartAnnotation.js +5 -0
- package/lib-amd/types/IChartAnnotation.js.map +1 -0
- package/lib-amd/types/IDataPoint.d.ts +4 -0
- package/lib-amd/types/IDataPoint.js.map +1 -1
- package/lib-amd/types/index.d.ts +1 -0
- package/lib-amd/types/index.js +2 -1
- package/lib-amd/types/index.js.map +1 -1
- package/lib-amd/utilities/image-export-utils.js +55 -0
- package/lib-amd/utilities/image-export-utils.js.map +1 -1
- package/lib-amd/utilities/utilities.js +72 -20
- package/lib-amd/utilities/utilities.js.map +1 -1
- package/lib-commonjs/components/CommonComponents/Annotations/ChartAnnotationLayer.d.ts +3 -0
- package/lib-commonjs/components/CommonComponents/Annotations/ChartAnnotationLayer.js +346 -0
- package/lib-commonjs/components/CommonComponents/Annotations/ChartAnnotationLayer.js.map +1 -0
- package/lib-commonjs/components/CommonComponents/Annotations/ChartAnnotationLayer.styles.d.ts +28 -0
- package/lib-commonjs/components/CommonComponents/Annotations/ChartAnnotationLayer.styles.js +118 -0
- package/lib-commonjs/components/CommonComponents/Annotations/ChartAnnotationLayer.styles.js.map +1 -0
- package/lib-commonjs/components/CommonComponents/Annotations/ChartAnnotationLayer.types.d.ts +52 -0
- package/lib-commonjs/components/CommonComponents/Annotations/ChartAnnotationLayer.types.js +3 -0
- package/lib-commonjs/components/CommonComponents/Annotations/ChartAnnotationLayer.types.js.map +1 -0
- package/lib-commonjs/components/CommonComponents/CartesianChart.base.js +38 -46
- package/lib-commonjs/components/CommonComponents/CartesianChart.base.js.map +1 -1
- package/lib-commonjs/components/CommonComponents/CartesianChart.styles.js +9 -1
- package/lib-commonjs/components/CommonComponents/CartesianChart.styles.js.map +1 -1
- package/lib-commonjs/components/CommonComponents/CartesianChart.types.d.ts +17 -1
- package/lib-commonjs/components/CommonComponents/CartesianChart.types.js.map +1 -1
- package/lib-commonjs/components/CommonComponents/index.d.ts +2 -0
- package/lib-commonjs/components/CommonComponents/index.js +2 -0
- package/lib-commonjs/components/CommonComponents/index.js.map +1 -1
- package/lib-commonjs/components/DeclarativeChart/PlotlySchemaAdapter.js +641 -76
- package/lib-commonjs/components/DeclarativeChart/PlotlySchemaAdapter.js.map +1 -1
- package/lib-commonjs/index.d.ts +1 -1
- package/lib-commonjs/index.js.map +1 -1
- package/lib-commonjs/types/IChartAnnotation.d.ts +99 -0
- package/lib-commonjs/types/IChartAnnotation.js +3 -0
- package/lib-commonjs/types/IChartAnnotation.js.map +1 -0
- package/lib-commonjs/types/IDataPoint.d.ts +4 -0
- package/lib-commonjs/types/IDataPoint.js.map +1 -1
- package/lib-commonjs/types/index.d.ts +1 -0
- package/lib-commonjs/types/index.js +1 -0
- package/lib-commonjs/types/index.js.map +1 -1
- package/lib-commonjs/utilities/image-export-utils.js +55 -0
- package/lib-commonjs/utilities/image-export-utils.js.map +1 -1
- package/lib-commonjs/utilities/utilities.js +72 -20
- package/lib-commonjs/utilities/utilities.js.map +1 -1
- package/package.json +9 -9
- package/src/components/CommonComponents/Annotations/ChartAnnotationLayer.types.ts +58 -0
- package/src/components/CommonComponents/CartesianChart.types.ts +21 -0
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
import { ITheme } from '@fluentui/react/lib/Styling';
|
|
2
|
+
import { IChartAnnotation, ChartAnnotationArrowHead } from '../../../types/IChartAnnotation';
|
|
3
|
+
export interface IAnnotationPoint {
|
|
4
|
+
x: number;
|
|
5
|
+
y: number;
|
|
6
|
+
}
|
|
7
|
+
export interface IAnnotationPlotRect {
|
|
8
|
+
x: number;
|
|
9
|
+
y: number;
|
|
10
|
+
width: number;
|
|
11
|
+
height: number;
|
|
12
|
+
}
|
|
13
|
+
export interface IChartAnnotationContext {
|
|
14
|
+
/** Rectangle describing the drawable area of the chart (without margins) */
|
|
15
|
+
plotRect: IAnnotationPlotRect;
|
|
16
|
+
/** Size of the owning SVG element */
|
|
17
|
+
svgRect: {
|
|
18
|
+
width: number;
|
|
19
|
+
height: number;
|
|
20
|
+
};
|
|
21
|
+
/** Indicates if layout should be mirrored */
|
|
22
|
+
isRtl?: boolean;
|
|
23
|
+
/** Primary x scale mapping data domain to pixels */
|
|
24
|
+
xScale?: (value: any) => number;
|
|
25
|
+
/** Primary y scale mapping data domain to pixels */
|
|
26
|
+
yScalePrimary?: (value: any) => number;
|
|
27
|
+
/** Secondary y scale when present */
|
|
28
|
+
yScaleSecondary?: (value: any) => number;
|
|
29
|
+
}
|
|
30
|
+
export interface IChartAnnotationLayerProps {
|
|
31
|
+
annotations?: IChartAnnotation[];
|
|
32
|
+
context: IChartAnnotationContext;
|
|
33
|
+
theme: ITheme;
|
|
34
|
+
className?: string;
|
|
35
|
+
}
|
|
36
|
+
export interface IResolvedAnnotationPosition {
|
|
37
|
+
/** Final absolute position after applying layout and offsets */
|
|
38
|
+
point: IAnnotationPoint;
|
|
39
|
+
/** Raw anchor position before offsets (used for connectors) */
|
|
40
|
+
anchor: IAnnotationPoint;
|
|
41
|
+
}
|
|
42
|
+
export type ConnectorRenderData = {
|
|
43
|
+
key: string;
|
|
44
|
+
start: IAnnotationPoint;
|
|
45
|
+
end: IAnnotationPoint;
|
|
46
|
+
strokeColor: string;
|
|
47
|
+
strokeWidth: number;
|
|
48
|
+
dashArray?: string;
|
|
49
|
+
arrow: ChartAnnotationArrowHead;
|
|
50
|
+
markerSize: number;
|
|
51
|
+
markerStrokeWidth: number;
|
|
52
|
+
};
|
package/lib-commonjs/components/CommonComponents/Annotations/ChartAnnotationLayer.types.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ChartAnnotationLayer.types.js","sourceRoot":"../src/","sources":["components/CommonComponents/Annotations/ChartAnnotationLayer.types.ts"],"names":[],"mappings":"","sourcesContent":["import { ITheme } from '@fluentui/react/lib/Styling';\nimport { IChartAnnotation, ChartAnnotationArrowHead } from '../../../types/IChartAnnotation';\n\nexport interface IAnnotationPoint {\n x: number;\n y: number;\n}\n\nexport interface IAnnotationPlotRect {\n x: number;\n y: number;\n width: number;\n height: number;\n}\n\nexport interface IChartAnnotationContext {\n /** Rectangle describing the drawable area of the chart (without margins) */\n plotRect: IAnnotationPlotRect;\n /** Size of the owning SVG element */\n svgRect: { width: number; height: number };\n /** Indicates if layout should be mirrored */\n isRtl?: boolean;\n /** Primary x scale mapping data domain to pixels */\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n xScale?: (value: any) => number;\n /** Primary y scale mapping data domain to pixels */\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n yScalePrimary?: (value: any) => number;\n /** Secondary y scale when present */\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n yScaleSecondary?: (value: any) => number;\n}\n\nexport interface IChartAnnotationLayerProps {\n annotations?: IChartAnnotation[];\n context: IChartAnnotationContext;\n theme: ITheme;\n className?: string;\n}\n\nexport interface IResolvedAnnotationPosition {\n /** Final absolute position after applying layout and offsets */\n point: IAnnotationPoint;\n /** Raw anchor position before offsets (used for connectors) */\n anchor: IAnnotationPoint;\n}\n\nexport type ConnectorRenderData = {\n key: string;\n start: IAnnotationPoint;\n end: IAnnotationPoint;\n strokeColor: string;\n strokeWidth: number;\n dashArray?: string;\n arrow: ChartAnnotationArrowHead;\n markerSize: number;\n markerStrokeWidth: number;\n};\n"]}
|
|
@@ -11,6 +11,7 @@ var chart_utilities_1 = require("@fluentui/chart-utilities");
|
|
|
11
11
|
var index_1 = require("../../utilities/index");
|
|
12
12
|
var index_2 = require("../Legends/index");
|
|
13
13
|
var SVGTooltipText_1 = require("../../utilities/SVGTooltipText");
|
|
14
|
+
var ChartAnnotationLayer_1 = require("./Annotations/ChartAnnotationLayer");
|
|
14
15
|
var getClassNames = (0, Utilities_1.classNamesFunction)();
|
|
15
16
|
var ChartHoverCard = React.lazy(function () {
|
|
16
17
|
return Promise.resolve().then(function () { return require('../../utilities/ChartHoverCard/ChartHoverCard'); }).then(function (module) { return ({ default: module.ChartHoverCard }); });
|
|
@@ -305,8 +306,8 @@ var CartesianChartBase = /** @class */ (function (_super) {
|
|
|
305
306
|
CartesianChartBase.prototype.render = function () {
|
|
306
307
|
var _a, _b, _c, _d;
|
|
307
308
|
var _this = this;
|
|
308
|
-
var _e, _f, _g, _h, _j, _k
|
|
309
|
-
var
|
|
309
|
+
var _e, _f, _g, _h, _j, _k;
|
|
310
|
+
var _l = this.props, calloutProps = _l.calloutProps, points = _l.points, chartType = _l.chartType, chartHoverProps = _l.chartHoverProps, svgFocusZoneProps = _l.svgFocusZoneProps, svgProps = _l.svgProps, culture = _l.culture, dateLocalizeOptions = _l.dateLocalizeOptions, timeFormatLocale = _l.timeFormatLocale, customDateTimeFormatter = _l.customDateTimeFormatter;
|
|
310
311
|
if (this.props.parentRef) {
|
|
311
312
|
this._fitParentContainer();
|
|
312
313
|
}
|
|
@@ -332,36 +333,24 @@ var CartesianChartBase = /** @class */ (function (_super) {
|
|
|
332
333
|
});
|
|
333
334
|
// eslint-disable-next-line @typescript-eslint/no-deprecated
|
|
334
335
|
var callout = null;
|
|
336
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
337
|
+
var yScalePrimary;
|
|
338
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
339
|
+
var yScaleSecondary;
|
|
335
340
|
var children = null;
|
|
336
341
|
if ((this.props.enableFirstRenderOptimization && this.chartContainer) ||
|
|
337
342
|
!this.props.enableFirstRenderOptimization) {
|
|
338
343
|
this._isFirstRender = false;
|
|
339
|
-
var XAxisParams = {
|
|
340
|
-
domainNRangeValues: this.props.getDomainNRangeValues(points, this.props.getDomainMargins ? this.props.getDomainMargins(this.state.containerWidth) : this.margins, this.state.containerWidth, chartType, this._isRtl, this.props.xAxisType, this.props.barwidth, this.props.tickValues,
|
|
344
|
+
var XAxisParams = tslib_1.__assign({ domainNRangeValues: this.props.getDomainNRangeValues(points, this.props.getDomainMargins ? this.props.getDomainMargins(this.state.containerWidth) : this.margins, this.state.containerWidth, chartType, this._isRtl, this.props.xAxisType, this.props.barwidth, this.props.tickValues,
|
|
341
345
|
// This is only used for Horizontal Bar Chart with Axis for y as string axis
|
|
342
|
-
this.state.startFromX),
|
|
346
|
+
this.state.startFromX),
|
|
343
347
|
// FIXME: In XAxisParams, containerHeight is used by HBWA to generate vertical gridlines.
|
|
344
348
|
// Since the x-axis in HBWA is numeric, it typically doesn't require transformation.
|
|
345
349
|
// However, if transformation props are enabled, the updated _removalValueForTextTuncate
|
|
346
350
|
// will only be available in the next render, as it's set after the axis is created.
|
|
347
351
|
// Solution: Delay the creation of gridlines until after the transformation has been applied,
|
|
348
352
|
// or precompute the required height for transformed labels (_removalValueForTextTuncate).
|
|
349
|
-
containerHeight: this.state.containerHeight - this._removalValueForTextTuncate,
|
|
350
|
-
margins: this.margins,
|
|
351
|
-
xAxisElement: this.xAxisElement,
|
|
352
|
-
showRoundOffXTickValues: (_e = this.props.showRoundOffXTickValues) !== null && _e !== void 0 ? _e : true,
|
|
353
|
-
xAxisCount: this.props.xAxisTickCount,
|
|
354
|
-
xAxistickSize: this.props.xAxistickSize,
|
|
355
|
-
tickPadding: this.props.tickPadding || this.props.showXAxisLablesTooltip ? 5 : 10,
|
|
356
|
-
xAxisPadding: this.props.xAxisPadding,
|
|
357
|
-
xAxisInnerPadding: this.props.xAxisInnerPadding,
|
|
358
|
-
xAxisOuterPadding: this.props.xAxisOuterPadding,
|
|
359
|
-
containerWidth: this.state.containerWidth,
|
|
360
|
-
hideTickOverlap: this.props.hideTickOverlap,
|
|
361
|
-
calcMaxLabelWidth: this._calcMaxLabelWidthWithTransform,
|
|
362
|
-
tickStep: (_f = this.props.xAxis) === null || _f === void 0 ? void 0 : _f.tickStep,
|
|
363
|
-
tick0: (_g = this.props.xAxis) === null || _g === void 0 ? void 0 : _g.tick0,
|
|
364
|
-
};
|
|
353
|
+
containerHeight: this.state.containerHeight - this._removalValueForTextTuncate, margins: this.margins, xAxisElement: this.xAxisElement, showRoundOffXTickValues: (_e = this.props.showRoundOffXTickValues) !== null && _e !== void 0 ? _e : true, xAxisCount: this.props.xAxisTickCount, xAxistickSize: this.props.xAxistickSize, tickPadding: this.props.tickPadding || this.props.showXAxisLablesTooltip ? 5 : 10, xAxisPadding: this.props.xAxisPadding, xAxisInnerPadding: this.props.xAxisInnerPadding, xAxisOuterPadding: this.props.xAxisOuterPadding, containerWidth: this.state.containerWidth, hideTickOverlap: this.props.hideTickOverlap, calcMaxLabelWidth: this._calcMaxLabelWidthWithTransform }, this.props.xAxis);
|
|
365
354
|
/**
|
|
366
355
|
* These scales used for 2 purposes.
|
|
367
356
|
* 1. To create x and y axis
|
|
@@ -387,36 +376,17 @@ var CartesianChartBase = /** @class */ (function (_super) {
|
|
|
387
376
|
this._xScale = xScale;
|
|
388
377
|
this._tickValues = tickValues;
|
|
389
378
|
this._transformXAxisLabels();
|
|
390
|
-
var YAxisParams = {
|
|
391
|
-
margins: this.props.getYDomainMargins ? this.props.getYDomainMargins(this.state.containerHeight) : this.margins,
|
|
392
|
-
containerWidth: this.state.containerWidth,
|
|
393
|
-
containerHeight: this.state.containerHeight - this._removalValueForTextTuncate,
|
|
394
|
-
yAxisElement: this.yAxisElement,
|
|
395
|
-
yAxisTickFormat: this.props.yAxisTickFormat,
|
|
396
|
-
yAxisTickCount: this.props.yAxisTickCount,
|
|
397
|
-
yMinValue: this.props.yMinValue || 0,
|
|
398
|
-
yMaxValue: this.props.yMaxValue || 0,
|
|
399
|
-
tickPadding: 10,
|
|
400
|
-
maxOfYVal: this.props.maxOfYVal,
|
|
401
|
-
yMinMaxValues: this.props.getMinMaxOfYAxis(points, this.props.yAxisType),
|
|
379
|
+
var YAxisParams = tslib_1.__assign({ margins: this.props.getYDomainMargins ? this.props.getYDomainMargins(this.state.containerHeight) : this.margins, containerWidth: this.state.containerWidth, containerHeight: this.state.containerHeight - this._removalValueForTextTuncate, yAxisElement: this.yAxisElement, yAxisTickFormat: this.props.yAxisTickFormat, yAxisTickCount: this.props.yAxisTickCount, yMinValue: this.props.yMinValue || 0, yMaxValue: this.props.yMaxValue || 0, tickPadding: 10, maxOfYVal: this.props.maxOfYVal, yMinMaxValues: this.props.getMinMaxOfYAxis(points, this.props.yAxisType),
|
|
402
380
|
// please note these padding default values must be consistent in here
|
|
403
381
|
// and the parent chart(HBWA/Vertical etc..) for more details refer example
|
|
404
382
|
// http://using-d3js.com/04_07_ordinal_scales.html
|
|
405
|
-
yAxisPadding: this.props.yAxisPadding || 0,
|
|
406
|
-
tickValues: this.props.yAxisTickValues,
|
|
407
|
-
tickStep: (_h = this.props.yAxis) === null || _h === void 0 ? void 0 : _h.tickStep,
|
|
408
|
-
tick0: (_j = this.props.yAxis) === null || _j === void 0 ? void 0 : _j.tick0,
|
|
409
|
-
};
|
|
383
|
+
yAxisPadding: this.props.yAxisPadding || 0, tickValues: this.props.yAxisTickValues }, this.props.yAxis);
|
|
410
384
|
/**
|
|
411
385
|
* These scales used for 2 purposes.
|
|
412
386
|
* 1. To create x and y axis
|
|
413
387
|
* 2. To draw the graph.
|
|
414
388
|
* For area/line chart using same scales. For other charts, creating their own scales to draw the graph.
|
|
415
389
|
*/
|
|
416
|
-
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
417
|
-
var yScalePrimary = void 0;
|
|
418
|
-
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
419
|
-
var yScaleSecondary = void 0;
|
|
420
390
|
var axisData = { yAxisDomainValues: [] };
|
|
421
391
|
if (this.props.yAxisType && this.props.yAxisType === index_1.YAxisType.StringAxis) {
|
|
422
392
|
yScalePrimary = this.props.createStringYAxis(YAxisParams, this.props.stringDatasetForYAxisDomain, this._isRtl, this.props.barwidth, this.props.chartType);
|
|
@@ -427,7 +397,7 @@ var CartesianChartBase = /** @class */ (function (_super) {
|
|
|
427
397
|
// rendering the secondary y-axis. Therefore, rather than checking the secondaryYScaleOptions
|
|
428
398
|
// prop to determine whether to create a secondary y-axis, it's more appropriate to check if any
|
|
429
399
|
// data points are assigned to use the secondary y-scale.
|
|
430
|
-
if ((
|
|
400
|
+
if ((_f = this.props) === null || _f === void 0 ? void 0 : _f.secondaryYScaleOptions) {
|
|
431
401
|
var YAxisParamsSecondary = {
|
|
432
402
|
margins: this.margins,
|
|
433
403
|
containerWidth: this.state.containerWidth,
|
|
@@ -435,8 +405,8 @@ var CartesianChartBase = /** @class */ (function (_super) {
|
|
|
435
405
|
yAxisElement: this.yAxisElementSecondary,
|
|
436
406
|
yAxisTickFormat: this.props.yAxisTickFormat,
|
|
437
407
|
yAxisTickCount: this.props.yAxisTickCount,
|
|
438
|
-
yMinValue: ((
|
|
439
|
-
yMaxValue: (
|
|
408
|
+
yMinValue: ((_g = this.props.secondaryYScaleOptions) === null || _g === void 0 ? void 0 : _g.yMinValue) || 0,
|
|
409
|
+
yMaxValue: (_j = (_h = this.props.secondaryYScaleOptions) === null || _h === void 0 ? void 0 : _h.yMaxValue) !== null && _j !== void 0 ? _j : 100,
|
|
440
410
|
tickPadding: 10,
|
|
441
411
|
yMinMaxValues: this.props.getMinMaxOfYAxis(points, this.props.yAxisType, true),
|
|
442
412
|
yAxisPadding: this.props.yAxisPadding,
|
|
@@ -490,6 +460,27 @@ var CartesianChartBase = /** @class */ (function (_super) {
|
|
|
490
460
|
width: this.state.containerWidth,
|
|
491
461
|
height: this.state.containerHeight,
|
|
492
462
|
};
|
|
463
|
+
var startFromX = this.state.startFromX || 0;
|
|
464
|
+
var plotWidth = Math.max(0, svgDimensions.width - this.margins.left - this.margins.right - startFromX);
|
|
465
|
+
var plotHeight = Math.max(0, svgDimensions.height - this.margins.top - this.margins.bottom - this._removalValueForTextTuncate);
|
|
466
|
+
var plotRect = {
|
|
467
|
+
x: this._isRtl ? this.margins.left : this.margins.left + startFromX,
|
|
468
|
+
y: this.margins.top,
|
|
469
|
+
width: plotWidth,
|
|
470
|
+
height: plotHeight,
|
|
471
|
+
};
|
|
472
|
+
var annotations = (_k = this.props.annotations) !== null && _k !== void 0 ? _k : [];
|
|
473
|
+
var hasAnnotations = annotations.length > 0;
|
|
474
|
+
var annotationContext = hasAnnotations
|
|
475
|
+
? {
|
|
476
|
+
plotRect: plotRect,
|
|
477
|
+
svgRect: svgDimensions,
|
|
478
|
+
isRtl: this._isRtl,
|
|
479
|
+
xScale: this._xScale,
|
|
480
|
+
yScalePrimary: yScalePrimary,
|
|
481
|
+
yScaleSecondary: yScaleSecondary,
|
|
482
|
+
}
|
|
483
|
+
: undefined;
|
|
493
484
|
var focusDirection;
|
|
494
485
|
if (this.props.focusZoneDirection === react_focus_1.FocusZoneDirection.vertical) {
|
|
495
486
|
focusDirection = this.props.focusZoneDirection;
|
|
@@ -602,7 +593,8 @@ var CartesianChartBase = /** @class */ (function (_super) {
|
|
|
602
593
|
: this.margins.right / 2 + this.titleMargin, ",\n ").concat(svgDimensions.height - this.margins.bottom - this.margins.top - this.titleMargin, ")rotate(-90)"),
|
|
603
594
|
className: this._classNames.axisAnnotation,
|
|
604
595
|
'aria-hidden': true,
|
|
605
|
-
}, maxWidth: yAxisTitleMaximumAllowedHeight }, commonSvgToolTipProps))))
|
|
596
|
+
}, maxWidth: yAxisTitleMaximumAllowedHeight }, commonSvgToolTipProps)))),
|
|
597
|
+
hasAnnotations && annotationContext && (React.createElement(ChartAnnotationLayer_1.ChartAnnotationLayer, { annotations: annotations, context: annotationContext, theme: this.props.theme, className: this._classNames.annotationLayer }))),
|
|
606
598
|
!this.props.hideLegend && (React.createElement("div", { ref: function (e) { return (_this.legendContainer = e); }, className: this._classNames.legendContainer }, this.props.legendBars)),
|
|
607
599
|
callout && React.createElement(React.Suspense, { fallback: React.createElement("div", null, "Loading...") }, callout)));
|
|
608
600
|
};
|
|
@@ -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 { 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 { select as d3Select } from 'd3-selection';\nimport {\n ICartesianChartStyles,\n ICartesianChartStyleProps,\n IModifiedCartesianChartProps,\n IYValueHover,\n} from '../../index';\nimport { formatToLocaleString } from '@fluentui/chart-utilities';\nimport {\n createNumericXAxis,\n createStringXAxis,\n IAxisData,\n getAccessibleDataObject,\n createDateXAxis,\n IMargins,\n XAxisTypes,\n YAxisType,\n createWrapOfXLabels,\n rotateXAxisLabels,\n Points,\n pointTypes,\n calculateLongestLabelWidth,\n createYAxisLabels,\n ChartTypes,\n wrapContent,\n getSecureProps,\n truncateString,\n tooltipOfAxislabels,\n DEFAULT_WRAP_WIDTH,\n} from '../../utilities/index';\nimport { LegendShape, Shape } from '../Legends/index';\nimport { SVGTooltipText, ISVGTooltipTextProps } from '../../utilities/SVGTooltipText';\nimport { IChart } from '../../types/index';\nimport type { JSXElement } from '@fluentui/utilities';\n\nconst getClassNames = classNamesFunction<ICartesianChartStyleProps, ICartesianChartStyles>();\nconst ChartHoverCard = React.lazy(() =>\n import('../../utilities/ChartHoverCard/ChartHoverCard').then(module => ({ default: module.ChartHoverCard })),\n);\nconst chartTypesWithStringYAxis = [\n ChartTypes.HorizontalBarChartWithAxis,\n ChartTypes.HeatMapChart,\n ChartTypes.VerticalStackedBarChart,\n ChartTypes.GanttChart,\n ChartTypes.ScatterChart,\n];\n\nexport interface ICartesianChartState {\n containerWidth: number;\n containerHeight: number;\n _width: number;\n _height: 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\n extends React.Component<IModifiedCartesianChartProps, ICartesianChartState>\n implements IChart\n{\n public chartContainer: HTMLDivElement;\n private _classNames: IProcessedStyleSet<ICartesianChartStyles>;\n private legendContainer: HTMLDivElement;\n private minLegendContainerHeight: number = 32;\n private xAxisElement: SVGSVGElement | null;\n private yAxisElement: SVGSVGElement | null;\n private yAxisElementSecondary: SVGSVGElement | 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 /* 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 private _removalValueForTextTuncate: number = 0;\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n private _xScale: any;\n private isIntegralDataset: boolean = true;\n private _tooltipId: string;\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 startFromX: 0,\n };\n this.idForGraph = getId('chart_');\n this.titleMargin = 8;\n this.idForDefaultTabbableElement = getId('defaultTabbableElement_');\n this._tooltipId = getId('tooltip_');\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 const TITLE_MARGIN_HORIZONTAL = 24;\n const TITLE_MARGIN_VERTICAL = 20;\n if (this.props.xAxisTitle !== undefined && this.props.xAxisTitle !== '') {\n this.margins.bottom! = this.props.margins?.bottom ?? this.margins.bottom! + TITLE_MARGIN_VERTICAL;\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 ? this.margins.right! + 2 * TITLE_MARGIN_HORIZONTAL\n : this.margins.right! + TITLE_MARGIN_HORIZONTAL\n : this.props.margins?.left ?? this.margins.left! + TITLE_MARGIN_HORIZONTAL;\n this.margins.right! = this._isRtl\n ? this.props.margins?.left ?? this.margins.left! + TITLE_MARGIN_HORIZONTAL\n : this.props.margins?.right ?? this.props?.secondaryYAxistitle\n ? this.margins.right! + 2 * TITLE_MARGIN_HORIZONTAL\n : this.margins.right! + TITLE_MARGIN_HORIZONTAL;\n }\n if (this.props.xAxisAnnotation !== undefined && this.props.xAxisAnnotation !== '') {\n this.margins.top! = this.props.margins?.top ?? this.margins.top! + TITLE_MARGIN_VERTICAL;\n }\n if (\n this.props.yAxisAnnotation !== undefined &&\n this.props.yAxisAnnotation !== '' &&\n (this.props.secondaryYAxistitle === undefined || this.props.secondaryYAxistitle === '')\n ) {\n if (this._isRtl) {\n this.margins.left! = this.props.margins?.right ?? this.margins.right! + TITLE_MARGIN_HORIZONTAL;\n } else {\n this.margins.right! = this.props.margins?.right ?? this.margins.right! + TITLE_MARGIN_HORIZONTAL;\n }\n }\n }\n\n public componentDidMount(): void {\n this._fitParentContainer();\n if (\n chartTypesWithStringYAxis.includes(this.props.chartType) &&\n this.props.showYAxisLables &&\n this.yAxisElement &&\n this.props.yAxisType === YAxisType.StringAxis\n ) {\n const maxYAxisLabelLength = this.calculateMaxYAxisLabelLength(this._classNames.yAxis!);\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 chartTypesWithStringYAxis.includes(this.props.chartType) &&\n this.props.showYAxisLables &&\n this.yAxisElement &&\n this.props.yAxisType === YAxisType.StringAxis\n ) {\n const maxYAxisLabelLength = this.calculateMaxYAxisLabelLength(this._classNames.yAxis!);\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 calculateMaxYAxisLabelLength = (className: string): number => {\n const formatTickLabel = (str: string) => {\n if (this.props.showYAxisLablesTooltip) {\n return truncateString(str, this.props.noOfCharsToTruncate || 4);\n }\n\n return str;\n };\n\n return calculateLongestLabelWidth(\n this.props.stringDatasetForYAxisDomain!.map(label => formatTickLabel(label)),\n `.${className} text`,\n );\n };\n\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n public render(): JSXElement {\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 // Note: This check is unnecessary since startFromX is only set for charts with string y-axis.\n if (chartTypesWithStringYAxis.includes(this.props.chartType)) {\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 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 enableReflow: this.props.enableReflow,\n });\n\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n let callout: JSXElement | 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: this.props.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 // FIXME: In XAxisParams, containerHeight is used by HBWA to generate vertical gridlines.\n // Since the x-axis in HBWA is numeric, it typically doesn't require transformation.\n // However, if transformation props are enabled, the updated _removalValueForTextTuncate\n // will only be available in the next render, as it's set after the axis is created.\n // Solution: Delay the creation of gridlines until after the transformation has been applied,\n // or precompute the required height for transformed labels (_removalValueForTextTuncate).\n containerHeight: this.state.containerHeight - this._removalValueForTextTuncate,\n margins: this.margins,\n xAxisElement: this.xAxisElement!,\n showRoundOffXTickValues: this.props.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 containerWidth: this.state.containerWidth,\n hideTickOverlap: this.props.hideTickOverlap,\n calcMaxLabelWidth: this._calcMaxLabelWidthWithTransform,\n tickStep: this.props.xAxis?.tickStep,\n tick0: this.props.xAxis?.tick0,\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 xScale: any;\n let tickValues: (string | number)[];\n switch (this.props.xAxisType!) {\n case XAxisTypes.NumericAxis:\n ({ xScale, tickValues } = createNumericXAxis(\n XAxisParams,\n this.props.tickParams!,\n this.props.chartType,\n culture,\n this.props.xScaleType,\n ));\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 this.props.useUTC,\n this.props.chartType,\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(\n XAxisParams,\n this.props.tickParams!,\n this.props.chartType,\n culture,\n this.props.xScaleType,\n ));\n }\n this._xScale = xScale;\n this._tickValues = tickValues;\n\n this._transformXAxisLabels();\n\n const YAxisParams = {\n margins: this.props.getYDomainMargins ? this.props.getYDomainMargins(this.state.containerHeight) : this.margins,\n containerWidth: this.state.containerWidth,\n containerHeight: this.state.containerHeight - this._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: this.props.getMinMaxOfYAxis(points, 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 tickValues: this.props.yAxisTickValues,\n tickStep: this.props.yAxis?.tickStep,\n tick0: this.props.yAxis?.tick0,\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 yScalePrimary: 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 yScalePrimary = this.props.createStringYAxis(\n YAxisParams,\n this.props.stringDatasetForYAxisDomain!,\n this._isRtl,\n this.props.barwidth,\n this.props.chartType,\n );\n } else {\n // TODO: Since the scale domain values are now computed independently for both the primary and\n // secondary y-axes, the yMinValue and yMaxValue props are no longer necessary for accurately\n // rendering the secondary y-axis. Therefore, rather than checking the secondaryYScaleOptions\n // prop to determine whether to create a secondary y-axis, it's more appropriate to check if any\n // data points are assigned to use the secondary y-scale.\n if (this.props?.secondaryYScaleOptions) {\n const YAxisParamsSecondary = {\n margins: this.margins,\n containerWidth: this.state.containerWidth,\n containerHeight: this.state.containerHeight - this._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 yMinMaxValues: this.props.getMinMaxOfYAxis(points, this.props.yAxisType, true),\n yAxisPadding: this.props.yAxisPadding,\n };\n\n yScaleSecondary = this.props.createYAxis(\n YAxisParamsSecondary,\n this._isRtl,\n axisData,\n this.isIntegralDataset,\n true,\n this.props.supportNegativeData!,\n this.props.roundedTicks!,\n this.props.secondaryYScaleType,\n );\n }\n yScalePrimary = this.props.createYAxis(\n YAxisParams,\n this._isRtl,\n axisData,\n this.isIntegralDataset,\n false,\n this.props.supportNegativeData!,\n this.props.roundedTicks!,\n this.props.yScaleType,\n );\n }\n\n if (chartTypesWithStringYAxis.includes(this.props.chartType) && this.props.yAxisType === YAxisType.StringAxis) {\n // Removing un wanted tooltip div from DOM, when prop not provided, for proper cleanup\n // of unwanted DOM elements, to prevent flacky behaviour in tooltips , that might occur\n // in creating tooltips when tooltips are enabled( as we try to recreate a tspan with this._tooltipId)\n if (!this.props.showYAxisLablesTooltip) {\n try {\n document.getElementById(this._tooltipId) && document.getElementById(this._tooltipId)!.remove();\n //eslint-disable-next-line no-empty\n } catch (e) {}\n }\n // Used to display tooltip at y axis labels.\n if (this.props.showYAxisLablesTooltip) {\n // To create y axis tick values by if specified truncating the rest of the text\n // and showing elipsis or showing the whole string,\n yScalePrimary &&\n // Note: This function should be invoked within the showYAxisLablesTooltip check,\n // as its sole purpose is to truncate labels that exceed the noOfCharsToTruncate limit.\n createYAxisLabels(\n this.yAxisElement,\n yScalePrimary,\n this.props.noOfCharsToTruncate || 4,\n this.props.showYAxisLablesTooltip || false,\n this._isRtl,\n );\n\n const yAxisElement = d3Select(this.yAxisElement).call(yScalePrimary);\n try {\n document.getElementById(this._tooltipId) && document.getElementById(this._tooltipId)!.remove();\n //eslint-disable-next-line no-empty\n } catch (e) {}\n const ytooltipProps = {\n tooltipCls: this._classNames.tooltip!,\n id: this._tooltipId,\n axis: yAxisElement,\n };\n yAxisElement && tooltipOfAxislabels(ytooltipProps);\n }\n }\n\n this.props.getAxisData && this.props.getAxisData(axisData);\n // Callback function for chart, returns axis\n this._getData(xScale, yScalePrimary, yScaleSecondary);\n\n children = this.props.children({\n ...this.state,\n xScale,\n yScalePrimary,\n yScaleSecondary,\n });\n\n if (!this.props.hideTooltip && calloutProps!.isCalloutVisible) {\n callout = this._generateCallout(calloutProps, chartHoverProps);\n }\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._removalValueForTextTuncate -\n this.titleMargin;\n\n const commonSvgToolTipProps: ISVGTooltipTextProps = {\n wrapContent,\n theme: this.props.theme,\n showBackground: true,\n className: this._classNames.svgTooltip,\n };\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 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 role=\"region\"\n aria-label={this._getChartDescription()}\n style={{ display: 'block' }}\n className={this._classNames.chart}\n {...getSecureProps(svgProps)}\n >\n <g\n ref={(e: SVGSVGElement | 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._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 'aria-hidden': true,\n }}\n maxWidth={xAxisTitleMaximumAllowedWidth}\n {...commonSvgToolTipProps}\n />\n )}\n {this.props.xAxisAnnotation !== undefined && this.props.xAxisAnnotation !== '' && (\n <SVGTooltipText\n content={this.props.xAxisAnnotation}\n textProps={{\n x: this.margins.left! + this.state.startFromX + xAxisTitleMaximumAllowedWidth / 2,\n y: this.titleMargin + 3,\n className: this._classNames.axisAnnotation!,\n textAnchor: 'middle',\n 'aria-hidden': true,\n }}\n maxWidth={xAxisTitleMaximumAllowedWidth}\n {...commonSvgToolTipProps}\n />\n )}\n <g\n ref={(e: SVGSVGElement | 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: SVGSVGElement | null) => {\n this.yAxisElementSecondary = e;\n }}\n id={`yAxisGElementSecondary${this.idForGraph}`}\n transform={`translate(${\n this._isRtl\n ? this.margins.left! + this.state.startFromX\n : svgDimensions.width - this.margins.right! - this.state.startFromX\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: (yAxisTitleMaximumAllowedHeight - this.margins.bottom!) / 2 + this._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 'aria-hidden': true,\n }}\n maxWidth={yAxisTitleMaximumAllowedHeight}\n {...commonSvgToolTipProps}\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: (yAxisTitleMaximumAllowedHeight - this.margins.bottom!) / 2 + this._removalValueForTextTuncate,\n y: this._isRtl\n ? svgDimensions.width - this.margins.right! / 2 + this.titleMargin\n : this.margins.left! / 2 - 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 'aria-hidden': true,\n }}\n maxWidth={yAxisTitleMaximumAllowedHeight}\n {...commonSvgToolTipProps}\n />\n )}\n {this.props.yAxisAnnotation !== undefined &&\n this.props.yAxisAnnotation !== '' &&\n (this.props.secondaryYAxistitle === undefined || this.props.secondaryYAxistitle === '') && (\n <SVGTooltipText\n content={this.props.yAxisAnnotation}\n textProps={{\n x: (yAxisTitleMaximumAllowedHeight - this.margins.bottom!) / 2 + this._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.axisAnnotation!,\n 'aria-hidden': true,\n }}\n maxWidth={yAxisTitleMaximumAllowedHeight}\n {...commonSvgToolTipProps}\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 /**\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, @typescript-eslint/no-deprecated\n private _generateCallout(calloutProps: any, chartHoverProps: any): JSXElement {\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 {formatToLocaleString(calloutProps!.hoverXValue, this.props.culture, this.props.useUTC) as React.ReactNode}\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, useUTC } = this.props;\n const yValue = formatToLocaleString(xValue.y, culture, useUTC) as React.ReactNode;\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 {\n formatToLocaleString(\n xValue.yAxisCalloutData ? xValue.yAxisCalloutData : xValue.y ?? xValue.data,\n culture,\n useUTC,\n ) as React.ReactNode\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}>\n {formatToLocaleString(subcountName, culture, useUTC) as React.ReactNode}\n </div>\n <div className={_classNames.calloutContentY}>\n {formatToLocaleString(subcounts[subcountName], culture, useUTC) as React.ReactNode}\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, yScalePrimary: any, yScaleSecondary: any) => {\n this.props.getGraphData &&\n this.props.getGraphData(\n xScale,\n yScalePrimary,\n this.state.containerHeight - this._removalValueForTextTuncate,\n this.state.containerWidth,\n this.xAxisElement,\n this.yAxisElement,\n yScaleSecondary,\n );\n };\n\n private _onChartLeave = (): void => {\n this.props.onChartMouseLeave && this.props.onChartMouseLeave();\n };\n\n private _calculateChartMinWidth = (): number => {\n // Adding 10px for padding on both sides\n const labelWidth = this._calcMaxLabelWidthWithTransform(this._tickValues) + 10;\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 private _getChartDescription = (): string => {\n return (\n (this.props.chartTitle || 'Chart. ') +\n this._getAxisTitle('X', this.props.xAxisTitle, this.props.xAxisType) +\n this._getAxisTitle('Y', this.props.yAxisTitle, this.props.yAxisType || YAxisType.NumericAxis) +\n (this.props.secondaryYScaleOptions\n ? this._getAxisTitle('secondary Y', this.props.secondaryYAxistitle, YAxisType.NumericAxis)\n : '')\n );\n };\n\n private _getAxisTitle = (\n axisLabel: string,\n axisTitle: string | undefined,\n axisType: XAxisTypes | YAxisType,\n ): string => {\n return (\n `The ${axisLabel} axis displays ` +\n (axisTitle ||\n (axisType === XAxisTypes.StringAxis || axisType === YAxisType.StringAxis\n ? 'categories'\n : axisType === XAxisTypes.DateAxis || axisType === YAxisType.DateAxis\n ? 'time'\n : 'values')) +\n '. '\n );\n };\n\n private _calcMaxLabelWidthWithTransform = (x: (string | number)[]) => {\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(x, `.${this._classNames.xAxis} text`);\n return Math.ceil(longestLabelWidth * Math.cos(Math.PI / 4));\n }\n\n // Case: truncated labels\n if (this.props.showXAxisLablesTooltip) {\n const tickValues = x.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 return Math.ceil(longestLabelWidth);\n }\n\n // Case: wrapped labels\n if (this.props.wrapXAxisLables) {\n // FIXME: Calculate the max width of lines instead of words. This requires applying\n // the wrapping transformation earlier to obtain the actual rendered lines.\n const words: string[] = [];\n x.forEach((val: string) => {\n words.push(...val.toString().split(/\\s+/));\n });\n\n // This approach works well in most cases, since overflow typically occurs only when\n // a single word exceeds the specified width — otherwise, the text will wrap as expected.\n const longestLabelWidth = calculateLongestLabelWidth(words, `.${this._classNames.xAxis} text`);\n return Math.max(Math.ceil(longestLabelWidth), DEFAULT_WRAP_WIDTH);\n }\n\n // Default case\n const longestLabelWidth = calculateLongestLabelWidth(x, `.${this._classNames.xAxis} text`);\n return Math.ceil(longestLabelWidth);\n };\n\n private _transformXAxisLabels = () => {\n this._removalValueForTextTuncate = 0;\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 let maxXAxisLabelWidth: number | undefined;\n if (this.props.xAxisType === XAxisTypes.StringAxis) {\n if ((this.props.datasetForXAxisDomain?.length || 0) > 1) {\n maxXAxisLabelWidth = this._xScale.step();\n } else {\n maxXAxisLabelWidth = this.state.containerWidth;\n }\n }\n\n const wrapLabelProps = {\n node: this.xAxisElement,\n xAxis: this._xScale,\n showXAxisLablesTooltip: this.props.showXAxisLablesTooltip || false,\n noOfCharsToTruncate: this.props.noOfCharsToTruncate || 4,\n width: maxXAxisLabelWidth,\n };\n this._removalValueForTextTuncate = createWrapOfXLabels(wrapLabelProps) ?? 0;\n }\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) ?? 0;\n // this.margins.bottom is used as padding here\n this._removalValueForTextTuncate = rotatedHeight + this.margins.bottom!;\n }\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 { 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 { select as d3Select } from 'd3-selection';\nimport {\n ICartesianChartStyles,\n ICartesianChartStyleProps,\n IModifiedCartesianChartProps,\n IYValueHover,\n} from '../../index';\nimport { formatToLocaleString } from '@fluentui/chart-utilities';\nimport {\n createNumericXAxis,\n createStringXAxis,\n IAxisData,\n getAccessibleDataObject,\n createDateXAxis,\n IMargins,\n XAxisTypes,\n YAxisType,\n createWrapOfXLabels,\n rotateXAxisLabels,\n Points,\n pointTypes,\n calculateLongestLabelWidth,\n createYAxisLabels,\n ChartTypes,\n wrapContent,\n getSecureProps,\n truncateString,\n tooltipOfAxislabels,\n DEFAULT_WRAP_WIDTH,\n} from '../../utilities/index';\nimport { LegendShape, Shape } from '../Legends/index';\nimport { SVGTooltipText, ISVGTooltipTextProps } from '../../utilities/SVGTooltipText';\nimport { ChartAnnotationLayer } from './Annotations/ChartAnnotationLayer';\nimport { IChartAnnotationContext } from './Annotations/ChartAnnotationLayer.types';\nimport { IChart } from '../../types/index';\nimport type { JSXElement } from '@fluentui/utilities';\n\nconst getClassNames = classNamesFunction<ICartesianChartStyleProps, ICartesianChartStyles>();\nconst ChartHoverCard = React.lazy(() =>\n import('../../utilities/ChartHoverCard/ChartHoverCard').then(module => ({ default: module.ChartHoverCard })),\n);\nconst chartTypesWithStringYAxis = [\n ChartTypes.HorizontalBarChartWithAxis,\n ChartTypes.HeatMapChart,\n ChartTypes.VerticalStackedBarChart,\n ChartTypes.GanttChart,\n ChartTypes.ScatterChart,\n];\n\nexport interface ICartesianChartState {\n containerWidth: number;\n containerHeight: number;\n _width: number;\n _height: 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\n extends React.Component<IModifiedCartesianChartProps, ICartesianChartState>\n implements IChart\n{\n public chartContainer: HTMLDivElement;\n private _classNames: IProcessedStyleSet<ICartesianChartStyles>;\n private legendContainer: HTMLDivElement;\n private minLegendContainerHeight: number = 32;\n private xAxisElement: SVGSVGElement | null;\n private yAxisElement: SVGSVGElement | null;\n private yAxisElementSecondary: SVGSVGElement | 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 /* 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 private _removalValueForTextTuncate: number = 0;\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n private _xScale: any;\n private isIntegralDataset: boolean = true;\n private _tooltipId: string;\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 startFromX: 0,\n };\n this.idForGraph = getId('chart_');\n this.titleMargin = 8;\n this.idForDefaultTabbableElement = getId('defaultTabbableElement_');\n this._tooltipId = getId('tooltip_');\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 const TITLE_MARGIN_HORIZONTAL = 24;\n const TITLE_MARGIN_VERTICAL = 20;\n if (this.props.xAxisTitle !== undefined && this.props.xAxisTitle !== '') {\n this.margins.bottom! = this.props.margins?.bottom ?? this.margins.bottom! + TITLE_MARGIN_VERTICAL;\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 ? this.margins.right! + 2 * TITLE_MARGIN_HORIZONTAL\n : this.margins.right! + TITLE_MARGIN_HORIZONTAL\n : this.props.margins?.left ?? this.margins.left! + TITLE_MARGIN_HORIZONTAL;\n this.margins.right! = this._isRtl\n ? this.props.margins?.left ?? this.margins.left! + TITLE_MARGIN_HORIZONTAL\n : this.props.margins?.right ?? this.props?.secondaryYAxistitle\n ? this.margins.right! + 2 * TITLE_MARGIN_HORIZONTAL\n : this.margins.right! + TITLE_MARGIN_HORIZONTAL;\n }\n if (this.props.xAxisAnnotation !== undefined && this.props.xAxisAnnotation !== '') {\n this.margins.top! = this.props.margins?.top ?? this.margins.top! + TITLE_MARGIN_VERTICAL;\n }\n if (\n this.props.yAxisAnnotation !== undefined &&\n this.props.yAxisAnnotation !== '' &&\n (this.props.secondaryYAxistitle === undefined || this.props.secondaryYAxistitle === '')\n ) {\n if (this._isRtl) {\n this.margins.left! = this.props.margins?.right ?? this.margins.right! + TITLE_MARGIN_HORIZONTAL;\n } else {\n this.margins.right! = this.props.margins?.right ?? this.margins.right! + TITLE_MARGIN_HORIZONTAL;\n }\n }\n }\n\n public componentDidMount(): void {\n this._fitParentContainer();\n if (\n chartTypesWithStringYAxis.includes(this.props.chartType) &&\n this.props.showYAxisLables &&\n this.yAxisElement &&\n this.props.yAxisType === YAxisType.StringAxis\n ) {\n const maxYAxisLabelLength = this.calculateMaxYAxisLabelLength(this._classNames.yAxis!);\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 chartTypesWithStringYAxis.includes(this.props.chartType) &&\n this.props.showYAxisLables &&\n this.yAxisElement &&\n this.props.yAxisType === YAxisType.StringAxis\n ) {\n const maxYAxisLabelLength = this.calculateMaxYAxisLabelLength(this._classNames.yAxis!);\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 calculateMaxYAxisLabelLength = (className: string): number => {\n const formatTickLabel = (str: string) => {\n if (this.props.showYAxisLablesTooltip) {\n return truncateString(str, this.props.noOfCharsToTruncate || 4);\n }\n\n return str;\n };\n\n return calculateLongestLabelWidth(\n this.props.stringDatasetForYAxisDomain!.map(label => formatTickLabel(label)),\n `.${className} text`,\n );\n };\n\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n public render(): JSXElement {\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 // Note: This check is unnecessary since startFromX is only set for charts with string y-axis.\n if (chartTypesWithStringYAxis.includes(this.props.chartType)) {\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 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 enableReflow: this.props.enableReflow,\n });\n\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n let callout: JSXElement | null = null;\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n let yScalePrimary: any;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n let yScaleSecondary: any;\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: this.props.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 // FIXME: In XAxisParams, containerHeight is used by HBWA to generate vertical gridlines.\n // Since the x-axis in HBWA is numeric, it typically doesn't require transformation.\n // However, if transformation props are enabled, the updated _removalValueForTextTuncate\n // will only be available in the next render, as it's set after the axis is created.\n // Solution: Delay the creation of gridlines until after the transformation has been applied,\n // or precompute the required height for transformed labels (_removalValueForTextTuncate).\n containerHeight: this.state.containerHeight - this._removalValueForTextTuncate,\n margins: this.margins,\n xAxisElement: this.xAxisElement!,\n showRoundOffXTickValues: this.props.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 containerWidth: this.state.containerWidth,\n hideTickOverlap: this.props.hideTickOverlap,\n calcMaxLabelWidth: this._calcMaxLabelWidthWithTransform,\n ...this.props.xAxis,\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 xScale: any;\n let tickValues: (string | number)[];\n switch (this.props.xAxisType!) {\n case XAxisTypes.NumericAxis:\n ({ xScale, tickValues } = createNumericXAxis(\n XAxisParams,\n this.props.tickParams!,\n this.props.chartType,\n culture,\n this.props.xScaleType,\n ));\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 this.props.useUTC,\n this.props.chartType,\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(\n XAxisParams,\n this.props.tickParams!,\n this.props.chartType,\n culture,\n this.props.xScaleType,\n ));\n }\n this._xScale = xScale;\n this._tickValues = tickValues;\n\n this._transformXAxisLabels();\n\n const YAxisParams = {\n margins: this.props.getYDomainMargins ? this.props.getYDomainMargins(this.state.containerHeight) : this.margins,\n containerWidth: this.state.containerWidth,\n containerHeight: this.state.containerHeight - this._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: this.props.getMinMaxOfYAxis(points, 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 tickValues: this.props.yAxisTickValues,\n ...this.props.yAxis,\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 const axisData: IAxisData = { yAxisDomainValues: [] };\n if (this.props.yAxisType && this.props.yAxisType === YAxisType.StringAxis) {\n yScalePrimary = this.props.createStringYAxis(\n YAxisParams,\n this.props.stringDatasetForYAxisDomain!,\n this._isRtl,\n this.props.barwidth,\n this.props.chartType,\n );\n } else {\n // TODO: Since the scale domain values are now computed independently for both the primary and\n // secondary y-axes, the yMinValue and yMaxValue props are no longer necessary for accurately\n // rendering the secondary y-axis. Therefore, rather than checking the secondaryYScaleOptions\n // prop to determine whether to create a secondary y-axis, it's more appropriate to check if any\n // data points are assigned to use the secondary y-scale.\n if (this.props?.secondaryYScaleOptions) {\n const YAxisParamsSecondary = {\n margins: this.margins,\n containerWidth: this.state.containerWidth,\n containerHeight: this.state.containerHeight - this._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 yMinMaxValues: this.props.getMinMaxOfYAxis(points, this.props.yAxisType, true),\n yAxisPadding: this.props.yAxisPadding,\n };\n\n yScaleSecondary = this.props.createYAxis(\n YAxisParamsSecondary,\n this._isRtl,\n axisData,\n this.isIntegralDataset,\n true,\n this.props.supportNegativeData!,\n this.props.roundedTicks!,\n this.props.secondaryYScaleType,\n );\n }\n yScalePrimary = this.props.createYAxis(\n YAxisParams,\n this._isRtl,\n axisData,\n this.isIntegralDataset,\n false,\n this.props.supportNegativeData!,\n this.props.roundedTicks!,\n this.props.yScaleType,\n );\n }\n\n if (chartTypesWithStringYAxis.includes(this.props.chartType) && this.props.yAxisType === YAxisType.StringAxis) {\n // Removing un wanted tooltip div from DOM, when prop not provided, for proper cleanup\n // of unwanted DOM elements, to prevent flacky behaviour in tooltips , that might occur\n // in creating tooltips when tooltips are enabled( as we try to recreate a tspan with this._tooltipId)\n if (!this.props.showYAxisLablesTooltip) {\n try {\n document.getElementById(this._tooltipId) && document.getElementById(this._tooltipId)!.remove();\n //eslint-disable-next-line no-empty\n } catch (e) {}\n }\n // Used to display tooltip at y axis labels.\n if (this.props.showYAxisLablesTooltip) {\n // To create y axis tick values by if specified truncating the rest of the text\n // and showing elipsis or showing the whole string,\n yScalePrimary &&\n // Note: This function should be invoked within the showYAxisLablesTooltip check,\n // as its sole purpose is to truncate labels that exceed the noOfCharsToTruncate limit.\n createYAxisLabels(\n this.yAxisElement,\n yScalePrimary,\n this.props.noOfCharsToTruncate || 4,\n this.props.showYAxisLablesTooltip || false,\n this._isRtl,\n );\n\n const yAxisElement = d3Select(this.yAxisElement).call(yScalePrimary);\n try {\n document.getElementById(this._tooltipId) && document.getElementById(this._tooltipId)!.remove();\n //eslint-disable-next-line no-empty\n } catch (e) {}\n const ytooltipProps = {\n tooltipCls: this._classNames.tooltip!,\n id: this._tooltipId,\n axis: yAxisElement,\n };\n yAxisElement && tooltipOfAxislabels(ytooltipProps);\n }\n }\n\n this.props.getAxisData && this.props.getAxisData(axisData);\n // Callback function for chart, returns axis\n this._getData(xScale, yScalePrimary, yScaleSecondary);\n\n children = this.props.children({\n ...this.state,\n xScale,\n yScalePrimary,\n yScaleSecondary,\n });\n\n if (!this.props.hideTooltip && calloutProps!.isCalloutVisible) {\n callout = this._generateCallout(calloutProps, chartHoverProps);\n }\n }\n\n const svgDimensions = {\n width: this.state.containerWidth,\n height: this.state.containerHeight,\n };\n\n const startFromX = this.state.startFromX || 0;\n const plotWidth = Math.max(0, svgDimensions.width - this.margins.left! - this.margins.right! - startFromX);\n const plotHeight = Math.max(\n 0,\n svgDimensions.height - this.margins.top! - this.margins.bottom! - this._removalValueForTextTuncate,\n );\n\n const plotRect = {\n x: this._isRtl ? this.margins.left! : this.margins.left! + startFromX,\n y: this.margins.top!,\n width: plotWidth,\n height: plotHeight,\n };\n\n const annotations = this.props.annotations ?? [];\n const hasAnnotations = annotations.length > 0;\n const annotationContext: IChartAnnotationContext | undefined = hasAnnotations\n ? {\n plotRect,\n svgRect: svgDimensions,\n isRtl: this._isRtl,\n xScale: this._xScale,\n yScalePrimary,\n yScaleSecondary,\n }\n : undefined;\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._removalValueForTextTuncate -\n this.titleMargin;\n\n const commonSvgToolTipProps: ISVGTooltipTextProps = {\n wrapContent,\n theme: this.props.theme,\n showBackground: true,\n className: this._classNames.svgTooltip,\n };\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 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 role=\"region\"\n aria-label={this._getChartDescription()}\n style={{ display: 'block' }}\n className={this._classNames.chart}\n {...getSecureProps(svgProps)}\n >\n <g\n ref={(e: SVGSVGElement | 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._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 'aria-hidden': true,\n }}\n maxWidth={xAxisTitleMaximumAllowedWidth}\n {...commonSvgToolTipProps}\n />\n )}\n {this.props.xAxisAnnotation !== undefined && this.props.xAxisAnnotation !== '' && (\n <SVGTooltipText\n content={this.props.xAxisAnnotation}\n textProps={{\n x: this.margins.left! + this.state.startFromX + xAxisTitleMaximumAllowedWidth / 2,\n y: this.titleMargin + 3,\n className: this._classNames.axisAnnotation!,\n textAnchor: 'middle',\n 'aria-hidden': true,\n }}\n maxWidth={xAxisTitleMaximumAllowedWidth}\n {...commonSvgToolTipProps}\n />\n )}\n <g\n ref={(e: SVGSVGElement | 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: SVGSVGElement | null) => {\n this.yAxisElementSecondary = e;\n }}\n id={`yAxisGElementSecondary${this.idForGraph}`}\n transform={`translate(${\n this._isRtl\n ? this.margins.left! + this.state.startFromX\n : svgDimensions.width - this.margins.right! - this.state.startFromX\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: (yAxisTitleMaximumAllowedHeight - this.margins.bottom!) / 2 + this._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 'aria-hidden': true,\n }}\n maxWidth={yAxisTitleMaximumAllowedHeight}\n {...commonSvgToolTipProps}\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: (yAxisTitleMaximumAllowedHeight - this.margins.bottom!) / 2 + this._removalValueForTextTuncate,\n y: this._isRtl\n ? svgDimensions.width - this.margins.right! / 2 + this.titleMargin\n : this.margins.left! / 2 - 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 'aria-hidden': true,\n }}\n maxWidth={yAxisTitleMaximumAllowedHeight}\n {...commonSvgToolTipProps}\n />\n )}\n {this.props.yAxisAnnotation !== undefined &&\n this.props.yAxisAnnotation !== '' &&\n (this.props.secondaryYAxistitle === undefined || this.props.secondaryYAxistitle === '') && (\n <SVGTooltipText\n content={this.props.yAxisAnnotation}\n textProps={{\n x: (yAxisTitleMaximumAllowedHeight - this.margins.bottom!) / 2 + this._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.axisAnnotation!,\n 'aria-hidden': true,\n }}\n maxWidth={yAxisTitleMaximumAllowedHeight}\n {...commonSvgToolTipProps}\n />\n )}\n </svg>\n {hasAnnotations && annotationContext && (\n <ChartAnnotationLayer\n annotations={annotations}\n context={annotationContext}\n theme={this.props.theme!}\n className={this._classNames.annotationLayer}\n />\n )}\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 /**\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, @typescript-eslint/no-deprecated\n private _generateCallout(calloutProps: any, chartHoverProps: any): JSXElement {\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 {formatToLocaleString(calloutProps!.hoverXValue, this.props.culture, this.props.useUTC) as React.ReactNode}\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, useUTC } = this.props;\n const yValue = formatToLocaleString(xValue.y, culture, useUTC) as React.ReactNode;\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 {\n formatToLocaleString(\n xValue.yAxisCalloutData ? xValue.yAxisCalloutData : xValue.y ?? xValue.data,\n culture,\n useUTC,\n ) as React.ReactNode\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}>\n {formatToLocaleString(subcountName, culture, useUTC) as React.ReactNode}\n </div>\n <div className={_classNames.calloutContentY}>\n {formatToLocaleString(subcounts[subcountName], culture, useUTC) as React.ReactNode}\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, yScalePrimary: any, yScaleSecondary: any) => {\n this.props.getGraphData &&\n this.props.getGraphData(\n xScale,\n yScalePrimary,\n this.state.containerHeight - this._removalValueForTextTuncate,\n this.state.containerWidth,\n this.xAxisElement,\n this.yAxisElement,\n yScaleSecondary,\n );\n };\n\n private _onChartLeave = (): void => {\n this.props.onChartMouseLeave && this.props.onChartMouseLeave();\n };\n\n private _calculateChartMinWidth = (): number => {\n // Adding 10px for padding on both sides\n const labelWidth = this._calcMaxLabelWidthWithTransform(this._tickValues) + 10;\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 private _getChartDescription = (): string => {\n return (\n (this.props.chartTitle || 'Chart. ') +\n this._getAxisTitle('X', this.props.xAxisTitle, this.props.xAxisType) +\n this._getAxisTitle('Y', this.props.yAxisTitle, this.props.yAxisType || YAxisType.NumericAxis) +\n (this.props.secondaryYScaleOptions\n ? this._getAxisTitle('secondary Y', this.props.secondaryYAxistitle, YAxisType.NumericAxis)\n : '')\n );\n };\n\n private _getAxisTitle = (\n axisLabel: string,\n axisTitle: string | undefined,\n axisType: XAxisTypes | YAxisType,\n ): string => {\n return (\n `The ${axisLabel} axis displays ` +\n (axisTitle ||\n (axisType === XAxisTypes.StringAxis || axisType === YAxisType.StringAxis\n ? 'categories'\n : axisType === XAxisTypes.DateAxis || axisType === YAxisType.DateAxis\n ? 'time'\n : 'values')) +\n '. '\n );\n };\n\n private _calcMaxLabelWidthWithTransform = (x: (string | number)[]) => {\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(x, `.${this._classNames.xAxis} text`);\n return Math.ceil(longestLabelWidth * Math.cos(Math.PI / 4));\n }\n\n // Case: truncated labels\n if (this.props.showXAxisLablesTooltip) {\n const tickValues = x.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 return Math.ceil(longestLabelWidth);\n }\n\n // Case: wrapped labels\n if (this.props.wrapXAxisLables) {\n // FIXME: Calculate the max width of lines instead of words. This requires applying\n // the wrapping transformation earlier to obtain the actual rendered lines.\n const words: string[] = [];\n x.forEach((val: string) => {\n words.push(...val.toString().split(/\\s+/));\n });\n\n // This approach works well in most cases, since overflow typically occurs only when\n // a single word exceeds the specified width — otherwise, the text will wrap as expected.\n const longestLabelWidth = calculateLongestLabelWidth(words, `.${this._classNames.xAxis} text`);\n return Math.max(Math.ceil(longestLabelWidth), DEFAULT_WRAP_WIDTH);\n }\n\n // Default case\n const longestLabelWidth = calculateLongestLabelWidth(x, `.${this._classNames.xAxis} text`);\n return Math.ceil(longestLabelWidth);\n };\n\n private _transformXAxisLabels = () => {\n this._removalValueForTextTuncate = 0;\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 let maxXAxisLabelWidth: number | undefined;\n if (this.props.xAxisType === XAxisTypes.StringAxis) {\n if ((this.props.datasetForXAxisDomain?.length || 0) > 1) {\n maxXAxisLabelWidth = this._xScale.step();\n } else {\n maxXAxisLabelWidth = this.state.containerWidth;\n }\n }\n\n const wrapLabelProps = {\n node: this.xAxisElement,\n xAxis: this._xScale,\n showXAxisLablesTooltip: this.props.showXAxisLablesTooltip || false,\n noOfCharsToTruncate: this.props.noOfCharsToTruncate || 4,\n width: maxXAxisLabelWidth,\n };\n this._removalValueForTextTuncate = createWrapOfXLabels(wrapLabelProps) ?? 0;\n }\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) ?? 0;\n // this.margins.bottom is used as padding here\n this._removalValueForTextTuncate = rotatedHeight + this.margins.bottom!;\n }\n };\n}\n"]}
|