@octanejs/recharts 0.1.40 → 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/internal.ts +4 -20
- 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
|
@@ -0,0 +1,210 @@
|
|
|
1
|
+
// Adapted from recharts@3.9.2, commit b3451050c027a23957ffa50a2665c9119df21e47.
|
|
2
|
+
import {
|
|
3
|
+
AxisType,
|
|
4
|
+
CartesianLayout,
|
|
5
|
+
ChartOffsetInternal,
|
|
6
|
+
RelativePointer,
|
|
7
|
+
Coordinate,
|
|
8
|
+
PolarCoordinate,
|
|
9
|
+
PolarLayout,
|
|
10
|
+
RangeObj,
|
|
11
|
+
TickItem,
|
|
12
|
+
} from './types';
|
|
13
|
+
import { polarToCartesian } from './PolarUtils';
|
|
14
|
+
import { AxisRange } from '../state/selectors/axisSelectors';
|
|
15
|
+
import { mathSign } from './DataUtils';
|
|
16
|
+
|
|
17
|
+
export const getActiveCartesianCoordinate = (
|
|
18
|
+
layout: CartesianLayout,
|
|
19
|
+
tooltipTicks: readonly TickItem[],
|
|
20
|
+
activeIndex: number | undefined,
|
|
21
|
+
pointer: RelativePointer,
|
|
22
|
+
): Coordinate => {
|
|
23
|
+
const entry = tooltipTicks.find((tick) => tick && tick.index === activeIndex);
|
|
24
|
+
|
|
25
|
+
if (entry) {
|
|
26
|
+
if (layout === 'horizontal') {
|
|
27
|
+
return { x: entry.coordinate, y: pointer.relativeY };
|
|
28
|
+
}
|
|
29
|
+
if (layout === 'vertical') {
|
|
30
|
+
return { x: pointer.relativeX, y: entry.coordinate };
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
return { x: 0, y: 0 };
|
|
35
|
+
};
|
|
36
|
+
|
|
37
|
+
/**
|
|
38
|
+
* Get the active coordinate in polar coordinate system.
|
|
39
|
+
* Internally we only really use x and y, but this returned object is part of public API
|
|
40
|
+
* (because it goes straight to the tooltip content) so we keep all the other properties
|
|
41
|
+
* for backwards compatibility.
|
|
42
|
+
*
|
|
43
|
+
* @param layout - The polar layout type ('centric' or 'radial').
|
|
44
|
+
* @param tooltipTicks - Array of tick items used for tooltips.
|
|
45
|
+
* @param activeIndex - The index of the active tick.
|
|
46
|
+
* @param rangeObj - The range object containing polar chart properties.
|
|
47
|
+
* @returns The active coordinate object with polar properties.
|
|
48
|
+
*/
|
|
49
|
+
export const getActivePolarCoordinate = (
|
|
50
|
+
layout: PolarLayout,
|
|
51
|
+
tooltipTicks: readonly TickItem[],
|
|
52
|
+
activeIndex: number | undefined,
|
|
53
|
+
rangeObj: RangeObj,
|
|
54
|
+
): PolarCoordinate => {
|
|
55
|
+
const entry = tooltipTicks.find((tick) => tick && tick.index === activeIndex);
|
|
56
|
+
|
|
57
|
+
if (entry) {
|
|
58
|
+
if (layout === 'centric') {
|
|
59
|
+
const angle = entry.coordinate;
|
|
60
|
+
const { radius } = rangeObj;
|
|
61
|
+
|
|
62
|
+
return {
|
|
63
|
+
...rangeObj,
|
|
64
|
+
...polarToCartesian(rangeObj.cx, rangeObj.cy, radius, angle),
|
|
65
|
+
angle,
|
|
66
|
+
radius,
|
|
67
|
+
};
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
const radius = entry.coordinate;
|
|
71
|
+
const { angle } = rangeObj;
|
|
72
|
+
|
|
73
|
+
return {
|
|
74
|
+
...rangeObj,
|
|
75
|
+
...polarToCartesian(rangeObj.cx, rangeObj.cy, radius, angle),
|
|
76
|
+
angle,
|
|
77
|
+
radius,
|
|
78
|
+
};
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
return {
|
|
82
|
+
angle: 0,
|
|
83
|
+
clockWise: false,
|
|
84
|
+
cx: 0,
|
|
85
|
+
cy: 0,
|
|
86
|
+
endAngle: 0,
|
|
87
|
+
innerRadius: 0,
|
|
88
|
+
outerRadius: 0,
|
|
89
|
+
radius: 0,
|
|
90
|
+
startAngle: 0,
|
|
91
|
+
x: 0,
|
|
92
|
+
y: 0,
|
|
93
|
+
};
|
|
94
|
+
};
|
|
95
|
+
|
|
96
|
+
export function isInCartesianRange(pointer: RelativePointer, offset: ChartOffsetInternal): boolean {
|
|
97
|
+
const { relativeX: x, relativeY: y } = pointer;
|
|
98
|
+
return (
|
|
99
|
+
x >= offset.left &&
|
|
100
|
+
x <= offset.left + offset.width &&
|
|
101
|
+
y >= offset.top &&
|
|
102
|
+
y <= offset.top + offset.height
|
|
103
|
+
);
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
export const calculateActiveTickIndex = (
|
|
107
|
+
/**
|
|
108
|
+
* For different layouts, `coordinate` is different:
|
|
109
|
+
* In horizontal layout, this is expected to be the `x` coordinate
|
|
110
|
+
* vertical -> y
|
|
111
|
+
* centric -> angle
|
|
112
|
+
* radial -> radius
|
|
113
|
+
*/
|
|
114
|
+
coordinate: number | undefined,
|
|
115
|
+
ticks: ReadonlyArray<TickItem> | undefined,
|
|
116
|
+
unsortedTicks: ReadonlyArray<TickItem>,
|
|
117
|
+
axisType: AxisType | undefined,
|
|
118
|
+
range: AxisRange | undefined,
|
|
119
|
+
): number | undefined => {
|
|
120
|
+
const len = ticks?.length ?? 0;
|
|
121
|
+
|
|
122
|
+
// if there are 1 or fewer ticks or if there is no coordinate then the active tick is at index 0
|
|
123
|
+
if (len <= 1 || coordinate == null) {
|
|
124
|
+
return 0;
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
if (
|
|
128
|
+
axisType === 'angleAxis' &&
|
|
129
|
+
range != null &&
|
|
130
|
+
Math.abs(Math.abs(range[1] - range[0]) - 360) <= 1e-6
|
|
131
|
+
) {
|
|
132
|
+
// ticks are distributed in a circle
|
|
133
|
+
for (let i = 0; i < len; i++) {
|
|
134
|
+
const before = i > 0 ? unsortedTicks[i - 1]?.coordinate : unsortedTicks[len - 1]?.coordinate;
|
|
135
|
+
const cur = unsortedTicks[i]?.coordinate;
|
|
136
|
+
const after = i >= len - 1 ? unsortedTicks[0]?.coordinate : unsortedTicks[i + 1]?.coordinate;
|
|
137
|
+
let sameDirectionCoord;
|
|
138
|
+
|
|
139
|
+
if (before == null || cur == null || after == null) {
|
|
140
|
+
continue;
|
|
141
|
+
}
|
|
142
|
+
|
|
143
|
+
if (mathSign(cur - before) !== mathSign(after - cur)) {
|
|
144
|
+
const diffInterval = [];
|
|
145
|
+
if (mathSign(after - cur) === mathSign(range[1] - range[0])) {
|
|
146
|
+
sameDirectionCoord = after;
|
|
147
|
+
|
|
148
|
+
const curInRange = cur + range[1] - range[0];
|
|
149
|
+
diffInterval[0] = Math.min(curInRange, (curInRange + before) / 2);
|
|
150
|
+
diffInterval[1] = Math.max(curInRange, (curInRange + before) / 2);
|
|
151
|
+
} else {
|
|
152
|
+
sameDirectionCoord = before;
|
|
153
|
+
|
|
154
|
+
const afterInRange = after + range[1] - range[0];
|
|
155
|
+
diffInterval[0] = Math.min(cur, (afterInRange + cur) / 2);
|
|
156
|
+
diffInterval[1] = Math.max(cur, (afterInRange + cur) / 2);
|
|
157
|
+
}
|
|
158
|
+
const sameInterval: [number, number] = [
|
|
159
|
+
Math.min(cur, (sameDirectionCoord + cur) / 2),
|
|
160
|
+
Math.max(cur, (sameDirectionCoord + cur) / 2),
|
|
161
|
+
];
|
|
162
|
+
|
|
163
|
+
if (
|
|
164
|
+
(coordinate > sameInterval[0] && coordinate <= sameInterval[1]) ||
|
|
165
|
+
(coordinate >= diffInterval[0] && coordinate <= diffInterval[1])
|
|
166
|
+
) {
|
|
167
|
+
return unsortedTicks[i]?.index;
|
|
168
|
+
}
|
|
169
|
+
} else {
|
|
170
|
+
const minValue = Math.min(before, after);
|
|
171
|
+
const maxValue = Math.max(before, after);
|
|
172
|
+
|
|
173
|
+
if (coordinate > (minValue + cur) / 2 && coordinate <= (maxValue + cur) / 2) {
|
|
174
|
+
return unsortedTicks[i]?.index;
|
|
175
|
+
}
|
|
176
|
+
}
|
|
177
|
+
}
|
|
178
|
+
} else if (ticks) {
|
|
179
|
+
// ticks are distributed in a single direction
|
|
180
|
+
for (let i = 0; i < len; i++) {
|
|
181
|
+
const curr = ticks[i];
|
|
182
|
+
if (curr == null) {
|
|
183
|
+
continue;
|
|
184
|
+
}
|
|
185
|
+
const next = ticks[i + 1];
|
|
186
|
+
const prev = ticks[i - 1];
|
|
187
|
+
|
|
188
|
+
if (i === 0 && next != null && coordinate <= (curr.coordinate + next.coordinate) / 2) {
|
|
189
|
+
return curr.index;
|
|
190
|
+
}
|
|
191
|
+
|
|
192
|
+
if (i === len - 1 && prev != null && coordinate > (curr.coordinate + prev.coordinate) / 2) {
|
|
193
|
+
return curr.index;
|
|
194
|
+
}
|
|
195
|
+
|
|
196
|
+
if (
|
|
197
|
+
i > 0 &&
|
|
198
|
+
i < len - 1 &&
|
|
199
|
+
prev != null &&
|
|
200
|
+
next != null &&
|
|
201
|
+
coordinate > (curr.coordinate + prev.coordinate) / 2 &&
|
|
202
|
+
coordinate <= (curr.coordinate + next.coordinate) / 2
|
|
203
|
+
) {
|
|
204
|
+
return curr.index;
|
|
205
|
+
}
|
|
206
|
+
}
|
|
207
|
+
}
|
|
208
|
+
|
|
209
|
+
return -1;
|
|
210
|
+
};
|
|
@@ -1,12 +1,16 @@
|
|
|
1
|
-
//
|
|
2
|
-
|
|
1
|
+
// Adapted from recharts@3.9.2, commit b3451050c027a23957ffa50a2665c9119df21e47.
|
|
2
|
+
import { AxisDomainTypeInput, AxisType, EvaluatedAxisDomainType, LayoutType } from './types';
|
|
3
3
|
import { isCategoricalAxis } from './ChartUtils';
|
|
4
4
|
|
|
5
5
|
/**
|
|
6
6
|
* This function evaluates the "auto" axis domain type based on the chart layout and axis type.
|
|
7
7
|
* It outputs a definitive axis domain type that can be used for further processing.
|
|
8
8
|
*/
|
|
9
|
-
export function getAxisTypeBasedOnLayout(
|
|
9
|
+
export function getAxisTypeBasedOnLayout(
|
|
10
|
+
layout: LayoutType | undefined,
|
|
11
|
+
axisType: AxisType,
|
|
12
|
+
axisDomainType: AxisDomainTypeInput,
|
|
13
|
+
): EvaluatedAxisDomainType | undefined {
|
|
10
14
|
if (axisDomainType !== 'auto') {
|
|
11
15
|
return axisDomainType;
|
|
12
16
|
}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
// Adapted from recharts@3.9.2, commit b3451050c027a23957ffa50a2665c9119df21e47.
|
|
2
|
+
export function getClassNameFromUnknown(u: unknown): string {
|
|
3
|
+
if (u && typeof u === 'object' && 'className' in u && typeof u.className === 'string') {
|
|
4
|
+
return u.className;
|
|
5
|
+
}
|
|
6
|
+
return '';
|
|
7
|
+
}
|
|
@@ -1,5 +1,4 @@
|
|
|
1
|
-
//
|
|
2
|
-
// Do not edit — update by re-vendoring when the recharts devDependency moves.
|
|
1
|
+
// Adapted from recharts@3.9.2, commit b3451050c027a23957ffa50a2665c9119df21e47.
|
|
3
2
|
/**
|
|
4
3
|
* Given an array and a number N, return a new array which contains every nTh
|
|
5
4
|
* element of the input array. For n below 1, an empty array is returned.
|
|
@@ -11,16 +10,16 @@
|
|
|
11
10
|
* @param n A number specifying which elements to take.
|
|
12
11
|
* @returns The result array of the same type as the input array.
|
|
13
12
|
*/
|
|
14
|
-
export function getEveryNth(array
|
|
13
|
+
export function getEveryNth<Type>(array: ReadonlyArray<Type>, n: number): ReadonlyArray<Type> {
|
|
15
14
|
if (n < 1) {
|
|
16
15
|
return [];
|
|
17
16
|
}
|
|
18
17
|
if (n === 1) {
|
|
19
18
|
return array;
|
|
20
19
|
}
|
|
21
|
-
|
|
22
|
-
for (
|
|
23
|
-
|
|
20
|
+
const result: Type[] = [];
|
|
21
|
+
for (let i = 0; i < array.length; i += n) {
|
|
22
|
+
const item = array[i];
|
|
24
23
|
if (item !== undefined) {
|
|
25
24
|
result.push(item);
|
|
26
25
|
}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
// Adapted from recharts@3.9.2, commit b3451050c027a23957ffa50a2665c9119df21e47.
|
|
2
|
+
import { ActiveDotType, DotType } from './types';
|
|
3
|
+
import { svgPropertiesNoEventsFromUnknown } from './svgPropertiesNoEvents';
|
|
4
|
+
|
|
5
|
+
export function getRadiusAndStrokeWidthFromDot(dot: ActiveDotType | DotType): {
|
|
6
|
+
r: number;
|
|
7
|
+
strokeWidth: number;
|
|
8
|
+
} {
|
|
9
|
+
const props = svgPropertiesNoEventsFromUnknown(dot);
|
|
10
|
+
const defaultR = 3;
|
|
11
|
+
const defaultStrokeWidth = 2;
|
|
12
|
+
if (props != null) {
|
|
13
|
+
const { r, strokeWidth } = props;
|
|
14
|
+
let realR = Number(r);
|
|
15
|
+
let realStrokeWidth = Number(strokeWidth);
|
|
16
|
+
if (Number.isNaN(realR) || realR < 0) {
|
|
17
|
+
realR = defaultR;
|
|
18
|
+
}
|
|
19
|
+
if (Number.isNaN(realStrokeWidth) || realStrokeWidth < 0) {
|
|
20
|
+
realStrokeWidth = defaultStrokeWidth;
|
|
21
|
+
}
|
|
22
|
+
return {
|
|
23
|
+
r: realR,
|
|
24
|
+
strokeWidth: realStrokeWidth,
|
|
25
|
+
};
|
|
26
|
+
}
|
|
27
|
+
return {
|
|
28
|
+
r: defaultR,
|
|
29
|
+
strokeWidth: defaultStrokeWidth,
|
|
30
|
+
};
|
|
31
|
+
}
|
|
@@ -1,9 +1,18 @@
|
|
|
1
|
-
//
|
|
2
|
-
|
|
1
|
+
// Adapted from recharts@3.9.2, commit b3451050c027a23957ffa50a2665c9119df21e47.
|
|
2
|
+
import {
|
|
3
|
+
RelativePointer,
|
|
4
|
+
MousePointer,
|
|
5
|
+
SVGMousePointer,
|
|
6
|
+
TouchPointer,
|
|
7
|
+
SVGTouchPointer,
|
|
8
|
+
} from './types';
|
|
9
|
+
|
|
3
10
|
/**
|
|
4
11
|
* Type guard to check if the pointer event is from an SVG element.
|
|
5
12
|
*/
|
|
6
|
-
function isSvgPointer(
|
|
13
|
+
function isSvgPointer(
|
|
14
|
+
pointer: MousePointer | TouchPointer,
|
|
15
|
+
): pointer is SVGMousePointer | SVGTouchPointer {
|
|
7
16
|
return 'getBBox' in pointer.currentTarget && typeof pointer.currentTarget.getBBox === 'function';
|
|
8
17
|
}
|
|
9
18
|
|
|
@@ -60,22 +69,28 @@ function isSvgPointer(pointer) {
|
|
|
60
69
|
* @param event The mouse or touch event from React event handlers (works with both HTML and SVG elements)
|
|
61
70
|
* @returns Coordinates relative to the top-left corner of the element. Single object for Mouse events, array of objects for Touch events.
|
|
62
71
|
*/
|
|
72
|
+
export function getRelativeCoordinate(event: MousePointer): RelativePointer;
|
|
73
|
+
export function getRelativeCoordinate(event: TouchPointer): Array<RelativePointer>;
|
|
74
|
+
export function getRelativeCoordinate(
|
|
75
|
+
event: MousePointer | TouchPointer,
|
|
76
|
+
): RelativePointer | Array<RelativePointer> {
|
|
77
|
+
const rect = event.currentTarget.getBoundingClientRect();
|
|
78
|
+
|
|
79
|
+
let scaleX: number, scaleY: number;
|
|
63
80
|
|
|
64
|
-
export function getRelativeCoordinate(event) {
|
|
65
|
-
var rect = event.currentTarget.getBoundingClientRect();
|
|
66
|
-
var scaleX, scaleY;
|
|
67
81
|
if (isSvgPointer(event)) {
|
|
68
82
|
// For SVG elements, use getBBox() to get the intrinsic size in SVG coordinates
|
|
69
|
-
|
|
83
|
+
const bbox = event.currentTarget.getBBox();
|
|
70
84
|
scaleX = bbox.width > 0 ? rect.width / bbox.width : 1;
|
|
71
85
|
scaleY = bbox.height > 0 ? rect.height / bbox.height : 1;
|
|
72
86
|
} else {
|
|
73
87
|
// For HTML elements, use offsetWidth/offsetHeight
|
|
74
|
-
|
|
88
|
+
const element = event.currentTarget;
|
|
75
89
|
scaleX = element.offsetWidth > 0 ? rect.width / element.offsetWidth : 1;
|
|
76
90
|
scaleY = element.offsetHeight > 0 ? rect.height / element.offsetHeight : 1;
|
|
77
91
|
}
|
|
78
|
-
|
|
92
|
+
|
|
93
|
+
const getCoordinates = (clientX: number, clientY: number): RelativePointer => ({
|
|
79
94
|
/*
|
|
80
95
|
* Here it's important to use:
|
|
81
96
|
* - event.clientX and event.clientY to get the mouse position relative to the viewport, including scroll.
|
|
@@ -89,8 +104,10 @@ export function getRelativeCoordinate(event) {
|
|
|
89
104
|
relativeX: Math.round((clientX - rect.left) / scaleX),
|
|
90
105
|
relativeY: Math.round((clientY - rect.top) / scaleY),
|
|
91
106
|
});
|
|
107
|
+
|
|
92
108
|
if ('touches' in event) {
|
|
93
109
|
return Array.from(event.touches).map((touch) => getCoordinates(touch.clientX, touch.clientY));
|
|
94
110
|
}
|
|
111
|
+
|
|
95
112
|
return getCoordinates(event.clientX, event.clientY);
|
|
96
113
|
}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
// Adapted from recharts@3.9.2, commit b3451050c027a23957ffa50a2665c9119df21e47.
|
|
2
|
+
export function getSliced<T>(
|
|
3
|
+
arr: ReadonlyArray<T>,
|
|
4
|
+
startIndex: number,
|
|
5
|
+
endIndex: number,
|
|
6
|
+
): ReadonlyArray<T> {
|
|
7
|
+
if (!Array.isArray(arr)) {
|
|
8
|
+
return arr;
|
|
9
|
+
}
|
|
10
|
+
if (arr && startIndex + endIndex !== 0) {
|
|
11
|
+
return arr.slice(startIndex, endIndex + 1);
|
|
12
|
+
}
|
|
13
|
+
return arr;
|
|
14
|
+
}
|
|
@@ -1,83 +1,24 @@
|
|
|
1
|
-
//
|
|
2
|
-
// Do not edit — update by re-vendoring when the recharts devDependency moves.
|
|
3
|
-
function _slicedToArray(r, e) {
|
|
4
|
-
return (
|
|
5
|
-
_arrayWithHoles(r) ||
|
|
6
|
-
_iterableToArrayLimit(r, e) ||
|
|
7
|
-
_unsupportedIterableToArray(r, e) ||
|
|
8
|
-
_nonIterableRest()
|
|
9
|
-
);
|
|
10
|
-
}
|
|
11
|
-
function _nonIterableRest() {
|
|
12
|
-
throw new TypeError(
|
|
13
|
-
'Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.',
|
|
14
|
-
);
|
|
15
|
-
}
|
|
16
|
-
function _unsupportedIterableToArray(r, a) {
|
|
17
|
-
if (r) {
|
|
18
|
-
if ('string' == typeof r) return _arrayLikeToArray(r, a);
|
|
19
|
-
var t = {}.toString.call(r).slice(8, -1);
|
|
20
|
-
return (
|
|
21
|
-
'Object' === t && r.constructor && (t = r.constructor.name),
|
|
22
|
-
'Map' === t || 'Set' === t
|
|
23
|
-
? Array.from(r)
|
|
24
|
-
: 'Arguments' === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t)
|
|
25
|
-
? _arrayLikeToArray(r, a)
|
|
26
|
-
: void 0
|
|
27
|
-
);
|
|
28
|
-
}
|
|
29
|
-
}
|
|
30
|
-
function _arrayLikeToArray(r, a) {
|
|
31
|
-
(null == a || a > r.length) && (a = r.length);
|
|
32
|
-
for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e];
|
|
33
|
-
return n;
|
|
34
|
-
}
|
|
35
|
-
function _iterableToArrayLimit(r, l) {
|
|
36
|
-
var t =
|
|
37
|
-
null == r ? null : ('undefined' != typeof Symbol && r[Symbol.iterator]) || r['@@iterator'];
|
|
38
|
-
if (null != t) {
|
|
39
|
-
var e,
|
|
40
|
-
n,
|
|
41
|
-
i,
|
|
42
|
-
u,
|
|
43
|
-
a = [],
|
|
44
|
-
f = !0,
|
|
45
|
-
o = !1;
|
|
46
|
-
try {
|
|
47
|
-
if (((i = (t = t.call(r)).next), 0 === l)) {
|
|
48
|
-
if (Object(t) !== t) return;
|
|
49
|
-
f = !1;
|
|
50
|
-
} else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0);
|
|
51
|
-
} catch (r) {
|
|
52
|
-
((o = !0), (n = r));
|
|
53
|
-
} finally {
|
|
54
|
-
try {
|
|
55
|
-
if (!f && null != t.return && ((u = t.return()), Object(u) !== u)) return;
|
|
56
|
-
} finally {
|
|
57
|
-
if (o) throw n;
|
|
58
|
-
}
|
|
59
|
-
}
|
|
60
|
-
return a;
|
|
61
|
-
}
|
|
62
|
-
}
|
|
63
|
-
function _arrayWithHoles(r) {
|
|
64
|
-
if (Array.isArray(r)) return r;
|
|
65
|
-
}
|
|
1
|
+
// Adapted from recharts@3.9.2, commit b3451050c027a23957ffa50a2665c9119df21e47.
|
|
66
2
|
import { MAX_VALUE_REG, MIN_VALUE_REG } from './ChartUtils';
|
|
67
3
|
import { isNumber } from './DataUtils';
|
|
4
|
+
import { AxisDomain, NumberDomain } from './types';
|
|
68
5
|
import { isWellBehavedNumber } from './isWellBehavedNumber';
|
|
69
|
-
|
|
6
|
+
|
|
7
|
+
export function isWellFormedNumberDomain(v: unknown): v is NumberDomain {
|
|
70
8
|
if (Array.isArray(v) && v.length === 2) {
|
|
71
|
-
|
|
72
|
-
min = _v[0],
|
|
73
|
-
max = _v[1];
|
|
9
|
+
const [min, max] = v;
|
|
74
10
|
if (isWellBehavedNumber(min) && isWellBehavedNumber(max)) {
|
|
75
11
|
return true;
|
|
76
12
|
}
|
|
77
13
|
}
|
|
78
14
|
return false;
|
|
79
15
|
}
|
|
80
|
-
|
|
16
|
+
|
|
17
|
+
export function extendDomain(
|
|
18
|
+
providedDomain: NumberDomain,
|
|
19
|
+
boundaryDomain: NumberDomain,
|
|
20
|
+
allowDataOverflow: boolean,
|
|
21
|
+
): NumberDomain {
|
|
81
22
|
if (allowDataOverflow) {
|
|
82
23
|
// If the data are allowed to overflow - we're fine with whatever user provided
|
|
83
24
|
return providedDomain;
|
|
@@ -115,7 +56,10 @@ export function extendDomain(providedDomain, boundaryDomain, allowDataOverflow)
|
|
|
115
56
|
*
|
|
116
57
|
* @return [min, max] domain if it's well-formed; undefined if the domain is invalid
|
|
117
58
|
*/
|
|
118
|
-
export function numericalDomainSpecifiedWithoutRequiringData(
|
|
59
|
+
export function numericalDomainSpecifiedWithoutRequiringData(
|
|
60
|
+
userDomain: AxisDomain | undefined,
|
|
61
|
+
allowDataOverflow: boolean,
|
|
62
|
+
) {
|
|
119
63
|
if (!allowDataOverflow) {
|
|
120
64
|
// Cannot compute data overflow if the data is not provided
|
|
121
65
|
return undefined;
|
|
@@ -125,23 +69,24 @@ export function numericalDomainSpecifiedWithoutRequiringData(userDomain, allowDa
|
|
|
125
69
|
return undefined;
|
|
126
70
|
}
|
|
127
71
|
if (Array.isArray(userDomain) && userDomain.length === 2) {
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
var finalMin, finalMax;
|
|
72
|
+
const [providedMin, providedMax] = userDomain;
|
|
73
|
+
let finalMin, finalMax: string | number | undefined;
|
|
74
|
+
|
|
132
75
|
if (isWellBehavedNumber(providedMin)) {
|
|
133
76
|
finalMin = providedMin;
|
|
134
77
|
} else if (typeof providedMin === 'function') {
|
|
135
78
|
// The user function expects the data to be provided as an argument
|
|
136
79
|
return undefined;
|
|
137
80
|
}
|
|
81
|
+
|
|
138
82
|
if (isWellBehavedNumber(providedMax)) {
|
|
139
83
|
finalMax = providedMax;
|
|
140
84
|
} else if (typeof providedMax === 'function') {
|
|
141
85
|
// The user function expects the data to be provided as an argument
|
|
142
86
|
return undefined;
|
|
143
87
|
}
|
|
144
|
-
|
|
88
|
+
|
|
89
|
+
const candidate = [finalMin, finalMax];
|
|
145
90
|
if (isWellFormedNumberDomain(candidate)) {
|
|
146
91
|
return candidate;
|
|
147
92
|
}
|
|
@@ -169,26 +114,29 @@ export function numericalDomainSpecifiedWithoutRequiringData(userDomain, allowDa
|
|
|
169
114
|
*
|
|
170
115
|
* @return [min, max] domain if it's well-formed; undefined if the domain is invalid
|
|
171
116
|
*/
|
|
172
|
-
export function parseNumericalUserDomain(
|
|
117
|
+
export function parseNumericalUserDomain(
|
|
118
|
+
userDomain: AxisDomain | undefined,
|
|
119
|
+
dataDomain: NumberDomain | undefined,
|
|
120
|
+
allowDataOverflow: boolean,
|
|
121
|
+
): NumberDomain | undefined {
|
|
173
122
|
if (!allowDataOverflow && dataDomain == null) {
|
|
174
123
|
// Cannot compute data overflow if the data is not provided
|
|
175
124
|
return undefined;
|
|
176
125
|
}
|
|
177
126
|
if (typeof userDomain === 'function' && dataDomain != null) {
|
|
178
127
|
try {
|
|
179
|
-
|
|
128
|
+
const result = userDomain(dataDomain, allowDataOverflow);
|
|
180
129
|
if (isWellFormedNumberDomain(result)) {
|
|
181
130
|
return extendDomain(result, dataDomain, allowDataOverflow);
|
|
182
131
|
}
|
|
183
|
-
} catch
|
|
132
|
+
} catch {
|
|
184
133
|
/* ignore the exception and compute domain from data later */
|
|
185
134
|
}
|
|
186
135
|
}
|
|
187
136
|
if (Array.isArray(userDomain) && userDomain.length === 2) {
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
var finalMin, finalMax;
|
|
137
|
+
const [providedMin, providedMax] = userDomain;
|
|
138
|
+
let finalMin, finalMax: string | number | undefined;
|
|
139
|
+
|
|
192
140
|
if (providedMin === 'auto') {
|
|
193
141
|
if (dataDomain != null) {
|
|
194
142
|
finalMin = Math.min(...dataDomain);
|
|
@@ -198,24 +146,23 @@ export function parseNumericalUserDomain(userDomain, dataDomain, allowDataOverfl
|
|
|
198
146
|
} else if (typeof providedMin === 'function') {
|
|
199
147
|
try {
|
|
200
148
|
if (dataDomain != null) {
|
|
201
|
-
finalMin = providedMin(
|
|
202
|
-
dataDomain === null || dataDomain === void 0 ? void 0 : dataDomain[0],
|
|
203
|
-
);
|
|
149
|
+
finalMin = providedMin(dataDomain?.[0]);
|
|
204
150
|
}
|
|
205
|
-
} catch
|
|
151
|
+
} catch {
|
|
206
152
|
/* ignore the exception and compute domain from data later */
|
|
207
153
|
}
|
|
208
154
|
} else if (typeof providedMin === 'string' && MIN_VALUE_REG.test(providedMin)) {
|
|
209
|
-
|
|
155
|
+
const match = MIN_VALUE_REG.exec(providedMin);
|
|
210
156
|
if (match == null || match[1] == null || dataDomain == null) {
|
|
211
157
|
finalMin = undefined;
|
|
212
158
|
} else {
|
|
213
|
-
|
|
159
|
+
const value = +match[1];
|
|
214
160
|
finalMin = dataDomain[0] - value;
|
|
215
161
|
}
|
|
216
162
|
} else {
|
|
217
|
-
finalMin = dataDomain
|
|
163
|
+
finalMin = dataDomain?.[0];
|
|
218
164
|
}
|
|
165
|
+
|
|
219
166
|
if (providedMax === 'auto') {
|
|
220
167
|
if (dataDomain != null) {
|
|
221
168
|
finalMax = Math.max(...dataDomain);
|
|
@@ -225,25 +172,24 @@ export function parseNumericalUserDomain(userDomain, dataDomain, allowDataOverfl
|
|
|
225
172
|
} else if (typeof providedMax === 'function') {
|
|
226
173
|
try {
|
|
227
174
|
if (dataDomain != null) {
|
|
228
|
-
finalMax = providedMax(
|
|
229
|
-
dataDomain === null || dataDomain === void 0 ? void 0 : dataDomain[1],
|
|
230
|
-
);
|
|
175
|
+
finalMax = providedMax(dataDomain?.[1]);
|
|
231
176
|
}
|
|
232
|
-
} catch
|
|
177
|
+
} catch {
|
|
233
178
|
/* ignore the exception and compute domain from data later */
|
|
234
179
|
}
|
|
235
180
|
} else if (typeof providedMax === 'string' && MAX_VALUE_REG.test(providedMax)) {
|
|
236
|
-
|
|
237
|
-
if (
|
|
181
|
+
const match = MAX_VALUE_REG.exec(providedMax);
|
|
182
|
+
if (match == null || match[1] == null || dataDomain == null) {
|
|
238
183
|
finalMax = undefined;
|
|
239
184
|
} else {
|
|
240
|
-
|
|
241
|
-
finalMax = dataDomain[1] +
|
|
185
|
+
const value = +match[1];
|
|
186
|
+
finalMax = dataDomain[1] + value;
|
|
242
187
|
}
|
|
243
188
|
} else {
|
|
244
|
-
finalMax = dataDomain
|
|
189
|
+
finalMax = dataDomain?.[1];
|
|
245
190
|
}
|
|
246
|
-
|
|
191
|
+
|
|
192
|
+
const candidate = [finalMin, finalMax];
|
|
247
193
|
if (isWellFormedNumberDomain(candidate)) {
|
|
248
194
|
if (dataDomain == null) {
|
|
249
195
|
return candidate;
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
// Adapted from recharts@3.9.2, commit b3451050c027a23957ffa50a2665c9119df21e47.
|
|
2
|
+
export function isWellBehavedNumber(n: unknown): n is number {
|
|
3
|
+
return Number.isFinite(n);
|
|
4
|
+
}
|
|
5
|
+
|
|
6
|
+
export function isPositiveNumber(n: unknown): n is number {
|
|
7
|
+
return typeof n === 'number' && n > 0 && Number.isFinite(n);
|
|
8
|
+
}
|
|
@@ -1,8 +1,7 @@
|
|
|
1
|
-
//
|
|
2
|
-
// shallowEqual comes from @octanejs/redux instead of react-redux (identical
|
|
3
|
-
// algorithm). Update by re-vendoring when the recharts devDependency moves.
|
|
1
|
+
// Adapted from recharts@3.9.2, commit b3451050c027a23957ffa50a2665c9119df21e47.
|
|
4
2
|
import { shallowEqual } from '@octanejs/redux';
|
|
5
|
-
|
|
3
|
+
|
|
4
|
+
const propsToShallowCompare = new Set<string>([
|
|
6
5
|
'axisLine',
|
|
7
6
|
'tickLine',
|
|
8
7
|
'activeBar',
|
|
@@ -40,7 +39,7 @@ var propsToShallowCompare = new Set([
|
|
|
40
39
|
* @param y second value to compare
|
|
41
40
|
* return true if the same, false if different
|
|
42
41
|
*/
|
|
43
|
-
function sameValueZero(x, y) {
|
|
42
|
+
function sameValueZero(x: unknown, y: unknown): boolean {
|
|
44
43
|
if (x == null && y == null) {
|
|
45
44
|
/*
|
|
46
45
|
* treat null and undefined as equal. Internally in Recharts we make no difference between these two
|
|
@@ -67,9 +66,12 @@ function sameValueZero(x, y) {
|
|
|
67
66
|
* @param prevProps
|
|
68
67
|
* @param nextProps
|
|
69
68
|
*/
|
|
70
|
-
export function propsAreEqual
|
|
71
|
-
|
|
72
|
-
|
|
69
|
+
export function propsAreEqual<T extends Record<string, unknown>>(
|
|
70
|
+
prevProps: T,
|
|
71
|
+
nextProps: T,
|
|
72
|
+
): boolean {
|
|
73
|
+
const allKeys = new Set<string>([...Object.keys(prevProps), ...Object.keys(nextProps)]);
|
|
74
|
+
for (const key of allKeys) {
|
|
73
75
|
/*
|
|
74
76
|
* If a key is on a special allowlist, go one level deeper
|
|
75
77
|
* and do a shallow comparison of the values.
|