solid-recharts 0.2.1 → 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 +13 -11
- 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 +4 -4
- package/src/cartesian/AreaRevealShape.tsx +1 -1
- package/src/cartesian/Bar.tsx +33 -21
- package/src/cartesian/BarStack.tsx +5 -5
- package/src/cartesian/Brush.tsx +19 -15
- 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 +3 -3
- package/src/cartesian/GraphicalItemClipPath.tsx +1 -1
- package/src/cartesian/Line.tsx +18 -16
- package/src/cartesian/LineDrawShape.tsx +14 -13
- package/src/cartesian/ReferenceArea.tsx +4 -4
- package/src/cartesian/ReferenceDot.tsx +4 -4
- package/src/cartesian/ReferenceLine.tsx +4 -4
- package/src/cartesian/RenderedTicksReporter.tsx +19 -17
- package/src/cartesian/Scatter.tsx +3 -3
- package/src/cartesian/XAxis.tsx +1 -1
- package/src/cartesian/YAxis.tsx +35 -33
- package/src/cartesian/ZAxis.tsx +3 -2
- 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 +5 -4
- package/src/chart/Treemap.tsx +5 -4
- package/src/component/ActivePoints.tsx +6 -6
- 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 +5 -5
- 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 +2 -2
- 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 +13 -12
- package/src/polar/PolarAngleAxis.tsx +3 -3
- package/src/polar/PolarGrid.tsx +5 -5
- package/src/polar/PolarRadiusAxis.tsx +3 -3
- package/src/polar/Radar.tsx +3 -3
- package/src/polar/RadialBar.tsx +3 -3
- package/src/shape/Cross.tsx +5 -5
- package/src/shape/Curve.tsx +6 -7
- 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 +5 -5
- 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 +1 -1
- package/src/state/SetTooltipEntrySettings.tsx +1 -1
- package/src/state/brushSlice.ts +10 -8
- package/src/state/cartesianAxisSlice.ts +46 -38
- package/src/state/chartDataSlice.ts +29 -23
- package/src/state/errorBarSlice.ts +22 -16
- package/src/state/eventSettingsSlice.ts +11 -9
- package/src/state/graphicalItemsSlice.ts +17 -13
- package/src/state/layoutSlice.ts +27 -19
- package/src/state/legendSlice.ts +24 -18
- package/src/state/optionsSlice.ts +8 -6
- package/src/state/polarAxisSlice.ts +21 -13
- package/src/state/polarOptionsSlice.ts +16 -14
- package/src/state/referenceElementsSlice.ts +25 -19
- package/src/state/registerInStore.ts +15 -13
- package/src/state/renderedTicksSlice.ts +11 -7
- package/src/state/rootPropsSlice.ts +16 -14
- package/src/state/tooltipSlice.ts +115 -95
- 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 -2
- package/src/util/BarUtils.tsx +5 -3
- 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/svgPropertiesAndEvents.ts +1 -1
- package/src/util/tooltip/translate.ts +2 -2
- package/src/util/types.ts +2 -2
- package/src/zIndex/ZIndexLayer.tsx +39 -68
- package/src/zIndex/ZIndexPortal.tsx +29 -25
- 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/createCollectionActions.spec.ts +0 -87
- package/test/state/createSelector.spec.ts +0 -158
- 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/referenceElementsSlice.spec.ts +0 -84
- package/test/state/registerInStore.spec.tsx +0 -101
- 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/selectorMemoization.spec.tsx +0 -136
- 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 -97
- 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/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/test-results/.last-run.json +0 -4
- package/tsconfig.json +0 -11
package/src/component/Legend.tsx
CHANGED
|
@@ -6,8 +6,9 @@
|
|
|
6
6
|
// supported), onBBoxUpdate, React.memo. Solid deviations: createPortal →
|
|
7
7
|
// `<Portal mount>`; useLayoutEffect dispatches → createEffect; hooks return
|
|
8
8
|
// accessors; `className`→`class`, React CSSProperties → JSX.CSSProperties.
|
|
9
|
-
import {
|
|
10
|
-
import { JSX
|
|
9
|
+
import { createMemo, Show, mergeProps, createEffect, on } from "solid-js";
|
|
10
|
+
import type { JSX } from "solid-js";
|
|
11
|
+
import { DirectPortal } from "../util/DirectPortal";
|
|
11
12
|
import {
|
|
12
13
|
ContentType,
|
|
13
14
|
DefaultLegendContent,
|
|
@@ -127,7 +128,7 @@ function getDefaultPosition(
|
|
|
127
128
|
}
|
|
128
129
|
|
|
129
130
|
export const Legend = (props: LegendProps): JSX.Element => {
|
|
130
|
-
const merged =
|
|
131
|
+
const merged = mergeProps(legendDefaultProps, props);
|
|
131
132
|
const store = useAppStore();
|
|
132
133
|
const contextPayload = useLegendPayload();
|
|
133
134
|
const legendPortalFromContext = useLegendPortal();
|
|
@@ -138,26 +139,30 @@ export const Legend = (props: LegendProps): JSX.Element => {
|
|
|
138
139
|
|
|
139
140
|
// Push the legend settings into the store (drives the offset's legend space).
|
|
140
141
|
createEffect(
|
|
141
|
-
(
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
142
|
+
on(
|
|
143
|
+
() => ({
|
|
144
|
+
align: merged.align,
|
|
145
|
+
layout: merged.layout,
|
|
146
|
+
verticalAlign: merged.verticalAlign,
|
|
147
|
+
itemSorter: merged.itemSorter,
|
|
148
|
+
}),
|
|
149
|
+
(settings) => {
|
|
150
|
+
store?.actions.legend.setLegendSettings(settings);
|
|
151
|
+
},
|
|
152
|
+
),
|
|
150
153
|
);
|
|
151
154
|
|
|
152
155
|
// Report the measured size; reset to 0 on cleanup. (When a portal is supplied
|
|
153
156
|
// from props, nothing needs the size, matching recharts.)
|
|
154
157
|
createEffect(
|
|
155
|
-
(
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
158
|
+
on(
|
|
159
|
+
() => ({ width: lastBoundingBox().width, height: lastBoundingBox().height }),
|
|
160
|
+
(size) => {
|
|
161
|
+
if (props.portal == null) {
|
|
162
|
+
store?.actions.legend.setLegendSize(size);
|
|
163
|
+
}
|
|
164
|
+
},
|
|
165
|
+
),
|
|
161
166
|
);
|
|
162
167
|
|
|
163
168
|
const portal = (): HTMLElement | null => props.portal ?? legendPortalFromContext();
|
|
@@ -167,7 +172,7 @@ export const Legend = (props: LegendProps): JSX.Element => {
|
|
|
167
172
|
);
|
|
168
173
|
|
|
169
174
|
// Props handed to a function-form `content`. Built as a plain object (spreading
|
|
170
|
-
// the Solid `
|
|
175
|
+
// the Solid `mergeProps()` proxy leaks a MERGE_SOURCE symbol and doesn't materialize
|
|
171
176
|
// keys); reads finalPayload()/chart dims so the enclosing reactive insert re-runs
|
|
172
177
|
// when the payload populates.
|
|
173
178
|
const buildContentProps = (): LegendContentProps => {
|
|
@@ -242,7 +247,7 @@ export const Legend = (props: LegendProps): JSX.Element => {
|
|
|
242
247
|
}
|
|
243
248
|
>
|
|
244
249
|
{(mount) => (
|
|
245
|
-
<
|
|
250
|
+
<DirectPortal mount={mount()}>
|
|
246
251
|
<div class="recharts-legend-wrapper" style={outerStyle()} ref={updateBoundingBox}>
|
|
247
252
|
<Show
|
|
248
253
|
when={typeof merged.content === "function" ? merged.content : null}
|
|
@@ -266,7 +271,7 @@ export const Legend = (props: LegendProps): JSX.Element => {
|
|
|
266
271
|
{(contentFn) => <>{contentFn()(buildContentProps())}</>}
|
|
267
272
|
</Show>
|
|
268
273
|
</div>
|
|
269
|
-
</
|
|
274
|
+
</DirectPortal>
|
|
270
275
|
)}
|
|
271
276
|
</Show>
|
|
272
277
|
);
|
|
@@ -3,18 +3,19 @@
|
|
|
3
3
|
// prop, and two-arg createEffect. Prop deviation: className -> class.
|
|
4
4
|
import {
|
|
5
5
|
Accessor,
|
|
6
|
+
batch,
|
|
6
7
|
createContext,
|
|
7
|
-
createEffect,
|
|
8
8
|
createMemo,
|
|
9
9
|
createSignal,
|
|
10
|
-
flush,
|
|
11
|
-
omit,
|
|
12
10
|
onCleanup,
|
|
13
|
-
|
|
11
|
+
onMount,
|
|
14
12
|
untrack,
|
|
15
13
|
useContext,
|
|
14
|
+
splitProps,
|
|
15
|
+
createEffect,
|
|
16
|
+
on,
|
|
16
17
|
} from "solid-js";
|
|
17
|
-
import type { JSX } from "
|
|
18
|
+
import type { JSX } from "solid-js";
|
|
18
19
|
import {
|
|
19
20
|
calculateChartDimensions,
|
|
20
21
|
defaultResponsiveContainerProps,
|
|
@@ -93,9 +94,9 @@ function ResponsiveContainerContextProvider(props: {
|
|
|
93
94
|
});
|
|
94
95
|
|
|
95
96
|
return (
|
|
96
|
-
<ResponsiveContainerContext value={size}>
|
|
97
|
+
<ResponsiveContainerContext.Provider value={size}>
|
|
97
98
|
{size() == null ? null : props.children}
|
|
98
|
-
</ResponsiveContainerContext>
|
|
99
|
+
</ResponsiveContainerContext.Provider>
|
|
99
100
|
);
|
|
100
101
|
}
|
|
101
102
|
|
|
@@ -181,8 +182,7 @@ function SizeDetectorContainer(props: Props): JSX.Element {
|
|
|
181
182
|
// forwarded onto the wrapper div, mirroring recharts' `{...others}` spread.
|
|
182
183
|
// We omit every prop this component consumes itself so they don't leak onto
|
|
183
184
|
// the DOM. (`omit` keeps the rest reactive — no destructuring.)
|
|
184
|
-
const others =
|
|
185
|
-
props,
|
|
185
|
+
const others = splitProps(props, [
|
|
186
186
|
"aspect",
|
|
187
187
|
"width",
|
|
188
188
|
"height",
|
|
@@ -198,7 +198,7 @@ function SizeDetectorContainer(props: Props): JSX.Element {
|
|
|
198
198
|
"onResize",
|
|
199
199
|
"ref",
|
|
200
200
|
"data-testid",
|
|
201
|
-
);
|
|
201
|
+
])[1];
|
|
202
202
|
const initialDimension = (): { width: number; height: number } =>
|
|
203
203
|
props.initialDimension ?? defaultResponsiveContainerProps.initialDimension;
|
|
204
204
|
const width = (): Percent | number | undefined => props.width;
|
|
@@ -217,13 +217,14 @@ function SizeDetectorContainer(props: Props): JSX.Element {
|
|
|
217
217
|
if (untrack(containerWidth) === roundedWidth && untrack(containerHeight) === roundedHeight) {
|
|
218
218
|
return;
|
|
219
219
|
}
|
|
220
|
-
|
|
221
|
-
|
|
220
|
+
batch(() => {
|
|
221
|
+
setContainerWidth(roundedWidth);
|
|
222
|
+
setContainerHeight(roundedHeight);
|
|
223
|
+
});
|
|
222
224
|
};
|
|
223
225
|
|
|
224
226
|
const setContainerSize = (newWidth: number, newHeight: number): void => {
|
|
225
227
|
writeContainerSize(newWidth, newHeight);
|
|
226
|
-
flush();
|
|
227
228
|
};
|
|
228
229
|
|
|
229
230
|
let containerEl: HTMLDivElement | undefined;
|
|
@@ -240,10 +241,8 @@ function SizeDetectorContainer(props: Props): JSX.Element {
|
|
|
240
241
|
// i.e. AFTER the committed DOM is laid out. The ref callback runs at element
|
|
241
242
|
// creation (possibly before insertion/layout), where getBoundingClientRect()
|
|
242
243
|
// returns 0x0 and a bogus "width(0) and height(0)" warning fires on every
|
|
243
|
-
// mount.
|
|
244
|
-
|
|
245
|
-
// flush boundary, matching React's setState-in-effect timing.
|
|
246
|
-
onSettled(() => {
|
|
244
|
+
// mount. Measure after insertion in onMount.
|
|
245
|
+
onMount(() => {
|
|
247
246
|
const el = containerEl;
|
|
248
247
|
if (el == null || typeof ResizeObserver === "undefined") {
|
|
249
248
|
return;
|
|
@@ -292,49 +291,53 @@ function SizeDetectorContainer(props: Props): JSX.Element {
|
|
|
292
291
|
]);
|
|
293
292
|
|
|
294
293
|
createEffect(
|
|
295
|
-
(
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
294
|
+
on(
|
|
295
|
+
() => props.aspect,
|
|
296
|
+
(aspect) => {
|
|
297
|
+
warn(!aspect || aspect > 0, "The aspect(%s) must be greater than zero.", aspect);
|
|
298
|
+
},
|
|
299
|
+
),
|
|
299
300
|
);
|
|
300
301
|
|
|
301
302
|
createEffect(
|
|
302
|
-
(
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
value.
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
|
|
303
|
+
on(
|
|
304
|
+
() => ({
|
|
305
|
+
containerWidth: containerWidth(),
|
|
306
|
+
containerHeight: containerHeight(),
|
|
307
|
+
calculatedWidth: calculated().calculatedWidth,
|
|
308
|
+
calculatedHeight: calculated().calculatedHeight,
|
|
309
|
+
width: width(),
|
|
310
|
+
height: height(),
|
|
311
|
+
minWidth: minWidth(),
|
|
312
|
+
minHeight: props.minHeight,
|
|
313
|
+
aspect: props.aspect,
|
|
314
|
+
}),
|
|
315
|
+
(value) => {
|
|
316
|
+
warn(
|
|
317
|
+
value.containerWidth < 0 ||
|
|
318
|
+
value.containerHeight < 0 ||
|
|
319
|
+
(value.calculatedWidth != null && value.calculatedWidth > 0) ||
|
|
320
|
+
(value.calculatedHeight != null && value.calculatedHeight > 0),
|
|
321
|
+
`The width(%s) and height(%s) of chart should be greater than 0,
|
|
320
322
|
please check the style of container, or the props width(%s) and height(%s),
|
|
321
323
|
or add a minWidth(%s) or minHeight(%s) or use aspect(%s) to control the
|
|
322
324
|
height and width.`,
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
|
|
325
|
+
value.calculatedWidth,
|
|
326
|
+
value.calculatedHeight,
|
|
327
|
+
value.width,
|
|
328
|
+
value.height,
|
|
329
|
+
value.minWidth,
|
|
330
|
+
value.minHeight,
|
|
331
|
+
value.aspect,
|
|
332
|
+
);
|
|
333
|
+
},
|
|
334
|
+
),
|
|
332
335
|
);
|
|
333
336
|
|
|
334
337
|
return (
|
|
335
338
|
<div
|
|
336
339
|
id={props.id ? `${props.id}` : undefined}
|
|
337
|
-
class={["recharts-responsive-container", props.class]}
|
|
340
|
+
class={["recharts-responsive-container", props.class].filter(Boolean).join(" ")}
|
|
338
341
|
style={wrapperStyle()}
|
|
339
342
|
ref={setRef}
|
|
340
343
|
data-testid={props["data-testid"]}
|
package/src/component/Text.tsx
CHANGED
|
@@ -8,8 +8,8 @@
|
|
|
8
8
|
// SVG passthrough props go through svgPropertiesAndEvents like the shape ports;
|
|
9
9
|
// `React.ReactNode` children → `RenderableText`.
|
|
10
10
|
import { type CamelSvgProps } from "../util/svgPropertiesNoEvents";
|
|
11
|
-
import { createMemo, For,
|
|
12
|
-
import type { JSX } from "
|
|
11
|
+
import { createMemo, For, Show, mergeProps, splitProps } from "solid-js";
|
|
12
|
+
import type { JSX } from "solid-js";
|
|
13
13
|
import type { Properties as CSSProperties } from "csstype";
|
|
14
14
|
import { isNullish, isNumber, isNumOrStr } from "../util/DataUtils";
|
|
15
15
|
import { Global } from "../util/Global";
|
|
@@ -314,7 +314,7 @@ const HANDLED_KEYS = [
|
|
|
314
314
|
] as const;
|
|
315
315
|
|
|
316
316
|
export const Text = (props: Props): JSX.Element => {
|
|
317
|
-
const merged =
|
|
317
|
+
const merged = mergeProps(textDefaultProps, props);
|
|
318
318
|
|
|
319
319
|
const wordsByLines = createMemo<ReadonlyArray<Words>>(() =>
|
|
320
320
|
getWordsByLines({
|
|
@@ -383,7 +383,7 @@ export const Text = (props: Props): JSX.Element => {
|
|
|
383
383
|
|
|
384
384
|
// Pass-through SVG props (everything except the handled keys); the computed
|
|
385
385
|
// transform is applied as its own attribute on the <text> below.
|
|
386
|
-
const rest =
|
|
386
|
+
const rest = splitProps(merged, [...HANDLED_KEYS])[1];
|
|
387
387
|
|
|
388
388
|
const textProps: Record<string, unknown> = {
|
|
389
389
|
...rest,
|
|
@@ -418,7 +418,7 @@ export const Text = (props: Props): JSX.Element => {
|
|
|
418
418
|
x={g().x}
|
|
419
419
|
y={g().y}
|
|
420
420
|
transform={g().transform}
|
|
421
|
-
class={["recharts-text", g().class]}
|
|
421
|
+
class={["recharts-text", g().class].filter(Boolean).join(" ")}
|
|
422
422
|
text-anchor={g().textAnchor}
|
|
423
423
|
fill={g().fill}
|
|
424
424
|
>
|
|
@@ -9,8 +9,9 @@
|
|
|
9
9
|
// createEffect; React `createPortal` → `<Portal mount>`; selectors are read via
|
|
10
10
|
// useAppSelector accessors; `useElementOffset`'s dependency array is a no-op in
|
|
11
11
|
// the Solid port (the ResizeObserver tracks the node directly).
|
|
12
|
-
import {
|
|
13
|
-
import { JSX
|
|
12
|
+
import { createMemo, Show, mergeProps, createEffect, on } from "solid-js";
|
|
13
|
+
import type { JSX } from "solid-js";
|
|
14
|
+
import { DirectPortal } from "../util/DirectPortal";
|
|
14
15
|
import {
|
|
15
16
|
DefaultTooltipContent,
|
|
16
17
|
Formatter,
|
|
@@ -148,7 +149,7 @@ function renderContent(content: ContentType | undefined, props: TooltipContentPr
|
|
|
148
149
|
* interaction or, before any interaction, from `defaultIndex`.
|
|
149
150
|
*/
|
|
150
151
|
export const Tooltip = (props: TooltipProps): JSX.Element => {
|
|
151
|
-
const merged =
|
|
152
|
+
const merged = mergeProps(defaultTooltipProps, props);
|
|
152
153
|
const store = useAppStore();
|
|
153
154
|
const viewBox = useViewBox();
|
|
154
155
|
const accessibilityLayer = useAccessibilityLayer();
|
|
@@ -158,7 +159,7 @@ export const Tooltip = (props: TooltipProps): JSX.Element => {
|
|
|
158
159
|
const defaultIndexAsString = (): TooltipIndex | undefined =>
|
|
159
160
|
typeof merged.defaultIndex === "number" ? String(merged.defaultIndex) : merged.defaultIndex;
|
|
160
161
|
|
|
161
|
-
//
|
|
162
|
+
// mergeProps() keeps an explicit `trigger={undefined}` as undefined (unlike React's
|
|
162
163
|
// resolveDefaultProps, which would apply the default). The interaction selectors
|
|
163
164
|
// gate on `trigger === "hover"`, so resolve the default explicitly.
|
|
164
165
|
const resolvedTrigger = (): TooltipTrigger => merged.trigger ?? defaultTooltipProps.trigger;
|
|
@@ -166,16 +167,18 @@ export const Tooltip = (props: TooltipProps): JSX.Element => {
|
|
|
166
167
|
// Push the Tooltip's settings into the store so the interaction selectors can
|
|
167
168
|
// read shared/trigger/axisId/active/defaultIndex.
|
|
168
169
|
createEffect(
|
|
169
|
-
(
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
170
|
+
on(
|
|
171
|
+
() => ({
|
|
172
|
+
shared: merged.shared,
|
|
173
|
+
trigger: resolvedTrigger(),
|
|
174
|
+
axisId: merged.axisId,
|
|
175
|
+
active: merged.active,
|
|
176
|
+
defaultIndex: defaultIndexAsString(),
|
|
177
|
+
}),
|
|
178
|
+
(settings) => {
|
|
179
|
+
store?.actions.tooltip.setTooltipSettingsState(settings);
|
|
180
|
+
},
|
|
181
|
+
),
|
|
179
182
|
);
|
|
180
183
|
|
|
181
184
|
const tooltipEventType = useAppSelector((state) => selectTooltipEventType(state, merged.shared));
|
|
@@ -244,7 +247,7 @@ export const Tooltip = (props: TooltipProps): JSX.Element => {
|
|
|
244
247
|
</Show>
|
|
245
248
|
<Show when={viewBox() && tooltipEventType() && portal()}>
|
|
246
249
|
{(mount) => {
|
|
247
|
-
// Built as a plain object (spreading the Solid
|
|
250
|
+
// Built as a plain object (spreading the Solid mergeProps() proxy leaks a
|
|
248
251
|
// MERGE_SOURCE symbol into the bag handed to a function-form `content`).
|
|
249
252
|
const contentProps = (): TooltipContentProps => ({
|
|
250
253
|
accessibilityLayer: accessibilityLayer(),
|
|
@@ -262,7 +265,7 @@ export const Tooltip = (props: TooltipProps): JSX.Element => {
|
|
|
262
265
|
formatter: merged.formatter,
|
|
263
266
|
includeHidden: merged.includeHidden,
|
|
264
267
|
isAnimationActive: merged.isAnimationActive,
|
|
265
|
-
//
|
|
268
|
+
// mergeProps() leaves explicit `undefined`; React defaultProps would still apply defaults.
|
|
266
269
|
itemSorter: props.itemSorter ?? defaultTooltipProps.itemSorter,
|
|
267
270
|
itemStyle: merged.itemStyle,
|
|
268
271
|
label: finalLabel(),
|
|
@@ -279,7 +282,7 @@ export const Tooltip = (props: TooltipProps): JSX.Element => {
|
|
|
279
282
|
wrapperStyle: merged.wrapperStyle,
|
|
280
283
|
});
|
|
281
284
|
return (
|
|
282
|
-
<
|
|
285
|
+
<DirectPortal mount={mount()}>
|
|
283
286
|
<TooltipBoundingBox
|
|
284
287
|
allowEscapeViewBox={merged.allowEscapeViewBox}
|
|
285
288
|
animationDuration={merged.animationDuration}
|
|
@@ -300,7 +303,7 @@ export const Tooltip = (props: TooltipProps): JSX.Element => {
|
|
|
300
303
|
>
|
|
301
304
|
{renderContent(merged.content, contentProps())}
|
|
302
305
|
</TooltipBoundingBox>
|
|
303
|
-
</
|
|
306
|
+
</DirectPortal>
|
|
304
307
|
);
|
|
305
308
|
}}
|
|
306
309
|
</Show>
|
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
// Ported from recharts 3.8.1 src/component/TooltipBoundingBox.tsx (commit 7a23854).
|
|
2
2
|
//
|
|
3
3
|
// Deviations: React.useState → createSignal; the keydown (Escape-to-dismiss)
|
|
4
|
-
// listener moves from useEffect to
|
|
4
|
+
// listener moves from useEffect to onMount (single listener; the handler reads
|
|
5
5
|
// the live props.coordinate at event time); the "reset dismissed when the
|
|
6
6
|
// coordinate moves" inline setState becomes a createEffect; `React.memo` dropped
|
|
7
7
|
// (Solid is fine-grained); `className`→`class`, `tabIndex`→`tabindex`, React
|
|
8
8
|
// CSSProperties → JSX.CSSProperties (kebab keys); the `xmlns` attribute is dropped
|
|
9
9
|
// (the tooltip renders into an HTML portal div, not inside the SVG).
|
|
10
|
-
import {
|
|
11
|
-
import type { JSX } from "
|
|
10
|
+
import { createSignal, onCleanup, onMount, createEffect, on } from "solid-js";
|
|
11
|
+
import type { JSX } from "solid-js";
|
|
12
12
|
import {
|
|
13
13
|
AllowInDimension,
|
|
14
14
|
AnimationDuration,
|
|
@@ -77,31 +77,33 @@ export const TooltipBoundingBox = (props: TooltipBoundingBoxProps): JSX.Element
|
|
|
77
77
|
y: props.coordinate?.y ?? 0,
|
|
78
78
|
});
|
|
79
79
|
|
|
80
|
-
|
|
80
|
+
onMount(() => {
|
|
81
81
|
const handleKeyDown = (event: KeyboardEvent) => {
|
|
82
82
|
if (event.key === "Escape") {
|
|
83
83
|
setState({ dismissed: true, dismissedAtCoordinate: coordinate() });
|
|
84
84
|
}
|
|
85
85
|
};
|
|
86
86
|
document.addEventListener("keydown", handleKeyDown);
|
|
87
|
-
|
|
87
|
+
onCleanup(() => {
|
|
88
88
|
document.removeEventListener("keydown", handleKeyDown);
|
|
89
|
-
};
|
|
89
|
+
});
|
|
90
90
|
});
|
|
91
91
|
|
|
92
92
|
// Re-show after dismissal once the coordinate moves to a new spot. Both the
|
|
93
93
|
// coordinate and the dismiss state are read in the compute (a tracking scope);
|
|
94
94
|
// the apply only writes, so no untracked read fires.
|
|
95
95
|
createEffect(
|
|
96
|
-
(
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
96
|
+
on(
|
|
97
|
+
() => ({ coord: coordinate(), st: state() }),
|
|
98
|
+
({ coord, st }) => {
|
|
99
|
+
if (
|
|
100
|
+
st.dismissed &&
|
|
101
|
+
(coord.x !== st.dismissedAtCoordinate.x || coord.y !== st.dismissedAtCoordinate.y)
|
|
102
|
+
) {
|
|
103
|
+
setState({ ...st, dismissed: false });
|
|
104
|
+
}
|
|
105
|
+
},
|
|
106
|
+
),
|
|
105
107
|
);
|
|
106
108
|
|
|
107
109
|
const translate = (): { cssProperties: JSX.CSSProperties; cssClasses: string } =>
|
|
@@ -145,7 +147,7 @@ export const TooltipBoundingBox = (props: TooltipBoundingBoxProps): JSX.Element
|
|
|
145
147
|
};
|
|
146
148
|
|
|
147
149
|
return (
|
|
148
|
-
<div
|
|
150
|
+
<div tabIndex={-1} class={translate().cssClasses} style={outerStyle()} ref={props.innerRef}>
|
|
149
151
|
{props.children}
|
|
150
152
|
</div>
|
|
151
153
|
);
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
// Deviations: `CSSProperties` from csstype (camelCase, matching React's), and the
|
|
3
3
|
// `satisfies Partial<Props>` on the defaults is dropped (the ResponsiveContainer
|
|
4
4
|
// component is deferred) — kept as `as const`.
|
|
5
|
-
import type { JSX } from "
|
|
5
|
+
import type { JSX } from "solid-js";
|
|
6
6
|
import { isPercent } from "../util/DataUtils";
|
|
7
7
|
import type { Percent } from "../util/types";
|
|
8
8
|
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
// once); `return null` when no plot area → keyed `<Show>`; context-value-is-
|
|
5
5
|
// provider; default `null` (not undefined, which would make `useContext` throw).
|
|
6
6
|
import { createContext, useContext, Show } from "solid-js";
|
|
7
|
-
import type { JSX } from "
|
|
7
|
+
import type { JSX } from "solid-js";
|
|
8
8
|
import { uniqueId } from "../util/DataUtils";
|
|
9
9
|
import { usePlotArea } from "../hooks";
|
|
10
10
|
|
|
@@ -24,14 +24,14 @@ export const ClipPathProvider = (props: { children: JSX.Element }): JSX.Element
|
|
|
24
24
|
return (
|
|
25
25
|
<Show when={plotArea()}>
|
|
26
26
|
{(area) => (
|
|
27
|
-
<ClipPathIdContext value={clipPathId}>
|
|
27
|
+
<ClipPathIdContext.Provider value={clipPathId}>
|
|
28
28
|
<defs>
|
|
29
29
|
<clipPath id={clipPathId}>
|
|
30
30
|
<rect x={area().x} y={area().y} height={area().height} width={area().width} />
|
|
31
31
|
</clipPath>
|
|
32
32
|
</defs>
|
|
33
33
|
{props.children}
|
|
34
|
-
</ClipPathIdContext>
|
|
34
|
+
</ClipPathIdContext.Provider>
|
|
35
35
|
)}
|
|
36
36
|
</Show>
|
|
37
37
|
);
|
package/src/container/Layer.tsx
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
|
+
import { splitProps } from "solid-js";
|
|
1
2
|
// Ported from recharts 3.8.1 src/container/Layer.tsx (commit 7a23854).
|
|
2
3
|
// Solid deviations: `className` → `class` (Omit the wide SVG `class`); `clsx` →
|
|
3
|
-
// `class={[...]}`; `forwardRef` → `ref` prop; no destructuring (omit + props).
|
|
4
|
+
// `class={[...].filter(Boolean).join(" ")}`; `forwardRef` → `ref` prop; no destructuring (omit + props).
|
|
4
5
|
import { type CamelSvgProps } from "../util/svgPropertiesNoEvents";
|
|
5
|
-
import {
|
|
6
|
-
import type { JSX } from "@solidjs/web";
|
|
6
|
+
import type { JSX } from "solid-js";
|
|
7
7
|
import { svgPropertiesAndEvents } from "../util/svgPropertiesAndEvents";
|
|
8
8
|
|
|
9
9
|
interface LayerOwnProps {
|
|
@@ -28,8 +28,8 @@ export type LayerProps = Omit<
|
|
|
28
28
|
export const Layer = (props: LayerProps): JSX.Element => {
|
|
29
29
|
return (
|
|
30
30
|
<g
|
|
31
|
-
class={["recharts-layer", props.class]}
|
|
32
|
-
{...svgPropertiesAndEvents({ ...
|
|
31
|
+
class={["recharts-layer", props.class].filter(Boolean).join(" ")}
|
|
32
|
+
{...svgPropertiesAndEvents({ ...splitProps(props, ["class", "children", "ref"])[1] })}
|
|
33
33
|
ref={props.ref}
|
|
34
34
|
>
|
|
35
35
|
{props.children}
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
// hooks return Accessors → call them; `return null` → keyed `<Show>` (which also
|
|
5
5
|
// narrows width/height to numbers without a non-null `!`).
|
|
6
6
|
import { Show } from "solid-js";
|
|
7
|
-
import type { JSX } from "
|
|
7
|
+
import type { JSX } from "solid-js";
|
|
8
8
|
import { useChartHeight, useChartWidth } from "../context/chartLayoutContext";
|
|
9
9
|
import { useAccessibilityLayer } from "../context/accessibilityContext";
|
|
10
10
|
import { useIsPanorama } from "../context/PanoramaContext";
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
+
import { splitProps } from "solid-js";
|
|
1
2
|
import { type CamelSvgProps } from "../util/svgPropertiesNoEvents";
|
|
2
3
|
import { svgPropertiesAndEvents } from "../util/svgPropertiesAndEvents";
|
|
3
|
-
import {
|
|
4
|
-
import type { JSX } from "@solidjs/web";
|
|
4
|
+
import type { JSX } from "solid-js";
|
|
5
5
|
|
|
6
6
|
export interface CartesianViewBox {
|
|
7
7
|
x?: number;
|
|
@@ -37,8 +37,7 @@ export type SurfaceProps = Omit<
|
|
|
37
37
|
*/
|
|
38
38
|
export const Surface = (props: SurfaceProps) => {
|
|
39
39
|
const svgView = () => props.viewBox ?? { width: props.width, height: props.height, x: 0, y: 0 };
|
|
40
|
-
const rest =
|
|
41
|
-
props,
|
|
40
|
+
const rest = splitProps(props, [
|
|
42
41
|
"children",
|
|
43
42
|
"width",
|
|
44
43
|
"height",
|
|
@@ -48,14 +47,14 @@ export const Surface = (props: SurfaceProps) => {
|
|
|
48
47
|
"title",
|
|
49
48
|
"desc",
|
|
50
49
|
"ref",
|
|
51
|
-
);
|
|
50
|
+
])[1];
|
|
52
51
|
|
|
53
52
|
// Parity with recharts Surface: the passthrough props go through the SVG
|
|
54
53
|
// filter (camelCase props → DOM attribute names), not a verbatim spread.
|
|
55
54
|
return (
|
|
56
55
|
<svg
|
|
57
56
|
{...svgPropertiesAndEvents({ ...rest })}
|
|
58
|
-
class={["recharts-surface", props.class]}
|
|
57
|
+
class={["recharts-surface", props.class].filter(Boolean).join(" ")}
|
|
59
58
|
width={props.width}
|
|
60
59
|
height={props.height}
|
|
61
60
|
style={props.style}
|
|
@@ -9,7 +9,7 @@
|
|
|
9
9
|
// cleanup remove → createEffect + onCleanup. useGraphicalItemId provides the id.
|
|
10
10
|
import { createContext, useContext } from "solid-js";
|
|
11
11
|
import type { Accessor } from "solid-js";
|
|
12
|
-
import type { JSX } from "
|
|
12
|
+
import type { JSX } from "solid-js";
|
|
13
13
|
import { AxisId } from "../state/cartesianAxisSlice";
|
|
14
14
|
import type { ErrorBarDataPointFormatter } from "../cartesian/ErrorBar";
|
|
15
15
|
import type { ErrorBarsSettings } from "../state/errorBarSlice";
|
|
@@ -45,7 +45,7 @@ export function SetErrorBarContext(
|
|
|
45
45
|
dataPointFormatter: props.dataPointFormatter,
|
|
46
46
|
errorBarOffset: props.errorBarOffset,
|
|
47
47
|
});
|
|
48
|
-
return <ErrorBarContext value={value}>{props.children}</ErrorBarContext>;
|
|
48
|
+
return <ErrorBarContext.Provider value={value}>{props.children}</ErrorBarContext.Provider>;
|
|
49
49
|
}
|
|
50
50
|
|
|
51
51
|
export const useErrorBarContext = (): Accessor<ErrorBarContextValue> => useContext(ErrorBarContext);
|
|
@@ -2,12 +2,12 @@
|
|
|
2
2
|
// Context-value-is-provider in Solid 2.0; default `null` (a real value) so
|
|
3
3
|
// `useContext` returns it without throwing outside a provider.
|
|
4
4
|
import { createContext, useContext } from "solid-js";
|
|
5
|
-
import type { JSX } from "
|
|
5
|
+
import type { JSX } from "solid-js";
|
|
6
6
|
|
|
7
7
|
const PanoramaContext = createContext<boolean | null>(null);
|
|
8
8
|
|
|
9
9
|
export const useIsPanorama = (): boolean => useContext(PanoramaContext) != null;
|
|
10
10
|
|
|
11
11
|
export const PanoramaContextProvider = (props: { children: JSX.Element }): JSX.Element => (
|
|
12
|
-
<PanoramaContext value={true}>{props.children}</PanoramaContext>
|
|
12
|
+
<PanoramaContext.Provider value={true}>{props.children}</PanoramaContext.Provider>
|
|
13
13
|
);
|
|
@@ -8,7 +8,7 @@
|
|
|
8
8
|
// Not yet adopted by <Line> (which currently generates its own id inline); this
|
|
9
9
|
// is the shared primitive for graphical items (Line/Bar/Area/Scatter) to use.
|
|
10
10
|
import { createContext, useContext } from "solid-js";
|
|
11
|
-
import type { JSX } from "
|
|
11
|
+
import type { JSX } from "solid-js";
|
|
12
12
|
import { useUniqueId } from "../util/useUniqueId";
|
|
13
13
|
import { GraphicalItemId } from "../state/graphicalItemsSlice";
|
|
14
14
|
|
|
@@ -32,7 +32,9 @@ const GraphicalItemIdContext = createContext<GraphicalItemId | null>(null);
|
|
|
32
32
|
export const RegisterGraphicalItemId = (props: IdSetter): JSX.Element => {
|
|
33
33
|
const resolvedId = useUniqueId(`recharts-${props.type}`, props.id);
|
|
34
34
|
return (
|
|
35
|
-
<GraphicalItemIdContext value={resolvedId}>
|
|
35
|
+
<GraphicalItemIdContext.Provider value={resolvedId}>
|
|
36
|
+
{props.children(resolvedId)}
|
|
37
|
+
</GraphicalItemIdContext.Provider>
|
|
36
38
|
);
|
|
37
39
|
};
|
|
38
40
|
|