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
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
import { describe, expect, it } from "vitest";
|
|
2
|
+
import { Pie, PieChart } from "../../../src";
|
|
3
|
+
import { render } from "@solidjs/testing-library";
|
|
4
|
+
|
|
5
|
+
type ExampleDataPoint = {
|
|
6
|
+
value: number;
|
|
7
|
+
name: string;
|
|
8
|
+
};
|
|
9
|
+
|
|
10
|
+
const data: ReadonlyArray<ExampleDataPoint> = [
|
|
11
|
+
{ value: 100, name: "a" },
|
|
12
|
+
{ value: 80, name: "b" },
|
|
13
|
+
{ value: 60, name: "c" },
|
|
14
|
+
{ value: 40, name: "d" },
|
|
15
|
+
{ value: 20, name: "e" },
|
|
16
|
+
];
|
|
17
|
+
|
|
18
|
+
describe("Pie with strong typing", () => {
|
|
19
|
+
describe("with all implicit types", () => {
|
|
20
|
+
it("should render Pie with correct data and correct dataKey", () => {
|
|
21
|
+
const { container } = render(() => (
|
|
22
|
+
<PieChart width={400} height={400}>
|
|
23
|
+
<Pie data={data} dataKey="value" isAnimationActive={false} />
|
|
24
|
+
</PieChart>
|
|
25
|
+
));
|
|
26
|
+
expect(container.querySelectorAll(".recharts-sector")).toHaveLength(data.length);
|
|
27
|
+
});
|
|
28
|
+
|
|
29
|
+
it("should allow incorrect or non-existent dataKeys in implicit mode", () => {
|
|
30
|
+
render(() => (
|
|
31
|
+
<PieChart width={400} height={400}>
|
|
32
|
+
<Pie data={data} dataKey="name" isAnimationActive={false} />
|
|
33
|
+
<Pie data={data} dataKey="foo" isAnimationActive={false} />
|
|
34
|
+
</PieChart>
|
|
35
|
+
));
|
|
36
|
+
});
|
|
37
|
+
});
|
|
38
|
+
|
|
39
|
+
describe("with explicit Pie type parameters", () => {
|
|
40
|
+
it("should allow correct dataKey when typed explicitly", () => {
|
|
41
|
+
render(() => (
|
|
42
|
+
<PieChart width={400} height={400}>
|
|
43
|
+
<Pie<ExampleDataPoint> data={data} dataKey="value" isAnimationActive={false} />
|
|
44
|
+
<Pie<ExampleDataPoint>
|
|
45
|
+
data={data}
|
|
46
|
+
dataKey={(entry: ExampleDataPoint) => entry.value}
|
|
47
|
+
isAnimationActive={false}
|
|
48
|
+
/>
|
|
49
|
+
</PieChart>
|
|
50
|
+
));
|
|
51
|
+
});
|
|
52
|
+
|
|
53
|
+
it("should show errors when dataKey does not match explicit typing", () => {
|
|
54
|
+
render(() => (
|
|
55
|
+
<PieChart width={400} height={400}>
|
|
56
|
+
{/* @ts-expect-error TypeScript is correct here - the dataKey does not match and this should be an error */}
|
|
57
|
+
<Pie<ExampleDataPoint, number> data={data} dataKey="name" isAnimationActive={false} />
|
|
58
|
+
<Pie<ExampleDataPoint, number>
|
|
59
|
+
data={data}
|
|
60
|
+
/* @ts-expect-error TypeScript is correct here - the dataKey return type does not match and this should be an error */
|
|
61
|
+
dataKey={(entry: ExampleDataPoint) => entry.name}
|
|
62
|
+
isAnimationActive={false}
|
|
63
|
+
/>
|
|
64
|
+
</PieChart>
|
|
65
|
+
));
|
|
66
|
+
});
|
|
67
|
+
});
|
|
68
|
+
});
|
|
69
|
+
|
|
70
|
+
/*
|
|
71
|
+
* PERMANENT-N/A — vendored `Pie event handlers > getRelativeCoordinate` case.
|
|
72
|
+
* It asserts the handler `event` type is accepted by `getRelativeCoordinate`.
|
|
73
|
+
* In recharts the handler `e` is a React SyntheticEvent whose `currentTarget` is
|
|
74
|
+
* non-null (matching getRelativeCoordinate's `MousePointer`/`TouchPointer`). The
|
|
75
|
+
* Solid port wires native DOM events, whose `currentTarget` is `EventTarget | null`
|
|
76
|
+
* and so is NOT assignable to those pointer types without an unsafe cast (forbidden
|
|
77
|
+
* in src). The event models differ, so there is no faithful Solid equivalent.
|
|
78
|
+
*/
|
|
@@ -0,0 +1,529 @@
|
|
|
1
|
+
// Subset port of recharts 3.9.0 test/polar/Pie/Pie.animation.spec.tsx. Proves the
|
|
2
|
+
// wired Pie ENTER animation on the NEW v3.9 engine (AnimatedItems +
|
|
3
|
+
// AnimationController): sectors grow from a collapsed (zero-sweep) state at t=0 to
|
|
4
|
+
// their byte-identical final geometry at t=1, driven deterministically by the
|
|
5
|
+
// MockControllerAnimationManager (injected via AnimationControllerProvider). Pie's
|
|
6
|
+
// default isAnimationActive is "auto" (≈ active).
|
|
7
|
+
//
|
|
8
|
+
// v3.9 GOTCHA: the new JavascriptAnimation state machine calls onAnimationStart
|
|
9
|
+
// SYNCHRONOUSLY in its constructor (on first render), not lazily when the first
|
|
10
|
+
// frame ticks — so `onAnimationStart` is already called once right after render
|
|
11
|
+
// (matching recharts 3.9 Pie.animation.spec).
|
|
12
|
+
import { describe, expect, it, vi } from "vitest";
|
|
13
|
+
import { createSignal, flush, Show } from "solid-js";
|
|
14
|
+
import { render, fireEvent } from "@solidjs/testing-library";
|
|
15
|
+
import { PieChart, Pie } from "../../src";
|
|
16
|
+
import { expectPieSectors } from "../helper/expectPieSectors";
|
|
17
|
+
import { AnimationControllerProvider } from "../../src/animation/useAnimationController";
|
|
18
|
+
import { MockControllerAnimationManager as MockProgressAnimationManager } from "../animation/mockControllerAnimationManager";
|
|
19
|
+
import { expectAnimatedPieAngles } from "../helper/expectAnimatedPieAngles";
|
|
20
|
+
import { expectAnimatedPiePaths } from "../helper/expectAnimatedPiePaths";
|
|
21
|
+
import { PageData } from "../_data";
|
|
22
|
+
|
|
23
|
+
const smallerData = PageData.slice(0, 3);
|
|
24
|
+
|
|
25
|
+
const SECTOR_SELECTOR = ".recharts-pie-sector path.recharts-sector";
|
|
26
|
+
|
|
27
|
+
// Same golden as PieChart.spec (cx 255 = props 250 + margin-left 5).
|
|
28
|
+
const pageDataSectorPaths = [
|
|
29
|
+
"M 455,255 A 200,200,0, 0,0, 267.6184,55.3985 L 255,255 Z",
|
|
30
|
+
"M 267.6184,55.3985 A 200,200,0, 0,0, 79.7896,158.5566 L 255,255 Z",
|
|
31
|
+
"M 79.7896,158.5566 A 200,200,0, 0,0, 93.1078,372.4347 L 255,255 Z",
|
|
32
|
+
"M 93.1078,372.4347 A 200,200,0, 0,0, 217.3458,451.4234 L 255,255 Z",
|
|
33
|
+
"M 217.3458,451.4234 A 200,200,0, 0,0, 406.3627,385.7261 L 255,255 Z",
|
|
34
|
+
"M 406.3627,385.7261 A 200,200,0, 0,0, 455,255.0003 L 255,255 Z",
|
|
35
|
+
];
|
|
36
|
+
|
|
37
|
+
function trim(s: string | null): string {
|
|
38
|
+
return (s ?? "").replace(/\s+/g, " ").trim();
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
describe("Pie animation", () => {
|
|
42
|
+
it("grows the sectors from collapsed (t=0) to the final geometry (t=1)", async () => {
|
|
43
|
+
const manager = new MockProgressAnimationManager("pie-anim");
|
|
44
|
+
const { container } = render(() => (
|
|
45
|
+
<AnimationControllerProvider value={manager.factory}>
|
|
46
|
+
<PieChart width={500} height={500}>
|
|
47
|
+
<Pie cx={250} cy={250} innerRadius={0} outerRadius={200} data={PageData} dataKey="uv" />
|
|
48
|
+
</PieChart>
|
|
49
|
+
</AnimationControllerProvider>
|
|
50
|
+
));
|
|
51
|
+
flush();
|
|
52
|
+
|
|
53
|
+
// t=0: every sector has zero sweep (start === end) → no sector path renders.
|
|
54
|
+
expect(container.querySelectorAll(SECTOR_SELECTOR)).toHaveLength(0);
|
|
55
|
+
|
|
56
|
+
// Drive to completion → t=1 → full, byte-identical sectors.
|
|
57
|
+
await manager.completeAnimation();
|
|
58
|
+
flush();
|
|
59
|
+
|
|
60
|
+
const sectors = container.querySelectorAll(SECTOR_SELECTOR);
|
|
61
|
+
expect(sectors).toHaveLength(PageData.length);
|
|
62
|
+
expect([...sectors].map((s) => trim(s.getAttribute("d")))).toEqual(pageDataSectorPaths);
|
|
63
|
+
});
|
|
64
|
+
|
|
65
|
+
it("renders the final frame immediately when isAnimationActive is false", () => {
|
|
66
|
+
const { container } = render(() => (
|
|
67
|
+
<PieChart width={500} height={500}>
|
|
68
|
+
<Pie
|
|
69
|
+
isAnimationActive={false}
|
|
70
|
+
cx={250}
|
|
71
|
+
cy={250}
|
|
72
|
+
innerRadius={0}
|
|
73
|
+
outerRadius={200}
|
|
74
|
+
data={PageData}
|
|
75
|
+
dataKey="uv"
|
|
76
|
+
/>
|
|
77
|
+
</PieChart>
|
|
78
|
+
));
|
|
79
|
+
flush();
|
|
80
|
+
|
|
81
|
+
expect(container.querySelectorAll(SECTOR_SELECTOR)).toHaveLength(PageData.length);
|
|
82
|
+
});
|
|
83
|
+
|
|
84
|
+
describe("with isAnimationActive=false", () => {
|
|
85
|
+
it("should render sectors without animation and not call the animation callbacks", () => {
|
|
86
|
+
const onAnimationStart = vi.fn();
|
|
87
|
+
const onAnimationEnd = vi.fn();
|
|
88
|
+
const { container } = render(() => (
|
|
89
|
+
<PieChart width={100} height={100}>
|
|
90
|
+
<Pie
|
|
91
|
+
data={smallerData}
|
|
92
|
+
dataKey="amt"
|
|
93
|
+
isAnimationActive={false}
|
|
94
|
+
onAnimationStart={onAnimationStart}
|
|
95
|
+
onAnimationEnd={onAnimationEnd}
|
|
96
|
+
/>
|
|
97
|
+
</PieChart>
|
|
98
|
+
));
|
|
99
|
+
flush();
|
|
100
|
+
|
|
101
|
+
expect(container.querySelectorAll(SECTOR_SELECTOR)).toHaveLength(smallerData.length);
|
|
102
|
+
expect(onAnimationStart).not.toHaveBeenCalled();
|
|
103
|
+
expect(onAnimationEnd).not.toHaveBeenCalled();
|
|
104
|
+
});
|
|
105
|
+
});
|
|
106
|
+
|
|
107
|
+
describe("initial animation callbacks", () => {
|
|
108
|
+
it("should call onAnimationStart when the animation begins and onAnimationEnd when it ends", async () => {
|
|
109
|
+
const onAnimationStart = vi.fn();
|
|
110
|
+
const onAnimationEnd = vi.fn();
|
|
111
|
+
const manager = new MockProgressAnimationManager("pie-cb");
|
|
112
|
+
render(() => (
|
|
113
|
+
<AnimationControllerProvider value={manager.factory}>
|
|
114
|
+
<PieChart width={100} height={100}>
|
|
115
|
+
<Pie
|
|
116
|
+
data={smallerData}
|
|
117
|
+
dataKey="amt"
|
|
118
|
+
isAnimationActive
|
|
119
|
+
onAnimationStart={onAnimationStart}
|
|
120
|
+
onAnimationEnd={onAnimationEnd}
|
|
121
|
+
/>
|
|
122
|
+
</PieChart>
|
|
123
|
+
</AnimationControllerProvider>
|
|
124
|
+
));
|
|
125
|
+
flush();
|
|
126
|
+
|
|
127
|
+
// v3.9 engine: JavascriptAnimation calls onAnimationStart synchronously in its
|
|
128
|
+
// constructor (on render), so it has already fired once here.
|
|
129
|
+
expect(onAnimationStart).toHaveBeenCalledTimes(1);
|
|
130
|
+
expect(onAnimationEnd).not.toHaveBeenCalled();
|
|
131
|
+
|
|
132
|
+
await manager.setAnimationProgress(0.1);
|
|
133
|
+
flush();
|
|
134
|
+
expect(onAnimationStart).toHaveBeenCalledTimes(1);
|
|
135
|
+
expect(onAnimationEnd).not.toHaveBeenCalled();
|
|
136
|
+
|
|
137
|
+
await manager.completeAnimation();
|
|
138
|
+
flush();
|
|
139
|
+
expect(onAnimationStart).toHaveBeenCalledTimes(1);
|
|
140
|
+
expect(onAnimationEnd).toHaveBeenCalledTimes(1);
|
|
141
|
+
});
|
|
142
|
+
});
|
|
143
|
+
|
|
144
|
+
describe("initial animation with simple props", () => {
|
|
145
|
+
function renderTestCase(): {
|
|
146
|
+
container: Element;
|
|
147
|
+
animationManager: MockProgressAnimationManager;
|
|
148
|
+
} {
|
|
149
|
+
const manager = new MockProgressAnimationManager("pie-angles");
|
|
150
|
+
const { container } = render(() => (
|
|
151
|
+
<AnimationControllerProvider value={manager.factory}>
|
|
152
|
+
<PieChart width={100} height={100}>
|
|
153
|
+
<Pie data={smallerData} dataKey="amt" isAnimationActive />
|
|
154
|
+
</PieChart>
|
|
155
|
+
</AnimationControllerProvider>
|
|
156
|
+
));
|
|
157
|
+
flush();
|
|
158
|
+
return { container, animationManager: manager };
|
|
159
|
+
}
|
|
160
|
+
|
|
161
|
+
it("should render sectors with animation", async () => {
|
|
162
|
+
const { container, animationManager } = renderTestCase();
|
|
163
|
+
|
|
164
|
+
const pathDs = await expectAnimatedPiePaths(container, animationManager, 5);
|
|
165
|
+
expect(pathDs).toEqual([
|
|
166
|
+
[
|
|
167
|
+
"M 86,50 A 36,36,0, 0,0, 69.7423,19.8961 L 50,50 Z",
|
|
168
|
+
"M 69.7423,19.8961 A 36,36,0, 0,0, 35.6532,16.9823 L 50,50 Z",
|
|
169
|
+
"M 35.6532,16.9823 A 36,36,0, 0,0, 14.5223,43.8902 L 50,50 Z",
|
|
170
|
+
],
|
|
171
|
+
[
|
|
172
|
+
"M 86,50 A 36,36,0, 0,0, 49.2784,14.0072 L 50,50 Z",
|
|
173
|
+
"M 49.2784,14.0072 A 36,36,0, 0,0, 14.0289,51.443 L 50,50 Z",
|
|
174
|
+
"M 14.0289,51.443 A 36,36,0, 0,0, 52.1638,85.9349 L 50,50 Z",
|
|
175
|
+
],
|
|
176
|
+
[
|
|
177
|
+
"M 86,50 A 36,36,0, 0,0, 38.1402,16.0096 L 50,50 Z",
|
|
178
|
+
"M 38.1402,16.0096 A 36,36,0, 0,0, 21.8141,72.3955 L 50,50 Z",
|
|
179
|
+
"M 21.8141,72.3955 A 36,36,0, 0,0, 80.4308,69.2345 L 50,50 Z",
|
|
180
|
+
],
|
|
181
|
+
[
|
|
182
|
+
"M 86,50 A 36,36,0, 0,0, 33.2853,18.1156 L 50,50 Z",
|
|
183
|
+
"M 33.2853,18.1156 A 36,36,0, 0,0, 29.5212,79.6078 L 50,50 Z",
|
|
184
|
+
"M 29.5212,79.6078 A 36,36,0, 0,0, 85.7312,54.3908 L 50,50 Z",
|
|
185
|
+
],
|
|
186
|
+
[
|
|
187
|
+
"M 86,50 A 36,36,0, 0,0, 32,18.8231 L 50,50 Z",
|
|
188
|
+
"M 32,18.8231 A 36,36,0, 0,0, 32,81.1769 L 50,50 Z",
|
|
189
|
+
"M 32,81.1769 A 36,36,0, 0,0, 86,50 L 50,50 Z",
|
|
190
|
+
],
|
|
191
|
+
]);
|
|
192
|
+
});
|
|
193
|
+
|
|
194
|
+
it("should render sectors with animated angles", async () => {
|
|
195
|
+
const { container, animationManager } = renderTestCase();
|
|
196
|
+
|
|
197
|
+
const angles = await expectAnimatedPieAngles(container, animationManager, 4);
|
|
198
|
+
expect(angles).toEqual([
|
|
199
|
+
[
|
|
200
|
+
{ endAngle: 67.2973, startAngle: 0 },
|
|
201
|
+
{ endAngle: 134.5946, startAngle: 67.2973 },
|
|
202
|
+
{ endAngle: 201.8918, startAngle: 134.5946 },
|
|
203
|
+
],
|
|
204
|
+
[
|
|
205
|
+
{ endAngle: 101.7302, startAngle: 0 },
|
|
206
|
+
{ endAngle: 203.4603, startAngle: 101.7302 },
|
|
207
|
+
{ endAngle: 305.1906, startAngle: 203.4603 },
|
|
208
|
+
],
|
|
209
|
+
[
|
|
210
|
+
{ endAngle: 116.2289, startAngle: 0 },
|
|
211
|
+
{ endAngle: 232.4579, startAngle: 116.2289 },
|
|
212
|
+
{ endAngle: 348.6866, startAngle: 232.4579 },
|
|
213
|
+
],
|
|
214
|
+
[
|
|
215
|
+
{ endAngle: 120, startAngle: 0 },
|
|
216
|
+
{ endAngle: 240, startAngle: 120 },
|
|
217
|
+
{ endAngle: 0, startAngle: 240 },
|
|
218
|
+
],
|
|
219
|
+
]);
|
|
220
|
+
});
|
|
221
|
+
});
|
|
222
|
+
|
|
223
|
+
describe("when changing dataKey prop", () => {
|
|
224
|
+
function renderTestCase(): {
|
|
225
|
+
container: Element;
|
|
226
|
+
animationManager: MockProgressAnimationManager;
|
|
227
|
+
changeDataKey: () => void;
|
|
228
|
+
} {
|
|
229
|
+
const manager = new MockProgressAnimationManager("pie-datakey");
|
|
230
|
+
const [dataKey, setDataKey] = createSignal("amt");
|
|
231
|
+
const { container } = render(() => (
|
|
232
|
+
<AnimationControllerProvider value={manager.factory}>
|
|
233
|
+
<PieChart width={100} height={100}>
|
|
234
|
+
<Pie data={smallerData} dataKey={dataKey()} isAnimationActive />
|
|
235
|
+
</PieChart>
|
|
236
|
+
</AnimationControllerProvider>
|
|
237
|
+
));
|
|
238
|
+
flush();
|
|
239
|
+
const changeDataKey = (): void => {
|
|
240
|
+
setDataKey((prev) => (prev === "amt" ? "pv" : "amt"));
|
|
241
|
+
flush();
|
|
242
|
+
};
|
|
243
|
+
return { container, animationManager: manager, changeDataKey };
|
|
244
|
+
}
|
|
245
|
+
|
|
246
|
+
describe("interaction after initial animation completes", () => {
|
|
247
|
+
it("should animate the pie sector angles", async () => {
|
|
248
|
+
const { container, animationManager, changeDataKey } = renderTestCase();
|
|
249
|
+
// Run the initial ('amt') animation to completion, then switch dataKey.
|
|
250
|
+
await animationManager.completeAnimation();
|
|
251
|
+
flush();
|
|
252
|
+
changeDataKey();
|
|
253
|
+
|
|
254
|
+
const angles = await expectAnimatedPieAngles(container, animationManager, 3);
|
|
255
|
+
expect(angles).toEqual([
|
|
256
|
+
[
|
|
257
|
+
{ endAngle: 108.593, startAngle: 0 },
|
|
258
|
+
{ endAngle: 280.8398, startAngle: 108.593 },
|
|
259
|
+
{ endAngle: 0, startAngle: 280.8398 },
|
|
260
|
+
],
|
|
261
|
+
[
|
|
262
|
+
{ endAngle: 104.2775, startAngle: 0 },
|
|
263
|
+
{ endAngle: 296.2907, startAngle: 104.2775 },
|
|
264
|
+
{ endAngle: 0, startAngle: 296.2907 },
|
|
265
|
+
],
|
|
266
|
+
[
|
|
267
|
+
{ endAngle: 103.2874, startAngle: 0 },
|
|
268
|
+
{ endAngle: 299.835, startAngle: 103.2874 },
|
|
269
|
+
{ endAngle: 0, startAngle: 299.835 },
|
|
270
|
+
],
|
|
271
|
+
]);
|
|
272
|
+
});
|
|
273
|
+
});
|
|
274
|
+
|
|
275
|
+
describe("interaction in the middle of the initial animation", () => {
|
|
276
|
+
it("should animate the pie sector angles from the intermediate state", async () => {
|
|
277
|
+
const { container, animationManager, changeDataKey } = renderTestCase();
|
|
278
|
+
// Let the initial animation run half way, then switch dataKey.
|
|
279
|
+
await animationManager.setAnimationProgress(0.5);
|
|
280
|
+
flush();
|
|
281
|
+
changeDataKey();
|
|
282
|
+
|
|
283
|
+
const angles = await expectAnimatedPieAngles(container, animationManager, 3);
|
|
284
|
+
expect(angles).toEqual([
|
|
285
|
+
// The Pie is 337/360 rendered when the dataKey changes, and it continues from there
|
|
286
|
+
[
|
|
287
|
+
{ endAngle: 101.0656, startAngle: 0 },
|
|
288
|
+
{ endAngle: 265.785, startAngle: 101.0656 },
|
|
289
|
+
{ endAngle: 337.4176, startAngle: 265.785 },
|
|
290
|
+
],
|
|
291
|
+
[
|
|
292
|
+
{ endAngle: 102.8729, startAngle: 0 },
|
|
293
|
+
{ endAngle: 293.4815, startAngle: 102.8729 },
|
|
294
|
+
{ endAngle: 355.7862, startAngle: 293.4815 },
|
|
295
|
+
],
|
|
296
|
+
[
|
|
297
|
+
{ endAngle: 103.2874, startAngle: 0 },
|
|
298
|
+
{ endAngle: 299.835, startAngle: 103.2874 },
|
|
299
|
+
{ endAngle: 0, startAngle: 299.835 },
|
|
300
|
+
],
|
|
301
|
+
]);
|
|
302
|
+
});
|
|
303
|
+
});
|
|
304
|
+
});
|
|
305
|
+
|
|
306
|
+
describe("when the Pie has a key prop to force re-animation", () => {
|
|
307
|
+
// Solid has no `key` prop; a keyed <Show> remounts the <Pie> when the dataKey
|
|
308
|
+
// changes, the port equivalent of upstream's `key={dataKey}` remount.
|
|
309
|
+
function renderTestCase(): {
|
|
310
|
+
container: Element;
|
|
311
|
+
animationManager: MockProgressAnimationManager;
|
|
312
|
+
changeDataKey: () => void;
|
|
313
|
+
} {
|
|
314
|
+
const manager = new MockProgressAnimationManager("pie-key");
|
|
315
|
+
const [dataKey, setDataKey] = createSignal("amt");
|
|
316
|
+
const { container } = render(() => (
|
|
317
|
+
<AnimationControllerProvider value={manager.factory}>
|
|
318
|
+
<PieChart width={100} height={100}>
|
|
319
|
+
<Show when={dataKey()} keyed>
|
|
320
|
+
{(key) => <Pie data={smallerData} dataKey={key} isAnimationActive />}
|
|
321
|
+
</Show>
|
|
322
|
+
</PieChart>
|
|
323
|
+
</AnimationControllerProvider>
|
|
324
|
+
));
|
|
325
|
+
flush();
|
|
326
|
+
const changeDataKey = (): void => {
|
|
327
|
+
setDataKey((prev) => (prev === "amt" ? "pv" : "amt"));
|
|
328
|
+
flush();
|
|
329
|
+
};
|
|
330
|
+
return { container, animationManager: manager, changeDataKey };
|
|
331
|
+
}
|
|
332
|
+
|
|
333
|
+
it("should re-run the initial animation from the beginning", async () => {
|
|
334
|
+
const { container, animationManager, changeDataKey } = renderTestCase();
|
|
335
|
+
await animationManager.completeAnimation();
|
|
336
|
+
flush();
|
|
337
|
+
changeDataKey();
|
|
338
|
+
|
|
339
|
+
// A remount re-runs the ENTER animation, so it starts collapsed (no sectors).
|
|
340
|
+
expectPieSectors(container, []);
|
|
341
|
+
|
|
342
|
+
const angles = await expectAnimatedPieAngles(container, animationManager, 3);
|
|
343
|
+
expect(angles).toEqual([
|
|
344
|
+
[
|
|
345
|
+
{ endAngle: 70.4979, startAngle: 0 },
|
|
346
|
+
{ endAngle: 204.6496, startAngle: 70.4979 },
|
|
347
|
+
{ endAngle: 245.7145, startAngle: 204.6496 },
|
|
348
|
+
],
|
|
349
|
+
[
|
|
350
|
+
{ endAngle: 97.1692, startAngle: 0 },
|
|
351
|
+
{ endAngle: 282.0742, startAngle: 97.1692 },
|
|
352
|
+
{ endAngle: 338.6753, startAngle: 282.0742 },
|
|
353
|
+
],
|
|
354
|
+
[
|
|
355
|
+
{ endAngle: 103.2874, startAngle: 0 },
|
|
356
|
+
{ endAngle: 299.835, startAngle: 103.2874 },
|
|
357
|
+
{ endAngle: 0, startAngle: 299.835 },
|
|
358
|
+
],
|
|
359
|
+
]);
|
|
360
|
+
});
|
|
361
|
+
});
|
|
362
|
+
|
|
363
|
+
describe("tests that change data array", () => {
|
|
364
|
+
const data1 = smallerData.slice(0, 2);
|
|
365
|
+
const data2 = smallerData;
|
|
366
|
+
|
|
367
|
+
function renderTestCase(): {
|
|
368
|
+
container: Element;
|
|
369
|
+
animationManager: MockProgressAnimationManager;
|
|
370
|
+
changeData: () => void;
|
|
371
|
+
} {
|
|
372
|
+
const manager = new MockProgressAnimationManager("pie-data");
|
|
373
|
+
const [data, setData] = createSignal(data1);
|
|
374
|
+
const { container } = render(() => (
|
|
375
|
+
<AnimationControllerProvider value={manager.factory}>
|
|
376
|
+
<PieChart width={100} height={100}>
|
|
377
|
+
<Pie data={data()} dataKey="amt" isAnimationActive />
|
|
378
|
+
</PieChart>
|
|
379
|
+
</AnimationControllerProvider>
|
|
380
|
+
));
|
|
381
|
+
flush();
|
|
382
|
+
const changeData = (): void => {
|
|
383
|
+
setData((prev) => (prev === data1 ? data2 : data1));
|
|
384
|
+
flush();
|
|
385
|
+
};
|
|
386
|
+
return { container, animationManager: manager, changeData };
|
|
387
|
+
}
|
|
388
|
+
|
|
389
|
+
describe("interaction after initial animation completes", () => {
|
|
390
|
+
it("should animate from 2 to 3 sectors", async () => {
|
|
391
|
+
const { container, animationManager, changeData } = renderTestCase();
|
|
392
|
+
await animationManager.completeAnimation();
|
|
393
|
+
flush();
|
|
394
|
+
changeData();
|
|
395
|
+
|
|
396
|
+
const angles = await expectAnimatedPieAngles(container, animationManager, 3);
|
|
397
|
+
expect(angles).toEqual([
|
|
398
|
+
[
|
|
399
|
+
{ endAngle: 139.0477, startAngle: 0 },
|
|
400
|
+
{ endAngle: 278.0953, startAngle: 139.0477 },
|
|
401
|
+
{ endAngle: 0.0002, startAngle: 278.0953 },
|
|
402
|
+
],
|
|
403
|
+
[
|
|
404
|
+
{ endAngle: 123.5542, startAngle: 0 },
|
|
405
|
+
{ endAngle: 247.1082, startAngle: 123.5542 },
|
|
406
|
+
{ endAngle: 0, startAngle: 247.1082 },
|
|
407
|
+
],
|
|
408
|
+
[
|
|
409
|
+
{ endAngle: 120, startAngle: 0 },
|
|
410
|
+
{ endAngle: 240, startAngle: 120 },
|
|
411
|
+
{ endAngle: 0, startAngle: 240 },
|
|
412
|
+
],
|
|
413
|
+
]);
|
|
414
|
+
});
|
|
415
|
+
});
|
|
416
|
+
|
|
417
|
+
describe("interaction in the middle of the initial animation", () => {
|
|
418
|
+
it("should animate from 2 to 3 sectors from the intermediate state", async () => {
|
|
419
|
+
const { container, animationManager, changeData } = renderTestCase();
|
|
420
|
+
await animationManager.setAnimationProgress(0.5);
|
|
421
|
+
flush();
|
|
422
|
+
changeData();
|
|
423
|
+
|
|
424
|
+
const angles = await expectAnimatedPieAngles(container, animationManager, 3);
|
|
425
|
+
expect(angles).toEqual([
|
|
426
|
+
[
|
|
427
|
+
{ endAngle: 127.7564, startAngle: 0 },
|
|
428
|
+
{ endAngle: 255.5128, startAngle: 127.7564 },
|
|
429
|
+
{ endAngle: 337.4176, startAngle: 255.5128 },
|
|
430
|
+
],
|
|
431
|
+
[
|
|
432
|
+
{ endAngle: 121.4473, startAngle: 0 },
|
|
433
|
+
{ endAngle: 242.8946, startAngle: 121.4473 },
|
|
434
|
+
{ endAngle: 355.7864, startAngle: 242.8946 },
|
|
435
|
+
],
|
|
436
|
+
[
|
|
437
|
+
{ endAngle: 120, startAngle: 0 },
|
|
438
|
+
{ endAngle: 240, startAngle: 120 },
|
|
439
|
+
{ endAngle: 0, startAngle: 240 },
|
|
440
|
+
],
|
|
441
|
+
]);
|
|
442
|
+
});
|
|
443
|
+
});
|
|
444
|
+
});
|
|
445
|
+
|
|
446
|
+
describe("when the pie element hides during the animation", () => {
|
|
447
|
+
// Upstream drives visibility through an in-tree <button> (createSelectorTestCase +
|
|
448
|
+
// button.click). We mirror that exactly: the toggle MUST come from a click inside
|
|
449
|
+
// the render root's reactive owner, not a bare setSignal from test scope — the
|
|
450
|
+
// re-appearing Pie REMOUNTS <AnimatedItems>, which creates fresh effects, and those
|
|
451
|
+
// would be ownerless (NO_OWNER_EFFECT) if the write came from the test body.
|
|
452
|
+
function renderTestCase(): {
|
|
453
|
+
container: Element;
|
|
454
|
+
animationManager: MockProgressAnimationManager;
|
|
455
|
+
toggleVisibility: () => void;
|
|
456
|
+
} {
|
|
457
|
+
const manager = new MockProgressAnimationManager("pie-hide");
|
|
458
|
+
const [isVisible, setIsVisible] = createSignal(true);
|
|
459
|
+
const { container } = render(() => (
|
|
460
|
+
<AnimationControllerProvider value={manager.factory}>
|
|
461
|
+
<button
|
|
462
|
+
type="button"
|
|
463
|
+
data-testid="toggle"
|
|
464
|
+
onClick={() => setIsVisible((prev) => !prev)}
|
|
465
|
+
/>
|
|
466
|
+
<PieChart width={100} height={100}>
|
|
467
|
+
<Pie data={smallerData} dataKey="amt" isAnimationActive hide={!isVisible()} />
|
|
468
|
+
</PieChart>
|
|
469
|
+
</AnimationControllerProvider>
|
|
470
|
+
));
|
|
471
|
+
flush();
|
|
472
|
+
const button = container.querySelector<HTMLButtonElement>('[data-testid="toggle"]');
|
|
473
|
+
if (button == null) {
|
|
474
|
+
throw new Error("Missing toggle button");
|
|
475
|
+
}
|
|
476
|
+
const toggleVisibility = (): void => {
|
|
477
|
+
fireEvent.click(button);
|
|
478
|
+
flush();
|
|
479
|
+
};
|
|
480
|
+
return { container, animationManager: manager, toggleVisibility };
|
|
481
|
+
}
|
|
482
|
+
|
|
483
|
+
it("should not crash when the pie hides during the animation", async () => {
|
|
484
|
+
const { container, animationManager, toggleVisibility } = renderTestCase();
|
|
485
|
+
|
|
486
|
+
await animationManager.setAnimationProgress(0.3);
|
|
487
|
+
flush();
|
|
488
|
+
toggleVisibility();
|
|
489
|
+
|
|
490
|
+
expectPieSectors(container, []);
|
|
491
|
+
});
|
|
492
|
+
|
|
493
|
+
it("should restart the animation from the beginning when the pie appears again", async () => {
|
|
494
|
+
const { container, animationManager, toggleVisibility } = renderTestCase();
|
|
495
|
+
|
|
496
|
+
await animationManager.setAnimationProgress(0.3);
|
|
497
|
+
flush();
|
|
498
|
+
toggleVisibility();
|
|
499
|
+
|
|
500
|
+
expectPieSectors(container, []);
|
|
501
|
+
|
|
502
|
+
toggleVisibility();
|
|
503
|
+
|
|
504
|
+
// On re-appear the ENTER animation restarts from a collapsed state (empty
|
|
505
|
+
// sectors at t=0), NOT resuming the mid-progress frame it was at when hidden.
|
|
506
|
+
// recharts parity: PieImpl drops previousSectorsRef.current while hidden.
|
|
507
|
+
expectPieSectors(container, []);
|
|
508
|
+
|
|
509
|
+
const angles = await expectAnimatedPieAngles(container, animationManager, 3);
|
|
510
|
+
expect(angles).toEqual([
|
|
511
|
+
[
|
|
512
|
+
{ endAngle: 81.9049, startAngle: 0 },
|
|
513
|
+
{ endAngle: 163.8098, startAngle: 81.9049 },
|
|
514
|
+
{ endAngle: 245.7147, startAngle: 163.8098 },
|
|
515
|
+
],
|
|
516
|
+
[
|
|
517
|
+
{ endAngle: 112.8918, startAngle: 0 },
|
|
518
|
+
{ endAngle: 225.7836, startAngle: 112.8918 },
|
|
519
|
+
{ endAngle: 338.6755, startAngle: 225.7836 },
|
|
520
|
+
],
|
|
521
|
+
[
|
|
522
|
+
{ endAngle: 120, startAngle: 0 },
|
|
523
|
+
{ endAngle: 240, startAngle: 120 },
|
|
524
|
+
{ endAngle: 0, startAngle: 240 },
|
|
525
|
+
],
|
|
526
|
+
]);
|
|
527
|
+
});
|
|
528
|
+
});
|
|
529
|
+
});
|