@fluentui/react-charts 9.0.7 → 9.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +21 -2
- package/dist/index.d.ts +12 -0
- package/lib/components/AreaChart/useAreaChartStyles.styles.js +2 -1
- package/lib/components/AreaChart/useAreaChartStyles.styles.js.map +1 -1
- package/lib/components/CommonComponents/CartesianChart.js +6 -3
- package/lib/components/CommonComponents/CartesianChart.js.map +1 -1
- package/lib/components/CommonComponents/CartesianChart.types.js.map +1 -1
- package/lib/components/CommonComponents/useCartesianChartStyles.styles.js +16 -4
- package/lib/components/CommonComponents/useCartesianChartStyles.styles.js.map +1 -1
- package/lib/components/GroupedVerticalBarChart/useGroupedVerticalBarChartStyles.styles.js +2 -1
- package/lib/components/GroupedVerticalBarChart/useGroupedVerticalBarChartStyles.styles.js.map +1 -1
- package/lib/components/HeatMapChart/useHeatMapChartStyles.styles.js +2 -1
- package/lib/components/HeatMapChart/useHeatMapChartStyles.styles.js.map +1 -1
- package/lib/components/HorizontalBarChartWithAxis/useHorizontalBarChartWithAxisStyles.styles.js +2 -1
- package/lib/components/HorizontalBarChartWithAxis/useHorizontalBarChartWithAxisStyles.styles.js.map +1 -1
- package/lib/components/LineChart/LineChart.js +10 -7
- package/lib/components/LineChart/LineChart.js.map +1 -1
- package/lib/components/LineChart/LineChart.types.js.map +1 -1
- package/lib/components/LineChart/useLineChartStyles.styles.js +14 -3
- package/lib/components/LineChart/useLineChartStyles.styles.js.map +1 -1
- package/lib/components/ScatterChart/useScatterChartStyles.styles.js +2 -1
- package/lib/components/ScatterChart/useScatterChartStyles.styles.js.map +1 -1
- package/lib/components/VerticalBarChart/VerticalBarChart.js +1 -1
- package/lib/components/VerticalBarChart/VerticalBarChart.js.map +1 -1
- package/lib/components/VerticalBarChart/VerticalBarChart.types.js.map +1 -1
- package/lib/components/VerticalBarChart/useVerticalBarChartStyles.styles.js +14 -3
- package/lib/components/VerticalBarChart/useVerticalBarChartStyles.styles.js.map +1 -1
- package/lib/components/VerticalStackedBarChart/useVerticalStackedBarChartStyles.styles.js +2 -1
- package/lib/components/VerticalStackedBarChart/useVerticalStackedBarChartStyles.styles.js.map +1 -1
- package/lib/utilities/SVGTooltipText.js +2 -4
- package/lib/utilities/SVGTooltipText.js.map +1 -1
- package/lib-commonjs/components/AreaChart/useAreaChartStyles.styles.js +2 -1
- package/lib-commonjs/components/AreaChart/useAreaChartStyles.styles.js.map +1 -1
- package/lib-commonjs/components/CommonComponents/CartesianChart.js +6 -3
- 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/useCartesianChartStyles.styles.js +25 -3
- package/lib-commonjs/components/CommonComponents/useCartesianChartStyles.styles.js.map +1 -1
- package/lib-commonjs/components/GroupedVerticalBarChart/useGroupedVerticalBarChartStyles.styles.js +2 -1
- package/lib-commonjs/components/GroupedVerticalBarChart/useGroupedVerticalBarChartStyles.styles.js.map +1 -1
- package/lib-commonjs/components/HeatMapChart/useHeatMapChartStyles.styles.js +2 -1
- package/lib-commonjs/components/HeatMapChart/useHeatMapChartStyles.styles.js.map +1 -1
- package/lib-commonjs/components/HorizontalBarChartWithAxis/useHorizontalBarChartWithAxisStyles.styles.js +2 -1
- package/lib-commonjs/components/HorizontalBarChartWithAxis/useHorizontalBarChartWithAxisStyles.styles.js.map +1 -1
- package/lib-commonjs/components/LineChart/LineChart.js +10 -7
- package/lib-commonjs/components/LineChart/LineChart.js.map +1 -1
- package/lib-commonjs/components/LineChart/LineChart.types.js.map +1 -1
- package/lib-commonjs/components/LineChart/useLineChartStyles.styles.js +19 -3
- package/lib-commonjs/components/LineChart/useLineChartStyles.styles.js.map +1 -1
- package/lib-commonjs/components/ScatterChart/useScatterChartStyles.styles.js +2 -1
- package/lib-commonjs/components/ScatterChart/useScatterChartStyles.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/VerticalBarChart/VerticalBarChart.types.js.map +1 -1
- package/lib-commonjs/components/VerticalBarChart/useVerticalBarChartStyles.styles.js +19 -3
- package/lib-commonjs/components/VerticalBarChart/useVerticalBarChartStyles.styles.js.map +1 -1
- package/lib-commonjs/components/VerticalStackedBarChart/useVerticalStackedBarChartStyles.styles.js +2 -1
- package/lib-commonjs/components/VerticalStackedBarChart/useVerticalStackedBarChartStyles.styles.js.map +1 -1
- package/lib-commonjs/utilities/SVGTooltipText.js +2 -4
- package/lib-commonjs/utilities/SVGTooltipText.js.map +1 -1
- package/package.json +9 -9
package/lib/components/HorizontalBarChartWithAxis/useHorizontalBarChartWithAxisStyles.styles.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["__styles","mergeClasses","shorthands","tokens","typographyStyles","hbcWithAxisClassNames","opacityChangeOnHover","xAxisTicks","tooltip","chartLabel","xAxisDomain","xAxisText","yAxisDomain","yAxisTicks","yAxisText","root","xAxis","yAxis","legendContainer","hover","descriptionMessage","axisTitle","chartTitle","shapeStyles","chartWrapper","useStyles","abs64n","Bahqtrf","Be2twd7","Bhrd7zp","Bg96gwp","mc9l5x","Beiy3e4","z8tnut","z189sj","Byoj8tv","uwmqm3","qhf8xq","fsow6f","Bhzewxz","De3pzq","Beyfa6y","Bbmb7ep","Btl43ni","B7oj6ja","Dimara","Bkecrkj","d","p","useHorizontalBarChartWithAxisStyles","props","baseStyles"],"sources":["useHorizontalBarChartWithAxisStyles.styles.js"],"sourcesContent":["import { makeStyles, mergeClasses, shorthands } from '@griffel/react';\nimport { tokens, typographyStyles } from '@fluentui/react-theme';\nexport const hbcWithAxisClassNames = {\n opacityChangeOnHover: 'fui-hbcwa__opacityChangeOnHover',\n xAxisTicks: 'fui-hbcwa__xAxisTicks',\n tooltip: 'fui-hbcwa__tooltip',\n chartLabel: '',\n xAxisDomain: '',\n xAxisText: '',\n yAxisDomain: '',\n yAxisTicks: '',\n yAxisText: '',\n root: '',\n xAxis: '',\n yAxis: '',\n legendContainer: '',\n hover: '',\n descriptionMessage: '',\n axisTitle: '',\n chartTitle: '',\n shapeStyles: '',\n chartWrapper: ''\n};\nconst useStyles = makeStyles({\n opacityChangeOnHover: {\n opacity: 0.1\n },\n xAxisTicks: {},\n tooltip: {\n ...typographyStyles.body1,\n display: 'flex',\n flexDirection: 'column',\n ...shorthands.padding(tokens.spacingHorizontalS),\n position: 'absolute',\n textAlign: 'center',\n top: tokens.spacingVerticalNone,\n backgroundColor: tokens.colorNeutralBackground1,\n borderRadius: tokens.borderRadiusSmall,\n pointerEvents: 'none'\n }\n});\n/**\n * Apply styling to the HorizontalBarChartWithAxis slots based on the state\n */ export const useHorizontalBarChartWithAxisStyles = (props)=>{\n const baseStyles = useStyles();\n return {\n opacityChangeOnHover: mergeClasses(hbcWithAxisClassNames.opacityChangeOnHover, baseStyles.opacityChangeOnHover),\n xAxisTicks: mergeClasses(hbcWithAxisClassNames.xAxisTicks, baseStyles.xAxisTicks),\n tooltip: mergeClasses(hbcWithAxisClassNames.tooltip, baseStyles.tooltip)\n };\n};\n"],"mappings":"AAAA,SAAAA,QAAA,EAAqBC,YAAY,EAAEC,UAAU,QAAQ,gBAAgB;AACrE,SAASC,MAAM,EAAEC,gBAAgB,QAAQ,uBAAuB;AAChE,OAAO,MAAMC,qBAAqB,GAAG;EACjCC,oBAAoB,EAAE,iCAAiC;EACvDC,UAAU,EAAE,uBAAuB;EACnCC,OAAO,EAAE,oBAAoB;EAC7BC,UAAU,EAAE,EAAE;EACdC,WAAW,EAAE,EAAE;EACfC,SAAS,EAAE,EAAE;EACbC,WAAW,EAAE,EAAE;EACfC,UAAU,EAAE,EAAE;EACdC,SAAS,EAAE,EAAE;EACbC,IAAI,EAAE,EAAE;EACRC,KAAK,EAAE,EAAE;EACTC,KAAK,EAAE,EAAE;EACTC,eAAe,EAAE,EAAE;EACnBC,KAAK,EAAE,EAAE;EACTC,kBAAkB,EAAE,EAAE;EACtBC,SAAS,EAAE,EAAE;EACbC,UAAU,EAAE,EAAE;EACdC,WAAW,EAAE,EAAE;EACfC,YAAY,EAAE;
|
|
1
|
+
{"version":3,"names":["__styles","mergeClasses","shorthands","tokens","typographyStyles","hbcWithAxisClassNames","opacityChangeOnHover","xAxisTicks","tooltip","chartLabel","xAxisDomain","xAxisText","yAxisDomain","yAxisTicks","yAxisText","root","xAxis","yAxis","legendContainer","hover","descriptionMessage","axisTitle","chartTitle","shapeStyles","chartWrapper","svgTooltip","useStyles","abs64n","Bahqtrf","Be2twd7","Bhrd7zp","Bg96gwp","mc9l5x","Beiy3e4","z8tnut","z189sj","Byoj8tv","uwmqm3","qhf8xq","fsow6f","Bhzewxz","De3pzq","Beyfa6y","Bbmb7ep","Btl43ni","B7oj6ja","Dimara","Bkecrkj","d","p","useHorizontalBarChartWithAxisStyles","props","baseStyles"],"sources":["useHorizontalBarChartWithAxisStyles.styles.js"],"sourcesContent":["import { makeStyles, mergeClasses, shorthands } from '@griffel/react';\nimport { tokens, typographyStyles } from '@fluentui/react-theme';\nexport const hbcWithAxisClassNames = {\n opacityChangeOnHover: 'fui-hbcwa__opacityChangeOnHover',\n xAxisTicks: 'fui-hbcwa__xAxisTicks',\n tooltip: 'fui-hbcwa__tooltip',\n chartLabel: '',\n xAxisDomain: '',\n xAxisText: '',\n yAxisDomain: '',\n yAxisTicks: '',\n yAxisText: '',\n root: '',\n xAxis: '',\n yAxis: '',\n legendContainer: '',\n hover: '',\n descriptionMessage: '',\n axisTitle: '',\n chartTitle: '',\n shapeStyles: '',\n chartWrapper: '',\n svgTooltip: ''\n};\nconst useStyles = makeStyles({\n opacityChangeOnHover: {\n opacity: 0.1\n },\n xAxisTicks: {},\n tooltip: {\n ...typographyStyles.body1,\n display: 'flex',\n flexDirection: 'column',\n ...shorthands.padding(tokens.spacingHorizontalS),\n position: 'absolute',\n textAlign: 'center',\n top: tokens.spacingVerticalNone,\n backgroundColor: tokens.colorNeutralBackground1,\n borderRadius: tokens.borderRadiusSmall,\n pointerEvents: 'none'\n }\n});\n/**\n * Apply styling to the HorizontalBarChartWithAxis slots based on the state\n */ export const useHorizontalBarChartWithAxisStyles = (props)=>{\n const baseStyles = useStyles();\n return {\n opacityChangeOnHover: mergeClasses(hbcWithAxisClassNames.opacityChangeOnHover, baseStyles.opacityChangeOnHover),\n xAxisTicks: mergeClasses(hbcWithAxisClassNames.xAxisTicks, baseStyles.xAxisTicks),\n tooltip: mergeClasses(hbcWithAxisClassNames.tooltip, baseStyles.tooltip)\n };\n};\n"],"mappings":"AAAA,SAAAA,QAAA,EAAqBC,YAAY,EAAEC,UAAU,QAAQ,gBAAgB;AACrE,SAASC,MAAM,EAAEC,gBAAgB,QAAQ,uBAAuB;AAChE,OAAO,MAAMC,qBAAqB,GAAG;EACjCC,oBAAoB,EAAE,iCAAiC;EACvDC,UAAU,EAAE,uBAAuB;EACnCC,OAAO,EAAE,oBAAoB;EAC7BC,UAAU,EAAE,EAAE;EACdC,WAAW,EAAE,EAAE;EACfC,SAAS,EAAE,EAAE;EACbC,WAAW,EAAE,EAAE;EACfC,UAAU,EAAE,EAAE;EACdC,SAAS,EAAE,EAAE;EACbC,IAAI,EAAE,EAAE;EACRC,KAAK,EAAE,EAAE;EACTC,KAAK,EAAE,EAAE;EACTC,eAAe,EAAE,EAAE;EACnBC,KAAK,EAAE,EAAE;EACTC,kBAAkB,EAAE,EAAE;EACtBC,SAAS,EAAE,EAAE;EACbC,UAAU,EAAE,EAAE;EACdC,WAAW,EAAE,EAAE;EACfC,YAAY,EAAE,EAAE;EAChBC,UAAU,EAAE;AAChB,CAAC;AACD,MAAMC,SAAS,gBAAG1B,QAAA;EAAAM,oBAAA;IAAAqB,MAAA;EAAA;EAAApB,UAAA;EAAAC,OAAA;IAAAoB,OAAA;IAAAC,OAAA;IAAAC,OAAA;IAAAC,OAAA;IAAAC,MAAA;IAAAC,OAAA;IAAAC,MAAA;IAAAC,MAAA;IAAAC,OAAA;IAAAC,MAAA;IAAAC,MAAA;IAAAC,MAAA;IAAAC,OAAA;IAAAC,MAAA;IAAAC,OAAA;IAAAC,OAAA;IAAAC,OAAA;IAAAC,OAAA;IAAAC,MAAA;IAAAC,OAAA;EAAA;AAAA;EAAAC,CAAA;IAAAC,CAAA;EAAA;AAAA,CAiBjB,CAAC;AACF;AACA;AACA;AAAI,OAAO,MAAMC,mCAAmC,GAAIC,KAAK,IAAG;EAC5D,MAAMC,UAAU,GAAG1B,SAAS,CAAC,CAAC;EAC9B,OAAO;IACHpB,oBAAoB,EAAEL,YAAY,CAACI,qBAAqB,CAACC,oBAAoB,EAAE8C,UAAU,CAAC9C,oBAAoB,CAAC;IAC/GC,UAAU,EAAEN,YAAY,CAACI,qBAAqB,CAACE,UAAU,EAAE6C,UAAU,CAAC7C,UAAU,CAAC;IACjFC,OAAO,EAAEP,YAAY,CAACI,qBAAqB,CAACG,OAAO,EAAE4C,UAAU,CAAC5C,OAAO;EAC3E,CAAC;AACL,CAAC","ignoreList":[]}
|
|
@@ -136,6 +136,7 @@ const PATH_MULTIPLY_SIZE = 2.5;
|
|
|
136
136
|
const [isPopoverOpen, setPopoverOpen] = React.useState(false);
|
|
137
137
|
const pointsRef = React.useRef([]);
|
|
138
138
|
const calloutPointsRef = React.useRef([]);
|
|
139
|
+
const classes = useLineChartStyles(props);
|
|
139
140
|
React.useEffect(()=>{
|
|
140
141
|
/** note that height and width are not used to resize or set as dimesions of the chart,
|
|
141
142
|
* fitParentContainer is responisble for setting the height and width or resizing of the svg/chart
|
|
@@ -553,7 +554,7 @@ const PATH_MULTIPLY_SIZE = 2.5;
|
|
|
553
554
|
var _points_i_lineOptions8, _points_i_lineOptions9, _points_i_lineOptions10, _points_i_lineOptions11;
|
|
554
555
|
const lineBorderWidth = ((_points_i_lineOptions8 = _points[i].lineOptions) === null || _points_i_lineOptions8 === void 0 ? void 0 : _points_i_lineOptions8.lineBorderWidth) ? Number.parseFloat(_points[i].lineOptions.lineBorderWidth.toString()) : 0;
|
|
555
556
|
if (lineBorderWidth > 0) {
|
|
556
|
-
var _points_i_lineOptions12, _points_i_lineOptions13;
|
|
557
|
+
var _points_i_lineOptions12, _points_i_lineOptions13, _points_i_lineOptions14;
|
|
557
558
|
var _points_i_lineOptions_strokeLinecap3;
|
|
558
559
|
bordersForLine.push(/*#__PURE__*/ React.createElement("line", {
|
|
559
560
|
id: borderId,
|
|
@@ -564,7 +565,10 @@ const PATH_MULTIPLY_SIZE = 2.5;
|
|
|
564
565
|
y2: _yAxisScale(y2),
|
|
565
566
|
strokeLinecap: (_points_i_lineOptions_strokeLinecap3 = (_points_i_lineOptions12 = _points[i].lineOptions) === null || _points_i_lineOptions12 === void 0 ? void 0 : _points_i_lineOptions12.strokeLinecap) !== null && _points_i_lineOptions_strokeLinecap3 !== void 0 ? _points_i_lineOptions_strokeLinecap3 : 'round',
|
|
566
567
|
strokeWidth: Number.parseFloat(strokeWidth.toString()) + lineBorderWidth,
|
|
567
|
-
|
|
568
|
+
...((_points_i_lineOptions13 = _points[i].lineOptions) === null || _points_i_lineOptions13 === void 0 ? void 0 : _points_i_lineOptions13.lineBorderColor) && {
|
|
569
|
+
stroke: (_points_i_lineOptions14 = _points[i].lineOptions) === null || _points_i_lineOptions14 === void 0 ? void 0 : _points_i_lineOptions14.lineBorderColor
|
|
570
|
+
},
|
|
571
|
+
className: classes.lineBorder,
|
|
568
572
|
opacity: 1
|
|
569
573
|
}));
|
|
570
574
|
}
|
|
@@ -593,7 +597,7 @@ const PATH_MULTIPLY_SIZE = 2.5;
|
|
|
593
597
|
}
|
|
594
598
|
} else {
|
|
595
599
|
if (!isInGap) {
|
|
596
|
-
var
|
|
600
|
+
var _points_i_lineOptions15, _points_i_lineOptions16, _points_i_lineOptions17;
|
|
597
601
|
var _points_i_lineOptions_strokeLinecap5;
|
|
598
602
|
linesForLine.push(/*#__PURE__*/ React.createElement("line", {
|
|
599
603
|
id: lineId,
|
|
@@ -604,9 +608,9 @@ const PATH_MULTIPLY_SIZE = 2.5;
|
|
|
604
608
|
y2: _yAxisScale(y2),
|
|
605
609
|
strokeWidth: strokeWidth,
|
|
606
610
|
stroke: lineColor,
|
|
607
|
-
strokeLinecap: (_points_i_lineOptions_strokeLinecap5 = (
|
|
608
|
-
strokeDasharray: (
|
|
609
|
-
strokeDashoffset: (
|
|
611
|
+
strokeLinecap: (_points_i_lineOptions_strokeLinecap5 = (_points_i_lineOptions15 = _points[i].lineOptions) === null || _points_i_lineOptions15 === void 0 ? void 0 : _points_i_lineOptions15.strokeLinecap) !== null && _points_i_lineOptions_strokeLinecap5 !== void 0 ? _points_i_lineOptions_strokeLinecap5 : 'round',
|
|
612
|
+
strokeDasharray: (_points_i_lineOptions16 = _points[i].lineOptions) === null || _points_i_lineOptions16 === void 0 ? void 0 : _points_i_lineOptions16.strokeDasharray,
|
|
613
|
+
strokeDashoffset: (_points_i_lineOptions17 = _points[i].lineOptions) === null || _points_i_lineOptions17 === void 0 ? void 0 : _points_i_lineOptions17.strokeDashoffset,
|
|
610
614
|
opacity: 0.1
|
|
611
615
|
}));
|
|
612
616
|
}
|
|
@@ -619,7 +623,6 @@ const PATH_MULTIPLY_SIZE = 2.5;
|
|
|
619
623
|
"aria-label": `${legendVal}, line ${i + 1} of ${_points.length} with ${_points[i].data.length} data points.`
|
|
620
624
|
}, bordersForLine, linesForLine, pointsForLine));
|
|
621
625
|
}
|
|
622
|
-
const classes = useLineChartStyles(props);
|
|
623
626
|
// Removing un wanted tooltip div from DOM, when prop not provided.
|
|
624
627
|
if (!props.showXAxisLablesTooltip) {
|
|
625
628
|
try {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["LineChart.tsx"],"sourcesContent":["import * as React from 'react';\nimport { LineChartProps } from './LineChart.types';\nimport { useLineChartStyles } from './useLineChartStyles.styles';\nimport { Axis as D3Axis } from 'd3-axis';\nimport { select as d3Select, pointer } from 'd3-selection';\nimport { bisector } from 'd3-array';\nimport { Legend, Legends } from '../Legends/index';\nimport { line as d3Line } from 'd3-shape';\nimport { useId } from '@fluentui/react-utilities';\nimport { find } from '../../utilities/index';\nimport {\n AccessibilityProps,\n CartesianChart,\n ChildProps,\n LineChartPoints,\n CustomizedCalloutData,\n Margins,\n RefArrayData,\n ColorFillBarsProps,\n LineChartGap,\n LineChartDataPoint,\n Chart,\n} from '../../index';\nimport { EventsAnnotation } from './eventAnnotation/EventAnnotation';\nimport { tokens } from '@fluentui/react-theme';\nimport {\n calloutData,\n ChartTypes,\n getXAxisType,\n XAxisTypes,\n tooltipOfXAxislabels,\n Points,\n pointTypes,\n getMinMaxOfYAxis,\n getTypeOfAxis,\n getNextColor,\n getColorFromToken,\n useRtl,\n formatDate,\n getCurveFactory,\n} from '../../utilities/index';\n\ntype NumericAxis = D3Axis<number | { valueOf(): number }>;\nenum PointSize {\n hoverSize = 11,\n invisibleSize = 1,\n}\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nconst bisect = bisector((d: any) => d.x).left;\n\nconst DEFAULT_LINE_STROKE_SIZE = 4;\n// The given shape of a icon must be 2.5 times bigger than line width (known as stroke width)\nconst PATH_MULTIPLY_SIZE = 2.5;\n\n/**\n *\n * @param x units from origin\n * @param y units from origin\n * @param w is the legnth of the each side of a shape\n * @param index index to get the shape path\n */\nconst _getPointPath = (x: number, y: number, w: number, index: number): string => {\n const allPointPaths = [\n // circle path\n `M${x - w / 2} ${y}\n A${w / 2} ${w / 2} 0 1 0 ${x + w / 2} ${y}\n M${x - w / 2} ${y}\n A ${w / 2} ${w / 2} 0 1 1 ${x + w / 2} ${y}\n `,\n //square\n `M${x - w / 2} ${y - w / 2}\n L${x + w / 2} ${y - w / 2}\n L${x + w / 2} ${y + w / 2}\n L${x - w / 2} ${y + w / 2}\n Z`,\n //triangle\n `M${x - w / 2} ${y - 0.2886 * w}\n H ${x + w / 2}\n L${x} ${y + 0.5774 * w} Z`,\n //diamond\n `M${x} ${y - w / 2}\n L${x + w / 2} ${y}\n L${x} ${y + w / 2}\n L${x - w / 2} ${y}\n Z`,\n //pyramid\n `M${x} ${y - 0.5774 * w}\n L${x + w / 2} ${y + 0.2886 * w}\n L${x - w / 2} ${y + 0.2886 * w} Z`,\n //hexagon\n `M${x - 0.5 * w} ${y - 0.866 * w}\n L${x + 0.5 * w} ${y - 0.866 * w}\n L${x + w} ${y}\n L${x + 0.5 * w} ${y + 0.866 * w}\n L${x - 0.5 * w} ${y + 0.866 * w}\n L${x - w} ${y}\n Z`,\n //pentagon\n `M${x} ${y - 0.851 * w}\n L${x + 0.6884 * w} ${y - 0.2633 * w}\n L${x + 0.5001 * w} ${y + 0.6884 * w}\n L${x - 0.5001 * w} ${y + 0.6884 * w}\n L${x - 0.6884 * w} ${y - 0.2633 * w}\n Z`,\n //octagon\n `M${x - 0.5001 * w} ${y - 1.207 * w}\n L${x + 0.5001 * w} ${y - 1.207 * w}\n L${x + 1.207 * w} ${y - 0.5001 * w}\n L${x + 1.207 * w} ${y + 0.5001 * w}\n L${x + 0.5001 * w} ${y + 1.207 * w}\n L${x - 0.5001 * w} ${y + 1.207 * w}\n L${x - 1.207 * w} ${y + 0.5001 * w}\n L${x - 1.207 * w} ${y - 0.5001 * w}\n Z`,\n ];\n return allPointPaths[index];\n};\n\ntype LineChartDataWithIndex = LineChartPoints & { index: number };\n\n// Create a LineChart variant which uses these default styles and this styled subcomponent.\n/**\n * Linechart component\n * {@docCategory LineChart}\n */\nexport const LineChart: React.FunctionComponent<LineChartProps> = React.forwardRef<HTMLDivElement, LineChartProps>(\n (props, forwardedRef) => {\n let _points: LineChartDataWithIndex[] = _injectIndexPropertyInLineChartData(props.data.lineChartData);\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n let _calloutPoints: any[] = calloutData(_points) || [];\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n let _xAxisScale: any = '';\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n let _yAxisScale: any = '';\n let _circleId: string = useId('circle');\n let _lineId: string = useId('lineID');\n let _borderId: string = useId('borderID');\n let _verticalLine: string = useId('verticalLine');\n let _colorFillBarPatternId: string = useId('colorFillBarPattern');\n let _uniqueCallOutID: string | null = '';\n let _refArray: RefArrayData[] = [];\n let margins: Margins;\n let eventLabelHeight: number = 36;\n let lines: JSX.Element[];\n let _renderedColorFillBars: JSX.Element[];\n const _colorFillBars = React.useRef<ColorFillBarsProps[]>([]);\n let _tooltipId: string = useId('LineChartTooltipId_');\n let _rectId: string = useId('containerRectLD');\n let _staticHighlightCircle: string = useId('staticHighlightCircle');\n let _firstRenderOptimization = true;\n let _emptyChartId: string = useId('_LineChart_empty');\n const _colorFillBarId = useId('_colorFillBarId');\n const _isRTL: boolean = useRtl();\n let xAxisCalloutAccessibilityData: AccessibilityProps = {};\n const cartesianChartRef = React.useRef<Chart>(null);\n\n props.eventAnnotationProps &&\n props.eventAnnotationProps.labelHeight &&\n (eventLabelHeight = props.eventAnnotationProps.labelHeight);\n\n const [hoverXValue, setHoverXValue] = React.useState<string | number>('');\n const [activeLegend, setActiveLegend] = React.useState<string>('');\n const [YValueHover, setYValueHover] = React.useState<[]>([]);\n const [selectedLegend, setSelectedLegend] = React.useState<string>('');\n const [selectedLegendPoints, setSelectedLegendPoints] = React.useState<any[]>(\n _injectIndexPropertyInLineChartData(props.data.lineChartData, true),\n );\n const [selectedColorBarLegend, setSelectedColorBarLegend] = React.useState<any[]>([]);\n const [isSelectedLegend, setIsSelectedLegend] = React.useState<boolean>(\n (props.legendProps?.selectedLegends?.length ?? 0) > 0,\n );\n const [activePoint, setActivePoint] = React.useState<string>('');\n const [nearestCircleToHighlight, setNearestCircleToHighlight] = React.useState<LineChartDataPoint | null>(null);\n const [dataPointCalloutProps, setDataPointCalloutProps] = React.useState<CustomizedCalloutData>();\n const [stackCalloutProps, setStackCalloutProps] = React.useState<CustomizedCalloutData>();\n const [clickPosition, setClickPosition] = React.useState({ x: 0, y: 0 });\n const [isPopoverOpen, setPopoverOpen] = React.useState(false);\n\n const pointsRef = React.useRef<LineChartDataWithIndex[] | []>([]);\n const calloutPointsRef = React.useRef<any[]>([]);\n React.useEffect(() => {\n /** note that height and width are not used to resize or set as dimesions of the chart,\n * fitParentContainer is responisble for setting the height and width or resizing of the svg/chart\n */\n\n if (_points !== _injectIndexPropertyInLineChartData(props.data.lineChartData) || props.data !== _points) {\n pointsRef.current = _injectIndexPropertyInLineChartData(props.data.lineChartData);\n calloutPointsRef.current = calloutData(pointsRef.current);\n }\n }, [props.height, props.width, props.data]);\n\n React.useImperativeHandle(\n props.componentRef,\n () => ({\n chartContainer: cartesianChartRef.current?.chartContainer ?? null,\n }),\n [],\n );\n\n function _injectIndexPropertyInLineChartData(\n lineChartData?: LineChartPoints[],\n isFilterSelectedLegends: boolean = false,\n ): LineChartDataWithIndex[] | [] {\n const { allowMultipleShapesForPoints = false } = props;\n // Apply filter only if isPropChange is true\n const filteredData = isFilterSelectedLegends\n ? lineChartData?.filter(\n (item: LineChartPoints) =>\n props.legendProps?.selectedLegends?.includes(item.legend) ||\n props.legendProps?.selectedLegend === item.legend,\n )\n : lineChartData;\n return filteredData\n ? filteredData.map((item: LineChartPoints, index: number) => {\n let color: string;\n if (typeof item.color === 'undefined') {\n color = getNextColor(index, 0);\n } else {\n color = getColorFromToken(item.color);\n }\n return {\n ...item,\n index: allowMultipleShapesForPoints ? index : -1,\n color,\n };\n })\n : [];\n }\n\n function updatePosition(newX: number, newY: number) {\n const threshold = 1; // Set a threshold for movement\n const { x, y } = clickPosition;\n // Calculate the distance moved\n const distance = Math.sqrt(Math.pow(newX - x, 2) + Math.pow(newY - y, 2));\n // Update the position only if the distance moved is greater than the threshold\n if (distance > threshold) {\n setClickPosition({ x: newX, y: newY });\n setPopoverOpen(true);\n }\n }\n\n function _getCustomizedCallout() {\n return props.onRenderCalloutPerStack\n ? props.onRenderCalloutPerStack(stackCalloutProps)\n : props.onRenderCalloutPerDataPoint\n ? props.onRenderCalloutPerDataPoint(dataPointCalloutProps)\n : null;\n }\n\n function _getMargins(_margins: Margins) {\n margins = _margins;\n }\n\n function _initializeLineChartData(\n xScale: NumericAxis,\n yScale: NumericAxis,\n containerHeight: number,\n containerWidth: number,\n xElement: SVGElement | null,\n ) {\n _xAxisScale = xScale;\n _yAxisScale = yScale;\n _renderedColorFillBars = props.colorFillBars ? _createColorFillBars(containerHeight) : [];\n lines = _createLines(xElement!, containerHeight!);\n }\n\n function _handleSingleLegendSelectionAction(lineChartItem: LineChartDataWithIndex | ColorFillBarsProps) {\n if (selectedLegend === lineChartItem.legend) {\n setSelectedLegend('');\n _handleLegendClick(lineChartItem, null);\n } else {\n setSelectedLegend(lineChartItem.legend);\n _handleLegendClick(lineChartItem, lineChartItem.legend);\n }\n }\n\n function _onHoverCardHide() {\n setSelectedLegendPoints([]);\n setSelectedColorBarLegend([]);\n setIsSelectedLegend(false);\n }\n\n function _handleLegendClick(\n lineChartItem: LineChartDataWithIndex | ColorFillBarsProps,\n selectedLegend: string | null | string[],\n ): void {\n if (lineChartItem.onLegendClick) {\n lineChartItem.onLegendClick(selectedLegend);\n }\n }\n\n function _createLegends(data: LineChartDataWithIndex[]): JSX.Element {\n const { legendProps, allowMultipleShapesForPoints = false } = props;\n const isLegendMultiSelectEnabled = !!(legendProps && !!legendProps.canSelectMultipleLegends);\n const legendDataItems = data.map((point: LineChartDataWithIndex) => {\n const color: string = point.color!;\n // mapping data to the format Legends component needs\n const legend: Legend = {\n title: point.legend!,\n color,\n action: () => {\n if (isLegendMultiSelectEnabled) {\n _handleMultipleLineLegendSelectionAction(point);\n } else {\n _handleSingleLegendSelectionAction(point);\n }\n },\n onMouseOutAction: () => {\n setActiveLegend('');\n },\n hoverAction: () => {\n _handleChartMouseLeave();\n setActiveLegend(point.legend);\n },\n ...(point.legendShape && {\n shape: point.legendShape,\n }),\n ...(allowMultipleShapesForPoints && {\n shape: Points[point.index % Object.keys(pointTypes).length] as Legend['shape'],\n }),\n };\n return legend;\n });\n\n const colorFillBarsLegendDataItems = props.colorFillBars\n ? props.colorFillBars.map((colorFillBar: ColorFillBarsProps, index: number) => {\n const title = colorFillBar.legend;\n const color = getColorFromToken(colorFillBar.color);\n const legend: Legend = {\n title,\n color,\n action: () => {\n if (isLegendMultiSelectEnabled) {\n _handleMultipleColorFillBarLegendSelectionAction(colorFillBar);\n } else {\n _handleSingleLegendSelectionAction(colorFillBar);\n }\n },\n onMouseOutAction: () => {\n setActiveLegend('');\n },\n hoverAction: () => {\n _handleChartMouseLeave();\n setActiveLegend(title);\n },\n opacity: _getColorFillBarOpacity(colorFillBar),\n stripePattern: colorFillBar.applyPattern,\n };\n return legend;\n })\n : [];\n\n return (\n <Legends\n legends={[...legendDataItems, ...colorFillBarsLegendDataItems]}\n enabledWrapLines={props.enabledLegendsWrapLines}\n overflowText={props.legendsOverflowText}\n {...(isLegendMultiSelectEnabled && { onLegendHoverCardLeave: _onHoverCardHide })}\n {...props.legendProps}\n />\n );\n }\n\n function _getBoxWidthOfShape(pointId: string, pointIndex: number, isLastPoint: boolean) {\n const { allowMultipleShapesForPoints = false, strokeWidth = DEFAULT_LINE_STROKE_SIZE } = props;\n if (allowMultipleShapesForPoints) {\n if (activePoint === pointId) {\n return PointSize.hoverSize;\n } else if (pointIndex === 1 || isLastPoint) {\n return strokeWidth * PATH_MULTIPLY_SIZE;\n } else {\n return PointSize.invisibleSize;\n }\n } else {\n if (activePoint === pointId) {\n return PointSize.hoverSize;\n } else {\n return PointSize.invisibleSize;\n }\n }\n }\n\n function _getPath(\n xPos: number,\n yPos: number,\n pointId: string,\n pointIndex: number,\n isLastPoint: boolean,\n pointOftheLine: number,\n ): string {\n const { allowMultipleShapesForPoints = false } = props;\n let w = _getBoxWidthOfShape(pointId, pointIndex, isLastPoint);\n const index: number = allowMultipleShapesForPoints ? pointOftheLine % Object.keys(pointTypes).length : 0;\n const widthRatio = pointTypes[index].widthRatio;\n w = widthRatio > 1 ? w / widthRatio : w;\n\n return _getPointPath(xPos, yPos, w, index);\n }\n function _getPointFill(lineColor: string, pointId: string, pointIndex: number, isLastPoint: boolean) {\n const { allowMultipleShapesForPoints = false } = props;\n if (allowMultipleShapesForPoints) {\n if (pointIndex === 1 || isLastPoint) {\n if (activePoint === pointId) {\n return tokens.colorNeutralBackground1;\n } else {\n return lineColor;\n }\n } else {\n if (activePoint === pointId) {\n return tokens.colorNeutralBackground1;\n } else {\n return lineColor;\n }\n }\n } else {\n if (activePoint === pointId) {\n return tokens.colorNeutralBackground1;\n } else {\n return lineColor;\n }\n }\n }\n\n function _createLines(xElement: SVGElement, containerHeight: number): JSX.Element[] {\n const lines: JSX.Element[] = [];\n if (isSelectedLegend) {\n _points = selectedLegendPoints;\n } else {\n _points = _injectIndexPropertyInLineChartData(props.data.lineChartData);\n }\n for (let i = _points.length - 1; i >= 0; i--) {\n const linesForLine: JSX.Element[] = [];\n const bordersForLine: JSX.Element[] = [];\n const pointsForLine: JSX.Element[] = [];\n\n const legendVal: string = _points[i].legend;\n const lineColor: string = _points[i].color!;\n const verticaLineHeight = containerHeight - margins.bottom! + 6;\n if (_points[i].data.length === 1) {\n // eslint-disable-next-line @typescript-eslint/no-shadow\n const {\n x: x1,\n y: y1,\n xAxisCalloutData,\n xAxisCalloutAccessibilityData,\n } = _points[i].data[0] as LineChartDataPoint;\n const circleId = `${_circleId}_${i}`;\n const isLegendSelected: boolean = _legendHighlighted(legendVal) || _noLegendHighlighted() || isSelectedLegend;\n pointsForLine.push(\n <circle\n id={circleId}\n key={circleId}\n r={activePoint === circleId ? 5.5 : 3.5}\n cx={_xAxisScale(x1)}\n cy={_yAxisScale(y1)}\n fill={activePoint === circleId ? tokens.colorNeutralBackground1 : lineColor}\n opacity={isLegendSelected ? 1 : 0.1}\n tabIndex={isLegendSelected ? 0 : undefined}\n onMouseOver={(event: React.MouseEvent<SVGElement>) =>\n _handleHover(\n x1,\n y1,\n verticaLineHeight,\n xAxisCalloutData,\n circleId,\n xAxisCalloutAccessibilityData,\n event,\n )\n }\n onMouseMove={(event: React.MouseEvent<SVGElement>) =>\n _handleHover(\n x1,\n y1,\n verticaLineHeight,\n xAxisCalloutData,\n circleId,\n xAxisCalloutAccessibilityData,\n event,\n )\n }\n onMouseOut={_handleMouseOut}\n strokeWidth={activePoint === circleId ? DEFAULT_LINE_STROKE_SIZE : 0}\n stroke={activePoint === circleId ? lineColor : ''}\n role=\"img\"\n aria-label={_getAriaLabel(i, 0)}\n data-is-focusable={isLegendSelected}\n ref={(e: SVGCircleElement | null) => {\n _refCallback(e!, circleId);\n }}\n onFocus={() => _handleFocus(circleId, x1, xAxisCalloutData, circleId, xAxisCalloutAccessibilityData)}\n onBlur={_handleMouseOut}\n {..._getClickHandler(_points[i].data[0].onDataPointClick)}\n />,\n );\n }\n\n let gapIndex = 0;\n const gaps = _points[i].gaps?.sort((a, b) => a.startIndex - b.startIndex) ?? [];\n const lineCurve = _points[i].lineOptions?.curve;\n\n // Use path rendering technique for larger datasets to optimize performance.\n if ((props.optimizeLargeData || lineCurve) && _points[i].data.length > 1) {\n const line = d3Line()\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n .x((d: any) => _xAxisScale(d[0]))\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n .y((d: any) => _yAxisScale(d[1]))\n .curve(getCurveFactory(lineCurve));\n\n const lineId = `${_lineId}_${i}`;\n const borderId = `${_borderId}_${i}`;\n const strokeWidth = _points[i].lineOptions?.strokeWidth || props.strokeWidth || DEFAULT_LINE_STROKE_SIZE;\n\n const isLegendSelected: boolean = _legendHighlighted(legendVal) || _noLegendHighlighted() || isSelectedLegend;\n\n const lineData: [number, number][] = [];\n for (let k = 0; k < _points[i].data.length; k++) {\n lineData.push([\n _points[i].data[k].x instanceof Date\n ? (_points[i].data[k].x as Date).getTime()\n : (_points[i].data[k].x as number),\n _points[i].data[k].y,\n ]);\n }\n\n if (isLegendSelected) {\n const lineBorderWidth = _points[i].lineOptions?.lineBorderWidth\n ? Number.parseFloat(_points[i].lineOptions!.lineBorderWidth!.toString())\n : 0;\n if (lineBorderWidth > 0) {\n bordersForLine.push(\n <path\n id={borderId}\n key={borderId}\n d={line(lineData)!}\n fill=\"transparent\"\n strokeLinecap={_points[i].lineOptions?.strokeLinecap ?? 'round'}\n strokeWidth={Number.parseFloat(strokeWidth.toString()) + lineBorderWidth}\n stroke={_points[i].lineOptions?.lineBorderColor || tokens.colorNeutralBackground1}\n opacity={1}\n />,\n );\n }\n\n linesForLine.push(\n <path\n id={lineId}\n key={lineId}\n d={line(lineData)!}\n fill=\"transparent\"\n data-is-focusable={true}\n stroke={lineColor}\n strokeWidth={strokeWidth}\n strokeLinecap={_points[i].lineOptions?.strokeLinecap ?? 'round'}\n onMouseMove={event => _onMouseOverLargeDataset.bind(i, verticaLineHeight, event)}\n onMouseOver={event => _onMouseOverLargeDataset.bind(i, verticaLineHeight, event)}\n onMouseOut={_handleMouseOut}\n {..._getClickHandler(_points[i].onLineClick)}\n opacity={1}\n tabIndex={isLegendSelected ? 0 : undefined}\n />,\n );\n } else {\n linesForLine.push(\n <path\n id={lineId}\n key={lineId}\n d={line(lineData)!}\n fill=\"transparent\"\n data-is-focusable={false}\n stroke={lineColor}\n strokeWidth={strokeWidth}\n strokeLinecap={_points[i].lineOptions?.strokeLinecap ?? 'round'}\n opacity={0.1}\n />,\n );\n }\n\n pointsForLine.push(\n <circle\n id={`${_staticHighlightCircle}_${i}`}\n key={`${_staticHighlightCircle}_${i}`}\n r={5.5}\n cx={0}\n cy={0}\n fill={tokens.colorNeutralBackground1}\n strokeWidth={DEFAULT_LINE_STROKE_SIZE}\n stroke={lineColor}\n visibility={'hidden'}\n onMouseMove={event => _onMouseOverLargeDataset.bind(i, verticaLineHeight, event)}\n onMouseOver={event => _onMouseOverLargeDataset.bind(i, verticaLineHeight, event)}\n onMouseOut={_handleMouseOut}\n />,\n );\n } else if (!props.optimizeLargeData) {\n for (let j = 1; j < _points[i].data.length; j++) {\n const gapResult = _checkInGap(j, gaps, gapIndex);\n const isInGap = gapResult.isInGap;\n gapIndex = gapResult.gapIndex;\n\n const lineId = `${_lineId}_${i}_${j}`;\n const borderId = `${_borderId}_${i}_${j}`;\n const circleId = `${_circleId}_${i}_${j}`;\n const {\n x: x1,\n y: y1,\n xAxisCalloutData,\n xAxisCalloutAccessibilityData,\n } = _points[i].data[j - 1] as LineChartDataPoint;\n const { x: x2, y: y2 } = _points[i].data[j] as LineChartDataPoint;\n let path = _getPath(_xAxisScale(x1), _yAxisScale(y1), circleId, j, false, _points[i].index);\n const strokeWidth = _points[i].lineOptions?.strokeWidth || props.strokeWidth || DEFAULT_LINE_STROKE_SIZE;\n\n const isLegendSelected: boolean =\n _legendHighlighted(legendVal) || _noLegendHighlighted() || isSelectedLegend;\n\n const currentPointHidden = _points[i].hideNonActiveDots && activePoint !== circleId;\n pointsForLine.push(\n <path\n id={circleId}\n key={circleId}\n d={path}\n data-is-focusable={isLegendSelected}\n onMouseOver={(event: React.MouseEvent<SVGElement>) =>\n _handleHover(\n x1,\n y1,\n verticaLineHeight,\n xAxisCalloutData,\n circleId,\n xAxisCalloutAccessibilityData,\n event,\n )\n }\n onMouseMove={(event: React.MouseEvent<SVGElement>) =>\n _handleHover(\n x1,\n y1,\n verticaLineHeight,\n xAxisCalloutData,\n circleId,\n xAxisCalloutAccessibilityData,\n event,\n )\n }\n onMouseOut={_handleMouseOut}\n onFocus={() => _handleFocus(lineId, x1, xAxisCalloutData, circleId, xAxisCalloutAccessibilityData)}\n onBlur={_handleMouseOut}\n {..._getClickHandler(_points[i].data[j - 1].onDataPointClick)}\n opacity={isLegendSelected && !currentPointHidden ? 1 : 0.01}\n fill={_getPointFill(lineColor, circleId, j, false)}\n stroke={lineColor}\n strokeWidth={strokeWidth}\n role=\"img\"\n aria-label={_getAriaLabel(i, j - 1)}\n tabIndex={isLegendSelected ? 0 : undefined}\n />,\n );\n if (j + 1 === _points[i].data.length) {\n // If this is last point of the line segment.\n const lastCircleId = `${circleId}${j}L`;\n const hiddenHoverCircleId = `${circleId}${j}D`;\n const lastPointHidden = _points[i].hideNonActiveDots && activePoint !== lastCircleId;\n path = _getPath(_xAxisScale(x2), _yAxisScale(y2), lastCircleId, j, true, _points[i].index);\n const {\n xAxisCalloutData: lastCirlceXCallout,\n xAxisCalloutAccessibilityData: lastCirlceXCalloutAccessibilityData,\n } = _points[i].data[j];\n pointsForLine.push(\n <React.Fragment key={`${lastCircleId}_container`}>\n <path\n id={lastCircleId}\n key={lastCircleId}\n d={path}\n data-is-focusable={isLegendSelected}\n onMouseOver={(event: React.MouseEvent<SVGElement>) =>\n _handleHover(\n x2,\n y2,\n verticaLineHeight,\n lastCirlceXCallout,\n lastCircleId,\n lastCirlceXCalloutAccessibilityData,\n event,\n )\n }\n onMouseMove={(event: React.MouseEvent<SVGElement>) =>\n _handleHover(\n x2,\n y2,\n verticaLineHeight,\n lastCirlceXCallout,\n lastCircleId,\n lastCirlceXCalloutAccessibilityData,\n event,\n )\n }\n onMouseOut={_handleMouseOut}\n onFocus={() =>\n _handleFocus(lineId, x2, lastCirlceXCallout, lastCircleId, lastCirlceXCalloutAccessibilityData)\n }\n onBlur={_handleMouseOut}\n {..._getClickHandler(_points[i].data[j].onDataPointClick)}\n opacity={isLegendSelected && !lastPointHidden ? 1 : 0.01}\n fill={_getPointFill(lineColor, lastCircleId, j, true)}\n stroke={lineColor}\n strokeWidth={strokeWidth}\n role=\"img\"\n aria-label={_getAriaLabel(i, j)}\n tabIndex={isLegendSelected ? 0 : undefined}\n />\n {/* Dummy circle acting as magnetic latch for last callout point */}\n <circle\n id={hiddenHoverCircleId}\n key={hiddenHoverCircleId}\n r={8}\n cx={_xAxisScale(x2)}\n cy={_yAxisScale(y2)}\n opacity={0}\n width={0}\n onMouseOver={(event: React.MouseEvent<SVGElement>) =>\n _handleHover(\n x2,\n y2,\n verticaLineHeight,\n lastCirlceXCallout,\n lastCircleId,\n lastCirlceXCalloutAccessibilityData,\n event,\n )\n }\n onMouseMove={(event: React.MouseEvent<SVGElement>) =>\n _handleHover(\n x2,\n y2,\n verticaLineHeight,\n lastCirlceXCallout,\n lastCircleId,\n lastCirlceXCalloutAccessibilityData,\n event,\n )\n }\n onMouseOut={_handleMouseOut}\n strokeWidth={0}\n focusable={false}\n onBlur={_handleMouseOut}\n />\n </React.Fragment>,\n );\n /* eslint-enable react/jsx-no-bind */\n }\n\n if (isLegendSelected) {\n // don't draw line if it is in a gap\n if (!isInGap) {\n const lineBorderWidth = _points[i].lineOptions?.lineBorderWidth\n ? Number.parseFloat(_points[i].lineOptions!.lineBorderWidth!.toString())\n : 0;\n if (lineBorderWidth > 0) {\n bordersForLine.push(\n <line\n id={borderId}\n key={borderId}\n x1={_xAxisScale(x1)}\n y1={_yAxisScale(y1)}\n x2={_xAxisScale(x2)}\n y2={_yAxisScale(y2)}\n strokeLinecap={_points[i].lineOptions?.strokeLinecap ?? 'round'}\n strokeWidth={Number.parseFloat(strokeWidth.toString()) + lineBorderWidth}\n stroke={_points[i].lineOptions?.lineBorderColor || tokens.colorNeutralBackground1}\n opacity={1}\n />,\n );\n }\n\n linesForLine.push(\n <line\n id={lineId}\n key={lineId}\n x1={_xAxisScale(x1)}\n y1={_yAxisScale(y1)}\n x2={_xAxisScale(x2)}\n y2={_yAxisScale(y2)}\n strokeWidth={strokeWidth}\n ref={(e: SVGLineElement | null) => {\n _refCallback(e!, lineId);\n }}\n onMouseOver={(event: React.MouseEvent<SVGElement>) =>\n _handleHover(\n x1,\n y1,\n verticaLineHeight,\n xAxisCalloutData,\n circleId,\n xAxisCalloutAccessibilityData,\n event,\n )\n }\n onMouseMove={(event: React.MouseEvent<SVGElement>) =>\n _handleHover(\n x1,\n y1,\n verticaLineHeight,\n xAxisCalloutData,\n circleId,\n xAxisCalloutAccessibilityData,\n event,\n )\n }\n onMouseOut={_handleMouseOut}\n stroke={lineColor}\n strokeLinecap={_points[i].lineOptions?.strokeLinecap ?? 'round'}\n strokeDasharray={_points[i].lineOptions?.strokeDasharray}\n strokeDashoffset={_points[i].lineOptions?.strokeDashoffset}\n opacity={1}\n {..._getClickHandler(_points[i].onLineClick)}\n />,\n );\n }\n } else {\n if (!isInGap) {\n linesForLine.push(\n <line\n id={lineId}\n key={lineId}\n x1={_xAxisScale(x1)}\n y1={_yAxisScale(y1)}\n x2={_xAxisScale(x2)}\n y2={_yAxisScale(y2)}\n strokeWidth={strokeWidth}\n stroke={lineColor}\n strokeLinecap={_points[i].lineOptions?.strokeLinecap ?? 'round'}\n strokeDasharray={_points[i].lineOptions?.strokeDasharray}\n strokeDashoffset={_points[i].lineOptions?.strokeDashoffset}\n opacity={0.1}\n />,\n );\n }\n }\n }\n }\n\n lines.push(\n <g\n key={`line_${i}`}\n role=\"region\"\n aria-label={`${legendVal}, line ${i + 1} of ${_points.length} with ${_points[i].data.length} data points.`}\n >\n {bordersForLine}\n {linesForLine}\n {pointsForLine}\n </g>,\n );\n }\n const classes = useLineChartStyles(props);\n // Removing un wanted tooltip div from DOM, when prop not provided.\n if (!props.showXAxisLablesTooltip) {\n try {\n document.getElementById(_tooltipId) && document.getElementById(_tooltipId)!.remove();\n // eslint-disable-next-line no-empty\n } catch (e) {}\n }\n // Used to display tooltip at x axis labels.\n if (!props.wrapXAxisLables && props.showXAxisLablesTooltip) {\n const xAxisElement = d3Select(xElement).call(_xAxisScale);\n try {\n document.getElementById(_tooltipId) && document.getElementById(_tooltipId)!.remove();\n // eslint-disable-next-line no-empty\n } catch (e) {}\n const tooltipProps = {\n tooltipCls: classes.tooltip!,\n id: _tooltipId,\n xAxis: xAxisElement,\n };\n xAxisElement && tooltipOfXAxislabels(tooltipProps);\n }\n return lines;\n }\n\n function _createColorFillBars(containerHeight: number) {\n const colorFillBars: JSX.Element[] = [];\n if (isSelectedLegend) {\n _colorFillBars.current = selectedColorBarLegend;\n } else {\n _colorFillBars.current = props.colorFillBars!;\n }\n\n const yMinMaxValues = getMinMaxOfYAxis(_points, ChartTypes.LineChart);\n const FILL_Y_PADDING = 3;\n for (let i = 0; i < _colorFillBars.current.length; i++) {\n const colorFillBar = _colorFillBars.current[i];\n const colorFillBarId = `${_colorFillBarId}-${i}`;\n const color = getColorFromToken(colorFillBar.color);\n\n if (colorFillBar.applyPattern) {\n // Using a pattern element because CSS was unable to render diagonal stripes for rect elements\n colorFillBars.push(_getStripePattern(color, i));\n }\n\n for (let j = 0; j < colorFillBar.data.length; j++) {\n const startX = colorFillBar.data[j].startX;\n const endX = colorFillBar.data[j].endX;\n const opacity =\n _legendHighlighted(colorFillBar.legend) || _noLegendHighlighted() || isSelectedLegend\n ? _getColorFillBarOpacity(colorFillBar)\n : 0.1;\n colorFillBars.push(\n <rect\n fill={colorFillBar.applyPattern ? `url(#${_colorFillBarPatternId}_${i})` : color}\n fillOpacity={opacity}\n x={_isRTL ? _xAxisScale(endX) : _xAxisScale(startX)}\n y={_yAxisScale(yMinMaxValues.endValue) - FILL_Y_PADDING}\n width={Math.abs(_xAxisScale(endX) - _xAxisScale(startX))}\n height={_yAxisScale(props.yMinValue || 0) - _yAxisScale(yMinMaxValues.endValue) + FILL_Y_PADDING}\n key={`${colorFillBarId}${j}`}\n />,\n );\n }\n }\n return colorFillBars;\n }\n\n function _getStripePattern(color: string, id: number) {\n // This describes a tile pattern that resembles diagonal stripes\n // For more information: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/d\n const stripePath = 'M-4,4 l8,-8 M0,16 l16,-16 M12,20 l8,-8';\n return (\n <pattern\n id={`${_colorFillBarPatternId}_${id}`}\n width={16}\n height={16}\n key={`${_colorFillBarPatternId}_${id}`}\n patternUnits={'userSpaceOnUse'}\n >\n <path d={stripePath} stroke={color} strokeWidth={1.25} />\n </pattern>\n );\n }\n\n function _checkInGap(pointIndex: number, gaps: LineChartGap[], currentGapIndex: number) {\n let gapIndex = currentGapIndex;\n let isInGap = false;\n\n while (gapIndex < gaps.length && pointIndex > gaps[gapIndex].endIndex) {\n gapIndex++;\n }\n\n if (gapIndex < gaps.length && pointIndex > gaps[gapIndex].startIndex && pointIndex <= gaps[gapIndex].endIndex) {\n isInGap = true;\n }\n return { isInGap, gapIndex };\n }\n\n function _refCallback(element: SVGGElement, legendTitle: string): void {\n _refArray.push({ index: legendTitle, refElement: element });\n }\n\n const _onMouseOverLargeDataset = (\n linenumber: number,\n lineHeight: number,\n mouseEvent: React.MouseEvent<SVGRectElement | SVGPathElement | SVGCircleElement>,\n ) => {\n mouseEvent.persist();\n const { data } = props;\n const { lineChartData } = data;\n\n // This will get the value of the X when mouse is on the chart\n const xOffset = _xAxisScale.invert(pointer(mouseEvent)[0], document.getElementById(_rectId)!);\n const i = bisect(lineChartData![linenumber].data, xOffset);\n const d0 = lineChartData![linenumber].data[i - 1] as LineChartDataPoint;\n const d1 = lineChartData![linenumber].data[i] as LineChartDataPoint;\n let axisType: XAxisTypes | null = null;\n let xPointToHighlight: string | Date | number = 0;\n let index: null | number = null;\n if (d0 === undefined && d1 !== undefined) {\n xPointToHighlight = d1.x;\n index = i;\n } else if (d0 !== undefined && d1 === undefined) {\n xPointToHighlight = d0.x;\n index = i - 1;\n } else {\n axisType = getTypeOfAxis(lineChartData![linenumber].data[0].x, true) as XAxisTypes;\n let x0;\n let point0;\n let point1;\n switch (axisType) {\n case XAxisTypes.DateAxis:\n x0 = new Date(xOffset).getTime();\n point0 = (d0.x as Date).getTime();\n point1 = (d1.x as Date).getTime();\n xPointToHighlight = Math.abs(x0 - point0) > Math.abs(x0 - point1) ? d1.x : d0.x;\n index = Math.abs(x0 - point0) > Math.abs(x0 - point1) ? i : i - 1;\n break;\n case XAxisTypes.NumericAxis:\n x0 = xOffset as number;\n point0 = d0.x as number;\n point1 = d1.x as number;\n xPointToHighlight = Math.abs(x0 - point0) > Math.abs(x0 - point1) ? d1.x : d0.x;\n index = Math.abs(x0 - point0) > Math.abs(x0 - point1) ? i : i - 1;\n break;\n default:\n break;\n }\n }\n\n const { xAxisCalloutData } = lineChartData![linenumber].data[index as number];\n const formattedDate =\n xPointToHighlight instanceof Date ? formatDate(xPointToHighlight, props.useUTC) : xPointToHighlight;\n const modifiedXVal = xPointToHighlight instanceof Date ? xPointToHighlight.getTime() : xPointToHighlight;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const found: any = find(_calloutPoints, (element: { x: string | number }) => {\n return element.x === modifiedXVal;\n });\n const pointToHighlight: LineChartDataPoint = lineChartData![linenumber].data[index!] as LineChartDataPoint;\n const pointToHighlightUpdated =\n nearestCircleToHighlight === null ||\n (nearestCircleToHighlight !== null &&\n pointToHighlight !== null &&\n (nearestCircleToHighlight.x !== pointToHighlight.x || nearestCircleToHighlight.y !== pointToHighlight.y));\n // if no points need to be called out then don't show vertical line and callout card\n if (found && pointToHighlightUpdated) {\n _uniqueCallOutID = `#${_staticHighlightCircle}_${linenumber}`;\n\n d3Select(`#${_staticHighlightCircle}_${linenumber}`)\n .attr('cx', `${_xAxisScale(pointToHighlight.x)}`)\n .attr('cy', `${_yAxisScale(pointToHighlight.y)}`)\n .attr('visibility', 'visibility');\n\n d3Select(`#${_verticalLine}`)\n .attr('transform', () => `translate(${_xAxisScale(pointToHighlight.x)}, ${_yAxisScale(pointToHighlight.y)})`)\n .attr('visibility', 'visibility')\n .attr('y2', `${lineHeight - 5 - _yAxisScale(pointToHighlight.y)}`);\n\n setNearestCircleToHighlight(pointToHighlight);\n updatePosition(mouseEvent.clientX, mouseEvent.clientY);\n setStackCalloutProps(found!);\n setYValueHover(found.values);\n setDataPointCalloutProps(found!);\n xAxisCalloutData ? setHoverXValue(xAxisCalloutData) : setHoverXValue(formattedDate);\n setActivePoint('');\n }\n\n if (!found) {\n setPopoverOpen(false);\n setNearestCircleToHighlight(pointToHighlight);\n setActivePoint('');\n }\n };\n\n function _handleFocus(\n lineId: string,\n x: number | Date,\n\n xAxisCalloutData: string | undefined,\n circleId: string,\n xAxisCalloutAccessibilityData?: AccessibilityProps,\n ) {\n _uniqueCallOutID = circleId;\n const formattedData = x instanceof Date ? formatDate(x, props.useUTC) : x;\n const xVal = x instanceof Date ? x.getTime() : x;\n const found = find(_calloutPoints, (element: { x: string | number }) => element.x === xVal);\n // if no points need to be called out then don't show vertical line and callout card\n\n if (found) {\n d3Select(`#${_verticalLine}`)\n .attr('transform', () => `translate(${_xAxisScale(x)}, 0)`)\n .attr('visibility', 'visibility');\n _refArray.forEach((obj: RefArrayData) => {\n if (obj.index === lineId) {\n setPopoverOpen(true);\n xAxisCalloutData ? setHoverXValue(xAxisCalloutData) : setHoverXValue('' + formattedData);\n setYValueHover(found.values);\n setStackCalloutProps(found!);\n setDataPointCalloutProps(found!);\n setActivePoint(circleId);\n }\n });\n } else {\n setActivePoint(circleId);\n }\n }\n\n function _handleHover(\n x: number | Date,\n y: number | Date,\n lineHeight: number,\n xAxisCalloutData: string | undefined,\n circleId: string,\n xAxisCalloutAccessibilityData: AccessibilityProps | undefined,\n mouseEvent: React.MouseEvent<SVGElement>,\n ) {\n mouseEvent?.persist();\n const formattedData = x instanceof Date ? formatDate(x, props.useUTC) : x;\n const xVal = x instanceof Date ? x.getTime() : x;\n const found = find(_calloutPoints, (element: { x: string | number }) => element.x === xVal);\n // if no points need to be called out then don't show vertical line and callout card\n\n if (found) {\n d3Select(`#${_verticalLine}`)\n .attr('transform', () => `translate(${_xAxisScale(x)}, ${_yAxisScale(y)})`)\n .attr('visibility', 'visibility')\n .attr('y2', `${lineHeight - 5 - _yAxisScale(y)}`);\n\n if (_uniqueCallOutID !== circleId) {\n _uniqueCallOutID = circleId;\n updatePosition(mouseEvent.clientX, mouseEvent.clientY);\n xAxisCalloutData ? setHoverXValue(xAxisCalloutData) : setHoverXValue('' + formattedData);\n setYValueHover(found.values);\n setStackCalloutProps(found!);\n setDataPointCalloutProps(found!);\n setActivePoint(circleId);\n setNearestCircleToHighlight(null);\n }\n } else {\n setActivePoint(circleId);\n setNearestCircleToHighlight(null);\n }\n }\n\n /**\n * Screen readers announce an element as clickable if the onClick attribute is set.\n * This function sets the attribute only when a click event handler is provided.*/\n\n function _getClickHandler(func?: () => void): { onClick?: () => void } {\n if (func) {\n return {\n onClick: func,\n };\n }\n\n return {};\n }\n\n function _handleMouseOut() {\n d3Select(`#${_verticalLine}`).attr('visibility', 'hidden');\n }\n\n function _handleChartMouseLeave() {\n _uniqueCallOutID = null;\n setActivePoint('');\n if (isPopoverOpen) {\n setPopoverOpen(false);\n }\n }\n\n function _handleMultipleLineLegendSelectionAction(selectedLine: LineChartDataWithIndex) {\n const selectedLineIndex = selectedLegendPoints.reduce((acc, line, index) => {\n if (acc > -1 || line.legend !== selectedLine.legend) {\n return acc;\n } else {\n return index;\n }\n }, -1);\n\n let selectedLines: LineChartDataWithIndex[];\n if (selectedLineIndex === -1) {\n selectedLines = [...selectedLegendPoints, selectedLine];\n } else {\n selectedLines = selectedLegendPoints\n .slice(0, selectedLineIndex)\n .concat(selectedLegendPoints.slice(selectedLineIndex + 1));\n }\n\n const areAllLineLegendsSelected = props.data && selectedLines.length === props.data.lineChartData!.length;\n\n if (\n areAllLineLegendsSelected &&\n ((props.colorFillBars && props.colorFillBars.length === selectedColorBarLegend.length) || !props.colorFillBars)\n ) {\n // Clear all legends if all legends including color fill bar legends are selected\n // Or clear all legends if all legends are selected and there are no color fill bars\n _clearMultipleLegendSelections();\n } else if (!selectedLines.length && !selectedColorBarLegend.length) {\n // Clear all legends if no legends including color fill bar legends are selected\n _clearMultipleLegendSelections();\n } else {\n // Otherwise, set state when one or more legends are selected, including color fill bar legends\n setSelectedLegendPoints(selectedLines);\n setIsSelectedLegend(true);\n }\n\n const selectedLegendTitlesToPass = selectedLines.map((line: LineChartDataWithIndex) => line.legend);\n _handleLegendClick(selectedLine, selectedLegendTitlesToPass);\n }\n\n function _handleMultipleColorFillBarLegendSelectionAction(selectedColorFillBar: ColorFillBarsProps) {\n const selectedColorFillBarIndex = selectedColorBarLegend.reduce((acc, colorFillBar, index) => {\n if (acc > -1 || colorFillBar.legend !== selectedColorFillBar.legend) {\n return acc;\n } else {\n return index;\n }\n }, -1);\n\n let selectedColorFillBars: ColorFillBarsProps[];\n if (selectedColorFillBarIndex === -1) {\n selectedColorFillBars = [...selectedColorBarLegend, selectedColorFillBar];\n } else {\n selectedColorFillBars = selectedColorBarLegend\n .slice(0, selectedColorFillBarIndex)\n .concat(selectedColorBarLegend.slice(selectedColorFillBarIndex + 1));\n }\n\n const areAllColorFillBarLegendsSelected =\n selectedColorFillBars.length === (props.colorFillBars && props.colorFillBars!.length);\n\n if (\n areAllColorFillBarLegendsSelected &&\n ((props.data && props.data.lineChartData!.length === selectedLegendPoints.length) || !props.data)\n ) {\n // Clear all legends if all legends, including line legends, are selected\n // Or clear all legends if all legends are selected and there is no line data\n _clearMultipleLegendSelections();\n } else if (!selectedColorFillBars.length && !selectedLegendPoints.length) {\n // Clear all legends if no legends are selected, including line legends\n _clearMultipleLegendSelections();\n } else {\n // set state when one or more legends are selected, including line legends\n setSelectedColorBarLegend(selectedColorFillBars);\n setIsSelectedLegend(true);\n }\n\n const selectedLegendTitlesToPass = selectedColorFillBars.map(\n (colorFillBar: ColorFillBarsProps) => colorFillBar.legend,\n );\n _handleLegendClick(selectedColorFillBar, selectedLegendTitlesToPass);\n }\n\n function _clearMultipleLegendSelections() {\n setSelectedColorBarLegend([]);\n setSelectedLegendPoints([]);\n setIsSelectedLegend(false);\n }\n\n /**\n * This function checks if the given legend is highlighted or not.\n * A legend can be highlighted in 2 ways:\n * 1. selection: if the user clicks on it\n * 2. hovering: if there is no selected legend and the user hovers over it*/\n\n function _legendHighlighted(legend: string) {\n return selectedLegend === legend || (selectedLegend === '' && activeLegend === legend);\n }\n\n /**\n * This function checks if none of the legends is selected or hovered.*/\n\n function _noLegendHighlighted() {\n return selectedLegend === '' && activeLegend === '';\n }\n\n function _getColorFillBarOpacity(colorFillBar: ColorFillBarsProps) {\n return colorFillBar.applyPattern ? 1 : 0.4;\n }\n\n function _getAriaLabel(lineIndex: number, pointIndex: number): string {\n const line = _points[lineIndex];\n const point = line.data[pointIndex];\n const formattedDate = point.x instanceof Date ? formatDate(point.x, props.useUTC) : point.x;\n const xValue = point.xAxisCalloutData || formattedDate;\n const legend = line.legend;\n const yValue = point.yAxisCalloutData || point.y;\n return point.callOutAccessibilityData?.ariaLabel || `${xValue}. ${legend}, ${yValue}.`;\n }\n\n function _isChartEmpty(): boolean {\n return !(\n props.data &&\n props.data.lineChartData &&\n props.data.lineChartData.length > 0 &&\n props.data.lineChartData.filter((item: LineChartPoints) => item.data.length).length > 0\n );\n }\n\n const { legendProps, tickValues, tickFormat, eventAnnotationProps } = props;\n _points = _injectIndexPropertyInLineChartData(props.data.lineChartData);\n\n const isXAxisDateType = getXAxisType(_points);\n let points = _points;\n if (legendProps && !!legendProps.canSelectMultipleLegends) {\n points = selectedLegendPoints.length >= 1 ? selectedLegendPoints : _points;\n _calloutPoints = calloutData(points);\n }\n\n let legendBars = null;\n // reduce computation cost by only creating legendBars\n // if when hideLegend is false.\n // NOTE: they are rendered only when hideLegend is false in CartesianChart.\n if (!props.hideLegend) {\n legendBars = _createLegends(_points!); // ToDo: Memoize legends to improve performance.\n }\n const calloutProps = {\n YValueHover: YValueHover,\n hoverXValue: hoverXValue,\n descriptionMessage:\n props.getCalloutDescriptionMessage && stackCalloutProps\n ? props.getCalloutDescriptionMessage(stackCalloutProps)\n : undefined,\n 'data-is-focusable': true,\n xAxisCalloutAccessibilityData: xAxisCalloutAccessibilityData,\n ...props.calloutProps,\n clickPosition: clickPosition,\n isPopoverOpen: isPopoverOpen,\n isCalloutForStack: true,\n culture: props.culture ?? 'en-us',\n isCartesian: true,\n customCallout: {\n customizedCallout: _getCustomizedCallout() !== null ? _getCustomizedCallout()! : undefined,\n customCalloutProps: props.calloutPropsPerDataPoint\n ? props.calloutPropsPerDataPoint(dataPointCalloutProps!)\n : undefined,\n },\n };\n const tickParams = {\n tickValues,\n tickFormat,\n };\n\n return !_isChartEmpty() ? (\n <CartesianChart\n {...props}\n chartTitle={props.data.chartTitle}\n points={points}\n chartType={ChartTypes.LineChart}\n calloutProps={calloutProps}\n tickParams={tickParams}\n legendBars={legendBars}\n getmargins={_getMargins}\n getGraphData={_initializeLineChartData}\n xAxisType={isXAxisDateType ? XAxisTypes.DateAxis : XAxisTypes.NumericAxis}\n onChartMouseLeave={_handleChartMouseLeave}\n enableFirstRenderOptimization={props.enablePerfOptimization && _firstRenderOptimization}\n componentRef={cartesianChartRef}\n /* eslint-disable react/jsx-no-bind */\n // eslint-disable-next-line react/no-children-prop\n children={(props: ChildProps) => {\n _xAxisScale = props.xScale!;\n _yAxisScale = props.yScale!;\n return (\n <>\n <g>\n <line\n x1={0}\n y1={0}\n x2={0}\n y2={props.containerHeight}\n stroke={'#323130'}\n id={_verticalLine}\n visibility={'hidden'}\n strokeDasharray={'5,5'}\n />\n {props.optimizeLargeData ? (\n <rect id={_rectId} width={props.containerWidth} height={props.containerHeight} fill={'transparent'} />\n ) : (\n <></>\n )}\n <g>\n {_renderedColorFillBars}\n {lines}\n </g>\n {eventAnnotationProps && (\n <EventsAnnotation\n {...eventAnnotationProps}\n scale={props.xScale!}\n chartYTop={margins.top! + eventLabelHeight}\n chartYBottom={props.containerHeight! - 35}\n />\n )}\n </g>\n </>\n );\n }}\n />\n ) : (\n <div id={_emptyChartId} role={'alert'} style={{ opacity: '0' }} aria-label={'Graph has no data to display'} />\n );\n },\n);\nLineChart.displayName = 'LineChart';\n"],"names":["React","useLineChartStyles","select","d3Select","pointer","bisector","Legends","line","d3Line","useId","find","CartesianChart","EventsAnnotation","tokens","calloutData","ChartTypes","getXAxisType","XAxisTypes","tooltipOfXAxislabels","Points","pointTypes","getMinMaxOfYAxis","getTypeOfAxis","getNextColor","getColorFromToken","useRtl","formatDate","getCurveFactory","PointSize","bisect","d","x","left","DEFAULT_LINE_STROKE_SIZE","PATH_MULTIPLY_SIZE","_getPointPath","y","w","index","allPointPaths","LineChart","forwardRef","props","forwardedRef","_points","_injectIndexPropertyInLineChartData","data","lineChartData","_calloutPoints","_xAxisScale","_yAxisScale","_circleId","_lineId","_borderId","_verticalLine","_colorFillBarPatternId","_uniqueCallOutID","_refArray","margins","eventLabelHeight","lines","_renderedColorFillBars","_colorFillBars","useRef","_tooltipId","_rectId","_staticHighlightCircle","_firstRenderOptimization","_emptyChartId","_colorFillBarId","_isRTL","xAxisCalloutAccessibilityData","cartesianChartRef","eventAnnotationProps","labelHeight","hoverXValue","setHoverXValue","useState","activeLegend","setActiveLegend","YValueHover","setYValueHover","selectedLegend","setSelectedLegend","selectedLegendPoints","setSelectedLegendPoints","selectedColorBarLegend","setSelectedColorBarLegend","isSelectedLegend","setIsSelectedLegend","legendProps","selectedLegends","length","activePoint","setActivePoint","nearestCircleToHighlight","setNearestCircleToHighlight","dataPointCalloutProps","setDataPointCalloutProps","stackCalloutProps","setStackCalloutProps","clickPosition","setClickPosition","isPopoverOpen","setPopoverOpen","pointsRef","calloutPointsRef","useEffect","current","height","width","useImperativeHandle","componentRef","chartContainer","isFilterSelectedLegends","allowMultipleShapesForPoints","filteredData","filter","item","includes","legend","map","color","updatePosition","newX","newY","threshold","distance","Math","sqrt","pow","_getCustomizedCallout","onRenderCalloutPerStack","onRenderCalloutPerDataPoint","_getMargins","_margins","_initializeLineChartData","xScale","yScale","containerHeight","containerWidth","xElement","colorFillBars","_createColorFillBars","_createLines","_handleSingleLegendSelectionAction","lineChartItem","_handleLegendClick","_onHoverCardHide","onLegendClick","_createLegends","isLegendMultiSelectEnabled","canSelectMultipleLegends","legendDataItems","point","title","action","_handleMultipleLineLegendSelectionAction","onMouseOutAction","hoverAction","_handleChartMouseLeave","legendShape","shape","Object","keys","colorFillBarsLegendDataItems","colorFillBar","_handleMultipleColorFillBarLegendSelectionAction","opacity","_getColorFillBarOpacity","stripePattern","applyPattern","legends","enabledWrapLines","enabledLegendsWrapLines","overflowText","legendsOverflowText","onLegendHoverCardLeave","_getBoxWidthOfShape","pointId","pointIndex","isLastPoint","strokeWidth","_getPath","xPos","yPos","pointOftheLine","widthRatio","_getPointFill","lineColor","colorNeutralBackground1","i","linesForLine","bordersForLine","pointsForLine","legendVal","verticaLineHeight","bottom","x1","y1","xAxisCalloutData","circleId","isLegendSelected","_legendHighlighted","_noLegendHighlighted","push","circle","id","key","r","cx","cy","fill","tabIndex","undefined","onMouseOver","event","_handleHover","onMouseMove","onMouseOut","_handleMouseOut","stroke","role","aria-label","_getAriaLabel","data-is-focusable","ref","e","_refCallback","onFocus","_handleFocus","onBlur","_getClickHandler","onDataPointClick","gapIndex","gaps","sort","a","b","startIndex","lineCurve","lineOptions","curve","optimizeLargeData","lineId","borderId","lineData","k","Date","getTime","lineBorderWidth","Number","parseFloat","toString","path","strokeLinecap","lineBorderColor","_onMouseOverLargeDataset","bind","onLineClick","visibility","j","gapResult","_checkInGap","isInGap","x2","y2","currentPointHidden","hideNonActiveDots","lastCircleId","hiddenHoverCircleId","lastPointHidden","lastCirlceXCallout","lastCirlceXCalloutAccessibilityData","Fragment","focusable","strokeDasharray","strokeDashoffset","g","classes","showXAxisLablesTooltip","document","getElementById","remove","wrapXAxisLables","xAxisElement","call","tooltipProps","tooltipCls","tooltip","xAxis","yMinMaxValues","FILL_Y_PADDING","colorFillBarId","_getStripePattern","startX","endX","rect","fillOpacity","endValue","abs","yMinValue","stripePath","pattern","patternUnits","currentGapIndex","endIndex","element","legendTitle","refElement","linenumber","lineHeight","mouseEvent","persist","xOffset","invert","d0","d1","axisType","xPointToHighlight","x0","point0","point1","DateAxis","NumericAxis","formattedDate","useUTC","modifiedXVal","found","pointToHighlight","pointToHighlightUpdated","attr","clientX","clientY","values","formattedData","xVal","forEach","obj","func","onClick","selectedLine","selectedLineIndex","reduce","acc","selectedLines","slice","concat","areAllLineLegendsSelected","_clearMultipleLegendSelections","selectedLegendTitlesToPass","selectedColorFillBar","selectedColorFillBarIndex","selectedColorFillBars","areAllColorFillBarLegendsSelected","lineIndex","xValue","yValue","yAxisCalloutData","callOutAccessibilityData","ariaLabel","_isChartEmpty","tickValues","tickFormat","isXAxisDateType","points","legendBars","hideLegend","calloutProps","descriptionMessage","getCalloutDescriptionMessage","isCalloutForStack","culture","isCartesian","customCallout","customizedCallout","customCalloutProps","calloutPropsPerDataPoint","tickParams","chartTitle","chartType","getmargins","getGraphData","xAxisType","onChartMouseLeave","enableFirstRenderOptimization","enablePerfOptimization","children","scale","chartYTop","top","chartYBottom","div","style","displayName"],"rangeMappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;","mappings":"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"}
|
|
1
|
+
{"version":3,"sources":["LineChart.tsx"],"sourcesContent":["import * as React from 'react';\nimport { LineChartProps } from './LineChart.types';\nimport { useLineChartStyles } from './useLineChartStyles.styles';\nimport { Axis as D3Axis } from 'd3-axis';\nimport { select as d3Select, pointer } from 'd3-selection';\nimport { bisector } from 'd3-array';\nimport { Legend, Legends } from '../Legends/index';\nimport { line as d3Line } from 'd3-shape';\nimport { useId } from '@fluentui/react-utilities';\nimport { find } from '../../utilities/index';\nimport {\n AccessibilityProps,\n CartesianChart,\n ChildProps,\n LineChartPoints,\n CustomizedCalloutData,\n Margins,\n RefArrayData,\n ColorFillBarsProps,\n LineChartGap,\n LineChartDataPoint,\n Chart,\n} from '../../index';\nimport { EventsAnnotation } from './eventAnnotation/EventAnnotation';\nimport { tokens } from '@fluentui/react-theme';\nimport {\n calloutData,\n ChartTypes,\n getXAxisType,\n XAxisTypes,\n tooltipOfXAxislabels,\n Points,\n pointTypes,\n getMinMaxOfYAxis,\n getTypeOfAxis,\n getNextColor,\n getColorFromToken,\n useRtl,\n formatDate,\n getCurveFactory,\n} from '../../utilities/index';\n\ntype NumericAxis = D3Axis<number | { valueOf(): number }>;\nenum PointSize {\n hoverSize = 11,\n invisibleSize = 1,\n}\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nconst bisect = bisector((d: any) => d.x).left;\n\nconst DEFAULT_LINE_STROKE_SIZE = 4;\n// The given shape of a icon must be 2.5 times bigger than line width (known as stroke width)\nconst PATH_MULTIPLY_SIZE = 2.5;\n\n/**\n *\n * @param x units from origin\n * @param y units from origin\n * @param w is the legnth of the each side of a shape\n * @param index index to get the shape path\n */\nconst _getPointPath = (x: number, y: number, w: number, index: number): string => {\n const allPointPaths = [\n // circle path\n `M${x - w / 2} ${y}\n A${w / 2} ${w / 2} 0 1 0 ${x + w / 2} ${y}\n M${x - w / 2} ${y}\n A ${w / 2} ${w / 2} 0 1 1 ${x + w / 2} ${y}\n `,\n //square\n `M${x - w / 2} ${y - w / 2}\n L${x + w / 2} ${y - w / 2}\n L${x + w / 2} ${y + w / 2}\n L${x - w / 2} ${y + w / 2}\n Z`,\n //triangle\n `M${x - w / 2} ${y - 0.2886 * w}\n H ${x + w / 2}\n L${x} ${y + 0.5774 * w} Z`,\n //diamond\n `M${x} ${y - w / 2}\n L${x + w / 2} ${y}\n L${x} ${y + w / 2}\n L${x - w / 2} ${y}\n Z`,\n //pyramid\n `M${x} ${y - 0.5774 * w}\n L${x + w / 2} ${y + 0.2886 * w}\n L${x - w / 2} ${y + 0.2886 * w} Z`,\n //hexagon\n `M${x - 0.5 * w} ${y - 0.866 * w}\n L${x + 0.5 * w} ${y - 0.866 * w}\n L${x + w} ${y}\n L${x + 0.5 * w} ${y + 0.866 * w}\n L${x - 0.5 * w} ${y + 0.866 * w}\n L${x - w} ${y}\n Z`,\n //pentagon\n `M${x} ${y - 0.851 * w}\n L${x + 0.6884 * w} ${y - 0.2633 * w}\n L${x + 0.5001 * w} ${y + 0.6884 * w}\n L${x - 0.5001 * w} ${y + 0.6884 * w}\n L${x - 0.6884 * w} ${y - 0.2633 * w}\n Z`,\n //octagon\n `M${x - 0.5001 * w} ${y - 1.207 * w}\n L${x + 0.5001 * w} ${y - 1.207 * w}\n L${x + 1.207 * w} ${y - 0.5001 * w}\n L${x + 1.207 * w} ${y + 0.5001 * w}\n L${x + 0.5001 * w} ${y + 1.207 * w}\n L${x - 0.5001 * w} ${y + 1.207 * w}\n L${x - 1.207 * w} ${y + 0.5001 * w}\n L${x - 1.207 * w} ${y - 0.5001 * w}\n Z`,\n ];\n return allPointPaths[index];\n};\n\ntype LineChartDataWithIndex = LineChartPoints & { index: number };\n\n// Create a LineChart variant which uses these default styles and this styled subcomponent.\n/**\n * Linechart component\n * {@docCategory LineChart}\n */\nexport const LineChart: React.FunctionComponent<LineChartProps> = React.forwardRef<HTMLDivElement, LineChartProps>(\n (props, forwardedRef) => {\n let _points: LineChartDataWithIndex[] = _injectIndexPropertyInLineChartData(props.data.lineChartData);\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n let _calloutPoints: any[] = calloutData(_points) || [];\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n let _xAxisScale: any = '';\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n let _yAxisScale: any = '';\n let _circleId: string = useId('circle');\n let _lineId: string = useId('lineID');\n let _borderId: string = useId('borderID');\n let _verticalLine: string = useId('verticalLine');\n let _colorFillBarPatternId: string = useId('colorFillBarPattern');\n let _uniqueCallOutID: string | null = '';\n let _refArray: RefArrayData[] = [];\n let margins: Margins;\n let eventLabelHeight: number = 36;\n let lines: JSX.Element[];\n let _renderedColorFillBars: JSX.Element[];\n const _colorFillBars = React.useRef<ColorFillBarsProps[]>([]);\n let _tooltipId: string = useId('LineChartTooltipId_');\n let _rectId: string = useId('containerRectLD');\n let _staticHighlightCircle: string = useId('staticHighlightCircle');\n let _firstRenderOptimization = true;\n let _emptyChartId: string = useId('_LineChart_empty');\n const _colorFillBarId = useId('_colorFillBarId');\n const _isRTL: boolean = useRtl();\n let xAxisCalloutAccessibilityData: AccessibilityProps = {};\n const cartesianChartRef = React.useRef<Chart>(null);\n\n props.eventAnnotationProps &&\n props.eventAnnotationProps.labelHeight &&\n (eventLabelHeight = props.eventAnnotationProps.labelHeight);\n\n const [hoverXValue, setHoverXValue] = React.useState<string | number>('');\n const [activeLegend, setActiveLegend] = React.useState<string>('');\n const [YValueHover, setYValueHover] = React.useState<[]>([]);\n const [selectedLegend, setSelectedLegend] = React.useState<string>('');\n const [selectedLegendPoints, setSelectedLegendPoints] = React.useState<any[]>(\n _injectIndexPropertyInLineChartData(props.data.lineChartData, true),\n );\n const [selectedColorBarLegend, setSelectedColorBarLegend] = React.useState<any[]>([]);\n const [isSelectedLegend, setIsSelectedLegend] = React.useState<boolean>(\n (props.legendProps?.selectedLegends?.length ?? 0) > 0,\n );\n const [activePoint, setActivePoint] = React.useState<string>('');\n const [nearestCircleToHighlight, setNearestCircleToHighlight] = React.useState<LineChartDataPoint | null>(null);\n const [dataPointCalloutProps, setDataPointCalloutProps] = React.useState<CustomizedCalloutData>();\n const [stackCalloutProps, setStackCalloutProps] = React.useState<CustomizedCalloutData>();\n const [clickPosition, setClickPosition] = React.useState({ x: 0, y: 0 });\n const [isPopoverOpen, setPopoverOpen] = React.useState(false);\n\n const pointsRef = React.useRef<LineChartDataWithIndex[] | []>([]);\n const calloutPointsRef = React.useRef<any[]>([]);\n const classes = useLineChartStyles(props);\n React.useEffect(() => {\n /** note that height and width are not used to resize or set as dimesions of the chart,\n * fitParentContainer is responisble for setting the height and width or resizing of the svg/chart\n */\n\n if (_points !== _injectIndexPropertyInLineChartData(props.data.lineChartData) || props.data !== _points) {\n pointsRef.current = _injectIndexPropertyInLineChartData(props.data.lineChartData);\n calloutPointsRef.current = calloutData(pointsRef.current);\n }\n }, [props.height, props.width, props.data]);\n\n React.useImperativeHandle(\n props.componentRef,\n () => ({\n chartContainer: cartesianChartRef.current?.chartContainer ?? null,\n }),\n [],\n );\n\n function _injectIndexPropertyInLineChartData(\n lineChartData?: LineChartPoints[],\n isFilterSelectedLegends: boolean = false,\n ): LineChartDataWithIndex[] | [] {\n const { allowMultipleShapesForPoints = false } = props;\n // Apply filter only if isPropChange is true\n const filteredData = isFilterSelectedLegends\n ? lineChartData?.filter(\n (item: LineChartPoints) =>\n props.legendProps?.selectedLegends?.includes(item.legend) ||\n props.legendProps?.selectedLegend === item.legend,\n )\n : lineChartData;\n return filteredData\n ? filteredData.map((item: LineChartPoints, index: number) => {\n let color: string;\n if (typeof item.color === 'undefined') {\n color = getNextColor(index, 0);\n } else {\n color = getColorFromToken(item.color);\n }\n return {\n ...item,\n index: allowMultipleShapesForPoints ? index : -1,\n color,\n };\n })\n : [];\n }\n\n function updatePosition(newX: number, newY: number) {\n const threshold = 1; // Set a threshold for movement\n const { x, y } = clickPosition;\n // Calculate the distance moved\n const distance = Math.sqrt(Math.pow(newX - x, 2) + Math.pow(newY - y, 2));\n // Update the position only if the distance moved is greater than the threshold\n if (distance > threshold) {\n setClickPosition({ x: newX, y: newY });\n setPopoverOpen(true);\n }\n }\n\n function _getCustomizedCallout() {\n return props.onRenderCalloutPerStack\n ? props.onRenderCalloutPerStack(stackCalloutProps)\n : props.onRenderCalloutPerDataPoint\n ? props.onRenderCalloutPerDataPoint(dataPointCalloutProps)\n : null;\n }\n\n function _getMargins(_margins: Margins) {\n margins = _margins;\n }\n\n function _initializeLineChartData(\n xScale: NumericAxis,\n yScale: NumericAxis,\n containerHeight: number,\n containerWidth: number,\n xElement: SVGElement | null,\n ) {\n _xAxisScale = xScale;\n _yAxisScale = yScale;\n _renderedColorFillBars = props.colorFillBars ? _createColorFillBars(containerHeight) : [];\n lines = _createLines(xElement!, containerHeight!);\n }\n\n function _handleSingleLegendSelectionAction(lineChartItem: LineChartDataWithIndex | ColorFillBarsProps) {\n if (selectedLegend === lineChartItem.legend) {\n setSelectedLegend('');\n _handleLegendClick(lineChartItem, null);\n } else {\n setSelectedLegend(lineChartItem.legend);\n _handleLegendClick(lineChartItem, lineChartItem.legend);\n }\n }\n\n function _onHoverCardHide() {\n setSelectedLegendPoints([]);\n setSelectedColorBarLegend([]);\n setIsSelectedLegend(false);\n }\n\n function _handleLegendClick(\n lineChartItem: LineChartDataWithIndex | ColorFillBarsProps,\n selectedLegend: string | null | string[],\n ): void {\n if (lineChartItem.onLegendClick) {\n lineChartItem.onLegendClick(selectedLegend);\n }\n }\n\n function _createLegends(data: LineChartDataWithIndex[]): JSX.Element {\n const { legendProps, allowMultipleShapesForPoints = false } = props;\n const isLegendMultiSelectEnabled = !!(legendProps && !!legendProps.canSelectMultipleLegends);\n const legendDataItems = data.map((point: LineChartDataWithIndex) => {\n const color: string = point.color!;\n // mapping data to the format Legends component needs\n const legend: Legend = {\n title: point.legend!,\n color,\n action: () => {\n if (isLegendMultiSelectEnabled) {\n _handleMultipleLineLegendSelectionAction(point);\n } else {\n _handleSingleLegendSelectionAction(point);\n }\n },\n onMouseOutAction: () => {\n setActiveLegend('');\n },\n hoverAction: () => {\n _handleChartMouseLeave();\n setActiveLegend(point.legend);\n },\n ...(point.legendShape && {\n shape: point.legendShape,\n }),\n ...(allowMultipleShapesForPoints && {\n shape: Points[point.index % Object.keys(pointTypes).length] as Legend['shape'],\n }),\n };\n return legend;\n });\n\n const colorFillBarsLegendDataItems = props.colorFillBars\n ? props.colorFillBars.map((colorFillBar: ColorFillBarsProps, index: number) => {\n const title = colorFillBar.legend;\n const color = getColorFromToken(colorFillBar.color);\n const legend: Legend = {\n title,\n color,\n action: () => {\n if (isLegendMultiSelectEnabled) {\n _handleMultipleColorFillBarLegendSelectionAction(colorFillBar);\n } else {\n _handleSingleLegendSelectionAction(colorFillBar);\n }\n },\n onMouseOutAction: () => {\n setActiveLegend('');\n },\n hoverAction: () => {\n _handleChartMouseLeave();\n setActiveLegend(title);\n },\n opacity: _getColorFillBarOpacity(colorFillBar),\n stripePattern: colorFillBar.applyPattern,\n };\n return legend;\n })\n : [];\n\n return (\n <Legends\n legends={[...legendDataItems, ...colorFillBarsLegendDataItems]}\n enabledWrapLines={props.enabledLegendsWrapLines}\n overflowText={props.legendsOverflowText}\n {...(isLegendMultiSelectEnabled && { onLegendHoverCardLeave: _onHoverCardHide })}\n {...props.legendProps}\n />\n );\n }\n\n function _getBoxWidthOfShape(pointId: string, pointIndex: number, isLastPoint: boolean) {\n const { allowMultipleShapesForPoints = false, strokeWidth = DEFAULT_LINE_STROKE_SIZE } = props;\n if (allowMultipleShapesForPoints) {\n if (activePoint === pointId) {\n return PointSize.hoverSize;\n } else if (pointIndex === 1 || isLastPoint) {\n return strokeWidth * PATH_MULTIPLY_SIZE;\n } else {\n return PointSize.invisibleSize;\n }\n } else {\n if (activePoint === pointId) {\n return PointSize.hoverSize;\n } else {\n return PointSize.invisibleSize;\n }\n }\n }\n\n function _getPath(\n xPos: number,\n yPos: number,\n pointId: string,\n pointIndex: number,\n isLastPoint: boolean,\n pointOftheLine: number,\n ): string {\n const { allowMultipleShapesForPoints = false } = props;\n let w = _getBoxWidthOfShape(pointId, pointIndex, isLastPoint);\n const index: number = allowMultipleShapesForPoints ? pointOftheLine % Object.keys(pointTypes).length : 0;\n const widthRatio = pointTypes[index].widthRatio;\n w = widthRatio > 1 ? w / widthRatio : w;\n\n return _getPointPath(xPos, yPos, w, index);\n }\n function _getPointFill(lineColor: string, pointId: string, pointIndex: number, isLastPoint: boolean) {\n const { allowMultipleShapesForPoints = false } = props;\n if (allowMultipleShapesForPoints) {\n if (pointIndex === 1 || isLastPoint) {\n if (activePoint === pointId) {\n return tokens.colorNeutralBackground1;\n } else {\n return lineColor;\n }\n } else {\n if (activePoint === pointId) {\n return tokens.colorNeutralBackground1;\n } else {\n return lineColor;\n }\n }\n } else {\n if (activePoint === pointId) {\n return tokens.colorNeutralBackground1;\n } else {\n return lineColor;\n }\n }\n }\n\n function _createLines(xElement: SVGElement, containerHeight: number): JSX.Element[] {\n const lines: JSX.Element[] = [];\n if (isSelectedLegend) {\n _points = selectedLegendPoints;\n } else {\n _points = _injectIndexPropertyInLineChartData(props.data.lineChartData);\n }\n for (let i = _points.length - 1; i >= 0; i--) {\n const linesForLine: JSX.Element[] = [];\n const bordersForLine: JSX.Element[] = [];\n const pointsForLine: JSX.Element[] = [];\n\n const legendVal: string = _points[i].legend;\n const lineColor: string = _points[i].color!;\n const verticaLineHeight = containerHeight - margins.bottom! + 6;\n if (_points[i].data.length === 1) {\n // eslint-disable-next-line @typescript-eslint/no-shadow\n const {\n x: x1,\n y: y1,\n xAxisCalloutData,\n xAxisCalloutAccessibilityData,\n } = _points[i].data[0] as LineChartDataPoint;\n const circleId = `${_circleId}_${i}`;\n const isLegendSelected: boolean = _legendHighlighted(legendVal) || _noLegendHighlighted() || isSelectedLegend;\n pointsForLine.push(\n <circle\n id={circleId}\n key={circleId}\n r={activePoint === circleId ? 5.5 : 3.5}\n cx={_xAxisScale(x1)}\n cy={_yAxisScale(y1)}\n fill={activePoint === circleId ? tokens.colorNeutralBackground1 : lineColor}\n opacity={isLegendSelected ? 1 : 0.1}\n tabIndex={isLegendSelected ? 0 : undefined}\n onMouseOver={(event: React.MouseEvent<SVGElement>) =>\n _handleHover(\n x1,\n y1,\n verticaLineHeight,\n xAxisCalloutData,\n circleId,\n xAxisCalloutAccessibilityData,\n event,\n )\n }\n onMouseMove={(event: React.MouseEvent<SVGElement>) =>\n _handleHover(\n x1,\n y1,\n verticaLineHeight,\n xAxisCalloutData,\n circleId,\n xAxisCalloutAccessibilityData,\n event,\n )\n }\n onMouseOut={_handleMouseOut}\n strokeWidth={activePoint === circleId ? DEFAULT_LINE_STROKE_SIZE : 0}\n stroke={activePoint === circleId ? lineColor : ''}\n role=\"img\"\n aria-label={_getAriaLabel(i, 0)}\n data-is-focusable={isLegendSelected}\n ref={(e: SVGCircleElement | null) => {\n _refCallback(e!, circleId);\n }}\n onFocus={() => _handleFocus(circleId, x1, xAxisCalloutData, circleId, xAxisCalloutAccessibilityData)}\n onBlur={_handleMouseOut}\n {..._getClickHandler(_points[i].data[0].onDataPointClick)}\n />,\n );\n }\n\n let gapIndex = 0;\n const gaps = _points[i].gaps?.sort((a, b) => a.startIndex - b.startIndex) ?? [];\n const lineCurve = _points[i].lineOptions?.curve;\n\n // Use path rendering technique for larger datasets to optimize performance.\n if ((props.optimizeLargeData || lineCurve) && _points[i].data.length > 1) {\n const line = d3Line()\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n .x((d: any) => _xAxisScale(d[0]))\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n .y((d: any) => _yAxisScale(d[1]))\n .curve(getCurveFactory(lineCurve));\n\n const lineId = `${_lineId}_${i}`;\n const borderId = `${_borderId}_${i}`;\n const strokeWidth = _points[i].lineOptions?.strokeWidth || props.strokeWidth || DEFAULT_LINE_STROKE_SIZE;\n\n const isLegendSelected: boolean = _legendHighlighted(legendVal) || _noLegendHighlighted() || isSelectedLegend;\n\n const lineData: [number, number][] = [];\n for (let k = 0; k < _points[i].data.length; k++) {\n lineData.push([\n _points[i].data[k].x instanceof Date\n ? (_points[i].data[k].x as Date).getTime()\n : (_points[i].data[k].x as number),\n _points[i].data[k].y,\n ]);\n }\n\n if (isLegendSelected) {\n const lineBorderWidth = _points[i].lineOptions?.lineBorderWidth\n ? Number.parseFloat(_points[i].lineOptions!.lineBorderWidth!.toString())\n : 0;\n if (lineBorderWidth > 0) {\n bordersForLine.push(\n <path\n id={borderId}\n key={borderId}\n d={line(lineData)!}\n fill=\"transparent\"\n strokeLinecap={_points[i].lineOptions?.strokeLinecap ?? 'round'}\n strokeWidth={Number.parseFloat(strokeWidth.toString()) + lineBorderWidth}\n stroke={_points[i].lineOptions?.lineBorderColor || tokens.colorNeutralBackground1}\n opacity={1}\n />,\n );\n }\n\n linesForLine.push(\n <path\n id={lineId}\n key={lineId}\n d={line(lineData)!}\n fill=\"transparent\"\n data-is-focusable={true}\n stroke={lineColor}\n strokeWidth={strokeWidth}\n strokeLinecap={_points[i].lineOptions?.strokeLinecap ?? 'round'}\n onMouseMove={event => _onMouseOverLargeDataset.bind(i, verticaLineHeight, event)}\n onMouseOver={event => _onMouseOverLargeDataset.bind(i, verticaLineHeight, event)}\n onMouseOut={_handleMouseOut}\n {..._getClickHandler(_points[i].onLineClick)}\n opacity={1}\n tabIndex={isLegendSelected ? 0 : undefined}\n />,\n );\n } else {\n linesForLine.push(\n <path\n id={lineId}\n key={lineId}\n d={line(lineData)!}\n fill=\"transparent\"\n data-is-focusable={false}\n stroke={lineColor}\n strokeWidth={strokeWidth}\n strokeLinecap={_points[i].lineOptions?.strokeLinecap ?? 'round'}\n opacity={0.1}\n />,\n );\n }\n\n pointsForLine.push(\n <circle\n id={`${_staticHighlightCircle}_${i}`}\n key={`${_staticHighlightCircle}_${i}`}\n r={5.5}\n cx={0}\n cy={0}\n fill={tokens.colorNeutralBackground1}\n strokeWidth={DEFAULT_LINE_STROKE_SIZE}\n stroke={lineColor}\n visibility={'hidden'}\n onMouseMove={event => _onMouseOverLargeDataset.bind(i, verticaLineHeight, event)}\n onMouseOver={event => _onMouseOverLargeDataset.bind(i, verticaLineHeight, event)}\n onMouseOut={_handleMouseOut}\n />,\n );\n } else if (!props.optimizeLargeData) {\n for (let j = 1; j < _points[i].data.length; j++) {\n const gapResult = _checkInGap(j, gaps, gapIndex);\n const isInGap = gapResult.isInGap;\n gapIndex = gapResult.gapIndex;\n\n const lineId = `${_lineId}_${i}_${j}`;\n const borderId = `${_borderId}_${i}_${j}`;\n const circleId = `${_circleId}_${i}_${j}`;\n const {\n x: x1,\n y: y1,\n xAxisCalloutData,\n xAxisCalloutAccessibilityData,\n } = _points[i].data[j - 1] as LineChartDataPoint;\n const { x: x2, y: y2 } = _points[i].data[j] as LineChartDataPoint;\n let path = _getPath(_xAxisScale(x1), _yAxisScale(y1), circleId, j, false, _points[i].index);\n const strokeWidth = _points[i].lineOptions?.strokeWidth || props.strokeWidth || DEFAULT_LINE_STROKE_SIZE;\n\n const isLegendSelected: boolean =\n _legendHighlighted(legendVal) || _noLegendHighlighted() || isSelectedLegend;\n\n const currentPointHidden = _points[i].hideNonActiveDots && activePoint !== circleId;\n pointsForLine.push(\n <path\n id={circleId}\n key={circleId}\n d={path}\n data-is-focusable={isLegendSelected}\n onMouseOver={(event: React.MouseEvent<SVGElement>) =>\n _handleHover(\n x1,\n y1,\n verticaLineHeight,\n xAxisCalloutData,\n circleId,\n xAxisCalloutAccessibilityData,\n event,\n )\n }\n onMouseMove={(event: React.MouseEvent<SVGElement>) =>\n _handleHover(\n x1,\n y1,\n verticaLineHeight,\n xAxisCalloutData,\n circleId,\n xAxisCalloutAccessibilityData,\n event,\n )\n }\n onMouseOut={_handleMouseOut}\n onFocus={() => _handleFocus(lineId, x1, xAxisCalloutData, circleId, xAxisCalloutAccessibilityData)}\n onBlur={_handleMouseOut}\n {..._getClickHandler(_points[i].data[j - 1].onDataPointClick)}\n opacity={isLegendSelected && !currentPointHidden ? 1 : 0.01}\n fill={_getPointFill(lineColor, circleId, j, false)}\n stroke={lineColor}\n strokeWidth={strokeWidth}\n role=\"img\"\n aria-label={_getAriaLabel(i, j - 1)}\n tabIndex={isLegendSelected ? 0 : undefined}\n />,\n );\n if (j + 1 === _points[i].data.length) {\n // If this is last point of the line segment.\n const lastCircleId = `${circleId}${j}L`;\n const hiddenHoverCircleId = `${circleId}${j}D`;\n const lastPointHidden = _points[i].hideNonActiveDots && activePoint !== lastCircleId;\n path = _getPath(_xAxisScale(x2), _yAxisScale(y2), lastCircleId, j, true, _points[i].index);\n const {\n xAxisCalloutData: lastCirlceXCallout,\n xAxisCalloutAccessibilityData: lastCirlceXCalloutAccessibilityData,\n } = _points[i].data[j];\n pointsForLine.push(\n <React.Fragment key={`${lastCircleId}_container`}>\n <path\n id={lastCircleId}\n key={lastCircleId}\n d={path}\n data-is-focusable={isLegendSelected}\n onMouseOver={(event: React.MouseEvent<SVGElement>) =>\n _handleHover(\n x2,\n y2,\n verticaLineHeight,\n lastCirlceXCallout,\n lastCircleId,\n lastCirlceXCalloutAccessibilityData,\n event,\n )\n }\n onMouseMove={(event: React.MouseEvent<SVGElement>) =>\n _handleHover(\n x2,\n y2,\n verticaLineHeight,\n lastCirlceXCallout,\n lastCircleId,\n lastCirlceXCalloutAccessibilityData,\n event,\n )\n }\n onMouseOut={_handleMouseOut}\n onFocus={() =>\n _handleFocus(lineId, x2, lastCirlceXCallout, lastCircleId, lastCirlceXCalloutAccessibilityData)\n }\n onBlur={_handleMouseOut}\n {..._getClickHandler(_points[i].data[j].onDataPointClick)}\n opacity={isLegendSelected && !lastPointHidden ? 1 : 0.01}\n fill={_getPointFill(lineColor, lastCircleId, j, true)}\n stroke={lineColor}\n strokeWidth={strokeWidth}\n role=\"img\"\n aria-label={_getAriaLabel(i, j)}\n tabIndex={isLegendSelected ? 0 : undefined}\n />\n {/* Dummy circle acting as magnetic latch for last callout point */}\n <circle\n id={hiddenHoverCircleId}\n key={hiddenHoverCircleId}\n r={8}\n cx={_xAxisScale(x2)}\n cy={_yAxisScale(y2)}\n opacity={0}\n width={0}\n onMouseOver={(event: React.MouseEvent<SVGElement>) =>\n _handleHover(\n x2,\n y2,\n verticaLineHeight,\n lastCirlceXCallout,\n lastCircleId,\n lastCirlceXCalloutAccessibilityData,\n event,\n )\n }\n onMouseMove={(event: React.MouseEvent<SVGElement>) =>\n _handleHover(\n x2,\n y2,\n verticaLineHeight,\n lastCirlceXCallout,\n lastCircleId,\n lastCirlceXCalloutAccessibilityData,\n event,\n )\n }\n onMouseOut={_handleMouseOut}\n strokeWidth={0}\n focusable={false}\n onBlur={_handleMouseOut}\n />\n </React.Fragment>,\n );\n /* eslint-enable react/jsx-no-bind */\n }\n\n if (isLegendSelected) {\n // don't draw line if it is in a gap\n if (!isInGap) {\n const lineBorderWidth = _points[i].lineOptions?.lineBorderWidth\n ? Number.parseFloat(_points[i].lineOptions!.lineBorderWidth!.toString())\n : 0;\n if (lineBorderWidth > 0) {\n bordersForLine.push(\n <line\n id={borderId}\n key={borderId}\n x1={_xAxisScale(x1)}\n y1={_yAxisScale(y1)}\n x2={_xAxisScale(x2)}\n y2={_yAxisScale(y2)}\n strokeLinecap={_points[i].lineOptions?.strokeLinecap ?? 'round'}\n strokeWidth={Number.parseFloat(strokeWidth.toString()) + lineBorderWidth}\n {...(_points[i].lineOptions?.lineBorderColor && {\n stroke: _points[i].lineOptions?.lineBorderColor,\n })}\n className={classes.lineBorder}\n opacity={1}\n />,\n );\n }\n\n linesForLine.push(\n <line\n id={lineId}\n key={lineId}\n x1={_xAxisScale(x1)}\n y1={_yAxisScale(y1)}\n x2={_xAxisScale(x2)}\n y2={_yAxisScale(y2)}\n strokeWidth={strokeWidth}\n ref={(e: SVGLineElement | null) => {\n _refCallback(e!, lineId);\n }}\n onMouseOver={(event: React.MouseEvent<SVGElement>) =>\n _handleHover(\n x1,\n y1,\n verticaLineHeight,\n xAxisCalloutData,\n circleId,\n xAxisCalloutAccessibilityData,\n event,\n )\n }\n onMouseMove={(event: React.MouseEvent<SVGElement>) =>\n _handleHover(\n x1,\n y1,\n verticaLineHeight,\n xAxisCalloutData,\n circleId,\n xAxisCalloutAccessibilityData,\n event,\n )\n }\n onMouseOut={_handleMouseOut}\n stroke={lineColor}\n strokeLinecap={_points[i].lineOptions?.strokeLinecap ?? 'round'}\n strokeDasharray={_points[i].lineOptions?.strokeDasharray}\n strokeDashoffset={_points[i].lineOptions?.strokeDashoffset}\n opacity={1}\n {..._getClickHandler(_points[i].onLineClick)}\n />,\n );\n }\n } else {\n if (!isInGap) {\n linesForLine.push(\n <line\n id={lineId}\n key={lineId}\n x1={_xAxisScale(x1)}\n y1={_yAxisScale(y1)}\n x2={_xAxisScale(x2)}\n y2={_yAxisScale(y2)}\n strokeWidth={strokeWidth}\n stroke={lineColor}\n strokeLinecap={_points[i].lineOptions?.strokeLinecap ?? 'round'}\n strokeDasharray={_points[i].lineOptions?.strokeDasharray}\n strokeDashoffset={_points[i].lineOptions?.strokeDashoffset}\n opacity={0.1}\n />,\n );\n }\n }\n }\n }\n\n lines.push(\n <g\n key={`line_${i}`}\n role=\"region\"\n aria-label={`${legendVal}, line ${i + 1} of ${_points.length} with ${_points[i].data.length} data points.`}\n >\n {bordersForLine}\n {linesForLine}\n {pointsForLine}\n </g>,\n );\n }\n // Removing un wanted tooltip div from DOM, when prop not provided.\n if (!props.showXAxisLablesTooltip) {\n try {\n document.getElementById(_tooltipId) && document.getElementById(_tooltipId)!.remove();\n // eslint-disable-next-line no-empty\n } catch (e) {}\n }\n // Used to display tooltip at x axis labels.\n if (!props.wrapXAxisLables && props.showXAxisLablesTooltip) {\n const xAxisElement = d3Select(xElement).call(_xAxisScale);\n try {\n document.getElementById(_tooltipId) && document.getElementById(_tooltipId)!.remove();\n // eslint-disable-next-line no-empty\n } catch (e) {}\n const tooltipProps = {\n tooltipCls: classes.tooltip!,\n id: _tooltipId,\n xAxis: xAxisElement,\n };\n xAxisElement && tooltipOfXAxislabels(tooltipProps);\n }\n return lines;\n }\n\n function _createColorFillBars(containerHeight: number) {\n const colorFillBars: JSX.Element[] = [];\n if (isSelectedLegend) {\n _colorFillBars.current = selectedColorBarLegend;\n } else {\n _colorFillBars.current = props.colorFillBars!;\n }\n\n const yMinMaxValues = getMinMaxOfYAxis(_points, ChartTypes.LineChart);\n const FILL_Y_PADDING = 3;\n for (let i = 0; i < _colorFillBars.current.length; i++) {\n const colorFillBar = _colorFillBars.current[i];\n const colorFillBarId = `${_colorFillBarId}-${i}`;\n const color = getColorFromToken(colorFillBar.color);\n\n if (colorFillBar.applyPattern) {\n // Using a pattern element because CSS was unable to render diagonal stripes for rect elements\n colorFillBars.push(_getStripePattern(color, i));\n }\n\n for (let j = 0; j < colorFillBar.data.length; j++) {\n const startX = colorFillBar.data[j].startX;\n const endX = colorFillBar.data[j].endX;\n const opacity =\n _legendHighlighted(colorFillBar.legend) || _noLegendHighlighted() || isSelectedLegend\n ? _getColorFillBarOpacity(colorFillBar)\n : 0.1;\n colorFillBars.push(\n <rect\n fill={colorFillBar.applyPattern ? `url(#${_colorFillBarPatternId}_${i})` : color}\n fillOpacity={opacity}\n x={_isRTL ? _xAxisScale(endX) : _xAxisScale(startX)}\n y={_yAxisScale(yMinMaxValues.endValue) - FILL_Y_PADDING}\n width={Math.abs(_xAxisScale(endX) - _xAxisScale(startX))}\n height={_yAxisScale(props.yMinValue || 0) - _yAxisScale(yMinMaxValues.endValue) + FILL_Y_PADDING}\n key={`${colorFillBarId}${j}`}\n />,\n );\n }\n }\n return colorFillBars;\n }\n\n function _getStripePattern(color: string, id: number) {\n // This describes a tile pattern that resembles diagonal stripes\n // For more information: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/d\n const stripePath = 'M-4,4 l8,-8 M0,16 l16,-16 M12,20 l8,-8';\n return (\n <pattern\n id={`${_colorFillBarPatternId}_${id}`}\n width={16}\n height={16}\n key={`${_colorFillBarPatternId}_${id}`}\n patternUnits={'userSpaceOnUse'}\n >\n <path d={stripePath} stroke={color} strokeWidth={1.25} />\n </pattern>\n );\n }\n\n function _checkInGap(pointIndex: number, gaps: LineChartGap[], currentGapIndex: number) {\n let gapIndex = currentGapIndex;\n let isInGap = false;\n\n while (gapIndex < gaps.length && pointIndex > gaps[gapIndex].endIndex) {\n gapIndex++;\n }\n\n if (gapIndex < gaps.length && pointIndex > gaps[gapIndex].startIndex && pointIndex <= gaps[gapIndex].endIndex) {\n isInGap = true;\n }\n return { isInGap, gapIndex };\n }\n\n function _refCallback(element: SVGGElement, legendTitle: string): void {\n _refArray.push({ index: legendTitle, refElement: element });\n }\n\n const _onMouseOverLargeDataset = (\n linenumber: number,\n lineHeight: number,\n mouseEvent: React.MouseEvent<SVGRectElement | SVGPathElement | SVGCircleElement>,\n ) => {\n mouseEvent.persist();\n const { data } = props;\n const { lineChartData } = data;\n\n // This will get the value of the X when mouse is on the chart\n const xOffset = _xAxisScale.invert(pointer(mouseEvent)[0], document.getElementById(_rectId)!);\n const i = bisect(lineChartData![linenumber].data, xOffset);\n const d0 = lineChartData![linenumber].data[i - 1] as LineChartDataPoint;\n const d1 = lineChartData![linenumber].data[i] as LineChartDataPoint;\n let axisType: XAxisTypes | null = null;\n let xPointToHighlight: string | Date | number = 0;\n let index: null | number = null;\n if (d0 === undefined && d1 !== undefined) {\n xPointToHighlight = d1.x;\n index = i;\n } else if (d0 !== undefined && d1 === undefined) {\n xPointToHighlight = d0.x;\n index = i - 1;\n } else {\n axisType = getTypeOfAxis(lineChartData![linenumber].data[0].x, true) as XAxisTypes;\n let x0;\n let point0;\n let point1;\n switch (axisType) {\n case XAxisTypes.DateAxis:\n x0 = new Date(xOffset).getTime();\n point0 = (d0.x as Date).getTime();\n point1 = (d1.x as Date).getTime();\n xPointToHighlight = Math.abs(x0 - point0) > Math.abs(x0 - point1) ? d1.x : d0.x;\n index = Math.abs(x0 - point0) > Math.abs(x0 - point1) ? i : i - 1;\n break;\n case XAxisTypes.NumericAxis:\n x0 = xOffset as number;\n point0 = d0.x as number;\n point1 = d1.x as number;\n xPointToHighlight = Math.abs(x0 - point0) > Math.abs(x0 - point1) ? d1.x : d0.x;\n index = Math.abs(x0 - point0) > Math.abs(x0 - point1) ? i : i - 1;\n break;\n default:\n break;\n }\n }\n\n const { xAxisCalloutData } = lineChartData![linenumber].data[index as number];\n const formattedDate =\n xPointToHighlight instanceof Date ? formatDate(xPointToHighlight, props.useUTC) : xPointToHighlight;\n const modifiedXVal = xPointToHighlight instanceof Date ? xPointToHighlight.getTime() : xPointToHighlight;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const found: any = find(_calloutPoints, (element: { x: string | number }) => {\n return element.x === modifiedXVal;\n });\n const pointToHighlight: LineChartDataPoint = lineChartData![linenumber].data[index!] as LineChartDataPoint;\n const pointToHighlightUpdated =\n nearestCircleToHighlight === null ||\n (nearestCircleToHighlight !== null &&\n pointToHighlight !== null &&\n (nearestCircleToHighlight.x !== pointToHighlight.x || nearestCircleToHighlight.y !== pointToHighlight.y));\n // if no points need to be called out then don't show vertical line and callout card\n if (found && pointToHighlightUpdated) {\n _uniqueCallOutID = `#${_staticHighlightCircle}_${linenumber}`;\n\n d3Select(`#${_staticHighlightCircle}_${linenumber}`)\n .attr('cx', `${_xAxisScale(pointToHighlight.x)}`)\n .attr('cy', `${_yAxisScale(pointToHighlight.y)}`)\n .attr('visibility', 'visibility');\n\n d3Select(`#${_verticalLine}`)\n .attr('transform', () => `translate(${_xAxisScale(pointToHighlight.x)}, ${_yAxisScale(pointToHighlight.y)})`)\n .attr('visibility', 'visibility')\n .attr('y2', `${lineHeight - 5 - _yAxisScale(pointToHighlight.y)}`);\n\n setNearestCircleToHighlight(pointToHighlight);\n updatePosition(mouseEvent.clientX, mouseEvent.clientY);\n setStackCalloutProps(found!);\n setYValueHover(found.values);\n setDataPointCalloutProps(found!);\n xAxisCalloutData ? setHoverXValue(xAxisCalloutData) : setHoverXValue(formattedDate);\n setActivePoint('');\n }\n\n if (!found) {\n setPopoverOpen(false);\n setNearestCircleToHighlight(pointToHighlight);\n setActivePoint('');\n }\n };\n\n function _handleFocus(\n lineId: string,\n x: number | Date,\n\n xAxisCalloutData: string | undefined,\n circleId: string,\n xAxisCalloutAccessibilityData?: AccessibilityProps,\n ) {\n _uniqueCallOutID = circleId;\n const formattedData = x instanceof Date ? formatDate(x, props.useUTC) : x;\n const xVal = x instanceof Date ? x.getTime() : x;\n const found = find(_calloutPoints, (element: { x: string | number }) => element.x === xVal);\n // if no points need to be called out then don't show vertical line and callout card\n\n if (found) {\n d3Select(`#${_verticalLine}`)\n .attr('transform', () => `translate(${_xAxisScale(x)}, 0)`)\n .attr('visibility', 'visibility');\n _refArray.forEach((obj: RefArrayData) => {\n if (obj.index === lineId) {\n setPopoverOpen(true);\n xAxisCalloutData ? setHoverXValue(xAxisCalloutData) : setHoverXValue('' + formattedData);\n setYValueHover(found.values);\n setStackCalloutProps(found!);\n setDataPointCalloutProps(found!);\n setActivePoint(circleId);\n }\n });\n } else {\n setActivePoint(circleId);\n }\n }\n\n function _handleHover(\n x: number | Date,\n y: number | Date,\n lineHeight: number,\n xAxisCalloutData: string | undefined,\n circleId: string,\n xAxisCalloutAccessibilityData: AccessibilityProps | undefined,\n mouseEvent: React.MouseEvent<SVGElement>,\n ) {\n mouseEvent?.persist();\n const formattedData = x instanceof Date ? formatDate(x, props.useUTC) : x;\n const xVal = x instanceof Date ? x.getTime() : x;\n const found = find(_calloutPoints, (element: { x: string | number }) => element.x === xVal);\n // if no points need to be called out then don't show vertical line and callout card\n\n if (found) {\n d3Select(`#${_verticalLine}`)\n .attr('transform', () => `translate(${_xAxisScale(x)}, ${_yAxisScale(y)})`)\n .attr('visibility', 'visibility')\n .attr('y2', `${lineHeight - 5 - _yAxisScale(y)}`);\n\n if (_uniqueCallOutID !== circleId) {\n _uniqueCallOutID = circleId;\n updatePosition(mouseEvent.clientX, mouseEvent.clientY);\n xAxisCalloutData ? setHoverXValue(xAxisCalloutData) : setHoverXValue('' + formattedData);\n setYValueHover(found.values);\n setStackCalloutProps(found!);\n setDataPointCalloutProps(found!);\n setActivePoint(circleId);\n setNearestCircleToHighlight(null);\n }\n } else {\n setActivePoint(circleId);\n setNearestCircleToHighlight(null);\n }\n }\n\n /**\n * Screen readers announce an element as clickable if the onClick attribute is set.\n * This function sets the attribute only when a click event handler is provided.*/\n\n function _getClickHandler(func?: () => void): { onClick?: () => void } {\n if (func) {\n return {\n onClick: func,\n };\n }\n\n return {};\n }\n\n function _handleMouseOut() {\n d3Select(`#${_verticalLine}`).attr('visibility', 'hidden');\n }\n\n function _handleChartMouseLeave() {\n _uniqueCallOutID = null;\n setActivePoint('');\n if (isPopoverOpen) {\n setPopoverOpen(false);\n }\n }\n\n function _handleMultipleLineLegendSelectionAction(selectedLine: LineChartDataWithIndex) {\n const selectedLineIndex = selectedLegendPoints.reduce((acc, line, index) => {\n if (acc > -1 || line.legend !== selectedLine.legend) {\n return acc;\n } else {\n return index;\n }\n }, -1);\n\n let selectedLines: LineChartDataWithIndex[];\n if (selectedLineIndex === -1) {\n selectedLines = [...selectedLegendPoints, selectedLine];\n } else {\n selectedLines = selectedLegendPoints\n .slice(0, selectedLineIndex)\n .concat(selectedLegendPoints.slice(selectedLineIndex + 1));\n }\n\n const areAllLineLegendsSelected = props.data && selectedLines.length === props.data.lineChartData!.length;\n\n if (\n areAllLineLegendsSelected &&\n ((props.colorFillBars && props.colorFillBars.length === selectedColorBarLegend.length) || !props.colorFillBars)\n ) {\n // Clear all legends if all legends including color fill bar legends are selected\n // Or clear all legends if all legends are selected and there are no color fill bars\n _clearMultipleLegendSelections();\n } else if (!selectedLines.length && !selectedColorBarLegend.length) {\n // Clear all legends if no legends including color fill bar legends are selected\n _clearMultipleLegendSelections();\n } else {\n // Otherwise, set state when one or more legends are selected, including color fill bar legends\n setSelectedLegendPoints(selectedLines);\n setIsSelectedLegend(true);\n }\n\n const selectedLegendTitlesToPass = selectedLines.map((line: LineChartDataWithIndex) => line.legend);\n _handleLegendClick(selectedLine, selectedLegendTitlesToPass);\n }\n\n function _handleMultipleColorFillBarLegendSelectionAction(selectedColorFillBar: ColorFillBarsProps) {\n const selectedColorFillBarIndex = selectedColorBarLegend.reduce((acc, colorFillBar, index) => {\n if (acc > -1 || colorFillBar.legend !== selectedColorFillBar.legend) {\n return acc;\n } else {\n return index;\n }\n }, -1);\n\n let selectedColorFillBars: ColorFillBarsProps[];\n if (selectedColorFillBarIndex === -1) {\n selectedColorFillBars = [...selectedColorBarLegend, selectedColorFillBar];\n } else {\n selectedColorFillBars = selectedColorBarLegend\n .slice(0, selectedColorFillBarIndex)\n .concat(selectedColorBarLegend.slice(selectedColorFillBarIndex + 1));\n }\n\n const areAllColorFillBarLegendsSelected =\n selectedColorFillBars.length === (props.colorFillBars && props.colorFillBars!.length);\n\n if (\n areAllColorFillBarLegendsSelected &&\n ((props.data && props.data.lineChartData!.length === selectedLegendPoints.length) || !props.data)\n ) {\n // Clear all legends if all legends, including line legends, are selected\n // Or clear all legends if all legends are selected and there is no line data\n _clearMultipleLegendSelections();\n } else if (!selectedColorFillBars.length && !selectedLegendPoints.length) {\n // Clear all legends if no legends are selected, including line legends\n _clearMultipleLegendSelections();\n } else {\n // set state when one or more legends are selected, including line legends\n setSelectedColorBarLegend(selectedColorFillBars);\n setIsSelectedLegend(true);\n }\n\n const selectedLegendTitlesToPass = selectedColorFillBars.map(\n (colorFillBar: ColorFillBarsProps) => colorFillBar.legend,\n );\n _handleLegendClick(selectedColorFillBar, selectedLegendTitlesToPass);\n }\n\n function _clearMultipleLegendSelections() {\n setSelectedColorBarLegend([]);\n setSelectedLegendPoints([]);\n setIsSelectedLegend(false);\n }\n\n /**\n * This function checks if the given legend is highlighted or not.\n * A legend can be highlighted in 2 ways:\n * 1. selection: if the user clicks on it\n * 2. hovering: if there is no selected legend and the user hovers over it*/\n\n function _legendHighlighted(legend: string) {\n return selectedLegend === legend || (selectedLegend === '' && activeLegend === legend);\n }\n\n /**\n * This function checks if none of the legends is selected or hovered.*/\n\n function _noLegendHighlighted() {\n return selectedLegend === '' && activeLegend === '';\n }\n\n function _getColorFillBarOpacity(colorFillBar: ColorFillBarsProps) {\n return colorFillBar.applyPattern ? 1 : 0.4;\n }\n\n function _getAriaLabel(lineIndex: number, pointIndex: number): string {\n const line = _points[lineIndex];\n const point = line.data[pointIndex];\n const formattedDate = point.x instanceof Date ? formatDate(point.x, props.useUTC) : point.x;\n const xValue = point.xAxisCalloutData || formattedDate;\n const legend = line.legend;\n const yValue = point.yAxisCalloutData || point.y;\n return point.callOutAccessibilityData?.ariaLabel || `${xValue}. ${legend}, ${yValue}.`;\n }\n\n function _isChartEmpty(): boolean {\n return !(\n props.data &&\n props.data.lineChartData &&\n props.data.lineChartData.length > 0 &&\n props.data.lineChartData.filter((item: LineChartPoints) => item.data.length).length > 0\n );\n }\n\n const { legendProps, tickValues, tickFormat, eventAnnotationProps } = props;\n _points = _injectIndexPropertyInLineChartData(props.data.lineChartData);\n\n const isXAxisDateType = getXAxisType(_points);\n let points = _points;\n if (legendProps && !!legendProps.canSelectMultipleLegends) {\n points = selectedLegendPoints.length >= 1 ? selectedLegendPoints : _points;\n _calloutPoints = calloutData(points);\n }\n\n let legendBars = null;\n // reduce computation cost by only creating legendBars\n // if when hideLegend is false.\n // NOTE: they are rendered only when hideLegend is false in CartesianChart.\n if (!props.hideLegend) {\n legendBars = _createLegends(_points!); // ToDo: Memoize legends to improve performance.\n }\n const calloutProps = {\n YValueHover: YValueHover,\n hoverXValue: hoverXValue,\n descriptionMessage:\n props.getCalloutDescriptionMessage && stackCalloutProps\n ? props.getCalloutDescriptionMessage(stackCalloutProps)\n : undefined,\n 'data-is-focusable': true,\n xAxisCalloutAccessibilityData: xAxisCalloutAccessibilityData,\n ...props.calloutProps,\n clickPosition: clickPosition,\n isPopoverOpen: isPopoverOpen,\n isCalloutForStack: true,\n culture: props.culture ?? 'en-us',\n isCartesian: true,\n customCallout: {\n customizedCallout: _getCustomizedCallout() !== null ? _getCustomizedCallout()! : undefined,\n customCalloutProps: props.calloutPropsPerDataPoint\n ? props.calloutPropsPerDataPoint(dataPointCalloutProps!)\n : undefined,\n },\n };\n const tickParams = {\n tickValues,\n tickFormat,\n };\n\n return !_isChartEmpty() ? (\n <CartesianChart\n {...props}\n chartTitle={props.data.chartTitle}\n points={points}\n chartType={ChartTypes.LineChart}\n calloutProps={calloutProps}\n tickParams={tickParams}\n legendBars={legendBars}\n getmargins={_getMargins}\n getGraphData={_initializeLineChartData}\n xAxisType={isXAxisDateType ? XAxisTypes.DateAxis : XAxisTypes.NumericAxis}\n onChartMouseLeave={_handleChartMouseLeave}\n enableFirstRenderOptimization={props.enablePerfOptimization && _firstRenderOptimization}\n componentRef={cartesianChartRef}\n /* eslint-disable react/jsx-no-bind */\n // eslint-disable-next-line react/no-children-prop\n children={(props: ChildProps) => {\n _xAxisScale = props.xScale!;\n _yAxisScale = props.yScale!;\n return (\n <>\n <g>\n <line\n x1={0}\n y1={0}\n x2={0}\n y2={props.containerHeight}\n stroke={'#323130'}\n id={_verticalLine}\n visibility={'hidden'}\n strokeDasharray={'5,5'}\n />\n {props.optimizeLargeData ? (\n <rect id={_rectId} width={props.containerWidth} height={props.containerHeight} fill={'transparent'} />\n ) : (\n <></>\n )}\n <g>\n {_renderedColorFillBars}\n {lines}\n </g>\n {eventAnnotationProps && (\n <EventsAnnotation\n {...eventAnnotationProps}\n scale={props.xScale!}\n chartYTop={margins.top! + eventLabelHeight}\n chartYBottom={props.containerHeight! - 35}\n />\n )}\n </g>\n </>\n );\n }}\n />\n ) : (\n <div id={_emptyChartId} role={'alert'} style={{ opacity: '0' }} aria-label={'Graph has no data to display'} />\n );\n },\n);\nLineChart.displayName = 'LineChart';\n"],"names":["React","useLineChartStyles","select","d3Select","pointer","bisector","Legends","line","d3Line","useId","find","CartesianChart","EventsAnnotation","tokens","calloutData","ChartTypes","getXAxisType","XAxisTypes","tooltipOfXAxislabels","Points","pointTypes","getMinMaxOfYAxis","getTypeOfAxis","getNextColor","getColorFromToken","useRtl","formatDate","getCurveFactory","PointSize","bisect","d","x","left","DEFAULT_LINE_STROKE_SIZE","PATH_MULTIPLY_SIZE","_getPointPath","y","w","index","allPointPaths","LineChart","forwardRef","props","forwardedRef","_points","_injectIndexPropertyInLineChartData","data","lineChartData","_calloutPoints","_xAxisScale","_yAxisScale","_circleId","_lineId","_borderId","_verticalLine","_colorFillBarPatternId","_uniqueCallOutID","_refArray","margins","eventLabelHeight","lines","_renderedColorFillBars","_colorFillBars","useRef","_tooltipId","_rectId","_staticHighlightCircle","_firstRenderOptimization","_emptyChartId","_colorFillBarId","_isRTL","xAxisCalloutAccessibilityData","cartesianChartRef","eventAnnotationProps","labelHeight","hoverXValue","setHoverXValue","useState","activeLegend","setActiveLegend","YValueHover","setYValueHover","selectedLegend","setSelectedLegend","selectedLegendPoints","setSelectedLegendPoints","selectedColorBarLegend","setSelectedColorBarLegend","isSelectedLegend","setIsSelectedLegend","legendProps","selectedLegends","length","activePoint","setActivePoint","nearestCircleToHighlight","setNearestCircleToHighlight","dataPointCalloutProps","setDataPointCalloutProps","stackCalloutProps","setStackCalloutProps","clickPosition","setClickPosition","isPopoverOpen","setPopoverOpen","pointsRef","calloutPointsRef","classes","useEffect","current","height","width","useImperativeHandle","componentRef","chartContainer","isFilterSelectedLegends","allowMultipleShapesForPoints","filteredData","filter","item","includes","legend","map","color","updatePosition","newX","newY","threshold","distance","Math","sqrt","pow","_getCustomizedCallout","onRenderCalloutPerStack","onRenderCalloutPerDataPoint","_getMargins","_margins","_initializeLineChartData","xScale","yScale","containerHeight","containerWidth","xElement","colorFillBars","_createColorFillBars","_createLines","_handleSingleLegendSelectionAction","lineChartItem","_handleLegendClick","_onHoverCardHide","onLegendClick","_createLegends","isLegendMultiSelectEnabled","canSelectMultipleLegends","legendDataItems","point","title","action","_handleMultipleLineLegendSelectionAction","onMouseOutAction","hoverAction","_handleChartMouseLeave","legendShape","shape","Object","keys","colorFillBarsLegendDataItems","colorFillBar","_handleMultipleColorFillBarLegendSelectionAction","opacity","_getColorFillBarOpacity","stripePattern","applyPattern","legends","enabledWrapLines","enabledLegendsWrapLines","overflowText","legendsOverflowText","onLegendHoverCardLeave","_getBoxWidthOfShape","pointId","pointIndex","isLastPoint","strokeWidth","_getPath","xPos","yPos","pointOftheLine","widthRatio","_getPointFill","lineColor","colorNeutralBackground1","i","linesForLine","bordersForLine","pointsForLine","legendVal","verticaLineHeight","bottom","x1","y1","xAxisCalloutData","circleId","isLegendSelected","_legendHighlighted","_noLegendHighlighted","push","circle","id","key","r","cx","cy","fill","tabIndex","undefined","onMouseOver","event","_handleHover","onMouseMove","onMouseOut","_handleMouseOut","stroke","role","aria-label","_getAriaLabel","data-is-focusable","ref","e","_refCallback","onFocus","_handleFocus","onBlur","_getClickHandler","onDataPointClick","gapIndex","gaps","sort","a","b","startIndex","lineCurve","lineOptions","curve","optimizeLargeData","lineId","borderId","lineData","k","Date","getTime","lineBorderWidth","Number","parseFloat","toString","path","strokeLinecap","lineBorderColor","_onMouseOverLargeDataset","bind","onLineClick","visibility","j","gapResult","_checkInGap","isInGap","x2","y2","currentPointHidden","hideNonActiveDots","lastCircleId","hiddenHoverCircleId","lastPointHidden","lastCirlceXCallout","lastCirlceXCalloutAccessibilityData","Fragment","focusable","className","lineBorder","strokeDasharray","strokeDashoffset","g","showXAxisLablesTooltip","document","getElementById","remove","wrapXAxisLables","xAxisElement","call","tooltipProps","tooltipCls","tooltip","xAxis","yMinMaxValues","FILL_Y_PADDING","colorFillBarId","_getStripePattern","startX","endX","rect","fillOpacity","endValue","abs","yMinValue","stripePath","pattern","patternUnits","currentGapIndex","endIndex","element","legendTitle","refElement","linenumber","lineHeight","mouseEvent","persist","xOffset","invert","d0","d1","axisType","xPointToHighlight","x0","point0","point1","DateAxis","NumericAxis","formattedDate","useUTC","modifiedXVal","found","pointToHighlight","pointToHighlightUpdated","attr","clientX","clientY","values","formattedData","xVal","forEach","obj","func","onClick","selectedLine","selectedLineIndex","reduce","acc","selectedLines","slice","concat","areAllLineLegendsSelected","_clearMultipleLegendSelections","selectedLegendTitlesToPass","selectedColorFillBar","selectedColorFillBarIndex","selectedColorFillBars","areAllColorFillBarLegendsSelected","lineIndex","xValue","yValue","yAxisCalloutData","callOutAccessibilityData","ariaLabel","_isChartEmpty","tickValues","tickFormat","isXAxisDateType","points","legendBars","hideLegend","calloutProps","descriptionMessage","getCalloutDescriptionMessage","isCalloutForStack","culture","isCartesian","customCallout","customizedCallout","customCalloutProps","calloutPropsPerDataPoint","tickParams","chartTitle","chartType","getmargins","getGraphData","xAxisType","onChartMouseLeave","enableFirstRenderOptimization","enablePerfOptimization","children","scale","chartYTop","top","chartYBottom","div","style","displayName"],"rangeMappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;","mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["LineChart.types.ts"],"sourcesContent":["/* eslint-disable @typescript-eslint/naming-convention */\nimport { RenderFunction } from '../../utilities/index';\nimport {\n ChartProps,\n LineChartPoints,\n Margins,\n Basestate,\n RefArrayData,\n CustomizedCalloutData,\n} from '../../types/index';\nimport { EventAnnotation } from '../../types/EventAnnotation';\nimport {\n CartesianChartProps,\n CartesianChartStyleProps,\n CartesianChartStyles,\n ChildProps,\n} from '../CommonComponents/index';\n\nexport type { ChildProps, LineChartPoints, Margins, Basestate, RefArrayData };\n\n/**\n * Line Chart properties\n * {@docCategory LineChart}\n */\nexport interface LineChartProps extends CartesianChartProps {\n /**\n * Data to render in the chart.\n */\n data: ChartProps;\n\n /**\n * Call to provide customized styling that will layer on top of the variant rules.\n */\n styles?: LineChartStyles;\n\n /**\n * Show event annotation\n */\n eventAnnotationProps?: EventsAnnotationProps;\n\n /**\n * Define a custom callout renderer for a data point\n */\n onRenderCalloutPerDataPoint?: RenderFunction<CustomizedCalloutData>;\n\n /**\n * Define a custom callout renderer for a stack; default is to render per data point\n */\n onRenderCalloutPerStack?: RenderFunction<CustomizedCalloutData>;\n\n /**\n * Callback for getting callout description message\n */\n getCalloutDescriptionMessage?: (calloutDataProps: CustomizedCalloutData) => string | undefined;\n\n /*\n * Color fill bars for the chart,\n */\n colorFillBars?: ColorFillBarsProps[];\n\n /**\n * if this is set to true, then for each line there will be a unique shape assigned to the point,\n * there are total 8 shapes which are as follow circle, square, triangele, diamond, pyramid,\n * hexagon, pentagon and octagon, which will get assigned as respectively, if there are more\n * than 8 lines in the line chart then it will again start from cicle to octagon.\n * setting this flag to true will also change the behavior of the points, like for a\n * line, last point shape and first point shape will be visible all the times, and all\n * other points will get enlarge only when hovered over them\n * if set to false default shape will be circle, with the existing behavior\n * @default false\n */\n allowMultipleShapesForPoints?: boolean;\n\n /*\n * Optimize line chart rendering for large data set. If this prop is enabled, line chart\n * can easily render over 10K datapoints with multiple lines smoothly.\n * This rendering mechanism does not support gaps in lines.\n */\n optimizeLargeData?: boolean;\n\n /**\n * The prop used to define the culture to localized the numbers\n */\n culture?: string;\n\n /**\n * @default false\n * The prop used to enable the perf optimization\n */\n enablePerfOptimization?: boolean;\n}\n\n/**\n * {@docCategory LineChart}\n */\nexport interface EventsAnnotationProps {\n events: EventAnnotation[];\n strokeColor?: string;\n labelColor?: string;\n labelHeight?: number;\n labelWidth?: number;\n mergedLabel: (count: number) => string;\n}\n\n/**\n * Line Chart styles\n * {@docCategory LineChart}\n */\nexport interface LineChartStyles extends CartesianChartStyles {}\n\n/**\n * Line Chart style properties\n * {@docCategory LineChart}\n */\nexport interface LineChartStyleProps extends CartesianChartStyleProps {}\n\n/**\n * {@docCategory LineChart}\n */\nexport interface ColorFillBarsProps {\n legend: string;\n color: string;\n data: ColorFillBarData[];\n applyPattern?: boolean;\n onLegendClick?: (selectedLegend: string | string[] | null) => void | undefined;\n}\n\n/**\n * {@docCategory LineChart}\n */\nexport interface ColorFillBarData {\n startX: number | Date;\n endX: number | Date;\n}\n"],"names":[],"rangeMappings":";;","mappings":"AAAA,uDAAuD,
|
|
1
|
+
{"version":3,"sources":["LineChart.types.ts"],"sourcesContent":["/* eslint-disable @typescript-eslint/naming-convention */\nimport { RenderFunction } from '../../utilities/index';\nimport {\n ChartProps,\n LineChartPoints,\n Margins,\n Basestate,\n RefArrayData,\n CustomizedCalloutData,\n} from '../../types/index';\nimport { EventAnnotation } from '../../types/EventAnnotation';\nimport {\n CartesianChartProps,\n CartesianChartStyleProps,\n CartesianChartStyles,\n ChildProps,\n} from '../CommonComponents/index';\n\nexport type { ChildProps, LineChartPoints, Margins, Basestate, RefArrayData };\n\n/**\n * Line Chart properties\n * {@docCategory LineChart}\n */\nexport interface LineChartProps extends CartesianChartProps {\n /**\n * Data to render in the chart.\n */\n data: ChartProps;\n\n /**\n * Call to provide customized styling that will layer on top of the variant rules.\n */\n styles?: LineChartStyles;\n\n /**\n * Show event annotation\n */\n eventAnnotationProps?: EventsAnnotationProps;\n\n /**\n * Define a custom callout renderer for a data point\n */\n onRenderCalloutPerDataPoint?: RenderFunction<CustomizedCalloutData>;\n\n /**\n * Define a custom callout renderer for a stack; default is to render per data point\n */\n onRenderCalloutPerStack?: RenderFunction<CustomizedCalloutData>;\n\n /**\n * Callback for getting callout description message\n */\n getCalloutDescriptionMessage?: (calloutDataProps: CustomizedCalloutData) => string | undefined;\n\n /*\n * Color fill bars for the chart,\n */\n colorFillBars?: ColorFillBarsProps[];\n\n /**\n * if this is set to true, then for each line there will be a unique shape assigned to the point,\n * there are total 8 shapes which are as follow circle, square, triangele, diamond, pyramid,\n * hexagon, pentagon and octagon, which will get assigned as respectively, if there are more\n * than 8 lines in the line chart then it will again start from cicle to octagon.\n * setting this flag to true will also change the behavior of the points, like for a\n * line, last point shape and first point shape will be visible all the times, and all\n * other points will get enlarge only when hovered over them\n * if set to false default shape will be circle, with the existing behavior\n * @default false\n */\n allowMultipleShapesForPoints?: boolean;\n\n /*\n * Optimize line chart rendering for large data set. If this prop is enabled, line chart\n * can easily render over 10K datapoints with multiple lines smoothly.\n * This rendering mechanism does not support gaps in lines.\n */\n optimizeLargeData?: boolean;\n\n /**\n * The prop used to define the culture to localized the numbers\n */\n culture?: string;\n\n /**\n * @default false\n * The prop used to enable the perf optimization\n */\n enablePerfOptimization?: boolean;\n}\n\n/**\n * {@docCategory LineChart}\n */\nexport interface EventsAnnotationProps {\n events: EventAnnotation[];\n strokeColor?: string;\n labelColor?: string;\n labelHeight?: number;\n labelWidth?: number;\n mergedLabel: (count: number) => string;\n}\n\n/**\n * Line Chart styles\n * {@docCategory LineChart}\n */\nexport interface LineChartStyles extends CartesianChartStyles {\n /**\n * styles for line border\n */\n lineBorder?: string;\n}\n\n/**\n * Line Chart style properties\n * {@docCategory LineChart}\n */\nexport interface LineChartStyleProps extends CartesianChartStyleProps {}\n\n/**\n * {@docCategory LineChart}\n */\nexport interface ColorFillBarsProps {\n legend: string;\n color: string;\n data: ColorFillBarData[];\n applyPattern?: boolean;\n onLegendClick?: (selectedLegend: string | string[] | null) => void | undefined;\n}\n\n/**\n * {@docCategory LineChart}\n */\nexport interface ColorFillBarData {\n startX: number | Date;\n endX: number | Date;\n}\n"],"names":[],"rangeMappings":";;","mappings":"AAAA,uDAAuD,GAoIvD;;CAEC,GACD,WAGC"}
|