@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/shape/Cross.tsrx
CHANGED
|
@@ -1,14 +1,26 @@
|
|
|
1
|
+
import type { SVGProps } from '../util/OctaneTypes.ts';
|
|
2
|
+
|
|
3
|
+
interface CrossProps {
|
|
4
|
+
x?: number;
|
|
5
|
+
y?: number;
|
|
6
|
+
width?: number;
|
|
7
|
+
height?: number;
|
|
8
|
+
top?: number;
|
|
9
|
+
left?: number;
|
|
10
|
+
className?: SVGProps<SVGPathElement>['className'];
|
|
11
|
+
}
|
|
12
|
+
export type Props = SVGProps<SVGPathElement> & CrossProps;
|
|
1
13
|
// Port of shape/Cross.tsx — the axis-cursor crosshair (a vertical + horizontal
|
|
2
14
|
// line pair as one path).
|
|
3
15
|
import { clsx } from 'clsx';
|
|
4
16
|
import { isNumber } from '../util/DataUtils';
|
|
5
17
|
import { svgPropertiesAndEvents } from '../util/svgPropertiesAndEvents.ts';
|
|
6
18
|
|
|
7
|
-
function getPath(x, y, width, height, top, left) {
|
|
19
|
+
function getPath(x: number, y: number, width: number, height: number, top: number, left: number) {
|
|
8
20
|
return 'M' + x + ',' + top + 'v' + height + 'M' + left + ',' + y + 'h' + width;
|
|
9
21
|
}
|
|
10
22
|
|
|
11
|
-
export function Cross(crossProps) {
|
|
23
|
+
export function Cross(crossProps: Props) {
|
|
12
24
|
const { x = 0, y = 0, top = 0, left = 0, width = 0, height = 0, className, ...rest } = crossProps;
|
|
13
25
|
const props = { x, y, top, left, width, height, ...rest };
|
|
14
26
|
if (
|
package/src/shape/Curve.tsrx
CHANGED
|
@@ -1,3 +1,83 @@
|
|
|
1
|
+
import type { Ref, SVGProps } from '../util/OctaneTypes.ts';
|
|
2
|
+
import type {
|
|
3
|
+
Area as D3AreaCurve,
|
|
4
|
+
CurveFactory,
|
|
5
|
+
Line as D3LineCurve,
|
|
6
|
+
} from 'victory-vendor/d3-shape';
|
|
7
|
+
import type {
|
|
8
|
+
Coordinate,
|
|
9
|
+
LayoutType,
|
|
10
|
+
NullableCoordinate,
|
|
11
|
+
PresentationAttributesWithProps,
|
|
12
|
+
RechartsMouseEventHandler,
|
|
13
|
+
} from '../util/types';
|
|
14
|
+
|
|
15
|
+
interface CurveFactories {
|
|
16
|
+
[index: string]: CurveFactory;
|
|
17
|
+
}
|
|
18
|
+
export type CurveType =
|
|
19
|
+
| 'basis'
|
|
20
|
+
| 'basisClosed'
|
|
21
|
+
| 'basisOpen'
|
|
22
|
+
| 'bumpX'
|
|
23
|
+
| 'bumpY'
|
|
24
|
+
| 'bump'
|
|
25
|
+
| 'linear'
|
|
26
|
+
| 'linearClosed'
|
|
27
|
+
| 'natural'
|
|
28
|
+
| 'monotoneX'
|
|
29
|
+
| 'monotoneY'
|
|
30
|
+
| 'monotone'
|
|
31
|
+
| 'step'
|
|
32
|
+
| 'stepBefore'
|
|
33
|
+
| 'stepAfter'
|
|
34
|
+
| CurveFactory;
|
|
35
|
+
type AreaPoint =
|
|
36
|
+
Coordinate & {
|
|
37
|
+
base: Coordinate;
|
|
38
|
+
};
|
|
39
|
+
type NullableAreaPoint =
|
|
40
|
+
NullableCoordinate & {
|
|
41
|
+
base?: NullableCoordinate;
|
|
42
|
+
};
|
|
43
|
+
export type BaseLineType = number | ReadonlyArray<NullableCoordinate>;
|
|
44
|
+
interface CurveProps {
|
|
45
|
+
className?: SVGProps<SVGPathElement>['className'];
|
|
46
|
+
type?: CurveType;
|
|
47
|
+
layout?: LayoutType;
|
|
48
|
+
baseLine?: BaseLineType;
|
|
49
|
+
points?: ReadonlyArray<NullableCoordinate>;
|
|
50
|
+
connectNulls?: boolean;
|
|
51
|
+
path?: string;
|
|
52
|
+
pathRef?: Ref<SVGPathElement>;
|
|
53
|
+
strokeDasharray?: string | number;
|
|
54
|
+
}
|
|
55
|
+
export type CurveMouseEventHandler = RechartsMouseEventHandler<Props, SVGPathElement>;
|
|
56
|
+
type CurveMouseEvents = {
|
|
57
|
+
onClick?: CurveMouseEventHandler;
|
|
58
|
+
onMouseEnter?: CurveMouseEventHandler;
|
|
59
|
+
onMouseLeave?: CurveMouseEventHandler;
|
|
60
|
+
onMouseDown?: CurveMouseEventHandler;
|
|
61
|
+
onMouseUp?: CurveMouseEventHandler;
|
|
62
|
+
onMouseMove?: CurveMouseEventHandler;
|
|
63
|
+
onMouseOver?: CurveMouseEventHandler;
|
|
64
|
+
onMouseOut?: CurveMouseEventHandler;
|
|
65
|
+
};
|
|
66
|
+
export type Props =
|
|
67
|
+
Omit<
|
|
68
|
+
PresentationAttributesWithProps<CurveProps, SVGPathElement>,
|
|
69
|
+
| 'type'
|
|
70
|
+
| 'points'
|
|
71
|
+
| 'onClick'
|
|
72
|
+
| 'onMouseEnter'
|
|
73
|
+
| 'onMouseLeave'
|
|
74
|
+
| 'onMouseDown'
|
|
75
|
+
| 'onMouseUp'
|
|
76
|
+
| 'onMouseMove'
|
|
77
|
+
| 'onMouseOver'
|
|
78
|
+
| 'onMouseOut'
|
|
79
|
+
> & CurveMouseEvents & CurveProps;
|
|
80
|
+
type GetPathProps = Pick<Props, 'type' | 'points' | 'baseLine' | 'layout' | 'connectNulls'>;
|
|
1
81
|
// Port of shape/Curve.tsx — the line/area path. The `d` string comes straight
|
|
2
82
|
// from victory-vendor's d3-shape line/area generators (same dependency, same
|
|
3
83
|
// version as upstream), so output is byte-identical by construction.
|
|
@@ -25,7 +105,7 @@ import { isWellBehavedNumber } from '../util/isWellBehavedNumber';
|
|
|
25
105
|
import { svgPropertiesNoEvents } from '../util/svgPropertiesNoEvents';
|
|
26
106
|
import { useChartLayout } from '../context/chartLayoutContext.ts';
|
|
27
107
|
|
|
28
|
-
const CURVE_FACTORIES = {
|
|
108
|
+
const CURVE_FACTORIES: CurveFactories = {
|
|
29
109
|
curveBasisClosed,
|
|
30
110
|
curveBasisOpen,
|
|
31
111
|
curveBasis,
|
|
@@ -41,12 +121,12 @@ const CURVE_FACTORIES = {
|
|
|
41
121
|
curveStepBefore,
|
|
42
122
|
};
|
|
43
123
|
|
|
44
|
-
const defined = (p) => isWellBehavedNumber(p.x) && isWellBehavedNumber(p.y);
|
|
45
|
-
const areaDefined = (d) => d.base != null && defined(d.base) && defined(d);
|
|
46
|
-
const getX = (p) => p.x;
|
|
47
|
-
const getY = (p) => p.y;
|
|
124
|
+
const defined = (p: NullableCoordinate) => isWellBehavedNumber(p.x) && isWellBehavedNumber(p.y);
|
|
125
|
+
const areaDefined = (d: NullableAreaPoint) => d.base != null && defined(d.base) && defined(d);
|
|
126
|
+
const getX = (p: Coordinate) => p.x;
|
|
127
|
+
const getY = (p: Coordinate) => p.y;
|
|
48
128
|
|
|
49
|
-
const getCurveFactory = (type, layout) => {
|
|
129
|
+
const getCurveFactory = (type: CurveType, layout: LayoutType | undefined) => {
|
|
50
130
|
if (typeof type === 'function') {
|
|
51
131
|
return type;
|
|
52
132
|
}
|
|
@@ -63,7 +143,7 @@ const getCurveFactory = (type, layout) => {
|
|
|
63
143
|
export const defaultCurveProps = {
|
|
64
144
|
connectNulls: false,
|
|
65
145
|
type: 'linear',
|
|
66
|
-
}
|
|
146
|
+
} as const satisfies Partial<Props>;
|
|
67
147
|
|
|
68
148
|
/**
|
|
69
149
|
* Calculate the path of curve. Returns null if points is an empty array.
|
|
@@ -75,52 +155,60 @@ export const getPath = ({
|
|
|
75
155
|
baseLine,
|
|
76
156
|
layout,
|
|
77
157
|
connectNulls = defaultCurveProps.connectNulls,
|
|
78
|
-
}) => {
|
|
158
|
+
}: GetPathProps): string | null => {
|
|
79
159
|
const curveFactory = getCurveFactory(type, layout);
|
|
80
|
-
const formatPoints =
|
|
160
|
+
const formatPoints: ReadonlyArray<NullableCoordinate> =
|
|
81
161
|
connectNulls ? points.filter(defined) : points;
|
|
82
162
|
|
|
83
163
|
// An area chart's array `baseLine` pairs each point with its baseline
|
|
84
164
|
// counterpart FIRST, so the `defined` filter drops both sides together.
|
|
85
165
|
if (Array.isArray(baseLine)) {
|
|
86
|
-
const areaPoints = points.map(
|
|
87
|
-
|
|
166
|
+
const areaPoints: ReadonlyArray<NullableAreaPoint> = points.map(
|
|
167
|
+
(entry, index) => ({ ...entry, base: baseLine[index] }),
|
|
168
|
+
);
|
|
169
|
+
let lineFunction: D3AreaCurve<AreaPoint>;
|
|
88
170
|
if (layout === 'vertical') {
|
|
89
|
-
lineFunction = shapeArea().y(getY).x1(getX).x0((d) => d.base.x);
|
|
171
|
+
lineFunction = shapeArea<AreaPoint>().y(getY).x1(getX).x0((d) => d.base.x);
|
|
90
172
|
} else {
|
|
91
|
-
lineFunction = shapeArea().x(getX).y1(getY).y0((d) => d.base.y);
|
|
173
|
+
lineFunction = shapeArea<AreaPoint>().x(getX).y1(getY).y0((d) => d.base.y);
|
|
92
174
|
}
|
|
93
|
-
|
|
94
|
-
|
|
175
|
+
// d3 runs the defined predicate before coordinate accessors; its single
|
|
176
|
+
// generic cannot express the nullable inputs accepted after this guard.
|
|
177
|
+
const nullableLineFunction = lineFunction.defined(areaDefined).curve(
|
|
178
|
+
curveFactory,
|
|
179
|
+
) as D3AreaCurve<NullableAreaPoint>;
|
|
180
|
+
const finalPoints: ReadonlyArray<NullableAreaPoint> =
|
|
95
181
|
connectNulls ? areaPoints.filter(areaDefined) : areaPoints;
|
|
96
182
|
return nullableLineFunction(finalPoints);
|
|
97
183
|
}
|
|
98
|
-
let lineFunction
|
|
184
|
+
let lineFunction: D3LineCurve<Coordinate> | D3AreaCurve<Coordinate>;
|
|
99
185
|
if (layout === 'vertical' && isNumber(baseLine)) {
|
|
100
|
-
lineFunction = shapeArea().y(getY).x1(getX).x0(baseLine);
|
|
186
|
+
lineFunction = shapeArea<Coordinate>().y(getY).x1(getX).x0(baseLine);
|
|
101
187
|
} else if (isNumber(baseLine)) {
|
|
102
|
-
lineFunction = shapeArea().x(getX).y1(getY).y0(baseLine);
|
|
188
|
+
lineFunction = shapeArea<Coordinate>().x(getX).y1(getY).y0(baseLine);
|
|
103
189
|
} else {
|
|
104
|
-
lineFunction = shapeLine().x(getX).y(getY);
|
|
190
|
+
lineFunction = shapeLine<Coordinate>().x(getX).y(getY);
|
|
105
191
|
}
|
|
106
|
-
const nullableLineFunction = lineFunction.defined(defined).curve(curveFactory)
|
|
192
|
+
const nullableLineFunction = lineFunction.defined(defined).curve(curveFactory) as D3LineCurve<
|
|
193
|
+
NullableCoordinate
|
|
194
|
+
>;
|
|
107
195
|
return nullableLineFunction(formatPoints);
|
|
108
196
|
};
|
|
109
197
|
|
|
110
|
-
export function Curve(props) {
|
|
198
|
+
export function Curve(props: Props) {
|
|
111
199
|
const { className, points, path, pathRef } = props;
|
|
112
200
|
const layout = useChartLayout();
|
|
113
201
|
if ((!points || !points.length) && !path) {
|
|
114
202
|
return null;
|
|
115
203
|
}
|
|
116
|
-
const getPathInput = {
|
|
204
|
+
const getPathInput: GetPathProps = {
|
|
117
205
|
type: props.type,
|
|
118
206
|
points: props.points,
|
|
119
207
|
baseLine: props.baseLine,
|
|
120
208
|
layout: props.layout || layout,
|
|
121
209
|
connectNulls: props.connectNulls,
|
|
122
210
|
};
|
|
123
|
-
const realPath =
|
|
211
|
+
const realPath: string | null | undefined =
|
|
124
212
|
points && points.length ? getPath(getPathInput) : path;
|
|
125
213
|
return <path
|
|
126
214
|
{...svgPropertiesNoEvents(props)}
|
package/src/shape/Dot.tsrx
CHANGED
|
@@ -1,10 +1,21 @@
|
|
|
1
|
+
import type { SVGProps } from '../util/OctaneTypes.ts';
|
|
2
|
+
import type { PresentationAttributesWithProps } from '../util/types';
|
|
3
|
+
|
|
4
|
+
interface DotProps {
|
|
5
|
+
className?: SVGProps<SVGCircleElement>['className'];
|
|
6
|
+
cx?: number;
|
|
7
|
+
cy?: number;
|
|
8
|
+
r?: number | string;
|
|
9
|
+
clipDot?: boolean;
|
|
10
|
+
}
|
|
11
|
+
export type Props = PresentationAttributesWithProps<DotProps, SVGCircleElement> & DotProps;
|
|
1
12
|
// Port of shape/Dot.tsx — a circle marker.
|
|
2
13
|
import { clsx } from 'clsx';
|
|
3
14
|
import { adaptEventHandlers } from '../util/types.ts';
|
|
4
15
|
import { svgPropertiesNoEvents } from '../util/svgPropertiesNoEvents';
|
|
5
16
|
import { isNumber } from '../util/DataUtils';
|
|
6
17
|
|
|
7
|
-
export function Dot(props) {
|
|
18
|
+
export function Dot(props: Props) {
|
|
8
19
|
const { cx, cy, r, className } = props;
|
|
9
20
|
const layerClass = clsx('recharts-dot', className);
|
|
10
21
|
if (isNumber(cx) && isNumber(cy) && isNumber(r)) {
|
package/src/shape/Polygon.tsrx
CHANGED
|
@@ -1,15 +1,33 @@
|
|
|
1
|
+
import type { NativeMouseEvent, SVGProps } from '../util/OctaneTypes.ts';
|
|
2
|
+
import type { Coordinate } from '../util/types';
|
|
3
|
+
|
|
4
|
+
interface PolygonProps {
|
|
5
|
+
className?: SVGProps<SVGPathElement>['className'];
|
|
6
|
+
points?: ReadonlyArray<Coordinate>;
|
|
7
|
+
baseLinePoints?: ReadonlyArray<Coordinate>;
|
|
8
|
+
connectNulls?: boolean;
|
|
9
|
+
onClick?: (e: NativeMouseEvent<SVGPathElement>) => void;
|
|
10
|
+
onMouseDown?: (e: NativeMouseEvent<SVGPathElement>) => void;
|
|
11
|
+
onMouseUp?: (e: NativeMouseEvent<SVGPathElement>) => void;
|
|
12
|
+
onMouseMove?: (e: NativeMouseEvent<SVGPathElement>) => void;
|
|
13
|
+
onMouseOver?: (e: NativeMouseEvent<SVGPathElement>) => void;
|
|
14
|
+
onMouseOut?: (e: NativeMouseEvent<SVGPathElement>) => void;
|
|
15
|
+
onMouseEnter?: (e: NativeMouseEvent<SVGPathElement>) => void;
|
|
16
|
+
onMouseLeave?: (e: NativeMouseEvent<SVGPathElement>) => void;
|
|
17
|
+
}
|
|
18
|
+
export type Props = Omit<SVGProps<SVGPathElement>, 'points'> & PolygonProps;
|
|
1
19
|
// Port of shape/Polygon.tsx — closed/segmented polygon paths (Radar,
|
|
2
20
|
// PolarGrid). Path strings mirror upstream's roundTemplateLiteral output.
|
|
3
21
|
import { clsx } from 'clsx';
|
|
4
22
|
import { svgPropertiesAndEvents } from '../util/svgPropertiesAndEvents.ts';
|
|
5
23
|
import { round } from '../util/round';
|
|
6
24
|
|
|
7
|
-
function isValidatePoint(point) {
|
|
25
|
+
function isValidatePoint(point: Coordinate | undefined) {
|
|
8
26
|
return point != null && point.x === +point.x && point.y === +point.y;
|
|
9
27
|
}
|
|
10
28
|
|
|
11
|
-
function getParsedPoints(points = []) {
|
|
12
|
-
let segmentPoints = [[]];
|
|
29
|
+
function getParsedPoints(points: ReadonlyArray<Coordinate> = []) {
|
|
30
|
+
let segmentPoints: Coordinate[][] = [[]];
|
|
13
31
|
points.forEach((entry) => {
|
|
14
32
|
const lastLink = segmentPoints[segmentPoints.length - 1];
|
|
15
33
|
if (isValidatePoint(entry)) {
|
|
@@ -32,7 +50,7 @@ function getParsedPoints(points = []) {
|
|
|
32
50
|
return segmentPoints;
|
|
33
51
|
}
|
|
34
52
|
|
|
35
|
-
function getSinglePolygonPath(points
|
|
53
|
+
function getSinglePolygonPath(points: ReadonlyArray<Coordinate>, connectNulls?: boolean) {
|
|
36
54
|
let segmentPoints = getParsedPoints(points);
|
|
37
55
|
if (connectNulls) {
|
|
38
56
|
segmentPoints = [segmentPoints.reduce((res, segPoints) => [...res, ...segPoints], [])];
|
|
@@ -47,13 +65,17 @@ function getSinglePolygonPath(points, connectNulls) {
|
|
|
47
65
|
return segmentPoints.length === 1 ? polygonPath + 'Z' : polygonPath;
|
|
48
66
|
}
|
|
49
67
|
|
|
50
|
-
function getRanglePath(
|
|
68
|
+
function getRanglePath(
|
|
69
|
+
points: ReadonlyArray<Coordinate>,
|
|
70
|
+
baseLinePoints: ReadonlyArray<Coordinate>,
|
|
71
|
+
connectNulls?: boolean,
|
|
72
|
+
) {
|
|
51
73
|
const outerPath = getSinglePolygonPath(points, connectNulls);
|
|
52
74
|
return (outerPath.slice(-1) === 'Z' ? outerPath.slice(0, -1) : outerPath) + 'L' +
|
|
53
75
|
getSinglePolygonPath(Array.from(baseLinePoints).reverse(), connectNulls).slice(1);
|
|
54
76
|
}
|
|
55
77
|
|
|
56
|
-
export function Polygon(props) {
|
|
78
|
+
export function Polygon(props: Props) {
|
|
57
79
|
const { points, className, baseLinePoints, connectNulls, ...others } = props;
|
|
58
80
|
if (!points || !points.length) {
|
|
59
81
|
return null;
|
package/src/shape/Rectangle.tsrx
CHANGED
|
@@ -1,3 +1,30 @@
|
|
|
1
|
+
import type { NativeMouseEvent, SVGProps } from '../util/OctaneTypes.ts';
|
|
2
|
+
import type { AnimationDuration } from '../util/types';
|
|
3
|
+
import type { EasingInput } from '../animation/easing';
|
|
4
|
+
|
|
5
|
+
export type RectRadius = number | [number, number, number, number];
|
|
6
|
+
interface RectangleProps {
|
|
7
|
+
className?: SVGProps<SVGPathElement>['className'];
|
|
8
|
+
x?: number;
|
|
9
|
+
y?: number;
|
|
10
|
+
width?: number;
|
|
11
|
+
height?: number;
|
|
12
|
+
radius?: RectRadius;
|
|
13
|
+
isAnimationActive?: boolean;
|
|
14
|
+
isUpdateAnimationActive?: boolean;
|
|
15
|
+
animationBegin?: number;
|
|
16
|
+
animationDuration?: AnimationDuration;
|
|
17
|
+
animationEasing?: EasingInput;
|
|
18
|
+
onClick?: (e: NativeMouseEvent<SVGPathElement>) => void;
|
|
19
|
+
onMouseDown?: (e: NativeMouseEvent<SVGPathElement>) => void;
|
|
20
|
+
onMouseUp?: (e: NativeMouseEvent<SVGPathElement>) => void;
|
|
21
|
+
onMouseMove?: (e: NativeMouseEvent<SVGPathElement>) => void;
|
|
22
|
+
onMouseOver?: (e: NativeMouseEvent<SVGPathElement>) => void;
|
|
23
|
+
onMouseOut?: (e: NativeMouseEvent<SVGPathElement>) => void;
|
|
24
|
+
onMouseEnter?: (e: NativeMouseEvent<SVGPathElement>) => void;
|
|
25
|
+
onMouseLeave?: (e: NativeMouseEvent<SVGPathElement>) => void;
|
|
26
|
+
}
|
|
27
|
+
export type Props = Omit<SVGProps<SVGPathElement>, 'radius'> & RectangleProps;
|
|
1
28
|
// Port of shape/Rectangle.tsx — a rectangle path with per-corner rounding.
|
|
2
29
|
// Phase 0 ports the STATIC path (isUpdateAnimationActive defaults false, and
|
|
3
30
|
// standalone Rectangles never animate); the width/height update animation and
|
|
@@ -10,7 +37,7 @@ import { resolveDefaultProps } from '../util/resolveDefaultProps';
|
|
|
10
37
|
import { round } from '../util/round';
|
|
11
38
|
import { svgPropertiesAndEvents } from '../util/svgPropertiesAndEvents.ts';
|
|
12
39
|
|
|
13
|
-
function getRectanglePath(x, y, width, height, radius) {
|
|
40
|
+
function getRectanglePath(x: number, y: number, width: number, height: number, radius: RectRadius) {
|
|
14
41
|
const roundedWidth = round(width);
|
|
15
42
|
const roundedHeight = round(height);
|
|
16
43
|
const maxRadius = Math.min(Math.abs(roundedWidth) / 2, Math.abs(roundedHeight) / 2);
|
|
@@ -134,9 +161,9 @@ export const defaultRectangleProps = {
|
|
|
134
161
|
animationBegin: 0,
|
|
135
162
|
animationDuration: 1500,
|
|
136
163
|
animationEasing: 'ease',
|
|
137
|
-
}
|
|
164
|
+
} as const satisfies Partial<Props>;
|
|
138
165
|
|
|
139
|
-
export function Rectangle(rectangleProps) {
|
|
166
|
+
export function Rectangle(rectangleProps: Props) {
|
|
140
167
|
const props = resolveDefaultProps(rectangleProps, defaultRectangleProps);
|
|
141
168
|
const { x, y, width, height, radius, className } = props;
|
|
142
169
|
|
package/src/shape/Sector.tsrx
CHANGED
|
@@ -1,3 +1,38 @@
|
|
|
1
|
+
import type { NativeMouseEvent, SVGProps } from '../util/OctaneTypes.ts';
|
|
2
|
+
import type { GeometrySector, GeometrySectorWithCornerRadius } from '../util/types';
|
|
3
|
+
|
|
4
|
+
interface TangentCircleDef {
|
|
5
|
+
cx: number;
|
|
6
|
+
cy: number;
|
|
7
|
+
radius: number;
|
|
8
|
+
angle: number;
|
|
9
|
+
sign: number;
|
|
10
|
+
isExternal?: boolean;
|
|
11
|
+
cornerRadius: number;
|
|
12
|
+
cornerIsExternal?: boolean;
|
|
13
|
+
}
|
|
14
|
+
interface SectorProps {
|
|
15
|
+
className?: SVGProps<SVGPathElement>['className'];
|
|
16
|
+
cx?: number;
|
|
17
|
+
cy?: number;
|
|
18
|
+
innerRadius?: number;
|
|
19
|
+
outerRadius?: number;
|
|
20
|
+
startAngle?: number;
|
|
21
|
+
endAngle?: number;
|
|
22
|
+
cornerRadius?: number;
|
|
23
|
+
forceCornerRadius?: boolean;
|
|
24
|
+
cornerIsExternal?: boolean;
|
|
25
|
+
onClick?: (e: NativeMouseEvent<SVGPathElement>) => void;
|
|
26
|
+
onMouseDown?: (e: NativeMouseEvent<SVGPathElement>) => void;
|
|
27
|
+
onMouseUp?: (e: NativeMouseEvent<SVGPathElement>) => void;
|
|
28
|
+
onMouseMove?: (e: NativeMouseEvent<SVGPathElement>) => void;
|
|
29
|
+
onMouseOver?: (e: NativeMouseEvent<SVGPathElement>) => void;
|
|
30
|
+
onMouseOut?: (e: NativeMouseEvent<SVGPathElement>) => void;
|
|
31
|
+
onMouseEnter?: (e: NativeMouseEvent<SVGPathElement>) => void;
|
|
32
|
+
onMouseLeave?: (e: NativeMouseEvent<SVGPathElement>) => void;
|
|
33
|
+
}
|
|
34
|
+
export type Props =
|
|
35
|
+
Omit<SVGProps<SVGPathElement>, 'cx' | 'cy' | 'dangerouslySetInnerHTML'> & Partial<SectorProps>;
|
|
1
36
|
// Port of shape/Sector.tsx — the pie/radial-bar wedge (arc path with optional
|
|
2
37
|
// per-corner rounding). Path strings must be BYTE-IDENTICAL to upstream:
|
|
3
38
|
// recharts builds them with roundTemplateLiteral (every interpolated number
|
|
@@ -11,7 +46,7 @@ import { resolveDefaultProps } from '../util/resolveDefaultProps';
|
|
|
11
46
|
import { svgPropertiesAndEvents } from '../util/svgPropertiesAndEvents.ts';
|
|
12
47
|
import { roundTemplateLiteral } from '../util/round';
|
|
13
48
|
|
|
14
|
-
const getDeltaAngle = (startAngle, endAngle) => {
|
|
49
|
+
const getDeltaAngle = (startAngle: number, endAngle: number) => {
|
|
15
50
|
const sign = mathSign(endAngle - startAngle);
|
|
16
51
|
const deltaAngle = Math.min(Math.abs(endAngle - startAngle), 359.999);
|
|
17
52
|
return sign * deltaAngle;
|
|
@@ -26,7 +61,7 @@ const getTangentCircle = ({
|
|
|
26
61
|
isExternal,
|
|
27
62
|
cornerRadius,
|
|
28
63
|
cornerIsExternal,
|
|
29
|
-
}) => {
|
|
64
|
+
}: TangentCircleDef) => {
|
|
30
65
|
const centerRadius = cornerRadius * (isExternal ? 1 : -1) + radius;
|
|
31
66
|
const theta = Math.asin(cornerRadius / centerRadius) / RADIAN;
|
|
32
67
|
const centerAngle = cornerIsExternal ? angle : angle + sign * theta;
|
|
@@ -44,7 +79,14 @@ const getTangentCircle = ({
|
|
|
44
79
|
return { center, circleTangency, lineTangency, theta };
|
|
45
80
|
};
|
|
46
81
|
|
|
47
|
-
const getSectorPath = ({
|
|
82
|
+
const getSectorPath = ({
|
|
83
|
+
cx,
|
|
84
|
+
cy,
|
|
85
|
+
innerRadius,
|
|
86
|
+
outerRadius,
|
|
87
|
+
startAngle,
|
|
88
|
+
endAngle,
|
|
89
|
+
}: GeometrySector) => {
|
|
48
90
|
const angle = getDeltaAngle(startAngle, endAngle);
|
|
49
91
|
|
|
50
92
|
// When the angle of sector equals to 360, start point and end point coincide
|
|
@@ -85,7 +127,7 @@ const getSectorWithCorner = ({
|
|
|
85
127
|
cornerIsExternal,
|
|
86
128
|
startAngle,
|
|
87
129
|
endAngle,
|
|
88
|
-
}) => {
|
|
130
|
+
}: GeometrySectorWithCornerRadius) => {
|
|
89
131
|
const sign = mathSign(endAngle - startAngle);
|
|
90
132
|
const { circleTangency: soct, lineTangency: solt, theta: sot } = getTangentCircle({
|
|
91
133
|
cx,
|
|
@@ -177,9 +219,9 @@ export const defaultSectorProps = {
|
|
|
177
219
|
cornerRadius: 0,
|
|
178
220
|
forceCornerRadius: false,
|
|
179
221
|
cornerIsExternal: false,
|
|
180
|
-
}
|
|
222
|
+
} as const satisfies Partial<Props>;
|
|
181
223
|
|
|
182
|
-
export function Sector(sectorProps) {
|
|
224
|
+
export function Sector(sectorProps: Props) {
|
|
183
225
|
const props = resolveDefaultProps(sectorProps, defaultSectorProps);
|
|
184
226
|
const {
|
|
185
227
|
cx,
|
package/src/shape/Symbols.tsrx
CHANGED
|
@@ -1,3 +1,21 @@
|
|
|
1
|
+
import type { SVGProps } from '../util/OctaneTypes.ts';
|
|
2
|
+
import type { SymbolType as D3SymbolType } from 'victory-vendor/d3-shape';
|
|
3
|
+
import type { SymbolType } from '../util/types';
|
|
4
|
+
|
|
5
|
+
type SizeType = 'area' | 'diameter';
|
|
6
|
+
interface SymbolFactory {
|
|
7
|
+
[type: string]: D3SymbolType;
|
|
8
|
+
}
|
|
9
|
+
export interface InnerSymbolsProp {
|
|
10
|
+
className?: SVGProps<SVGPathElement>['className'];
|
|
11
|
+
type?: SymbolType;
|
|
12
|
+
cx?: number | null;
|
|
13
|
+
cy?: number | null;
|
|
14
|
+
size?: number;
|
|
15
|
+
sizeType?: SizeType;
|
|
16
|
+
}
|
|
17
|
+
export type SymbolsProps =
|
|
18
|
+
Omit<SVGProps<SVGPathElement>, keyof InnerSymbolsProp> & InnerSymbolsProp;
|
|
1
19
|
// Port of shape/Symbols.tsx — the scatter/legend marker shapes, drawn by
|
|
2
20
|
// victory-vendor's d3-shape symbol generators (byte-identical `d` output).
|
|
3
21
|
import {
|
|
@@ -14,7 +32,7 @@ import { clsx } from 'clsx';
|
|
|
14
32
|
import { isNumber, upperFirst } from '../util/DataUtils';
|
|
15
33
|
import { svgPropertiesAndEvents } from '../util/svgPropertiesAndEvents.ts';
|
|
16
34
|
|
|
17
|
-
const symbolFactories = {
|
|
35
|
+
const symbolFactories: SymbolFactory = {
|
|
18
36
|
symbolCircle,
|
|
19
37
|
symbolCross,
|
|
20
38
|
symbolDiamond,
|
|
@@ -25,12 +43,12 @@ const symbolFactories = {
|
|
|
25
43
|
};
|
|
26
44
|
const RADIAN = Math.PI / 180;
|
|
27
45
|
|
|
28
|
-
const getSymbolFactory = (type) => {
|
|
46
|
+
const getSymbolFactory = (type: SymbolType) => {
|
|
29
47
|
const name = 'symbol' + upperFirst(type);
|
|
30
48
|
return symbolFactories[name] || symbolCircle;
|
|
31
49
|
};
|
|
32
50
|
|
|
33
|
-
const calculateAreaSize = (size, sizeType, type) => {
|
|
51
|
+
const calculateAreaSize = (size: number, sizeType: SizeType, type: SymbolType) => {
|
|
34
52
|
if (sizeType === 'area') {
|
|
35
53
|
return size;
|
|
36
54
|
}
|
|
@@ -54,17 +72,17 @@ const calculateAreaSize = (size, sizeType, type) => {
|
|
|
54
72
|
}
|
|
55
73
|
};
|
|
56
74
|
|
|
57
|
-
const registerSymbol = (key, factory) => {
|
|
75
|
+
const registerSymbol = (key: string, factory: D3SymbolType) => {
|
|
58
76
|
symbolFactories['symbol' + upperFirst(key)] = factory;
|
|
59
77
|
};
|
|
60
78
|
|
|
61
79
|
/** Renders a symbol from a set of predefined shapes. */
|
|
62
|
-
export function Symbols(symbolsProps) {
|
|
80
|
+
export function Symbols(symbolsProps: SymbolsProps) {
|
|
63
81
|
const { type = 'circle', size = 64, sizeType = 'area', ...rest } = symbolsProps;
|
|
64
82
|
const props = { ...rest, type, size, sizeType };
|
|
65
83
|
// Runtime guard (recharts#6197): `type` can arrive as a non-string despite
|
|
66
84
|
// the declared union; fall back to 'circle'.
|
|
67
|
-
let realType = 'circle';
|
|
85
|
+
let realType: SymbolType = 'circle';
|
|
68
86
|
if (typeof type === 'string') {
|
|
69
87
|
realType = type;
|
|
70
88
|
}
|
package/src/shape/Trapezoid.tsrx
CHANGED
|
@@ -1,3 +1,27 @@
|
|
|
1
|
+
import type { NativeMouseEvent, SVGProps } from '../util/OctaneTypes.ts';
|
|
2
|
+
import type { AnimationDuration, EasingInput } from '../util/types';
|
|
3
|
+
|
|
4
|
+
interface TrapezoidProps {
|
|
5
|
+
className?: SVGProps<SVGPathElement>['className'];
|
|
6
|
+
x?: number;
|
|
7
|
+
y?: number;
|
|
8
|
+
upperWidth?: number;
|
|
9
|
+
lowerWidth?: number;
|
|
10
|
+
height?: number;
|
|
11
|
+
isUpdateAnimationActive?: boolean;
|
|
12
|
+
animationBegin?: number;
|
|
13
|
+
animationDuration?: AnimationDuration;
|
|
14
|
+
animationEasing?: EasingInput;
|
|
15
|
+
onClick?: (e: NativeMouseEvent<SVGPathElement>) => void;
|
|
16
|
+
onMouseDown?: (e: NativeMouseEvent<SVGPathElement>) => void;
|
|
17
|
+
onMouseUp?: (e: NativeMouseEvent<SVGPathElement>) => void;
|
|
18
|
+
onMouseMove?: (e: NativeMouseEvent<SVGPathElement>) => void;
|
|
19
|
+
onMouseOver?: (e: NativeMouseEvent<SVGPathElement>) => void;
|
|
20
|
+
onMouseOut?: (e: NativeMouseEvent<SVGPathElement>) => void;
|
|
21
|
+
onMouseEnter?: (e: NativeMouseEvent<SVGPathElement>) => void;
|
|
22
|
+
onMouseLeave?: (e: NativeMouseEvent<SVGPathElement>) => void;
|
|
23
|
+
}
|
|
24
|
+
export type Props = SVGProps<SVGPathElement> & TrapezoidProps;
|
|
1
25
|
// Port of shape/Trapezoid.tsx — the funnel-chart segment. Phase 0 ports the
|
|
2
26
|
// STATIC path (isUpdateAnimationActive defaults false); the update animation
|
|
3
27
|
// and the getTotalLength entrance dash arrive with the Phase 5 animation port.
|
|
@@ -7,7 +31,13 @@ import { resolveDefaultProps } from '../util/resolveDefaultProps';
|
|
|
7
31
|
import { svgPropertiesAndEvents } from '../util/svgPropertiesAndEvents.ts';
|
|
8
32
|
import { roundTemplateLiteral } from '../util/round';
|
|
9
33
|
|
|
10
|
-
const getTrapezoidPath = (
|
|
34
|
+
const getTrapezoidPath = (
|
|
35
|
+
x: number,
|
|
36
|
+
y: number,
|
|
37
|
+
upperWidth: number,
|
|
38
|
+
lowerWidth: number,
|
|
39
|
+
height: number,
|
|
40
|
+
) => {
|
|
11
41
|
const widthGap = upperWidth - lowerWidth;
|
|
12
42
|
let path;
|
|
13
43
|
path = roundTemplateLiteral`M ${x},${y}`;
|
|
@@ -28,9 +58,9 @@ export const defaultTrapezoidProps = {
|
|
|
28
58
|
animationBegin: 0,
|
|
29
59
|
animationDuration: 1500,
|
|
30
60
|
animationEasing: 'ease',
|
|
31
|
-
}
|
|
61
|
+
} as const satisfies Partial<Props>;
|
|
32
62
|
|
|
33
|
-
export function Trapezoid(outsideProps) {
|
|
63
|
+
export function Trapezoid(outsideProps: Props) {
|
|
34
64
|
const trapezoidProps = resolveDefaultProps(outsideProps, defaultTrapezoidProps);
|
|
35
65
|
const { x, y, upperWidth, lowerWidth, height, className } = trapezoidProps;
|
|
36
66
|
|
|
@@ -1,3 +1,12 @@
|
|
|
1
|
+
import type { MutableRefObject, OctaneNode } from '../util/OctaneTypes.ts';
|
|
2
|
+
import type { Action, Store } from '@reduxjs/toolkit';
|
|
3
|
+
import type { RechartsRootState } from './store';
|
|
4
|
+
|
|
5
|
+
type RechartsStoreProviderProps = {
|
|
6
|
+
children: OctaneNode;
|
|
7
|
+
preloadedState?: Partial<RechartsRootState>;
|
|
8
|
+
reduxStoreName?: string;
|
|
9
|
+
};
|
|
1
10
|
// Port of state/RechartsStoreProvider.tsx — one isolated RTK store per chart,
|
|
2
11
|
// provided through the custom RechartsReduxContext (via @octanejs/redux's
|
|
3
12
|
// Provider). A PANORAMA chart (the Brush preview) renders NO provider and
|
|
@@ -8,12 +17,12 @@ import { createRechartsStore } from './store';
|
|
|
8
17
|
import { useIsPanorama } from '../context/PanoramaContext';
|
|
9
18
|
import { RechartsReduxContext } from './RechartsReduxContext';
|
|
10
19
|
|
|
11
|
-
export function RechartsStoreProvider(props) {
|
|
20
|
+
export function RechartsStoreProvider(props: RechartsStoreProviderProps) {
|
|
12
21
|
const { preloadedState, children, reduxStoreName } = props;
|
|
13
22
|
const isPanorama = useIsPanorama();
|
|
14
23
|
// One store per CHART (not per page): recharts supports multiple independent
|
|
15
24
|
// charts, so the store rides a ref, created on first render.
|
|
16
|
-
const storeRef = useRef(null);
|
|
25
|
+
const storeRef: MutableRefObject<Store<RechartsRootState, Action> | null> = useRef(null);
|
|
17
26
|
if (isPanorama) {
|
|
18
27
|
return children;
|
|
19
28
|
}
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
// Port of state/ReportChartProps.tsx — publishes the chart root's props into
|
|
2
2
|
// the rootProps slice.
|
|
3
3
|
import { useEffect } from 'octane';
|
|
4
|
-
import { updateOptions } from './rootPropsSlice';
|
|
4
|
+
import { updateOptions, type UpdatableChartOptions } from './rootPropsSlice';
|
|
5
5
|
import { useAppDispatch } from './hooks';
|
|
6
6
|
|
|
7
|
-
export function ReportChartProps(props:
|
|
7
|
+
export function ReportChartProps(props: UpdatableChartOptions): null {
|
|
8
8
|
const dispatch = useAppDispatch();
|
|
9
9
|
useEffect(() => {
|
|
10
10
|
dispatch(updateOptions(props));
|
|
@@ -5,8 +5,9 @@ import { useIsPanorama } from '../context/PanoramaContext';
|
|
|
5
5
|
import { setLayout, setMargin } from './layoutSlice';
|
|
6
6
|
import { useAppDispatch } from './hooks';
|
|
7
7
|
import { propsAreEqual } from '../util/propsAreEqual';
|
|
8
|
+
import type { LayoutType, Margin } from '../util/types';
|
|
8
9
|
|
|
9
|
-
function ReportMainChartPropsImpl(props: { layout:
|
|
10
|
+
function ReportMainChartPropsImpl(props: { layout: LayoutType; margin: Partial<Margin> }): null {
|
|
10
11
|
const { layout, margin } = props;
|
|
11
12
|
const dispatch = useAppDispatch();
|
|
12
13
|
const isPanorama = useIsPanorama();
|
|
@@ -10,11 +10,13 @@ import {
|
|
|
10
10
|
removePolarGraphicalItem,
|
|
11
11
|
replaceCartesianGraphicalItem,
|
|
12
12
|
replacePolarGraphicalItem,
|
|
13
|
+
type CartesianGraphicalItemSettings,
|
|
14
|
+
type PolarGraphicalItemSettings,
|
|
13
15
|
} from './graphicalItemsSlice';
|
|
14
16
|
|
|
15
|
-
const SetCartesianGraphicalItemImpl = (props:
|
|
17
|
+
const SetCartesianGraphicalItemImpl = (props: CartesianGraphicalItemSettings): null => {
|
|
16
18
|
const dispatch = useAppDispatch();
|
|
17
|
-
const prevPropsRef = useRef<
|
|
19
|
+
const prevPropsRef = useRef<CartesianGraphicalItemSettings | null>(null);
|
|
18
20
|
useLayoutEffect(() => {
|
|
19
21
|
if (prevPropsRef.current === null) {
|
|
20
22
|
dispatch(addCartesianGraphicalItem(props));
|
|
@@ -36,9 +38,9 @@ const SetCartesianGraphicalItemImpl = (props: Record<string, unknown>): null =>
|
|
|
36
38
|
|
|
37
39
|
export const SetCartesianGraphicalItem = memo(SetCartesianGraphicalItemImpl);
|
|
38
40
|
|
|
39
|
-
const SetPolarGraphicalItemImpl = (props:
|
|
41
|
+
const SetPolarGraphicalItemImpl = (props: PolarGraphicalItemSettings): null => {
|
|
40
42
|
const dispatch = useAppDispatch();
|
|
41
|
-
const prevPropsRef = useRef<
|
|
43
|
+
const prevPropsRef = useRef<PolarGraphicalItemSettings | null>(null);
|
|
42
44
|
useLayoutEffect(() => {
|
|
43
45
|
if (prevPropsRef.current === null) {
|
|
44
46
|
dispatch(addPolarGraphicalItem(props));
|