@solidports/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/LICENSE +22 -0
- package/NOTICE +19 -0
- package/README.md +102 -0
- package/dist/dev.js +28564 -0
- package/dist/index.d.ts +7859 -0
- package/dist/index.js +28546 -0
- package/package.json +98 -0
- package/src/animation/AnimatedItems.tsx +183 -0
- package/src/animation/AnimationController.ts +33 -0
- package/src/animation/AnimationControllerImpl.ts +36 -0
- package/src/animation/AnimationHandle.ts +307 -0
- package/src/animation/CSSTransitionAnimate.tsx +170 -0
- package/src/animation/JavascriptAnimate.tsx +119 -0
- package/src/animation/easing.ts +221 -0
- package/src/animation/matchBy.ts +164 -0
- package/src/animation/timeoutController.ts +70 -0
- package/src/animation/useAnimationController.tsx +34 -0
- package/src/animation/useAnimationStartSnapshot.ts +118 -0
- package/src/animation/util.ts +41 -0
- package/src/cartesian/Area.tsx +915 -0
- package/src/cartesian/AreaRevealShape.tsx +190 -0
- package/src/cartesian/Bar.tsx +1369 -0
- package/src/cartesian/BarStack.tsx +152 -0
- package/src/cartesian/Brush.tsx +951 -0
- package/src/cartesian/CartesianAxis.tsx +722 -0
- package/src/cartesian/CartesianGrid.tsx +711 -0
- package/src/cartesian/ErrorBar.tsx +361 -0
- package/src/cartesian/Funnel.tsx +803 -0
- package/src/cartesian/GraphicalItemClipPath.tsx +67 -0
- package/src/cartesian/Line.tsx +863 -0
- package/src/cartesian/LineDrawShape.tsx +89 -0
- package/src/cartesian/ReferenceArea.tsx +331 -0
- package/src/cartesian/ReferenceDot.tsx +304 -0
- package/src/cartesian/ReferenceLine.tsx +474 -0
- package/src/cartesian/Scatter.tsx +888 -0
- package/src/cartesian/XAxis.tsx +433 -0
- package/src/cartesian/YAxis.tsx +443 -0
- package/src/cartesian/ZAxis.tsx +155 -0
- package/src/cartesian/cartesianPositionToCSSTranslate.tsx +29 -0
- package/src/cartesian/cartesianViewBoxToTrapezoid.tsx +21 -0
- package/src/cartesian/getCartesianPosition.tsx +267 -0
- package/src/cartesian/getEquidistantTicks.ts +144 -0
- package/src/cartesian/getTicks.ts +225 -0
- package/src/cartesian/isOutsidePosition.ts +15 -0
- package/src/cartesian/useAnimatedLineLength.ts +54 -0
- package/src/chart/AreaChart.tsx +29 -0
- package/src/chart/BarChart.tsx +29 -0
- package/src/chart/CartesianChart.tsx +131 -0
- package/src/chart/CategoricalChart.tsx +94 -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 +50 -0
- package/src/chart/PolarChart.tsx +164 -0
- package/src/chart/RadarChart.tsx +70 -0
- package/src/chart/RadialBarChart.tsx +46 -0
- package/src/chart/RechartsWrapper.tsx +551 -0
- package/src/chart/Sankey.tsx +1534 -0
- package/src/chart/ScatterChart.tsx +29 -0
- package/src/chart/SunburstChart.tsx +504 -0
- package/src/chart/Treemap.tsx +1223 -0
- package/src/chart/createInitialRootProps.ts +24 -0
- package/src/chart/types.ts +53 -0
- package/src/component/ActivePoints.tsx +144 -0
- package/src/component/Cell.tsx +37 -0
- package/src/component/Cursor.tsx +185 -0
- package/src/component/Customized.tsx +50 -0
- package/src/component/DefaultLegendContent.tsx +348 -0
- package/src/component/DefaultTooltipContent.tsx +224 -0
- package/src/component/Dots.tsx +157 -0
- package/src/component/Label.tsx +636 -0
- package/src/component/LabelList.tsx +375 -0
- package/src/component/Legend.tsx +512 -0
- package/src/component/ResponsiveContainer.tsx +348 -0
- package/src/component/Text.tsx +541 -0
- package/src/component/Tooltip.tsx +470 -0
- package/src/component/TooltipBoundingBox.tsx +146 -0
- package/src/component/responsiveContainerUtils.ts +134 -0
- package/src/container/ClipPathProvider.tsx +51 -0
- package/src/container/Layer.tsx +38 -0
- package/src/container/RootSurface.tsx +120 -0
- package/src/container/Surface.tsx +61 -0
- package/src/context/CellsContext.tsx +54 -0
- package/src/context/ErrorBarContext.tsx +146 -0
- package/src/context/GraphicalItemChildrenScope.tsx +18 -0
- package/src/context/PanoramaContext.tsx +9 -0
- package/src/context/RegisterGraphicalItemId.tsx +30 -0
- package/src/context/accessibilityContext.tsx +6 -0
- package/src/context/brushUpdateContext.tsx +9 -0
- package/src/context/chartDataContext.tsx +97 -0
- package/src/context/chartLayoutContext.tsx +201 -0
- package/src/context/legendPayloadContext.tsx +20 -0
- package/src/context/legendPortalContext.tsx +12 -0
- package/src/context/tooltipContext.tsx +89 -0
- package/src/context/tooltipPortalContext.tsx +12 -0
- package/src/context/useTooltipAxis.ts +22 -0
- package/src/hooks.ts +476 -0
- package/src/index.ts +280 -0
- package/src/polar/Pie.tsx +1360 -0
- package/src/polar/PolarAngleAxis.tsx +616 -0
- package/src/polar/PolarGrid.tsx +312 -0
- package/src/polar/PolarRadiusAxis.tsx +547 -0
- package/src/polar/Radar.tsx +734 -0
- package/src/polar/RadialBar.tsx +917 -0
- package/src/polar/defaultPolarAngleAxisProps.tsx +27 -0
- package/src/polar/defaultPolarRadiusAxisProps.tsx +25 -0
- package/src/shape/Cross.tsx +89 -0
- package/src/shape/Curve.tsx +343 -0
- package/src/shape/Dot.tsx +70 -0
- package/src/shape/Polygon.tsx +195 -0
- package/src/shape/Rectangle.tsx +470 -0
- package/src/shape/Sector.tsx +347 -0
- package/src/shape/Symbols.tsx +139 -0
- package/src/shape/Trapezoid.tsx +280 -0
- package/src/state/RechartsStateContext.tsx +12 -0
- package/src/state/RechartsStateProvider.tsx +87 -0
- package/src/state/RechartsStoreContext.tsx +25 -0
- package/src/state/RechartsStoreProvider.tsx +35 -0
- package/src/state/ReportChartProps.tsx +40 -0
- package/src/state/ReportEventSettings.tsx +30 -0
- package/src/state/ReportMainChartProps.tsx +61 -0
- package/src/state/ReportPolarOptions.tsx +35 -0
- package/src/state/SetGraphicalItem.ts +79 -0
- package/src/state/SetLegendPayload.ts +134 -0
- package/src/state/SetTooltipEntrySettings.tsx +72 -0
- package/src/state/actions.ts +464 -0
- package/src/state/brushSlice.ts +13 -0
- package/src/state/cartesianAxisSlice.ts +141 -0
- package/src/state/chartDataSlice.ts +50 -0
- package/src/state/chartState.ts +297 -0
- package/src/state/errorBarSlice.ts +29 -0
- package/src/state/eventSettingsSlice.ts +8 -0
- package/src/state/events.ts +76 -0
- package/src/state/externalEventsMiddleware.ts +255 -0
- package/src/state/graphicalItemsSlice.ts +74 -0
- package/src/state/hooks/useChartSelectors.tsx +45 -0
- package/src/state/keyboardEventsMiddleware.ts +228 -0
- package/src/state/layoutSlice.ts +21 -0
- package/src/state/legendSlice.ts +57 -0
- package/src/state/mouseEventsMiddleware.ts +185 -0
- package/src/state/optionsSlice.ts +47 -0
- package/src/state/polarAxisSlice.ts +10 -0
- package/src/state/polarOptionsSlice.ts +12 -0
- package/src/state/rawData.ts +26 -0
- package/src/state/referenceElementsSlice.ts +40 -0
- package/src/state/renderedTicksSlice.ts +15 -0
- package/src/state/rootPropsSlice.ts +47 -0
- package/src/state/selectors/areaSelectors.ts +240 -0
- package/src/state/selectors/arrayEqualityCheck.ts +29 -0
- package/src/state/selectors/axisSelectors.ts +2157 -0
- package/src/state/selectors/barSelectors.ts +310 -0
- package/src/state/selectors/barStackSelectors.ts +77 -0
- package/src/state/selectors/brushSelectors.ts +33 -0
- package/src/state/selectors/chartSelector.ts +185 -0
- package/src/state/selectors/combiners/combineActiveLabel.ts +16 -0
- package/src/state/selectors/combiners/combineActiveTooltipIndex.ts +95 -0
- package/src/state/selectors/combiners/combineAllBarPositions.ts +122 -0
- package/src/state/selectors/combiners/combineAxisRangeWithReverse.ts +16 -0
- package/src/state/selectors/combiners/combineBarPosition.ts +23 -0
- package/src/state/selectors/combiners/combineBarSizeList.ts +80 -0
- package/src/state/selectors/combiners/combineCheckedDomain.ts +48 -0
- package/src/state/selectors/combiners/combineConfiguredScale.ts +111 -0
- package/src/state/selectors/combiners/combineCoordinateForDefaultIndex.ts +45 -0
- package/src/state/selectors/combiners/combineDisplayedStackedData.ts +50 -0
- package/src/state/selectors/combiners/combineInverseScaleFunction.ts +16 -0
- package/src/state/selectors/combiners/combineRealScaleType.ts +44 -0
- package/src/state/selectors/combiners/combineStackedData.ts +27 -0
- package/src/state/selectors/combiners/combineTooltipInteractionState.ts +86 -0
- package/src/state/selectors/combiners/combineTooltipPayload.ts +205 -0
- package/src/state/selectors/combiners/combineTooltipPayloadConfigurations.ts +58 -0
- package/src/state/selectors/containerSelectors.ts +12 -0
- package/src/state/selectors/dataSelectors.ts +88 -0
- package/src/state/selectors/funnelSelectors.ts +75 -0
- package/src/state/selectors/graphicalItemSelectors.ts +30 -0
- package/src/state/selectors/legendSelectors.ts +29 -0
- package/src/state/selectors/lineSelectors.ts +134 -0
- package/src/state/selectors/numberDomainEqualityCheck.ts +14 -0
- package/src/state/selectors/pickAxisId.ts +5 -0
- package/src/state/selectors/pickAxisType.ts +3 -0
- package/src/state/selectors/pieSelectors.ts +97 -0
- package/src/state/selectors/polarAxisSelectors.ts +201 -0
- package/src/state/selectors/polarGridSelectors.ts +28 -0
- package/src/state/selectors/polarScaleSelectors.ts +133 -0
- package/src/state/selectors/polarSelectors.ts +219 -0
- package/src/state/selectors/radarSelectors.ts +191 -0
- package/src/state/selectors/radialBarSelectors.ts +435 -0
- package/src/state/selectors/rootPropsSelectors.ts +25 -0
- package/src/state/selectors/scatterSelectors.ts +96 -0
- package/src/state/selectors/selectActivePropsFromChartPointer.ts +26 -0
- package/src/state/selectors/selectAllAxes.ts +17 -0
- package/src/state/selectors/selectChartOffset.ts +16 -0
- package/src/state/selectors/selectChartOffsetInternal.ts +136 -0
- package/src/state/selectors/selectLegendArea.ts +20 -0
- package/src/state/selectors/selectPlotArea.ts +22 -0
- package/src/state/selectors/selectTooltipAxisId.ts +7 -0
- package/src/state/selectors/selectTooltipAxisType.ts +32 -0
- package/src/state/selectors/selectTooltipEventType.ts +48 -0
- package/src/state/selectors/selectTooltipPayloadSearcher.ts +6 -0
- package/src/state/selectors/selectTooltipSettings.ts +39 -0
- package/src/state/selectors/selectTooltipState.ts +8 -0
- package/src/state/selectors/selectors.ts +271 -0
- package/src/state/selectors/tooltipSelectors.ts +578 -0
- package/src/state/selectors/touchSelectors.ts +31 -0
- package/src/state/store.ts +29 -0
- package/src/state/storeIdentity.ts +9 -0
- package/src/state/teardownWrite.ts +10 -0
- package/src/state/tooltipInteraction.ts +23 -0
- package/src/state/tooltipSlice.ts +334 -0
- package/src/state/touchEventsMiddleware.ts +214 -0
- package/src/state/types/AnimationSettings.ts +20 -0
- package/src/state/types/AreaSettings.ts +14 -0
- package/src/state/types/BarSettings.ts +15 -0
- package/src/state/types/LineSettings.ts +9 -0
- package/src/state/types/PieSettings.ts +34 -0
- package/src/state/types/RadarSettings.ts +5 -0
- package/src/state/types/RadialBarSettings.ts +10 -0
- package/src/state/types/ScatterSettings.ts +12 -0
- package/src/state/types/StackedGraphicalItem.ts +34 -0
- package/src/state/useChartState.ts +17 -0
- package/src/state/zIndexSlice.ts +39 -0
- package/src/synchronisation/syncSelectors.ts +7 -0
- package/src/synchronisation/types.ts +44 -0
- package/src/synchronisation/useChartSynchronisation.tsx +404 -0
- package/src/theme/RechartsTheme.ts +16 -0
- package/src/theme/RechartsThemeContext.ts +19 -0
- package/src/theme/darkTheme.ts +13 -0
- package/src/theme/graphicalItemIdentity.ts +70 -0
- package/src/theme/legacyTheme.ts +17 -0
- package/src/theme/lightTheme.ts +13 -0
- package/src/types.ts +54 -0
- package/src/util/ActiveShapeUtils.tsx +162 -0
- package/src/util/BarUtils.tsx +62 -0
- package/src/util/BarePortal.tsx +50 -0
- package/src/util/CamelCaseSVGAttrs.ts +34 -0
- package/src/util/CartesianUtils.ts +48 -0
- package/src/util/ChartUtils.ts +802 -0
- package/src/util/Constants.ts +42 -0
- package/src/util/CssPrefixUtils.ts +20 -0
- package/src/util/DOMUtils.ts +129 -0
- package/src/util/DataUtils.ts +216 -0
- package/src/util/Events.ts +16 -0
- package/src/util/FunnelUtils.tsx +15 -0
- package/src/util/Global.ts +12 -0
- package/src/util/IfOverflow.ts +15 -0
- package/src/util/LRUCache.ts +41 -0
- package/src/util/LogUtils.ts +22 -0
- package/src/util/PolarUtils.ts +132 -0
- package/src/util/RadialBarUtils.tsx +24 -0
- package/src/util/ReactUtils.ts +95 -0
- package/src/util/ReduceCSSCalc.ts +187 -0
- package/src/util/ScatterUtils.tsx +52 -0
- package/src/util/ShapeElementProps.tsx +87 -0
- package/src/util/TickUtils.ts +60 -0
- package/src/util/XAxisUtils.ts +48 -0
- package/src/util/YAxisUtils.ts +48 -0
- package/src/util/axisPropsAreEqual.ts +48 -0
- package/src/util/createCartesianCharts.tsx +150 -0
- package/src/util/createEventProxy.ts +20 -0
- package/src/util/createPolarCharts.tsx +112 -0
- package/src/util/cursor/getCursorPoints.ts +46 -0
- package/src/util/cursor/getCursorRectangle.ts +28 -0
- package/src/util/cursor/getRadialCursorPoints.ts +32 -0
- package/src/util/excludeEventProps.ts +171 -0
- package/src/util/getActiveCoordinate.ts +213 -0
- package/src/util/getAxisTypeBasedOnLayout.ts +21 -0
- package/src/util/getClassNameFromUnknown.ts +6 -0
- package/src/util/getEveryNth.ts +27 -0
- package/src/util/getRadiusAndStrokeWidthFromDot.ts +35 -0
- package/src/util/getRelativeCoordinate.ts +80 -0
- package/src/util/getSliced.ts +13 -0
- package/src/util/hoverDedupe.ts +41 -0
- package/src/util/isDomainSpecifiedByUser.ts +219 -0
- package/src/util/isWellBehavedNumber.ts +7 -0
- package/src/util/pathTotalLength.ts +25 -0
- package/src/util/payload/getUniqPayload.ts +28 -0
- package/src/util/propsAreEqual.ts +121 -0
- package/src/util/resolveDefaultProps.ts +161 -0
- package/src/util/round.ts +32 -0
- package/src/util/scale/CartesianScaleHelper.ts +72 -0
- package/src/util/scale/CustomScaleDefinition.ts +81 -0
- package/src/util/scale/RechartsScale.ts +130 -0
- package/src/util/scale/createCategoricalInverse.ts +72 -0
- package/src/util/scale/getNiceTickValues.ts +311 -0
- package/src/util/scale/index.ts +2 -0
- package/src/util/scale/util/arithmetic.ts +54 -0
- package/src/util/solid-1-compat.ts +310 -0
- package/src/util/solidJsxCamelAugment.d.ts +84 -0
- package/src/util/stacks/getStackSeriesIdentifier.ts +21 -0
- package/src/util/stacks/stackTypes.ts +60 -0
- package/src/util/structurallyEqual.ts +31 -0
- package/src/util/svgPropertiesAndEvents.ts +53 -0
- package/src/util/svgPropertiesNoEvents.ts +571 -0
- package/src/util/tooltip/translate.ts +171 -0
- package/src/util/typedDataKey.ts +48 -0
- package/src/util/types.ts +1560 -0
- package/src/util/useAnimationId.ts +31 -0
- package/src/util/useElementOffset.ts +110 -0
- package/src/util/useId.ts +8 -0
- package/src/util/usePrefersReducedMotion.ts +48 -0
- package/src/util/useReportScale.ts +24 -0
- package/src/util/useUniqueId.ts +30 -0
- package/src/zIndex/DefaultZIndexes.ts +84 -0
- package/src/zIndex/ZIndexLayer.tsx +121 -0
- package/src/zIndex/ZIndexPortal.tsx +79 -0
- package/src/zIndex/getZIndexFromUnknown.ts +14 -0
- package/src/zIndex/zIndexSelectors.ts +48 -0
|
@@ -0,0 +1,152 @@
|
|
|
1
|
+
/* eslint-disable import/no-cycle */
|
|
2
|
+
import type { JSX } from '@solidjs/web';
|
|
3
|
+
import { createContext, createMemo, For, Show, useContext, type Accessor } from 'solid-js';
|
|
4
|
+
import { getNormalizedStackId, NormalizedStackId, StackId } from "../util/ChartUtils"
|
|
5
|
+
import { useUniqueId } from "../util/useUniqueId"
|
|
6
|
+
import { useChartStore } from "../state/RechartsStoreContext"
|
|
7
|
+
import { selectStackRects } from "../state/selectors/barStackSelectors"
|
|
8
|
+
import { useIsPanorama } from "../context/PanoramaContext"
|
|
9
|
+
import { Layer, Props as LayerProps } from "../container/Layer"
|
|
10
|
+
import { Rectangle, RectRadius } from "../shape/Rectangle"
|
|
11
|
+
|
|
12
|
+
export type BarStackProps = {
|
|
13
|
+
/**
|
|
14
|
+
* When two Bars have the same axisId and same stackId, then the two Bars are stacked in the chart.
|
|
15
|
+
* This prop sets the stack ID for all Bar components inside this BarStack component.
|
|
16
|
+
* If undefined, a unique id will be generated automatically.
|
|
17
|
+
*
|
|
18
|
+
* When both BarStack and individual Bar components have stackId defined,
|
|
19
|
+
* the BarStack's stackId wins, and the individual Bar's stackId is ignored.
|
|
20
|
+
*/
|
|
21
|
+
stackId?: StackId
|
|
22
|
+
/**
|
|
23
|
+
* Radius applies only once to all bars inside of this stack group,
|
|
24
|
+
* as if they were one huge bar.
|
|
25
|
+
* Meaning that if you have three bars stacked together, and you set
|
|
26
|
+
* radius to 10, only the outer corners of the entire stack will be rounded: the middle bars will have square corners.
|
|
27
|
+
*
|
|
28
|
+
* Unless! The edge bars are smaller than the radius value, in which case the bars at the edge get a lot of radius
|
|
29
|
+
* and the middle one gets a little bit of radius.
|
|
30
|
+
*
|
|
31
|
+
* You may want to combine this with setting individual Bar components' radius to their own values for best effect.
|
|
32
|
+
* `Bar.radius` prop will round corners of individual bars, while `BarStack.radius` will round corners of the entire stack.
|
|
33
|
+
*
|
|
34
|
+
* If you provide a single number, it applies to all four corners.
|
|
35
|
+
* If you provide an array of four numbers, they apply to top-left, top-right, bottom-right, bottom-left corners respectively.
|
|
36
|
+
*
|
|
37
|
+
* @defaultValue 0
|
|
38
|
+
*/
|
|
39
|
+
radius?: RectRadius
|
|
40
|
+
children?: JSX.Element
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
export type BarStackSettings = {
|
|
44
|
+
stackId: NormalizedStackId
|
|
45
|
+
radius: RectRadius
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
const BarStackContext = createContext<Accessor<BarStackSettings> | null>(null)
|
|
49
|
+
|
|
50
|
+
/**
|
|
51
|
+
* Hook to resolve the stack ID for a Bar component.
|
|
52
|
+
* If a stack ID is provided via props, it is used directly.
|
|
53
|
+
* Otherwise, this will read stack ID from BarStack context if available.
|
|
54
|
+
* If both are undefined, it returns undefined.
|
|
55
|
+
* @param childStackId
|
|
56
|
+
*/
|
|
57
|
+
export const useStackId = (childStackId: StackId | undefined): NormalizedStackId | undefined => {
|
|
58
|
+
const stackSettings = useContext(BarStackContext)
|
|
59
|
+
if (stackSettings != null) {
|
|
60
|
+
return stackSettings().stackId
|
|
61
|
+
}
|
|
62
|
+
if (childStackId == null) {
|
|
63
|
+
return undefined
|
|
64
|
+
}
|
|
65
|
+
return getNormalizedStackId(childStackId)
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
export const defaultBarStackProps = {
|
|
69
|
+
radius: 0,
|
|
70
|
+
} as const satisfies Partial<BarStackProps>
|
|
71
|
+
|
|
72
|
+
const getClipPathId = (stackId: NormalizedStackId, index: number): string => {
|
|
73
|
+
return `recharts-bar-stack-clip-path-${stackId}-${index}`
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
export const useBarStackClipPathUrl = (index: number): string | undefined => {
|
|
77
|
+
const barStackContext = useContext(BarStackContext)
|
|
78
|
+
if (barStackContext == null) {
|
|
79
|
+
return undefined
|
|
80
|
+
}
|
|
81
|
+
return `url(#${getClipPathId(barStackContext().stackId, index)})`
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
export function BarStackClipLayer(props: LayerProps & { index: number }) {
|
|
85
|
+
const clipPathUrl = createMemo(() => useBarStackClipPathUrl(props.index))
|
|
86
|
+
return <Layer class="recharts-bar-stack-layer" clip-path={clipPathUrl()} {...props} />
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
/**
|
|
90
|
+
* This component will render a clipPath that the individual bars in the stack will reference
|
|
91
|
+
* to achieve rounded corners for the entire stack.
|
|
92
|
+
*/
|
|
93
|
+
function BarStackClipPath(props: { stackId: NormalizedStackId; radius: RectRadius }) {
|
|
94
|
+
const isPanorama = useIsPanorama()
|
|
95
|
+
const ctx = useChartStore()
|
|
96
|
+
const positions = () =>
|
|
97
|
+
ctx ? selectStackRects(ctx.store, props.stackId, isPanorama) : undefined
|
|
98
|
+
|
|
99
|
+
return (
|
|
100
|
+
<Show when={positions() && positions()?.length}>
|
|
101
|
+
<defs>
|
|
102
|
+
<For each={positions()}>
|
|
103
|
+
{(pos, index) => (
|
|
104
|
+
<Show when={pos}>
|
|
105
|
+
{(rect) => (
|
|
106
|
+
<clipPath id={getClipPathId(props.stackId, index())}>
|
|
107
|
+
<Rectangle
|
|
108
|
+
isAnimationActive={false}
|
|
109
|
+
isUpdateAnimationActive={false}
|
|
110
|
+
x={rect().x}
|
|
111
|
+
y={rect().y}
|
|
112
|
+
width={rect().width}
|
|
113
|
+
height={rect().height}
|
|
114
|
+
radius={props.radius}
|
|
115
|
+
/>
|
|
116
|
+
</clipPath>
|
|
117
|
+
)}
|
|
118
|
+
</Show>
|
|
119
|
+
)}
|
|
120
|
+
</For>
|
|
121
|
+
</defs>
|
|
122
|
+
</Show>
|
|
123
|
+
)
|
|
124
|
+
}
|
|
125
|
+
|
|
126
|
+
/**
|
|
127
|
+
* @provides BarStackContext
|
|
128
|
+
* @since 3.6
|
|
129
|
+
*/
|
|
130
|
+
export function BarStack(props: BarStackProps) {
|
|
131
|
+
/* eslint-disable-next-line solid/reactivity -- stackId is a stable ID; useUniqueId reads it once at setup */
|
|
132
|
+
const resolvedStackId = useUniqueId("recharts-bar-stack", getNormalizedStackId(props.stackId))
|
|
133
|
+
/* `resolveDefaultProps(props, …)` spreads the Solid props proxy and
|
|
134
|
+
* enumerates `children` — that getter calls `createComponent(...)` on the
|
|
135
|
+
* user JSX subtree, instantiating every Bar inside the memo body. Then the
|
|
136
|
+
* outer `{props.children}` reads the getter again. Result: every Bar mounts
|
|
137
|
+
* twice. Mirror upstream's intent (radius defaults to 0) by reading the
|
|
138
|
+
* field directly — the proxy returns `undefined` lazily without enumerating
|
|
139
|
+
* children. */
|
|
140
|
+
const resolvedRadius = createMemo<RectRadius>(() => props.radius ?? defaultBarStackProps.radius)
|
|
141
|
+
|
|
142
|
+
const context = createMemo(
|
|
143
|
+
(): BarStackSettings => ({ radius: resolvedRadius(), stackId: resolvedStackId }),
|
|
144
|
+
)
|
|
145
|
+
|
|
146
|
+
return (
|
|
147
|
+
<BarStackContext value={context}>
|
|
148
|
+
<BarStackClipPath stackId={resolvedStackId} radius={resolvedRadius()} />
|
|
149
|
+
{props.children}
|
|
150
|
+
</BarStackContext>
|
|
151
|
+
)
|
|
152
|
+
}
|