@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,29 @@
1
+ /* eslint-disable import/no-cycle */
2
+ import type { JSX } from '@solidjs/web';
3
+ import { arrayTooltipSearcher } from "../state/optionsSlice"
4
+ import { CartesianChart } from "./CartesianChart"
5
+ import type { CartesianChartProps, TooltipEventType } from "../util/types"
6
+
7
+ const allowedTooltipTypes: ReadonlyArray<TooltipEventType> = ["axis"]
8
+
9
+ /**
10
+ * @consumes ResponsiveContainerContext
11
+ * @provides CartesianViewBoxContext
12
+ * @provides CartesianChartContext
13
+ */
14
+ export function AreaChart<DataPointType = unknown>(
15
+ props: CartesianChartProps<DataPointType> & {
16
+ ref?: SVGSVGElement | ((el: SVGSVGElement) => void)
17
+ },
18
+ ): JSX.Element {
19
+ return (
20
+ <CartesianChart
21
+ chartName="AreaChart"
22
+ defaultTooltipEventType="axis"
23
+ validateTooltipEventTypes={allowedTooltipTypes}
24
+ tooltipPayloadSearcher={arrayTooltipSearcher}
25
+ categoricalChartProps={props}
26
+ ref={props.ref}
27
+ />
28
+ )
29
+ }
@@ -0,0 +1,29 @@
1
+ /* eslint-disable import/no-cycle */
2
+ import type { JSX } from '@solidjs/web';
3
+ import { arrayTooltipSearcher } from "../state/optionsSlice"
4
+ import type { CartesianChartProps, TooltipEventType } from "../util/types"
5
+ import { CartesianChart } from "./CartesianChart"
6
+
7
+ const allowedTooltipTypes: ReadonlyArray<TooltipEventType> = ["axis", "item"]
8
+
9
+ /**
10
+ * @consumes ResponsiveContainerContext
11
+ * @provides CartesianViewBoxContext
12
+ * @provides CartesianChartContext
13
+ */
14
+ export function BarChart<DataPointType = unknown>(
15
+ props: CartesianChartProps<DataPointType> & {
16
+ ref?: SVGSVGElement | ((el: SVGSVGElement) => void)
17
+ },
18
+ ): JSX.Element {
19
+ return (
20
+ <CartesianChart
21
+ chartName="BarChart"
22
+ defaultTooltipEventType="axis"
23
+ validateTooltipEventTypes={allowedTooltipTypes}
24
+ tooltipPayloadSearcher={arrayTooltipSearcher}
25
+ categoricalChartProps={props}
26
+ ref={props.ref}
27
+ />
28
+ )
29
+ }
@@ -0,0 +1,131 @@
1
+ /* eslint-disable import/no-cycle */
2
+ import { createMemo, untrack } from 'solid-js';
3
+ import type { ChartOptions } from "../state/optionsSlice"
4
+ import { RechartsStateProvider } from "../state/RechartsStateProvider"
5
+ import { createInitialChartDataState, createInitialLayoutState } from "../state/chartState"
6
+ import { ChartDataContextProvider } from "../context/chartDataContext"
7
+ import { ReportMainChartProps } from "../state/ReportMainChartProps"
8
+ import { ReportChartProps } from "../state/ReportChartProps"
9
+ import { createInitialRootProps } from "./createInitialRootProps"
10
+ import { ReportEventSettings } from "../state/ReportEventSettings"
11
+ import type { CartesianChartProps, Margin, TooltipEventType } from "../util/types"
12
+ import type { TooltipPayloadSearcher } from "../state/tooltipSlice"
13
+ import { CategoricalChart } from "./CategoricalChart"
14
+ import { resolveDefaultProps } from "../util/resolveDefaultProps"
15
+ import { initialEventSettingsState } from "../state/eventSettingsSlice"
16
+
17
+ import { splitProps } from '../util/solid-1-compat';
18
+ const defaultMargin: Margin = { bottom: 5, left: 5, right: 5, top: 5 }
19
+
20
+ export const defaultCartesianChartProps = {
21
+ accessibilityLayer: true,
22
+ barCategoryGap: "10%",
23
+ barGap: 4,
24
+ layout: "horizontal",
25
+ margin: defaultMargin,
26
+ responsive: false,
27
+ reverseStackOrder: false,
28
+ stackOffset: "none",
29
+ syncMethod: "index",
30
+ ...initialEventSettingsState,
31
+ } as const satisfies Partial<CartesianChartProps>
32
+
33
+ /**
34
+ * These are one-time, immutable options that decide the chart's behavior.
35
+ * Users who wish to call CartesianChart may decide to pass these options explicitly,
36
+ * but usually we would expect that they use one of the convenience components like BarChart, LineChart, etc.
37
+ */
38
+ export type CartesianChartOptions = {
39
+ chartName: string
40
+ defaultTooltipEventType: TooltipEventType
41
+ validateTooltipEventTypes: ReadonlyArray<TooltipEventType>
42
+ tooltipPayloadSearcher: TooltipPayloadSearcher
43
+ categoricalChartProps: CartesianChartProps
44
+ ref?: SVGSVGElement | ((el: SVGSVGElement) => void)
45
+ }
46
+
47
+ function CartesianChartInner(props: {
48
+ categoricalChartProps: CartesianChartProps
49
+ ref?: SVGSVGElement | ((el: SVGSVGElement) => void)
50
+ }) {
51
+ /*
52
+ * Owner MUST be inside RechartsStoreProvider — the memo captures its creation-site owner,
53
+ * and any createComponent triggered during memo evaluation (via the `children` getter on
54
+ * the Solid props proxy) inherits that owner. If this memo lived in the outer CartesianChart
55
+ * component, children instantiated through the spread would be OUTSIDE the store Provider.
56
+ *
57
+ * Children must NOT flow through the resolveDefaultProps spread. resolveDefaultProps does
58
+ * `{...realProps}` which enumerates own keys of the Solid props proxy — reading the
59
+ * `children` getter eagerly calls createComponent(...) on user JSX (Legend, Tooltip, etc.)
60
+ * under the CURRENT owner. That owner is inside RechartsStoreProvider but OUTSIDE
61
+ * RechartsWrapper, so user components miss the LegendPortalContext / TooltipPortalContext
62
+ * Providers that RechartsWrapper installs. Strip children with splitProps and pass them
63
+ * as JSX children so the read happens deep inside RechartsWrapper, where all Providers
64
+ * are visible.
65
+ */
66
+ /* eslint-disable-next-line solid/reactivity -- splitProps receives the nested prop accessor once; restProps is a reactive proxy, reactivity flows through it */
67
+ const [childrenProps, restProps] = splitProps(props.categoricalChartProps, ["children"])
68
+ const rootChartProps = createMemo(() =>
69
+ resolveDefaultProps(restProps, defaultCartesianChartProps),
70
+ )
71
+
72
+ return (
73
+ <>
74
+ <ChartDataContextProvider chartData={rootChartProps().data} />
75
+ <ReportMainChartProps layout={rootChartProps().layout} margin={rootChartProps().margin} />
76
+ <ReportEventSettings
77
+ throttleDelay={rootChartProps().throttleDelay}
78
+ throttledEvents={rootChartProps().throttledEvents}
79
+ />
80
+ <ReportChartProps
81
+ baseValue={rootChartProps().baseValue}
82
+ accessibilityLayer={rootChartProps().accessibilityLayer}
83
+ barCategoryGap={rootChartProps().barCategoryGap}
84
+ maxBarSize={rootChartProps().maxBarSize}
85
+ stackOffset={rootChartProps().stackOffset}
86
+ barGap={rootChartProps().barGap}
87
+ barSize={rootChartProps().barSize}
88
+ syncId={rootChartProps().syncId}
89
+ syncMethod={rootChartProps().syncMethod}
90
+ className={rootChartProps().className}
91
+ reverseStackOrder={rootChartProps().reverseStackOrder}
92
+ />
93
+ <CategoricalChart {...rootChartProps()} ref={props.ref}>
94
+ {childrenProps.children}
95
+ </CategoricalChart>
96
+ </>
97
+ )
98
+ }
99
+
100
+ export function CartesianChart(props: CartesianChartOptions) {
101
+ const options = (): ChartOptions => ({
102
+ chartName: props.chartName,
103
+ defaultTooltipEventType: props.defaultTooltipEventType,
104
+ eventEmitter: undefined,
105
+ tooltipPayloadSearcher: props.tooltipPayloadSearcher,
106
+ validateTooltipEventTypes: props.validateTooltipEventTypes,
107
+ })
108
+
109
+ const initialChartData = () =>
110
+ untrack(() => createInitialChartDataState(props.categoricalChartProps.data))
111
+ const initialLayout = () =>
112
+ untrack(() =>
113
+ createInitialLayoutState({
114
+ height: props.categoricalChartProps.height,
115
+ layoutType: props.categoricalChartProps.layout ?? defaultCartesianChartProps.layout,
116
+ margin: props.categoricalChartProps.margin ?? defaultCartesianChartProps.margin,
117
+ width: props.categoricalChartProps.width,
118
+ }),
119
+ )
120
+
121
+ return (
122
+ <RechartsStateProvider preloadedState={{
123
+ chartData: initialChartData(),
124
+ layout: initialLayout(),
125
+ options: options(),
126
+ rootProps: untrack(() => createInitialRootProps(props.categoricalChartProps)),
127
+ }}>
128
+ <CartesianChartInner categoricalChartProps={props.categoricalChartProps} ref={props.ref} />
129
+ </RechartsStateProvider>
130
+ )
131
+ }
@@ -0,0 +1,94 @@
1
+ /* eslint-disable import/no-cycle */
2
+ import { RootSurface } from "../container/RootSurface"
3
+ import { RechartsWrapper } from "./RechartsWrapper"
4
+ import { ClipPathProvider } from "../container/ClipPathProvider"
5
+ import { useIsPanorama } from "../context/PanoramaContext"
6
+ import type { CartesianChartProps } from "../util/types"
7
+ import { svgPropertiesNoEvents } from "../util/svgPropertiesNoEvents"
8
+ import { ReportChartSize } from "../context/chartLayoutContext"
9
+
10
+ import { untrack } from "solid-js"
11
+ import { bindRef, splitProps } from '../util/solid-1-compat';
12
+ export function CategoricalChart(
13
+ props: CartesianChartProps & {
14
+ ref?: SVGSVGElement | ((el: SVGSVGElement) => void)
15
+ },
16
+ ) {
17
+ const [local, others] = splitProps(props, [
18
+ "width",
19
+ "height",
20
+ "responsive",
21
+ "children",
22
+ "className",
23
+ "style",
24
+ "compact",
25
+ "title",
26
+ "desc",
27
+ "ref",
28
+ "onClick",
29
+ "onMouseLeave",
30
+ "onMouseEnter",
31
+ "onMouseMove",
32
+ "onMouseDown",
33
+ "onMouseUp",
34
+ "onContextMenu",
35
+ "onDoubleClick",
36
+ "onTouchStart",
37
+ "onTouchMove",
38
+ "onTouchEnd",
39
+ ])
40
+ const attrs = () => svgPropertiesNoEvents(others)
41
+
42
+ /*
43
+ * The "compact" mode is used as the panorama within Brush.
44
+ * However because `compact` is a public prop, let's assume that it can render outside of Brush too.
45
+ */
46
+ /* Upstream Brush clones its child chart with `compact: true`; Solid cannot clone
47
+ JSX, so a chart rendered inside the Brush panorama is compact by context.
48
+ `compact` is set once at creation and never changes at runtime. */
49
+ const isPanorama = useIsPanorama()
50
+ if (isPanorama || untrack(() => local.compact)) {
51
+ return (
52
+ <>
53
+ <ReportChartSize width={local.width} height={local.height} />
54
+ <RootSurface
55
+ otherAttributes={attrs()}
56
+ title={local.title}
57
+ desc={local.desc}
58
+ >
59
+ {local.children}
60
+ </RootSurface>
61
+ </>
62
+ )
63
+ }
64
+
65
+ return (
66
+ <RechartsWrapper
67
+ class={local.className}
68
+ style={local.style}
69
+ width={local.width}
70
+ height={local.height}
71
+ responsive={local.responsive ?? false}
72
+ onClick={local.onClick}
73
+ onMouseLeave={local.onMouseLeave}
74
+ onMouseEnter={local.onMouseEnter}
75
+ onMouseMove={local.onMouseMove}
76
+ onMouseDown={local.onMouseDown}
77
+ onMouseUp={local.onMouseUp}
78
+ onContextMenu={local.onContextMenu}
79
+ onDoubleClick={local.onDoubleClick}
80
+ onTouchStart={local.onTouchStart}
81
+ onTouchMove={local.onTouchMove}
82
+ onTouchEnd={local.onTouchEnd}
83
+ >
84
+ <RootSurface
85
+ otherAttributes={attrs()}
86
+ title={local.title}
87
+ desc={local.desc}
88
+ ref={(el) => bindRef(local.ref, el)}
89
+ >
90
+ <ClipPathProvider>{local.children}</ClipPathProvider>
91
+ </RootSurface>
92
+ </RechartsWrapper>
93
+ )
94
+ }
@@ -0,0 +1,29 @@
1
+ /* eslint-disable import/no-cycle */
2
+ import type { JSX } from '@solidjs/web';
3
+ import { arrayTooltipSearcher } from "../state/optionsSlice"
4
+ import { CartesianChart } from "./CartesianChart"
5
+ import type { CartesianChartProps, TooltipEventType } from "../util/types"
6
+
7
+ const allowedTooltipTypes: ReadonlyArray<TooltipEventType> = ["axis"]
8
+
9
+ /**
10
+ * @consumes ResponsiveContainerContext
11
+ * @provides CartesianViewBoxContext
12
+ * @provides CartesianChartContext
13
+ */
14
+ export function ComposedChart<DataPointType = unknown>(
15
+ props: CartesianChartProps<DataPointType> & {
16
+ ref?: SVGSVGElement | ((el: SVGSVGElement) => void)
17
+ },
18
+ ): JSX.Element {
19
+ return (
20
+ <CartesianChart
21
+ chartName="ComposedChart"
22
+ defaultTooltipEventType="axis"
23
+ validateTooltipEventTypes={allowedTooltipTypes}
24
+ tooltipPayloadSearcher={arrayTooltipSearcher}
25
+ categoricalChartProps={props}
26
+ ref={props.ref}
27
+ />
28
+ )
29
+ }
@@ -0,0 +1,29 @@
1
+ /* eslint-disable import/no-cycle */
2
+ import type { JSX } from '@solidjs/web';
3
+ import { arrayTooltipSearcher } from "../state/optionsSlice"
4
+ import { CartesianChart } from "./CartesianChart"
5
+ import type { CartesianChartProps, TooltipEventType } from "../util/types"
6
+
7
+ const allowedTooltipTypes: ReadonlyArray<TooltipEventType> = ["item"]
8
+
9
+ /**
10
+ * @consumes ResponsiveContainerContext
11
+ * @provides CartesianViewBoxContext
12
+ * @provides CartesianChartContext
13
+ */
14
+ export function FunnelChart<DataPointType = unknown>(
15
+ props: CartesianChartProps<DataPointType> & {
16
+ ref?: SVGSVGElement | ((el: SVGSVGElement) => void)
17
+ },
18
+ ): JSX.Element {
19
+ return (
20
+ <CartesianChart
21
+ chartName="FunnelChart"
22
+ defaultTooltipEventType="item"
23
+ validateTooltipEventTypes={allowedTooltipTypes}
24
+ tooltipPayloadSearcher={arrayTooltipSearcher}
25
+ categoricalChartProps={props}
26
+ ref={props.ref}
27
+ />
28
+ )
29
+ }
@@ -0,0 +1,29 @@
1
+ /* eslint-disable import/no-cycle */
2
+ import type { JSX } from '@solidjs/web';
3
+ import { arrayTooltipSearcher } from "../state/optionsSlice"
4
+ import { CartesianChart } from "./CartesianChart"
5
+ import type { CartesianChartProps, TooltipEventType } from "../util/types"
6
+
7
+ const allowedTooltipTypes: ReadonlyArray<TooltipEventType> = ["axis"]
8
+
9
+ /**
10
+ * @consumes ResponsiveContainerContext
11
+ * @provides CartesianViewBoxContext
12
+ * @provides CartesianChartContext
13
+ */
14
+ export function LineChart<DataPointType = unknown>(
15
+ props: CartesianChartProps<DataPointType> & {
16
+ ref?: SVGSVGElement | ((el: SVGSVGElement) => void)
17
+ },
18
+ ): JSX.Element {
19
+ return (
20
+ <CartesianChart
21
+ chartName="LineChart"
22
+ defaultTooltipEventType="axis"
23
+ validateTooltipEventTypes={allowedTooltipTypes}
24
+ tooltipPayloadSearcher={arrayTooltipSearcher}
25
+ categoricalChartProps={props}
26
+ ref={props.ref}
27
+ />
28
+ )
29
+ }
@@ -0,0 +1,50 @@
1
+ /* eslint-disable import/no-cycle */
2
+ import type { JSX } from '@solidjs/web';
3
+ import { arrayTooltipSearcher } from "../state/optionsSlice"
4
+ import { defaultPolarChartProps, PolarChart } from "./PolarChart"
5
+ import type { PolarChartProps, TooltipEventType } from "../util/types"
6
+
7
+ import { mergeProps } from '../util/solid-1-compat';
8
+ const allowedTooltipTypes: ReadonlyArray<TooltipEventType> = ["item"]
9
+
10
+ export const defaultPieChartProps = {
11
+ ...defaultPolarChartProps,
12
+ endAngle: 360,
13
+ layout: "centric",
14
+ startAngle: 0,
15
+ } as const satisfies Partial<PolarChartProps<never>>
16
+
17
+ /**
18
+ * @consumes ResponsiveContainerContext
19
+ * @provides PolarViewBoxContext
20
+ * @provides PolarChartContext
21
+ */
22
+ export function PieChart<DataPointType = unknown>(
23
+ props: PolarChartProps<DataPointType> & { ref?: SVGSVGElement | ((el: SVGSVGElement) => void) },
24
+ ): JSX.Element {
25
+ /* mergeProps preserves the props proxy — do NOT resolveDefaultProps here.
26
+ resolveDefaultProps spreads `{...realProps}` which enumerates own keys including
27
+ `children`; reading the children getter eagerly instantiates user JSX (Legend,
28
+ Tooltip, etc.) under PieChart's owner — which sits ABOVE RechartsStoreProvider
29
+ and the portal Providers, breaking every downstream context lookup. */
30
+ const propsWithDefaults = mergeProps(defaultPieChartProps, props) as PolarChartProps<
31
+ DataPointType
32
+ > & {
33
+ cx: NonNullable<PolarChartProps["cx"]>
34
+ cy: NonNullable<PolarChartProps["cy"]>
35
+ startAngle: NonNullable<PolarChartProps["startAngle"]>
36
+ endAngle: NonNullable<PolarChartProps["endAngle"]>
37
+ innerRadius: NonNullable<PolarChartProps["innerRadius"]>
38
+ outerRadius: NonNullable<PolarChartProps["outerRadius"]>
39
+ }
40
+ return (
41
+ <PolarChart
42
+ chartName="PieChart"
43
+ defaultTooltipEventType="item"
44
+ validateTooltipEventTypes={allowedTooltipTypes}
45
+ tooltipPayloadSearcher={arrayTooltipSearcher}
46
+ categoricalChartProps={propsWithDefaults}
47
+ ref={props.ref}
48
+ />
49
+ )
50
+ }
@@ -0,0 +1,164 @@
1
+ /* eslint-disable import/no-cycle */
2
+ import { createMemo, untrack } from 'solid-js';
3
+ import type { ChartOptions } from "../state/optionsSlice"
4
+ import { RechartsStateProvider } from "../state/RechartsStateProvider"
5
+ import { createInitialChartDataState, createInitialLayoutState } from "../state/chartState"
6
+ import { ChartDataContextProvider } from "../context/chartDataContext"
7
+ import { ReportMainChartProps } from "../state/ReportMainChartProps"
8
+ import { ReportChartProps } from "../state/ReportChartProps"
9
+ import { createInitialRootProps } from "./createInitialRootProps"
10
+ import { ReportEventSettings } from "../state/ReportEventSettings"
11
+ import { ReportPolarOptions } from "../state/ReportPolarOptions"
12
+ import type { Margin, PolarChartProps, TooltipEventType } from "../util/types"
13
+ import type { TooltipPayloadSearcher } from "../state/tooltipSlice"
14
+ import { CategoricalChart } from "./CategoricalChart"
15
+ import { resolveDefaultProps } from "../util/resolveDefaultProps"
16
+ import { initialEventSettingsState } from "../state/eventSettingsSlice"
17
+
18
+ import { splitProps } from '../util/solid-1-compat';
19
+ const defaultMargin: Margin = { bottom: 5, left: 5, right: 5, top: 5 }
20
+
21
+ /**
22
+ * These default props are the same for all PolarChart components.
23
+ */
24
+ export const defaultPolarChartProps = {
25
+ accessibilityLayer: true,
26
+ barCategoryGap: "10%",
27
+ barGap: 4,
28
+ cx: "50%",
29
+ cy: "50%",
30
+ innerRadius: 0,
31
+ layout: "radial",
32
+ margin: defaultMargin,
33
+ outerRadius: "80%",
34
+ responsive: false,
35
+ reverseStackOrder: false,
36
+ stackOffset: "none",
37
+ syncMethod: "index",
38
+ ...initialEventSettingsState,
39
+ } as const satisfies Partial<PolarChartProps<never>>
40
+
41
+ /**
42
+ * These props are required for the PolarChart to function correctly.
43
+ * Users usually would not need to specify these explicitly,
44
+ * because the convenience components like PieChart, RadarChart, etc.
45
+ * will provide these defaults.
46
+ * We can't have the defaults in this file because each of those convenience components
47
+ * have their own opinions about what they should be.
48
+ */
49
+ type PolarChartPropsWithDefaults = PolarChartProps & {
50
+ cx: NonNullable<PolarChartProps["cx"]>
51
+ cy: NonNullable<PolarChartProps["cy"]>
52
+ startAngle: NonNullable<PolarChartProps["startAngle"]>
53
+ endAngle: NonNullable<PolarChartProps["endAngle"]>
54
+ innerRadius: NonNullable<PolarChartProps["innerRadius"]>
55
+ outerRadius: NonNullable<PolarChartProps["outerRadius"]>
56
+ }
57
+
58
+ /**
59
+ * These are one-time, immutable options that decide the chart's behavior.
60
+ * Users who wish to call CartesianChart may decide to pass these options explicitly,
61
+ * but usually we would expect that they use one of the convenience components like PieChart, RadarChart, etc.
62
+ */
63
+ export type PolarChartOptions = {
64
+ chartName: string
65
+ defaultTooltipEventType: TooltipEventType
66
+ validateTooltipEventTypes: ReadonlyArray<TooltipEventType>
67
+ tooltipPayloadSearcher: TooltipPayloadSearcher
68
+ categoricalChartProps: PolarChartPropsWithDefaults
69
+ ref?: SVGSVGElement | ((el: SVGSVGElement) => void)
70
+ }
71
+
72
+ function PolarChartInner(props: {
73
+ categoricalChartProps: PolarChartPropsWithDefaults
74
+ ref?: SVGSVGElement | ((el: SVGSVGElement) => void)
75
+ }) {
76
+ /*
77
+ * See GOTCHA-004 and GOTCHA-005: memo must be created inside RechartsStoreProvider.
78
+ * resolveDefaultProps spreads the props proxy, which enumerates own keys including
79
+ * `children`; reading the children getter eagerly instantiates user JSX (Legend,
80
+ * Tooltip, etc.) under the CURRENT owner. That owner sits above RechartsWrapper, so
81
+ * those user components miss the LegendPortalContext / TooltipPortalContext Providers.
82
+ * Strip children with splitProps and pass them as JSX children so the read happens
83
+ * deep inside RechartsWrapper, where every Provider is visible.
84
+ */
85
+ /* eslint-disable-next-line solid/reactivity -- splitProps receives the nested prop accessor once; restProps is a reactive proxy, reactivity flows through it */
86
+ const [childrenProps, restProps] = splitProps(props.categoricalChartProps, ["children"])
87
+ const polarChartProps = createMemo(() =>
88
+ resolveDefaultProps(restProps, defaultPolarChartProps),
89
+ )
90
+
91
+ return (
92
+ <>
93
+ <ChartDataContextProvider chartData={polarChartProps().data} />
94
+ <ReportMainChartProps layout={polarChartProps().layout} margin={polarChartProps().margin} />
95
+ <ReportEventSettings
96
+ throttleDelay={polarChartProps().throttleDelay}
97
+ throttledEvents={polarChartProps().throttledEvents}
98
+ />
99
+ <ReportChartProps
100
+ baseValue={undefined}
101
+ accessibilityLayer={polarChartProps().accessibilityLayer}
102
+ barCategoryGap={polarChartProps().barCategoryGap}
103
+ maxBarSize={polarChartProps().maxBarSize}
104
+ stackOffset={polarChartProps().stackOffset}
105
+ barGap={polarChartProps().barGap}
106
+ barSize={polarChartProps().barSize}
107
+ syncId={polarChartProps().syncId}
108
+ syncMethod={polarChartProps().syncMethod}
109
+ className={polarChartProps().className}
110
+ reverseStackOrder={polarChartProps().reverseStackOrder}
111
+ />
112
+ <ReportPolarOptions
113
+ cx={polarChartProps().cx}
114
+ cy={polarChartProps().cy}
115
+ startAngle={polarChartProps().startAngle}
116
+ endAngle={polarChartProps().endAngle}
117
+ innerRadius={polarChartProps().innerRadius}
118
+ outerRadius={polarChartProps().outerRadius}
119
+ />
120
+ <CategoricalChart
121
+ {...(() => {
122
+ const { layout: _layout, ...rest } = polarChartProps()
123
+ return rest
124
+ })()}
125
+ ref={props.ref}
126
+ >
127
+ {childrenProps.children}
128
+ </CategoricalChart>
129
+ </>
130
+ )
131
+ }
132
+
133
+ export function PolarChart(props: PolarChartOptions) {
134
+ const options = (): ChartOptions => ({
135
+ chartName: props.chartName,
136
+ defaultTooltipEventType: props.defaultTooltipEventType,
137
+ eventEmitter: undefined,
138
+ tooltipPayloadSearcher: props.tooltipPayloadSearcher,
139
+ validateTooltipEventTypes: props.validateTooltipEventTypes,
140
+ })
141
+
142
+ const initialChartData = () =>
143
+ untrack(() => createInitialChartDataState(props.categoricalChartProps.data))
144
+ const initialLayout = () =>
145
+ untrack(() =>
146
+ createInitialLayoutState({
147
+ height: props.categoricalChartProps.height,
148
+ layoutType: props.categoricalChartProps.layout ?? defaultPolarChartProps.layout,
149
+ margin: props.categoricalChartProps.margin ?? defaultPolarChartProps.margin,
150
+ width: props.categoricalChartProps.width,
151
+ }),
152
+ )
153
+
154
+ return (
155
+ <RechartsStateProvider preloadedState={{
156
+ chartData: initialChartData(),
157
+ layout: initialLayout(),
158
+ options: options(),
159
+ rootProps: untrack(() => createInitialRootProps(props.categoricalChartProps)),
160
+ }}>
161
+ <PolarChartInner categoricalChartProps={props.categoricalChartProps} ref={props.ref} />
162
+ </RechartsStateProvider>
163
+ )
164
+ }
@@ -0,0 +1,70 @@
1
+ /* eslint-disable import/no-cycle */
2
+ import type { JSX } from '@solidjs/web';
3
+ import { arrayTooltipSearcher } from "../state/optionsSlice"
4
+ import type { PolarChartProps, PolarLayout, TooltipEventType } from "../util/types"
5
+ import { defaultPolarChartProps, PolarChart } from "./PolarChart"
6
+
7
+ import { mergeProps } from '../util/solid-1-compat';
8
+ const allowedTooltipTypes: ReadonlyArray<TooltipEventType> = ["axis"]
9
+
10
+ export const defaultRadarChartProps = {
11
+ ...defaultPolarChartProps,
12
+ endAngle: -270,
13
+ layout: "centric",
14
+ startAngle: 90,
15
+ } as const satisfies Partial<PolarChartProps<never>>
16
+
17
+ type RadarChartProps<DataPointType> = Omit<
18
+ PolarChartProps<DataPointType>,
19
+ "layout" | "startAngle" | "endAngle"
20
+ > & {
21
+ /**
22
+ * The layout of chart defines the orientation of axes, graphical items, and tooltip.
23
+ *
24
+ * @defaultValue centric
25
+ */
26
+ layout?: PolarLayout
27
+ /**
28
+ * Angle in degrees from which the chart should start.
29
+ * @defaultValue 90
30
+ *
31
+ */
32
+ startAngle?: number
33
+ /**
34
+ * Angle, in degrees, at which the chart should end.
35
+ *
36
+ * @defaultValue -270
37
+ */
38
+ endAngle?: number
39
+ }
40
+
41
+ /**
42
+ * @consumes ResponsiveContainerContext
43
+ * @provides PolarViewBoxContext
44
+ * @provides PolarChartContext
45
+ */
46
+ export function RadarChart<DataPointType = unknown>(
47
+ props: RadarChartProps<DataPointType> & { ref?: SVGSVGElement | ((el: SVGSVGElement) => void) },
48
+ ): JSX.Element {
49
+ /* mergeProps preserves the props proxy — see PieChart for the rationale. */
50
+ const propsWithDefaults = mergeProps(defaultRadarChartProps, props) as PolarChartProps<
51
+ DataPointType
52
+ > & {
53
+ cx: NonNullable<PolarChartProps["cx"]>
54
+ cy: NonNullable<PolarChartProps["cy"]>
55
+ startAngle: NonNullable<PolarChartProps["startAngle"]>
56
+ endAngle: NonNullable<PolarChartProps["endAngle"]>
57
+ innerRadius: NonNullable<PolarChartProps["innerRadius"]>
58
+ outerRadius: NonNullable<PolarChartProps["outerRadius"]>
59
+ }
60
+ return (
61
+ <PolarChart
62
+ chartName="RadarChart"
63
+ defaultTooltipEventType="axis"
64
+ validateTooltipEventTypes={allowedTooltipTypes}
65
+ tooltipPayloadSearcher={arrayTooltipSearcher}
66
+ categoricalChartProps={propsWithDefaults}
67
+ ref={props.ref}
68
+ />
69
+ )
70
+ }