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,190 @@
|
|
|
1
|
+
// Ported from recharts 3.9.0 src/cartesian/LineDrawShape.tsx.
|
|
2
|
+
//
|
|
3
|
+
// The default shape for <Line>. During the entrance animation the line is
|
|
4
|
+
// progressively revealed via the `strokeDasharray` SVG attribute: the visible
|
|
5
|
+
// portion grows from 0 to the full path length as the animation progresses.
|
|
6
|
+
//
|
|
7
|
+
// Solid 2.0 deviations:
|
|
8
|
+
// - React reads `pathRef.current.getTotalLength()` synchronously during render.
|
|
9
|
+
// jsdom returns 0 for getTotalLength and the attribute `d` is only applied
|
|
10
|
+
// AFTER the ref fires, so measuring in a ref/render degrades the draw. We
|
|
11
|
+
// measure in an effect (after attributes land) into a signal and recompute the
|
|
12
|
+
// dasharray reactively — the same "measure in an effect, not the ref" idiom the
|
|
13
|
+
// previous Line port already documented.
|
|
14
|
+
// - `pathRef: RefObject<SVGPathElement>` (a read-only object ref) becomes our
|
|
15
|
+
// Curve's `pathRef` callback form; LineDrawShape owns the element capture and
|
|
16
|
+
// forwards the element to the parent-supplied `forwardPathRef` so the parent
|
|
17
|
+
// (<Line>) can drive `shouldUpdatePreviousRef`/`getVisibleLength` off the same
|
|
18
|
+
// measured length.
|
|
19
|
+
import { createEffect, createSignal, omit } from "solid-js";
|
|
20
|
+
import type { JSX } from "@solidjs/web";
|
|
21
|
+
import { Curve, type CurveProps } from "../shape/Curve";
|
|
22
|
+
import type { ShapeAnimationProps } from "../util/types";
|
|
23
|
+
|
|
24
|
+
/**
|
|
25
|
+
* Reads the total length of an SVG path element, returning 0 if the element is
|
|
26
|
+
* null or the measurement fails (e.g. in JSDOM).
|
|
27
|
+
*/
|
|
28
|
+
function getTotalLength(path: SVGPathElement | null | undefined): number {
|
|
29
|
+
try {
|
|
30
|
+
return (path && path.getTotalLength && path.getTotalLength()) || 0;
|
|
31
|
+
} catch {
|
|
32
|
+
return 0;
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
/**
|
|
37
|
+
* Generates a simple stroke-dasharray string for animating a line draw effect.
|
|
38
|
+
*
|
|
39
|
+
* Uses `totalLength` as the gap (instead of `totalLength - length`) to avoid a
|
|
40
|
+
* floating-point precision artifact that can render a phantom dot at the path
|
|
41
|
+
* endpoint with round or square strokeLinecap.
|
|
42
|
+
*/
|
|
43
|
+
function generateSimpleStrokeDasharray(totalLength: number, length: number): string {
|
|
44
|
+
return `${length}px ${totalLength}px`;
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
/**
|
|
48
|
+
* Normalizes a dash pattern to the even-length sequence SVG renderers use. Odd-length
|
|
49
|
+
* stroke-dasharray values repeat once, so "5" behaves like "5 5".
|
|
50
|
+
*/
|
|
51
|
+
function normalizeDashPattern(lines: number[]): number[] {
|
|
52
|
+
return lines.length % 2 !== 0 ? [...lines, ...lines] : lines;
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
/** Repeats a dash pattern array `count` times. */
|
|
56
|
+
function repeat(lines: number[], count: number): number[] {
|
|
57
|
+
const result: number[] = [];
|
|
58
|
+
for (let i = 0; i < count; ++i) {
|
|
59
|
+
result.push(...lines);
|
|
60
|
+
}
|
|
61
|
+
return result;
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
/**
|
|
65
|
+
* Computes a stroke-dasharray string for a custom-dashed line draw effect: reveals
|
|
66
|
+
* exactly `length` px of the user pattern, followed by a `totalLength` gap.
|
|
67
|
+
*/
|
|
68
|
+
function getStrokeDasharray(length: number, totalLength: number, lines: number[]): string {
|
|
69
|
+
const normalizedLines = normalizeDashPattern(lines);
|
|
70
|
+
const lineLength = normalizedLines.reduce((pre, next) => pre + next, 0);
|
|
71
|
+
|
|
72
|
+
if (!lineLength) {
|
|
73
|
+
return generateSimpleStrokeDasharray(totalLength, length);
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
const count = Math.floor(length / lineLength);
|
|
77
|
+
const remainLength = length % lineLength;
|
|
78
|
+
let remainLines: number[] = [];
|
|
79
|
+
for (let i = 0, sum = 0; i < normalizedLines.length; sum += normalizedLines[i] ?? 0, ++i) {
|
|
80
|
+
const lineValue = normalizedLines[i];
|
|
81
|
+
if (lineValue != null && sum + lineValue > remainLength) {
|
|
82
|
+
remainLines = [...normalizedLines.slice(0, i), remainLength - sum];
|
|
83
|
+
break;
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
const emptyLines = remainLines.length % 2 === 0 ? [0, totalLength] : [totalLength];
|
|
88
|
+
|
|
89
|
+
return [...repeat(normalizedLines, count), ...remainLines, ...emptyLines]
|
|
90
|
+
.map((line) => `${line}px`)
|
|
91
|
+
.join(", ");
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
/** Computes the animated stroke-dasharray for the current frame. */
|
|
95
|
+
function computeAnimatedStrokeDasharray(
|
|
96
|
+
userStrokeDasharray: string | number | undefined,
|
|
97
|
+
totalLength: number,
|
|
98
|
+
visibleLength: number,
|
|
99
|
+
): string {
|
|
100
|
+
if (userStrokeDasharray) {
|
|
101
|
+
const lines = `${userStrokeDasharray}`.split(/[,\s]+/gim).map((num) => parseFloat(num));
|
|
102
|
+
return getStrokeDasharray(visibleLength, totalLength, lines);
|
|
103
|
+
}
|
|
104
|
+
return generateSimpleStrokeDasharray(totalLength, visibleLength);
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
export type LineDrawShapeProps = Omit<CurveProps, "pathRef"> &
|
|
108
|
+
ShapeAnimationProps & {
|
|
109
|
+
/**
|
|
110
|
+
* The computed visible length of the SVG path during entrance animation, in pixels.
|
|
111
|
+
* - number: apply stroke-dasharray to reveal exactly this many pixels.
|
|
112
|
+
* - null/undefined: no entrance-driven stroke-dasharray is applied.
|
|
113
|
+
*
|
|
114
|
+
* Computed by `useAnimatedLineLength` in <Line>.
|
|
115
|
+
*/
|
|
116
|
+
visibleLength?: number | null;
|
|
117
|
+
/**
|
|
118
|
+
* Callback handed the underlying <path> element once it mounts, so <Line> can
|
|
119
|
+
* measure the same path length that drives this shape's dash. (Replaces sharing
|
|
120
|
+
* React's `pathRef` object.)
|
|
121
|
+
*/
|
|
122
|
+
forwardPathRef?: (el: SVGPathElement) => void;
|
|
123
|
+
};
|
|
124
|
+
|
|
125
|
+
/**
|
|
126
|
+
* The default shape for Line — see the recharts animation guide. Custom shapes can
|
|
127
|
+
* import it as a reference or reuse it directly via `<Line shape={LineDrawShape} />`.
|
|
128
|
+
*
|
|
129
|
+
* @since 3.9
|
|
130
|
+
*/
|
|
131
|
+
export function LineDrawShape(props: LineDrawShapeProps): JSX.Element {
|
|
132
|
+
// Measure the path length in an effect (NOT the ref callback): the ref fires
|
|
133
|
+
// before the dynamic `d` attribute is applied, where getTotalLength() is 0.
|
|
134
|
+
const [totalLength, setTotalLength] = createSignal(0);
|
|
135
|
+
let pathEl: SVGPathElement | undefined;
|
|
136
|
+
const capturePath = (el: SVGPathElement): void => {
|
|
137
|
+
pathEl = el;
|
|
138
|
+
props.forwardPathRef?.(el);
|
|
139
|
+
};
|
|
140
|
+
|
|
141
|
+
// Re-measure whenever the geometry or the animation frame changes (a data-change
|
|
142
|
+
// morph alters the path per frame; remeasuring once the frame committed gives the
|
|
143
|
+
// settled dash the new curve's true length — mirrors recharts recomputing
|
|
144
|
+
// totalLength on the post-animation re-render).
|
|
145
|
+
createEffect(
|
|
146
|
+
() => ({ points: props.points, visibleLength: props.visibleLength }),
|
|
147
|
+
() => {
|
|
148
|
+
if (pathEl?.getTotalLength == null) {
|
|
149
|
+
return;
|
|
150
|
+
}
|
|
151
|
+
const length = getTotalLength(pathEl);
|
|
152
|
+
setTotalLength(length);
|
|
153
|
+
},
|
|
154
|
+
);
|
|
155
|
+
|
|
156
|
+
const strokeDasharray = (): string | undefined => {
|
|
157
|
+
const visibleLength = props.visibleLength;
|
|
158
|
+
const userStrokeDasharray = props.strokeDasharray;
|
|
159
|
+
if (visibleLength != null) {
|
|
160
|
+
return computeAnimatedStrokeDasharray(userStrokeDasharray, totalLength(), visibleLength);
|
|
161
|
+
}
|
|
162
|
+
if (userStrokeDasharray != null) {
|
|
163
|
+
return String(userStrokeDasharray);
|
|
164
|
+
}
|
|
165
|
+
return undefined;
|
|
166
|
+
};
|
|
167
|
+
|
|
168
|
+
// Strip the animation-only props before forwarding to <Curve>; we set
|
|
169
|
+
// connectNulls/strokeDasharray/pathRef explicitly below. `omit` keeps the
|
|
170
|
+
// remaining props reactive (no destructuring of `props`).
|
|
171
|
+
const curveProps = omit(
|
|
172
|
+
props,
|
|
173
|
+
"animationElapsedTime",
|
|
174
|
+
"isAnimating",
|
|
175
|
+
"isEntrance",
|
|
176
|
+
"visibleLength",
|
|
177
|
+
"forwardPathRef",
|
|
178
|
+
"strokeDasharray",
|
|
179
|
+
"connectNulls",
|
|
180
|
+
);
|
|
181
|
+
|
|
182
|
+
return (
|
|
183
|
+
<Curve
|
|
184
|
+
{...curveProps}
|
|
185
|
+
connectNulls={props.connectNulls ?? false}
|
|
186
|
+
strokeDasharray={strokeDasharray()}
|
|
187
|
+
pathRef={capturePath}
|
|
188
|
+
/>
|
|
189
|
+
);
|
|
190
|
+
}
|
|
@@ -0,0 +1,275 @@
|
|
|
1
|
+
// Ported from recharts 3.8.1 src/cartesian/ReferenceArea.tsx (commit 7a23854).
|
|
2
|
+
//
|
|
3
|
+
// Draws a rectangle spanning a DATA-coordinate range (x1..x2, y1..y2), mapped to
|
|
4
|
+
// pixels through the cartesian scale spine. Omitted edges extend to the plot-area
|
|
5
|
+
// boundary (rangeMin/rangeMax of the corresponding scale).
|
|
6
|
+
//
|
|
7
|
+
// Solid deviations (documented):
|
|
8
|
+
// - resolveDefaultProps → `merge`; useEffect add/remove → createEffect + onCleanup.
|
|
9
|
+
// - The registered settings carry a generated `id` (proxy-safe removal).
|
|
10
|
+
// - recharts builds the rect from NullableCoordinate via `@ts-expect-error`
|
|
11
|
+
// (relying on JS `null`→0 arithmetic coercion in rectWithPoints). We make that
|
|
12
|
+
// explicit with `?? 0`, keeping it typed (no assertions). The isInRange discard
|
|
13
|
+
// check still uses the nullable coordinates.
|
|
14
|
+
// - The `label` prop IS wired (CartesianLabelFromLabelProp), and the rect renders
|
|
15
|
+
// inside <ZIndexLayer zIndex={merged.zIndex ?? DefaultZIndexes.area}>.
|
|
16
|
+
// - PERMANENT-N/A (by design, NOT deferred): the custom-element `shape` branch
|
|
17
|
+
// (React.cloneElement — use the render-function form). <Label>
|
|
18
|
+
// CHILDREN are not rendered (the `label` prop is).
|
|
19
|
+
import { createEffect, createMemo, merge, Show } from "solid-js";
|
|
20
|
+
import type { JSX } from "@solidjs/web";
|
|
21
|
+
import { Layer } from "../container/Layer";
|
|
22
|
+
import {
|
|
23
|
+
CartesianLabelContextProvider,
|
|
24
|
+
CartesianLabelFromLabelProp,
|
|
25
|
+
type ImplicitLabelType,
|
|
26
|
+
} from "../component/Label";
|
|
27
|
+
import { rectWithPoints } from "../util/CartesianUtils";
|
|
28
|
+
import { IfOverflow } from "../util/IfOverflow";
|
|
29
|
+
import { isNumOrStr } from "../util/DataUtils";
|
|
30
|
+
import { type RectangleProps, Rectangle } from "../shape/Rectangle";
|
|
31
|
+
import type { ReferenceAreaSettings } from "../state/referenceElementsSlice";
|
|
32
|
+
import { useAppSelector, useAppStore } from "../state/hooks";
|
|
33
|
+
import { selectAxisScale } from "../state/selectors/axisSelectors";
|
|
34
|
+
import { useIsPanorama } from "../context/PanoramaContext";
|
|
35
|
+
import { useClipPathId } from "../container/ClipPathProvider";
|
|
36
|
+
import { svgPropertiesAndEventsKeepCase } from "../util/svgPropertiesAndEvents";
|
|
37
|
+
import { useUniqueId } from "../util/useUniqueId";
|
|
38
|
+
import { RectanglePosition } from "../util/types";
|
|
39
|
+
import { RechartsScale } from "../util/scale/RechartsScale";
|
|
40
|
+
import { CartesianScaleHelperImpl } from "../util/scale/CartesianScaleHelper";
|
|
41
|
+
import type { AxisId } from "../state/cartesianAxisSlice";
|
|
42
|
+
import { DefaultZIndexes } from "../zIndex/DefaultZIndexes";
|
|
43
|
+
import { ZIndexLayer } from "../zIndex/ZIndexLayer";
|
|
44
|
+
import { unregisterOnCleanup } from "../state/unregisterOnCleanup";
|
|
45
|
+
|
|
46
|
+
type ReferenceCoordinateValue = number | string;
|
|
47
|
+
|
|
48
|
+
export interface ReferenceAreaProps<
|
|
49
|
+
XValueType extends ReferenceCoordinateValue = ReferenceCoordinateValue,
|
|
50
|
+
YValueType extends ReferenceCoordinateValue = ReferenceCoordinateValue,
|
|
51
|
+
> {
|
|
52
|
+
/** Starting X-coordinate (data space). Extends to the left edge if undefined. */
|
|
53
|
+
x1?: XValueType;
|
|
54
|
+
/** Ending X-coordinate (data space). Extends to the right edge if undefined. */
|
|
55
|
+
x2?: XValueType;
|
|
56
|
+
/** Starting Y-coordinate (data space). Extends to the top edge if undefined. */
|
|
57
|
+
y1?: YValueType;
|
|
58
|
+
/** Ending Y-coordinate (data space). Extends to the bottom edge if undefined. */
|
|
59
|
+
y2?: YValueType;
|
|
60
|
+
/** The id of the corresponding y-axis. @defaultValue 0 */
|
|
61
|
+
yAxisId?: AxisId;
|
|
62
|
+
/** The id of the corresponding x-axis. @defaultValue 0 */
|
|
63
|
+
xAxisId?: AxisId;
|
|
64
|
+
/** Defines how to draw the area when it overflows the plot area. @defaultValue 'discard' */
|
|
65
|
+
ifOverflow?: IfOverflow;
|
|
66
|
+
/** Custom render function for the area shape. */
|
|
67
|
+
shape?: (props: RectangleProps) => JSX.Element;
|
|
68
|
+
/** A single label rendered inside the area. @defaultValue false */
|
|
69
|
+
label?: ImplicitLabelType;
|
|
70
|
+
/** Stacking order within the chart's z-index system. @defaultValue DefaultZIndexes.area */
|
|
71
|
+
zIndex?: number;
|
|
72
|
+
class?: string;
|
|
73
|
+
children?: JSX.Element;
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
export type Props<
|
|
77
|
+
XValueType extends ReferenceCoordinateValue = ReferenceCoordinateValue,
|
|
78
|
+
YValueType extends ReferenceCoordinateValue = ReferenceCoordinateValue,
|
|
79
|
+
> = Omit<RectangleProps, "width" | "height" | "x" | "y" | "class"> &
|
|
80
|
+
ReferenceAreaProps<XValueType, YValueType>;
|
|
81
|
+
|
|
82
|
+
const getRect = (
|
|
83
|
+
hasX1: boolean,
|
|
84
|
+
hasX2: boolean,
|
|
85
|
+
hasY1: boolean,
|
|
86
|
+
hasY2: boolean,
|
|
87
|
+
xAxisScale: RechartsScale,
|
|
88
|
+
yAxisScale: RechartsScale,
|
|
89
|
+
props: { x1?: unknown; x2?: unknown; y1?: unknown; y2?: unknown; ifOverflow: IfOverflow },
|
|
90
|
+
): RectanglePosition | null => {
|
|
91
|
+
const scales = new CartesianScaleHelperImpl({ x: xAxisScale, y: yAxisScale });
|
|
92
|
+
|
|
93
|
+
const p1x = hasX1
|
|
94
|
+
? (xAxisScale.map(props.x1, { position: "start" }) ?? null)
|
|
95
|
+
: xAxisScale.rangeMin();
|
|
96
|
+
const p1y = hasY1
|
|
97
|
+
? (yAxisScale.map(props.y1, { position: "start" }) ?? null)
|
|
98
|
+
: yAxisScale.rangeMin();
|
|
99
|
+
const p2x = hasX2
|
|
100
|
+
? (xAxisScale.map(props.x2, { position: "end" }) ?? null)
|
|
101
|
+
: xAxisScale.rangeMax();
|
|
102
|
+
const p2y = hasY2
|
|
103
|
+
? (yAxisScale.map(props.y2, { position: "end" }) ?? null)
|
|
104
|
+
: yAxisScale.rangeMax();
|
|
105
|
+
|
|
106
|
+
if (
|
|
107
|
+
props.ifOverflow === "discard" &&
|
|
108
|
+
(!scales.isInRange({ x: p1x, y: p1y }) || !scales.isInRange({ x: p2x, y: p2y }))
|
|
109
|
+
) {
|
|
110
|
+
return null;
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
// recharts passes NullableCoordinate here behind an `@ts-expect-error`; the
|
|
114
|
+
// `?? 0` makes the JS null→0 arithmetic coercion (in rectWithPoints) explicit.
|
|
115
|
+
return rectWithPoints({ x: p1x ?? 0, y: p1y ?? 0 }, { x: p2x ?? 0, y: p2y ?? 0 });
|
|
116
|
+
};
|
|
117
|
+
|
|
118
|
+
const renderRect = (option: ReferenceAreaProps["shape"], props: RectangleProps): JSX.Element => {
|
|
119
|
+
if (typeof option === "function") {
|
|
120
|
+
return option(props);
|
|
121
|
+
}
|
|
122
|
+
return <Rectangle {...props} class="recharts-reference-area-rect" />;
|
|
123
|
+
};
|
|
124
|
+
|
|
125
|
+
function ReportReferenceArea(props: ReferenceAreaSettings): JSX.Element {
|
|
126
|
+
const store = useAppStore();
|
|
127
|
+
let prev: ReferenceAreaSettings | null = null;
|
|
128
|
+
|
|
129
|
+
createEffect(
|
|
130
|
+
(): ReferenceAreaSettings => ({
|
|
131
|
+
id: props.id,
|
|
132
|
+
xAxisId: props.xAxisId,
|
|
133
|
+
yAxisId: props.yAxisId,
|
|
134
|
+
ifOverflow: props.ifOverflow,
|
|
135
|
+
x1: props.x1,
|
|
136
|
+
x2: props.x2,
|
|
137
|
+
y1: props.y1,
|
|
138
|
+
y2: props.y2,
|
|
139
|
+
}),
|
|
140
|
+
(settings) => {
|
|
141
|
+
if (store == null) {
|
|
142
|
+
return;
|
|
143
|
+
}
|
|
144
|
+
if (prev === null) {
|
|
145
|
+
store.actions.referenceElements.addArea(settings);
|
|
146
|
+
} else if (prev !== settings) {
|
|
147
|
+
store.actions.referenceElements.removeArea(prev);
|
|
148
|
+
store.actions.referenceElements.addArea(settings);
|
|
149
|
+
}
|
|
150
|
+
prev = settings;
|
|
151
|
+
},
|
|
152
|
+
);
|
|
153
|
+
|
|
154
|
+
unregisterOnCleanup(() => {
|
|
155
|
+
if (prev && store != null) {
|
|
156
|
+
store.actions.referenceElements.removeArea(prev);
|
|
157
|
+
prev = null;
|
|
158
|
+
}
|
|
159
|
+
});
|
|
160
|
+
|
|
161
|
+
return null;
|
|
162
|
+
}
|
|
163
|
+
|
|
164
|
+
const referenceAreaDefaultProps = {
|
|
165
|
+
ifOverflow: "discard",
|
|
166
|
+
xAxisId: 0,
|
|
167
|
+
yAxisId: 0,
|
|
168
|
+
radius: 0,
|
|
169
|
+
fill: "#ccc",
|
|
170
|
+
stroke: "none",
|
|
171
|
+
fillOpacity: 0.5,
|
|
172
|
+
strokeWidth: 1,
|
|
173
|
+
label: false,
|
|
174
|
+
} as const satisfies Partial<Props>;
|
|
175
|
+
|
|
176
|
+
function ReferenceAreaImpl(props: Props): JSX.Element {
|
|
177
|
+
const merged = merge(referenceAreaDefaultProps, props);
|
|
178
|
+
const clipPathId = useClipPathId();
|
|
179
|
+
const isPanorama = useIsPanorama();
|
|
180
|
+
const xAxisScale = useAppSelector((s) => selectAxisScale(s, "xAxis", merged.xAxisId, isPanorama));
|
|
181
|
+
const yAxisScale = useAppSelector((s) => selectAxisScale(s, "yAxis", merged.yAxisId, isPanorama));
|
|
182
|
+
|
|
183
|
+
const rect = createMemo<RectanglePosition | null>(() => {
|
|
184
|
+
const xs = xAxisScale();
|
|
185
|
+
const ys = yAxisScale();
|
|
186
|
+
if (xs == null || ys == null) {
|
|
187
|
+
return null;
|
|
188
|
+
}
|
|
189
|
+
const hasX1 = isNumOrStr(merged.x1);
|
|
190
|
+
const hasX2 = isNumOrStr(merged.x2);
|
|
191
|
+
const hasY1 = isNumOrStr(merged.y1);
|
|
192
|
+
const hasY2 = isNumOrStr(merged.y2);
|
|
193
|
+
if (!hasX1 && !hasX2 && !hasY1 && !hasY2 && merged.shape == null) {
|
|
194
|
+
return null;
|
|
195
|
+
}
|
|
196
|
+
return getRect(hasX1, hasX2, hasY1, hasY2, xs, ys, {
|
|
197
|
+
x1: merged.x1,
|
|
198
|
+
x2: merged.x2,
|
|
199
|
+
y1: merged.y1,
|
|
200
|
+
y2: merged.y2,
|
|
201
|
+
ifOverflow: merged.ifOverflow,
|
|
202
|
+
});
|
|
203
|
+
});
|
|
204
|
+
|
|
205
|
+
// The memo returns the rect PROPS (or null) — all reactive prop reads (the svg
|
|
206
|
+
// spread) happen in this tracking scope. Show keys on it; the callback only
|
|
207
|
+
// reads the memo accessor + the (static) shape, so no untracked reads.
|
|
208
|
+
const rectProps = createMemo<RectangleProps | null>(() => {
|
|
209
|
+
const r = rect();
|
|
210
|
+
if (r == null && merged.shape == null) {
|
|
211
|
+
return null;
|
|
212
|
+
}
|
|
213
|
+
const clipPath = merged.ifOverflow === "hidden" ? `url(#${clipPathId})` : undefined;
|
|
214
|
+
return {
|
|
215
|
+
clipPath,
|
|
216
|
+
...svgPropertiesAndEventsKeepCase({ ...merged }),
|
|
217
|
+
...(r ?? {}),
|
|
218
|
+
};
|
|
219
|
+
});
|
|
220
|
+
|
|
221
|
+
return (
|
|
222
|
+
<Show when={rectProps()}>
|
|
223
|
+
{(p) => (
|
|
224
|
+
<ZIndexLayer zIndex={merged.zIndex ?? DefaultZIndexes.area}>
|
|
225
|
+
<Layer class="recharts-reference-area">
|
|
226
|
+
{renderRect(merged.shape, p())}
|
|
227
|
+
<Show when={rect()}>
|
|
228
|
+
{(box) => (
|
|
229
|
+
<CartesianLabelContextProvider
|
|
230
|
+
x={box().x}
|
|
231
|
+
y={box().y}
|
|
232
|
+
width={box().width}
|
|
233
|
+
height={box().height}
|
|
234
|
+
upperWidth={box().width}
|
|
235
|
+
lowerWidth={box().width}
|
|
236
|
+
>
|
|
237
|
+
<CartesianLabelFromLabelProp label={merged.label} />
|
|
238
|
+
</CartesianLabelContextProvider>
|
|
239
|
+
)}
|
|
240
|
+
</Show>
|
|
241
|
+
</Layer>
|
|
242
|
+
</ZIndexLayer>
|
|
243
|
+
)}
|
|
244
|
+
</Show>
|
|
245
|
+
);
|
|
246
|
+
}
|
|
247
|
+
|
|
248
|
+
/**
|
|
249
|
+
* Draws a rectangular area on the chart spanning a data-coordinate range (the
|
|
250
|
+
* cartesian-aware version of {@link Rectangle}).
|
|
251
|
+
*/
|
|
252
|
+
export function ReferenceArea<
|
|
253
|
+
XValueType extends ReferenceCoordinateValue = ReferenceCoordinateValue,
|
|
254
|
+
YValueType extends ReferenceCoordinateValue = ReferenceCoordinateValue,
|
|
255
|
+
>(props: Props<XValueType, YValueType>): JSX.Element {
|
|
256
|
+
const merged = merge(referenceAreaDefaultProps, props);
|
|
257
|
+
const id = useUniqueId("recharts-reference-area");
|
|
258
|
+
return (
|
|
259
|
+
<>
|
|
260
|
+
<ReportReferenceArea
|
|
261
|
+
id={id}
|
|
262
|
+
yAxisId={merged.yAxisId}
|
|
263
|
+
xAxisId={merged.xAxisId}
|
|
264
|
+
ifOverflow={merged.ifOverflow}
|
|
265
|
+
x1={merged.x1}
|
|
266
|
+
x2={merged.x2}
|
|
267
|
+
y1={merged.y1}
|
|
268
|
+
y2={merged.y2}
|
|
269
|
+
/>
|
|
270
|
+
<ReferenceAreaImpl {...props} />
|
|
271
|
+
</>
|
|
272
|
+
);
|
|
273
|
+
}
|
|
274
|
+
|
|
275
|
+
ReferenceArea.displayName = "ReferenceArea";
|