solid-recharts 1.0.0 → 2.0.0-beta.1
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 +4 -6
- package/src/animation/AnimatedItems.tsx +4 -2
- package/src/animation/CSSTransitionAnimate.tsx +39 -41
- package/src/animation/JavascriptAnimate.tsx +41 -45
- package/src/cartesian/Area.tsx +4 -4
- package/src/cartesian/AreaRevealShape.tsx +1 -1
- package/src/cartesian/Bar.tsx +21 -33
- package/src/cartesian/BarStack.tsx +5 -5
- package/src/cartesian/Brush.tsx +15 -19
- package/src/cartesian/CartesianAxis.tsx +4 -4
- package/src/cartesian/CartesianGrid.tsx +5 -5
- package/src/cartesian/ErrorBar.tsx +7 -9
- package/src/cartesian/Funnel.tsx +3 -3
- package/src/cartesian/GraphicalItemClipPath.tsx +1 -1
- package/src/cartesian/Line.tsx +16 -18
- package/src/cartesian/LineDrawShape.tsx +13 -14
- 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 +17 -19
- package/src/cartesian/Scatter.tsx +3 -3
- package/src/cartesian/XAxis.tsx +1 -1
- package/src/cartesian/YAxis.tsx +33 -35
- package/src/cartesian/ZAxis.tsx +2 -3
- package/src/chart/AreaChart.tsx +1 -1
- package/src/chart/BarChart.tsx +1 -1
- package/src/chart/CartesianChart.tsx +3 -4
- 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 +3 -4
- package/src/chart/PolarChart.tsx +3 -4
- package/src/chart/RadarChart.tsx +3 -4
- package/src/chart/RadialBarChart.tsx +3 -7
- package/src/chart/RechartsWrapper.tsx +24 -14
- package/src/chart/Sankey.tsx +6 -9
- package/src/chart/ScatterChart.tsx +1 -1
- package/src/chart/SunburstChart.tsx +4 -5
- package/src/chart/Treemap.tsx +4 -5
- package/src/component/ActivePoints.tsx +6 -6
- package/src/component/Cell.tsx +5 -23
- package/src/component/Cursor.tsx +3 -3
- package/src/component/DefaultLegendContent.tsx +6 -8
- package/src/component/DefaultTooltipContent.tsx +10 -14
- package/src/component/Dots.tsx +5 -5
- package/src/component/Label.tsx +10 -13
- package/src/component/LabelList.tsx +7 -12
- package/src/component/Legend.tsx +21 -26
- package/src/component/ResponsiveContainer.tsx +49 -52
- package/src/component/Text.tsx +5 -5
- package/src/component/Tooltip.tsx +18 -21
- package/src/component/TooltipBoundingBox.tsx +16 -18
- 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 +6 -5
- package/src/context/ErrorBarContext.tsx +2 -2
- package/src/context/PanoramaContext.tsx +2 -2
- package/src/context/RegisterGraphicalItemId.tsx +2 -4
- package/src/context/chartDataContext.tsx +23 -26
- package/src/context/chartLayoutContext.tsx +12 -16
- package/src/polar/Pie.tsx +12 -13
- 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 +7 -6
- package/src/shape/Dot.tsx +4 -4
- package/src/shape/Polygon.tsx +5 -5
- package/src/shape/Rectangle.tsx +20 -22
- package/src/shape/Sector.tsx +5 -5
- package/src/shape/Symbols.tsx +5 -5
- package/src/shape/Trapezoid.tsx +27 -29
- package/src/state/RechartsStoreProvider.tsx +3 -5
- package/src/state/ReportChartProps.tsx +6 -8
- package/src/state/ReportEventSettings.tsx +6 -8
- package/src/state/ReportMainChartProps.tsx +9 -11
- package/src/state/ReportPolarOptions.tsx +13 -15
- package/src/state/SetLegendPayload.ts +1 -1
- package/src/state/SetTooltipEntrySettings.tsx +1 -1
- package/src/state/brushSlice.ts +8 -10
- package/src/state/cartesianAxisSlice.ts +38 -46
- package/src/state/chartDataSlice.ts +23 -29
- package/src/state/errorBarSlice.ts +16 -22
- package/src/state/eventSettingsSlice.ts +9 -11
- package/src/state/graphicalItemsSlice.ts +13 -17
- package/src/state/layoutSlice.ts +19 -27
- package/src/state/legendSlice.ts +18 -24
- package/src/state/optionsSlice.ts +6 -8
- package/src/state/polarAxisSlice.ts +13 -21
- package/src/state/polarOptionsSlice.ts +14 -16
- package/src/state/referenceElementsSlice.ts +19 -25
- package/src/state/registerInStore.ts +13 -15
- package/src/state/renderedTicksSlice.ts +7 -11
- package/src/state/rootPropsSlice.ts +14 -16
- package/src/state/tooltipSlice.ts +95 -115
- package/src/state/unregisterOnCleanup.ts +20 -5
- package/src/state/zIndexSlice.ts +42 -50
- package/src/synchronisation/useChartSynchronisation.tsx +217 -213
- package/src/util/ActiveShapeUtils.tsx +2 -2
- package/src/util/BarUtils.tsx +3 -5
- package/src/util/FunnelUtils.tsx +1 -1
- package/src/util/RadialBarUtils.tsx +3 -4
- 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 +68 -39
- package/src/zIndex/ZIndexPortal.tsx +25 -29
- package/test/_data.ts +408 -0
- package/test/animation/AnimationController.typed.spec.ts +53 -0
- package/test/animation/AnimationControllerImpl.spec.ts +271 -0
- package/test/animation/CSSTransitionAnimate.timing.spec.tsx +473 -0
- package/test/animation/JavascriptAnimate.spec.tsx +62 -0
- package/test/animation/RechartsAnimation.spec.ts +636 -0
- package/test/animation/easing.spec.ts +218 -0
- package/test/animation/legacyAnimationLengthChange.spec.tsx +803 -0
- package/test/animation/matchBy.spec.ts +467 -0
- package/test/animation/mockAnimationController.ts +40 -0
- package/test/animation/mockControllerAnimationManager.ts +143 -0
- package/test/animation/mockTimeoutController.ts +114 -0
- package/test/animation/timeoutController.spec.ts +138 -0
- package/test/animation/useAnimationStartSnapshot.spec.ts +147 -0
- package/test/animation/util.spec.ts +28 -0
- package/test/cartesian/Area.animation.spec.tsx +363 -0
- package/test/cartesian/Area.range.spec.tsx +54 -0
- package/test/cartesian/Area.spec.tsx +1202 -0
- package/test/cartesian/Area.stacked.render.spec.tsx +69 -0
- package/test/cartesian/Area.typed.spec.tsx +209 -0
- package/test/cartesian/Axis.integration.spec.tsx +158 -0
- package/test/cartesian/Bar/Bar.csstransition.spec.tsx +299 -0
- package/test/cartesian/Bar/Bar.spec.tsx +2314 -0
- package/test/cartesian/Bar/Bar.typed.spec.tsx +192 -0
- package/test/cartesian/Bar.animation.spec.tsx +426 -0
- package/test/cartesian/Bar.stackDomain.spec.tsx +66 -0
- package/test/cartesian/Bar.stacked.render.spec.tsx +53 -0
- package/test/cartesian/Bar.truncateByDomain.spec.tsx +237 -0
- package/test/cartesian/Bar.zeroDimensionFiltering.spec.tsx +336 -0
- package/test/cartesian/BarStack.spec.tsx +91 -0
- package/test/cartesian/Brush.keyboard.spec.tsx +88 -0
- package/test/cartesian/Brush.panorama.spec.tsx +41 -0
- package/test/cartesian/Brush.props.spec.tsx +63 -0
- package/test/cartesian/Brush.render.spec.tsx +117 -0
- package/test/cartesian/Brush.spec.tsx +522 -0
- package/test/cartesian/Brush.stacked.spec.tsx +221 -0
- package/test/cartesian/CartesianAxis.render.spec.tsx +50 -0
- package/test/cartesian/CartesianAxis.spec.tsx +396 -0
- package/test/cartesian/CartesianGrid.render.spec.tsx +39 -0
- package/test/cartesian/CartesianGrid.spec.tsx +2103 -0
- package/test/cartesian/ErrorBar.render.spec.tsx +69 -0
- package/test/cartesian/ErrorBar.spec.tsx +2414 -0
- package/test/cartesian/Funnel.animation.spec.tsx +241 -0
- package/test/cartesian/Funnel.spec.tsx +226 -0
- package/test/cartesian/Funnel.typed.spec.tsx +221 -0
- package/test/cartesian/GraphicalItemClipPath.scale-behavior.spec.tsx +627 -0
- package/test/cartesian/GraphicalItemClipPath.spec.tsx +427 -0
- package/test/cartesian/Line.animation.spec.tsx +643 -0
- package/test/cartesian/Line.sparseAnimationPath.spec.tsx +98 -0
- package/test/cartesian/Line.spec.tsx +471 -0
- package/test/cartesian/Line.typed.spec.tsx +152 -0
- package/test/cartesian/ReferenceArea.render.spec.tsx +63 -0
- package/test/cartesian/ReferenceArea.spec.tsx +663 -0
- package/test/cartesian/ReferenceArea.typed.spec.tsx +74 -0
- package/test/cartesian/ReferenceDot.render.spec.tsx +55 -0
- package/test/cartesian/ReferenceDot.spec.tsx +462 -0
- package/test/cartesian/ReferenceDot.typed.spec.tsx +76 -0
- package/test/cartesian/ReferenceLine/ReferenceLine.panorama.spec.tsx +184 -0
- package/test/cartesian/ReferenceLine/ReferenceLine.spec.tsx +744 -0
- package/test/cartesian/ReferenceLine/ReferenceLine.typed.spec.tsx +74 -0
- package/test/cartesian/ReferenceLine/getEndPoints.spec.ts +399 -0
- package/test/cartesian/ReferenceLine.render.spec.tsx +134 -0
- package/test/cartesian/Scatter.animation.spec.tsx +381 -0
- package/test/cartesian/Scatter.render.spec.tsx +61 -0
- package/test/cartesian/Scatter.spec.tsx +406 -0
- package/test/cartesian/Scatter.typed.spec.tsx +153 -0
- package/test/cartesian/XAxis/XAxis.barSize.spec.tsx +336 -0
- package/test/cartesian/XAxis/XAxis.brush.spec.tsx +266 -0
- package/test/cartesian/XAxis/XAxis.categorydomain.spec.tsx +872 -0
- package/test/cartesian/XAxis/XAxis.dataKey.spec.tsx +86 -0
- package/test/cartesian/XAxis/XAxis.datatypes.spec.tsx +127 -0
- package/test/cartesian/XAxis/XAxis.hide.spec.tsx +106 -0
- package/test/cartesian/XAxis/XAxis.multiaxis.spec.tsx +336 -0
- package/test/cartesian/XAxis/XAxis.numberdomain.spec.tsx +1466 -0
- package/test/cartesian/XAxis/XAxis.padding.spec.tsx +758 -0
- package/test/cartesian/XAxis/XAxis.padding_clip.spec.tsx +65 -0
- package/test/cartesian/XAxis/XAxis.state.spec.tsx +355 -0
- package/test/cartesian/XAxis/XAxis.tick.spec.tsx +493 -0
- package/test/cartesian/XAxis/XAxis.timescale.spec.tsx +233 -0
- package/test/cartesian/XAxis/XAxis.type.spec.tsx +107 -0
- package/test/cartesian/XAxis/XAxis.typed.spec.tsx +102 -0
- package/test/cartesian/XAxis/XAxis.vertical.spec.tsx +265 -0
- package/test/cartesian/XAxis.tickFormatter.spec.tsx +54 -0
- package/test/cartesian/YAxis/YAxis.7362.derivedDomain.spec.tsx +230 -0
- package/test/cartesian/YAxis/YAxis.7362.spec.tsx +104 -0
- package/test/cartesian/YAxis/YAxis.interval-zero.spec.tsx +88 -0
- package/test/cartesian/YAxis/YAxis.label.spec.tsx +219 -0
- package/test/cartesian/YAxis/YAxis.spec.tsx +1595 -0
- package/test/cartesian/YAxis/YAxis.tick.spec.tsx +428 -0
- package/test/cartesian/YAxis/YAxis.tickFormatter.spec.tsx +54 -0
- package/test/cartesian/YAxis/YAxis.ticks.spec.tsx +263 -0
- package/test/cartesian/YAxis/YAxis.type.spec.tsx +107 -0
- package/test/cartesian/YAxis/YAxis.typed.spec.tsx +102 -0
- package/test/cartesian/ZAxis.spec.tsx +300 -0
- package/test/cartesian/ZAxis.typed.spec.tsx +33 -0
- package/test/cartesian/__snapshots__/Brush.spec.tsx.snap +5 -0
- package/test/cartesian/axisLineAndStroke.spec.tsx +72 -0
- package/test/cartesian/getCartesianPosition.spec.ts +907 -0
- package/test/cartesian/getEquidistantTicks.spec.ts +88 -0
- package/test/cartesian/getTicks.spec.ts +378 -0
- package/test/cartesian/miscFeatureGaps.spec.tsx +89 -0
- package/test/cartesian/useAnimatedLineLength.spec.ts +168 -0
- package/test/chart/AccessibilityLayer.spec.tsx +569 -0
- package/test/chart/AccessibilityScans.spec.tsx +286 -0
- package/test/chart/AreaChart.spec.tsx +409 -0
- package/test/chart/AreaChart.stacked.spec.tsx +1407 -0
- package/test/chart/AreaChart.typed.spec.tsx +39 -0
- package/test/chart/BarChart.spec.tsx +3719 -0
- package/test/chart/BarChart.typed.spec.tsx +60 -0
- package/test/chart/CategoricalChart.spec.tsx +255 -0
- package/test/chart/ComposedChart.spec.tsx +199 -0
- package/test/chart/ComposedChart.typed.spec.tsx +39 -0
- package/test/chart/FunnelChart.spec.tsx +215 -0
- package/test/chart/FunnelChart.typed.spec.tsx +39 -0
- package/test/chart/LineChart.multiseries.spec.tsx +50 -0
- package/test/chart/LineChart.smoke.spec.tsx +50 -0
- package/test/chart/LineChart.spec.tsx +930 -0
- package/test/chart/LineChart.typed.spec.tsx +39 -0
- package/test/chart/NicheChartTooltip.spec.tsx +81 -0
- package/test/chart/PieChart.spec.tsx +793 -0
- package/test/chart/PieChart.typed.spec.tsx +39 -0
- package/test/chart/RadarChart.spec.tsx +530 -0
- package/test/chart/RadarChart.typed.spec.tsx +39 -0
- package/test/chart/RadialBarChart.5966.spec.tsx +48 -0
- package/test/chart/RadialBarChart.spec.tsx +679 -0
- package/test/chart/RadialBarChart.typed.spec.tsx +39 -0
- package/test/chart/RechartsWrapper.spec.tsx +83 -0
- package/test/chart/Sankey.content.spec.tsx +46 -0
- package/test/chart/Sankey.spec.tsx +952 -0
- package/test/chart/Sankey.typed.spec.tsx +29 -0
- package/test/chart/ScatterChart.spec.tsx +2613 -0
- package/test/chart/ScatterChart.typed.spec.tsx +39 -0
- package/test/chart/SunburstChart.spec.tsx +146 -0
- package/test/chart/Treemap.animation.spec.tsx +52 -0
- package/test/chart/Treemap.spec.tsx +1003 -0
- package/test/chart/Treemap.typed.spec.tsx +26 -0
- package/test/chart/chartEvents.spec.tsx +127 -0
- package/test/chart/responsive.spec.tsx +620 -0
- package/test/component/Cell.render.spec.tsx +155 -0
- package/test/component/Cell.spec.tsx +12 -0
- package/test/component/Cursor.spec.tsx +186 -0
- package/test/component/DefaultTooltipContent.spec.tsx +102 -0
- package/test/component/Label.render.spec.tsx +63 -0
- package/test/component/Label.spec.tsx +686 -0
- package/test/component/Label.typed.spec.tsx +46 -0
- package/test/component/LabelList.spec.tsx +188 -0
- package/test/component/Legend.itemSorter.spec.tsx +704 -0
- package/test/component/Legend.render.spec.tsx +92 -0
- package/test/component/Legend.spec.tsx +2213 -0
- package/test/component/Legend.typed.spec.tsx +22 -0
- package/test/component/ResponsiveContainer.spec.tsx +523 -0
- package/test/component/ResponsiveContainerDataTest.spec.tsx +51 -0
- package/test/component/Text.spec.tsx +415 -0
- package/test/component/Text.typed.spec.tsx +46 -0
- package/test/component/Tooltip/ActiveDot.spec.tsx +370 -0
- package/test/component/Tooltip/Tooltip.animation.spec.tsx +209 -0
- package/test/component/Tooltip/Tooltip.content.spec.tsx +128 -0
- package/test/component/Tooltip/Tooltip.formatter.spec.tsx +152 -0
- package/test/component/Tooltip/Tooltip.includeHidden.spec.tsx +79 -0
- package/test/component/Tooltip/Tooltip.multipleDataArrays.spec.tsx +165 -0
- package/test/component/Tooltip/Tooltip.offset.spec.tsx +113 -0
- package/test/component/Tooltip/Tooltip.state.spec.tsx +74 -0
- package/test/component/Tooltip/Tooltip.sync.spec.tsx +639 -0
- package/test/component/Tooltip/defaultIndex.spec.tsx +227 -0
- package/test/component/Tooltip/graphicalItem.formatter.spec.tsx +138 -0
- package/test/component/Tooltip/itemSorter.spec.tsx +2815 -0
- package/test/component/Tooltip/tooltipEventType.spec.tsx +344 -0
- package/test/component/Tooltip/tooltipMouseHoverSelectors.ts +41 -0
- package/test/component/Tooltip/tooltipTestHelpers.tsx +162 -0
- package/test/component/Tooltip.defaultIndex.spec.tsx +48 -0
- package/test/component/Tooltip.hover.spec.tsx +61 -0
- package/test/component/Tooltip.item.spec.tsx +54 -0
- package/test/component/Tooltip.keyboard.spec.tsx +51 -0
- package/test/component/Tooltip.payload.spec.tsx +1716 -0
- package/test/component/Tooltip.touch.spec.tsx +39 -0
- package/test/component/Tooltip.visibility.spec.tsx +1889 -0
- package/test/component/TooltipBoundingBox.spec.tsx +89 -0
- package/test/component/responsiveContainerUtils.spec.ts +205 -0
- package/test/container/ClipPath.spec.tsx +602 -0
- package/test/container/chartDimensions.spec.tsx +368 -0
- package/test/context/chartLayoutContext.spec.tsx +378 -0
- package/test/helper/ExpectAxisDomain.tsx +27 -0
- package/test/helper/assertNotNull.ts +6 -0
- package/test/helper/assertZIndexLayerOrder.ts +19 -0
- package/test/helper/createSelectorTestCase.tsx +176 -0
- package/test/helper/expectAnimatedPieAngles.ts +100 -0
- package/test/helper/expectAnimatedPiePaths.ts +78 -0
- package/test/helper/expectAreaCurve.ts +15 -0
- package/test/helper/expectAxisTicks.ts +48 -0
- package/test/helper/expectBars.ts +54 -0
- package/test/helper/expectFunctionReturning.ts +58 -0
- package/test/helper/expectLabel.ts +32 -0
- package/test/helper/expectLastCalledWith.ts +48 -0
- package/test/helper/expectLine.ts +20 -0
- package/test/helper/expectPieSectors.ts +80 -0
- package/test/helper/expectScale.ts +37 -0
- package/test/helper/expectScatterPoints.ts +52 -0
- package/test/helper/expectStackGroups.ts +144 -0
- package/test/helper/mockAxes.ts +22 -0
- package/test/helper/mockGetBoundingClientRect.ts +66 -0
- package/test/helper/mockHTMLElementProperty.ts +19 -0
- package/test/helper/mockTouchingElement.ts +27 -0
- package/test/helper/offsetHelpers.ts +19 -0
- package/test/helper/parameterizedTestCases.tsx +99 -0
- package/test/helper/produceState.ts +32 -0
- package/test/helper/selectorTestHelpers.tsx +63 -0
- package/test/helper/trim.spec.ts +35 -0
- package/test/helper/trim.ts +11 -0
- package/test/hooks/useActiveTooltipDataPoints.spec.tsx +358 -0
- package/test/hooks/useAxisDomain.spec.tsx +361 -0
- package/test/hooks/useAxisScale.spec.tsx +283 -0
- package/test/hooks/useAxisTicks.spec.tsx +130 -0
- package/test/hooks/useOffset.spec.tsx +248 -0
- package/test/hooks/useTooltipStateHooks.spec.tsx +109 -0
- package/test/polar/Pie/Pie-TwoLevelPieChart.spec.tsx +135 -0
- package/test/polar/Pie/Pie.spec.tsx +784 -0
- package/test/polar/Pie/Pie.typed.spec.tsx +78 -0
- package/test/polar/Pie.animation.spec.tsx +529 -0
- package/test/polar/PieWithLegend.animation.spec.tsx +142 -0
- package/test/polar/PolarAngleAxis/PolarAngleAxis.events.spec.tsx +76 -0
- package/test/polar/PolarAngleAxis/PolarAngleAxis.spec.tsx +2079 -0
- package/test/polar/PolarAngleAxis/PolarAngleAxis.typed.spec.tsx +102 -0
- package/test/polar/PolarAngleAxis.render.spec.tsx +79 -0
- package/test/polar/PolarGrid.render.spec.tsx +75 -0
- package/test/polar/PolarGrid.spec.tsx +918 -0
- package/test/polar/PolarLegendPerRow.render.spec.tsx +85 -0
- package/test/polar/PolarRadiusAxis.events.spec.tsx +65 -0
- package/test/polar/PolarRadiusAxis.render.spec.tsx +52 -0
- package/test/polar/PolarRadiusAxis.spec.tsx +991 -0
- package/test/polar/PolarRadiusAxis.typed.spec.tsx +84 -0
- package/test/polar/PolarTooltipLegend.render.spec.tsx +80 -0
- package/test/polar/Radar.animation.spec.tsx +570 -0
- package/test/polar/Radar.render.spec.tsx +71 -0
- package/test/polar/Radar.spec.tsx +265 -0
- package/test/polar/Radar.typed.spec.tsx +119 -0
- package/test/polar/RadialBar/RadialBar.spec.tsx +1521 -0
- package/test/polar/RadialBar/RadialBar.typed.spec.tsx +132 -0
- package/test/polar/RadialBar.animation.spec.tsx +375 -0
- package/test/polar/RadialBar.render.spec.tsx +66 -0
- package/test/polar/RadialBar.stacked.spec.tsx +57 -0
- package/test/setup.ts +84 -0
- package/test/shape/ActiveShape.spec.tsx +181 -0
- package/test/shape/Cross.spec.tsx +60 -0
- package/test/shape/Cross.typed.spec.tsx +26 -0
- package/test/shape/Curve.spec.tsx +368 -0
- package/test/shape/Curve.typed.spec.tsx +69 -0
- package/test/shape/Dot.spec.tsx +73 -0
- package/test/shape/Dot.typed.spec.tsx +30 -0
- package/test/shape/Polygon.spec.tsx +357 -0
- package/test/shape/Polygon.typed.spec.tsx +28 -0
- package/test/shape/Rectangle.animation.spec.tsx +451 -0
- package/test/shape/Rectangle.spec.tsx +68 -0
- package/test/shape/Rectangle.typed.spec.tsx +24 -0
- package/test/shape/Sector.spec.tsx +76 -0
- package/test/shape/Sector.typed.spec.tsx +24 -0
- package/test/shape/Symbols.spec.tsx +43 -0
- package/test/shape/Symbols.typed.spec.tsx +24 -0
- package/test/shape/Trapezoid.spec.tsx +50 -0
- package/test/shape/Trapezoid.typed.spec.tsx +24 -0
- package/test/shape/__snapshots__/Cross.spec.tsx.snap +62 -0
- package/test/shape/__snapshots__/Curve.spec.tsx.snap +460 -0
- package/test/shape/__snapshots__/Polygon.spec.tsx.snap +58 -0
- package/test/shape/__snapshots__/Rectangle.spec.tsx.snap +117 -0
- package/test/shape/__snapshots__/Sector.spec.tsx.snap +71 -0
- package/test/shape/__snapshots__/Trapezoid.spec.tsx.snap +64 -0
- package/test/state/chartDataSlice.spec.ts +53 -0
- package/test/state/createCollectionActions.spec.ts +87 -0
- package/test/state/createSelector.spec.ts +158 -0
- package/test/state/externalEventsMiddleware.spec.ts +178 -0
- package/test/state/graphicalItemsSlice.spec.ts +92 -0
- package/test/state/hooks.spec.tsx +68 -0
- package/test/state/legendSlice.spec.ts +44 -0
- package/test/state/mouseEventsMiddleware.spec.ts +75 -0
- package/test/state/optionsSlice.spec.ts +19 -0
- package/test/state/referenceElementsSlice.spec.ts +84 -0
- package/test/state/registerInStore.spec.tsx +101 -0
- package/test/state/selectors/areaSelectors.spec.tsx +77 -0
- package/test/state/selectors/axisSelectors.spec.tsx +1418 -0
- package/test/state/selectors/barStackSelectors.spec.tsx +752 -0
- package/test/state/selectors/brushSelectors.spec.tsx +30 -0
- package/test/state/selectors/cartesianAxisSlice.spec.ts +96 -0
- package/test/state/selectors/combineNiceTicks.spec.ts +207 -0
- package/test/state/selectors/combiners/combineActiveTooltipIndex.spec.ts +61 -0
- package/test/state/selectors/combiners/combineAllBarPositions.spec.ts +39 -0
- package/test/state/selectors/combiners/combineConfiguredScale.spec.ts +56 -0
- package/test/state/selectors/combiners/combineDisplayedStackedData.spec.ts +123 -0
- package/test/state/selectors/combiners/combineRealScaleType.spec.ts +80 -0
- package/test/state/selectors/containerSelectors.spec.tsx +168 -0
- package/test/state/selectors/dataSelectors.spec.tsx +136 -0
- package/test/state/selectors/legendSelectors.spec.tsx +113 -0
- package/test/state/selectors/lineSelectors.spec.tsx +60 -0
- package/test/state/selectors/pieSelectors.spec.tsx +72 -0
- package/test/state/selectors/radarSelectors.spec.tsx +496 -0
- package/test/state/selectors/rootPropsSelectors.spec.tsx +169 -0
- package/test/state/selectors/scatterSelectors.spec.tsx +47 -0
- package/test/state/selectors/selectActiveTooltipIndex.spec.tsx +234 -0
- package/test/state/selectors/selectAllAxes.spec.tsx +18 -0
- package/test/state/selectors/selectAxisDomain.spec.tsx +21 -0
- package/test/state/selectors/selectAxisDomainIncludingNiceTicks.spec.tsx +19 -0
- package/test/state/selectors/selectAxisRangeWithReverse.spec.tsx +22 -0
- package/test/state/selectors/selectAxisScale.spec.tsx +91 -0
- package/test/state/selectors/selectBarRectangles.stackOffset.spec.tsx +503 -0
- package/test/state/selectors/selectBaseAxis.spec.tsx +56 -0
- package/test/state/selectors/selectCartesianItemsSettings.spec.tsx +57 -0
- package/test/state/selectors/selectChartOffset.spec.tsx +26 -0
- package/test/state/selectors/selectDisplayedData.spec.tsx +282 -0
- package/test/state/selectors/selectIsTooltipActive.spec.tsx +231 -0
- package/test/state/selectors/selectNumericalDomain.spec.tsx +21 -0
- package/test/state/selectors/selectRealScaleType.spec.tsx +19 -0
- package/test/state/selectors/selectStackGroups.spec.tsx +322 -0
- package/test/state/selectors/selectXAxisPosition.spec.tsx +22 -0
- package/test/state/selectors/selectYAxisPosition.spec.tsx +22 -0
- package/test/state/selectors/selectorMemoization.spec.tsx +136 -0
- package/test/state/selectors/selectors.spec.tsx +1613 -0
- package/test/state/throttling.spec.ts +200 -0
- package/test/state/zIndexSlice.spec.ts +85 -0
- package/test/synchronisation/useChartSynchronisation.spec.tsx +225 -0
- package/test/util/BarUtils.spec.ts +39 -0
- package/test/util/CartesianUtils/CartesianUtils.spec.ts +261 -0
- package/test/util/CartesianUtils/rectWithPoints.spec.ts +48 -0
- package/test/util/ChartUtils/ChartUtils.spec.ts +491 -0
- package/test/util/ChartUtils/appendOffsetOfLegend.spec.ts +136 -0
- package/test/util/ChartUtils/appendOffsetOfLegend.spec.tsx +133 -0
- package/test/util/ChartUtils/getCateCoordinateOfLine.spec.ts +97 -0
- package/test/util/ChartUtils/getStackedData.spec.ts +416 -0
- package/test/util/ChartUtils/truncateByDomain.spec.ts +70 -0
- package/test/util/DataUtils.spec.ts +385 -0
- package/test/util/DomUtils.spec.tsx +117 -0
- package/test/util/FunnelUtils.spec.tsx +70 -0
- package/test/util/Global.spec.ts +11 -0
- package/test/util/LRUCache.spec.ts +81 -0
- package/test/util/LogUtils.spec.ts +45 -0
- package/test/util/PolarUtils.spec.ts +66 -0
- package/test/util/ReduceCssCalcPrototype.spec.ts +141 -0
- package/test/util/ShallowEqual.spec.ts +102 -0
- package/test/util/TickUtils.spec.ts +29 -0
- package/test/util/createChartHelpers.spec.tsx +210 -0
- package/test/util/cursor/getCursorPoints.spec.ts +136 -0
- package/test/util/cursor/getCursorRectangle.spec.ts +50 -0
- package/test/util/cursor/getRadialCursorPoints.spec.ts +36 -0
- package/test/util/errorValue.spec.ts +69 -0
- package/test/util/getEveryNth.spec.ts +39 -0
- package/test/util/getRadiusAndStrokeWidthFromDot.spec.ts +51 -0
- package/test/util/getRelativeCoordinate.spec.ts +250 -0
- package/test/util/getSliced.spec.ts +45 -0
- package/test/util/isDomainSpecifiedByUser.spec.ts +207 -0
- package/test/util/isWellBehavedNumber.spec.ts +54 -0
- package/test/util/payload/getUniqPayload.spec.ts +56 -0
- package/test/util/propsAreEqual.spec.ts +75 -0
- package/test/util/round.spec.ts +112 -0
- package/test/util/scale/arithmetic.spec.ts +61 -0
- package/test/util/scale/createCategoricalInverse.spec.ts +84 -0
- package/test/util/scale/getNiceTickValues.spec.ts +421 -0
- package/test/util/scale/getTickValuesFixedDomain.spec.ts +155 -0
- package/test/util/svgPropertiesAndEvents.spec.tsx +206 -0
- package/test/util/svgPropertiesNoEvents.spec.tsx +228 -0
- package/test/util/tooltip/translate.spec.ts +396 -0
- package/test/util/useAnimationId.spec.tsx +59 -0
- package/test/util/useElementOffset.spec.tsx +173 -0
- package/test/util/usePrefersReducedMotion.spec.ts +54 -0
- package/test/util/useUniqueId.spec.ts +99 -0
- package/test/utils/diagnostics-allowlist.ts +18 -0
- package/test/utils/diagnostics.ts +58 -0
- package/test/zIndex/AllZIndexPortals.spec.tsx +83 -0
- package/test/zIndex/DefaultZIndexes.spec.ts +80 -0
- package/test/zIndex/DynamicZIndex.spec.tsx +102 -0
- package/test/zIndex/ZIndexLayer.portalOwner.spec.tsx +125 -0
- package/test/zIndex/componentZIndex.spec.tsx +255 -0
- package/test/zIndex/getZIndexFromUnknown.spec.ts +51 -0
- package/test/zIndex/multiChartZIndexIsolation.spec.tsx +90 -0
- package/test/zIndex/zIndexSelectors.spec.ts +172 -0
- package/test-results/.last-run.json +4 -0
- package/tsconfig.json +11 -0
- package/src/util/DirectPortal.tsx +0 -107
|
@@ -5,8 +5,8 @@
|
|
|
5
5
|
// ResponsiveContainer-context sizing, and the tooltip/legend portal contexts.
|
|
6
6
|
// Renders the `recharts-wrapper` div + `ReportChartSize` (which drives the
|
|
7
7
|
// Surface dimensions) + children.
|
|
8
|
-
import {
|
|
9
|
-
import type { JSX } from "
|
|
8
|
+
import { createMemo, createSignal, flush, onCleanup, untrack } from "solid-js";
|
|
9
|
+
import type { JSX } from "@solidjs/web";
|
|
10
10
|
import { ReportChartSize } from "../context/chartLayoutContext";
|
|
11
11
|
import { TooltipPortalContext } from "../context/tooltipPortalContext";
|
|
12
12
|
import { LegendPortalContext } from "../context/legendPortalContext";
|
|
@@ -95,8 +95,12 @@ export const RechartsWrapper = (props: RechartsWrapperProps): JSX.Element => {
|
|
|
95
95
|
// the same node is passed to setTooltipPortal). The ref sets a signal that the
|
|
96
96
|
// TooltipPortalContext exposes reactively, then forwards to the caller's ref.
|
|
97
97
|
const [tooltipPortal, setTooltipPortal] = createSignal<HTMLElement | null>(null);
|
|
98
|
-
const [measuredWidth, setMeasuredWidth] = createSignal<number | undefined>(undefined
|
|
99
|
-
|
|
98
|
+
const [measuredWidth, setMeasuredWidth] = createSignal<number | undefined>(undefined, {
|
|
99
|
+
ownedWrite: true,
|
|
100
|
+
});
|
|
101
|
+
const [measuredHeight, setMeasuredHeight] = createSignal<number | undefined>(undefined, {
|
|
102
|
+
ownedWrite: true,
|
|
103
|
+
});
|
|
100
104
|
let wrapperEl: HTMLDivElement | null = null;
|
|
101
105
|
let resizeObserver: ResizeObserver | null = null;
|
|
102
106
|
|
|
@@ -137,10 +141,9 @@ export const RechartsWrapper = (props: RechartsWrapperProps): JSX.Element => {
|
|
|
137
141
|
if (untrack(measuredWidth) === roundedWidth && untrack(measuredHeight) === roundedHeight) {
|
|
138
142
|
return;
|
|
139
143
|
}
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
});
|
|
144
|
+
setMeasuredWidth(roundedWidth);
|
|
145
|
+
setMeasuredHeight(roundedHeight);
|
|
146
|
+
flush();
|
|
144
147
|
};
|
|
145
148
|
|
|
146
149
|
const measureOnce = (el: HTMLDivElement): void => {
|
|
@@ -274,6 +277,7 @@ export const RechartsWrapper = (props: RechartsWrapperProps): JSX.Element => {
|
|
|
274
277
|
|
|
275
278
|
const handleMouseLeave = (event: MouseEvent & { currentTarget: HTMLDivElement }): void => {
|
|
276
279
|
store?.actions.tooltip.mouseLeaveChart();
|
|
280
|
+
flush();
|
|
277
281
|
if (store != null) {
|
|
278
282
|
dispatchExternalMouseHandler(props.onMouseLeave, event);
|
|
279
283
|
}
|
|
@@ -296,11 +300,13 @@ export const RechartsWrapper = (props: RechartsWrapperProps): JSX.Element => {
|
|
|
296
300
|
const related = event.relatedTarget;
|
|
297
301
|
if (related == null || !(related instanceof Node) || !el.contains(related)) {
|
|
298
302
|
store?.actions.tooltip.mouseLeaveChart();
|
|
303
|
+
flush();
|
|
299
304
|
}
|
|
300
305
|
};
|
|
301
306
|
|
|
302
307
|
const handleNativeMouseLeave = (): void => {
|
|
303
308
|
store?.actions.tooltip.mouseLeaveChart();
|
|
309
|
+
flush();
|
|
304
310
|
};
|
|
305
311
|
|
|
306
312
|
const attachWrapperListeners = (el: HTMLDivElement): void => {
|
|
@@ -333,6 +339,10 @@ export const RechartsWrapper = (props: RechartsWrapperProps): JSX.Element => {
|
|
|
333
339
|
clientY: event.clientY,
|
|
334
340
|
currentTarget: event.currentTarget,
|
|
335
341
|
});
|
|
342
|
+
// Solid 2.0 defers store propagation to a flush boundary; the external
|
|
343
|
+
// handler (dispatchExternalEvent) reads store.state synchronously, so flush
|
|
344
|
+
// the click-driven active-tooltip write first or the handler sees stale state.
|
|
345
|
+
flush();
|
|
336
346
|
dispatchExternalMouseHandler(props.onClick, event);
|
|
337
347
|
};
|
|
338
348
|
|
|
@@ -441,11 +451,11 @@ export const RechartsWrapper = (props: RechartsWrapperProps): JSX.Element => {
|
|
|
441
451
|
};
|
|
442
452
|
|
|
443
453
|
return (
|
|
444
|
-
<TooltipPortalContext
|
|
445
|
-
<LegendPortalContext
|
|
454
|
+
<TooltipPortalContext value={tooltipPortal}>
|
|
455
|
+
<LegendPortalContext value={tooltipPortal}>
|
|
446
456
|
<ReportChartSize width={reportedWidth()} height={reportedHeight()} />
|
|
447
457
|
<div
|
|
448
|
-
class={["recharts-wrapper", props.class]
|
|
458
|
+
class={["recharts-wrapper", props.class]}
|
|
449
459
|
style={wrapperStyle()}
|
|
450
460
|
ref={(el) => {
|
|
451
461
|
setWrapperRef(el);
|
|
@@ -466,11 +476,11 @@ export const RechartsWrapper = (props: RechartsWrapperProps): JSX.Element => {
|
|
|
466
476
|
onKeyDown={handleKeyDown}
|
|
467
477
|
onFocus={onFocus}
|
|
468
478
|
onBlur={onBlur}
|
|
469
|
-
|
|
479
|
+
tabindex={0}
|
|
470
480
|
>
|
|
471
481
|
{props.children}
|
|
472
482
|
</div>
|
|
473
|
-
</LegendPortalContext
|
|
474
|
-
</TooltipPortalContext
|
|
483
|
+
</LegendPortalContext>
|
|
484
|
+
</TooltipPortalContext>
|
|
475
485
|
);
|
|
476
486
|
};
|
package/src/chart/Sankey.tsx
CHANGED
|
@@ -18,8 +18,8 @@
|
|
|
18
18
|
// through getValueByDataKey in the payload searcher (reference parity).
|
|
19
19
|
// NON-GAPS: the reference Sankey has NO animation and hardcodes responsive={false}
|
|
20
20
|
// on its wrapper (ResponsiveContainer sizing flows via the wrapper context).
|
|
21
|
-
import {
|
|
22
|
-
import type { JSX } from "
|
|
21
|
+
import { createEffect, createMemo, For, merge, Show } from "solid-js";
|
|
22
|
+
import type { JSX } from "@solidjs/web";
|
|
23
23
|
import { Surface } from "../container/Surface";
|
|
24
24
|
import { Layer } from "../container/Layer";
|
|
25
25
|
import { Rectangle } from "../shape/Rectangle";
|
|
@@ -767,8 +767,7 @@ const sankeyOptions: ChartOptions = {
|
|
|
767
767
|
|
|
768
768
|
const SankeyImpl = (props: SankeyProps & { id: string }): JSX.Element => {
|
|
769
769
|
const store = useAppStore();
|
|
770
|
-
const merged =
|
|
771
|
-
const resolvedChildren = children(() => props.children);
|
|
770
|
+
const merged = merge(sankeyDefaultProps, props);
|
|
772
771
|
const width = useChartWidth();
|
|
773
772
|
const height = useChartHeight();
|
|
774
773
|
|
|
@@ -809,10 +808,8 @@ const SankeyImpl = (props: SankeyProps & { id: string }): JSX.Element => {
|
|
|
809
808
|
|
|
810
809
|
// Publish the computed data so the tooltip searcher can resolve node-/link-N.
|
|
811
810
|
createEffect(
|
|
812
|
-
|
|
813
|
-
|
|
814
|
-
(cd) => store?.actions.chartData.setComputedData(cd),
|
|
815
|
-
),
|
|
811
|
+
() => ({ nodes: computed().nodes, links: computed().links }),
|
|
812
|
+
(cd) => store?.actions.chartData.setComputedData(cd),
|
|
816
813
|
);
|
|
817
814
|
|
|
818
815
|
const dispatchEnter = (index: TooltipIndex, coord: Coordinate): void => {
|
|
@@ -959,7 +956,7 @@ const SankeyImpl = (props: SankeyProps & { id: string }): JSX.Element => {
|
|
|
959
956
|
</Layer>
|
|
960
957
|
</Layer>
|
|
961
958
|
<SetTooltipEntrySettings tooltipEntrySettings={tooltipConfig()} />
|
|
962
|
-
{
|
|
959
|
+
{merged.children}
|
|
963
960
|
</Surface>
|
|
964
961
|
)}
|
|
965
962
|
</Show>
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
// Ported from recharts 3.8.1 src/chart/ScatterChart.tsx (commit 7a23854).
|
|
2
2
|
// `forwardRef` → `ref` prop; thin user-facing wrapper over CartesianChart.
|
|
3
|
-
import type { JSX } from "
|
|
3
|
+
import type { JSX } from "@solidjs/web";
|
|
4
4
|
import { arrayTooltipSearcher } from "../state/optionsSlice";
|
|
5
5
|
import { CartesianChart } from "./CartesianChart";
|
|
6
6
|
import { CartesianChartProps, TooltipEventType } from "../util/types";
|
|
@@ -12,8 +12,8 @@
|
|
|
12
12
|
// NON-GAP: `responsive` defaults to false in the reference too, and
|
|
13
13
|
// ResponsiveContainer sizing flows via the wrapper context.
|
|
14
14
|
// DEFERRED: event throttling nuances.
|
|
15
|
-
import {
|
|
16
|
-
import type { JSX } from "
|
|
15
|
+
import { createMemo, For, merge, Show } from "solid-js";
|
|
16
|
+
import type { JSX } from "@solidjs/web";
|
|
17
17
|
import { scaleLinear } from "d3-scale";
|
|
18
18
|
import { Surface } from "../container/Surface";
|
|
19
19
|
import { Layer } from "../container/Layer";
|
|
@@ -166,8 +166,7 @@ const SunburstChartImpl = (
|
|
|
166
166
|
props: Required<Pick<SunburstChartProps, "data">> & SunburstChartProps & { id: string },
|
|
167
167
|
): JSX.Element => {
|
|
168
168
|
const store = useAppStore();
|
|
169
|
-
const merged =
|
|
170
|
-
const resolvedChildren = children(() => props.children);
|
|
169
|
+
const merged = merge(sunburstDefaultProps, props);
|
|
171
170
|
const width = useChartWidth();
|
|
172
171
|
const height = useChartHeight();
|
|
173
172
|
|
|
@@ -349,7 +348,7 @@ const SunburstChartImpl = (
|
|
|
349
348
|
</For>
|
|
350
349
|
</Layer>
|
|
351
350
|
<SetTooltipEntrySettings tooltipEntrySettings={tooltipConfig()} />
|
|
352
|
-
{
|
|
351
|
+
{merged.children}
|
|
353
352
|
</Surface>
|
|
354
353
|
)}
|
|
355
354
|
</Show>
|
package/src/chart/Treemap.tsx
CHANGED
|
@@ -18,8 +18,8 @@
|
|
|
18
18
|
// works via the wrapper context (the reference itself hardcodes responsive={false}
|
|
19
19
|
// on its wrapper). DEFERRED: the element form of `content` & `nestIndexContent`,
|
|
20
20
|
// per-node name-fit text sizing nuances.
|
|
21
|
-
import {
|
|
22
|
-
import type { JSX } from "
|
|
21
|
+
import { createMemo, createSignal, For, merge, Show } from "solid-js";
|
|
22
|
+
import type { JSX } from "@solidjs/web";
|
|
23
23
|
import { Surface } from "../container/Surface";
|
|
24
24
|
import { Layer } from "../container/Layer";
|
|
25
25
|
import { Rectangle } from "../shape/Rectangle";
|
|
@@ -484,8 +484,7 @@ const flattenNodes = (node: TreemapNode | null): TreemapNode[] => {
|
|
|
484
484
|
|
|
485
485
|
const TreemapImpl = (props: TreemapProps & { id: string }): JSX.Element => {
|
|
486
486
|
const store = useAppStore();
|
|
487
|
-
const merged =
|
|
488
|
-
const resolvedChildren = children(() => props.children);
|
|
487
|
+
const merged = merge(treemapDefaultProps, props);
|
|
489
488
|
const width = useChartWidth();
|
|
490
489
|
const height = useChartHeight();
|
|
491
490
|
|
|
@@ -814,7 +813,7 @@ const TreemapImpl = (props: TreemapProps & { id: string }): JSX.Element => {
|
|
|
814
813
|
</For>
|
|
815
814
|
</Layer>
|
|
816
815
|
<SetTooltipEntrySettings tooltipEntrySettings={tooltipConfig()} />
|
|
817
|
-
{
|
|
816
|
+
{merged.children}
|
|
818
817
|
</Surface>
|
|
819
818
|
{merged.type === "nest" ? (
|
|
820
819
|
<div
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
// JSX is built in the parent's JSX scope via `renderActivePointsLayerFromState`.
|
|
4
4
|
// Mounting a child component that subscribes to tooltip selectors trips STRICT_READ.
|
|
5
5
|
// ZIndexLayer deferred.
|
|
6
|
-
import type { JSX } from "
|
|
6
|
+
import type { JSX } from "@solidjs/web";
|
|
7
7
|
import { isNullish } from "../util/DataUtils";
|
|
8
8
|
import type { ActiveDotProps, ActiveDotType, DataKey } from "../util/types";
|
|
9
9
|
import { svgPropertiesNoEventsFromUnknownKeepCase } from "../util/svgPropertiesNoEvents";
|
|
@@ -77,6 +77,9 @@ function renderActiveDot(activeDot: ActiveDotType, dotProps: ActiveDotProps): JS
|
|
|
77
77
|
if (typeof activeDot === "function") {
|
|
78
78
|
return activeDot(dotProps);
|
|
79
79
|
}
|
|
80
|
+
if (typeof activeDot === "object" && activeDot != null && "type" in activeDot) {
|
|
81
|
+
return activeDot;
|
|
82
|
+
}
|
|
80
83
|
// Default <Dot> uses <Show> internally, which trips STRICT_READ when this
|
|
81
84
|
// layer mounts during tooltip effect-apply — render the circle directly instead.
|
|
82
85
|
// An object-form activeDot's `class`/`className` is dropped by the svg-prop
|
|
@@ -87,7 +90,7 @@ function renderActiveDot(activeDot: ActiveDotType, dotProps: ActiveDotProps): JS
|
|
|
87
90
|
: undefined;
|
|
88
91
|
return (
|
|
89
92
|
<circle
|
|
90
|
-
class={["recharts-dot", customClass]
|
|
93
|
+
class={["recharts-dot", customClass]}
|
|
91
94
|
cx={dotProps.cx}
|
|
92
95
|
cy={dotProps.cy}
|
|
93
96
|
r={dotProps.r}
|
|
@@ -117,10 +120,7 @@ export function renderActivePointsLayerFromState(
|
|
|
117
120
|
...svgPropertiesNoEventsFromUnknownKeepCase(args.activeDot),
|
|
118
121
|
};
|
|
119
122
|
return (
|
|
120
|
-
<g
|
|
121
|
-
class={["recharts-layer", "recharts-active-dot"].filter(Boolean).join(" ")}
|
|
122
|
-
clip-path={args.clipPath}
|
|
123
|
-
>
|
|
123
|
+
<g class={["recharts-layer", "recharts-active-dot"]} clip-path={args.clipPath}>
|
|
124
124
|
{renderActiveDot(args.activeDot, dotProps)}
|
|
125
125
|
</g>
|
|
126
126
|
);
|
package/src/component/Cell.tsx
CHANGED
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
// Ported from recharts 3.8.1 src/component/Cell.tsx (commit 7a23854).
|
|
2
|
-
// Deviations: React's
|
|
3
|
-
//
|
|
4
|
-
// React's `displayName` is dropped.
|
|
2
|
+
// Deviations: React's `SVGProps<SVGElement>` → Solid's `CamelSvgProps<JSX.SVGAttributes<SVGElement>>`
|
|
3
|
+
// (which already names the class prop `class`); React's `displayName` is dropped.
|
|
5
4
|
//
|
|
6
5
|
// The CellReader pattern: recharts extracts cells by walking the React element
|
|
7
6
|
// tree (`findAllByType(children, Cell)`). Solid has no element-descriptor tree —
|
|
@@ -11,26 +10,9 @@
|
|
|
11
10
|
// `collectCells`. Cells render no DOM (the standalone <Cell /> spec asserts this).
|
|
12
11
|
import { type CamelSvgProps } from "../util/svgPropertiesNoEvents";
|
|
13
12
|
import { createMemo, type Accessor } from "solid-js";
|
|
14
|
-
import type { JSX } from "
|
|
13
|
+
import type { JSX } from "@solidjs/web";
|
|
15
14
|
|
|
16
|
-
|
|
17
|
-
type SVGIntrinsicAttributes = JSX.IntrinsicElements[SVGIntrinsicTag];
|
|
18
|
-
type KeysOfUnion<T> = T extends T ? keyof T : never;
|
|
19
|
-
type ValueOfUnion<T, K extends PropertyKey> = T extends T
|
|
20
|
-
? K extends keyof T
|
|
21
|
-
? T[K]
|
|
22
|
-
: never
|
|
23
|
-
: never;
|
|
24
|
-
type MergedSVGIntrinsicAttributes = {
|
|
25
|
-
[K in KeysOfUnion<SVGIntrinsicAttributes>]?: ValueOfUnion<SVGIntrinsicAttributes, K>;
|
|
26
|
-
};
|
|
27
|
-
type GenericSVGAttributes = Omit<
|
|
28
|
-
MergedSVGIntrinsicAttributes,
|
|
29
|
-
keyof JSX.DOMAttributes<SVGElement>
|
|
30
|
-
> &
|
|
31
|
-
JSX.DOMAttributes<SVGElement>;
|
|
32
|
-
|
|
33
|
-
export type CellProps = CamelSvgProps<GenericSVGAttributes> & {
|
|
15
|
+
export interface CellProps extends CamelSvgProps<JSX.SVGAttributes<SVGElement>> {
|
|
34
16
|
/**
|
|
35
17
|
* The fill color.
|
|
36
18
|
*/
|
|
@@ -39,7 +21,7 @@ export type CellProps = CamelSvgProps<GenericSVGAttributes> & {
|
|
|
39
21
|
* The stroke color.
|
|
40
22
|
*/
|
|
41
23
|
stroke?: string;
|
|
42
|
-
}
|
|
24
|
+
}
|
|
43
25
|
|
|
44
26
|
/**
|
|
45
27
|
* Set while a parent collects its <Cell> children (see {@link collectCells}).
|
package/src/component/Cursor.tsx
CHANGED
|
@@ -6,12 +6,12 @@
|
|
|
6
6
|
// optional SVG-props object (className/styling); a custom cursor ELEMENT
|
|
7
7
|
// (recharts' `ReactElement` + cloneElement) is PERMANENT-N/A — there is no Solid
|
|
8
8
|
// equivalent of React.isValidElement/cloneElement. Solid deviations: `clsx` →
|
|
9
|
-
// `class={[...]
|
|
9
|
+
// `class={[...]}`; the connected `Cursor` resolves context then delegates to
|
|
10
10
|
// `CursorInternal`, which (like recharts) takes fully-resolved props so it can be
|
|
11
11
|
// rendered standalone in tests; all reactive reads live in a tracking memo that
|
|
12
12
|
// returns plain shape DATA, so the <Show> children read only plain properties.
|
|
13
13
|
import { createMemo, Show } from "solid-js";
|
|
14
|
-
import type { JSX } from "
|
|
14
|
+
import type { JSX } from "@solidjs/web";
|
|
15
15
|
import {
|
|
16
16
|
ChartOffsetInternal,
|
|
17
17
|
Coordinate,
|
|
@@ -77,7 +77,7 @@ type CursorShape =
|
|
|
77
77
|
/**
|
|
78
78
|
* The shared cursor class, with an optional extra className from an object-form
|
|
79
79
|
* `cursor` appended (the shape components type `class` as a plain string, so this
|
|
80
|
-
* is joined rather than passed as a `class={[...]
|
|
80
|
+
* is joined rather than passed as a `class={[...]}` array).
|
|
81
81
|
*/
|
|
82
82
|
function cursorClass(cursor: CursorDefinition): string {
|
|
83
83
|
if (typeof cursor === "object" && cursor != null && typeof cursor.className === "string") {
|
|
@@ -3,12 +3,12 @@
|
|
|
3
3
|
// TYPES + component. The legend slice/selectors need these types; the component
|
|
4
4
|
// renders the legend item list. Deviations: `ReactElement`→`Element`/dropped,
|
|
5
5
|
// `DataKey<any>`→`DataKey<unknown>`, `ReactNode`→`Element`, `CSSProperties`→
|
|
6
|
-
// `JSX.CSSProperties`, `className`→`class`, clsx→`class={[...]
|
|
6
|
+
// `JSX.CSSProperties`, `className`→`class`, clsx→`class={[...]}`; `LegendItemSorter`
|
|
7
7
|
// is co-located here (reference keeps it in Legend.tsx) so the slice can import it
|
|
8
8
|
// without depending on the Legend component. `adaptEventsOfChild` events deferred.
|
|
9
|
-
import { For, Show,
|
|
10
|
-
type Element
|
|
11
|
-
import type { JSX } from "
|
|
9
|
+
import { For, Show, merge } from "solid-js";
|
|
10
|
+
import type { Element } from "solid-js";
|
|
11
|
+
import type { JSX } from "@solidjs/web";
|
|
12
12
|
import { DataKey, LegendType, MousePointer } from "../util/types";
|
|
13
13
|
import { Surface } from "../container/Surface";
|
|
14
14
|
import { Symbols } from "../shape/Symbols";
|
|
@@ -134,7 +134,7 @@ const LegendIcon = (props: {
|
|
|
134
134
|
* `content` prop to customize.
|
|
135
135
|
*/
|
|
136
136
|
export const DefaultLegendContent = (props: Props): JSX.Element => {
|
|
137
|
-
const merged =
|
|
137
|
+
const merged = merge(defaultLegendContentDefaultProps, props);
|
|
138
138
|
|
|
139
139
|
const itemStyle = (): JSX.CSSProperties => ({
|
|
140
140
|
display: merged.layout === "horizontal" ? "inline-block" : "block",
|
|
@@ -173,9 +173,7 @@ export const DefaultLegendContent = (props: Props): JSX.Element => {
|
|
|
173
173
|
"recharts-legend-item",
|
|
174
174
|
`legend-item-${i()}`,
|
|
175
175
|
entry.inactive ? "inactive" : undefined,
|
|
176
|
-
]
|
|
177
|
-
.filter(Boolean)
|
|
178
|
-
.join(" ")}
|
|
176
|
+
]}
|
|
179
177
|
style={itemStyle()}
|
|
180
178
|
onClick={(event) => merged.onClick?.(entry, i(), event)}
|
|
181
179
|
onMouseEnter={(event) => merged.onMouseEnter?.(entry, i(), event)}
|
|
@@ -5,11 +5,11 @@
|
|
|
5
5
|
// (the per-entry `formatter` is populated from the graphical items' `formatter`
|
|
6
6
|
// prop and wins over the prop-level one, per v3.9.1); `any` → `unknown`,
|
|
7
7
|
// `ReactNode` → `Element`, `CSSProperties` → `JSX.CSSProperties`; `className` →
|
|
8
|
-
// `class`, `clsx(...)` → `class={[...]
|
|
8
|
+
// `class`, `clsx(...)` → `class={[...]}` array form (no clsx dep); `React.isValid-
|
|
9
9
|
// Element` check dropped (Solid renders an Element or a string uniformly).
|
|
10
|
-
import { For, Show, createMemo,
|
|
11
|
-
type Element
|
|
12
|
-
import type { JSX } from "
|
|
10
|
+
import { For, Show, createMemo, merge } from "solid-js";
|
|
11
|
+
import type { Element } from "solid-js";
|
|
12
|
+
import type { JSX } from "@solidjs/web";
|
|
13
13
|
import { isNullish, isNumOrStr } from "../util/DataUtils";
|
|
14
14
|
import { DataKey, TooltipType } from "../util/types";
|
|
15
15
|
import type { TooltipPayload, TooltipPayloadEntry } from "../state/tooltipSlice";
|
|
@@ -18,10 +18,9 @@ export type ValueType = number | string | ReadonlyArray<number | string>;
|
|
|
18
18
|
export type NameType = number | string;
|
|
19
19
|
|
|
20
20
|
function defaultFormatter(value: ValueType | undefined): Element {
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
return value;
|
|
21
|
+
return Array.isArray(value) && isNumOrStr(value[0]) && isNumOrStr(value[1])
|
|
22
|
+
? value.join(" ~ ")
|
|
23
|
+
: value;
|
|
25
24
|
}
|
|
26
25
|
|
|
27
26
|
export type Formatter<TValue extends ValueType = ValueType, TName extends NameType = NameType> = (
|
|
@@ -152,7 +151,7 @@ function lodashLikeSortBy(
|
|
|
152
151
|
* `content` prop to customize.
|
|
153
152
|
*/
|
|
154
153
|
export const DefaultTooltipContent = (props: Props): JSX.Element => {
|
|
155
|
-
const merged =
|
|
154
|
+
const merged = merge(defaultDefaultTooltipContentProps, props);
|
|
156
155
|
|
|
157
156
|
const sortedPayload = createMemo<TooltipPayload>(() => {
|
|
158
157
|
const payload = props.payload;
|
|
@@ -228,15 +227,12 @@ export const DefaultTooltipContent = (props: Props): JSX.Element => {
|
|
|
228
227
|
|
|
229
228
|
return (
|
|
230
229
|
<div
|
|
231
|
-
class={["recharts-default-tooltip", props.wrapperClass]
|
|
230
|
+
class={["recharts-default-tooltip", props.wrapperClass]}
|
|
232
231
|
style={finalStyle()}
|
|
233
232
|
role={merged.accessibilityLayer ? "status" : undefined}
|
|
234
233
|
aria-live={merged.accessibilityLayer ? "assertive" : undefined}
|
|
235
234
|
>
|
|
236
|
-
<p
|
|
237
|
-
class={["recharts-tooltip-label", props.labelClass].filter(Boolean).join(" ")}
|
|
238
|
-
style={finalLabelStyle()}
|
|
239
|
-
>
|
|
235
|
+
<p class={["recharts-tooltip-label", props.labelClass]} style={finalLabelStyle()}>
|
|
240
236
|
{finalLabel()}
|
|
241
237
|
</p>
|
|
242
238
|
<Show when={sortedPayload().length > 0}>
|
package/src/component/Dots.tsx
CHANGED
|
@@ -7,8 +7,8 @@
|
|
|
7
7
|
// the default <Dot> (recharts does this via svgPropertiesAndEventsFromUnknown).
|
|
8
8
|
// - `ZIndexLayer` wrapper deferred (zIndex layering not ported) → plain <Layer>.
|
|
9
9
|
// - `clsx` → class string composed inline; `className` → `class`.
|
|
10
|
-
import { createMemo,
|
|
11
|
-
import type { JSX } from "
|
|
10
|
+
import { createMemo, For, omit, Show } from "solid-js";
|
|
11
|
+
import type { JSX } from "@solidjs/web";
|
|
12
12
|
import { Dot, type DotProps } from "../shape/Dot";
|
|
13
13
|
import { Layer } from "../container/Layer";
|
|
14
14
|
import { DataKey, DotItemDotProps, DotPoint, DotType } from "../util/types";
|
|
@@ -92,7 +92,7 @@ function DotRenderer(props: DotRendererProps): JSX.Element {
|
|
|
92
92
|
renderFn()?.(dotProps())
|
|
93
93
|
) : (
|
|
94
94
|
<Dot
|
|
95
|
-
{...
|
|
95
|
+
{...omit(dotProps(), "index", "dataKey", "value", "payload", "points")}
|
|
96
96
|
class={props.dotClass}
|
|
97
97
|
/>
|
|
98
98
|
)}
|
|
@@ -113,7 +113,7 @@ export function Dots(props: DotsProps): JSX.Element {
|
|
|
113
113
|
array with fresh point objects every frame; reference-keyed <For>
|
|
114
114
|
would dispose+recreate every dot's DOM node per frame. Index-keying
|
|
115
115
|
reuses the rows and only updates cx/cy reactively. */}
|
|
116
|
-
<
|
|
116
|
+
<For each={props.points} keyed={false}>
|
|
117
117
|
{(entry, i) => (
|
|
118
118
|
<DotRenderer
|
|
119
119
|
entry={entry()}
|
|
@@ -125,7 +125,7 @@ export function Dots(props: DotsProps): JSX.Element {
|
|
|
125
125
|
points={props.points}
|
|
126
126
|
/>
|
|
127
127
|
)}
|
|
128
|
-
</
|
|
128
|
+
</For>
|
|
129
129
|
</Layer>
|
|
130
130
|
</Show>
|
|
131
131
|
);
|
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, merge, omit, Show, useContext } from "solid-js";
|
|
20
20
|
import type { Accessor } from "solid-js";
|
|
21
|
-
import type { JSX } from "
|
|
21
|
+
import type { JSX } from "@solidjs/web";
|
|
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,11 +109,7 @@ export function CartesianLabelContextProvider(
|
|
|
109
109
|
width: props.width,
|
|
110
110
|
height: props.height,
|
|
111
111
|
}));
|
|
112
|
-
return
|
|
113
|
-
<CartesianLabelContext.Provider value={viewBox}>
|
|
114
|
-
{props.children}
|
|
115
|
-
</CartesianLabelContext.Provider>
|
|
116
|
-
);
|
|
112
|
+
return <CartesianLabelContext value={viewBox}>{props.children}</CartesianLabelContext>;
|
|
117
113
|
}
|
|
118
114
|
|
|
119
115
|
export function useCartesianLabelContext(): Accessor<TrapezoidViewBox | undefined> {
|
|
@@ -145,7 +141,7 @@ export function PolarLabelContextProvider(
|
|
|
145
141
|
endAngle: props.endAngle,
|
|
146
142
|
clockWise: props.clockWise,
|
|
147
143
|
}));
|
|
148
|
-
return <PolarLabelContext
|
|
144
|
+
return <PolarLabelContext value={viewBox}>{props.children}</PolarLabelContext>;
|
|
149
145
|
}
|
|
150
146
|
|
|
151
147
|
export function usePolarLabelContext(): Accessor<PolarViewBoxRequired | undefined> {
|
|
@@ -227,7 +223,7 @@ const getDeltaAngle = (startAngle: number, endAngle: number): number => {
|
|
|
227
223
|
* @consumes CartesianLabelContext
|
|
228
224
|
*/
|
|
229
225
|
export function Label(outerProps: Props): JSX.Element {
|
|
230
|
-
const props =
|
|
226
|
+
const props = merge(defaultLabelProps, outerProps);
|
|
231
227
|
const cartesianViewBox = useCartesianLabelContext();
|
|
232
228
|
const polarLabelContext = usePolarLabelContext();
|
|
233
229
|
const generatedRadialPathId = useUniqueId("recharts-radial-line");
|
|
@@ -256,7 +252,8 @@ export function Label(outerProps: Props): JSX.Element {
|
|
|
256
252
|
|
|
257
253
|
const textSvgProps = createMemo(() =>
|
|
258
254
|
svgPropertiesAndEvents(
|
|
259
|
-
|
|
255
|
+
omit(
|
|
256
|
+
props,
|
|
260
257
|
"content",
|
|
261
258
|
"viewBox",
|
|
262
259
|
"parentViewBox",
|
|
@@ -270,7 +267,7 @@ export function Label(outerProps: Props): JSX.Element {
|
|
|
270
267
|
"index",
|
|
271
268
|
"id",
|
|
272
269
|
"class",
|
|
273
|
-
|
|
270
|
+
),
|
|
274
271
|
),
|
|
275
272
|
);
|
|
276
273
|
|
|
@@ -392,7 +389,7 @@ export function Label(outerProps: Props): JSX.Element {
|
|
|
392
389
|
if (vb == null || typeof content !== "function") {
|
|
393
390
|
return undefined;
|
|
394
391
|
}
|
|
395
|
-
return { content, args:
|
|
392
|
+
return { content, args: omit({ ...props, viewBox: vb }, "content") };
|
|
396
393
|
});
|
|
397
394
|
|
|
398
395
|
// Render the default/polar/radial text labels inline under <Show> (their render
|
|
@@ -444,7 +441,7 @@ export function Label(outerProps: Props): JSX.Element {
|
|
|
444
441
|
<text
|
|
445
442
|
{...textSvgProps()}
|
|
446
443
|
dominant-baseline="central"
|
|
447
|
-
class={["recharts-radial-bar-label", props.class]
|
|
444
|
+
class={["recharts-radial-bar-label", props.class]}
|
|
448
445
|
>
|
|
449
446
|
<defs>
|
|
450
447
|
<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, Show, useContext
|
|
17
|
+
import { createContext, createMemo, For, omit, Show, useContext } from "solid-js";
|
|
18
18
|
import type { Accessor } from "solid-js";
|
|
19
|
-
import type { JSX } from "
|
|
19
|
+
import type { JSX } from "@solidjs/web";
|
|
20
20
|
import {
|
|
21
21
|
type LabelContentType,
|
|
22
22
|
type LabelFormatter,
|
|
@@ -135,9 +135,7 @@ export function CartesianLabelListContextProvider(props: {
|
|
|
135
135
|
children: JSX.Element;
|
|
136
136
|
}): JSX.Element {
|
|
137
137
|
return (
|
|
138
|
-
<CartesianLabelListContext
|
|
139
|
-
{props.children}
|
|
140
|
-
</CartesianLabelListContext.Provider>
|
|
138
|
+
<CartesianLabelListContext value={props.value}>{props.children}</CartesianLabelListContext>
|
|
141
139
|
);
|
|
142
140
|
}
|
|
143
141
|
|
|
@@ -149,11 +147,7 @@ export function PolarLabelListContextProvider(props: {
|
|
|
149
147
|
value: Accessor<ReadonlyArray<PolarLabelListEntry> | undefined>;
|
|
150
148
|
children: JSX.Element;
|
|
151
149
|
}): JSX.Element {
|
|
152
|
-
return
|
|
153
|
-
<PolarLabelListContext.Provider value={props.value}>
|
|
154
|
-
{props.children}
|
|
155
|
-
</PolarLabelListContext.Provider>
|
|
156
|
-
);
|
|
150
|
+
return <PolarLabelListContext value={props.value}>{props.children}</PolarLabelListContext>;
|
|
157
151
|
}
|
|
158
152
|
|
|
159
153
|
/**
|
|
@@ -171,7 +165,8 @@ export function LabelList(props: Props): JSX.Element {
|
|
|
171
165
|
const list = cartesianData?.() ?? polarData?.();
|
|
172
166
|
return list != null && list.length > 0 ? list : undefined;
|
|
173
167
|
});
|
|
174
|
-
const others =
|
|
168
|
+
const others = omit(
|
|
169
|
+
props,
|
|
175
170
|
"valueAccessor",
|
|
176
171
|
"clockWise",
|
|
177
172
|
"dataKey",
|
|
@@ -182,7 +177,7 @@ export function LabelList(props: Props): JSX.Element {
|
|
|
182
177
|
"offset",
|
|
183
178
|
"angle",
|
|
184
179
|
"formatter",
|
|
185
|
-
|
|
180
|
+
);
|
|
186
181
|
|
|
187
182
|
const valueOf = (
|
|
188
183
|
entry: CartesianLabelListEntry | PolarLabelListEntry,
|