UNPKG

datajunction-ui

Version:
1 lines 53.3 kB
{"version":3,"file":"LineChart-DiBufR9L.cjs","sources":["../node_modules/recharts/es6/shape/Dot.js","../node_modules/recharts/es6/component/ActivePoints.js","../node_modules/recharts/es6/state/selectors/lineSelectors.js","../node_modules/recharts/es6/cartesian/Line.js","../node_modules/recharts/es6/chart/LineChart.js"],"sourcesContent":["function _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }\n/**\n * @fileOverview Dot\n */\nimport * as React from 'react';\nimport { clsx } from 'clsx';\nimport { adaptEventHandlers } from '../util/types';\nimport { filterProps } from '../util/ReactUtils';\nexport var Dot = props => {\n var {\n cx,\n cy,\n r,\n className\n } = props;\n var layerClass = clsx('recharts-dot', className);\n if (cx === +cx && cy === +cy && r === +r) {\n return /*#__PURE__*/React.createElement(\"circle\", _extends({}, filterProps(props, false), adaptEventHandlers(props), {\n className: layerClass,\n cx: cx,\n cy: cy,\n r: r\n }));\n }\n return null;\n};","function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }\nfunction _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }\nfunction _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\nfunction _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\nfunction _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\nimport * as React from 'react';\nimport { cloneElement, isValidElement } from 'react';\nimport { adaptEventHandlers } from '../util/types';\nimport { filterProps } from '../util/ReactUtils';\nimport { Dot } from '../shape/Dot';\nimport { Layer } from '../container/Layer';\nimport { useTooltipAxis } from '../context/useTooltipAxis';\nimport { findEntryInArray, isNullish } from '../util/DataUtils';\nimport { useAppSelector } from '../state/hooks';\nimport { selectActiveLabel, selectActiveTooltipIndex } from '../state/selectors/tooltipSelectors';\nvar renderActivePoint = _ref => {\n var {\n point,\n childIndex,\n mainColor,\n activeDot,\n dataKey\n } = _ref;\n if (activeDot === false || point.x == null || point.y == null) {\n return null;\n }\n var dotProps = _objectSpread(_objectSpread({\n index: childIndex,\n dataKey,\n cx: point.x,\n cy: point.y,\n r: 4,\n fill: mainColor !== null && mainColor !== void 0 ? mainColor : 'none',\n strokeWidth: 2,\n stroke: '#fff',\n payload: point.payload,\n value: point.value\n }, filterProps(activeDot, false)), adaptEventHandlers(activeDot));\n var dot;\n if (/*#__PURE__*/isValidElement(activeDot)) {\n // @ts-expect-error element cloning does not have types\n dot = /*#__PURE__*/cloneElement(activeDot, dotProps);\n } else if (typeof activeDot === 'function') {\n dot = activeDot(dotProps);\n } else {\n dot = /*#__PURE__*/React.createElement(Dot, dotProps);\n }\n return /*#__PURE__*/React.createElement(Layer, {\n className: \"recharts-active-dot\"\n }, dot);\n};\nexport function ActivePoints(_ref2) {\n var {\n points,\n mainColor,\n activeDot,\n itemDataKey\n } = _ref2;\n var tooltipAxis = useTooltipAxis();\n var activeTooltipIndex = useAppSelector(selectActiveTooltipIndex);\n var activeLabel = useAppSelector(selectActiveLabel);\n if (!activeTooltipIndex) {\n return null;\n }\n var activePoint;\n var tooltipAxisDataKey = tooltipAxis.dataKey;\n if (tooltipAxisDataKey && !tooltipAxis.allowDuplicatedCategory) {\n var specifiedKey = typeof tooltipAxisDataKey === 'function' ? point => tooltipAxisDataKey(point.payload) : \"payload.\".concat(tooltipAxisDataKey);\n activePoint = findEntryInArray(points, specifiedKey, activeLabel);\n } else {\n activePoint = points === null || points === void 0 ? void 0 : points[Number(activeTooltipIndex)];\n }\n if (isNullish(activePoint)) {\n return null;\n }\n return renderActivePoint({\n point: activePoint,\n childIndex: Number(activeTooltipIndex),\n mainColor,\n dataKey: itemDataKey,\n activeDot\n });\n}","import { createSelector } from 'reselect';\nimport { computeLinePoints } from '../../cartesian/Line';\nimport { selectChartDataWithIndexesIfNotInPanorama } from './dataSelectors';\nimport { selectChartLayout } from '../../context/chartLayoutContext';\nimport { selectAxisWithScale, selectTicksOfGraphicalItem, selectUnfilteredCartesianItems } from './axisSelectors';\nimport { getBandSizeOfAxis, isCategoricalAxis } from '../../util/ChartUtils';\nvar selectXAxisWithScale = (state, xAxisId, _yAxisId, isPanorama) => selectAxisWithScale(state, 'xAxis', xAxisId, isPanorama);\nvar selectXAxisTicks = (state, xAxisId, _yAxisId, isPanorama) => selectTicksOfGraphicalItem(state, 'xAxis', xAxisId, isPanorama);\nvar selectYAxisWithScale = (state, _xAxisId, yAxisId, isPanorama) => selectAxisWithScale(state, 'yAxis', yAxisId, isPanorama);\nvar selectYAxisTicks = (state, _xAxisId, yAxisId, isPanorama) => selectTicksOfGraphicalItem(state, 'yAxis', yAxisId, isPanorama);\nvar selectBandSize = createSelector([selectChartLayout, selectXAxisWithScale, selectYAxisWithScale, selectXAxisTicks, selectYAxisTicks], (layout, xAxis, yAxis, xAxisTicks, yAxisTicks) => {\n if (isCategoricalAxis(layout, 'xAxis')) {\n return getBandSizeOfAxis(xAxis, xAxisTicks, false);\n }\n return getBandSizeOfAxis(yAxis, yAxisTicks, false);\n});\nvar pickLineSettings = (_state, _xAxisId, _yAxisId, _isPanorama, lineSettings) => lineSettings;\n\n/*\n * There is a race condition problem because we read some data from props and some from the state.\n * The state is updated through a dispatch and is one render behind,\n * and so we have this weird one tick render where the displayedData in one selector have the old dataKey\n * but the new dataKey in another selector.\n *\n * A proper fix is to either move everything into the state, or read the dataKey always from props\n * - but this is a smaller change.\n */\nvar selectSynchronisedLineSettings = createSelector([selectUnfilteredCartesianItems, pickLineSettings], (graphicalItems, lineSettingsFromProps) => {\n if (graphicalItems.some(cgis => cgis.type === 'line' && lineSettingsFromProps.dataKey === cgis.dataKey && lineSettingsFromProps.data === cgis.data)) {\n /*\n * now, at least one of the lines has the same dataKey as the one in props.\n * Is this a perfect match? Maybe not because we could theoretically have two different Lines with the same dataKey\n * and the same stackId and the same data but still different lines, yes,\n * but the chances of that happening are ... lowish.\n *\n * A proper fix would be to store the lineSettings in a state too, and compare references directly instead of enumerating the properties.\n */\n return lineSettingsFromProps;\n }\n return undefined;\n});\nexport var selectLinePoints = createSelector([selectChartLayout, selectXAxisWithScale, selectYAxisWithScale, selectXAxisTicks, selectYAxisTicks, selectSynchronisedLineSettings, selectBandSize, selectChartDataWithIndexesIfNotInPanorama], (layout, xAxis, yAxis, xAxisTicks, yAxisTicks, lineSettings, bandSize, _ref) => {\n var {\n chartData,\n dataStartIndex,\n dataEndIndex\n } = _ref;\n if (lineSettings == null || xAxis == null || yAxis == null || xAxisTicks == null || yAxisTicks == null || xAxisTicks.length === 0 || yAxisTicks.length === 0 || bandSize == null) {\n return undefined;\n }\n var {\n dataKey,\n data\n } = lineSettings;\n var displayedData;\n if (data != null && data.length > 0) {\n displayedData = data;\n } else {\n displayedData = chartData === null || chartData === void 0 ? void 0 : chartData.slice(dataStartIndex, dataEndIndex + 1);\n }\n if (displayedData == null) {\n return undefined;\n }\n return computeLinePoints({\n layout,\n xAxis,\n yAxis,\n xAxisTicks,\n yAxisTicks,\n dataKey,\n bandSize,\n displayedData\n });\n});","var _excluded = [\"type\", \"layout\", \"connectNulls\", \"needClip\"],\n _excluded2 = [\"activeDot\", \"animateNewValues\", \"animationBegin\", \"animationDuration\", \"animationEasing\", \"connectNulls\", \"dot\", \"hide\", \"isAnimationActive\", \"label\", \"legendType\", \"xAxisId\", \"yAxisId\"];\nfunction _objectWithoutProperties(e, t) { if (null == e) return {}; var o, r, i = _objectWithoutPropertiesLoose(e, t); if (Object.getOwnPropertySymbols) { var n = Object.getOwnPropertySymbols(e); for (r = 0; r < n.length; r++) o = n[r], -1 === t.indexOf(o) && {}.propertyIsEnumerable.call(e, o) && (i[o] = e[o]); } return i; }\nfunction _objectWithoutPropertiesLoose(r, e) { if (null == r) return {}; var t = {}; for (var n in r) if ({}.hasOwnProperty.call(r, n)) { if (-1 !== e.indexOf(n)) continue; t[n] = r[n]; } return t; }\nfunction ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }\nfunction _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }\nfunction _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\nfunction _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\nfunction _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\nfunction _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }\n// eslint-disable-next-line max-classes-per-file\nimport * as React from 'react';\nimport { Component, PureComponent, useCallback, useMemo, useRef, useState } from 'react';\nimport { clsx } from 'clsx';\nimport { Curve } from '../shape/Curve';\nimport { Dot } from '../shape/Dot';\nimport { Layer } from '../container/Layer';\nimport { LabelList } from '../component/LabelList';\nimport { SetErrorBarPreferredDirection } from './ErrorBar';\nimport { interpolateNumber, isNullish, uniqueId } from '../util/DataUtils';\nimport { filterProps, isClipDot } from '../util/ReactUtils';\nimport { Global } from '../util/Global';\nimport { getCateCoordinateOfLine, getTooltipNameProp, getValueByDataKey } from '../util/ChartUtils';\nimport { ActivePoints } from '../component/ActivePoints';\nimport { SetTooltipEntrySettings } from '../state/SetTooltipEntrySettings';\nimport { CartesianGraphicalItemContext, SetErrorBarContext } from '../context/CartesianGraphicalItemContext';\nimport { GraphicalItemClipPath, useNeedsClip } from './GraphicalItemClipPath';\nimport { useChartLayout, useOffset } from '../context/chartLayoutContext';\nimport { useIsPanorama } from '../context/PanoramaContext';\nimport { selectLinePoints } from '../state/selectors/lineSelectors';\nimport { useAppSelector } from '../state/hooks';\nimport { SetLegendPayload } from '../state/SetLegendPayload';\nimport { useAnimationId } from '../util/useAnimationId';\nimport { resolveDefaultProps } from '../util/resolveDefaultProps';\nimport { Animate } from '../animation/Animate';\n\n/**\n * Internal props, combination of external props + defaultProps + private Recharts state\n */\n\n/**\n * External props, intended for end users to fill in\n */\n\n/**\n * Because of naming conflict, we are forced to ignore certain (valid) SVG attributes.\n */\n\nvar computeLegendPayloadFromAreaData = props => {\n var {\n dataKey,\n name,\n stroke,\n legendType,\n hide\n } = props;\n return [{\n inactive: hide,\n dataKey,\n type: legendType,\n color: stroke,\n value: getTooltipNameProp(name, dataKey),\n payload: props\n }];\n};\nfunction getTooltipEntrySettings(props) {\n var {\n dataKey,\n data,\n stroke,\n strokeWidth,\n fill,\n name,\n hide,\n unit\n } = props;\n return {\n dataDefinedOnItem: data,\n positions: undefined,\n settings: {\n stroke,\n strokeWidth,\n fill,\n dataKey,\n nameKey: undefined,\n name: getTooltipNameProp(name, dataKey),\n hide,\n type: props.tooltipType,\n color: props.stroke,\n unit\n }\n };\n}\nvar generateSimpleStrokeDasharray = (totalLength, length) => {\n return \"\".concat(length, \"px \").concat(totalLength - length, \"px\");\n};\nfunction repeat(lines, count) {\n var linesUnit = lines.length % 2 !== 0 ? [...lines, 0] : lines;\n var result = [];\n for (var i = 0; i < count; ++i) {\n result = [...result, ...linesUnit];\n }\n return result;\n}\nvar getStrokeDasharray = (length, totalLength, lines) => {\n var lineLength = lines.reduce((pre, next) => pre + next);\n\n // if lineLength is 0 return the default when no strokeDasharray is provided\n if (!lineLength) {\n return generateSimpleStrokeDasharray(totalLength, length);\n }\n var count = Math.floor(length / lineLength);\n var remainLength = length % lineLength;\n var restLength = totalLength - length;\n var remainLines = [];\n for (var i = 0, sum = 0; i < lines.length; sum += lines[i], ++i) {\n if (sum + lines[i] > remainLength) {\n remainLines = [...lines.slice(0, i), remainLength - sum];\n break;\n }\n }\n var emptyLines = remainLines.length % 2 === 0 ? [0, restLength] : [restLength];\n return [...repeat(lines, count), ...remainLines, ...emptyLines].map(line => \"\".concat(line, \"px\")).join(', ');\n};\nfunction renderDotItem(option, props) {\n var dotItem;\n if (/*#__PURE__*/React.isValidElement(option)) {\n dotItem = /*#__PURE__*/React.cloneElement(option, props);\n } else if (typeof option === 'function') {\n dotItem = option(props);\n } else {\n var className = clsx('recharts-line-dot', typeof option !== 'boolean' ? option.className : '');\n dotItem = /*#__PURE__*/React.createElement(Dot, _extends({}, props, {\n className: className\n }));\n }\n return dotItem;\n}\nfunction shouldRenderDots(points, dot) {\n if (points == null) {\n return false;\n }\n if (dot) {\n return true;\n }\n return points.length === 1;\n}\nfunction Dots(_ref) {\n var {\n clipPathId,\n points,\n props\n } = _ref;\n var {\n dot,\n dataKey,\n needClip\n } = props;\n if (!shouldRenderDots(points, dot)) {\n return null;\n }\n var clipDot = isClipDot(dot);\n var lineProps = filterProps(props, false);\n var customDotProps = filterProps(dot, true);\n var dots = points.map((entry, i) => {\n var dotProps = _objectSpread(_objectSpread(_objectSpread({\n key: \"dot-\".concat(i),\n r: 3\n }, lineProps), customDotProps), {}, {\n index: i,\n cx: entry.x,\n cy: entry.y,\n dataKey,\n value: entry.value,\n payload: entry.payload,\n points\n });\n return renderDotItem(dot, dotProps);\n });\n var dotsProps = {\n clipPath: needClip ? \"url(#clipPath-\".concat(clipDot ? '' : 'dots-').concat(clipPathId, \")\") : null\n };\n return /*#__PURE__*/React.createElement(Layer, _extends({\n className: \"recharts-line-dots\",\n key: \"dots\"\n }, dotsProps), dots);\n}\nfunction StaticCurve(_ref2) {\n var {\n clipPathId,\n pathRef,\n points,\n strokeDasharray,\n props,\n showLabels\n } = _ref2;\n var {\n type,\n layout,\n connectNulls,\n needClip\n } = props,\n others = _objectWithoutProperties(props, _excluded);\n var curveProps = _objectSpread(_objectSpread({}, filterProps(others, true)), {}, {\n fill: 'none',\n className: 'recharts-line-curve',\n clipPath: needClip ? \"url(#clipPath-\".concat(clipPathId, \")\") : null,\n points,\n type,\n layout,\n connectNulls,\n strokeDasharray: strokeDasharray !== null && strokeDasharray !== void 0 ? strokeDasharray : props.strokeDasharray\n });\n return /*#__PURE__*/React.createElement(React.Fragment, null, (points === null || points === void 0 ? void 0 : points.length) > 1 && /*#__PURE__*/React.createElement(Curve, _extends({}, curveProps, {\n pathRef: pathRef\n })), /*#__PURE__*/React.createElement(Dots, {\n points: points,\n clipPathId: clipPathId,\n props: props\n }), showLabels && LabelList.renderCallByParent(props, points));\n}\nfunction getTotalLength(mainCurve) {\n try {\n return mainCurve && mainCurve.getTotalLength && mainCurve.getTotalLength() || 0;\n } catch (_unused) {\n return 0;\n }\n}\nfunction CurveWithAnimation(_ref3) {\n var {\n clipPathId,\n props,\n pathRef,\n previousPointsRef,\n longestAnimatedLengthRef\n } = _ref3;\n var {\n points,\n strokeDasharray,\n isAnimationActive,\n animationBegin,\n animationDuration,\n animationEasing,\n animateNewValues,\n width,\n height,\n onAnimationEnd,\n onAnimationStart\n } = props;\n var prevPoints = previousPointsRef.current;\n var animationId = useAnimationId(props, 'recharts-line-');\n var [isAnimating, setIsAnimating] = useState(false);\n var handleAnimationEnd = useCallback(() => {\n if (typeof onAnimationEnd === 'function') {\n onAnimationEnd();\n }\n setIsAnimating(false);\n }, [onAnimationEnd]);\n var handleAnimationStart = useCallback(() => {\n if (typeof onAnimationStart === 'function') {\n onAnimationStart();\n }\n setIsAnimating(true);\n }, [onAnimationStart]);\n var totalLength = getTotalLength(pathRef.current);\n /*\n * Here we want to detect if the length animation has been interrupted.\n * For that we keep a reference to the furthest length that has been animated.\n *\n * And then, to keep things smooth, we add to it the current length that is being animated right now.\n *\n * If we did Math.max then it makes the length animation \"pause\" but we want to keep it smooth\n * so in case we have some \"leftover\" length from the previous animation we add it to the current length.\n *\n * This is not perfect because the animation changes speed due to easing. The default easing is 'ease' which is not linear\n * and makes it stand out. But it's good enough I suppose.\n * If we want to fix it then we need to keep track of multiple animations and their easing and timings.\n *\n * If you want to see this in action, try to change the dataKey of the line chart while the initial animation is running.\n * The Line begins with zero length and slowly grows to the full length. While this growth is in progress,\n * change the dataKey and the Line will continue growing from where it has grown so far.\n */\n var startingPoint = longestAnimatedLengthRef.current;\n return /*#__PURE__*/React.createElement(Animate, {\n begin: animationBegin,\n duration: animationDuration,\n isActive: isAnimationActive,\n easing: animationEasing,\n from: {\n t: 0\n },\n to: {\n t: 1\n },\n onAnimationEnd: handleAnimationEnd,\n onAnimationStart: handleAnimationStart,\n key: animationId\n }, _ref4 => {\n var {\n t\n } = _ref4;\n var interpolator = interpolateNumber(startingPoint, totalLength + startingPoint);\n var curLength = Math.min(interpolator(t), totalLength);\n var currentStrokeDasharray;\n if (strokeDasharray) {\n var lines = \"\".concat(strokeDasharray).split(/[,\\s]+/gim).map(num => parseFloat(num));\n currentStrokeDasharray = getStrokeDasharray(curLength, totalLength, lines);\n } else {\n currentStrokeDasharray = generateSimpleStrokeDasharray(totalLength, curLength);\n }\n if (prevPoints) {\n var prevPointsDiffFactor = prevPoints.length / points.length;\n var stepData = t === 1 ? points : points.map((entry, index) => {\n var prevPointIndex = Math.floor(index * prevPointsDiffFactor);\n if (prevPoints[prevPointIndex]) {\n var prev = prevPoints[prevPointIndex];\n var interpolatorX = interpolateNumber(prev.x, entry.x);\n var interpolatorY = interpolateNumber(prev.y, entry.y);\n return _objectSpread(_objectSpread({}, entry), {}, {\n x: interpolatorX(t),\n y: interpolatorY(t)\n });\n }\n\n // magic number of faking previous x and y location\n if (animateNewValues) {\n var _interpolatorX = interpolateNumber(width * 2, entry.x);\n var _interpolatorY = interpolateNumber(height / 2, entry.y);\n return _objectSpread(_objectSpread({}, entry), {}, {\n x: _interpolatorX(t),\n y: _interpolatorY(t)\n });\n }\n return _objectSpread(_objectSpread({}, entry), {}, {\n x: entry.x,\n y: entry.y\n });\n });\n // eslint-disable-next-line no-param-reassign\n previousPointsRef.current = stepData;\n return /*#__PURE__*/React.createElement(StaticCurve, {\n props: props,\n points: stepData,\n clipPathId: clipPathId,\n pathRef: pathRef,\n showLabels: !isAnimating,\n strokeDasharray: currentStrokeDasharray\n });\n }\n\n /*\n * Here it is important to wait a little bit with updating the previousPointsRef\n * before the animation has a time to initialize.\n * If we set the previous pointsRef immediately, we set it before the Legend height it calculated\n * and before pathRef is set.\n * If that happens, the Line will re-render again after Legend had reported its height\n * which will start a new animation with the previous points as the starting point\n * which gives the effect of the Line animating slightly upwards (where the animation distance equals the Legend height).\n * Waiting for t > 0 is indirect but good enough to ensure that the Legend height is calculated and animation works properly.\n *\n * Total length similarly is calculated from the pathRef. We should not update the previousPointsRef\n * before the pathRef is set, otherwise we will have a wrong total length.\n */\n if (t > 0 && totalLength > 0) {\n // eslint-disable-next-line no-param-reassign\n previousPointsRef.current = points;\n /*\n * totalLength is set from a ref and is not updated in the first tick of the animation.\n * It defaults to zero which is exactly what we want here because we want to grow from zero,\n * however the same happens when the data change.\n *\n * In that case we want to remember the previous length and continue from there, and only animate the shape.\n *\n * Therefore the totalLength > 0 check.\n *\n * The Animate is about to fire handleAnimationStart which will update the state\n * and cause a re-render and read a new proper totalLength which will be used in the next tick\n * and update the longestAnimatedLengthRef.\n */\n // eslint-disable-next-line no-param-reassign\n longestAnimatedLengthRef.current = curLength;\n }\n return /*#__PURE__*/React.createElement(StaticCurve, {\n props: props,\n points: points,\n clipPathId: clipPathId,\n pathRef: pathRef,\n showLabels: !isAnimating,\n strokeDasharray: currentStrokeDasharray\n });\n });\n}\nfunction RenderCurve(_ref5) {\n var {\n clipPathId,\n props\n } = _ref5;\n var {\n points,\n isAnimationActive\n } = props;\n var previousPointsRef = useRef(null);\n var longestAnimatedLengthRef = useRef(0);\n var pathRef = useRef(null);\n var prevPoints = previousPointsRef.current;\n if (isAnimationActive && points && points.length && prevPoints !== points) {\n return /*#__PURE__*/React.createElement(CurveWithAnimation, {\n props: props,\n clipPathId: clipPathId,\n previousPointsRef: previousPointsRef,\n longestAnimatedLengthRef: longestAnimatedLengthRef,\n pathRef: pathRef\n });\n }\n return /*#__PURE__*/React.createElement(StaticCurve, {\n props: props,\n points: points,\n clipPathId: clipPathId,\n pathRef: pathRef,\n showLabels: true\n });\n}\nvar errorBarDataPointFormatter = (dataPoint, dataKey) => {\n return {\n x: dataPoint.x,\n y: dataPoint.y,\n value: dataPoint.value,\n // @ts-expect-error getValueByDataKey does not validate the output type\n errorVal: getValueByDataKey(dataPoint.payload, dataKey)\n };\n};\nclass LineWithState extends Component {\n constructor() {\n super(...arguments);\n _defineProperty(this, \"id\", uniqueId('recharts-line-'));\n }\n render() {\n var _filterProps;\n var {\n hide,\n dot,\n points,\n className,\n xAxisId,\n yAxisId,\n top,\n left,\n width,\n height,\n id,\n needClip,\n layout\n } = this.props;\n if (hide) {\n return null;\n }\n var layerClass = clsx('recharts-line', className);\n var clipPathId = isNullish(id) ? this.id : id;\n var {\n r = 3,\n strokeWidth = 2\n } = (_filterProps = filterProps(dot, false)) !== null && _filterProps !== void 0 ? _filterProps : {\n r: 3,\n strokeWidth: 2\n };\n var clipDot = isClipDot(dot);\n var dotSize = r * 2 + strokeWidth;\n return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(Layer, {\n className: layerClass\n }, needClip && /*#__PURE__*/React.createElement(\"defs\", null, /*#__PURE__*/React.createElement(GraphicalItemClipPath, {\n clipPathId: clipPathId,\n xAxisId: xAxisId,\n yAxisId: yAxisId\n }), !clipDot && /*#__PURE__*/React.createElement(\"clipPath\", {\n id: \"clipPath-dots-\".concat(clipPathId)\n }, /*#__PURE__*/React.createElement(\"rect\", {\n x: left - dotSize / 2,\n y: top - dotSize / 2,\n width: width + dotSize,\n height: height + dotSize\n }))), /*#__PURE__*/React.createElement(RenderCurve, {\n props: this.props,\n clipPathId: clipPathId\n }), /*#__PURE__*/React.createElement(SetErrorBarPreferredDirection, {\n direction: layout === 'horizontal' ? 'y' : 'x'\n }, /*#__PURE__*/React.createElement(SetErrorBarContext, {\n xAxisId: xAxisId,\n yAxisId: yAxisId,\n data: points,\n dataPointFormatter: errorBarDataPointFormatter,\n errorBarOffset: 0\n }, this.props.children))), /*#__PURE__*/React.createElement(ActivePoints, {\n activeDot: this.props.activeDot,\n points: points,\n mainColor: this.props.stroke,\n itemDataKey: this.props.dataKey\n }));\n }\n}\nvar defaultLineProps = {\n activeDot: true,\n animateNewValues: true,\n animationBegin: 0,\n animationDuration: 1500,\n animationEasing: 'ease',\n connectNulls: false,\n dot: true,\n fill: '#fff',\n hide: false,\n isAnimationActive: !Global.isSsr,\n label: false,\n legendType: 'line',\n stroke: '#3182bd',\n strokeWidth: 1,\n xAxisId: 0,\n yAxisId: 0\n};\nfunction LineImpl(props) {\n var _resolveDefaultProps = resolveDefaultProps(props, defaultLineProps),\n {\n activeDot,\n animateNewValues,\n animationBegin,\n animationDuration,\n animationEasing,\n connectNulls,\n dot,\n hide,\n isAnimationActive,\n label,\n legendType,\n xAxisId,\n yAxisId\n } = _resolveDefaultProps,\n everythingElse = _objectWithoutProperties(_resolveDefaultProps, _excluded2);\n var {\n needClip\n } = useNeedsClip(xAxisId, yAxisId);\n var {\n height,\n width,\n left,\n top\n } = useOffset();\n var layout = useChartLayout();\n var isPanorama = useIsPanorama();\n var lineSettings = useMemo(() => ({\n dataKey: props.dataKey,\n data: props.data\n }), [props.dataKey, props.data]);\n var points = useAppSelector(state => selectLinePoints(state, xAxisId, yAxisId, isPanorama, lineSettings));\n if (layout !== 'horizontal' && layout !== 'vertical') {\n // Cannot render Line in an unsupported layout\n return null;\n }\n return /*#__PURE__*/React.createElement(LineWithState, _extends({}, everythingElse, {\n connectNulls: connectNulls,\n dot: dot,\n activeDot: activeDot,\n animateNewValues: animateNewValues,\n animationBegin: animationBegin,\n animationDuration: animationDuration,\n animationEasing: animationEasing,\n isAnimationActive: isAnimationActive,\n hide: hide,\n label: label,\n legendType: legendType,\n xAxisId: xAxisId,\n yAxisId: yAxisId,\n points: points,\n layout: layout,\n height: height,\n width: width,\n left: left,\n top: top,\n needClip: needClip\n }));\n}\nexport function computeLinePoints(_ref6) {\n var {\n layout,\n xAxis,\n yAxis,\n xAxisTicks,\n yAxisTicks,\n dataKey,\n bandSize,\n displayedData\n } = _ref6;\n return displayedData.map((entry, index) => {\n // @ts-expect-error getValueByDataKey does not validate the output type\n var value = getValueByDataKey(entry, dataKey);\n if (layout === 'horizontal') {\n return {\n x: getCateCoordinateOfLine({\n axis: xAxis,\n ticks: xAxisTicks,\n bandSize,\n entry,\n index\n }),\n y: isNullish(value) ? null : yAxis.scale(value),\n value,\n payload: entry\n };\n }\n return {\n x: isNullish(value) ? null : xAxis.scale(value),\n y: getCateCoordinateOfLine({\n axis: yAxis,\n ticks: yAxisTicks,\n bandSize,\n entry,\n index\n }),\n value,\n payload: entry\n };\n });\n}\nexport class Line extends PureComponent {\n render() {\n // Report all props to Redux store first, before calling any hooks, to avoid circular dependencies.\n return /*#__PURE__*/React.createElement(CartesianGraphicalItemContext, {\n type: \"line\",\n data: this.props.data,\n xAxisId: this.props.xAxisId,\n yAxisId: this.props.yAxisId,\n zAxisId: 0,\n dataKey: this.props.dataKey\n // line doesn't stack\n ,\n stackId: undefined,\n hide: this.props.hide,\n barSize: undefined\n }, /*#__PURE__*/React.createElement(SetLegendPayload, {\n legendPayload: computeLegendPayloadFromAreaData(this.props)\n }), /*#__PURE__*/React.createElement(SetTooltipEntrySettings, {\n fn: getTooltipEntrySettings,\n args: this.props\n }), /*#__PURE__*/React.createElement(LineImpl, this.props));\n }\n}\n_defineProperty(Line, \"displayName\", 'Line');\n_defineProperty(Line, \"defaultProps\", defaultLineProps);","import * as React from 'react';\nimport { forwardRef } from 'react';\nimport { arrayTooltipSearcher } from '../state/optionsSlice';\nimport { CartesianChart } from './CartesianChart';\nvar allowedTooltipTypes = ['axis'];\nexport var LineChart = /*#__PURE__*/forwardRef((props, ref) => {\n return /*#__PURE__*/React.createElement(CartesianChart, {\n chartName: \"LineChart\",\n defaultTooltipEventType: \"axis\",\n validateTooltipEventTypes: allowedTooltipTypes,\n tooltipPayloadSearcher: arrayTooltipSearcher,\n categoricalChartProps: props,\n ref: ref\n });\n});"],"names":["_extends","n","e","t","r","Dot","props","cx","cy","className","layerClass","clsx","React","filterProps","adaptEventHandlers","ownKeys","o","_objectSpread","_defineProperty","_toPropertyKey","i","_toPrimitive","renderActivePoint","_ref","point","childIndex","mainColor","activeDot","dataKey","dotProps","dot","isValidElement","cloneElement","Layer","ActivePoints","_ref2","points","itemDataKey","tooltipAxis","useTooltipAxis","activeTooltipIndex","useAppSelector","selectActiveTooltipIndex","activeLabel","selectActiveLabel","activePoint","tooltipAxisDataKey","specifiedKey","findEntryInArray","isNullish","selectXAxisWithScale","state","xAxisId","_yAxisId","isPanorama","selectAxisWithScale","selectXAxisTicks","selectTicksOfGraphicalItem","selectYAxisWithScale","_xAxisId","yAxisId","selectYAxisTicks","selectBandSize","createSelector","selectChartLayout","layout","xAxis","yAxis","xAxisTicks","yAxisTicks","isCategoricalAxis","getBandSizeOfAxis","pickLineSettings","_state","_isPanorama","lineSettings","selectSynchronisedLineSettings","selectUnfilteredCartesianItems","graphicalItems","lineSettingsFromProps","cgis","selectLinePoints","selectChartDataWithIndexesIfNotInPanorama","bandSize","chartData","dataStartIndex","dataEndIndex","data","displayedData","computeLinePoints","_excluded","_excluded2","_objectWithoutProperties","_objectWithoutPropertiesLoose","computeLegendPayloadFromAreaData","name","stroke","legendType","hide","getTooltipNameProp","getTooltipEntrySettings","strokeWidth","fill","unit","generateSimpleStrokeDasharray","totalLength","length","repeat","lines","count","linesUnit","result","getStrokeDasharray","lineLength","pre","next","remainLength","restLength","remainLines","sum","emptyLines","line","renderDotItem","option","dotItem","shouldRenderDots","Dots","clipPathId","needClip","clipDot","isClipDot","lineProps","customDotProps","dots","entry","dotsProps","StaticCurve","pathRef","strokeDasharray","showLabels","type","connectNulls","others","curveProps","Curve","LabelList","getTotalLength","mainCurve","CurveWithAnimation","_ref3","previousPointsRef","longestAnimatedLengthRef","isAnimationActive","animationBegin","animationDuration","animationEasing","animateNewValues","width","height","onAnimationEnd","onAnimationStart","prevPoints","animationId","useAnimationId","isAnimating","setIsAnimating","useState","handleAnimationEnd","useCallback","handleAnimationStart","startingPoint","Animate","_ref4","interpolator","interpolateNumber","curLength","currentStrokeDasharray","num","prevPointsDiffFactor","stepData","index","prevPointIndex","prev","interpolatorX","interpolatorY","_interpolatorX","_interpolatorY","RenderCurve","_ref5","useRef","errorBarDataPointFormatter","dataPoint","getValueByDataKey","LineWithState","Component","uniqueId","_filterProps","top","left","id","dotSize","GraphicalItemClipPath","SetErrorBarPreferredDirection","SetErrorBarContext","defaultLineProps","Global","LineImpl","_resolveDefaultProps","resolveDefaultProps","label","everythingElse","useNeedsClip","useOffset","useChartLayout","useIsPanorama","useMemo","_ref6","value","getCateCoordinateOfLine","Line","PureComponent","CartesianGraphicalItemContext","SetLegendPayload","SetTooltipEntrySettings","allowedTooltipTypes","LineChart","forwardRef","ref","CartesianChart","arrayTooltipSearcher"],"mappings":"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