@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,5 +1,6 @@
|
|
|
1
|
+
import type { ComponentType, OctaneElement, SVGProps } from '../util/OctaneTypes.ts';
|
|
1
2
|
import * as React from 'octane';
|
|
2
|
-
import { cloneElement, createElement, isValidElement
|
|
3
|
+
import { cloneElement, createElement, isValidElement } from 'octane';
|
|
3
4
|
import { clsx } from 'clsx';
|
|
4
5
|
import {
|
|
5
6
|
ChartOffsetInternal,
|
|
@@ -9,19 +10,19 @@ import {
|
|
|
9
10
|
PolarCoordinate,
|
|
10
11
|
TooltipEventType,
|
|
11
12
|
} from '../util/types';
|
|
12
|
-
import { Curve } from '../shape/Curve';
|
|
13
|
-
import { Cross } from '../shape/Cross';
|
|
13
|
+
import { Curve } from '../shape/Curve.tsrx';
|
|
14
|
+
import { Cross } from '../shape/Cross.tsrx';
|
|
14
15
|
import { getCursorRectangle } from '../util/cursor/getCursorRectangle';
|
|
15
|
-
import { Rectangle } from '../shape/Rectangle';
|
|
16
|
+
import { Rectangle } from '../shape/Rectangle.tsrx';
|
|
16
17
|
import { getRadialCursorPoints } from '../util/cursor/getRadialCursorPoints';
|
|
17
|
-
import { Sector } from '../shape/Sector';
|
|
18
|
+
import { Sector } from '../shape/Sector.tsrx';
|
|
18
19
|
import { getCursorPoints } from '../util/cursor/getCursorPoints';
|
|
19
20
|
import { useChartLayout, useOffsetInternal } from '../context/chartLayoutContext';
|
|
20
21
|
import { useTooltipAxisBandSize } from '../context/useTooltipAxis';
|
|
21
22
|
import { useChartName } from '../state/selectors/selectors';
|
|
22
23
|
import { TooltipIndex, TooltipPayload } from '../state/tooltipSlice';
|
|
23
24
|
import { svgPropertiesNoEventsFromUnknown } from '../util/svgPropertiesNoEvents';
|
|
24
|
-
import { ZIndexable, ZIndexLayer } from '../zIndex/ZIndexLayer';
|
|
25
|
+
import { ZIndexable, ZIndexLayer } from '../zIndex/ZIndexLayer.tsrx';
|
|
25
26
|
import { DefaultZIndexes } from '../zIndex/DefaultZIndexes';
|
|
26
27
|
|
|
27
28
|
/**
|
|
@@ -29,7 +30,7 @@ import { DefaultZIndexes } from '../zIndex/DefaultZIndexes';
|
|
|
29
30
|
* If set an object, the option is the configuration of cursor.
|
|
30
31
|
* If set a React element, the option is the custom react element of drawing cursor
|
|
31
32
|
*/
|
|
32
|
-
export type CursorDefinition = boolean |
|
|
33
|
+
export type CursorDefinition = boolean | OctaneElement | SVGProps<SVGElement>;
|
|
33
34
|
|
|
34
35
|
export interface CursorProps extends ZIndexable {
|
|
35
36
|
cursor: CursorDefinition;
|
|
@@ -53,7 +54,7 @@ function RenderCursor({
|
|
|
53
54
|
cursorProps,
|
|
54
55
|
}: {
|
|
55
56
|
cursor: CursorDefinition;
|
|
56
|
-
cursorComp:
|
|
57
|
+
cursorComp: ComponentType<any>;
|
|
57
58
|
cursorProps: any;
|
|
58
59
|
}) {
|
|
59
60
|
if (isValidElement(cursor)) {
|
|
@@ -82,7 +83,7 @@ export function CursorInternal(props: CursorConnectedProps) {
|
|
|
82
83
|
if (!cursor || !activeCoordinate || chartName !== 'ScatterChart' && tooltipEventType !== 'axis') {
|
|
83
84
|
return null;
|
|
84
85
|
}
|
|
85
|
-
let restProps, cursorComp:
|
|
86
|
+
let restProps, cursorComp: ComponentType<any>, preferredZIndex: number;
|
|
86
87
|
|
|
87
88
|
if (chartName === 'ScatterChart') {
|
|
88
89
|
restProps = activeCoordinate;
|
|
@@ -110,7 +111,7 @@ export function CursorInternal(props: CursorConnectedProps) {
|
|
|
110
111
|
preferredZIndex = DefaultZIndexes.cursorLine;
|
|
111
112
|
}
|
|
112
113
|
|
|
113
|
-
const extraClassName
|
|
114
|
+
const extraClassName =
|
|
114
115
|
typeof cursor === 'object' && 'className' in cursor ? cursor.className : undefined;
|
|
115
116
|
|
|
116
117
|
const cursorProps = {
|
|
@@ -1,9 +1,14 @@
|
|
|
1
|
+
import type {
|
|
2
|
+
CSSProperties,
|
|
3
|
+
NativeMouseEvent,
|
|
4
|
+
OctaneElement,
|
|
5
|
+
OctaneNode,
|
|
6
|
+
} from '../util/OctaneTypes.ts';
|
|
1
7
|
import * as React from 'octane';
|
|
2
|
-
import { ReactNode, MouseEvent, ReactElement, CSSProperties } from 'octane';
|
|
3
8
|
|
|
4
9
|
import { clsx } from 'clsx';
|
|
5
|
-
import { Surface } from '../container/Surface';
|
|
6
|
-
import { Symbols } from '../shape/Symbols';
|
|
10
|
+
import { Surface } from '../container/Surface.tsrx';
|
|
11
|
+
import { Symbols } from '../shape/Symbols.tsrx';
|
|
7
12
|
import {
|
|
8
13
|
DataKey,
|
|
9
14
|
LegendType,
|
|
@@ -14,11 +19,11 @@ import {
|
|
|
14
19
|
import { RequiresDefaultProps, resolveDefaultProps } from '../util/resolveDefaultProps';
|
|
15
20
|
|
|
16
21
|
const SIZE = 32;
|
|
17
|
-
export type ContentType =
|
|
22
|
+
export type ContentType = OctaneElement | ((props: Props) => OctaneNode);
|
|
18
23
|
|
|
19
24
|
export type HorizontalAlignmentType = 'center' | 'left' | 'right';
|
|
20
25
|
export type VerticalAlignmentType = 'top' | 'bottom' | 'middle';
|
|
21
|
-
export type Formatter = (value: any, entry: LegendPayload, index: number) =>
|
|
26
|
+
export type Formatter = (value: any, entry: LegendPayload, index: number) => OctaneNode;
|
|
22
27
|
|
|
23
28
|
export interface LegendPayload {
|
|
24
29
|
/**
|
|
@@ -35,7 +40,7 @@ export interface LegendPayload {
|
|
|
35
40
|
payload?: object;
|
|
36
41
|
formatter?: Formatter;
|
|
37
42
|
inactive?: boolean;
|
|
38
|
-
legendIcon?:
|
|
43
|
+
legendIcon?: OctaneElement<SVGElement>;
|
|
39
44
|
dataKey?: DataKey<any>;
|
|
40
45
|
}
|
|
41
46
|
|
|
@@ -95,16 +100,16 @@ interface DefaultLegendContentProps {
|
|
|
95
100
|
* The customized event handler of mouseenter on the items in this group
|
|
96
101
|
* @example https://recharts.github.io/examples/LegendEffectOpacity
|
|
97
102
|
*/
|
|
98
|
-
onMouseEnter?: (data: LegendPayload, index: number, event:
|
|
103
|
+
onMouseEnter?: (data: LegendPayload, index: number, event: NativeMouseEvent<HTMLElement>) => void;
|
|
99
104
|
/**
|
|
100
105
|
* The customized event handler of mouseleave on the items in this group
|
|
101
106
|
* @example https://recharts.github.io/examples/LegendEffectOpacity
|
|
102
107
|
*/
|
|
103
|
-
onMouseLeave?: (data: LegendPayload, index: number, event:
|
|
108
|
+
onMouseLeave?: (data: LegendPayload, index: number, event: NativeMouseEvent<HTMLElement>) => void;
|
|
104
109
|
/**
|
|
105
110
|
* The customized event handler of click on the items in this group
|
|
106
111
|
*/
|
|
107
|
-
onClick?: (data: LegendPayload, index: number, event:
|
|
112
|
+
onClick?: (data: LegendPayload, index: number, event: NativeMouseEvent<HTMLElement>) => void;
|
|
108
113
|
/**
|
|
109
114
|
* DefaultLegendContent.payload is omitted from Legend props.
|
|
110
115
|
* A custom payload can be passed here if desired, or it can be passed from the Legend "content" callback.
|
|
@@ -119,7 +124,7 @@ interface DefaultLegendContentProps {
|
|
|
119
124
|
|
|
120
125
|
export type Props =
|
|
121
126
|
DefaultLegendContentProps & Omit<
|
|
122
|
-
PresentationAttributesAdaptChildEvent<any,
|
|
127
|
+
PresentationAttributesAdaptChildEvent<any, OctaneElement>,
|
|
123
128
|
keyof DefaultLegendContentProps
|
|
124
129
|
>;
|
|
125
130
|
|
|
@@ -1,9 +1,10 @@
|
|
|
1
|
+
import type { CSSProperties, HTMLAttributes, OctaneNode, SVGProps } from '../util/OctaneTypes.ts';
|
|
1
2
|
/**
|
|
2
3
|
* @fileOverview Default Tooltip Content
|
|
3
4
|
*/
|
|
4
5
|
|
|
5
6
|
import * as React from 'octane';
|
|
6
|
-
|
|
7
|
+
|
|
7
8
|
import sortBy from 'es-toolkit/compat/sortBy';
|
|
8
9
|
import { clsx } from 'clsx';
|
|
9
10
|
import { isNullish, isNumOrStr } from '../util/DataUtils';
|
|
@@ -35,7 +36,7 @@ export interface Payload<
|
|
|
35
36
|
formatter?: Formatter<TValue, TName>;
|
|
36
37
|
name?: TName;
|
|
37
38
|
value?: TValue;
|
|
38
|
-
unit?:
|
|
39
|
+
unit?: OctaneNode;
|
|
39
40
|
fill?: string;
|
|
40
41
|
dataKey?: DataKey<any>;
|
|
41
42
|
nameKey?: DataKey<any>;
|
|
@@ -69,8 +70,10 @@ export interface Props<TValue extends ValueType = ValueType, TName extends NameT
|
|
|
69
70
|
contentStyle?: CSSProperties;
|
|
70
71
|
itemStyle?: CSSProperties;
|
|
71
72
|
labelStyle?: CSSProperties;
|
|
72
|
-
labelFormatter?: (label:
|
|
73
|
-
|
|
73
|
+
labelFormatter?: (label: OctaneNode, payload: ReadonlyArray<
|
|
74
|
+
Payload<TValue, TName>
|
|
75
|
+
>) => OctaneNode;
|
|
76
|
+
label?: OctaneNode;
|
|
74
77
|
payload?: ReadonlyArray<Payload<TValue, TName>>;
|
|
75
78
|
itemSorter?: TooltipItemSorter<TValue, TName>;
|
|
76
79
|
accessibilityLayer?: boolean;
|
|
@@ -95,15 +98,14 @@ export const defaultDefaultTooltipContentProps = {
|
|
|
95
98
|
accessibilityLayer: false,
|
|
96
99
|
} as const satisfies Partial<Props<any, any>>;
|
|
97
100
|
|
|
98
|
-
function lodashLikeSortBy<T>(
|
|
101
|
+
function lodashLikeSortBy<T extends Payload>(
|
|
99
102
|
array: ReadonlyArray<T>,
|
|
100
103
|
itemSorter: TooltipItemSorter | undefined,
|
|
101
104
|
): ReadonlyArray<T> {
|
|
102
105
|
if (itemSorter == null) {
|
|
103
106
|
return array;
|
|
104
107
|
}
|
|
105
|
-
|
|
106
|
-
return sortBy(array, itemSorter);
|
|
108
|
+
return sortBy<T>(array, itemSorter);
|
|
107
109
|
}
|
|
108
110
|
|
|
109
111
|
/**
|
|
@@ -181,7 +183,7 @@ export const DefaultTooltipContent = (props: Props) => {
|
|
|
181
183
|
return null;
|
|
182
184
|
};
|
|
183
185
|
|
|
184
|
-
const finalStyle:
|
|
186
|
+
const finalStyle: CSSProperties = {
|
|
185
187
|
...defaultDefaultTooltipContentProps.contentStyle,
|
|
186
188
|
...contentStyle,
|
|
187
189
|
};
|
|
@@ -190,7 +192,7 @@ export const DefaultTooltipContent = (props: Props) => {
|
|
|
190
192
|
...labelStyle,
|
|
191
193
|
};
|
|
192
194
|
const hasLabel = !isNullish(label);
|
|
193
|
-
let finalLabel:
|
|
195
|
+
let finalLabel: OctaneNode = hasLabel ? label : '';
|
|
194
196
|
const wrapperCN = clsx('recharts-default-tooltip', wrapperClassName);
|
|
195
197
|
const labelCN = clsx('recharts-tooltip-label', labelClassName);
|
|
196
198
|
|
package/src/component/Dots.tsrx
CHANGED
|
@@ -1,3 +1,32 @@
|
|
|
1
|
+
import type { Props as DotProps } from '../shape/Dot.tsrx';
|
|
2
|
+
import type { OctaneElement } from '../util/OctaneTypes.ts';
|
|
3
|
+
import type { DataKey, DotItemDotProps, DotType } from '../util/types';
|
|
4
|
+
import type { ZIndexable } from '../zIndex/ZIndexLayer.tsrx';
|
|
5
|
+
|
|
6
|
+
export interface DotPoint {
|
|
7
|
+
readonly x: number | null;
|
|
8
|
+
readonly y: number | null;
|
|
9
|
+
readonly value?: any;
|
|
10
|
+
readonly payload?: any;
|
|
11
|
+
}
|
|
12
|
+
type DotItemProps = {
|
|
13
|
+
option: DotType;
|
|
14
|
+
dotProps: DotItemDotProps;
|
|
15
|
+
className: string;
|
|
16
|
+
};
|
|
17
|
+
type DotElementProps = Extract<DotType, OctaneElement>['props'];
|
|
18
|
+
export type DotsDotProps =
|
|
19
|
+
Omit<DotProps, 'cx' | 'cy' | 'key' | 'index' | 'dataKey' | 'value' | 'payload'>;
|
|
20
|
+
interface DotsProps extends ZIndexable {
|
|
21
|
+
points: ReadonlyArray<DotPoint>;
|
|
22
|
+
dot: DotType;
|
|
23
|
+
className: string;
|
|
24
|
+
dotClassName: string;
|
|
25
|
+
dataKey: DataKey<any> | undefined;
|
|
26
|
+
baseProps: DotsDotProps;
|
|
27
|
+
needClip?: boolean;
|
|
28
|
+
clipPathId?: string;
|
|
29
|
+
}
|
|
1
30
|
// Port of component/Dots.tsx — the dot layer Line/Area/Radar render per data
|
|
2
31
|
// point; `dot` accepts boolean | props object | element | render function.
|
|
3
32
|
import { cloneElement, isValidElement } from 'octane';
|
|
@@ -9,9 +38,9 @@ import { svgPropertiesAndEventsFromUnknown } from '../util/svgPropertiesAndEvent
|
|
|
9
38
|
import { ZIndexLayer } from '../zIndex/ZIndexLayer.tsrx';
|
|
10
39
|
import { DefaultZIndexes } from '../zIndex/DefaultZIndexes';
|
|
11
40
|
|
|
12
|
-
function DotItem(props) {
|
|
41
|
+
function DotItem(props: DotItemProps) {
|
|
13
42
|
const { option, dotProps, className } = props;
|
|
14
|
-
if (isValidElement(option)) {
|
|
43
|
+
if (isValidElement<DotElementProps>(option)) {
|
|
15
44
|
return cloneElement(option, dotProps);
|
|
16
45
|
}
|
|
17
46
|
if (typeof option === 'function') {
|
|
@@ -22,7 +51,7 @@ function DotItem(props) {
|
|
|
22
51
|
return <Dot {...rest} className={finalClassName} />;
|
|
23
52
|
}
|
|
24
53
|
|
|
25
|
-
function shouldRenderDots(points, dot) {
|
|
54
|
+
function shouldRenderDots(points: ReadonlyArray<DotPoint> | undefined, dot: DotType) {
|
|
26
55
|
if (points == null) {
|
|
27
56
|
return false;
|
|
28
57
|
}
|
|
@@ -32,7 +61,7 @@ function shouldRenderDots(points, dot) {
|
|
|
32
61
|
return points.length === 1;
|
|
33
62
|
}
|
|
34
63
|
|
|
35
|
-
export function Dots(dotsProps) {
|
|
64
|
+
export function Dots(dotsProps: DotsProps) {
|
|
36
65
|
const {
|
|
37
66
|
points,
|
|
38
67
|
dot,
|
|
@@ -50,7 +79,7 @@ export function Dots(dotsProps) {
|
|
|
50
79
|
const clipDot = isClipDot(dot);
|
|
51
80
|
const customDotProps = svgPropertiesAndEventsFromUnknown(dot);
|
|
52
81
|
const dots = points.map((entry, i) => {
|
|
53
|
-
const dotProps = {
|
|
82
|
+
const dotProps: DotItemDotProps = {
|
|
54
83
|
r: 3,
|
|
55
84
|
...baseProps,
|
|
56
85
|
...customDotProps,
|
|
@@ -64,7 +93,9 @@ export function Dots(dotsProps) {
|
|
|
64
93
|
};
|
|
65
94
|
return <DotItem key={'dot-' + i} option={dot} dotProps={dotProps} className={dotClassName} />;
|
|
66
95
|
});
|
|
67
|
-
const layerProps
|
|
96
|
+
const layerProps: {
|
|
97
|
+
clipPath?: string;
|
|
98
|
+
} = {};
|
|
68
99
|
if (needClip && clipPathId != null) {
|
|
69
100
|
layerProps.clipPath = 'url(#clipPath-' + (clipDot ? '' : 'dots-') + clipPathId + ')';
|
|
70
101
|
}
|
package/src/component/Label.tsrx
CHANGED
|
@@ -1,3 +1,58 @@
|
|
|
1
|
+
import type { OctaneElement, OctaneNode, RefObject, SVGProps } from '../util/OctaneTypes.ts';
|
|
2
|
+
import type { RenderableText, TextAnchor, TextVerticalAnchor } from './Text.tsrx';
|
|
3
|
+
import type {
|
|
4
|
+
CartesianViewBoxRequired,
|
|
5
|
+
DataKey,
|
|
6
|
+
PolarViewBoxRequired,
|
|
7
|
+
TrapezoidViewBox,
|
|
8
|
+
ViewBox,
|
|
9
|
+
} from '../util/types';
|
|
10
|
+
import type { ZIndexable } from '../zIndex/ZIndexLayer.tsrx';
|
|
11
|
+
import type { CartesianLabelPosition } from '../cartesian/getCartesianPosition';
|
|
12
|
+
|
|
13
|
+
export type LabelContentType = OctaneElement | ((props: Props) => RenderableText | OctaneElement);
|
|
14
|
+
type PolarLabelPosition = 'insideStart' | 'insideEnd' | 'end';
|
|
15
|
+
export type LabelPosition = CartesianLabelPosition | PolarLabelPosition;
|
|
16
|
+
export type LabelFormatter = (label: RenderableText) => RenderableText;
|
|
17
|
+
interface LabelProps extends ZIndexable {
|
|
18
|
+
viewBox?: ViewBox;
|
|
19
|
+
parentViewBox?: ViewBox;
|
|
20
|
+
formatter?: LabelFormatter;
|
|
21
|
+
value?: RenderableText;
|
|
22
|
+
offset?: number;
|
|
23
|
+
position?: LabelPosition;
|
|
24
|
+
children?: RenderableText;
|
|
25
|
+
className?: SVGProps<SVGTextElement>['className'];
|
|
26
|
+
content?: LabelContentType;
|
|
27
|
+
textBreakAll?: boolean;
|
|
28
|
+
angle?: number;
|
|
29
|
+
index?: number;
|
|
30
|
+
labelRef?: RefObject<SVGTextElement | null> | null;
|
|
31
|
+
zIndex?: number;
|
|
32
|
+
id?: string;
|
|
33
|
+
}
|
|
34
|
+
export type Props = Omit<SVGProps<SVGTextElement>, 'viewBox'> & LabelProps;
|
|
35
|
+
type PropsWithDefaults =
|
|
36
|
+
Props & {
|
|
37
|
+
offset: number;
|
|
38
|
+
};
|
|
39
|
+
export type ImplicitLabelType =
|
|
40
|
+
| boolean
|
|
41
|
+
| string
|
|
42
|
+
| number
|
|
43
|
+
| OctaneElement<SVGElement>
|
|
44
|
+
| ((props: any) => RenderableText | OctaneElement)
|
|
45
|
+
| (Props & {
|
|
46
|
+
dataKey?: DataKey<any>;
|
|
47
|
+
});
|
|
48
|
+
export type LabelPositionAttributes = {
|
|
49
|
+
x: number;
|
|
50
|
+
y: number;
|
|
51
|
+
textAnchor: TextAnchor;
|
|
52
|
+
verticalAnchor: TextVerticalAnchor;
|
|
53
|
+
width?: number;
|
|
54
|
+
height?: number;
|
|
55
|
+
};
|
|
1
56
|
// Port of component/Label.tsx — chart labels with cartesian + polar
|
|
2
57
|
// positioning, radial (textPath) rendering, and the label-as-prop parser
|
|
3
58
|
// (boolean | value | element | function | object). Element-as-prop resolves
|
|
@@ -23,9 +78,11 @@ import { ZIndexLayer } from '../zIndex/ZIndexLayer.tsrx';
|
|
|
23
78
|
import { DefaultZIndexes } from '../zIndex/DefaultZIndexes';
|
|
24
79
|
import { getCartesianPosition } from '../cartesian/getCartesianPosition';
|
|
25
80
|
|
|
26
|
-
const CartesianLabelContext = createContext(null);
|
|
81
|
+
const CartesianLabelContext = createContext<TrapezoidViewBox | null>(null);
|
|
27
82
|
|
|
28
|
-
export function CartesianLabelContextProvider(props
|
|
83
|
+
export function CartesianLabelContextProvider(props: TrapezoidViewBox & {
|
|
84
|
+
children: OctaneNode;
|
|
85
|
+
}) @{
|
|
29
86
|
const { x, y, upperWidth, lowerWidth, width, height, children } = props;
|
|
30
87
|
const viewBox = useMemo(() => ({ x, y, upperWidth, lowerWidth, width, height }), [
|
|
31
88
|
x,
|
|
@@ -45,9 +102,11 @@ function useCartesianLabelContext() {
|
|
|
45
102
|
(chartContext ? cartesianViewBoxToTrapezoid(chartContext) : undefined);
|
|
46
103
|
}
|
|
47
104
|
|
|
48
|
-
const PolarLabelContext = createContext(null);
|
|
105
|
+
const PolarLabelContext = createContext<PolarViewBoxRequired | null>(null);
|
|
49
106
|
|
|
50
|
-
export function PolarLabelContextProvider(props
|
|
107
|
+
export function PolarLabelContextProvider(props: PolarViewBoxRequired & {
|
|
108
|
+
children: OctaneNode;
|
|
109
|
+
}) @{
|
|
51
110
|
const { cx, cy, innerRadius, outerRadius, startAngle, endAngle, clockWise, children } = props;
|
|
52
111
|
const viewBox = useMemo(
|
|
53
112
|
() => ({ cx, cy, innerRadius, outerRadius, startAngle, endAngle, clockWise }),
|
|
@@ -62,7 +121,7 @@ export function usePolarLabelContext() {
|
|
|
62
121
|
return labelChildContext || chartContext;
|
|
63
122
|
}
|
|
64
123
|
|
|
65
|
-
const getLabel = (props) => {
|
|
124
|
+
const getLabel = (props: Props) => {
|
|
66
125
|
const { value, formatter } = props;
|
|
67
126
|
const label = isNullish(props.children) ? value : props.children;
|
|
68
127
|
if (typeof formatter === 'function') {
|
|
@@ -71,17 +130,23 @@ const getLabel = (props) => {
|
|
|
71
130
|
return label;
|
|
72
131
|
};
|
|
73
132
|
|
|
74
|
-
export function isLabelContentAFunction(content) {
|
|
133
|
+
export function isLabelContentAFunction(content: unknown) {
|
|
75
134
|
return content != null && typeof content === 'function';
|
|
76
135
|
}
|
|
77
136
|
|
|
78
|
-
const getDeltaAngle = (startAngle, endAngle) => {
|
|
137
|
+
const getDeltaAngle = (startAngle: number, endAngle: number) => {
|
|
79
138
|
const sign = mathSign(endAngle - startAngle);
|
|
80
139
|
const deltaAngle = Math.min(Math.abs(endAngle - startAngle), 360);
|
|
81
140
|
return sign * deltaAngle;
|
|
82
141
|
};
|
|
83
142
|
|
|
84
|
-
function renderRadialLabel(
|
|
143
|
+
function renderRadialLabel(
|
|
144
|
+
labelProps: PropsWithDefaults,
|
|
145
|
+
position: PolarLabelPosition,
|
|
146
|
+
label: OctaneNode,
|
|
147
|
+
attrs: SVGProps<SVGTextElement>,
|
|
148
|
+
viewBox: PolarViewBoxRequired,
|
|
149
|
+
) {
|
|
85
150
|
const { offset, className } = labelProps;
|
|
86
151
|
const { cx, cy, innerRadius, outerRadius, startAngle, endAngle, clockWise } = viewBox;
|
|
87
152
|
const radius = (innerRadius + outerRadius) / 2;
|
|
@@ -129,7 +194,11 @@ function renderRadialLabel(labelProps, position, label, attrs, viewBox) {
|
|
|
129
194
|
</text>;
|
|
130
195
|
}
|
|
131
196
|
|
|
132
|
-
const getAttrsOfPolarLabel = (
|
|
197
|
+
const getAttrsOfPolarLabel = (
|
|
198
|
+
viewBox: PolarViewBoxRequired,
|
|
199
|
+
offset: number,
|
|
200
|
+
position: LabelPosition | undefined,
|
|
201
|
+
): LabelPositionAttributes => {
|
|
133
202
|
const { cx, cy, innerRadius, outerRadius, startAngle, endAngle } = viewBox;
|
|
134
203
|
const midAngle = (startAngle + endAngle) / 2;
|
|
135
204
|
if (position === 'outside') {
|
|
@@ -155,7 +224,9 @@ const getAttrsOfPolarLabel = (viewBox, offset, position) => {
|
|
|
155
224
|
return { x, y, textAnchor: 'middle', verticalAnchor: 'middle' };
|
|
156
225
|
};
|
|
157
226
|
|
|
158
|
-
const isPolar = (
|
|
227
|
+
const isPolar = (
|
|
228
|
+
viewBox: CartesianViewBoxRequired | TrapezoidViewBox | PolarViewBoxRequired | undefined,
|
|
229
|
+
): viewBox is PolarViewBoxRequired => viewBox != null && 'cx' in viewBox && isNumber(viewBox.cx);
|
|
159
230
|
|
|
160
231
|
export const defaultLabelProps = {
|
|
161
232
|
angle: 0,
|
|
@@ -163,9 +234,9 @@ export const defaultLabelProps = {
|
|
|
163
234
|
zIndex: DefaultZIndexes.label,
|
|
164
235
|
position: 'middle',
|
|
165
236
|
textBreakAll: false,
|
|
166
|
-
}
|
|
237
|
+
} as const satisfies Partial<Props>;
|
|
167
238
|
|
|
168
|
-
function polarViewBoxToTrapezoid(viewBox) {
|
|
239
|
+
function polarViewBoxToTrapezoid(viewBox: PolarViewBoxRequired | TrapezoidViewBox | undefined) {
|
|
169
240
|
if (!isPolar(viewBox)) {
|
|
170
241
|
return viewBox;
|
|
171
242
|
}
|
|
@@ -181,8 +252,8 @@ function polarViewBoxToTrapezoid(viewBox) {
|
|
|
181
252
|
};
|
|
182
253
|
}
|
|
183
254
|
|
|
184
|
-
export function Label(outerProps) {
|
|
185
|
-
const props = resolveDefaultProps(outerProps, defaultLabelProps);
|
|
255
|
+
export function Label(outerProps: Props) {
|
|
256
|
+
const props: PropsWithDefaults = resolveDefaultProps(outerProps, defaultLabelProps);
|
|
186
257
|
const {
|
|
187
258
|
viewBox: viewBoxFromProps,
|
|
188
259
|
parentViewBox,
|
|
@@ -200,7 +271,7 @@ export function Label(outerProps) {
|
|
|
200
271
|
// position 'center' prefers the cartesian box (recharts#6030 quick fix).
|
|
201
272
|
const resolvedViewBox =
|
|
202
273
|
position === 'center' ? cartesianViewBox : polarViewBox ?? cartesianViewBox;
|
|
203
|
-
let viewBox, label, positionAttrs;
|
|
274
|
+
let viewBox, label, positionAttrs: LabelPositionAttributes;
|
|
204
275
|
if (viewBoxFromProps == null) {
|
|
205
276
|
viewBox = resolvedViewBox;
|
|
206
277
|
} else if (isPolar(viewBoxFromProps)) {
|
|
@@ -270,7 +341,11 @@ export function Label(outerProps) {
|
|
|
270
341
|
|
|
271
342
|
Label.displayName = 'Label';
|
|
272
343
|
|
|
273
|
-
const parseLabel = (
|
|
344
|
+
const parseLabel = (
|
|
345
|
+
label: ImplicitLabelType | undefined,
|
|
346
|
+
viewBox: ViewBox | undefined,
|
|
347
|
+
labelRef?: RefObject<SVGTextElement | null> | null,
|
|
348
|
+
) => {
|
|
274
349
|
if (!label) {
|
|
275
350
|
return null;
|
|
276
351
|
}
|
|
@@ -281,7 +356,7 @@ const parseLabel = (label, viewBox, labelRef) => {
|
|
|
281
356
|
if (isNumOrStr(label)) {
|
|
282
357
|
return <Label key="label-implicit" value={label} {...commonProps} />;
|
|
283
358
|
}
|
|
284
|
-
if (isValidElement(label)) {
|
|
359
|
+
if (isValidElement<SVGElement>(label)) {
|
|
285
360
|
if (label.type === Label) {
|
|
286
361
|
return cloneElement(label, { key: 'label-implicit', ...commonProps });
|
|
287
362
|
}
|
|
@@ -296,13 +371,18 @@ const parseLabel = (label, viewBox, labelRef) => {
|
|
|
296
371
|
return null;
|
|
297
372
|
};
|
|
298
373
|
|
|
299
|
-
export function CartesianLabelFromLabelProp(props
|
|
374
|
+
export function CartesianLabelFromLabelProp(props: {
|
|
375
|
+
label: ImplicitLabelType | undefined;
|
|
376
|
+
labelRef?: RefObject<SVGTextElement | null> | null;
|
|
377
|
+
}) {
|
|
300
378
|
const { label, labelRef } = props;
|
|
301
379
|
const viewBox = useCartesianLabelContext();
|
|
302
380
|
return parseLabel(label, viewBox, labelRef) || null;
|
|
303
381
|
}
|
|
304
382
|
|
|
305
|
-
export function PolarLabelFromLabelProp(props
|
|
383
|
+
export function PolarLabelFromLabelProp(props: {
|
|
384
|
+
label: ImplicitLabelType | undefined;
|
|
385
|
+
}) {
|
|
306
386
|
const { label } = props;
|
|
307
387
|
const viewBox = usePolarLabelContext();
|
|
308
388
|
return parseLabel(label, viewBox) || null;
|
|
@@ -1,3 +1,46 @@
|
|
|
1
|
+
import type { SVGProps, PropsWithoutRef } from '../util/OctaneTypes.ts';
|
|
2
|
+
import type { LabelContentType, LabelPosition, LabelFormatter } from './Label.tsrx';
|
|
3
|
+
import type {
|
|
4
|
+
CartesianViewBoxRequired,
|
|
5
|
+
DataKey,
|
|
6
|
+
PolarViewBoxRequired,
|
|
7
|
+
TrapezoidViewBox,
|
|
8
|
+
} from '../util/types';
|
|
9
|
+
import type { LabelProps } from '../index';
|
|
10
|
+
import type { ZIndexable } from '../zIndex/ZIndexLayer.tsrx';
|
|
11
|
+
import type { RenderableText } from './Text.tsrx';
|
|
12
|
+
|
|
13
|
+
export interface LabelListEntry<DataPointItem = any> {
|
|
14
|
+
value: unknown;
|
|
15
|
+
payload: DataPointItem;
|
|
16
|
+
fill: string | undefined;
|
|
17
|
+
}
|
|
18
|
+
export interface CartesianLabelListEntry extends LabelListEntry, TrapezoidViewBox {
|
|
19
|
+
viewBox: TrapezoidViewBox;
|
|
20
|
+
parentViewBox?: CartesianViewBoxRequired;
|
|
21
|
+
}
|
|
22
|
+
export interface PolarLabelListEntry extends LabelListEntry {
|
|
23
|
+
viewBox: PolarViewBoxRequired;
|
|
24
|
+
parentViewBox?: PolarViewBoxRequired;
|
|
25
|
+
clockWise?: boolean;
|
|
26
|
+
}
|
|
27
|
+
interface LabelListProps extends ZIndexable {
|
|
28
|
+
id?: string;
|
|
29
|
+
valueAccessor?: (entry: | CartesianLabelListEntry
|
|
30
|
+
| PolarLabelListEntry, index: number) => RenderableText;
|
|
31
|
+
clockWise?: boolean;
|
|
32
|
+
dataKey?: DataKey<any>;
|
|
33
|
+
content?: LabelContentType;
|
|
34
|
+
textBreakAll?: boolean;
|
|
35
|
+
position?: LabelPosition;
|
|
36
|
+
offset?: LabelProps['offset'];
|
|
37
|
+
angle?: number;
|
|
38
|
+
formatter?: LabelFormatter;
|
|
39
|
+
zIndex?: number;
|
|
40
|
+
}
|
|
41
|
+
type SvgTextProps = PropsWithoutRef<SVGProps<SVGTextElement>>;
|
|
42
|
+
export type Props = Omit<SvgTextProps, 'children'> & LabelListProps;
|
|
43
|
+
export type ImplicitLabelListType = boolean | LabelContentType | Props;
|
|
1
44
|
// Port of component/LabelList.tsx — one Label per data entry, fed by the
|
|
2
45
|
// cartesian/polar label-list contexts the graphical items provide.
|
|
3
46
|
import { createContext, useContext, isValidElement } from 'octane';
|
|
@@ -10,7 +53,7 @@ import { ZIndexLayer } from '../zIndex/ZIndexLayer.tsrx';
|
|
|
10
53
|
import { DefaultZIndexes } from '../zIndex/DefaultZIndexes';
|
|
11
54
|
import { isRenderableText } from './Text.tsrx';
|
|
12
55
|
|
|
13
|
-
const defaultAccessor = (entry) => {
|
|
56
|
+
const defaultAccessor = (entry: LabelListEntry) => {
|
|
14
57
|
const val = Array.isArray(entry.value) ? entry.value[entry.value.length - 1] : entry.value;
|
|
15
58
|
if (isRenderableText(val)) {
|
|
16
59
|
return val;
|
|
@@ -18,9 +61,13 @@ const defaultAccessor = (entry) => {
|
|
|
18
61
|
return undefined;
|
|
19
62
|
};
|
|
20
63
|
|
|
21
|
-
const CartesianLabelListContext = createContext(
|
|
64
|
+
const CartesianLabelListContext = createContext<ReadonlyArray<CartesianLabelListEntry> | undefined>(
|
|
65
|
+
undefined,
|
|
66
|
+
);
|
|
22
67
|
export const CartesianLabelListContextProvider = CartesianLabelListContext.Provider;
|
|
23
|
-
const PolarLabelListContext = createContext(
|
|
68
|
+
const PolarLabelListContext = createContext<ReadonlyArray<PolarLabelListEntry> | undefined>(
|
|
69
|
+
undefined,
|
|
70
|
+
);
|
|
24
71
|
export const PolarLabelListContextProvider = PolarLabelListContext.Provider;
|
|
25
72
|
|
|
26
73
|
function useCartesianLabelListContext() {
|
|
@@ -30,7 +77,7 @@ function usePolarLabelListContext() {
|
|
|
30
77
|
return useContext(PolarLabelListContext);
|
|
31
78
|
}
|
|
32
79
|
|
|
33
|
-
export function LabelList(labelListProps) {
|
|
80
|
+
export function LabelList(labelListProps: Props) {
|
|
34
81
|
const { valueAccessor = defaultAccessor, ...restProps } = labelListProps;
|
|
35
82
|
const { dataKey, clockWise, id, textBreakAll, zIndex, ...others } = restProps;
|
|
36
83
|
const cartesianData = useCartesianLabelListContext();
|
|
@@ -65,7 +112,9 @@ export function LabelList(labelListProps) {
|
|
|
65
112
|
|
|
66
113
|
LabelList.displayName = 'LabelList';
|
|
67
114
|
|
|
68
|
-
export function LabelListFromLabelProp(props
|
|
115
|
+
export function LabelListFromLabelProp(props: {
|
|
116
|
+
label?: ImplicitLabelListType;
|
|
117
|
+
}) {
|
|
69
118
|
const { label } = props;
|
|
70
119
|
if (!label) {
|
|
71
120
|
return null;
|
|
@@ -1,5 +1,6 @@
|
|
|
1
|
+
import type { CSSProperties } from '../util/OctaneTypes.ts';
|
|
1
2
|
import * as React from 'octane';
|
|
2
|
-
import {
|
|
3
|
+
import { useLayoutEffect } from 'octane';
|
|
3
4
|
import { createPortal } from 'octane';
|
|
4
5
|
import { useLegendPortal } from '../context/legendPortalContext';
|
|
5
6
|
import {
|
|
@@ -8,11 +9,11 @@ import {
|
|
|
8
9
|
LegendPayload,
|
|
9
10
|
Props as DefaultLegendContentProps,
|
|
10
11
|
VerticalAlignmentType,
|
|
11
|
-
} from './DefaultLegendContent';
|
|
12
|
+
} from './DefaultLegendContent.tsrx';
|
|
12
13
|
|
|
13
14
|
import { LayoutType, Margin, Size } from '../util/types';
|
|
14
15
|
import { getUniqPayload, UniqueOption } from '../util/payload/getUniqPayload';
|
|
15
|
-
import { useLegendPayload } from '../context/legendPayloadContext';
|
|
16
|
+
import { useLegendPayload } from '../context/legendPayloadContext.tsrx';
|
|
16
17
|
import { ElementOffset, useElementOffset } from '../util/useElementOffset';
|
|
17
18
|
import { useChartHeight, useChartWidth, useMargin } from '../context/chartLayoutContext';
|
|
18
19
|
import { LegendSettings, setLegendSettings, setLegendSize } from '../state/legendSlice';
|
|
@@ -44,7 +45,7 @@ function LegendContent(props: ContentProps) {
|
|
|
44
45
|
return React.cloneElement(props.content, contentProps);
|
|
45
46
|
}
|
|
46
47
|
if (typeof props.content === 'function') {
|
|
47
|
-
return React.createElement(props.content
|
|
48
|
+
return React.createElement(props.content, contentProps);
|
|
48
49
|
}
|
|
49
50
|
|
|
50
51
|
return <DefaultLegendContent {...contentProps} />;
|
|
@@ -297,6 +298,9 @@ function LegendImpl(outsideProps: Props) {
|
|
|
297
298
|
return createPortal(legendElement, legendPortal);
|
|
298
299
|
}
|
|
299
300
|
|
|
300
|
-
export const Legend = React.memo(LegendImpl, propsAreEqual)
|
|
301
|
+
export const Legend = React.memo(LegendImpl, propsAreEqual) as
|
|
302
|
+
typeof LegendImpl & {
|
|
303
|
+
displayName?: string;
|
|
304
|
+
};
|
|
301
305
|
|
|
302
306
|
Legend.displayName = 'Legend';
|