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,203 @@
|
|
|
1
|
+
// Ported from recharts 3.8.1 src/state/selectors/combiners/combineTooltipPayload.ts.
|
|
2
|
+
//
|
|
3
|
+
// Deviations (all to remove `any`): values pulled from data via getValueByDataKey
|
|
4
|
+
// are `unknown`, so they're coerced to the declared ValueType/name shapes with
|
|
5
|
+
// the type guards below (recharts leans on `any`); the function-dataKey branch of
|
|
6
|
+
// parseDataKey uses a user-defined type guard instead of a cast. The Scatter
|
|
7
|
+
// "array of arrays" payload path is ported faithfully but only exercised once
|
|
8
|
+
// Scatter lands (Line/Bar/Area take the single-object `else` branch).
|
|
9
|
+
import {
|
|
10
|
+
TooltipEntrySettings,
|
|
11
|
+
TooltipIndex,
|
|
12
|
+
TooltipPayload,
|
|
13
|
+
TooltipPayloadConfiguration,
|
|
14
|
+
TooltipPayloadEntry,
|
|
15
|
+
TooltipPayloadSearcher,
|
|
16
|
+
} from "../../tooltipSlice";
|
|
17
|
+
import { ChartData, ChartDataState } from "../../chartDataSlice";
|
|
18
|
+
import { DataKey, TooltipEventType } from "../../../util/types";
|
|
19
|
+
import { findEntryInArray, isNumOrStr } from "../../../util/DataUtils";
|
|
20
|
+
import { getTooltipEntry, getValueByDataKey } from "../../../util/ChartUtils";
|
|
21
|
+
import { getSliced } from "../../../util/getSliced";
|
|
22
|
+
import { ActiveLabel } from "../../../synchronisation/types";
|
|
23
|
+
import { ValueType } from "../../../component/DefaultTooltipContent";
|
|
24
|
+
|
|
25
|
+
type TooltipPayloadItemLike = {
|
|
26
|
+
name: TooltipEntrySettings["name"];
|
|
27
|
+
unit: TooltipEntrySettings["unit"];
|
|
28
|
+
dataKey: DataKey<unknown> | undefined;
|
|
29
|
+
payload: unknown;
|
|
30
|
+
color: string | undefined;
|
|
31
|
+
fill: string | undefined;
|
|
32
|
+
};
|
|
33
|
+
|
|
34
|
+
function isReadonlyArray(value: unknown): value is ReadonlyArray<unknown> {
|
|
35
|
+
return Array.isArray(value);
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
function isDataKeyFunction(value: unknown): value is (obj: unknown) => unknown {
|
|
39
|
+
return typeof value === "function";
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
/** Coerce an `unknown` data value to the declared ValueType (else undefined). */
|
|
43
|
+
function coerceValueType(value: unknown): ValueType | undefined {
|
|
44
|
+
if (isNumOrStr(value)) {
|
|
45
|
+
return value;
|
|
46
|
+
}
|
|
47
|
+
if (isReadonlyArray(value) && value.every(isNumOrStr)) {
|
|
48
|
+
return value;
|
|
49
|
+
}
|
|
50
|
+
return undefined;
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
/** Like reference getValueByDataKey consumption: preserve explicit null for filterNull=false. */
|
|
54
|
+
function tooltipEntryValue(value: unknown): ValueType | null | undefined {
|
|
55
|
+
if (value === null) {
|
|
56
|
+
return null;
|
|
57
|
+
}
|
|
58
|
+
return coerceValueType(value);
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
function toName(value: unknown): string | number | undefined {
|
|
62
|
+
// recharts keeps the raw nameKey value (number or string), not a stringified copy.
|
|
63
|
+
return isNumOrStr(value) ? value : undefined;
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
function parseName(value: unknown): TooltipEntrySettings["name"] {
|
|
67
|
+
if (typeof value === "string" || typeof value === "number") {
|
|
68
|
+
return value;
|
|
69
|
+
}
|
|
70
|
+
return undefined;
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
function parseUnit(value: unknown): TooltipEntrySettings["unit"] {
|
|
74
|
+
if (typeof value === "string" || typeof value === "number" || typeof value === "boolean") {
|
|
75
|
+
return value;
|
|
76
|
+
}
|
|
77
|
+
return undefined;
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
function parseDataKey(value: unknown): DataKey<unknown> | undefined {
|
|
81
|
+
if (typeof value === "string" || typeof value === "number") {
|
|
82
|
+
return value;
|
|
83
|
+
}
|
|
84
|
+
if (isDataKeyFunction(value)) {
|
|
85
|
+
return (obj) => value(obj);
|
|
86
|
+
}
|
|
87
|
+
return undefined;
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
function parseColor(value: unknown): string | undefined {
|
|
91
|
+
if (typeof value === "string") {
|
|
92
|
+
return value;
|
|
93
|
+
}
|
|
94
|
+
return undefined;
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
function parseTooltipPayloadItem(item: unknown): TooltipPayloadItemLike | undefined {
|
|
98
|
+
if (item == null || typeof item !== "object") {
|
|
99
|
+
return undefined;
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
const name = "name" in item ? parseName(item.name) : undefined;
|
|
103
|
+
const unit = "unit" in item ? parseUnit(item.unit) : undefined;
|
|
104
|
+
const dataKey = "dataKey" in item ? parseDataKey(item.dataKey) : undefined;
|
|
105
|
+
const payload = "payload" in item ? item.payload : undefined;
|
|
106
|
+
const color = "color" in item ? parseColor(item.color) : undefined;
|
|
107
|
+
const fill = "fill" in item ? parseColor(item.fill) : undefined;
|
|
108
|
+
|
|
109
|
+
return { name, unit, dataKey, payload, color, fill };
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
function selectFinalData(
|
|
113
|
+
dataDefinedOnItem: unknown,
|
|
114
|
+
dataDefinedOnChart: ChartData | undefined,
|
|
115
|
+
): unknown {
|
|
116
|
+
// Prefer the graphical item's own data; otherwise fall back to chart-level data.
|
|
117
|
+
if (dataDefinedOnItem != null) {
|
|
118
|
+
return dataDefinedOnItem;
|
|
119
|
+
}
|
|
120
|
+
return dataDefinedOnChart;
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
export const combineTooltipPayload = (
|
|
124
|
+
tooltipPayloadConfigurations: ReadonlyArray<TooltipPayloadConfiguration>,
|
|
125
|
+
activeIndex: TooltipIndex,
|
|
126
|
+
chartDataState: ChartDataState,
|
|
127
|
+
tooltipAxisDataKey: DataKey<unknown> | undefined,
|
|
128
|
+
activeLabel: ActiveLabel,
|
|
129
|
+
tooltipPayloadSearcher: TooltipPayloadSearcher | undefined,
|
|
130
|
+
tooltipEventType: TooltipEventType | undefined,
|
|
131
|
+
): TooltipPayload | undefined => {
|
|
132
|
+
if (activeIndex == null || tooltipPayloadSearcher == null) {
|
|
133
|
+
return undefined;
|
|
134
|
+
}
|
|
135
|
+
const { chartData, computedData, dataStartIndex, dataEndIndex } = chartDataState;
|
|
136
|
+
|
|
137
|
+
const init: Array<TooltipPayloadEntry> = [];
|
|
138
|
+
|
|
139
|
+
return tooltipPayloadConfigurations.reduce(
|
|
140
|
+
(agg, { dataDefinedOnItem, settings }): Array<TooltipPayloadEntry> => {
|
|
141
|
+
const finalData = selectFinalData(dataDefinedOnItem, chartData);
|
|
142
|
+
|
|
143
|
+
const sliced = isReadonlyArray(finalData)
|
|
144
|
+
? getSliced(finalData, dataStartIndex, dataEndIndex)
|
|
145
|
+
: finalData;
|
|
146
|
+
|
|
147
|
+
const finalDataKey: DataKey<unknown> | undefined = settings?.dataKey ?? tooltipAxisDataKey;
|
|
148
|
+
const finalNameKey: DataKey<unknown> | undefined = settings?.nameKey;
|
|
149
|
+
let tooltipPayload: unknown;
|
|
150
|
+
if (
|
|
151
|
+
tooltipAxisDataKey &&
|
|
152
|
+
isReadonlyArray(sliced) &&
|
|
153
|
+
// Scatter provides arrays-of-arrays; findEntryInArray can't handle that.
|
|
154
|
+
!isReadonlyArray(sliced[0]) &&
|
|
155
|
+
// 'axis' searches by dataKey + label (order may not match data); 'item'
|
|
156
|
+
// searches by index.
|
|
157
|
+
tooltipEventType === "axis"
|
|
158
|
+
) {
|
|
159
|
+
tooltipPayload = findEntryInArray(sliced, tooltipAxisDataKey, activeLabel);
|
|
160
|
+
} else {
|
|
161
|
+
tooltipPayload = tooltipPayloadSearcher(sliced, activeIndex, computedData, finalNameKey);
|
|
162
|
+
}
|
|
163
|
+
|
|
164
|
+
if (isReadonlyArray(tooltipPayload)) {
|
|
165
|
+
tooltipPayload.forEach((item) => {
|
|
166
|
+
const parsedItem = parseTooltipPayloadItem(item);
|
|
167
|
+
const itemName = parsedItem?.name;
|
|
168
|
+
const itemDataKey = parsedItem?.dataKey;
|
|
169
|
+
const itemPayload = parsedItem?.payload;
|
|
170
|
+
const newSettings: TooltipEntrySettings = {
|
|
171
|
+
...settings,
|
|
172
|
+
name: itemName,
|
|
173
|
+
unit: parsedItem?.unit,
|
|
174
|
+
// Preserve item-level color/fill from graphical items.
|
|
175
|
+
color: parsedItem?.color ?? settings?.color,
|
|
176
|
+
fill: parsedItem?.fill ?? settings?.fill,
|
|
177
|
+
};
|
|
178
|
+
agg.push(
|
|
179
|
+
getTooltipEntry({
|
|
180
|
+
tooltipEntrySettings: newSettings,
|
|
181
|
+
dataKey: itemDataKey,
|
|
182
|
+
payload: itemPayload,
|
|
183
|
+
value: tooltipEntryValue(getValueByDataKey(itemPayload, itemDataKey)),
|
|
184
|
+
name: itemName,
|
|
185
|
+
}),
|
|
186
|
+
);
|
|
187
|
+
});
|
|
188
|
+
} else {
|
|
189
|
+
agg.push(
|
|
190
|
+
getTooltipEntry({
|
|
191
|
+
tooltipEntrySettings: settings,
|
|
192
|
+
dataKey: finalDataKey,
|
|
193
|
+
payload: tooltipPayload,
|
|
194
|
+
value: tooltipEntryValue(getValueByDataKey(tooltipPayload, finalDataKey)),
|
|
195
|
+
name: toName(getValueByDataKey(tooltipPayload, finalNameKey)) ?? toName(settings?.name),
|
|
196
|
+
}),
|
|
197
|
+
);
|
|
198
|
+
}
|
|
199
|
+
return agg;
|
|
200
|
+
},
|
|
201
|
+
init,
|
|
202
|
+
);
|
|
203
|
+
};
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
// Ported from recharts 3.8.1 src/state/selectors/combiners/combineTooltipPayloadConfigurations.ts.
|
|
2
|
+
import { TooltipIndex, TooltipPayloadConfiguration, TooltipState } from "../../tooltipSlice";
|
|
3
|
+
import { TooltipEventType } from "../../../util/types";
|
|
4
|
+
import { TooltipTrigger } from "../../../chart/types";
|
|
5
|
+
import { GraphicalItemId } from "../../graphicalItemsSlice";
|
|
6
|
+
|
|
7
|
+
export const combineTooltipPayloadConfigurations = (
|
|
8
|
+
tooltipState: TooltipState,
|
|
9
|
+
tooltipEventType: TooltipEventType | undefined,
|
|
10
|
+
trigger: TooltipTrigger,
|
|
11
|
+
defaultIndex: TooltipIndex | undefined,
|
|
12
|
+
): ReadonlyArray<TooltipPayloadConfiguration> => {
|
|
13
|
+
// axis interaction shows all items at the same axis coordinate.
|
|
14
|
+
if (tooltipEventType === "axis") {
|
|
15
|
+
return tooltipState.tooltipItemPayloads;
|
|
16
|
+
}
|
|
17
|
+
// item interaction shows only the hovered/clicked item.
|
|
18
|
+
if (tooltipState.tooltipItemPayloads.length === 0) {
|
|
19
|
+
return [];
|
|
20
|
+
}
|
|
21
|
+
let filterByGraphicalItemId: GraphicalItemId | undefined;
|
|
22
|
+
if (trigger === "hover") {
|
|
23
|
+
filterByGraphicalItemId = tooltipState.itemInteraction.hover.graphicalItemId;
|
|
24
|
+
} else {
|
|
25
|
+
filterByGraphicalItemId = tooltipState.itemInteraction.click.graphicalItemId;
|
|
26
|
+
}
|
|
27
|
+
if (tooltipState.syncInteraction.active && filterByGraphicalItemId == null) {
|
|
28
|
+
// Synchronised from another chart: show all items at the synced index.
|
|
29
|
+
return tooltipState.tooltipItemPayloads;
|
|
30
|
+
}
|
|
31
|
+
if (
|
|
32
|
+
filterByGraphicalItemId == null &&
|
|
33
|
+
(defaultIndex != null || tooltipState.keyboardInteraction.active)
|
|
34
|
+
) {
|
|
35
|
+
// With defaultIndex/keyboard but no hovered item, show the first item.
|
|
36
|
+
const firstItemPayload = tooltipState.tooltipItemPayloads[0];
|
|
37
|
+
if (firstItemPayload != null) {
|
|
38
|
+
return [firstItemPayload];
|
|
39
|
+
}
|
|
40
|
+
return [];
|
|
41
|
+
}
|
|
42
|
+
return tooltipState.tooltipItemPayloads.filter(
|
|
43
|
+
(tpc) => tpc.settings?.graphicalItemId === filterByGraphicalItemId,
|
|
44
|
+
);
|
|
45
|
+
};
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
// Ported from recharts 3.8.1 src/state/selectors/containerSelectors.ts (commit 7a23854).
|
|
2
|
+
// Solid-native: plain selector functions (memoization comes from `useAppSelector`'s createMemo).
|
|
3
|
+
import { RechartsRootState } from "../store";
|
|
4
|
+
import { Margin } from "../../util/types";
|
|
5
|
+
|
|
6
|
+
export const selectChartWidth = (state: RechartsRootState): number => state.layout.width;
|
|
7
|
+
|
|
8
|
+
export const selectChartHeight = (state: RechartsRootState): number => state.layout.height;
|
|
9
|
+
|
|
10
|
+
export const selectContainerScale = (state: RechartsRootState): number => state.layout.scale;
|
|
11
|
+
|
|
12
|
+
export const selectMargin = (state: RechartsRootState): Margin => state.layout.margin;
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
// Ported from recharts 3.8.1 src/state/selectors/dataSelectors.ts (commit 7a23854).
|
|
2
|
+
//
|
|
3
|
+
// Solid-native: plain selector functions, no reselect. recharts wraps several of
|
|
4
|
+
// these in `createSelector` purely for memoization (to swallow spurious Immer
|
|
5
|
+
// reference churn); in the Solid store, memoization comes from `useAppSelector`'s
|
|
6
|
+
// `createMemo` at the consumer, so these stay plain functions. Behavior is
|
|
7
|
+
// identical.
|
|
8
|
+
import { RechartsRootState } from "../store";
|
|
9
|
+
import { ChartData, ChartDataState } from "../chartDataSlice";
|
|
10
|
+
|
|
11
|
+
/**
|
|
12
|
+
* Always returns the data with the indexes set by a Brush. That might or might
|
|
13
|
+
* not be what you want — in charts with Brush you sometimes want the full range
|
|
14
|
+
* (e.g. the panorama inside the Brush). Prefer
|
|
15
|
+
* {@link selectChartDataAndAlwaysIgnoreIndexes} or
|
|
16
|
+
* {@link selectChartDataWithIndexesIfNotInPanoramaPosition4} when that matters.
|
|
17
|
+
*/
|
|
18
|
+
export const selectChartDataWithIndexes = (state: RechartsRootState): ChartDataState =>
|
|
19
|
+
state.chartData;
|
|
20
|
+
|
|
21
|
+
/**
|
|
22
|
+
* Always returns the full range of data, ignoring Brush indexes. Useful for the
|
|
23
|
+
* Brush panorama, Legend, and Tooltip.
|
|
24
|
+
*/
|
|
25
|
+
export const selectChartDataAndAlwaysIgnoreIndexes = (state: RechartsRootState): ChartDataState => {
|
|
26
|
+
const dataState = selectChartDataWithIndexes(state);
|
|
27
|
+
const dataEndIndex = dataState.chartData != null ? dataState.chartData.length - 1 : 0;
|
|
28
|
+
return {
|
|
29
|
+
chartData: dataState.chartData,
|
|
30
|
+
computedData: dataState.computedData,
|
|
31
|
+
dataEndIndex,
|
|
32
|
+
dataStartIndex: 0,
|
|
33
|
+
};
|
|
34
|
+
};
|
|
35
|
+
|
|
36
|
+
export const selectChartDataWithIndexesIfNotInPanoramaPosition4 = (
|
|
37
|
+
state: RechartsRootState,
|
|
38
|
+
_unused1: unknown,
|
|
39
|
+
_unused2: unknown,
|
|
40
|
+
isPanorama: boolean,
|
|
41
|
+
): ChartDataState => {
|
|
42
|
+
if (isPanorama) {
|
|
43
|
+
return selectChartDataAndAlwaysIgnoreIndexes(state);
|
|
44
|
+
}
|
|
45
|
+
return selectChartDataWithIndexes(state);
|
|
46
|
+
};
|
|
47
|
+
|
|
48
|
+
export const selectChartDataWithIndexesIfNotInPanoramaPosition3 = (
|
|
49
|
+
state: RechartsRootState,
|
|
50
|
+
_unused1: unknown,
|
|
51
|
+
isPanorama: boolean,
|
|
52
|
+
): ChartDataState => {
|
|
53
|
+
if (isPanorama) {
|
|
54
|
+
return selectChartDataAndAlwaysIgnoreIndexes(state);
|
|
55
|
+
}
|
|
56
|
+
return selectChartDataWithIndexes(state);
|
|
57
|
+
};
|
|
58
|
+
|
|
59
|
+
/**
|
|
60
|
+
* Returns the chart-level data slice (respecting Brush indexes). Used when a
|
|
61
|
+
* selector needs chart-level data.
|
|
62
|
+
*/
|
|
63
|
+
export const selectChartDataSliceIfNotInPanorama = (
|
|
64
|
+
state: RechartsRootState,
|
|
65
|
+
_unused1: unknown,
|
|
66
|
+
_unused2: unknown,
|
|
67
|
+
isPanorama: boolean,
|
|
68
|
+
): ChartData => {
|
|
69
|
+
const { chartData, dataStartIndex, dataEndIndex } =
|
|
70
|
+
selectChartDataWithIndexesIfNotInPanoramaPosition4(state, _unused1, _unused2, isPanorama);
|
|
71
|
+
return chartData != null ? chartData.slice(dataStartIndex, dataEndIndex + 1) : [];
|
|
72
|
+
};
|
|
73
|
+
|
|
74
|
+
/**
|
|
75
|
+
* Returns the chart-level data slice (ignoring Brush indexes). Used in tooltip
|
|
76
|
+
* and polar selectors that always need the full data range.
|
|
77
|
+
*/
|
|
78
|
+
export const selectChartDataSliceIgnoringIndexes = (state: RechartsRootState): ChartData => {
|
|
79
|
+
const { chartData, dataStartIndex, dataEndIndex } = selectChartDataAndAlwaysIgnoreIndexes(state);
|
|
80
|
+
return chartData != null ? chartData.slice(dataStartIndex, dataEndIndex + 1) : [];
|
|
81
|
+
};
|
|
82
|
+
|
|
83
|
+
/**
|
|
84
|
+
* Returns the chart-level data slice (with Brush indexes applied). Used in
|
|
85
|
+
* tooltip selectors.
|
|
86
|
+
*/
|
|
87
|
+
export const selectChartDataSliceWithIndexes = (state: RechartsRootState): ChartData => {
|
|
88
|
+
const { chartData, dataStartIndex, dataEndIndex } = selectChartDataWithIndexes(state);
|
|
89
|
+
return chartData != null ? chartData.slice(dataStartIndex, dataEndIndex + 1) : [];
|
|
90
|
+
};
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
// Ported from recharts 3.8.1 src/state/selectors/funnelSelectors.ts (commit 7a23854).
|
|
2
|
+
// Solid-native plain selector (no reselect). The funnel settings are RESOLVED FROM
|
|
3
|
+
// PROPS (not a graphical-items slice) and passed in directly — the only store reads
|
|
4
|
+
// are the chart offset and chart-level data. Cells + per-row presentation merge here,
|
|
5
|
+
// mirroring the reference (cell props win over data, which wins over presentation).
|
|
6
|
+
import { computeFunnelTrapezoids, FunnelTrapezoidItem } from "../../cartesian/Funnel";
|
|
7
|
+
import { ChartData } from "../chartDataSlice";
|
|
8
|
+
import { RechartsRootState } from "../store";
|
|
9
|
+
import { selectChartOffsetInternal } from "./selectChartOffsetInternal";
|
|
10
|
+
import { selectChartDataAndAlwaysIgnoreIndexes } from "./dataSelectors";
|
|
11
|
+
import { DataKey, TooltipType } from "../../util/types";
|
|
12
|
+
import type { CellProps } from "../../component/Cell";
|
|
13
|
+
import { GraphicalItemId } from "../graphicalItemsSlice";
|
|
14
|
+
|
|
15
|
+
export type ResolvedFunnelSettings = {
|
|
16
|
+
dataKey: DataKey<unknown> | undefined;
|
|
17
|
+
data: ChartData | undefined;
|
|
18
|
+
nameKey: DataKey<unknown> | undefined;
|
|
19
|
+
tooltipType?: TooltipType;
|
|
20
|
+
lastShapeType?: "triangle" | "rectangle";
|
|
21
|
+
reversed?: boolean;
|
|
22
|
+
customWidth?: string | number;
|
|
23
|
+
cells: ReadonlyArray<CellProps>;
|
|
24
|
+
presentationProps: Record<string, unknown> | null;
|
|
25
|
+
id: GraphicalItemId;
|
|
26
|
+
};
|
|
27
|
+
|
|
28
|
+
/** Spread an unknown data entry into a plain record (`{}` for non-objects). */
|
|
29
|
+
const toRecord = (entry: unknown): Record<string, unknown> =>
|
|
30
|
+
typeof entry === "object" && entry != null ? { ...entry } : {};
|
|
31
|
+
|
|
32
|
+
export const selectFunnelTrapezoids = (
|
|
33
|
+
state: RechartsRootState,
|
|
34
|
+
funnelSettings: ResolvedFunnelSettings,
|
|
35
|
+
): ReadonlyArray<FunnelTrapezoidItem> => {
|
|
36
|
+
const offset = selectChartOffsetInternal(state);
|
|
37
|
+
const { chartData } = selectChartDataAndAlwaysIgnoreIndexes(state);
|
|
38
|
+
const {
|
|
39
|
+
data,
|
|
40
|
+
dataKey,
|
|
41
|
+
nameKey,
|
|
42
|
+
tooltipType,
|
|
43
|
+
lastShapeType,
|
|
44
|
+
reversed,
|
|
45
|
+
customWidth,
|
|
46
|
+
cells,
|
|
47
|
+
presentationProps,
|
|
48
|
+
id: graphicalItemId,
|
|
49
|
+
} = funnelSettings;
|
|
50
|
+
|
|
51
|
+
let source: ChartData | undefined;
|
|
52
|
+
if (data != null && data.length > 0) {
|
|
53
|
+
source = data;
|
|
54
|
+
} else if (chartData != null && chartData.length > 0) {
|
|
55
|
+
source = chartData;
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
let displayedData: ReadonlyArray<Record<string, unknown>>;
|
|
59
|
+
if (source && source.length > 0) {
|
|
60
|
+
displayedData = source.map((entry, index) => ({
|
|
61
|
+
payload: entry,
|
|
62
|
+
...presentationProps,
|
|
63
|
+
...toRecord(entry),
|
|
64
|
+
...toRecord(cells[index]),
|
|
65
|
+
}));
|
|
66
|
+
} else if (cells.length > 0) {
|
|
67
|
+
displayedData = cells.map((cell) => ({ ...presentationProps, ...toRecord(cell) }));
|
|
68
|
+
} else {
|
|
69
|
+
return [];
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
return computeFunnelTrapezoids({
|
|
73
|
+
dataKey,
|
|
74
|
+
nameKey,
|
|
75
|
+
displayedData,
|
|
76
|
+
tooltipType,
|
|
77
|
+
lastShapeType,
|
|
78
|
+
reversed,
|
|
79
|
+
offset,
|
|
80
|
+
customWidth,
|
|
81
|
+
graphicalItemId,
|
|
82
|
+
});
|
|
83
|
+
};
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
// Ported from recharts 3.8.1 src/state/selectors/graphicalItemSelectors.ts
|
|
2
|
+
// (commit 7a23854). Solid-native plain selectors.
|
|
3
|
+
import { RechartsRootState } from "../store";
|
|
4
|
+
import { GraphicalItemId } from "../graphicalItemsSlice";
|
|
5
|
+
import { AxisId, defaultAxisId } from "../cartesianAxisSlice";
|
|
6
|
+
|
|
7
|
+
export function selectXAxisIdFromGraphicalItemId(
|
|
8
|
+
state: RechartsRootState,
|
|
9
|
+
id: GraphicalItemId,
|
|
10
|
+
): AxisId {
|
|
11
|
+
return (
|
|
12
|
+
state.graphicalItems.cartesianItems.find((item) => item.id === id)?.xAxisId ?? defaultAxisId
|
|
13
|
+
);
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
export function selectYAxisIdFromGraphicalItemId(
|
|
17
|
+
state: RechartsRootState,
|
|
18
|
+
id: GraphicalItemId,
|
|
19
|
+
): AxisId {
|
|
20
|
+
return (
|
|
21
|
+
state.graphicalItems.cartesianItems.find((item) => item.id === id)?.yAxisId ?? defaultAxisId
|
|
22
|
+
);
|
|
23
|
+
}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
// Ported from recharts 3.8.1 src/state/selectors/legendSelectors.ts (commit 7a23854).
|
|
2
|
+
// Deviation: payload is stored as `{ id, items }[]` (proxy-safe ids) so the flat
|
|
3
|
+
// selector flatMaps `items` rather than `flat(1)`-ing a 2D array.
|
|
4
|
+
import { sortBy } from "../../util/collectionUtils";
|
|
5
|
+
import { RechartsRootState } from "../store";
|
|
6
|
+
import { LegendSettings } from "../legendSlice";
|
|
7
|
+
import { LegendItemSorter, LegendPayload } from "../../component/DefaultLegendContent";
|
|
8
|
+
import { Size } from "../../util/types";
|
|
9
|
+
|
|
10
|
+
export const selectLegendSettings = (state: RechartsRootState): LegendSettings =>
|
|
11
|
+
state.legend.settings;
|
|
12
|
+
|
|
13
|
+
export const selectLegendSize = (state: RechartsRootState): Size => state.legend.size;
|
|
14
|
+
|
|
15
|
+
export const selectLegendPayload = (state: RechartsRootState): ReadonlyArray<LegendPayload> => {
|
|
16
|
+
const flat = state.legend.payload.flatMap((entry) => entry.items);
|
|
17
|
+
const { itemSorter } = selectLegendSettings(state);
|
|
18
|
+
return sortByLegendItemSorter(flat, itemSorter);
|
|
19
|
+
};
|
|
20
|
+
|
|
21
|
+
function sortByLegendItemSorter(
|
|
22
|
+
items: ReadonlyArray<LegendPayload>,
|
|
23
|
+
itemSorter: LegendItemSorter | null,
|
|
24
|
+
): ReadonlyArray<LegendPayload> {
|
|
25
|
+
if (itemSorter == null) {
|
|
26
|
+
return items;
|
|
27
|
+
}
|
|
28
|
+
return sortBy(items, [itemSorter]);
|
|
29
|
+
}
|
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
// Ported from recharts 3.8.1 src/state/selectors/lineSelectors.ts (commit 7a23854).
|
|
2
|
+
// Solid-native: plain selector functions (memoization comes from useAppSelector's
|
|
3
|
+
// createMemo at the consumer).
|
|
4
|
+
import { computeLinePoints, LinePointItem } from "../../cartesian/Line";
|
|
5
|
+
import { RechartsRootState } from "../store";
|
|
6
|
+
import { AxisId } from "../cartesianAxisSlice";
|
|
7
|
+
import { selectChartDataWithIndexesIfNotInPanoramaPosition4 } from "./dataSelectors";
|
|
8
|
+
import { selectChartLayout } from "../../context/chartLayoutContext";
|
|
9
|
+
import {
|
|
10
|
+
selectAxisWithScale,
|
|
11
|
+
selectTicksOfGraphicalItem,
|
|
12
|
+
selectUnfilteredCartesianItems,
|
|
13
|
+
} from "./axisSelectors";
|
|
14
|
+
import { getBandSizeOfAxis, isCategoricalAxis } from "../../util/ChartUtils";
|
|
15
|
+
import { ChartData } from "../chartDataSlice";
|
|
16
|
+
import { CartesianGraphicalItemSettings, GraphicalItemId } from "../graphicalItemsSlice";
|
|
17
|
+
import { LineSettings } from "../types/LineSettings";
|
|
18
|
+
|
|
19
|
+
const selectBandSize = (
|
|
20
|
+
state: RechartsRootState,
|
|
21
|
+
xAxisId: AxisId,
|
|
22
|
+
yAxisId: AxisId,
|
|
23
|
+
isPanorama: boolean,
|
|
24
|
+
): number | undefined => {
|
|
25
|
+
const layout = selectChartLayout(state);
|
|
26
|
+
if (isCategoricalAxis(layout, "xAxis")) {
|
|
27
|
+
return getBandSizeOfAxis(
|
|
28
|
+
selectAxisWithScale(state, "xAxis", xAxisId, isPanorama),
|
|
29
|
+
selectTicksOfGraphicalItem(state, "xAxis", xAxisId, isPanorama),
|
|
30
|
+
false,
|
|
31
|
+
);
|
|
32
|
+
}
|
|
33
|
+
return getBandSizeOfAxis(
|
|
34
|
+
selectAxisWithScale(state, "yAxis", yAxisId, isPanorama),
|
|
35
|
+
selectTicksOfGraphicalItem(state, "yAxis", yAxisId, isPanorama),
|
|
36
|
+
false,
|
|
37
|
+
);
|
|
38
|
+
};
|
|
39
|
+
|
|
40
|
+
function isLineSettings(item: CartesianGraphicalItemSettings): item is LineSettings {
|
|
41
|
+
return item.type === "line";
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
/*
|
|
45
|
+
* There is a race condition where we read some data from props and some from the
|
|
46
|
+
* state. The state is updated through a dispatch and is one render behind, so we
|
|
47
|
+
* always read the dataKey from the state here.
|
|
48
|
+
*/
|
|
49
|
+
const selectSynchronisedLineSettings = (
|
|
50
|
+
state: RechartsRootState,
|
|
51
|
+
id: GraphicalItemId,
|
|
52
|
+
): LineSettings | undefined =>
|
|
53
|
+
selectUnfilteredCartesianItems(state)
|
|
54
|
+
.filter(isLineSettings)
|
|
55
|
+
.find((x) => x.id === id);
|
|
56
|
+
|
|
57
|
+
export const selectLinePoints = (
|
|
58
|
+
state: RechartsRootState,
|
|
59
|
+
xAxisId: AxisId,
|
|
60
|
+
yAxisId: AxisId,
|
|
61
|
+
isPanorama: boolean,
|
|
62
|
+
id: GraphicalItemId,
|
|
63
|
+
): ReadonlyArray<LinePointItem> | undefined => {
|
|
64
|
+
const layout = selectChartLayout(state);
|
|
65
|
+
const xAxis = selectAxisWithScale(state, "xAxis", xAxisId, isPanorama);
|
|
66
|
+
const yAxis = selectAxisWithScale(state, "yAxis", yAxisId, isPanorama);
|
|
67
|
+
const xAxisTicks = selectTicksOfGraphicalItem(state, "xAxis", xAxisId, isPanorama);
|
|
68
|
+
const yAxisTicks = selectTicksOfGraphicalItem(state, "yAxis", yAxisId, isPanorama);
|
|
69
|
+
const lineSettings = selectSynchronisedLineSettings(state, id);
|
|
70
|
+
const bandSize = selectBandSize(state, xAxisId, yAxisId, isPanorama);
|
|
71
|
+
const { chartData, dataStartIndex, dataEndIndex } =
|
|
72
|
+
selectChartDataWithIndexesIfNotInPanoramaPosition4(state, xAxisId, yAxisId, isPanorama);
|
|
73
|
+
|
|
74
|
+
if (
|
|
75
|
+
lineSettings == null ||
|
|
76
|
+
xAxis == null ||
|
|
77
|
+
yAxis == null ||
|
|
78
|
+
xAxisTicks == null ||
|
|
79
|
+
yAxisTicks == null ||
|
|
80
|
+
xAxisTicks.length === 0 ||
|
|
81
|
+
yAxisTicks.length === 0 ||
|
|
82
|
+
bandSize == null ||
|
|
83
|
+
(layout !== "horizontal" && layout !== "vertical")
|
|
84
|
+
) {
|
|
85
|
+
return undefined;
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
const { dataKey, data } = lineSettings;
|
|
89
|
+
let displayedData: ChartData | undefined;
|
|
90
|
+
|
|
91
|
+
if (data != null && data.length > 0) {
|
|
92
|
+
displayedData = data;
|
|
93
|
+
} else {
|
|
94
|
+
displayedData = chartData?.slice(dataStartIndex, dataEndIndex + 1);
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
if (displayedData == null) {
|
|
98
|
+
return undefined;
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
return computeLinePoints({
|
|
102
|
+
layout,
|
|
103
|
+
xAxis,
|
|
104
|
+
yAxis,
|
|
105
|
+
xAxisTicks,
|
|
106
|
+
yAxisTicks,
|
|
107
|
+
dataKey,
|
|
108
|
+
bandSize,
|
|
109
|
+
displayedData,
|
|
110
|
+
});
|
|
111
|
+
};
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
// SKIPPED — intentionally NOT ported to the SolidJS port.
|
|
2
|
+
//
|
|
3
|
+
// Reason: reselect resultEqualityCheck — Solid memoizes via createMemo, not needed
|
|
4
|
+
//
|
|
5
|
+
// TODO: do not port this file as-is. The Solid-native port replaces it (see the
|
|
6
|
+
// reason above). If a consumer needs this path, wire it to the Solid equivalent
|
|
7
|
+
// instead. Tracked in scripts/porting-queue.mjs SKIP list and project memory.
|
|
8
|
+
export {};
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
// Ported from recharts 3.8.1 src/state/selectors/pickAxisId.ts (commit 7a23854).
|
|
2
|
+
import { RechartsRootState } from "../store";
|
|
3
|
+
import { AxisId } from "../cartesianAxisSlice";
|
|
4
|
+
|
|
5
|
+
export const pickAxisId = (_state: RechartsRootState, _axisType: unknown, axisId: AxisId): AxisId =>
|
|
6
|
+
axisId;
|