solid-recharts 0.2.0 → 1.0.0
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/package.json +17 -13
- package/src/animation/AnimatedItems.tsx +2 -4
- package/src/animation/CSSTransitionAnimate.tsx +41 -39
- package/src/animation/JavascriptAnimate.tsx +45 -41
- package/src/cartesian/Area.tsx +43 -58
- package/src/cartesian/AreaRevealShape.tsx +1 -1
- package/src/cartesian/Bar.tsx +98 -78
- package/src/cartesian/BarStack.tsx +10 -7
- package/src/cartesian/Brush.tsx +20 -16
- package/src/cartesian/CartesianAxis.tsx +4 -4
- package/src/cartesian/CartesianGrid.tsx +5 -5
- package/src/cartesian/ErrorBar.tsx +9 -7
- package/src/cartesian/Funnel.tsx +17 -21
- package/src/cartesian/GraphicalItemClipPath.tsx +1 -1
- package/src/cartesian/Line.tsx +51 -66
- package/src/cartesian/LineDrawShape.tsx +20 -17
- package/src/cartesian/ReferenceArea.tsx +28 -38
- package/src/cartesian/ReferenceDot.tsx +27 -37
- package/src/cartesian/ReferenceLine.tsx +28 -37
- package/src/cartesian/RenderedTicksReporter.tsx +19 -17
- package/src/cartesian/Scatter.tsx +27 -39
- package/src/cartesian/XAxis.tsx +55 -68
- package/src/cartesian/YAxis.tsx +88 -99
- package/src/cartesian/ZAxis.tsx +29 -41
- package/src/chart/AreaChart.tsx +1 -1
- package/src/chart/BarChart.tsx +1 -1
- package/src/chart/CartesianChart.tsx +4 -3
- package/src/chart/CategoricalChart.tsx +5 -5
- package/src/chart/ComposedChart.tsx +1 -1
- package/src/chart/FunnelChart.tsx +1 -1
- package/src/chart/LineChart.tsx +1 -1
- package/src/chart/PieChart.tsx +4 -3
- package/src/chart/PolarChart.tsx +4 -3
- package/src/chart/RadarChart.tsx +4 -3
- package/src/chart/RadialBarChart.tsx +7 -3
- package/src/chart/RechartsWrapper.tsx +14 -24
- package/src/chart/Sankey.tsx +9 -6
- package/src/chart/ScatterChart.tsx +1 -1
- package/src/chart/SunburstChart.tsx +6 -5
- package/src/chart/Treemap.tsx +5 -4
- package/src/component/ActivePoints.tsx +6 -15
- package/src/component/Cell.tsx +23 -5
- package/src/component/Cursor.tsx +3 -3
- package/src/component/DefaultLegendContent.tsx +8 -6
- package/src/component/DefaultTooltipContent.tsx +14 -10
- package/src/component/Dots.tsx +11 -7
- package/src/component/Label.tsx +13 -10
- package/src/component/LabelList.tsx +12 -7
- package/src/component/Legend.tsx +26 -21
- package/src/component/ResponsiveContainer.tsx +52 -49
- package/src/component/Text.tsx +5 -5
- package/src/component/Tooltip.tsx +21 -18
- package/src/component/TooltipBoundingBox.tsx +18 -16
- package/src/component/responsiveContainerUtils.ts +1 -1
- package/src/container/ClipPathProvider.tsx +3 -3
- package/src/container/Layer.tsx +5 -5
- package/src/container/RootSurface.tsx +1 -1
- package/src/container/Surface.tsx +5 -6
- package/src/context/ErrorBarContext.tsx +17 -26
- package/src/context/PanoramaContext.tsx +2 -2
- package/src/context/RegisterGraphicalItemId.tsx +4 -2
- package/src/context/chartDataContext.tsx +26 -23
- package/src/context/chartLayoutContext.tsx +16 -12
- package/src/polar/Pie.tsx +49 -60
- package/src/polar/PolarAngleAxis.tsx +43 -52
- package/src/polar/PolarGrid.tsx +5 -5
- package/src/polar/PolarRadiusAxis.tsx +42 -50
- package/src/polar/Radar.tsx +24 -36
- package/src/polar/RadialBar.tsx +23 -41
- package/src/shape/Cross.tsx +5 -5
- package/src/shape/Curve.tsx +7 -8
- package/src/shape/Dot.tsx +4 -4
- package/src/shape/Polygon.tsx +5 -5
- package/src/shape/Rectangle.tsx +22 -20
- package/src/shape/Sector.tsx +5 -5
- package/src/shape/Symbols.tsx +6 -6
- package/src/shape/Trapezoid.tsx +29 -27
- package/src/state/RechartsStoreProvider.tsx +5 -3
- package/src/state/ReportChartProps.tsx +8 -6
- package/src/state/ReportEventSettings.tsx +8 -6
- package/src/state/ReportMainChartProps.tsx +11 -9
- package/src/state/ReportPolarOptions.tsx +15 -13
- package/src/state/SetLegendPayload.ts +20 -28
- package/src/state/SetTooltipEntrySettings.tsx +10 -27
- package/src/state/brushSlice.ts +10 -8
- package/src/state/cartesianAxisSlice.ts +72 -84
- package/src/state/chartDataSlice.ts +29 -23
- package/src/state/createCollectionActions.ts +51 -0
- package/src/state/createSelector.ts +97 -0
- package/src/state/errorBarSlice.ts +22 -16
- package/src/state/eventSettingsSlice.ts +11 -9
- package/src/state/externalEventsMiddleware.ts +2 -11
- package/src/state/graphicalItemsSlice.ts +35 -44
- package/src/state/isEventThrottled.ts +12 -0
- package/src/state/keyboardEventsMiddleware.ts +2 -8
- package/src/state/layoutSlice.ts +29 -17
- package/src/state/legendSlice.ts +35 -31
- package/src/state/mouseEventsMiddleware.ts +2 -13
- package/src/state/optionsSlice.ts +8 -6
- package/src/state/patched.ts +19 -0
- package/src/state/polarAxisSlice.ts +21 -13
- package/src/state/polarOptionsSlice.ts +16 -14
- package/src/state/referenceElementsSlice.ts +49 -34
- package/src/state/registerInStore.ts +70 -0
- package/src/state/renderedTicksSlice.ts +11 -7
- package/src/state/rootPropsSlice.ts +16 -14
- package/src/state/selectors/areaSelectors.ts +13 -36
- package/src/state/selectors/arrayEqualityCheck.ts +32 -7
- package/src/state/selectors/axisSelectors.ts +215 -169
- package/src/state/selectors/barSelectors.ts +8 -36
- package/src/state/selectors/combiners/combineConfiguredScale.ts +1 -1
- package/src/state/selectors/combiners/combineRealScaleType.ts +1 -1
- package/src/state/selectors/dataSelectors.ts +35 -16
- package/src/state/selectors/numberDomainEqualityCheck.ts +16 -8
- package/src/state/selectors/selectAxisForGraphicalItem.ts +52 -0
- package/src/state/tooltipSlice.ts +135 -86
- package/src/state/unregisterOnCleanup.ts +5 -20
- package/src/state/zIndexSlice.ts +50 -42
- package/src/synchronisation/useChartSynchronisation.tsx +213 -217
- package/src/util/ActiveShapeUtils.tsx +2 -9
- package/src/util/BarUtils.tsx +30 -23
- package/src/util/ChartUtils.ts +69 -25
- package/src/util/DirectPortal.tsx +107 -0
- package/src/util/FunnelUtils.tsx +1 -1
- package/src/util/RadialBarUtils.tsx +4 -3
- package/src/util/createCartesianCharts.tsx +1 -1
- package/src/util/createPolarCharts.tsx +1 -1
- package/src/util/propsAreEqual.ts +3 -33
- package/src/util/stacks/stackTypes.ts +1 -1
- package/src/util/svgPropertiesAndEvents.ts +1 -1
- package/src/util/tooltip/translate.ts +2 -2
- package/src/util/types.ts +3 -3
- package/src/zIndex/ZIndexLayer.tsx +39 -68
- package/src/zIndex/ZIndexPortal.tsx +29 -25
- package/src/state/reduxDevtoolsJsonStringifyReplacer.ts +0 -15
- package/src/util/axisPropsAreEqual.ts +0 -42
- package/src/util/resolveDefaultProps.tsx +0 -8
- package/src/util/typedDataKey.ts +0 -8
- package/test/_data.ts +0 -408
- package/test/animation/AnimationController.typed.spec.ts +0 -53
- package/test/animation/AnimationControllerImpl.spec.ts +0 -271
- package/test/animation/CSSTransitionAnimate.timing.spec.tsx +0 -473
- package/test/animation/JavascriptAnimate.spec.tsx +0 -62
- package/test/animation/RechartsAnimation.spec.ts +0 -636
- package/test/animation/easing.spec.ts +0 -218
- package/test/animation/legacyAnimationLengthChange.spec.tsx +0 -803
- package/test/animation/matchBy.spec.ts +0 -467
- package/test/animation/mockAnimationController.ts +0 -40
- package/test/animation/mockControllerAnimationManager.ts +0 -143
- package/test/animation/mockTimeoutController.ts +0 -114
- package/test/animation/timeoutController.spec.ts +0 -138
- package/test/animation/useAnimationStartSnapshot.spec.ts +0 -147
- package/test/animation/util.spec.ts +0 -28
- package/test/cartesian/Area.animation.spec.tsx +0 -363
- package/test/cartesian/Area.range.spec.tsx +0 -54
- package/test/cartesian/Area.spec.tsx +0 -1202
- package/test/cartesian/Area.stacked.render.spec.tsx +0 -69
- package/test/cartesian/Area.typed.spec.tsx +0 -209
- package/test/cartesian/Axis.integration.spec.tsx +0 -158
- package/test/cartesian/Bar/Bar.csstransition.spec.tsx +0 -299
- package/test/cartesian/Bar/Bar.spec.tsx +0 -2314
- package/test/cartesian/Bar/Bar.typed.spec.tsx +0 -192
- package/test/cartesian/Bar.animation.spec.tsx +0 -426
- package/test/cartesian/Bar.stackDomain.spec.tsx +0 -66
- package/test/cartesian/Bar.stacked.render.spec.tsx +0 -53
- package/test/cartesian/Bar.truncateByDomain.spec.tsx +0 -237
- package/test/cartesian/Bar.zeroDimensionFiltering.spec.tsx +0 -336
- package/test/cartesian/BarStack.spec.tsx +0 -91
- package/test/cartesian/Brush.keyboard.spec.tsx +0 -88
- package/test/cartesian/Brush.panorama.spec.tsx +0 -41
- package/test/cartesian/Brush.props.spec.tsx +0 -63
- package/test/cartesian/Brush.render.spec.tsx +0 -117
- package/test/cartesian/Brush.spec.tsx +0 -522
- package/test/cartesian/Brush.stacked.spec.tsx +0 -221
- package/test/cartesian/CartesianAxis.render.spec.tsx +0 -50
- package/test/cartesian/CartesianAxis.spec.tsx +0 -396
- package/test/cartesian/CartesianGrid.render.spec.tsx +0 -39
- package/test/cartesian/CartesianGrid.spec.tsx +0 -2103
- package/test/cartesian/ErrorBar.render.spec.tsx +0 -69
- package/test/cartesian/ErrorBar.spec.tsx +0 -2414
- package/test/cartesian/Funnel.animation.spec.tsx +0 -241
- package/test/cartesian/Funnel.spec.tsx +0 -226
- package/test/cartesian/Funnel.typed.spec.tsx +0 -221
- package/test/cartesian/GraphicalItemClipPath.scale-behavior.spec.tsx +0 -627
- package/test/cartesian/GraphicalItemClipPath.spec.tsx +0 -427
- package/test/cartesian/Line.animation.spec.tsx +0 -643
- package/test/cartesian/Line.sparseAnimationPath.spec.tsx +0 -98
- package/test/cartesian/Line.spec.tsx +0 -471
- package/test/cartesian/Line.typed.spec.tsx +0 -152
- package/test/cartesian/ReferenceArea.render.spec.tsx +0 -63
- package/test/cartesian/ReferenceArea.spec.tsx +0 -663
- package/test/cartesian/ReferenceArea.typed.spec.tsx +0 -74
- package/test/cartesian/ReferenceDot.render.spec.tsx +0 -55
- package/test/cartesian/ReferenceDot.spec.tsx +0 -462
- package/test/cartesian/ReferenceDot.typed.spec.tsx +0 -76
- package/test/cartesian/ReferenceLine/ReferenceLine.panorama.spec.tsx +0 -184
- package/test/cartesian/ReferenceLine/ReferenceLine.spec.tsx +0 -744
- package/test/cartesian/ReferenceLine/ReferenceLine.typed.spec.tsx +0 -74
- package/test/cartesian/ReferenceLine/getEndPoints.spec.ts +0 -399
- package/test/cartesian/ReferenceLine.render.spec.tsx +0 -134
- package/test/cartesian/Scatter.animation.spec.tsx +0 -381
- package/test/cartesian/Scatter.render.spec.tsx +0 -61
- package/test/cartesian/Scatter.spec.tsx +0 -406
- package/test/cartesian/Scatter.typed.spec.tsx +0 -153
- package/test/cartesian/XAxis/XAxis.barSize.spec.tsx +0 -336
- package/test/cartesian/XAxis/XAxis.brush.spec.tsx +0 -266
- package/test/cartesian/XAxis/XAxis.categorydomain.spec.tsx +0 -872
- package/test/cartesian/XAxis/XAxis.dataKey.spec.tsx +0 -86
- package/test/cartesian/XAxis/XAxis.datatypes.spec.tsx +0 -127
- package/test/cartesian/XAxis/XAxis.hide.spec.tsx +0 -106
- package/test/cartesian/XAxis/XAxis.multiaxis.spec.tsx +0 -336
- package/test/cartesian/XAxis/XAxis.numberdomain.spec.tsx +0 -1466
- package/test/cartesian/XAxis/XAxis.padding.spec.tsx +0 -758
- package/test/cartesian/XAxis/XAxis.padding_clip.spec.tsx +0 -65
- package/test/cartesian/XAxis/XAxis.state.spec.tsx +0 -355
- package/test/cartesian/XAxis/XAxis.tick.spec.tsx +0 -493
- package/test/cartesian/XAxis/XAxis.timescale.spec.tsx +0 -233
- package/test/cartesian/XAxis/XAxis.type.spec.tsx +0 -107
- package/test/cartesian/XAxis/XAxis.typed.spec.tsx +0 -102
- package/test/cartesian/XAxis/XAxis.vertical.spec.tsx +0 -265
- package/test/cartesian/XAxis.tickFormatter.spec.tsx +0 -54
- package/test/cartesian/YAxis/YAxis.7362.derivedDomain.spec.tsx +0 -230
- package/test/cartesian/YAxis/YAxis.7362.spec.tsx +0 -104
- package/test/cartesian/YAxis/YAxis.interval-zero.spec.tsx +0 -88
- package/test/cartesian/YAxis/YAxis.label.spec.tsx +0 -219
- package/test/cartesian/YAxis/YAxis.spec.tsx +0 -1595
- package/test/cartesian/YAxis/YAxis.tick.spec.tsx +0 -428
- package/test/cartesian/YAxis/YAxis.tickFormatter.spec.tsx +0 -54
- package/test/cartesian/YAxis/YAxis.ticks.spec.tsx +0 -263
- package/test/cartesian/YAxis/YAxis.type.spec.tsx +0 -107
- package/test/cartesian/YAxis/YAxis.typed.spec.tsx +0 -102
- package/test/cartesian/ZAxis.spec.tsx +0 -300
- package/test/cartesian/ZAxis.typed.spec.tsx +0 -33
- package/test/cartesian/__snapshots__/Brush.spec.tsx.snap +0 -5
- package/test/cartesian/axisLineAndStroke.spec.tsx +0 -72
- package/test/cartesian/getCartesianPosition.spec.ts +0 -907
- package/test/cartesian/getEquidistantTicks.spec.ts +0 -88
- package/test/cartesian/getTicks.spec.ts +0 -378
- package/test/cartesian/miscFeatureGaps.spec.tsx +0 -89
- package/test/cartesian/useAnimatedLineLength.spec.ts +0 -168
- package/test/chart/AccessibilityLayer.spec.tsx +0 -569
- package/test/chart/AccessibilityScans.spec.tsx +0 -286
- package/test/chart/AreaChart.spec.tsx +0 -409
- package/test/chart/AreaChart.stacked.spec.tsx +0 -1407
- package/test/chart/AreaChart.typed.spec.tsx +0 -39
- package/test/chart/BarChart.spec.tsx +0 -3719
- package/test/chart/BarChart.typed.spec.tsx +0 -60
- package/test/chart/CategoricalChart.spec.tsx +0 -255
- package/test/chart/ComposedChart.spec.tsx +0 -199
- package/test/chart/ComposedChart.typed.spec.tsx +0 -39
- package/test/chart/FunnelChart.spec.tsx +0 -215
- package/test/chart/FunnelChart.typed.spec.tsx +0 -39
- package/test/chart/LineChart.multiseries.spec.tsx +0 -50
- package/test/chart/LineChart.smoke.spec.tsx +0 -50
- package/test/chart/LineChart.spec.tsx +0 -930
- package/test/chart/LineChart.typed.spec.tsx +0 -39
- package/test/chart/NicheChartTooltip.spec.tsx +0 -81
- package/test/chart/PieChart.spec.tsx +0 -793
- package/test/chart/PieChart.typed.spec.tsx +0 -39
- package/test/chart/RadarChart.spec.tsx +0 -530
- package/test/chart/RadarChart.typed.spec.tsx +0 -39
- package/test/chart/RadialBarChart.5966.spec.tsx +0 -48
- package/test/chart/RadialBarChart.spec.tsx +0 -679
- package/test/chart/RadialBarChart.typed.spec.tsx +0 -39
- package/test/chart/RechartsWrapper.spec.tsx +0 -83
- package/test/chart/Sankey.content.spec.tsx +0 -46
- package/test/chart/Sankey.spec.tsx +0 -952
- package/test/chart/Sankey.typed.spec.tsx +0 -29
- package/test/chart/ScatterChart.spec.tsx +0 -2613
- package/test/chart/ScatterChart.typed.spec.tsx +0 -39
- package/test/chart/SunburstChart.spec.tsx +0 -146
- package/test/chart/Treemap.animation.spec.tsx +0 -52
- package/test/chart/Treemap.spec.tsx +0 -1003
- package/test/chart/Treemap.typed.spec.tsx +0 -26
- package/test/chart/chartEvents.spec.tsx +0 -127
- package/test/chart/responsive.spec.tsx +0 -620
- package/test/component/Cell.render.spec.tsx +0 -155
- package/test/component/Cell.spec.tsx +0 -12
- package/test/component/Cursor.spec.tsx +0 -186
- package/test/component/DefaultTooltipContent.spec.tsx +0 -102
- package/test/component/Label.render.spec.tsx +0 -63
- package/test/component/Label.spec.tsx +0 -686
- package/test/component/Label.typed.spec.tsx +0 -46
- package/test/component/LabelList.spec.tsx +0 -188
- package/test/component/Legend.itemSorter.spec.tsx +0 -704
- package/test/component/Legend.render.spec.tsx +0 -92
- package/test/component/Legend.spec.tsx +0 -2213
- package/test/component/Legend.typed.spec.tsx +0 -22
- package/test/component/ResponsiveContainer.spec.tsx +0 -523
- package/test/component/ResponsiveContainerDataTest.spec.tsx +0 -51
- package/test/component/Text.spec.tsx +0 -415
- package/test/component/Text.typed.spec.tsx +0 -46
- package/test/component/Tooltip/ActiveDot.spec.tsx +0 -370
- package/test/component/Tooltip/Tooltip.animation.spec.tsx +0 -209
- package/test/component/Tooltip/Tooltip.content.spec.tsx +0 -128
- package/test/component/Tooltip/Tooltip.formatter.spec.tsx +0 -152
- package/test/component/Tooltip/Tooltip.includeHidden.spec.tsx +0 -79
- package/test/component/Tooltip/Tooltip.multipleDataArrays.spec.tsx +0 -165
- package/test/component/Tooltip/Tooltip.offset.spec.tsx +0 -113
- package/test/component/Tooltip/Tooltip.state.spec.tsx +0 -74
- package/test/component/Tooltip/Tooltip.sync.spec.tsx +0 -639
- package/test/component/Tooltip/defaultIndex.spec.tsx +0 -227
- package/test/component/Tooltip/graphicalItem.formatter.spec.tsx +0 -138
- package/test/component/Tooltip/itemSorter.spec.tsx +0 -2815
- package/test/component/Tooltip/tooltipEventType.spec.tsx +0 -344
- package/test/component/Tooltip/tooltipMouseHoverSelectors.ts +0 -41
- package/test/component/Tooltip/tooltipTestHelpers.tsx +0 -162
- package/test/component/Tooltip.defaultIndex.spec.tsx +0 -48
- package/test/component/Tooltip.hover.spec.tsx +0 -61
- package/test/component/Tooltip.item.spec.tsx +0 -54
- package/test/component/Tooltip.keyboard.spec.tsx +0 -51
- package/test/component/Tooltip.payload.spec.tsx +0 -1716
- package/test/component/Tooltip.touch.spec.tsx +0 -39
- package/test/component/Tooltip.visibility.spec.tsx +0 -1889
- package/test/component/TooltipBoundingBox.spec.tsx +0 -89
- package/test/component/responsiveContainerUtils.spec.ts +0 -205
- package/test/container/ClipPath.spec.tsx +0 -602
- package/test/container/chartDimensions.spec.tsx +0 -368
- package/test/context/chartLayoutContext.spec.tsx +0 -378
- package/test/helper/ExpectAxisDomain.tsx +0 -27
- package/test/helper/assertNotNull.ts +0 -6
- package/test/helper/assertZIndexLayerOrder.ts +0 -19
- package/test/helper/createSelectorTestCase.tsx +0 -176
- package/test/helper/expectAnimatedPieAngles.ts +0 -100
- package/test/helper/expectAnimatedPiePaths.ts +0 -78
- package/test/helper/expectAreaCurve.ts +0 -15
- package/test/helper/expectAxisTicks.ts +0 -48
- package/test/helper/expectBars.ts +0 -54
- package/test/helper/expectFunctionReturning.ts +0 -58
- package/test/helper/expectLabel.ts +0 -32
- package/test/helper/expectLastCalledWith.ts +0 -48
- package/test/helper/expectLine.ts +0 -20
- package/test/helper/expectPieSectors.ts +0 -80
- package/test/helper/expectScale.ts +0 -37
- package/test/helper/expectScatterPoints.ts +0 -52
- package/test/helper/expectStackGroups.ts +0 -144
- package/test/helper/mockAxes.ts +0 -22
- package/test/helper/mockGetBoundingClientRect.ts +0 -66
- package/test/helper/mockHTMLElementProperty.ts +0 -19
- package/test/helper/mockTouchingElement.ts +0 -27
- package/test/helper/offsetHelpers.ts +0 -19
- package/test/helper/parameterizedTestCases.tsx +0 -99
- package/test/helper/produceState.ts +0 -32
- package/test/helper/selectorTestHelpers.tsx +0 -63
- package/test/helper/trim.spec.ts +0 -35
- package/test/helper/trim.ts +0 -11
- package/test/hooks/useActiveTooltipDataPoints.spec.tsx +0 -358
- package/test/hooks/useAxisDomain.spec.tsx +0 -361
- package/test/hooks/useAxisScale.spec.tsx +0 -283
- package/test/hooks/useAxisTicks.spec.tsx +0 -130
- package/test/hooks/useOffset.spec.tsx +0 -248
- package/test/hooks/useTooltipStateHooks.spec.tsx +0 -109
- package/test/polar/Pie/Pie-TwoLevelPieChart.spec.tsx +0 -135
- package/test/polar/Pie/Pie.spec.tsx +0 -784
- package/test/polar/Pie/Pie.typed.spec.tsx +0 -78
- package/test/polar/Pie.animation.spec.tsx +0 -529
- package/test/polar/PieWithLegend.animation.spec.tsx +0 -142
- package/test/polar/PolarAngleAxis/PolarAngleAxis.events.spec.tsx +0 -76
- package/test/polar/PolarAngleAxis/PolarAngleAxis.spec.tsx +0 -2079
- package/test/polar/PolarAngleAxis/PolarAngleAxis.typed.spec.tsx +0 -102
- package/test/polar/PolarAngleAxis.render.spec.tsx +0 -79
- package/test/polar/PolarGrid.render.spec.tsx +0 -75
- package/test/polar/PolarGrid.spec.tsx +0 -918
- package/test/polar/PolarLegendPerRow.render.spec.tsx +0 -85
- package/test/polar/PolarRadiusAxis.events.spec.tsx +0 -65
- package/test/polar/PolarRadiusAxis.render.spec.tsx +0 -52
- package/test/polar/PolarRadiusAxis.spec.tsx +0 -991
- package/test/polar/PolarRadiusAxis.typed.spec.tsx +0 -84
- package/test/polar/PolarTooltipLegend.render.spec.tsx +0 -80
- package/test/polar/Radar.animation.spec.tsx +0 -570
- package/test/polar/Radar.render.spec.tsx +0 -71
- package/test/polar/Radar.spec.tsx +0 -265
- package/test/polar/Radar.typed.spec.tsx +0 -119
- package/test/polar/RadialBar/RadialBar.spec.tsx +0 -1521
- package/test/polar/RadialBar/RadialBar.typed.spec.tsx +0 -132
- package/test/polar/RadialBar.animation.spec.tsx +0 -375
- package/test/polar/RadialBar.render.spec.tsx +0 -66
- package/test/polar/RadialBar.stacked.spec.tsx +0 -57
- package/test/setup.ts +0 -84
- package/test/shape/ActiveShape.spec.tsx +0 -181
- package/test/shape/Cross.spec.tsx +0 -60
- package/test/shape/Cross.typed.spec.tsx +0 -26
- package/test/shape/Curve.spec.tsx +0 -368
- package/test/shape/Curve.typed.spec.tsx +0 -69
- package/test/shape/Dot.spec.tsx +0 -73
- package/test/shape/Dot.typed.spec.tsx +0 -30
- package/test/shape/Polygon.spec.tsx +0 -357
- package/test/shape/Polygon.typed.spec.tsx +0 -28
- package/test/shape/Rectangle.animation.spec.tsx +0 -451
- package/test/shape/Rectangle.spec.tsx +0 -68
- package/test/shape/Rectangle.typed.spec.tsx +0 -24
- package/test/shape/Sector.spec.tsx +0 -76
- package/test/shape/Sector.typed.spec.tsx +0 -24
- package/test/shape/Symbols.spec.tsx +0 -43
- package/test/shape/Symbols.typed.spec.tsx +0 -24
- package/test/shape/Trapezoid.spec.tsx +0 -50
- package/test/shape/Trapezoid.typed.spec.tsx +0 -24
- package/test/shape/__snapshots__/Cross.spec.tsx.snap +0 -62
- package/test/shape/__snapshots__/Curve.spec.tsx.snap +0 -460
- package/test/shape/__snapshots__/Polygon.spec.tsx.snap +0 -58
- package/test/shape/__snapshots__/Rectangle.spec.tsx.snap +0 -117
- package/test/shape/__snapshots__/Sector.spec.tsx.snap +0 -71
- package/test/shape/__snapshots__/Trapezoid.spec.tsx.snap +0 -64
- package/test/state/chartDataSlice.spec.ts +0 -53
- package/test/state/externalEventsMiddleware.spec.ts +0 -178
- package/test/state/graphicalItemsSlice.spec.ts +0 -92
- package/test/state/hooks.spec.tsx +0 -68
- package/test/state/legendSlice.spec.ts +0 -44
- package/test/state/mouseEventsMiddleware.spec.ts +0 -75
- package/test/state/optionsSlice.spec.ts +0 -19
- package/test/state/reduxDevtoolsJsonStringifyReplacer.spec.ts +0 -25
- package/test/state/referenceElementsSlice.spec.ts +0 -84
- package/test/state/selectors/areaSelectors.spec.tsx +0 -77
- package/test/state/selectors/axisSelectors.spec.tsx +0 -1418
- package/test/state/selectors/barStackSelectors.spec.tsx +0 -752
- package/test/state/selectors/brushSelectors.spec.tsx +0 -30
- package/test/state/selectors/cartesianAxisSlice.spec.ts +0 -96
- package/test/state/selectors/combineNiceTicks.spec.ts +0 -207
- package/test/state/selectors/combiners/combineActiveTooltipIndex.spec.ts +0 -61
- package/test/state/selectors/combiners/combineAllBarPositions.spec.ts +0 -39
- package/test/state/selectors/combiners/combineConfiguredScale.spec.ts +0 -56
- package/test/state/selectors/combiners/combineDisplayedStackedData.spec.ts +0 -123
- package/test/state/selectors/combiners/combineRealScaleType.spec.ts +0 -80
- package/test/state/selectors/containerSelectors.spec.tsx +0 -168
- package/test/state/selectors/dataSelectors.spec.tsx +0 -136
- package/test/state/selectors/legendSelectors.spec.tsx +0 -113
- package/test/state/selectors/lineSelectors.spec.tsx +0 -60
- package/test/state/selectors/pieSelectors.spec.tsx +0 -72
- package/test/state/selectors/radarSelectors.spec.tsx +0 -496
- package/test/state/selectors/rootPropsSelectors.spec.tsx +0 -169
- package/test/state/selectors/scatterSelectors.spec.tsx +0 -47
- package/test/state/selectors/selectActiveTooltipIndex.spec.tsx +0 -234
- package/test/state/selectors/selectAllAxes.spec.tsx +0 -18
- package/test/state/selectors/selectAxisDomain.spec.tsx +0 -21
- package/test/state/selectors/selectAxisDomainIncludingNiceTicks.spec.tsx +0 -19
- package/test/state/selectors/selectAxisRangeWithReverse.spec.tsx +0 -22
- package/test/state/selectors/selectAxisScale.spec.tsx +0 -91
- package/test/state/selectors/selectBarRectangles.stackOffset.spec.tsx +0 -503
- package/test/state/selectors/selectBaseAxis.spec.tsx +0 -56
- package/test/state/selectors/selectCartesianItemsSettings.spec.tsx +0 -57
- package/test/state/selectors/selectChartOffset.spec.tsx +0 -26
- package/test/state/selectors/selectDisplayedData.spec.tsx +0 -282
- package/test/state/selectors/selectIsTooltipActive.spec.tsx +0 -231
- package/test/state/selectors/selectNumericalDomain.spec.tsx +0 -21
- package/test/state/selectors/selectRealScaleType.spec.tsx +0 -19
- package/test/state/selectors/selectStackGroups.spec.tsx +0 -322
- package/test/state/selectors/selectXAxisPosition.spec.tsx +0 -22
- package/test/state/selectors/selectYAxisPosition.spec.tsx +0 -22
- package/test/state/selectors/selectors.spec.tsx +0 -1613
- package/test/state/throttling.spec.ts +0 -200
- package/test/state/zIndexSlice.spec.ts +0 -85
- package/test/synchronisation/useChartSynchronisation.spec.tsx +0 -225
- package/test/util/BarUtils.spec.ts +0 -39
- package/test/util/CartesianUtils/CartesianUtils.spec.ts +0 -261
- package/test/util/CartesianUtils/rectWithPoints.spec.ts +0 -48
- package/test/util/ChartUtils/ChartUtils.spec.ts +0 -491
- package/test/util/ChartUtils/appendOffsetOfLegend.spec.ts +0 -136
- package/test/util/ChartUtils/appendOffsetOfLegend.spec.tsx +0 -133
- package/test/util/ChartUtils/getCateCoordinateOfLine.spec.ts +0 -83
- package/test/util/ChartUtils/getStackedData.spec.ts +0 -416
- package/test/util/ChartUtils/truncateByDomain.spec.ts +0 -70
- package/test/util/DataUtils.spec.ts +0 -385
- package/test/util/DomUtils.spec.tsx +0 -117
- package/test/util/FunnelUtils.spec.tsx +0 -70
- package/test/util/Global.spec.ts +0 -11
- package/test/util/LRUCache.spec.ts +0 -81
- package/test/util/LogUtils.spec.ts +0 -45
- package/test/util/PolarUtils.spec.ts +0 -66
- package/test/util/ReduceCssCalcPrototype.spec.ts +0 -141
- package/test/util/ShallowEqual.spec.ts +0 -102
- package/test/util/TickUtils.spec.ts +0 -29
- package/test/util/axisPropsAreEqual.spec.ts +0 -93
- package/test/util/createChartHelpers.spec.tsx +0 -210
- package/test/util/cursor/getCursorPoints.spec.ts +0 -136
- package/test/util/cursor/getCursorRectangle.spec.ts +0 -50
- package/test/util/cursor/getRadialCursorPoints.spec.ts +0 -36
- package/test/util/errorValue.spec.ts +0 -69
- package/test/util/getEveryNth.spec.ts +0 -39
- package/test/util/getRadiusAndStrokeWidthFromDot.spec.ts +0 -51
- package/test/util/getRelativeCoordinate.spec.ts +0 -250
- package/test/util/getSliced.spec.ts +0 -45
- package/test/util/isDomainSpecifiedByUser.spec.ts +0 -207
- package/test/util/isWellBehavedNumber.spec.ts +0 -54
- package/test/util/payload/getUniqPayload.spec.ts +0 -56
- package/test/util/propsAreEqual.spec.ts +0 -75
- package/test/util/round.spec.ts +0 -112
- package/test/util/scale/arithmetic.spec.ts +0 -61
- package/test/util/scale/createCategoricalInverse.spec.ts +0 -84
- package/test/util/scale/getNiceTickValues.spec.ts +0 -421
- package/test/util/scale/getTickValuesFixedDomain.spec.ts +0 -155
- package/test/util/svgPropertiesAndEvents.spec.tsx +0 -206
- package/test/util/svgPropertiesNoEvents.spec.tsx +0 -228
- package/test/util/tooltip/translate.spec.ts +0 -396
- package/test/util/useAnimationId.spec.tsx +0 -59
- package/test/util/useElementOffset.spec.tsx +0 -173
- package/test/util/usePrefersReducedMotion.spec.ts +0 -54
- package/test/util/useUniqueId.spec.ts +0 -99
- package/test/utils/diagnostics-allowlist.ts +0 -18
- package/test/utils/diagnostics.ts +0 -58
- package/test/zIndex/AllZIndexPortals.spec.tsx +0 -83
- package/test/zIndex/DefaultZIndexes.spec.ts +0 -80
- package/test/zIndex/DynamicZIndex.spec.tsx +0 -102
- package/test/zIndex/ZIndexLayer.portalOwner.spec.tsx +0 -125
- package/test/zIndex/componentZIndex.spec.tsx +0 -255
- package/test/zIndex/getZIndexFromUnknown.spec.ts +0 -51
- package/test/zIndex/multiChartZIndexIsolation.spec.tsx +0 -90
- package/test/zIndex/zIndexSelectors.spec.ts +0 -172
- package/tsconfig.json +0 -11
|
@@ -37,6 +37,10 @@ import {
|
|
|
37
37
|
selectYAxisIdFromGraphicalItemId,
|
|
38
38
|
} from "./graphicalItemSelectors";
|
|
39
39
|
import { combineBarPosition } from "./combiners/combineBarPosition";
|
|
40
|
+
import {
|
|
41
|
+
selectAxisWithScaleForGraphicalItem,
|
|
42
|
+
selectTicksForGraphicalItem,
|
|
43
|
+
} from "./selectAxisForGraphicalItem";
|
|
40
44
|
|
|
41
45
|
const selectSynchronisedBarSettings = (
|
|
42
46
|
state: RechartsRootState,
|
|
@@ -187,38 +191,6 @@ export const selectBarPosition = (
|
|
|
187
191
|
selectSynchronisedBarSettings(state, id),
|
|
188
192
|
);
|
|
189
193
|
|
|
190
|
-
const selectXAxisWithScale = (
|
|
191
|
-
state: RechartsRootState,
|
|
192
|
-
id: GraphicalItemId,
|
|
193
|
-
isPanorama: boolean,
|
|
194
|
-
) => {
|
|
195
|
-
const xAxisId = selectXAxisIdFromGraphicalItemId(state, id);
|
|
196
|
-
return xAxisId == null ? undefined : selectAxisWithScale(state, "xAxis", xAxisId, isPanorama);
|
|
197
|
-
};
|
|
198
|
-
|
|
199
|
-
const selectYAxisWithScale = (
|
|
200
|
-
state: RechartsRootState,
|
|
201
|
-
id: GraphicalItemId,
|
|
202
|
-
isPanorama: boolean,
|
|
203
|
-
) => {
|
|
204
|
-
const yAxisId = selectYAxisIdFromGraphicalItemId(state, id);
|
|
205
|
-
return yAxisId == null ? undefined : selectAxisWithScale(state, "yAxis", yAxisId, isPanorama);
|
|
206
|
-
};
|
|
207
|
-
|
|
208
|
-
const selectXAxisTicks = (state: RechartsRootState, id: GraphicalItemId, isPanorama: boolean) => {
|
|
209
|
-
const xAxisId = selectXAxisIdFromGraphicalItemId(state, id);
|
|
210
|
-
return xAxisId == null
|
|
211
|
-
? undefined
|
|
212
|
-
: selectTicksOfGraphicalItem(state, "xAxis", xAxisId, isPanorama);
|
|
213
|
-
};
|
|
214
|
-
|
|
215
|
-
const selectYAxisTicks = (state: RechartsRootState, id: GraphicalItemId, isPanorama: boolean) => {
|
|
216
|
-
const yAxisId = selectYAxisIdFromGraphicalItemId(state, id);
|
|
217
|
-
return yAxisId == null
|
|
218
|
-
? undefined
|
|
219
|
-
: selectTicksOfGraphicalItem(state, "yAxis", yAxisId, isPanorama);
|
|
220
|
-
};
|
|
221
|
-
|
|
222
194
|
const selectBarStackGroups = (
|
|
223
195
|
state: RechartsRootState,
|
|
224
196
|
id: GraphicalItemId,
|
|
@@ -253,10 +225,10 @@ export const selectBarRectangles = (
|
|
|
253
225
|
): ReadonlyArray<BarRectangleItem> | undefined => {
|
|
254
226
|
const axisViewBox = selectAxisViewBox(state);
|
|
255
227
|
const offset = selectChartOffsetInternal(state);
|
|
256
|
-
const xAxis =
|
|
257
|
-
const yAxis =
|
|
258
|
-
const xAxisTicks =
|
|
259
|
-
const yAxisTicks =
|
|
228
|
+
const xAxis = selectAxisWithScaleForGraphicalItem(state, "xAxis", id, isPanorama);
|
|
229
|
+
const yAxis = selectAxisWithScaleForGraphicalItem(state, "yAxis", id, isPanorama);
|
|
230
|
+
const xAxisTicks = selectTicksForGraphicalItem(state, "xAxis", id, isPanorama);
|
|
231
|
+
const yAxisTicks = selectTicksForGraphicalItem(state, "yAxis", id, isPanorama);
|
|
260
232
|
const pos = selectBarPosition(state, id, isPanorama);
|
|
261
233
|
const layout: LayoutType = selectChartLayout(state);
|
|
262
234
|
const { chartData, dataStartIndex, dataEndIndex } =
|
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
// we spread the namespace into a plain record and narrow each candidate to a
|
|
8
8
|
// scale factory through a user-defined type guard before calling it. Behavior is
|
|
9
9
|
// identical (unknown names / non-function exports → `undefined`).
|
|
10
|
-
import * as d3Scales from "
|
|
10
|
+
import * as d3Scales from "d3-scale";
|
|
11
11
|
import {
|
|
12
12
|
CategoricalDomain,
|
|
13
13
|
CategoricalDomainItem,
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
// Ported from recharts 3.8.1 src/state/selectors/combiners/combineRealScaleType.ts
|
|
2
2
|
// (commit 7a23854).
|
|
3
|
-
import * as d3Scales from "
|
|
3
|
+
import * as d3Scales from "d3-scale";
|
|
4
4
|
import { RechartsScaleType } from "../../../util/types";
|
|
5
5
|
import { BaseCartesianAxis } from "../../cartesianAxisSlice";
|
|
6
6
|
import { upperFirst } from "../../../util/DataUtils";
|
|
@@ -1,12 +1,26 @@
|
|
|
1
1
|
// Ported from recharts 3.8.1 src/state/selectors/dataSelectors.ts (commit 7a23854).
|
|
2
2
|
//
|
|
3
|
-
//
|
|
4
|
-
//
|
|
5
|
-
//
|
|
6
|
-
// `
|
|
7
|
-
//
|
|
3
|
+
// The chartData-projecting selectors below are wrapped in the Solid-native
|
|
4
|
+
// `createSelector` (ADR-0002) so they present a stable reference when the data
|
|
5
|
+
// is unchanged — the leaf-input fix the memoized selector graph depends on. The
|
|
6
|
+
// remaining `slice`-returning helpers stay plain (they intentionally produce a
|
|
7
|
+
// fresh window each call and their wrapped consumers absorb the churn).
|
|
8
8
|
import { RechartsRootState } from "../store";
|
|
9
9
|
import { ChartData, ChartDataState } from "../chartDataSlice";
|
|
10
|
+
import { createSelector } from "../createSelector";
|
|
11
|
+
|
|
12
|
+
// LEAF-INPUT rule (ADR-0002 "Known constraint"): these read the individual
|
|
13
|
+
// leaves of the chartData slice — never the slice root `state.chartData`, whose
|
|
14
|
+
// proxy reference is permanently stable in Solid and so can never invalidate a
|
|
15
|
+
// reference-keyed cache. Reading the leaves (the `chartData` array is replaced
|
|
16
|
+
// wholesale by `setChartData`; the indexes are primitives) lets `createSelector`
|
|
17
|
+
// return a stable projected object when nothing changed and a fresh one when it
|
|
18
|
+
// did — the reselect semantics the downstream selector graph relies on.
|
|
19
|
+
const pickChartData = (state: RechartsRootState): ChartData | undefined =>
|
|
20
|
+
state.chartData.chartData;
|
|
21
|
+
const pickComputedData = (state: RechartsRootState): unknown => state.chartData.computedData;
|
|
22
|
+
const pickDataStartIndex = (state: RechartsRootState): number => state.chartData.dataStartIndex;
|
|
23
|
+
const pickDataEndIndex = (state: RechartsRootState): number => state.chartData.dataEndIndex;
|
|
10
24
|
|
|
11
25
|
/**
|
|
12
26
|
* Always returns the data with the indexes set by a Brush. That might or might
|
|
@@ -15,23 +29,28 @@ import { ChartData, ChartDataState } from "../chartDataSlice";
|
|
|
15
29
|
* {@link selectChartDataAndAlwaysIgnoreIndexes} or
|
|
16
30
|
* {@link selectChartDataWithIndexesIfNotInPanoramaPosition4} when that matters.
|
|
17
31
|
*/
|
|
18
|
-
export const selectChartDataWithIndexes
|
|
19
|
-
|
|
32
|
+
export const selectChartDataWithIndexes: (state: RechartsRootState) => ChartDataState =
|
|
33
|
+
createSelector(
|
|
34
|
+
[pickChartData, pickComputedData, pickDataStartIndex, pickDataEndIndex],
|
|
35
|
+
(chartData, computedData, dataStartIndex, dataEndIndex) => ({
|
|
36
|
+
chartData,
|
|
37
|
+
computedData,
|
|
38
|
+
dataStartIndex,
|
|
39
|
+
dataEndIndex,
|
|
40
|
+
}),
|
|
41
|
+
);
|
|
20
42
|
|
|
21
43
|
/**
|
|
22
44
|
* Always returns the full range of data, ignoring Brush indexes. Useful for the
|
|
23
45
|
* Brush panorama, Legend, and Tooltip.
|
|
24
46
|
*/
|
|
25
|
-
export const selectChartDataAndAlwaysIgnoreIndexes
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
chartData:
|
|
30
|
-
computedData: dataState.computedData,
|
|
31
|
-
dataEndIndex,
|
|
47
|
+
export const selectChartDataAndAlwaysIgnoreIndexes: (state: RechartsRootState) => ChartDataState =
|
|
48
|
+
createSelector([pickChartData, pickComputedData], (chartData, computedData) => ({
|
|
49
|
+
chartData,
|
|
50
|
+
computedData,
|
|
51
|
+
dataEndIndex: chartData != null ? chartData.length - 1 : 0,
|
|
32
52
|
dataStartIndex: 0,
|
|
33
|
-
};
|
|
34
|
-
};
|
|
53
|
+
}));
|
|
35
54
|
|
|
36
55
|
export const selectChartDataWithIndexesIfNotInPanoramaPosition4 = (
|
|
37
56
|
state: RechartsRootState,
|
|
@@ -1,8 +1,16 @@
|
|
|
1
|
-
//
|
|
2
|
-
//
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
1
|
+
// Ported from recharts 3.9.2 src/state/selectors/numberDomainEqualityCheck.ts.
|
|
2
|
+
// See arrayEqualityCheck.ts for why this is now ported (ADR-0002).
|
|
3
|
+
import type { NumberDomain } from "../../util/types";
|
|
4
|
+
|
|
5
|
+
export const numberDomainEqualityCheck = (
|
|
6
|
+
a: NumberDomain | undefined,
|
|
7
|
+
b: NumberDomain | undefined,
|
|
8
|
+
): boolean => {
|
|
9
|
+
if (a === b) {
|
|
10
|
+
return true;
|
|
11
|
+
}
|
|
12
|
+
if (a == null || b == null) {
|
|
13
|
+
return false;
|
|
14
|
+
}
|
|
15
|
+
return a[0] === b[0] && a[1] === b[1];
|
|
16
|
+
};
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
// Resolves the scaled axis / ticks a cartesian graphical item is bound to, from
|
|
2
|
+
// the item's id. Area and Bar each declared these four wrappers privately (and
|
|
3
|
+
// Bar carried a dead `axisId == null` guard — selectX/YAxisIdFromGraphicalItemId
|
|
4
|
+
// never returns null, it falls back to defaultAxisId). Concentrated here so the
|
|
5
|
+
// "which axis does this item read" resolution lives once.
|
|
6
|
+
//
|
|
7
|
+
// A leaf module (like areaSelectors/barSelectors): it imports from both
|
|
8
|
+
// axisSelectors and graphicalItemSelectors, so it introduces no import cycle.
|
|
9
|
+
import { RechartsRootState } from "../store";
|
|
10
|
+
import { GraphicalItemId } from "../graphicalItemsSlice";
|
|
11
|
+
import {
|
|
12
|
+
selectAxisWithScale,
|
|
13
|
+
selectTicksOfGraphicalItem,
|
|
14
|
+
type BaseAxisWithScale,
|
|
15
|
+
} from "./axisSelectors";
|
|
16
|
+
import {
|
|
17
|
+
selectXAxisIdFromGraphicalItemId,
|
|
18
|
+
selectYAxisIdFromGraphicalItemId,
|
|
19
|
+
} from "./graphicalItemSelectors";
|
|
20
|
+
import type { TickItem } from "../../util/types";
|
|
21
|
+
|
|
22
|
+
type CartesianAxisType = "xAxis" | "yAxis";
|
|
23
|
+
|
|
24
|
+
const axisIdForGraphicalItem = (
|
|
25
|
+
state: RechartsRootState,
|
|
26
|
+
axisType: CartesianAxisType,
|
|
27
|
+
id: GraphicalItemId,
|
|
28
|
+
) =>
|
|
29
|
+
axisType === "xAxis"
|
|
30
|
+
? selectXAxisIdFromGraphicalItemId(state, id)
|
|
31
|
+
: selectYAxisIdFromGraphicalItemId(state, id);
|
|
32
|
+
|
|
33
|
+
export const selectAxisWithScaleForGraphicalItem = (
|
|
34
|
+
state: RechartsRootState,
|
|
35
|
+
axisType: CartesianAxisType,
|
|
36
|
+
id: GraphicalItemId,
|
|
37
|
+
isPanorama: boolean,
|
|
38
|
+
): BaseAxisWithScale | undefined =>
|
|
39
|
+
selectAxisWithScale(state, axisType, axisIdForGraphicalItem(state, axisType, id), isPanorama);
|
|
40
|
+
|
|
41
|
+
export const selectTicksForGraphicalItem = (
|
|
42
|
+
state: RechartsRootState,
|
|
43
|
+
axisType: CartesianAxisType,
|
|
44
|
+
id: GraphicalItemId,
|
|
45
|
+
isPanorama: boolean,
|
|
46
|
+
): TickItem[] | undefined =>
|
|
47
|
+
selectTicksOfGraphicalItem(
|
|
48
|
+
state,
|
|
49
|
+
axisType,
|
|
50
|
+
axisIdForGraphicalItem(state, axisType, id),
|
|
51
|
+
isPanorama,
|
|
52
|
+
);
|
|
@@ -6,7 +6,9 @@
|
|
|
6
6
|
// `settings.graphicalItemId` instead — the same proxy-safe strategy as
|
|
7
7
|
// graphicalItemsSlice (SetTooltipEntrySettings is the sole caller and each
|
|
8
8
|
// graphical item registers exactly one entry, so the id is unique).
|
|
9
|
-
import { createStore } from "solid-js";
|
|
9
|
+
import { createStore, produce } from "solid-js/store";
|
|
10
|
+
import { createCollectionActions } from "./createCollectionActions";
|
|
11
|
+
import { patched } from "./patched";
|
|
10
12
|
import { TooltipTrigger } from "../chart/types";
|
|
11
13
|
import type { NameType, Payload, ValueType } from "../component/DefaultTooltipContent";
|
|
12
14
|
import { CartesianViewBoxRequired, Coordinate, DataKey, PolarCoordinate } from "../util/types";
|
|
@@ -179,109 +181,156 @@ export function createTooltipSlice(initialState: TooltipState = initialTooltipSt
|
|
|
179
181
|
settings: { ...initialState.settings },
|
|
180
182
|
});
|
|
181
183
|
|
|
184
|
+
// Deviation: recharts matches `prev` by reference (`indexOf`), but a Solid store
|
|
185
|
+
// proxies stored objects so the raw `prev` never `===` the proxied element. The
|
|
186
|
+
// collection matches by `settings.graphicalItemId` instead — the same proxy-safe
|
|
187
|
+
// identity strategy as graphicalItemsSlice. Each graphical item registers exactly
|
|
188
|
+
// one entry, so the id is unique.
|
|
189
|
+
const entries = createCollectionActions<TooltipPayloadConfiguration>(
|
|
190
|
+
(updater) =>
|
|
191
|
+
setState(
|
|
192
|
+
produce((s) => {
|
|
193
|
+
const next = updater(s.tooltipItemPayloads);
|
|
194
|
+
if (next !== s.tooltipItemPayloads) {
|
|
195
|
+
s.tooltipItemPayloads = next;
|
|
196
|
+
}
|
|
197
|
+
}),
|
|
198
|
+
),
|
|
199
|
+
(p) => p.settings.graphicalItemId,
|
|
200
|
+
);
|
|
201
|
+
|
|
182
202
|
const actions: TooltipActions = {
|
|
183
|
-
addTooltipEntrySettings
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
});
|
|
187
|
-
},
|
|
188
|
-
replaceTooltipEntrySettings({ prev, next }) {
|
|
189
|
-
setState((s) => {
|
|
190
|
-
// Deviation: recharts matches `prev` by reference (`indexOf`), but a
|
|
191
|
-
// Solid store proxies stored objects so the raw `prev` never `===` the
|
|
192
|
-
// proxied element. Match by `settings.graphicalItemId` instead — the
|
|
193
|
-
// same proxy-safe identity strategy as graphicalItemsSlice. Each
|
|
194
|
-
// graphical item registers exactly one entry, so the id is unique.
|
|
195
|
-
const index = s.tooltipItemPayloads.findIndex(
|
|
196
|
-
(p) => p.settings.graphicalItemId === prev.settings.graphicalItemId,
|
|
197
|
-
);
|
|
198
|
-
if (index > -1) {
|
|
199
|
-
const nextItems = s.tooltipItemPayloads.slice();
|
|
200
|
-
nextItems[index] = next;
|
|
201
|
-
s.tooltipItemPayloads = nextItems;
|
|
202
|
-
}
|
|
203
|
-
});
|
|
204
|
-
},
|
|
205
|
-
removeTooltipEntrySettings(payload) {
|
|
206
|
-
setState((s) => {
|
|
207
|
-
s.tooltipItemPayloads = s.tooltipItemPayloads.filter(
|
|
208
|
-
(p) => p.settings.graphicalItemId !== payload.settings.graphicalItemId,
|
|
209
|
-
);
|
|
210
|
-
});
|
|
211
|
-
},
|
|
203
|
+
addTooltipEntrySettings: entries.add,
|
|
204
|
+
replaceTooltipEntrySettings: entries.replace,
|
|
205
|
+
removeTooltipEntrySettings: entries.remove,
|
|
212
206
|
setTooltipSettingsState(payload) {
|
|
213
|
-
setState(
|
|
214
|
-
s
|
|
215
|
-
|
|
207
|
+
setState(
|
|
208
|
+
produce((s) => {
|
|
209
|
+
s.settings = payload;
|
|
210
|
+
}),
|
|
211
|
+
);
|
|
216
212
|
},
|
|
217
213
|
setActiveMouseOverItemIndex(payload) {
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
s
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
214
|
+
// Slice immutability contract (ADR-0002): replace each written interaction
|
|
215
|
+
// node so `state.tooltip.<node>` yields a new reference and the selector
|
|
216
|
+
// graph invalidates by input-reference comparison. In-place leaf writes
|
|
217
|
+
// keep the node reference stable, so reference-keyed selectors would never
|
|
218
|
+
// recompute — see the store-proxy-reference-identity memory.
|
|
219
|
+
setState(
|
|
220
|
+
produce((s) => {
|
|
221
|
+
s.syncInteraction = patched(s.syncInteraction, {
|
|
222
|
+
active: false,
|
|
223
|
+
sourceViewBox: undefined,
|
|
224
|
+
});
|
|
225
|
+
s.keyboardInteraction = patched(s.keyboardInteraction, { active: false });
|
|
226
|
+
s.itemInteraction = patched(s.itemInteraction, {
|
|
227
|
+
hover: {
|
|
228
|
+
active: true,
|
|
229
|
+
index: payload.activeIndex,
|
|
230
|
+
dataKey: payload.activeDataKey,
|
|
231
|
+
graphicalItemId: payload.activeGraphicalItemId,
|
|
232
|
+
coordinate: payload.activeCoordinate,
|
|
233
|
+
},
|
|
234
|
+
});
|
|
235
|
+
}),
|
|
236
|
+
);
|
|
228
237
|
},
|
|
229
238
|
mouseLeaveChart() {
|
|
230
|
-
setState(
|
|
231
|
-
s
|
|
232
|
-
|
|
233
|
-
|
|
239
|
+
setState(
|
|
240
|
+
produce((s) => {
|
|
241
|
+
s.itemInteraction = patched(s.itemInteraction, {
|
|
242
|
+
hover: patched(s.itemInteraction.hover, { active: false }),
|
|
243
|
+
});
|
|
244
|
+
s.axisInteraction = patched(s.axisInteraction, {
|
|
245
|
+
hover: patched(s.axisInteraction.hover, { active: false }),
|
|
246
|
+
});
|
|
247
|
+
}),
|
|
248
|
+
);
|
|
234
249
|
},
|
|
235
250
|
mouseLeaveItem() {
|
|
236
|
-
setState(
|
|
237
|
-
s
|
|
238
|
-
|
|
251
|
+
setState(
|
|
252
|
+
produce((s) => {
|
|
253
|
+
s.itemInteraction = patched(s.itemInteraction, {
|
|
254
|
+
hover: patched(s.itemInteraction.hover, { active: false }),
|
|
255
|
+
});
|
|
256
|
+
}),
|
|
257
|
+
);
|
|
239
258
|
},
|
|
240
259
|
setActiveClickItemIndex(payload) {
|
|
241
|
-
setState(
|
|
242
|
-
s
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
260
|
+
setState(
|
|
261
|
+
produce((s) => {
|
|
262
|
+
s.syncInteraction = patched(s.syncInteraction, {
|
|
263
|
+
active: false,
|
|
264
|
+
sourceViewBox: undefined,
|
|
265
|
+
});
|
|
266
|
+
s.keyboardInteraction = patched(s.keyboardInteraction, { active: false });
|
|
267
|
+
s.itemInteraction = patched(s.itemInteraction, {
|
|
268
|
+
click: {
|
|
269
|
+
active: true,
|
|
270
|
+
index: payload.activeIndex,
|
|
271
|
+
dataKey: payload.activeDataKey,
|
|
272
|
+
graphicalItemId: payload.activeGraphicalItemId,
|
|
273
|
+
coordinate: payload.activeCoordinate,
|
|
274
|
+
},
|
|
275
|
+
});
|
|
276
|
+
}),
|
|
277
|
+
);
|
|
251
278
|
},
|
|
252
279
|
setMouseOverAxisIndex(payload) {
|
|
253
|
-
setState(
|
|
254
|
-
s
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
280
|
+
setState(
|
|
281
|
+
produce((s) => {
|
|
282
|
+
s.syncInteraction = patched(s.syncInteraction, {
|
|
283
|
+
active: false,
|
|
284
|
+
sourceViewBox: undefined,
|
|
285
|
+
});
|
|
286
|
+
s.keyboardInteraction = patched(s.keyboardInteraction, { active: false });
|
|
287
|
+
s.axisInteraction = patched(s.axisInteraction, {
|
|
288
|
+
hover: patched(s.axisInteraction.hover, {
|
|
289
|
+
active: true,
|
|
290
|
+
index: payload.activeIndex,
|
|
291
|
+
dataKey: payload.activeDataKey,
|
|
292
|
+
coordinate: payload.activeCoordinate,
|
|
293
|
+
}),
|
|
294
|
+
});
|
|
295
|
+
}),
|
|
296
|
+
);
|
|
262
297
|
},
|
|
263
298
|
setMouseClickAxisIndex(payload) {
|
|
264
|
-
setState(
|
|
265
|
-
s
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
299
|
+
setState(
|
|
300
|
+
produce((s) => {
|
|
301
|
+
s.syncInteraction = patched(s.syncInteraction, {
|
|
302
|
+
active: false,
|
|
303
|
+
sourceViewBox: undefined,
|
|
304
|
+
});
|
|
305
|
+
s.keyboardInteraction = patched(s.keyboardInteraction, { active: false });
|
|
306
|
+
s.axisInteraction = patched(s.axisInteraction, {
|
|
307
|
+
click: patched(s.axisInteraction.click, {
|
|
308
|
+
active: true,
|
|
309
|
+
index: payload.activeIndex,
|
|
310
|
+
dataKey: payload.activeDataKey,
|
|
311
|
+
coordinate: payload.activeCoordinate,
|
|
312
|
+
}),
|
|
313
|
+
});
|
|
314
|
+
}),
|
|
315
|
+
);
|
|
273
316
|
},
|
|
274
317
|
setSyncInteraction(payload) {
|
|
275
|
-
setState(
|
|
276
|
-
s
|
|
277
|
-
|
|
318
|
+
setState(
|
|
319
|
+
produce((s) => {
|
|
320
|
+
s.syncInteraction = payload;
|
|
321
|
+
}),
|
|
322
|
+
);
|
|
278
323
|
},
|
|
279
324
|
setKeyboardInteraction(payload) {
|
|
280
|
-
setState(
|
|
281
|
-
s
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
325
|
+
setState(
|
|
326
|
+
produce((s) => {
|
|
327
|
+
s.keyboardInteraction = patched(s.keyboardInteraction, {
|
|
328
|
+
active: payload.active,
|
|
329
|
+
index: payload.activeIndex,
|
|
330
|
+
coordinate: payload.activeCoordinate,
|
|
331
|
+
});
|
|
332
|
+
}),
|
|
333
|
+
);
|
|
285
334
|
},
|
|
286
335
|
};
|
|
287
336
|
|
|
@@ -1,26 +1,11 @@
|
|
|
1
|
-
|
|
2
|
-
// store in an effect and removes them again when it unmounts. The removal is
|
|
3
|
-
// the one lifecycle moment where a store write is otherwise illegal: when the
|
|
4
|
-
// router (or a <Show>) disposes a subtree, `onCleanup` callbacks run inside the
|
|
5
|
-
// disposing computation's context, and Solid 2.0 throws
|
|
6
|
-
// SIGNAL_WRITE_IN_OWNED_SCOPE for any signal/store write made there.
|
|
7
|
-
//
|
|
8
|
-
// An unregistration is not derived state — it is an external transition on a
|
|
9
|
-
// store that outlives the component — so it must not execute under the dying
|
|
10
|
-
// scope. `runWithOwner(null, …)` runs the callback owner- and context-free,
|
|
11
|
-
// which is the documented way to "move the write outside" without deferring it
|
|
12
|
-
// (synchronous removal keeps selector state consistent within the same flush).
|
|
13
|
-
import { onCleanup, runWithOwner } from "solid-js";
|
|
1
|
+
import { onCleanup } from "solid-js";
|
|
14
2
|
|
|
15
|
-
/**
|
|
3
|
+
/** Register a synchronous store unregistration on owner cleanup. */
|
|
16
4
|
export function unregisterOnCleanup(fn: () => void): void {
|
|
17
|
-
onCleanup(
|
|
5
|
+
onCleanup(fn);
|
|
18
6
|
}
|
|
19
7
|
|
|
20
|
-
/**
|
|
21
|
-
* Same escape for cleanups *returned* from an effect apply phase or `onSettled`
|
|
22
|
-
* (those also run inside the disposing computation's context on unmount).
|
|
23
|
-
*/
|
|
8
|
+
/** Adapt a store unregistration for APIs that accept a cleanup callback. */
|
|
24
9
|
export function unregisterCleanup(fn: () => void): () => void {
|
|
25
|
-
return
|
|
10
|
+
return fn;
|
|
26
11
|
}
|
package/src/state/zIndexSlice.ts
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
// FULL SOLID-NATIVE REWRITE (no Redux/immer). Registry of z-index -> element refs
|
|
3
3
|
// used to portal components at each z-index. Z-index layering is wired into the
|
|
4
4
|
// store so chart items can render through ZIndexLayer.
|
|
5
|
-
import { createStore } from "solid-js";
|
|
5
|
+
import { createStore, produce } from "solid-js/store";
|
|
6
6
|
import { DefaultZIndexes } from "../zIndex/DefaultZIndexes";
|
|
7
7
|
|
|
8
8
|
type ZIndexEntry = {
|
|
@@ -70,57 +70,65 @@ export function createZIndexSlice(initialState: ZIndexState = initialZIndexState
|
|
|
70
70
|
|
|
71
71
|
const actions: ZIndexActions = {
|
|
72
72
|
registerZIndexPortal({ zIndex }) {
|
|
73
|
-
setState(
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
entry
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
73
|
+
setState(
|
|
74
|
+
produce((s) => {
|
|
75
|
+
const entry = s.zIndexMap[zIndex];
|
|
76
|
+
if (entry) {
|
|
77
|
+
entry.consumers += 1;
|
|
78
|
+
} else {
|
|
79
|
+
s.zIndexMap[zIndex] = { consumers: 1, element: undefined, panoramaElement: undefined };
|
|
80
|
+
}
|
|
81
|
+
}),
|
|
82
|
+
);
|
|
81
83
|
},
|
|
82
84
|
unregisterZIndexPortal({ zIndex }) {
|
|
83
|
-
setState(
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
entry
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
85
|
+
setState(
|
|
86
|
+
produce((s) => {
|
|
87
|
+
const entry = s.zIndexMap[zIndex];
|
|
88
|
+
if (entry) {
|
|
89
|
+
entry.consumers -= 1;
|
|
90
|
+
// Garbage-collect unused entries, except default z-indexes (always
|
|
91
|
+
// rendered, so their portal provider stays mounted and won't re-register).
|
|
92
|
+
if (entry.consumers <= 0 && !isDefaultZIndex(zIndex)) {
|
|
93
|
+
delete s.zIndexMap[zIndex];
|
|
94
|
+
}
|
|
91
95
|
}
|
|
92
|
-
}
|
|
93
|
-
|
|
96
|
+
}),
|
|
97
|
+
);
|
|
94
98
|
},
|
|
95
99
|
registerZIndexPortalElement({ zIndex, element, isPanorama }) {
|
|
96
|
-
setState(
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
if (
|
|
100
|
-
|
|
100
|
+
setState(
|
|
101
|
+
produce((s) => {
|
|
102
|
+
const entry = s.zIndexMap[zIndex];
|
|
103
|
+
if (entry) {
|
|
104
|
+
if (isPanorama) {
|
|
105
|
+
entry.panoramaElement = element;
|
|
106
|
+
} else {
|
|
107
|
+
entry.element = element;
|
|
108
|
+
}
|
|
101
109
|
} else {
|
|
102
|
-
|
|
110
|
+
s.zIndexMap[zIndex] = {
|
|
111
|
+
consumers: 0,
|
|
112
|
+
element: isPanorama ? undefined : element,
|
|
113
|
+
panoramaElement: isPanorama ? element : undefined,
|
|
114
|
+
};
|
|
103
115
|
}
|
|
104
|
-
}
|
|
105
|
-
|
|
106
|
-
consumers: 0,
|
|
107
|
-
element: isPanorama ? undefined : element,
|
|
108
|
-
panoramaElement: isPanorama ? element : undefined,
|
|
109
|
-
};
|
|
110
|
-
}
|
|
111
|
-
});
|
|
116
|
+
}),
|
|
117
|
+
);
|
|
112
118
|
},
|
|
113
119
|
unregisterZIndexPortalElement({ zIndex, isPanorama }) {
|
|
114
|
-
setState(
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
if (
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
120
|
+
setState(
|
|
121
|
+
produce((s) => {
|
|
122
|
+
const entry = s.zIndexMap[zIndex];
|
|
123
|
+
if (entry) {
|
|
124
|
+
if (isPanorama) {
|
|
125
|
+
entry.panoramaElement = undefined;
|
|
126
|
+
} else {
|
|
127
|
+
entry.element = undefined;
|
|
128
|
+
}
|
|
121
129
|
}
|
|
122
|
-
}
|
|
123
|
-
|
|
130
|
+
}),
|
|
131
|
+
);
|
|
124
132
|
},
|
|
125
133
|
};
|
|
126
134
|
|