@fluentui/react-charts 9.0.5 → 9.0.7
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 +37 -7
- package/dist/index.d.ts +1 -1
- package/lib/components/CommonComponents/CartesianChart.js +4 -1
- package/lib/components/CommonComponents/CartesianChart.js.map +1 -1
- package/lib/components/CommonComponents/CartesianChart.types.js.map +1 -1
- package/lib/components/CommonComponents/ChartPopover.js +10 -10
- package/lib/components/CommonComponents/ChartPopover.js.map +1 -1
- package/lib/components/DeclarativeChart/DeclarativeChart.js +8 -3
- package/lib/components/DeclarativeChart/DeclarativeChart.js.map +1 -1
- package/lib/components/DeclarativeChart/PlotlySchemaAdapter.js +7 -13
- package/lib/components/DeclarativeChart/PlotlySchemaAdapter.js.map +1 -1
- package/lib/components/DonutChart/Arc/Arc.js +2 -2
- package/lib/components/DonutChart/Arc/Arc.js.map +1 -1
- package/lib/components/DonutChart/DonutChart.js +2 -2
- package/lib/components/DonutChart/DonutChart.js.map +1 -1
- package/lib/components/GaugeChart/GaugeChart.js +9 -9
- package/lib/components/GaugeChart/GaugeChart.js.map +1 -1
- package/lib/components/GaugeChart/useGaugeChartStyles.styles.js +18 -17
- package/lib/components/GaugeChart/useGaugeChartStyles.styles.js.map +1 -1
- package/lib/components/GroupedVerticalBarChart/GroupedVerticalBarChart.js +3 -3
- package/lib/components/GroupedVerticalBarChart/GroupedVerticalBarChart.js.map +1 -1
- package/lib/components/HeatMapChart/HeatMapChart.js +3 -2
- package/lib/components/HeatMapChart/HeatMapChart.js.map +1 -1
- package/lib/components/HorizontalBarChart/HorizontalBarChart.js +8 -8
- package/lib/components/HorizontalBarChart/HorizontalBarChart.js.map +1 -1
- package/lib/components/LineChart/LineChart.js +4 -4
- package/lib/components/LineChart/LineChart.js.map +1 -1
- package/lib/components/ScatterChart/ScatterChart.js +1 -1
- package/lib/components/ScatterChart/ScatterChart.js.map +1 -1
- package/lib/components/Sparkline/useSparklineStyles.styles.js +2 -12
- package/lib/components/Sparkline/useSparklineStyles.styles.js.map +1 -1
- package/lib/components/VerticalBarChart/VerticalBarChart.js +2 -2
- package/lib/components/VerticalBarChart/VerticalBarChart.js.map +1 -1
- package/lib/components/VerticalStackedBarChart/VerticalStackedBarChart.js +2 -2
- package/lib/components/VerticalStackedBarChart/VerticalStackedBarChart.js.map +1 -1
- package/lib/utilities/SVGTooltipText.js +5 -10
- package/lib/utilities/SVGTooltipText.js.map +1 -1
- package/lib/utilities/utilities.js +232 -53
- package/lib/utilities/utilities.js.map +1 -1
- package/lib-commonjs/components/CommonComponents/CartesianChart.js +4 -1
- package/lib-commonjs/components/CommonComponents/CartesianChart.js.map +1 -1
- package/lib-commonjs/components/CommonComponents/CartesianChart.types.js.map +1 -1
- package/lib-commonjs/components/CommonComponents/ChartPopover.js +10 -10
- package/lib-commonjs/components/CommonComponents/ChartPopover.js.map +1 -1
- package/lib-commonjs/components/DeclarativeChart/DeclarativeChart.js +7 -2
- package/lib-commonjs/components/DeclarativeChart/DeclarativeChart.js.map +1 -1
- package/lib-commonjs/components/DeclarativeChart/PlotlySchemaAdapter.js +6 -15
- package/lib-commonjs/components/DeclarativeChart/PlotlySchemaAdapter.js.map +1 -1
- package/lib-commonjs/components/DonutChart/Arc/Arc.js +1 -1
- package/lib-commonjs/components/DonutChart/Arc/Arc.js.map +1 -1
- package/lib-commonjs/components/DonutChart/DonutChart.js +2 -2
- package/lib-commonjs/components/DonutChart/DonutChart.js.map +1 -1
- package/lib-commonjs/components/GaugeChart/GaugeChart.js +8 -8
- package/lib-commonjs/components/GaugeChart/GaugeChart.js.map +1 -1
- package/lib-commonjs/components/GaugeChart/useGaugeChartStyles.styles.js +18 -17
- package/lib-commonjs/components/GaugeChart/useGaugeChartStyles.styles.js.map +1 -1
- package/lib-commonjs/components/GroupedVerticalBarChart/GroupedVerticalBarChart.js +2 -2
- package/lib-commonjs/components/GroupedVerticalBarChart/GroupedVerticalBarChart.js.map +1 -1
- package/lib-commonjs/components/HeatMapChart/HeatMapChart.js +2 -1
- package/lib-commonjs/components/HeatMapChart/HeatMapChart.js.map +1 -1
- package/lib-commonjs/components/HorizontalBarChart/HorizontalBarChart.js +7 -7
- package/lib-commonjs/components/HorizontalBarChart/HorizontalBarChart.js.map +1 -1
- package/lib-commonjs/components/LineChart/LineChart.js +4 -4
- package/lib-commonjs/components/LineChart/LineChart.js.map +1 -1
- package/lib-commonjs/components/ScatterChart/ScatterChart.js +1 -1
- package/lib-commonjs/components/ScatterChart/ScatterChart.js.map +1 -1
- package/lib-commonjs/components/Sparkline/useSparklineStyles.styles.js +3 -24
- package/lib-commonjs/components/Sparkline/useSparklineStyles.styles.js.map +1 -1
- package/lib-commonjs/components/VerticalBarChart/VerticalBarChart.js +1 -1
- package/lib-commonjs/components/VerticalBarChart/VerticalBarChart.js.map +1 -1
- package/lib-commonjs/components/VerticalStackedBarChart/VerticalStackedBarChart.js +1 -1
- package/lib-commonjs/components/VerticalStackedBarChart/VerticalStackedBarChart.js.map +1 -1
- package/lib-commonjs/utilities/SVGTooltipText.js +5 -10
- package/lib-commonjs/utilities/SVGTooltipText.js.map +1 -1
- package/lib-commonjs/utilities/utilities.js +236 -61
- package/lib-commonjs/utilities/utilities.js.map +1 -1
- package/package.json +9 -9
- package/lib/utilities/locale-util.js +0 -15
- package/lib/utilities/locale-util.js.map +0 -1
- package/lib-commonjs/utilities/locale-util.js +0 -25
- package/lib-commonjs/utilities/locale-util.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["utilities.ts"],"sourcesContent":["import { axisRight as d3AxisRight, axisBottom as d3AxisBottom, axisLeft as d3AxisLeft, Axis as D3Axis } from 'd3-axis';\nimport { max as d3Max, min as d3Min, ticks as d3Ticks, nice as d3nice } from 'd3-array';\nimport {\n scaleLinear as d3ScaleLinear,\n scaleBand as d3ScaleBand,\n scaleUtc as d3ScaleUtc,\n scaleTime as d3ScaleTime,\n NumberValue,\n} from 'd3-scale';\nimport { select as d3Select, selectAll as d3SelectAll } from 'd3-selection';\nimport { format as d3Format } from 'd3-format';\nimport {\n TimeLocaleObject as d3TimeLocaleObject,\n timeFormat as d3TimeFormat,\n timeFormatLocale as d3TimeFormatLocale,\n TimeLocaleDefinition as d3TimeLocaleDefinition,\n utcFormat as d3UtcFormat,\n} from 'd3-time-format';\nimport {\n timeSecond as d3TimeSecond,\n timeMinute as d3TimeMinute,\n timeHour as d3TimeHour,\n timeDay as d3TimeDay,\n timeMonth as d3TimeMonth,\n timeWeek as d3TimeWeek,\n timeYear as d3TimeYear,\n utcSecond as d3UtcSecond,\n utcMinute as d3UtcMinute,\n utcHour as d3UtcHour,\n utcDay as d3UtcDay,\n utcMonth as d3UtcMonth,\n utcWeek as d3UtcWeek,\n utcYear as d3UtcYear,\n} from 'd3-time';\nimport {\n CurveFactory,\n curveLinear as d3CurveLinear,\n curveNatural as d3CurveNatural,\n curveStep as d3CurveStep,\n curveStepAfter as d3CurveStepAfter,\n curveStepBefore as d3CurveStepBefore,\n} from 'd3-shape';\nimport {\n AccessibilityProps,\n EventsAnnotationProps,\n LineChartPoints,\n LineChartDataPoint,\n ScatterChartDataPoint,\n DataPoint,\n VerticalStackedBarDataPoint,\n VerticalBarChartDataPoint,\n HorizontalBarChartWithAxisDataPoint,\n LineChartLineOptions,\n} from '../index';\nimport { formatPrefix as d3FormatPrefix } from 'd3-format';\nimport { useFluent_unstable as useFluent } from '@fluentui/react-shared-contexts';\n\nexport type NumericAxis = D3Axis<number | { valueOf(): number }>;\nexport type StringAxis = D3Axis<string>;\n\nexport enum ChartTypes {\n AreaChart,\n LineChart,\n VerticalBarChart,\n VerticalStackedBarChart,\n GroupedVerticalBarChart,\n HeatMapChart,\n HorizontalBarChartWithAxis,\n ScatterChart,\n}\n\nexport enum XAxisTypes {\n NumericAxis,\n DateAxis,\n StringAxis,\n}\n\nexport enum YAxisType {\n NumericAxis,\n DateAxis,\n StringAxis,\n}\n\nexport interface IWrapLabelProps {\n node: SVGSVGElement | null;\n xAxis: NumericAxis | StringAxis;\n noOfCharsToTruncate: number;\n showXAxisLablesTooltip: boolean;\n}\n\nexport interface IRotateLabelProps {\n node: SVGSVGElement | null;\n xAxis: NumericAxis | StringAxis;\n}\n\nexport interface IAxisData {\n yAxisDomainValues: number[];\n}\n\nexport interface IMargins {\n /**\n * left margin for the chart.\n * @default 40\n */\n left?: number;\n /**\n * Right margin for the chart.\n * @default 20\n */\n right?: number;\n /**\n * Top margin for the chart.\n * @default 20\n */\n top?: number;\n /**\n * Bottom margin for the chart.\n * @default 35\n */\n bottom?: number;\n}\n\nexport interface IDomainNRange {\n dStartValue: number | Date;\n dEndValue: number | Date;\n rStartValue: number;\n rEndValue: number;\n}\n\nexport interface IXAxisParams {\n domainNRangeValues: IDomainNRange;\n xAxisElement?: SVGSVGElement | null;\n xAxisCount?: number;\n showRoundOffXTickValues?: boolean;\n xAxistickSize?: number;\n tickPadding?: number;\n xAxisPadding?: number;\n xAxisInnerPadding?: number;\n xAxisOuterPadding?: number;\n margins: IMargins;\n containerHeight: number;\n containerWidth: number;\n hideTickOverlap?: boolean;\n}\nexport interface ITickParams {\n tickValues?: Date[] | number[] | string[];\n tickFormat?: string;\n}\n\nexport interface IYAxisParams {\n yMinMaxValues?: {\n startValue: number;\n endValue: number;\n };\n maxOfYVal?: number;\n margins: IMargins;\n containerWidth: number;\n containerHeight: number;\n yAxisElement?: SVGSVGElement | null;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n yAxisTickFormat?: any;\n yAxisTickCount: number;\n yMaxValue?: number;\n yMinValue?: number;\n tickPadding?: number;\n eventAnnotationProps?: EventsAnnotationProps;\n eventLabelHeight?: number;\n yAxisPadding?: number;\n}\n\n/**\n * Create Numeric X axis\n * @export\n * @param {IXAxisParams} xAxisParams\n */\nexport function createNumericXAxis(\n xAxisParams: IXAxisParams,\n tickParams: ITickParams,\n chartType: ChartTypes,\n culture?: string,\n) {\n const {\n domainNRangeValues,\n showRoundOffXTickValues = false,\n xAxistickSize = 6,\n tickPadding = 10,\n xAxisCount,\n xAxisElement,\n hideTickOverlap,\n } = xAxisParams;\n const xAxisScale = d3ScaleLinear()\n .domain([domainNRangeValues.dStartValue, domainNRangeValues.dEndValue])\n .range([domainNRangeValues.rStartValue, domainNRangeValues.rEndValue]);\n showRoundOffXTickValues && xAxisScale.nice();\n\n let tickCount = xAxisCount ?? 6;\n const tickFormat = (domainValue: NumberValue, _index: number) => {\n if (tickParams.tickFormat) {\n return d3Format(tickParams.tickFormat)(domainValue);\n }\n const xAxisValue = typeof domainValue === 'number' ? domainValue : domainValue.valueOf();\n return convertToLocaleString(xAxisValue, culture) as string;\n };\n if (hideTickOverlap && typeof xAxisCount === 'undefined') {\n const longestLabelWidth =\n calculateLongestLabelWidth(xAxisScale.ticks().map(tickFormat), '.fui-cart__xAxis text') + 20;\n const [start, end] = xAxisScale.range();\n tickCount = Math.max(1, Math.floor(Math.abs(end - start) / longestLabelWidth));\n }\n\n const xAxis = d3AxisBottom(xAxisScale)\n .tickSize(xAxistickSize)\n .tickPadding(tickPadding)\n .ticks(tickCount)\n .tickFormat(tickFormat);\n if (chartType === ChartTypes.HorizontalBarChartWithAxis) {\n xAxis.tickSizeInner(-(xAxisParams.containerHeight - xAxisParams.margins.top!));\n }\n if (tickParams.tickValues) {\n xAxis.tickValues(tickParams.tickValues as number[]);\n }\n\n if (xAxisElement) {\n d3Select(xAxisElement).call(xAxis).selectAll('text').attr('aria-hidden', 'true');\n }\n const tickValues = ((tickParams.tickValues as number[] | undefined) ?? xAxisScale.ticks(tickCount)).map(\n xAxis.tickFormat()!,\n );\n return { xScale: xAxisScale, tickValues };\n}\n\nfunction multiFormat(date: Date, locale?: d3TimeLocaleObject, useUTC?: string | boolean) {\n const timeFormat = locale ? (useUTC ? locale.utcFormat : locale.format) : useUTC ? d3UtcFormat : d3TimeFormat;\n const formatMillisecond = timeFormat('.%L');\n const formatSecond = timeFormat(':%S');\n const formatMinute = timeFormat('%I:%M');\n const formatHour = timeFormat('%I %p');\n const formatDay = timeFormat('%a %d');\n const formatWeek = timeFormat('%b %d');\n const formatMonth = timeFormat('%B');\n const formatYear = timeFormat('%Y');\n\n const timeSecond = useUTC ? d3UtcSecond : d3TimeSecond;\n const timeMinute = useUTC ? d3UtcMinute : d3TimeMinute;\n const timeHour = useUTC ? d3UtcHour : d3TimeHour;\n const timeDay = useUTC ? d3UtcDay : d3TimeDay;\n const timeMonth = useUTC ? d3UtcMonth : d3TimeMonth;\n const timeWeek = useUTC ? d3UtcWeek : d3TimeWeek;\n const timeYear = useUTC ? d3UtcYear : d3TimeYear;\n\n return (\n timeSecond(date) < date\n ? formatMillisecond\n : timeMinute(date) < date\n ? formatSecond\n : timeHour(date) < date\n ? formatMinute\n : timeDay(date) < date\n ? formatHour\n : timeMonth(date) < date\n ? timeWeek(date) < date\n ? formatDay\n : formatWeek\n : timeYear(date) < date\n ? formatMonth\n : formatYear\n )(date);\n}\n\n/**\n * Creating Date x axis of the Chart\n * @export\n * @param {IXAxisParams} xAxisParams\n * @param {ITickParams} tickParams\n */\nexport function createDateXAxis(\n xAxisParams: IXAxisParams,\n tickParams: ITickParams,\n culture?: string,\n options?: Intl.DateTimeFormatOptions,\n timeFormatLocale?: d3TimeLocaleDefinition,\n customDateTimeFormatter?: (dateTime: Date) => string,\n useUTC?: string | boolean,\n) {\n const {\n domainNRangeValues,\n xAxisElement,\n tickPadding = 6,\n xAxistickSize = 6,\n xAxisCount,\n hideTickOverlap,\n } = xAxisParams;\n const xAxisScale = useUTC ? d3ScaleUtc() : d3ScaleTime();\n xAxisScale\n .domain([domainNRangeValues.dStartValue, domainNRangeValues.dEndValue])\n .range([domainNRangeValues.rStartValue, domainNRangeValues.rEndValue]);\n\n let tickCount = xAxisCount ?? 6;\n const tickFormat = (domainValue: Date, _index: number) => {\n if (customDateTimeFormatter) {\n return customDateTimeFormatter(domainValue);\n }\n if (culture && options) {\n return domainValue.toLocaleString(culture, options);\n }\n if (timeFormatLocale) {\n const locale: d3TimeLocaleObject = d3TimeFormatLocale(timeFormatLocale!);\n return multiFormat(domainValue, locale, useUTC);\n }\n if (culture === undefined && tickParams.tickFormat) {\n if (useUTC) {\n return d3UtcFormat(tickParams.tickFormat)(domainValue);\n } else {\n return d3TimeFormat(tickParams.tickFormat)(domainValue);\n }\n }\n return multiFormat(domainValue, undefined, useUTC);\n };\n if (hideTickOverlap && typeof xAxisCount === 'undefined') {\n const longestLabelWidth =\n calculateLongestLabelWidth(xAxisScale.ticks().map(tickFormat), '.fui-cart__xAxis text') + 40;\n const [start, end] = xAxisScale.range();\n tickCount = Math.max(1, Math.floor(Math.abs(end - start) / longestLabelWidth));\n }\n\n const xAxis = d3AxisBottom(xAxisScale)\n .tickSize(xAxistickSize)\n .tickPadding(tickPadding)\n .ticks(tickCount)\n .tickFormat(tickFormat);\n\n tickParams.tickValues ? xAxis.tickValues(tickParams.tickValues as Date[]) : '';\n if (xAxisElement) {\n d3Select(xAxisElement).call(xAxis).selectAll('text').attr('aria-hidden', 'true');\n }\n const tickValues = ((tickParams.tickValues as Date[] | undefined) ?? xAxisScale.ticks(tickCount)).map(\n xAxis.tickFormat()!,\n );\n return { xScale: xAxisScale, tickValues };\n}\n\n/**\n * Create String X axis\n * Currently using for only Vetical stacked bar chart and grouped vertical bar chart\n * @export\n * @param {IXAxisParams} xAxisParams\n * @param {ITickParams} tickParams\n * @param {string[]} dataset\n * @returns\n */\nexport function createStringXAxis(\n xAxisParams: IXAxisParams,\n tickParams: ITickParams,\n dataset: string[],\n culture?: string,\n) {\n const {\n domainNRangeValues,\n xAxistickSize = 6,\n tickPadding = 10,\n xAxisPadding = 0.1,\n xAxisInnerPadding,\n xAxisOuterPadding,\n containerWidth,\n hideTickOverlap,\n } = xAxisParams;\n const xAxisScale = d3ScaleBand()\n .domain(dataset!)\n .range([domainNRangeValues.rStartValue, domainNRangeValues.rEndValue])\n .paddingInner(typeof xAxisInnerPadding !== 'undefined' ? xAxisInnerPadding : xAxisPadding)\n .paddingOuter(typeof xAxisOuterPadding !== 'undefined' ? xAxisOuterPadding : xAxisPadding);\n\n let tickValues = (tickParams.tickValues as string[] | undefined) ?? dataset;\n const tickFormat = (domainValue: string, _index: number) => {\n return convertToLocaleString(domainValue, culture) as string;\n };\n if (hideTickOverlap) {\n let nonOverlappingTickValues = [];\n const tickSizes = tickValues.map((value, index) =>\n calculateLongestLabelWidth([tickFormat(value, index)], '.fui-cart__xAxis text'),\n );\n // for LTR\n let start = 0;\n let end = containerWidth;\n let sign = 1;\n const range = xAxisScale.range();\n if (range[1] - range[0] < 0) {\n // for RTL\n start = containerWidth;\n end = 0;\n sign = -1;\n }\n for (let i = tickValues.length - 1; i >= 0; i--) {\n const tickPosition = xAxisScale(tickValues[i])!;\n if (\n sign * (tickPosition - (sign * tickSizes[i]) / 2 - start) >= 0 &&\n sign * (tickPosition + (sign * tickSizes[i]) / 2 - end) <= 0\n ) {\n nonOverlappingTickValues.push(tickValues[i]);\n end = tickPosition - sign * (tickSizes[i] / 2 + 10);\n }\n }\n nonOverlappingTickValues = nonOverlappingTickValues.reverse();\n tickValues = nonOverlappingTickValues;\n }\n\n const xAxis = d3AxisBottom(xAxisScale)\n .tickSize(xAxistickSize)\n .tickPadding(tickPadding)\n .tickValues(tickValues)\n .tickFormat(tickFormat);\n\n if (xAxisParams.xAxisElement) {\n d3Select(xAxisParams.xAxisElement).call(xAxis).selectAll('text').attr('aria-hidden', 'true');\n }\n return { xScale: xAxisScale, tickValues: tickValues.map(xAxis.tickFormat()!) };\n}\n\nexport function useRtl() {\n const { dir } = useFluent(); // \"dir\" returns \"ltr\" or \"rtl\"\n return dir === 'rtl';\n}\n\nfunction isPowerOf10(num: number): boolean {\n const roundedfinalYMax = handleFloatingPointPrecisionError(num);\n return Math.log10(roundedfinalYMax) % 1 === 0;\n}\n\n//for reference, go through this 'https://docs.python.org/release/2.5.1/tut/node16.html'\nfunction handleFloatingPointPrecisionError(num: number): number {\n const rounded = Math.round(num);\n return Math.abs(num - rounded) < 1e-6 ? rounded : num;\n}\n\n/**\n * This method is used to calculate the rounded tick values for the y-axis\n * @param {number} minVal\n * @param {number} maxVal\n * @param {number} splitInto\n * @returns {number[]}\n */\nfunction calculateRoundedTicks(minVal: number, maxVal: number, splitInto: number) {\n const finalYmin = minVal >= 0 && minVal === maxVal ? 0 : minVal;\n const finalYmax = minVal < 0 && minVal === maxVal ? 0 : maxVal;\n const ticksInterval = d3nice(finalYmin, finalYmax, splitInto);\n const ticks = d3Ticks(ticksInterval[0], ticksInterval[ticksInterval.length - 1], splitInto);\n if (ticks[ticks.length - 1] > finalYmax && isPowerOf10(finalYmax)) {\n ticks.pop();\n }\n return ticks;\n}\n\n/**\n * This method used for creating data points for the y axis.\n * @export\n * @param {number} maxVal\n * @param {number} minVal\n * @param {number} splitInto\n * @param {boolean} isIntegralDataset\n * @returns {number[]}\n */\nexport function prepareDatapoints(\n maxVal: number,\n minVal: number,\n splitInto: number,\n isIntegralDataset: boolean,\n roundedTicks?: boolean,\n): number[] {\n if (roundedTicks) {\n return calculateRoundedTicks(minVal, maxVal, splitInto);\n }\n const val = isIntegralDataset\n ? Math.ceil((maxVal - minVal) / splitInto)\n : (maxVal - minVal) / splitInto >= 1\n ? Math.ceil((maxVal - minVal) / splitInto)\n : (maxVal - minVal) / splitInto;\n /*\n For cases where we have negative and positive values\n The dataPointsArray is filled from 0 to minVal by val difference\n Then the array is reversed and values from 0(excluding 0) to maxVal are appended\n This ensures presence of 0 to act as an anchor reference.\n For simple cases where the scale may not encounter such a need for 0,\n We simply fill from minVal to maxVal\n */\n const dataPointsArray: number[] = [minVal < 0 && maxVal >= 0 ? 0 : minVal];\n /*For the case of all positive or all negative, we need to add another value\n in array for atleast one interval, but in case of mix of positive and negative,\n there will always be one more entry that will be added by the logic we have*/\n if (dataPointsArray[0] === minVal) {\n dataPointsArray.push(minVal + val);\n }\n if (minVal < 0 && maxVal >= 0) {\n while (dataPointsArray[dataPointsArray.length - 1] > minVal) {\n dataPointsArray.push(dataPointsArray[dataPointsArray.length - 1] - val);\n }\n dataPointsArray.reverse();\n }\n while (dataPointsArray[dataPointsArray.length - 1] < maxVal) {\n dataPointsArray.push(dataPointsArray[dataPointsArray.length - 1] + val);\n }\n return dataPointsArray;\n}\n\n/**\n * Creating Numeric Y axis of the chart\n * @export\n * @param {IYAxisParams} yAxisParams\n * @param {boolean} isRtl\n */\nexport function createYAxis(\n yAxisParams: IYAxisParams,\n isRtl: boolean,\n axisData: IAxisData,\n chartType: ChartTypes,\n barWidth: number,\n isIntegralDataset: boolean,\n useSecondaryYScale: boolean = false,\n roundedTicks: boolean = false,\n) {\n switch (chartType) {\n case ChartTypes.HorizontalBarChartWithAxis:\n return createYAxisForHorizontalBarChartWithAxis(yAxisParams, isRtl, axisData, barWidth!);\n default:\n return createYAxisForOtherCharts(\n yAxisParams,\n isRtl,\n axisData,\n isIntegralDataset,\n chartType,\n useSecondaryYScale,\n roundedTicks,\n );\n }\n}\n\nexport function createYAxisForHorizontalBarChartWithAxis(\n yAxisParams: IYAxisParams,\n isRtl: boolean,\n axisData: IAxisData,\n barWidth: number,\n) {\n const {\n yMinMaxValues = { startValue: 0, endValue: 0 },\n yAxisElement = null,\n yMaxValue = 0,\n yMinValue = 0,\n containerHeight,\n margins,\n tickPadding = 12,\n maxOfYVal = 0,\n yAxisTickFormat,\n yAxisTickCount = 4,\n } = yAxisParams;\n\n // maxOfYVal coming from only area chart and Grouped vertical bar chart(Calculation done at base file)\n const tempVal = maxOfYVal || yMinMaxValues.endValue;\n const finalYmax = tempVal > yMaxValue ? tempVal : yMaxValue!;\n const finalYmin = yMinMaxValues.startValue < yMinValue ? 0 : yMinValue!;\n const yAxisScale = d3ScaleLinear()\n .domain([finalYmin, finalYmax])\n .range([containerHeight - margins.bottom!, margins.top!]);\n const axis = isRtl ? d3AxisRight(yAxisScale) : d3AxisLeft(yAxisScale);\n const yAxis = axis.tickPadding(tickPadding).ticks(yAxisTickCount);\n yAxisTickFormat ? yAxis.tickFormat(yAxisTickFormat) : yAxis.tickFormat(d3Format('.2~s'));\n yAxisElement ? d3Select(yAxisElement).call(yAxis).selectAll('text').attr('aria-hidden', 'true') : '';\n return yAxisScale;\n}\n\nexport function createYAxisForOtherCharts(\n yAxisParams: IYAxisParams,\n isRtl: boolean,\n axisData: IAxisData,\n isIntegralDataset: boolean,\n chartType: ChartTypes,\n useSecondaryYScale: boolean = false,\n roundedTicks: boolean = false,\n) {\n const {\n yMinMaxValues = { startValue: 0, endValue: 0 },\n yAxisElement = null,\n yMaxValue = 0,\n yMinValue = 0,\n containerHeight,\n containerWidth,\n margins,\n tickPadding = 12,\n maxOfYVal = 0,\n yAxisTickFormat,\n yAxisTickCount = 4,\n eventAnnotationProps,\n eventLabelHeight,\n } = yAxisParams;\n\n // maxOfYVal coming from only area chart and Grouped vertical bar chart(Calculation done at base file)\n const tempVal = maxOfYVal || yMinMaxValues.endValue;\n const finalYmax = tempVal > yMaxValue ? tempVal : yMaxValue!;\n const finalYmin = Math.min(yMinMaxValues.startValue, yMinValue || 0);\n const domainValues = prepareDatapoints(finalYmax, finalYmin, yAxisTickCount, isIntegralDataset, roundedTicks);\n let yMin = finalYmin;\n let yMax = domainValues[domainValues.length - 1];\n if (chartType === ChartTypes.ScatterChart) {\n const yPadding = (yMax - yMin) * 0.1;\n yMin = yMin - yPadding;\n yMax = yMax + yPadding;\n }\n const yAxisScale = d3ScaleLinear()\n .domain([domainValues[0], yMax])\n .range([containerHeight - margins.bottom!, margins.top! + (eventAnnotationProps! ? eventLabelHeight! : 0)]);\n const axis =\n (!isRtl && useSecondaryYScale) || (isRtl && !useSecondaryYScale) ? d3AxisRight(yAxisScale) : d3AxisLeft(yAxisScale);\n const yAxis = axis\n .tickPadding(tickPadding)\n .tickValues(domainValues)\n .tickSizeInner(-(containerWidth - margins.left! - margins.right!));\n\n yAxisTickFormat ? yAxis.tickFormat(yAxisTickFormat) : yAxis.tickFormat(d3Format('.2~s'));\n yAxisElement ? d3Select(yAxisElement).call(yAxis).selectAll('text').attr('aria-hidden', 'true') : '';\n axisData.yAxisDomainValues = domainValues;\n return yAxisScale;\n}\n\nexport const createStringYAxis = (\n yAxisParams: IYAxisParams,\n dataPoints: string[],\n isRtl: boolean,\n chartType: ChartTypes,\n barWidth: number | undefined,\n culture?: string,\n) => {\n switch (chartType) {\n case ChartTypes.HorizontalBarChartWithAxis:\n return createStringYAxisForHorizontalBarChartWithAxis(yAxisParams, dataPoints, isRtl, barWidth!, culture);\n default:\n return createStringYAxisForOtherCharts(yAxisParams, dataPoints, isRtl);\n }\n};\n\n/**\n * Creating String Y axis of the chart for Horizontal Bar Chart With Axis\n * @param yAxisParams\n * @param dataPoints\n * @param isRtl\n */\nexport const createStringYAxisForHorizontalBarChartWithAxis = (\n yAxisParams: IYAxisParams,\n dataPoints: string[],\n isRtl: boolean,\n barWidth: number,\n culture?: string,\n) => {\n const { containerHeight, tickPadding = 12, margins, yAxisTickFormat, yAxisElement } = yAxisParams;\n\n const yAxisScale = d3ScaleBand()\n .domain(dataPoints)\n .range([containerHeight - margins.bottom! - barWidth / 2, margins.top! + barWidth / 2]);\n const axis = isRtl ? d3AxisRight(yAxisScale) : d3AxisLeft(yAxisScale);\n const yAxis = axis.tickPadding(tickPadding).ticks(dataPoints);\n if (yAxisTickFormat) {\n yAxis.tickFormat(yAxisTickFormat);\n }\n yAxisElement ? d3Select(yAxisElement).call(yAxis).selectAll('text') : '';\n return yAxisScale;\n};\n\n/**\n * Creating String Y axis of the chart for other chart except Horizontal Bar Chart With Axis\n * @param yAxisParams\n * @param dataPoints\n * @param isRtl\n */\nexport const createStringYAxisForOtherCharts = (yAxisParams: IYAxisParams, dataPoints: string[], isRtl: boolean) => {\n const { containerHeight, tickPadding = 12, margins, yAxisTickFormat, yAxisElement, yAxisPadding = 0 } = yAxisParams;\n const yAxisScale = d3ScaleBand()\n .domain(dataPoints)\n .range([containerHeight - margins.bottom!, margins.top!])\n .padding(yAxisPadding);\n const axis = isRtl ? d3AxisRight(yAxisScale) : d3AxisLeft(yAxisScale);\n const yAxis = axis.tickPadding(tickPadding).tickValues(dataPoints).tickSize(0);\n if (yAxisTickFormat) {\n yAxis.tickFormat(yAxisTickFormat);\n }\n yAxisElement ? d3Select(yAxisElement).call(yAxis).selectAll('text') : '';\n return yAxisScale;\n};\n\n/**\n * For area chart and line chart, while displaying stackCallout, Need to form a callout data object.\n * This methos creates an object for those 2 charts.\n * @param values\n */\n\nexport function calloutData(values: (LineChartPoints & { index?: number })[]) {\n let combinedResult: (LineChartDataPoint & {\n legend: string;\n color?: string;\n index?: number;\n })[] = [];\n\n values.forEach((line: LineChartPoints & { index?: number }) => {\n const elements = line.data\n .filter((point: LineChartDataPoint) => !point.hideCallout)\n .map((point: LineChartDataPoint) => {\n return { ...point, legend: line.legend, color: line.color, index: line.index };\n });\n combinedResult = combinedResult.concat(elements);\n });\n\n const xValToDataPoints: {\n [key: number]: {\n legend: string;\n y: number;\n color: string;\n xAxisCalloutData?: string;\n yAxisCalloutData?: string | { [id: string]: number };\n callOutAccessibilityData?: AccessibilityProps;\n index?: number;\n }[];\n [key: string]: {\n legend: string;\n y: number;\n color: string;\n xAxisCalloutData?: string;\n yAxisCalloutData?: string | { [id: string]: number };\n callOutAccessibilityData?: AccessibilityProps;\n index?: number;\n }[];\n } = {};\n combinedResult.forEach(ele => {\n const xValue = ele.x instanceof Date ? ele.x.getTime() : ele.x;\n if (xValue in xValToDataPoints) {\n xValToDataPoints[xValue].push({\n legend: ele.legend,\n y: ele.y,\n color: ele.color!,\n xAxisCalloutData: ele.xAxisCalloutData,\n yAxisCalloutData: ele.yAxisCalloutData,\n callOutAccessibilityData: ele.callOutAccessibilityData,\n index: ele.index,\n });\n } else {\n xValToDataPoints[xValue] = [\n {\n legend: ele.legend,\n y: ele.y,\n color: ele.color!,\n xAxisCalloutData: ele.xAxisCalloutData,\n yAxisCalloutData: ele.yAxisCalloutData,\n callOutAccessibilityData: ele.callOutAccessibilityData,\n index: ele.index,\n },\n ];\n }\n });\n\n const result = Object.keys(xValToDataPoints).map(xValue => {\n const originalXValue = isNaN(Number(xValue)) ? xValue : Number(xValue);\n return { x: originalXValue, values: xValToDataPoints[xValue] };\n });\n return result;\n}\n\nexport function getUnique(\n arr: { x: number | Date | string; values: { legend: string; y: number }[] }[],\n comp: string | number,\n) {\n const unique = arr\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n .map((e: { [x: string]: any }) => e[comp])\n // store the keys of the unique objects\n .map((e: string, i: number, final: string[]) => final.indexOf(e) === i && i)\n // eliminate the dead keys & store unique objects\n .filter((e: number) => arr[e])\n .map((e: number) => arr[e]);\n return unique;\n}\n\n/**\n * This function takes two paramerter\n * 1. an array of strings\n * 2. a string value\n * if the value is not present in the given array then it will return the new\n * array by appending the value to the present arrray.\n *\n * if the value is already present in the given array then it will return the new\n * array by deleteing the value from the the array\n * @param array\n * @param value\n */\nexport function silceOrAppendToArray(array: string[], value: string): string[] {\n const pos = array.indexOf(value);\n if (pos === -1) {\n return [...array, value];\n } else {\n return array.slice(0, pos).concat(array.slice(pos + 1));\n }\n}\n\n/**\n * This method used for wrapping of x axis labels (tick values).\n * It breaks down given text value by space separated and calculates the total height needed to display all the words.\n * That value = removal value. This value needs to be remove from total svg height, svg will shrink and\n * total text will be displayed.\n * @export\n * @param {IWrapLabelProps} wrapLabelProps\n * @returns\n */\nexport function createWrapOfXLabels(wrapLabelProps: IWrapLabelProps) {\n const { node, xAxis, noOfCharsToTruncate, showXAxisLablesTooltip } = wrapLabelProps;\n if (node === null) {\n return;\n }\n const axisNode = d3Select(node).call(xAxis);\n let removeVal = 0;\n const width = 10;\n const arr: number[] = [];\n axisNode.selectAll('.tick text').each(function () {\n const text = d3Select(this);\n const totalWord = text.text();\n const truncatedWord = `${text.text().slice(0, noOfCharsToTruncate)}...`;\n const totalWordLength = text.text().length;\n const words = text.text().split(/\\s+/).reverse();\n arr.push(words.length);\n let word: string = '';\n let line: string[] = [];\n let lineNumber: number = 0;\n const lineHeight = 1.1; // ems\n const y = text.attr('y');\n const dy = parseFloat(text.attr('dy'));\n let tspan = text\n .text(null)\n .append('tspan')\n .attr('x', 0)\n .attr('y', y)\n .attr('id', 'BaseSpan')\n .attr('dy', dy + 'em')\n .attr('data-', totalWord);\n\n if (showXAxisLablesTooltip && totalWordLength > noOfCharsToTruncate) {\n tspan = text\n .append('tspan')\n .attr('id', 'showDots')\n .attr('x', 0)\n .attr('y', y)\n .attr('dy', ++lineNumber * lineHeight + dy + 'em')\n .text(truncatedWord);\n } else if (showXAxisLablesTooltip && totalWordLength <= noOfCharsToTruncate) {\n tspan = text\n .append('tspan')\n .attr('id', 'LessLength')\n .attr('x', 0)\n .attr('y', y)\n .attr('dy', ++lineNumber * lineHeight + dy + 'em')\n .text(totalWord);\n } else {\n while ((word = words.pop()!)) {\n line.push(word);\n tspan.text(line.join(' '));\n if (tspan.node()!.getComputedTextLength() > width && line.length > 1) {\n line.pop();\n tspan.text(line.join(' '));\n line = [word];\n tspan = text\n .append('tspan')\n .attr('id', 'WordBreakId')\n .attr('x', 0)\n .attr('y', y)\n .attr('dy', ++lineNumber * lineHeight + dy + 'em')\n .text(word);\n }\n }\n const maxDigit = Math.max(...arr);\n let maxHeight: number = 12; // intial value to render corretly first time\n axisNode.selectAll('text').each(() => {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const outerHTMLElement = document.getElementById('WordBreakId') as any;\n const BoxCordinates = outerHTMLElement && outerHTMLElement.getBoundingClientRect();\n const boxHeight = BoxCordinates && BoxCordinates.height;\n if (boxHeight > maxHeight) {\n maxHeight = boxHeight;\n }\n });\n // If we take directly maxDigit * maxheight, then it will show more height between x axis tick values and bottom.\n // To avoid this, reducing maxDigit value by removing some digit based on legth of word.\n let removeDigit: number = 4;\n if (maxDigit <= 2) {\n removeDigit = 1;\n } else if (maxDigit > 2 && maxDigit <= 6) {\n removeDigit = 2;\n } else if (maxDigit > 6 && maxDigit <= 9) {\n removeDigit = 3;\n }\n removeVal = (maxDigit - removeDigit) * maxHeight;\n }\n });\n return removeVal > 0 ? removeVal : 0;\n}\n\n/**\n * This method used for wrapping of y axis labels (tick values).\n */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport function createYAxisLabels(\n node: SVGElement | null,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n yAxis: any,\n noOfCharsToTruncate: number,\n truncateLabel: boolean,\n xValue: number,\n isRtl: boolean,\n) {\n if (node === null) {\n return;\n }\n let tickIndex = 0;\n const axisNode = d3Select(node).call(yAxis);\n axisNode.selectAll('.tick text').each(function () {\n const text = d3Select(this);\n const totalWord = text.text();\n const truncatedWord = isRtl\n ? `...${text.text().slice(0, noOfCharsToTruncate)}`\n : `${text.text().slice(0, noOfCharsToTruncate)}...`;\n const totalWordLength = text.text().length;\n const padding = truncateLabel ? 1.5 : 1; // ems\n const y = text.attr('y');\n const x = text.attr('x');\n const dy = parseFloat(text.attr('dy'));\n const dx = 0;\n const uid = tickIndex++;\n text\n .text(null)\n .append('tspan')\n .attr('x', x)\n .attr('y', y)\n .attr('id', `BaseSpan-${uid}`)\n .attr('dy', dy + 'em')\n .attr('data-', totalWord);\n\n if (truncateLabel && totalWordLength > noOfCharsToTruncate) {\n text\n .append('tspan')\n .attr('id', `showDots-${uid}`)\n .attr('x', isRtl ? 0 : x)\n .attr('y', y)\n .attr('dy', dy)\n .attr('dx', padding + dx + 'em')\n .text(truncatedWord);\n } else {\n text\n .attr('text-align', 'start')\n .append('tspan')\n .attr('id', `LessLength-${uid}`)\n .attr('x', isRtl ? 0 : x)\n .attr('y', y)\n .attr('dx', padding + dx + 'em')\n .text(totalWord);\n }\n });\n}\n\nexport const wrapContent = (content: string, id: string, maxWidth: number) => {\n const textElement = d3Select<SVGTextElement, {}>(`#${id}`);\n textElement.text(content);\n if (!textElement.node()) {\n return false;\n }\n\n let isOverflowing = false;\n let textLength = textElement.node()!.getComputedTextLength();\n while (textLength > maxWidth && content.length > 0) {\n content = content.slice(0, -1);\n textElement.text(content + '...');\n isOverflowing = true;\n textLength = textElement.node()!.getComputedTextLength();\n }\n return isOverflowing;\n};\n\n/**\n * Calculates the width of the longest axis label in pixels\n */\nexport const calculateLongestLabelWidth = (labels: (string | number)[], query: string = 'none'): number => {\n let maxLabelWidth = 0;\n const canvas = document.createElement('canvas');\n const ctx = canvas.getContext('2d');\n\n if (ctx) {\n const axisText = document.querySelector(query);\n if (axisText) {\n const styles = window.getComputedStyle(axisText, null);\n const fontWeight = styles.getPropertyValue('font-weight');\n const fontSize = styles.getPropertyValue('font-size');\n const fontFamily = styles.getPropertyValue('font-family');\n ctx.font = `${fontWeight} ${fontSize} ${fontFamily}`;\n } else {\n ctx.font = '600 10px \"Segoe UI\"';\n }\n\n labels.forEach(label => {\n maxLabelWidth = Math.max(ctx.measureText(label.toString()).width, maxLabelWidth);\n });\n }\n\n return maxLabelWidth;\n};\n\n/**\n * This method displays a tooltip to the x axis lables(tick values)\n * when prop 'showXAxisLablesTooltip' enables to the respected chart.\n * On hover of the truncated word(at x axis labels tick), a tooltip will be appeared.\n */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport function tooltipOfXAxislabels(xAxistooltipProps: any): any {\n const { tooltipCls, xAxis, id } = xAxistooltipProps;\n if (xAxis === null) {\n return null;\n }\n const div = d3Select('body').append('div').attr('id', id).attr('class', tooltipCls).style('opacity', 0);\n const aa = xAxis!.selectAll('#BaseSpan')._groups[0];\n const baseSpanLength = aa && Object.keys(aa)!.length;\n const originalDataArray: string[] = [];\n for (let i = 0; i < baseSpanLength; i++) {\n const originalData = aa[i].dataset && (Object.values(aa[i].dataset)[0] as string);\n originalDataArray.push(originalData);\n }\n const tickObject = xAxis!.selectAll('.tick')._groups[0];\n const tickObjectLength = tickObject && Object.keys(tickObject)!.length;\n for (let i = 0; i < tickObjectLength; i++) {\n const d1 = tickObject[i];\n d3Select(d1)\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n .on('mouseover', (event: any, d) => {\n div.style('opacity', 0.9);\n div\n .html(originalDataArray[i])\n .style('left', event.pageX + 'px')\n .style('top', event.pageY - 28 + 'px');\n })\n .on('mouseout', d => {\n div.style('opacity', 0);\n });\n }\n}\n\n/**\n * Find the axis type of line chart and area chart from given data\n * @param points\n */\nexport function getXAxisType(points: LineChartPoints[]): boolean {\n let isXAxisDateType: boolean = false;\n if (points && points.length > 0) {\n points.forEach((chartData: LineChartPoints) => {\n if (chartData.data.length > 0) {\n isXAxisDateType = chartData.data[0].x instanceof Date;\n return;\n }\n });\n }\n return isXAxisDateType;\n}\n\n/**\n * Calculates Domain and range values for Numeric X axis.\n * This method calculates Area cart and line chart.\n * @export\n * @param {LineChartPoints[]} points\n * @param {IMargins} margins\n * @param {number} width\n * @param {boolean} isRTL\n * @returns {IDomainNRange}\n */\nexport function domainRangeOfNumericForAreaChart(\n points: LineChartPoints[],\n margins: IMargins,\n width: number,\n isRTL: boolean,\n): IDomainNRange {\n const xMin = d3Min(points, (point: LineChartPoints) => {\n return d3Min(point.data as LineChartDataPoint[], (item: LineChartDataPoint) => item.x as number)!;\n })!;\n\n const xMax = d3Max(points, (point: LineChartPoints) => {\n return d3Max(point.data as LineChartDataPoint[], (item: LineChartDataPoint) => {\n return item.x as number;\n });\n })!;\n\n const rStartValue = margins.left!;\n const rEndValue = width - margins.right!;\n\n return isRTL\n ? { dStartValue: xMax, dEndValue: xMin, rStartValue, rEndValue }\n : { dStartValue: xMin, dEndValue: xMax, rStartValue, rEndValue };\n}\n\n/**\n * Calculates Domain and range values for Numeric X axis for scatter chart.\n * @export\n * @param {LineChartPoints[]} points\n * @param {IMargins} margins\n * @param {number} width\n * @param {boolean} isRTL\n * @returns {IDomainNRange}\n */\nexport function domainRangeOfNumericForScatterChart(\n points: LineChartPoints[],\n margins: IMargins,\n width: number,\n isRTL: boolean,\n): IDomainNRange {\n let xMin = d3Min(points, (point: LineChartPoints) => {\n return d3Min(point.data as ScatterChartDataPoint[], (item: ScatterChartDataPoint) => item.x as number)!;\n })!;\n\n let xMax = d3Max(points, (point: LineChartPoints) => {\n return d3Max(point.data as ScatterChartDataPoint[], (item: LineChartDataPoint) => {\n return item.x as number;\n });\n })!;\n\n const xPadding = (xMax - xMin) * 0.1;\n xMin = xMin - xPadding;\n xMax = xMax + xPadding;\n\n const rStartValue = margins.left!;\n const rEndValue = width - margins.right!;\n\n return isRTL\n ? { dStartValue: xMax, dEndValue: xMin, rStartValue, rEndValue }\n : { dStartValue: xMin, dEndValue: xMax, rStartValue, rEndValue };\n}\n\n/**\n * Calculates Domain and range values for Numeric X axis.\n * This method calculates Horizontal Chart with Axis\n * @export\n * @param {LineChartPoints[]} points\n * @param {IMargins} margins\n * @param {number} width\n * @param {boolean} isRTL\n * @returns {IDomainNRange}\n */\nexport function domainRangeOfNumericForHorizontalBarChartWithAxis(\n points: HorizontalBarChartWithAxisDataPoint[],\n margins: IMargins,\n containerWidth: number,\n isRTL: boolean,\n shiftX: number,\n): IDomainNRange {\n const xMax = d3Max(points, (point: HorizontalBarChartWithAxisDataPoint) => point.x as number)!;\n const rMin = isRTL ? margins.left! : margins.left! + shiftX;\n const rMax = isRTL ? containerWidth - margins.right! - shiftX : containerWidth - margins.right!;\n\n return isRTL\n ? { dStartValue: xMax, dEndValue: 0, rStartValue: rMin, rEndValue: rMax }\n : { dStartValue: 0, dEndValue: xMax, rStartValue: rMin, rEndValue: rMax };\n}\n\n/**\n * Calculates Range values of x Axis string axis\n * For String axis, we need to give domain values (Not start and end array values)\n * So sending 0 as domain values. Domain will be handled at creation of string axis\n * For charts stacked bar chart, grouped vertical bar chart, HeatMapChart and Vertical bar chart\n * @export\n * @param {IMargins} margins\n * @param {number} width\n * @param {boolean} isRTL\n * @returns {IDomainNRange}\n */\nexport function domainRangeOfXStringAxis(margins: IMargins, width: number, isRTL: boolean): IDomainNRange {\n const rMin = margins.left!;\n const rMax = width - margins.right!;\n return isRTL\n ? { dStartValue: 0, dEndValue: 0, rStartValue: rMax, rEndValue: rMin }\n : { dStartValue: 0, dEndValue: 0, rStartValue: rMin, rEndValue: rMax };\n}\n\n/**\n * Calculate domain and range values to the Vertical stacked bar chart - For Numeric axis\n * @export\n * @param {DataPoint[]} points\n * @param {IMargins} margins\n * @param {number} width\n * @param {boolean} isRTL\n * @param {number} barWidth\n * @returns {IDomainNRange}\n */\nexport function domainRangeOfVSBCNumeric(\n points: DataPoint[],\n margins: IMargins,\n width: number,\n isRTL: boolean,\n barWidth: number,\n): IDomainNRange {\n const xMin = d3Min(points, (point: DataPoint) => point.x as number)!;\n const xMax = d3Max(points, (point: DataPoint) => point.x as number)!;\n const rMax = margins.left!;\n const rMin = width - margins.right!;\n return isRTL\n ? { dStartValue: xMax, dEndValue: xMin, rStartValue: rMax, rEndValue: rMin }\n : { dStartValue: xMin, dEndValue: xMax, rStartValue: rMax, rEndValue: rMin };\n}\n\n/**\n * Calculates Domain and range values for Date X axis.\n * This method calculates Bar chart.\n * @export\n * @param {VerticalBarChartDataPoint[]} points\n * @param {IMargins} margins\n * @param {number} width\n * @param {boolean} isRTL\n * @param {Date[] | number[]} tickValues\n * @returns {IDomainNRange}\n */\nexport function domainRangeOfDateForAreaLineVerticalBarChart(\n points: LineChartPoints[] | VerticalBarChartDataPoint[] | VerticalStackedBarDataPoint[],\n margins: IMargins,\n width: number,\n isRTL: boolean,\n tickValues: Date[] = [],\n chartType: ChartTypes,\n barWidth?: number,\n): IDomainNRange {\n let sDate: Date;\n let lDate: Date;\n if (chartType === ChartTypes.AreaChart || chartType === ChartTypes.LineChart) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n sDate = d3Min(points, (point: any) => {\n return d3Min(point.data, (item: LineChartDataPoint) => {\n return item.x as Date;\n });\n })!;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n lDate = d3Max(points, (point: any) => {\n return d3Max(point.data, (item: LineChartDataPoint) => {\n return item.x as Date;\n });\n })!;\n // Need to draw graph with given small and large date\n // (Which Involves customization of date axis tick values)\n // That may be Either from given graph data or from prop 'tickValues' date values.\n // So, Finding smallest and largest dates\n sDate = d3Min([...tickValues, sDate])!;\n lDate = d3Max([...tickValues, lDate])!;\n } else {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n sDate = d3Min(points as any[], point => point.x as Date)!;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n lDate = d3Max(points as any[], point => point.x as Date)!;\n }\n\n const rStartValue = margins.left!;\n const rEndValue = width - margins.right!;\n\n return isRTL\n ? { dStartValue: lDate, dEndValue: sDate, rStartValue, rEndValue }\n : { dStartValue: sDate, dEndValue: lDate, rStartValue, rEndValue };\n}\n\n/**\n * Calculates Domain and range values for Date X axis for scatter chart.\n * @export\n * @param {LineChartPoints[]} points\n * @param {IMargins} margins\n * @param {number} width\n * @param {boolean} isRTL\n * @param {Date[] | number[]} tickValues\n * @returns {IDomainNRange}\n */\nexport function domainRangeOfDateForScatterChart(\n points: LineChartPoints[],\n margins: IMargins,\n width: number,\n isRTL: boolean,\n tickValues: Date[] = [],\n): IDomainNRange {\n let sDate: Date;\n let lDate: Date;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n sDate = d3Min(points, (point: any) => {\n return d3Min(point.data, (item: LineChartDataPoint) => {\n return item.x as Date;\n });\n })!;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n lDate = d3Max(points, (point: any) => {\n return d3Max(point.data, (item: LineChartDataPoint) => {\n return item.x as Date;\n });\n })!;\n\n const xPadding = (lDate.getTime() - sDate.getTime()) * 0.1;\n sDate = new Date(sDate.getTime() - xPadding);\n lDate = new Date(lDate.getTime() + xPadding);\n // Need to draw graph with given small and large date\n // (Which Involves customization of date axis tick values)\n // That may be Either from given graph data or from prop 'tickValues' date values.\n // So, Finding smallest and largest dates\n sDate = d3Min([...tickValues, sDate])!;\n lDate = d3Max([...tickValues, lDate])!;\n\n const rStartValue = margins.left!;\n const rEndValue = width - margins.right!;\n\n return isRTL\n ? { dStartValue: lDate, dEndValue: sDate, rStartValue, rEndValue }\n : { dStartValue: sDate, dEndValue: lDate, rStartValue, rEndValue };\n}\n\n/**\n * Calculate domain and range values to the Vertical bar chart - For Numeric axis\n * @export\n * @param {DataPoint[]} points\n * @param {IMargins} margins\n * @param {number} containerWidth\n * @param {boolean} isRTL\n * @param {number} barWidth\n * @returns {IDomainNRange}\n */\nexport function domainRageOfVerticalNumeric(\n points: DataPoint[],\n margins: IMargins,\n containerWidth: number,\n isRTL: boolean,\n barWidth: number,\n): IDomainNRange {\n const xMax = d3Max(points, (point: VerticalBarChartDataPoint) => point.x as number)!;\n const xMin = d3Min(points, (point: VerticalBarChartDataPoint) => point.x as number)!;\n const rMin = margins.left!;\n const rMax = containerWidth - margins.right!;\n\n return isRTL\n ? { dStartValue: xMax, dEndValue: xMin, rStartValue: rMin, rEndValue: rMax }\n : { dStartValue: xMin, dEndValue: xMax, rStartValue: rMin, rEndValue: rMax };\n}\n\n/**\n * For creating X axis, need to calculate x axis domain and range values from given points.\n * This may vary based on chart type and type of x axis\n * So, this method will define which method need to call based on chart type and axis type.\n * @export\n * @param {*} points\n * @param {IMargins} margins\n * @param {number} width\n * @param {ChartTypes} chartType\n * @param {boolean} isRTL\n * @param {XAxisTypes} xAxisType\n * @param {number} [barWidth]\n * @returns {IDomainNRange}\n */\nexport function getDomainNRangeValues(\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n points: any,\n margins: IMargins,\n width: number,\n chartType: ChartTypes,\n isRTL: boolean,\n xAxisType: XAxisTypes,\n barWidth: number,\n tickValues: number[] | Date[] | string[] | undefined,\n shiftX: number,\n): IDomainNRange {\n let domainNRangeValue: IDomainNRange;\n if (xAxisType === XAxisTypes.NumericAxis) {\n switch (chartType) {\n case ChartTypes.AreaChart:\n case ChartTypes.LineChart:\n domainNRangeValue = domainRangeOfNumericForAreaChart(points, margins, width, isRTL);\n break;\n case ChartTypes.VerticalStackedBarChart:\n domainNRangeValue = domainRangeOfVSBCNumeric(points, margins, width, isRTL, barWidth!);\n break;\n case ChartTypes.VerticalBarChart:\n domainNRangeValue = domainRageOfVerticalNumeric(points, margins, width, isRTL, barWidth!);\n break;\n case ChartTypes.HorizontalBarChartWithAxis:\n domainNRangeValue = domainRangeOfNumericForHorizontalBarChartWithAxis(points, margins, width, isRTL, shiftX);\n break;\n case ChartTypes.ScatterChart:\n domainNRangeValue = domainRangeOfNumericForScatterChart(points, margins, width, isRTL);\n break;\n default:\n domainNRangeValue = { dStartValue: 0, dEndValue: 0, rStartValue: 0, rEndValue: 0 };\n }\n } else if (xAxisType === XAxisTypes.DateAxis) {\n switch (chartType) {\n case ChartTypes.AreaChart:\n case ChartTypes.LineChart:\n case ChartTypes.VerticalBarChart:\n case ChartTypes.VerticalStackedBarChart:\n domainNRangeValue = domainRangeOfDateForAreaLineVerticalBarChart(\n points,\n margins,\n width,\n isRTL,\n tickValues! as Date[],\n chartType,\n barWidth,\n );\n break;\n case ChartTypes.ScatterChart:\n domainNRangeValue = domainRangeOfDateForScatterChart(points, margins, width, isRTL, tickValues! as Date[]);\n break;\n default:\n domainNRangeValue = { dStartValue: 0, dEndValue: 0, rStartValue: 0, rEndValue: 0 };\n }\n } else {\n // String Axis type\n switch (chartType) {\n case ChartTypes.VerticalStackedBarChart:\n case ChartTypes.GroupedVerticalBarChart:\n case ChartTypes.VerticalBarChart:\n case ChartTypes.HeatMapChart:\n case ChartTypes.ScatterChart:\n domainNRangeValue = domainRangeOfXStringAxis(margins, width, isRTL);\n break;\n default:\n domainNRangeValue = { dStartValue: 0, dEndValue: 0, rStartValue: 0, rEndValue: 0 };\n }\n }\n return domainNRangeValue;\n}\n\n/**\n * Calculating start and ending values of the Area chart and LineChart\n * @export\n * @param {LineChartPoints[]} points\n * @returns {{ startValue: number; endValue: number }}\n */\nexport function findNumericMinMaxOfY(points: LineChartPoints[]): { startValue: number; endValue: number } {\n const yMax = d3Max(points, (point: LineChartPoints) => {\n return d3Max(point.data as LineChartDataPoint[], (item: LineChartDataPoint) => item.y)!;\n })!;\n const yMin = d3Min(points, (point: LineChartPoints) => {\n return d3Min(point.data as LineChartDataPoint[], (item: LineChartDataPoint) => item.y)!;\n })!;\n\n return {\n startValue: yMin,\n endValue: yMax,\n };\n}\n\n/**\n * Find the minimum and maximum values of the vertical stacked bar chart y axis data point. Used for create y axis.\n * @export\n * @param {DataPoint[]} dataset\n * @returns {{ startValue: number; endValue: number }}\n */\nexport function findVSBCNumericMinMaxOfY(dataset: DataPoint[]): { startValue: number; endValue: number } {\n const yMax = d3Max(dataset, (point: DataPoint) => point.y)!;\n const yMin = d3Min(dataset, (point: DataPoint) => point.y)!;\n\n return { startValue: yMin, endValue: yMax };\n}\n\n/**\n * Fins the min and max values of the vertical bar chart y axis data point.\n * @export\n * @param {VerticalBarChartDataPoint[]} points\n * @returns {{ startValue: number; endValue: number }}\n */\nexport function findVerticalNumericMinMaxOfY(points: VerticalBarChartDataPoint[]): {\n startValue: number;\n endValue: number;\n} {\n const yMax = d3Max(points, (point: VerticalBarChartDataPoint) => {\n if (point.lineData !== undefined) {\n if (point.y > point.lineData!.y) {\n return point.y;\n } else {\n return point.lineData!.y;\n }\n } else {\n return point.y;\n }\n })!;\n const yMin = d3Min(points, (point: VerticalBarChartDataPoint) => {\n if (point.lineData !== undefined) {\n if (point.y < point.lineData!.y) {\n return point.y;\n } else {\n return point.lineData!.y;\n }\n } else {\n return point.y;\n }\n })!;\n\n return { startValue: yMin, endValue: yMax };\n}\n/**\n * Fins the min and max values of the vertical bar chart y axis data point.\n * @export\n * @param {VerticalBarChartDataPoint[]} points\n * @returns {{ startValue: number; endValue: number }}\n */\nexport function findHBCWANumericMinMaxOfY(\n points: HorizontalBarChartWithAxisDataPoint[],\n yAxisType: YAxisType | undefined,\n): { startValue: number; endValue: number } {\n if (yAxisType !== undefined && yAxisType === YAxisType.NumericAxis) {\n const yMax = d3Max(points, (point: HorizontalBarChartWithAxisDataPoint) => point.y as number)!;\n const yMin = d3Min(points, (point: HorizontalBarChartWithAxisDataPoint) => point.y as number)!;\n\n return { startValue: yMin, endValue: yMax };\n }\n return { startValue: 0, endValue: 0 };\n}\n\n/**\n * For creating Y axis, need to calculate y axis domain values from given points. This may vary based on chart type.\n * So, this method will define which method need to call based on chart type to find out min and max values(For Domain).\n * For grouped vertical bar chart, Calculating yMax value in the base file and sending as MaxOfYVal to cartesian.\n * @export\n * @param {*} points\n * @param {ChartTypes} chartType\n * @returns {{ startValue: number; endValue: number }}\n */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport function getMinMaxOfYAxis(\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n points: any,\n chartType: ChartTypes,\n yAxisType: YAxisType | undefined = YAxisType.NumericAxis,\n): { startValue: number; endValue: number } {\n let minMaxValues: { startValue: number; endValue: number };\n\n switch (chartType) {\n case ChartTypes.AreaChart:\n case ChartTypes.LineChart:\n case ChartTypes.ScatterChart:\n minMaxValues = findNumericMinMaxOfY(points);\n break;\n case ChartTypes.VerticalStackedBarChart:\n minMaxValues = findVSBCNumericMinMaxOfY(points);\n break;\n case ChartTypes.VerticalBarChart:\n minMaxValues = findVerticalNumericMinMaxOfY(points);\n break;\n case ChartTypes.HorizontalBarChartWithAxis:\n minMaxValues = findHBCWANumericMinMaxOfY(points, yAxisType);\n break;\n default:\n minMaxValues = { startValue: 0, endValue: 0 };\n }\n\n return minMaxValues;\n}\n\n/**\n * @param p string or number or Date\n *\n * This function takes the single data point of the x-aixs\n * and decides what is the x-axis\n */\nexport const getTypeOfAxis = (p: string | number | Date, isXAxis: boolean): XAxisTypes | YAxisType => {\n if (isXAxis) {\n switch (typeof p) {\n case 'string':\n return XAxisTypes.StringAxis;\n case 'number':\n return XAxisTypes.NumericAxis;\n default:\n return XAxisTypes.DateAxis;\n }\n } else {\n switch (typeof p) {\n case 'string':\n return YAxisType.StringAxis;\n case 'number':\n return YAxisType.NumericAxis;\n default:\n return YAxisType.DateAxis;\n }\n }\n};\n\n/**\n * we need to make sure that if we add any property to this, then\n * we need to also add that in pointTypes below and vise-versa\n */\n\nexport enum Points {\n circle,\n square,\n triangle,\n diamond,\n pyramid,\n hexagon,\n pentagon,\n octagon,\n}\n\nexport enum CustomPoints {\n dottedLine,\n}\n\nexport type PointTypes = {\n [key in number]: {\n /**\n * For certian shapes like pentagon, hexagon and octagon.\n * the width of the bouding box increase by the time of the\n * length of the side, so when we want to render a pentagon\n * having each side of length 7 units we need to decrease it's\n * units by width ratio so that the bounding box width of the pentagon\n * stays as 7\n */\n widthRatio: number;\n };\n};\n\n/**\n * we need to make sure that if we add any property to this, then\n * we need to also add that in enum Point and vise-versa\n */\n\nexport const pointTypes: PointTypes = {\n [Points.circle]: {\n widthRatio: 1,\n },\n [Points.square]: {\n widthRatio: 1,\n },\n [Points.triangle]: {\n widthRatio: 1,\n },\n [Points.diamond]: {\n widthRatio: 1,\n },\n [Points.pyramid]: {\n widthRatio: 1,\n },\n [Points.hexagon]: {\n widthRatio: 2,\n },\n [Points.pentagon]: {\n widthRatio: 1.168,\n },\n [Points.octagon]: {\n widthRatio: 2.414,\n },\n};\n\n/**\n * @param accessibleData accessible data\n * @param role string to define role of tag\n * @param isDataFocusable boolean\n * function returns the accessibility data object\n */\nexport const getAccessibleDataObject = (\n accessibleData?: AccessibilityProps,\n role: string = 'text',\n isDataFocusable: boolean = true,\n) => {\n accessibleData = accessibleData ?? {};\n return {\n role,\n 'data-is-focusable': isDataFocusable,\n 'aria-label': accessibleData!.ariaLabel,\n 'aria-labelledby': accessibleData!.ariaLabelledBy,\n 'aria-describedby': accessibleData!.ariaDescribedBy,\n };\n};\n\ntype LocaleStringDataProps = number | string | Date | undefined;\nexport const convertToLocaleString = (data: LocaleStringDataProps, culture?: string): LocaleStringDataProps => {\n if (data === undefined || data === null || Number.isNaN(data)) {\n return data;\n }\n culture = culture || undefined;\n if (typeof data === 'number') {\n return data.toLocaleString(culture);\n } else if (typeof data === 'string' && !isNaN(Number(data))) {\n const num = Number(data);\n return num.toLocaleString(culture);\n } else if (data instanceof Date) {\n return data.toLocaleDateString(culture);\n }\n return data;\n};\n\nexport function rotateXAxisLabels(rotateLabelProps: IRotateLabelProps) {\n const { node, xAxis } = rotateLabelProps;\n if (node === null || xAxis === null) {\n return;\n }\n\n let maxHeight: number = 0;\n const xAxisTranslations: string[] = [];\n d3Select(node)\n .call(xAxis)\n .selectAll('.tick')\n .each(function () {\n const translateValue = (this as SVGElement).getAttribute('transform');\n if (translateValue?.indexOf('rotate') === -1) {\n const translatePair = translateValue\n .substring(translateValue.indexOf('(') + 1, translateValue.indexOf(')'))\n .split(',');\n if (translatePair.length === 2) {\n xAxisTranslations.push(translatePair[0]);\n (this as SVGElement).setAttribute('transform', `translate(${translatePair[0]},0)rotate(-45)`);\n }\n }\n\n const BoxCordinates = (this as HTMLElement).getBoundingClientRect();\n const boxHeight = BoxCordinates && BoxCordinates.height;\n if (boxHeight > maxHeight) {\n maxHeight = boxHeight;\n }\n });\n\n let idx = 0;\n d3Select(node)\n .call(xAxis)\n .selectAll('.tick')\n .each(function () {\n if (xAxisTranslations.length > idx) {\n (this as SVGSVGElement).setAttribute(\n 'transform',\n `translate(${xAxisTranslations[idx]},${maxHeight / 2})rotate(-45)`,\n ); // Translate y by max height/2\n idx += 1;\n }\n });\n\n return Math.floor(maxHeight / 1.414); // Compute maxHeight/tanInverse(45) to get the vertical height of labels.\n}\n\nexport function wrapTextInsideDonut(selectorClass: string, maxWidth: number) {\n let idx: number = 0;\n d3SelectAll(`.${selectorClass}`).each(function () {\n const text = d3Select(this);\n const words = text.text().split(/\\s+/).reverse();\n let word: string = '';\n let line: string[] = [];\n let lineNumber: number = 0;\n const lineHeight = 1.1; // ems\n const y = text.attr('y');\n\n let tspan = text\n .text(null)\n .append('tspan')\n .attr('id', `WordBreakId-${idx}-${lineNumber}`)\n .attr('x', 0)\n .attr('y', y)\n .attr('dy', lineNumber++ * lineHeight + 'em');\n\n while ((word = words.pop()!)) {\n line.push(word);\n tspan.text(line.join(' ') + ' ');\n if (tspan.node()!.getComputedTextLength() > maxWidth && line.length > 1) {\n line.pop();\n tspan.text(line.join(' ') + ' ');\n line = [word];\n tspan = text\n .append('tspan')\n .attr('id', `WordBreakId-${idx}-${lineNumber}`)\n .attr('x', 0)\n .attr('y', y)\n .attr('dy', lineNumber++ * lineHeight + 'em')\n .text(word);\n }\n }\n idx += 1;\n });\n}\n\nexport function formatValueWithSIPrefix(value: number) {\n let specifier: string;\n if (value < 1000) {\n specifier = '.2~'; // upto 2 decimal places without insignificant trailing zeros\n } else {\n specifier = '.1'; // upto 1 decimal place\n }\n\n return d3FormatPrefix(specifier, value)(value);\n}\n\nconst DEFAULT_BAR_WIDTH = 16;\nconst MIN_BAR_WIDTH = 1;\n\nexport const getBarWidth = (\n barWidthProp: number | 'default' | 'auto' | undefined,\n maxBarWidthProp: number | undefined,\n adjustedValue = DEFAULT_BAR_WIDTH,\n): number => {\n let barWidth: number;\n if (typeof barWidthProp === 'number') {\n barWidth = barWidthProp;\n } else if (barWidthProp === 'default' || typeof barWidthProp === 'undefined') {\n barWidth = Math.min(adjustedValue, DEFAULT_BAR_WIDTH);\n } else {\n barWidth = adjustedValue;\n }\n if (typeof maxBarWidthProp === 'number') {\n barWidth = Math.min(barWidth, maxBarWidthProp);\n }\n barWidth = Math.max(barWidth, MIN_BAR_WIDTH);\n return barWidth;\n};\n\nexport const getScalePadding = (prop: number | undefined, shorthandProp?: number, defaultValue = 0): number => {\n let padding = typeof prop === 'number' ? prop : typeof shorthandProp === 'number' ? shorthandProp : defaultValue;\n padding = Math.max(0, Math.min(padding, 1));\n return padding;\n};\n\nexport const isScalePaddingDefined = (prop: number | undefined, shorthandProp?: number): boolean => {\n return typeof prop === 'number' || typeof shorthandProp === 'number';\n};\n\n/**\n * Helper to find the index of an item within an array, using a callback to\n * determine the match.\n *\n * @public\n * @param array - Array to search.\n * @param cb - Callback which returns true on matches.\n * @param fromIndex - Optional index to start from (defaults to 0)\n */\nexport function findIndex<T>(array: T[], cb: (item: T, index: number) => boolean, fromIndex: number = 0): number {\n let index = -1;\n\n for (let i = fromIndex; array && i < array.length; i++) {\n if (cb(array[i], i)) {\n index = i;\n break;\n }\n }\n\n return index;\n}\n\n/**\n * Helper to find the first item within an array that satisfies the callback.\n * @param array - Array to search\n * @param cb - Callback which returns true on matches\n */\nexport function find<T>(array: T[], cb: (item: T, index: number) => boolean): T | undefined {\n let index = findIndex(array, cb);\n\n if (index < 0) {\n return undefined;\n }\n\n return array[index];\n}\n\nexport const HighContrastSelector = '@media screen and (-ms-high-contrast: active), screen and (forced-colors: active)';\nexport const HighContrastSelectorWhite =\n // eslint-disable-next-line @fluentui/max-len\n '@media screen and (-ms-high-contrast: black-on-white), screen and (forced-colors: active) and (prefers-color-scheme: light)';\nexport const HighContrastSelectorBlack =\n // eslint-disable-next-line @fluentui/max-len\n '@media screen and (-ms-high-contrast: white-on-black), screen and (forced-colors: active) and (prefers-color-scheme: dark)';\n\n/**\n * Render function interface for providing overrideable render callbacks.\n *\n * @public\n */\nexport interface RenderFunction<P> {\n (props?: P, defaultRender?: (props?: P) => JSX.Element | null): JSX.Element | null;\n}\n\nexport const formatDate = (date: Date, useUTC?: string | boolean) => {\n const timeFormat = useUTC ? d3UtcFormat : d3TimeFormat;\n return timeFormat('%-e %b %Y, %H:%M')(date) + (useUTC ? ' GMT' : '');\n};\n\nexport function areArraysEqual(arr1?: string[], arr2?: string[]): boolean {\n if (arr1 === arr2 || (!arr1 && !arr2)) {\n return true;\n }\n if (!arr1 || !arr2 || arr1.length !== arr2.length) {\n return false;\n }\n for (let i = 0; i < arr1.length; i++) {\n if (arr1[i] !== arr2[i]) {\n return false;\n }\n }\n return true;\n}\n\nconst cssVarRegExp = /var\\((--[a-zA-Z0-9\\-]+)\\)/g;\n\nexport function resolveCSSVariables(chartContainer: HTMLElement, styleRules: string) {\n const containerStyles = getComputedStyle(chartContainer);\n return styleRules.replace(cssVarRegExp, (match, group1) => {\n return containerStyles.getPropertyValue(group1);\n });\n}\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport function getSecureProps(props: Record<string, any> = {}): Record<string, any> {\n const { dangerouslySetInnerHTML, ...result } = props;\n return result;\n}\n\nexport function getCurveFactory(\n curve: LineChartLineOptions['curve'],\n defaultFactory: CurveFactory = d3CurveLinear,\n): CurveFactory {\n if (typeof curve === 'function') {\n return curve;\n }\n\n switch (curve) {\n case 'linear':\n return d3CurveLinear;\n case 'natural':\n return d3CurveNatural;\n case 'step':\n return d3CurveStep;\n case 'stepAfter':\n return d3CurveStepAfter;\n case 'stepBefore':\n return d3CurveStepBefore;\n default:\n return defaultFactory;\n }\n}\n"],"names":["axisRight","d3AxisRight","axisBottom","d3AxisBottom","axisLeft","d3AxisLeft","max","d3Max","min","d3Min","ticks","d3Ticks","nice","d3nice","scaleLinear","d3ScaleLinear","scaleBand","d3ScaleBand","scaleUtc","d3ScaleUtc","scaleTime","d3ScaleTime","select","d3Select","selectAll","d3SelectAll","format","d3Format","timeFormat","d3TimeFormat","timeFormatLocale","d3TimeFormatLocale","utcFormat","d3UtcFormat","timeSecond","d3TimeSecond","timeMinute","d3TimeMinute","timeHour","d3TimeHour","timeDay","d3TimeDay","timeMonth","d3TimeMonth","timeWeek","d3TimeWeek","timeYear","d3TimeYear","utcSecond","d3UtcSecond","utcMinute","d3UtcMinute","utcHour","d3UtcHour","utcDay","d3UtcDay","utcMonth","d3UtcMonth","utcWeek","d3UtcWeek","utcYear","d3UtcYear","curveLinear","d3CurveLinear","curveNatural","d3CurveNatural","curveStep","d3CurveStep","curveStepAfter","d3CurveStepAfter","curveStepBefore","d3CurveStepBefore","formatPrefix","d3FormatPrefix","useFluent_unstable","useFluent","ChartTypes","XAxisTypes","YAxisType","createNumericXAxis","xAxisParams","tickParams","chartType","culture","domainNRangeValues","showRoundOffXTickValues","xAxistickSize","tickPadding","xAxisCount","xAxisElement","hideTickOverlap","xAxisScale","domain","dStartValue","dEndValue","range","rStartValue","rEndValue","tickCount","tickFormat","domainValue","_index","xAxisValue","valueOf","convertToLocaleString","longestLabelWidth","calculateLongestLabelWidth","map","start","end","Math","floor","abs","xAxis","tickSize","tickSizeInner","containerHeight","margins","top","tickValues","call","attr","xScale","multiFormat","date","locale","useUTC","formatMillisecond","formatSecond","formatMinute","formatHour","formatDay","formatWeek","formatMonth","formatYear","createDateXAxis","options","customDateTimeFormatter","toLocaleString","undefined","createStringXAxis","dataset","xAxisPadding","xAxisInnerPadding","xAxisOuterPadding","containerWidth","paddingInner","paddingOuter","nonOverlappingTickValues","tickSizes","value","index","sign","i","length","tickPosition","push","reverse","useRtl","dir","isPowerOf10","num","roundedfinalYMax","handleFloatingPointPrecisionError","log10","rounded","round","calculateRoundedTicks","minVal","maxVal","splitInto","finalYmin","finalYmax","ticksInterval","pop","prepareDatapoints","isIntegralDataset","roundedTicks","val","ceil","dataPointsArray","createYAxis","yAxisParams","isRtl","axisData","barWidth","useSecondaryYScale","createYAxisForHorizontalBarChartWithAxis","createYAxisForOtherCharts","yMinMaxValues","startValue","endValue","yAxisElement","yMaxValue","yMinValue","maxOfYVal","yAxisTickFormat","yAxisTickCount","tempVal","yAxisScale","bottom","axis","yAxis","eventAnnotationProps","eventLabelHeight","domainValues","yMin","yMax","yPadding","left","right","yAxisDomainValues","createStringYAxis","dataPoints","createStringYAxisForHorizontalBarChartWithAxis","createStringYAxisForOtherCharts","yAxisPadding","padding","calloutData","values","combinedResult","forEach","line","elements","data","filter","point","hideCallout","legend","color","concat","xValToDataPoints","ele","xValue","x","Date","getTime","y","xAxisCalloutData","yAxisCalloutData","callOutAccessibilityData","result","Object","keys","originalXValue","isNaN","Number","getUnique","arr","comp","unique","e","final","indexOf","silceOrAppendToArray","array","pos","slice","createWrapOfXLabels","wrapLabelProps","node","noOfCharsToTruncate","showXAxisLablesTooltip","axisNode","removeVal","width","each","text","totalWord","truncatedWord","totalWordLength","words","split","word","lineNumber","lineHeight","dy","parseFloat","tspan","append","join","getComputedTextLength","maxDigit","maxHeight","outerHTMLElement","document","getElementById","BoxCordinates","getBoundingClientRect","boxHeight","height","removeDigit","createYAxisLabels","truncateLabel","tickIndex","dx","uid","wrapContent","content","id","maxWidth","textElement","isOverflowing","textLength","labels","query","maxLabelWidth","canvas","createElement","ctx","getContext","axisText","querySelector","styles","window","getComputedStyle","fontWeight","getPropertyValue","fontSize","fontFamily","font","label","measureText","toString","tooltipOfXAxislabels","xAxistooltipProps","tooltipCls","div","style","aa","_groups","baseSpanLength","originalDataArray","originalData","tickObject","tickObjectLength","d1","on","event","d","html","pageX","pageY","getXAxisType","points","isXAxisDateType","chartData","domainRangeOfNumericForAreaChart","isRTL","xMin","item","xMax","domainRangeOfNumericForScatterChart","xPadding","domainRangeOfNumericForHorizontalBarChartWithAxis","shiftX","rMin","rMax","domainRangeOfXStringAxis","domainRangeOfVSBCNumeric","domainRangeOfDateForAreaLineVerticalBarChart","sDate","lDate","domainRangeOfDateForScatterChart","domainRageOfVerticalNumeric","getDomainNRangeValues","xAxisType","domainNRangeValue","findNumericMinMaxOfY","findVSBCNumericMinMaxOfY","findVerticalNumericMinMaxOfY","lineData","findHBCWANumericMinMaxOfY","yAxisType","getMinMaxOfYAxis","minMaxValues","getTypeOfAxis","p","isXAxis","Points","CustomPoints","pointTypes","widthRatio","getAccessibleDataObject","accessibleData","role","isDataFocusable","ariaLabel","ariaLabelledBy","ariaDescribedBy","toLocaleDateString","rotateXAxisLabels","rotateLabelProps","xAxisTranslations","translateValue","getAttribute","translatePair","substring","setAttribute","idx","wrapTextInsideDonut","selectorClass","formatValueWithSIPrefix","specifier","DEFAULT_BAR_WIDTH","MIN_BAR_WIDTH","getBarWidth","barWidthProp","maxBarWidthProp","adjustedValue","getScalePadding","prop","shorthandProp","defaultValue","isScalePaddingDefined","findIndex","cb","fromIndex","find","HighContrastSelector","HighContrastSelectorWhite","HighContrastSelectorBlack","formatDate","areArraysEqual","arr1","arr2","cssVarRegExp","resolveCSSVariables","chartContainer","styleRules","containerStyles","replace","match","group1","getSecureProps","props","dangerouslySetInnerHTML","getCurveFactory","curve","defaultFactory"],"rangeMappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;","mappings":"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"}
|
|
1
|
+
{"version":3,"sources":["utilities.ts"],"sourcesContent":["import { axisRight as d3AxisRight, axisBottom as d3AxisBottom, axisLeft as d3AxisLeft, Axis as D3Axis } from 'd3-axis';\nimport { max as d3Max, min as d3Min, ticks as d3Ticks, nice as d3nice } from 'd3-array';\nimport {\n scaleLinear as d3ScaleLinear,\n scaleBand as d3ScaleBand,\n scaleUtc as d3ScaleUtc,\n scaleTime as d3ScaleTime,\n NumberValue,\n} from 'd3-scale';\nimport { select as d3Select, selectAll as d3SelectAll } from 'd3-selection';\nimport { format as d3Format } from 'd3-format';\nimport {\n TimeLocaleObject as d3TimeLocaleObject,\n timeFormat as d3TimeFormat,\n timeFormatLocale as d3TimeFormatLocale,\n TimeLocaleDefinition as d3TimeLocaleDefinition,\n utcFormat as d3UtcFormat,\n} from 'd3-time-format';\nimport {\n timeSecond as d3TimeSecond,\n timeMinute as d3TimeMinute,\n timeHour as d3TimeHour,\n timeDay as d3TimeDay,\n timeMonth as d3TimeMonth,\n timeWeek as d3TimeWeek,\n timeYear as d3TimeYear,\n utcSecond as d3UtcSecond,\n utcMinute as d3UtcMinute,\n utcHour as d3UtcHour,\n utcDay as d3UtcDay,\n utcMonth as d3UtcMonth,\n utcWeek as d3UtcWeek,\n utcYear as d3UtcYear,\n} from 'd3-time';\nimport {\n CurveFactory,\n curveLinear as d3CurveLinear,\n curveNatural as d3CurveNatural,\n curveStep as d3CurveStep,\n curveStepAfter as d3CurveStepAfter,\n curveStepBefore as d3CurveStepBefore,\n} from 'd3-shape';\nimport {\n AccessibilityProps,\n EventsAnnotationProps,\n LineChartPoints,\n LineChartDataPoint,\n ScatterChartDataPoint,\n DataPoint,\n VerticalStackedBarDataPoint,\n VerticalBarChartDataPoint,\n HorizontalBarChartWithAxisDataPoint,\n LineChartLineOptions,\n} from '../index';\nimport { formatPrefix as d3FormatPrefix } from 'd3-format';\nimport { useFluent_unstable as useFluent } from '@fluentui/react-shared-contexts';\nimport {\n formatDateToLocaleString,\n formatToLocaleString,\n getMultiLevelDateTimeFormatOptions,\n} from '@fluentui/chart-utilities';\n\nexport type NumericAxis = D3Axis<number | { valueOf(): number }>;\nexport type StringAxis = D3Axis<string>;\n\nexport enum ChartTypes {\n AreaChart,\n LineChart,\n VerticalBarChart,\n VerticalStackedBarChart,\n GroupedVerticalBarChart,\n HeatMapChart,\n HorizontalBarChartWithAxis,\n ScatterChart,\n}\n\nexport enum XAxisTypes {\n NumericAxis,\n DateAxis,\n StringAxis,\n}\n\nexport enum YAxisType {\n NumericAxis,\n DateAxis,\n StringAxis,\n}\n\nexport interface IWrapLabelProps {\n node: SVGSVGElement | null;\n xAxis: NumericAxis | StringAxis;\n noOfCharsToTruncate: number;\n showXAxisLablesTooltip: boolean;\n}\n\nexport interface IRotateLabelProps {\n node: SVGSVGElement | null;\n xAxis: NumericAxis | StringAxis;\n}\n\nexport interface IAxisData {\n yAxisDomainValues: number[];\n}\n\nexport interface IMargins {\n /**\n * left margin for the chart.\n * @default 40\n */\n left?: number;\n /**\n * Right margin for the chart.\n * @default 20\n */\n right?: number;\n /**\n * Top margin for the chart.\n * @default 20\n */\n top?: number;\n /**\n * Bottom margin for the chart.\n * @default 35\n */\n bottom?: number;\n}\n\nexport interface IDomainNRange {\n dStartValue: number | Date;\n dEndValue: number | Date;\n rStartValue: number;\n rEndValue: number;\n}\n\nexport interface IXAxisParams {\n domainNRangeValues: IDomainNRange;\n xAxisElement?: SVGSVGElement | null;\n xAxisCount?: number;\n showRoundOffXTickValues?: boolean;\n xAxistickSize?: number;\n tickPadding?: number;\n xAxisPadding?: number;\n xAxisInnerPadding?: number;\n xAxisOuterPadding?: number;\n margins: IMargins;\n containerHeight: number;\n containerWidth: number;\n hideTickOverlap?: boolean;\n}\nexport interface ITickParams {\n tickValues?: Date[] | number[] | string[];\n tickFormat?: string;\n}\n\nexport interface IYAxisParams {\n yMinMaxValues?: {\n startValue: number;\n endValue: number;\n };\n maxOfYVal?: number;\n margins: IMargins;\n containerWidth: number;\n containerHeight: number;\n yAxisElement?: SVGSVGElement | null;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n yAxisTickFormat?: any;\n yAxisTickCount: number;\n yMaxValue?: number;\n yMinValue?: number;\n tickPadding?: number;\n eventAnnotationProps?: EventsAnnotationProps;\n eventLabelHeight?: number;\n yAxisPadding?: number;\n}\n\nfunction yAxisTickFormatterInternal(value: number, limitWidth: boolean = false): string {\n // Use SI format prefix with 2 decimal places without insignificant trailing zeros\n let formatter = d3FormatPrefix('.2~', value);\n\n if (Math.abs(value) < 1) {\n // Don't use SI notation for small numbers as it is less readable\n formatter = d3Format('.2~g');\n } else if (limitWidth && Math.abs(value) >= 1000) {\n // If width is limited, use SI format prefix with 1 point precision\n formatter = d3FormatPrefix('.1~', value);\n }\n const formattedValue = formatter(value);\n\n // Replace 'G' with 'B' if the value is greater than 10^9 as it is a more common convention\n if (Math.abs(value) >= 1e9) {\n return formattedValue.replace('G', 'B');\n }\n\n return formattedValue;\n}\n\n/**\n * Formatter for y axis ticks.\n * @param value - The number to format.\n * @returns The formatted string .\n */\nexport function defaultYAxisTickFormatter(value: number): string {\n return yAxisTickFormatterInternal(value);\n}\n\n/**\n * Create Numeric X axis\n * @export\n * @param {IXAxisParams} xAxisParams\n */\nexport function createNumericXAxis(\n xAxisParams: IXAxisParams,\n tickParams: ITickParams,\n chartType: ChartTypes,\n culture?: string,\n) {\n const {\n domainNRangeValues,\n showRoundOffXTickValues = false,\n xAxistickSize = 6,\n tickPadding = 10,\n xAxisCount,\n xAxisElement,\n hideTickOverlap,\n } = xAxisParams;\n const xAxisScale = d3ScaleLinear()\n .domain([domainNRangeValues.dStartValue, domainNRangeValues.dEndValue])\n .range([domainNRangeValues.rStartValue, domainNRangeValues.rEndValue]);\n showRoundOffXTickValues && xAxisScale.nice();\n\n let tickCount = xAxisCount ?? 6;\n const tickFormat = (domainValue: NumberValue, _index: number) => {\n if (tickParams.tickFormat) {\n return d3Format(tickParams.tickFormat)(domainValue);\n }\n const xAxisValue = typeof domainValue === 'number' ? domainValue : domainValue.valueOf();\n return formatToLocaleString(xAxisValue, culture) as string;\n };\n if (hideTickOverlap && typeof xAxisCount === 'undefined') {\n const longestLabelWidth =\n calculateLongestLabelWidth(xAxisScale.ticks().map(tickFormat), '.fui-cart__xAxis text') + 20;\n const [start, end] = xAxisScale.range();\n tickCount = Math.max(1, Math.floor(Math.abs(end - start) / longestLabelWidth));\n }\n\n const xAxis = d3AxisBottom(xAxisScale)\n .tickSize(xAxistickSize)\n .tickPadding(tickPadding)\n .ticks(tickCount)\n .tickFormat(tickFormat);\n if (chartType === ChartTypes.HorizontalBarChartWithAxis) {\n xAxis.tickSizeInner(-(xAxisParams.containerHeight - xAxisParams.margins.top!));\n }\n if (tickParams.tickValues) {\n xAxis.tickValues(tickParams.tickValues as number[]);\n }\n\n if (xAxisElement) {\n d3Select(xAxisElement).call(xAxis).selectAll('text').attr('aria-hidden', 'true');\n }\n const tickValues = ((tickParams.tickValues as number[] | undefined) ?? xAxisScale.ticks(tickCount)).map(\n xAxis.tickFormat()!,\n );\n return { xScale: xAxisScale, tickValues };\n}\n\n/**\n * This function returns a multilevel formatter for a given date range.\n * It determines the appropriate date format to accommodate each tick value.\n * The goal is to represent the date label in the smallest possible format without loss of information.\n * The challenge here is to adhere to locale specific formats while ensuring the complete label is shown.\n * There is an exhaustive map of all possible date/time units and their respective formats.\n * Based on the range of formatting granularity levels, a format spanning the range is returned.\n * @param startLevel - The starting level of the date format.\n * @param endLevel - The ending level of the date format.\n * @param locale - The locale object for formatting.\n * @param useUTC\n * @returns\n */\nfunction getMultiLevelD3DateFormatter(\n startLevel: number,\n endLevel: number,\n locale?: d3TimeLocaleObject,\n useUTC?: boolean,\n) {\n const timeFormat = locale ? (useUTC ? locale.utcFormat : locale.format) : useUTC ? d3UtcFormat : d3TimeFormat;\n\n // Refer to https://d3js.org/d3-time-format#locale_format to see explanation about each format specifier\n const DEFAULT = '%c';\n const MS = '.%L';\n const MS_S = ':%S.%L';\n const MS_S_MIN = '%M:%S.%L';\n const MS_S_MIN_H = '%-I:%M:%S.%L %p';\n const MS_S_MIN_H_D = '%a %d, %X';\n const MS_S_MIN_H_D_W = '%b %d, %X';\n const MS_S_MIN_H_D_W_M = MS_S_MIN_H_D_W;\n const MS_S_MIN_H_D_W_M_Y = DEFAULT;\n const S = ':%S';\n const S_MIN = '%-I:%M:%S';\n const S_MIN_H = '%X';\n const S_MIN_H_D = MS_S_MIN_H_D;\n const S_MIN_H_D_W = MS_S_MIN_H_D_W;\n const S_MIN_H_D_W_M = MS_S_MIN_H_D_W_M;\n const S_MIN_H_D_W_M_Y = DEFAULT;\n const MIN = '%-I:%M %p';\n const MIN_H = MIN;\n const MIN_H_D = '%a %d, %-I:%M %p';\n const MIN_H_D_W = '%b %d, %-I:%M %p';\n const MIN_H_D_W_M = MIN_H_D_W;\n const MIN_H_D_W_M_Y = '%x, %-I:%M %p';\n const H = '%-I %p';\n const H_D = '%a %d, %-I %p';\n const H_D_W = '%b %d, %-I %p';\n const H_D_W_M = H_D_W;\n const H_D_W_M_Y = '%x, %-I %p';\n const D = '%a %d';\n const D_W = '%b %d';\n const D_W_M = D_W;\n const D_W_M_Y = '%x';\n const W = D_W;\n const W_M = W;\n const W_M_Y = D_W_M_Y;\n const M = '%B';\n const M_Y = '%b %Y';\n const Y = '%Y';\n\n const MULTI_LEVEL_DATE_TIME_FORMATS = [\n // ms, s, min, h, d, w, m, y\n [MS, MS_S, MS_S_MIN, MS_S_MIN_H, MS_S_MIN_H_D, MS_S_MIN_H_D_W, MS_S_MIN_H_D_W_M, MS_S_MIN_H_D_W_M_Y], // ms\n [DEFAULT, S, S_MIN, S_MIN_H, S_MIN_H_D, S_MIN_H_D_W, S_MIN_H_D_W_M, S_MIN_H_D_W_M_Y], // s\n [DEFAULT, DEFAULT, MIN, MIN_H, MIN_H_D, MIN_H_D_W, MIN_H_D_W_M, MIN_H_D_W_M_Y], // min\n [DEFAULT, DEFAULT, DEFAULT, H, H_D, H_D_W, H_D_W_M, H_D_W_M_Y], // h\n [DEFAULT, DEFAULT, DEFAULT, DEFAULT, D, D_W, D_W_M, D_W_M_Y], // d\n [DEFAULT, DEFAULT, DEFAULT, DEFAULT, DEFAULT, W, W_M, W_M_Y], // w\n [DEFAULT, DEFAULT, DEFAULT, DEFAULT, DEFAULT, DEFAULT, M, M_Y], // m\n [DEFAULT, DEFAULT, DEFAULT, DEFAULT, DEFAULT, DEFAULT, DEFAULT, Y], // y\n ];\n\n const formatter = timeFormat(MULTI_LEVEL_DATE_TIME_FORMATS[startLevel][endLevel]);\n return formatter;\n}\n\nfunction getDateFormatLevel(date: Date, useUTC?: boolean) {\n const timeSecond = useUTC ? d3UtcSecond : d3TimeSecond;\n const timeMinute = useUTC ? d3UtcMinute : d3TimeMinute;\n const timeHour = useUTC ? d3UtcHour : d3TimeHour;\n const timeDay = useUTC ? d3UtcDay : d3TimeDay;\n const timeMonth = useUTC ? d3UtcMonth : d3TimeMonth;\n const timeWeek = useUTC ? d3UtcWeek : d3TimeWeek;\n const timeYear = useUTC ? d3UtcYear : d3TimeYear;\n\n const formats = [\n { formatLevel: 0, condition: (d: Date) => timeSecond(d) < d }, // Milliseconds\n { formatLevel: 1, condition: (d: Date) => timeMinute(d) < d }, // Seconds\n { formatLevel: 2, condition: (d: Date) => timeHour(d) < d }, // Minutes\n { formatLevel: 3, condition: (d: Date) => timeDay(d) < d }, // Hours\n { formatLevel: 4, condition: (d: Date) => timeMonth(d) < d && timeWeek(d) < d }, // Days\n { formatLevel: 5, condition: (d: Date) => timeMonth(d) < d }, // Weeks\n { formatLevel: 6, condition: (d: Date) => timeYear(d) < d }, // Months\n { formatLevel: 7, condition: () => true }, // Years (default)\n ];\n\n const matchedFormat = formats.find(({ condition }) => condition(date));\n\n return matchedFormat?.formatLevel ?? 7;\n}\n\n/**\n * Creating Date x axis of the Chart\n * @export\n * @param {IXAxisParams} xAxisParams\n * @param {ITickParams} tickParams\n */\nexport function createDateXAxis(\n xAxisParams: IXAxisParams,\n tickParams: ITickParams,\n culture?: string,\n options?: Intl.DateTimeFormatOptions,\n timeFormatLocale?: d3TimeLocaleDefinition,\n customDateTimeFormatter?: (dateTime: Date) => string,\n useUTC?: string | boolean,\n) {\n const { domainNRangeValues, xAxisElement, tickPadding = 6, xAxistickSize = 6, xAxisCount } = xAxisParams;\n const isUtcSet = useUTC === true || useUTC === 'utc';\n const xAxisScale = isUtcSet ? d3ScaleUtc() : d3ScaleTime();\n xAxisScale\n .domain([domainNRangeValues.dStartValue, domainNRangeValues.dEndValue])\n .range([domainNRangeValues.rStartValue, domainNRangeValues.rEndValue])\n .nice();\n\n let tickCount = xAxisCount ?? 6;\n\n let lowestFormatLevel = 100;\n let highestFormatLevel = -1;\n\n const locale = timeFormatLocale ? d3TimeFormatLocale(timeFormatLocale) : undefined;\n\n xAxisScale.ticks().forEach((domainValue: Date) => {\n const formatLevel = getDateFormatLevel(domainValue, isUtcSet);\n\n if (formatLevel > highestFormatLevel) {\n highestFormatLevel = formatLevel;\n }\n if (formatLevel < lowestFormatLevel) {\n lowestFormatLevel = formatLevel;\n }\n });\n\n const formatOptions = options ?? getMultiLevelDateTimeFormatOptions(lowestFormatLevel, highestFormatLevel);\n\n const formatFn: (date: Date) => string = getMultiLevelD3DateFormatter(\n lowestFormatLevel,\n highestFormatLevel,\n locale,\n isUtcSet,\n );\n\n const tickFormat = (domainValue: Date, _index: number) => {\n if (customDateTimeFormatter) {\n return customDateTimeFormatter(domainValue);\n }\n if (timeFormatLocale) {\n return formatFn(domainValue);\n }\n if (culture === undefined && tickParams.tickFormat) {\n if (useUTC) {\n return d3UtcFormat(tickParams.tickFormat)(domainValue);\n } else {\n return d3TimeFormat(tickParams.tickFormat)(domainValue);\n }\n }\n\n return formatDateToLocaleString(domainValue, culture, useUTC ? true : false, false, formatOptions);\n };\n\n const longestLabelWidth =\n calculateLongestLabelWidth(xAxisScale.ticks().map(tickFormat), '.fui-cart__xAxis text') + 40;\n const [start, end] = xAxisScale.range();\n const maxPossibleTickCount = Math.max(1, Math.floor(Math.abs(end - start) / longestLabelWidth));\n tickCount = Math.min(maxPossibleTickCount, xAxisCount ?? tickCount);\n\n const xAxis = d3AxisBottom(xAxisScale)\n .tickSize(xAxistickSize)\n .tickPadding(tickPadding)\n .ticks(tickCount)\n .tickFormat(tickFormat);\n\n tickParams.tickValues ? xAxis.tickValues(tickParams.tickValues as Date[]) : '';\n if (xAxisElement) {\n d3Select(xAxisElement).call(xAxis).selectAll('text').attr('aria-hidden', 'true');\n }\n const tickValues = ((tickParams.tickValues as Date[] | undefined) ?? xAxisScale.ticks(tickCount)).map(\n xAxis.tickFormat()!,\n );\n return { xScale: xAxisScale, tickValues };\n}\n\n/**\n * Create String X axis\n * Currently using for only Vetical stacked bar chart and grouped vertical bar chart\n * @export\n * @param {IXAxisParams} xAxisParams\n * @param {ITickParams} tickParams\n * @param {string[]} dataset\n * @returns\n */\nexport function createStringXAxis(\n xAxisParams: IXAxisParams,\n tickParams: ITickParams,\n dataset: string[],\n culture?: string,\n) {\n const {\n domainNRangeValues,\n xAxistickSize = 6,\n tickPadding = 10,\n xAxisPadding = 0.1,\n xAxisInnerPadding,\n xAxisOuterPadding,\n containerWidth,\n hideTickOverlap,\n } = xAxisParams;\n const xAxisScale = d3ScaleBand()\n .domain(dataset!)\n .range([domainNRangeValues.rStartValue, domainNRangeValues.rEndValue])\n .paddingInner(typeof xAxisInnerPadding !== 'undefined' ? xAxisInnerPadding : xAxisPadding)\n .paddingOuter(typeof xAxisOuterPadding !== 'undefined' ? xAxisOuterPadding : xAxisPadding);\n\n let tickValues = (tickParams.tickValues as string[] | undefined) ?? dataset;\n const tickFormat = (domainValue: string, _index: number) => {\n return formatToLocaleString(domainValue, culture) as string;\n };\n if (hideTickOverlap) {\n let nonOverlappingTickValues = [];\n const tickSizes = tickValues.map((value, index) =>\n calculateLongestLabelWidth([tickFormat(value, index)], '.fui-cart__xAxis text'),\n );\n // for LTR\n let start = 0;\n let end = containerWidth;\n let sign = 1;\n const range = xAxisScale.range();\n if (range[1] - range[0] < 0) {\n // for RTL\n start = containerWidth;\n end = 0;\n sign = -1;\n }\n for (let i = tickValues.length - 1; i >= 0; i--) {\n const tickPosition = xAxisScale(tickValues[i])!;\n if (\n sign * (tickPosition - (sign * tickSizes[i]) / 2 - start) >= 0 &&\n sign * (tickPosition + (sign * tickSizes[i]) / 2 - end) <= 0\n ) {\n nonOverlappingTickValues.push(tickValues[i]);\n end = tickPosition - sign * (tickSizes[i] / 2 + 10);\n }\n }\n nonOverlappingTickValues = nonOverlappingTickValues.reverse();\n tickValues = nonOverlappingTickValues;\n }\n\n const xAxis = d3AxisBottom(xAxisScale)\n .tickSize(xAxistickSize)\n .tickPadding(tickPadding)\n .tickValues(tickValues)\n .tickFormat(tickFormat);\n\n if (xAxisParams.xAxisElement) {\n d3Select(xAxisParams.xAxisElement).call(xAxis).selectAll('text').attr('aria-hidden', 'true');\n }\n return { xScale: xAxisScale, tickValues: tickValues.map(xAxis.tickFormat()!) };\n}\n\nexport function useRtl() {\n const { dir } = useFluent(); // \"dir\" returns \"ltr\" or \"rtl\"\n return dir === 'rtl';\n}\n\nfunction isPowerOf10(num: number): boolean {\n const roundedfinalYMax = handleFloatingPointPrecisionError(num);\n return Math.log10(roundedfinalYMax) % 1 === 0;\n}\n\n//for reference, go through this 'https://docs.python.org/release/2.5.1/tut/node16.html'\nfunction handleFloatingPointPrecisionError(num: number): number {\n const rounded = Math.round(num);\n return Math.abs(num - rounded) < 1e-6 ? rounded : num;\n}\n\n/**\n * This method is used to calculate the rounded tick values for the y-axis\n * @param {number} minVal\n * @param {number} maxVal\n * @param {number} splitInto\n * @returns {number[]}\n */\nfunction calculateRoundedTicks(minVal: number, maxVal: number, splitInto: number) {\n const finalYmin = minVal >= 0 && minVal === maxVal ? 0 : minVal;\n const finalYmax = minVal < 0 && minVal === maxVal ? 0 : maxVal;\n const ticksInterval = d3nice(finalYmin, finalYmax, splitInto);\n const ticks = d3Ticks(ticksInterval[0], ticksInterval[ticksInterval.length - 1], splitInto);\n if (ticks[ticks.length - 1] > finalYmax && isPowerOf10(finalYmax)) {\n ticks.pop();\n }\n return ticks;\n}\n\n/**\n * This method used for creating data points for the y axis.\n * @export\n * @param {number} maxVal\n * @param {number} minVal\n * @param {number} splitInto\n * @param {boolean} isIntegralDataset\n * @returns {number[]}\n */\nexport function prepareDatapoints(\n maxVal: number,\n minVal: number,\n splitInto: number,\n isIntegralDataset: boolean,\n roundedTicks?: boolean,\n): number[] {\n if (roundedTicks) {\n return calculateRoundedTicks(minVal, maxVal, splitInto);\n }\n const val = isIntegralDataset\n ? Math.ceil((maxVal - minVal) / splitInto)\n : (maxVal - minVal) / splitInto >= 1\n ? Math.ceil((maxVal - minVal) / splitInto)\n : (maxVal - minVal) / splitInto;\n /*\n For cases where we have negative and positive values\n The dataPointsArray is filled from 0 to minVal by val difference\n Then the array is reversed and values from 0(excluding 0) to maxVal are appended\n This ensures presence of 0 to act as an anchor reference.\n For simple cases where the scale may not encounter such a need for 0,\n We simply fill from minVal to maxVal\n */\n const dataPointsArray: number[] = [minVal < 0 && maxVal >= 0 ? 0 : minVal];\n /*For the case of all positive or all negative, we need to add another value\n in array for atleast one interval, but in case of mix of positive and negative,\n there will always be one more entry that will be added by the logic we have*/\n if (dataPointsArray[0] === minVal) {\n dataPointsArray.push(minVal + val);\n }\n if (minVal < 0 && maxVal >= 0) {\n while (dataPointsArray[dataPointsArray.length - 1] > minVal) {\n dataPointsArray.push(dataPointsArray[dataPointsArray.length - 1] - val);\n }\n dataPointsArray.reverse();\n }\n while (dataPointsArray[dataPointsArray.length - 1] < maxVal) {\n dataPointsArray.push(dataPointsArray[dataPointsArray.length - 1] + val);\n }\n return dataPointsArray;\n}\n\n/**\n * Creating Numeric Y axis of the chart\n * @export\n * @param {IYAxisParams} yAxisParams\n * @param {boolean} isRtl\n */\nexport function createYAxis(\n yAxisParams: IYAxisParams,\n isRtl: boolean,\n axisData: IAxisData,\n chartType: ChartTypes,\n barWidth: number,\n isIntegralDataset: boolean,\n useSecondaryYScale: boolean = false,\n roundedTicks: boolean = false,\n) {\n switch (chartType) {\n case ChartTypes.HorizontalBarChartWithAxis:\n return createYAxisForHorizontalBarChartWithAxis(yAxisParams, isRtl, axisData, barWidth!);\n default:\n return createNumericYAxisForOtherCharts(\n yAxisParams,\n isRtl,\n axisData,\n isIntegralDataset,\n chartType,\n useSecondaryYScale,\n roundedTicks,\n );\n }\n}\n\nexport function createYAxisForHorizontalBarChartWithAxis(\n yAxisParams: IYAxisParams,\n isRtl: boolean,\n axisData: IAxisData,\n barWidth: number,\n) {\n const {\n yMinMaxValues = { startValue: 0, endValue: 0 },\n yAxisElement = null,\n yMaxValue = 0,\n yMinValue = 0,\n containerHeight,\n margins,\n tickPadding = 12,\n maxOfYVal = 0,\n yAxisTickFormat,\n yAxisTickCount = 4,\n } = yAxisParams;\n\n // maxOfYVal coming from only area chart and Grouped vertical bar chart(Calculation done at base file)\n const tempVal = maxOfYVal || yMinMaxValues.endValue;\n const finalYmax = tempVal > yMaxValue ? tempVal : yMaxValue!;\n const finalYmin = yMinMaxValues.startValue < yMinValue ? 0 : yMinValue!;\n const yAxisScale = d3ScaleLinear()\n .domain([finalYmin, finalYmax])\n .range([containerHeight - margins.bottom!, margins.top!]);\n const axis = isRtl ? d3AxisRight(yAxisScale) : d3AxisLeft(yAxisScale);\n const yAxis = axis.tickPadding(tickPadding).ticks(yAxisTickCount);\n yAxisTickFormat ? yAxis.tickFormat(yAxisTickFormat) : yAxis.tickFormat(defaultYAxisTickFormatter);\n yAxisElement ? d3Select(yAxisElement).call(yAxis).selectAll('text').attr('aria-hidden', 'true') : '';\n return yAxisScale;\n}\n\nexport function createNumericYAxisForOtherCharts(\n yAxisParams: IYAxisParams,\n isRtl: boolean,\n axisData: IAxisData,\n isIntegralDataset: boolean,\n chartType: ChartTypes,\n useSecondaryYScale: boolean = false,\n roundedTicks: boolean = false,\n) {\n const {\n yMinMaxValues = { startValue: 0, endValue: 0 },\n yAxisElement = null,\n yMaxValue = 0,\n yMinValue = 0,\n containerHeight,\n containerWidth,\n margins,\n tickPadding = 12,\n maxOfYVal = 0,\n yAxisTickFormat,\n yAxisTickCount = 4,\n eventAnnotationProps,\n eventLabelHeight,\n } = yAxisParams;\n\n // maxOfYVal coming from only area chart and Grouped vertical bar chart(Calculation done at base file)\n const tempVal = maxOfYVal || yMinMaxValues.endValue;\n const finalYmax = tempVal > yMaxValue ? tempVal : yMaxValue!;\n const finalYmin = Math.min(yMinMaxValues.startValue, yMinValue || 0);\n const domainValues = prepareDatapoints(finalYmax, finalYmin, yAxisTickCount, isIntegralDataset, roundedTicks);\n let yMin = finalYmin;\n let yMax = domainValues[domainValues.length - 1];\n if (chartType === ChartTypes.ScatterChart) {\n const yPadding = (yMax - yMin) * 0.1;\n yMin = yMin - yPadding;\n yMax = yMax + yPadding;\n }\n const yAxisScale = d3ScaleLinear()\n .domain([domainValues[0], yMax])\n .range([containerHeight - margins.bottom!, margins.top! + (eventAnnotationProps! ? eventLabelHeight! : 0)]);\n const axis =\n (!isRtl && useSecondaryYScale) || (isRtl && !useSecondaryYScale) ? d3AxisRight(yAxisScale) : d3AxisLeft(yAxisScale);\n const yAxis = axis\n .tickPadding(tickPadding)\n .tickValues(domainValues)\n .tickSizeInner(-(containerWidth - margins.left! - margins.right!));\n\n yAxisTickFormat ? yAxis.tickFormat(yAxisTickFormat) : yAxis.tickFormat(defaultYAxisTickFormatter);\n yAxisElement ? d3Select(yAxisElement).call(yAxis).selectAll('text').attr('aria-hidden', 'true') : '';\n axisData.yAxisDomainValues = domainValues;\n return yAxisScale;\n}\n\nexport const createStringYAxis = (\n yAxisParams: IYAxisParams,\n dataPoints: string[],\n isRtl: boolean,\n chartType: ChartTypes,\n barWidth: number | undefined,\n culture?: string,\n) => {\n switch (chartType) {\n case ChartTypes.HorizontalBarChartWithAxis:\n return createStringYAxisForHorizontalBarChartWithAxis(yAxisParams, dataPoints, isRtl, barWidth!, culture);\n default:\n return createStringYAxisForOtherCharts(yAxisParams, dataPoints, isRtl);\n }\n};\n\n/**\n * Creating String Y axis of the chart for Horizontal Bar Chart With Axis\n * @param yAxisParams\n * @param dataPoints\n * @param isRtl\n */\nexport const createStringYAxisForHorizontalBarChartWithAxis = (\n yAxisParams: IYAxisParams,\n dataPoints: string[],\n isRtl: boolean,\n barWidth: number,\n culture?: string,\n) => {\n const { containerHeight, tickPadding = 12, margins, yAxisTickFormat, yAxisElement } = yAxisParams;\n\n const yAxisScale = d3ScaleBand()\n .domain(dataPoints)\n .range([containerHeight - margins.bottom! - barWidth / 2, margins.top! + barWidth / 2]);\n const axis = isRtl ? d3AxisRight(yAxisScale) : d3AxisLeft(yAxisScale);\n const yAxis = axis.tickPadding(tickPadding).ticks(dataPoints);\n if (yAxisTickFormat) {\n yAxis.tickFormat(yAxisTickFormat);\n }\n yAxisElement ? d3Select(yAxisElement).call(yAxis).selectAll('text') : '';\n return yAxisScale;\n};\n\n/**\n * Creating String Y axis of the chart for other chart except Horizontal Bar Chart With Axis\n * @param yAxisParams\n * @param dataPoints\n * @param isRtl\n */\nexport const createStringYAxisForOtherCharts = (yAxisParams: IYAxisParams, dataPoints: string[], isRtl: boolean) => {\n const { containerHeight, tickPadding = 12, margins, yAxisTickFormat, yAxisElement, yAxisPadding = 0 } = yAxisParams;\n const yAxisScale = d3ScaleBand()\n .domain(dataPoints)\n .range([containerHeight - margins.bottom!, margins.top!])\n .padding(yAxisPadding);\n const axis = isRtl ? d3AxisRight(yAxisScale) : d3AxisLeft(yAxisScale);\n const yAxis = axis.tickPadding(tickPadding).tickValues(dataPoints).tickSize(0);\n if (yAxisTickFormat) {\n yAxis.tickFormat(yAxisTickFormat);\n }\n yAxisElement ? d3Select(yAxisElement).call(yAxis).selectAll('text') : '';\n return yAxisScale;\n};\n\n/**\n * For area chart and line chart, while displaying stackCallout, Need to form a callout data object.\n * This methos creates an object for those 2 charts.\n * @param values\n */\n\nexport function calloutData(values: (LineChartPoints & { index?: number })[]) {\n let combinedResult: (LineChartDataPoint & {\n legend: string;\n color?: string;\n index?: number;\n })[] = [];\n\n values.forEach((line: LineChartPoints & { index?: number }) => {\n const elements = line.data\n .filter((point: LineChartDataPoint) => !point.hideCallout)\n .map((point: LineChartDataPoint) => {\n return { ...point, legend: line.legend, color: line.color, index: line.index };\n });\n combinedResult = combinedResult.concat(elements);\n });\n\n const xValToDataPoints: {\n [key: number]: {\n legend: string;\n y: number;\n color: string;\n xAxisCalloutData?: string;\n yAxisCalloutData?: string | { [id: string]: number };\n callOutAccessibilityData?: AccessibilityProps;\n index?: number;\n }[];\n [key: string]: {\n legend: string;\n y: number;\n color: string;\n xAxisCalloutData?: string;\n yAxisCalloutData?: string | { [id: string]: number };\n callOutAccessibilityData?: AccessibilityProps;\n index?: number;\n }[];\n } = {};\n combinedResult.forEach(ele => {\n const xValue = ele.x instanceof Date ? ele.x.getTime() : ele.x;\n if (xValue in xValToDataPoints) {\n xValToDataPoints[xValue].push({\n legend: ele.legend,\n y: ele.y,\n color: ele.color!,\n xAxisCalloutData: ele.xAxisCalloutData,\n yAxisCalloutData: ele.yAxisCalloutData,\n callOutAccessibilityData: ele.callOutAccessibilityData,\n index: ele.index,\n });\n } else {\n xValToDataPoints[xValue] = [\n {\n legend: ele.legend,\n y: ele.y,\n color: ele.color!,\n xAxisCalloutData: ele.xAxisCalloutData,\n yAxisCalloutData: ele.yAxisCalloutData,\n callOutAccessibilityData: ele.callOutAccessibilityData,\n index: ele.index,\n },\n ];\n }\n });\n\n const result = Object.keys(xValToDataPoints).map(xValue => {\n const originalXValue = isNaN(Number(xValue)) ? xValue : Number(xValue);\n return { x: originalXValue, values: xValToDataPoints[xValue] };\n });\n return result;\n}\n\nexport function getUnique(\n arr: { x: number | Date | string; values: { legend: string; y: number }[] }[],\n comp: string | number,\n) {\n const unique = arr\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n .map((e: { [x: string]: any }) => e[comp])\n // store the keys of the unique objects\n .map((e: string, i: number, final: string[]) => final.indexOf(e) === i && i)\n // eliminate the dead keys & store unique objects\n .filter((e: number) => arr[e])\n .map((e: number) => arr[e]);\n return unique;\n}\n\n/**\n * This function takes two paramerter\n * 1. an array of strings\n * 2. a string value\n * if the value is not present in the given array then it will return the new\n * array by appending the value to the present arrray.\n *\n * if the value is already present in the given array then it will return the new\n * array by deleteing the value from the the array\n * @param array\n * @param value\n */\nexport function silceOrAppendToArray(array: string[], value: string): string[] {\n const pos = array.indexOf(value);\n if (pos === -1) {\n return [...array, value];\n } else {\n return array.slice(0, pos).concat(array.slice(pos + 1));\n }\n}\n\n/**\n * This method used for wrapping of x axis labels (tick values).\n * It breaks down given text value by space separated and calculates the total height needed to display all the words.\n * That value = removal value. This value needs to be remove from total svg height, svg will shrink and\n * total text will be displayed.\n * @export\n * @param {IWrapLabelProps} wrapLabelProps\n * @returns\n */\nexport function createWrapOfXLabels(wrapLabelProps: IWrapLabelProps) {\n const { node, xAxis, noOfCharsToTruncate, showXAxisLablesTooltip } = wrapLabelProps;\n if (node === null) {\n return;\n }\n const axisNode = d3Select(node).call(xAxis);\n let removeVal = 0;\n const width = 10;\n const arr: number[] = [];\n axisNode.selectAll('.tick text').each(function () {\n const text = d3Select(this);\n const totalWord = text.text();\n const truncatedWord = `${text.text().slice(0, noOfCharsToTruncate)}...`;\n const totalWordLength = text.text().length;\n const words = text.text().split(/\\s+/).reverse();\n arr.push(words.length);\n let word: string = '';\n let line: string[] = [];\n let lineNumber: number = 0;\n const lineHeight = 1.1; // ems\n const y = text.attr('y');\n const dy = parseFloat(text.attr('dy'));\n let tspan = text\n .text(null)\n .append('tspan')\n .attr('x', 0)\n .attr('y', y)\n .attr('id', 'BaseSpan')\n .attr('dy', dy + 'em')\n .attr('data-', totalWord);\n\n if (showXAxisLablesTooltip && totalWordLength > noOfCharsToTruncate) {\n tspan = text\n .append('tspan')\n .attr('id', 'showDots')\n .attr('x', 0)\n .attr('y', y)\n .attr('dy', ++lineNumber * lineHeight + dy + 'em')\n .text(truncatedWord);\n } else if (showXAxisLablesTooltip && totalWordLength <= noOfCharsToTruncate) {\n tspan = text\n .append('tspan')\n .attr('id', 'LessLength')\n .attr('x', 0)\n .attr('y', y)\n .attr('dy', ++lineNumber * lineHeight + dy + 'em')\n .text(totalWord);\n } else {\n while ((word = words.pop()!)) {\n line.push(word);\n tspan.text(line.join(' '));\n if (tspan.node()!.getComputedTextLength() > width && line.length > 1) {\n line.pop();\n tspan.text(line.join(' '));\n line = [word];\n tspan = text\n .append('tspan')\n .attr('id', 'WordBreakId')\n .attr('x', 0)\n .attr('y', y)\n .attr('dy', ++lineNumber * lineHeight + dy + 'em')\n .text(word);\n }\n }\n const maxDigit = Math.max(...arr);\n let maxHeight: number = 12; // intial value to render corretly first time\n axisNode.selectAll('text').each(() => {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const outerHTMLElement = document.getElementById('WordBreakId') as any;\n const BoxCordinates = outerHTMLElement && outerHTMLElement.getBoundingClientRect();\n const boxHeight = BoxCordinates && BoxCordinates.height;\n if (boxHeight > maxHeight) {\n maxHeight = boxHeight;\n }\n });\n // If we take directly maxDigit * maxheight, then it will show more height between x axis tick values and bottom.\n // To avoid this, reducing maxDigit value by removing some digit based on legth of word.\n let removeDigit: number = 4;\n if (maxDigit <= 2) {\n removeDigit = 1;\n } else if (maxDigit > 2 && maxDigit <= 6) {\n removeDigit = 2;\n } else if (maxDigit > 6 && maxDigit <= 9) {\n removeDigit = 3;\n }\n removeVal = (maxDigit - removeDigit) * maxHeight;\n }\n });\n return removeVal > 0 ? removeVal : 0;\n}\n\n/**\n * This method used for wrapping of y axis labels (tick values).\n */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport function createYAxisLabels(\n node: SVGElement | null,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n yAxis: any,\n noOfCharsToTruncate: number,\n truncateLabel: boolean,\n xValue: number,\n isRtl: boolean,\n) {\n if (node === null) {\n return;\n }\n let tickIndex = 0;\n const axisNode = d3Select(node).call(yAxis);\n axisNode.selectAll('.tick text').each(function () {\n const text = d3Select(this);\n const totalWord = text.text();\n const truncatedWord = isRtl\n ? `...${text.text().slice(0, noOfCharsToTruncate)}`\n : `${text.text().slice(0, noOfCharsToTruncate)}...`;\n const totalWordLength = text.text().length;\n const padding = truncateLabel ? 1.5 : 1; // ems\n const y = text.attr('y');\n const x = text.attr('x');\n const dy = parseFloat(text.attr('dy'));\n const dx = 0;\n const uid = tickIndex++;\n text\n .text(null)\n .append('tspan')\n .attr('x', x)\n .attr('y', y)\n .attr('id', `BaseSpan-${uid}`)\n .attr('dy', dy + 'em')\n .attr('data-', totalWord);\n\n if (truncateLabel && totalWordLength > noOfCharsToTruncate) {\n text\n .append('tspan')\n .attr('id', `showDots-${uid}`)\n .attr('x', isRtl ? 0 : x)\n .attr('y', y)\n .attr('dy', dy)\n .attr('dx', padding + dx + 'em')\n .text(truncatedWord);\n } else {\n text\n .attr('text-align', 'start')\n .append('tspan')\n .attr('id', `LessLength-${uid}`)\n .attr('x', isRtl ? 0 : x)\n .attr('y', y)\n .attr('dx', padding + dx + 'em')\n .text(totalWord);\n }\n });\n}\n\nexport const wrapContent = (content: string, id: string, maxWidth: number) => {\n const textElement = d3Select<SVGTextElement, {}>(`#${id}`);\n textElement.text(content);\n if (!textElement.node()) {\n return false;\n }\n\n let isOverflowing = false;\n let textLength = textElement.node()!.getComputedTextLength();\n while (textLength > maxWidth && content.length > 0) {\n content = content.slice(0, -1);\n textElement.text(content + '...');\n isOverflowing = true;\n textLength = textElement.node()!.getComputedTextLength();\n }\n return isOverflowing;\n};\n\n/**\n * Calculates the width of the longest axis label in pixels\n */\nexport const calculateLongestLabelWidth = (labels: (string | number)[], query: string = 'none'): number => {\n let maxLabelWidth = 0;\n const canvas = document.createElement('canvas');\n const ctx = canvas.getContext('2d');\n\n if (ctx) {\n const axisText = document.querySelector(query);\n if (axisText) {\n const styles = window.getComputedStyle(axisText, null);\n const fontWeight = styles.getPropertyValue('font-weight');\n const fontSize = styles.getPropertyValue('font-size');\n const fontFamily = styles.getPropertyValue('font-family');\n ctx.font = `${fontWeight} ${fontSize} ${fontFamily}`;\n } else {\n ctx.font = '600 10px \"Segoe UI\"';\n }\n\n labels.forEach(label => {\n maxLabelWidth = Math.max(ctx.measureText(label.toString()).width, maxLabelWidth);\n });\n }\n\n return maxLabelWidth;\n};\n\n/**\n * This method displays a tooltip to the x axis lables(tick values)\n * when prop 'showXAxisLablesTooltip' enables to the respected chart.\n * On hover of the truncated word(at x axis labels tick), a tooltip will be appeared.\n */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport function tooltipOfXAxislabels(xAxistooltipProps: any): any {\n const { tooltipCls, xAxis, id } = xAxistooltipProps;\n if (xAxis === null) {\n return null;\n }\n const div = d3Select('body').append('div').attr('id', id).attr('class', tooltipCls).style('opacity', 0);\n const aa = xAxis!.selectAll('#BaseSpan')._groups[0];\n const baseSpanLength = aa && Object.keys(aa)!.length;\n const originalDataArray: string[] = [];\n for (let i = 0; i < baseSpanLength; i++) {\n const originalData = aa[i].dataset && (Object.values(aa[i].dataset)[0] as string);\n originalDataArray.push(originalData);\n }\n const tickObject = xAxis!.selectAll('.tick')._groups[0];\n const tickObjectLength = tickObject && Object.keys(tickObject)!.length;\n for (let i = 0; i < tickObjectLength; i++) {\n const d1 = tickObject[i];\n d3Select(d1)\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n .on('mouseover', (event: any, d) => {\n div.style('opacity', 0.9);\n div\n .html(originalDataArray[i])\n .style('left', event.pageX + 'px')\n .style('top', event.pageY - 28 + 'px');\n })\n .on('mouseout', d => {\n div.style('opacity', 0);\n });\n }\n}\n\n/**\n * Find the axis type of line chart and area chart from given data\n * @param points\n */\nexport function getXAxisType(points: LineChartPoints[]): boolean {\n let isXAxisDateType: boolean = false;\n if (points && points.length > 0) {\n points.forEach((chartData: LineChartPoints) => {\n if (chartData.data.length > 0) {\n isXAxisDateType = chartData.data[0].x instanceof Date;\n return;\n }\n });\n }\n return isXAxisDateType;\n}\n\n/**\n * Calculates Domain and range values for Numeric X axis.\n * This method calculates Area cart and line chart.\n * @export\n * @param {LineChartPoints[]} points\n * @param {IMargins} margins\n * @param {number} width\n * @param {boolean} isRTL\n * @returns {IDomainNRange}\n */\nexport function domainRangeOfNumericForAreaChart(\n points: LineChartPoints[],\n margins: IMargins,\n width: number,\n isRTL: boolean,\n): IDomainNRange {\n const xMin = d3Min(points, (point: LineChartPoints) => {\n return d3Min(point.data as LineChartDataPoint[], (item: LineChartDataPoint) => item.x as number)!;\n })!;\n\n const xMax = d3Max(points, (point: LineChartPoints) => {\n return d3Max(point.data as LineChartDataPoint[], (item: LineChartDataPoint) => {\n return item.x as number;\n });\n })!;\n\n const rStartValue = margins.left!;\n const rEndValue = width - margins.right!;\n\n return isRTL\n ? { dStartValue: xMax, dEndValue: xMin, rStartValue, rEndValue }\n : { dStartValue: xMin, dEndValue: xMax, rStartValue, rEndValue };\n}\n\n/**\n * Calculates Domain and range values for Numeric X axis for scatter chart.\n * @export\n * @param {LineChartPoints[]} points\n * @param {IMargins} margins\n * @param {number} width\n * @param {boolean} isRTL\n * @returns {IDomainNRange}\n */\nexport function domainRangeOfNumericForScatterChart(\n points: LineChartPoints[],\n margins: IMargins,\n width: number,\n isRTL: boolean,\n): IDomainNRange {\n let xMin = d3Min(points, (point: LineChartPoints) => {\n return d3Min(point.data as ScatterChartDataPoint[], (item: ScatterChartDataPoint) => item.x as number)!;\n })!;\n\n let xMax = d3Max(points, (point: LineChartPoints) => {\n return d3Max(point.data as ScatterChartDataPoint[], (item: LineChartDataPoint) => {\n return item.x as number;\n });\n })!;\n\n const xPadding = (xMax - xMin) * 0.1;\n xMin = xMin - xPadding;\n xMax = xMax + xPadding;\n\n const rStartValue = margins.left!;\n const rEndValue = width - margins.right!;\n\n return isRTL\n ? { dStartValue: xMax, dEndValue: xMin, rStartValue, rEndValue }\n : { dStartValue: xMin, dEndValue: xMax, rStartValue, rEndValue };\n}\n\n/**\n * Calculates Domain and range values for Numeric X axis.\n * This method calculates Horizontal Chart with Axis\n * @export\n * @param {LineChartPoints[]} points\n * @param {IMargins} margins\n * @param {number} width\n * @param {boolean} isRTL\n * @returns {IDomainNRange}\n */\nexport function domainRangeOfNumericForHorizontalBarChartWithAxis(\n points: HorizontalBarChartWithAxisDataPoint[],\n margins: IMargins,\n containerWidth: number,\n isRTL: boolean,\n shiftX: number,\n): IDomainNRange {\n const xMax = d3Max(points, (point: HorizontalBarChartWithAxisDataPoint) => point.x as number)!;\n const rMin = isRTL ? margins.left! : margins.left! + shiftX;\n const rMax = isRTL ? containerWidth - margins.right! - shiftX : containerWidth - margins.right!;\n\n return isRTL\n ? { dStartValue: xMax, dEndValue: 0, rStartValue: rMin, rEndValue: rMax }\n : { dStartValue: 0, dEndValue: xMax, rStartValue: rMin, rEndValue: rMax };\n}\n\n/**\n * Calculates Range values of x Axis string axis\n * For String axis, we need to give domain values (Not start and end array values)\n * So sending 0 as domain values. Domain will be handled at creation of string axis\n * For charts stacked bar chart, grouped vertical bar chart, HeatMapChart and Vertical bar chart\n * @export\n * @param {IMargins} margins\n * @param {number} width\n * @param {boolean} isRTL\n * @returns {IDomainNRange}\n */\nexport function domainRangeOfXStringAxis(margins: IMargins, width: number, isRTL: boolean): IDomainNRange {\n const rMin = margins.left!;\n const rMax = width - margins.right!;\n return isRTL\n ? { dStartValue: 0, dEndValue: 0, rStartValue: rMax, rEndValue: rMin }\n : { dStartValue: 0, dEndValue: 0, rStartValue: rMin, rEndValue: rMax };\n}\n\n/**\n * Calculate domain and range values to the Vertical stacked bar chart - For Numeric axis\n * @export\n * @param {DataPoint[]} points\n * @param {IMargins} margins\n * @param {number} width\n * @param {boolean} isRTL\n * @param {number} barWidth\n * @returns {IDomainNRange}\n */\nexport function domainRangeOfVSBCNumeric(\n points: DataPoint[],\n margins: IMargins,\n width: number,\n isRTL: boolean,\n barWidth: number,\n): IDomainNRange {\n const xMin = d3Min(points, (point: DataPoint) => point.x as number)!;\n const xMax = d3Max(points, (point: DataPoint) => point.x as number)!;\n const rMax = margins.left!;\n const rMin = width - margins.right!;\n return isRTL\n ? { dStartValue: xMax, dEndValue: xMin, rStartValue: rMax, rEndValue: rMin }\n : { dStartValue: xMin, dEndValue: xMax, rStartValue: rMax, rEndValue: rMin };\n}\n\n/**\n * Calculates Domain and range values for Date X axis.\n * This method calculates Bar chart.\n * @export\n * @param {VerticalBarChartDataPoint[]} points\n * @param {IMargins} margins\n * @param {number} width\n * @param {boolean} isRTL\n * @param {Date[] | number[]} tickValues\n * @returns {IDomainNRange}\n */\nexport function domainRangeOfDateForAreaLineVerticalBarChart(\n points: LineChartPoints[] | VerticalBarChartDataPoint[] | VerticalStackedBarDataPoint[],\n margins: IMargins,\n width: number,\n isRTL: boolean,\n tickValues: Date[] = [],\n chartType: ChartTypes,\n barWidth?: number,\n): IDomainNRange {\n let sDate: Date;\n let lDate: Date;\n if (chartType === ChartTypes.AreaChart || chartType === ChartTypes.LineChart) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n sDate = d3Min(points, (point: any) => {\n return d3Min(point.data, (item: LineChartDataPoint) => {\n return item.x as Date;\n });\n })!;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n lDate = d3Max(points, (point: any) => {\n return d3Max(point.data, (item: LineChartDataPoint) => {\n return item.x as Date;\n });\n })!;\n // Need to draw graph with given small and large date\n // (Which Involves customization of date axis tick values)\n // That may be Either from given graph data or from prop 'tickValues' date values.\n // So, Finding smallest and largest dates\n sDate = d3Min([...tickValues, sDate])!;\n lDate = d3Max([...tickValues, lDate])!;\n } else {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n sDate = d3Min(points as any[], point => point.x as Date)!;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n lDate = d3Max(points as any[], point => point.x as Date)!;\n }\n\n const rStartValue = margins.left!;\n const rEndValue = width - margins.right!;\n\n return isRTL\n ? { dStartValue: lDate, dEndValue: sDate, rStartValue, rEndValue }\n : { dStartValue: sDate, dEndValue: lDate, rStartValue, rEndValue };\n}\n\n/**\n * Calculates Domain and range values for Date X axis for scatter chart.\n * @export\n * @param {LineChartPoints[]} points\n * @param {IMargins} margins\n * @param {number} width\n * @param {boolean} isRTL\n * @param {Date[] | number[]} tickValues\n * @returns {IDomainNRange}\n */\nexport function domainRangeOfDateForScatterChart(\n points: LineChartPoints[],\n margins: IMargins,\n width: number,\n isRTL: boolean,\n tickValues: Date[] = [],\n): IDomainNRange {\n let sDate: Date;\n let lDate: Date;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n sDate = d3Min(points, (point: any) => {\n return d3Min(point.data, (item: LineChartDataPoint) => {\n return item.x as Date;\n });\n })!;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n lDate = d3Max(points, (point: any) => {\n return d3Max(point.data, (item: LineChartDataPoint) => {\n return item.x as Date;\n });\n })!;\n\n const xPadding = (lDate.getTime() - sDate.getTime()) * 0.1;\n sDate = new Date(sDate.getTime() - xPadding);\n lDate = new Date(lDate.getTime() + xPadding);\n // Need to draw graph with given small and large date\n // (Which Involves customization of date axis tick values)\n // That may be Either from given graph data or from prop 'tickValues' date values.\n // So, Finding smallest and largest dates\n sDate = d3Min([...tickValues, sDate])!;\n lDate = d3Max([...tickValues, lDate])!;\n\n const rStartValue = margins.left!;\n const rEndValue = width - margins.right!;\n\n return isRTL\n ? { dStartValue: lDate, dEndValue: sDate, rStartValue, rEndValue }\n : { dStartValue: sDate, dEndValue: lDate, rStartValue, rEndValue };\n}\n\n/**\n * Calculate domain and range values to the Vertical bar chart - For Numeric axis\n * @export\n * @param {DataPoint[]} points\n * @param {IMargins} margins\n * @param {number} containerWidth\n * @param {boolean} isRTL\n * @param {number} barWidth\n * @returns {IDomainNRange}\n */\nexport function domainRageOfVerticalNumeric(\n points: DataPoint[],\n margins: IMargins,\n containerWidth: number,\n isRTL: boolean,\n barWidth: number,\n): IDomainNRange {\n const xMax = d3Max(points, (point: VerticalBarChartDataPoint) => point.x as number)!;\n const xMin = d3Min(points, (point: VerticalBarChartDataPoint) => point.x as number)!;\n const rMin = margins.left!;\n const rMax = containerWidth - margins.right!;\n\n return isRTL\n ? { dStartValue: xMax, dEndValue: xMin, rStartValue: rMin, rEndValue: rMax }\n : { dStartValue: xMin, dEndValue: xMax, rStartValue: rMin, rEndValue: rMax };\n}\n\n/**\n * For creating X axis, need to calculate x axis domain and range values from given points.\n * This may vary based on chart type and type of x axis\n * So, this method will define which method need to call based on chart type and axis type.\n * @export\n * @param {*} points\n * @param {IMargins} margins\n * @param {number} width\n * @param {ChartTypes} chartType\n * @param {boolean} isRTL\n * @param {XAxisTypes} xAxisType\n * @param {number} [barWidth]\n * @returns {IDomainNRange}\n */\nexport function getDomainNRangeValues(\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n points: any,\n margins: IMargins,\n width: number,\n chartType: ChartTypes,\n isRTL: boolean,\n xAxisType: XAxisTypes,\n barWidth: number,\n tickValues: number[] | Date[] | string[] | undefined,\n shiftX: number,\n): IDomainNRange {\n let domainNRangeValue: IDomainNRange;\n if (xAxisType === XAxisTypes.NumericAxis) {\n switch (chartType) {\n case ChartTypes.AreaChart:\n case ChartTypes.LineChart:\n domainNRangeValue = domainRangeOfNumericForAreaChart(points, margins, width, isRTL);\n break;\n case ChartTypes.VerticalStackedBarChart:\n domainNRangeValue = domainRangeOfVSBCNumeric(points, margins, width, isRTL, barWidth!);\n break;\n case ChartTypes.VerticalBarChart:\n domainNRangeValue = domainRageOfVerticalNumeric(points, margins, width, isRTL, barWidth!);\n break;\n case ChartTypes.HorizontalBarChartWithAxis:\n domainNRangeValue = domainRangeOfNumericForHorizontalBarChartWithAxis(points, margins, width, isRTL, shiftX);\n break;\n case ChartTypes.ScatterChart:\n domainNRangeValue = domainRangeOfNumericForScatterChart(points, margins, width, isRTL);\n break;\n default:\n domainNRangeValue = { dStartValue: 0, dEndValue: 0, rStartValue: 0, rEndValue: 0 };\n }\n } else if (xAxisType === XAxisTypes.DateAxis) {\n switch (chartType) {\n case ChartTypes.AreaChart:\n case ChartTypes.LineChart:\n case ChartTypes.VerticalBarChart:\n case ChartTypes.VerticalStackedBarChart:\n domainNRangeValue = domainRangeOfDateForAreaLineVerticalBarChart(\n points,\n margins,\n width,\n isRTL,\n tickValues! as Date[],\n chartType,\n barWidth,\n );\n break;\n case ChartTypes.ScatterChart:\n domainNRangeValue = domainRangeOfDateForScatterChart(points, margins, width, isRTL, tickValues! as Date[]);\n break;\n default:\n domainNRangeValue = { dStartValue: 0, dEndValue: 0, rStartValue: 0, rEndValue: 0 };\n }\n } else {\n // String Axis type\n switch (chartType) {\n case ChartTypes.VerticalStackedBarChart:\n case ChartTypes.GroupedVerticalBarChart:\n case ChartTypes.VerticalBarChart:\n case ChartTypes.HeatMapChart:\n case ChartTypes.ScatterChart:\n domainNRangeValue = domainRangeOfXStringAxis(margins, width, isRTL);\n break;\n default:\n domainNRangeValue = { dStartValue: 0, dEndValue: 0, rStartValue: 0, rEndValue: 0 };\n }\n }\n return domainNRangeValue;\n}\n\n/**\n * Calculating start and ending values of the Area chart and LineChart\n * @export\n * @param {LineChartPoints[]} points\n * @returns {{ startValue: number; endValue: number }}\n */\nexport function findNumericMinMaxOfY(points: LineChartPoints[]): { startValue: number; endValue: number } {\n const yMax = d3Max(points, (point: LineChartPoints) => {\n return d3Max(point.data as LineChartDataPoint[], (item: LineChartDataPoint) => item.y)!;\n })!;\n const yMin = d3Min(points, (point: LineChartPoints) => {\n return d3Min(point.data as LineChartDataPoint[], (item: LineChartDataPoint) => item.y)!;\n })!;\n\n return {\n startValue: yMin,\n endValue: yMax,\n };\n}\n\n/**\n * Find the minimum and maximum values of the vertical stacked bar chart y axis data point. Used for create y axis.\n * @export\n * @param {DataPoint[]} dataset\n * @returns {{ startValue: number; endValue: number }}\n */\nexport function findVSBCNumericMinMaxOfY(dataset: DataPoint[]): { startValue: number; endValue: number } {\n const yMax = d3Max(dataset, (point: DataPoint) => point.y)!;\n const yMin = d3Min(dataset, (point: DataPoint) => point.y)!;\n\n return { startValue: yMin, endValue: yMax };\n}\n\n/**\n * Fins the min and max values of the vertical bar chart y axis data point.\n * @export\n * @param {VerticalBarChartDataPoint[]} points\n * @returns {{ startValue: number; endValue: number }}\n */\nexport function findVerticalNumericMinMaxOfY(points: VerticalBarChartDataPoint[]): {\n startValue: number;\n endValue: number;\n} {\n const yMax = d3Max(points, (point: VerticalBarChartDataPoint) => {\n if (point.lineData !== undefined) {\n if (point.y > point.lineData!.y) {\n return point.y;\n } else {\n return point.lineData!.y;\n }\n } else {\n return point.y;\n }\n })!;\n const yMin = d3Min(points, (point: VerticalBarChartDataPoint) => {\n if (point.lineData !== undefined) {\n if (point.y < point.lineData!.y) {\n return point.y;\n } else {\n return point.lineData!.y;\n }\n } else {\n return point.y;\n }\n })!;\n\n return { startValue: yMin, endValue: yMax };\n}\n/**\n * Fins the min and max values of the vertical bar chart y axis data point.\n * @export\n * @param {VerticalBarChartDataPoint[]} points\n * @returns {{ startValue: number; endValue: number }}\n */\nexport function findHBCWANumericMinMaxOfY(\n points: HorizontalBarChartWithAxisDataPoint[],\n yAxisType: YAxisType | undefined,\n): { startValue: number; endValue: number } {\n if (yAxisType !== undefined && yAxisType === YAxisType.NumericAxis) {\n const yMax = d3Max(points, (point: HorizontalBarChartWithAxisDataPoint) => point.y as number)!;\n const yMin = d3Min(points, (point: HorizontalBarChartWithAxisDataPoint) => point.y as number)!;\n\n return { startValue: yMin, endValue: yMax };\n }\n return { startValue: 0, endValue: 0 };\n}\n\n/**\n * For creating Y axis, need to calculate y axis domain values from given points. This may vary based on chart type.\n * So, this method will define which method need to call based on chart type to find out min and max values(For Domain).\n * For grouped vertical bar chart, Calculating yMax value in the base file and sending as MaxOfYVal to cartesian.\n * @export\n * @param {*} points\n * @param {ChartTypes} chartType\n * @returns {{ startValue: number; endValue: number }}\n */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport function getMinMaxOfYAxis(\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n points: any,\n chartType: ChartTypes,\n yAxisType: YAxisType | undefined = YAxisType.NumericAxis,\n): { startValue: number; endValue: number } {\n let minMaxValues: { startValue: number; endValue: number };\n\n switch (chartType) {\n case ChartTypes.AreaChart:\n case ChartTypes.LineChart:\n case ChartTypes.ScatterChart:\n minMaxValues = findNumericMinMaxOfY(points);\n break;\n case ChartTypes.VerticalStackedBarChart:\n minMaxValues = findVSBCNumericMinMaxOfY(points);\n break;\n case ChartTypes.VerticalBarChart:\n minMaxValues = findVerticalNumericMinMaxOfY(points);\n break;\n case ChartTypes.HorizontalBarChartWithAxis:\n minMaxValues = findHBCWANumericMinMaxOfY(points, yAxisType);\n break;\n default:\n minMaxValues = { startValue: 0, endValue: 0 };\n }\n\n return minMaxValues;\n}\n\n/**\n * @param p string or number or Date\n *\n * This function takes the single data point of the x-aixs\n * and decides what is the x-axis\n */\nexport const getTypeOfAxis = (p: string | number | Date, isXAxis: boolean): XAxisTypes | YAxisType => {\n if (isXAxis) {\n switch (typeof p) {\n case 'string':\n return XAxisTypes.StringAxis;\n case 'number':\n return XAxisTypes.NumericAxis;\n default:\n return XAxisTypes.DateAxis;\n }\n } else {\n switch (typeof p) {\n case 'string':\n return YAxisType.StringAxis;\n case 'number':\n return YAxisType.NumericAxis;\n default:\n return YAxisType.DateAxis;\n }\n }\n};\n\n/**\n * we need to make sure that if we add any property to this, then\n * we need to also add that in pointTypes below and vise-versa\n */\n\nexport enum Points {\n circle,\n square,\n triangle,\n diamond,\n pyramid,\n hexagon,\n pentagon,\n octagon,\n}\n\nexport enum CustomPoints {\n dottedLine,\n}\n\nexport type PointTypes = {\n [key in number]: {\n /**\n * For certian shapes like pentagon, hexagon and octagon.\n * the width of the bouding box increase by the time of the\n * length of the side, so when we want to render a pentagon\n * having each side of length 7 units we need to decrease it's\n * units by width ratio so that the bounding box width of the pentagon\n * stays as 7\n */\n widthRatio: number;\n };\n};\n\n/**\n * we need to make sure that if we add any property to this, then\n * we need to also add that in enum Point and vise-versa\n */\n\nexport const pointTypes: PointTypes = {\n [Points.circle]: {\n widthRatio: 1,\n },\n [Points.square]: {\n widthRatio: 1,\n },\n [Points.triangle]: {\n widthRatio: 1,\n },\n [Points.diamond]: {\n widthRatio: 1,\n },\n [Points.pyramid]: {\n widthRatio: 1,\n },\n [Points.hexagon]: {\n widthRatio: 2,\n },\n [Points.pentagon]: {\n widthRatio: 1.168,\n },\n [Points.octagon]: {\n widthRatio: 2.414,\n },\n};\n\n/**\n * @param accessibleData accessible data\n * @param role string to define role of tag\n * @param isDataFocusable boolean\n * function returns the accessibility data object\n */\nexport const getAccessibleDataObject = (\n accessibleData?: AccessibilityProps,\n role: string = 'text',\n isDataFocusable: boolean = true,\n) => {\n accessibleData = accessibleData ?? {};\n return {\n role,\n 'data-is-focusable': isDataFocusable,\n 'aria-label': accessibleData!.ariaLabel,\n 'aria-labelledby': accessibleData!.ariaLabelledBy,\n 'aria-describedby': accessibleData!.ariaDescribedBy,\n };\n};\n\nexport function rotateXAxisLabels(rotateLabelProps: IRotateLabelProps) {\n const { node, xAxis } = rotateLabelProps;\n if (node === null || xAxis === null) {\n return;\n }\n\n let maxHeight: number = 0;\n const xAxisTranslations: string[] = [];\n d3Select(node)\n .call(xAxis)\n .selectAll('.tick')\n .each(function () {\n const translateValue = (this as SVGElement).getAttribute('transform');\n if (translateValue?.indexOf('rotate') === -1) {\n const translatePair = translateValue\n .substring(translateValue.indexOf('(') + 1, translateValue.indexOf(')'))\n .split(',');\n if (translatePair.length === 2) {\n xAxisTranslations.push(translatePair[0]);\n (this as SVGElement).setAttribute('transform', `translate(${translatePair[0]},0)rotate(-45)`);\n }\n }\n\n const BoxCordinates = (this as HTMLElement).getBoundingClientRect();\n const boxHeight = BoxCordinates && BoxCordinates.height;\n if (boxHeight > maxHeight) {\n maxHeight = boxHeight;\n }\n });\n\n let idx = 0;\n d3Select(node)\n .call(xAxis)\n .selectAll('.tick')\n .each(function () {\n if (xAxisTranslations.length > idx) {\n (this as SVGSVGElement).setAttribute(\n 'transform',\n `translate(${xAxisTranslations[idx]},${maxHeight / 2})rotate(-45)`,\n ); // Translate y by max height/2\n idx += 1;\n }\n });\n\n return Math.floor(maxHeight / 1.414); // Compute maxHeight/tanInverse(45) to get the vertical height of labels.\n}\n\nexport function wrapTextInsideDonut(selectorClass: string, maxWidth: number) {\n let idx: number = 0;\n d3SelectAll(`.${selectorClass}`).each(function () {\n const text = d3Select(this);\n const words = text.text().split(/\\s+/).reverse();\n let word: string = '';\n let line: string[] = [];\n let lineNumber: number = 0;\n const lineHeight = 1.1; // ems\n const y = text.attr('y');\n\n let tspan = text\n .text(null)\n .append('tspan')\n .attr('id', `WordBreakId-${idx}-${lineNumber}`)\n .attr('x', 0)\n .attr('y', y)\n .attr('dy', lineNumber++ * lineHeight + 'em');\n\n while ((word = words.pop()!)) {\n line.push(word);\n tspan.text(line.join(' ') + ' ');\n if (tspan.node()!.getComputedTextLength() > maxWidth && line.length > 1) {\n line.pop();\n tspan.text(line.join(' ') + ' ');\n line = [word];\n tspan = text\n .append('tspan')\n .attr('id', `WordBreakId-${idx}-${lineNumber}`)\n .attr('x', 0)\n .attr('y', y)\n .attr('dy', lineNumber++ * lineHeight + 'em')\n .text(word);\n }\n }\n idx += 1;\n });\n}\n\nexport function formatScientificLimitWidth(value: number) {\n return yAxisTickFormatterInternal(value, true);\n}\n\nconst DEFAULT_BAR_WIDTH = 16;\nconst MIN_BAR_WIDTH = 1;\n\nexport const getBarWidth = (\n barWidthProp: number | 'default' | 'auto' | undefined,\n maxBarWidthProp: number | undefined,\n adjustedValue = DEFAULT_BAR_WIDTH,\n): number => {\n let barWidth: number;\n if (typeof barWidthProp === 'number') {\n barWidth = barWidthProp;\n } else if (barWidthProp === 'default' || typeof barWidthProp === 'undefined') {\n barWidth = Math.min(adjustedValue, DEFAULT_BAR_WIDTH);\n } else {\n barWidth = adjustedValue;\n }\n if (typeof maxBarWidthProp === 'number') {\n barWidth = Math.min(barWidth, maxBarWidthProp);\n }\n barWidth = Math.max(barWidth, MIN_BAR_WIDTH);\n return barWidth;\n};\n\nexport const getScalePadding = (prop: number | undefined, shorthandProp?: number, defaultValue = 0): number => {\n let padding = typeof prop === 'number' ? prop : typeof shorthandProp === 'number' ? shorthandProp : defaultValue;\n padding = Math.max(0, Math.min(padding, 1));\n return padding;\n};\n\nexport const isScalePaddingDefined = (prop: number | undefined, shorthandProp?: number): boolean => {\n return typeof prop === 'number' || typeof shorthandProp === 'number';\n};\n\n/**\n * Helper to find the index of an item within an array, using a callback to\n * determine the match.\n *\n * @public\n * @param array - Array to search.\n * @param cb - Callback which returns true on matches.\n * @param fromIndex - Optional index to start from (defaults to 0)\n */\nexport function findIndex<T>(array: T[], cb: (item: T, index: number) => boolean, fromIndex: number = 0): number {\n let index = -1;\n\n for (let i = fromIndex; array && i < array.length; i++) {\n if (cb(array[i], i)) {\n index = i;\n break;\n }\n }\n\n return index;\n}\n\n/**\n * Helper to find the first item within an array that satisfies the callback.\n * @param array - Array to search\n * @param cb - Callback which returns true on matches\n */\nexport function find<T>(array: T[], cb: (item: T, index: number) => boolean): T | undefined {\n let index = findIndex(array, cb);\n\n if (index < 0) {\n return undefined;\n }\n\n return array[index];\n}\n\nexport const HighContrastSelector = '@media screen and (-ms-high-contrast: active), screen and (forced-colors: active)';\nexport const HighContrastSelectorWhite =\n // eslint-disable-next-line @fluentui/max-len\n '@media screen and (-ms-high-contrast: black-on-white), screen and (forced-colors: active) and (prefers-color-scheme: light)';\nexport const HighContrastSelectorBlack =\n // eslint-disable-next-line @fluentui/max-len\n '@media screen and (-ms-high-contrast: white-on-black), screen and (forced-colors: active) and (prefers-color-scheme: dark)';\n\n/**\n * Render function interface for providing overrideable render callbacks.\n *\n * @public\n */\nexport interface RenderFunction<P> {\n (props?: P, defaultRender?: (props?: P) => JSX.Element | null): JSX.Element | null;\n}\n\nexport const formatDate = (date: Date, useUTC?: string | boolean) => {\n const timeFormat = useUTC ? d3UtcFormat : d3TimeFormat;\n return timeFormat('%-e %b %Y, %H:%M')(date) + (useUTC ? ' GMT' : '');\n};\n\nexport function areArraysEqual(arr1?: string[], arr2?: string[]): boolean {\n if (arr1 === arr2 || (!arr1 && !arr2)) {\n return true;\n }\n if (!arr1 || !arr2 || arr1.length !== arr2.length) {\n return false;\n }\n for (let i = 0; i < arr1.length; i++) {\n if (arr1[i] !== arr2[i]) {\n return false;\n }\n }\n return true;\n}\n\nconst cssVarRegExp = /var\\((--[a-zA-Z0-9\\-]+)\\)/g;\n\nexport function resolveCSSVariables(chartContainer: HTMLElement, styleRules: string) {\n const containerStyles = getComputedStyle(chartContainer);\n return styleRules.replace(cssVarRegExp, (match, group1) => {\n return containerStyles.getPropertyValue(group1);\n });\n}\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport function getSecureProps(props: Record<string, any> = {}): Record<string, any> {\n const { dangerouslySetInnerHTML, ...result } = props;\n return result;\n}\n\nexport function getCurveFactory(\n curve: LineChartLineOptions['curve'],\n defaultFactory: CurveFactory = d3CurveLinear,\n): CurveFactory {\n if (typeof curve === 'function') {\n return curve;\n }\n\n switch (curve) {\n case 'linear':\n return d3CurveLinear;\n case 'natural':\n return d3CurveNatural;\n case 'step':\n return d3CurveStep;\n case 'stepAfter':\n return d3CurveStepAfter;\n case 'stepBefore':\n return d3CurveStepBefore;\n default:\n return defaultFactory;\n }\n}\n"],"names":["axisRight","d3AxisRight","axisBottom","d3AxisBottom","axisLeft","d3AxisLeft","max","d3Max","min","d3Min","ticks","d3Ticks","nice","d3nice","scaleLinear","d3ScaleLinear","scaleBand","d3ScaleBand","scaleUtc","d3ScaleUtc","scaleTime","d3ScaleTime","select","d3Select","selectAll","d3SelectAll","format","d3Format","timeFormat","d3TimeFormat","timeFormatLocale","d3TimeFormatLocale","utcFormat","d3UtcFormat","timeSecond","d3TimeSecond","timeMinute","d3TimeMinute","timeHour","d3TimeHour","timeDay","d3TimeDay","timeMonth","d3TimeMonth","timeWeek","d3TimeWeek","timeYear","d3TimeYear","utcSecond","d3UtcSecond","utcMinute","d3UtcMinute","utcHour","d3UtcHour","utcDay","d3UtcDay","utcMonth","d3UtcMonth","utcWeek","d3UtcWeek","utcYear","d3UtcYear","curveLinear","d3CurveLinear","curveNatural","d3CurveNatural","curveStep","d3CurveStep","curveStepAfter","d3CurveStepAfter","curveStepBefore","d3CurveStepBefore","formatPrefix","d3FormatPrefix","useFluent_unstable","useFluent","formatDateToLocaleString","formatToLocaleString","getMultiLevelDateTimeFormatOptions","ChartTypes","XAxisTypes","YAxisType","yAxisTickFormatterInternal","value","limitWidth","formatter","Math","abs","formattedValue","replace","defaultYAxisTickFormatter","createNumericXAxis","xAxisParams","tickParams","chartType","culture","domainNRangeValues","showRoundOffXTickValues","xAxistickSize","tickPadding","xAxisCount","xAxisElement","hideTickOverlap","xAxisScale","domain","dStartValue","dEndValue","range","rStartValue","rEndValue","tickCount","tickFormat","domainValue","_index","xAxisValue","valueOf","longestLabelWidth","calculateLongestLabelWidth","map","start","end","floor","xAxis","tickSize","tickSizeInner","containerHeight","margins","top","tickValues","call","attr","xScale","getMultiLevelD3DateFormatter","startLevel","endLevel","locale","useUTC","DEFAULT","MS","MS_S","MS_S_MIN","MS_S_MIN_H","MS_S_MIN_H_D","MS_S_MIN_H_D_W","MS_S_MIN_H_D_W_M","MS_S_MIN_H_D_W_M_Y","S","S_MIN","S_MIN_H","S_MIN_H_D","S_MIN_H_D_W","S_MIN_H_D_W_M","S_MIN_H_D_W_M_Y","MIN","MIN_H","MIN_H_D","MIN_H_D_W","MIN_H_D_W_M","MIN_H_D_W_M_Y","H","H_D","H_D_W","H_D_W_M","H_D_W_M_Y","D","D_W","D_W_M","D_W_M_Y","W","W_M","W_M_Y","M","M_Y","Y","MULTI_LEVEL_DATE_TIME_FORMATS","getDateFormatLevel","date","formats","formatLevel","condition","d","matchedFormat","find","createDateXAxis","options","customDateTimeFormatter","isUtcSet","lowestFormatLevel","highestFormatLevel","undefined","forEach","formatOptions","formatFn","maxPossibleTickCount","createStringXAxis","dataset","xAxisPadding","xAxisInnerPadding","xAxisOuterPadding","containerWidth","paddingInner","paddingOuter","nonOverlappingTickValues","tickSizes","index","sign","i","length","tickPosition","push","reverse","useRtl","dir","isPowerOf10","num","roundedfinalYMax","handleFloatingPointPrecisionError","log10","rounded","round","calculateRoundedTicks","minVal","maxVal","splitInto","finalYmin","finalYmax","ticksInterval","pop","prepareDatapoints","isIntegralDataset","roundedTicks","val","ceil","dataPointsArray","createYAxis","yAxisParams","isRtl","axisData","barWidth","useSecondaryYScale","createYAxisForHorizontalBarChartWithAxis","createNumericYAxisForOtherCharts","yMinMaxValues","startValue","endValue","yAxisElement","yMaxValue","yMinValue","maxOfYVal","yAxisTickFormat","yAxisTickCount","tempVal","yAxisScale","bottom","axis","yAxis","eventAnnotationProps","eventLabelHeight","domainValues","yMin","yMax","yPadding","left","right","yAxisDomainValues","createStringYAxis","dataPoints","createStringYAxisForHorizontalBarChartWithAxis","createStringYAxisForOtherCharts","yAxisPadding","padding","calloutData","values","combinedResult","line","elements","data","filter","point","hideCallout","legend","color","concat","xValToDataPoints","ele","xValue","x","Date","getTime","y","xAxisCalloutData","yAxisCalloutData","callOutAccessibilityData","result","Object","keys","originalXValue","isNaN","Number","getUnique","arr","comp","unique","e","final","indexOf","silceOrAppendToArray","array","pos","slice","createWrapOfXLabels","wrapLabelProps","node","noOfCharsToTruncate","showXAxisLablesTooltip","axisNode","removeVal","width","each","text","totalWord","truncatedWord","totalWordLength","words","split","word","lineNumber","lineHeight","dy","parseFloat","tspan","append","join","getComputedTextLength","maxDigit","maxHeight","outerHTMLElement","document","getElementById","BoxCordinates","getBoundingClientRect","boxHeight","height","removeDigit","createYAxisLabels","truncateLabel","tickIndex","dx","uid","wrapContent","content","id","maxWidth","textElement","isOverflowing","textLength","labels","query","maxLabelWidth","canvas","createElement","ctx","getContext","axisText","querySelector","styles","window","getComputedStyle","fontWeight","getPropertyValue","fontSize","fontFamily","font","label","measureText","toString","tooltipOfXAxislabels","xAxistooltipProps","tooltipCls","div","style","aa","_groups","baseSpanLength","originalDataArray","originalData","tickObject","tickObjectLength","d1","on","event","html","pageX","pageY","getXAxisType","points","isXAxisDateType","chartData","domainRangeOfNumericForAreaChart","isRTL","xMin","item","xMax","domainRangeOfNumericForScatterChart","xPadding","domainRangeOfNumericForHorizontalBarChartWithAxis","shiftX","rMin","rMax","domainRangeOfXStringAxis","domainRangeOfVSBCNumeric","domainRangeOfDateForAreaLineVerticalBarChart","sDate","lDate","domainRangeOfDateForScatterChart","domainRageOfVerticalNumeric","getDomainNRangeValues","xAxisType","domainNRangeValue","findNumericMinMaxOfY","findVSBCNumericMinMaxOfY","findVerticalNumericMinMaxOfY","lineData","findHBCWANumericMinMaxOfY","yAxisType","getMinMaxOfYAxis","minMaxValues","getTypeOfAxis","p","isXAxis","Points","CustomPoints","pointTypes","widthRatio","getAccessibleDataObject","accessibleData","role","isDataFocusable","ariaLabel","ariaLabelledBy","ariaDescribedBy","rotateXAxisLabels","rotateLabelProps","xAxisTranslations","translateValue","getAttribute","translatePair","substring","setAttribute","idx","wrapTextInsideDonut","selectorClass","formatScientificLimitWidth","DEFAULT_BAR_WIDTH","MIN_BAR_WIDTH","getBarWidth","barWidthProp","maxBarWidthProp","adjustedValue","getScalePadding","prop","shorthandProp","defaultValue","isScalePaddingDefined","findIndex","cb","fromIndex","HighContrastSelector","HighContrastSelectorWhite","HighContrastSelectorBlack","formatDate","areArraysEqual","arr1","arr2","cssVarRegExp","resolveCSSVariables","chartContainer","styleRules","containerStyles","match","group1","getSecureProps","props","dangerouslySetInnerHTML","getCurveFactory","curve","defaultFactory"],"rangeMappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;","mappings":"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"}
|
|
@@ -465,7 +465,7 @@ const CartesianChart = /*#__PURE__*/ _react.forwardRef((props, forwardedRef)=>{
|
|
|
465
465
|
content: props.yAxisTitle,
|
|
466
466
|
textProps: {
|
|
467
467
|
x: (yAxisTitleMaximumAllowedHeight - margins.bottom) / 2 + removalValueForTextTuncate,
|
|
468
|
-
y: _useRtl ? svgDimensions.width - margins.right / 2 + titleMargin : margins.left / 2
|
|
468
|
+
y: _useRtl ? svgDimensions.width - margins.right / 2 + titleMargin : margins.left / 2 - titleMargin,
|
|
469
469
|
textAnchor: 'middle',
|
|
470
470
|
transform: `translate(0,
|
|
471
471
|
${svgDimensions.height - margins.bottom - margins.top - titleMargin})rotate(-90)`,
|
|
@@ -482,3 +482,6 @@ const CartesianChart = /*#__PURE__*/ _react.forwardRef((props, forwardedRef)=>{
|
|
|
482
482
|
}, callout));
|
|
483
483
|
});
|
|
484
484
|
CartesianChart.displayName = 'CartesianChart';
|
|
485
|
+
CartesianChart.defaultProps = {
|
|
486
|
+
hideTickOverlap: true
|
|
487
|
+
};
|