@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
package/src/cartesian/Bar.tsrx
CHANGED
|
@@ -1,3 +1,177 @@
|
|
|
1
|
+
import type { RegisteredCell } from '../context/CellsContext.ts';
|
|
2
|
+
import type { CellPropsFor } from '../component/Cell.ts';
|
|
3
|
+
import type {
|
|
4
|
+
MutableRefObject,
|
|
5
|
+
NativeMouseEvent,
|
|
6
|
+
OctaneElement,
|
|
7
|
+
OctaneNode,
|
|
8
|
+
} from '../util/OctaneTypes.ts';
|
|
9
|
+
import type { Octane } from 'octane/jsx-runtime';
|
|
10
|
+
|
|
11
|
+
type Key = Octane.Key;
|
|
12
|
+
import type { Series } from 'victory-vendor/d3-shape';
|
|
13
|
+
import type { Props as RectangleProps, RectRadius } from '../shape/Rectangle.tsrx';
|
|
14
|
+
import type { ErrorBarDataPointFormatter } from './ErrorBar.tsrx';
|
|
15
|
+
import type { CartesianLabelListEntry, ImplicitLabelListType } from '../component/LabelList.tsrx';
|
|
16
|
+
import type { BarPositionPosition, StackId } from '../util/ChartUtils';
|
|
17
|
+
import type {
|
|
18
|
+
ActiveShape,
|
|
19
|
+
AnimationDuration,
|
|
20
|
+
CartesianLayout,
|
|
21
|
+
CartesianViewBoxRequired,
|
|
22
|
+
ChartOffsetInternal,
|
|
23
|
+
Coordinate,
|
|
24
|
+
DataConsumer,
|
|
25
|
+
DataKey,
|
|
26
|
+
LegendType,
|
|
27
|
+
PresentationAttributesAdaptChildEvent,
|
|
28
|
+
ShapeAnimationProps,
|
|
29
|
+
TickItem,
|
|
30
|
+
TooltipType,
|
|
31
|
+
TrapezoidViewBox,
|
|
32
|
+
} from '../util/types';
|
|
33
|
+
import type { BarBackgroundRectangleProps, MinPointSize } from '../util/BarUtils.tsrx';
|
|
34
|
+
import type { Formatter } from '../component/DefaultTooltipContent.tsrx';
|
|
35
|
+
import type { TooltipPayloadConfiguration } from '../state/tooltipSlice';
|
|
36
|
+
import type { BaseAxisWithScale } from '../state/selectors/axisSelectors';
|
|
37
|
+
import type { BarSettings } from '../state/types/BarSettings';
|
|
38
|
+
import type { SVGPropsNoEvents } from '../util/svgPropertiesNoEvents';
|
|
39
|
+
import type { AnimationInterpolateFn } from '../animation/AnimatedItems.tsrx';
|
|
40
|
+
import type { AnimationMatchByProp } from '../animation/matchBy';
|
|
41
|
+
import type { EasingInput } from '../animation/easing';
|
|
42
|
+
import type { WithoutId } from '../util/useUniqueId';
|
|
43
|
+
import type { ZIndexable } from '../zIndex/ZIndexLayer.tsrx';
|
|
44
|
+
import type { AxisId } from '../state/cartesianAxisSlice';
|
|
45
|
+
import type { GraphicalItemId } from '../state/graphicalItemsSlice';
|
|
46
|
+
import type { ChartData } from '../state/chartDataSlice';
|
|
47
|
+
|
|
48
|
+
type BarRectangleType = {
|
|
49
|
+
x: number;
|
|
50
|
+
y: number;
|
|
51
|
+
width: number;
|
|
52
|
+
height: number;
|
|
53
|
+
};
|
|
54
|
+
export interface BarRectangleItem extends RectangleProps {
|
|
55
|
+
value: number | [number, number];
|
|
56
|
+
background?: BarRectangleType;
|
|
57
|
+
tooltipPosition: Coordinate;
|
|
58
|
+
readonly payload?: any;
|
|
59
|
+
parentViewBox: CartesianViewBoxRequired;
|
|
60
|
+
x: number;
|
|
61
|
+
y: number;
|
|
62
|
+
width: number;
|
|
63
|
+
height: number;
|
|
64
|
+
stackedBarStart: number | undefined;
|
|
65
|
+
originalDataIndex: number;
|
|
66
|
+
}
|
|
67
|
+
export type BarShapeProps =
|
|
68
|
+
BarRectangleItem & ShapeAnimationProps & {
|
|
69
|
+
isActive: boolean;
|
|
70
|
+
index: number;
|
|
71
|
+
};
|
|
72
|
+
export type BarBackgroundShapeProps = Omit<BarShapeProps, 'value' | 'tooltipPosition'>;
|
|
73
|
+
interface BarProps<DataPointType, ValueAxisType> extends DataConsumer<
|
|
74
|
+
DataPointType,
|
|
75
|
+
ValueAxisType
|
|
76
|
+
>, ZIndexable {
|
|
77
|
+
className?: string;
|
|
78
|
+
index?: Key;
|
|
79
|
+
xAxisId?: AxisId;
|
|
80
|
+
yAxisId?: AxisId;
|
|
81
|
+
stackId?: StackId;
|
|
82
|
+
barSize?: string | number;
|
|
83
|
+
unit?: string | number;
|
|
84
|
+
name?: string | number;
|
|
85
|
+
tooltipType?: TooltipType;
|
|
86
|
+
formatter?: Formatter;
|
|
87
|
+
legendType?: LegendType;
|
|
88
|
+
minPointSize?: MinPointSize;
|
|
89
|
+
maxBarSize?: number;
|
|
90
|
+
hide?: boolean;
|
|
91
|
+
shape?: ActiveShape<BarShapeProps, SVGPathElement>;
|
|
92
|
+
activeBar?: ActiveShape<BarShapeProps, SVGPathElement>;
|
|
93
|
+
background?: ActiveShape<BarBackgroundShapeProps, SVGPathElement> & ZIndexable;
|
|
94
|
+
radius?: RectRadius;
|
|
95
|
+
onAnimationStart?: () => void;
|
|
96
|
+
onAnimationEnd?: () => void;
|
|
97
|
+
isAnimationActive?: boolean | 'auto';
|
|
98
|
+
animationBegin?: number;
|
|
99
|
+
animationDuration?: AnimationDuration;
|
|
100
|
+
animationEasing?: EasingInput;
|
|
101
|
+
animationInterpolateFn?: AnimationInterpolateFn<BarRectangleItem, CartesianLayout>;
|
|
102
|
+
animationMatchBy?: AnimationMatchByProp<BarRectangleItem>;
|
|
103
|
+
id?: string;
|
|
104
|
+
label?: ImplicitLabelListType;
|
|
105
|
+
zIndex?: number;
|
|
106
|
+
}
|
|
107
|
+
type BarMouseEvent =
|
|
108
|
+
(data: BarRectangleItem, index: number, event: NativeMouseEvent<SVGGElement>) => void;
|
|
109
|
+
interface BarEvents {
|
|
110
|
+
onClick: BarMouseEvent;
|
|
111
|
+
onMouseEnter: BarMouseEvent;
|
|
112
|
+
onMouseLeave: BarMouseEvent;
|
|
113
|
+
onMouseMove: BarMouseEvent;
|
|
114
|
+
onMouseDown: BarMouseEvent;
|
|
115
|
+
onMouseUp: BarMouseEvent;
|
|
116
|
+
onMouseOver: BarMouseEvent;
|
|
117
|
+
onMouseOut: BarMouseEvent;
|
|
118
|
+
}
|
|
119
|
+
type InternalBarProps = {
|
|
120
|
+
layout: 'horizontal' | 'vertical';
|
|
121
|
+
data: ReadonlyArray<BarRectangleItem> | undefined;
|
|
122
|
+
xAxisId: string | number;
|
|
123
|
+
yAxisId: string | number;
|
|
124
|
+
hide: boolean;
|
|
125
|
+
legendType: LegendType;
|
|
126
|
+
minPointSize: MinPointSize;
|
|
127
|
+
activeBar: ActiveShape<BarShapeProps, SVGPathElement>;
|
|
128
|
+
isAnimationActive: boolean | 'auto';
|
|
129
|
+
animationBegin: number;
|
|
130
|
+
animationDuration: AnimationDuration;
|
|
131
|
+
animationEasing: EasingInput;
|
|
132
|
+
needClip?: boolean;
|
|
133
|
+
className?: string;
|
|
134
|
+
index?: Key;
|
|
135
|
+
stackId?: string | number;
|
|
136
|
+
barSize?: string | number;
|
|
137
|
+
unit?: string | number;
|
|
138
|
+
name?: string | number;
|
|
139
|
+
dataKey?: DataKey<any>;
|
|
140
|
+
tooltipType?: TooltipType;
|
|
141
|
+
formatter?: Formatter;
|
|
142
|
+
maxBarSize?: number;
|
|
143
|
+
shape: ActiveShape<BarShapeProps, SVGPathElement>;
|
|
144
|
+
background?: ActiveShape<BarBackgroundShapeProps, SVGPathElement>;
|
|
145
|
+
radius?: number | [number, number, number, number];
|
|
146
|
+
onAnimationStart?: () => void;
|
|
147
|
+
onAnimationEnd?: () => void;
|
|
148
|
+
animationInterpolateFn: AnimationInterpolateFn<BarRectangleItem, CartesianLayout>;
|
|
149
|
+
animationMatchBy: AnimationMatchByProp<BarRectangleItem>;
|
|
150
|
+
id: GraphicalItemId;
|
|
151
|
+
label?: ImplicitLabelListType;
|
|
152
|
+
};
|
|
153
|
+
type BarSvgProps =
|
|
154
|
+
Omit<
|
|
155
|
+
PresentationAttributesAdaptChildEvent<BarRectangleItem, SVGGElement>,
|
|
156
|
+
'radius' | 'name' | 'ref'
|
|
157
|
+
>;
|
|
158
|
+
export type Props<DataPointType = any, ValueAxisType = any> =
|
|
159
|
+
Partial<BarEvents> & BarProps<DataPointType, ValueAxisType> & Omit<BarSvgProps, keyof BarEvents>;
|
|
160
|
+
type InternalProps = BarSvgProps & InternalBarProps;
|
|
161
|
+
type BarBackgroundProps = {
|
|
162
|
+
background?: ActiveShape<BarBackgroundShapeProps, SVGPathElement>;
|
|
163
|
+
data: ReadonlyArray<BarRectangleItem> | undefined;
|
|
164
|
+
dataKey: DataKey<any> | undefined;
|
|
165
|
+
allOtherBarProps: InternalProps;
|
|
166
|
+
};
|
|
167
|
+
type BarRectanglesProps =
|
|
168
|
+
InternalProps & {
|
|
169
|
+
data: ReadonlyArray<BarRectangleItem> | undefined;
|
|
170
|
+
};
|
|
171
|
+
type BarImplProps =
|
|
172
|
+
Omit<InternalBarProps, 'layout' | 'data'> & {
|
|
173
|
+
children?: OctaneNode;
|
|
174
|
+
};
|
|
1
175
|
// Port of cartesian/Bar.tsx — the bar graphical item: redux registration
|
|
2
176
|
// (graphical item, legend, tooltip settings), store-computed rectangles,
|
|
3
177
|
// background bars, active-bar highlight, stack clipping, labels, animation.
|
|
@@ -21,7 +195,12 @@ import {
|
|
|
21
195
|
truncateByDomain,
|
|
22
196
|
} from '../util/ChartUtils';
|
|
23
197
|
import { adaptEventsOfChild } from '../util/types.ts';
|
|
24
|
-
import {
|
|
198
|
+
import {
|
|
199
|
+
BarRectangle,
|
|
200
|
+
BarBackgroundRectangle,
|
|
201
|
+
defaultBarShape,
|
|
202
|
+
minPointSizeCallback,
|
|
203
|
+
} from '../util/BarUtils.tsrx';
|
|
25
204
|
import {
|
|
26
205
|
useMouseClickItemDispatch,
|
|
27
206
|
useMouseEnterItemDispatch,
|
|
@@ -55,7 +234,7 @@ import { propsAreEqual } from '../util/propsAreEqual';
|
|
|
55
234
|
import { BarStackClipLayer, useStackId } from './BarStack.tsrx';
|
|
56
235
|
import { CellsContext, useCellRegistry } from '../context/CellsContext';
|
|
57
236
|
|
|
58
|
-
const computeLegendPayloadFromBarData = (props) => {
|
|
237
|
+
const computeLegendPayloadFromBarData = (props: Props) => {
|
|
59
238
|
const { dataKey, name, fill, legendType, hide } = props;
|
|
60
239
|
return [
|
|
61
240
|
{
|
|
@@ -69,7 +248,21 @@ const computeLegendPayloadFromBarData = (props) => {
|
|
|
69
248
|
];
|
|
70
249
|
};
|
|
71
250
|
|
|
72
|
-
const SetBarTooltipEntrySettings = memo((
|
|
251
|
+
const SetBarTooltipEntrySettings = memo((
|
|
252
|
+
props: Pick<
|
|
253
|
+
InternalProps,
|
|
254
|
+
| 'dataKey'
|
|
255
|
+
| 'stroke'
|
|
256
|
+
| 'strokeWidth'
|
|
257
|
+
| 'fill'
|
|
258
|
+
| 'name'
|
|
259
|
+
| 'hide'
|
|
260
|
+
| 'unit'
|
|
261
|
+
| 'formatter'
|
|
262
|
+
| 'tooltipType'
|
|
263
|
+
| 'id'
|
|
264
|
+
>,
|
|
265
|
+
) => {
|
|
73
266
|
const {
|
|
74
267
|
dataKey,
|
|
75
268
|
stroke,
|
|
@@ -82,7 +275,7 @@ const SetBarTooltipEntrySettings = memo((props) => {
|
|
|
82
275
|
tooltipType,
|
|
83
276
|
id,
|
|
84
277
|
} = props;
|
|
85
|
-
const tooltipEntrySettings = {
|
|
278
|
+
const tooltipEntrySettings: TooltipPayloadConfiguration = {
|
|
86
279
|
dataDefinedOnItem: undefined,
|
|
87
280
|
getPosition: noop,
|
|
88
281
|
settings: {
|
|
@@ -103,7 +296,7 @@ const SetBarTooltipEntrySettings = memo((props) => {
|
|
|
103
296
|
return <SetTooltipEntrySettings tooltipEntrySettings={tooltipEntrySettings} />;
|
|
104
297
|
});
|
|
105
298
|
|
|
106
|
-
function BarBackground(props) {
|
|
299
|
+
function BarBackground(props: BarBackgroundProps) {
|
|
107
300
|
const activeIndex = useAppSelector(selectActiveTooltipIndex);
|
|
108
301
|
const { data, dataKey, background: backgroundFromProps, allOtherBarProps } = props;
|
|
109
302
|
const {
|
|
@@ -137,7 +330,7 @@ function BarBackground(props) {
|
|
|
137
330
|
const onMouseEnter = onMouseEnterFromContext(entry, entry.originalDataIndex);
|
|
138
331
|
const onMouseLeave = onMouseLeaveFromContext(entry, entry.originalDataIndex);
|
|
139
332
|
const onClick = onClickFromContext(entry, entry.originalDataIndex);
|
|
140
|
-
const barRectangleProps = {
|
|
333
|
+
const barRectangleProps: BarBackgroundRectangleProps = {
|
|
141
334
|
option: backgroundFromProps,
|
|
142
335
|
isActive: String(entry.originalDataIndex) === activeIndex,
|
|
143
336
|
...rest,
|
|
@@ -152,14 +345,20 @@ function BarBackground(props) {
|
|
|
152
345
|
index: i,
|
|
153
346
|
className: 'recharts-bar-background-rectangle',
|
|
154
347
|
};
|
|
155
|
-
return <
|
|
348
|
+
return <BarBackgroundRectangle key={'background-bar-' + i} {...barRectangleProps} />;
|
|
156
349
|
})}</ZIndexLayer>;
|
|
157
350
|
}
|
|
158
351
|
|
|
159
|
-
function BarLabelListProvider(props
|
|
352
|
+
function BarLabelListProvider(props: {
|
|
353
|
+
showLabels: boolean;
|
|
354
|
+
children: OctaneNode;
|
|
355
|
+
rects: ReadonlyArray<BarRectangleItem> | undefined;
|
|
356
|
+
}) @{
|
|
160
357
|
const { showLabels, children, rects } = props;
|
|
161
|
-
const labelListEntries = rects?.map((
|
|
162
|
-
|
|
358
|
+
const labelListEntries: ReadonlyArray<CartesianLabelListEntry> | undefined = rects?.map((
|
|
359
|
+
entry: BarRectangleItem,
|
|
360
|
+
) => {
|
|
361
|
+
const viewBox: TrapezoidViewBox = {
|
|
163
362
|
x: entry.x,
|
|
164
363
|
y: entry.y,
|
|
165
364
|
width: entry.width,
|
|
@@ -181,20 +380,27 @@ function BarLabelListProvider(props) @{
|
|
|
181
380
|
>{children}</CartesianLabelListContextProvider>
|
|
182
381
|
}
|
|
183
382
|
|
|
184
|
-
function BarRectangleWithActiveState(props
|
|
383
|
+
function BarRectangleWithActiveState(props: ShapeAnimationProps & {
|
|
384
|
+
shape: ActiveShape<BarShapeProps, SVGPathElement>;
|
|
385
|
+
activeBar: ActiveShape<BarShapeProps, SVGPathElement>;
|
|
386
|
+
baseProps: WithoutId<SVGPropsNoEvents<BarRectanglesProps>>;
|
|
387
|
+
entry: BarRectangleItem;
|
|
388
|
+
index: number;
|
|
389
|
+
dataKey: DataKey<any> | undefined;
|
|
390
|
+
}) {
|
|
185
391
|
const { shape, activeBar, baseProps, entry, index, dataKey } = props;
|
|
186
392
|
const activeIndex = useAppSelector(selectActiveTooltipIndex);
|
|
187
393
|
const activeDataKey = useAppSelector(selectActiveTooltipDataKey);
|
|
188
394
|
// Only highlight this bar when it matches the active index AND (for
|
|
189
395
|
// non-shared tooltips) the active dataKey. originalDataIndex matches
|
|
190
396
|
// against the pre-filter data slice.
|
|
191
|
-
const isActive =
|
|
397
|
+
const isActive: boolean =
|
|
192
398
|
activeBar && String(entry.originalDataIndex) === activeIndex &&
|
|
193
399
|
(activeDataKey == null || dataKey === activeDataKey);
|
|
194
400
|
const [stayInLayer, setStayInLayer] = useState(false);
|
|
195
401
|
const [hasMountedActive, setHasMountedActive] = useState(false);
|
|
196
402
|
useEffect(() => {
|
|
197
|
-
let rafId;
|
|
403
|
+
let rafId: number;
|
|
198
404
|
if (isActive) {
|
|
199
405
|
// 1. Enter the layer immediately
|
|
200
406
|
setStayInLayer(true);
|
|
@@ -218,7 +424,7 @@ function BarRectangleWithActiveState(props) {
|
|
|
218
424
|
}, [isActive]);
|
|
219
425
|
const isVisuallyActive = isActive && hasMountedActive;
|
|
220
426
|
const shouldRenderInLayer = isActive || stayInLayer;
|
|
221
|
-
let option
|
|
427
|
+
let option: ActiveShape<BarShapeProps, SVGPathElement>;
|
|
222
428
|
if (isActive) {
|
|
223
429
|
if (activeBar === true) {
|
|
224
430
|
option = shape;
|
|
@@ -249,7 +455,13 @@ function BarRectangleWithActiveState(props) {
|
|
|
249
455
|
return content;
|
|
250
456
|
}
|
|
251
457
|
|
|
252
|
-
function BarRectangleNeverActive(props
|
|
458
|
+
function BarRectangleNeverActive(props: ShapeAnimationProps & {
|
|
459
|
+
shape: ActiveShape<BarShapeProps, SVGPathElement>;
|
|
460
|
+
baseProps: WithoutId<SVGPropsNoEvents<BarRectanglesProps>>;
|
|
461
|
+
entry: BarRectangleItem;
|
|
462
|
+
index: number;
|
|
463
|
+
dataKey: DataKey<any> | undefined;
|
|
464
|
+
}) {
|
|
253
465
|
const { shape, baseProps, entry, index, dataKey } = props;
|
|
254
466
|
return <BarRectangle
|
|
255
467
|
{...baseProps}
|
|
@@ -265,7 +477,10 @@ function BarRectangleNeverActive(props) {
|
|
|
265
477
|
/>;
|
|
266
478
|
}
|
|
267
479
|
|
|
268
|
-
function BarRectangles(rectanglesProps
|
|
480
|
+
function BarRectangles(rectanglesProps: ShapeAnimationProps & {
|
|
481
|
+
data: ReadonlyArray<BarRectangleItem> | undefined;
|
|
482
|
+
props: BarRectanglesProps;
|
|
483
|
+
}) {
|
|
269
484
|
const { data, props, animationElapsedTime, isAnimating, isEntrance } = rectanglesProps;
|
|
270
485
|
const { id, ...baseProps } = svgPropertiesNoEvents(props) ?? {};
|
|
271
486
|
const { shape, dataKey, activeBar } = props;
|
|
@@ -321,7 +536,11 @@ function BarRectangles(rectanglesProps) {
|
|
|
321
536
|
</>;
|
|
322
537
|
}
|
|
323
538
|
|
|
324
|
-
const defaultBarAnimateItems
|
|
539
|
+
const defaultBarAnimateItems: AnimationInterpolateFn<BarRectangleItem, CartesianLayout> = (
|
|
540
|
+
items,
|
|
541
|
+
animationElapsedTime,
|
|
542
|
+
layout,
|
|
543
|
+
) => {
|
|
325
544
|
if (items == null) return [];
|
|
326
545
|
if (animationElapsedTime === 1) {
|
|
327
546
|
return items.flatMap((item) => (item.status === 'removed' ? [] : [item.next]));
|
|
@@ -374,7 +593,10 @@ const defaultBarAnimateItems = (items, animationElapsedTime, layout) => {
|
|
|
374
593
|
});
|
|
375
594
|
};
|
|
376
595
|
|
|
377
|
-
function RectanglesWithAnimation(rectanglesWithAnimationProps
|
|
596
|
+
function RectanglesWithAnimation(rectanglesWithAnimationProps: {
|
|
597
|
+
props: InternalProps;
|
|
598
|
+
previousRectanglesRef: MutableRefObject<null | ReadonlyArray<BarRectangleItem>>;
|
|
599
|
+
}) {
|
|
378
600
|
const { props, previousRectanglesRef } = rectanglesWithAnimationProps;
|
|
379
601
|
const {
|
|
380
602
|
data,
|
|
@@ -420,14 +642,17 @@ function RectanglesWithAnimation(rectanglesWithAnimationProps) {
|
|
|
420
642
|
</BarLabelListProvider>;
|
|
421
643
|
}
|
|
422
644
|
|
|
423
|
-
function RenderRectangles(props) {
|
|
424
|
-
const previousRectanglesRef = useRef(null);
|
|
645
|
+
function RenderRectangles(props: InternalProps) {
|
|
646
|
+
const previousRectanglesRef = useRef<ReadonlyArray<BarRectangleItem> | null>(null);
|
|
425
647
|
return <RectanglesWithAnimation previousRectanglesRef={previousRectanglesRef} props={props} />;
|
|
426
648
|
}
|
|
427
649
|
|
|
428
|
-
const defaultMinPointSize = 0;
|
|
650
|
+
const defaultMinPointSize: number = 0;
|
|
429
651
|
|
|
430
|
-
const errorBarDataPointFormatter = (
|
|
652
|
+
const errorBarDataPointFormatter: ErrorBarDataPointFormatter<BarRectangleItem> = (
|
|
653
|
+
dataPoint: BarRectangleItem,
|
|
654
|
+
dataKey,
|
|
655
|
+
) => {
|
|
431
656
|
// A value array means a stacked bar: arr[1] is the bar's end value.
|
|
432
657
|
const value = Array.isArray(dataPoint.value) ? dataPoint.value[1] : dataPoint.value;
|
|
433
658
|
return {
|
|
@@ -439,7 +664,7 @@ const errorBarDataPointFormatter = (dataPoint, dataKey) => {
|
|
|
439
664
|
};
|
|
440
665
|
};
|
|
441
666
|
|
|
442
|
-
function BarWithState(props) @{
|
|
667
|
+
function BarWithState(props: InternalProps) @{
|
|
443
668
|
const { hide, data, dataKey, className, xAxisId, yAxisId, needClip, background, id } = props;
|
|
444
669
|
if (hide || data == null) {
|
|
445
670
|
return null;
|
|
@@ -484,9 +709,9 @@ export const defaultBarProps = {
|
|
|
484
709
|
xAxisId: 0,
|
|
485
710
|
yAxisId: 0,
|
|
486
711
|
zIndex: DefaultZIndexes.bar,
|
|
487
|
-
}
|
|
712
|
+
} as const satisfies Partial<Props>;
|
|
488
713
|
|
|
489
|
-
function BarImpl(props) {
|
|
714
|
+
function BarImpl(props: BarImplProps) {
|
|
490
715
|
const {
|
|
491
716
|
xAxisId,
|
|
492
717
|
yAxisId,
|
|
@@ -505,11 +730,13 @@ function BarImpl(props) {
|
|
|
505
730
|
// octane divergence: cells arrive via registration (children render inside
|
|
506
731
|
// the CellsContext provider below), not children introspection.
|
|
507
732
|
const [cells, cellRegistry] = useCellRegistry();
|
|
508
|
-
const rects = useAppSelector(
|
|
733
|
+
const rects: ReadonlyArray<BarRectangleItem> | undefined = useAppSelector(
|
|
734
|
+
(state) => selectBarRectangles(state, props.id, isPanorama, cells),
|
|
735
|
+
);
|
|
509
736
|
if (layout !== 'vertical' && layout !== 'horizontal') {
|
|
510
737
|
return null;
|
|
511
738
|
}
|
|
512
|
-
let errorBarOffset;
|
|
739
|
+
let errorBarOffset: number;
|
|
513
740
|
const firstDataPoint = rects?.[0];
|
|
514
741
|
if (firstDataPoint == null || firstDataPoint.height == null || firstDataPoint.width == null) {
|
|
515
742
|
errorBarOffset = 0;
|
|
@@ -559,22 +786,39 @@ export function computeBarRectangles({
|
|
|
559
786
|
cells,
|
|
560
787
|
parentViewBox,
|
|
561
788
|
dataStartIndex,
|
|
789
|
+
}: {
|
|
790
|
+
layout: 'horizontal' | 'vertical';
|
|
791
|
+
barSettings: BarSettings;
|
|
792
|
+
pos: BarPositionPosition;
|
|
793
|
+
bandSize: number;
|
|
794
|
+
xAxis: BaseAxisWithScale;
|
|
795
|
+
yAxis: BaseAxisWithScale;
|
|
796
|
+
xAxisTicks: TickItem[];
|
|
797
|
+
yAxisTicks: TickItem[];
|
|
798
|
+
stackedData: Series<Record<number, number>, DataKey<any>> | undefined;
|
|
799
|
+
offset: ChartOffsetInternal;
|
|
800
|
+
displayedData: ChartData;
|
|
801
|
+
cells: ReadonlyArray<RegisteredCell> | undefined;
|
|
802
|
+
parentViewBox: CartesianViewBoxRequired;
|
|
803
|
+
dataStartIndex: number;
|
|
562
804
|
}) {
|
|
563
805
|
const numericAxis =
|
|
564
806
|
layout === 'horizontal' ? yAxis : xAxis;
|
|
565
|
-
const stackedDomain =
|
|
566
|
-
stackedData ? numericAxis.scale.domain() : null;
|
|
807
|
+
const stackedDomain = stackedData ? numericAxis.scale.domain() as readonly number[] : null;
|
|
567
808
|
const baseValue = getBaseValueOfBar({ numericAxis });
|
|
568
|
-
const stackedBarStart = numericAxis.scale.map(baseValue);
|
|
569
|
-
|
|
570
|
-
let value, x, y, width, height, background
|
|
809
|
+
const stackedBarStart: number | undefined = numericAxis.scale.map(baseValue);
|
|
810
|
+
const rectangles = displayedData.map((entry, index) => {
|
|
811
|
+
let value, x: number | null, y, width, height, background: Omit<BarRectangleType, 'x' | 'y'> & {
|
|
812
|
+
x: number | null;
|
|
813
|
+
y: number | null;
|
|
814
|
+
};
|
|
571
815
|
if (stackedData) {
|
|
572
816
|
// Use dataStartIndex to access the correct element in the full stackedData array
|
|
573
817
|
const untruncatedValue = stackedData[index + dataStartIndex];
|
|
574
818
|
if (untruncatedValue == null) {
|
|
575
819
|
return null;
|
|
576
820
|
}
|
|
577
|
-
value = truncateByDomain(untruncatedValue, stackedDomain);
|
|
821
|
+
value = truncateByDomain(untruncatedValue, stackedDomain!);
|
|
578
822
|
} else {
|
|
579
823
|
value = getValueByDataKey(entry, dataKey);
|
|
580
824
|
if (!Array.isArray(value)) {
|
|
@@ -643,7 +887,7 @@ export function computeBarRectangles({
|
|
|
643
887
|
return null;
|
|
644
888
|
}
|
|
645
889
|
return {
|
|
646
|
-
...entry,
|
|
890
|
+
...entry as Record<string, unknown>,
|
|
647
891
|
stackedBarStart,
|
|
648
892
|
x,
|
|
649
893
|
y,
|
|
@@ -651,16 +895,26 @@ export function computeBarRectangles({
|
|
|
651
895
|
height,
|
|
652
896
|
value: stackedData ? value : value[1],
|
|
653
897
|
payload: entry,
|
|
654
|
-
|
|
898
|
+
// Background origins come from x/y or chart offsets; the guard above
|
|
899
|
+
// has removed every entry with unresolved x/y coordinates.
|
|
900
|
+
background: background as BarRectangleType,
|
|
655
901
|
tooltipPosition: { x: x + width / 2, y: y + height / 2 },
|
|
656
902
|
parentViewBox,
|
|
657
903
|
originalDataIndex: index,
|
|
658
|
-
...cells && cells[index] && cells[index].props
|
|
904
|
+
...cells && cells[index] && cells[index].props as CellPropsFor<SVGPathElement>,
|
|
659
905
|
};
|
|
660
|
-
})
|
|
906
|
+
});
|
|
907
|
+
// This map returns only objects or null, so Boolean removes exactly the nulls.
|
|
908
|
+
return rectangles.filter(
|
|
909
|
+
Boolean as BooleanConstructor & ((rectangle: (typeof rectangles)[number]) => rectangle is NonNullable<
|
|
910
|
+
typeof rectangle
|
|
911
|
+
>),
|
|
912
|
+
);
|
|
661
913
|
}
|
|
662
914
|
|
|
663
|
-
function BarFn(
|
|
915
|
+
function BarFn<DataPointType = any, ValueAxisType = any>(
|
|
916
|
+
outsideProps: Props<DataPointType, ValueAxisType>,
|
|
917
|
+
) {
|
|
664
918
|
const props = resolveDefaultProps(outsideProps, defaultBarProps);
|
|
665
919
|
// stackId may arrive from props or from BarStack context
|
|
666
920
|
const stackId = useStackId(props.stackId);
|
|
@@ -712,5 +966,5 @@ function BarFn(outsideProps) {
|
|
|
712
966
|
* @consumes CartesianChartContext
|
|
713
967
|
* @consumes BarStackContext
|
|
714
968
|
*/
|
|
715
|
-
export const Bar = memo(BarFn, propsAreEqual);
|
|
969
|
+
export const Bar = memo(BarFn, propsAreEqual) as typeof BarFn & { displayName?: string };
|
|
716
970
|
Bar.displayName = 'Bar';
|
|
@@ -1,3 +1,17 @@
|
|
|
1
|
+
import type { ComponentType, OctaneNode } from '../util/OctaneTypes.ts';
|
|
2
|
+
import type { NormalizedStackId, StackId } from '../util/ChartUtils';
|
|
3
|
+
import type { Props as LayerProps } from '../container/Layer.tsrx';
|
|
4
|
+
import type { RectRadius } from '../shape/Rectangle.tsrx';
|
|
5
|
+
|
|
6
|
+
export type BarStackProps = {
|
|
7
|
+
stackId?: StackId;
|
|
8
|
+
radius?: RectRadius;
|
|
9
|
+
children?: OctaneNode;
|
|
10
|
+
};
|
|
11
|
+
export type BarStackSettings = {
|
|
12
|
+
stackId: NormalizedStackId;
|
|
13
|
+
radius: RectRadius;
|
|
14
|
+
};
|
|
1
15
|
// Port of cartesian/BarStack.tsx — rounded-corner clipping for whole bar
|
|
2
16
|
// stacks: one clipPath per stack rectangle, referenced by the bars.
|
|
3
17
|
import { createContext, memo, useContext, useMemo } from 'octane';
|
|
@@ -11,12 +25,12 @@ import { Layer } from '../container/Layer.tsrx';
|
|
|
11
25
|
import { Rectangle } from '../shape/Rectangle.tsrx';
|
|
12
26
|
import { propsAreEqual } from '../util/propsAreEqual';
|
|
13
27
|
|
|
14
|
-
const BarStackContext = createContext(undefined);
|
|
28
|
+
const BarStackContext = createContext<BarStackSettings | undefined>(undefined);
|
|
15
29
|
|
|
16
30
|
/**
|
|
17
31
|
* Resolves the stack ID for a Bar: explicit prop wins, then BarStack context.
|
|
18
32
|
*/
|
|
19
|
-
export function useStackId(childStackId) {
|
|
33
|
+
export function useStackId(childStackId: StackId | undefined) {
|
|
20
34
|
const stackSettings = useContext(BarStackContext);
|
|
21
35
|
if (stackSettings != null) {
|
|
22
36
|
return stackSettings.stackId;
|
|
@@ -29,13 +43,13 @@ export function useStackId(childStackId) {
|
|
|
29
43
|
|
|
30
44
|
export const defaultBarStackProps = {
|
|
31
45
|
radius: 0,
|
|
32
|
-
}
|
|
46
|
+
} as const satisfies Partial<BarStackProps>;
|
|
33
47
|
|
|
34
|
-
const getClipPathId = (stackId, index) => {
|
|
48
|
+
const getClipPathId = (stackId: NormalizedStackId, index: number) => {
|
|
35
49
|
return 'recharts-bar-stack-clip-path-' + stackId + '-' + index;
|
|
36
50
|
};
|
|
37
51
|
|
|
38
|
-
export function useBarStackClipPathUrl(index) {
|
|
52
|
+
export function useBarStackClipPathUrl(index: number) {
|
|
39
53
|
const barStackContext = useContext(BarStackContext);
|
|
40
54
|
if (barStackContext == null) {
|
|
41
55
|
return undefined;
|
|
@@ -44,7 +58,9 @@ export function useBarStackClipPathUrl(index) {
|
|
|
44
58
|
return 'url(#' + getClipPathId(stackId, index) + ')';
|
|
45
59
|
}
|
|
46
60
|
|
|
47
|
-
export function BarStackClipLayer(props
|
|
61
|
+
export function BarStackClipLayer(props: LayerProps & {
|
|
62
|
+
index: number;
|
|
63
|
+
}) {
|
|
48
64
|
const { index, ...rest } = props;
|
|
49
65
|
const clipPathUrl = useBarStackClipPathUrl(index);
|
|
50
66
|
return <Layer className="recharts-bar-stack-layer" clipPath={clipPathUrl} {...rest} />;
|
|
@@ -54,7 +70,10 @@ export function BarStackClipLayer(props) {
|
|
|
54
70
|
* Renders one clipPath per stack rectangle so the whole stack gets rounded
|
|
55
71
|
* corners.
|
|
56
72
|
*/
|
|
57
|
-
function BarStackClipPath(props
|
|
73
|
+
function BarStackClipPath(props: {
|
|
74
|
+
stackId: NormalizedStackId;
|
|
75
|
+
radius: RectRadius;
|
|
76
|
+
}) {
|
|
58
77
|
const { stackId, radius } = props;
|
|
59
78
|
const isPanorama = useIsPanorama();
|
|
60
79
|
const positions = useAppSelector((state) => selectStackRects(state, stackId, isPanorama));
|
|
@@ -80,10 +99,13 @@ function BarStackClipPath(props) {
|
|
|
80
99
|
})}</defs>;
|
|
81
100
|
}
|
|
82
101
|
|
|
83
|
-
function BarStackImpl(props) @{
|
|
102
|
+
function BarStackImpl(props: BarStackProps) @{
|
|
84
103
|
const resolvedStackId = useUniqueId('recharts-bar-stack', getNormalizedStackId(props.stackId));
|
|
85
104
|
const { children, radius } = resolveDefaultProps(props, defaultBarStackProps);
|
|
86
|
-
const context = useMemo(() => ({ stackId: resolvedStackId, radius }), [
|
|
105
|
+
const context: BarStackSettings = useMemo(() => ({ stackId: resolvedStackId, radius }), [
|
|
106
|
+
resolvedStackId,
|
|
107
|
+
radius,
|
|
108
|
+
]);
|
|
87
109
|
<BarStackContext.Provider value={context}>
|
|
88
110
|
<BarStackClipPath stackId={resolvedStackId} radius={radius} />
|
|
89
111
|
{children}
|