@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
|
@@ -0,0 +1,130 @@
|
|
|
1
|
+
// Adapted from recharts@3.9.2, commit b3451050c027a23957ffa50a2665c9119df21e47.
|
|
2
|
+
import { getPercentValue, isNullish } from '../../../util/DataUtils';
|
|
3
|
+
import { BarWithPosition, SizeList } from '../barSelectors';
|
|
4
|
+
import { isWellBehavedNumber } from '../../../util/isWellBehavedNumber';
|
|
5
|
+
import { BarPositionPosition } from '../../../util/ChartUtils';
|
|
6
|
+
import { BarCategory } from './combineBarSizeList';
|
|
7
|
+
|
|
8
|
+
function getBarPositions(
|
|
9
|
+
barGap: string | number,
|
|
10
|
+
barCategoryGap: string | number,
|
|
11
|
+
bandSize: number,
|
|
12
|
+
sizeList: SizeList,
|
|
13
|
+
maxBarSize: number | undefined,
|
|
14
|
+
): ReadonlyArray<BarWithPosition> | undefined {
|
|
15
|
+
const len = sizeList.length;
|
|
16
|
+
if (len < 1) {
|
|
17
|
+
return undefined;
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
let realBarGap = getPercentValue(barGap, bandSize, 0, true);
|
|
21
|
+
|
|
22
|
+
let result: ReadonlyArray<BarWithPosition>;
|
|
23
|
+
const initialValue: ReadonlyArray<BarWithPosition> = [];
|
|
24
|
+
|
|
25
|
+
// whether is barSize set by user
|
|
26
|
+
// Okay but why does it check only for the first element? What if the first element is set but others are not?
|
|
27
|
+
if (isWellBehavedNumber(sizeList[0]?.barSize)) {
|
|
28
|
+
let useFull = false;
|
|
29
|
+
let fullBarSize: number = bandSize / len;
|
|
30
|
+
let sum = sizeList.reduce((res, entry) => res + (entry.barSize || 0), 0);
|
|
31
|
+
sum += (len - 1) * realBarGap;
|
|
32
|
+
|
|
33
|
+
if (sum >= bandSize) {
|
|
34
|
+
sum -= (len - 1) * realBarGap;
|
|
35
|
+
realBarGap = 0;
|
|
36
|
+
}
|
|
37
|
+
if (sum >= bandSize && fullBarSize > 0) {
|
|
38
|
+
useFull = true;
|
|
39
|
+
fullBarSize *= 0.9;
|
|
40
|
+
sum = len * fullBarSize;
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
const offset = Math.round((bandSize - sum) / 2);
|
|
44
|
+
let prev: BarPositionPosition = { offset: offset - realBarGap, size: 0 };
|
|
45
|
+
|
|
46
|
+
result = sizeList.reduce(
|
|
47
|
+
(res: ReadonlyArray<BarWithPosition>, entry: BarCategory): ReadonlyArray<BarWithPosition> => {
|
|
48
|
+
const newPosition: BarWithPosition = {
|
|
49
|
+
stackId: entry.stackId,
|
|
50
|
+
dataKeys: entry.dataKeys,
|
|
51
|
+
position: {
|
|
52
|
+
offset: prev.offset + prev.size + realBarGap,
|
|
53
|
+
size: useFull ? fullBarSize : (entry.barSize ?? 0),
|
|
54
|
+
},
|
|
55
|
+
};
|
|
56
|
+
const newRes: Array<BarWithPosition> = [...res, newPosition];
|
|
57
|
+
|
|
58
|
+
prev = newPosition.position;
|
|
59
|
+
|
|
60
|
+
return newRes;
|
|
61
|
+
},
|
|
62
|
+
initialValue,
|
|
63
|
+
);
|
|
64
|
+
} else {
|
|
65
|
+
const offset = getPercentValue(barCategoryGap, bandSize, 0, true);
|
|
66
|
+
|
|
67
|
+
if (bandSize - 2 * offset - (len - 1) * realBarGap <= 0) {
|
|
68
|
+
realBarGap = 0;
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
let originalSize = (bandSize - 2 * offset - (len - 1) * realBarGap) / len;
|
|
72
|
+
if (originalSize > 1) {
|
|
73
|
+
originalSize = Math.round(originalSize);
|
|
74
|
+
}
|
|
75
|
+
const size = isWellBehavedNumber(maxBarSize)
|
|
76
|
+
? Math.min(originalSize, maxBarSize)
|
|
77
|
+
: originalSize;
|
|
78
|
+
result = sizeList.reduce(
|
|
79
|
+
(
|
|
80
|
+
res: ReadonlyArray<BarWithPosition>,
|
|
81
|
+
entry: BarCategory,
|
|
82
|
+
i,
|
|
83
|
+
): ReadonlyArray<BarWithPosition> => [
|
|
84
|
+
...res,
|
|
85
|
+
{
|
|
86
|
+
stackId: entry.stackId,
|
|
87
|
+
dataKeys: entry.dataKeys,
|
|
88
|
+
position: {
|
|
89
|
+
offset: offset + (originalSize + realBarGap) * i + (originalSize - size) / 2,
|
|
90
|
+
size,
|
|
91
|
+
},
|
|
92
|
+
},
|
|
93
|
+
],
|
|
94
|
+
initialValue,
|
|
95
|
+
);
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
return result;
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
export const combineAllBarPositions = (
|
|
102
|
+
sizeList: SizeList,
|
|
103
|
+
globalMaxBarSize: number | undefined,
|
|
104
|
+
barGap: string | number,
|
|
105
|
+
barCategoryGap: string | number,
|
|
106
|
+
barBandSize: number,
|
|
107
|
+
bandSize: number | undefined,
|
|
108
|
+
childMaxBarSize: number | undefined,
|
|
109
|
+
): ReadonlyArray<BarWithPosition> | undefined => {
|
|
110
|
+
const maxBarSize: number | undefined = isNullish(childMaxBarSize)
|
|
111
|
+
? globalMaxBarSize
|
|
112
|
+
: childMaxBarSize;
|
|
113
|
+
|
|
114
|
+
let allBarPositions: ReadonlyArray<BarWithPosition> | undefined = getBarPositions(
|
|
115
|
+
barGap,
|
|
116
|
+
barCategoryGap,
|
|
117
|
+
barBandSize !== bandSize ? barBandSize : bandSize,
|
|
118
|
+
sizeList,
|
|
119
|
+
maxBarSize,
|
|
120
|
+
);
|
|
121
|
+
|
|
122
|
+
if (barBandSize !== bandSize && allBarPositions != null) {
|
|
123
|
+
allBarPositions = allBarPositions.map((pos) => ({
|
|
124
|
+
...pos,
|
|
125
|
+
position: { ...pos.position, offset: pos.position.offset - barBandSize / 2 },
|
|
126
|
+
}));
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
return allBarPositions;
|
|
130
|
+
};
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
// Adapted from recharts@3.9.2, commit b3451050c027a23957ffa50a2665c9119df21e47.
|
|
2
|
+
import { BaseCartesianAxis } from '../../cartesianAxisSlice';
|
|
3
|
+
import { AxisRange } from '../axisSelectors';
|
|
4
|
+
|
|
5
|
+
export const combineAxisRangeWithReverse = (
|
|
6
|
+
axisSettings: BaseCartesianAxis | undefined,
|
|
7
|
+
axisRange: AxisRange | undefined,
|
|
8
|
+
): AxisRange | undefined => {
|
|
9
|
+
if (!axisSettings || !axisRange) {
|
|
10
|
+
return undefined;
|
|
11
|
+
}
|
|
12
|
+
if (axisSettings?.reversed) {
|
|
13
|
+
return [axisRange[1], axisRange[0]];
|
|
14
|
+
}
|
|
15
|
+
return axisRange;
|
|
16
|
+
};
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
// Adapted from recharts@3.9.2, commit b3451050c027a23957ffa50a2665c9119df21e47.
|
|
2
|
+
import { MaybeStackedGraphicalItem } from '../../types/StackedGraphicalItem';
|
|
3
|
+
import { BarPositionPosition } from '../../../util/ChartUtils';
|
|
4
|
+
import { BarWithPosition } from '../barSelectors';
|
|
5
|
+
|
|
6
|
+
export const combineBarPosition = (
|
|
7
|
+
allBarPositions: ReadonlyArray<BarWithPosition> | undefined,
|
|
8
|
+
barSettings: MaybeStackedGraphicalItem | undefined,
|
|
9
|
+
): BarPositionPosition | undefined => {
|
|
10
|
+
if (allBarPositions == null || barSettings == null) {
|
|
11
|
+
return undefined;
|
|
12
|
+
}
|
|
13
|
+
const position = allBarPositions.find(
|
|
14
|
+
(p: BarWithPosition) =>
|
|
15
|
+
p.stackId === barSettings.stackId &&
|
|
16
|
+
barSettings.dataKey != null &&
|
|
17
|
+
p.dataKeys.includes(barSettings.dataKey),
|
|
18
|
+
);
|
|
19
|
+
if (position == null) {
|
|
20
|
+
return undefined;
|
|
21
|
+
}
|
|
22
|
+
return position.position;
|
|
23
|
+
};
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
// Adapted from recharts@3.9.2, commit b3451050c027a23957ffa50a2665c9119df21e47.
|
|
2
|
+
import {
|
|
3
|
+
DefinitelyStackedGraphicalItem,
|
|
4
|
+
isStacked,
|
|
5
|
+
MaybeStackedGraphicalItem,
|
|
6
|
+
} from '../../types/StackedGraphicalItem';
|
|
7
|
+
import { StackId } from '../../../util/ChartUtils';
|
|
8
|
+
import { SizeList } from '../barSelectors';
|
|
9
|
+
import { getPercentValue, isNullish } from '../../../util/DataUtils';
|
|
10
|
+
import { DataKey } from '../../../util/types';
|
|
11
|
+
|
|
12
|
+
const getBarSize = (
|
|
13
|
+
globalSize: string | number | undefined,
|
|
14
|
+
totalSize: number | undefined,
|
|
15
|
+
selfSize: number | string | undefined,
|
|
16
|
+
): number | undefined => {
|
|
17
|
+
const barSize: string | number | undefined = selfSize ?? globalSize;
|
|
18
|
+
|
|
19
|
+
if (isNullish(barSize)) {
|
|
20
|
+
return undefined;
|
|
21
|
+
}
|
|
22
|
+
return getPercentValue(barSize, totalSize, 0);
|
|
23
|
+
};
|
|
24
|
+
|
|
25
|
+
export const combineBarSizeList = (
|
|
26
|
+
allBars: ReadonlyArray<MaybeStackedGraphicalItem>,
|
|
27
|
+
globalSize: string | number | undefined,
|
|
28
|
+
totalSize: number | undefined,
|
|
29
|
+
): SizeList => {
|
|
30
|
+
const initialValue: Record<StackId, Array<DefinitelyStackedGraphicalItem>> = {};
|
|
31
|
+
|
|
32
|
+
const stackedBars: ReadonlyArray<DefinitelyStackedGraphicalItem> = allBars.filter(isStacked);
|
|
33
|
+
const unstackedBars = allBars.filter((b) => b.stackId == null);
|
|
34
|
+
|
|
35
|
+
const groupByStack: Record<StackId, Array<DefinitelyStackedGraphicalItem>> = stackedBars.reduce(
|
|
36
|
+
(acc, bar) => {
|
|
37
|
+
let s = acc[bar.stackId];
|
|
38
|
+
if (s == null) {
|
|
39
|
+
s = [];
|
|
40
|
+
}
|
|
41
|
+
s.push(bar);
|
|
42
|
+
acc[bar.stackId] = s;
|
|
43
|
+
return acc;
|
|
44
|
+
},
|
|
45
|
+
initialValue,
|
|
46
|
+
);
|
|
47
|
+
|
|
48
|
+
const stackedSizeList: SizeList = Object.entries(groupByStack).map(
|
|
49
|
+
([stackId, bars]): BarCategory => {
|
|
50
|
+
const dataKeys = bars.map((b) => b.dataKey);
|
|
51
|
+
const barSize: number | undefined = getBarSize(globalSize, totalSize, bars[0]?.barSize);
|
|
52
|
+
return { stackId, dataKeys, barSize };
|
|
53
|
+
},
|
|
54
|
+
);
|
|
55
|
+
|
|
56
|
+
const unstackedSizeList: SizeList = unstackedBars.map((b): BarCategory => {
|
|
57
|
+
const dataKeys = [b.dataKey].filter((dk) => dk != null);
|
|
58
|
+
const barSize: number | undefined = getBarSize(globalSize, totalSize, b.barSize);
|
|
59
|
+
return { stackId: undefined, dataKeys, barSize };
|
|
60
|
+
});
|
|
61
|
+
|
|
62
|
+
return [...stackedSizeList, ...unstackedSizeList];
|
|
63
|
+
};
|
|
64
|
+
export type BarCategory = {
|
|
65
|
+
stackId: StackId | undefined;
|
|
66
|
+
/**
|
|
67
|
+
* List of dataKeys of items stacked at this position.
|
|
68
|
+
* All of these Bars are either sharing the same stackId,
|
|
69
|
+
* or this is an array with one Bar because it has no stackId defined.
|
|
70
|
+
*
|
|
71
|
+
* This structure limits us to having one dataKey only once per stack which I think is reasonable.
|
|
72
|
+
* People who want to have the same data twice can duplicate their data to have two distinct dataKeys.
|
|
73
|
+
*/
|
|
74
|
+
dataKeys: ReadonlyArray<DataKey<any>>;
|
|
75
|
+
/**
|
|
76
|
+
* Width (in horizontal chart) or height (in vertical chart) of this stack of items
|
|
77
|
+
*/
|
|
78
|
+
barSize: number | undefined;
|
|
79
|
+
};
|
|
@@ -1,12 +1,15 @@
|
|
|
1
|
-
//
|
|
2
|
-
|
|
1
|
+
// Adapted from recharts@3.9.2, commit b3451050c027a23957ffa50a2665c9119df21e47.
|
|
2
|
+
import { CategoricalDomain, NumberDomain } from '../../../util/types';
|
|
3
3
|
import { isWellFormedNumberDomain } from '../../../util/isDomainSpecifiedByUser';
|
|
4
4
|
import { isWellBehavedNumber } from '../../../util/isWellBehavedNumber';
|
|
5
5
|
|
|
6
6
|
/**
|
|
7
7
|
* This function validates and transforms the axis domain so that it is safe to use in the provided scale.
|
|
8
8
|
*/
|
|
9
|
-
export
|
|
9
|
+
export const combineCheckedDomain = (
|
|
10
|
+
realScaleType: string | undefined,
|
|
11
|
+
axisDomain: NumberDomain | CategoricalDomain | undefined,
|
|
12
|
+
): NumberDomain | CategoricalDomain | undefined => {
|
|
10
13
|
if (axisDomain == null) {
|
|
11
14
|
return undefined;
|
|
12
15
|
}
|
|
@@ -18,9 +21,9 @@ export var combineCheckedDomain = (realScaleType, axisDomain) => {
|
|
|
18
21
|
* let's pick the min and max from it.
|
|
19
22
|
*/
|
|
20
23
|
if (!isWellFormedNumberDomain(axisDomain)) {
|
|
21
|
-
|
|
22
|
-
for (
|
|
23
|
-
|
|
24
|
+
let min: number | undefined, max: number | undefined;
|
|
25
|
+
for (let i = 0; i < axisDomain.length; i++) {
|
|
26
|
+
const value = axisDomain[i];
|
|
24
27
|
if (!isWellBehavedNumber(value)) {
|
|
25
28
|
continue;
|
|
26
29
|
}
|
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
// Adapted from recharts@3.9.2, commit b3451050c027a23957ffa50a2665c9119df21e47.
|
|
2
|
+
import * as d3Scales from 'victory-vendor/d3-scale';
|
|
3
|
+
import { BaseCartesianAxis } from '../../cartesianAxisSlice';
|
|
4
|
+
import {
|
|
5
|
+
CategoricalDomain,
|
|
6
|
+
CategoricalDomainItem,
|
|
7
|
+
D3ScaleType,
|
|
8
|
+
NumberDomain,
|
|
9
|
+
RechartsScaleType,
|
|
10
|
+
} from '../../../util/types';
|
|
11
|
+
import { CustomScaleDefinition } from '../../../util/scale/CustomScaleDefinition';
|
|
12
|
+
import { AxisRange } from '../axisSelectors';
|
|
13
|
+
import { upperFirst } from '../../../util/DataUtils';
|
|
14
|
+
|
|
15
|
+
function getD3ScaleFromType<Domain extends CategoricalDomainItem = CategoricalDomainItem>(
|
|
16
|
+
realScaleType: D3ScaleType | RechartsScaleType,
|
|
17
|
+
): CustomScaleDefinition<Domain> | undefined {
|
|
18
|
+
const scales = d3Scales as Record<string, unknown>;
|
|
19
|
+
if (realScaleType in scales && typeof scales[realScaleType] === 'function') {
|
|
20
|
+
return scales[realScaleType]();
|
|
21
|
+
}
|
|
22
|
+
const name = `scale${upperFirst(realScaleType)}`;
|
|
23
|
+
if (name in scales && typeof scales[name] === 'function') {
|
|
24
|
+
return scales[name]();
|
|
25
|
+
}
|
|
26
|
+
return undefined;
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
/**
|
|
30
|
+
* Converts external scale definition into internal RechartsScale definition.
|
|
31
|
+
* @param scale custom function scale - if you have the `string` from outside, use `combineRealScaleType` first which will validate it and return RechartsScaleType or undefined
|
|
32
|
+
* @param axisDomain
|
|
33
|
+
* @param axisRange
|
|
34
|
+
*/
|
|
35
|
+
export function combineConfiguredScaleInternal(
|
|
36
|
+
scale:
|
|
37
|
+
| CustomScaleDefinition
|
|
38
|
+
| CustomScaleDefinition<string>
|
|
39
|
+
| CustomScaleDefinition<number>
|
|
40
|
+
| CustomScaleDefinition<Date>,
|
|
41
|
+
axisDomain: ReadonlyArray<CategoricalDomainItem>,
|
|
42
|
+
axisRange: AxisRange,
|
|
43
|
+
): CustomScaleDefinition;
|
|
44
|
+
export function combineConfiguredScaleInternal(
|
|
45
|
+
scale: D3ScaleType | RechartsScaleType,
|
|
46
|
+
axisDomain: ReadonlyArray<CategoricalDomainItem>,
|
|
47
|
+
axisRange: AxisRange,
|
|
48
|
+
): CustomScaleDefinition;
|
|
49
|
+
export function combineConfiguredScaleInternal(
|
|
50
|
+
scale: D3ScaleType | RechartsScaleType | undefined,
|
|
51
|
+
axisDomain: ReadonlyArray<CategoricalDomainItem>,
|
|
52
|
+
axisRange: AxisRange,
|
|
53
|
+
): CustomScaleDefinition | undefined;
|
|
54
|
+
export function combineConfiguredScaleInternal(
|
|
55
|
+
scale: undefined,
|
|
56
|
+
axisDomain: ReadonlyArray<CategoricalDomainItem>,
|
|
57
|
+
axisRange: AxisRange,
|
|
58
|
+
): undefined;
|
|
59
|
+
export function combineConfiguredScaleInternal<
|
|
60
|
+
Domain extends CategoricalDomainItem = CategoricalDomainItem,
|
|
61
|
+
>(
|
|
62
|
+
scale: D3ScaleType | RechartsScaleType | CustomScaleDefinition<Domain> | undefined,
|
|
63
|
+
axisDomain: ReadonlyArray<Domain>,
|
|
64
|
+
axisRange: AxisRange,
|
|
65
|
+
): CustomScaleDefinition<Domain> | undefined;
|
|
66
|
+
export function combineConfiguredScaleInternal<
|
|
67
|
+
Domain extends CategoricalDomainItem = CategoricalDomainItem,
|
|
68
|
+
>(
|
|
69
|
+
scale: D3ScaleType | RechartsScaleType | CustomScaleDefinition<Domain> | undefined,
|
|
70
|
+
axisDomain: ReadonlyArray<Domain>,
|
|
71
|
+
axisRange: AxisRange,
|
|
72
|
+
): CustomScaleDefinition<Domain> | undefined {
|
|
73
|
+
if (typeof scale === 'function') {
|
|
74
|
+
return scale.copy().domain(axisDomain).range(axisRange);
|
|
75
|
+
}
|
|
76
|
+
if (scale == null) {
|
|
77
|
+
return undefined;
|
|
78
|
+
}
|
|
79
|
+
const d3ScaleFunction: CustomScaleDefinition<Domain> | undefined = getD3ScaleFromType(scale);
|
|
80
|
+
if (d3ScaleFunction == null) {
|
|
81
|
+
return undefined;
|
|
82
|
+
}
|
|
83
|
+
d3ScaleFunction.domain(axisDomain).range(axisRange);
|
|
84
|
+
return d3ScaleFunction;
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
export function combineConfiguredScale(
|
|
88
|
+
axis: BaseCartesianAxis,
|
|
89
|
+
realScaleType: D3ScaleType | RechartsScaleType | undefined,
|
|
90
|
+
axisDomain: NumberDomain | CategoricalDomain | undefined,
|
|
91
|
+
axisRange: AxisRange | undefined,
|
|
92
|
+
): CustomScaleDefinition | undefined {
|
|
93
|
+
if (axisDomain == null || axisRange == null) {
|
|
94
|
+
return undefined;
|
|
95
|
+
}
|
|
96
|
+
if (typeof axis.scale === 'function') {
|
|
97
|
+
return combineConfiguredScaleInternal(axis.scale, axisDomain, axisRange);
|
|
98
|
+
}
|
|
99
|
+
return combineConfiguredScaleInternal(realScaleType, axisDomain, axisRange);
|
|
100
|
+
}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
// Adapted from recharts@3.9.2, commit b3451050c027a23957ffa50a2665c9119df21e47.
|
|
2
|
+
import { ChartOffsetInternal, Coordinate, LayoutType, TickItem } from '../../../util/types';
|
|
3
|
+
import { TooltipIndex, TooltipPayloadConfiguration } from '../../tooltipSlice';
|
|
4
|
+
|
|
5
|
+
export const combineCoordinateForDefaultIndex = (
|
|
6
|
+
width: number,
|
|
7
|
+
height: number,
|
|
8
|
+
layout: LayoutType,
|
|
9
|
+
offset: ChartOffsetInternal,
|
|
10
|
+
tooltipTicks: ReadonlyArray<TickItem> | undefined,
|
|
11
|
+
defaultIndex: TooltipIndex | undefined,
|
|
12
|
+
tooltipConfigurations: ReadonlyArray<TooltipPayloadConfiguration>,
|
|
13
|
+
): Coordinate | undefined => {
|
|
14
|
+
if (defaultIndex == null) {
|
|
15
|
+
return undefined;
|
|
16
|
+
}
|
|
17
|
+
/*
|
|
18
|
+
* With defaultIndex alone, we don't have enough information to decide _which_ of the multiple tooltips to display.
|
|
19
|
+
* Maybe one day we could add new prop `activeGraphicalItemId` to the chart to help with that.
|
|
20
|
+
* Until then, we choose the first one.
|
|
21
|
+
*/
|
|
22
|
+
const firstConfiguration = tooltipConfigurations[0];
|
|
23
|
+
const maybePosition: Coordinate | undefined = firstConfiguration?.getPosition(defaultIndex);
|
|
24
|
+
if (maybePosition != null) {
|
|
25
|
+
return maybePosition;
|
|
26
|
+
}
|
|
27
|
+
const tick = tooltipTicks?.[Number(defaultIndex)];
|
|
28
|
+
if (!tick) {
|
|
29
|
+
return undefined;
|
|
30
|
+
}
|
|
31
|
+
switch (layout) {
|
|
32
|
+
case 'horizontal': {
|
|
33
|
+
return {
|
|
34
|
+
x: tick.coordinate,
|
|
35
|
+
y: (offset.top + height) / 2,
|
|
36
|
+
};
|
|
37
|
+
}
|
|
38
|
+
default: {
|
|
39
|
+
// This logic is not super sound - it conflates vertical, radial, centric layouts into just one. TODO improve!
|
|
40
|
+
return {
|
|
41
|
+
x: (offset.left + width) / 2,
|
|
42
|
+
y: tick.coordinate,
|
|
43
|
+
};
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
};
|
|
@@ -1,7 +1,10 @@
|
|
|
1
|
-
//
|
|
2
|
-
|
|
1
|
+
// Adapted from recharts@3.9.2, commit b3451050c027a23957ffa50a2665c9119df21e47.
|
|
2
|
+
import { ChartDataState } from '../../chartDataSlice';
|
|
3
|
+
import { BaseCartesianAxis } from '../../cartesianAxisSlice';
|
|
3
4
|
import { getStackSeriesIdentifier } from '../../../util/stacks/getStackSeriesIdentifier';
|
|
4
5
|
import { getValueByDataKey } from '../../../util/ChartUtils';
|
|
6
|
+
import { StackSeriesIdentifier } from '../../../util/stacks/stackTypes';
|
|
7
|
+
import { DefinitelyStackedGraphicalItem } from '../../types/StackedGraphicalItem';
|
|
5
8
|
|
|
6
9
|
/**
|
|
7
10
|
* In a stacked chart, each graphical item has its own data. That data could be either:
|
|
@@ -13,40 +16,41 @@ import { getValueByDataKey } from '../../../util/ChartUtils';
|
|
|
13
16
|
* This type represents a single data point in a stacked chart, where each key is a series identifier
|
|
14
17
|
* and the value is the numeric value for that series using the numerical axis dataKey.
|
|
15
18
|
*/
|
|
19
|
+
export type DisplayedStackedDataPoint = Record<StackSeriesIdentifier, number>;
|
|
16
20
|
|
|
17
|
-
export
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
21
|
+
export type DisplayedStackedData = ReadonlyArray<DisplayedStackedDataPoint>;
|
|
22
|
+
|
|
23
|
+
export function combineDisplayedStackedData(
|
|
24
|
+
stackedGraphicalItems: ReadonlyArray<DefinitelyStackedGraphicalItem>,
|
|
25
|
+
{ chartData = [] }: ChartDataState,
|
|
26
|
+
tooltipAxisSettings: BaseCartesianAxis,
|
|
27
|
+
): DisplayedStackedData {
|
|
28
|
+
const { allowDuplicatedCategory, dataKey: tooltipDataKey } = tooltipAxisSettings;
|
|
22
29
|
|
|
23
30
|
// A map of tooltip data keys to the stacked data points
|
|
24
|
-
|
|
31
|
+
const knownItemsByDataKey = new Map<string | number, DisplayedStackedDataPoint>();
|
|
32
|
+
|
|
25
33
|
stackedGraphicalItems.forEach((item) => {
|
|
26
|
-
var _item$data;
|
|
27
34
|
// If there is no data on the individual item then we use the root chart data
|
|
28
|
-
|
|
29
|
-
(_item$data = item.data) !== null && _item$data !== void 0 ? _item$data : chartData;
|
|
35
|
+
const resolvedData = item.data ?? chartData;
|
|
30
36
|
if (resolvedData == null || resolvedData.length === 0) {
|
|
31
37
|
// if that doesn't work then we skip this item
|
|
32
38
|
return;
|
|
33
39
|
}
|
|
34
|
-
|
|
40
|
+
const stackIdentifier = getStackSeriesIdentifier(item);
|
|
35
41
|
resolvedData.forEach((entry, index) => {
|
|
36
|
-
|
|
42
|
+
const tooltipValue =
|
|
37
43
|
tooltipDataKey == null || allowDuplicatedCategory
|
|
38
44
|
? index
|
|
39
45
|
: String(getValueByDataKey(entry, tooltipDataKey, null));
|
|
40
|
-
|
|
41
|
-
|
|
46
|
+
const numericValue = getValueByDataKey(entry, item.dataKey, 0);
|
|
47
|
+
let curr;
|
|
42
48
|
if (knownItemsByDataKey.has(tooltipValue)) {
|
|
43
|
-
curr = knownItemsByDataKey.get(tooltipValue)
|
|
49
|
+
curr = knownItemsByDataKey.get(tooltipValue)!;
|
|
44
50
|
} else {
|
|
45
51
|
curr = {};
|
|
46
52
|
}
|
|
47
|
-
Object.assign(curr, {
|
|
48
|
-
[stackIdentifier]: numericValue,
|
|
49
|
-
});
|
|
53
|
+
Object.assign(curr, { [stackIdentifier]: numericValue });
|
|
50
54
|
knownItemsByDataKey.set(tooltipValue, curr);
|
|
51
55
|
});
|
|
52
56
|
});
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
// Adapted from recharts@3.9.2, commit b3451050c027a23957ffa50a2665c9119df21e47.
|
|
2
|
+
import { InverseScaleFunction } from '../../../hooks';
|
|
3
|
+
import { createCategoricalInverse } from '../../../util/scale/createCategoricalInverse';
|
|
4
|
+
import { CustomScaleDefinition } from '../../../util/scale/CustomScaleDefinition';
|
|
5
|
+
|
|
6
|
+
export function combineInverseScaleFunction(
|
|
7
|
+
configuredScale: CustomScaleDefinition | undefined,
|
|
8
|
+
): InverseScaleFunction | undefined {
|
|
9
|
+
if (configuredScale == null) {
|
|
10
|
+
return undefined;
|
|
11
|
+
}
|
|
12
|
+
if ('invert' in configuredScale && typeof configuredScale.invert === 'function') {
|
|
13
|
+
return configuredScale.invert.bind(configuredScale);
|
|
14
|
+
}
|
|
15
|
+
return createCategoricalInverse(configuredScale, undefined);
|
|
16
|
+
}
|
|
@@ -1,19 +1,26 @@
|
|
|
1
|
-
//
|
|
2
|
-
// Do not edit — update by re-vendoring when the recharts devDependency moves.
|
|
1
|
+
// Adapted from recharts@3.9.2, commit b3451050c027a23957ffa50a2665c9119df21e47.
|
|
3
2
|
import * as d3Scales from 'victory-vendor/d3-scale';
|
|
3
|
+
import { D3ScaleType, RechartsScaleType } from '../../../util/types';
|
|
4
|
+
import { BaseCartesianAxis } from '../../cartesianAxisSlice';
|
|
4
5
|
import { upperFirst } from '../../../util/DataUtils';
|
|
5
|
-
|
|
6
|
-
|
|
6
|
+
|
|
7
|
+
function getD3ScaleName(name: string): D3ScaleType {
|
|
8
|
+
return `scale${upperFirst(name)}` as D3ScaleType;
|
|
7
9
|
}
|
|
8
|
-
|
|
10
|
+
|
|
11
|
+
function isSupportedScaleName(name: string): name is RechartsScaleType {
|
|
9
12
|
return getD3ScaleName(name) in d3Scales;
|
|
10
13
|
}
|
|
11
|
-
|
|
14
|
+
|
|
15
|
+
export const combineRealScaleType = (
|
|
16
|
+
axisConfig: BaseCartesianAxis | undefined,
|
|
17
|
+
hasBar: boolean,
|
|
18
|
+
chartType: string,
|
|
19
|
+
): RechartsScaleType | undefined => {
|
|
12
20
|
if (axisConfig == null) {
|
|
13
21
|
return undefined;
|
|
14
22
|
}
|
|
15
|
-
|
|
16
|
-
type = axisConfig.type;
|
|
23
|
+
const { scale, type } = axisConfig;
|
|
17
24
|
if (scale === 'auto') {
|
|
18
25
|
if (
|
|
19
26
|
type === 'category' &&
|
|
@@ -27,6 +34,7 @@ export var combineRealScaleType = (axisConfig, hasBar, chartType) => {
|
|
|
27
34
|
if (type === 'category') {
|
|
28
35
|
return 'band';
|
|
29
36
|
}
|
|
37
|
+
|
|
30
38
|
return 'linear';
|
|
31
39
|
}
|
|
32
40
|
if (typeof scale === 'string') {
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
// Adapted from recharts@3.9.2, commit b3451050c027a23957ffa50a2665c9119df21e47.
|
|
2
|
+
import { AllStackGroups, StackGroup, StackSeries } from '../../../util/stacks/stackTypes';
|
|
3
|
+
import { MaybeStackedGraphicalItem } from '../../types/StackedGraphicalItem';
|
|
4
|
+
import { getStackSeriesIdentifier } from '../../../util/stacks/getStackSeriesIdentifier';
|
|
5
|
+
|
|
6
|
+
export const combineStackedData = (
|
|
7
|
+
stackGroups: AllStackGroups | undefined,
|
|
8
|
+
barSettings: MaybeStackedGraphicalItem | undefined,
|
|
9
|
+
): StackSeries | undefined => {
|
|
10
|
+
const stackSeriesIdentifier = getStackSeriesIdentifier(barSettings);
|
|
11
|
+
if (!stackGroups || stackSeriesIdentifier == null || barSettings == null) {
|
|
12
|
+
return undefined;
|
|
13
|
+
}
|
|
14
|
+
const { stackId } = barSettings;
|
|
15
|
+
if (stackId == null) {
|
|
16
|
+
return undefined;
|
|
17
|
+
}
|
|
18
|
+
const stackGroup: StackGroup | undefined = stackGroups[stackId];
|
|
19
|
+
if (!stackGroup) {
|
|
20
|
+
return undefined;
|
|
21
|
+
}
|
|
22
|
+
const { stackedData }: StackGroup = stackGroup;
|
|
23
|
+
if (!stackedData) {
|
|
24
|
+
return undefined;
|
|
25
|
+
}
|
|
26
|
+
return stackedData.find((sd) => sd.key === stackSeriesIdentifier);
|
|
27
|
+
};
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
// Adapted from recharts@3.9.2, commit b3451050c027a23957ffa50a2665c9119df21e47.
|
|
2
|
+
import {
|
|
3
|
+
noInteraction,
|
|
4
|
+
TooltipIndex,
|
|
5
|
+
TooltipInteractionState,
|
|
6
|
+
TooltipState,
|
|
7
|
+
} from '../../tooltipSlice';
|
|
8
|
+
import { TooltipEventType } from '../../../util/types';
|
|
9
|
+
import { TooltipTrigger } from '../../../chart/types';
|
|
10
|
+
|
|
11
|
+
function chooseAppropriateMouseInteraction(
|
|
12
|
+
tooltipState: TooltipState,
|
|
13
|
+
tooltipEventType: TooltipEventType,
|
|
14
|
+
trigger: TooltipTrigger,
|
|
15
|
+
): TooltipInteractionState | undefined {
|
|
16
|
+
if (tooltipEventType === 'axis') {
|
|
17
|
+
if (trigger === 'click') {
|
|
18
|
+
return tooltipState.axisInteraction.click;
|
|
19
|
+
}
|
|
20
|
+
return tooltipState.axisInteraction.hover;
|
|
21
|
+
}
|
|
22
|
+
if (trigger === 'click') {
|
|
23
|
+
return tooltipState.itemInteraction.click;
|
|
24
|
+
}
|
|
25
|
+
return tooltipState.itemInteraction.hover;
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
function hasBeenActivePreviously(tooltipInteractionState: TooltipInteractionState): boolean {
|
|
29
|
+
return tooltipInteractionState.index != null;
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
export const combineTooltipInteractionState = (
|
|
33
|
+
tooltipState: TooltipState,
|
|
34
|
+
tooltipEventType: TooltipEventType | undefined,
|
|
35
|
+
trigger: TooltipTrigger,
|
|
36
|
+
defaultIndex: TooltipIndex | undefined,
|
|
37
|
+
): TooltipInteractionState => {
|
|
38
|
+
if (tooltipEventType == null) {
|
|
39
|
+
return noInteraction;
|
|
40
|
+
}
|
|
41
|
+
const appropriateMouseInteraction = chooseAppropriateMouseInteraction(
|
|
42
|
+
tooltipState,
|
|
43
|
+
tooltipEventType,
|
|
44
|
+
trigger,
|
|
45
|
+
);
|
|
46
|
+
|
|
47
|
+
if (appropriateMouseInteraction == null) {
|
|
48
|
+
return noInteraction;
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
if (appropriateMouseInteraction.active) {
|
|
52
|
+
return appropriateMouseInteraction;
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
if (tooltipState.keyboardInteraction.active) {
|
|
56
|
+
return tooltipState.keyboardInteraction;
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
if (tooltipState.syncInteraction.active && tooltipState.syncInteraction.index != null) {
|
|
60
|
+
return tooltipState.syncInteraction;
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
const activeFromProps = tooltipState.settings.active === true;
|
|
64
|
+
|
|
65
|
+
if (hasBeenActivePreviously(appropriateMouseInteraction)) {
|
|
66
|
+
if (activeFromProps) {
|
|
67
|
+
return {
|
|
68
|
+
...appropriateMouseInteraction,
|
|
69
|
+
active: true,
|
|
70
|
+
};
|
|
71
|
+
}
|
|
72
|
+
} else if (defaultIndex != null) {
|
|
73
|
+
return {
|
|
74
|
+
active: true,
|
|
75
|
+
coordinate: undefined,
|
|
76
|
+
dataKey: undefined,
|
|
77
|
+
index: defaultIndex,
|
|
78
|
+
graphicalItemId: undefined,
|
|
79
|
+
};
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
return {
|
|
83
|
+
...noInteraction,
|
|
84
|
+
coordinate: appropriateMouseInteraction.coordinate,
|
|
85
|
+
};
|
|
86
|
+
};
|