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
package/src/component/Label.tsx
CHANGED
|
@@ -16,9 +16,9 @@
|
|
|
16
16
|
// - context value carries an `Accessor<TrapezoidViewBox>` (Solid context is fixed
|
|
17
17
|
// at provide-time; the accessor keeps the box reactive).
|
|
18
18
|
import { type CamelSvgProps } from "../util/svgPropertiesNoEvents";
|
|
19
|
-
import { createContext, createMemo,
|
|
19
|
+
import { createContext, createMemo, Show, useContext, mergeProps, splitProps } from "solid-js";
|
|
20
20
|
import type { Accessor } from "solid-js";
|
|
21
|
-
import type { JSX } from "
|
|
21
|
+
import type { JSX } from "solid-js";
|
|
22
22
|
import { type RenderableText, Text } from "./Text";
|
|
23
23
|
import { useUniqueId } from "../util/useUniqueId";
|
|
24
24
|
import { isNullish, isNumber, isNumOrStr } from "../util/DataUtils";
|
|
@@ -109,7 +109,11 @@ export function CartesianLabelContextProvider(
|
|
|
109
109
|
width: props.width,
|
|
110
110
|
height: props.height,
|
|
111
111
|
}));
|
|
112
|
-
return
|
|
112
|
+
return (
|
|
113
|
+
<CartesianLabelContext.Provider value={viewBox}>
|
|
114
|
+
{props.children}
|
|
115
|
+
</CartesianLabelContext.Provider>
|
|
116
|
+
);
|
|
113
117
|
}
|
|
114
118
|
|
|
115
119
|
export function useCartesianLabelContext(): Accessor<TrapezoidViewBox | undefined> {
|
|
@@ -141,7 +145,7 @@ export function PolarLabelContextProvider(
|
|
|
141
145
|
endAngle: props.endAngle,
|
|
142
146
|
clockWise: props.clockWise,
|
|
143
147
|
}));
|
|
144
|
-
return <PolarLabelContext value={viewBox}>{props.children}</PolarLabelContext>;
|
|
148
|
+
return <PolarLabelContext.Provider value={viewBox}>{props.children}</PolarLabelContext.Provider>;
|
|
145
149
|
}
|
|
146
150
|
|
|
147
151
|
export function usePolarLabelContext(): Accessor<PolarViewBoxRequired | undefined> {
|
|
@@ -223,7 +227,7 @@ const getDeltaAngle = (startAngle: number, endAngle: number): number => {
|
|
|
223
227
|
* @consumes CartesianLabelContext
|
|
224
228
|
*/
|
|
225
229
|
export function Label(outerProps: Props): JSX.Element {
|
|
226
|
-
const props =
|
|
230
|
+
const props = mergeProps(defaultLabelProps, outerProps);
|
|
227
231
|
const cartesianViewBox = useCartesianLabelContext();
|
|
228
232
|
const polarLabelContext = usePolarLabelContext();
|
|
229
233
|
const generatedRadialPathId = useUniqueId("recharts-radial-line");
|
|
@@ -252,8 +256,7 @@ export function Label(outerProps: Props): JSX.Element {
|
|
|
252
256
|
|
|
253
257
|
const textSvgProps = createMemo(() =>
|
|
254
258
|
svgPropertiesAndEvents(
|
|
255
|
-
|
|
256
|
-
props,
|
|
259
|
+
splitProps(props, [
|
|
257
260
|
"content",
|
|
258
261
|
"viewBox",
|
|
259
262
|
"parentViewBox",
|
|
@@ -267,7 +270,7 @@ export function Label(outerProps: Props): JSX.Element {
|
|
|
267
270
|
"index",
|
|
268
271
|
"id",
|
|
269
272
|
"class",
|
|
270
|
-
),
|
|
273
|
+
])[1],
|
|
271
274
|
),
|
|
272
275
|
);
|
|
273
276
|
|
|
@@ -389,7 +392,7 @@ export function Label(outerProps: Props): JSX.Element {
|
|
|
389
392
|
if (vb == null || typeof content !== "function") {
|
|
390
393
|
return undefined;
|
|
391
394
|
}
|
|
392
|
-
return { content, args:
|
|
395
|
+
return { content, args: splitProps({ ...props, viewBox: vb }, ["content"])[1] };
|
|
393
396
|
});
|
|
394
397
|
|
|
395
398
|
// Render the default/polar/radial text labels inline under <Show> (their render
|
|
@@ -441,7 +444,7 @@ export function Label(outerProps: Props): JSX.Element {
|
|
|
441
444
|
<text
|
|
442
445
|
{...textSvgProps()}
|
|
443
446
|
dominant-baseline="central"
|
|
444
|
-
class={["recharts-radial-bar-label", props.class]}
|
|
447
|
+
class={["recharts-radial-bar-label", props.class].filter(Boolean).join(" ")}
|
|
445
448
|
>
|
|
446
449
|
<defs>
|
|
447
450
|
<path id={radialPathId()} d={d().path} />
|
|
@@ -14,9 +14,9 @@
|
|
|
14
14
|
// - element `content` (React.cloneElement) DROPPED; function `content` kept.
|
|
15
15
|
// - ZIndexLayer / `fill`-passthrough deferred (Label forwards no per-label fill).
|
|
16
16
|
import { type CamelSvgProps } from "../util/svgPropertiesNoEvents";
|
|
17
|
-
import { createContext, createMemo, For,
|
|
17
|
+
import { createContext, createMemo, For, Show, useContext, splitProps } from "solid-js";
|
|
18
18
|
import type { Accessor } from "solid-js";
|
|
19
|
-
import type { JSX } from "
|
|
19
|
+
import type { JSX } from "solid-js";
|
|
20
20
|
import {
|
|
21
21
|
type LabelContentType,
|
|
22
22
|
type LabelFormatter,
|
|
@@ -135,7 +135,9 @@ export function CartesianLabelListContextProvider(props: {
|
|
|
135
135
|
children: JSX.Element;
|
|
136
136
|
}): JSX.Element {
|
|
137
137
|
return (
|
|
138
|
-
<CartesianLabelListContext value={props.value}>
|
|
138
|
+
<CartesianLabelListContext.Provider value={props.value}>
|
|
139
|
+
{props.children}
|
|
140
|
+
</CartesianLabelListContext.Provider>
|
|
139
141
|
);
|
|
140
142
|
}
|
|
141
143
|
|
|
@@ -147,7 +149,11 @@ export function PolarLabelListContextProvider(props: {
|
|
|
147
149
|
value: Accessor<ReadonlyArray<PolarLabelListEntry> | undefined>;
|
|
148
150
|
children: JSX.Element;
|
|
149
151
|
}): JSX.Element {
|
|
150
|
-
return
|
|
152
|
+
return (
|
|
153
|
+
<PolarLabelListContext.Provider value={props.value}>
|
|
154
|
+
{props.children}
|
|
155
|
+
</PolarLabelListContext.Provider>
|
|
156
|
+
);
|
|
151
157
|
}
|
|
152
158
|
|
|
153
159
|
/**
|
|
@@ -165,8 +171,7 @@ export function LabelList(props: Props): JSX.Element {
|
|
|
165
171
|
const list = cartesianData?.() ?? polarData?.();
|
|
166
172
|
return list != null && list.length > 0 ? list : undefined;
|
|
167
173
|
});
|
|
168
|
-
const others =
|
|
169
|
-
props,
|
|
174
|
+
const others = splitProps(props, [
|
|
170
175
|
"valueAccessor",
|
|
171
176
|
"clockWise",
|
|
172
177
|
"dataKey",
|
|
@@ -177,7 +182,7 @@ export function LabelList(props: Props): JSX.Element {
|
|
|
177
182
|
"offset",
|
|
178
183
|
"angle",
|
|
179
184
|
"formatter",
|
|
180
|
-
);
|
|
185
|
+
])[1];
|
|
181
186
|
|
|
182
187
|
const valueOf = (
|
|
183
188
|
entry: CartesianLabelListEntry | PolarLabelListEntry,
|
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}
|