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
@@ -6,9 +6,8 @@
6
6
  // supported), onBBoxUpdate, React.memo. Solid deviations: createPortal →
7
7
  // `<Portal mount>`; useLayoutEffect dispatches → createEffect; hooks return
8
8
  // accessors; `className`→`class`, React CSSProperties → JSX.CSSProperties.
9
- import { createMemo, Show, mergeProps, createEffect, on } from "solid-js";
10
- import type { JSX } from "solid-js";
11
- import { DirectPortal } from "../util/DirectPortal";
9
+ import { createEffect, createMemo, merge, Show } from "solid-js";
10
+ import { JSX, Portal } from "@solidjs/web";
12
11
  import {
13
12
  ContentType,
14
13
  DefaultLegendContent,
@@ -128,7 +127,7 @@ function getDefaultPosition(
128
127
  }
129
128
 
130
129
  export const Legend = (props: LegendProps): JSX.Element => {
131
- const merged = mergeProps(legendDefaultProps, props);
130
+ const merged = merge(legendDefaultProps, props);
132
131
  const store = useAppStore();
133
132
  const contextPayload = useLegendPayload();
134
133
  const legendPortalFromContext = useLegendPortal();
@@ -139,30 +138,26 @@ export const Legend = (props: LegendProps): JSX.Element => {
139
138
 
140
139
  // Push the legend settings into the store (drives the offset's legend space).
141
140
  createEffect(
142
- on(
143
- () => ({
144
- align: merged.align,
145
- layout: merged.layout,
146
- verticalAlign: merged.verticalAlign,
147
- itemSorter: merged.itemSorter,
148
- }),
149
- (settings) => {
150
- store?.actions.legend.setLegendSettings(settings);
151
- },
152
- ),
141
+ () => ({
142
+ align: merged.align,
143
+ layout: merged.layout,
144
+ verticalAlign: merged.verticalAlign,
145
+ itemSorter: merged.itemSorter,
146
+ }),
147
+ (settings) => {
148
+ store?.actions.legend.setLegendSettings(settings);
149
+ },
153
150
  );
154
151
 
155
152
  // Report the measured size; reset to 0 on cleanup. (When a portal is supplied
156
153
  // from props, nothing needs the size, matching recharts.)
157
154
  createEffect(
158
- on(
159
- () => ({ width: lastBoundingBox().width, height: lastBoundingBox().height }),
160
- (size) => {
161
- if (props.portal == null) {
162
- store?.actions.legend.setLegendSize(size);
163
- }
164
- },
165
- ),
155
+ () => ({ width: lastBoundingBox().width, height: lastBoundingBox().height }),
156
+ (size) => {
157
+ if (props.portal == null) {
158
+ store?.actions.legend.setLegendSize(size);
159
+ }
160
+ },
166
161
  );
167
162
 
168
163
  const portal = (): HTMLElement | null => props.portal ?? legendPortalFromContext();
@@ -172,7 +167,7 @@ export const Legend = (props: LegendProps): JSX.Element => {
172
167
  );
173
168
 
174
169
  // Props handed to a function-form `content`. Built as a plain object (spreading
175
- // the Solid `mergeProps()` proxy leaks a MERGE_SOURCE symbol and doesn't materialize
170
+ // the Solid `merge()` proxy leaks a MERGE_SOURCE symbol and doesn't materialize
176
171
  // keys); reads finalPayload()/chart dims so the enclosing reactive insert re-runs
177
172
  // when the payload populates.
178
173
  const buildContentProps = (): LegendContentProps => {
@@ -247,7 +242,7 @@ export const Legend = (props: LegendProps): JSX.Element => {
247
242
  }
248
243
  >
249
244
  {(mount) => (
250
- <DirectPortal mount={mount()}>
245
+ <Portal mount={mount()}>
251
246
  <div class="recharts-legend-wrapper" style={outerStyle()} ref={updateBoundingBox}>
252
247
  <Show
253
248
  when={typeof merged.content === "function" ? merged.content : null}
@@ -271,7 +266,7 @@ export const Legend = (props: LegendProps): JSX.Element => {
271
266
  {(contentFn) => <>{contentFn()(buildContentProps())}</>}
272
267
  </Show>
273
268
  </div>
274
- </DirectPortal>
269
+ </Portal>
275
270
  )}
276
271
  </Show>
277
272
  );
@@ -3,19 +3,18 @@
3
3
  // prop, and two-arg createEffect. Prop deviation: className -> class.
4
4
  import {
5
5
  Accessor,
6
- batch,
7
6
  createContext,
7
+ createEffect,
8
8
  createMemo,
9
9
  createSignal,
10
+ flush,
11
+ omit,
10
12
  onCleanup,
11
- onMount,
13
+ onSettled,
12
14
  untrack,
13
15
  useContext,
14
- splitProps,
15
- createEffect,
16
- on,
17
16
  } from "solid-js";
18
- import type { JSX } from "solid-js";
17
+ import type { JSX } from "@solidjs/web";
19
18
  import {
20
19
  calculateChartDimensions,
21
20
  defaultResponsiveContainerProps,
@@ -94,9 +93,9 @@ function ResponsiveContainerContextProvider(props: {
94
93
  });
95
94
 
96
95
  return (
97
- <ResponsiveContainerContext.Provider value={size}>
96
+ <ResponsiveContainerContext value={size}>
98
97
  {size() == null ? null : props.children}
99
- </ResponsiveContainerContext.Provider>
98
+ </ResponsiveContainerContext>
100
99
  );
101
100
  }
102
101
 
@@ -182,7 +181,8 @@ function SizeDetectorContainer(props: Props): JSX.Element {
182
181
  // forwarded onto the wrapper div, mirroring recharts' `{...others}` spread.
183
182
  // We omit every prop this component consumes itself so they don't leak onto
184
183
  // the DOM. (`omit` keeps the rest reactive — no destructuring.)
185
- const others = splitProps(props, [
184
+ const others = omit(
185
+ props,
186
186
  "aspect",
187
187
  "width",
188
188
  "height",
@@ -198,7 +198,7 @@ function SizeDetectorContainer(props: Props): JSX.Element {
198
198
  "onResize",
199
199
  "ref",
200
200
  "data-testid",
201
- ])[1];
201
+ );
202
202
  const initialDimension = (): { width: number; height: number } =>
203
203
  props.initialDimension ?? defaultResponsiveContainerProps.initialDimension;
204
204
  const width = (): Percent | number | undefined => props.width;
@@ -217,14 +217,13 @@ function SizeDetectorContainer(props: Props): JSX.Element {
217
217
  if (untrack(containerWidth) === roundedWidth && untrack(containerHeight) === roundedHeight) {
218
218
  return;
219
219
  }
220
- batch(() => {
221
- setContainerWidth(roundedWidth);
222
- setContainerHeight(roundedHeight);
223
- });
220
+ setContainerWidth(roundedWidth);
221
+ setContainerHeight(roundedHeight);
224
222
  };
225
223
 
226
224
  const setContainerSize = (newWidth: number, newHeight: number): void => {
227
225
  writeContainerSize(newWidth, newHeight);
226
+ flush();
228
227
  };
229
228
 
230
229
  let containerEl: HTMLDivElement | undefined;
@@ -241,8 +240,10 @@ function SizeDetectorContainer(props: Props): JSX.Element {
241
240
  // i.e. AFTER the committed DOM is laid out. The ref callback runs at element
242
241
  // creation (possibly before insertion/layout), where getBoundingClientRect()
243
242
  // returns 0x0 and a bogus "width(0) and height(0)" warning fires on every
244
- // mount. Measure after insertion in onMount.
245
- onMount(() => {
243
+ // mount. `onSettled` is the post-layout equivalent. The initial measure must
244
+ // not flush (onSettled is a leaf scope); the write propagates at the next
245
+ // flush boundary, matching React's setState-in-effect timing.
246
+ onSettled(() => {
246
247
  const el = containerEl;
247
248
  if (el == null || typeof ResizeObserver === "undefined") {
248
249
  return;
@@ -291,53 +292,49 @@ function SizeDetectorContainer(props: Props): JSX.Element {
291
292
  ]);
292
293
 
293
294
  createEffect(
294
- on(
295
- () => props.aspect,
296
- (aspect) => {
297
- warn(!aspect || aspect > 0, "The aspect(%s) must be greater than zero.", aspect);
298
- },
299
- ),
295
+ () => props.aspect,
296
+ (aspect) => {
297
+ warn(!aspect || aspect > 0, "The aspect(%s) must be greater than zero.", aspect);
298
+ },
300
299
  );
301
300
 
302
301
  createEffect(
303
- on(
304
- () => ({
305
- containerWidth: containerWidth(),
306
- containerHeight: containerHeight(),
307
- calculatedWidth: calculated().calculatedWidth,
308
- calculatedHeight: calculated().calculatedHeight,
309
- width: width(),
310
- height: height(),
311
- minWidth: minWidth(),
312
- minHeight: props.minHeight,
313
- aspect: props.aspect,
314
- }),
315
- (value) => {
316
- warn(
317
- value.containerWidth < 0 ||
318
- value.containerHeight < 0 ||
319
- (value.calculatedWidth != null && value.calculatedWidth > 0) ||
320
- (value.calculatedHeight != null && value.calculatedHeight > 0),
321
- `The width(%s) and height(%s) of chart should be greater than 0,
302
+ () => ({
303
+ containerWidth: containerWidth(),
304
+ containerHeight: containerHeight(),
305
+ calculatedWidth: calculated().calculatedWidth,
306
+ calculatedHeight: calculated().calculatedHeight,
307
+ width: width(),
308
+ height: height(),
309
+ minWidth: minWidth(),
310
+ minHeight: props.minHeight,
311
+ aspect: props.aspect,
312
+ }),
313
+ (value) => {
314
+ warn(
315
+ value.containerWidth < 0 ||
316
+ value.containerHeight < 0 ||
317
+ (value.calculatedWidth != null && value.calculatedWidth > 0) ||
318
+ (value.calculatedHeight != null && value.calculatedHeight > 0),
319
+ `The width(%s) and height(%s) of chart should be greater than 0,
322
320
  please check the style of container, or the props width(%s) and height(%s),
323
321
  or add a minWidth(%s) or minHeight(%s) or use aspect(%s) to control the
324
322
  height and width.`,
325
- value.calculatedWidth,
326
- value.calculatedHeight,
327
- value.width,
328
- value.height,
329
- value.minWidth,
330
- value.minHeight,
331
- value.aspect,
332
- );
333
- },
334
- ),
323
+ value.calculatedWidth,
324
+ value.calculatedHeight,
325
+ value.width,
326
+ value.height,
327
+ value.minWidth,
328
+ value.minHeight,
329
+ value.aspect,
330
+ );
331
+ },
335
332
  );
336
333
 
337
334
  return (
338
335
  <div
339
336
  id={props.id ? `${props.id}` : undefined}
340
- class={["recharts-responsive-container", props.class].filter(Boolean).join(" ")}
337
+ class={["recharts-responsive-container", props.class]}
341
338
  style={wrapperStyle()}
342
339
  ref={setRef}
343
340
  data-testid={props["data-testid"]}
@@ -8,8 +8,8 @@
8
8
  // SVG passthrough props go through svgPropertiesAndEvents like the shape ports;
9
9
  // `React.ReactNode` children → `RenderableText`.
10
10
  import { type CamelSvgProps } from "../util/svgPropertiesNoEvents";
11
- import { createMemo, For, Show, mergeProps, splitProps } from "solid-js";
12
- import type { JSX } from "solid-js";
11
+ import { createMemo, For, merge, omit, Show } from "solid-js";
12
+ import type { JSX } from "@solidjs/web";
13
13
  import type { Properties as CSSProperties } from "csstype";
14
14
  import { isNullish, isNumber, isNumOrStr } from "../util/DataUtils";
15
15
  import { Global } from "../util/Global";
@@ -314,7 +314,7 @@ const HANDLED_KEYS = [
314
314
  ] as const;
315
315
 
316
316
  export const Text = (props: Props): JSX.Element => {
317
- const merged = mergeProps(textDefaultProps, props);
317
+ const merged = merge(textDefaultProps, props);
318
318
 
319
319
  const wordsByLines = createMemo<ReadonlyArray<Words>>(() =>
320
320
  getWordsByLines({
@@ -383,7 +383,7 @@ export const Text = (props: Props): JSX.Element => {
383
383
 
384
384
  // Pass-through SVG props (everything except the handled keys); the computed
385
385
  // transform is applied as its own attribute on the <text> below.
386
- const rest = splitProps(merged, [...HANDLED_KEYS])[1];
386
+ const rest = omit(merged, ...HANDLED_KEYS);
387
387
 
388
388
  const textProps: Record<string, unknown> = {
389
389
  ...rest,
@@ -418,7 +418,7 @@ export const Text = (props: Props): JSX.Element => {
418
418
  x={g().x}
419
419
  y={g().y}
420
420
  transform={g().transform}
421
- class={["recharts-text", g().class].filter(Boolean).join(" ")}
421
+ class={["recharts-text", g().class]}
422
422
  text-anchor={g().textAnchor}
423
423
  fill={g().fill}
424
424
  >
@@ -9,9 +9,8 @@
9
9
  // createEffect; React `createPortal` → `<Portal mount>`; selectors are read via
10
10
  // useAppSelector accessors; `useElementOffset`'s dependency array is a no-op in
11
11
  // the Solid port (the ResizeObserver tracks the node directly).
12
- import { createMemo, Show, mergeProps, createEffect, on } from "solid-js";
13
- import type { JSX } from "solid-js";
14
- import { DirectPortal } from "../util/DirectPortal";
12
+ import { createEffect, createMemo, merge, Show } from "solid-js";
13
+ import { JSX, Portal } from "@solidjs/web";
15
14
  import {
16
15
  DefaultTooltipContent,
17
16
  Formatter,
@@ -149,7 +148,7 @@ function renderContent(content: ContentType | undefined, props: TooltipContentPr
149
148
  * interaction or, before any interaction, from `defaultIndex`.
150
149
  */
151
150
  export const Tooltip = (props: TooltipProps): JSX.Element => {
152
- const merged = mergeProps(defaultTooltipProps, props);
151
+ const merged = merge(defaultTooltipProps, props);
153
152
  const store = useAppStore();
154
153
  const viewBox = useViewBox();
155
154
  const accessibilityLayer = useAccessibilityLayer();
@@ -159,7 +158,7 @@ export const Tooltip = (props: TooltipProps): JSX.Element => {
159
158
  const defaultIndexAsString = (): TooltipIndex | undefined =>
160
159
  typeof merged.defaultIndex === "number" ? String(merged.defaultIndex) : merged.defaultIndex;
161
160
 
162
- // mergeProps() keeps an explicit `trigger={undefined}` as undefined (unlike React's
161
+ // merge() keeps an explicit `trigger={undefined}` as undefined (unlike React's
163
162
  // resolveDefaultProps, which would apply the default). The interaction selectors
164
163
  // gate on `trigger === "hover"`, so resolve the default explicitly.
165
164
  const resolvedTrigger = (): TooltipTrigger => merged.trigger ?? defaultTooltipProps.trigger;
@@ -167,18 +166,16 @@ export const Tooltip = (props: TooltipProps): JSX.Element => {
167
166
  // Push the Tooltip's settings into the store so the interaction selectors can
168
167
  // read shared/trigger/axisId/active/defaultIndex.
169
168
  createEffect(
170
- on(
171
- () => ({
172
- shared: merged.shared,
173
- trigger: resolvedTrigger(),
174
- axisId: merged.axisId,
175
- active: merged.active,
176
- defaultIndex: defaultIndexAsString(),
177
- }),
178
- (settings) => {
179
- store?.actions.tooltip.setTooltipSettingsState(settings);
180
- },
181
- ),
169
+ () => ({
170
+ shared: merged.shared,
171
+ trigger: resolvedTrigger(),
172
+ axisId: merged.axisId,
173
+ active: merged.active,
174
+ defaultIndex: defaultIndexAsString(),
175
+ }),
176
+ (settings) => {
177
+ store?.actions.tooltip.setTooltipSettingsState(settings);
178
+ },
182
179
  );
183
180
 
184
181
  const tooltipEventType = useAppSelector((state) => selectTooltipEventType(state, merged.shared));
@@ -247,7 +244,7 @@ export const Tooltip = (props: TooltipProps): JSX.Element => {
247
244
  </Show>
248
245
  <Show when={viewBox() && tooltipEventType() && portal()}>
249
246
  {(mount) => {
250
- // Built as a plain object (spreading the Solid mergeProps() proxy leaks a
247
+ // Built as a plain object (spreading the Solid merge() proxy leaks a
251
248
  // MERGE_SOURCE symbol into the bag handed to a function-form `content`).
252
249
  const contentProps = (): TooltipContentProps => ({
253
250
  accessibilityLayer: accessibilityLayer(),
@@ -265,7 +262,7 @@ export const Tooltip = (props: TooltipProps): JSX.Element => {
265
262
  formatter: merged.formatter,
266
263
  includeHidden: merged.includeHidden,
267
264
  isAnimationActive: merged.isAnimationActive,
268
- // mergeProps() leaves explicit `undefined`; React defaultProps would still apply defaults.
265
+ // merge() leaves explicit `undefined`; React defaultProps would still apply defaults.
269
266
  itemSorter: props.itemSorter ?? defaultTooltipProps.itemSorter,
270
267
  itemStyle: merged.itemStyle,
271
268
  label: finalLabel(),
@@ -282,7 +279,7 @@ export const Tooltip = (props: TooltipProps): JSX.Element => {
282
279
  wrapperStyle: merged.wrapperStyle,
283
280
  });
284
281
  return (
285
- <DirectPortal mount={mount()}>
282
+ <Portal mount={mount()}>
286
283
  <TooltipBoundingBox
287
284
  allowEscapeViewBox={merged.allowEscapeViewBox}
288
285
  animationDuration={merged.animationDuration}
@@ -303,7 +300,7 @@ export const Tooltip = (props: TooltipProps): JSX.Element => {
303
300
  >
304
301
  {renderContent(merged.content, contentProps())}
305
302
  </TooltipBoundingBox>
306
- </DirectPortal>
303
+ </Portal>
307
304
  );
308
305
  }}
309
306
  </Show>
@@ -1,14 +1,14 @@
1
1
  // Ported from recharts 3.8.1 src/component/TooltipBoundingBox.tsx (commit 7a23854).
2
2
  //
3
3
  // Deviations: React.useState → createSignal; the keydown (Escape-to-dismiss)
4
- // listener moves from useEffect to onMount (single listener; the handler reads
4
+ // listener moves from useEffect to onSettled (single listener; the handler reads
5
5
  // the live props.coordinate at event time); the "reset dismissed when the
6
6
  // coordinate moves" inline setState becomes a createEffect; `React.memo` dropped
7
7
  // (Solid is fine-grained); `className`→`class`, `tabIndex`→`tabindex`, React
8
8
  // CSSProperties → JSX.CSSProperties (kebab keys); the `xmlns` attribute is dropped
9
9
  // (the tooltip renders into an HTML portal div, not inside the SVG).
10
- import { createSignal, onCleanup, onMount, createEffect, on } from "solid-js";
11
- import type { JSX } from "solid-js";
10
+ import { createEffect, createSignal, onSettled } from "solid-js";
11
+ import type { JSX } from "@solidjs/web";
12
12
  import {
13
13
  AllowInDimension,
14
14
  AnimationDuration,
@@ -77,33 +77,31 @@ export const TooltipBoundingBox = (props: TooltipBoundingBoxProps): JSX.Element
77
77
  y: props.coordinate?.y ?? 0,
78
78
  });
79
79
 
80
- onMount(() => {
80
+ onSettled(() => {
81
81
  const handleKeyDown = (event: KeyboardEvent) => {
82
82
  if (event.key === "Escape") {
83
83
  setState({ dismissed: true, dismissedAtCoordinate: coordinate() });
84
84
  }
85
85
  };
86
86
  document.addEventListener("keydown", handleKeyDown);
87
- onCleanup(() => {
87
+ return () => {
88
88
  document.removeEventListener("keydown", handleKeyDown);
89
- });
89
+ };
90
90
  });
91
91
 
92
92
  // Re-show after dismissal once the coordinate moves to a new spot. Both the
93
93
  // coordinate and the dismiss state are read in the compute (a tracking scope);
94
94
  // the apply only writes, so no untracked read fires.
95
95
  createEffect(
96
- on(
97
- () => ({ coord: coordinate(), st: state() }),
98
- ({ coord, st }) => {
99
- if (
100
- st.dismissed &&
101
- (coord.x !== st.dismissedAtCoordinate.x || coord.y !== st.dismissedAtCoordinate.y)
102
- ) {
103
- setState({ ...st, dismissed: false });
104
- }
105
- },
106
- ),
96
+ () => ({ coord: coordinate(), st: state() }),
97
+ ({ coord, st }) => {
98
+ if (
99
+ st.dismissed &&
100
+ (coord.x !== st.dismissedAtCoordinate.x || coord.y !== st.dismissedAtCoordinate.y)
101
+ ) {
102
+ setState({ ...st, dismissed: false });
103
+ }
104
+ },
107
105
  );
108
106
 
109
107
  const translate = (): { cssProperties: JSX.CSSProperties; cssClasses: string } =>
@@ -147,7 +145,7 @@ export const TooltipBoundingBox = (props: TooltipBoundingBoxProps): JSX.Element
147
145
  };
148
146
 
149
147
  return (
150
- <div tabIndex={-1} class={translate().cssClasses} style={outerStyle()} ref={props.innerRef}>
148
+ <div tabindex={-1} class={translate().cssClasses} style={outerStyle()} ref={props.innerRef}>
151
149
  {props.children}
152
150
  </div>
153
151
  );
@@ -2,7 +2,7 @@
2
2
  // Deviations: `CSSProperties` from csstype (camelCase, matching React's), and the
3
3
  // `satisfies Partial<Props>` on the defaults is dropped (the ResponsiveContainer
4
4
  // component is deferred) — kept as `as const`.
5
- import type { JSX } from "solid-js";
5
+ import type { JSX } from "@solidjs/web";
6
6
  import { isPercent } from "../util/DataUtils";
7
7
  import type { Percent } from "../util/types";
8
8
 
@@ -4,7 +4,7 @@
4
4
  // once); `return null` when no plot area → keyed `<Show>`; context-value-is-
5
5
  // provider; default `null` (not undefined, which would make `useContext` throw).
6
6
  import { createContext, useContext, Show } from "solid-js";
7
- import type { JSX } from "solid-js";
7
+ import type { JSX } from "@solidjs/web";
8
8
  import { uniqueId } from "../util/DataUtils";
9
9
  import { usePlotArea } from "../hooks";
10
10
 
@@ -24,14 +24,14 @@ export const ClipPathProvider = (props: { children: JSX.Element }): JSX.Element
24
24
  return (
25
25
  <Show when={plotArea()}>
26
26
  {(area) => (
27
- <ClipPathIdContext.Provider value={clipPathId}>
27
+ <ClipPathIdContext value={clipPathId}>
28
28
  <defs>
29
29
  <clipPath id={clipPathId}>
30
30
  <rect x={area().x} y={area().y} height={area().height} width={area().width} />
31
31
  </clipPath>
32
32
  </defs>
33
33
  {props.children}
34
- </ClipPathIdContext.Provider>
34
+ </ClipPathIdContext>
35
35
  )}
36
36
  </Show>
37
37
  );
@@ -1,9 +1,9 @@
1
- import { splitProps } from "solid-js";
2
1
  // Ported from recharts 3.8.1 src/container/Layer.tsx (commit 7a23854).
3
2
  // Solid deviations: `className` → `class` (Omit the wide SVG `class`); `clsx` →
4
- // `class={[...].filter(Boolean).join(" ")}`; `forwardRef` → `ref` prop; no destructuring (omit + props).
3
+ // `class={[...]}`; `forwardRef` → `ref` prop; no destructuring (omit + props).
5
4
  import { type CamelSvgProps } from "../util/svgPropertiesNoEvents";
6
- import type { JSX } from "solid-js";
5
+ import { omit } from "solid-js";
6
+ import type { JSX } from "@solidjs/web";
7
7
  import { svgPropertiesAndEvents } from "../util/svgPropertiesAndEvents";
8
8
 
9
9
  interface LayerOwnProps {
@@ -28,8 +28,8 @@ export type LayerProps = Omit<
28
28
  export const Layer = (props: LayerProps): JSX.Element => {
29
29
  return (
30
30
  <g
31
- class={["recharts-layer", props.class].filter(Boolean).join(" ")}
32
- {...svgPropertiesAndEvents({ ...splitProps(props, ["class", "children", "ref"])[1] })}
31
+ class={["recharts-layer", props.class]}
32
+ {...svgPropertiesAndEvents({ ...omit(props, "class", "children", "ref") })}
33
33
  ref={props.ref}
34
34
  >
35
35
  {props.children}
@@ -4,7 +4,7 @@
4
4
  // hooks return Accessors → call them; `return null` → keyed `<Show>` (which also
5
5
  // narrows width/height to numbers without a non-null `!`).
6
6
  import { Show } from "solid-js";
7
- import type { JSX } from "solid-js";
7
+ import type { JSX } from "@solidjs/web";
8
8
  import { useChartHeight, useChartWidth } from "../context/chartLayoutContext";
9
9
  import { useAccessibilityLayer } from "../context/accessibilityContext";
10
10
  import { useIsPanorama } from "../context/PanoramaContext";
@@ -1,7 +1,7 @@
1
- import { splitProps } from "solid-js";
2
1
  import { type CamelSvgProps } from "../util/svgPropertiesNoEvents";
3
2
  import { svgPropertiesAndEvents } from "../util/svgPropertiesAndEvents";
4
- import type { JSX } from "solid-js";
3
+ import { omit } from "solid-js";
4
+ import type { JSX } from "@solidjs/web";
5
5
 
6
6
  export interface CartesianViewBox {
7
7
  x?: number;
@@ -37,7 +37,8 @@ export type SurfaceProps = Omit<
37
37
  */
38
38
  export const Surface = (props: SurfaceProps) => {
39
39
  const svgView = () => props.viewBox ?? { width: props.width, height: props.height, x: 0, y: 0 };
40
- const rest = splitProps(props, [
40
+ const rest = omit(
41
+ props,
41
42
  "children",
42
43
  "width",
43
44
  "height",
@@ -47,14 +48,14 @@ export const Surface = (props: SurfaceProps) => {
47
48
  "title",
48
49
  "desc",
49
50
  "ref",
50
- ])[1];
51
+ );
51
52
 
52
53
  // Parity with recharts Surface: the passthrough props go through the SVG
53
54
  // filter (camelCase props → DOM attribute names), not a verbatim spread.
54
55
  return (
55
56
  <svg
56
57
  {...svgPropertiesAndEvents({ ...rest })}
57
- class={["recharts-surface", props.class].filter(Boolean).join(" ")}
58
+ class={["recharts-surface", props.class]}
58
59
  width={props.width}
59
60
  height={props.height}
60
61
  style={props.style}
@@ -9,7 +9,7 @@
9
9
  // cleanup remove → createEffect + onCleanup. useGraphicalItemId provides the id.
10
10
  import { createContext, useContext } from "solid-js";
11
11
  import type { Accessor } from "solid-js";
12
- import type { JSX } from "solid-js";
12
+ import type { JSX } from "@solidjs/web";
13
13
  import { AxisId } from "../state/cartesianAxisSlice";
14
14
  import type { ErrorBarDataPointFormatter } from "../cartesian/ErrorBar";
15
15
  import type { ErrorBarsSettings } from "../state/errorBarSlice";
@@ -45,7 +45,7 @@ export function SetErrorBarContext(
45
45
  dataPointFormatter: props.dataPointFormatter,
46
46
  errorBarOffset: props.errorBarOffset,
47
47
  });
48
- return <ErrorBarContext.Provider value={value}>{props.children}</ErrorBarContext.Provider>;
48
+ return <ErrorBarContext value={value}>{props.children}</ErrorBarContext>;
49
49
  }
50
50
 
51
51
  export const useErrorBarContext = (): Accessor<ErrorBarContextValue> => useContext(ErrorBarContext);
@@ -2,12 +2,12 @@
2
2
  // Context-value-is-provider in Solid 2.0; default `null` (a real value) so
3
3
  // `useContext` returns it without throwing outside a provider.
4
4
  import { createContext, useContext } from "solid-js";
5
- import type { JSX } from "solid-js";
5
+ import type { JSX } from "@solidjs/web";
6
6
 
7
7
  const PanoramaContext = createContext<boolean | null>(null);
8
8
 
9
9
  export const useIsPanorama = (): boolean => useContext(PanoramaContext) != null;
10
10
 
11
11
  export const PanoramaContextProvider = (props: { children: JSX.Element }): JSX.Element => (
12
- <PanoramaContext.Provider value={true}>{props.children}</PanoramaContext.Provider>
12
+ <PanoramaContext value={true}>{props.children}</PanoramaContext>
13
13
  );
@@ -8,7 +8,7 @@
8
8
  // Not yet adopted by <Line> (which currently generates its own id inline); this
9
9
  // is the shared primitive for graphical items (Line/Bar/Area/Scatter) to use.
10
10
  import { createContext, useContext } from "solid-js";
11
- import type { JSX } from "solid-js";
11
+ import type { JSX } from "@solidjs/web";
12
12
  import { useUniqueId } from "../util/useUniqueId";
13
13
  import { GraphicalItemId } from "../state/graphicalItemsSlice";
14
14
 
@@ -32,9 +32,7 @@ const GraphicalItemIdContext = createContext<GraphicalItemId | null>(null);
32
32
  export const RegisterGraphicalItemId = (props: IdSetter): JSX.Element => {
33
33
  const resolvedId = useUniqueId(`recharts-${props.type}`, props.id);
34
34
  return (
35
- <GraphicalItemIdContext.Provider value={resolvedId}>
36
- {props.children(resolvedId)}
37
- </GraphicalItemIdContext.Provider>
35
+ <GraphicalItemIdContext value={resolvedId}>{props.children(resolvedId)}</GraphicalItemIdContext>
38
36
  );
39
37
  };
40
38