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
package/src/component/Legend.tsx
CHANGED
|
@@ -6,9 +6,8 @@
|
|
|
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
|
|
11
|
-
import { DirectPortal } from "../util/DirectPortal";
|
|
9
|
+
import { createEffect, createMemo, merge, Show } from "solid-js";
|
|
10
|
+
import { JSX, Portal } from "@solidjs/web";
|
|
12
11
|
import {
|
|
13
12
|
ContentType,
|
|
14
13
|
DefaultLegendContent,
|
|
@@ -128,7 +127,7 @@ function getDefaultPosition(
|
|
|
128
127
|
}
|
|
129
128
|
|
|
130
129
|
export const Legend = (props: LegendProps): JSX.Element => {
|
|
131
|
-
const merged =
|
|
130
|
+
const merged = merge(legendDefaultProps, props);
|
|
132
131
|
const store = useAppStore();
|
|
133
132
|
const contextPayload = useLegendPayload();
|
|
134
133
|
const legendPortalFromContext = useLegendPortal();
|
|
@@ -139,30 +138,26 @@ export const Legend = (props: LegendProps): JSX.Element => {
|
|
|
139
138
|
|
|
140
139
|
// Push the legend settings into the store (drives the offset's legend space).
|
|
141
140
|
createEffect(
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
(settings)
|
|
150
|
-
|
|
151
|
-
},
|
|
152
|
-
),
|
|
141
|
+
() => ({
|
|
142
|
+
align: merged.align,
|
|
143
|
+
layout: merged.layout,
|
|
144
|
+
verticalAlign: merged.verticalAlign,
|
|
145
|
+
itemSorter: merged.itemSorter,
|
|
146
|
+
}),
|
|
147
|
+
(settings) => {
|
|
148
|
+
store?.actions.legend.setLegendSettings(settings);
|
|
149
|
+
},
|
|
153
150
|
);
|
|
154
151
|
|
|
155
152
|
// Report the measured size; reset to 0 on cleanup. (When a portal is supplied
|
|
156
153
|
// from props, nothing needs the size, matching recharts.)
|
|
157
154
|
createEffect(
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
(
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
},
|
|
165
|
-
),
|
|
155
|
+
() => ({ width: lastBoundingBox().width, height: lastBoundingBox().height }),
|
|
156
|
+
(size) => {
|
|
157
|
+
if (props.portal == null) {
|
|
158
|
+
store?.actions.legend.setLegendSize(size);
|
|
159
|
+
}
|
|
160
|
+
},
|
|
166
161
|
);
|
|
167
162
|
|
|
168
163
|
const portal = (): HTMLElement | null => props.portal ?? legendPortalFromContext();
|
|
@@ -172,7 +167,7 @@ export const Legend = (props: LegendProps): JSX.Element => {
|
|
|
172
167
|
);
|
|
173
168
|
|
|
174
169
|
// Props handed to a function-form `content`. Built as a plain object (spreading
|
|
175
|
-
// the Solid `
|
|
170
|
+
// the Solid `merge()` proxy leaks a MERGE_SOURCE symbol and doesn't materialize
|
|
176
171
|
// keys); reads finalPayload()/chart dims so the enclosing reactive insert re-runs
|
|
177
172
|
// when the payload populates.
|
|
178
173
|
const buildContentProps = (): LegendContentProps => {
|
|
@@ -247,7 +242,7 @@ export const Legend = (props: LegendProps): JSX.Element => {
|
|
|
247
242
|
}
|
|
248
243
|
>
|
|
249
244
|
{(mount) => (
|
|
250
|
-
<
|
|
245
|
+
<Portal mount={mount()}>
|
|
251
246
|
<div class="recharts-legend-wrapper" style={outerStyle()} ref={updateBoundingBox}>
|
|
252
247
|
<Show
|
|
253
248
|
when={typeof merged.content === "function" ? merged.content : null}
|
|
@@ -271,7 +266,7 @@ export const Legend = (props: LegendProps): JSX.Element => {
|
|
|
271
266
|
{(contentFn) => <>{contentFn()(buildContentProps())}</>}
|
|
272
267
|
</Show>
|
|
273
268
|
</div>
|
|
274
|
-
</
|
|
269
|
+
</Portal>
|
|
275
270
|
)}
|
|
276
271
|
</Show>
|
|
277
272
|
);
|
|
@@ -3,19 +3,18 @@
|
|
|
3
3
|
// prop, and two-arg createEffect. Prop deviation: className -> class.
|
|
4
4
|
import {
|
|
5
5
|
Accessor,
|
|
6
|
-
batch,
|
|
7
6
|
createContext,
|
|
7
|
+
createEffect,
|
|
8
8
|
createMemo,
|
|
9
9
|
createSignal,
|
|
10
|
+
flush,
|
|
11
|
+
omit,
|
|
10
12
|
onCleanup,
|
|
11
|
-
|
|
13
|
+
onSettled,
|
|
12
14
|
untrack,
|
|
13
15
|
useContext,
|
|
14
|
-
splitProps,
|
|
15
|
-
createEffect,
|
|
16
|
-
on,
|
|
17
16
|
} from "solid-js";
|
|
18
|
-
import type { JSX } from "
|
|
17
|
+
import type { JSX } from "@solidjs/web";
|
|
19
18
|
import {
|
|
20
19
|
calculateChartDimensions,
|
|
21
20
|
defaultResponsiveContainerProps,
|
|
@@ -94,9 +93,9 @@ function ResponsiveContainerContextProvider(props: {
|
|
|
94
93
|
});
|
|
95
94
|
|
|
96
95
|
return (
|
|
97
|
-
<ResponsiveContainerContext
|
|
96
|
+
<ResponsiveContainerContext value={size}>
|
|
98
97
|
{size() == null ? null : props.children}
|
|
99
|
-
</ResponsiveContainerContext
|
|
98
|
+
</ResponsiveContainerContext>
|
|
100
99
|
);
|
|
101
100
|
}
|
|
102
101
|
|
|
@@ -182,7 +181,8 @@ function SizeDetectorContainer(props: Props): JSX.Element {
|
|
|
182
181
|
// forwarded onto the wrapper div, mirroring recharts' `{...others}` spread.
|
|
183
182
|
// We omit every prop this component consumes itself so they don't leak onto
|
|
184
183
|
// the DOM. (`omit` keeps the rest reactive — no destructuring.)
|
|
185
|
-
const others =
|
|
184
|
+
const others = omit(
|
|
185
|
+
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
|
+
);
|
|
202
202
|
const initialDimension = (): { width: number; height: number } =>
|
|
203
203
|
props.initialDimension ?? defaultResponsiveContainerProps.initialDimension;
|
|
204
204
|
const width = (): Percent | number | undefined => props.width;
|
|
@@ -217,14 +217,13 @@ function SizeDetectorContainer(props: Props): JSX.Element {
|
|
|
217
217
|
if (untrack(containerWidth) === roundedWidth && untrack(containerHeight) === roundedHeight) {
|
|
218
218
|
return;
|
|
219
219
|
}
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
setContainerHeight(roundedHeight);
|
|
223
|
-
});
|
|
220
|
+
setContainerWidth(roundedWidth);
|
|
221
|
+
setContainerHeight(roundedHeight);
|
|
224
222
|
};
|
|
225
223
|
|
|
226
224
|
const setContainerSize = (newWidth: number, newHeight: number): void => {
|
|
227
225
|
writeContainerSize(newWidth, newHeight);
|
|
226
|
+
flush();
|
|
228
227
|
};
|
|
229
228
|
|
|
230
229
|
let containerEl: HTMLDivElement | undefined;
|
|
@@ -241,8 +240,10 @@ function SizeDetectorContainer(props: Props): JSX.Element {
|
|
|
241
240
|
// i.e. AFTER the committed DOM is laid out. The ref callback runs at element
|
|
242
241
|
// creation (possibly before insertion/layout), where getBoundingClientRect()
|
|
243
242
|
// returns 0x0 and a bogus "width(0) and height(0)" warning fires on every
|
|
244
|
-
// mount.
|
|
245
|
-
|
|
243
|
+
// mount. `onSettled` is the post-layout equivalent. The initial measure must
|
|
244
|
+
// not flush (onSettled is a leaf scope); the write propagates at the next
|
|
245
|
+
// flush boundary, matching React's setState-in-effect timing.
|
|
246
|
+
onSettled(() => {
|
|
246
247
|
const el = containerEl;
|
|
247
248
|
if (el == null || typeof ResizeObserver === "undefined") {
|
|
248
249
|
return;
|
|
@@ -291,53 +292,49 @@ function SizeDetectorContainer(props: Props): JSX.Element {
|
|
|
291
292
|
]);
|
|
292
293
|
|
|
293
294
|
createEffect(
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
(aspect)
|
|
297
|
-
|
|
298
|
-
},
|
|
299
|
-
),
|
|
295
|
+
() => props.aspect,
|
|
296
|
+
(aspect) => {
|
|
297
|
+
warn(!aspect || aspect > 0, "The aspect(%s) must be greater than zero.", aspect);
|
|
298
|
+
},
|
|
300
299
|
);
|
|
301
300
|
|
|
302
301
|
createEffect(
|
|
303
|
-
|
|
304
|
-
()
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
(
|
|
316
|
-
|
|
317
|
-
value.
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
`The width(%s) and height(%s) of chart should be greater than 0,
|
|
302
|
+
() => ({
|
|
303
|
+
containerWidth: containerWidth(),
|
|
304
|
+
containerHeight: containerHeight(),
|
|
305
|
+
calculatedWidth: calculated().calculatedWidth,
|
|
306
|
+
calculatedHeight: calculated().calculatedHeight,
|
|
307
|
+
width: width(),
|
|
308
|
+
height: height(),
|
|
309
|
+
minWidth: minWidth(),
|
|
310
|
+
minHeight: props.minHeight,
|
|
311
|
+
aspect: props.aspect,
|
|
312
|
+
}),
|
|
313
|
+
(value) => {
|
|
314
|
+
warn(
|
|
315
|
+
value.containerWidth < 0 ||
|
|
316
|
+
value.containerHeight < 0 ||
|
|
317
|
+
(value.calculatedWidth != null && value.calculatedWidth > 0) ||
|
|
318
|
+
(value.calculatedHeight != null && value.calculatedHeight > 0),
|
|
319
|
+
`The width(%s) and height(%s) of chart should be greater than 0,
|
|
322
320
|
please check the style of container, or the props width(%s) and height(%s),
|
|
323
321
|
or add a minWidth(%s) or minHeight(%s) or use aspect(%s) to control the
|
|
324
322
|
height and width.`,
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
),
|
|
323
|
+
value.calculatedWidth,
|
|
324
|
+
value.calculatedHeight,
|
|
325
|
+
value.width,
|
|
326
|
+
value.height,
|
|
327
|
+
value.minWidth,
|
|
328
|
+
value.minHeight,
|
|
329
|
+
value.aspect,
|
|
330
|
+
);
|
|
331
|
+
},
|
|
335
332
|
);
|
|
336
333
|
|
|
337
334
|
return (
|
|
338
335
|
<div
|
|
339
336
|
id={props.id ? `${props.id}` : undefined}
|
|
340
|
-
class={["recharts-responsive-container", props.class]
|
|
337
|
+
class={["recharts-responsive-container", props.class]}
|
|
341
338
|
style={wrapperStyle()}
|
|
342
339
|
ref={setRef}
|
|
343
340
|
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, merge, omit, Show } from "solid-js";
|
|
12
|
+
import type { JSX } from "@solidjs/web";
|
|
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 = merge(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 = omit(merged, ...HANDLED_KEYS);
|
|
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]}
|
|
422
422
|
text-anchor={g().textAnchor}
|
|
423
423
|
fill={g().fill}
|
|
424
424
|
>
|
|
@@ -9,9 +9,8 @@
|
|
|
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
|
|
14
|
-
import { DirectPortal } from "../util/DirectPortal";
|
|
12
|
+
import { createEffect, createMemo, merge, Show } from "solid-js";
|
|
13
|
+
import { JSX, Portal } from "@solidjs/web";
|
|
15
14
|
import {
|
|
16
15
|
DefaultTooltipContent,
|
|
17
16
|
Formatter,
|
|
@@ -149,7 +148,7 @@ function renderContent(content: ContentType | undefined, props: TooltipContentPr
|
|
|
149
148
|
* interaction or, before any interaction, from `defaultIndex`.
|
|
150
149
|
*/
|
|
151
150
|
export const Tooltip = (props: TooltipProps): JSX.Element => {
|
|
152
|
-
const merged =
|
|
151
|
+
const merged = merge(defaultTooltipProps, props);
|
|
153
152
|
const store = useAppStore();
|
|
154
153
|
const viewBox = useViewBox();
|
|
155
154
|
const accessibilityLayer = useAccessibilityLayer();
|
|
@@ -159,7 +158,7 @@ export const Tooltip = (props: TooltipProps): JSX.Element => {
|
|
|
159
158
|
const defaultIndexAsString = (): TooltipIndex | undefined =>
|
|
160
159
|
typeof merged.defaultIndex === "number" ? String(merged.defaultIndex) : merged.defaultIndex;
|
|
161
160
|
|
|
162
|
-
//
|
|
161
|
+
// merge() keeps an explicit `trigger={undefined}` as undefined (unlike React's
|
|
163
162
|
// resolveDefaultProps, which would apply the default). The interaction selectors
|
|
164
163
|
// gate on `trigger === "hover"`, so resolve the default explicitly.
|
|
165
164
|
const resolvedTrigger = (): TooltipTrigger => merged.trigger ?? defaultTooltipProps.trigger;
|
|
@@ -167,18 +166,16 @@ export const Tooltip = (props: TooltipProps): JSX.Element => {
|
|
|
167
166
|
// Push the Tooltip's settings into the store so the interaction selectors can
|
|
168
167
|
// read shared/trigger/axisId/active/defaultIndex.
|
|
169
168
|
createEffect(
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
(settings)
|
|
179
|
-
|
|
180
|
-
},
|
|
181
|
-
),
|
|
169
|
+
() => ({
|
|
170
|
+
shared: merged.shared,
|
|
171
|
+
trigger: resolvedTrigger(),
|
|
172
|
+
axisId: merged.axisId,
|
|
173
|
+
active: merged.active,
|
|
174
|
+
defaultIndex: defaultIndexAsString(),
|
|
175
|
+
}),
|
|
176
|
+
(settings) => {
|
|
177
|
+
store?.actions.tooltip.setTooltipSettingsState(settings);
|
|
178
|
+
},
|
|
182
179
|
);
|
|
183
180
|
|
|
184
181
|
const tooltipEventType = useAppSelector((state) => selectTooltipEventType(state, merged.shared));
|
|
@@ -247,7 +244,7 @@ export const Tooltip = (props: TooltipProps): JSX.Element => {
|
|
|
247
244
|
</Show>
|
|
248
245
|
<Show when={viewBox() && tooltipEventType() && portal()}>
|
|
249
246
|
{(mount) => {
|
|
250
|
-
// Built as a plain object (spreading the Solid
|
|
247
|
+
// Built as a plain object (spreading the Solid merge() proxy leaks a
|
|
251
248
|
// MERGE_SOURCE symbol into the bag handed to a function-form `content`).
|
|
252
249
|
const contentProps = (): TooltipContentProps => ({
|
|
253
250
|
accessibilityLayer: accessibilityLayer(),
|
|
@@ -265,7 +262,7 @@ export const Tooltip = (props: TooltipProps): JSX.Element => {
|
|
|
265
262
|
formatter: merged.formatter,
|
|
266
263
|
includeHidden: merged.includeHidden,
|
|
267
264
|
isAnimationActive: merged.isAnimationActive,
|
|
268
|
-
//
|
|
265
|
+
// merge() leaves explicit `undefined`; React defaultProps would still apply defaults.
|
|
269
266
|
itemSorter: props.itemSorter ?? defaultTooltipProps.itemSorter,
|
|
270
267
|
itemStyle: merged.itemStyle,
|
|
271
268
|
label: finalLabel(),
|
|
@@ -282,7 +279,7 @@ export const Tooltip = (props: TooltipProps): JSX.Element => {
|
|
|
282
279
|
wrapperStyle: merged.wrapperStyle,
|
|
283
280
|
});
|
|
284
281
|
return (
|
|
285
|
-
<
|
|
282
|
+
<Portal mount={mount()}>
|
|
286
283
|
<TooltipBoundingBox
|
|
287
284
|
allowEscapeViewBox={merged.allowEscapeViewBox}
|
|
288
285
|
animationDuration={merged.animationDuration}
|
|
@@ -303,7 +300,7 @@ export const Tooltip = (props: TooltipProps): JSX.Element => {
|
|
|
303
300
|
>
|
|
304
301
|
{renderContent(merged.content, contentProps())}
|
|
305
302
|
</TooltipBoundingBox>
|
|
306
|
-
</
|
|
303
|
+
</Portal>
|
|
307
304
|
);
|
|
308
305
|
}}
|
|
309
306
|
</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 onSettled (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 { createEffect, createSignal, onSettled } from "solid-js";
|
|
11
|
+
import type { JSX } from "@solidjs/web";
|
|
12
12
|
import {
|
|
13
13
|
AllowInDimension,
|
|
14
14
|
AnimationDuration,
|
|
@@ -77,33 +77,31 @@ export const TooltipBoundingBox = (props: TooltipBoundingBoxProps): JSX.Element
|
|
|
77
77
|
y: props.coordinate?.y ?? 0,
|
|
78
78
|
});
|
|
79
79
|
|
|
80
|
-
|
|
80
|
+
onSettled(() => {
|
|
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
|
+
return () => {
|
|
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
|
-
|
|
105
|
-
},
|
|
106
|
-
),
|
|
96
|
+
() => ({ coord: coordinate(), st: state() }),
|
|
97
|
+
({ coord, st }) => {
|
|
98
|
+
if (
|
|
99
|
+
st.dismissed &&
|
|
100
|
+
(coord.x !== st.dismissedAtCoordinate.x || coord.y !== st.dismissedAtCoordinate.y)
|
|
101
|
+
) {
|
|
102
|
+
setState({ ...st, dismissed: false });
|
|
103
|
+
}
|
|
104
|
+
},
|
|
107
105
|
);
|
|
108
106
|
|
|
109
107
|
const translate = (): { cssProperties: JSX.CSSProperties; cssClasses: string } =>
|
|
@@ -147,7 +145,7 @@ export const TooltipBoundingBox = (props: TooltipBoundingBoxProps): JSX.Element
|
|
|
147
145
|
};
|
|
148
146
|
|
|
149
147
|
return (
|
|
150
|
-
<div
|
|
148
|
+
<div tabindex={-1} class={translate().cssClasses} style={outerStyle()} ref={props.innerRef}>
|
|
151
149
|
{props.children}
|
|
152
150
|
</div>
|
|
153
151
|
);
|
|
@@ -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 "@solidjs/web";
|
|
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 "@solidjs/web";
|
|
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
|
|
27
|
+
<ClipPathIdContext 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>
|
|
35
35
|
)}
|
|
36
36
|
</Show>
|
|
37
37
|
);
|
package/src/container/Layer.tsx
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
import { splitProps } from "solid-js";
|
|
2
1
|
// Ported from recharts 3.8.1 src/container/Layer.tsx (commit 7a23854).
|
|
3
2
|
// Solid deviations: `className` → `class` (Omit the wide SVG `class`); `clsx` →
|
|
4
|
-
// `class={[...]
|
|
3
|
+
// `class={[...]}`; `forwardRef` → `ref` prop; no destructuring (omit + props).
|
|
5
4
|
import { type CamelSvgProps } from "../util/svgPropertiesNoEvents";
|
|
6
|
-
import
|
|
5
|
+
import { omit } from "solid-js";
|
|
6
|
+
import type { JSX } from "@solidjs/web";
|
|
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]}
|
|
32
|
+
{...svgPropertiesAndEvents({ ...omit(props, "class", "children", "ref") })}
|
|
33
33
|
ref={props.ref}
|
|
34
34
|
>
|
|
35
35
|
{props.children}
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
// hooks return Accessors → call them; `return null` → keyed `<Show>` (which also
|
|
5
5
|
// narrows width/height to numbers without a non-null `!`).
|
|
6
6
|
import { Show } from "solid-js";
|
|
7
|
-
import type { JSX } from "
|
|
7
|
+
import type { JSX } from "@solidjs/web";
|
|
8
8
|
import { useChartHeight, useChartWidth } from "../context/chartLayoutContext";
|
|
9
9
|
import { useAccessibilityLayer } from "../context/accessibilityContext";
|
|
10
10
|
import { useIsPanorama } from "../context/PanoramaContext";
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import { splitProps } from "solid-js";
|
|
2
1
|
import { type CamelSvgProps } from "../util/svgPropertiesNoEvents";
|
|
3
2
|
import { svgPropertiesAndEvents } from "../util/svgPropertiesAndEvents";
|
|
4
|
-
import
|
|
3
|
+
import { omit } from "solid-js";
|
|
4
|
+
import type { JSX } from "@solidjs/web";
|
|
5
5
|
|
|
6
6
|
export interface CartesianViewBox {
|
|
7
7
|
x?: number;
|
|
@@ -37,7 +37,8 @@ export type SurfaceProps = Omit<
|
|
|
37
37
|
*/
|
|
38
38
|
export const Surface = (props: SurfaceProps) => {
|
|
39
39
|
const svgView = () => props.viewBox ?? { width: props.width, height: props.height, x: 0, y: 0 };
|
|
40
|
-
const rest =
|
|
40
|
+
const rest = omit(
|
|
41
|
+
props,
|
|
41
42
|
"children",
|
|
42
43
|
"width",
|
|
43
44
|
"height",
|
|
@@ -47,14 +48,14 @@ export const Surface = (props: SurfaceProps) => {
|
|
|
47
48
|
"title",
|
|
48
49
|
"desc",
|
|
49
50
|
"ref",
|
|
50
|
-
|
|
51
|
+
);
|
|
51
52
|
|
|
52
53
|
// Parity with recharts Surface: the passthrough props go through the SVG
|
|
53
54
|
// filter (camelCase props → DOM attribute names), not a verbatim spread.
|
|
54
55
|
return (
|
|
55
56
|
<svg
|
|
56
57
|
{...svgPropertiesAndEvents({ ...rest })}
|
|
57
|
-
class={["recharts-surface", props.class]
|
|
58
|
+
class={["recharts-surface", props.class]}
|
|
58
59
|
width={props.width}
|
|
59
60
|
height={props.height}
|
|
60
61
|
style={props.style}
|
|
@@ -9,7 +9,7 @@
|
|
|
9
9
|
// cleanup remove → createEffect + onCleanup. useGraphicalItemId provides the id.
|
|
10
10
|
import { createContext, useContext } from "solid-js";
|
|
11
11
|
import type { Accessor } from "solid-js";
|
|
12
|
-
import type { JSX } from "
|
|
12
|
+
import type { JSX } from "@solidjs/web";
|
|
13
13
|
import { AxisId } from "../state/cartesianAxisSlice";
|
|
14
14
|
import type { ErrorBarDataPointFormatter } from "../cartesian/ErrorBar";
|
|
15
15
|
import type { ErrorBarsSettings } from "../state/errorBarSlice";
|
|
@@ -45,7 +45,7 @@ export function SetErrorBarContext(
|
|
|
45
45
|
dataPointFormatter: props.dataPointFormatter,
|
|
46
46
|
errorBarOffset: props.errorBarOffset,
|
|
47
47
|
});
|
|
48
|
-
return <ErrorBarContext
|
|
48
|
+
return <ErrorBarContext value={value}>{props.children}</ErrorBarContext>;
|
|
49
49
|
}
|
|
50
50
|
|
|
51
51
|
export const useErrorBarContext = (): Accessor<ErrorBarContextValue> => useContext(ErrorBarContext);
|
|
@@ -2,12 +2,12 @@
|
|
|
2
2
|
// Context-value-is-provider in Solid 2.0; default `null` (a real value) so
|
|
3
3
|
// `useContext` returns it without throwing outside a provider.
|
|
4
4
|
import { createContext, useContext } from "solid-js";
|
|
5
|
-
import type { JSX } from "
|
|
5
|
+
import type { JSX } from "@solidjs/web";
|
|
6
6
|
|
|
7
7
|
const PanoramaContext = createContext<boolean | null>(null);
|
|
8
8
|
|
|
9
9
|
export const useIsPanorama = (): boolean => useContext(PanoramaContext) != null;
|
|
10
10
|
|
|
11
11
|
export const PanoramaContextProvider = (props: { children: JSX.Element }): JSX.Element => (
|
|
12
|
-
<PanoramaContext
|
|
12
|
+
<PanoramaContext value={true}>{props.children}</PanoramaContext>
|
|
13
13
|
);
|
|
@@ -8,7 +8,7 @@
|
|
|
8
8
|
// Not yet adopted by <Line> (which currently generates its own id inline); this
|
|
9
9
|
// is the shared primitive for graphical items (Line/Bar/Area/Scatter) to use.
|
|
10
10
|
import { createContext, useContext } from "solid-js";
|
|
11
|
-
import type { JSX } from "
|
|
11
|
+
import type { JSX } from "@solidjs/web";
|
|
12
12
|
import { useUniqueId } from "../util/useUniqueId";
|
|
13
13
|
import { GraphicalItemId } from "../state/graphicalItemsSlice";
|
|
14
14
|
|
|
@@ -32,9 +32,7 @@ const GraphicalItemIdContext = createContext<GraphicalItemId | null>(null);
|
|
|
32
32
|
export const RegisterGraphicalItemId = (props: IdSetter): JSX.Element => {
|
|
33
33
|
const resolvedId = useUniqueId(`recharts-${props.type}`, props.id);
|
|
34
34
|
return (
|
|
35
|
-
<GraphicalItemIdContext
|
|
36
|
-
{props.children(resolvedId)}
|
|
37
|
-
</GraphicalItemIdContext.Provider>
|
|
35
|
+
<GraphicalItemIdContext value={resolvedId}>{props.children(resolvedId)}</GraphicalItemIdContext>
|
|
38
36
|
);
|
|
39
37
|
};
|
|
40
38
|
|