@octanejs/recharts 0.1.41 → 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/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,4 +1,5 @@
|
|
|
1
|
-
import type { OctaneNode } from '
|
|
1
|
+
import type { CSSProperties, HTMLAttributes, OctaneNode, Ref } from '../util/OctaneTypes.ts';
|
|
2
|
+
|
|
2
3
|
import {
|
|
3
4
|
createContext,
|
|
4
5
|
useCallback,
|
|
@@ -25,7 +26,10 @@ export interface ResponsiveContainerDimensions {
|
|
|
25
26
|
height: number;
|
|
26
27
|
}
|
|
27
28
|
|
|
28
|
-
export interface Props
|
|
29
|
+
export interface Props extends Omit<
|
|
30
|
+
HTMLAttributes<HTMLDivElement>,
|
|
31
|
+
'id' | 'className' | 'style' | 'onResize'
|
|
32
|
+
> {
|
|
29
33
|
aspect?: number;
|
|
30
34
|
width?: `${number}%` | number;
|
|
31
35
|
height?: `${number}%` | number;
|
|
@@ -37,10 +41,9 @@ export interface Props {
|
|
|
37
41
|
debounce?: number;
|
|
38
42
|
id?: string | number;
|
|
39
43
|
className?: string | number;
|
|
40
|
-
style?:
|
|
44
|
+
style?: CSSProperties;
|
|
41
45
|
onResize?: (width: number, height: number) => void;
|
|
42
|
-
ref?:
|
|
43
|
-
[key: string]: any;
|
|
46
|
+
ref?: Ref<HTMLDivElement>;
|
|
44
47
|
}
|
|
45
48
|
|
|
46
49
|
const initialDimension = defaultResponsiveContainerProps.initialDimension;
|
|
@@ -87,9 +90,9 @@ function SizeDetectorContainer(props: Props) @{
|
|
|
87
90
|
...others
|
|
88
91
|
} = props;
|
|
89
92
|
const containerRef = useRef<HTMLDivElement | null>(null);
|
|
90
|
-
const onResizeRef = useRef(onResize);
|
|
93
|
+
const onResizeRef = useRef<Props['onResize']>(onResize);
|
|
91
94
|
onResizeRef.current = onResize;
|
|
92
|
-
useImperativeHandle(ref, () => containerRef.current, []);
|
|
95
|
+
useImperativeHandle<HTMLDivElement | null>(ref, () => containerRef.current, []);
|
|
93
96
|
const [sizes, setSizes] = useState({
|
|
94
97
|
containerWidth: initial.width,
|
|
95
98
|
containerHeight: initial.height,
|
|
@@ -114,7 +117,7 @@ function SizeDetectorContainer(props: Props) @{
|
|
|
114
117
|
setContainerSize(entry.contentRect.width, entry.contentRect.height);
|
|
115
118
|
onResizeRef.current?.(entry.contentRect.width, entry.contentRect.height);
|
|
116
119
|
};
|
|
117
|
-
const callback =
|
|
120
|
+
const callback: typeof handleResize & { cancel?: () => void } =
|
|
118
121
|
debounce > 0
|
|
119
122
|
? throttle(handleResize, debounce, { trailing: true, leading: false })
|
|
120
123
|
: handleResize;
|
|
@@ -123,7 +126,7 @@ function SizeDetectorContainer(props: Props) @{
|
|
|
123
126
|
setContainerSize(rect.width, rect.height);
|
|
124
127
|
observer.observe(containerRef.current);
|
|
125
128
|
return () => {
|
|
126
|
-
|
|
129
|
+
callback.cancel?.();
|
|
127
130
|
observer.disconnect();
|
|
128
131
|
};
|
|
129
132
|
}, [setContainerSize, debounce]);
|
|
@@ -133,7 +136,7 @@ function SizeDetectorContainer(props: Props) @{
|
|
|
133
136
|
aspect,
|
|
134
137
|
maxHeight,
|
|
135
138
|
});
|
|
136
|
-
const outerProps
|
|
139
|
+
const outerProps = Object.assign({}, others, {
|
|
137
140
|
id: id ? `${id}` : undefined,
|
|
138
141
|
className: clsx('recharts-responsive-container', className),
|
|
139
142
|
style: { ...style, width, height, minWidth, minHeight, maxHeight },
|
package/src/component/Text.tsrx
CHANGED
|
@@ -1,3 +1,41 @@
|
|
|
1
|
+
import type { CSSProperties, OctaneNode, SVGProps } from '../util/OctaneTypes.ts';
|
|
2
|
+
|
|
3
|
+
interface Words {
|
|
4
|
+
words: Array<string>;
|
|
5
|
+
width: number | undefined;
|
|
6
|
+
}
|
|
7
|
+
interface WordsWithWidth {
|
|
8
|
+
words: Array<string>;
|
|
9
|
+
width: number;
|
|
10
|
+
}
|
|
11
|
+
interface WordWithComputedWidth {
|
|
12
|
+
word: string;
|
|
13
|
+
width: number;
|
|
14
|
+
}
|
|
15
|
+
interface CalculatedWordWidths {
|
|
16
|
+
wordsWithComputedWidth: Array<WordWithComputedWidth>;
|
|
17
|
+
spaceWidth: number;
|
|
18
|
+
}
|
|
19
|
+
type CalculateWordWidthsParam = Pick<Props, 'children' | 'breakAll' | 'style'>;
|
|
20
|
+
export type TextAnchor = 'start' | 'middle' | 'end' | 'inherit';
|
|
21
|
+
export type TextVerticalAnchor = 'start' | 'middle' | 'end';
|
|
22
|
+
export type RenderableText = string | number | boolean | null | undefined;
|
|
23
|
+
interface TextProps {
|
|
24
|
+
scaleToFit?: boolean;
|
|
25
|
+
angle?: number;
|
|
26
|
+
textAnchor?: TextAnchor;
|
|
27
|
+
verticalAnchor?: TextVerticalAnchor;
|
|
28
|
+
style?: CSSProperties;
|
|
29
|
+
lineHeight?: number | string;
|
|
30
|
+
breakAll?: boolean;
|
|
31
|
+
children?: RenderableText;
|
|
32
|
+
maxLines?: number;
|
|
33
|
+
width?: number | string;
|
|
34
|
+
}
|
|
35
|
+
export type Props = Omit<SVGProps<SVGTextElement>, 'textAnchor' | 'verticalAnchor'> & TextProps;
|
|
36
|
+
type CalculateWordsByLinesProps = Pick<Props, 'maxLines' | 'children' | 'style' | 'breakAll'>;
|
|
37
|
+
type GetWordsByLinesProps =
|
|
38
|
+
Pick<Props, 'width' | 'scaleToFit' | 'children' | 'style' | 'breakAll' | 'maxLines'>;
|
|
1
39
|
// Port of component/Text.tsx — the SVG text renderer with word wrapping,
|
|
2
40
|
// maxLines binary-search truncation, scaleToFit, and rotation. Measurement
|
|
3
41
|
// runs through the vendored getStringSize (0×0 under SSR, so SSR renders the
|
|
@@ -14,9 +52,13 @@ import { isWellBehavedNumber } from '../util/isWellBehavedNumber';
|
|
|
14
52
|
|
|
15
53
|
const BREAKING_SPACES = /[ \f\n\r\t\v\u2028\u2029]+/;
|
|
16
54
|
|
|
17
|
-
const calculateWordWidths = ({
|
|
55
|
+
const calculateWordWidths = ({
|
|
56
|
+
children,
|
|
57
|
+
breakAll,
|
|
58
|
+
style,
|
|
59
|
+
}: CalculateWordWidthsParam): CalculatedWordWidths | null => {
|
|
18
60
|
try {
|
|
19
|
-
let words = [];
|
|
61
|
+
let words: string[] = [];
|
|
20
62
|
if (!isNullish(children)) {
|
|
21
63
|
if (breakAll) {
|
|
22
64
|
words = children.toString().split('');
|
|
@@ -37,19 +79,21 @@ const calculateWordWidths = ({ children, breakAll, style }) => {
|
|
|
37
79
|
}
|
|
38
80
|
};
|
|
39
81
|
|
|
40
|
-
export function isValidTextAnchor(value) {
|
|
82
|
+
export function isValidTextAnchor(value: string | undefined): value is TextAnchor {
|
|
41
83
|
return value === 'start' || value === 'middle' || value === 'end' || value === 'inherit';
|
|
42
84
|
}
|
|
43
85
|
|
|
44
|
-
export function isRenderableText(val) {
|
|
86
|
+
export function isRenderableText(val: unknown): val is RenderableText {
|
|
45
87
|
return isNullish(val) || typeof val === 'string' || typeof val === 'number' ||
|
|
46
88
|
typeof val === 'boolean';
|
|
47
89
|
}
|
|
48
90
|
|
|
49
|
-
const calculate = (
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
91
|
+
const calculate = (
|
|
92
|
+
words: ReadonlyArray<WordWithComputedWidth>,
|
|
93
|
+
lineWidth: number | string | undefined,
|
|
94
|
+
spaceWidth: number,
|
|
95
|
+
scaleToFit: boolean,
|
|
96
|
+
): WordsWithWidth[] => words.reduce<WordsWithWidth[]>((result, { word, width }) => {
|
|
53
97
|
const currentLine = result[result.length - 1];
|
|
54
98
|
if (
|
|
55
99
|
currentLine && width != null &&
|
|
@@ -66,41 +110,53 @@ const calculate = (words, lineWidth, spaceWidth, scaleToFit) => words.reduce((
|
|
|
66
110
|
return result;
|
|
67
111
|
}, []);
|
|
68
112
|
|
|
69
|
-
const findLongestLine = (words) => words.reduce(
|
|
113
|
+
const findLongestLine = (words: ReadonlyArray<WordsWithWidth>) => words.reduce(
|
|
114
|
+
(a, b) => (a.width > b.width ? a : b),
|
|
115
|
+
);
|
|
70
116
|
|
|
71
117
|
const suffix = '…';
|
|
72
118
|
|
|
73
119
|
const checkOverflow = (
|
|
74
|
-
text,
|
|
75
|
-
index,
|
|
76
|
-
breakAll,
|
|
77
|
-
style,
|
|
78
|
-
maxLines,
|
|
79
|
-
lineWidth,
|
|
80
|
-
spaceWidth,
|
|
81
|
-
scaleToFit,
|
|
82
|
-
) => {
|
|
120
|
+
text: string,
|
|
121
|
+
index: number,
|
|
122
|
+
breakAll: TextProps['breakAll'],
|
|
123
|
+
style: TextProps['style'],
|
|
124
|
+
maxLines: number,
|
|
125
|
+
lineWidth: number | string | undefined,
|
|
126
|
+
spaceWidth: number,
|
|
127
|
+
scaleToFit: boolean,
|
|
128
|
+
): [boolean, ReadonlyArray<WordsWithWidth>] => {
|
|
83
129
|
const tempText = text.slice(0, index);
|
|
84
130
|
const words = calculateWordWidths({ breakAll, style, children: tempText + suffix });
|
|
85
131
|
if (!words) {
|
|
86
132
|
return [false, []];
|
|
87
133
|
}
|
|
88
|
-
const result = calculate(
|
|
134
|
+
const result: ReadonlyArray<WordsWithWidth> = calculate(
|
|
135
|
+
words.wordsWithComputedWidth,
|
|
136
|
+
lineWidth,
|
|
137
|
+
spaceWidth,
|
|
138
|
+
scaleToFit,
|
|
139
|
+
);
|
|
89
140
|
const doesOverflow =
|
|
90
141
|
result.length > maxLines || findLongestLine(result).width > Number(lineWidth);
|
|
91
142
|
return [doesOverflow, result];
|
|
92
143
|
};
|
|
93
144
|
|
|
94
145
|
const calculateWordsByLines = (
|
|
95
|
-
{ maxLines, children, style, breakAll },
|
|
96
|
-
initialWordsWithComputedWith
|
|
97
|
-
spaceWidth,
|
|
98
|
-
lineWidth,
|
|
99
|
-
scaleToFit,
|
|
146
|
+
{ maxLines, children, style, breakAll }: CalculateWordsByLinesProps,
|
|
147
|
+
initialWordsWithComputedWith: ReadonlyArray<WordWithComputedWidth>,
|
|
148
|
+
spaceWidth: number,
|
|
149
|
+
lineWidth: number | string | undefined,
|
|
150
|
+
scaleToFit: boolean,
|
|
100
151
|
) => {
|
|
101
152
|
const shouldLimitLines = isNumber(maxLines);
|
|
102
153
|
const text = String(children);
|
|
103
|
-
const originalResult = calculate(
|
|
154
|
+
const originalResult: ReadonlyArray<WordsWithWidth> = calculate(
|
|
155
|
+
initialWordsWithComputedWith,
|
|
156
|
+
lineWidth,
|
|
157
|
+
spaceWidth,
|
|
158
|
+
scaleToFit,
|
|
159
|
+
);
|
|
104
160
|
if (!shouldLimitLines || scaleToFit) {
|
|
105
161
|
return originalResult;
|
|
106
162
|
}
|
|
@@ -112,7 +168,7 @@ const calculateWordsByLines = (
|
|
|
112
168
|
let start = 0;
|
|
113
169
|
let end = text.length - 1;
|
|
114
170
|
let iterations = 0;
|
|
115
|
-
let trimmedResult;
|
|
171
|
+
let trimmedResult: ReadonlyArray<WordsWithWidth> | undefined;
|
|
116
172
|
while (start <= end && iterations <= text.length - 1) {
|
|
117
173
|
const middle = Math.floor((start + end) / 2);
|
|
118
174
|
const prev = middle - 1;
|
|
@@ -153,7 +209,7 @@ const calculateWordsByLines = (
|
|
|
153
209
|
return trimmedResult || originalResult;
|
|
154
210
|
};
|
|
155
211
|
|
|
156
|
-
const getWordsWithoutCalculate = (children) => {
|
|
212
|
+
const getWordsWithoutCalculate = (children: OctaneNode) => {
|
|
157
213
|
const words =
|
|
158
214
|
!isNullish(children) ? children.toString().split(BREAKING_SPACES) : [];
|
|
159
215
|
return [
|
|
@@ -161,7 +217,14 @@ const getWordsWithoutCalculate = (children) => {
|
|
|
161
217
|
];
|
|
162
218
|
};
|
|
163
219
|
|
|
164
|
-
export const getWordsByLines = ({
|
|
220
|
+
export const getWordsByLines = ({
|
|
221
|
+
width,
|
|
222
|
+
scaleToFit,
|
|
223
|
+
children,
|
|
224
|
+
style,
|
|
225
|
+
breakAll,
|
|
226
|
+
maxLines,
|
|
227
|
+
}: GetWordsByLinesProps) => {
|
|
165
228
|
// Only perform calculations if using features that require them (multiline, scaleToFit)
|
|
166
229
|
if ((width || scaleToFit) && !Global.isSsr) {
|
|
167
230
|
const wordWidths = calculateWordWidths({ breakAll, children, style });
|
|
@@ -195,9 +258,9 @@ export const textDefaultProps = {
|
|
|
195
258
|
verticalAnchor: 'end',
|
|
196
259
|
x: 0,
|
|
197
260
|
y: 0,
|
|
198
|
-
}
|
|
261
|
+
} as const satisfies Partial<Props>;
|
|
199
262
|
|
|
200
|
-
export function Text(outsideProps) @{
|
|
263
|
+
export function Text(outsideProps: Props) @{
|
|
201
264
|
const {
|
|
202
265
|
x: propsX,
|
|
203
266
|
y: propsY,
|
|
@@ -210,7 +273,7 @@ export function Text(outsideProps) @{
|
|
|
210
273
|
ref,
|
|
211
274
|
...props
|
|
212
275
|
} = resolveDefaultProps(outsideProps, textDefaultProps);
|
|
213
|
-
const wordsByLines = useMemo(() => {
|
|
276
|
+
const wordsByLines: ReadonlyArray<Words> = useMemo(() => {
|
|
214
277
|
return getWordsByLines({
|
|
215
278
|
breakAll: props.breakAll,
|
|
216
279
|
children: props.children,
|
|
@@ -229,7 +292,7 @@ export function Text(outsideProps) @{
|
|
|
229
292
|
if (!isWellBehavedNumber(x) || !isWellBehavedNumber(y)) {
|
|
230
293
|
return null;
|
|
231
294
|
}
|
|
232
|
-
let startDy;
|
|
295
|
+
let startDy: string;
|
|
233
296
|
switch (verticalAnchor) {
|
|
234
297
|
case 'start':
|
|
235
298
|
startDy = reduceCSSCalc('calc(' + capHeight + ')');
|
|
@@ -1,5 +1,6 @@
|
|
|
1
|
+
import type { CSSProperties, OctaneElement, OctaneNode } from '../util/OctaneTypes.ts';
|
|
1
2
|
import * as React from 'octane';
|
|
2
|
-
import {
|
|
3
|
+
import { useEffect } from 'octane';
|
|
3
4
|
import { createPortal } from 'octane';
|
|
4
5
|
import {
|
|
5
6
|
DefaultTooltipContent,
|
|
@@ -8,15 +9,15 @@ import {
|
|
|
8
9
|
Props as DefaultTooltipContentProps,
|
|
9
10
|
TooltipItemSorter,
|
|
10
11
|
ValueType,
|
|
11
|
-
} from './DefaultTooltipContent';
|
|
12
|
-
import { TooltipBoundingBox } from './TooltipBoundingBox';
|
|
12
|
+
} from './DefaultTooltipContent.tsrx';
|
|
13
|
+
import { TooltipBoundingBox } from './TooltipBoundingBox.tsrx';
|
|
13
14
|
|
|
14
15
|
import { getUniqPayload, UniqueOption } from '../util/payload/getUniqPayload';
|
|
15
16
|
import { AllowInDimension, AnimationDuration, EasingInput, Coordinate } from '../util/types';
|
|
16
17
|
import { useViewBox } from '../context/chartLayoutContext';
|
|
17
18
|
import { useAccessibilityLayer } from '../context/accessibilityContext';
|
|
18
19
|
import { useElementOffset } from '../util/useElementOffset';
|
|
19
|
-
import { Cursor, CursorDefinition } from './Cursor';
|
|
20
|
+
import { Cursor, CursorDefinition } from './Cursor.tsrx';
|
|
20
21
|
import {
|
|
21
22
|
selectActiveCoordinate,
|
|
22
23
|
selectActiveLabel,
|
|
@@ -33,12 +34,12 @@ import {
|
|
|
33
34
|
TooltipPayloadEntry,
|
|
34
35
|
} from '../state/tooltipSlice';
|
|
35
36
|
import { AxisId } from '../state/cartesianAxisSlice';
|
|
36
|
-
import { useTooltipChartSynchronisation } from '../synchronisation/useChartSynchronisation';
|
|
37
|
+
import { useTooltipChartSynchronisation } from '../synchronisation/useChartSynchronisation.tsrx';
|
|
37
38
|
import { useTooltipEventType } from '../state/selectors/selectTooltipEventType';
|
|
38
39
|
import { resolveDefaultProps } from '../util/resolveDefaultProps';
|
|
39
40
|
|
|
40
41
|
export type ContentType<TValue extends ValueType = ValueType, TName extends NameType = NameType> =
|
|
41
|
-
|
|
42
|
+
OctaneElement | ((props: TooltipContentProps<TValue, TName>) => OctaneNode);
|
|
42
43
|
|
|
43
44
|
function defaultUniqBy(entry: Payload<ValueType, NameType>) {
|
|
44
45
|
return entry.dataKey;
|
|
@@ -60,7 +61,7 @@ export type TooltipContentProps<
|
|
|
60
61
|
function renderContent<TValue extends ValueType, TName extends NameType>(
|
|
61
62
|
content: ContentType<TValue, TName> | undefined,
|
|
62
63
|
props: TooltipContentProps,
|
|
63
|
-
):
|
|
64
|
+
): OctaneNode {
|
|
64
65
|
if (React.isValidElement(content)) {
|
|
65
66
|
return React.cloneElement(content, props);
|
|
66
67
|
}
|
|
@@ -143,8 +144,8 @@ export type TooltipProps<TValue extends ValueType = ValueType, TName extends Nam
|
|
|
143
144
|
* Function to customize the value in the tooltip.
|
|
144
145
|
* If you return an array, the first entry will be the formatted "value", and the second entry will be the formatted "name"
|
|
145
146
|
*/
|
|
146
|
-
formatter?: (value: TValue, name: TName, item: TooltipPayloadEntry, index: number, payload: TooltipPayload) => |
|
|
147
|
-
| [
|
|
147
|
+
formatter?: (value: TValue, name: TName, item: TooltipPayloadEntry, index: number, payload: TooltipPayload) => | OctaneNode
|
|
148
|
+
| [OctaneNode, OctaneNode];
|
|
148
149
|
/**
|
|
149
150
|
* If true, the tooltip will display information about hidden series.
|
|
150
151
|
* Defaults to false.
|
|
@@ -173,7 +174,7 @@ export type TooltipProps<TValue extends ValueType = ValueType, TName extends Nam
|
|
|
173
174
|
/**
|
|
174
175
|
* The formatter function of label in tooltip.
|
|
175
176
|
*/
|
|
176
|
-
labelFormatter?: (label: any, payload: TooltipPayload) =>
|
|
177
|
+
labelFormatter?: (label: any, payload: TooltipPayload) => OctaneNode;
|
|
177
178
|
/**
|
|
178
179
|
* The style of default tooltip label which is a p element.
|
|
179
180
|
* @defaultValue {}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
+
import type { CSSProperties, OctaneNode } from '../util/OctaneTypes.ts';
|
|
1
2
|
import * as React from 'octane';
|
|
2
|
-
import type { OctaneNode } from 'octane';
|
|
3
3
|
|
|
4
4
|
import {
|
|
5
5
|
AllowInDimension,
|
|
@@ -27,7 +27,7 @@ export type TooltipBoundingBoxProps = {
|
|
|
27
27
|
reverseDirection: AllowInDimension;
|
|
28
28
|
useTranslate3d: boolean;
|
|
29
29
|
viewBox: CartesianViewBox;
|
|
30
|
-
wrapperStyle:
|
|
30
|
+
wrapperStyle: CSSProperties;
|
|
31
31
|
lastBoundingBox: ElementOffset;
|
|
32
32
|
innerRef: SetElementOffset;
|
|
33
33
|
hasPortalFromProps: boolean;
|
|
@@ -100,7 +100,7 @@ function TooltipBoundingBoxImpl(props: TooltipBoundingBoxProps) {
|
|
|
100
100
|
useTranslate3d: props.useTranslate3d,
|
|
101
101
|
viewBox: props.viewBox,
|
|
102
102
|
});
|
|
103
|
-
const positionStyle:
|
|
103
|
+
const positionStyle: CSSProperties =
|
|
104
104
|
props.hasPortalFromProps
|
|
105
105
|
? {}
|
|
106
106
|
: {
|
|
@@ -117,13 +117,12 @@ function TooltipBoundingBoxImpl(props: TooltipBoundingBoxProps) {
|
|
|
117
117
|
top: 0,
|
|
118
118
|
left: 0,
|
|
119
119
|
};
|
|
120
|
-
const outerStyle:
|
|
120
|
+
const outerStyle: CSSProperties = {
|
|
121
121
|
...positionStyle,
|
|
122
122
|
visibility: !state.dismissed && props.active && props.hasPayload ? 'visible' : 'hidden',
|
|
123
123
|
...props.wrapperStyle,
|
|
124
124
|
};
|
|
125
125
|
return <div
|
|
126
|
-
// @ts-expect-error typescript library does not recognize xmlns attribute, but it's required for an HTML chunk inside SVG.
|
|
127
126
|
xmlns="http://www.w3.org/1999/xhtml"
|
|
128
127
|
tabIndex={-1}
|
|
129
128
|
className={cssClasses}
|
|
@@ -1,7 +1,12 @@
|
|
|
1
|
-
//
|
|
2
|
-
|
|
1
|
+
// Adapted from recharts@3.9.2, commit b3451050c027a23957ffa50a2665c9119df21e47.
|
|
2
|
+
import type { CSSProperties } from '../util/OctaneTypes';
|
|
3
|
+
|
|
3
4
|
import { isPercent } from '../util/DataUtils';
|
|
4
|
-
|
|
5
|
+
|
|
6
|
+
import type { Percent } from '../util/types';
|
|
7
|
+
import type { Props } from './ResponsiveContainer.tsrx';
|
|
8
|
+
|
|
9
|
+
export const defaultResponsiveContainerProps = {
|
|
5
10
|
width: '100%',
|
|
6
11
|
height: '100%',
|
|
7
12
|
debounce: 0,
|
|
@@ -10,21 +15,32 @@ export var defaultResponsiveContainerProps = {
|
|
|
10
15
|
width: -1,
|
|
11
16
|
height: -1,
|
|
12
17
|
},
|
|
13
|
-
}
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
18
|
+
} as const satisfies Partial<Props>;
|
|
19
|
+
|
|
20
|
+
export const calculateChartDimensions = (
|
|
21
|
+
containerWidth: number | undefined,
|
|
22
|
+
containerHeight: number | undefined,
|
|
23
|
+
props: {
|
|
24
|
+
width: Percent | number | undefined;
|
|
25
|
+
height: Percent | number | undefined;
|
|
26
|
+
aspect: number | undefined;
|
|
27
|
+
maxHeight: number | undefined;
|
|
28
|
+
},
|
|
29
|
+
) => {
|
|
30
|
+
const {
|
|
31
|
+
width = defaultResponsiveContainerProps.width,
|
|
32
|
+
height = defaultResponsiveContainerProps.height,
|
|
33
|
+
aspect,
|
|
34
|
+
maxHeight,
|
|
35
|
+
} = props;
|
|
21
36
|
|
|
22
37
|
/*
|
|
23
38
|
* The containerWidth and containerHeight are already percentage based because it's set as that percentage in CSS.
|
|
24
39
|
* Means we don't have to calculate percentages here.
|
|
25
40
|
*/
|
|
26
|
-
|
|
27
|
-
|
|
41
|
+
let calculatedWidth: number | undefined = isPercent(width) ? containerWidth : Number(width);
|
|
42
|
+
let calculatedHeight: number | undefined = isPercent(height) ? containerHeight : Number(height);
|
|
43
|
+
|
|
28
44
|
if (aspect && aspect > 0) {
|
|
29
45
|
// Preserve the desired aspect ratio
|
|
30
46
|
if (calculatedWidth) {
|
|
@@ -40,25 +56,24 @@ export var calculateChartDimensions = (containerWidth, containerHeight, props) =
|
|
|
40
56
|
calculatedHeight = maxHeight;
|
|
41
57
|
}
|
|
42
58
|
}
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
calculatedHeight,
|
|
46
|
-
};
|
|
59
|
+
|
|
60
|
+
return { calculatedWidth, calculatedHeight };
|
|
47
61
|
};
|
|
48
|
-
|
|
62
|
+
|
|
63
|
+
const bothOverflow: CSSProperties = {
|
|
49
64
|
width: 0,
|
|
50
65
|
height: 0,
|
|
51
66
|
overflow: 'visible',
|
|
52
67
|
};
|
|
53
|
-
|
|
68
|
+
const overflowX: CSSProperties = {
|
|
54
69
|
width: 0,
|
|
55
70
|
overflowX: 'visible',
|
|
56
71
|
};
|
|
57
|
-
|
|
72
|
+
const overflowY: CSSProperties = {
|
|
58
73
|
height: 0,
|
|
59
74
|
overflowY: 'visible',
|
|
60
75
|
};
|
|
61
|
-
|
|
76
|
+
const noStyle: CSSProperties = {};
|
|
62
77
|
|
|
63
78
|
/**
|
|
64
79
|
* This zero-size, overflow-visible is required to allow the chart to shrink.
|
|
@@ -74,11 +89,14 @@ var noStyle = {};
|
|
|
74
89
|
* because in that case the chart can't shrink in that dimension anyway.
|
|
75
90
|
* This fixes defining the dimensions using aspect ratio: https://github.com/recharts/recharts/issues/6245
|
|
76
91
|
*/
|
|
77
|
-
export
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
92
|
+
export const getInnerDivStyle = (props: {
|
|
93
|
+
width?: Percent | number;
|
|
94
|
+
height?: Percent | number;
|
|
95
|
+
}): CSSProperties => {
|
|
96
|
+
const { width, height } = props;
|
|
97
|
+
const isWidthPercent = isPercent(width);
|
|
98
|
+
const isHeightPercent = isPercent(height);
|
|
99
|
+
|
|
82
100
|
if (isWidthPercent && isHeightPercent) {
|
|
83
101
|
return bothOverflow;
|
|
84
102
|
}
|
|
@@ -90,12 +108,19 @@ export var getInnerDivStyle = (props) => {
|
|
|
90
108
|
}
|
|
91
109
|
return noStyle;
|
|
92
110
|
};
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
111
|
+
|
|
112
|
+
export function getDefaultWidthAndHeight({
|
|
113
|
+
width,
|
|
114
|
+
height,
|
|
115
|
+
aspect,
|
|
116
|
+
}: {
|
|
117
|
+
width?: Percent | number;
|
|
118
|
+
height?: Percent | number;
|
|
119
|
+
aspect?: number;
|
|
120
|
+
}): { width: Percent | number | undefined; height: Percent | number | undefined } {
|
|
121
|
+
let calculatedWidth = width;
|
|
122
|
+
let calculatedHeight = height;
|
|
123
|
+
|
|
99
124
|
if (calculatedWidth === undefined && calculatedHeight === undefined) {
|
|
100
125
|
calculatedWidth = defaultResponsiveContainerProps.width;
|
|
101
126
|
calculatedHeight = defaultResponsiveContainerProps.height;
|
|
@@ -104,8 +129,6 @@ export function getDefaultWidthAndHeight(_ref) {
|
|
|
104
129
|
} else if (calculatedHeight === undefined) {
|
|
105
130
|
calculatedHeight = aspect && aspect > 0 ? undefined : defaultResponsiveContainerProps.height;
|
|
106
131
|
}
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
height: calculatedHeight,
|
|
110
|
-
};
|
|
132
|
+
|
|
133
|
+
return { width: calculatedWidth, height: calculatedHeight };
|
|
111
134
|
}
|
|
@@ -1,12 +1,16 @@
|
|
|
1
|
+
import type { OctaneNode } from '../util/OctaneTypes.ts';
|
|
2
|
+
|
|
1
3
|
// Port of container/ClipPathProvider.tsx — mints the chart's clip path id,
|
|
2
4
|
// renders the <defs><clipPath> sized to the plot area, and provides the id.
|
|
3
5
|
import { createContext, useContext, useState } from 'octane';
|
|
4
6
|
import { uniqueId } from '../util/DataUtils';
|
|
5
7
|
import { usePlotArea } from '../hooks';
|
|
6
8
|
|
|
7
|
-
const ClipPathIdContext = createContext(undefined);
|
|
9
|
+
const ClipPathIdContext = createContext<string | undefined>(undefined);
|
|
8
10
|
|
|
9
|
-
export function ClipPathProvider(props
|
|
11
|
+
export function ClipPathProvider(props: {
|
|
12
|
+
children: OctaneNode;
|
|
13
|
+
}) @{
|
|
10
14
|
const { children } = props;
|
|
11
15
|
const [clipPathId] = useState(uniqueId('recharts') + '-clip');
|
|
12
16
|
const plotArea = usePlotArea();
|
package/src/container/Layer.tsrx
CHANGED
|
@@ -1,8 +1,15 @@
|
|
|
1
|
+
import type { OctaneNode, SVGProps } from '../util/OctaneTypes.ts';
|
|
2
|
+
|
|
3
|
+
interface LayerProps {
|
|
4
|
+
className?: SVGProps<SVGGElement>['className'];
|
|
5
|
+
children?: OctaneNode;
|
|
6
|
+
}
|
|
7
|
+
export type Props = SVGProps<SVGGElement> & LayerProps;
|
|
1
8
|
// Port of container/Layer.tsx — an SVG <g> group. Ref is a plain prop.
|
|
2
9
|
import { clsx } from 'clsx';
|
|
3
10
|
import { svgPropertiesAndEvents } from '../util/svgPropertiesAndEvents.ts';
|
|
4
11
|
|
|
5
|
-
export function Layer(props) {
|
|
12
|
+
export function Layer(props: Props) {
|
|
6
13
|
const { children, className, ref, ...others } = props;
|
|
7
14
|
const layerClass = clsx('recharts-layer', className);
|
|
8
15
|
return <g className={layerClass} {...svgPropertiesAndEvents(others)} ref={ref}>{children}</g>;
|
|
@@ -1,3 +1,12 @@
|
|
|
1
|
+
import type { OctaneNode, Ref } from '../util/OctaneTypes.ts';
|
|
2
|
+
|
|
3
|
+
type RootSurfaceProps = {
|
|
4
|
+
children: OctaneNode;
|
|
5
|
+
title: string | undefined;
|
|
6
|
+
desc: string | undefined;
|
|
7
|
+
otherAttributes: Record<string, unknown> | null;
|
|
8
|
+
ref?: Ref<SVGSVGElement>;
|
|
9
|
+
};
|
|
1
10
|
// Port of container/RootSurface.tsx — the chart's outer <svg> (via Surface),
|
|
2
11
|
// sized from the store, with the zIndex portal <g>s wrapped around children.
|
|
3
12
|
// A panorama (Brush preview) renders a nested, brush-sized Surface instead.
|
|
@@ -18,7 +27,7 @@ const FULL_WIDTH_AND_HEIGHT = {
|
|
|
18
27
|
display: 'block',
|
|
19
28
|
};
|
|
20
29
|
|
|
21
|
-
function MainChartSurface(props) {
|
|
30
|
+
function MainChartSurface(props: RootSurfaceProps) {
|
|
22
31
|
const width = useChartWidth();
|
|
23
32
|
const height = useChartHeight();
|
|
24
33
|
const hasAccessibilityLayer = useAccessibilityLayer();
|
|
@@ -26,7 +35,7 @@ function MainChartSurface(props) {
|
|
|
26
35
|
return null;
|
|
27
36
|
}
|
|
28
37
|
const { children, otherAttributes, title, desc, ref } = props;
|
|
29
|
-
let tabIndex, role;
|
|
38
|
+
let tabIndex: number | undefined, role: string | undefined;
|
|
30
39
|
if (otherAttributes != null) {
|
|
31
40
|
if (typeof otherAttributes.tabIndex === 'number') {
|
|
32
41
|
tabIndex = otherAttributes.tabIndex;
|
|
@@ -52,7 +61,9 @@ function MainChartSurface(props) {
|
|
|
52
61
|
>{children}</Surface>;
|
|
53
62
|
}
|
|
54
63
|
|
|
55
|
-
function BrushPanoramaSurface(props
|
|
64
|
+
function BrushPanoramaSurface(props: {
|
|
65
|
+
children: OctaneNode;
|
|
66
|
+
}) {
|
|
56
67
|
const { children } = props;
|
|
57
68
|
const brushDimensions = useAppSelector(selectBrushDimensions);
|
|
58
69
|
if (!brushDimensions) {
|
|
@@ -62,7 +73,7 @@ function BrushPanoramaSurface(props) {
|
|
|
62
73
|
return <Surface width={width} height={height} x={x} y={y}>{children}</Surface>;
|
|
63
74
|
}
|
|
64
75
|
|
|
65
|
-
export function RootSurface(props) {
|
|
76
|
+
export function RootSurface(props: RootSurfaceProps) {
|
|
66
77
|
const { children, ref, ...rest } = props;
|
|
67
78
|
const isPanorama = useIsPanorama();
|
|
68
79
|
if (isPanorama) {
|
|
@@ -1,9 +1,23 @@
|
|
|
1
|
+
import type { CSSProperties, OctaneNode, SVGProps } from '../util/OctaneTypes.ts';
|
|
2
|
+
import type { CartesianViewBox } from '../util/types';
|
|
3
|
+
|
|
4
|
+
interface SurfaceProps {
|
|
5
|
+
width: number | string;
|
|
6
|
+
height: number | string;
|
|
7
|
+
viewBox?: CartesianViewBox;
|
|
8
|
+
className?: string;
|
|
9
|
+
style?: CSSProperties;
|
|
10
|
+
children?: OctaneNode;
|
|
11
|
+
title?: string;
|
|
12
|
+
desc?: string;
|
|
13
|
+
}
|
|
14
|
+
export type Props = Omit<SVGProps<SVGSVGElement>, 'viewBox'> & SurfaceProps;
|
|
1
15
|
// Port of container/Surface.tsx — the root <svg> element every chart renders
|
|
2
16
|
// into. Ref is a plain prop (octane model, no forwardRef).
|
|
3
17
|
import { clsx } from 'clsx';
|
|
4
18
|
import { svgPropertiesAndEvents } from '../util/svgPropertiesAndEvents.ts';
|
|
5
19
|
|
|
6
|
-
export function Surface(props) {
|
|
20
|
+
export function Surface(props: Props) {
|
|
7
21
|
const { children, width, height, viewBox, className, style, title, desc, ref, ...others } = props;
|
|
8
22
|
const svgView = viewBox || { width, height, x: 0, y: 0 };
|
|
9
23
|
const layerClass = clsx('recharts-surface', className);
|