@fluentui/react-charts 0.0.0-nightly-20251022-0407.1 → 0.0.0-nightly-20251023-0407.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -1,28 +1,28 @@
1
1
  # Change Log - @fluentui/react-charts
2
2
 
3
- This log was last generated on Wed, 22 Oct 2025 04:21:44 GMT and should not be manually modified.
3
+ This log was last generated on Thu, 23 Oct 2025 04:22:26 GMT and should not be manually modified.
4
4
 
5
5
  <!-- Start content -->
6
6
 
7
- ## [0.0.0-nightly-20251022-0407.1](https://github.com/microsoft/fluentui/tree/@fluentui/react-charts_v0.0.0-nightly-20251022-0407.1)
7
+ ## [0.0.0-nightly-20251023-0407.1](https://github.com/microsoft/fluentui/tree/@fluentui/react-charts_v0.0.0-nightly-20251023-0407.1)
8
8
 
9
- Wed, 22 Oct 2025 04:21:44 GMT
10
- [Compare changes](https://github.com/microsoft/fluentui/compare/@fluentui/react-charts_v9.3.3..@fluentui/react-charts_v0.0.0-nightly-20251022-0407.1)
9
+ Thu, 23 Oct 2025 04:22:26 GMT
10
+ [Compare changes](https://github.com/microsoft/fluentui/compare/@fluentui/react-charts_v9.3.3..@fluentui/react-charts_v0.0.0-nightly-20251023-0407.1)
11
11
 
12
12
  ### Changes
13
13
 
14
14
  - Release nightly v9 ([commit](https://github.com/microsoft/fluentui/commit/not available) by fluentui-internal@service.microsoft.com)
15
- - Bump @fluentui/react-button to v0.0.0-nightly-20251022-0407.1 ([commit](https://github.com/microsoft/fluentui/commit/d764358e0301359d0049823b6fb51edf4807d6dd) by beachball)
16
- - Bump @fluentui/react-jsx-runtime to v0.0.0-nightly-20251022-0407.1 ([commit](https://github.com/microsoft/fluentui/commit/d764358e0301359d0049823b6fb51edf4807d6dd) by beachball)
17
- - Bump @fluentui/react-overflow to v0.0.0-nightly-20251022-0407.1 ([commit](https://github.com/microsoft/fluentui/commit/d764358e0301359d0049823b6fb51edf4807d6dd) by beachball)
18
- - Bump @fluentui/react-popover to v0.0.0-nightly-20251022-0407.1 ([commit](https://github.com/microsoft/fluentui/commit/d764358e0301359d0049823b6fb51edf4807d6dd) by beachball)
19
- - Bump @fluentui/react-shared-contexts to v0.0.0-nightly-20251022-0407.1 ([commit](https://github.com/microsoft/fluentui/commit/d764358e0301359d0049823b6fb51edf4807d6dd) by beachball)
20
- - Bump @fluentui/react-tabster to v0.0.0-nightly-20251022-0407.1 ([commit](https://github.com/microsoft/fluentui/commit/d764358e0301359d0049823b6fb51edf4807d6dd) by beachball)
21
- - Bump @fluentui/react-theme to v0.0.0-nightly-20251022-0407.1 ([commit](https://github.com/microsoft/fluentui/commit/d764358e0301359d0049823b6fb51edf4807d6dd) by beachball)
22
- - Bump @fluentui/react-tooltip to v0.0.0-nightly-20251022-0407.1 ([commit](https://github.com/microsoft/fluentui/commit/d764358e0301359d0049823b6fb51edf4807d6dd) by beachball)
23
- - Bump @fluentui/react-utilities to v0.0.0-nightly-20251022-0407.1 ([commit](https://github.com/microsoft/fluentui/commit/d764358e0301359d0049823b6fb51edf4807d6dd) by beachball)
24
- - Bump @fluentui/react-conformance to v0.0.0-nightly-20251022-0407.1 ([commit](https://github.com/microsoft/fluentui/commit/d764358e0301359d0049823b6fb51edf4807d6dd) by beachball)
25
- - Bump @fluentui/react-conformance-griffel to v0.0.0-nightly-20251022-0407.1 ([commit](https://github.com/microsoft/fluentui/commit/d764358e0301359d0049823b6fb51edf4807d6dd) by beachball)
15
+ - Bump @fluentui/react-button to v0.0.0-nightly-20251023-0407.1 ([commit](https://github.com/microsoft/fluentui/commit/de1c6c2ebdcd30c0a27744e9b609471e1402ccc2) by beachball)
16
+ - Bump @fluentui/react-jsx-runtime to v0.0.0-nightly-20251023-0407.1 ([commit](https://github.com/microsoft/fluentui/commit/de1c6c2ebdcd30c0a27744e9b609471e1402ccc2) by beachball)
17
+ - Bump @fluentui/react-overflow to v0.0.0-nightly-20251023-0407.1 ([commit](https://github.com/microsoft/fluentui/commit/de1c6c2ebdcd30c0a27744e9b609471e1402ccc2) by beachball)
18
+ - Bump @fluentui/react-popover to v0.0.0-nightly-20251023-0407.1 ([commit](https://github.com/microsoft/fluentui/commit/de1c6c2ebdcd30c0a27744e9b609471e1402ccc2) by beachball)
19
+ - Bump @fluentui/react-shared-contexts to v0.0.0-nightly-20251023-0407.1 ([commit](https://github.com/microsoft/fluentui/commit/de1c6c2ebdcd30c0a27744e9b609471e1402ccc2) by beachball)
20
+ - Bump @fluentui/react-tabster to v0.0.0-nightly-20251023-0407.1 ([commit](https://github.com/microsoft/fluentui/commit/de1c6c2ebdcd30c0a27744e9b609471e1402ccc2) by beachball)
21
+ - Bump @fluentui/react-theme to v0.0.0-nightly-20251023-0407.1 ([commit](https://github.com/microsoft/fluentui/commit/de1c6c2ebdcd30c0a27744e9b609471e1402ccc2) by beachball)
22
+ - Bump @fluentui/react-tooltip to v0.0.0-nightly-20251023-0407.1 ([commit](https://github.com/microsoft/fluentui/commit/de1c6c2ebdcd30c0a27744e9b609471e1402ccc2) by beachball)
23
+ - Bump @fluentui/react-utilities to v0.0.0-nightly-20251023-0407.1 ([commit](https://github.com/microsoft/fluentui/commit/de1c6c2ebdcd30c0a27744e9b609471e1402ccc2) by beachball)
24
+ - Bump @fluentui/react-conformance to v0.0.0-nightly-20251023-0407.1 ([commit](https://github.com/microsoft/fluentui/commit/de1c6c2ebdcd30c0a27744e9b609471e1402ccc2) by beachball)
25
+ - Bump @fluentui/react-conformance-griffel to v0.0.0-nightly-20251023-0407.1 ([commit](https://github.com/microsoft/fluentui/commit/de1c6c2ebdcd30c0a27744e9b609471e1402ccc2) by beachball)
26
26
 
27
27
  ## [9.3.3](https://github.com/microsoft/fluentui/tree/@fluentui/react-charts_v9.3.3)
28
28
 
package/dist/index.d.ts CHANGED
@@ -162,6 +162,10 @@ export declare type AxisProps = {
162
162
  * - Exception: when `tickStep` uses `"L<f>"`, you can specify the raw value directly.
163
163
  */
164
164
  tick0?: number | Date;
165
+ /**
166
+ * Sets the text displayed at each tick position specified by `tickValues`. Used with `tickValues`.
167
+ */
168
+ tickText?: string[];
165
169
  };
166
170
 
167
171
  /**
@@ -182,7 +182,6 @@ import { useFocusableGroup, useArrowNavigationGroup } from '@fluentui/react-tabs
182
182
  let callout = null;
183
183
  let children = null;
184
184
  if (props.enableFirstRenderOptimization && chartContainer.current || !props.enableFirstRenderOptimization) {
185
- var _props_xAxis, _props_xAxis1, _props_yAxis, _props_yAxis1;
186
185
  _isFirstRender.current = false;
187
186
  var _props_showRoundOffXTickValues;
188
187
  const XAxisParams = {
@@ -207,8 +206,7 @@ import { useFocusableGroup, useArrowNavigationGroup } from '@fluentui/react-tabs
207
206
  containerWidth: containerWidth,
208
207
  hideTickOverlap: props.rotateXAxisLables ? false : props.hideTickOverlap,
209
208
  calcMaxLabelWidth: _calcMaxLabelWidthWithTransform,
210
- tickStep: (_props_xAxis = props.xAxis) === null || _props_xAxis === void 0 ? void 0 : _props_xAxis.tickStep,
211
- tick0: (_props_xAxis1 = props.xAxis) === null || _props_xAxis1 === void 0 ? void 0 : _props_xAxis1.tick0
209
+ ...props.xAxis
212
210
  };
213
211
  /**
214
212
  * These scales used for 2 purposes.
@@ -251,8 +249,7 @@ import { useFocusableGroup, useArrowNavigationGroup } from '@fluentui/react-tabs
251
249
  // http://using-d3js.com/04_07_ordinal_scales.html
252
250
  yAxisPadding: props.yAxisPadding || 0,
253
251
  tickValues: props.yAxisTickValues,
254
- tickStep: (_props_yAxis = props.yAxis) === null || _props_yAxis === void 0 ? void 0 : _props_yAxis.tickStep,
255
- tick0: (_props_yAxis1 = props.yAxis) === null || _props_yAxis1 === void 0 ? void 0 : _props_yAxis1.tick0
252
+ ...props.yAxis
256
253
  };
257
254
  /**
258
255
  * These scales used for 2 purposes.
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/components/CommonComponents/CartesianChart.tsx"],"sourcesContent":["'use client';\n\nimport * as React from 'react';\n// eslint-disable-next-line import/no-extraneous-dependencies\nimport { ModifiedCartesianChartProps } from '../../index';\nimport { useCartesianChartStyles } from './useCartesianChartStyles.styles';\nimport { select as d3Select } from 'd3-selection';\nimport {\n createNumericXAxis,\n createStringXAxis,\n IAxisData,\n createDateXAxis,\n IMargins,\n XAxisTypes,\n YAxisType,\n createWrapOfXLabels,\n rotateXAxisLabels,\n calculateLongestLabelWidth,\n createYAxisLabels,\n ChartTypes,\n wrapContent,\n useRtl,\n truncateString,\n tooltipOfAxislabels,\n getSecureProps,\n DEFAULT_WRAP_WIDTH,\n} from '../../utilities/index';\nimport { useId } from '@fluentui/react-utilities';\nimport type { JSXElement } from '@fluentui/react-utilities';\nimport { SVGTooltipText, SVGTooltipTextProps } from '../../utilities/SVGTooltipText';\nimport { ChartPopover } from './ChartPopover';\nimport { useFocusableGroup, useArrowNavigationGroup } from '@fluentui/react-tabster';\n\n/**\n * Cartesian Chart component\n * {@docCategory CartesianChart}\n */\nexport const CartesianChart: React.FunctionComponent<ModifiedCartesianChartProps> = React.forwardRef<\n HTMLDivElement,\n ModifiedCartesianChartProps\n>((props, forwardedRef) => {\n const chartContainer = React.useRef<HTMLDivElement>();\n let legendContainer: HTMLDivElement;\n const minLegendContainerHeight: number = 40;\n const xAxisElement = React.useRef<SVGSVGElement>();\n const yAxisElement = React.useRef<SVGSVGElement>();\n const yAxisElementSecondary = React.useRef<SVGSVGElement>();\n let margins: IMargins;\n const idForGraph: string = 'chart_';\n let _reqID: number;\n const _useRtl: boolean = useRtl();\n let _tickValues: (string | number)[];\n const titleMargin: number = 8;\n const _isFirstRender = React.useRef<boolean>(true);\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n let _xScale: any;\n const isIntegralDataset = React.useMemo(() => {\n return !props.points.some((point: { y: number }) => point.y % 1 !== 0);\n }, [props.points]);\n let _tooltipId: string = useId('tooltip_');\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 let _removalValueForTextTuncate: number = 0;\n\n const [containerWidth, setContainerWidth] = React.useState<number>(0);\n const [containerHeight, setContainerHeight] = React.useState<number>(0);\n const [startFromX, setStartFromX] = React.useState<number>(0);\n const [prevProps, setPrevProps] = React.useState<ModifiedCartesianChartProps | null>(null);\n\n const chartTypesWithStringYAxis = [\n ChartTypes.HorizontalBarChartWithAxis,\n ChartTypes.HeatMapChart,\n ChartTypes.VerticalStackedBarChart,\n ChartTypes.GanttChart,\n ChartTypes.ScatterChart,\n ];\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 // eslint-disable-next-line prefer-const\n margins = {\n top: props.margins?.top ?? 20,\n bottom: props.margins?.bottom ?? 35,\n right: _useRtl ? props.margins?.left ?? 40 : props.margins?.right ?? props?.secondaryYScaleOptions ? 40 : 20,\n left: _useRtl ? (props.margins?.right ?? props?.secondaryYScaleOptions ? 40 : 20) : props.margins?.left ?? 40,\n };\n const TITLE_MARGIN_HORIZONTAL = 24;\n const TITLE_MARGIN_VERTICAL = 20;\n if (props.xAxisTitle !== undefined && props.xAxisTitle !== '') {\n margins.bottom! = props.margins?.bottom ?? margins.bottom! + TITLE_MARGIN_VERTICAL;\n }\n if (props.yAxisTitle !== undefined && props.yAxisTitle !== '') {\n margins.left! = _useRtl\n ? props.margins?.right ?? props?.secondaryYAxistitle\n ? margins.right! + 2 * TITLE_MARGIN_HORIZONTAL\n : margins.right! + TITLE_MARGIN_HORIZONTAL\n : props.margins?.left ?? margins.left! + TITLE_MARGIN_HORIZONTAL;\n margins.right! = _useRtl\n ? props.margins?.left ?? margins.left! + TITLE_MARGIN_HORIZONTAL\n : props.margins?.right ?? props?.secondaryYAxistitle\n ? margins.right! + 2 * TITLE_MARGIN_HORIZONTAL\n : margins.right! + TITLE_MARGIN_HORIZONTAL;\n }\n if (props.xAxisAnnotation !== undefined && props.xAxisAnnotation !== '') {\n margins.top! = props.margins?.top ?? margins.top! + TITLE_MARGIN_VERTICAL;\n }\n if (\n props.yAxisAnnotation !== undefined &&\n props.yAxisAnnotation !== '' &&\n (props.secondaryYAxistitle === undefined || props.secondaryYAxistitle === '')\n ) {\n if (_useRtl) {\n margins.left! = props.margins?.right ?? margins.right! + TITLE_MARGIN_HORIZONTAL;\n } else {\n margins.right! = props.margins?.right ?? margins.right! + TITLE_MARGIN_HORIZONTAL;\n }\n }\n\n const classes = useCartesianChartStyles(props);\n const focusAttributes = useFocusableGroup();\n const arrowAttributes = useArrowNavigationGroup({ axis: 'horizontal' });\n // ComponentdidMount and Componentwillunmount logic\n React.useEffect(() => {\n _fitParentContainer();\n if (props !== null) {\n setPrevProps(props);\n }\n if (\n chartTypesWithStringYAxis.includes(props.chartType) &&\n props.showYAxisLables &&\n yAxisElement &&\n props.yAxisType === YAxisType.StringAxis\n ) {\n const maxYAxisLabelLength = calculateMaxYAxisLabelLength(classes.yAxis!);\n if (startFromX !== maxYAxisLabelLength) {\n setStartFromX(maxYAxisLabelLength);\n }\n } else if (startFromX !== 0) {\n setStartFromX(0);\n }\n return () => {\n cancelAnimationFrame(_reqID);\n };\n }, [props]);\n\n // ComponentDidUpdate logic\n React.useEffect(() => {\n if (prevProps) {\n if (prevProps.height !== props.height || prevProps.width !== props.width) {\n _fitParentContainer();\n }\n }\n if (\n chartTypesWithStringYAxis.includes(props.chartType) &&\n props.showYAxisLables &&\n yAxisElement &&\n props.yAxisType === YAxisType.StringAxis\n ) {\n const maxYAxisLabelLength = calculateMaxYAxisLabelLength(classes.yAxis!);\n if (startFromX !== maxYAxisLabelLength) {\n setStartFromX(maxYAxisLabelLength);\n }\n } else if (startFromX !== 0) {\n setStartFromX(0);\n }\n }, [props, prevProps]);\n\n React.useImperativeHandle(\n props.componentRef,\n () => ({\n chartContainer: chartContainer.current ?? null,\n }),\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\n function _generateCallout(calloutProps: any): JSXElement {\n return <ChartPopover {...calloutProps} />;\n }\n\n function calculateMaxYAxisLabelLength(className: string): number {\n const formatTickLabel = (str: string) => {\n if (props.showYAxisLablesTooltip) {\n return truncateString(str, props.noOfCharsToTruncate || 4);\n }\n\n return str;\n };\n return calculateLongestLabelWidth(\n props.stringDatasetForYAxisDomain!.map(label => formatTickLabel(label)),\n `.${className} text`,\n );\n }\n\n const {\n calloutProps,\n points,\n chartType,\n svgProps,\n culture,\n dateLocalizeOptions,\n timeFormatLocale,\n customDateTimeFormatter,\n } = props;\n if (props.parentRef) {\n _fitParentContainer();\n }\n const margin = { ...margins };\n // Note: This check is unnecessary since startFromX is only set for charts with string y-axis.\n if (chartTypesWithStringYAxis.includes(props.chartType)) {\n if (!_useRtl) {\n margin.left! += startFromX;\n } else {\n margin.right! += startFromX;\n }\n }\n // Callback for margins to the chart\n props.getmargins && props.getmargins(margin);\n\n let callout: JSXElement | null = null;\n\n let children = null;\n if ((props.enableFirstRenderOptimization && chartContainer.current) || !props.enableFirstRenderOptimization) {\n _isFirstRender.current = false;\n const XAxisParams = {\n domainNRangeValues: props.getDomainNRangeValues(\n points,\n props.getDomainMargins ? props.getDomainMargins(containerWidth) : margins,\n containerWidth,\n chartType,\n _useRtl,\n props.xAxisType,\n props.barwidth!,\n props.tickValues!,\n // This is only used for Horizontal Bar Chart with Axis for y as string axis\n 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: containerHeight - _removalValueForTextTuncate,\n margins: margins,\n xAxisElement: xAxisElement.current!,\n showRoundOffXTickValues: props.showRoundOffXTickValues ?? true,\n xAxisCount: props.xAxisTickCount,\n xAxistickSize: props.xAxistickSize,\n tickPadding: props.tickPadding || props.showXAxisLablesTooltip ? 5 : 10,\n xAxisPadding: props.xAxisPadding,\n xAxisInnerPadding: props.xAxisInnerPadding,\n xAxisOuterPadding: props.xAxisOuterPadding,\n containerWidth: containerWidth,\n hideTickOverlap: props.rotateXAxisLables ? false : props.hideTickOverlap,\n calcMaxLabelWidth: _calcMaxLabelWidthWithTransform,\n tickStep: props.xAxis?.tickStep,\n tick0: 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 (props.xAxisType!) {\n case XAxisTypes.NumericAxis:\n ({ xScale, tickValues } = createNumericXAxis(\n XAxisParams,\n props.tickParams!,\n props.chartType,\n culture,\n props.xScaleType,\n _useRtl,\n ));\n break;\n case XAxisTypes.DateAxis:\n ({ xScale, tickValues } = createDateXAxis(\n XAxisParams,\n props.tickParams!,\n culture,\n dateLocalizeOptions,\n timeFormatLocale,\n customDateTimeFormatter,\n props.useUTC,\n props.chartType,\n ));\n break;\n case XAxisTypes.StringAxis:\n ({ xScale, tickValues } = createStringXAxis(\n XAxisParams,\n props.tickParams!,\n props.datasetForXAxisDomain!,\n culture,\n _useRtl,\n ));\n break;\n default:\n ({ xScale, tickValues } = createNumericXAxis(\n XAxisParams,\n props.tickParams!,\n props.chartType,\n culture,\n props.xScaleType,\n _useRtl,\n ));\n }\n _xScale = xScale;\n _tickValues = tickValues;\n\n _transformXAxisLabels();\n\n const YAxisParams = {\n margins: props.getYDomainMargins ? props.getYDomainMargins(containerHeight) : margins,\n containerWidth: containerWidth,\n containerHeight: containerHeight - _removalValueForTextTuncate,\n yAxisElement: yAxisElement.current!,\n yAxisTickFormat: props.yAxisTickFormat!,\n yAxisTickCount: props.yAxisTickCount!,\n yMinValue: props.yMinValue || 0,\n yMaxValue: props.yMaxValue || 0,\n tickPadding: 10,\n maxOfYVal: props.maxOfYVal,\n yMinMaxValues: props.getMinMaxOfYAxis(points, 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: props.yAxisPadding || 0,\n tickValues: props.yAxisTickValues,\n tickStep: props.yAxis?.tickStep,\n tick0: props.yAxis?.tick0,\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 (props.yAxisType && props.yAxisType === YAxisType.StringAxis) {\n yScalePrimary = props.createStringYAxis(\n YAxisParams,\n props.stringDatasetForYAxisDomain!,\n _useRtl,\n props.barwidth,\n 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 (props?.secondaryYScaleOptions) {\n const YAxisParamsSecondary = {\n margins: margins,\n containerWidth: containerWidth,\n containerHeight: containerHeight - _removalValueForTextTuncate!,\n yAxisElement: yAxisElementSecondary.current,\n yAxisTickFormat: props.yAxisTickFormat!,\n yAxisTickCount: props.yAxisTickCount!,\n yMinValue: props.secondaryYScaleOptions?.yMinValue || 0,\n yMaxValue: props.secondaryYScaleOptions?.yMaxValue ?? 100,\n tickPadding: 10,\n yMinMaxValues: props.getMinMaxOfYAxis(points, props.yAxisType, true),\n yAxisPadding: props.yAxisPadding,\n };\n\n yScaleSecondary = props.createYAxis(\n YAxisParamsSecondary,\n _useRtl,\n axisData,\n isIntegralDataset,\n chartType,\n true,\n props.roundedTicks!,\n props.secondaryYScaleType,\n _useRtl,\n );\n }\n yScalePrimary = props.createYAxis(\n YAxisParams,\n _useRtl,\n axisData,\n isIntegralDataset,\n chartType,\n false,\n props.roundedTicks!,\n props.yScaleType,\n _useRtl,\n );\n }\n\n if (chartTypesWithStringYAxis.includes(props.chartType) && 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 _tooltipId)\n if (!props.showYAxisLablesTooltip) {\n try {\n document.getElementById(_tooltipId) && document.getElementById(_tooltipId)!.remove();\n //eslint-disable-next-line no-empty\n } catch (e) {}\n }\n // Used to display tooltip at y axis labels.\n if (props.showYAxisLablesTooltip) {\n // 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 yAxisElement.current!,\n yScalePrimary,\n props.noOfCharsToTruncate || 4,\n props.showYAxisLablesTooltip || false,\n _useRtl,\n );\n const _yAxisElement = d3Select(yAxisElement.current!).call(yScalePrimary);\n try {\n document.getElementById(_tooltipId) && document.getElementById(_tooltipId)!.remove();\n //eslint-disable-next-line no-empty\n } catch (e) {}\n const ytooltipProps = {\n tooltipCls: classes.tooltip!,\n id: _tooltipId,\n axis: _yAxisElement,\n };\n _yAxisElement && tooltipOfAxislabels(ytooltipProps);\n }\n }\n\n // Call back to the chart.\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const _getData = (xScale: any, yScalePrimary: any, yScaleSecondary: any) => {\n props.getGraphData &&\n props.getGraphData(\n xScale,\n yScalePrimary,\n containerHeight - _removalValueForTextTuncate!,\n containerWidth,\n xAxisElement.current,\n yAxisElement.current,\n yScaleSecondary,\n );\n };\n\n props.getAxisData && props.getAxisData(axisData);\n // Callback function for chart, returns axis\n _getData(xScale, yScalePrimary, yScaleSecondary);\n\n children = props.children({\n xScale,\n yScalePrimary,\n yScaleSecondary,\n containerHeight,\n containerWidth,\n });\n\n if (!props.hideTooltip && calloutProps!.isPopoverOpen) {\n callout = _generateCallout(calloutProps);\n }\n }\n const svgDimensions = {\n width: containerWidth,\n height: containerHeight,\n };\n\n const xAxisTitleMaximumAllowedWidth = svgDimensions.width - margins.left! - margins.right! - startFromX!;\n const yAxisTitleMaximumAllowedHeight =\n svgDimensions.height - margins.bottom! - margins.top! - _removalValueForTextTuncate! - titleMargin;\n\n const commonSvgToolTipProps: SVGTooltipTextProps = {\n wrapContent,\n showBackground: true,\n className: classes.svgTooltip,\n content: '',\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 function _fitParentContainer(): void {\n //_reqID = requestAnimationFrame(() => {\n let legendContainerHeight;\n if (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 = legendContainer && getComputedStyle(legendContainer);\n legendContainerHeight =\n ((legendContainer && legendContainer.getBoundingClientRect().height) || minLegendContainerHeight) +\n parseFloat((legendContainerComputedStyles && legendContainerComputedStyles.marginTop) || '0') +\n parseFloat((legendContainerComputedStyles && legendContainerComputedStyles.marginBottom) || '0');\n }\n if (props.parentRef || chartContainer.current) {\n const container = props.parentRef ? props.parentRef : chartContainer.current!;\n const currentContainerWidth =\n props.reflowProps?.mode === 'min-width' && !_isFirstRender.current\n ? Math.max(container.getBoundingClientRect().width, _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 || containerHeight !== currentContainerHeight - legendContainerHeight;\n if (shouldResize) {\n setContainerWidth(currentContainerWidth);\n setContainerHeight(currentContainerHeight - legendContainerHeight);\n }\n }\n //});\n }\n\n function _onChartLeave(): void {\n props.onChartMouseLeave && props.onChartMouseLeave();\n }\n\n function _calculateChartMinWidth(): number {\n // Adding 10px for padding on both sides\n const labelWidth = _calcMaxLabelWidthWithTransform(_tickValues) + 10;\n\n let minChartWidth = margins.left! + margins.right! + labelWidth * (_tickValues.length - 1);\n\n if (\n [ChartTypes.GroupedVerticalBarChart, ChartTypes.VerticalBarChart, ChartTypes.VerticalStackedBarChart].includes(\n props.chartType,\n )\n ) {\n const minDomainMargin = 8;\n minChartWidth += minDomainMargin * 2;\n }\n\n return minChartWidth;\n }\n\n function _calcMaxLabelWidthWithTransform(x: (string | number)[]) {\n // Case: rotated labels\n if (!props.wrapXAxisLables && props.rotateXAxisLables && props.xAxisType! === XAxisTypes.StringAxis) {\n const longestLabelWidth = calculateLongestLabelWidth(x, `.${classes.xAxis} text`);\n return Math.ceil(longestLabelWidth * Math.cos(Math.PI / 4));\n }\n\n // Case: truncated labels\n if (props.showXAxisLablesTooltip) {\n const tickValues = x.map(val => {\n const numChars = props.noOfCharsToTruncate || 4;\n return val.toString().length > numChars ? `${val.toString().slice(0, numChars)}...` : val;\n });\n\n const longestLabelWidth = calculateLongestLabelWidth(tickValues, `.${classes.xAxis} text`);\n return Math.ceil(longestLabelWidth);\n }\n\n // Case: wrapped labels\n if (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, `.${classes.xAxis} text`);\n return Math.max(Math.ceil(longestLabelWidth), DEFAULT_WRAP_WIDTH);\n }\n\n // Default case\n const longestLabelWidth = calculateLongestLabelWidth(x, `.${classes.xAxis} text`);\n return Math.ceil(longestLabelWidth);\n }\n\n function _transformXAxisLabels() {\n _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 (props.wrapXAxisLables || props.showXAxisLablesTooltip) {\n let maxXAxisLabelWidth: number | undefined;\n if (props.xAxisType === XAxisTypes.StringAxis) {\n if ((props.datasetForXAxisDomain?.length || 0) > 1) {\n maxXAxisLabelWidth = _xScale.step();\n } else {\n maxXAxisLabelWidth = containerWidth;\n }\n }\n\n const wrapLabelProps = {\n node: xAxisElement.current!,\n xAxis: _xScale,\n showXAxisLablesTooltip: props.showXAxisLablesTooltip || false,\n noOfCharsToTruncate: props.noOfCharsToTruncate || 4,\n width: maxXAxisLabelWidth,\n };\n _removalValueForTextTuncate = createWrapOfXLabels(wrapLabelProps) ?? 0;\n }\n\n if (!props.wrapXAxisLables && props.rotateXAxisLables && props.xAxisType! === XAxisTypes.StringAxis) {\n const rotateLabelProps = {\n node: xAxisElement.current!,\n xAxis: _xScale,\n };\n const rotatedHeight = rotateXAxisLabels(rotateLabelProps) ?? 0;\n // margins.bottom is used as padding here\n _removalValueForTextTuncate = rotatedHeight + margins.bottom!;\n }\n }\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={idForGraph}\n className={classes.root}\n role={'presentation'}\n ref={(rootElem: HTMLDivElement) => (chartContainer.current = rootElem)}\n onMouseLeave={_onChartLeave}\n >\n <div className={classes.chartWrapper} {...focusAttributes} {...arrowAttributes}>\n {_isFirstRender.current}\n <svg\n width={svgDimensions.width}\n height={svgDimensions.height}\n aria-label={props.chartTitle}\n style={{ display: 'block' }}\n className={classes.chart}\n {...getSecureProps(svgProps)}\n >\n <g\n ref={(e: SVGSVGElement | null) => {\n xAxisElement.current = e!;\n }}\n id={`xAxisGElement${idForGraph}`}\n // To add wrap of x axis lables feature, need to remove word height from svg height.\n transform={`translate(0, ${svgDimensions.height - margins.bottom! - _removalValueForTextTuncate!})`}\n className={classes.xAxis}\n />\n {props.xAxisTitle !== undefined && props.xAxisTitle !== '' && (\n <SVGTooltipText\n {...commonSvgToolTipProps}\n content={props.xAxisTitle}\n textProps={{\n x: margins.left! + startFromX + xAxisTitleMaximumAllowedWidth / 2,\n y: svgDimensions.height - titleMargin,\n className: classes.axisTitle!,\n textAnchor: 'middle',\n }}\n maxWidth={xAxisTitleMaximumAllowedWidth}\n />\n )}\n {props.xAxisAnnotation !== undefined && props.xAxisAnnotation !== '' && (\n <SVGTooltipText\n {...commonSvgToolTipProps}\n content={props.xAxisAnnotation}\n textProps={{\n x: margins.left! + startFromX + xAxisTitleMaximumAllowedWidth / 2,\n y: titleMargin + 3,\n className: classes.axisAnnotation!,\n textAnchor: 'middle',\n 'aria-hidden': true,\n }}\n maxWidth={xAxisTitleMaximumAllowedWidth}\n />\n )}\n <g\n ref={(e: SVGSVGElement | null) => {\n yAxisElement.current = e!;\n }}\n id={`yAxisGElement${idForGraph}`}\n transform={`translate(${\n _useRtl ? svgDimensions.width - margins.right! - startFromX : margins.left! + startFromX\n }, 0)`}\n className={classes.yAxis}\n />\n {props.secondaryYScaleOptions && (\n <g>\n <g\n ref={(e: SVGSVGElement | null) => {\n yAxisElementSecondary.current = e!;\n }}\n id={`yAxisGElementSecondary${idForGraph}`}\n transform={`translate(${\n _useRtl ? margins.left! + startFromX : svgDimensions.width - margins.right! - startFromX\n }, 0)`}\n className={classes.yAxis}\n />\n {props.secondaryYAxistitle !== undefined && props.secondaryYAxistitle !== '' && (\n <SVGTooltipText\n {...commonSvgToolTipProps}\n content={props.secondaryYAxistitle}\n textProps={{\n x: (yAxisTitleMaximumAllowedHeight - margins.bottom!) / 2 + _removalValueForTextTuncate!,\n y: _useRtl ? startFromX - titleMargin : svgDimensions.width - margins.right!,\n textAnchor: 'middle',\n transform: `translate(${\n _useRtl ? margins.right! / 2 - titleMargin : margins.right! / 2 + titleMargin\n },\n ${svgDimensions.height - margins.bottom! - margins.top! - titleMargin})rotate(-90)`,\n className: classes.axisTitle!,\n }}\n maxWidth={yAxisTitleMaximumAllowedHeight}\n />\n )}\n </g>\n )}\n {children}\n {props.yAxisTitle !== undefined && props.yAxisTitle !== '' && (\n <SVGTooltipText\n {...commonSvgToolTipProps}\n content={props.yAxisTitle}\n textProps={{\n x: (yAxisTitleMaximumAllowedHeight - margins.bottom!) / 2 + _removalValueForTextTuncate!,\n y: _useRtl ? svgDimensions.width - margins.right! / 2 + titleMargin : margins.left! / 2 - titleMargin,\n textAnchor: 'middle',\n transform: `translate(0,\n ${svgDimensions.height - margins.bottom! - margins.top! - titleMargin})rotate(-90)`,\n className: classes.axisTitle!,\n }}\n maxWidth={yAxisTitleMaximumAllowedHeight}\n />\n )}\n {props.yAxisAnnotation !== undefined &&\n props.yAxisAnnotation !== '' &&\n (props.secondaryYAxistitle === undefined || props.secondaryYAxistitle === '') && (\n <SVGTooltipText\n {...commonSvgToolTipProps}\n content={props.yAxisAnnotation}\n textProps={{\n x: (yAxisTitleMaximumAllowedHeight - margins.bottom!) / 2 + _removalValueForTextTuncate!,\n y: _useRtl ? startFromX - titleMargin : svgDimensions.width - margins.right!,\n textAnchor: 'middle',\n transform: `translate(${\n _useRtl ? margins.right! / 2 - titleMargin : margins.right! / 2 + titleMargin\n },\n ${svgDimensions.height - margins.bottom! - margins.top! - titleMargin})rotate(-90)`,\n className: classes.axisAnnotation!,\n 'aria-hidden': true,\n }}\n maxWidth={yAxisTitleMaximumAllowedHeight}\n />\n )}\n </svg>\n </div>\n\n {!props.hideLegend && (\n <div ref={(e: HTMLDivElement) => (legendContainer = e)} className={classes.legendContainer}>\n {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});\nCartesianChart.displayName = 'CartesianChart';\nCartesianChart.defaultProps = {\n hideTickOverlap: true,\n};\n"],"names":["React","useCartesianChartStyles","select","d3Select","createNumericXAxis","createStringXAxis","createDateXAxis","XAxisTypes","YAxisType","createWrapOfXLabels","rotateXAxisLabels","calculateLongestLabelWidth","createYAxisLabels","ChartTypes","wrapContent","useRtl","truncateString","tooltipOfAxislabels","getSecureProps","DEFAULT_WRAP_WIDTH","useId","SVGTooltipText","ChartPopover","useFocusableGroup","useArrowNavigationGroup","CartesianChart","forwardRef","props","forwardedRef","chartContainer","useRef","legendContainer","minLegendContainerHeight","xAxisElement","yAxisElement","yAxisElementSecondary","margins","idForGraph","_reqID","_useRtl","_tickValues","titleMargin","_isFirstRender","_xScale","isIntegralDataset","useMemo","points","some","point","y","_tooltipId","_removalValueForTextTuncate","containerWidth","setContainerWidth","useState","containerHeight","setContainerHeight","startFromX","setStartFromX","prevProps","setPrevProps","chartTypesWithStringYAxis","HorizontalBarChartWithAxis","HeatMapChart","VerticalStackedBarChart","GanttChart","ScatterChart","top","bottom","right","left","secondaryYScaleOptions","TITLE_MARGIN_HORIZONTAL","TITLE_MARGIN_VERTICAL","xAxisTitle","undefined","yAxisTitle","secondaryYAxistitle","xAxisAnnotation","yAxisAnnotation","classes","focusAttributes","arrowAttributes","axis","useEffect","_fitParentContainer","includes","chartType","showYAxisLables","yAxisType","StringAxis","maxYAxisLabelLength","calculateMaxYAxisLabelLength","yAxis","cancelAnimationFrame","height","width","useImperativeHandle","componentRef","current","_generateCallout","calloutProps","className","formatTickLabel","str","showYAxisLablesTooltip","noOfCharsToTruncate","stringDatasetForYAxisDomain","map","label","svgProps","culture","dateLocalizeOptions","timeFormatLocale","customDateTimeFormatter","parentRef","margin","getmargins","callout","children","enableFirstRenderOptimization","XAxisParams","domainNRangeValues","getDomainNRangeValues","getDomainMargins","xAxisType","barwidth","tickValues","showRoundOffXTickValues","xAxisCount","xAxisTickCount","xAxistickSize","tickPadding","showXAxisLablesTooltip","xAxisPadding","xAxisInnerPadding","xAxisOuterPadding","hideTickOverlap","rotateXAxisLables","calcMaxLabelWidth","_calcMaxLabelWidthWithTransform","tickStep","xAxis","tick0","xScale","NumericAxis","tickParams","xScaleType","DateAxis","useUTC","datasetForXAxisDomain","_transformXAxisLabels","YAxisParams","getYDomainMargins","yAxisTickFormat","yAxisTickCount","yMinValue","yMaxValue","maxOfYVal","yMinMaxValues","getMinMaxOfYAxis","yAxisPadding","yAxisTickValues","yScalePrimary","yScaleSecondary","axisData","yAxisDomainValues","createStringYAxis","YAxisParamsSecondary","createYAxis","roundedTicks","secondaryYScaleType","yScaleType","document","getElementById","remove","e","_yAxisElement","call","ytooltipProps","tooltipCls","tooltip","id","_getData","getGraphData","getAxisData","hideTooltip","isPopoverOpen","svgDimensions","xAxisTitleMaximumAllowedWidth","yAxisTitleMaximumAllowedHeight","commonSvgToolTipProps","showBackground","svgTooltip","content","legendContainerHeight","hideLegend","legendContainerComputedStyles","getComputedStyle","getBoundingClientRect","parseFloat","marginTop","marginBottom","container","currentContainerWidth","reflowProps","mode","Math","max","_calculateChartMinWidth","currentContainerHeight","shouldResize","_onChartLeave","onChartMouseLeave","labelWidth","minChartWidth","length","GroupedVerticalBarChart","VerticalBarChart","minDomainMargin","x","wrapXAxisLables","longestLabelWidth","ceil","cos","PI","val","numChars","toString","slice","words","forEach","push","split","maxXAxisLabelWidth","step","wrapLabelProps","node","rotateLabelProps","rotatedHeight","div","root","role","ref","rootElem","onMouseLeave","chartWrapper","svg","aria-label","chartTitle","style","display","chart","g","transform","textProps","axisTitle","textAnchor","maxWidth","axisAnnotation","legendBars","Suspense","fallback","displayName","defaultProps"],"mappings":"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"}
1
+ {"version":3,"sources":["../src/components/CommonComponents/CartesianChart.tsx"],"sourcesContent":["'use client';\n\nimport * as React from 'react';\n// eslint-disable-next-line import/no-extraneous-dependencies\nimport { ModifiedCartesianChartProps } from '../../index';\nimport { useCartesianChartStyles } from './useCartesianChartStyles.styles';\nimport { select as d3Select } from 'd3-selection';\nimport {\n createNumericXAxis,\n createStringXAxis,\n IAxisData,\n createDateXAxis,\n IMargins,\n XAxisTypes,\n YAxisType,\n createWrapOfXLabels,\n rotateXAxisLabels,\n calculateLongestLabelWidth,\n createYAxisLabels,\n ChartTypes,\n wrapContent,\n useRtl,\n truncateString,\n tooltipOfAxislabels,\n getSecureProps,\n DEFAULT_WRAP_WIDTH,\n} from '../../utilities/index';\nimport { useId } from '@fluentui/react-utilities';\nimport type { JSXElement } from '@fluentui/react-utilities';\nimport { SVGTooltipText, SVGTooltipTextProps } from '../../utilities/SVGTooltipText';\nimport { ChartPopover } from './ChartPopover';\nimport { useFocusableGroup, useArrowNavigationGroup } from '@fluentui/react-tabster';\n\n/**\n * Cartesian Chart component\n * {@docCategory CartesianChart}\n */\nexport const CartesianChart: React.FunctionComponent<ModifiedCartesianChartProps> = React.forwardRef<\n HTMLDivElement,\n ModifiedCartesianChartProps\n>((props, forwardedRef) => {\n const chartContainer = React.useRef<HTMLDivElement>();\n let legendContainer: HTMLDivElement;\n const minLegendContainerHeight: number = 40;\n const xAxisElement = React.useRef<SVGSVGElement>();\n const yAxisElement = React.useRef<SVGSVGElement>();\n const yAxisElementSecondary = React.useRef<SVGSVGElement>();\n let margins: IMargins;\n const idForGraph: string = 'chart_';\n let _reqID: number;\n const _useRtl: boolean = useRtl();\n let _tickValues: (string | number)[];\n const titleMargin: number = 8;\n const _isFirstRender = React.useRef<boolean>(true);\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n let _xScale: any;\n const isIntegralDataset = React.useMemo(() => {\n return !props.points.some((point: { y: number }) => point.y % 1 !== 0);\n }, [props.points]);\n let _tooltipId: string = useId('tooltip_');\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 let _removalValueForTextTuncate: number = 0;\n\n const [containerWidth, setContainerWidth] = React.useState<number>(0);\n const [containerHeight, setContainerHeight] = React.useState<number>(0);\n const [startFromX, setStartFromX] = React.useState<number>(0);\n const [prevProps, setPrevProps] = React.useState<ModifiedCartesianChartProps | null>(null);\n\n const chartTypesWithStringYAxis = [\n ChartTypes.HorizontalBarChartWithAxis,\n ChartTypes.HeatMapChart,\n ChartTypes.VerticalStackedBarChart,\n ChartTypes.GanttChart,\n ChartTypes.ScatterChart,\n ];\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 // eslint-disable-next-line prefer-const\n margins = {\n top: props.margins?.top ?? 20,\n bottom: props.margins?.bottom ?? 35,\n right: _useRtl ? props.margins?.left ?? 40 : props.margins?.right ?? props?.secondaryYScaleOptions ? 40 : 20,\n left: _useRtl ? (props.margins?.right ?? props?.secondaryYScaleOptions ? 40 : 20) : props.margins?.left ?? 40,\n };\n const TITLE_MARGIN_HORIZONTAL = 24;\n const TITLE_MARGIN_VERTICAL = 20;\n if (props.xAxisTitle !== undefined && props.xAxisTitle !== '') {\n margins.bottom! = props.margins?.bottom ?? margins.bottom! + TITLE_MARGIN_VERTICAL;\n }\n if (props.yAxisTitle !== undefined && props.yAxisTitle !== '') {\n margins.left! = _useRtl\n ? props.margins?.right ?? props?.secondaryYAxistitle\n ? margins.right! + 2 * TITLE_MARGIN_HORIZONTAL\n : margins.right! + TITLE_MARGIN_HORIZONTAL\n : props.margins?.left ?? margins.left! + TITLE_MARGIN_HORIZONTAL;\n margins.right! = _useRtl\n ? props.margins?.left ?? margins.left! + TITLE_MARGIN_HORIZONTAL\n : props.margins?.right ?? props?.secondaryYAxistitle\n ? margins.right! + 2 * TITLE_MARGIN_HORIZONTAL\n : margins.right! + TITLE_MARGIN_HORIZONTAL;\n }\n if (props.xAxisAnnotation !== undefined && props.xAxisAnnotation !== '') {\n margins.top! = props.margins?.top ?? margins.top! + TITLE_MARGIN_VERTICAL;\n }\n if (\n props.yAxisAnnotation !== undefined &&\n props.yAxisAnnotation !== '' &&\n (props.secondaryYAxistitle === undefined || props.secondaryYAxistitle === '')\n ) {\n if (_useRtl) {\n margins.left! = props.margins?.right ?? margins.right! + TITLE_MARGIN_HORIZONTAL;\n } else {\n margins.right! = props.margins?.right ?? margins.right! + TITLE_MARGIN_HORIZONTAL;\n }\n }\n\n const classes = useCartesianChartStyles(props);\n const focusAttributes = useFocusableGroup();\n const arrowAttributes = useArrowNavigationGroup({ axis: 'horizontal' });\n // ComponentdidMount and Componentwillunmount logic\n React.useEffect(() => {\n _fitParentContainer();\n if (props !== null) {\n setPrevProps(props);\n }\n if (\n chartTypesWithStringYAxis.includes(props.chartType) &&\n props.showYAxisLables &&\n yAxisElement &&\n props.yAxisType === YAxisType.StringAxis\n ) {\n const maxYAxisLabelLength = calculateMaxYAxisLabelLength(classes.yAxis!);\n if (startFromX !== maxYAxisLabelLength) {\n setStartFromX(maxYAxisLabelLength);\n }\n } else if (startFromX !== 0) {\n setStartFromX(0);\n }\n return () => {\n cancelAnimationFrame(_reqID);\n };\n }, [props]);\n\n // ComponentDidUpdate logic\n React.useEffect(() => {\n if (prevProps) {\n if (prevProps.height !== props.height || prevProps.width !== props.width) {\n _fitParentContainer();\n }\n }\n if (\n chartTypesWithStringYAxis.includes(props.chartType) &&\n props.showYAxisLables &&\n yAxisElement &&\n props.yAxisType === YAxisType.StringAxis\n ) {\n const maxYAxisLabelLength = calculateMaxYAxisLabelLength(classes.yAxis!);\n if (startFromX !== maxYAxisLabelLength) {\n setStartFromX(maxYAxisLabelLength);\n }\n } else if (startFromX !== 0) {\n setStartFromX(0);\n }\n }, [props, prevProps]);\n\n React.useImperativeHandle(\n props.componentRef,\n () => ({\n chartContainer: chartContainer.current ?? null,\n }),\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\n function _generateCallout(calloutProps: any): JSXElement {\n return <ChartPopover {...calloutProps} />;\n }\n\n function calculateMaxYAxisLabelLength(className: string): number {\n const formatTickLabel = (str: string) => {\n if (props.showYAxisLablesTooltip) {\n return truncateString(str, props.noOfCharsToTruncate || 4);\n }\n\n return str;\n };\n return calculateLongestLabelWidth(\n props.stringDatasetForYAxisDomain!.map(label => formatTickLabel(label)),\n `.${className} text`,\n );\n }\n\n const {\n calloutProps,\n points,\n chartType,\n svgProps,\n culture,\n dateLocalizeOptions,\n timeFormatLocale,\n customDateTimeFormatter,\n } = props;\n if (props.parentRef) {\n _fitParentContainer();\n }\n const margin = { ...margins };\n // Note: This check is unnecessary since startFromX is only set for charts with string y-axis.\n if (chartTypesWithStringYAxis.includes(props.chartType)) {\n if (!_useRtl) {\n margin.left! += startFromX;\n } else {\n margin.right! += startFromX;\n }\n }\n // Callback for margins to the chart\n props.getmargins && props.getmargins(margin);\n\n let callout: JSXElement | null = null;\n\n let children = null;\n if ((props.enableFirstRenderOptimization && chartContainer.current) || !props.enableFirstRenderOptimization) {\n _isFirstRender.current = false;\n const XAxisParams = {\n domainNRangeValues: props.getDomainNRangeValues(\n points,\n props.getDomainMargins ? props.getDomainMargins(containerWidth) : margins,\n containerWidth,\n chartType,\n _useRtl,\n props.xAxisType,\n props.barwidth!,\n props.tickValues!,\n // This is only used for Horizontal Bar Chart with Axis for y as string axis\n 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: containerHeight - _removalValueForTextTuncate,\n margins: margins,\n xAxisElement: xAxisElement.current!,\n showRoundOffXTickValues: props.showRoundOffXTickValues ?? true,\n xAxisCount: props.xAxisTickCount,\n xAxistickSize: props.xAxistickSize,\n tickPadding: props.tickPadding || props.showXAxisLablesTooltip ? 5 : 10,\n xAxisPadding: props.xAxisPadding,\n xAxisInnerPadding: props.xAxisInnerPadding,\n xAxisOuterPadding: props.xAxisOuterPadding,\n containerWidth: containerWidth,\n hideTickOverlap: props.rotateXAxisLables ? false : props.hideTickOverlap,\n calcMaxLabelWidth: _calcMaxLabelWidthWithTransform,\n ...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 (props.xAxisType!) {\n case XAxisTypes.NumericAxis:\n ({ xScale, tickValues } = createNumericXAxis(\n XAxisParams,\n props.tickParams!,\n props.chartType,\n culture,\n props.xScaleType,\n _useRtl,\n ));\n break;\n case XAxisTypes.DateAxis:\n ({ xScale, tickValues } = createDateXAxis(\n XAxisParams,\n props.tickParams!,\n culture,\n dateLocalizeOptions,\n timeFormatLocale,\n customDateTimeFormatter,\n props.useUTC,\n props.chartType,\n ));\n break;\n case XAxisTypes.StringAxis:\n ({ xScale, tickValues } = createStringXAxis(\n XAxisParams,\n props.tickParams!,\n props.datasetForXAxisDomain!,\n culture,\n _useRtl,\n ));\n break;\n default:\n ({ xScale, tickValues } = createNumericXAxis(\n XAxisParams,\n props.tickParams!,\n props.chartType,\n culture,\n props.xScaleType,\n _useRtl,\n ));\n }\n _xScale = xScale;\n _tickValues = tickValues;\n\n _transformXAxisLabels();\n\n const YAxisParams = {\n margins: props.getYDomainMargins ? props.getYDomainMargins(containerHeight) : margins,\n containerWidth: containerWidth,\n containerHeight: containerHeight - _removalValueForTextTuncate,\n yAxisElement: yAxisElement.current!,\n yAxisTickFormat: props.yAxisTickFormat!,\n yAxisTickCount: props.yAxisTickCount!,\n yMinValue: props.yMinValue || 0,\n yMaxValue: props.yMaxValue || 0,\n tickPadding: 10,\n maxOfYVal: props.maxOfYVal,\n yMinMaxValues: props.getMinMaxOfYAxis(points, 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: props.yAxisPadding || 0,\n tickValues: props.yAxisTickValues,\n ...props.yAxis,\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 (props.yAxisType && props.yAxisType === YAxisType.StringAxis) {\n yScalePrimary = props.createStringYAxis(\n YAxisParams,\n props.stringDatasetForYAxisDomain!,\n _useRtl,\n props.barwidth,\n 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 (props?.secondaryYScaleOptions) {\n const YAxisParamsSecondary = {\n margins: margins,\n containerWidth: containerWidth,\n containerHeight: containerHeight - _removalValueForTextTuncate!,\n yAxisElement: yAxisElementSecondary.current,\n yAxisTickFormat: props.yAxisTickFormat!,\n yAxisTickCount: props.yAxisTickCount!,\n yMinValue: props.secondaryYScaleOptions?.yMinValue || 0,\n yMaxValue: props.secondaryYScaleOptions?.yMaxValue ?? 100,\n tickPadding: 10,\n yMinMaxValues: props.getMinMaxOfYAxis(points, props.yAxisType, true),\n yAxisPadding: props.yAxisPadding,\n };\n\n yScaleSecondary = props.createYAxis(\n YAxisParamsSecondary,\n _useRtl,\n axisData,\n isIntegralDataset,\n chartType,\n true,\n props.roundedTicks!,\n props.secondaryYScaleType,\n _useRtl,\n );\n }\n yScalePrimary = props.createYAxis(\n YAxisParams,\n _useRtl,\n axisData,\n isIntegralDataset,\n chartType,\n false,\n props.roundedTicks!,\n props.yScaleType,\n _useRtl,\n );\n }\n\n if (chartTypesWithStringYAxis.includes(props.chartType) && 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 _tooltipId)\n if (!props.showYAxisLablesTooltip) {\n try {\n document.getElementById(_tooltipId) && document.getElementById(_tooltipId)!.remove();\n //eslint-disable-next-line no-empty\n } catch (e) {}\n }\n // Used to display tooltip at y axis labels.\n if (props.showYAxisLablesTooltip) {\n // 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 yAxisElement.current!,\n yScalePrimary,\n props.noOfCharsToTruncate || 4,\n props.showYAxisLablesTooltip || false,\n _useRtl,\n );\n const _yAxisElement = d3Select(yAxisElement.current!).call(yScalePrimary);\n try {\n document.getElementById(_tooltipId) && document.getElementById(_tooltipId)!.remove();\n //eslint-disable-next-line no-empty\n } catch (e) {}\n const ytooltipProps = {\n tooltipCls: classes.tooltip!,\n id: _tooltipId,\n axis: _yAxisElement,\n };\n _yAxisElement && tooltipOfAxislabels(ytooltipProps);\n }\n }\n\n // Call back to the chart.\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const _getData = (xScale: any, yScalePrimary: any, yScaleSecondary: any) => {\n props.getGraphData &&\n props.getGraphData(\n xScale,\n yScalePrimary,\n containerHeight - _removalValueForTextTuncate!,\n containerWidth,\n xAxisElement.current,\n yAxisElement.current,\n yScaleSecondary,\n );\n };\n\n props.getAxisData && props.getAxisData(axisData);\n // Callback function for chart, returns axis\n _getData(xScale, yScalePrimary, yScaleSecondary);\n\n children = props.children({\n xScale,\n yScalePrimary,\n yScaleSecondary,\n containerHeight,\n containerWidth,\n });\n\n if (!props.hideTooltip && calloutProps!.isPopoverOpen) {\n callout = _generateCallout(calloutProps);\n }\n }\n const svgDimensions = {\n width: containerWidth,\n height: containerHeight,\n };\n\n const xAxisTitleMaximumAllowedWidth = svgDimensions.width - margins.left! - margins.right! - startFromX!;\n const yAxisTitleMaximumAllowedHeight =\n svgDimensions.height - margins.bottom! - margins.top! - _removalValueForTextTuncate! - titleMargin;\n\n const commonSvgToolTipProps: SVGTooltipTextProps = {\n wrapContent,\n showBackground: true,\n className: classes.svgTooltip,\n content: '',\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 function _fitParentContainer(): void {\n //_reqID = requestAnimationFrame(() => {\n let legendContainerHeight;\n if (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 = legendContainer && getComputedStyle(legendContainer);\n legendContainerHeight =\n ((legendContainer && legendContainer.getBoundingClientRect().height) || minLegendContainerHeight) +\n parseFloat((legendContainerComputedStyles && legendContainerComputedStyles.marginTop) || '0') +\n parseFloat((legendContainerComputedStyles && legendContainerComputedStyles.marginBottom) || '0');\n }\n if (props.parentRef || chartContainer.current) {\n const container = props.parentRef ? props.parentRef : chartContainer.current!;\n const currentContainerWidth =\n props.reflowProps?.mode === 'min-width' && !_isFirstRender.current\n ? Math.max(container.getBoundingClientRect().width, _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 || containerHeight !== currentContainerHeight - legendContainerHeight;\n if (shouldResize) {\n setContainerWidth(currentContainerWidth);\n setContainerHeight(currentContainerHeight - legendContainerHeight);\n }\n }\n //});\n }\n\n function _onChartLeave(): void {\n props.onChartMouseLeave && props.onChartMouseLeave();\n }\n\n function _calculateChartMinWidth(): number {\n // Adding 10px for padding on both sides\n const labelWidth = _calcMaxLabelWidthWithTransform(_tickValues) + 10;\n\n let minChartWidth = margins.left! + margins.right! + labelWidth * (_tickValues.length - 1);\n\n if (\n [ChartTypes.GroupedVerticalBarChart, ChartTypes.VerticalBarChart, ChartTypes.VerticalStackedBarChart].includes(\n props.chartType,\n )\n ) {\n const minDomainMargin = 8;\n minChartWidth += minDomainMargin * 2;\n }\n\n return minChartWidth;\n }\n\n function _calcMaxLabelWidthWithTransform(x: (string | number)[]) {\n // Case: rotated labels\n if (!props.wrapXAxisLables && props.rotateXAxisLables && props.xAxisType! === XAxisTypes.StringAxis) {\n const longestLabelWidth = calculateLongestLabelWidth(x, `.${classes.xAxis} text`);\n return Math.ceil(longestLabelWidth * Math.cos(Math.PI / 4));\n }\n\n // Case: truncated labels\n if (props.showXAxisLablesTooltip) {\n const tickValues = x.map(val => {\n const numChars = props.noOfCharsToTruncate || 4;\n return val.toString().length > numChars ? `${val.toString().slice(0, numChars)}...` : val;\n });\n\n const longestLabelWidth = calculateLongestLabelWidth(tickValues, `.${classes.xAxis} text`);\n return Math.ceil(longestLabelWidth);\n }\n\n // Case: wrapped labels\n if (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, `.${classes.xAxis} text`);\n return Math.max(Math.ceil(longestLabelWidth), DEFAULT_WRAP_WIDTH);\n }\n\n // Default case\n const longestLabelWidth = calculateLongestLabelWidth(x, `.${classes.xAxis} text`);\n return Math.ceil(longestLabelWidth);\n }\n\n function _transformXAxisLabels() {\n _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 (props.wrapXAxisLables || props.showXAxisLablesTooltip) {\n let maxXAxisLabelWidth: number | undefined;\n if (props.xAxisType === XAxisTypes.StringAxis) {\n if ((props.datasetForXAxisDomain?.length || 0) > 1) {\n maxXAxisLabelWidth = _xScale.step();\n } else {\n maxXAxisLabelWidth = containerWidth;\n }\n }\n\n const wrapLabelProps = {\n node: xAxisElement.current!,\n xAxis: _xScale,\n showXAxisLablesTooltip: props.showXAxisLablesTooltip || false,\n noOfCharsToTruncate: props.noOfCharsToTruncate || 4,\n width: maxXAxisLabelWidth,\n };\n _removalValueForTextTuncate = createWrapOfXLabels(wrapLabelProps) ?? 0;\n }\n\n if (!props.wrapXAxisLables && props.rotateXAxisLables && props.xAxisType! === XAxisTypes.StringAxis) {\n const rotateLabelProps = {\n node: xAxisElement.current!,\n xAxis: _xScale,\n };\n const rotatedHeight = rotateXAxisLabels(rotateLabelProps) ?? 0;\n // margins.bottom is used as padding here\n _removalValueForTextTuncate = rotatedHeight + margins.bottom!;\n }\n }\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={idForGraph}\n className={classes.root}\n role={'presentation'}\n ref={(rootElem: HTMLDivElement) => (chartContainer.current = rootElem)}\n onMouseLeave={_onChartLeave}\n >\n <div className={classes.chartWrapper} {...focusAttributes} {...arrowAttributes}>\n {_isFirstRender.current}\n <svg\n width={svgDimensions.width}\n height={svgDimensions.height}\n aria-label={props.chartTitle}\n style={{ display: 'block' }}\n className={classes.chart}\n {...getSecureProps(svgProps)}\n >\n <g\n ref={(e: SVGSVGElement | null) => {\n xAxisElement.current = e!;\n }}\n id={`xAxisGElement${idForGraph}`}\n // To add wrap of x axis lables feature, need to remove word height from svg height.\n transform={`translate(0, ${svgDimensions.height - margins.bottom! - _removalValueForTextTuncate!})`}\n className={classes.xAxis}\n />\n {props.xAxisTitle !== undefined && props.xAxisTitle !== '' && (\n <SVGTooltipText\n {...commonSvgToolTipProps}\n content={props.xAxisTitle}\n textProps={{\n x: margins.left! + startFromX + xAxisTitleMaximumAllowedWidth / 2,\n y: svgDimensions.height - titleMargin,\n className: classes.axisTitle!,\n textAnchor: 'middle',\n }}\n maxWidth={xAxisTitleMaximumAllowedWidth}\n />\n )}\n {props.xAxisAnnotation !== undefined && props.xAxisAnnotation !== '' && (\n <SVGTooltipText\n {...commonSvgToolTipProps}\n content={props.xAxisAnnotation}\n textProps={{\n x: margins.left! + startFromX + xAxisTitleMaximumAllowedWidth / 2,\n y: titleMargin + 3,\n className: classes.axisAnnotation!,\n textAnchor: 'middle',\n 'aria-hidden': true,\n }}\n maxWidth={xAxisTitleMaximumAllowedWidth}\n />\n )}\n <g\n ref={(e: SVGSVGElement | null) => {\n yAxisElement.current = e!;\n }}\n id={`yAxisGElement${idForGraph}`}\n transform={`translate(${\n _useRtl ? svgDimensions.width - margins.right! - startFromX : margins.left! + startFromX\n }, 0)`}\n className={classes.yAxis}\n />\n {props.secondaryYScaleOptions && (\n <g>\n <g\n ref={(e: SVGSVGElement | null) => {\n yAxisElementSecondary.current = e!;\n }}\n id={`yAxisGElementSecondary${idForGraph}`}\n transform={`translate(${\n _useRtl ? margins.left! + startFromX : svgDimensions.width - margins.right! - startFromX\n }, 0)`}\n className={classes.yAxis}\n />\n {props.secondaryYAxistitle !== undefined && props.secondaryYAxistitle !== '' && (\n <SVGTooltipText\n {...commonSvgToolTipProps}\n content={props.secondaryYAxistitle}\n textProps={{\n x: (yAxisTitleMaximumAllowedHeight - margins.bottom!) / 2 + _removalValueForTextTuncate!,\n y: _useRtl ? startFromX - titleMargin : svgDimensions.width - margins.right!,\n textAnchor: 'middle',\n transform: `translate(${\n _useRtl ? margins.right! / 2 - titleMargin : margins.right! / 2 + titleMargin\n },\n ${svgDimensions.height - margins.bottom! - margins.top! - titleMargin})rotate(-90)`,\n className: classes.axisTitle!,\n }}\n maxWidth={yAxisTitleMaximumAllowedHeight}\n />\n )}\n </g>\n )}\n {children}\n {props.yAxisTitle !== undefined && props.yAxisTitle !== '' && (\n <SVGTooltipText\n {...commonSvgToolTipProps}\n content={props.yAxisTitle}\n textProps={{\n x: (yAxisTitleMaximumAllowedHeight - margins.bottom!) / 2 + _removalValueForTextTuncate!,\n y: _useRtl ? svgDimensions.width - margins.right! / 2 + titleMargin : margins.left! / 2 - titleMargin,\n textAnchor: 'middle',\n transform: `translate(0,\n ${svgDimensions.height - margins.bottom! - margins.top! - titleMargin})rotate(-90)`,\n className: classes.axisTitle!,\n }}\n maxWidth={yAxisTitleMaximumAllowedHeight}\n />\n )}\n {props.yAxisAnnotation !== undefined &&\n props.yAxisAnnotation !== '' &&\n (props.secondaryYAxistitle === undefined || props.secondaryYAxistitle === '') && (\n <SVGTooltipText\n {...commonSvgToolTipProps}\n content={props.yAxisAnnotation}\n textProps={{\n x: (yAxisTitleMaximumAllowedHeight - margins.bottom!) / 2 + _removalValueForTextTuncate!,\n y: _useRtl ? startFromX - titleMargin : svgDimensions.width - margins.right!,\n textAnchor: 'middle',\n transform: `translate(${\n _useRtl ? margins.right! / 2 - titleMargin : margins.right! / 2 + titleMargin\n },\n ${svgDimensions.height - margins.bottom! - margins.top! - titleMargin})rotate(-90)`,\n className: classes.axisAnnotation!,\n 'aria-hidden': true,\n }}\n maxWidth={yAxisTitleMaximumAllowedHeight}\n />\n )}\n </svg>\n </div>\n\n {!props.hideLegend && (\n <div ref={(e: HTMLDivElement) => (legendContainer = e)} className={classes.legendContainer}>\n {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});\nCartesianChart.displayName = 'CartesianChart';\nCartesianChart.defaultProps = {\n hideTickOverlap: true,\n};\n"],"names":["React","useCartesianChartStyles","select","d3Select","createNumericXAxis","createStringXAxis","createDateXAxis","XAxisTypes","YAxisType","createWrapOfXLabels","rotateXAxisLabels","calculateLongestLabelWidth","createYAxisLabels","ChartTypes","wrapContent","useRtl","truncateString","tooltipOfAxislabels","getSecureProps","DEFAULT_WRAP_WIDTH","useId","SVGTooltipText","ChartPopover","useFocusableGroup","useArrowNavigationGroup","CartesianChart","forwardRef","props","forwardedRef","chartContainer","useRef","legendContainer","minLegendContainerHeight","xAxisElement","yAxisElement","yAxisElementSecondary","margins","idForGraph","_reqID","_useRtl","_tickValues","titleMargin","_isFirstRender","_xScale","isIntegralDataset","useMemo","points","some","point","y","_tooltipId","_removalValueForTextTuncate","containerWidth","setContainerWidth","useState","containerHeight","setContainerHeight","startFromX","setStartFromX","prevProps","setPrevProps","chartTypesWithStringYAxis","HorizontalBarChartWithAxis","HeatMapChart","VerticalStackedBarChart","GanttChart","ScatterChart","top","bottom","right","left","secondaryYScaleOptions","TITLE_MARGIN_HORIZONTAL","TITLE_MARGIN_VERTICAL","xAxisTitle","undefined","yAxisTitle","secondaryYAxistitle","xAxisAnnotation","yAxisAnnotation","classes","focusAttributes","arrowAttributes","axis","useEffect","_fitParentContainer","includes","chartType","showYAxisLables","yAxisType","StringAxis","maxYAxisLabelLength","calculateMaxYAxisLabelLength","yAxis","cancelAnimationFrame","height","width","useImperativeHandle","componentRef","current","_generateCallout","calloutProps","className","formatTickLabel","str","showYAxisLablesTooltip","noOfCharsToTruncate","stringDatasetForYAxisDomain","map","label","svgProps","culture","dateLocalizeOptions","timeFormatLocale","customDateTimeFormatter","parentRef","margin","getmargins","callout","children","enableFirstRenderOptimization","XAxisParams","domainNRangeValues","getDomainNRangeValues","getDomainMargins","xAxisType","barwidth","tickValues","showRoundOffXTickValues","xAxisCount","xAxisTickCount","xAxistickSize","tickPadding","showXAxisLablesTooltip","xAxisPadding","xAxisInnerPadding","xAxisOuterPadding","hideTickOverlap","rotateXAxisLables","calcMaxLabelWidth","_calcMaxLabelWidthWithTransform","xAxis","xScale","NumericAxis","tickParams","xScaleType","DateAxis","useUTC","datasetForXAxisDomain","_transformXAxisLabels","YAxisParams","getYDomainMargins","yAxisTickFormat","yAxisTickCount","yMinValue","yMaxValue","maxOfYVal","yMinMaxValues","getMinMaxOfYAxis","yAxisPadding","yAxisTickValues","yScalePrimary","yScaleSecondary","axisData","yAxisDomainValues","createStringYAxis","YAxisParamsSecondary","createYAxis","roundedTicks","secondaryYScaleType","yScaleType","document","getElementById","remove","e","_yAxisElement","call","ytooltipProps","tooltipCls","tooltip","id","_getData","getGraphData","getAxisData","hideTooltip","isPopoverOpen","svgDimensions","xAxisTitleMaximumAllowedWidth","yAxisTitleMaximumAllowedHeight","commonSvgToolTipProps","showBackground","svgTooltip","content","legendContainerHeight","hideLegend","legendContainerComputedStyles","getComputedStyle","getBoundingClientRect","parseFloat","marginTop","marginBottom","container","currentContainerWidth","reflowProps","mode","Math","max","_calculateChartMinWidth","currentContainerHeight","shouldResize","_onChartLeave","onChartMouseLeave","labelWidth","minChartWidth","length","GroupedVerticalBarChart","VerticalBarChart","minDomainMargin","x","wrapXAxisLables","longestLabelWidth","ceil","cos","PI","val","numChars","toString","slice","words","forEach","push","split","maxXAxisLabelWidth","step","wrapLabelProps","node","rotateLabelProps","rotatedHeight","div","root","role","ref","rootElem","onMouseLeave","chartWrapper","svg","aria-label","chartTitle","style","display","chart","g","transform","textProps","axisTitle","textAnchor","maxWidth","axisAnnotation","legendBars","Suspense","fallback","displayName","defaultProps"],"mappings":"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"}
@@ -417,7 +417,7 @@ export const transformPlotlyJsonToVSBCProps = (input, isMultiPlot, colorMap, col
417
417
  const { legends, hideLegend } = getLegendProps(input.data, input.layout, isMultiPlot);
418
418
  let colorScale = undefined;
419
419
  const yAxisTickFormat = getYAxisTickFormat(input.data[0], input.layout);
420
- const resolveXAxisValue = getAxisValueResolver(input.data, input.layout, 'x');
420
+ const resolveXValue = getAxisValueResolver(getAxisType(input.data, getAxisObjects(input.data, input.layout).x));
421
421
  input.data.forEach((series, index1)=>{
422
422
  var _input_layout_template_layout, _input_layout_template, _input_layout, _series_marker, _input_layout_template_layout1, _input_layout_template1, _input_layout1, _series_line;
423
423
  colorScale = createColorScale(input.layout, series, colorScale);
@@ -425,7 +425,7 @@ export const transformPlotlyJsonToVSBCProps = (input, isMultiPlot, colorMap, col
425
425
  const extractedBarColors = extractColor((_input_layout = input.layout) === null || _input_layout === void 0 ? void 0 : (_input_layout_template = _input_layout.template) === null || _input_layout_template === void 0 ? void 0 : (_input_layout_template_layout = _input_layout_template.layout) === null || _input_layout_template_layout === void 0 ? void 0 : _input_layout_template_layout.colorway, colorwayType, (_series_marker = series.marker) === null || _series_marker === void 0 ? void 0 : _series_marker.color, colorMap, isDarkTheme);
426
426
  // extract line colors for each series only once
427
427
  const extractedLineColors = extractColor((_input_layout1 = input.layout) === null || _input_layout1 === void 0 ? void 0 : (_input_layout_template1 = _input_layout1.template) === null || _input_layout_template1 === void 0 ? void 0 : (_input_layout_template_layout1 = _input_layout_template1.layout) === null || _input_layout_template_layout1 === void 0 ? void 0 : _input_layout_template_layout1.colorway, colorwayType, (_series_line = series.line) === null || _series_line === void 0 ? void 0 : _series_line.color, colorMap, isDarkTheme);
428
- const validXYRanges = getValidXYRanges(series, resolveXAxisValue);
428
+ const validXYRanges = getValidXYRanges(series, resolveXValue);
429
429
  validXYRanges.forEach(([rangeStart, rangeEnd], rangeIdx)=>{
430
430
  const rangeXValues = series.x.slice(rangeStart, rangeEnd);
431
431
  const rangeYValues = series.y.slice(rangeStart, rangeEnd);
@@ -433,7 +433,7 @@ export const transformPlotlyJsonToVSBCProps = (input, isMultiPlot, colorMap, col
433
433
  var _series_marker, _series_marker1, _series_marker_color, _series_marker2, _input_layout_template_layout, _input_layout_template, _input_layout;
434
434
  if (!mapXToDataPoints[x]) {
435
435
  mapXToDataPoints[x] = {
436
- xAxisPoint: resolveXAxisValue(x),
436
+ xAxisPoint: resolveXValue(x),
437
437
  chartData: [],
438
438
  lineData: []
439
439
  };
@@ -813,8 +813,9 @@ const transformPlotlyJsonToScatterTraceProps = (input, isMultiPlot, chartType, c
813
813
  let mode = 'tonexty';
814
814
  const { legends, hideLegend } = getLegendProps(input.data, input.layout, isMultiPlot);
815
815
  const yAxisTickFormat = getYAxisTickFormat(input.data[0], input.layout);
816
- const resolveXAxisValue = getAxisValueResolver(input.data, input.layout, 'x');
817
- const shouldWrapLabels = getAxisType(input.data, input.layout, 'x') === 'category';
816
+ const xAxisType = getAxisType(input.data, getAxisObjects(input.data, input.layout).x);
817
+ const resolveXValue = getAxisValueResolver(xAxisType);
818
+ const shouldWrapLabels = xAxisType === 'category';
818
819
  const chartData = input.data.map((series, index)=>{
819
820
  var _series_mode, _series_line, _series_marker, _series_line1, _input_layout_template_layout, _input_layout_template, _input_layout, _input_layout_template_layout1, _input_layout_template1, _input_layout1, _series_mode1;
820
821
  const colors = isScatterMarkers ? (series === null || series === void 0 ? void 0 : (_series_mode = series.mode) === null || _series_mode === void 0 ? void 0 : _series_mode.includes('line')) ? (_series_line = series.line) === null || _series_line === void 0 ? void 0 : _series_line.color : (_series_marker = series.marker) === null || _series_marker === void 0 ? void 0 : _series_marker.color : (_series_line1 = series.line) === null || _series_line1 === void 0 ? void 0 : _series_line1.color;
@@ -829,7 +830,7 @@ const transformPlotlyJsonToScatterTraceProps = (input, isMultiPlot, chartType, c
829
830
  // if mode contains 'text', we prioritize showing the text over curving the line
830
831
  const lineOptions = !((_series_mode1 = series.mode) === null || _series_mode1 === void 0 ? void 0 : _series_mode1.includes('text')) && series.type !== 'scatterpolar' ? getLineOptions(series.line) : undefined;
831
832
  const legendShape = getLegendShape(series);
832
- const validXYRanges = getValidXYRanges(series, resolveXAxisValue);
833
+ const validXYRanges = getValidXYRanges(series, resolveXValue);
833
834
  return validXYRanges.map(([rangeStart, rangeEnd], rangeIdx)=>{
834
835
  var _series_marker, _series_marker1, _series_marker2, _input_layout, _input_layout_polar_angularaxis, _input_layout_polar, _input_layout1, _input_layout_polar_angularaxis1, _input_layout_polar1, _input_layout2;
835
836
  const rangeXValues = xValues.slice(rangeStart, rangeEnd);
@@ -844,7 +845,7 @@ const transformPlotlyJsonToScatterTraceProps = (input, isMultiPlot, chartType, c
844
845
  data: rangeXValues.map((x, i)=>{
845
846
  var _series_marker, _series_marker1;
846
847
  return {
847
- x: resolveXAxisValue(x),
848
+ x: resolveXValue(x),
848
849
  y: rangeYValues[i],
849
850
  ...Array.isArray((_series_marker = series.marker) === null || _series_marker === void 0 ? void 0 : _series_marker.size) ? {
850
851
  markerSize: markerSizes[i]
@@ -1054,46 +1055,71 @@ export const transformPlotlyJsonToHorizontalBarWithAxisProps = (input, isMultiPl
1054
1055
  };
1055
1056
  export const transformPlotlyJsonToGanttChartProps = (input, isMultiPlot, colorMap, colorwayType, isDarkTheme)=>{
1056
1057
  var _input_layout, _input_layout1;
1057
- const { legends, hideLegend } = getLegendProps(input.data, input.layout, isMultiPlot);
1058
+ const data = input.data.filter((series)=>series.type !== 'scatter' || series.mode !== 'markers');
1059
+ const { legends, hideLegend } = getLegendProps(data, input.layout, isMultiPlot);
1058
1060
  let colorScale = undefined;
1059
- const isXDate = getAxisType(input.data, input.layout, 'x') === 'date';
1060
- const chartData = input.data.map((series, index)=>{
1061
- var _input_layout_template_layout, _input_layout_template, _input_layout, _series_marker;
1062
- colorScale = createColorScale(input.layout, series, colorScale);
1063
- // extract colors for each series only once
1064
- const extractedColors = extractColor((_input_layout = input.layout) === null || _input_layout === void 0 ? void 0 : (_input_layout_template = _input_layout.template) === null || _input_layout_template === void 0 ? void 0 : (_input_layout_template_layout = _input_layout_template.layout) === null || _input_layout_template_layout === void 0 ? void 0 : _input_layout_template_layout.colorway, colorwayType, (_series_marker = series.marker) === null || _series_marker === void 0 ? void 0 : _series_marker.color, colorMap, isDarkTheme);
1061
+ const xAxisType = getAxisType(data, getAxisObjects(data, input.layout).x);
1062
+ const resolveXValue = getAxisValueResolver(xAxisType, parseLocalDate);
1063
+ const resolveGanttXValue = (value)=>{
1064
+ const resolvedValue = resolveXValue(value);
1065
+ return typeof resolvedValue === 'string' ? 0 : resolvedValue !== null && resolvedValue !== void 0 ? resolvedValue : 0;
1066
+ };
1067
+ const isXDate = xAxisType === 'date';
1068
+ const ganttData = [];
1069
+ data.forEach((series, index)=>{
1065
1070
  const legend = legends[index];
1066
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
1067
- const convertXValueToNumber = (value)=>{
1068
- return isInvalidValue(value) ? 0 : isXDate ? +parseLocalDate(value) : +value;
1069
- };
1070
- return series.y.map((yVal, i)=>{
1071
- var _series_marker, _series_marker1, _series_marker_color, _series_marker2, _input_layout_template_layout, _input_layout_template, _input_layout, _series_base, _series_x;
1072
- if (isInvalidValue(yVal)) {
1073
- return null;
1071
+ if (series.type === 'bar') {
1072
+ var _input_layout_template_layout, _input_layout_template, _input_layout, _series_marker;
1073
+ colorScale = createColorScale(input.layout, series, colorScale);
1074
+ // extract colors for each series only once
1075
+ const extractedColors = extractColor((_input_layout = input.layout) === null || _input_layout === void 0 ? void 0 : (_input_layout_template = _input_layout.template) === null || _input_layout_template === void 0 ? void 0 : (_input_layout_template_layout = _input_layout_template.layout) === null || _input_layout_template_layout === void 0 ? void 0 : _input_layout_template_layout.colorway, colorwayType, (_series_marker = series.marker) === null || _series_marker === void 0 ? void 0 : _series_marker.color, colorMap, isDarkTheme);
1076
+ series.y.forEach((yVal, i)=>{
1077
+ var _series_marker, _series_marker1, _series_marker_color, _series_marker2, _input_layout_template_layout, _input_layout_template, _input_layout, _series_base, _series_x;
1078
+ if (isInvalidValue(yVal)) {
1079
+ return;
1080
+ }
1081
+ // resolve color for each legend's bars from the colorscale or extracted colors
1082
+ const color = colorScale ? colorScale(isArrayOrTypedArray((_series_marker = series.marker) === null || _series_marker === void 0 ? void 0 : _series_marker.color) ? (_series_marker2 = series.marker) === null || _series_marker2 === void 0 ? void 0 : (_series_marker_color = _series_marker2.color) === null || _series_marker_color === void 0 ? void 0 : _series_marker_color[i % ((_series_marker1 = series.marker) === null || _series_marker1 === void 0 ? void 0 : _series_marker1.color).length] : 0) : resolveColor(extractedColors, i, legend, colorMap, (_input_layout = input.layout) === null || _input_layout === void 0 ? void 0 : (_input_layout_template = _input_layout.template) === null || _input_layout_template === void 0 ? void 0 : (_input_layout_template_layout = _input_layout_template.layout) === null || _input_layout_template_layout === void 0 ? void 0 : _input_layout_template_layout.colorway, isDarkTheme);
1083
+ const opacity = getOpacity(series, i);
1084
+ const base = +resolveGanttXValue((_series_base = series.base) === null || _series_base === void 0 ? void 0 : _series_base[i]);
1085
+ const xVal = +resolveGanttXValue((_series_x = series.x) === null || _series_x === void 0 ? void 0 : _series_x[i]);
1086
+ var _rgb_copy_formatHex8;
1087
+ ganttData.push({
1088
+ x: {
1089
+ start: isXDate ? new Date(base) : base,
1090
+ end: isXDate ? new Date(base + xVal) : base + xVal
1091
+ },
1092
+ y: yVal,
1093
+ legend,
1094
+ color: (_rgb_copy_formatHex8 = rgb(color).copy({
1095
+ opacity
1096
+ }).formatHex8()) !== null && _rgb_copy_formatHex8 !== void 0 ? _rgb_copy_formatHex8 : color
1097
+ });
1098
+ });
1099
+ } else if (series.type === 'scatter' && series.mode === 'none' && series.fill === 'toself') {
1100
+ for(let i = 0; i < series.y.length; i += 5){
1101
+ if (isInvalidValue(series.y[i]) || isInvalidValue(series.y[i + 3])) {
1102
+ continue;
1103
+ }
1104
+ const x0 = resolveGanttXValue(series.x[i]);
1105
+ const x1 = resolveGanttXValue(series.x[i + 1]);
1106
+ const y0 = series.y[i];
1107
+ const y1 = series.y[i + 3];
1108
+ ganttData.push({
1109
+ x: {
1110
+ start: x0,
1111
+ end: x1
1112
+ },
1113
+ y: Math.round((y0 + y1) / 2),
1114
+ legend,
1115
+ color: series.fillcolor
1116
+ });
1074
1117
  }
1075
- // resolve color for each legend's bars from the colorscale or extracted colors
1076
- const color = colorScale ? colorScale(isArrayOrTypedArray((_series_marker = series.marker) === null || _series_marker === void 0 ? void 0 : _series_marker.color) ? (_series_marker2 = series.marker) === null || _series_marker2 === void 0 ? void 0 : (_series_marker_color = _series_marker2.color) === null || _series_marker_color === void 0 ? void 0 : _series_marker_color[i % ((_series_marker1 = series.marker) === null || _series_marker1 === void 0 ? void 0 : _series_marker1.color).length] : 0) : resolveColor(extractedColors, i, legend, colorMap, (_input_layout = input.layout) === null || _input_layout === void 0 ? void 0 : (_input_layout_template = _input_layout.template) === null || _input_layout_template === void 0 ? void 0 : (_input_layout_template_layout = _input_layout_template.layout) === null || _input_layout_template_layout === void 0 ? void 0 : _input_layout_template_layout.colorway, isDarkTheme);
1077
- const opacity = getOpacity(series, i);
1078
- const base = convertXValueToNumber((_series_base = series.base) === null || _series_base === void 0 ? void 0 : _series_base[i]);
1079
- const xVal = convertXValueToNumber((_series_x = series.x) === null || _series_x === void 0 ? void 0 : _series_x[i]);
1080
- var _rgb_copy_formatHex8;
1081
- return {
1082
- x: {
1083
- start: isXDate ? new Date(base) : base,
1084
- end: isXDate ? new Date(base + xVal) : base + xVal
1085
- },
1086
- y: yVal,
1087
- legend,
1088
- color: (_rgb_copy_formatHex8 = rgb(color).copy({
1089
- opacity
1090
- }).formatHex8()) !== null && _rgb_copy_formatHex8 !== void 0 ? _rgb_copy_formatHex8 : color
1091
- };
1092
- }).filter((point)=>point !== null);
1093
- }).flat();
1118
+ }
1119
+ });
1094
1120
  var _input_layout_height;
1095
1121
  return {
1096
- data: chartData,
1122
+ data: ganttData,
1097
1123
  showYAxisLables: true,
1098
1124
  height: (_input_layout_height = (_input_layout = input.layout) === null || _input_layout === void 0 ? void 0 : _input_layout.height) !== null && _input_layout_height !== void 0 ? _input_layout_height : 350,
1099
1125
  width: (_input_layout1 = input.layout) === null || _input_layout1 === void 0 ? void 0 : _input_layout1.width,
@@ -1104,9 +1130,9 @@ export const transformPlotlyJsonToGanttChartProps = (input, isMultiPlot, colorMa
1104
1130
  roundCorners: true,
1105
1131
  useUTC: false,
1106
1132
  ...getTitles(input.layout),
1107
- ...getAxisCategoryOrderProps(input.data, input.layout),
1108
- ...getBarProps(input.data, input.layout, true),
1109
- ...getAxisTickProps(input.data, input.layout)
1133
+ ...getAxisCategoryOrderProps(data, input.layout),
1134
+ ...getBarProps(data, input.layout, true),
1135
+ ...getAxisTickProps(data, input.layout)
1110
1136
  };
1111
1137
  };
1112
1138
  export const transformPlotlyJsonToHeatmapProps = (input, isMultiPlot, colorMap, colorwayType, isDarkTheme)=>{
@@ -2346,8 +2372,14 @@ const getAxisScaleTypeProps = (data, layout)=>{
2346
2372
  const tickValues = axType === 'date' ? ax.tickvals.map((v)=>new Date(v)) : ax.tickvals;
2347
2373
  if (axId === 'x') {
2348
2374
  props.tickValues = tickValues;
2375
+ props.xAxis = {
2376
+ tickText: ax.ticktext
2377
+ };
2349
2378
  } else if (axId === 'y') {
2350
2379
  props.yAxisTickValues = tickValues;
2380
+ props.yAxis = {
2381
+ tickText: ax.ticktext
2382
+ };
2351
2383
  }
2352
2384
  return;
2353
2385
  }
@@ -2456,14 +2488,7 @@ const getAxisObjects = (data, layout)=>{
2456
2488
  }
2457
2489
  return axisObjects;
2458
2490
  };
2459
- function getAxisType(data, arg2, arg3) {
2460
- let ax;
2461
- if (arg2 && typeof arg2 === 'object' && '_id' in arg2) {
2462
- ax = arg2;
2463
- } else if (typeof arg3 === 'string') {
2464
- const layout = arg2;
2465
- ax = getAxisObjects(data, layout)[arg3];
2466
- }
2491
+ const getAxisType = (data, ax)=>{
2467
2492
  if (!ax) {
2468
2493
  return 'category';
2469
2494
  }
@@ -2496,9 +2521,12 @@ function getAxisType(data, arg2, arg3) {
2496
2521
  return 'date';
2497
2522
  }
2498
2523
  return 'category';
2499
- }
2500
- const getAxisValueResolver = (data, layout, axisId)=>{
2501
- const axType = getAxisType(data, layout, axisId);
2524
+ };
2525
+ const getAxisValueResolver = (axType, dateParser)=>{
2526
+ const toDate = (value)=>{
2527
+ const date = dateParser ? dateParser(value) : new Date(value);
2528
+ return isNaN(date.getTime()) ? null : date;
2529
+ };
2502
2530
  return (value)=>{
2503
2531
  if (isInvalidValue(value)) {
2504
2532
  return null;
@@ -2509,10 +2537,10 @@ const getAxisValueResolver = (data, layout, axisId)=>{
2509
2537
  return isNumber(value) ? +value : null;
2510
2538
  case 'date':
2511
2539
  if (isNumber(value)) {
2512
- return new Date(+value);
2540
+ return toDate(+value);
2513
2541
  }
2514
2542
  if (typeof value === 'string') {
2515
- return new Date(value);
2543
+ return toDate(value);
2516
2544
  }
2517
2545
  return null;
2518
2546
  case 'category':