@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.
Files changed (306) hide show
  1. package/LICENSE +22 -0
  2. package/NOTICE +19 -0
  3. package/README.md +102 -0
  4. package/dist/dev.js +28564 -0
  5. package/dist/index.d.ts +7859 -0
  6. package/dist/index.js +28546 -0
  7. package/package.json +98 -0
  8. package/src/animation/AnimatedItems.tsx +183 -0
  9. package/src/animation/AnimationController.ts +33 -0
  10. package/src/animation/AnimationControllerImpl.ts +36 -0
  11. package/src/animation/AnimationHandle.ts +307 -0
  12. package/src/animation/CSSTransitionAnimate.tsx +170 -0
  13. package/src/animation/JavascriptAnimate.tsx +119 -0
  14. package/src/animation/easing.ts +221 -0
  15. package/src/animation/matchBy.ts +164 -0
  16. package/src/animation/timeoutController.ts +70 -0
  17. package/src/animation/useAnimationController.tsx +34 -0
  18. package/src/animation/useAnimationStartSnapshot.ts +118 -0
  19. package/src/animation/util.ts +41 -0
  20. package/src/cartesian/Area.tsx +915 -0
  21. package/src/cartesian/AreaRevealShape.tsx +190 -0
  22. package/src/cartesian/Bar.tsx +1369 -0
  23. package/src/cartesian/BarStack.tsx +152 -0
  24. package/src/cartesian/Brush.tsx +951 -0
  25. package/src/cartesian/CartesianAxis.tsx +722 -0
  26. package/src/cartesian/CartesianGrid.tsx +711 -0
  27. package/src/cartesian/ErrorBar.tsx +361 -0
  28. package/src/cartesian/Funnel.tsx +803 -0
  29. package/src/cartesian/GraphicalItemClipPath.tsx +67 -0
  30. package/src/cartesian/Line.tsx +863 -0
  31. package/src/cartesian/LineDrawShape.tsx +89 -0
  32. package/src/cartesian/ReferenceArea.tsx +331 -0
  33. package/src/cartesian/ReferenceDot.tsx +304 -0
  34. package/src/cartesian/ReferenceLine.tsx +474 -0
  35. package/src/cartesian/Scatter.tsx +888 -0
  36. package/src/cartesian/XAxis.tsx +433 -0
  37. package/src/cartesian/YAxis.tsx +443 -0
  38. package/src/cartesian/ZAxis.tsx +155 -0
  39. package/src/cartesian/cartesianPositionToCSSTranslate.tsx +29 -0
  40. package/src/cartesian/cartesianViewBoxToTrapezoid.tsx +21 -0
  41. package/src/cartesian/getCartesianPosition.tsx +267 -0
  42. package/src/cartesian/getEquidistantTicks.ts +144 -0
  43. package/src/cartesian/getTicks.ts +225 -0
  44. package/src/cartesian/isOutsidePosition.ts +15 -0
  45. package/src/cartesian/useAnimatedLineLength.ts +54 -0
  46. package/src/chart/AreaChart.tsx +29 -0
  47. package/src/chart/BarChart.tsx +29 -0
  48. package/src/chart/CartesianChart.tsx +131 -0
  49. package/src/chart/CategoricalChart.tsx +94 -0
  50. package/src/chart/ComposedChart.tsx +29 -0
  51. package/src/chart/FunnelChart.tsx +29 -0
  52. package/src/chart/LineChart.tsx +29 -0
  53. package/src/chart/PieChart.tsx +50 -0
  54. package/src/chart/PolarChart.tsx +164 -0
  55. package/src/chart/RadarChart.tsx +70 -0
  56. package/src/chart/RadialBarChart.tsx +46 -0
  57. package/src/chart/RechartsWrapper.tsx +551 -0
  58. package/src/chart/Sankey.tsx +1534 -0
  59. package/src/chart/ScatterChart.tsx +29 -0
  60. package/src/chart/SunburstChart.tsx +504 -0
  61. package/src/chart/Treemap.tsx +1223 -0
  62. package/src/chart/createInitialRootProps.ts +24 -0
  63. package/src/chart/types.ts +53 -0
  64. package/src/component/ActivePoints.tsx +144 -0
  65. package/src/component/Cell.tsx +37 -0
  66. package/src/component/Cursor.tsx +185 -0
  67. package/src/component/Customized.tsx +50 -0
  68. package/src/component/DefaultLegendContent.tsx +348 -0
  69. package/src/component/DefaultTooltipContent.tsx +224 -0
  70. package/src/component/Dots.tsx +157 -0
  71. package/src/component/Label.tsx +636 -0
  72. package/src/component/LabelList.tsx +375 -0
  73. package/src/component/Legend.tsx +512 -0
  74. package/src/component/ResponsiveContainer.tsx +348 -0
  75. package/src/component/Text.tsx +541 -0
  76. package/src/component/Tooltip.tsx +470 -0
  77. package/src/component/TooltipBoundingBox.tsx +146 -0
  78. package/src/component/responsiveContainerUtils.ts +134 -0
  79. package/src/container/ClipPathProvider.tsx +51 -0
  80. package/src/container/Layer.tsx +38 -0
  81. package/src/container/RootSurface.tsx +120 -0
  82. package/src/container/Surface.tsx +61 -0
  83. package/src/context/CellsContext.tsx +54 -0
  84. package/src/context/ErrorBarContext.tsx +146 -0
  85. package/src/context/GraphicalItemChildrenScope.tsx +18 -0
  86. package/src/context/PanoramaContext.tsx +9 -0
  87. package/src/context/RegisterGraphicalItemId.tsx +30 -0
  88. package/src/context/accessibilityContext.tsx +6 -0
  89. package/src/context/brushUpdateContext.tsx +9 -0
  90. package/src/context/chartDataContext.tsx +97 -0
  91. package/src/context/chartLayoutContext.tsx +201 -0
  92. package/src/context/legendPayloadContext.tsx +20 -0
  93. package/src/context/legendPortalContext.tsx +12 -0
  94. package/src/context/tooltipContext.tsx +89 -0
  95. package/src/context/tooltipPortalContext.tsx +12 -0
  96. package/src/context/useTooltipAxis.ts +22 -0
  97. package/src/hooks.ts +476 -0
  98. package/src/index.ts +280 -0
  99. package/src/polar/Pie.tsx +1360 -0
  100. package/src/polar/PolarAngleAxis.tsx +616 -0
  101. package/src/polar/PolarGrid.tsx +312 -0
  102. package/src/polar/PolarRadiusAxis.tsx +547 -0
  103. package/src/polar/Radar.tsx +734 -0
  104. package/src/polar/RadialBar.tsx +917 -0
  105. package/src/polar/defaultPolarAngleAxisProps.tsx +27 -0
  106. package/src/polar/defaultPolarRadiusAxisProps.tsx +25 -0
  107. package/src/shape/Cross.tsx +89 -0
  108. package/src/shape/Curve.tsx +343 -0
  109. package/src/shape/Dot.tsx +70 -0
  110. package/src/shape/Polygon.tsx +195 -0
  111. package/src/shape/Rectangle.tsx +470 -0
  112. package/src/shape/Sector.tsx +347 -0
  113. package/src/shape/Symbols.tsx +139 -0
  114. package/src/shape/Trapezoid.tsx +280 -0
  115. package/src/state/RechartsStateContext.tsx +12 -0
  116. package/src/state/RechartsStateProvider.tsx +87 -0
  117. package/src/state/RechartsStoreContext.tsx +25 -0
  118. package/src/state/RechartsStoreProvider.tsx +35 -0
  119. package/src/state/ReportChartProps.tsx +40 -0
  120. package/src/state/ReportEventSettings.tsx +30 -0
  121. package/src/state/ReportMainChartProps.tsx +61 -0
  122. package/src/state/ReportPolarOptions.tsx +35 -0
  123. package/src/state/SetGraphicalItem.ts +79 -0
  124. package/src/state/SetLegendPayload.ts +134 -0
  125. package/src/state/SetTooltipEntrySettings.tsx +72 -0
  126. package/src/state/actions.ts +464 -0
  127. package/src/state/brushSlice.ts +13 -0
  128. package/src/state/cartesianAxisSlice.ts +141 -0
  129. package/src/state/chartDataSlice.ts +50 -0
  130. package/src/state/chartState.ts +297 -0
  131. package/src/state/errorBarSlice.ts +29 -0
  132. package/src/state/eventSettingsSlice.ts +8 -0
  133. package/src/state/events.ts +76 -0
  134. package/src/state/externalEventsMiddleware.ts +255 -0
  135. package/src/state/graphicalItemsSlice.ts +74 -0
  136. package/src/state/hooks/useChartSelectors.tsx +45 -0
  137. package/src/state/keyboardEventsMiddleware.ts +228 -0
  138. package/src/state/layoutSlice.ts +21 -0
  139. package/src/state/legendSlice.ts +57 -0
  140. package/src/state/mouseEventsMiddleware.ts +185 -0
  141. package/src/state/optionsSlice.ts +47 -0
  142. package/src/state/polarAxisSlice.ts +10 -0
  143. package/src/state/polarOptionsSlice.ts +12 -0
  144. package/src/state/rawData.ts +26 -0
  145. package/src/state/referenceElementsSlice.ts +40 -0
  146. package/src/state/renderedTicksSlice.ts +15 -0
  147. package/src/state/rootPropsSlice.ts +47 -0
  148. package/src/state/selectors/areaSelectors.ts +240 -0
  149. package/src/state/selectors/arrayEqualityCheck.ts +29 -0
  150. package/src/state/selectors/axisSelectors.ts +2157 -0
  151. package/src/state/selectors/barSelectors.ts +310 -0
  152. package/src/state/selectors/barStackSelectors.ts +77 -0
  153. package/src/state/selectors/brushSelectors.ts +33 -0
  154. package/src/state/selectors/chartSelector.ts +185 -0
  155. package/src/state/selectors/combiners/combineActiveLabel.ts +16 -0
  156. package/src/state/selectors/combiners/combineActiveTooltipIndex.ts +95 -0
  157. package/src/state/selectors/combiners/combineAllBarPositions.ts +122 -0
  158. package/src/state/selectors/combiners/combineAxisRangeWithReverse.ts +16 -0
  159. package/src/state/selectors/combiners/combineBarPosition.ts +23 -0
  160. package/src/state/selectors/combiners/combineBarSizeList.ts +80 -0
  161. package/src/state/selectors/combiners/combineCheckedDomain.ts +48 -0
  162. package/src/state/selectors/combiners/combineConfiguredScale.ts +111 -0
  163. package/src/state/selectors/combiners/combineCoordinateForDefaultIndex.ts +45 -0
  164. package/src/state/selectors/combiners/combineDisplayedStackedData.ts +50 -0
  165. package/src/state/selectors/combiners/combineInverseScaleFunction.ts +16 -0
  166. package/src/state/selectors/combiners/combineRealScaleType.ts +44 -0
  167. package/src/state/selectors/combiners/combineStackedData.ts +27 -0
  168. package/src/state/selectors/combiners/combineTooltipInteractionState.ts +86 -0
  169. package/src/state/selectors/combiners/combineTooltipPayload.ts +205 -0
  170. package/src/state/selectors/combiners/combineTooltipPayloadConfigurations.ts +58 -0
  171. package/src/state/selectors/containerSelectors.ts +12 -0
  172. package/src/state/selectors/dataSelectors.ts +88 -0
  173. package/src/state/selectors/funnelSelectors.ts +75 -0
  174. package/src/state/selectors/graphicalItemSelectors.ts +30 -0
  175. package/src/state/selectors/legendSelectors.ts +29 -0
  176. package/src/state/selectors/lineSelectors.ts +134 -0
  177. package/src/state/selectors/numberDomainEqualityCheck.ts +14 -0
  178. package/src/state/selectors/pickAxisId.ts +5 -0
  179. package/src/state/selectors/pickAxisType.ts +3 -0
  180. package/src/state/selectors/pieSelectors.ts +97 -0
  181. package/src/state/selectors/polarAxisSelectors.ts +201 -0
  182. package/src/state/selectors/polarGridSelectors.ts +28 -0
  183. package/src/state/selectors/polarScaleSelectors.ts +133 -0
  184. package/src/state/selectors/polarSelectors.ts +219 -0
  185. package/src/state/selectors/radarSelectors.ts +191 -0
  186. package/src/state/selectors/radialBarSelectors.ts +435 -0
  187. package/src/state/selectors/rootPropsSelectors.ts +25 -0
  188. package/src/state/selectors/scatterSelectors.ts +96 -0
  189. package/src/state/selectors/selectActivePropsFromChartPointer.ts +26 -0
  190. package/src/state/selectors/selectAllAxes.ts +17 -0
  191. package/src/state/selectors/selectChartOffset.ts +16 -0
  192. package/src/state/selectors/selectChartOffsetInternal.ts +136 -0
  193. package/src/state/selectors/selectLegendArea.ts +20 -0
  194. package/src/state/selectors/selectPlotArea.ts +22 -0
  195. package/src/state/selectors/selectTooltipAxisId.ts +7 -0
  196. package/src/state/selectors/selectTooltipAxisType.ts +32 -0
  197. package/src/state/selectors/selectTooltipEventType.ts +48 -0
  198. package/src/state/selectors/selectTooltipPayloadSearcher.ts +6 -0
  199. package/src/state/selectors/selectTooltipSettings.ts +39 -0
  200. package/src/state/selectors/selectTooltipState.ts +8 -0
  201. package/src/state/selectors/selectors.ts +271 -0
  202. package/src/state/selectors/tooltipSelectors.ts +578 -0
  203. package/src/state/selectors/touchSelectors.ts +31 -0
  204. package/src/state/store.ts +29 -0
  205. package/src/state/storeIdentity.ts +9 -0
  206. package/src/state/teardownWrite.ts +10 -0
  207. package/src/state/tooltipInteraction.ts +23 -0
  208. package/src/state/tooltipSlice.ts +334 -0
  209. package/src/state/touchEventsMiddleware.ts +214 -0
  210. package/src/state/types/AnimationSettings.ts +20 -0
  211. package/src/state/types/AreaSettings.ts +14 -0
  212. package/src/state/types/BarSettings.ts +15 -0
  213. package/src/state/types/LineSettings.ts +9 -0
  214. package/src/state/types/PieSettings.ts +34 -0
  215. package/src/state/types/RadarSettings.ts +5 -0
  216. package/src/state/types/RadialBarSettings.ts +10 -0
  217. package/src/state/types/ScatterSettings.ts +12 -0
  218. package/src/state/types/StackedGraphicalItem.ts +34 -0
  219. package/src/state/useChartState.ts +17 -0
  220. package/src/state/zIndexSlice.ts +39 -0
  221. package/src/synchronisation/syncSelectors.ts +7 -0
  222. package/src/synchronisation/types.ts +44 -0
  223. package/src/synchronisation/useChartSynchronisation.tsx +404 -0
  224. package/src/theme/RechartsTheme.ts +16 -0
  225. package/src/theme/RechartsThemeContext.ts +19 -0
  226. package/src/theme/darkTheme.ts +13 -0
  227. package/src/theme/graphicalItemIdentity.ts +70 -0
  228. package/src/theme/legacyTheme.ts +17 -0
  229. package/src/theme/lightTheme.ts +13 -0
  230. package/src/types.ts +54 -0
  231. package/src/util/ActiveShapeUtils.tsx +162 -0
  232. package/src/util/BarUtils.tsx +62 -0
  233. package/src/util/BarePortal.tsx +50 -0
  234. package/src/util/CamelCaseSVGAttrs.ts +34 -0
  235. package/src/util/CartesianUtils.ts +48 -0
  236. package/src/util/ChartUtils.ts +802 -0
  237. package/src/util/Constants.ts +42 -0
  238. package/src/util/CssPrefixUtils.ts +20 -0
  239. package/src/util/DOMUtils.ts +129 -0
  240. package/src/util/DataUtils.ts +216 -0
  241. package/src/util/Events.ts +16 -0
  242. package/src/util/FunnelUtils.tsx +15 -0
  243. package/src/util/Global.ts +12 -0
  244. package/src/util/IfOverflow.ts +15 -0
  245. package/src/util/LRUCache.ts +41 -0
  246. package/src/util/LogUtils.ts +22 -0
  247. package/src/util/PolarUtils.ts +132 -0
  248. package/src/util/RadialBarUtils.tsx +24 -0
  249. package/src/util/ReactUtils.ts +95 -0
  250. package/src/util/ReduceCSSCalc.ts +187 -0
  251. package/src/util/ScatterUtils.tsx +52 -0
  252. package/src/util/ShapeElementProps.tsx +87 -0
  253. package/src/util/TickUtils.ts +60 -0
  254. package/src/util/XAxisUtils.ts +48 -0
  255. package/src/util/YAxisUtils.ts +48 -0
  256. package/src/util/axisPropsAreEqual.ts +48 -0
  257. package/src/util/createCartesianCharts.tsx +150 -0
  258. package/src/util/createEventProxy.ts +20 -0
  259. package/src/util/createPolarCharts.tsx +112 -0
  260. package/src/util/cursor/getCursorPoints.ts +46 -0
  261. package/src/util/cursor/getCursorRectangle.ts +28 -0
  262. package/src/util/cursor/getRadialCursorPoints.ts +32 -0
  263. package/src/util/excludeEventProps.ts +171 -0
  264. package/src/util/getActiveCoordinate.ts +213 -0
  265. package/src/util/getAxisTypeBasedOnLayout.ts +21 -0
  266. package/src/util/getClassNameFromUnknown.ts +6 -0
  267. package/src/util/getEveryNth.ts +27 -0
  268. package/src/util/getRadiusAndStrokeWidthFromDot.ts +35 -0
  269. package/src/util/getRelativeCoordinate.ts +80 -0
  270. package/src/util/getSliced.ts +13 -0
  271. package/src/util/hoverDedupe.ts +41 -0
  272. package/src/util/isDomainSpecifiedByUser.ts +219 -0
  273. package/src/util/isWellBehavedNumber.ts +7 -0
  274. package/src/util/pathTotalLength.ts +25 -0
  275. package/src/util/payload/getUniqPayload.ts +28 -0
  276. package/src/util/propsAreEqual.ts +121 -0
  277. package/src/util/resolveDefaultProps.ts +161 -0
  278. package/src/util/round.ts +32 -0
  279. package/src/util/scale/CartesianScaleHelper.ts +72 -0
  280. package/src/util/scale/CustomScaleDefinition.ts +81 -0
  281. package/src/util/scale/RechartsScale.ts +130 -0
  282. package/src/util/scale/createCategoricalInverse.ts +72 -0
  283. package/src/util/scale/getNiceTickValues.ts +311 -0
  284. package/src/util/scale/index.ts +2 -0
  285. package/src/util/scale/util/arithmetic.ts +54 -0
  286. package/src/util/solid-1-compat.ts +310 -0
  287. package/src/util/solidJsxCamelAugment.d.ts +84 -0
  288. package/src/util/stacks/getStackSeriesIdentifier.ts +21 -0
  289. package/src/util/stacks/stackTypes.ts +60 -0
  290. package/src/util/structurallyEqual.ts +31 -0
  291. package/src/util/svgPropertiesAndEvents.ts +53 -0
  292. package/src/util/svgPropertiesNoEvents.ts +571 -0
  293. package/src/util/tooltip/translate.ts +171 -0
  294. package/src/util/typedDataKey.ts +48 -0
  295. package/src/util/types.ts +1560 -0
  296. package/src/util/useAnimationId.ts +31 -0
  297. package/src/util/useElementOffset.ts +110 -0
  298. package/src/util/useId.ts +8 -0
  299. package/src/util/usePrefersReducedMotion.ts +48 -0
  300. package/src/util/useReportScale.ts +24 -0
  301. package/src/util/useUniqueId.ts +30 -0
  302. package/src/zIndex/DefaultZIndexes.ts +84 -0
  303. package/src/zIndex/ZIndexLayer.tsx +121 -0
  304. package/src/zIndex/ZIndexPortal.tsx +79 -0
  305. package/src/zIndex/getZIndexFromUnknown.ts +14 -0
  306. package/src/zIndex/zIndexSelectors.ts +48 -0
@@ -0,0 +1,312 @@
1
+ /* eslint-disable import/no-cycle */
2
+ import type { JSX } from '@solidjs/web';
3
+ import type { WithoutRemoveFalse } from "../util/types"
4
+ import { createMemo, Show, For } from 'solid-js';
5
+ import { clsx } from "clsx"
6
+ import { polarToCartesian } from "../util/PolarUtils"
7
+ import { AxisId } from "../state/cartesianAxisSlice"
8
+ import { useChartStore } from "../state/RechartsStoreContext"
9
+ import { selectPolarGridAngles, selectPolarGridRadii } from "../state/selectors/polarGridSelectors"
10
+ import { selectPolarViewBox } from "../state/selectors/polarAxisSelectors"
11
+ import { svgPropertiesNoEvents } from "../util/svgPropertiesNoEvents"
12
+ import { ZIndexable, ZIndexLayer } from "../zIndex/ZIndexLayer"
13
+ import { DefaultZIndexes } from "../zIndex/DefaultZIndexes"
14
+ import { resolveDefaultProps } from "../util/resolveDefaultProps"
15
+
16
+ interface PolarGridProps extends ZIndexable {
17
+ /**
18
+ * The x-coordinate of center.
19
+ * When used inside a chart context, this prop is calculated based on the chart's dimensions,
20
+ * and this prop is ignored.
21
+ *
22
+ * This is only used when rendered outside a chart context.
23
+ */
24
+ cx?: number
25
+ /**
26
+ * The y-coordinate of center.
27
+ * When used inside a chart context, this prop is calculated based on the chart's dimensions,
28
+ * and this prop is ignored.
29
+ *
30
+ * This is only used when rendered outside a chart context.
31
+ */
32
+ cy?: number
33
+ /**
34
+ * The radius of the inner polar grid.
35
+ * When used inside a chart context, this prop is calculated based on the chart's dimensions,
36
+ * and this prop is ignored.
37
+ *
38
+ * This is only used when rendered outside a chart context.
39
+ */
40
+ innerRadius?: number
41
+ /**
42
+ * The radius of the outer polar grid.
43
+ * When used inside a chart context, this prop is calculated based on the chart's dimensions,
44
+ * and this prop is ignored.
45
+ *
46
+ * This is only used when rendered outside a chart context.
47
+ */
48
+ outerRadius?: number
49
+ /**
50
+ * The array of every line grid's angle.
51
+ */
52
+ polarAngles?: ReadonlyArray<number>
53
+ /**
54
+ * The array of every circle grid's radius.
55
+ */
56
+ polarRadius?: ReadonlyArray<number>
57
+ /**
58
+ * The type of polar grids.
59
+ * @defaultValue polygon
60
+ */
61
+ gridType?: "polygon" | "circle"
62
+ /**
63
+ * @defaultValue true
64
+ */
65
+ radialLines?: boolean
66
+ /**
67
+ * @defaultValue 0
68
+ */
69
+ angleAxisId?: AxisId
70
+ /**
71
+ * @defaultValue 0
72
+ */
73
+ radiusAxisId?: AxisId
74
+ /**
75
+ * Z-Index of this component and its children. The higher the value,
76
+ * the more on top it will be rendered.
77
+ * Components with higher zIndex will appear in front of components with lower zIndex.
78
+ * If undefined or 0, the content is rendered in the default layer without portals.
79
+ *
80
+ * @since 3.4
81
+ * @defaultValue -100
82
+ * @see {@link https://recharts.github.io/en-US/guide/zIndex/ Z-Index and layers guide}
83
+ */
84
+ zIndex?: number
85
+ }
86
+
87
+ export type Props = WithoutRemoveFalse<JSX.LineSVGAttributes<SVGLineElement>> & PolarGridProps
88
+
89
+ type PropsWithDefaults = Props & {
90
+ cx: number
91
+ cy: number
92
+ innerRadius: number
93
+ outerRadius: number
94
+ polarAngles: ReadonlyArray<number>
95
+ polarRadius: ReadonlyArray<number>
96
+ }
97
+
98
+ type ConcentricProps = PropsWithDefaults & {
99
+ radius: number
100
+ }
101
+
102
+ const getPolygonPath = (
103
+ radius: number,
104
+ cx: number,
105
+ cy: number,
106
+ polarAngles: ReadonlyArray<number>,
107
+ ) => {
108
+ let path = ""
109
+
110
+ polarAngles.forEach((angle: number, i: number) => {
111
+ const point = polarToCartesian(cx, cy, radius, angle)
112
+
113
+ if (i) {
114
+ path += `L ${point.x},${point.y}`
115
+ } else {
116
+ path += `M ${point.x},${point.y}`
117
+ }
118
+ })
119
+ path += "Z"
120
+
121
+ return path
122
+ }
123
+
124
+ /* Draw axis of radial line */
125
+ function PolarAngles(props: PropsWithDefaults): JSX.Element {
126
+ const polarAnglesProps = createMemo(() => ({
127
+ stroke: "#ccc",
128
+ ...svgPropertiesNoEvents(props),
129
+ }))
130
+
131
+ return (
132
+ <Show when={props.polarAngles != null && props.polarAngles.length > 0 && props.radialLines}>
133
+ <g class="recharts-polar-grid-angle">
134
+ <For each={props.polarAngles}>
135
+ {(entry) => {
136
+ const start = createMemo(() => polarToCartesian(props.cx, props.cy, props.innerRadius, entry))
137
+ const end = createMemo(() => polarToCartesian(props.cx, props.cy, props.outerRadius, entry))
138
+
139
+ return <line {...polarAnglesProps()} x1={start().x} y1={start().y} x2={end().x} y2={end().y} />
140
+ }}
141
+ </For>
142
+ </g>
143
+ </Show>
144
+ )
145
+ }
146
+
147
+ function useConcentricSvgProps(props: ConcentricProps) {
148
+ return createMemo(() => {
149
+ const { ref: _ref, ...svgProps } = svgPropertiesNoEvents(props) ?? {}
150
+ return svgProps
151
+ })
152
+ }
153
+
154
+ /* Draw concentric circles */
155
+ function ConcentricCircle(props: ConcentricProps): JSX.Element {
156
+ const svgProps = useConcentricSvgProps(props)
157
+
158
+ return (
159
+ <circle
160
+ stroke="#ccc"
161
+ fill="none"
162
+ {...svgProps()}
163
+ class={clsx(
164
+ "recharts-polar-grid-concentric-circle",
165
+ String((props as unknown as Record<string, unknown>).className ?? ""),
166
+ )}
167
+ cx={props.cx}
168
+ cy={props.cy}
169
+ r={props.radius}
170
+ />
171
+ )
172
+ }
173
+
174
+ /* Draw concentric polygons */
175
+ function ConcentricPolygon(props: ConcentricProps): JSX.Element {
176
+ const svgProps = useConcentricSvgProps(props)
177
+
178
+ return (
179
+ <path
180
+ stroke="#ccc"
181
+ fill="none"
182
+ {...svgProps()}
183
+ class={clsx(
184
+ "recharts-polar-grid-concentric-polygon",
185
+ String((props as unknown as Record<string, unknown>).className ?? ""),
186
+ )}
187
+ d={getPolygonPath(props.radius, props.cx, props.cy, props.polarAngles)}
188
+ />
189
+ )
190
+ }
191
+
192
+ /* Draw concentric axis */
193
+ function ConcentricGridPath(props: PropsWithDefaults): JSX.Element {
194
+ const maxPolarRadius = createMemo(() => Math.max(...(props.polarRadius ?? [])))
195
+ const renderBackground = createMemo(() => props.fill != null && props.fill !== "none")
196
+
197
+ return (
198
+ <Show when={props.polarRadius != null && props.polarRadius.length > 0}>
199
+ <g class="recharts-polar-grid-concentric">
200
+ {/* Render background as separate first child to do not cover strokes of smaller figures */}
201
+ <Show when={renderBackground() && props.gridType === "circle"}>
202
+ <ConcentricCircle {...props} radius={maxPolarRadius()} />
203
+ </Show>
204
+ <Show when={renderBackground() && props.gridType !== "circle"}>
205
+ <ConcentricPolygon {...props} radius={maxPolarRadius()} />
206
+ </Show>
207
+
208
+ <For each={props.polarRadius}>
209
+ {(entry: number) => (
210
+ <Show
211
+ when={props.gridType === "circle"}
212
+ fallback={<ConcentricPolygon {...props} fill="none" radius={entry} />}
213
+ >
214
+ <ConcentricCircle {...props} fill="none" radius={entry} />
215
+ </Show>
216
+ )}
217
+ </For>
218
+ </g>
219
+ </Show>
220
+ )
221
+ }
222
+
223
+ export const defaultPolarGridProps = {
224
+ angleAxisId: 0,
225
+ gridType: "polygon",
226
+ radialLines: true,
227
+ radiusAxisId: 0,
228
+ zIndex: DefaultZIndexes.grid,
229
+ } as const satisfies Partial<Props>
230
+
231
+ /**
232
+ * @consumes PolarViewBoxContext
233
+ */
234
+ export function PolarGrid(outsideProps: Props): JSX.Element {
235
+ const resolved = resolveDefaultProps(outsideProps, defaultPolarGridProps)
236
+ const {
237
+ gridType,
238
+ radialLines,
239
+ angleAxisId,
240
+ radiusAxisId,
241
+ cx: cxFromOutside,
242
+ cy: cyFromOutside,
243
+ innerRadius: innerRadiusFromOutside,
244
+ outerRadius: outerRadiusFromOutside,
245
+ polarAngles: polarAnglesInput,
246
+ polarRadius: polarRadiusInput,
247
+ zIndex,
248
+ ...inputs
249
+ } = resolved
250
+ const ctx = useChartStore()
251
+ const polarViewBox = createMemo(() => (ctx ? selectPolarViewBox(ctx.store) : undefined))
252
+
253
+ const polarAnglesFromRedux = createMemo(() =>
254
+ ctx ? selectPolarGridAngles(ctx.store, angleAxisId) : undefined,
255
+ )
256
+ const polarRadiiFromRedux = createMemo(() =>
257
+ ctx ? selectPolarGridRadii(ctx.store, radiusAxisId) : undefined,
258
+ )
259
+
260
+ const polarAngles = () =>
261
+ Array.isArray(polarAnglesInput) ? polarAnglesInput : polarAnglesFromRedux()
262
+ const polarRadius = () =>
263
+ Array.isArray(polarRadiusInput) ? polarRadiusInput : polarRadiiFromRedux()
264
+
265
+ const props = createMemo((): PropsWithDefaults | null => {
266
+ const angles = polarAngles()
267
+ const radius = polarRadius()
268
+ if (angles == null || radius == null) {
269
+ return null
270
+ }
271
+ const vb = polarViewBox()
272
+ const p: PropsWithDefaults = {
273
+ cx: vb?.cx ?? cxFromOutside ?? 0,
274
+ cy: vb?.cy ?? cyFromOutside ?? 0,
275
+ innerRadius: vb?.innerRadius ?? innerRadiusFromOutside ?? 0,
276
+ outerRadius: vb?.outerRadius ?? outerRadiusFromOutside ?? 0,
277
+ polarAngles: angles,
278
+ polarRadius: radius,
279
+ zIndex,
280
+ ...inputs,
281
+ }
282
+ if (p.outerRadius <= 0) {
283
+ return null
284
+ }
285
+ return p
286
+ })
287
+
288
+ return (
289
+ <Show when={props()}>
290
+ {(p) => (
291
+ <ZIndexLayer zIndex={p().zIndex}>
292
+ <g class="recharts-polar-grid">
293
+ <ConcentricGridPath
294
+ gridType={gridType}
295
+ radialLines={radialLines}
296
+ {...p()}
297
+ polarAngles={p().polarAngles}
298
+ polarRadius={p().polarRadius}
299
+ />
300
+ <PolarAngles
301
+ gridType={gridType}
302
+ radialLines={radialLines}
303
+ {...p()}
304
+ polarAngles={p().polarAngles}
305
+ polarRadius={p().polarRadius}
306
+ />
307
+ </g>
308
+ </ZIndexLayer>
309
+ )}
310
+ </Show>
311
+ )
312
+ }