solid-recharts 1.0.0 → 2.0.0-beta.1

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 (488) hide show
  1. package/package.json +4 -6
  2. package/src/animation/AnimatedItems.tsx +4 -2
  3. package/src/animation/CSSTransitionAnimate.tsx +39 -41
  4. package/src/animation/JavascriptAnimate.tsx +41 -45
  5. package/src/cartesian/Area.tsx +4 -4
  6. package/src/cartesian/AreaRevealShape.tsx +1 -1
  7. package/src/cartesian/Bar.tsx +21 -33
  8. package/src/cartesian/BarStack.tsx +5 -5
  9. package/src/cartesian/Brush.tsx +15 -19
  10. package/src/cartesian/CartesianAxis.tsx +4 -4
  11. package/src/cartesian/CartesianGrid.tsx +5 -5
  12. package/src/cartesian/ErrorBar.tsx +7 -9
  13. package/src/cartesian/Funnel.tsx +3 -3
  14. package/src/cartesian/GraphicalItemClipPath.tsx +1 -1
  15. package/src/cartesian/Line.tsx +16 -18
  16. package/src/cartesian/LineDrawShape.tsx +13 -14
  17. package/src/cartesian/ReferenceArea.tsx +4 -4
  18. package/src/cartesian/ReferenceDot.tsx +4 -4
  19. package/src/cartesian/ReferenceLine.tsx +4 -4
  20. package/src/cartesian/RenderedTicksReporter.tsx +17 -19
  21. package/src/cartesian/Scatter.tsx +3 -3
  22. package/src/cartesian/XAxis.tsx +1 -1
  23. package/src/cartesian/YAxis.tsx +33 -35
  24. package/src/cartesian/ZAxis.tsx +2 -3
  25. package/src/chart/AreaChart.tsx +1 -1
  26. package/src/chart/BarChart.tsx +1 -1
  27. package/src/chart/CartesianChart.tsx +3 -4
  28. package/src/chart/CategoricalChart.tsx +5 -5
  29. package/src/chart/ComposedChart.tsx +1 -1
  30. package/src/chart/FunnelChart.tsx +1 -1
  31. package/src/chart/LineChart.tsx +1 -1
  32. package/src/chart/PieChart.tsx +3 -4
  33. package/src/chart/PolarChart.tsx +3 -4
  34. package/src/chart/RadarChart.tsx +3 -4
  35. package/src/chart/RadialBarChart.tsx +3 -7
  36. package/src/chart/RechartsWrapper.tsx +24 -14
  37. package/src/chart/Sankey.tsx +6 -9
  38. package/src/chart/ScatterChart.tsx +1 -1
  39. package/src/chart/SunburstChart.tsx +4 -5
  40. package/src/chart/Treemap.tsx +4 -5
  41. package/src/component/ActivePoints.tsx +6 -6
  42. package/src/component/Cell.tsx +5 -23
  43. package/src/component/Cursor.tsx +3 -3
  44. package/src/component/DefaultLegendContent.tsx +6 -8
  45. package/src/component/DefaultTooltipContent.tsx +10 -14
  46. package/src/component/Dots.tsx +5 -5
  47. package/src/component/Label.tsx +10 -13
  48. package/src/component/LabelList.tsx +7 -12
  49. package/src/component/Legend.tsx +21 -26
  50. package/src/component/ResponsiveContainer.tsx +49 -52
  51. package/src/component/Text.tsx +5 -5
  52. package/src/component/Tooltip.tsx +18 -21
  53. package/src/component/TooltipBoundingBox.tsx +16 -18
  54. package/src/component/responsiveContainerUtils.ts +1 -1
  55. package/src/container/ClipPathProvider.tsx +3 -3
  56. package/src/container/Layer.tsx +5 -5
  57. package/src/container/RootSurface.tsx +1 -1
  58. package/src/container/Surface.tsx +6 -5
  59. package/src/context/ErrorBarContext.tsx +2 -2
  60. package/src/context/PanoramaContext.tsx +2 -2
  61. package/src/context/RegisterGraphicalItemId.tsx +2 -4
  62. package/src/context/chartDataContext.tsx +23 -26
  63. package/src/context/chartLayoutContext.tsx +12 -16
  64. package/src/polar/Pie.tsx +12 -13
  65. package/src/polar/PolarAngleAxis.tsx +3 -3
  66. package/src/polar/PolarGrid.tsx +5 -5
  67. package/src/polar/PolarRadiusAxis.tsx +3 -3
  68. package/src/polar/Radar.tsx +3 -3
  69. package/src/polar/RadialBar.tsx +3 -3
  70. package/src/shape/Cross.tsx +5 -5
  71. package/src/shape/Curve.tsx +7 -6
  72. package/src/shape/Dot.tsx +4 -4
  73. package/src/shape/Polygon.tsx +5 -5
  74. package/src/shape/Rectangle.tsx +20 -22
  75. package/src/shape/Sector.tsx +5 -5
  76. package/src/shape/Symbols.tsx +5 -5
  77. package/src/shape/Trapezoid.tsx +27 -29
  78. package/src/state/RechartsStoreProvider.tsx +3 -5
  79. package/src/state/ReportChartProps.tsx +6 -8
  80. package/src/state/ReportEventSettings.tsx +6 -8
  81. package/src/state/ReportMainChartProps.tsx +9 -11
  82. package/src/state/ReportPolarOptions.tsx +13 -15
  83. package/src/state/SetLegendPayload.ts +1 -1
  84. package/src/state/SetTooltipEntrySettings.tsx +1 -1
  85. package/src/state/brushSlice.ts +8 -10
  86. package/src/state/cartesianAxisSlice.ts +38 -46
  87. package/src/state/chartDataSlice.ts +23 -29
  88. package/src/state/errorBarSlice.ts +16 -22
  89. package/src/state/eventSettingsSlice.ts +9 -11
  90. package/src/state/graphicalItemsSlice.ts +13 -17
  91. package/src/state/layoutSlice.ts +19 -27
  92. package/src/state/legendSlice.ts +18 -24
  93. package/src/state/optionsSlice.ts +6 -8
  94. package/src/state/polarAxisSlice.ts +13 -21
  95. package/src/state/polarOptionsSlice.ts +14 -16
  96. package/src/state/referenceElementsSlice.ts +19 -25
  97. package/src/state/registerInStore.ts +13 -15
  98. package/src/state/renderedTicksSlice.ts +7 -11
  99. package/src/state/rootPropsSlice.ts +14 -16
  100. package/src/state/tooltipSlice.ts +95 -115
  101. package/src/state/unregisterOnCleanup.ts +20 -5
  102. package/src/state/zIndexSlice.ts +42 -50
  103. package/src/synchronisation/useChartSynchronisation.tsx +217 -213
  104. package/src/util/ActiveShapeUtils.tsx +2 -2
  105. package/src/util/BarUtils.tsx +3 -5
  106. package/src/util/FunnelUtils.tsx +1 -1
  107. package/src/util/RadialBarUtils.tsx +3 -4
  108. package/src/util/createCartesianCharts.tsx +1 -1
  109. package/src/util/createPolarCharts.tsx +1 -1
  110. package/src/util/svgPropertiesAndEvents.ts +1 -1
  111. package/src/util/tooltip/translate.ts +2 -2
  112. package/src/util/types.ts +2 -2
  113. package/src/zIndex/ZIndexLayer.tsx +68 -39
  114. package/src/zIndex/ZIndexPortal.tsx +25 -29
  115. package/test/_data.ts +408 -0
  116. package/test/animation/AnimationController.typed.spec.ts +53 -0
  117. package/test/animation/AnimationControllerImpl.spec.ts +271 -0
  118. package/test/animation/CSSTransitionAnimate.timing.spec.tsx +473 -0
  119. package/test/animation/JavascriptAnimate.spec.tsx +62 -0
  120. package/test/animation/RechartsAnimation.spec.ts +636 -0
  121. package/test/animation/easing.spec.ts +218 -0
  122. package/test/animation/legacyAnimationLengthChange.spec.tsx +803 -0
  123. package/test/animation/matchBy.spec.ts +467 -0
  124. package/test/animation/mockAnimationController.ts +40 -0
  125. package/test/animation/mockControllerAnimationManager.ts +143 -0
  126. package/test/animation/mockTimeoutController.ts +114 -0
  127. package/test/animation/timeoutController.spec.ts +138 -0
  128. package/test/animation/useAnimationStartSnapshot.spec.ts +147 -0
  129. package/test/animation/util.spec.ts +28 -0
  130. package/test/cartesian/Area.animation.spec.tsx +363 -0
  131. package/test/cartesian/Area.range.spec.tsx +54 -0
  132. package/test/cartesian/Area.spec.tsx +1202 -0
  133. package/test/cartesian/Area.stacked.render.spec.tsx +69 -0
  134. package/test/cartesian/Area.typed.spec.tsx +209 -0
  135. package/test/cartesian/Axis.integration.spec.tsx +158 -0
  136. package/test/cartesian/Bar/Bar.csstransition.spec.tsx +299 -0
  137. package/test/cartesian/Bar/Bar.spec.tsx +2314 -0
  138. package/test/cartesian/Bar/Bar.typed.spec.tsx +192 -0
  139. package/test/cartesian/Bar.animation.spec.tsx +426 -0
  140. package/test/cartesian/Bar.stackDomain.spec.tsx +66 -0
  141. package/test/cartesian/Bar.stacked.render.spec.tsx +53 -0
  142. package/test/cartesian/Bar.truncateByDomain.spec.tsx +237 -0
  143. package/test/cartesian/Bar.zeroDimensionFiltering.spec.tsx +336 -0
  144. package/test/cartesian/BarStack.spec.tsx +91 -0
  145. package/test/cartesian/Brush.keyboard.spec.tsx +88 -0
  146. package/test/cartesian/Brush.panorama.spec.tsx +41 -0
  147. package/test/cartesian/Brush.props.spec.tsx +63 -0
  148. package/test/cartesian/Brush.render.spec.tsx +117 -0
  149. package/test/cartesian/Brush.spec.tsx +522 -0
  150. package/test/cartesian/Brush.stacked.spec.tsx +221 -0
  151. package/test/cartesian/CartesianAxis.render.spec.tsx +50 -0
  152. package/test/cartesian/CartesianAxis.spec.tsx +396 -0
  153. package/test/cartesian/CartesianGrid.render.spec.tsx +39 -0
  154. package/test/cartesian/CartesianGrid.spec.tsx +2103 -0
  155. package/test/cartesian/ErrorBar.render.spec.tsx +69 -0
  156. package/test/cartesian/ErrorBar.spec.tsx +2414 -0
  157. package/test/cartesian/Funnel.animation.spec.tsx +241 -0
  158. package/test/cartesian/Funnel.spec.tsx +226 -0
  159. package/test/cartesian/Funnel.typed.spec.tsx +221 -0
  160. package/test/cartesian/GraphicalItemClipPath.scale-behavior.spec.tsx +627 -0
  161. package/test/cartesian/GraphicalItemClipPath.spec.tsx +427 -0
  162. package/test/cartesian/Line.animation.spec.tsx +643 -0
  163. package/test/cartesian/Line.sparseAnimationPath.spec.tsx +98 -0
  164. package/test/cartesian/Line.spec.tsx +471 -0
  165. package/test/cartesian/Line.typed.spec.tsx +152 -0
  166. package/test/cartesian/ReferenceArea.render.spec.tsx +63 -0
  167. package/test/cartesian/ReferenceArea.spec.tsx +663 -0
  168. package/test/cartesian/ReferenceArea.typed.spec.tsx +74 -0
  169. package/test/cartesian/ReferenceDot.render.spec.tsx +55 -0
  170. package/test/cartesian/ReferenceDot.spec.tsx +462 -0
  171. package/test/cartesian/ReferenceDot.typed.spec.tsx +76 -0
  172. package/test/cartesian/ReferenceLine/ReferenceLine.panorama.spec.tsx +184 -0
  173. package/test/cartesian/ReferenceLine/ReferenceLine.spec.tsx +744 -0
  174. package/test/cartesian/ReferenceLine/ReferenceLine.typed.spec.tsx +74 -0
  175. package/test/cartesian/ReferenceLine/getEndPoints.spec.ts +399 -0
  176. package/test/cartesian/ReferenceLine.render.spec.tsx +134 -0
  177. package/test/cartesian/Scatter.animation.spec.tsx +381 -0
  178. package/test/cartesian/Scatter.render.spec.tsx +61 -0
  179. package/test/cartesian/Scatter.spec.tsx +406 -0
  180. package/test/cartesian/Scatter.typed.spec.tsx +153 -0
  181. package/test/cartesian/XAxis/XAxis.barSize.spec.tsx +336 -0
  182. package/test/cartesian/XAxis/XAxis.brush.spec.tsx +266 -0
  183. package/test/cartesian/XAxis/XAxis.categorydomain.spec.tsx +872 -0
  184. package/test/cartesian/XAxis/XAxis.dataKey.spec.tsx +86 -0
  185. package/test/cartesian/XAxis/XAxis.datatypes.spec.tsx +127 -0
  186. package/test/cartesian/XAxis/XAxis.hide.spec.tsx +106 -0
  187. package/test/cartesian/XAxis/XAxis.multiaxis.spec.tsx +336 -0
  188. package/test/cartesian/XAxis/XAxis.numberdomain.spec.tsx +1466 -0
  189. package/test/cartesian/XAxis/XAxis.padding.spec.tsx +758 -0
  190. package/test/cartesian/XAxis/XAxis.padding_clip.spec.tsx +65 -0
  191. package/test/cartesian/XAxis/XAxis.state.spec.tsx +355 -0
  192. package/test/cartesian/XAxis/XAxis.tick.spec.tsx +493 -0
  193. package/test/cartesian/XAxis/XAxis.timescale.spec.tsx +233 -0
  194. package/test/cartesian/XAxis/XAxis.type.spec.tsx +107 -0
  195. package/test/cartesian/XAxis/XAxis.typed.spec.tsx +102 -0
  196. package/test/cartesian/XAxis/XAxis.vertical.spec.tsx +265 -0
  197. package/test/cartesian/XAxis.tickFormatter.spec.tsx +54 -0
  198. package/test/cartesian/YAxis/YAxis.7362.derivedDomain.spec.tsx +230 -0
  199. package/test/cartesian/YAxis/YAxis.7362.spec.tsx +104 -0
  200. package/test/cartesian/YAxis/YAxis.interval-zero.spec.tsx +88 -0
  201. package/test/cartesian/YAxis/YAxis.label.spec.tsx +219 -0
  202. package/test/cartesian/YAxis/YAxis.spec.tsx +1595 -0
  203. package/test/cartesian/YAxis/YAxis.tick.spec.tsx +428 -0
  204. package/test/cartesian/YAxis/YAxis.tickFormatter.spec.tsx +54 -0
  205. package/test/cartesian/YAxis/YAxis.ticks.spec.tsx +263 -0
  206. package/test/cartesian/YAxis/YAxis.type.spec.tsx +107 -0
  207. package/test/cartesian/YAxis/YAxis.typed.spec.tsx +102 -0
  208. package/test/cartesian/ZAxis.spec.tsx +300 -0
  209. package/test/cartesian/ZAxis.typed.spec.tsx +33 -0
  210. package/test/cartesian/__snapshots__/Brush.spec.tsx.snap +5 -0
  211. package/test/cartesian/axisLineAndStroke.spec.tsx +72 -0
  212. package/test/cartesian/getCartesianPosition.spec.ts +907 -0
  213. package/test/cartesian/getEquidistantTicks.spec.ts +88 -0
  214. package/test/cartesian/getTicks.spec.ts +378 -0
  215. package/test/cartesian/miscFeatureGaps.spec.tsx +89 -0
  216. package/test/cartesian/useAnimatedLineLength.spec.ts +168 -0
  217. package/test/chart/AccessibilityLayer.spec.tsx +569 -0
  218. package/test/chart/AccessibilityScans.spec.tsx +286 -0
  219. package/test/chart/AreaChart.spec.tsx +409 -0
  220. package/test/chart/AreaChart.stacked.spec.tsx +1407 -0
  221. package/test/chart/AreaChart.typed.spec.tsx +39 -0
  222. package/test/chart/BarChart.spec.tsx +3719 -0
  223. package/test/chart/BarChart.typed.spec.tsx +60 -0
  224. package/test/chart/CategoricalChart.spec.tsx +255 -0
  225. package/test/chart/ComposedChart.spec.tsx +199 -0
  226. package/test/chart/ComposedChart.typed.spec.tsx +39 -0
  227. package/test/chart/FunnelChart.spec.tsx +215 -0
  228. package/test/chart/FunnelChart.typed.spec.tsx +39 -0
  229. package/test/chart/LineChart.multiseries.spec.tsx +50 -0
  230. package/test/chart/LineChart.smoke.spec.tsx +50 -0
  231. package/test/chart/LineChart.spec.tsx +930 -0
  232. package/test/chart/LineChart.typed.spec.tsx +39 -0
  233. package/test/chart/NicheChartTooltip.spec.tsx +81 -0
  234. package/test/chart/PieChart.spec.tsx +793 -0
  235. package/test/chart/PieChart.typed.spec.tsx +39 -0
  236. package/test/chart/RadarChart.spec.tsx +530 -0
  237. package/test/chart/RadarChart.typed.spec.tsx +39 -0
  238. package/test/chart/RadialBarChart.5966.spec.tsx +48 -0
  239. package/test/chart/RadialBarChart.spec.tsx +679 -0
  240. package/test/chart/RadialBarChart.typed.spec.tsx +39 -0
  241. package/test/chart/RechartsWrapper.spec.tsx +83 -0
  242. package/test/chart/Sankey.content.spec.tsx +46 -0
  243. package/test/chart/Sankey.spec.tsx +952 -0
  244. package/test/chart/Sankey.typed.spec.tsx +29 -0
  245. package/test/chart/ScatterChart.spec.tsx +2613 -0
  246. package/test/chart/ScatterChart.typed.spec.tsx +39 -0
  247. package/test/chart/SunburstChart.spec.tsx +146 -0
  248. package/test/chart/Treemap.animation.spec.tsx +52 -0
  249. package/test/chart/Treemap.spec.tsx +1003 -0
  250. package/test/chart/Treemap.typed.spec.tsx +26 -0
  251. package/test/chart/chartEvents.spec.tsx +127 -0
  252. package/test/chart/responsive.spec.tsx +620 -0
  253. package/test/component/Cell.render.spec.tsx +155 -0
  254. package/test/component/Cell.spec.tsx +12 -0
  255. package/test/component/Cursor.spec.tsx +186 -0
  256. package/test/component/DefaultTooltipContent.spec.tsx +102 -0
  257. package/test/component/Label.render.spec.tsx +63 -0
  258. package/test/component/Label.spec.tsx +686 -0
  259. package/test/component/Label.typed.spec.tsx +46 -0
  260. package/test/component/LabelList.spec.tsx +188 -0
  261. package/test/component/Legend.itemSorter.spec.tsx +704 -0
  262. package/test/component/Legend.render.spec.tsx +92 -0
  263. package/test/component/Legend.spec.tsx +2213 -0
  264. package/test/component/Legend.typed.spec.tsx +22 -0
  265. package/test/component/ResponsiveContainer.spec.tsx +523 -0
  266. package/test/component/ResponsiveContainerDataTest.spec.tsx +51 -0
  267. package/test/component/Text.spec.tsx +415 -0
  268. package/test/component/Text.typed.spec.tsx +46 -0
  269. package/test/component/Tooltip/ActiveDot.spec.tsx +370 -0
  270. package/test/component/Tooltip/Tooltip.animation.spec.tsx +209 -0
  271. package/test/component/Tooltip/Tooltip.content.spec.tsx +128 -0
  272. package/test/component/Tooltip/Tooltip.formatter.spec.tsx +152 -0
  273. package/test/component/Tooltip/Tooltip.includeHidden.spec.tsx +79 -0
  274. package/test/component/Tooltip/Tooltip.multipleDataArrays.spec.tsx +165 -0
  275. package/test/component/Tooltip/Tooltip.offset.spec.tsx +113 -0
  276. package/test/component/Tooltip/Tooltip.state.spec.tsx +74 -0
  277. package/test/component/Tooltip/Tooltip.sync.spec.tsx +639 -0
  278. package/test/component/Tooltip/defaultIndex.spec.tsx +227 -0
  279. package/test/component/Tooltip/graphicalItem.formatter.spec.tsx +138 -0
  280. package/test/component/Tooltip/itemSorter.spec.tsx +2815 -0
  281. package/test/component/Tooltip/tooltipEventType.spec.tsx +344 -0
  282. package/test/component/Tooltip/tooltipMouseHoverSelectors.ts +41 -0
  283. package/test/component/Tooltip/tooltipTestHelpers.tsx +162 -0
  284. package/test/component/Tooltip.defaultIndex.spec.tsx +48 -0
  285. package/test/component/Tooltip.hover.spec.tsx +61 -0
  286. package/test/component/Tooltip.item.spec.tsx +54 -0
  287. package/test/component/Tooltip.keyboard.spec.tsx +51 -0
  288. package/test/component/Tooltip.payload.spec.tsx +1716 -0
  289. package/test/component/Tooltip.touch.spec.tsx +39 -0
  290. package/test/component/Tooltip.visibility.spec.tsx +1889 -0
  291. package/test/component/TooltipBoundingBox.spec.tsx +89 -0
  292. package/test/component/responsiveContainerUtils.spec.ts +205 -0
  293. package/test/container/ClipPath.spec.tsx +602 -0
  294. package/test/container/chartDimensions.spec.tsx +368 -0
  295. package/test/context/chartLayoutContext.spec.tsx +378 -0
  296. package/test/helper/ExpectAxisDomain.tsx +27 -0
  297. package/test/helper/assertNotNull.ts +6 -0
  298. package/test/helper/assertZIndexLayerOrder.ts +19 -0
  299. package/test/helper/createSelectorTestCase.tsx +176 -0
  300. package/test/helper/expectAnimatedPieAngles.ts +100 -0
  301. package/test/helper/expectAnimatedPiePaths.ts +78 -0
  302. package/test/helper/expectAreaCurve.ts +15 -0
  303. package/test/helper/expectAxisTicks.ts +48 -0
  304. package/test/helper/expectBars.ts +54 -0
  305. package/test/helper/expectFunctionReturning.ts +58 -0
  306. package/test/helper/expectLabel.ts +32 -0
  307. package/test/helper/expectLastCalledWith.ts +48 -0
  308. package/test/helper/expectLine.ts +20 -0
  309. package/test/helper/expectPieSectors.ts +80 -0
  310. package/test/helper/expectScale.ts +37 -0
  311. package/test/helper/expectScatterPoints.ts +52 -0
  312. package/test/helper/expectStackGroups.ts +144 -0
  313. package/test/helper/mockAxes.ts +22 -0
  314. package/test/helper/mockGetBoundingClientRect.ts +66 -0
  315. package/test/helper/mockHTMLElementProperty.ts +19 -0
  316. package/test/helper/mockTouchingElement.ts +27 -0
  317. package/test/helper/offsetHelpers.ts +19 -0
  318. package/test/helper/parameterizedTestCases.tsx +99 -0
  319. package/test/helper/produceState.ts +32 -0
  320. package/test/helper/selectorTestHelpers.tsx +63 -0
  321. package/test/helper/trim.spec.ts +35 -0
  322. package/test/helper/trim.ts +11 -0
  323. package/test/hooks/useActiveTooltipDataPoints.spec.tsx +358 -0
  324. package/test/hooks/useAxisDomain.spec.tsx +361 -0
  325. package/test/hooks/useAxisScale.spec.tsx +283 -0
  326. package/test/hooks/useAxisTicks.spec.tsx +130 -0
  327. package/test/hooks/useOffset.spec.tsx +248 -0
  328. package/test/hooks/useTooltipStateHooks.spec.tsx +109 -0
  329. package/test/polar/Pie/Pie-TwoLevelPieChart.spec.tsx +135 -0
  330. package/test/polar/Pie/Pie.spec.tsx +784 -0
  331. package/test/polar/Pie/Pie.typed.spec.tsx +78 -0
  332. package/test/polar/Pie.animation.spec.tsx +529 -0
  333. package/test/polar/PieWithLegend.animation.spec.tsx +142 -0
  334. package/test/polar/PolarAngleAxis/PolarAngleAxis.events.spec.tsx +76 -0
  335. package/test/polar/PolarAngleAxis/PolarAngleAxis.spec.tsx +2079 -0
  336. package/test/polar/PolarAngleAxis/PolarAngleAxis.typed.spec.tsx +102 -0
  337. package/test/polar/PolarAngleAxis.render.spec.tsx +79 -0
  338. package/test/polar/PolarGrid.render.spec.tsx +75 -0
  339. package/test/polar/PolarGrid.spec.tsx +918 -0
  340. package/test/polar/PolarLegendPerRow.render.spec.tsx +85 -0
  341. package/test/polar/PolarRadiusAxis.events.spec.tsx +65 -0
  342. package/test/polar/PolarRadiusAxis.render.spec.tsx +52 -0
  343. package/test/polar/PolarRadiusAxis.spec.tsx +991 -0
  344. package/test/polar/PolarRadiusAxis.typed.spec.tsx +84 -0
  345. package/test/polar/PolarTooltipLegend.render.spec.tsx +80 -0
  346. package/test/polar/Radar.animation.spec.tsx +570 -0
  347. package/test/polar/Radar.render.spec.tsx +71 -0
  348. package/test/polar/Radar.spec.tsx +265 -0
  349. package/test/polar/Radar.typed.spec.tsx +119 -0
  350. package/test/polar/RadialBar/RadialBar.spec.tsx +1521 -0
  351. package/test/polar/RadialBar/RadialBar.typed.spec.tsx +132 -0
  352. package/test/polar/RadialBar.animation.spec.tsx +375 -0
  353. package/test/polar/RadialBar.render.spec.tsx +66 -0
  354. package/test/polar/RadialBar.stacked.spec.tsx +57 -0
  355. package/test/setup.ts +84 -0
  356. package/test/shape/ActiveShape.spec.tsx +181 -0
  357. package/test/shape/Cross.spec.tsx +60 -0
  358. package/test/shape/Cross.typed.spec.tsx +26 -0
  359. package/test/shape/Curve.spec.tsx +368 -0
  360. package/test/shape/Curve.typed.spec.tsx +69 -0
  361. package/test/shape/Dot.spec.tsx +73 -0
  362. package/test/shape/Dot.typed.spec.tsx +30 -0
  363. package/test/shape/Polygon.spec.tsx +357 -0
  364. package/test/shape/Polygon.typed.spec.tsx +28 -0
  365. package/test/shape/Rectangle.animation.spec.tsx +451 -0
  366. package/test/shape/Rectangle.spec.tsx +68 -0
  367. package/test/shape/Rectangle.typed.spec.tsx +24 -0
  368. package/test/shape/Sector.spec.tsx +76 -0
  369. package/test/shape/Sector.typed.spec.tsx +24 -0
  370. package/test/shape/Symbols.spec.tsx +43 -0
  371. package/test/shape/Symbols.typed.spec.tsx +24 -0
  372. package/test/shape/Trapezoid.spec.tsx +50 -0
  373. package/test/shape/Trapezoid.typed.spec.tsx +24 -0
  374. package/test/shape/__snapshots__/Cross.spec.tsx.snap +62 -0
  375. package/test/shape/__snapshots__/Curve.spec.tsx.snap +460 -0
  376. package/test/shape/__snapshots__/Polygon.spec.tsx.snap +58 -0
  377. package/test/shape/__snapshots__/Rectangle.spec.tsx.snap +117 -0
  378. package/test/shape/__snapshots__/Sector.spec.tsx.snap +71 -0
  379. package/test/shape/__snapshots__/Trapezoid.spec.tsx.snap +64 -0
  380. package/test/state/chartDataSlice.spec.ts +53 -0
  381. package/test/state/createCollectionActions.spec.ts +87 -0
  382. package/test/state/createSelector.spec.ts +158 -0
  383. package/test/state/externalEventsMiddleware.spec.ts +178 -0
  384. package/test/state/graphicalItemsSlice.spec.ts +92 -0
  385. package/test/state/hooks.spec.tsx +68 -0
  386. package/test/state/legendSlice.spec.ts +44 -0
  387. package/test/state/mouseEventsMiddleware.spec.ts +75 -0
  388. package/test/state/optionsSlice.spec.ts +19 -0
  389. package/test/state/referenceElementsSlice.spec.ts +84 -0
  390. package/test/state/registerInStore.spec.tsx +101 -0
  391. package/test/state/selectors/areaSelectors.spec.tsx +77 -0
  392. package/test/state/selectors/axisSelectors.spec.tsx +1418 -0
  393. package/test/state/selectors/barStackSelectors.spec.tsx +752 -0
  394. package/test/state/selectors/brushSelectors.spec.tsx +30 -0
  395. package/test/state/selectors/cartesianAxisSlice.spec.ts +96 -0
  396. package/test/state/selectors/combineNiceTicks.spec.ts +207 -0
  397. package/test/state/selectors/combiners/combineActiveTooltipIndex.spec.ts +61 -0
  398. package/test/state/selectors/combiners/combineAllBarPositions.spec.ts +39 -0
  399. package/test/state/selectors/combiners/combineConfiguredScale.spec.ts +56 -0
  400. package/test/state/selectors/combiners/combineDisplayedStackedData.spec.ts +123 -0
  401. package/test/state/selectors/combiners/combineRealScaleType.spec.ts +80 -0
  402. package/test/state/selectors/containerSelectors.spec.tsx +168 -0
  403. package/test/state/selectors/dataSelectors.spec.tsx +136 -0
  404. package/test/state/selectors/legendSelectors.spec.tsx +113 -0
  405. package/test/state/selectors/lineSelectors.spec.tsx +60 -0
  406. package/test/state/selectors/pieSelectors.spec.tsx +72 -0
  407. package/test/state/selectors/radarSelectors.spec.tsx +496 -0
  408. package/test/state/selectors/rootPropsSelectors.spec.tsx +169 -0
  409. package/test/state/selectors/scatterSelectors.spec.tsx +47 -0
  410. package/test/state/selectors/selectActiveTooltipIndex.spec.tsx +234 -0
  411. package/test/state/selectors/selectAllAxes.spec.tsx +18 -0
  412. package/test/state/selectors/selectAxisDomain.spec.tsx +21 -0
  413. package/test/state/selectors/selectAxisDomainIncludingNiceTicks.spec.tsx +19 -0
  414. package/test/state/selectors/selectAxisRangeWithReverse.spec.tsx +22 -0
  415. package/test/state/selectors/selectAxisScale.spec.tsx +91 -0
  416. package/test/state/selectors/selectBarRectangles.stackOffset.spec.tsx +503 -0
  417. package/test/state/selectors/selectBaseAxis.spec.tsx +56 -0
  418. package/test/state/selectors/selectCartesianItemsSettings.spec.tsx +57 -0
  419. package/test/state/selectors/selectChartOffset.spec.tsx +26 -0
  420. package/test/state/selectors/selectDisplayedData.spec.tsx +282 -0
  421. package/test/state/selectors/selectIsTooltipActive.spec.tsx +231 -0
  422. package/test/state/selectors/selectNumericalDomain.spec.tsx +21 -0
  423. package/test/state/selectors/selectRealScaleType.spec.tsx +19 -0
  424. package/test/state/selectors/selectStackGroups.spec.tsx +322 -0
  425. package/test/state/selectors/selectXAxisPosition.spec.tsx +22 -0
  426. package/test/state/selectors/selectYAxisPosition.spec.tsx +22 -0
  427. package/test/state/selectors/selectorMemoization.spec.tsx +136 -0
  428. package/test/state/selectors/selectors.spec.tsx +1613 -0
  429. package/test/state/throttling.spec.ts +200 -0
  430. package/test/state/zIndexSlice.spec.ts +85 -0
  431. package/test/synchronisation/useChartSynchronisation.spec.tsx +225 -0
  432. package/test/util/BarUtils.spec.ts +39 -0
  433. package/test/util/CartesianUtils/CartesianUtils.spec.ts +261 -0
  434. package/test/util/CartesianUtils/rectWithPoints.spec.ts +48 -0
  435. package/test/util/ChartUtils/ChartUtils.spec.ts +491 -0
  436. package/test/util/ChartUtils/appendOffsetOfLegend.spec.ts +136 -0
  437. package/test/util/ChartUtils/appendOffsetOfLegend.spec.tsx +133 -0
  438. package/test/util/ChartUtils/getCateCoordinateOfLine.spec.ts +97 -0
  439. package/test/util/ChartUtils/getStackedData.spec.ts +416 -0
  440. package/test/util/ChartUtils/truncateByDomain.spec.ts +70 -0
  441. package/test/util/DataUtils.spec.ts +385 -0
  442. package/test/util/DomUtils.spec.tsx +117 -0
  443. package/test/util/FunnelUtils.spec.tsx +70 -0
  444. package/test/util/Global.spec.ts +11 -0
  445. package/test/util/LRUCache.spec.ts +81 -0
  446. package/test/util/LogUtils.spec.ts +45 -0
  447. package/test/util/PolarUtils.spec.ts +66 -0
  448. package/test/util/ReduceCssCalcPrototype.spec.ts +141 -0
  449. package/test/util/ShallowEqual.spec.ts +102 -0
  450. package/test/util/TickUtils.spec.ts +29 -0
  451. package/test/util/createChartHelpers.spec.tsx +210 -0
  452. package/test/util/cursor/getCursorPoints.spec.ts +136 -0
  453. package/test/util/cursor/getCursorRectangle.spec.ts +50 -0
  454. package/test/util/cursor/getRadialCursorPoints.spec.ts +36 -0
  455. package/test/util/errorValue.spec.ts +69 -0
  456. package/test/util/getEveryNth.spec.ts +39 -0
  457. package/test/util/getRadiusAndStrokeWidthFromDot.spec.ts +51 -0
  458. package/test/util/getRelativeCoordinate.spec.ts +250 -0
  459. package/test/util/getSliced.spec.ts +45 -0
  460. package/test/util/isDomainSpecifiedByUser.spec.ts +207 -0
  461. package/test/util/isWellBehavedNumber.spec.ts +54 -0
  462. package/test/util/payload/getUniqPayload.spec.ts +56 -0
  463. package/test/util/propsAreEqual.spec.ts +75 -0
  464. package/test/util/round.spec.ts +112 -0
  465. package/test/util/scale/arithmetic.spec.ts +61 -0
  466. package/test/util/scale/createCategoricalInverse.spec.ts +84 -0
  467. package/test/util/scale/getNiceTickValues.spec.ts +421 -0
  468. package/test/util/scale/getTickValuesFixedDomain.spec.ts +155 -0
  469. package/test/util/svgPropertiesAndEvents.spec.tsx +206 -0
  470. package/test/util/svgPropertiesNoEvents.spec.tsx +228 -0
  471. package/test/util/tooltip/translate.spec.ts +396 -0
  472. package/test/util/useAnimationId.spec.tsx +59 -0
  473. package/test/util/useElementOffset.spec.tsx +173 -0
  474. package/test/util/usePrefersReducedMotion.spec.ts +54 -0
  475. package/test/util/useUniqueId.spec.ts +99 -0
  476. package/test/utils/diagnostics-allowlist.ts +18 -0
  477. package/test/utils/diagnostics.ts +58 -0
  478. package/test/zIndex/AllZIndexPortals.spec.tsx +83 -0
  479. package/test/zIndex/DefaultZIndexes.spec.ts +80 -0
  480. package/test/zIndex/DynamicZIndex.spec.tsx +102 -0
  481. package/test/zIndex/ZIndexLayer.portalOwner.spec.tsx +125 -0
  482. package/test/zIndex/componentZIndex.spec.tsx +255 -0
  483. package/test/zIndex/getZIndexFromUnknown.spec.ts +51 -0
  484. package/test/zIndex/multiChartZIndexIsolation.spec.tsx +90 -0
  485. package/test/zIndex/zIndexSelectors.spec.ts +172 -0
  486. package/test-results/.last-run.json +4 -0
  487. package/tsconfig.json +11 -0
  488. package/src/util/DirectPortal.tsx +0 -107
@@ -5,8 +5,8 @@
5
5
  // ResponsiveContainer-context sizing, and the tooltip/legend portal contexts.
6
6
  // Renders the `recharts-wrapper` div + `ReportChartSize` (which drives the
7
7
  // Surface dimensions) + children.
8
- import { batch, createMemo, createSignal, onCleanup, untrack } from "solid-js";
9
- import type { JSX } from "solid-js";
8
+ import { createMemo, createSignal, flush, onCleanup, untrack } from "solid-js";
9
+ import type { JSX } from "@solidjs/web";
10
10
  import { ReportChartSize } from "../context/chartLayoutContext";
11
11
  import { TooltipPortalContext } from "../context/tooltipPortalContext";
12
12
  import { LegendPortalContext } from "../context/legendPortalContext";
@@ -95,8 +95,12 @@ export const RechartsWrapper = (props: RechartsWrapperProps): JSX.Element => {
95
95
  // the same node is passed to setTooltipPortal). The ref sets a signal that the
96
96
  // TooltipPortalContext exposes reactively, then forwards to the caller's ref.
97
97
  const [tooltipPortal, setTooltipPortal] = createSignal<HTMLElement | null>(null);
98
- const [measuredWidth, setMeasuredWidth] = createSignal<number | undefined>(undefined);
99
- const [measuredHeight, setMeasuredHeight] = createSignal<number | undefined>(undefined);
98
+ const [measuredWidth, setMeasuredWidth] = createSignal<number | undefined>(undefined, {
99
+ ownedWrite: true,
100
+ });
101
+ const [measuredHeight, setMeasuredHeight] = createSignal<number | undefined>(undefined, {
102
+ ownedWrite: true,
103
+ });
100
104
  let wrapperEl: HTMLDivElement | null = null;
101
105
  let resizeObserver: ResizeObserver | null = null;
102
106
 
@@ -137,10 +141,9 @@ export const RechartsWrapper = (props: RechartsWrapperProps): JSX.Element => {
137
141
  if (untrack(measuredWidth) === roundedWidth && untrack(measuredHeight) === roundedHeight) {
138
142
  return;
139
143
  }
140
- batch(() => {
141
- setMeasuredWidth(roundedWidth);
142
- setMeasuredHeight(roundedHeight);
143
- });
144
+ setMeasuredWidth(roundedWidth);
145
+ setMeasuredHeight(roundedHeight);
146
+ flush();
144
147
  };
145
148
 
146
149
  const measureOnce = (el: HTMLDivElement): void => {
@@ -274,6 +277,7 @@ export const RechartsWrapper = (props: RechartsWrapperProps): JSX.Element => {
274
277
 
275
278
  const handleMouseLeave = (event: MouseEvent & { currentTarget: HTMLDivElement }): void => {
276
279
  store?.actions.tooltip.mouseLeaveChart();
280
+ flush();
277
281
  if (store != null) {
278
282
  dispatchExternalMouseHandler(props.onMouseLeave, event);
279
283
  }
@@ -296,11 +300,13 @@ export const RechartsWrapper = (props: RechartsWrapperProps): JSX.Element => {
296
300
  const related = event.relatedTarget;
297
301
  if (related == null || !(related instanceof Node) || !el.contains(related)) {
298
302
  store?.actions.tooltip.mouseLeaveChart();
303
+ flush();
299
304
  }
300
305
  };
301
306
 
302
307
  const handleNativeMouseLeave = (): void => {
303
308
  store?.actions.tooltip.mouseLeaveChart();
309
+ flush();
304
310
  };
305
311
 
306
312
  const attachWrapperListeners = (el: HTMLDivElement): void => {
@@ -333,6 +339,10 @@ export const RechartsWrapper = (props: RechartsWrapperProps): JSX.Element => {
333
339
  clientY: event.clientY,
334
340
  currentTarget: event.currentTarget,
335
341
  });
342
+ // Solid 2.0 defers store propagation to a flush boundary; the external
343
+ // handler (dispatchExternalEvent) reads store.state synchronously, so flush
344
+ // the click-driven active-tooltip write first or the handler sees stale state.
345
+ flush();
336
346
  dispatchExternalMouseHandler(props.onClick, event);
337
347
  };
338
348
 
@@ -441,11 +451,11 @@ export const RechartsWrapper = (props: RechartsWrapperProps): JSX.Element => {
441
451
  };
442
452
 
443
453
  return (
444
- <TooltipPortalContext.Provider value={tooltipPortal}>
445
- <LegendPortalContext.Provider value={tooltipPortal}>
454
+ <TooltipPortalContext value={tooltipPortal}>
455
+ <LegendPortalContext value={tooltipPortal}>
446
456
  <ReportChartSize width={reportedWidth()} height={reportedHeight()} />
447
457
  <div
448
- class={["recharts-wrapper", props.class].filter(Boolean).join(" ")}
458
+ class={["recharts-wrapper", props.class]}
449
459
  style={wrapperStyle()}
450
460
  ref={(el) => {
451
461
  setWrapperRef(el);
@@ -466,11 +476,11 @@ export const RechartsWrapper = (props: RechartsWrapperProps): JSX.Element => {
466
476
  onKeyDown={handleKeyDown}
467
477
  onFocus={onFocus}
468
478
  onBlur={onBlur}
469
- tabIndex={0}
479
+ tabindex={0}
470
480
  >
471
481
  {props.children}
472
482
  </div>
473
- </LegendPortalContext.Provider>
474
- </TooltipPortalContext.Provider>
483
+ </LegendPortalContext>
484
+ </TooltipPortalContext>
475
485
  );
476
486
  };
@@ -18,8 +18,8 @@
18
18
  // through getValueByDataKey in the payload searcher (reference parity).
19
19
  // NON-GAPS: the reference Sankey has NO animation and hardcodes responsive={false}
20
20
  // on its wrapper (ResponsiveContainer sizing flows via the wrapper context).
21
- import { children, createMemo, For, Show, mergeProps, createEffect, on } from "solid-js";
22
- import type { JSX } from "solid-js";
21
+ import { createEffect, createMemo, For, merge, Show } from "solid-js";
22
+ import type { JSX } from "@solidjs/web";
23
23
  import { Surface } from "../container/Surface";
24
24
  import { Layer } from "../container/Layer";
25
25
  import { Rectangle } from "../shape/Rectangle";
@@ -767,8 +767,7 @@ const sankeyOptions: ChartOptions = {
767
767
 
768
768
  const SankeyImpl = (props: SankeyProps & { id: string }): JSX.Element => {
769
769
  const store = useAppStore();
770
- const merged = mergeProps(sankeyDefaultProps, props);
771
- const resolvedChildren = children(() => props.children);
770
+ const merged = merge(sankeyDefaultProps, props);
772
771
  const width = useChartWidth();
773
772
  const height = useChartHeight();
774
773
 
@@ -809,10 +808,8 @@ const SankeyImpl = (props: SankeyProps & { id: string }): JSX.Element => {
809
808
 
810
809
  // Publish the computed data so the tooltip searcher can resolve node-/link-N.
811
810
  createEffect(
812
- on(
813
- () => ({ nodes: computed().nodes, links: computed().links }),
814
- (cd) => store?.actions.chartData.setComputedData(cd),
815
- ),
811
+ () => ({ nodes: computed().nodes, links: computed().links }),
812
+ (cd) => store?.actions.chartData.setComputedData(cd),
816
813
  );
817
814
 
818
815
  const dispatchEnter = (index: TooltipIndex, coord: Coordinate): void => {
@@ -959,7 +956,7 @@ const SankeyImpl = (props: SankeyProps & { id: string }): JSX.Element => {
959
956
  </Layer>
960
957
  </Layer>
961
958
  <SetTooltipEntrySettings tooltipEntrySettings={tooltipConfig()} />
962
- {resolvedChildren()}
959
+ {merged.children}
963
960
  </Surface>
964
961
  )}
965
962
  </Show>
@@ -1,6 +1,6 @@
1
1
  // Ported from recharts 3.8.1 src/chart/ScatterChart.tsx (commit 7a23854).
2
2
  // `forwardRef` → `ref` prop; thin user-facing wrapper over CartesianChart.
3
- import type { JSX } from "solid-js";
3
+ import type { JSX } from "@solidjs/web";
4
4
  import { arrayTooltipSearcher } from "../state/optionsSlice";
5
5
  import { CartesianChart } from "./CartesianChart";
6
6
  import { CartesianChartProps, TooltipEventType } from "../util/types";
@@ -12,8 +12,8 @@
12
12
  // NON-GAP: `responsive` defaults to false in the reference too, and
13
13
  // ResponsiveContainer sizing flows via the wrapper context.
14
14
  // DEFERRED: event throttling nuances.
15
- import { children, createMemo, For, Show, mergeProps } from "solid-js";
16
- import type { JSX } from "solid-js";
15
+ import { createMemo, For, merge, Show } from "solid-js";
16
+ import type { JSX } from "@solidjs/web";
17
17
  import { scaleLinear } from "d3-scale";
18
18
  import { Surface } from "../container/Surface";
19
19
  import { Layer } from "../container/Layer";
@@ -166,8 +166,7 @@ const SunburstChartImpl = (
166
166
  props: Required<Pick<SunburstChartProps, "data">> & SunburstChartProps & { id: string },
167
167
  ): JSX.Element => {
168
168
  const store = useAppStore();
169
- const merged = mergeProps(sunburstDefaultProps, props);
170
- const resolvedChildren = children(() => props.children);
169
+ const merged = merge(sunburstDefaultProps, props);
171
170
  const width = useChartWidth();
172
171
  const height = useChartHeight();
173
172
 
@@ -349,7 +348,7 @@ const SunburstChartImpl = (
349
348
  </For>
350
349
  </Layer>
351
350
  <SetTooltipEntrySettings tooltipEntrySettings={tooltipConfig()} />
352
- {resolvedChildren()}
351
+ {merged.children}
353
352
  </Surface>
354
353
  )}
355
354
  </Show>
@@ -18,8 +18,8 @@
18
18
  // works via the wrapper context (the reference itself hardcodes responsive={false}
19
19
  // on its wrapper). DEFERRED: the element form of `content` & `nestIndexContent`,
20
20
  // per-node name-fit text sizing nuances.
21
- import { children, createMemo, createSignal, For, Show, mergeProps } from "solid-js";
22
- import type { JSX } from "solid-js";
21
+ import { createMemo, createSignal, For, merge, Show } from "solid-js";
22
+ import type { JSX } from "@solidjs/web";
23
23
  import { Surface } from "../container/Surface";
24
24
  import { Layer } from "../container/Layer";
25
25
  import { Rectangle } from "../shape/Rectangle";
@@ -484,8 +484,7 @@ const flattenNodes = (node: TreemapNode | null): TreemapNode[] => {
484
484
 
485
485
  const TreemapImpl = (props: TreemapProps & { id: string }): JSX.Element => {
486
486
  const store = useAppStore();
487
- const merged = mergeProps(treemapDefaultProps, props);
488
- const resolvedChildren = children(() => props.children);
487
+ const merged = merge(treemapDefaultProps, props);
489
488
  const width = useChartWidth();
490
489
  const height = useChartHeight();
491
490
 
@@ -814,7 +813,7 @@ const TreemapImpl = (props: TreemapProps & { id: string }): JSX.Element => {
814
813
  </For>
815
814
  </Layer>
816
815
  <SetTooltipEntrySettings tooltipEntrySettings={tooltipConfig()} />
817
- {resolvedChildren()}
816
+ {merged.children}
818
817
  </Surface>
819
818
  {merged.type === "nest" ? (
820
819
  <div
@@ -3,7 +3,7 @@
3
3
  // JSX is built in the parent's JSX scope via `renderActivePointsLayerFromState`.
4
4
  // Mounting a child component that subscribes to tooltip selectors trips STRICT_READ.
5
5
  // ZIndexLayer deferred.
6
- import type { JSX } from "solid-js";
6
+ import type { JSX } from "@solidjs/web";
7
7
  import { isNullish } from "../util/DataUtils";
8
8
  import type { ActiveDotProps, ActiveDotType, DataKey } from "../util/types";
9
9
  import { svgPropertiesNoEventsFromUnknownKeepCase } from "../util/svgPropertiesNoEvents";
@@ -77,6 +77,9 @@ function renderActiveDot(activeDot: ActiveDotType, dotProps: ActiveDotProps): JS
77
77
  if (typeof activeDot === "function") {
78
78
  return activeDot(dotProps);
79
79
  }
80
+ if (typeof activeDot === "object" && activeDot != null && "type" in activeDot) {
81
+ return activeDot;
82
+ }
80
83
  // Default <Dot> uses <Show> internally, which trips STRICT_READ when this
81
84
  // layer mounts during tooltip effect-apply — render the circle directly instead.
82
85
  // An object-form activeDot's `class`/`className` is dropped by the svg-prop
@@ -87,7 +90,7 @@ function renderActiveDot(activeDot: ActiveDotType, dotProps: ActiveDotProps): JS
87
90
  : undefined;
88
91
  return (
89
92
  <circle
90
- class={["recharts-dot", customClass].filter(Boolean).join(" ")}
93
+ class={["recharts-dot", customClass]}
91
94
  cx={dotProps.cx}
92
95
  cy={dotProps.cy}
93
96
  r={dotProps.r}
@@ -117,10 +120,7 @@ export function renderActivePointsLayerFromState(
117
120
  ...svgPropertiesNoEventsFromUnknownKeepCase(args.activeDot),
118
121
  };
119
122
  return (
120
- <g
121
- class={["recharts-layer", "recharts-active-dot"].filter(Boolean).join(" ")}
122
- clip-path={args.clipPath}
123
- >
123
+ <g class={["recharts-layer", "recharts-active-dot"]} clip-path={args.clipPath}>
124
124
  {renderActiveDot(args.activeDot, dotProps)}
125
125
  </g>
126
126
  );
@@ -1,7 +1,6 @@
1
1
  // Ported from recharts 3.8.1 src/component/Cell.tsx (commit 7a23854).
2
- // Deviations: React's broad `SVGProps<SVGElement>` → the merged attribute surface
3
- // of Solid's element-specific SVG intrinsic types (with SVGElement-typed events);
4
- // React's `displayName` is dropped.
2
+ // Deviations: React's `SVGProps<SVGElement>` → Solid's `CamelSvgProps<JSX.SVGAttributes<SVGElement>>`
3
+ // (which already names the class prop `class`); React's `displayName` is dropped.
5
4
  //
6
5
  // The CellReader pattern: recharts extracts cells by walking the React element
7
6
  // tree (`findAllByType(children, Cell)`). Solid has no element-descriptor tree —
@@ -11,26 +10,9 @@
11
10
  // `collectCells`. Cells render no DOM (the standalone <Cell /> spec asserts this).
12
11
  import { type CamelSvgProps } from "../util/svgPropertiesNoEvents";
13
12
  import { createMemo, type Accessor } from "solid-js";
14
- import type { JSX } from "solid-js";
13
+ import type { JSX } from "@solidjs/web";
15
14
 
16
- type SVGIntrinsicTag = keyof SVGElementTagNameMap & keyof JSX.IntrinsicElements;
17
- type SVGIntrinsicAttributes = JSX.IntrinsicElements[SVGIntrinsicTag];
18
- type KeysOfUnion<T> = T extends T ? keyof T : never;
19
- type ValueOfUnion<T, K extends PropertyKey> = T extends T
20
- ? K extends keyof T
21
- ? T[K]
22
- : never
23
- : never;
24
- type MergedSVGIntrinsicAttributes = {
25
- [K in KeysOfUnion<SVGIntrinsicAttributes>]?: ValueOfUnion<SVGIntrinsicAttributes, K>;
26
- };
27
- type GenericSVGAttributes = Omit<
28
- MergedSVGIntrinsicAttributes,
29
- keyof JSX.DOMAttributes<SVGElement>
30
- > &
31
- JSX.DOMAttributes<SVGElement>;
32
-
33
- export type CellProps = CamelSvgProps<GenericSVGAttributes> & {
15
+ export interface CellProps extends CamelSvgProps<JSX.SVGAttributes<SVGElement>> {
34
16
  /**
35
17
  * The fill color.
36
18
  */
@@ -39,7 +21,7 @@ export type CellProps = CamelSvgProps<GenericSVGAttributes> & {
39
21
  * The stroke color.
40
22
  */
41
23
  stroke?: string;
42
- };
24
+ }
43
25
 
44
26
  /**
45
27
  * Set while a parent collects its <Cell> children (see {@link collectCells}).
@@ -6,12 +6,12 @@
6
6
  // optional SVG-props object (className/styling); a custom cursor ELEMENT
7
7
  // (recharts' `ReactElement` + cloneElement) is PERMANENT-N/A — there is no Solid
8
8
  // equivalent of React.isValidElement/cloneElement. Solid deviations: `clsx` →
9
- // `class={[...].filter(Boolean).join(" ")}`; the connected `Cursor` resolves context then delegates to
9
+ // `class={[...]}`; the connected `Cursor` resolves context then delegates to
10
10
  // `CursorInternal`, which (like recharts) takes fully-resolved props so it can be
11
11
  // rendered standalone in tests; all reactive reads live in a tracking memo that
12
12
  // returns plain shape DATA, so the <Show> children read only plain properties.
13
13
  import { createMemo, Show } from "solid-js";
14
- import type { JSX } from "solid-js";
14
+ import type { JSX } from "@solidjs/web";
15
15
  import {
16
16
  ChartOffsetInternal,
17
17
  Coordinate,
@@ -77,7 +77,7 @@ type CursorShape =
77
77
  /**
78
78
  * The shared cursor class, with an optional extra className from an object-form
79
79
  * `cursor` appended (the shape components type `class` as a plain string, so this
80
- * is joined rather than passed as a `class={[...].filter(Boolean).join(" ")}` array).
80
+ * is joined rather than passed as a `class={[...]}` array).
81
81
  */
82
82
  function cursorClass(cursor: CursorDefinition): string {
83
83
  if (typeof cursor === "object" && cursor != null && typeof cursor.className === "string") {
@@ -3,12 +3,12 @@
3
3
  // TYPES + component. The legend slice/selectors need these types; the component
4
4
  // renders the legend item list. Deviations: `ReactElement`→`Element`/dropped,
5
5
  // `DataKey<any>`→`DataKey<unknown>`, `ReactNode`→`Element`, `CSSProperties`→
6
- // `JSX.CSSProperties`, `className`→`class`, clsx→`class={[...].filter(Boolean).join(" ")}`; `LegendItemSorter`
6
+ // `JSX.CSSProperties`, `className`→`class`, clsx→`class={[...]}`; `LegendItemSorter`
7
7
  // is co-located here (reference keeps it in Legend.tsx) so the slice can import it
8
8
  // without depending on the Legend component. `adaptEventsOfChild` events deferred.
9
- import { For, Show, mergeProps } from "solid-js";
10
- type Element = JSX.Element;
11
- import type { JSX } from "solid-js";
9
+ import { For, Show, merge } from "solid-js";
10
+ import type { Element } from "solid-js";
11
+ import type { JSX } from "@solidjs/web";
12
12
  import { DataKey, LegendType, MousePointer } from "../util/types";
13
13
  import { Surface } from "../container/Surface";
14
14
  import { Symbols } from "../shape/Symbols";
@@ -134,7 +134,7 @@ const LegendIcon = (props: {
134
134
  * `content` prop to customize.
135
135
  */
136
136
  export const DefaultLegendContent = (props: Props): JSX.Element => {
137
- const merged = mergeProps(defaultLegendContentDefaultProps, props);
137
+ const merged = merge(defaultLegendContentDefaultProps, props);
138
138
 
139
139
  const itemStyle = (): JSX.CSSProperties => ({
140
140
  display: merged.layout === "horizontal" ? "inline-block" : "block",
@@ -173,9 +173,7 @@ export const DefaultLegendContent = (props: Props): JSX.Element => {
173
173
  "recharts-legend-item",
174
174
  `legend-item-${i()}`,
175
175
  entry.inactive ? "inactive" : undefined,
176
- ]
177
- .filter(Boolean)
178
- .join(" ")}
176
+ ]}
179
177
  style={itemStyle()}
180
178
  onClick={(event) => merged.onClick?.(entry, i(), event)}
181
179
  onMouseEnter={(event) => merged.onMouseEnter?.(entry, i(), event)}
@@ -5,11 +5,11 @@
5
5
  // (the per-entry `formatter` is populated from the graphical items' `formatter`
6
6
  // prop and wins over the prop-level one, per v3.9.1); `any` → `unknown`,
7
7
  // `ReactNode` → `Element`, `CSSProperties` → `JSX.CSSProperties`; `className` →
8
- // `class`, `clsx(...)` → `class={[...].filter(Boolean).join(" ")}` array form (no clsx dep); `React.isValid-
8
+ // `class`, `clsx(...)` → `class={[...]}` array form (no clsx dep); `React.isValid-
9
9
  // Element` check dropped (Solid renders an Element or a string uniformly).
10
- import { For, Show, createMemo, mergeProps } from "solid-js";
11
- type Element = JSX.Element;
12
- import type { JSX } from "solid-js";
10
+ import { For, Show, createMemo, merge } from "solid-js";
11
+ import type { Element } from "solid-js";
12
+ import type { JSX } from "@solidjs/web";
13
13
  import { isNullish, isNumOrStr } from "../util/DataUtils";
14
14
  import { DataKey, TooltipType } from "../util/types";
15
15
  import type { TooltipPayload, TooltipPayloadEntry } from "../state/tooltipSlice";
@@ -18,10 +18,9 @@ export type ValueType = number | string | ReadonlyArray<number | string>;
18
18
  export type NameType = number | string;
19
19
 
20
20
  function defaultFormatter(value: ValueType | undefined): Element {
21
- if (value !== undefined && typeof value !== "string" && typeof value !== "number") {
22
- return isNumOrStr(value[0]) && isNumOrStr(value[1]) ? value.join(" ~ ") : [...value];
23
- }
24
- return value;
21
+ return Array.isArray(value) && isNumOrStr(value[0]) && isNumOrStr(value[1])
22
+ ? value.join(" ~ ")
23
+ : value;
25
24
  }
26
25
 
27
26
  export type Formatter<TValue extends ValueType = ValueType, TName extends NameType = NameType> = (
@@ -152,7 +151,7 @@ function lodashLikeSortBy(
152
151
  * `content` prop to customize.
153
152
  */
154
153
  export const DefaultTooltipContent = (props: Props): JSX.Element => {
155
- const merged = mergeProps(defaultDefaultTooltipContentProps, props);
154
+ const merged = merge(defaultDefaultTooltipContentProps, props);
156
155
 
157
156
  const sortedPayload = createMemo<TooltipPayload>(() => {
158
157
  const payload = props.payload;
@@ -228,15 +227,12 @@ export const DefaultTooltipContent = (props: Props): JSX.Element => {
228
227
 
229
228
  return (
230
229
  <div
231
- class={["recharts-default-tooltip", props.wrapperClass].filter(Boolean).join(" ")}
230
+ class={["recharts-default-tooltip", props.wrapperClass]}
232
231
  style={finalStyle()}
233
232
  role={merged.accessibilityLayer ? "status" : undefined}
234
233
  aria-live={merged.accessibilityLayer ? "assertive" : undefined}
235
234
  >
236
- <p
237
- class={["recharts-tooltip-label", props.labelClass].filter(Boolean).join(" ")}
238
- style={finalLabelStyle()}
239
- >
235
+ <p class={["recharts-tooltip-label", props.labelClass]} style={finalLabelStyle()}>
240
236
  {finalLabel()}
241
237
  </p>
242
238
  <Show when={sortedPayload().length > 0}>
@@ -7,8 +7,8 @@
7
7
  // the default <Dot> (recharts does this via svgPropertiesAndEventsFromUnknown).
8
8
  // - `ZIndexLayer` wrapper deferred (zIndex layering not ported) → plain <Layer>.
9
9
  // - `clsx` → class string composed inline; `className` → `class`.
10
- import { createMemo, Index, Show, splitProps } from "solid-js";
11
- import type { JSX } from "solid-js";
10
+ import { createMemo, For, omit, Show } from "solid-js";
11
+ import type { JSX } from "@solidjs/web";
12
12
  import { Dot, type DotProps } from "../shape/Dot";
13
13
  import { Layer } from "../container/Layer";
14
14
  import { DataKey, DotItemDotProps, DotPoint, DotType } from "../util/types";
@@ -92,7 +92,7 @@ function DotRenderer(props: DotRendererProps): JSX.Element {
92
92
  renderFn()?.(dotProps())
93
93
  ) : (
94
94
  <Dot
95
- {...splitProps(dotProps(), ["index", "dataKey", "value", "payload", "points"])[1]}
95
+ {...omit(dotProps(), "index", "dataKey", "value", "payload", "points")}
96
96
  class={props.dotClass}
97
97
  />
98
98
  )}
@@ -113,7 +113,7 @@ export function Dots(props: DotsProps): JSX.Element {
113
113
  array with fresh point objects every frame; reference-keyed <For>
114
114
  would dispose+recreate every dot's DOM node per frame. Index-keying
115
115
  reuses the rows and only updates cx/cy reactively. */}
116
- <Index each={props.points}>
116
+ <For each={props.points} keyed={false}>
117
117
  {(entry, i) => (
118
118
  <DotRenderer
119
119
  entry={entry()}
@@ -125,7 +125,7 @@ export function Dots(props: DotsProps): JSX.Element {
125
125
  points={props.points}
126
126
  />
127
127
  )}
128
- </Index>
128
+ </For>
129
129
  </Layer>
130
130
  </Show>
131
131
  );
@@ -16,9 +16,9 @@
16
16
  // - context value carries an `Accessor<TrapezoidViewBox>` (Solid context is fixed
17
17
  // at provide-time; the accessor keeps the box reactive).
18
18
  import { type CamelSvgProps } from "../util/svgPropertiesNoEvents";
19
- import { createContext, createMemo, Show, useContext, mergeProps, splitProps } from "solid-js";
19
+ import { createContext, createMemo, merge, omit, Show, useContext } from "solid-js";
20
20
  import type { Accessor } from "solid-js";
21
- import type { JSX } from "solid-js";
21
+ import type { JSX } from "@solidjs/web";
22
22
  import { type RenderableText, Text } from "./Text";
23
23
  import { useUniqueId } from "../util/useUniqueId";
24
24
  import { isNullish, isNumber, isNumOrStr } from "../util/DataUtils";
@@ -109,11 +109,7 @@ export function CartesianLabelContextProvider(
109
109
  width: props.width,
110
110
  height: props.height,
111
111
  }));
112
- return (
113
- <CartesianLabelContext.Provider value={viewBox}>
114
- {props.children}
115
- </CartesianLabelContext.Provider>
116
- );
112
+ return <CartesianLabelContext value={viewBox}>{props.children}</CartesianLabelContext>;
117
113
  }
118
114
 
119
115
  export function useCartesianLabelContext(): Accessor<TrapezoidViewBox | undefined> {
@@ -145,7 +141,7 @@ export function PolarLabelContextProvider(
145
141
  endAngle: props.endAngle,
146
142
  clockWise: props.clockWise,
147
143
  }));
148
- return <PolarLabelContext.Provider value={viewBox}>{props.children}</PolarLabelContext.Provider>;
144
+ return <PolarLabelContext value={viewBox}>{props.children}</PolarLabelContext>;
149
145
  }
150
146
 
151
147
  export function usePolarLabelContext(): Accessor<PolarViewBoxRequired | undefined> {
@@ -227,7 +223,7 @@ const getDeltaAngle = (startAngle: number, endAngle: number): number => {
227
223
  * @consumes CartesianLabelContext
228
224
  */
229
225
  export function Label(outerProps: Props): JSX.Element {
230
- const props = mergeProps(defaultLabelProps, outerProps);
226
+ const props = merge(defaultLabelProps, outerProps);
231
227
  const cartesianViewBox = useCartesianLabelContext();
232
228
  const polarLabelContext = usePolarLabelContext();
233
229
  const generatedRadialPathId = useUniqueId("recharts-radial-line");
@@ -256,7 +252,8 @@ export function Label(outerProps: Props): JSX.Element {
256
252
 
257
253
  const textSvgProps = createMemo(() =>
258
254
  svgPropertiesAndEvents(
259
- splitProps(props, [
255
+ omit(
256
+ props,
260
257
  "content",
261
258
  "viewBox",
262
259
  "parentViewBox",
@@ -270,7 +267,7 @@ export function Label(outerProps: Props): JSX.Element {
270
267
  "index",
271
268
  "id",
272
269
  "class",
273
- ])[1],
270
+ ),
274
271
  ),
275
272
  );
276
273
 
@@ -392,7 +389,7 @@ export function Label(outerProps: Props): JSX.Element {
392
389
  if (vb == null || typeof content !== "function") {
393
390
  return undefined;
394
391
  }
395
- return { content, args: splitProps({ ...props, viewBox: vb }, ["content"])[1] };
392
+ return { content, args: omit({ ...props, viewBox: vb }, "content") };
396
393
  });
397
394
 
398
395
  // Render the default/polar/radial text labels inline under <Show> (their render
@@ -444,7 +441,7 @@ export function Label(outerProps: Props): JSX.Element {
444
441
  <text
445
442
  {...textSvgProps()}
446
443
  dominant-baseline="central"
447
- class={["recharts-radial-bar-label", props.class].filter(Boolean).join(" ")}
444
+ class={["recharts-radial-bar-label", props.class]}
448
445
  >
449
446
  <defs>
450
447
  <path id={radialPathId()} d={d().path} />
@@ -14,9 +14,9 @@
14
14
  // - element `content` (React.cloneElement) DROPPED; function `content` kept.
15
15
  // - ZIndexLayer / `fill`-passthrough deferred (Label forwards no per-label fill).
16
16
  import { type CamelSvgProps } from "../util/svgPropertiesNoEvents";
17
- import { createContext, createMemo, For, Show, useContext, splitProps } from "solid-js";
17
+ import { createContext, createMemo, For, omit, Show, useContext } from "solid-js";
18
18
  import type { Accessor } from "solid-js";
19
- import type { JSX } from "solid-js";
19
+ import type { JSX } from "@solidjs/web";
20
20
  import {
21
21
  type LabelContentType,
22
22
  type LabelFormatter,
@@ -135,9 +135,7 @@ export function CartesianLabelListContextProvider(props: {
135
135
  children: JSX.Element;
136
136
  }): JSX.Element {
137
137
  return (
138
- <CartesianLabelListContext.Provider value={props.value}>
139
- {props.children}
140
- </CartesianLabelListContext.Provider>
138
+ <CartesianLabelListContext value={props.value}>{props.children}</CartesianLabelListContext>
141
139
  );
142
140
  }
143
141
 
@@ -149,11 +147,7 @@ export function PolarLabelListContextProvider(props: {
149
147
  value: Accessor<ReadonlyArray<PolarLabelListEntry> | undefined>;
150
148
  children: JSX.Element;
151
149
  }): JSX.Element {
152
- return (
153
- <PolarLabelListContext.Provider value={props.value}>
154
- {props.children}
155
- </PolarLabelListContext.Provider>
156
- );
150
+ return <PolarLabelListContext value={props.value}>{props.children}</PolarLabelListContext>;
157
151
  }
158
152
 
159
153
  /**
@@ -171,7 +165,8 @@ export function LabelList(props: Props): JSX.Element {
171
165
  const list = cartesianData?.() ?? polarData?.();
172
166
  return list != null && list.length > 0 ? list : undefined;
173
167
  });
174
- const others = splitProps(props, [
168
+ const others = omit(
169
+ props,
175
170
  "valueAccessor",
176
171
  "clockWise",
177
172
  "dataKey",
@@ -182,7 +177,7 @@ export function LabelList(props: Props): JSX.Element {
182
177
  "offset",
183
178
  "angle",
184
179
  "formatter",
185
- ])[1];
180
+ );
186
181
 
187
182
  const valueOf = (
188
183
  entry: CartesianLabelListEntry | PolarLabelListEntry,