solid-recharts 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/NEXT_SESSION_PROMPT.md +114 -0
- package/package.json +28 -0
- package/src/animation/AnimatedItems.tsx +169 -0
- package/src/animation/AnimationController.ts +24 -0
- package/src/animation/AnimationControllerImpl.ts +37 -0
- package/src/animation/AnimationHandle.ts +273 -0
- package/src/animation/CSSTransitionAnimate.tsx +142 -0
- package/src/animation/JavascriptAnimate.tsx +107 -0
- package/src/animation/easing.ts +261 -0
- package/src/animation/matchBy.ts +211 -0
- package/src/animation/timeoutController.ts +51 -0
- package/src/animation/useAnimationController.tsx +31 -0
- package/src/animation/useAnimationStartSnapshot.ts +73 -0
- package/src/animation/util.ts +16 -0
- package/src/cartesian/Area.tsx +810 -0
- package/src/cartesian/AreaRevealShape.tsx +250 -0
- package/src/cartesian/Bar.tsx +1216 -0
- package/src/cartesian/BarStack.tsx +148 -0
- package/src/cartesian/Brush.tsx +653 -0
- package/src/cartesian/CartesianAxis.tsx +541 -0
- package/src/cartesian/CartesianGrid.tsx +605 -0
- package/src/cartesian/ErrorBar.tsx +319 -0
- package/src/cartesian/Funnel.tsx +594 -0
- package/src/cartesian/GraphicalItemClipPath.tsx +75 -0
- package/src/cartesian/Line.tsx +742 -0
- package/src/cartesian/LineDrawShape.tsx +190 -0
- package/src/cartesian/ReferenceArea.tsx +275 -0
- package/src/cartesian/ReferenceDot.tsx +286 -0
- package/src/cartesian/ReferenceLine.tsx +414 -0
- package/src/cartesian/RenderedTicksReporter.tsx +49 -0
- package/src/cartesian/Scatter.tsx +741 -0
- package/src/cartesian/XAxis.tsx +293 -0
- package/src/cartesian/YAxis.tsx +333 -0
- package/src/cartesian/ZAxis.tsx +80 -0
- package/src/cartesian/getCartesianPosition.ts +255 -0
- package/src/cartesian/getEquidistantTicks.ts +126 -0
- package/src/cartesian/getTicks.ts +225 -0
- package/src/cartesian/useAnimatedLineLength.ts +84 -0
- package/src/chart/AreaChart.tsx +30 -0
- package/src/chart/BarChart.tsx +27 -0
- package/src/chart/CartesianChart.tsx +91 -0
- package/src/chart/CategoricalChart.tsx +60 -0
- package/src/chart/ComposedChart.tsx +29 -0
- package/src/chart/FunnelChart.tsx +29 -0
- package/src/chart/LineChart.tsx +29 -0
- package/src/chart/PieChart.tsx +41 -0
- package/src/chart/PolarChart.tsx +97 -0
- package/src/chart/RadarChart.tsx +37 -0
- package/src/chart/RadialBarChart.tsx +39 -0
- package/src/chart/RechartsWrapper.tsx +486 -0
- package/src/chart/Sankey.tsx +992 -0
- package/src/chart/ScatterChart.tsx +29 -0
- package/src/chart/SunburstChart.tsx +394 -0
- package/src/chart/Treemap.tsx +874 -0
- package/src/chart/types.ts +37 -0
- package/src/component/ActivePoints.tsx +136 -0
- package/src/component/Cell.tsx +72 -0
- package/src/component/Cursor.tsx +249 -0
- package/src/component/Customized.tsx +8 -0
- package/src/component/DefaultLegendContent.tsx +205 -0
- package/src/component/DefaultTooltipContent.tsx +247 -0
- package/src/component/Dots.tsx +128 -0
- package/src/component/Label.tsx +507 -0
- package/src/component/LabelList.tsx +270 -0
- package/src/component/Legend.tsx +273 -0
- package/src/component/ResponsiveContainer.tsx +397 -0
- package/src/component/Text.tsx +436 -0
- package/src/component/Tooltip.tsx +309 -0
- package/src/component/TooltipBoundingBox.tsx +152 -0
- package/src/component/responsiveContainerUtils.ts +128 -0
- package/src/container/ClipPathProvider.tsx +40 -0
- package/src/container/Layer.tsx +38 -0
- package/src/container/RootSurface.tsx +124 -0
- package/src/container/Surface.tsx +70 -0
- package/src/context/ErrorBarContext.tsx +85 -0
- package/src/context/PanoramaContext.tsx +13 -0
- package/src/context/RegisterGraphicalItemId.tsx +41 -0
- package/src/context/accessibilityContext.tsx +10 -0
- package/src/context/brushUpdateContext.ts +14 -0
- package/src/context/chartDataContext.tsx +79 -0
- package/src/context/chartLayoutContext.tsx +158 -0
- package/src/context/legendPayloadContext.ts +11 -0
- package/src/context/legendPortalContext.ts +11 -0
- package/src/context/tooltipContext.ts +72 -0
- package/src/context/tooltipPortalContext.ts +14 -0
- package/src/context/useTooltipAxis.ts +24 -0
- package/src/hooks.ts +312 -0
- package/src/index.ts +288 -0
- package/src/polar/Pie.tsx +912 -0
- package/src/polar/PolarAngleAxis.tsx +494 -0
- package/src/polar/PolarGrid.tsx +269 -0
- package/src/polar/PolarRadiusAxis.tsx +422 -0
- package/src/polar/Radar.tsx +652 -0
- package/src/polar/RadialBar.tsx +767 -0
- package/src/polar/defaultPolarAngleAxisProps.tsx +33 -0
- package/src/polar/defaultPolarRadiusAxisProps.tsx +28 -0
- package/src/shape/Cross.tsx +83 -0
- package/src/shape/Curve.tsx +335 -0
- package/src/shape/Dot.tsx +49 -0
- package/src/shape/Polygon.tsx +168 -0
- package/src/shape/Rectangle.tsx +301 -0
- package/src/shape/Sector.tsx +304 -0
- package/src/shape/Symbols.tsx +144 -0
- package/src/shape/Trapezoid.tsx +228 -0
- package/src/state/RechartsReduxContext.tsx +8 -0
- package/src/state/RechartsStoreContext.ts +15 -0
- package/src/state/RechartsStoreProvider.tsx +27 -0
- package/src/state/ReportChartProps.tsx +19 -0
- package/src/state/ReportEventSettings.tsx +19 -0
- package/src/state/ReportMainChartProps.tsx +35 -0
- package/src/state/ReportPolarOptions.tsx +28 -0
- package/src/state/SetLegendPayload.ts +50 -0
- package/src/state/SetTooltipEntrySettings.tsx +46 -0
- package/src/state/brushSlice.ts +60 -0
- package/src/state/cartesianAxisSlice.ts +288 -0
- package/src/state/chartDataSlice.ts +115 -0
- package/src/state/errorBarSlice.ts +84 -0
- package/src/state/eventSettingsSlice.ts +41 -0
- package/src/state/externalEventsMiddleware.ts +136 -0
- package/src/state/graphicalItemsSlice.ts +162 -0
- package/src/state/hooks.ts +42 -0
- package/src/state/keyboardEventsMiddleware.ts +213 -0
- package/src/state/layoutSlice.ts +71 -0
- package/src/state/legendSlice.ts +107 -0
- package/src/state/mouseEventsMiddleware.ts +103 -0
- package/src/state/optionsSlice.ts +64 -0
- package/src/state/polarAxisSlice.ts +65 -0
- package/src/state/polarOptionsSlice.ts +54 -0
- package/src/state/reduxDevtoolsJsonStringifyReplacer.ts +15 -0
- package/src/state/referenceElementsSlice.ts +121 -0
- package/src/state/renderedTicksSlice.ts +61 -0
- package/src/state/rootPropsSlice.ts +70 -0
- package/src/state/selectors/areaSelectors.ts +169 -0
- package/src/state/selectors/arrayEqualityCheck.ts +8 -0
- package/src/state/selectors/axisSelectors.ts +2196 -0
- package/src/state/selectors/barSelectors.ts +319 -0
- package/src/state/selectors/barStackSelectors.ts +79 -0
- package/src/state/selectors/brushSelectors.ts +40 -0
- package/src/state/selectors/combiners/combineActiveLabel.ts +21 -0
- package/src/state/selectors/combiners/combineActiveTooltipIndex.ts +93 -0
- package/src/state/selectors/combiners/combineAllBarPositions.ts +131 -0
- package/src/state/selectors/combiners/combineAxisRangeWithReverse.ts +17 -0
- package/src/state/selectors/combiners/combineBarPosition.ts +24 -0
- package/src/state/selectors/combiners/combineBarSizeList.ts +75 -0
- package/src/state/selectors/combiners/combineCheckedDomain.ts +49 -0
- package/src/state/selectors/combiners/combineConfiguredScale.ts +121 -0
- package/src/state/selectors/combiners/combineCoordinateForDefaultIndex.ts +43 -0
- package/src/state/selectors/combiners/combineDisplayedStackedData.ts +50 -0
- package/src/state/selectors/combiners/combineInverseScaleFunction.ts +17 -0
- package/src/state/selectors/combiners/combineRealScaleType.ts +48 -0
- package/src/state/selectors/combiners/combineStackedData.ts +28 -0
- package/src/state/selectors/combiners/combineTooltipInteractionState.ts +86 -0
- package/src/state/selectors/combiners/combineTooltipPayload.ts +203 -0
- package/src/state/selectors/combiners/combineTooltipPayloadConfigurations.ts +45 -0
- package/src/state/selectors/containerSelectors.ts +12 -0
- package/src/state/selectors/dataSelectors.ts +90 -0
- package/src/state/selectors/funnelSelectors.ts +83 -0
- package/src/state/selectors/graphicalItemSelectors.ts +23 -0
- package/src/state/selectors/legendSelectors.ts +29 -0
- package/src/state/selectors/lineSelectors.ts +111 -0
- package/src/state/selectors/numberDomainEqualityCheck.ts +8 -0
- package/src/state/selectors/pickAxisId.ts +6 -0
- package/src/state/selectors/pickAxisType.ts +4 -0
- package/src/state/selectors/pieSelectors.ts +103 -0
- package/src/state/selectors/polarAxisSelectors.ts +202 -0
- package/src/state/selectors/polarGridSelectors.ts +24 -0
- package/src/state/selectors/polarScaleSelectors.ts +149 -0
- package/src/state/selectors/polarSelectors.ts +211 -0
- package/src/state/selectors/radarSelectors.ts +152 -0
- package/src/state/selectors/radialBarSelectors.ts +328 -0
- package/src/state/selectors/rootPropsSelectors.ts +36 -0
- package/src/state/selectors/scatterSelectors.ts +77 -0
- package/src/state/selectors/selectAllAxes.ts +10 -0
- package/src/state/selectors/selectChartOffset.ts +15 -0
- package/src/state/selectors/selectChartOffsetInternal.ts +111 -0
- package/src/state/selectors/selectPlotArea.ts +27 -0
- package/src/state/selectors/selectTooltipAxisId.ts +6 -0
- package/src/state/selectors/selectTooltipAxisType.ts +33 -0
- package/src/state/selectors/selectTooltipEventType.ts +45 -0
- package/src/state/selectors/selectTooltipPayloadSearcher.ts +7 -0
- package/src/state/selectors/selectTooltipSettings.ts +6 -0
- package/src/state/selectors/selectTooltipState.ts +5 -0
- package/src/state/selectors/tooltipSelectors.ts +690 -0
- package/src/state/selectors/touchSelectors.ts +29 -0
- package/src/state/store.ts +167 -0
- package/src/state/tooltipSlice.ts +289 -0
- package/src/state/types/AreaSettings.ts +17 -0
- package/src/state/types/BarSettings.ts +16 -0
- package/src/state/types/LineSettings.ts +12 -0
- package/src/state/types/PieSettings.ts +32 -0
- package/src/state/types/RadarSettings.ts +6 -0
- package/src/state/types/RadialBarSettings.ts +10 -0
- package/src/state/types/ScatterSettings.ts +13 -0
- package/src/state/types/StackedGraphicalItem.ts +33 -0
- package/src/state/unregisterOnCleanup.ts +26 -0
- package/src/state/zIndexSlice.ts +128 -0
- package/src/synchronisation/syncRegistry.ts +131 -0
- package/src/synchronisation/syncSelectors.ts +7 -0
- package/src/synchronisation/types.ts +42 -0
- package/src/synchronisation/useChartSynchronisation.tsx +372 -0
- package/src/types.ts +39 -0
- package/src/util/ActiveShapeUtils.tsx +80 -0
- package/src/util/BarUtils.tsx +74 -0
- package/src/util/CartesianUtils.ts +53 -0
- package/src/util/ChartUtils.ts +696 -0
- package/src/util/Constants.ts +42 -0
- package/src/util/CssPrefixUtils.ts +24 -0
- package/src/util/DOMUtils.ts +141 -0
- package/src/util/DataUtils.ts +205 -0
- package/src/util/FunnelUtils.tsx +37 -0
- package/src/util/Global.ts +15 -0
- package/src/util/IfOverflow.ts +17 -0
- package/src/util/LRUCache.ts +46 -0
- package/src/util/LogUtils.ts +26 -0
- package/src/util/PolarUtils.ts +134 -0
- package/src/util/RadialBarUtils.tsx +35 -0
- package/src/util/ReduceCSSCalc.ts +186 -0
- package/src/util/ShallowEqual.ts +43 -0
- package/src/util/TickUtils.ts +61 -0
- package/src/util/YAxisUtils.ts +49 -0
- package/src/util/adaptEventHandlers.ts +69 -0
- package/src/util/axisPropsAreEqual.ts +42 -0
- package/src/util/collectionUtils.ts +83 -0
- package/src/util/createCartesianCharts.tsx +101 -0
- package/src/util/createEventProxy.ts +24 -0
- package/src/util/createPolarCharts.tsx +86 -0
- package/src/util/cursor/getCursorPoints.ts +48 -0
- package/src/util/cursor/getCursorRectangle.ts +31 -0
- package/src/util/cursor/getRadialCursorPoints.ts +34 -0
- package/src/util/excludeEventProps.ts +172 -0
- package/src/util/getActiveCoordinate.ts +205 -0
- package/src/util/getAxisTypeBasedOnLayout.ts +21 -0
- package/src/util/getEveryNth.ts +30 -0
- package/src/util/getRadiusAndStrokeWidthFromDot.ts +35 -0
- package/src/util/getRelativeCoordinate.ts +84 -0
- package/src/util/getSliced.ts +21 -0
- package/src/util/isDomainSpecifiedByUser.ts +217 -0
- package/src/util/isWellBehavedNumber.ts +10 -0
- package/src/util/objectPath.ts +129 -0
- package/src/util/payload/getUniqPayload.ts +31 -0
- package/src/util/propsAreEqual.ts +137 -0
- package/src/util/resolveDefaultProps.tsx +8 -0
- package/src/util/round.ts +35 -0
- package/src/util/scale/CartesianScaleHelper.ts +72 -0
- package/src/util/scale/CustomScaleDefinition.ts +82 -0
- package/src/util/scale/RechartsScale.ts +131 -0
- package/src/util/scale/createCategoricalInverse.ts +83 -0
- package/src/util/scale/getNiceTickValues.ts +334 -0
- package/src/util/scale/index.ts +3 -0
- package/src/util/scale/util/DecimalLite.ts +194 -0
- package/src/util/scale/util/arithmetic.ts +56 -0
- package/src/util/stacks/getStackSeriesIdentifier.ts +20 -0
- package/src/util/stacks/stackTypes.ts +53 -0
- package/src/util/svgPropertiesAndEvents.ts +84 -0
- package/src/util/svgPropertiesNoEvents.ts +520 -0
- package/src/util/tooltip/translate.ts +179 -0
- package/src/util/typedDataKey.ts +8 -0
- package/src/util/types.ts +724 -0
- package/src/util/useAnimationId.tsx +31 -0
- package/src/util/useElementOffset.ts +164 -0
- package/src/util/useId.ts +20 -0
- package/src/util/usePrefersReducedMotion.ts +44 -0
- package/src/util/useUniqueId.ts +34 -0
- package/src/zIndex/DefaultZIndexes.tsx +87 -0
- package/src/zIndex/ZIndexLayer.tsx +126 -0
- package/src/zIndex/ZIndexPortal.tsx +69 -0
- package/src/zIndex/getZIndexFromUnknown.tsx +17 -0
- package/src/zIndex/zIndexSelectors.ts +46 -0
- 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/render.ts +7 -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/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/reduxDevtoolsJsonStringifyReplacer.spec.ts +25 -0
- package/test/state/referenceElementsSlice.spec.ts +84 -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/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 +83 -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/axisPropsAreEqual.spec.ts +93 -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/tsconfig.json +11 -0
|
@@ -0,0 +1,211 @@
|
|
|
1
|
+
// Ported from recharts 3.9.0 src/animation/matchBy.ts.
|
|
2
|
+
// Pure logic — no framework surface. Deviation from the reference is limited to
|
|
3
|
+
// this repo's type discipline (no non-null `!`): the index-bounded `nextItems[i]`
|
|
4
|
+
// access is narrowed with an explicit guard instead of an assertion.
|
|
5
|
+
import type { DataKey } from "../util/types";
|
|
6
|
+
import { getValueByDataKey } from "../util/ChartUtils";
|
|
7
|
+
|
|
8
|
+
/**
|
|
9
|
+
* A tagged union describing the status of an item during animation.
|
|
10
|
+
*
|
|
11
|
+
* - `matched`: item exists in both previous and next data — interpolate between positions
|
|
12
|
+
* - `added`: item is new (no previous position) — animate in
|
|
13
|
+
* - `removed`: item was in previous data but not in next — animate out
|
|
14
|
+
*
|
|
15
|
+
* @since 3.9
|
|
16
|
+
*/
|
|
17
|
+
export type AnimationItem<T> =
|
|
18
|
+
| { readonly status: "matched"; readonly prev: T; readonly next: T }
|
|
19
|
+
| { readonly status: "added"; readonly next: T }
|
|
20
|
+
| { readonly status: "removed"; readonly prev: T };
|
|
21
|
+
|
|
22
|
+
/**
|
|
23
|
+
* A function that extracts a key from an animation item for matching purposes.
|
|
24
|
+
* Items in the previous and next arrays that return the same key are considered
|
|
25
|
+
* the same logical item and will animate between their positions.
|
|
26
|
+
*
|
|
27
|
+
* @since 3.9
|
|
28
|
+
*/
|
|
29
|
+
export type AnimationMatchBy<T> = (item: T, index: number) => string | number | null;
|
|
30
|
+
|
|
31
|
+
/**
|
|
32
|
+
* The union of all accepted `animationMatchBy` prop values:
|
|
33
|
+
* a built-in sentinel string, or a custom matching function.
|
|
34
|
+
*
|
|
35
|
+
* @since 3.9
|
|
36
|
+
*/
|
|
37
|
+
export type AnimationMatchByProp<T> =
|
|
38
|
+
| typeof matchByIndex
|
|
39
|
+
| typeof matchAppend
|
|
40
|
+
| AnimationMatchBy<T>;
|
|
41
|
+
|
|
42
|
+
/**
|
|
43
|
+
* Match animation items by their array index (the default behavior).
|
|
44
|
+
*
|
|
45
|
+
* @since 3.9
|
|
46
|
+
*/
|
|
47
|
+
export const matchByIndex = "index" as const;
|
|
48
|
+
|
|
49
|
+
/**
|
|
50
|
+
* Match animation items sequentially: previous item 0 pairs with next item 0, etc.
|
|
51
|
+
* When the new array is longer, the extra items animate in from their default position.
|
|
52
|
+
* When shorter, the surplus previous items are dropped.
|
|
53
|
+
*
|
|
54
|
+
* @since 3.9
|
|
55
|
+
*/
|
|
56
|
+
export const matchAppend = "append" as const;
|
|
57
|
+
|
|
58
|
+
/**
|
|
59
|
+
* Create a matching function that pairs items by a data key from their payload.
|
|
60
|
+
*
|
|
61
|
+
* Useful for time-series or streaming charts where new data points are added to
|
|
62
|
+
* one end and old points removed from the other, so existing points animate to
|
|
63
|
+
* their new positions instead of shifting by index.
|
|
64
|
+
*
|
|
65
|
+
* @since 3.9
|
|
66
|
+
*/
|
|
67
|
+
function isRecord(value: unknown): value is Record<string, unknown> {
|
|
68
|
+
return value != null && typeof value === "object";
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
export function matchByDataKey(
|
|
72
|
+
dataKey: DataKey<Record<string, unknown>>,
|
|
73
|
+
): AnimationMatchBy<{ payload?: unknown }> {
|
|
74
|
+
return (item: { payload?: unknown }): string | number | null => {
|
|
75
|
+
if (!isRecord(item.payload)) return null;
|
|
76
|
+
const value = getValueByDataKey(item.payload, dataKey);
|
|
77
|
+
if (value == null) return null;
|
|
78
|
+
if (typeof value === "string" || typeof value === "number") return value;
|
|
79
|
+
return JSON.stringify(value);
|
|
80
|
+
};
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
function tagAlignedItems<T>(
|
|
84
|
+
alignedPrevItems: ReadonlyArray<T | undefined>,
|
|
85
|
+
nextItems: ReadonlyArray<T>,
|
|
86
|
+
removedPrevItems: ReadonlyArray<T> = [],
|
|
87
|
+
): ReadonlyArray<AnimationItem<T>> {
|
|
88
|
+
const tagged: AnimationItem<T>[] = [];
|
|
89
|
+
/*
|
|
90
|
+
* We put removed points at the start because we assume that a typical chart animates right-to-left
|
|
91
|
+
* and the removed points will disappear from the left edge and outside the plot area.
|
|
92
|
+
* If your chart behaves differently you may want to customize your matching function.
|
|
93
|
+
*/
|
|
94
|
+
for (const prev of removedPrevItems) {
|
|
95
|
+
tagged.push({ status: "removed", prev });
|
|
96
|
+
}
|
|
97
|
+
for (let i = 0; i < nextItems.length; i++) {
|
|
98
|
+
// This function intentionally pairs by array index. The strategy-specific functions
|
|
99
|
+
// below produce an alignedPrevItems array whose indices already correspond to nextItems.
|
|
100
|
+
const prev = alignedPrevItems[i];
|
|
101
|
+
const next = nextItems[i];
|
|
102
|
+
if (next === undefined) {
|
|
103
|
+
continue;
|
|
104
|
+
}
|
|
105
|
+
if (prev != null) {
|
|
106
|
+
tagged.push({ status: "matched", prev, next });
|
|
107
|
+
} else {
|
|
108
|
+
tagged.push({ status: "added", next });
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
return tagged;
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
function matchByIndexImpl<T>(
|
|
115
|
+
prevItems: ReadonlyArray<T>,
|
|
116
|
+
nextItems: ReadonlyArray<T>,
|
|
117
|
+
): ReadonlyArray<AnimationItem<T>> {
|
|
118
|
+
const factor = prevItems.length / nextItems.length;
|
|
119
|
+
const alignedPrevItems = nextItems.map((_, i) => prevItems[Math.floor(i * factor)]);
|
|
120
|
+
return tagAlignedItems(alignedPrevItems, nextItems);
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
function matchAppendImpl<T>(
|
|
124
|
+
prevItems: ReadonlyArray<T>,
|
|
125
|
+
nextItems: ReadonlyArray<T>,
|
|
126
|
+
): ReadonlyArray<AnimationItem<T>> {
|
|
127
|
+
const alignedPrevItems = nextItems.map((_, i) => prevItems[i]);
|
|
128
|
+
return tagAlignedItems(alignedPrevItems, nextItems);
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
function buildPrevKeyMap<T>(
|
|
132
|
+
prevItems: ReadonlyArray<T>,
|
|
133
|
+
matchBy: AnimationMatchBy<T>,
|
|
134
|
+
): ReadonlyMap<string | number, T> {
|
|
135
|
+
const prevMap = new Map<string | number, T>();
|
|
136
|
+
for (let i = 0; i < prevItems.length; i++) {
|
|
137
|
+
const item = prevItems[i];
|
|
138
|
+
if (item == null) continue;
|
|
139
|
+
const key = matchBy(item, i);
|
|
140
|
+
if (key != null && !prevMap.has(key)) {
|
|
141
|
+
prevMap.set(key, item);
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
return prevMap;
|
|
145
|
+
}
|
|
146
|
+
|
|
147
|
+
/**
|
|
148
|
+
* Match previous items to next items by key, and include removed items explicitly.
|
|
149
|
+
*
|
|
150
|
+
* @internal
|
|
151
|
+
*/
|
|
152
|
+
function matchByKey<T>(
|
|
153
|
+
prevItems: ReadonlyArray<T>,
|
|
154
|
+
nextItems: ReadonlyArray<T>,
|
|
155
|
+
matchBy: AnimationMatchBy<T>,
|
|
156
|
+
): ReadonlyArray<AnimationItem<T>> {
|
|
157
|
+
const prevMap = buildPrevKeyMap(prevItems, matchBy);
|
|
158
|
+
|
|
159
|
+
// Track which prev keys were matched
|
|
160
|
+
const matchedKeys = new Set<string | number>();
|
|
161
|
+
|
|
162
|
+
const alignedPrevItems = nextItems.map((next, i) => {
|
|
163
|
+
const key = matchBy(next, i);
|
|
164
|
+
if (key != null) {
|
|
165
|
+
const prev = prevMap.get(key);
|
|
166
|
+
if (prev !== undefined) {
|
|
167
|
+
matchedKeys.add(key);
|
|
168
|
+
return prev;
|
|
169
|
+
}
|
|
170
|
+
}
|
|
171
|
+
return undefined;
|
|
172
|
+
});
|
|
173
|
+
|
|
174
|
+
// Removed = prev items whose keys were not matched to any next item
|
|
175
|
+
const removedPrevItems: T[] = [];
|
|
176
|
+
for (const [key, item] of prevMap) {
|
|
177
|
+
if (!matchedKeys.has(key)) {
|
|
178
|
+
removedPrevItems.push(item);
|
|
179
|
+
}
|
|
180
|
+
}
|
|
181
|
+
|
|
182
|
+
return tagAlignedItems(alignedPrevItems, nextItems, removedPrevItems);
|
|
183
|
+
}
|
|
184
|
+
|
|
185
|
+
/**
|
|
186
|
+
* Match previous items to next items using the given matching strategy and return tagged animation items.
|
|
187
|
+
*
|
|
188
|
+
* On first render, all next items are returned as `{ status: 'added' }`.
|
|
189
|
+
* For key-based matching, unmatched previous items are appended as `{ status: 'removed' }`.
|
|
190
|
+
*
|
|
191
|
+
* @internal
|
|
192
|
+
*/
|
|
193
|
+
export function matchAnimationItems<T>(
|
|
194
|
+
prevItems: ReadonlyArray<T> | null,
|
|
195
|
+
nextItems: ReadonlyArray<T> | undefined,
|
|
196
|
+
matchBy: AnimationMatchByProp<T>,
|
|
197
|
+
): ReadonlyArray<AnimationItem<T>> | null {
|
|
198
|
+
if (nextItems == null) {
|
|
199
|
+
return null;
|
|
200
|
+
}
|
|
201
|
+
if (prevItems == null) {
|
|
202
|
+
return nextItems.map((next) => ({ status: "added", next }));
|
|
203
|
+
}
|
|
204
|
+
if (matchBy === matchByIndex) {
|
|
205
|
+
return matchByIndexImpl(prevItems, nextItems);
|
|
206
|
+
}
|
|
207
|
+
if (matchBy === matchAppend) {
|
|
208
|
+
return matchAppendImpl(prevItems, nextItems);
|
|
209
|
+
}
|
|
210
|
+
return matchByKey(prevItems, nextItems, matchBy);
|
|
211
|
+
}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
// Ported from recharts 3.8.1 src/animation/timeoutController.ts (commit 7a23854).
|
|
2
|
+
// Pure timer abstraction — no framework surface — so behavior is byte-identical to recharts.
|
|
3
|
+
// Deviations from the reference are limited to satisfying this repo's type
|
|
4
|
+
// discipline (no `as` / no non-null `!`); `as const` is not needed here.
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* Callback type for the timeout function.
|
|
8
|
+
* Receives current time in milliseconds as an argument.
|
|
9
|
+
*/
|
|
10
|
+
export type CallbackType = (now: number) => void;
|
|
11
|
+
|
|
12
|
+
/**
|
|
13
|
+
* A function that, when called, cancels the timeout.
|
|
14
|
+
*/
|
|
15
|
+
export type CancelableTimeout = () => void;
|
|
16
|
+
|
|
17
|
+
export interface TimeoutController {
|
|
18
|
+
/**
|
|
19
|
+
* Sets a timeout that executes a callback after a specified delay.
|
|
20
|
+
* Allows setting multiple timeouts and provides a way to cancel them independently.
|
|
21
|
+
* @param callback - The function to execute after the delay. Receives the current time in milliseconds as an argument.
|
|
22
|
+
* @param delay (optional) - The time in milliseconds to wait before executing the callback. Defaults to 0.
|
|
23
|
+
*/
|
|
24
|
+
setTimeout(callback: CallbackType, delay?: number): CancelableTimeout;
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
export class RequestAnimationFrameTimeoutController implements TimeoutController {
|
|
28
|
+
setTimeout(callback: CallbackType, delay: number = 0): CancelableTimeout {
|
|
29
|
+
const startTime = performance.now();
|
|
30
|
+
|
|
31
|
+
let requestId: number | null = null;
|
|
32
|
+
|
|
33
|
+
const executeCallback = (now: number): void => {
|
|
34
|
+
if (now - startTime >= delay) {
|
|
35
|
+
callback(now);
|
|
36
|
+
// tests fail without the extra if, even when five lines below it's not needed
|
|
37
|
+
// TODO finish transition to the mocked timeout controller and then remove this condition
|
|
38
|
+
} else if (typeof requestAnimationFrame === "function") {
|
|
39
|
+
requestId = requestAnimationFrame(executeCallback);
|
|
40
|
+
}
|
|
41
|
+
};
|
|
42
|
+
|
|
43
|
+
requestId = requestAnimationFrame(executeCallback);
|
|
44
|
+
|
|
45
|
+
return () => {
|
|
46
|
+
if (requestId != null) {
|
|
47
|
+
cancelAnimationFrame(requestId);
|
|
48
|
+
}
|
|
49
|
+
};
|
|
50
|
+
}
|
|
51
|
+
}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
// Ported from recharts 3.9.0 src/animation/useAnimationController.tsx.
|
|
2
|
+
//
|
|
3
|
+
// Solid deviations: React `createContext`/`useContext`/`useMemo` → Solid
|
|
4
|
+
// `createContext`/`useContext`. The context default is a real value
|
|
5
|
+
// (`animationControllerImpl`), so `useContext` returns it without throwing
|
|
6
|
+
// outside a provider, and the hook runs once per component (no `useMemo`).
|
|
7
|
+
import { createContext, useContext } from "solid-js";
|
|
8
|
+
import type { AnimationController } from "./AnimationController";
|
|
9
|
+
import { animationControllerImpl } from "./AnimationControllerImpl";
|
|
10
|
+
|
|
11
|
+
const AnimationControllerContext = createContext<AnimationController>(animationControllerImpl);
|
|
12
|
+
|
|
13
|
+
/**
|
|
14
|
+
* Allows overriding the default AnimationController that Recharts uses internally to drive animations.
|
|
15
|
+
* The default uses a requestAnimationFrame-based TimeoutController and ticks animations as time moves forward.
|
|
16
|
+
*
|
|
17
|
+
* Useful for unit tests, for animating charts back and forth, or for driving animations from something
|
|
18
|
+
* other than time (manual controls, page scroll, mouse movement, ...).
|
|
19
|
+
*
|
|
20
|
+
* @since 3.9
|
|
21
|
+
*/
|
|
22
|
+
// Solid 2.0: the context object itself is the provider component
|
|
23
|
+
// (`<Ctx value={…}>`); there is no `.Provider` as in React / Solid 1.x.
|
|
24
|
+
export const AnimationControllerProvider = AnimationControllerContext;
|
|
25
|
+
|
|
26
|
+
export function useAnimationController(
|
|
27
|
+
animationControllerFromProps: AnimationController | undefined,
|
|
28
|
+
): AnimationController {
|
|
29
|
+
const animationControllerFromContext = useContext(AnimationControllerContext);
|
|
30
|
+
return animationControllerFromProps ?? animationControllerFromContext;
|
|
31
|
+
}
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
// Ported from recharts 3.9.0 src/animation/useAnimationStartSnapshot.ts.
|
|
2
|
+
//
|
|
3
|
+
// Solid 2.0 deviations: React renders many times and mutates refs during render;
|
|
4
|
+
// Solid components run once and re-run reactive computations. So the "capture a
|
|
5
|
+
// frozen snapshot when the animation cycle changes" step becomes a `createMemo`
|
|
6
|
+
// keyed on `animationInput` (it recomputes exactly when the cycle id changes,
|
|
7
|
+
// snapshotting the mutable ref untracked at that instant). `syncStepValue` stays
|
|
8
|
+
// an imperative callback invoked from the animation render-prop; it mutates a
|
|
9
|
+
// plain ref object (not a signal), so it triggers no reactive-graph diagnostics.
|
|
10
|
+
import { createMemo, untrack } from "solid-js";
|
|
11
|
+
import type { Accessor } from "solid-js";
|
|
12
|
+
|
|
13
|
+
/** A minimal mutable ref, mirroring React's `MutableRefObject`. */
|
|
14
|
+
export type MutableRef<T> = { current: T };
|
|
15
|
+
|
|
16
|
+
export type AnimationStartSnapshot<T> = {
|
|
17
|
+
/**
|
|
18
|
+
* The frozen value captured at the start of the current animation cycle.
|
|
19
|
+
* It does not drift while the same animation is in progress.
|
|
20
|
+
*/
|
|
21
|
+
startValue: Accessor<T>;
|
|
22
|
+
/**
|
|
23
|
+
* Feed each rendered animation frame back into the snapshot state machine:
|
|
24
|
+
* 1. "arm" the hook once the new animation renders its `animationElapsedTime=0` frame, and
|
|
25
|
+
* 2. optionally commit later in-flight frames into the mutable ref so future
|
|
26
|
+
* animations resume smoothly from the latest visible geometry.
|
|
27
|
+
*/
|
|
28
|
+
syncStepValue: (stepValue: T, animationElapsedTime: number, canCommit?: boolean) => void;
|
|
29
|
+
};
|
|
30
|
+
|
|
31
|
+
export function useAnimationStartSnapshot<T>(
|
|
32
|
+
animationInput: Accessor<unknown>,
|
|
33
|
+
previousValueRef: MutableRef<T>,
|
|
34
|
+
): AnimationStartSnapshot<T> {
|
|
35
|
+
/*
|
|
36
|
+
* Blocks writes back into the live ref until the new animation has actually
|
|
37
|
+
* rendered its own `animationElapsedTime=0` frame, so pre-start renders cannot
|
|
38
|
+
* rebase the next animation onto already-shifted geometry. The INITIAL cycle
|
|
39
|
+
* starts armed (recharts parity): only a cycle *change* requires the t=0
|
|
40
|
+
* handshake before commits resume.
|
|
41
|
+
*/
|
|
42
|
+
let isReadyToCommit = true;
|
|
43
|
+
let isFirstCycle = true;
|
|
44
|
+
|
|
45
|
+
// A new cycle begins whenever `animationInput` changes by reference: capture
|
|
46
|
+
// exactly one frozen starting snapshot from the live ref and block commits.
|
|
47
|
+
const startValue = createMemo<T>(() => {
|
|
48
|
+
animationInput();
|
|
49
|
+
if (isFirstCycle) {
|
|
50
|
+
isFirstCycle = false;
|
|
51
|
+
} else {
|
|
52
|
+
isReadyToCommit = false;
|
|
53
|
+
}
|
|
54
|
+
return untrack(() => previousValueRef.current);
|
|
55
|
+
});
|
|
56
|
+
|
|
57
|
+
const syncStepValue = (stepValue: T, animationElapsedTime: number, canCommit = true): void => {
|
|
58
|
+
if (animationElapsedTime === 0) {
|
|
59
|
+
// Handshake: the new animation has rendered its starting frame. We do not
|
|
60
|
+
// write anything yet; we only allow later in-flight frames to commit.
|
|
61
|
+
isReadyToCommit = true;
|
|
62
|
+
return;
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
if (animationElapsedTime > 0 && isReadyToCommit && canCommit) {
|
|
66
|
+
// Commit the latest visible frame so a future interruption resumes from
|
|
67
|
+
// exactly what the user saw most recently.
|
|
68
|
+
previousValueRef.current = stepValue;
|
|
69
|
+
}
|
|
70
|
+
};
|
|
71
|
+
|
|
72
|
+
return { startValue, syncStepValue };
|
|
73
|
+
}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
// Ported from recharts 3.8.1 src/animation/util.ts (commit 7a23854).
|
|
2
|
+
// Pure utils — no framework surface — so behavior is byte-identical to recharts.
|
|
3
|
+
// Deviations from the reference are limited to satisfying this repo's type
|
|
4
|
+
// discipline (no `any` / no non-null `!`).
|
|
5
|
+
|
|
6
|
+
/*
|
|
7
|
+
* @description: convert camel case to dash case
|
|
8
|
+
* string => string
|
|
9
|
+
*/
|
|
10
|
+
export const getDashCase = (name: string) => name.replace(/([A-Z])/g, (v) => `-${v.toLowerCase()}`);
|
|
11
|
+
|
|
12
|
+
export const getTransitionVal = (
|
|
13
|
+
props: ReadonlyArray<string>,
|
|
14
|
+
duration: string | number,
|
|
15
|
+
easing: string,
|
|
16
|
+
): string => props.map((prop) => `${getDashCase(prop)} ${duration}ms ${easing}`).join(",");
|