@octanejs/recharts 0.1.41 → 0.1.42
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/{LICENSE → LICENSE.recharts} +3 -2
- package/README.md +12 -0
- package/package.json +10 -9
- package/src/animation/AnimatedItems.tsrx +36 -3
- package/src/animation/AnimationController.ts +17 -65
- package/src/animation/{AnimationControllerImpl.js → AnimationControllerImpl.ts} +19 -12
- package/src/animation/{AnimationHandle.js → AnimationHandle.ts} +82 -65
- package/src/animation/CSSTransitionAnimate.tsrx +3 -2
- package/src/animation/JavascriptAnimate.tsrx +18 -2
- package/src/animation/easing.ts +235 -0
- package/src/animation/{matchBy.js → matchBy.ts} +76 -120
- package/src/animation/timeoutController.ts +71 -0
- package/src/animation/useAnimationController.ts +4 -1
- package/src/animation/useAnimationStartSnapshot.ts +3 -3
- package/src/animation/util.ts +12 -0
- package/src/cartesian/Area.tsrx +33 -31
- package/src/cartesian/AreaRevealShape.tsrx +4 -3
- package/src/cartesian/Bar.ts +1 -0
- package/src/cartesian/Bar.tsrx +293 -39
- package/src/cartesian/BarStack.tsrx +31 -9
- package/src/cartesian/CartesianAxis.tsrx +154 -22
- package/src/cartesian/CartesianGrid.tsrx +5 -6
- package/src/cartesian/ErrorBar.tsrx +9 -8
- package/src/cartesian/Funnel.tsrx +40 -37
- package/src/cartesian/GraphicalItemClipPath.tsrx +11 -4
- package/src/cartesian/Line.ts +1 -0
- package/src/cartesian/Line.tsrx +206 -28
- package/src/cartesian/LineDrawShape.tsrx +23 -10
- package/src/cartesian/ReferenceLine.tsrx +8 -8
- package/src/cartesian/Scatter.tsrx +61 -66
- package/src/cartesian/XAxis.tsrx +78 -9
- package/src/cartesian/YAxis.tsrx +85 -12
- package/src/cartesian/getCartesianPosition.ts +265 -0
- package/src/cartesian/getEquidistantTicks.ts +144 -0
- package/src/cartesian/getTicks.ts +221 -0
- package/src/chart/AreaChart.tsrx +5 -1
- package/src/chart/BarChart.tsrx +8 -2
- package/src/chart/CartesianChart.tsrx +17 -4
- package/src/chart/CategoricalChart.tsrx +4 -1
- package/src/chart/ComposedChart.tsrx +5 -1
- package/src/chart/FunnelChart.tsrx +5 -1
- package/src/chart/LineChart.tsrx +8 -2
- package/src/chart/PieChart.tsrx +6 -2
- package/src/chart/PolarChart.tsrx +5 -4
- package/src/chart/RadarChart.tsrx +6 -2
- package/src/chart/RadialBarChart.tsrx +6 -2
- package/src/chart/RechartsWrapper.tsrx +57 -21
- package/src/chart/Sankey.tsrx +89 -91
- package/src/chart/ScatterChart.tsrx +5 -1
- package/src/chart/SunburstChart.tsrx +21 -14
- package/src/chart/types.ts +0 -1
- package/src/component/ActivePoints.tsrx +30 -5
- package/src/component/Cell.ts +19 -1
- package/src/component/Cursor.tsrx +11 -10
- package/src/component/DefaultLegendContent.tsrx +15 -10
- package/src/component/DefaultTooltipContent.tsrx +11 -9
- package/src/component/Dots.tsrx +37 -6
- package/src/component/Label.tsrx +99 -19
- package/src/component/LabelList.tsrx +54 -5
- package/src/component/Legend.tsrx +9 -5
- package/src/component/ResponsiveContainer.tsrx +13 -10
- package/src/component/Text.tsrx +95 -32
- package/src/component/Tooltip.tsrx +11 -10
- package/src/component/TooltipBoundingBox.tsrx +4 -5
- package/src/component/{responsiveContainerUtils.js → responsiveContainerUtils.ts} +59 -36
- package/src/container/ClipPathProvider.tsrx +6 -2
- package/src/container/Layer.tsrx +8 -1
- package/src/container/RootSurface.tsrx +15 -4
- package/src/container/Surface.tsrx +15 -1
- package/src/context/CellsContext.ts +6 -5
- package/src/context/ErrorBarContext.tsrx +23 -4
- package/src/context/RegisterGraphicalItemId.tsrx +10 -2
- package/src/context/accessibilityContext.ts +5 -0
- package/src/context/brushUpdateContext.ts +11 -0
- package/src/context/chartDataContext.ts +5 -4
- package/src/context/chartLayoutContext.ts +22 -8
- package/src/context/legendPayloadContext.tsrx +1 -1
- package/src/context/tooltipContext.ts +83 -0
- package/src/{hooks.js → hooks.ts} +88 -66
- package/src/index.ts +37 -37
- package/src/legacy-props.ts +129 -0
- package/src/polar/Pie.tsrx +91 -69
- package/src/polar/PolarAngleAxis.tsrx +47 -47
- package/src/polar/PolarGrid.tsrx +7 -6
- package/src/polar/PolarRadiusAxis.tsrx +29 -21
- package/src/polar/Radar.tsrx +26 -19
- package/src/polar/RadialBar.tsrx +59 -42
- package/src/polar/{defaultPolarAngleAxisProps.js → defaultPolarAngleAxisProps.ts} +6 -6
- package/src/polar/{defaultPolarRadiusAxisProps.js → defaultPolarRadiusAxisProps.ts} +5 -4
- package/src/shape/Cross.tsrx +14 -2
- package/src/shape/Curve.tsrx +111 -23
- package/src/shape/Dot.tsrx +12 -1
- package/src/shape/Polygon.tsrx +28 -6
- package/src/shape/Rectangle.tsrx +30 -3
- package/src/shape/Sector.tsrx +48 -6
- package/src/shape/Symbols.tsrx +24 -6
- package/src/shape/Trapezoid.tsrx +33 -3
- package/src/state/RechartsStoreProvider.tsrx +11 -2
- package/src/state/ReportChartProps.ts +2 -2
- package/src/state/ReportMainChartProps.ts +2 -1
- package/src/state/SetGraphicalItem.ts +6 -4
- package/src/state/SetLegendPayload.ts +7 -4
- package/src/state/SetTooltipEntrySettings.ts +5 -2
- package/src/state/brushSlice.ts +40 -0
- package/src/state/cartesianAxisSlice.ts +291 -0
- package/src/state/chartDataSlice.ts +87 -0
- package/src/state/errorBarSlice.ts +78 -0
- package/src/state/eventSettingsSlice.ts +30 -0
- package/src/state/{externalEventsMiddleware.js → externalEventsMiddleware.ts} +55 -34
- package/src/state/graphicalItemsSlice.ts +180 -0
- package/src/state/{keyboardEventsMiddleware.js → keyboardEventsMiddleware.ts} +72 -57
- package/src/state/layoutSlice.ts +50 -0
- package/src/state/legendSlice.ts +109 -0
- package/src/state/{mouseEventsMiddleware.js → mouseEventsMiddleware.ts} +45 -35
- package/src/state/optionsSlice.ts +65 -0
- package/src/state/polarAxisSlice.ts +42 -0
- package/src/state/polarOptionsSlice.ts +43 -0
- package/src/state/reduxDevtoolsJsonStringifyReplacer.ts +13 -0
- package/src/state/referenceElementsSlice.ts +100 -0
- package/src/state/renderedTicksSlice.ts +60 -0
- package/src/state/rootPropsSlice.ts +72 -0
- package/src/state/selectors/areaSelectors.ts +1 -2
- package/src/state/selectors/{arrayEqualityCheck.js → arrayEqualityCheck.ts} +4 -5
- package/src/state/selectors/axisSelectors.ts +2502 -0
- package/src/state/selectors/barSelectors.ts +373 -0
- package/src/state/selectors/barStackSelectors.ts +99 -0
- package/src/state/selectors/brushSelectors.ts +28 -0
- package/src/state/selectors/combiners/combineActiveLabel.ts +16 -0
- package/src/state/selectors/combiners/{combineActiveTooltipIndex.js → combineActiveTooltipIndex.ts} +45 -23
- package/src/state/selectors/combiners/combineAllBarPositions.ts +130 -0
- package/src/state/selectors/combiners/combineAxisRangeWithReverse.ts +16 -0
- package/src/state/selectors/combiners/combineBarPosition.ts +23 -0
- package/src/state/selectors/combiners/combineBarSizeList.ts +79 -0
- package/src/state/selectors/combiners/{combineCheckedDomain.js → combineCheckedDomain.ts} +9 -6
- package/src/state/selectors/combiners/combineConfiguredScale.ts +100 -0
- package/src/state/selectors/combiners/combineCoordinateForDefaultIndex.ts +46 -0
- package/src/state/selectors/combiners/{combineDisplayedStackedData.js → combineDisplayedStackedData.ts} +23 -19
- package/src/state/selectors/combiners/combineInverseScaleFunction.ts +16 -0
- package/src/state/selectors/combiners/{combineRealScaleType.js → combineRealScaleType.ts} +16 -8
- package/src/state/selectors/combiners/combineStackedData.ts +27 -0
- package/src/state/selectors/combiners/combineTooltipInteractionState.ts +86 -0
- package/src/state/selectors/combiners/combineTooltipPayload.ts +201 -0
- package/src/state/selectors/combiners/{combineTooltipPayloadConfigurations.js → combineTooltipPayloadConfigurations.ts} +17 -18
- package/src/state/selectors/containerSelectors.ts +12 -0
- package/src/state/selectors/{dataSelectors.js → dataSelectors.ts} +43 -41
- package/src/state/selectors/funnelSelectors.ts +5 -5
- package/src/state/selectors/graphicalItemSelectors.ts +22 -0
- package/src/state/selectors/legendSelectors.ts +25 -0
- package/src/state/selectors/lineSelectors.ts +159 -0
- package/src/state/selectors/numberDomainEqualityCheck.ts +15 -0
- package/src/state/selectors/pickAxisId.ts +6 -0
- package/src/state/selectors/pickAxisType.ts +4 -0
- package/src/state/selectors/pieSelectors.ts +14 -13
- package/src/state/selectors/polarAxisSelectors.ts +223 -0
- package/src/state/selectors/polarSelectors.ts +1 -1
- package/src/state/selectors/radarSelectors.ts +1 -1
- package/src/state/selectors/radialBarSelectors.ts +17 -16
- package/src/state/selectors/rootPropsSelectors.ts +26 -0
- package/src/state/selectors/scatterSelectors.ts +11 -10
- package/src/state/selectors/{selectActivePropsFromChartPointer.js → selectActivePropsFromChartPointer.ts} +11 -4
- package/src/state/selectors/selectAllAxes.ts +20 -0
- package/src/state/selectors/selectChartOffset.ts +17 -0
- package/src/state/selectors/selectChartOffsetInternal.ts +147 -0
- package/src/state/selectors/{selectPlotArea.js → selectPlotArea.ts} +4 -3
- package/src/state/selectors/selectTooltipAxisId.ts +6 -0
- package/src/state/selectors/{selectTooltipAxisType.js → selectTooltipAxisType.ts} +10 -4
- package/src/state/selectors/selectTooltipEventType.ts +39 -0
- package/src/state/selectors/selectTooltipPayloadSearcher.ts +6 -0
- package/src/state/selectors/selectTooltipSettings.ts +6 -0
- package/src/state/selectors/selectTooltipState.ts +5 -0
- package/src/state/selectors/selectors.ts +315 -0
- package/src/state/selectors/tooltipSelectors.ts +611 -0
- package/src/state/selectors/touchSelectors.ts +52 -0
- package/src/state/{store.js → store.ts} +46 -36
- package/src/state/tooltipSlice.ts +507 -0
- package/src/state/{touchEventsMiddleware.js → touchEventsMiddleware.ts} +54 -42
- package/src/state/types/AreaSettings.ts +15 -0
- package/src/state/types/BarSettings.ts +15 -0
- package/src/state/types/LineSettings.ts +10 -0
- package/src/state/types/PieSettings.ts +32 -0
- package/src/state/types/RadarSettings.ts +6 -0
- package/src/state/types/RadialBarSettings.ts +10 -0
- package/src/state/types/ScatterSettings.ts +13 -0
- package/src/state/types/StackedGraphicalItem.ts +34 -0
- package/src/state/zIndexSlice.ts +137 -0
- package/src/synchronisation/syncSelectors.ts +7 -0
- package/src/synchronisation/types.ts +42 -0
- package/src/synchronisation/useChartSynchronisation.tsrx +26 -11
- package/src/types.ts +55 -0
- package/src/util/ActiveShapeUtils.tsrx +34 -10
- package/src/util/BarUtils.tsrx +43 -3
- package/src/util/{CartesianUtils.js → CartesianUtils.ts} +22 -39
- package/src/util/ChartUtils.ts +759 -0
- package/src/util/{Constants.js → Constants.ts} +6 -6
- package/src/util/DOMUtils.ts +135 -0
- package/src/util/{DataUtils.js → DataUtils.ts} +120 -47
- package/src/util/Events.ts +22 -0
- package/src/util/FunnelUtils.tsrx +3 -3
- package/src/util/Global.ts +13 -0
- package/src/util/IfOverflow.ts +16 -0
- package/src/util/LRUCache.ts +42 -0
- package/src/util/{LogUtils.js → LogUtils.ts} +7 -12
- package/src/util/OctaneTypes.ts +51 -0
- package/src/util/PolarUtils.ts +132 -0
- package/src/util/RadialBarUtils.tsrx +3 -3
- package/src/util/ReduceCSSCalc.ts +186 -0
- package/src/util/ScatterUtils.tsrx +9 -7
- package/src/util/{TickUtils.js → TickUtils.ts} +30 -13
- package/src/util/{YAxisUtils.js → YAxisUtils.ts} +27 -17
- package/src/util/axisPropsAreEqual.ts +49 -0
- package/src/util/createEventProxy.ts +20 -0
- package/src/util/{excludeEventProps.js → excludeEventProps.ts} +8 -6
- package/src/util/getActiveCoordinate.ts +210 -0
- package/src/util/{getAxisTypeBasedOnLayout.js → getAxisTypeBasedOnLayout.ts} +7 -3
- package/src/util/getClassNameFromUnknown.ts +7 -0
- package/src/util/{getEveryNth.js → getEveryNth.ts} +5 -6
- package/src/util/getRadiusAndStrokeWidthFromDot.ts +31 -0
- package/src/util/{getRelativeCoordinate.js → getRelativeCoordinate.ts} +26 -9
- package/src/util/getSliced.ts +14 -0
- package/src/util/{isDomainSpecifiedByUser.js → isDomainSpecifiedByUser.ts} +46 -100
- package/src/util/isWellBehavedNumber.ts +8 -0
- package/src/util/payload/getUniqPayload.ts +1 -1
- package/src/util/{propsAreEqual.js → propsAreEqual.ts} +10 -8
- package/src/util/{resolveDefaultProps.js → resolveDefaultProps.ts} +35 -57
- package/src/util/round.ts +33 -0
- package/src/util/scale/CustomScaleDefinition.ts +82 -0
- package/src/util/scale/RechartsScale.ts +131 -0
- package/src/util/scale/{createCategoricalInverse.js → createCategoricalInverse.ts} +24 -29
- package/src/util/scale/{getNiceTickValues.js → getNiceTickValues.ts} +125 -146
- package/src/util/scale/index.ts +2 -0
- package/src/util/scale/util/{arithmetic.js → arithmetic.ts} +12 -8
- package/src/util/stacks/getStackSeriesIdentifier.ts +21 -0
- package/src/util/stacks/stackTypes.ts +58 -0
- package/src/util/{svgPropertiesNoEvents.js → svgPropertiesNoEvents.ts} +52 -27
- package/src/util/tooltip/translate.ts +2 -1
- package/src/util/typedDataKey.ts +49 -0
- package/src/util/types.ts +1265 -7
- package/src/util/{useUniqueId.js → useUniqueId.ts} +9 -5
- package/src/zIndex/{DefaultZIndexes.js → DefaultZIndexes.ts} +13 -4
- package/src/zIndex/ZIndexLayer.tsrx +13 -4
- package/src/zIndex/ZIndexPortal.tsrx +14 -4
- package/src/zIndex/{getZIndexFromUnknown.js → getZIndexFromUnknown.ts} +3 -3
- package/src/zIndex/{zIndexSelectors.js → zIndexSelectors.ts} +17 -11
- package/src/animation/easing.js +0 -193
- package/src/animation/timeoutController.js +0 -49
- package/src/animation/util.js +0 -11
- package/src/cartesian/Area.tsrx.d.ts +0 -340
- package/src/cartesian/Bar.tsrx.d.ts +0 -4
- package/src/cartesian/BarStack.tsrx.d.ts +0 -6
- package/src/cartesian/CartesianAxis.tsrx.d.ts +0 -3
- package/src/cartesian/CartesianGrid.tsrx.d.ts +0 -219
- package/src/cartesian/ErrorBar.tsrx.d.ts +0 -131
- package/src/cartesian/Funnel.tsrx.d.ts +0 -274
- package/src/cartesian/Line.tsrx.d.ts +0 -4
- package/src/cartesian/LineDrawShape.tsrx.d.ts +0 -2
- package/src/cartesian/ReferenceLine.tsrx.d.ts +0 -178
- package/src/cartesian/Scatter.tsrx.d.ts +0 -351
- package/src/cartesian/XAxis.tsrx.d.ts +0 -3
- package/src/cartesian/YAxis.tsrx.d.ts +0 -3
- package/src/cartesian/ZAxis.tsrx.d.ts +0 -102
- package/src/cartesian/getCartesianPosition.js +0 -277
- package/src/cartesian/getEquidistantTicks.js +0 -133
- package/src/cartesian/getTicks.js +0 -280
- package/src/chart/AreaChart.tsrx.d.ts +0 -12
- package/src/chart/BarChart.tsrx.d.ts +0 -2
- package/src/chart/CartesianChart.tsrx.d.ts +0 -10
- package/src/chart/ComposedChart.tsrx.d.ts +0 -12
- package/src/chart/FunnelChart.tsrx.d.ts +0 -12
- package/src/chart/LineChart.tsrx.d.ts +0 -2
- package/src/chart/PieChart.tsrx.d.ts +0 -31
- package/src/chart/RadarChart.tsrx.d.ts +0 -31
- package/src/chart/RadialBarChart.tsrx.d.ts +0 -31
- package/src/chart/Sankey.tsrx.d.ts +0 -253
- package/src/chart/ScatterChart.tsrx.d.ts +0 -12
- package/src/chart/SunburstChart.tsrx.d.ts +0 -146
- package/src/component/DefaultLegendContent.tsrx.d.ts +0 -125
- package/src/component/DefaultTooltipContent.tsrx.d.ts +0 -87
- package/src/component/Label.tsrx.d.ts +0 -12
- package/src/component/LabelList.tsrx.d.ts +0 -8
- package/src/component/Legend.tsrx.d.ts +0 -88
- package/src/component/ResponsiveContainer.tsrx.d.ts +0 -81
- package/src/component/Text.tsrx.d.ts +0 -9
- package/src/component/Tooltip.tsrx.d.ts +0 -246
- package/src/container/Layer.tsrx.d.ts +0 -6
- package/src/container/Surface.tsrx.d.ts +0 -12
- package/src/context/accessibilityContext.js +0 -10
- package/src/context/tooltipContext.js +0 -55
- package/src/index.d.ts +0 -281
- package/src/polar/Pie.tsrx.d.ts +0 -436
- package/src/polar/PolarAngleAxis.tsrx.d.ts +0 -215
- package/src/polar/PolarGrid.tsrx.d.ts +0 -117
- package/src/polar/PolarRadiusAxis.tsrx.d.ts +0 -209
- package/src/polar/Radar.tsrx.d.ts +0 -215
- package/src/polar/RadialBar.tsrx.d.ts +0 -340
- package/src/shape/Cross.tsrx.d.ts +0 -12
- package/src/shape/Curve.tsrx.d.ts +0 -42
- package/src/shape/Dot.tsrx.d.ts +0 -9
- package/src/shape/Polygon.tsrx.d.ts +0 -13
- package/src/shape/Rectangle.tsrx.d.ts +0 -31
- package/src/shape/Sector.tsrx.d.ts +0 -29
- package/src/shape/Symbols.tsrx.d.ts +0 -15
- package/src/shape/Trapezoid.tsrx.d.ts +0 -29
- package/src/state/brushSlice.js +0 -36
- package/src/state/cartesianAxisSlice.js +0 -256
- package/src/state/chartDataSlice.js +0 -67
- package/src/state/errorBarSlice.js +0 -53
- package/src/state/eventSettingsSlice.js +0 -25
- package/src/state/graphicalItemsSlice.js +0 -91
- package/src/state/layoutSlice.js +0 -57
- package/src/state/legendSlice.js +0 -83
- package/src/state/optionsSlice.js +0 -45
- package/src/state/polarAxisSlice.js +0 -33
- package/src/state/polarOptionsSlice.js +0 -26
- package/src/state/reduxDevtoolsJsonStringifyReplacer.js +0 -14
- package/src/state/referenceElementsSlice.js +0 -51
- package/src/state/renderedTicksSlice.js +0 -41
- package/src/state/rootPropsSlice.js +0 -48
- package/src/state/selectors/axisSelectors.js +0 -2113
- package/src/state/selectors/barSelectors.js +0 -263
- package/src/state/selectors/barStackSelectors.js +0 -65
- package/src/state/selectors/brushSelectors.js +0 -21
- package/src/state/selectors/combiners/combineActiveLabel.js +0 -18
- package/src/state/selectors/combiners/combineAllBarPositions.js +0 -169
- package/src/state/selectors/combiners/combineAxisRangeWithReverse.js +0 -11
- package/src/state/selectors/combiners/combineBarPosition.js +0 -17
- package/src/state/selectors/combiners/combineBarSizeList.js +0 -115
- package/src/state/selectors/combiners/combineConfiguredScale.js +0 -46
- package/src/state/selectors/combiners/combineCoordinateForDefaultIndex.js +0 -48
- package/src/state/selectors/combiners/combineInverseScaleFunction.js +0 -12
- package/src/state/selectors/combiners/combineStackedData.js +0 -22
- package/src/state/selectors/combiners/combineTooltipInteractionState.js +0 -121
- package/src/state/selectors/combiners/combineTooltipPayload.js +0 -248
- package/src/state/selectors/containerSelectors.js +0 -6
- package/src/state/selectors/graphicalItemSelectors.js +0 -25
- package/src/state/selectors/legendSelectors.js +0 -18
- package/src/state/selectors/lineSelectors.js +0 -106
- package/src/state/selectors/numberDomainEqualityCheck.js +0 -11
- package/src/state/selectors/pickAxisId.js +0 -3
- package/src/state/selectors/pickAxisType.js +0 -3
- package/src/state/selectors/polarAxisSelectors.js +0 -237
- package/src/state/selectors/rootPropsSelectors.js +0 -13
- package/src/state/selectors/selectAllAxes.js +0 -15
- package/src/state/selectors/selectChartOffset.js +0 -12
- package/src/state/selectors/selectChartOffsetInternal.js +0 -174
- package/src/state/selectors/selectTooltipAxisId.js +0 -3
- package/src/state/selectors/selectTooltipEventType.js +0 -27
- package/src/state/selectors/selectTooltipPayloadSearcher.js +0 -3
- package/src/state/selectors/selectTooltipSettings.js +0 -3
- package/src/state/selectors/selectTooltipState.js +0 -3
- package/src/state/selectors/selectors.js +0 -222
- package/src/state/selectors/tooltipSelectors.js +0 -471
- package/src/state/selectors/touchSelectors.js +0 -31
- package/src/state/tooltipSlice.js +0 -237
- package/src/state/types/StackedGraphicalItem.js +0 -18
- package/src/state/zIndexSlice.js +0 -167
- package/src/synchronisation/syncSelectors.js +0 -5
- package/src/util/ChartUtils.js +0 -630
- package/src/util/DOMUtils.js +0 -180
- package/src/util/Events.js +0 -7
- package/src/util/Global.js +0 -13
- package/src/util/LRUCache.js +0 -58
- package/src/util/PolarUtils.js +0 -190
- package/src/util/ReduceCSSCalc.js +0 -260
- package/src/util/axisPropsAreEqual.js +0 -63
- package/src/util/createEventProxy.js +0 -18
- package/src/util/getActiveCoordinate.js +0 -253
- package/src/util/getClassNameFromUnknown.js +0 -8
- package/src/util/getRadiusAndStrokeWidthFromDot.js +0 -28
- package/src/util/getSliced.js +0 -11
- package/src/util/isWellBehavedNumber.js +0 -8
- package/src/util/round.js +0 -39
- package/src/util/scale/RechartsScale.js +0 -68
- package/src/util/scale/index.js +0 -3
- package/src/util/stacks/getStackSeriesIdentifier.js +0 -10
- package/src/zIndex/ZIndexLayer.tsrx.d.ts +0 -2
package/src/cartesian/Line.tsrx
CHANGED
|
@@ -1,3 +1,118 @@
|
|
|
1
|
+
import type {
|
|
2
|
+
MutableRefObject,
|
|
3
|
+
OctaneElement,
|
|
4
|
+
OctaneNode,
|
|
5
|
+
RefObject,
|
|
6
|
+
} from '../util/OctaneTypes.ts';
|
|
7
|
+
import type { CurveType, Props as CurveProps } from '../shape/Curve.tsrx';
|
|
8
|
+
import type { LineDrawShapeProps } from './LineDrawShape.tsrx';
|
|
9
|
+
import type { CartesianLabelListEntry, ImplicitLabelListType } from '../component/LabelList.tsrx';
|
|
10
|
+
import type { ErrorBarDataPointFormatter } from './ErrorBar.tsrx';
|
|
11
|
+
import type {
|
|
12
|
+
ActiveDotType,
|
|
13
|
+
ActiveShape,
|
|
14
|
+
AnimationDuration,
|
|
15
|
+
CartesianLayout,
|
|
16
|
+
DataConsumer,
|
|
17
|
+
DataKey,
|
|
18
|
+
DataProvider,
|
|
19
|
+
DotType,
|
|
20
|
+
EasingInput,
|
|
21
|
+
LegendType,
|
|
22
|
+
TickItem,
|
|
23
|
+
TooltipType,
|
|
24
|
+
TrapezoidViewBox,
|
|
25
|
+
} from '../util/types';
|
|
26
|
+
import type { Formatter } from '../component/DefaultTooltipContent.tsrx';
|
|
27
|
+
import type { TooltipPayloadConfiguration } from '../state/tooltipSlice';
|
|
28
|
+
import type { BaseAxisWithScale } from '../state/selectors/axisSelectors';
|
|
29
|
+
import type { AxisId } from '../state/cartesianAxisSlice';
|
|
30
|
+
import type { AnimationInterpolateFn } from '../animation/AnimatedItems.tsrx';
|
|
31
|
+
import type { AnimationItem, AnimationMatchByProp } from '../animation/matchBy';
|
|
32
|
+
import type { WithIdRequired } from '../util/useUniqueId';
|
|
33
|
+
import type { ZIndexable } from '../zIndex/ZIndexLayer.tsrx';
|
|
34
|
+
import type { GraphicalItemId } from '../state/graphicalItemsSlice';
|
|
35
|
+
import type { ChartData } from '../state/chartDataSlice';
|
|
36
|
+
|
|
37
|
+
export interface LinePointItem {
|
|
38
|
+
readonly value: number;
|
|
39
|
+
readonly payload?: any;
|
|
40
|
+
x: number | null;
|
|
41
|
+
y: number | null;
|
|
42
|
+
}
|
|
43
|
+
interface InternalLineProps extends ZIndexable {
|
|
44
|
+
activeDot: ActiveDotType;
|
|
45
|
+
animateNewValues: boolean;
|
|
46
|
+
animationBegin: number;
|
|
47
|
+
animationDuration: AnimationDuration;
|
|
48
|
+
animationEasing: EasingInput;
|
|
49
|
+
animationInterpolateFn: AnimationInterpolateFn<LinePointItem, CartesianLayout>;
|
|
50
|
+
animationMatchBy: AnimationMatchByProp<LinePointItem>;
|
|
51
|
+
className?: string;
|
|
52
|
+
connectNulls: boolean;
|
|
53
|
+
data?: any;
|
|
54
|
+
dataKey?: DataKey<any>;
|
|
55
|
+
dot: DotType;
|
|
56
|
+
height: number;
|
|
57
|
+
hide: boolean;
|
|
58
|
+
id: GraphicalItemId;
|
|
59
|
+
isAnimationActive: boolean | 'auto';
|
|
60
|
+
label: ImplicitLabelListType;
|
|
61
|
+
layout: 'horizontal' | 'vertical';
|
|
62
|
+
left: number;
|
|
63
|
+
legendType: LegendType;
|
|
64
|
+
shape: ActiveShape<LineDrawShapeProps, SVGPathElement>;
|
|
65
|
+
name?: string | number;
|
|
66
|
+
needClip?: boolean;
|
|
67
|
+
onAnimationEnd?: () => void;
|
|
68
|
+
onAnimationStart?: () => void;
|
|
69
|
+
points: ReadonlyArray<LinePointItem>;
|
|
70
|
+
formatter?: Formatter;
|
|
71
|
+
tooltipType?: TooltipType;
|
|
72
|
+
top: number;
|
|
73
|
+
type?: CurveType;
|
|
74
|
+
unit?: string | number | null;
|
|
75
|
+
width: number;
|
|
76
|
+
xAxisId: AxisId;
|
|
77
|
+
yAxisId: AxisId;
|
|
78
|
+
}
|
|
79
|
+
interface LineProps<DataPointType = any, DataValueType = any> extends DataProvider<
|
|
80
|
+
DataPointType
|
|
81
|
+
>, DataConsumer<DataPointType, DataValueType>, ZIndexable {
|
|
82
|
+
activeDot?: ActiveDotType;
|
|
83
|
+
animateNewValues?: boolean;
|
|
84
|
+
animationBegin?: number;
|
|
85
|
+
animationDuration?: AnimationDuration;
|
|
86
|
+
animationEasing?: EasingInput;
|
|
87
|
+
animationInterpolateFn?: AnimationInterpolateFn<LinePointItem, CartesianLayout>;
|
|
88
|
+
animationMatchBy?: AnimationMatchByProp<LinePointItem>;
|
|
89
|
+
className?: string;
|
|
90
|
+
connectNulls?: boolean;
|
|
91
|
+
dot?: DotType;
|
|
92
|
+
hide?: boolean;
|
|
93
|
+
id?: string;
|
|
94
|
+
isAnimationActive?: boolean | 'auto';
|
|
95
|
+
label?: ImplicitLabelListType;
|
|
96
|
+
legendType?: LegendType;
|
|
97
|
+
shape?: ActiveShape<LineDrawShapeProps, SVGPathElement>;
|
|
98
|
+
name?: string | number;
|
|
99
|
+
onAnimationEnd?: () => void;
|
|
100
|
+
onAnimationStart?: () => void;
|
|
101
|
+
tooltipType?: TooltipType;
|
|
102
|
+
type?: CurveType;
|
|
103
|
+
unit?: string | number | null;
|
|
104
|
+
formatter?: Formatter;
|
|
105
|
+
xAxisId?: AxisId;
|
|
106
|
+
yAxisId?: AxisId;
|
|
107
|
+
zIndex?: number;
|
|
108
|
+
stroke?: string;
|
|
109
|
+
strokeWidth?: string | number;
|
|
110
|
+
strokeDasharray?: string | number;
|
|
111
|
+
}
|
|
112
|
+
type LineSvgProps = Omit<CurveProps, 'points' | 'pathRef' | 'ref' | 'layout' | 'baseLine'>;
|
|
113
|
+
type InternalProps = LineSvgProps & InternalLineProps;
|
|
114
|
+
export type Props<DataPointType = any, ValueAxisType = any> =
|
|
115
|
+
LineSvgProps & LineProps<DataPointType, ValueAxisType>;
|
|
1
116
|
// Port of cartesian/Line.tsx — the line graphical item: redux registration,
|
|
2
117
|
// store-computed points, the draw-in curve, dots, labels, active points.
|
|
3
118
|
// `computeLinePoints` stays here (vendored lineSelectors imports it through
|
|
@@ -38,7 +153,7 @@ import { DefaultZIndexes } from '../zIndex/DefaultZIndexes';
|
|
|
38
153
|
import { propsAreEqual } from '../util/propsAreEqual';
|
|
39
154
|
import { Dots } from '../component/Dots.tsrx';
|
|
40
155
|
|
|
41
|
-
function getTotalLength(mainCurve) {
|
|
156
|
+
function getTotalLength(mainCurve: SVGPathElement | null) {
|
|
42
157
|
try {
|
|
43
158
|
return mainCurve && mainCurve.getTotalLength && mainCurve.getTotalLength() || 0;
|
|
44
159
|
} catch {
|
|
@@ -50,7 +165,7 @@ function getTotalLength(mainCurve) {
|
|
|
50
165
|
* Average x-shift between matched pairs — the overall direction/magnitude of
|
|
51
166
|
* data movement, used to extrapolate enter/exit positions.
|
|
52
167
|
*/
|
|
53
|
-
function averageShift(items) {
|
|
168
|
+
function averageShift(items: ReadonlyArray<AnimationItem<LinePointItem>>) {
|
|
54
169
|
let total = 0;
|
|
55
170
|
let count = 0;
|
|
56
171
|
for (const item of items) {
|
|
@@ -62,7 +177,10 @@ function averageShift(items) {
|
|
|
62
177
|
return count > 0 ? total / count : 0;
|
|
63
178
|
}
|
|
64
179
|
|
|
65
|
-
const defaultLineAnimateItems
|
|
180
|
+
const defaultLineAnimateItems: AnimationInterpolateFn<LinePointItem, CartesianLayout> = (
|
|
181
|
+
items,
|
|
182
|
+
animationElapsedTime,
|
|
183
|
+
) => {
|
|
66
184
|
if (items == null) {
|
|
67
185
|
// First render: return empty, stroke-dasharray handles the reveal
|
|
68
186
|
return [];
|
|
@@ -72,7 +190,7 @@ const defaultLineAnimateItems = (items, animationElapsedTime) => {
|
|
|
72
190
|
return items.flatMap((item) => (item.status === 'removed' ? [] : [item.next]));
|
|
73
191
|
}
|
|
74
192
|
const shift = averageShift(items);
|
|
75
|
-
const result = [];
|
|
193
|
+
const result: LinePointItem[] = [];
|
|
76
194
|
for (const item of items) {
|
|
77
195
|
if (item.status === 'matched') {
|
|
78
196
|
result.push({
|
|
@@ -129,9 +247,9 @@ export const defaultLineProps = {
|
|
|
129
247
|
yAxisId: 0,
|
|
130
248
|
zIndex: DefaultZIndexes.line,
|
|
131
249
|
type: 'linear',
|
|
132
|
-
}
|
|
250
|
+
} as const satisfies Partial<Props>;
|
|
133
251
|
|
|
134
|
-
const computeLegendPayloadFromAreaData = (props) => {
|
|
252
|
+
const computeLegendPayloadFromAreaData = (props: Props) => {
|
|
135
253
|
const { dataKey, name, stroke, legendType, hide } = props;
|
|
136
254
|
return [
|
|
137
255
|
{
|
|
@@ -145,7 +263,22 @@ const computeLegendPayloadFromAreaData = (props) => {
|
|
|
145
263
|
];
|
|
146
264
|
};
|
|
147
265
|
|
|
148
|
-
const SetLineTooltipEntrySettings = memo((
|
|
266
|
+
const SetLineTooltipEntrySettings = memo((
|
|
267
|
+
props: Pick<
|
|
268
|
+
InternalProps,
|
|
269
|
+
| 'dataKey'
|
|
270
|
+
| 'data'
|
|
271
|
+
| 'stroke'
|
|
272
|
+
| 'strokeWidth'
|
|
273
|
+
| 'fill'
|
|
274
|
+
| 'name'
|
|
275
|
+
| 'hide'
|
|
276
|
+
| 'unit'
|
|
277
|
+
| 'formatter'
|
|
278
|
+
| 'tooltipType'
|
|
279
|
+
| 'id'
|
|
280
|
+
>,
|
|
281
|
+
) => {
|
|
149
282
|
const {
|
|
150
283
|
dataKey,
|
|
151
284
|
data,
|
|
@@ -159,7 +292,7 @@ const SetLineTooltipEntrySettings = memo((props) => {
|
|
|
159
292
|
tooltipType,
|
|
160
293
|
id,
|
|
161
294
|
} = props;
|
|
162
|
-
const tooltipEntrySettings = {
|
|
295
|
+
const tooltipEntrySettings: TooltipPayloadConfiguration = {
|
|
163
296
|
dataDefinedOnItem: data,
|
|
164
297
|
getPosition: noop,
|
|
165
298
|
settings: {
|
|
@@ -180,7 +313,11 @@ const SetLineTooltipEntrySettings = memo((props) => {
|
|
|
180
313
|
return <SetTooltipEntrySettings tooltipEntrySettings={tooltipEntrySettings} />;
|
|
181
314
|
});
|
|
182
315
|
|
|
183
|
-
function LineDotsWrapper(props
|
|
316
|
+
function LineDotsWrapper(props: {
|
|
317
|
+
points: ReadonlyArray<LinePointItem>;
|
|
318
|
+
clipPathId: string;
|
|
319
|
+
props: InternalProps;
|
|
320
|
+
}) {
|
|
184
321
|
const { clipPathId, points } = props;
|
|
185
322
|
const { dot, dataKey, needClip } = props.props;
|
|
186
323
|
// Exclude ID so it isn't duplicated across every dot.
|
|
@@ -198,11 +335,15 @@ function LineDotsWrapper(props) {
|
|
|
198
335
|
/>;
|
|
199
336
|
}
|
|
200
337
|
|
|
201
|
-
function LineLabelListProvider(props
|
|
338
|
+
function LineLabelListProvider(props: {
|
|
339
|
+
showLabels: boolean;
|
|
340
|
+
children: OctaneNode;
|
|
341
|
+
points: ReadonlyArray<LinePointItem>;
|
|
342
|
+
}) @{
|
|
202
343
|
const { showLabels, children, points } = props;
|
|
203
|
-
const labelListEntries = useMemo(() => {
|
|
344
|
+
const labelListEntries: ReadonlyArray<CartesianLabelListEntry> = useMemo(() => {
|
|
204
345
|
return points?.map((point) => {
|
|
205
|
-
const viewBox = {
|
|
346
|
+
const viewBox: TrapezoidViewBox = {
|
|
206
347
|
x: point.x ?? 0,
|
|
207
348
|
y: point.y ?? 0,
|
|
208
349
|
width: 0,
|
|
@@ -225,7 +366,16 @@ function LineLabelListProvider(props) @{
|
|
|
225
366
|
>{children}</CartesianLabelListContextProvider>
|
|
226
367
|
}
|
|
227
368
|
|
|
228
|
-
function StaticCurve(staticCurveProps
|
|
369
|
+
function StaticCurve(staticCurveProps: {
|
|
370
|
+
clipPathId: string;
|
|
371
|
+
pathRef: RefObject<SVGPathElement | null>;
|
|
372
|
+
points: ReadonlyArray<LinePointItem>;
|
|
373
|
+
props: InternalProps;
|
|
374
|
+
animationElapsedTime?: number;
|
|
375
|
+
isAnimating?: boolean;
|
|
376
|
+
isEntrance?: boolean;
|
|
377
|
+
visibleLength?: number | null;
|
|
378
|
+
}) {
|
|
229
379
|
const {
|
|
230
380
|
clipPathId,
|
|
231
381
|
pathRef,
|
|
@@ -237,7 +387,7 @@ function StaticCurve(staticCurveProps) {
|
|
|
237
387
|
visibleLength,
|
|
238
388
|
} = staticCurveProps;
|
|
239
389
|
const { type, layout, connectNulls, needClip, shape, strokeDasharray, ...others } = props;
|
|
240
|
-
const curveProps = {
|
|
390
|
+
const curveProps: LineDrawShapeProps = {
|
|
241
391
|
...svgPropertiesAndEvents(others),
|
|
242
392
|
fill: 'none',
|
|
243
393
|
className: 'recharts-line-curve',
|
|
@@ -260,7 +410,12 @@ function StaticCurve(staticCurveProps) {
|
|
|
260
410
|
</>;
|
|
261
411
|
}
|
|
262
412
|
|
|
263
|
-
function CurveWithAnimation(curveWithAnimationProps
|
|
413
|
+
function CurveWithAnimation(curveWithAnimationProps: {
|
|
414
|
+
clipPathId: string;
|
|
415
|
+
props: InternalProps;
|
|
416
|
+
pathRef: RefObject<SVGPathElement | null>;
|
|
417
|
+
previousPointsRef: MutableRefObject<ReadonlyArray<LinePointItem> | null>;
|
|
418
|
+
}) {
|
|
264
419
|
const { clipPathId, props, pathRef, previousPointsRef } = curveWithAnimationProps;
|
|
265
420
|
const {
|
|
266
421
|
points,
|
|
@@ -281,7 +436,7 @@ function CurveWithAnimation(curveWithAnimationProps) {
|
|
|
281
436
|
const getVisibleLength = useAnimatedLineLength(points);
|
|
282
437
|
// Don't update previousPointsRef before the SVG path is measured.
|
|
283
438
|
const shouldUpdatePreviousRef = useCallback(
|
|
284
|
-
(animationElapsedTime) => animationElapsedTime > 0 && totalLength > 0,
|
|
439
|
+
(animationElapsedTime: number) => animationElapsedTime > 0 && totalLength > 0,
|
|
285
440
|
[totalLength],
|
|
286
441
|
);
|
|
287
442
|
return <LineLabelListProvider points={points} showLabels={showLabels}>
|
|
@@ -322,10 +477,13 @@ function CurveWithAnimation(curveWithAnimationProps) {
|
|
|
322
477
|
</LineLabelListProvider>;
|
|
323
478
|
}
|
|
324
479
|
|
|
325
|
-
function RenderCurve(props
|
|
480
|
+
function RenderCurve(props: {
|
|
481
|
+
clipPathId: string;
|
|
482
|
+
props: InternalProps;
|
|
483
|
+
}) {
|
|
326
484
|
const { clipPathId } = props;
|
|
327
|
-
const previousPointsRef = useRef(null);
|
|
328
|
-
const pathRef = useRef(null);
|
|
485
|
+
const previousPointsRef = useRef<ReadonlyArray<LinePointItem> | null>(null);
|
|
486
|
+
const pathRef = useRef<SVGPathElement | null>(null);
|
|
329
487
|
return <CurveWithAnimation
|
|
330
488
|
props={props.props}
|
|
331
489
|
clipPathId={clipPathId}
|
|
@@ -334,7 +492,10 @@ function RenderCurve(props) {
|
|
|
334
492
|
/>;
|
|
335
493
|
}
|
|
336
494
|
|
|
337
|
-
const errorBarDataPointFormatter = (
|
|
495
|
+
const errorBarDataPointFormatter: ErrorBarDataPointFormatter<LinePointItem> = (
|
|
496
|
+
dataPoint: LinePointItem,
|
|
497
|
+
dataKey,
|
|
498
|
+
) => {
|
|
338
499
|
return {
|
|
339
500
|
x: dataPoint.x ?? undefined,
|
|
340
501
|
y: dataPoint.y ?? undefined,
|
|
@@ -344,7 +505,7 @@ const errorBarDataPointFormatter = (dataPoint, dataKey) => {
|
|
|
344
505
|
};
|
|
345
506
|
};
|
|
346
507
|
|
|
347
|
-
function LineWithState(props) @{
|
|
508
|
+
function LineWithState(props: InternalProps) @{
|
|
348
509
|
const {
|
|
349
510
|
hide,
|
|
350
511
|
dot,
|
|
@@ -410,7 +571,7 @@ function LineWithState(props) @{
|
|
|
410
571
|
</>
|
|
411
572
|
}
|
|
412
573
|
|
|
413
|
-
function LineImpl(props) {
|
|
574
|
+
function LineImpl(props: WithIdRequired<Props>) {
|
|
414
575
|
const {
|
|
415
576
|
activeDot,
|
|
416
577
|
animateNewValues,
|
|
@@ -432,7 +593,7 @@ function LineImpl(props) {
|
|
|
432
593
|
const plotArea = usePlotArea();
|
|
433
594
|
const layout = useChartLayout();
|
|
434
595
|
const isPanorama = useIsPanorama();
|
|
435
|
-
const points = useAppSelector(
|
|
596
|
+
const points: ReadonlyArray<LinePointItem> | undefined = useAppSelector(
|
|
436
597
|
(state) => selectLinePoints(state, xAxisId, yAxisId, isPanorama, id),
|
|
437
598
|
);
|
|
438
599
|
if (layout !== 'horizontal' && layout !== 'vertical' || points == null || plotArea == null) {
|
|
@@ -475,10 +636,19 @@ export function computeLinePoints({
|
|
|
475
636
|
dataKey,
|
|
476
637
|
bandSize,
|
|
477
638
|
displayedData,
|
|
639
|
+
}: {
|
|
640
|
+
layout: CartesianLayout;
|
|
641
|
+
xAxis: BaseAxisWithScale;
|
|
642
|
+
yAxis: BaseAxisWithScale;
|
|
643
|
+
xAxisTicks: TickItem[];
|
|
644
|
+
yAxisTicks: TickItem[];
|
|
645
|
+
dataKey: Props['dataKey'];
|
|
646
|
+
bandSize: number;
|
|
647
|
+
displayedData: ChartData;
|
|
478
648
|
}) {
|
|
479
|
-
|
|
649
|
+
const points = displayedData.map((entry, index) => {
|
|
480
650
|
// getValueByDataKey does not validate the output type
|
|
481
|
-
const value = getValueByDataKey(entry, dataKey);
|
|
651
|
+
const value: number = getValueByDataKey(entry, dataKey);
|
|
482
652
|
if (layout === 'horizontal') {
|
|
483
653
|
const x = getCateCoordinateOfLine({ axis: xAxis, ticks: xAxisTicks, bandSize, entry, index });
|
|
484
654
|
const y =
|
|
@@ -497,10 +667,18 @@ export function computeLinePoints({
|
|
|
497
667
|
return null;
|
|
498
668
|
}
|
|
499
669
|
return { x, y, value, payload: entry };
|
|
500
|
-
})
|
|
670
|
+
});
|
|
671
|
+
// This map returns only objects or null, so Boolean removes exactly the nulls.
|
|
672
|
+
return points.filter(
|
|
673
|
+
Boolean as BooleanConstructor & ((point: (typeof points)[number]) => point is NonNullable<
|
|
674
|
+
typeof point
|
|
675
|
+
>),
|
|
676
|
+
);
|
|
501
677
|
}
|
|
502
678
|
|
|
503
|
-
function LineFn(
|
|
679
|
+
function LineFn<DataPointType = any, ValueAxisType = any>(
|
|
680
|
+
outsideProps: Props<DataPointType, ValueAxisType>,
|
|
681
|
+
) {
|
|
504
682
|
const props = resolveDefaultProps(outsideProps, defaultLineProps);
|
|
505
683
|
const isPanorama = useIsPanorama();
|
|
506
684
|
return <RegisterGraphicalItemId id={props.id} type="line">
|
|
@@ -540,5 +718,5 @@ function LineFn(outsideProps) {
|
|
|
540
718
|
* @provides ErrorBarContext
|
|
541
719
|
* @consumes CartesianChartContext
|
|
542
720
|
*/
|
|
543
|
-
export const Line = memo(LineFn, propsAreEqual);
|
|
721
|
+
export const Line = memo(LineFn, propsAreEqual) as typeof LineFn & { displayName?: string };
|
|
544
722
|
Line.displayName = 'Line';
|
|
@@ -1,3 +1,12 @@
|
|
|
1
|
+
import type { RefObject } from '../util/OctaneTypes.ts';
|
|
2
|
+
import type { Props as CurveProps } from '../shape/Curve.tsrx';
|
|
3
|
+
import type { ShapeAnimationProps } from '../util/types';
|
|
4
|
+
|
|
5
|
+
export type LineDrawShapeProps =
|
|
6
|
+
Omit<CurveProps, 'pathRef'> & ShapeAnimationProps & {
|
|
7
|
+
pathRef: RefObject<SVGPathElement | null>;
|
|
8
|
+
visibleLength?: number | null;
|
|
9
|
+
};
|
|
1
10
|
// Port of cartesian/LineDrawShape.tsx — the default Line shape: the entrance
|
|
2
11
|
// animation progressively reveals the path via stroke-dasharray.
|
|
3
12
|
import { Curve } from '../shape/Curve.tsrx';
|
|
@@ -6,7 +15,7 @@ import { Curve } from '../shape/Curve.tsrx';
|
|
|
6
15
|
* Reads the total length of an SVG path element, returning 0 if the element
|
|
7
16
|
* is null or the measurement fails (e.g. in JSDOM).
|
|
8
17
|
*/
|
|
9
|
-
function getTotalLength(path) {
|
|
18
|
+
function getTotalLength(path: SVGPathElement | null) {
|
|
10
19
|
try {
|
|
11
20
|
return path && path.getTotalLength && path.getTotalLength() || 0;
|
|
12
21
|
} catch {
|
|
@@ -17,17 +26,17 @@ function getTotalLength(path) {
|
|
|
17
26
|
// Uses `totalLength` as the gap (not totalLength - length) to dodge a
|
|
18
27
|
// float-serialization artifact that paints a phantom endpoint dot with
|
|
19
28
|
// round/square linecaps.
|
|
20
|
-
function generateSimpleStrokeDasharray(totalLength, length) {
|
|
29
|
+
function generateSimpleStrokeDasharray(totalLength: number, length: number) {
|
|
21
30
|
return length + 'px ' + totalLength + 'px';
|
|
22
31
|
}
|
|
23
32
|
|
|
24
33
|
// Odd-length stroke-dasharray values repeat once ("5" behaves like "5 5").
|
|
25
|
-
function normalizeDashPattern(lines) {
|
|
34
|
+
function normalizeDashPattern(lines: number[]) {
|
|
26
35
|
return lines.length % 2 !== 0 ? [...lines, ...lines] : lines;
|
|
27
36
|
}
|
|
28
37
|
|
|
29
|
-
function repeat(lines, count) {
|
|
30
|
-
const result = [];
|
|
38
|
+
function repeat(lines: number[], count: number) {
|
|
39
|
+
const result: number[] = [];
|
|
31
40
|
for (let i = 0; i < count; ++i) {
|
|
32
41
|
result.push(...lines);
|
|
33
42
|
}
|
|
@@ -38,7 +47,7 @@ function repeat(lines, count) {
|
|
|
38
47
|
* Builds a dasharray that reveals exactly `length` pixels of the user's dash
|
|
39
48
|
* pattern, followed by a `totalLength` gap hiding the rest.
|
|
40
49
|
*/
|
|
41
|
-
function getStrokeDasharray(length, totalLength, lines) {
|
|
50
|
+
function getStrokeDasharray(length: number, totalLength: number, lines: number[]) {
|
|
42
51
|
const normalizedLines = normalizeDashPattern(lines);
|
|
43
52
|
const lineLength = normalizedLines.reduce((pre, next) => pre + next, 0);
|
|
44
53
|
// if lineLength is 0 return the default when no strokeDasharray is provided
|
|
@@ -47,7 +56,7 @@ function getStrokeDasharray(length, totalLength, lines) {
|
|
|
47
56
|
}
|
|
48
57
|
const count = Math.floor(length / lineLength);
|
|
49
58
|
const remainLength = length % lineLength;
|
|
50
|
-
let remainLines = [];
|
|
59
|
+
let remainLines: number[] = [];
|
|
51
60
|
for (let i = 0, sum = 0; i < normalizedLines.length; (sum += normalizedLines[i] ?? 0, ++i)) {
|
|
52
61
|
const lineValue = normalizedLines[i];
|
|
53
62
|
if (lineValue != null && sum + lineValue > remainLength) {
|
|
@@ -62,7 +71,11 @@ function getStrokeDasharray(length, totalLength, lines) {
|
|
|
62
71
|
).join(', ');
|
|
63
72
|
}
|
|
64
73
|
|
|
65
|
-
function computeAnimatedStrokeDasharray(
|
|
74
|
+
function computeAnimatedStrokeDasharray(
|
|
75
|
+
userStrokeDasharray: string | number | undefined,
|
|
76
|
+
totalLength: number,
|
|
77
|
+
visibleLength: number,
|
|
78
|
+
) {
|
|
66
79
|
if (userStrokeDasharray) {
|
|
67
80
|
const lines = String(userStrokeDasharray).split(/[,\s]+/gim).map((num) => parseFloat(num));
|
|
68
81
|
return getStrokeDasharray(visibleLength, totalLength, lines);
|
|
@@ -75,7 +88,7 @@ function computeAnimatedStrokeDasharray(userStrokeDasharray, totalLength, visibl
|
|
|
75
88
|
* `strokeDasharray` as animationElapsedTime goes 0 → 1.
|
|
76
89
|
* @since 3.9
|
|
77
90
|
*/
|
|
78
|
-
export function LineDrawShape(props) {
|
|
91
|
+
export function LineDrawShape(props: LineDrawShapeProps) {
|
|
79
92
|
const {
|
|
80
93
|
animationElapsedTime,
|
|
81
94
|
isAnimating,
|
|
@@ -86,7 +99,7 @@ export function LineDrawShape(props) {
|
|
|
86
99
|
...curveProps
|
|
87
100
|
} = props;
|
|
88
101
|
const finalConnectNulls = connectNulls ?? false;
|
|
89
|
-
let strokeDasharray;
|
|
102
|
+
let strokeDasharray: string | undefined;
|
|
90
103
|
if (visibleLength != null) {
|
|
91
104
|
const { pathRef } = curveProps;
|
|
92
105
|
const totalLength = getTotalLength(pathRef?.current ?? null);
|
|
@@ -1,15 +1,16 @@
|
|
|
1
|
+
import type { OctaneElement, SVGProps } from '../util/OctaneTypes.ts';
|
|
1
2
|
/**
|
|
2
3
|
* @fileOverview Reference Line
|
|
3
4
|
*/
|
|
4
5
|
import * as React from 'octane';
|
|
5
|
-
import {
|
|
6
|
+
import { useEffect } from 'octane';
|
|
6
7
|
import { clsx } from 'clsx';
|
|
7
|
-
import { Layer } from '../container/Layer';
|
|
8
|
+
import { Layer } from '../container/Layer.tsrx';
|
|
8
9
|
import {
|
|
9
10
|
CartesianLabelContextProvider,
|
|
10
11
|
CartesianLabelFromLabelProp,
|
|
11
12
|
ImplicitLabelType,
|
|
12
|
-
} from '../component/Label';
|
|
13
|
+
} from '../component/Label.tsrx';
|
|
13
14
|
import type { IfOverflow, Overflowable } from '../util/IfOverflow';
|
|
14
15
|
import { isNumOrStr } from '../util/DataUtils';
|
|
15
16
|
import { rectWithCoords } from '../util/CartesianUtils';
|
|
@@ -24,10 +25,10 @@ import {
|
|
|
24
25
|
} from '../state/selectors/axisSelectors';
|
|
25
26
|
import { useIsPanorama } from '../context/PanoramaContext';
|
|
26
27
|
|
|
27
|
-
import { useClipPathId } from '../container/ClipPathProvider';
|
|
28
|
+
import { useClipPathId } from '../container/ClipPathProvider.tsrx';
|
|
28
29
|
import { svgPropertiesAndEvents } from '../util/svgPropertiesAndEvents';
|
|
29
30
|
import { RequiresDefaultProps, resolveDefaultProps } from '../util/resolveDefaultProps';
|
|
30
|
-
import { ZIndexable, ZIndexLayer } from '../zIndex/ZIndexLayer';
|
|
31
|
+
import { ZIndexable, ZIndexLayer } from '../zIndex/ZIndexLayer.tsrx';
|
|
31
32
|
import { DefaultZIndexes } from '../zIndex/DefaultZIndexes';
|
|
32
33
|
import { isWellBehavedNumber } from '../util/isWellBehavedNumber';
|
|
33
34
|
import { BandPosition, RechartsScale } from '../util/scale/RechartsScale';
|
|
@@ -108,14 +109,14 @@ interface ReferenceLineProps<
|
|
|
108
109
|
* @defaultValue 0
|
|
109
110
|
*/
|
|
110
111
|
xAxisId?: number | string;
|
|
111
|
-
shape?:
|
|
112
|
+
shape?: OctaneElement<SVGElement> | ((props: any) => OctaneElement<SVGElement>);
|
|
112
113
|
/**
|
|
113
114
|
* Renders a single label.
|
|
114
115
|
*
|
|
115
116
|
* - `false`: no labels are rendered
|
|
116
117
|
* - `string` | `number`: the content of the label
|
|
117
118
|
* - `object`: the props of LabelList component
|
|
118
|
-
* - `
|
|
119
|
+
* - `OctaneElement`: a custom SVG label element, such as `<text>` or `<g>`.
|
|
119
120
|
* HTML elements such as `<div>` are not valid inside the chart SVG and may trigger React DOM warnings.
|
|
120
121
|
* - `function`: a render function of custom label
|
|
121
122
|
*
|
|
@@ -158,7 +159,6 @@ const renderLine = (option: ReferenceLineProps['shape'], props: SVGProps<SVGLine
|
|
|
158
159
|
let line;
|
|
159
160
|
|
|
160
161
|
if (React.isValidElement(option)) {
|
|
161
|
-
// @ts-expect-error element cloning is not typed
|
|
162
162
|
line = React.cloneElement(option, props);
|
|
163
163
|
} else if (typeof option === 'function') {
|
|
164
164
|
line = option(props);
|