@octanejs/recharts 0.1.41 → 0.1.43
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
|
@@ -1,25 +1,35 @@
|
|
|
1
|
-
//
|
|
2
|
-
|
|
3
|
-
|
|
1
|
+
// Adapted from recharts@3.9.2, commit b3451050c027a23957ffa50a2665c9119df21e47.
|
|
2
|
+
import {
|
|
3
|
+
createAction,
|
|
4
|
+
createListenerMiddleware,
|
|
5
|
+
ListenerEffectAPI,
|
|
6
|
+
PayloadAction,
|
|
7
|
+
} from '@reduxjs/toolkit';
|
|
8
|
+
import { AppDispatch, RechartsRootState } from './store';
|
|
4
9
|
import { mouseLeaveChart, setMouseClickAxisIndex, setMouseOverAxisIndex } from './tooltipSlice';
|
|
5
10
|
import { selectActivePropsFromChartPointer } from './selectors/selectActivePropsFromChartPointer';
|
|
6
11
|
import { selectTooltipEventType } from './selectors/selectTooltipEventType';
|
|
12
|
+
|
|
7
13
|
import { getRelativeCoordinate } from '../util/getRelativeCoordinate';
|
|
8
|
-
|
|
9
|
-
|
|
14
|
+
import { RelativePointer, HTMLMousePointer } from '../util/types';
|
|
15
|
+
|
|
16
|
+
export const mouseClickAction = createAction<HTMLMousePointer>('mouseClick');
|
|
17
|
+
|
|
18
|
+
export const mouseClickMiddleware = createListenerMiddleware<RechartsRootState>();
|
|
10
19
|
|
|
11
20
|
// TODO: there's a bug here when you click the chart the activeIndex resets to zero
|
|
12
21
|
mouseClickMiddleware.startListening({
|
|
13
22
|
actionCreator: mouseClickAction,
|
|
14
|
-
effect: (
|
|
15
|
-
|
|
16
|
-
|
|
23
|
+
effect: (
|
|
24
|
+
action: PayloadAction<HTMLMousePointer>,
|
|
25
|
+
listenerApi: ListenerEffectAPI<RechartsRootState, AppDispatch>,
|
|
26
|
+
) => {
|
|
27
|
+
const mousePointer = action.payload;
|
|
28
|
+
const activeProps = selectActivePropsFromChartPointer(
|
|
17
29
|
listenerApi.getState(),
|
|
18
30
|
getRelativeCoordinate(mousePointer),
|
|
19
31
|
);
|
|
20
|
-
if (
|
|
21
|
-
(activeProps === null || activeProps === void 0 ? void 0 : activeProps.activeIndex) != null
|
|
22
|
-
) {
|
|
32
|
+
if (activeProps?.activeIndex != null) {
|
|
23
33
|
listenerApi.dispatch(
|
|
24
34
|
setMouseClickAxisIndex({
|
|
25
35
|
activeIndex: activeProps.activeIndex,
|
|
@@ -30,8 +40,10 @@ mouseClickMiddleware.startListening({
|
|
|
30
40
|
}
|
|
31
41
|
},
|
|
32
42
|
});
|
|
33
|
-
|
|
34
|
-
export
|
|
43
|
+
|
|
44
|
+
export const mouseMoveAction = createAction<HTMLMousePointer>('mouseMove');
|
|
45
|
+
|
|
46
|
+
export const mouseMoveMiddleware = createListenerMiddleware<RechartsRootState>();
|
|
35
47
|
|
|
36
48
|
/*
|
|
37
49
|
* This single rafId is safe because:
|
|
@@ -41,22 +53,21 @@ export var mouseMoveMiddleware = createListenerMiddleware();
|
|
|
41
53
|
* This is different from externalEventsMiddleware which handles multiple event types
|
|
42
54
|
* (click, mouseenter, mouseleave, etc.) that should NOT cancel each other.
|
|
43
55
|
*/
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
56
|
+
let rafId: number | null = null;
|
|
57
|
+
let timeoutId: ReturnType<typeof setTimeout> | null = null;
|
|
58
|
+
let latestChartPointer: RelativePointer | null = null;
|
|
59
|
+
|
|
47
60
|
mouseMoveMiddleware.startListening({
|
|
48
61
|
actionCreator: mouseMoveAction,
|
|
49
|
-
effect: (
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
? void 0
|
|
59
|
-
: throttledEvents.includes('mousemove'));
|
|
62
|
+
effect: (
|
|
63
|
+
action: PayloadAction<HTMLMousePointer>,
|
|
64
|
+
listenerApi: ListenerEffectAPI<RechartsRootState, AppDispatch>,
|
|
65
|
+
) => {
|
|
66
|
+
const mousePointer = action.payload;
|
|
67
|
+
|
|
68
|
+
const state = listenerApi.getState();
|
|
69
|
+
const { throttleDelay, throttledEvents } = state.eventSettings;
|
|
70
|
+
const isThrottled = throttledEvents === 'all' || throttledEvents?.includes('mousemove');
|
|
60
71
|
|
|
61
72
|
// Cancel any pending execution
|
|
62
73
|
if (rafId !== null) {
|
|
@@ -74,13 +85,13 @@ mouseMoveMiddleware.startListening({
|
|
|
74
85
|
* reference to currentTarget which getRelativeCoordinate uses.
|
|
75
86
|
*/
|
|
76
87
|
latestChartPointer = getRelativeCoordinate(mousePointer);
|
|
77
|
-
|
|
88
|
+
const callback = () => {
|
|
78
89
|
/*
|
|
79
90
|
* Here we read a fresh state again inside the callback to ensure we have the latest state values
|
|
80
91
|
* after any potential actions that may have been dispatched between the original event and this callback.
|
|
81
92
|
*/
|
|
82
|
-
|
|
83
|
-
|
|
93
|
+
const currentState = listenerApi.getState();
|
|
94
|
+
const tooltipEventType = selectTooltipEventType(
|
|
84
95
|
currentState,
|
|
85
96
|
currentState.tooltip.settings.shared,
|
|
86
97
|
);
|
|
@@ -95,11 +106,8 @@ mouseMoveMiddleware.startListening({
|
|
|
95
106
|
* Graphical items have its own mouse events handling mechanism where they attach events directly to the items.
|
|
96
107
|
*/
|
|
97
108
|
if (tooltipEventType === 'axis') {
|
|
98
|
-
|
|
99
|
-
if (
|
|
100
|
-
(activeProps === null || activeProps === void 0 ? void 0 : activeProps.activeIndex) !=
|
|
101
|
-
null
|
|
102
|
-
) {
|
|
109
|
+
const activeProps = selectActivePropsFromChartPointer(currentState, latestChartPointer);
|
|
110
|
+
if (activeProps?.activeIndex != null) {
|
|
103
111
|
listenerApi.dispatch(
|
|
104
112
|
setMouseOverAxisIndex({
|
|
105
113
|
activeIndex: activeProps.activeIndex,
|
|
@@ -115,10 +123,12 @@ mouseMoveMiddleware.startListening({
|
|
|
115
123
|
rafId = null;
|
|
116
124
|
timeoutId = null;
|
|
117
125
|
};
|
|
126
|
+
|
|
118
127
|
if (!isThrottled) {
|
|
119
128
|
callback();
|
|
120
129
|
return;
|
|
121
130
|
}
|
|
131
|
+
|
|
122
132
|
if (throttleDelay === 'raf') {
|
|
123
133
|
rafId = requestAnimationFrame(callback);
|
|
124
134
|
} else if (typeof throttleDelay === 'number') {
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
// Adapted from recharts@3.9.2, commit b3451050c027a23957ffa50a2665c9119df21e47.
|
|
2
|
+
import { createSlice } from '@reduxjs/toolkit';
|
|
3
|
+
import { TooltipEventType } from '../util/types';
|
|
4
|
+
import { TooltipIndex, TooltipPayloadSearcher } from './tooltipSlice';
|
|
5
|
+
import { isNan } from '../util/DataUtils';
|
|
6
|
+
|
|
7
|
+
/**
|
|
8
|
+
* These chart options are decided internally, by Recharts,
|
|
9
|
+
* and will not change during the lifetime of the chart.
|
|
10
|
+
*
|
|
11
|
+
* Changing these options can be done by swapping the root element
|
|
12
|
+
* which will make a brand-new Redux store.
|
|
13
|
+
*
|
|
14
|
+
* If you want to store options that can be changed by the user,
|
|
15
|
+
* use UpdatableChartOptions in rootPropsSlice.ts.
|
|
16
|
+
*/
|
|
17
|
+
export type ChartOptions = {
|
|
18
|
+
chartName: string;
|
|
19
|
+
defaultTooltipEventType: TooltipEventType;
|
|
20
|
+
validateTooltipEventTypes?: ReadonlyArray<TooltipEventType>;
|
|
21
|
+
// Should this instead be a property of a graphical item? Do we want to mix items with different data types in one chart?
|
|
22
|
+
tooltipPayloadSearcher: TooltipPayloadSearcher;
|
|
23
|
+
/**
|
|
24
|
+
* We use this to identify which chart is sending events when synchronising.
|
|
25
|
+
* Without it, we can't tell the difference between an action that arrived from another chart
|
|
26
|
+
* and an action that was dispatched by the chart itself.
|
|
27
|
+
*/
|
|
28
|
+
eventEmitter: symbol | undefined;
|
|
29
|
+
};
|
|
30
|
+
|
|
31
|
+
export const arrayTooltipSearcher: TooltipPayloadSearcher = (
|
|
32
|
+
data: unknown,
|
|
33
|
+
strIndex: TooltipIndex,
|
|
34
|
+
): unknown | undefined => {
|
|
35
|
+
if (!strIndex) return undefined;
|
|
36
|
+
if (!Array.isArray(data)) return undefined;
|
|
37
|
+
const numIndex = Number.parseInt(strIndex, 10);
|
|
38
|
+
if (isNan(numIndex)) {
|
|
39
|
+
return undefined;
|
|
40
|
+
}
|
|
41
|
+
return data[numIndex];
|
|
42
|
+
};
|
|
43
|
+
|
|
44
|
+
const initialState: ChartOptions = {
|
|
45
|
+
chartName: '',
|
|
46
|
+
tooltipPayloadSearcher: () => undefined,
|
|
47
|
+
eventEmitter: undefined,
|
|
48
|
+
defaultTooltipEventType: 'axis',
|
|
49
|
+
};
|
|
50
|
+
|
|
51
|
+
const optionsSlice = createSlice({
|
|
52
|
+
name: 'options',
|
|
53
|
+
initialState,
|
|
54
|
+
reducers: {
|
|
55
|
+
createEventEmitter: (state: ChartOptions) => {
|
|
56
|
+
if (state.eventEmitter == null) {
|
|
57
|
+
state.eventEmitter = Symbol('rechartsEventEmitter');
|
|
58
|
+
}
|
|
59
|
+
},
|
|
60
|
+
},
|
|
61
|
+
});
|
|
62
|
+
|
|
63
|
+
export const optionsReducer = optionsSlice.reducer;
|
|
64
|
+
|
|
65
|
+
export const { createEventEmitter } = optionsSlice.actions;
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
// Adapted from recharts@3.9.2, commit b3451050c027a23957ffa50a2665c9119df21e47.
|
|
2
|
+
import { createSlice, PayloadAction } from '@reduxjs/toolkit';
|
|
3
|
+
import { castDraft } from 'immer';
|
|
4
|
+
import { AxisId, BaseCartesianAxis, TicksSettings } from './cartesianAxisSlice';
|
|
5
|
+
|
|
6
|
+
export type RadiusAxisSettings = BaseCartesianAxis & TicksSettings;
|
|
7
|
+
|
|
8
|
+
export type AngleAxisSettings = BaseCartesianAxis & TicksSettings;
|
|
9
|
+
|
|
10
|
+
type PolarAxisState = {
|
|
11
|
+
radiusAxis: Record<AxisId, RadiusAxisSettings>;
|
|
12
|
+
angleAxis: Record<AxisId, AngleAxisSettings>;
|
|
13
|
+
};
|
|
14
|
+
|
|
15
|
+
const initialState: PolarAxisState = {
|
|
16
|
+
radiusAxis: {},
|
|
17
|
+
angleAxis: {},
|
|
18
|
+
};
|
|
19
|
+
|
|
20
|
+
const polarAxisSlice = createSlice({
|
|
21
|
+
name: 'polarAxis',
|
|
22
|
+
initialState,
|
|
23
|
+
reducers: {
|
|
24
|
+
addRadiusAxis(state, action: PayloadAction<RadiusAxisSettings>) {
|
|
25
|
+
state.radiusAxis[action.payload.id] = castDraft(action.payload);
|
|
26
|
+
},
|
|
27
|
+
removeRadiusAxis(state, action: PayloadAction<RadiusAxisSettings>) {
|
|
28
|
+
delete state.radiusAxis[action.payload.id];
|
|
29
|
+
},
|
|
30
|
+
addAngleAxis(state, action: PayloadAction<AngleAxisSettings>) {
|
|
31
|
+
state.angleAxis[action.payload.id] = castDraft(action.payload);
|
|
32
|
+
},
|
|
33
|
+
removeAngleAxis(state, action: PayloadAction<AngleAxisSettings>) {
|
|
34
|
+
delete state.angleAxis[action.payload.id];
|
|
35
|
+
},
|
|
36
|
+
},
|
|
37
|
+
});
|
|
38
|
+
|
|
39
|
+
export const { addRadiusAxis, removeRadiusAxis, addAngleAxis, removeAngleAxis } =
|
|
40
|
+
polarAxisSlice.actions;
|
|
41
|
+
|
|
42
|
+
export const polarAxisReducer = polarAxisSlice.reducer;
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
// Adapted from recharts@3.9.2, commit b3451050c027a23957ffa50a2665c9119df21e47.
|
|
2
|
+
import { createSlice, PayloadAction } from '@reduxjs/toolkit';
|
|
3
|
+
|
|
4
|
+
export type PolarChartOptions = {
|
|
5
|
+
cx: number | string;
|
|
6
|
+
cy: number | string;
|
|
7
|
+
startAngle: number;
|
|
8
|
+
endAngle: number;
|
|
9
|
+
innerRadius: number | string;
|
|
10
|
+
outerRadius: number | string;
|
|
11
|
+
};
|
|
12
|
+
|
|
13
|
+
type PolarChartState = PolarChartOptions | null;
|
|
14
|
+
|
|
15
|
+
const initialState: PolarChartState = null;
|
|
16
|
+
|
|
17
|
+
const reducers = {
|
|
18
|
+
updatePolarOptions: (
|
|
19
|
+
state: PolarChartState,
|
|
20
|
+
action: PayloadAction<PolarChartOptions>,
|
|
21
|
+
): PolarChartOptions => {
|
|
22
|
+
if (state === null) {
|
|
23
|
+
return action.payload;
|
|
24
|
+
}
|
|
25
|
+
state.startAngle = action.payload.startAngle;
|
|
26
|
+
state.endAngle = action.payload.endAngle;
|
|
27
|
+
state.cx = action.payload.cx;
|
|
28
|
+
state.cy = action.payload.cy;
|
|
29
|
+
state.innerRadius = action.payload.innerRadius;
|
|
30
|
+
state.outerRadius = action.payload.outerRadius;
|
|
31
|
+
return state;
|
|
32
|
+
},
|
|
33
|
+
};
|
|
34
|
+
|
|
35
|
+
const polarOptionsSlice = createSlice<PolarChartState, typeof reducers, 'polarOptions', {}>({
|
|
36
|
+
name: 'polarOptions',
|
|
37
|
+
initialState,
|
|
38
|
+
reducers,
|
|
39
|
+
});
|
|
40
|
+
|
|
41
|
+
export const { updatePolarOptions } = polarOptionsSlice.actions;
|
|
42
|
+
|
|
43
|
+
export const polarOptionsReducer = polarOptionsSlice.reducer;
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
// Adapted from recharts@3.9.2, commit b3451050c027a23957ffa50a2665c9119df21e47.
|
|
2
|
+
export function reduxDevtoolsJsonStringifyReplacer(key: string, value: unknown) {
|
|
3
|
+
if (value instanceof HTMLElement) {
|
|
4
|
+
return `HTMLElement <${value.tagName} class="${value.className}">`;
|
|
5
|
+
}
|
|
6
|
+
if (value === window) {
|
|
7
|
+
return 'global.window';
|
|
8
|
+
}
|
|
9
|
+
if (key === 'children' && typeof value === 'object' && value !== null) {
|
|
10
|
+
return '<<CHILDREN>>';
|
|
11
|
+
}
|
|
12
|
+
return value;
|
|
13
|
+
}
|
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
// Adapted from recharts@3.9.2, commit b3451050c027a23957ffa50a2665c9119df21e47.
|
|
2
|
+
import { createSlice, current, PayloadAction } from '@reduxjs/toolkit';
|
|
3
|
+
import { castDraft, WritableDraft } from 'immer';
|
|
4
|
+
import { AxisId } from './cartesianAxisSlice';
|
|
5
|
+
import { IfOverflow } from '../util/IfOverflow';
|
|
6
|
+
import { ReferenceLineSegment } from '../cartesian/ReferenceLine.tsrx';
|
|
7
|
+
|
|
8
|
+
export type ReferenceElementSettings = {
|
|
9
|
+
yAxisId: AxisId;
|
|
10
|
+
xAxisId: AxisId;
|
|
11
|
+
ifOverflow: IfOverflow;
|
|
12
|
+
};
|
|
13
|
+
|
|
14
|
+
export type ReferenceDotSettings = ReferenceElementSettings & {
|
|
15
|
+
x: unknown;
|
|
16
|
+
y: unknown;
|
|
17
|
+
r: number;
|
|
18
|
+
};
|
|
19
|
+
|
|
20
|
+
export type ReferenceAreaSettings = ReferenceElementSettings & {
|
|
21
|
+
x1: unknown;
|
|
22
|
+
x2: unknown;
|
|
23
|
+
y1: unknown;
|
|
24
|
+
y2: unknown;
|
|
25
|
+
};
|
|
26
|
+
|
|
27
|
+
export type ReferenceLineSettings = ReferenceElementSettings & {
|
|
28
|
+
x: unknown;
|
|
29
|
+
y: unknown;
|
|
30
|
+
segment: ReferenceLineSegment | undefined;
|
|
31
|
+
};
|
|
32
|
+
|
|
33
|
+
type ReferenceElementState = {
|
|
34
|
+
dots: ReadonlyArray<ReferenceDotSettings>;
|
|
35
|
+
areas: ReadonlyArray<ReferenceAreaSettings>;
|
|
36
|
+
lines: ReadonlyArray<ReferenceLineSettings>;
|
|
37
|
+
};
|
|
38
|
+
|
|
39
|
+
const initialState: ReferenceElementState = {
|
|
40
|
+
dots: [],
|
|
41
|
+
areas: [],
|
|
42
|
+
lines: [],
|
|
43
|
+
};
|
|
44
|
+
|
|
45
|
+
export const referenceElementsSlice = createSlice({
|
|
46
|
+
name: 'referenceElements',
|
|
47
|
+
initialState,
|
|
48
|
+
reducers: {
|
|
49
|
+
addDot: (
|
|
50
|
+
state: WritableDraft<ReferenceElementState>,
|
|
51
|
+
action: PayloadAction<ReferenceDotSettings>,
|
|
52
|
+
) => {
|
|
53
|
+
state.dots.push(action.payload);
|
|
54
|
+
},
|
|
55
|
+
removeDot: (
|
|
56
|
+
state: WritableDraft<ReferenceElementState>,
|
|
57
|
+
action: PayloadAction<ReferenceDotSettings>,
|
|
58
|
+
) => {
|
|
59
|
+
const index = current(state).dots.findIndex((dot) => dot === action.payload);
|
|
60
|
+
if (index !== -1) {
|
|
61
|
+
state.dots.splice(index, 1);
|
|
62
|
+
}
|
|
63
|
+
},
|
|
64
|
+
addArea: (
|
|
65
|
+
state: WritableDraft<ReferenceElementState>,
|
|
66
|
+
action: PayloadAction<ReferenceAreaSettings>,
|
|
67
|
+
) => {
|
|
68
|
+
state.areas.push(action.payload);
|
|
69
|
+
},
|
|
70
|
+
removeArea: (
|
|
71
|
+
state: WritableDraft<ReferenceElementState>,
|
|
72
|
+
action: PayloadAction<ReferenceAreaSettings>,
|
|
73
|
+
) => {
|
|
74
|
+
const index = current(state).areas.findIndex((area) => area === action.payload);
|
|
75
|
+
if (index !== -1) {
|
|
76
|
+
state.areas.splice(index, 1);
|
|
77
|
+
}
|
|
78
|
+
},
|
|
79
|
+
addLine: (
|
|
80
|
+
state: WritableDraft<ReferenceElementState>,
|
|
81
|
+
action: PayloadAction<ReferenceLineSettings>,
|
|
82
|
+
) => {
|
|
83
|
+
state.lines.push(castDraft(action.payload));
|
|
84
|
+
},
|
|
85
|
+
removeLine: (
|
|
86
|
+
state: WritableDraft<ReferenceElementState>,
|
|
87
|
+
action: PayloadAction<ReferenceLineSettings>,
|
|
88
|
+
) => {
|
|
89
|
+
const index = current(state).lines.findIndex((line) => line === action.payload);
|
|
90
|
+
if (index !== -1) {
|
|
91
|
+
state.lines.splice(index, 1);
|
|
92
|
+
}
|
|
93
|
+
},
|
|
94
|
+
},
|
|
95
|
+
});
|
|
96
|
+
|
|
97
|
+
export const { addDot, removeDot, addArea, removeArea, addLine, removeLine } =
|
|
98
|
+
referenceElementsSlice.actions;
|
|
99
|
+
|
|
100
|
+
export const referenceElementsReducer = referenceElementsSlice.reducer;
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
// Adapted from recharts@3.9.2, commit b3451050c027a23957ffa50a2665c9119df21e47.
|
|
2
|
+
/**
|
|
3
|
+
* @fileOverview this stores actually rendered ticks.
|
|
4
|
+
*
|
|
5
|
+
* What we do is that we have the domain -> ticks mapping in the cartesianSlice,
|
|
6
|
+
* which is fine but the result then goes to CartesianAxis where we use DOM measurement
|
|
7
|
+
* to decide which ticks to actually render.
|
|
8
|
+
*
|
|
9
|
+
* This renderedTickSlice stores those actually rendered ticks so that we can return them from a hook later.
|
|
10
|
+
*/
|
|
11
|
+
import { createSlice, PayloadAction } from '@reduxjs/toolkit';
|
|
12
|
+
import { castDraft, WritableDraft } from 'immer';
|
|
13
|
+
import { TickItem } from '../util/types';
|
|
14
|
+
import { AxisId } from './cartesianAxisSlice';
|
|
15
|
+
|
|
16
|
+
type RenderedTicksAxisState = {
|
|
17
|
+
[axisId: AxisId]: ReadonlyArray<TickItem>;
|
|
18
|
+
};
|
|
19
|
+
|
|
20
|
+
type RenderedTicksState = {
|
|
21
|
+
xAxis: RenderedTicksAxisState;
|
|
22
|
+
yAxis: RenderedTicksAxisState;
|
|
23
|
+
};
|
|
24
|
+
|
|
25
|
+
const initialState: RenderedTicksState = {
|
|
26
|
+
xAxis: {},
|
|
27
|
+
yAxis: {},
|
|
28
|
+
};
|
|
29
|
+
|
|
30
|
+
export const renderedTicksSlice = createSlice({
|
|
31
|
+
name: 'renderedTicks',
|
|
32
|
+
initialState,
|
|
33
|
+
reducers: {
|
|
34
|
+
setRenderedTicks: (
|
|
35
|
+
state: WritableDraft<RenderedTicksState>,
|
|
36
|
+
action: PayloadAction<{
|
|
37
|
+
axisType: 'xAxis' | 'yAxis';
|
|
38
|
+
axisId: AxisId;
|
|
39
|
+
ticks: ReadonlyArray<TickItem>;
|
|
40
|
+
}>,
|
|
41
|
+
) => {
|
|
42
|
+
const { axisType, axisId, ticks } = action.payload;
|
|
43
|
+
state[axisType][axisId] = castDraft(ticks);
|
|
44
|
+
},
|
|
45
|
+
removeRenderedTicks: (
|
|
46
|
+
state: WritableDraft<RenderedTicksState>,
|
|
47
|
+
action: PayloadAction<{
|
|
48
|
+
axisType: 'xAxis' | 'yAxis';
|
|
49
|
+
axisId: AxisId;
|
|
50
|
+
}>,
|
|
51
|
+
) => {
|
|
52
|
+
const { axisType, axisId } = action.payload;
|
|
53
|
+
delete state[axisType][axisId];
|
|
54
|
+
},
|
|
55
|
+
},
|
|
56
|
+
});
|
|
57
|
+
|
|
58
|
+
export const { setRenderedTicks, removeRenderedTicks } = renderedTicksSlice.actions;
|
|
59
|
+
|
|
60
|
+
export const renderedTicksReducer = renderedTicksSlice.reducer;
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
// Adapted from recharts@3.9.2, commit b3451050c027a23957ffa50a2665c9119df21e47.
|
|
2
|
+
import { createSlice, PayloadAction } from '@reduxjs/toolkit';
|
|
3
|
+
import { StackOffsetType } from '../util/types';
|
|
4
|
+
import { SyncMethod } from '../synchronisation/types';
|
|
5
|
+
import { BaseValue } from '../cartesian/Area.tsrx';
|
|
6
|
+
|
|
7
|
+
/**
|
|
8
|
+
* These are chart options that users can choose - which means they can also
|
|
9
|
+
* choose to change them which should trigger a re-render.
|
|
10
|
+
*/
|
|
11
|
+
export type UpdatableChartOptions = {
|
|
12
|
+
accessibilityLayer: boolean;
|
|
13
|
+
barCategoryGap: number | string;
|
|
14
|
+
barGap: number | string;
|
|
15
|
+
barSize: string | number | undefined;
|
|
16
|
+
/**
|
|
17
|
+
* Useful for debugging which chart is which when synchronising.
|
|
18
|
+
* The className is also passed to the root element of the chart but that's done in the JSX, not through Redux.
|
|
19
|
+
*/
|
|
20
|
+
className: string | undefined;
|
|
21
|
+
maxBarSize: number | undefined;
|
|
22
|
+
stackOffset: StackOffsetType;
|
|
23
|
+
/**
|
|
24
|
+
* Charts that share the same syncId will have their Tooltip and Brush synchronised.
|
|
25
|
+
*/
|
|
26
|
+
syncId: number | string | undefined;
|
|
27
|
+
syncMethod: SyncMethod;
|
|
28
|
+
baseValue: BaseValue | undefined;
|
|
29
|
+
/**
|
|
30
|
+
* If false, stacked items will be rendered left to right. If true, stacked items will be rendered right to left.
|
|
31
|
+
* (Render direction affects SVG layering, not x position.)
|
|
32
|
+
*/
|
|
33
|
+
reverseStackOrder: boolean;
|
|
34
|
+
};
|
|
35
|
+
|
|
36
|
+
export const initialState: UpdatableChartOptions = {
|
|
37
|
+
accessibilityLayer: true,
|
|
38
|
+
barCategoryGap: '10%',
|
|
39
|
+
barGap: 4,
|
|
40
|
+
barSize: undefined,
|
|
41
|
+
className: undefined,
|
|
42
|
+
maxBarSize: undefined,
|
|
43
|
+
stackOffset: 'none',
|
|
44
|
+
syncId: undefined,
|
|
45
|
+
syncMethod: 'index',
|
|
46
|
+
baseValue: undefined,
|
|
47
|
+
reverseStackOrder: false,
|
|
48
|
+
};
|
|
49
|
+
|
|
50
|
+
const rootPropsSlice = createSlice({
|
|
51
|
+
name: 'rootProps',
|
|
52
|
+
initialState,
|
|
53
|
+
reducers: {
|
|
54
|
+
updateOptions: (state: UpdatableChartOptions, action: PayloadAction<UpdatableChartOptions>) => {
|
|
55
|
+
state.accessibilityLayer = action.payload.accessibilityLayer;
|
|
56
|
+
state.barCategoryGap = action.payload.barCategoryGap;
|
|
57
|
+
state.barGap = action.payload.barGap ?? initialState.barGap;
|
|
58
|
+
state.barSize = action.payload.barSize;
|
|
59
|
+
state.maxBarSize = action.payload.maxBarSize;
|
|
60
|
+
state.stackOffset = action.payload.stackOffset;
|
|
61
|
+
state.syncId = action.payload.syncId;
|
|
62
|
+
state.syncMethod = action.payload.syncMethod;
|
|
63
|
+
state.className = action.payload.className;
|
|
64
|
+
state.baseValue = action.payload.baseValue;
|
|
65
|
+
state.reverseStackOrder = action.payload.reverseStackOrder;
|
|
66
|
+
},
|
|
67
|
+
},
|
|
68
|
+
});
|
|
69
|
+
|
|
70
|
+
export const rootPropsReducer = rootPropsSlice.reducer;
|
|
71
|
+
|
|
72
|
+
export const { updateOptions } = rootPropsSlice.actions;
|
|
@@ -1,8 +1,7 @@
|
|
|
1
|
-
// @ts-nocheck -- retained upstream selector typing is outside the initial Area runtime port.
|
|
2
1
|
import { createSelector } from 'reselect';
|
|
3
2
|
import { SeriesPoint } from 'victory-vendor/d3-shape';
|
|
4
3
|
import { NullableCoordinate } from '../../util/types';
|
|
5
|
-
import { computeArea } from '../../cartesian/Area';
|
|
4
|
+
import { computeArea } from '../../cartesian/Area.tsrx';
|
|
6
5
|
import {
|
|
7
6
|
selectAxisWithScale,
|
|
8
7
|
selectStackGroups,
|
|
@@ -1,12 +1,11 @@
|
|
|
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
|
* Checks if two arrays are equal, treating empty arrays as equal regardless of reference.
|
|
5
4
|
* If both arrays are non-empty, it checks for reference equality.
|
|
6
5
|
* @param a
|
|
7
6
|
* @param b
|
|
8
7
|
*/
|
|
9
|
-
export function emptyArraysAreEqualCheck(a
|
|
8
|
+
export function emptyArraysAreEqualCheck<T>(a: ReadonlyArray<T>, b: ReadonlyArray<T>): boolean {
|
|
10
9
|
if (Array.isArray(a) && Array.isArray(b) && a.length === 0 && b.length === 0) {
|
|
11
10
|
// empty arrays are always equal, regardless of reference
|
|
12
11
|
return true;
|
|
@@ -19,9 +18,9 @@ export function emptyArraysAreEqualCheck(a, b) {
|
|
|
19
18
|
* @param a
|
|
20
19
|
* @param b
|
|
21
20
|
*/
|
|
22
|
-
export function arrayContentsAreEqualCheck(a
|
|
21
|
+
export function arrayContentsAreEqualCheck<T>(a: ReadonlyArray<T>, b: ReadonlyArray<T>): boolean {
|
|
23
22
|
if (a.length === b.length) {
|
|
24
|
-
for (
|
|
23
|
+
for (let i = 0; i < a.length; i++) {
|
|
25
24
|
if (a[i] !== b[i]) {
|
|
26
25
|
return false;
|
|
27
26
|
}
|