solid-recharts 0.2.0 → 1.0.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/package.json +17 -13
- package/src/animation/AnimatedItems.tsx +2 -4
- package/src/animation/CSSTransitionAnimate.tsx +41 -39
- package/src/animation/JavascriptAnimate.tsx +45 -41
- package/src/cartesian/Area.tsx +43 -58
- package/src/cartesian/AreaRevealShape.tsx +1 -1
- package/src/cartesian/Bar.tsx +98 -78
- package/src/cartesian/BarStack.tsx +10 -7
- package/src/cartesian/Brush.tsx +20 -16
- package/src/cartesian/CartesianAxis.tsx +4 -4
- package/src/cartesian/CartesianGrid.tsx +5 -5
- package/src/cartesian/ErrorBar.tsx +9 -7
- package/src/cartesian/Funnel.tsx +17 -21
- package/src/cartesian/GraphicalItemClipPath.tsx +1 -1
- package/src/cartesian/Line.tsx +51 -66
- package/src/cartesian/LineDrawShape.tsx +20 -17
- package/src/cartesian/ReferenceArea.tsx +28 -38
- package/src/cartesian/ReferenceDot.tsx +27 -37
- package/src/cartesian/ReferenceLine.tsx +28 -37
- package/src/cartesian/RenderedTicksReporter.tsx +19 -17
- package/src/cartesian/Scatter.tsx +27 -39
- package/src/cartesian/XAxis.tsx +55 -68
- package/src/cartesian/YAxis.tsx +88 -99
- package/src/cartesian/ZAxis.tsx +29 -41
- package/src/chart/AreaChart.tsx +1 -1
- package/src/chart/BarChart.tsx +1 -1
- package/src/chart/CartesianChart.tsx +4 -3
- package/src/chart/CategoricalChart.tsx +5 -5
- package/src/chart/ComposedChart.tsx +1 -1
- package/src/chart/FunnelChart.tsx +1 -1
- package/src/chart/LineChart.tsx +1 -1
- package/src/chart/PieChart.tsx +4 -3
- package/src/chart/PolarChart.tsx +4 -3
- package/src/chart/RadarChart.tsx +4 -3
- package/src/chart/RadialBarChart.tsx +7 -3
- package/src/chart/RechartsWrapper.tsx +14 -24
- package/src/chart/Sankey.tsx +9 -6
- package/src/chart/ScatterChart.tsx +1 -1
- package/src/chart/SunburstChart.tsx +6 -5
- package/src/chart/Treemap.tsx +5 -4
- package/src/component/ActivePoints.tsx +6 -15
- package/src/component/Cell.tsx +23 -5
- package/src/component/Cursor.tsx +3 -3
- package/src/component/DefaultLegendContent.tsx +8 -6
- package/src/component/DefaultTooltipContent.tsx +14 -10
- package/src/component/Dots.tsx +11 -7
- package/src/component/Label.tsx +13 -10
- package/src/component/LabelList.tsx +12 -7
- package/src/component/Legend.tsx +26 -21
- package/src/component/ResponsiveContainer.tsx +52 -49
- package/src/component/Text.tsx +5 -5
- package/src/component/Tooltip.tsx +21 -18
- package/src/component/TooltipBoundingBox.tsx +18 -16
- package/src/component/responsiveContainerUtils.ts +1 -1
- package/src/container/ClipPathProvider.tsx +3 -3
- package/src/container/Layer.tsx +5 -5
- package/src/container/RootSurface.tsx +1 -1
- package/src/container/Surface.tsx +5 -6
- package/src/context/ErrorBarContext.tsx +17 -26
- package/src/context/PanoramaContext.tsx +2 -2
- package/src/context/RegisterGraphicalItemId.tsx +4 -2
- package/src/context/chartDataContext.tsx +26 -23
- package/src/context/chartLayoutContext.tsx +16 -12
- package/src/polar/Pie.tsx +49 -60
- package/src/polar/PolarAngleAxis.tsx +43 -52
- package/src/polar/PolarGrid.tsx +5 -5
- package/src/polar/PolarRadiusAxis.tsx +42 -50
- package/src/polar/Radar.tsx +24 -36
- package/src/polar/RadialBar.tsx +23 -41
- package/src/shape/Cross.tsx +5 -5
- package/src/shape/Curve.tsx +7 -8
- package/src/shape/Dot.tsx +4 -4
- package/src/shape/Polygon.tsx +5 -5
- package/src/shape/Rectangle.tsx +22 -20
- package/src/shape/Sector.tsx +5 -5
- package/src/shape/Symbols.tsx +6 -6
- package/src/shape/Trapezoid.tsx +29 -27
- package/src/state/RechartsStoreProvider.tsx +5 -3
- package/src/state/ReportChartProps.tsx +8 -6
- package/src/state/ReportEventSettings.tsx +8 -6
- package/src/state/ReportMainChartProps.tsx +11 -9
- package/src/state/ReportPolarOptions.tsx +15 -13
- package/src/state/SetLegendPayload.ts +20 -28
- package/src/state/SetTooltipEntrySettings.tsx +10 -27
- package/src/state/brushSlice.ts +10 -8
- package/src/state/cartesianAxisSlice.ts +72 -84
- package/src/state/chartDataSlice.ts +29 -23
- package/src/state/createCollectionActions.ts +51 -0
- package/src/state/createSelector.ts +97 -0
- package/src/state/errorBarSlice.ts +22 -16
- package/src/state/eventSettingsSlice.ts +11 -9
- package/src/state/externalEventsMiddleware.ts +2 -11
- package/src/state/graphicalItemsSlice.ts +35 -44
- package/src/state/isEventThrottled.ts +12 -0
- package/src/state/keyboardEventsMiddleware.ts +2 -8
- package/src/state/layoutSlice.ts +29 -17
- package/src/state/legendSlice.ts +35 -31
- package/src/state/mouseEventsMiddleware.ts +2 -13
- package/src/state/optionsSlice.ts +8 -6
- package/src/state/patched.ts +19 -0
- package/src/state/polarAxisSlice.ts +21 -13
- package/src/state/polarOptionsSlice.ts +16 -14
- package/src/state/referenceElementsSlice.ts +49 -34
- package/src/state/registerInStore.ts +70 -0
- package/src/state/renderedTicksSlice.ts +11 -7
- package/src/state/rootPropsSlice.ts +16 -14
- package/src/state/selectors/areaSelectors.ts +13 -36
- package/src/state/selectors/arrayEqualityCheck.ts +32 -7
- package/src/state/selectors/axisSelectors.ts +215 -169
- package/src/state/selectors/barSelectors.ts +8 -36
- package/src/state/selectors/combiners/combineConfiguredScale.ts +1 -1
- package/src/state/selectors/combiners/combineRealScaleType.ts +1 -1
- package/src/state/selectors/dataSelectors.ts +35 -16
- package/src/state/selectors/numberDomainEqualityCheck.ts +16 -8
- package/src/state/selectors/selectAxisForGraphicalItem.ts +52 -0
- package/src/state/tooltipSlice.ts +135 -86
- package/src/state/unregisterOnCleanup.ts +5 -20
- package/src/state/zIndexSlice.ts +50 -42
- package/src/synchronisation/useChartSynchronisation.tsx +213 -217
- package/src/util/ActiveShapeUtils.tsx +2 -9
- package/src/util/BarUtils.tsx +30 -23
- package/src/util/ChartUtils.ts +69 -25
- package/src/util/DirectPortal.tsx +107 -0
- package/src/util/FunnelUtils.tsx +1 -1
- package/src/util/RadialBarUtils.tsx +4 -3
- package/src/util/createCartesianCharts.tsx +1 -1
- package/src/util/createPolarCharts.tsx +1 -1
- package/src/util/propsAreEqual.ts +3 -33
- package/src/util/stacks/stackTypes.ts +1 -1
- package/src/util/svgPropertiesAndEvents.ts +1 -1
- package/src/util/tooltip/translate.ts +2 -2
- package/src/util/types.ts +3 -3
- package/src/zIndex/ZIndexLayer.tsx +39 -68
- package/src/zIndex/ZIndexPortal.tsx +29 -25
- package/src/state/reduxDevtoolsJsonStringifyReplacer.ts +0 -15
- package/src/util/axisPropsAreEqual.ts +0 -42
- package/src/util/resolveDefaultProps.tsx +0 -8
- package/src/util/typedDataKey.ts +0 -8
- package/test/_data.ts +0 -408
- package/test/animation/AnimationController.typed.spec.ts +0 -53
- package/test/animation/AnimationControllerImpl.spec.ts +0 -271
- package/test/animation/CSSTransitionAnimate.timing.spec.tsx +0 -473
- package/test/animation/JavascriptAnimate.spec.tsx +0 -62
- package/test/animation/RechartsAnimation.spec.ts +0 -636
- package/test/animation/easing.spec.ts +0 -218
- package/test/animation/legacyAnimationLengthChange.spec.tsx +0 -803
- package/test/animation/matchBy.spec.ts +0 -467
- package/test/animation/mockAnimationController.ts +0 -40
- package/test/animation/mockControllerAnimationManager.ts +0 -143
- package/test/animation/mockTimeoutController.ts +0 -114
- package/test/animation/timeoutController.spec.ts +0 -138
- package/test/animation/useAnimationStartSnapshot.spec.ts +0 -147
- package/test/animation/util.spec.ts +0 -28
- package/test/cartesian/Area.animation.spec.tsx +0 -363
- package/test/cartesian/Area.range.spec.tsx +0 -54
- package/test/cartesian/Area.spec.tsx +0 -1202
- package/test/cartesian/Area.stacked.render.spec.tsx +0 -69
- package/test/cartesian/Area.typed.spec.tsx +0 -209
- package/test/cartesian/Axis.integration.spec.tsx +0 -158
- package/test/cartesian/Bar/Bar.csstransition.spec.tsx +0 -299
- package/test/cartesian/Bar/Bar.spec.tsx +0 -2314
- package/test/cartesian/Bar/Bar.typed.spec.tsx +0 -192
- package/test/cartesian/Bar.animation.spec.tsx +0 -426
- package/test/cartesian/Bar.stackDomain.spec.tsx +0 -66
- package/test/cartesian/Bar.stacked.render.spec.tsx +0 -53
- package/test/cartesian/Bar.truncateByDomain.spec.tsx +0 -237
- package/test/cartesian/Bar.zeroDimensionFiltering.spec.tsx +0 -336
- package/test/cartesian/BarStack.spec.tsx +0 -91
- package/test/cartesian/Brush.keyboard.spec.tsx +0 -88
- package/test/cartesian/Brush.panorama.spec.tsx +0 -41
- package/test/cartesian/Brush.props.spec.tsx +0 -63
- package/test/cartesian/Brush.render.spec.tsx +0 -117
- package/test/cartesian/Brush.spec.tsx +0 -522
- package/test/cartesian/Brush.stacked.spec.tsx +0 -221
- package/test/cartesian/CartesianAxis.render.spec.tsx +0 -50
- package/test/cartesian/CartesianAxis.spec.tsx +0 -396
- package/test/cartesian/CartesianGrid.render.spec.tsx +0 -39
- package/test/cartesian/CartesianGrid.spec.tsx +0 -2103
- package/test/cartesian/ErrorBar.render.spec.tsx +0 -69
- package/test/cartesian/ErrorBar.spec.tsx +0 -2414
- package/test/cartesian/Funnel.animation.spec.tsx +0 -241
- package/test/cartesian/Funnel.spec.tsx +0 -226
- package/test/cartesian/Funnel.typed.spec.tsx +0 -221
- package/test/cartesian/GraphicalItemClipPath.scale-behavior.spec.tsx +0 -627
- package/test/cartesian/GraphicalItemClipPath.spec.tsx +0 -427
- package/test/cartesian/Line.animation.spec.tsx +0 -643
- package/test/cartesian/Line.sparseAnimationPath.spec.tsx +0 -98
- package/test/cartesian/Line.spec.tsx +0 -471
- package/test/cartesian/Line.typed.spec.tsx +0 -152
- package/test/cartesian/ReferenceArea.render.spec.tsx +0 -63
- package/test/cartesian/ReferenceArea.spec.tsx +0 -663
- package/test/cartesian/ReferenceArea.typed.spec.tsx +0 -74
- package/test/cartesian/ReferenceDot.render.spec.tsx +0 -55
- package/test/cartesian/ReferenceDot.spec.tsx +0 -462
- package/test/cartesian/ReferenceDot.typed.spec.tsx +0 -76
- package/test/cartesian/ReferenceLine/ReferenceLine.panorama.spec.tsx +0 -184
- package/test/cartesian/ReferenceLine/ReferenceLine.spec.tsx +0 -744
- package/test/cartesian/ReferenceLine/ReferenceLine.typed.spec.tsx +0 -74
- package/test/cartesian/ReferenceLine/getEndPoints.spec.ts +0 -399
- package/test/cartesian/ReferenceLine.render.spec.tsx +0 -134
- package/test/cartesian/Scatter.animation.spec.tsx +0 -381
- package/test/cartesian/Scatter.render.spec.tsx +0 -61
- package/test/cartesian/Scatter.spec.tsx +0 -406
- package/test/cartesian/Scatter.typed.spec.tsx +0 -153
- package/test/cartesian/XAxis/XAxis.barSize.spec.tsx +0 -336
- package/test/cartesian/XAxis/XAxis.brush.spec.tsx +0 -266
- package/test/cartesian/XAxis/XAxis.categorydomain.spec.tsx +0 -872
- package/test/cartesian/XAxis/XAxis.dataKey.spec.tsx +0 -86
- package/test/cartesian/XAxis/XAxis.datatypes.spec.tsx +0 -127
- package/test/cartesian/XAxis/XAxis.hide.spec.tsx +0 -106
- package/test/cartesian/XAxis/XAxis.multiaxis.spec.tsx +0 -336
- package/test/cartesian/XAxis/XAxis.numberdomain.spec.tsx +0 -1466
- package/test/cartesian/XAxis/XAxis.padding.spec.tsx +0 -758
- package/test/cartesian/XAxis/XAxis.padding_clip.spec.tsx +0 -65
- package/test/cartesian/XAxis/XAxis.state.spec.tsx +0 -355
- package/test/cartesian/XAxis/XAxis.tick.spec.tsx +0 -493
- package/test/cartesian/XAxis/XAxis.timescale.spec.tsx +0 -233
- package/test/cartesian/XAxis/XAxis.type.spec.tsx +0 -107
- package/test/cartesian/XAxis/XAxis.typed.spec.tsx +0 -102
- package/test/cartesian/XAxis/XAxis.vertical.spec.tsx +0 -265
- package/test/cartesian/XAxis.tickFormatter.spec.tsx +0 -54
- package/test/cartesian/YAxis/YAxis.7362.derivedDomain.spec.tsx +0 -230
- package/test/cartesian/YAxis/YAxis.7362.spec.tsx +0 -104
- package/test/cartesian/YAxis/YAxis.interval-zero.spec.tsx +0 -88
- package/test/cartesian/YAxis/YAxis.label.spec.tsx +0 -219
- package/test/cartesian/YAxis/YAxis.spec.tsx +0 -1595
- package/test/cartesian/YAxis/YAxis.tick.spec.tsx +0 -428
- package/test/cartesian/YAxis/YAxis.tickFormatter.spec.tsx +0 -54
- package/test/cartesian/YAxis/YAxis.ticks.spec.tsx +0 -263
- package/test/cartesian/YAxis/YAxis.type.spec.tsx +0 -107
- package/test/cartesian/YAxis/YAxis.typed.spec.tsx +0 -102
- package/test/cartesian/ZAxis.spec.tsx +0 -300
- package/test/cartesian/ZAxis.typed.spec.tsx +0 -33
- package/test/cartesian/__snapshots__/Brush.spec.tsx.snap +0 -5
- package/test/cartesian/axisLineAndStroke.spec.tsx +0 -72
- package/test/cartesian/getCartesianPosition.spec.ts +0 -907
- package/test/cartesian/getEquidistantTicks.spec.ts +0 -88
- package/test/cartesian/getTicks.spec.ts +0 -378
- package/test/cartesian/miscFeatureGaps.spec.tsx +0 -89
- package/test/cartesian/useAnimatedLineLength.spec.ts +0 -168
- package/test/chart/AccessibilityLayer.spec.tsx +0 -569
- package/test/chart/AccessibilityScans.spec.tsx +0 -286
- package/test/chart/AreaChart.spec.tsx +0 -409
- package/test/chart/AreaChart.stacked.spec.tsx +0 -1407
- package/test/chart/AreaChart.typed.spec.tsx +0 -39
- package/test/chart/BarChart.spec.tsx +0 -3719
- package/test/chart/BarChart.typed.spec.tsx +0 -60
- package/test/chart/CategoricalChart.spec.tsx +0 -255
- package/test/chart/ComposedChart.spec.tsx +0 -199
- package/test/chart/ComposedChart.typed.spec.tsx +0 -39
- package/test/chart/FunnelChart.spec.tsx +0 -215
- package/test/chart/FunnelChart.typed.spec.tsx +0 -39
- package/test/chart/LineChart.multiseries.spec.tsx +0 -50
- package/test/chart/LineChart.smoke.spec.tsx +0 -50
- package/test/chart/LineChart.spec.tsx +0 -930
- package/test/chart/LineChart.typed.spec.tsx +0 -39
- package/test/chart/NicheChartTooltip.spec.tsx +0 -81
- package/test/chart/PieChart.spec.tsx +0 -793
- package/test/chart/PieChart.typed.spec.tsx +0 -39
- package/test/chart/RadarChart.spec.tsx +0 -530
- package/test/chart/RadarChart.typed.spec.tsx +0 -39
- package/test/chart/RadialBarChart.5966.spec.tsx +0 -48
- package/test/chart/RadialBarChart.spec.tsx +0 -679
- package/test/chart/RadialBarChart.typed.spec.tsx +0 -39
- package/test/chart/RechartsWrapper.spec.tsx +0 -83
- package/test/chart/Sankey.content.spec.tsx +0 -46
- package/test/chart/Sankey.spec.tsx +0 -952
- package/test/chart/Sankey.typed.spec.tsx +0 -29
- package/test/chart/ScatterChart.spec.tsx +0 -2613
- package/test/chart/ScatterChart.typed.spec.tsx +0 -39
- package/test/chart/SunburstChart.spec.tsx +0 -146
- package/test/chart/Treemap.animation.spec.tsx +0 -52
- package/test/chart/Treemap.spec.tsx +0 -1003
- package/test/chart/Treemap.typed.spec.tsx +0 -26
- package/test/chart/chartEvents.spec.tsx +0 -127
- package/test/chart/responsive.spec.tsx +0 -620
- package/test/component/Cell.render.spec.tsx +0 -155
- package/test/component/Cell.spec.tsx +0 -12
- package/test/component/Cursor.spec.tsx +0 -186
- package/test/component/DefaultTooltipContent.spec.tsx +0 -102
- package/test/component/Label.render.spec.tsx +0 -63
- package/test/component/Label.spec.tsx +0 -686
- package/test/component/Label.typed.spec.tsx +0 -46
- package/test/component/LabelList.spec.tsx +0 -188
- package/test/component/Legend.itemSorter.spec.tsx +0 -704
- package/test/component/Legend.render.spec.tsx +0 -92
- package/test/component/Legend.spec.tsx +0 -2213
- package/test/component/Legend.typed.spec.tsx +0 -22
- package/test/component/ResponsiveContainer.spec.tsx +0 -523
- package/test/component/ResponsiveContainerDataTest.spec.tsx +0 -51
- package/test/component/Text.spec.tsx +0 -415
- package/test/component/Text.typed.spec.tsx +0 -46
- package/test/component/Tooltip/ActiveDot.spec.tsx +0 -370
- package/test/component/Tooltip/Tooltip.animation.spec.tsx +0 -209
- package/test/component/Tooltip/Tooltip.content.spec.tsx +0 -128
- package/test/component/Tooltip/Tooltip.formatter.spec.tsx +0 -152
- package/test/component/Tooltip/Tooltip.includeHidden.spec.tsx +0 -79
- package/test/component/Tooltip/Tooltip.multipleDataArrays.spec.tsx +0 -165
- package/test/component/Tooltip/Tooltip.offset.spec.tsx +0 -113
- package/test/component/Tooltip/Tooltip.state.spec.tsx +0 -74
- package/test/component/Tooltip/Tooltip.sync.spec.tsx +0 -639
- package/test/component/Tooltip/defaultIndex.spec.tsx +0 -227
- package/test/component/Tooltip/graphicalItem.formatter.spec.tsx +0 -138
- package/test/component/Tooltip/itemSorter.spec.tsx +0 -2815
- package/test/component/Tooltip/tooltipEventType.spec.tsx +0 -344
- package/test/component/Tooltip/tooltipMouseHoverSelectors.ts +0 -41
- package/test/component/Tooltip/tooltipTestHelpers.tsx +0 -162
- package/test/component/Tooltip.defaultIndex.spec.tsx +0 -48
- package/test/component/Tooltip.hover.spec.tsx +0 -61
- package/test/component/Tooltip.item.spec.tsx +0 -54
- package/test/component/Tooltip.keyboard.spec.tsx +0 -51
- package/test/component/Tooltip.payload.spec.tsx +0 -1716
- package/test/component/Tooltip.touch.spec.tsx +0 -39
- package/test/component/Tooltip.visibility.spec.tsx +0 -1889
- package/test/component/TooltipBoundingBox.spec.tsx +0 -89
- package/test/component/responsiveContainerUtils.spec.ts +0 -205
- package/test/container/ClipPath.spec.tsx +0 -602
- package/test/container/chartDimensions.spec.tsx +0 -368
- package/test/context/chartLayoutContext.spec.tsx +0 -378
- package/test/helper/ExpectAxisDomain.tsx +0 -27
- package/test/helper/assertNotNull.ts +0 -6
- package/test/helper/assertZIndexLayerOrder.ts +0 -19
- package/test/helper/createSelectorTestCase.tsx +0 -176
- package/test/helper/expectAnimatedPieAngles.ts +0 -100
- package/test/helper/expectAnimatedPiePaths.ts +0 -78
- package/test/helper/expectAreaCurve.ts +0 -15
- package/test/helper/expectAxisTicks.ts +0 -48
- package/test/helper/expectBars.ts +0 -54
- package/test/helper/expectFunctionReturning.ts +0 -58
- package/test/helper/expectLabel.ts +0 -32
- package/test/helper/expectLastCalledWith.ts +0 -48
- package/test/helper/expectLine.ts +0 -20
- package/test/helper/expectPieSectors.ts +0 -80
- package/test/helper/expectScale.ts +0 -37
- package/test/helper/expectScatterPoints.ts +0 -52
- package/test/helper/expectStackGroups.ts +0 -144
- package/test/helper/mockAxes.ts +0 -22
- package/test/helper/mockGetBoundingClientRect.ts +0 -66
- package/test/helper/mockHTMLElementProperty.ts +0 -19
- package/test/helper/mockTouchingElement.ts +0 -27
- package/test/helper/offsetHelpers.ts +0 -19
- package/test/helper/parameterizedTestCases.tsx +0 -99
- package/test/helper/produceState.ts +0 -32
- package/test/helper/selectorTestHelpers.tsx +0 -63
- package/test/helper/trim.spec.ts +0 -35
- package/test/helper/trim.ts +0 -11
- package/test/hooks/useActiveTooltipDataPoints.spec.tsx +0 -358
- package/test/hooks/useAxisDomain.spec.tsx +0 -361
- package/test/hooks/useAxisScale.spec.tsx +0 -283
- package/test/hooks/useAxisTicks.spec.tsx +0 -130
- package/test/hooks/useOffset.spec.tsx +0 -248
- package/test/hooks/useTooltipStateHooks.spec.tsx +0 -109
- package/test/polar/Pie/Pie-TwoLevelPieChart.spec.tsx +0 -135
- package/test/polar/Pie/Pie.spec.tsx +0 -784
- package/test/polar/Pie/Pie.typed.spec.tsx +0 -78
- package/test/polar/Pie.animation.spec.tsx +0 -529
- package/test/polar/PieWithLegend.animation.spec.tsx +0 -142
- package/test/polar/PolarAngleAxis/PolarAngleAxis.events.spec.tsx +0 -76
- package/test/polar/PolarAngleAxis/PolarAngleAxis.spec.tsx +0 -2079
- package/test/polar/PolarAngleAxis/PolarAngleAxis.typed.spec.tsx +0 -102
- package/test/polar/PolarAngleAxis.render.spec.tsx +0 -79
- package/test/polar/PolarGrid.render.spec.tsx +0 -75
- package/test/polar/PolarGrid.spec.tsx +0 -918
- package/test/polar/PolarLegendPerRow.render.spec.tsx +0 -85
- package/test/polar/PolarRadiusAxis.events.spec.tsx +0 -65
- package/test/polar/PolarRadiusAxis.render.spec.tsx +0 -52
- package/test/polar/PolarRadiusAxis.spec.tsx +0 -991
- package/test/polar/PolarRadiusAxis.typed.spec.tsx +0 -84
- package/test/polar/PolarTooltipLegend.render.spec.tsx +0 -80
- package/test/polar/Radar.animation.spec.tsx +0 -570
- package/test/polar/Radar.render.spec.tsx +0 -71
- package/test/polar/Radar.spec.tsx +0 -265
- package/test/polar/Radar.typed.spec.tsx +0 -119
- package/test/polar/RadialBar/RadialBar.spec.tsx +0 -1521
- package/test/polar/RadialBar/RadialBar.typed.spec.tsx +0 -132
- package/test/polar/RadialBar.animation.spec.tsx +0 -375
- package/test/polar/RadialBar.render.spec.tsx +0 -66
- package/test/polar/RadialBar.stacked.spec.tsx +0 -57
- package/test/setup.ts +0 -84
- package/test/shape/ActiveShape.spec.tsx +0 -181
- package/test/shape/Cross.spec.tsx +0 -60
- package/test/shape/Cross.typed.spec.tsx +0 -26
- package/test/shape/Curve.spec.tsx +0 -368
- package/test/shape/Curve.typed.spec.tsx +0 -69
- package/test/shape/Dot.spec.tsx +0 -73
- package/test/shape/Dot.typed.spec.tsx +0 -30
- package/test/shape/Polygon.spec.tsx +0 -357
- package/test/shape/Polygon.typed.spec.tsx +0 -28
- package/test/shape/Rectangle.animation.spec.tsx +0 -451
- package/test/shape/Rectangle.spec.tsx +0 -68
- package/test/shape/Rectangle.typed.spec.tsx +0 -24
- package/test/shape/Sector.spec.tsx +0 -76
- package/test/shape/Sector.typed.spec.tsx +0 -24
- package/test/shape/Symbols.spec.tsx +0 -43
- package/test/shape/Symbols.typed.spec.tsx +0 -24
- package/test/shape/Trapezoid.spec.tsx +0 -50
- package/test/shape/Trapezoid.typed.spec.tsx +0 -24
- package/test/shape/__snapshots__/Cross.spec.tsx.snap +0 -62
- package/test/shape/__snapshots__/Curve.spec.tsx.snap +0 -460
- package/test/shape/__snapshots__/Polygon.spec.tsx.snap +0 -58
- package/test/shape/__snapshots__/Rectangle.spec.tsx.snap +0 -117
- package/test/shape/__snapshots__/Sector.spec.tsx.snap +0 -71
- package/test/shape/__snapshots__/Trapezoid.spec.tsx.snap +0 -64
- package/test/state/chartDataSlice.spec.ts +0 -53
- package/test/state/externalEventsMiddleware.spec.ts +0 -178
- package/test/state/graphicalItemsSlice.spec.ts +0 -92
- package/test/state/hooks.spec.tsx +0 -68
- package/test/state/legendSlice.spec.ts +0 -44
- package/test/state/mouseEventsMiddleware.spec.ts +0 -75
- package/test/state/optionsSlice.spec.ts +0 -19
- package/test/state/reduxDevtoolsJsonStringifyReplacer.spec.ts +0 -25
- package/test/state/referenceElementsSlice.spec.ts +0 -84
- package/test/state/selectors/areaSelectors.spec.tsx +0 -77
- package/test/state/selectors/axisSelectors.spec.tsx +0 -1418
- package/test/state/selectors/barStackSelectors.spec.tsx +0 -752
- package/test/state/selectors/brushSelectors.spec.tsx +0 -30
- package/test/state/selectors/cartesianAxisSlice.spec.ts +0 -96
- package/test/state/selectors/combineNiceTicks.spec.ts +0 -207
- package/test/state/selectors/combiners/combineActiveTooltipIndex.spec.ts +0 -61
- package/test/state/selectors/combiners/combineAllBarPositions.spec.ts +0 -39
- package/test/state/selectors/combiners/combineConfiguredScale.spec.ts +0 -56
- package/test/state/selectors/combiners/combineDisplayedStackedData.spec.ts +0 -123
- package/test/state/selectors/combiners/combineRealScaleType.spec.ts +0 -80
- package/test/state/selectors/containerSelectors.spec.tsx +0 -168
- package/test/state/selectors/dataSelectors.spec.tsx +0 -136
- package/test/state/selectors/legendSelectors.spec.tsx +0 -113
- package/test/state/selectors/lineSelectors.spec.tsx +0 -60
- package/test/state/selectors/pieSelectors.spec.tsx +0 -72
- package/test/state/selectors/radarSelectors.spec.tsx +0 -496
- package/test/state/selectors/rootPropsSelectors.spec.tsx +0 -169
- package/test/state/selectors/scatterSelectors.spec.tsx +0 -47
- package/test/state/selectors/selectActiveTooltipIndex.spec.tsx +0 -234
- package/test/state/selectors/selectAllAxes.spec.tsx +0 -18
- package/test/state/selectors/selectAxisDomain.spec.tsx +0 -21
- package/test/state/selectors/selectAxisDomainIncludingNiceTicks.spec.tsx +0 -19
- package/test/state/selectors/selectAxisRangeWithReverse.spec.tsx +0 -22
- package/test/state/selectors/selectAxisScale.spec.tsx +0 -91
- package/test/state/selectors/selectBarRectangles.stackOffset.spec.tsx +0 -503
- package/test/state/selectors/selectBaseAxis.spec.tsx +0 -56
- package/test/state/selectors/selectCartesianItemsSettings.spec.tsx +0 -57
- package/test/state/selectors/selectChartOffset.spec.tsx +0 -26
- package/test/state/selectors/selectDisplayedData.spec.tsx +0 -282
- package/test/state/selectors/selectIsTooltipActive.spec.tsx +0 -231
- package/test/state/selectors/selectNumericalDomain.spec.tsx +0 -21
- package/test/state/selectors/selectRealScaleType.spec.tsx +0 -19
- package/test/state/selectors/selectStackGroups.spec.tsx +0 -322
- package/test/state/selectors/selectXAxisPosition.spec.tsx +0 -22
- package/test/state/selectors/selectYAxisPosition.spec.tsx +0 -22
- package/test/state/selectors/selectors.spec.tsx +0 -1613
- package/test/state/throttling.spec.ts +0 -200
- package/test/state/zIndexSlice.spec.ts +0 -85
- package/test/synchronisation/useChartSynchronisation.spec.tsx +0 -225
- package/test/util/BarUtils.spec.ts +0 -39
- package/test/util/CartesianUtils/CartesianUtils.spec.ts +0 -261
- package/test/util/CartesianUtils/rectWithPoints.spec.ts +0 -48
- package/test/util/ChartUtils/ChartUtils.spec.ts +0 -491
- package/test/util/ChartUtils/appendOffsetOfLegend.spec.ts +0 -136
- package/test/util/ChartUtils/appendOffsetOfLegend.spec.tsx +0 -133
- package/test/util/ChartUtils/getCateCoordinateOfLine.spec.ts +0 -83
- package/test/util/ChartUtils/getStackedData.spec.ts +0 -416
- package/test/util/ChartUtils/truncateByDomain.spec.ts +0 -70
- package/test/util/DataUtils.spec.ts +0 -385
- package/test/util/DomUtils.spec.tsx +0 -117
- package/test/util/FunnelUtils.spec.tsx +0 -70
- package/test/util/Global.spec.ts +0 -11
- package/test/util/LRUCache.spec.ts +0 -81
- package/test/util/LogUtils.spec.ts +0 -45
- package/test/util/PolarUtils.spec.ts +0 -66
- package/test/util/ReduceCssCalcPrototype.spec.ts +0 -141
- package/test/util/ShallowEqual.spec.ts +0 -102
- package/test/util/TickUtils.spec.ts +0 -29
- package/test/util/axisPropsAreEqual.spec.ts +0 -93
- package/test/util/createChartHelpers.spec.tsx +0 -210
- package/test/util/cursor/getCursorPoints.spec.ts +0 -136
- package/test/util/cursor/getCursorRectangle.spec.ts +0 -50
- package/test/util/cursor/getRadialCursorPoints.spec.ts +0 -36
- package/test/util/errorValue.spec.ts +0 -69
- package/test/util/getEveryNth.spec.ts +0 -39
- package/test/util/getRadiusAndStrokeWidthFromDot.spec.ts +0 -51
- package/test/util/getRelativeCoordinate.spec.ts +0 -250
- package/test/util/getSliced.spec.ts +0 -45
- package/test/util/isDomainSpecifiedByUser.spec.ts +0 -207
- package/test/util/isWellBehavedNumber.spec.ts +0 -54
- package/test/util/payload/getUniqPayload.spec.ts +0 -56
- package/test/util/propsAreEqual.spec.ts +0 -75
- package/test/util/round.spec.ts +0 -112
- package/test/util/scale/arithmetic.spec.ts +0 -61
- package/test/util/scale/createCategoricalInverse.spec.ts +0 -84
- package/test/util/scale/getNiceTickValues.spec.ts +0 -421
- package/test/util/scale/getTickValuesFixedDomain.spec.ts +0 -155
- package/test/util/svgPropertiesAndEvents.spec.tsx +0 -206
- package/test/util/svgPropertiesNoEvents.spec.tsx +0 -228
- package/test/util/tooltip/translate.spec.ts +0 -396
- package/test/util/useAnimationId.spec.tsx +0 -59
- package/test/util/useElementOffset.spec.tsx +0 -173
- package/test/util/usePrefersReducedMotion.spec.ts +0 -54
- package/test/util/useUniqueId.spec.ts +0 -99
- package/test/utils/diagnostics-allowlist.ts +0 -18
- package/test/utils/diagnostics.ts +0 -58
- package/test/zIndex/AllZIndexPortals.spec.tsx +0 -83
- package/test/zIndex/DefaultZIndexes.spec.ts +0 -80
- package/test/zIndex/DynamicZIndex.spec.tsx +0 -102
- package/test/zIndex/ZIndexLayer.portalOwner.spec.tsx +0 -125
- package/test/zIndex/componentZIndex.spec.tsx +0 -255
- package/test/zIndex/getZIndexFromUnknown.spec.ts +0 -51
- package/test/zIndex/multiChartZIndexIsolation.spec.tsx +0 -90
- package/test/zIndex/zIndexSelectors.spec.ts +0 -172
- package/tsconfig.json +0 -11
package/src/util/ChartUtils.ts
CHANGED
|
@@ -15,16 +15,8 @@ import {
|
|
|
15
15
|
stackOffsetSilhouette,
|
|
16
16
|
stackOffsetWiggle,
|
|
17
17
|
stackOrderNone,
|
|
18
|
-
} from "
|
|
19
|
-
import {
|
|
20
|
-
findEntryInArray,
|
|
21
|
-
isNan,
|
|
22
|
-
isNotNil,
|
|
23
|
-
isNullish,
|
|
24
|
-
isNumber,
|
|
25
|
-
isNumOrStr,
|
|
26
|
-
mathSign,
|
|
27
|
-
} from "./DataUtils";
|
|
18
|
+
} from "d3-shape";
|
|
19
|
+
import { isNan, isNotNil, isNullish, isNumber, isNumOrStr, mathSign } from "./DataUtils";
|
|
28
20
|
import { getSliced } from "./getSliced";
|
|
29
21
|
import { isWellBehavedNumber } from "./isWellBehavedNumber";
|
|
30
22
|
import type {
|
|
@@ -276,6 +268,32 @@ export const truncateByDomain = <T>(
|
|
|
276
268
|
return result;
|
|
277
269
|
};
|
|
278
270
|
|
|
271
|
+
// Value→tick lookup cache, keyed on the ticks array reference. getCateCoordinateOfLine
|
|
272
|
+
// is called once per data point; a linear findEntryInArray scan there is O(points²)
|
|
273
|
+
// across a full series when allowDuplicatedCategory=false (ticks.length ≈ points).
|
|
274
|
+
// The axis-ticks selector memoizes the ticks array, so this map is built once per
|
|
275
|
+
// render and reused for every point lookup, making it O(points). First value wins,
|
|
276
|
+
// mirroring Array.find.
|
|
277
|
+
const tickByValueCache = new WeakMap<ReadonlyArray<TickItem>, Map<unknown, TickItem>>();
|
|
278
|
+
function findTickByValue(ticks: ReadonlyArray<TickItem>, value: unknown): TickItem | undefined {
|
|
279
|
+
// Map uses SameValueZero and would match NaN, while the upstream Array.find
|
|
280
|
+
// lookup uses strict equality (NaN !== NaN). Preserve that fallback behavior.
|
|
281
|
+
if (typeof value === "number" && Number.isNaN(value)) {
|
|
282
|
+
return undefined;
|
|
283
|
+
}
|
|
284
|
+
let map = tickByValueCache.get(ticks);
|
|
285
|
+
if (map == null) {
|
|
286
|
+
map = new Map<unknown, TickItem>();
|
|
287
|
+
for (const tick of ticks) {
|
|
288
|
+
if (tick != null && !map.has(tick.value)) {
|
|
289
|
+
map.set(tick.value, tick);
|
|
290
|
+
}
|
|
291
|
+
}
|
|
292
|
+
tickByValueCache.set(ticks, map);
|
|
293
|
+
}
|
|
294
|
+
return map.get(value);
|
|
295
|
+
}
|
|
296
|
+
|
|
279
297
|
export function getCateCoordinateOfLine<T>({
|
|
280
298
|
axis,
|
|
281
299
|
ticks,
|
|
@@ -312,7 +330,7 @@ export function getCateCoordinateOfLine<T>({
|
|
|
312
330
|
const key: string | number = axisDataKey;
|
|
313
331
|
const cellValue = entry[key];
|
|
314
332
|
if (!isNullish(cellValue)) {
|
|
315
|
-
const matchedTick = ticks ?
|
|
333
|
+
const matchedTick = ticks ? findTickByValue(ticks, cellValue) : undefined;
|
|
316
334
|
|
|
317
335
|
if (matchedTick) {
|
|
318
336
|
return matchedTick.coordinate + bandSize / 2;
|
|
@@ -625,35 +643,61 @@ export const getStackedData = (
|
|
|
625
643
|
offsetType: StackOffsetType,
|
|
626
644
|
): ReadonlyArray<Series<StackDatum, StackKey>> => {
|
|
627
645
|
const offsetAccessor: OffsetAccessor = STACK_OFFSET_MAP[offsetType] ?? offsetSign;
|
|
646
|
+
// Track whether any value is a [min, max] tuple during the (unavoidable) value
|
|
647
|
+
// accessor pass, so the ranged-data fixup below can be skipped entirely for the
|
|
648
|
+
// common scalar case instead of running a second full series×points scan.
|
|
649
|
+
let hasRangedValues = false;
|
|
628
650
|
const stack = shapeStack<StackDatum, StackKey>()
|
|
629
651
|
.keys(dataKeys)
|
|
630
|
-
.value((d, key) =>
|
|
652
|
+
.value((d, key) => {
|
|
653
|
+
const raw = getValueByDataKey(d, key, 0);
|
|
654
|
+
if (Array.isArray(raw) && raw.length === 2) {
|
|
655
|
+
hasRangedValues = true;
|
|
656
|
+
}
|
|
657
|
+
return Number(raw);
|
|
658
|
+
})
|
|
631
659
|
.order(stackOrderNone)
|
|
632
660
|
.offset(offsetAccessor);
|
|
633
661
|
|
|
634
662
|
const result = stack(data);
|
|
635
663
|
|
|
636
664
|
// Ranged data: when a value is a [min, max] tuple, use it directly (no stacking).
|
|
637
|
-
|
|
638
|
-
|
|
639
|
-
|
|
640
|
-
|
|
641
|
-
|
|
642
|
-
|
|
643
|
-
|
|
644
|
-
|
|
645
|
-
|
|
665
|
+
if (hasRangedValues) {
|
|
666
|
+
result.forEach((s, seriesIndex) => {
|
|
667
|
+
s.forEach((point, pointIndex) => {
|
|
668
|
+
const value = getValueByDataKey(data[pointIndex], dataKeys[seriesIndex], 0);
|
|
669
|
+
if (value != null && Array.isArray(value) && value.length === 2) {
|
|
670
|
+
const lo: unknown = value[0];
|
|
671
|
+
const hi: unknown = value[1];
|
|
672
|
+
if (isNumber(lo) && isNumber(hi)) {
|
|
673
|
+
point[0] = lo;
|
|
674
|
+
point[1] = hi;
|
|
675
|
+
}
|
|
646
676
|
}
|
|
647
|
-
}
|
|
677
|
+
});
|
|
648
678
|
});
|
|
649
|
-
}
|
|
679
|
+
}
|
|
650
680
|
|
|
651
681
|
return result;
|
|
652
682
|
};
|
|
653
683
|
|
|
654
684
|
const getDomainOfSingle = (data: ReadonlyArray<ReadonlyArray<unknown>>): number[] => {
|
|
655
|
-
|
|
656
|
-
|
|
685
|
+
// Reduce loop, not `Math.min(...flat)`: spreading a data-sized array throws a V8
|
|
686
|
+
// RangeError past ~100k elements. Empty input yields [Infinity, -Infinity],
|
|
687
|
+
// matching the previous Math.min/Math.max-of-empty behavior.
|
|
688
|
+
let min = Infinity;
|
|
689
|
+
let max = -Infinity;
|
|
690
|
+
for (const value of data.flat(2)) {
|
|
691
|
+
if (isNumber(value)) {
|
|
692
|
+
if (value < min) {
|
|
693
|
+
min = value;
|
|
694
|
+
}
|
|
695
|
+
if (value > max) {
|
|
696
|
+
max = value;
|
|
697
|
+
}
|
|
698
|
+
}
|
|
699
|
+
}
|
|
700
|
+
return [min, max];
|
|
657
701
|
};
|
|
658
702
|
|
|
659
703
|
const makeDomainFinite = (domain: NumberDomain): NumberDomain => [
|
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
import { createEffect, createRoot, on, onCleanup } from "solid-js";
|
|
2
|
+
import type { JSX } from "solid-js";
|
|
3
|
+
import { insert, isServer } from "solid-js/web";
|
|
4
|
+
|
|
5
|
+
export interface DirectPortalProps {
|
|
6
|
+
mount: Element;
|
|
7
|
+
children: JSX.Element;
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
interface PortalRange {
|
|
11
|
+
placeholder: Text;
|
|
12
|
+
start: Comment;
|
|
13
|
+
end: Comment;
|
|
14
|
+
sequence: number;
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
const rangesByMount = new WeakMap<Element, PortalRange[]>();
|
|
18
|
+
let nextSequence = 0;
|
|
19
|
+
|
|
20
|
+
function reorderRanges(mount: Element, ranges: PortalRange[]): void {
|
|
21
|
+
ranges.sort((left, right) => {
|
|
22
|
+
const position = left.placeholder.compareDocumentPosition(right.placeholder);
|
|
23
|
+
if (position & Node.DOCUMENT_POSITION_FOLLOWING) {
|
|
24
|
+
return -1;
|
|
25
|
+
}
|
|
26
|
+
if (position & Node.DOCUMENT_POSITION_PRECEDING) {
|
|
27
|
+
return 1;
|
|
28
|
+
}
|
|
29
|
+
return left.sequence - right.sequence;
|
|
30
|
+
});
|
|
31
|
+
|
|
32
|
+
const fragment = document.createDocumentFragment();
|
|
33
|
+
ranges.forEach((range) => {
|
|
34
|
+
let node: Node | null = range.start;
|
|
35
|
+
while (node != null) {
|
|
36
|
+
const next: Node | null = node.nextSibling;
|
|
37
|
+
fragment.append(node);
|
|
38
|
+
if (node === range.end) {
|
|
39
|
+
break;
|
|
40
|
+
}
|
|
41
|
+
node = next;
|
|
42
|
+
}
|
|
43
|
+
});
|
|
44
|
+
mount.append(fragment);
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
/**
|
|
48
|
+
* Portal content directly into a target without Solid 1's wrapper div/g.
|
|
49
|
+
*
|
|
50
|
+
* Recharts exposes the portal DOM shape, so the wrapper added by Solid 1's
|
|
51
|
+
* built-in Portal would break direct-child selectors and SVG parity.
|
|
52
|
+
*/
|
|
53
|
+
export function DirectPortal(props: DirectPortalProps): JSX.Element {
|
|
54
|
+
if (isServer) {
|
|
55
|
+
return null;
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
const placeholder = document.createTextNode("");
|
|
59
|
+
|
|
60
|
+
createEffect(
|
|
61
|
+
on(
|
|
62
|
+
() => props.mount,
|
|
63
|
+
(mount) => {
|
|
64
|
+
const start = document.createComment("solid-recharts-portal-start");
|
|
65
|
+
const end = document.createComment("solid-recharts-portal-end");
|
|
66
|
+
mount.append(start, end);
|
|
67
|
+
|
|
68
|
+
const dispose = createRoot((disposeRoot) => {
|
|
69
|
+
insert(mount, () => props.children, end);
|
|
70
|
+
return disposeRoot;
|
|
71
|
+
});
|
|
72
|
+
const range: PortalRange = {
|
|
73
|
+
placeholder,
|
|
74
|
+
start,
|
|
75
|
+
end,
|
|
76
|
+
sequence: nextSequence,
|
|
77
|
+
};
|
|
78
|
+
nextSequence += 1;
|
|
79
|
+
const ranges = rangesByMount.get(mount) ?? [];
|
|
80
|
+
ranges.push(range);
|
|
81
|
+
rangesByMount.set(mount, ranges);
|
|
82
|
+
reorderRanges(mount, ranges);
|
|
83
|
+
|
|
84
|
+
onCleanup(() => {
|
|
85
|
+
dispose();
|
|
86
|
+
let node: ChildNode | null = start.nextSibling;
|
|
87
|
+
while (node != null && node !== end) {
|
|
88
|
+
const next: ChildNode | null = node.nextSibling;
|
|
89
|
+
node.remove();
|
|
90
|
+
node = next;
|
|
91
|
+
}
|
|
92
|
+
start.remove();
|
|
93
|
+
end.remove();
|
|
94
|
+
const index = ranges.indexOf(range);
|
|
95
|
+
if (index >= 0) {
|
|
96
|
+
ranges.splice(index, 1);
|
|
97
|
+
}
|
|
98
|
+
if (ranges.length === 0) {
|
|
99
|
+
rangesByMount.delete(mount);
|
|
100
|
+
}
|
|
101
|
+
});
|
|
102
|
+
},
|
|
103
|
+
),
|
|
104
|
+
);
|
|
105
|
+
|
|
106
|
+
return placeholder;
|
|
107
|
+
}
|
package/src/util/FunnelUtils.tsx
CHANGED
|
@@ -8,7 +8,7 @@
|
|
|
8
8
|
// function + object + boolean forms are supported, matching ActiveShapeUtils). The
|
|
9
9
|
// `option` is typed as the wider `ActiveShape` the `<Shape>` helper accepts (the
|
|
10
10
|
// `<Funnel>` `shape`/`activeShape` function-form props are assignable to it).
|
|
11
|
-
import type { JSX } from "
|
|
11
|
+
import type { JSX } from "solid-js";
|
|
12
12
|
import { Trapezoid } from "../shape/Trapezoid";
|
|
13
13
|
import { Shape } from "./ActiveShapeUtils";
|
|
14
14
|
import type { ActiveShape, ShapeAnimationProps } from "./types";
|
|
@@ -1,7 +1,8 @@
|
|
|
1
|
+
import { splitProps } from "solid-js";
|
|
1
2
|
// Ported from recharts 3.8.1 src/util/RadialBarUtils.tsx (commit 7a23854).
|
|
2
3
|
// Renders a RadialBar sector through the <Shape> abstraction (default = Sector).
|
|
3
|
-
|
|
4
|
-
import type { JSX } from "
|
|
4
|
+
|
|
5
|
+
import type { JSX } from "solid-js";
|
|
5
6
|
import { RadialBarDataItem, RadialBarProps } from "../polar/RadialBar";
|
|
6
7
|
import { Sector } from "../shape/Sector";
|
|
7
8
|
import { Shape } from "./ActiveShapeUtils";
|
|
@@ -29,7 +30,7 @@ export function RadialBarSector(props: RadialBarSectorComponentProps): JSX.Eleme
|
|
|
29
30
|
<Shape<RadialBarSectorProps, SVGPathElement>
|
|
30
31
|
option={props.option}
|
|
31
32
|
DefaultShape={defaultRadialBarShape}
|
|
32
|
-
shapeProps={
|
|
33
|
+
shapeProps={splitProps(props, ["option"])[1]}
|
|
33
34
|
/>
|
|
34
35
|
);
|
|
35
36
|
}
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
// binding wrapper spreads the user props then sets `layout` as a static
|
|
4
4
|
// attribute LAST, so the bound layout wins over any passed value; the public
|
|
5
5
|
// type omits `layout` so TS rejects it too.
|
|
6
|
-
import type { JSX } from "
|
|
6
|
+
import type { JSX } from "solid-js";
|
|
7
7
|
import { AreaChart as OriginalAreaChart } from "../chart/AreaChart";
|
|
8
8
|
import { BarChart as OriginalBarChart } from "../chart/BarChart";
|
|
9
9
|
import { LineChart as OriginalLineChart } from "../chart/LineChart";
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
// Ported from recharts 3.8.1 src/util/createPolarCharts.tsx.
|
|
2
2
|
// Solid-native: React.ComponentType → `(props) => JSX.Element`; layout binding
|
|
3
3
|
// via `merge()`.
|
|
4
|
-
import type { JSX } from "
|
|
4
|
+
import type { JSX } from "solid-js";
|
|
5
5
|
import { RadialBarChart as OriginalRadialBarChart } from "../chart/RadialBarChart";
|
|
6
6
|
import { RadarChart as OriginalRadarChart } from "../chart/RadarChart";
|
|
7
7
|
import { PieChart as OriginalPieChart } from "../chart/PieChart";
|
|
@@ -1,16 +1,15 @@
|
|
|
1
1
|
// Ported from recharts 3.8.1 src/util/propsAreEqual.ts (commit 7a23854).
|
|
2
2
|
//
|
|
3
3
|
// Deviation: recharts imports `shallowEqual` from `react-redux`. A SolidJS port
|
|
4
|
-
// has no react-redux, so
|
|
5
|
-
//
|
|
6
|
-
// key (its internal `is` predates and mirrors `Object.is`), so the local
|
|
7
|
-
// version below is behavior-identical — NaN compares equal, +0 and -0 do not.
|
|
4
|
+
// has no react-redux, so it reuses the local equivalent in `./ShallowEqual`
|
|
5
|
+
// (one-level same-value compare — NaN equal, +0 and -0 distinct).
|
|
8
6
|
//
|
|
9
7
|
// NOTE on relevance: recharts uses `propsAreEqual` only as the `React.memo`
|
|
10
8
|
// comparator on Bar/Area/Line/Scatter/Legend/ReportEventSettings/etc. Solid
|
|
11
9
|
// components do not re-render, so when those units are ported this comparator
|
|
12
10
|
// will most likely be dropped or repurposed. The function itself is pure and
|
|
13
11
|
// spec-tested, so we port it now and revisit its call sites in Tier 2.
|
|
12
|
+
import { shallowEqual } from "./ShallowEqual";
|
|
14
13
|
|
|
15
14
|
const propsToShallowCompare = new Set<string>([
|
|
16
15
|
"axisLine",
|
|
@@ -37,35 +36,6 @@ const propsToShallowCompare = new Set<string>([
|
|
|
37
36
|
"throttledEvents",
|
|
38
37
|
]);
|
|
39
38
|
|
|
40
|
-
function isRecord(value: unknown): value is Record<string, unknown> {
|
|
41
|
-
return typeof value === "object" && value !== null;
|
|
42
|
-
}
|
|
43
|
-
|
|
44
|
-
/**
|
|
45
|
-
* One-level same-value comparison, equivalent to react-redux's `shallowEqual`.
|
|
46
|
-
* Uses `Object.is`, so two NaNs are equal and +0/-0 are not — matching the
|
|
47
|
-
* original.
|
|
48
|
-
*/
|
|
49
|
-
function shallowEqual(objA: unknown, objB: unknown): boolean {
|
|
50
|
-
if (Object.is(objA, objB)) {
|
|
51
|
-
return true;
|
|
52
|
-
}
|
|
53
|
-
if (!isRecord(objA) || !isRecord(objB)) {
|
|
54
|
-
return false;
|
|
55
|
-
}
|
|
56
|
-
const keysA = Object.keys(objA);
|
|
57
|
-
const keysB = Object.keys(objB);
|
|
58
|
-
if (keysA.length !== keysB.length) {
|
|
59
|
-
return false;
|
|
60
|
-
}
|
|
61
|
-
for (const key of keysA) {
|
|
62
|
-
if (!Object.hasOwn(objB, key) || !Object.is(objA[key], objB[key])) {
|
|
63
|
-
return false;
|
|
64
|
-
}
|
|
65
|
-
}
|
|
66
|
-
return true;
|
|
67
|
-
}
|
|
68
|
-
|
|
69
39
|
/**
|
|
70
40
|
* When comparing two values, returns true if they are the same value or
|
|
71
41
|
* are both NaN.
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
// Ported from recharts 3.8.1 src/util/stacks/stackTypes.ts (commit 7a23854).
|
|
2
|
-
import { Series } from "
|
|
2
|
+
import { Series } from "d3-shape";
|
|
3
3
|
import { StackId } from "../ChartUtils";
|
|
4
4
|
import { DataKey } from "../types";
|
|
5
5
|
import { GraphicalItemId } from "../../state/graphicalItemsSlice";
|
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
// is deferred until the Tier-2 "shape can be an element or a props object"
|
|
6
6
|
// pattern lands (ActiveShapeUtils). Element inputs currently fall through to
|
|
7
7
|
// `null`. React's `SVGProps`/`CSSProperties` types are replaced with JSX.*
|
|
8
|
-
// from '
|
|
8
|
+
// from 'solid-js/web'.
|
|
9
9
|
import { isEventKey } from "./excludeEventProps";
|
|
10
10
|
import { isDataAttribute, isSvgElementPropKey, toSvgAttributeName } from "./svgPropertiesNoEvents";
|
|
11
11
|
import { svgPropertiesNoEventsKeepCase } from "./svgPropertiesNoEvents";
|
|
@@ -2,9 +2,9 @@
|
|
|
2
2
|
// Pure functions — no JSX/components.
|
|
3
3
|
// Deviations from reference:
|
|
4
4
|
// - `clsx` replaced with hand-rolled class concatenation (no clsx dep, no class strings)
|
|
5
|
-
// - `CSSProperties` from 'react' → `JSX.CSSProperties` from '
|
|
5
|
+
// - `CSSProperties` from 'react' → `JSX.CSSProperties` from 'solid-js/web'
|
|
6
6
|
|
|
7
|
-
import type { JSX } from "
|
|
7
|
+
import type { JSX } from "solid-js";
|
|
8
8
|
import { isNumber } from "../DataUtils";
|
|
9
9
|
import type { Coordinate, CartesianViewBox, AllowInDimension } from "../types";
|
|
10
10
|
|
package/src/util/types.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import type { JSX } from "
|
|
2
|
-
|
|
3
|
-
import type * as d3Scales from "
|
|
1
|
+
import type { JSX } from "solid-js";
|
|
2
|
+
type Element = JSX.Element;
|
|
3
|
+
import type * as d3Scales from "d3-scale";
|
|
4
4
|
import type { DotProps } from "../shape/Dot";
|
|
5
5
|
import type { ExternalMouseEvents } from "../chart/types";
|
|
6
6
|
|
|
@@ -1,17 +1,9 @@
|
|
|
1
1
|
// Ported from recharts 3.8.1 src/zIndex/ZIndexLayer.tsx (commit 7a23854).
|
|
2
2
|
// Solid deviations: `useLayoutEffect` → two-arg `createEffect`; `createPortal` →
|
|
3
3
|
// `<Portal mount>`; dispatch → `store.actions.zIndex`.
|
|
4
|
-
import {
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
createRoot,
|
|
8
|
-
getOwner,
|
|
9
|
-
onCleanup,
|
|
10
|
-
onSettled,
|
|
11
|
-
runWithOwner,
|
|
12
|
-
Show,
|
|
13
|
-
} from "solid-js";
|
|
14
|
-
import { Portal, type JSX } from "@solidjs/web";
|
|
4
|
+
import { createMemo, onCleanup, Show, createEffect, on } from "solid-js";
|
|
5
|
+
import type { JSX } from "solid-js";
|
|
6
|
+
import { DirectPortal } from "../util/DirectPortal";
|
|
15
7
|
import { useAppSelector, useAppStore } from "../state/hooks";
|
|
16
8
|
import { unregisterCleanup } from "../state/unregisterOnCleanup";
|
|
17
9
|
import { selectZIndexPortalElement } from "./zIndexSelectors";
|
|
@@ -48,78 +40,57 @@ export function ZIndexLayer(props: {
|
|
|
48
40
|
);
|
|
49
41
|
|
|
50
42
|
createEffect(
|
|
51
|
-
(
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
43
|
+
on(
|
|
44
|
+
() => ({
|
|
45
|
+
should: shouldRenderInPortal(),
|
|
46
|
+
zIndex: props.zIndex,
|
|
47
|
+
portal: portalElement(),
|
|
48
|
+
}),
|
|
49
|
+
({ should, zIndex, portal }) => {
|
|
50
|
+
const actions = zIndexActions;
|
|
51
|
+
if (!should || zIndex === undefined || actions == null) {
|
|
52
|
+
registeredZIndexes.forEach((z) => {
|
|
53
|
+
actions?.unregisterZIndexPortal({ zIndex: z });
|
|
54
|
+
});
|
|
55
|
+
registeredZIndexes.clear();
|
|
56
|
+
lastPortalElement = undefined;
|
|
57
|
+
return;
|
|
58
|
+
}
|
|
66
59
|
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
60
|
+
if (!registeredZIndexes.has(zIndex)) {
|
|
61
|
+
actions.registerZIndexPortal({ zIndex });
|
|
62
|
+
registeredZIndexes.add(zIndex);
|
|
63
|
+
}
|
|
71
64
|
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
65
|
+
if (portal) {
|
|
66
|
+
lastPortalElement = portal;
|
|
67
|
+
registeredZIndexes.forEach((z) => {
|
|
68
|
+
if (z !== zIndex) {
|
|
69
|
+
actions.unregisterZIndexPortal({ zIndex: z });
|
|
70
|
+
registeredZIndexes.delete(z);
|
|
71
|
+
}
|
|
72
|
+
});
|
|
73
|
+
}
|
|
74
|
+
},
|
|
75
|
+
),
|
|
82
76
|
);
|
|
83
77
|
|
|
84
|
-
|
|
85
|
-
|
|
78
|
+
onCleanup(
|
|
79
|
+
unregisterCleanup(() => {
|
|
86
80
|
const actions = zIndexActions;
|
|
87
81
|
registeredZIndexes.forEach((z) => {
|
|
88
82
|
actions?.unregisterZIndexPortal({ zIndex: z });
|
|
89
83
|
});
|
|
90
84
|
registeredZIndexes.clear();
|
|
91
|
-
})
|
|
92
|
-
|
|
85
|
+
}),
|
|
86
|
+
);
|
|
93
87
|
|
|
94
88
|
const targetElement = createMemo(() => portalElement() ?? lastPortalElement);
|
|
95
89
|
|
|
96
|
-
// The portal target settles asynchronously (the <g> ref → register → selector),
|
|
97
|
-
// so this Portal is created during a flush, NOT during the initial owned render.
|
|
98
|
-
// Solid's runEffect invokes an effect's APPLY phase without re-establishing the
|
|
99
|
-
// effect as owner, so <Portal>'s apply-phase `insert()` would create its child
|
|
100
|
-
// render-effects with no owner (NO_OWNER_EFFECT — they never dispose). Capture the
|
|
101
|
-
// component owner and create the Portal inside a `createRoot` parented to it, so
|
|
102
|
-
// those effects are owned. The root's manual `dispose` is hooked to the keyed
|
|
103
|
-
// <Show> branch's cleanup: when the target identity changes, the old Portal
|
|
104
|
-
// subtree is torn down (parenting it to the component owner alone would leave
|
|
105
|
-
// every previous Portal alive until the whole layer unmounts — stale chart
|
|
106
|
-
// content stays portal'd into the old <g>).
|
|
107
|
-
const owner = getOwner();
|
|
108
|
-
|
|
109
90
|
return (
|
|
110
91
|
<Show when={shouldRenderInPortal()} fallback={props.children}>
|
|
111
92
|
<Show when={targetElement()} keyed>
|
|
112
|
-
{(mount) => {
|
|
113
|
-
let disposePortal: (() => void) | undefined;
|
|
114
|
-
const rendered = runWithOwner(owner, () =>
|
|
115
|
-
createRoot((dispose) => {
|
|
116
|
-
disposePortal = dispose;
|
|
117
|
-
return <Portal mount={mount}>{props.children}</Portal>;
|
|
118
|
-
}),
|
|
119
|
-
);
|
|
120
|
-
onCleanup(() => disposePortal?.());
|
|
121
|
-
return rendered;
|
|
122
|
-
}}
|
|
93
|
+
{(mount) => <DirectPortal mount={mount}>{props.children}</DirectPortal>}
|
|
123
94
|
</Show>
|
|
124
95
|
</Show>
|
|
125
96
|
);
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
// Ported from recharts 3.8.1 src/zIndex/ZIndexPortal.tsx (commit 7a23854).
|
|
2
2
|
// Solid deviations: `useLayoutEffect` → two-arg `createEffect`; `className` → `class`.
|
|
3
|
-
import {
|
|
4
|
-
import type { JSX } from "
|
|
3
|
+
import { createMemo, createSignal, For, onCleanup, onMount, createEffect, on } from "solid-js";
|
|
4
|
+
import type { JSX } from "solid-js";
|
|
5
5
|
import { useAppSelector, useAppStore } from "../state/hooks";
|
|
6
6
|
import { unregisterCleanup } from "../state/unregisterOnCleanup";
|
|
7
7
|
import { selectAllRegisteredZIndexes } from "./zIndexSelectors";
|
|
@@ -12,35 +12,39 @@ function ZIndexSvgPortal(props: { zIndex: number; isPanorama: boolean }): JSX.El
|
|
|
12
12
|
const [gRef, setGRef] = createSignal<SVGGElement | undefined>();
|
|
13
13
|
|
|
14
14
|
createEffect(
|
|
15
|
-
(
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
actions
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
15
|
+
on(
|
|
16
|
+
() => ({
|
|
17
|
+
zIndex: props.zIndex,
|
|
18
|
+
isPanorama: props.isPanorama,
|
|
19
|
+
element: gRef(),
|
|
20
|
+
}),
|
|
21
|
+
({ zIndex, isPanorama, element }) => {
|
|
22
|
+
const actions = zIndexActions;
|
|
23
|
+
if (element != null && actions != null) {
|
|
24
|
+
actions.registerZIndexPortalElement({
|
|
25
|
+
zIndex,
|
|
26
|
+
element,
|
|
27
|
+
isPanorama,
|
|
28
|
+
});
|
|
29
|
+
}
|
|
30
|
+
},
|
|
31
|
+
),
|
|
30
32
|
);
|
|
31
33
|
|
|
32
|
-
|
|
34
|
+
onMount(() => {
|
|
33
35
|
const zIndex = props.zIndex;
|
|
34
36
|
const isPanorama = props.isPanorama;
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
37
|
+
onCleanup(
|
|
38
|
+
unregisterCleanup(() => {
|
|
39
|
+
zIndexActions?.unregisterZIndexPortalElement({
|
|
40
|
+
zIndex,
|
|
41
|
+
isPanorama,
|
|
42
|
+
});
|
|
43
|
+
}),
|
|
44
|
+
);
|
|
41
45
|
});
|
|
42
46
|
|
|
43
|
-
return <g
|
|
47
|
+
return <g tabIndex={-1} class={`recharts-zIndex-layer_${props.zIndex}`} ref={setGRef} />;
|
|
44
48
|
}
|
|
45
49
|
|
|
46
50
|
export const AllZIndexPortals = (props: {
|
|
@@ -1,15 +0,0 @@
|
|
|
1
|
-
// Ported from recharts 3.8.1 src/state/reduxDevtoolsJsonStringifyReplacer.ts
|
|
2
|
-
// Pure util — no framework surface — behavior is byte-identical to recharts.
|
|
3
|
-
|
|
4
|
-
export function reduxDevtoolsJsonStringifyReplacer(key: string, value: unknown) {
|
|
5
|
-
if (value instanceof HTMLElement) {
|
|
6
|
-
return `HTMLElement <${value.tagName} class="${value.className}">`;
|
|
7
|
-
}
|
|
8
|
-
if (value === window) {
|
|
9
|
-
return "global.window";
|
|
10
|
-
}
|
|
11
|
-
if (key === "children" && typeof value === "object" && value !== null) {
|
|
12
|
-
return "<<CHILDREN>>";
|
|
13
|
-
}
|
|
14
|
-
return value;
|
|
15
|
-
}
|
|
@@ -1,42 +0,0 @@
|
|
|
1
|
-
// Ported from recharts 3.8.1 src/util/axisPropsAreEqual.ts (commit 7a23854).
|
|
2
|
-
import { AxisRange } from "../state/selectors/axisSelectors";
|
|
3
|
-
import { AxisDomain } from "./types";
|
|
4
|
-
import { propsAreEqual } from "./propsAreEqual";
|
|
5
|
-
|
|
6
|
-
function shortArraysAreEqual(
|
|
7
|
-
arr1: AxisDomain | AxisRange | undefined,
|
|
8
|
-
arr2: AxisDomain | AxisRange | undefined,
|
|
9
|
-
): boolean {
|
|
10
|
-
if (arr1 === arr2) {
|
|
11
|
-
return true;
|
|
12
|
-
}
|
|
13
|
-
|
|
14
|
-
if (Array.isArray(arr1) && arr1.length === 2 && Array.isArray(arr2) && arr2.length === 2) {
|
|
15
|
-
return arr1[0] === arr2[0] && arr1[1] === arr2[1];
|
|
16
|
-
}
|
|
17
|
-
|
|
18
|
-
return false;
|
|
19
|
-
}
|
|
20
|
-
|
|
21
|
-
export function axisPropsAreEqual<
|
|
22
|
-
T extends Record<string, unknown> & {
|
|
23
|
-
domain?: AxisDomain;
|
|
24
|
-
range?: AxisRange;
|
|
25
|
-
},
|
|
26
|
-
>(prevProps: T, nextProps: T): boolean {
|
|
27
|
-
if (prevProps === nextProps) {
|
|
28
|
-
return true;
|
|
29
|
-
}
|
|
30
|
-
const { domain: prevDomain, range: prevRange, ...prevRest } = prevProps;
|
|
31
|
-
const { domain: nextDomain, range: nextRange, ...nextRest } = nextProps;
|
|
32
|
-
|
|
33
|
-
if (!shortArraysAreEqual(prevDomain, nextDomain)) {
|
|
34
|
-
return false;
|
|
35
|
-
}
|
|
36
|
-
|
|
37
|
-
if (!shortArraysAreEqual(prevRange, nextRange)) {
|
|
38
|
-
return false;
|
|
39
|
-
}
|
|
40
|
-
|
|
41
|
-
return propsAreEqual(prevRest, nextRest);
|
|
42
|
-
}
|