solid-recharts 0.2.0 → 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (508) hide show
  1. package/package.json +17 -13
  2. package/src/animation/AnimatedItems.tsx +2 -4
  3. package/src/animation/CSSTransitionAnimate.tsx +41 -39
  4. package/src/animation/JavascriptAnimate.tsx +45 -41
  5. package/src/cartesian/Area.tsx +43 -58
  6. package/src/cartesian/AreaRevealShape.tsx +1 -1
  7. package/src/cartesian/Bar.tsx +98 -78
  8. package/src/cartesian/BarStack.tsx +10 -7
  9. package/src/cartesian/Brush.tsx +20 -16
  10. package/src/cartesian/CartesianAxis.tsx +4 -4
  11. package/src/cartesian/CartesianGrid.tsx +5 -5
  12. package/src/cartesian/ErrorBar.tsx +9 -7
  13. package/src/cartesian/Funnel.tsx +17 -21
  14. package/src/cartesian/GraphicalItemClipPath.tsx +1 -1
  15. package/src/cartesian/Line.tsx +51 -66
  16. package/src/cartesian/LineDrawShape.tsx +20 -17
  17. package/src/cartesian/ReferenceArea.tsx +28 -38
  18. package/src/cartesian/ReferenceDot.tsx +27 -37
  19. package/src/cartesian/ReferenceLine.tsx +28 -37
  20. package/src/cartesian/RenderedTicksReporter.tsx +19 -17
  21. package/src/cartesian/Scatter.tsx +27 -39
  22. package/src/cartesian/XAxis.tsx +55 -68
  23. package/src/cartesian/YAxis.tsx +88 -99
  24. package/src/cartesian/ZAxis.tsx +29 -41
  25. package/src/chart/AreaChart.tsx +1 -1
  26. package/src/chart/BarChart.tsx +1 -1
  27. package/src/chart/CartesianChart.tsx +4 -3
  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 +4 -3
  33. package/src/chart/PolarChart.tsx +4 -3
  34. package/src/chart/RadarChart.tsx +4 -3
  35. package/src/chart/RadialBarChart.tsx +7 -3
  36. package/src/chart/RechartsWrapper.tsx +14 -24
  37. package/src/chart/Sankey.tsx +9 -6
  38. package/src/chart/ScatterChart.tsx +1 -1
  39. package/src/chart/SunburstChart.tsx +6 -5
  40. package/src/chart/Treemap.tsx +5 -4
  41. package/src/component/ActivePoints.tsx +6 -15
  42. package/src/component/Cell.tsx +23 -5
  43. package/src/component/Cursor.tsx +3 -3
  44. package/src/component/DefaultLegendContent.tsx +8 -6
  45. package/src/component/DefaultTooltipContent.tsx +14 -10
  46. package/src/component/Dots.tsx +11 -7
  47. package/src/component/Label.tsx +13 -10
  48. package/src/component/LabelList.tsx +12 -7
  49. package/src/component/Legend.tsx +26 -21
  50. package/src/component/ResponsiveContainer.tsx +52 -49
  51. package/src/component/Text.tsx +5 -5
  52. package/src/component/Tooltip.tsx +21 -18
  53. package/src/component/TooltipBoundingBox.tsx +18 -16
  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 +5 -6
  59. package/src/context/ErrorBarContext.tsx +17 -26
  60. package/src/context/PanoramaContext.tsx +2 -2
  61. package/src/context/RegisterGraphicalItemId.tsx +4 -2
  62. package/src/context/chartDataContext.tsx +26 -23
  63. package/src/context/chartLayoutContext.tsx +16 -12
  64. package/src/polar/Pie.tsx +49 -60
  65. package/src/polar/PolarAngleAxis.tsx +43 -52
  66. package/src/polar/PolarGrid.tsx +5 -5
  67. package/src/polar/PolarRadiusAxis.tsx +42 -50
  68. package/src/polar/Radar.tsx +24 -36
  69. package/src/polar/RadialBar.tsx +23 -41
  70. package/src/shape/Cross.tsx +5 -5
  71. package/src/shape/Curve.tsx +7 -8
  72. package/src/shape/Dot.tsx +4 -4
  73. package/src/shape/Polygon.tsx +5 -5
  74. package/src/shape/Rectangle.tsx +22 -20
  75. package/src/shape/Sector.tsx +5 -5
  76. package/src/shape/Symbols.tsx +6 -6
  77. package/src/shape/Trapezoid.tsx +29 -27
  78. package/src/state/RechartsStoreProvider.tsx +5 -3
  79. package/src/state/ReportChartProps.tsx +8 -6
  80. package/src/state/ReportEventSettings.tsx +8 -6
  81. package/src/state/ReportMainChartProps.tsx +11 -9
  82. package/src/state/ReportPolarOptions.tsx +15 -13
  83. package/src/state/SetLegendPayload.ts +20 -28
  84. package/src/state/SetTooltipEntrySettings.tsx +10 -27
  85. package/src/state/brushSlice.ts +10 -8
  86. package/src/state/cartesianAxisSlice.ts +72 -84
  87. package/src/state/chartDataSlice.ts +29 -23
  88. package/src/state/createCollectionActions.ts +51 -0
  89. package/src/state/createSelector.ts +97 -0
  90. package/src/state/errorBarSlice.ts +22 -16
  91. package/src/state/eventSettingsSlice.ts +11 -9
  92. package/src/state/externalEventsMiddleware.ts +2 -11
  93. package/src/state/graphicalItemsSlice.ts +35 -44
  94. package/src/state/isEventThrottled.ts +12 -0
  95. package/src/state/keyboardEventsMiddleware.ts +2 -8
  96. package/src/state/layoutSlice.ts +29 -17
  97. package/src/state/legendSlice.ts +35 -31
  98. package/src/state/mouseEventsMiddleware.ts +2 -13
  99. package/src/state/optionsSlice.ts +8 -6
  100. package/src/state/patched.ts +19 -0
  101. package/src/state/polarAxisSlice.ts +21 -13
  102. package/src/state/polarOptionsSlice.ts +16 -14
  103. package/src/state/referenceElementsSlice.ts +49 -34
  104. package/src/state/registerInStore.ts +70 -0
  105. package/src/state/renderedTicksSlice.ts +11 -7
  106. package/src/state/rootPropsSlice.ts +16 -14
  107. package/src/state/selectors/areaSelectors.ts +13 -36
  108. package/src/state/selectors/arrayEqualityCheck.ts +32 -7
  109. package/src/state/selectors/axisSelectors.ts +215 -169
  110. package/src/state/selectors/barSelectors.ts +8 -36
  111. package/src/state/selectors/combiners/combineConfiguredScale.ts +1 -1
  112. package/src/state/selectors/combiners/combineRealScaleType.ts +1 -1
  113. package/src/state/selectors/dataSelectors.ts +35 -16
  114. package/src/state/selectors/numberDomainEqualityCheck.ts +16 -8
  115. package/src/state/selectors/selectAxisForGraphicalItem.ts +52 -0
  116. package/src/state/tooltipSlice.ts +135 -86
  117. package/src/state/unregisterOnCleanup.ts +5 -20
  118. package/src/state/zIndexSlice.ts +50 -42
  119. package/src/synchronisation/useChartSynchronisation.tsx +213 -217
  120. package/src/util/ActiveShapeUtils.tsx +2 -9
  121. package/src/util/BarUtils.tsx +30 -23
  122. package/src/util/ChartUtils.ts +69 -25
  123. package/src/util/DirectPortal.tsx +107 -0
  124. package/src/util/FunnelUtils.tsx +1 -1
  125. package/src/util/RadialBarUtils.tsx +4 -3
  126. package/src/util/createCartesianCharts.tsx +1 -1
  127. package/src/util/createPolarCharts.tsx +1 -1
  128. package/src/util/propsAreEqual.ts +3 -33
  129. package/src/util/stacks/stackTypes.ts +1 -1
  130. package/src/util/svgPropertiesAndEvents.ts +1 -1
  131. package/src/util/tooltip/translate.ts +2 -2
  132. package/src/util/types.ts +3 -3
  133. package/src/zIndex/ZIndexLayer.tsx +39 -68
  134. package/src/zIndex/ZIndexPortal.tsx +29 -25
  135. package/src/state/reduxDevtoolsJsonStringifyReplacer.ts +0 -15
  136. package/src/util/axisPropsAreEqual.ts +0 -42
  137. package/src/util/resolveDefaultProps.tsx +0 -8
  138. package/src/util/typedDataKey.ts +0 -8
  139. package/test/_data.ts +0 -408
  140. package/test/animation/AnimationController.typed.spec.ts +0 -53
  141. package/test/animation/AnimationControllerImpl.spec.ts +0 -271
  142. package/test/animation/CSSTransitionAnimate.timing.spec.tsx +0 -473
  143. package/test/animation/JavascriptAnimate.spec.tsx +0 -62
  144. package/test/animation/RechartsAnimation.spec.ts +0 -636
  145. package/test/animation/easing.spec.ts +0 -218
  146. package/test/animation/legacyAnimationLengthChange.spec.tsx +0 -803
  147. package/test/animation/matchBy.spec.ts +0 -467
  148. package/test/animation/mockAnimationController.ts +0 -40
  149. package/test/animation/mockControllerAnimationManager.ts +0 -143
  150. package/test/animation/mockTimeoutController.ts +0 -114
  151. package/test/animation/timeoutController.spec.ts +0 -138
  152. package/test/animation/useAnimationStartSnapshot.spec.ts +0 -147
  153. package/test/animation/util.spec.ts +0 -28
  154. package/test/cartesian/Area.animation.spec.tsx +0 -363
  155. package/test/cartesian/Area.range.spec.tsx +0 -54
  156. package/test/cartesian/Area.spec.tsx +0 -1202
  157. package/test/cartesian/Area.stacked.render.spec.tsx +0 -69
  158. package/test/cartesian/Area.typed.spec.tsx +0 -209
  159. package/test/cartesian/Axis.integration.spec.tsx +0 -158
  160. package/test/cartesian/Bar/Bar.csstransition.spec.tsx +0 -299
  161. package/test/cartesian/Bar/Bar.spec.tsx +0 -2314
  162. package/test/cartesian/Bar/Bar.typed.spec.tsx +0 -192
  163. package/test/cartesian/Bar.animation.spec.tsx +0 -426
  164. package/test/cartesian/Bar.stackDomain.spec.tsx +0 -66
  165. package/test/cartesian/Bar.stacked.render.spec.tsx +0 -53
  166. package/test/cartesian/Bar.truncateByDomain.spec.tsx +0 -237
  167. package/test/cartesian/Bar.zeroDimensionFiltering.spec.tsx +0 -336
  168. package/test/cartesian/BarStack.spec.tsx +0 -91
  169. package/test/cartesian/Brush.keyboard.spec.tsx +0 -88
  170. package/test/cartesian/Brush.panorama.spec.tsx +0 -41
  171. package/test/cartesian/Brush.props.spec.tsx +0 -63
  172. package/test/cartesian/Brush.render.spec.tsx +0 -117
  173. package/test/cartesian/Brush.spec.tsx +0 -522
  174. package/test/cartesian/Brush.stacked.spec.tsx +0 -221
  175. package/test/cartesian/CartesianAxis.render.spec.tsx +0 -50
  176. package/test/cartesian/CartesianAxis.spec.tsx +0 -396
  177. package/test/cartesian/CartesianGrid.render.spec.tsx +0 -39
  178. package/test/cartesian/CartesianGrid.spec.tsx +0 -2103
  179. package/test/cartesian/ErrorBar.render.spec.tsx +0 -69
  180. package/test/cartesian/ErrorBar.spec.tsx +0 -2414
  181. package/test/cartesian/Funnel.animation.spec.tsx +0 -241
  182. package/test/cartesian/Funnel.spec.tsx +0 -226
  183. package/test/cartesian/Funnel.typed.spec.tsx +0 -221
  184. package/test/cartesian/GraphicalItemClipPath.scale-behavior.spec.tsx +0 -627
  185. package/test/cartesian/GraphicalItemClipPath.spec.tsx +0 -427
  186. package/test/cartesian/Line.animation.spec.tsx +0 -643
  187. package/test/cartesian/Line.sparseAnimationPath.spec.tsx +0 -98
  188. package/test/cartesian/Line.spec.tsx +0 -471
  189. package/test/cartesian/Line.typed.spec.tsx +0 -152
  190. package/test/cartesian/ReferenceArea.render.spec.tsx +0 -63
  191. package/test/cartesian/ReferenceArea.spec.tsx +0 -663
  192. package/test/cartesian/ReferenceArea.typed.spec.tsx +0 -74
  193. package/test/cartesian/ReferenceDot.render.spec.tsx +0 -55
  194. package/test/cartesian/ReferenceDot.spec.tsx +0 -462
  195. package/test/cartesian/ReferenceDot.typed.spec.tsx +0 -76
  196. package/test/cartesian/ReferenceLine/ReferenceLine.panorama.spec.tsx +0 -184
  197. package/test/cartesian/ReferenceLine/ReferenceLine.spec.tsx +0 -744
  198. package/test/cartesian/ReferenceLine/ReferenceLine.typed.spec.tsx +0 -74
  199. package/test/cartesian/ReferenceLine/getEndPoints.spec.ts +0 -399
  200. package/test/cartesian/ReferenceLine.render.spec.tsx +0 -134
  201. package/test/cartesian/Scatter.animation.spec.tsx +0 -381
  202. package/test/cartesian/Scatter.render.spec.tsx +0 -61
  203. package/test/cartesian/Scatter.spec.tsx +0 -406
  204. package/test/cartesian/Scatter.typed.spec.tsx +0 -153
  205. package/test/cartesian/XAxis/XAxis.barSize.spec.tsx +0 -336
  206. package/test/cartesian/XAxis/XAxis.brush.spec.tsx +0 -266
  207. package/test/cartesian/XAxis/XAxis.categorydomain.spec.tsx +0 -872
  208. package/test/cartesian/XAxis/XAxis.dataKey.spec.tsx +0 -86
  209. package/test/cartesian/XAxis/XAxis.datatypes.spec.tsx +0 -127
  210. package/test/cartesian/XAxis/XAxis.hide.spec.tsx +0 -106
  211. package/test/cartesian/XAxis/XAxis.multiaxis.spec.tsx +0 -336
  212. package/test/cartesian/XAxis/XAxis.numberdomain.spec.tsx +0 -1466
  213. package/test/cartesian/XAxis/XAxis.padding.spec.tsx +0 -758
  214. package/test/cartesian/XAxis/XAxis.padding_clip.spec.tsx +0 -65
  215. package/test/cartesian/XAxis/XAxis.state.spec.tsx +0 -355
  216. package/test/cartesian/XAxis/XAxis.tick.spec.tsx +0 -493
  217. package/test/cartesian/XAxis/XAxis.timescale.spec.tsx +0 -233
  218. package/test/cartesian/XAxis/XAxis.type.spec.tsx +0 -107
  219. package/test/cartesian/XAxis/XAxis.typed.spec.tsx +0 -102
  220. package/test/cartesian/XAxis/XAxis.vertical.spec.tsx +0 -265
  221. package/test/cartesian/XAxis.tickFormatter.spec.tsx +0 -54
  222. package/test/cartesian/YAxis/YAxis.7362.derivedDomain.spec.tsx +0 -230
  223. package/test/cartesian/YAxis/YAxis.7362.spec.tsx +0 -104
  224. package/test/cartesian/YAxis/YAxis.interval-zero.spec.tsx +0 -88
  225. package/test/cartesian/YAxis/YAxis.label.spec.tsx +0 -219
  226. package/test/cartesian/YAxis/YAxis.spec.tsx +0 -1595
  227. package/test/cartesian/YAxis/YAxis.tick.spec.tsx +0 -428
  228. package/test/cartesian/YAxis/YAxis.tickFormatter.spec.tsx +0 -54
  229. package/test/cartesian/YAxis/YAxis.ticks.spec.tsx +0 -263
  230. package/test/cartesian/YAxis/YAxis.type.spec.tsx +0 -107
  231. package/test/cartesian/YAxis/YAxis.typed.spec.tsx +0 -102
  232. package/test/cartesian/ZAxis.spec.tsx +0 -300
  233. package/test/cartesian/ZAxis.typed.spec.tsx +0 -33
  234. package/test/cartesian/__snapshots__/Brush.spec.tsx.snap +0 -5
  235. package/test/cartesian/axisLineAndStroke.spec.tsx +0 -72
  236. package/test/cartesian/getCartesianPosition.spec.ts +0 -907
  237. package/test/cartesian/getEquidistantTicks.spec.ts +0 -88
  238. package/test/cartesian/getTicks.spec.ts +0 -378
  239. package/test/cartesian/miscFeatureGaps.spec.tsx +0 -89
  240. package/test/cartesian/useAnimatedLineLength.spec.ts +0 -168
  241. package/test/chart/AccessibilityLayer.spec.tsx +0 -569
  242. package/test/chart/AccessibilityScans.spec.tsx +0 -286
  243. package/test/chart/AreaChart.spec.tsx +0 -409
  244. package/test/chart/AreaChart.stacked.spec.tsx +0 -1407
  245. package/test/chart/AreaChart.typed.spec.tsx +0 -39
  246. package/test/chart/BarChart.spec.tsx +0 -3719
  247. package/test/chart/BarChart.typed.spec.tsx +0 -60
  248. package/test/chart/CategoricalChart.spec.tsx +0 -255
  249. package/test/chart/ComposedChart.spec.tsx +0 -199
  250. package/test/chart/ComposedChart.typed.spec.tsx +0 -39
  251. package/test/chart/FunnelChart.spec.tsx +0 -215
  252. package/test/chart/FunnelChart.typed.spec.tsx +0 -39
  253. package/test/chart/LineChart.multiseries.spec.tsx +0 -50
  254. package/test/chart/LineChart.smoke.spec.tsx +0 -50
  255. package/test/chart/LineChart.spec.tsx +0 -930
  256. package/test/chart/LineChart.typed.spec.tsx +0 -39
  257. package/test/chart/NicheChartTooltip.spec.tsx +0 -81
  258. package/test/chart/PieChart.spec.tsx +0 -793
  259. package/test/chart/PieChart.typed.spec.tsx +0 -39
  260. package/test/chart/RadarChart.spec.tsx +0 -530
  261. package/test/chart/RadarChart.typed.spec.tsx +0 -39
  262. package/test/chart/RadialBarChart.5966.spec.tsx +0 -48
  263. package/test/chart/RadialBarChart.spec.tsx +0 -679
  264. package/test/chart/RadialBarChart.typed.spec.tsx +0 -39
  265. package/test/chart/RechartsWrapper.spec.tsx +0 -83
  266. package/test/chart/Sankey.content.spec.tsx +0 -46
  267. package/test/chart/Sankey.spec.tsx +0 -952
  268. package/test/chart/Sankey.typed.spec.tsx +0 -29
  269. package/test/chart/ScatterChart.spec.tsx +0 -2613
  270. package/test/chart/ScatterChart.typed.spec.tsx +0 -39
  271. package/test/chart/SunburstChart.spec.tsx +0 -146
  272. package/test/chart/Treemap.animation.spec.tsx +0 -52
  273. package/test/chart/Treemap.spec.tsx +0 -1003
  274. package/test/chart/Treemap.typed.spec.tsx +0 -26
  275. package/test/chart/chartEvents.spec.tsx +0 -127
  276. package/test/chart/responsive.spec.tsx +0 -620
  277. package/test/component/Cell.render.spec.tsx +0 -155
  278. package/test/component/Cell.spec.tsx +0 -12
  279. package/test/component/Cursor.spec.tsx +0 -186
  280. package/test/component/DefaultTooltipContent.spec.tsx +0 -102
  281. package/test/component/Label.render.spec.tsx +0 -63
  282. package/test/component/Label.spec.tsx +0 -686
  283. package/test/component/Label.typed.spec.tsx +0 -46
  284. package/test/component/LabelList.spec.tsx +0 -188
  285. package/test/component/Legend.itemSorter.spec.tsx +0 -704
  286. package/test/component/Legend.render.spec.tsx +0 -92
  287. package/test/component/Legend.spec.tsx +0 -2213
  288. package/test/component/Legend.typed.spec.tsx +0 -22
  289. package/test/component/ResponsiveContainer.spec.tsx +0 -523
  290. package/test/component/ResponsiveContainerDataTest.spec.tsx +0 -51
  291. package/test/component/Text.spec.tsx +0 -415
  292. package/test/component/Text.typed.spec.tsx +0 -46
  293. package/test/component/Tooltip/ActiveDot.spec.tsx +0 -370
  294. package/test/component/Tooltip/Tooltip.animation.spec.tsx +0 -209
  295. package/test/component/Tooltip/Tooltip.content.spec.tsx +0 -128
  296. package/test/component/Tooltip/Tooltip.formatter.spec.tsx +0 -152
  297. package/test/component/Tooltip/Tooltip.includeHidden.spec.tsx +0 -79
  298. package/test/component/Tooltip/Tooltip.multipleDataArrays.spec.tsx +0 -165
  299. package/test/component/Tooltip/Tooltip.offset.spec.tsx +0 -113
  300. package/test/component/Tooltip/Tooltip.state.spec.tsx +0 -74
  301. package/test/component/Tooltip/Tooltip.sync.spec.tsx +0 -639
  302. package/test/component/Tooltip/defaultIndex.spec.tsx +0 -227
  303. package/test/component/Tooltip/graphicalItem.formatter.spec.tsx +0 -138
  304. package/test/component/Tooltip/itemSorter.spec.tsx +0 -2815
  305. package/test/component/Tooltip/tooltipEventType.spec.tsx +0 -344
  306. package/test/component/Tooltip/tooltipMouseHoverSelectors.ts +0 -41
  307. package/test/component/Tooltip/tooltipTestHelpers.tsx +0 -162
  308. package/test/component/Tooltip.defaultIndex.spec.tsx +0 -48
  309. package/test/component/Tooltip.hover.spec.tsx +0 -61
  310. package/test/component/Tooltip.item.spec.tsx +0 -54
  311. package/test/component/Tooltip.keyboard.spec.tsx +0 -51
  312. package/test/component/Tooltip.payload.spec.tsx +0 -1716
  313. package/test/component/Tooltip.touch.spec.tsx +0 -39
  314. package/test/component/Tooltip.visibility.spec.tsx +0 -1889
  315. package/test/component/TooltipBoundingBox.spec.tsx +0 -89
  316. package/test/component/responsiveContainerUtils.spec.ts +0 -205
  317. package/test/container/ClipPath.spec.tsx +0 -602
  318. package/test/container/chartDimensions.spec.tsx +0 -368
  319. package/test/context/chartLayoutContext.spec.tsx +0 -378
  320. package/test/helper/ExpectAxisDomain.tsx +0 -27
  321. package/test/helper/assertNotNull.ts +0 -6
  322. package/test/helper/assertZIndexLayerOrder.ts +0 -19
  323. package/test/helper/createSelectorTestCase.tsx +0 -176
  324. package/test/helper/expectAnimatedPieAngles.ts +0 -100
  325. package/test/helper/expectAnimatedPiePaths.ts +0 -78
  326. package/test/helper/expectAreaCurve.ts +0 -15
  327. package/test/helper/expectAxisTicks.ts +0 -48
  328. package/test/helper/expectBars.ts +0 -54
  329. package/test/helper/expectFunctionReturning.ts +0 -58
  330. package/test/helper/expectLabel.ts +0 -32
  331. package/test/helper/expectLastCalledWith.ts +0 -48
  332. package/test/helper/expectLine.ts +0 -20
  333. package/test/helper/expectPieSectors.ts +0 -80
  334. package/test/helper/expectScale.ts +0 -37
  335. package/test/helper/expectScatterPoints.ts +0 -52
  336. package/test/helper/expectStackGroups.ts +0 -144
  337. package/test/helper/mockAxes.ts +0 -22
  338. package/test/helper/mockGetBoundingClientRect.ts +0 -66
  339. package/test/helper/mockHTMLElementProperty.ts +0 -19
  340. package/test/helper/mockTouchingElement.ts +0 -27
  341. package/test/helper/offsetHelpers.ts +0 -19
  342. package/test/helper/parameterizedTestCases.tsx +0 -99
  343. package/test/helper/produceState.ts +0 -32
  344. package/test/helper/selectorTestHelpers.tsx +0 -63
  345. package/test/helper/trim.spec.ts +0 -35
  346. package/test/helper/trim.ts +0 -11
  347. package/test/hooks/useActiveTooltipDataPoints.spec.tsx +0 -358
  348. package/test/hooks/useAxisDomain.spec.tsx +0 -361
  349. package/test/hooks/useAxisScale.spec.tsx +0 -283
  350. package/test/hooks/useAxisTicks.spec.tsx +0 -130
  351. package/test/hooks/useOffset.spec.tsx +0 -248
  352. package/test/hooks/useTooltipStateHooks.spec.tsx +0 -109
  353. package/test/polar/Pie/Pie-TwoLevelPieChart.spec.tsx +0 -135
  354. package/test/polar/Pie/Pie.spec.tsx +0 -784
  355. package/test/polar/Pie/Pie.typed.spec.tsx +0 -78
  356. package/test/polar/Pie.animation.spec.tsx +0 -529
  357. package/test/polar/PieWithLegend.animation.spec.tsx +0 -142
  358. package/test/polar/PolarAngleAxis/PolarAngleAxis.events.spec.tsx +0 -76
  359. package/test/polar/PolarAngleAxis/PolarAngleAxis.spec.tsx +0 -2079
  360. package/test/polar/PolarAngleAxis/PolarAngleAxis.typed.spec.tsx +0 -102
  361. package/test/polar/PolarAngleAxis.render.spec.tsx +0 -79
  362. package/test/polar/PolarGrid.render.spec.tsx +0 -75
  363. package/test/polar/PolarGrid.spec.tsx +0 -918
  364. package/test/polar/PolarLegendPerRow.render.spec.tsx +0 -85
  365. package/test/polar/PolarRadiusAxis.events.spec.tsx +0 -65
  366. package/test/polar/PolarRadiusAxis.render.spec.tsx +0 -52
  367. package/test/polar/PolarRadiusAxis.spec.tsx +0 -991
  368. package/test/polar/PolarRadiusAxis.typed.spec.tsx +0 -84
  369. package/test/polar/PolarTooltipLegend.render.spec.tsx +0 -80
  370. package/test/polar/Radar.animation.spec.tsx +0 -570
  371. package/test/polar/Radar.render.spec.tsx +0 -71
  372. package/test/polar/Radar.spec.tsx +0 -265
  373. package/test/polar/Radar.typed.spec.tsx +0 -119
  374. package/test/polar/RadialBar/RadialBar.spec.tsx +0 -1521
  375. package/test/polar/RadialBar/RadialBar.typed.spec.tsx +0 -132
  376. package/test/polar/RadialBar.animation.spec.tsx +0 -375
  377. package/test/polar/RadialBar.render.spec.tsx +0 -66
  378. package/test/polar/RadialBar.stacked.spec.tsx +0 -57
  379. package/test/setup.ts +0 -84
  380. package/test/shape/ActiveShape.spec.tsx +0 -181
  381. package/test/shape/Cross.spec.tsx +0 -60
  382. package/test/shape/Cross.typed.spec.tsx +0 -26
  383. package/test/shape/Curve.spec.tsx +0 -368
  384. package/test/shape/Curve.typed.spec.tsx +0 -69
  385. package/test/shape/Dot.spec.tsx +0 -73
  386. package/test/shape/Dot.typed.spec.tsx +0 -30
  387. package/test/shape/Polygon.spec.tsx +0 -357
  388. package/test/shape/Polygon.typed.spec.tsx +0 -28
  389. package/test/shape/Rectangle.animation.spec.tsx +0 -451
  390. package/test/shape/Rectangle.spec.tsx +0 -68
  391. package/test/shape/Rectangle.typed.spec.tsx +0 -24
  392. package/test/shape/Sector.spec.tsx +0 -76
  393. package/test/shape/Sector.typed.spec.tsx +0 -24
  394. package/test/shape/Symbols.spec.tsx +0 -43
  395. package/test/shape/Symbols.typed.spec.tsx +0 -24
  396. package/test/shape/Trapezoid.spec.tsx +0 -50
  397. package/test/shape/Trapezoid.typed.spec.tsx +0 -24
  398. package/test/shape/__snapshots__/Cross.spec.tsx.snap +0 -62
  399. package/test/shape/__snapshots__/Curve.spec.tsx.snap +0 -460
  400. package/test/shape/__snapshots__/Polygon.spec.tsx.snap +0 -58
  401. package/test/shape/__snapshots__/Rectangle.spec.tsx.snap +0 -117
  402. package/test/shape/__snapshots__/Sector.spec.tsx.snap +0 -71
  403. package/test/shape/__snapshots__/Trapezoid.spec.tsx.snap +0 -64
  404. package/test/state/chartDataSlice.spec.ts +0 -53
  405. package/test/state/externalEventsMiddleware.spec.ts +0 -178
  406. package/test/state/graphicalItemsSlice.spec.ts +0 -92
  407. package/test/state/hooks.spec.tsx +0 -68
  408. package/test/state/legendSlice.spec.ts +0 -44
  409. package/test/state/mouseEventsMiddleware.spec.ts +0 -75
  410. package/test/state/optionsSlice.spec.ts +0 -19
  411. package/test/state/reduxDevtoolsJsonStringifyReplacer.spec.ts +0 -25
  412. package/test/state/referenceElementsSlice.spec.ts +0 -84
  413. package/test/state/selectors/areaSelectors.spec.tsx +0 -77
  414. package/test/state/selectors/axisSelectors.spec.tsx +0 -1418
  415. package/test/state/selectors/barStackSelectors.spec.tsx +0 -752
  416. package/test/state/selectors/brushSelectors.spec.tsx +0 -30
  417. package/test/state/selectors/cartesianAxisSlice.spec.ts +0 -96
  418. package/test/state/selectors/combineNiceTicks.spec.ts +0 -207
  419. package/test/state/selectors/combiners/combineActiveTooltipIndex.spec.ts +0 -61
  420. package/test/state/selectors/combiners/combineAllBarPositions.spec.ts +0 -39
  421. package/test/state/selectors/combiners/combineConfiguredScale.spec.ts +0 -56
  422. package/test/state/selectors/combiners/combineDisplayedStackedData.spec.ts +0 -123
  423. package/test/state/selectors/combiners/combineRealScaleType.spec.ts +0 -80
  424. package/test/state/selectors/containerSelectors.spec.tsx +0 -168
  425. package/test/state/selectors/dataSelectors.spec.tsx +0 -136
  426. package/test/state/selectors/legendSelectors.spec.tsx +0 -113
  427. package/test/state/selectors/lineSelectors.spec.tsx +0 -60
  428. package/test/state/selectors/pieSelectors.spec.tsx +0 -72
  429. package/test/state/selectors/radarSelectors.spec.tsx +0 -496
  430. package/test/state/selectors/rootPropsSelectors.spec.tsx +0 -169
  431. package/test/state/selectors/scatterSelectors.spec.tsx +0 -47
  432. package/test/state/selectors/selectActiveTooltipIndex.spec.tsx +0 -234
  433. package/test/state/selectors/selectAllAxes.spec.tsx +0 -18
  434. package/test/state/selectors/selectAxisDomain.spec.tsx +0 -21
  435. package/test/state/selectors/selectAxisDomainIncludingNiceTicks.spec.tsx +0 -19
  436. package/test/state/selectors/selectAxisRangeWithReverse.spec.tsx +0 -22
  437. package/test/state/selectors/selectAxisScale.spec.tsx +0 -91
  438. package/test/state/selectors/selectBarRectangles.stackOffset.spec.tsx +0 -503
  439. package/test/state/selectors/selectBaseAxis.spec.tsx +0 -56
  440. package/test/state/selectors/selectCartesianItemsSettings.spec.tsx +0 -57
  441. package/test/state/selectors/selectChartOffset.spec.tsx +0 -26
  442. package/test/state/selectors/selectDisplayedData.spec.tsx +0 -282
  443. package/test/state/selectors/selectIsTooltipActive.spec.tsx +0 -231
  444. package/test/state/selectors/selectNumericalDomain.spec.tsx +0 -21
  445. package/test/state/selectors/selectRealScaleType.spec.tsx +0 -19
  446. package/test/state/selectors/selectStackGroups.spec.tsx +0 -322
  447. package/test/state/selectors/selectXAxisPosition.spec.tsx +0 -22
  448. package/test/state/selectors/selectYAxisPosition.spec.tsx +0 -22
  449. package/test/state/selectors/selectors.spec.tsx +0 -1613
  450. package/test/state/throttling.spec.ts +0 -200
  451. package/test/state/zIndexSlice.spec.ts +0 -85
  452. package/test/synchronisation/useChartSynchronisation.spec.tsx +0 -225
  453. package/test/util/BarUtils.spec.ts +0 -39
  454. package/test/util/CartesianUtils/CartesianUtils.spec.ts +0 -261
  455. package/test/util/CartesianUtils/rectWithPoints.spec.ts +0 -48
  456. package/test/util/ChartUtils/ChartUtils.spec.ts +0 -491
  457. package/test/util/ChartUtils/appendOffsetOfLegend.spec.ts +0 -136
  458. package/test/util/ChartUtils/appendOffsetOfLegend.spec.tsx +0 -133
  459. package/test/util/ChartUtils/getCateCoordinateOfLine.spec.ts +0 -83
  460. package/test/util/ChartUtils/getStackedData.spec.ts +0 -416
  461. package/test/util/ChartUtils/truncateByDomain.spec.ts +0 -70
  462. package/test/util/DataUtils.spec.ts +0 -385
  463. package/test/util/DomUtils.spec.tsx +0 -117
  464. package/test/util/FunnelUtils.spec.tsx +0 -70
  465. package/test/util/Global.spec.ts +0 -11
  466. package/test/util/LRUCache.spec.ts +0 -81
  467. package/test/util/LogUtils.spec.ts +0 -45
  468. package/test/util/PolarUtils.spec.ts +0 -66
  469. package/test/util/ReduceCssCalcPrototype.spec.ts +0 -141
  470. package/test/util/ShallowEqual.spec.ts +0 -102
  471. package/test/util/TickUtils.spec.ts +0 -29
  472. package/test/util/axisPropsAreEqual.spec.ts +0 -93
  473. package/test/util/createChartHelpers.spec.tsx +0 -210
  474. package/test/util/cursor/getCursorPoints.spec.ts +0 -136
  475. package/test/util/cursor/getCursorRectangle.spec.ts +0 -50
  476. package/test/util/cursor/getRadialCursorPoints.spec.ts +0 -36
  477. package/test/util/errorValue.spec.ts +0 -69
  478. package/test/util/getEveryNth.spec.ts +0 -39
  479. package/test/util/getRadiusAndStrokeWidthFromDot.spec.ts +0 -51
  480. package/test/util/getRelativeCoordinate.spec.ts +0 -250
  481. package/test/util/getSliced.spec.ts +0 -45
  482. package/test/util/isDomainSpecifiedByUser.spec.ts +0 -207
  483. package/test/util/isWellBehavedNumber.spec.ts +0 -54
  484. package/test/util/payload/getUniqPayload.spec.ts +0 -56
  485. package/test/util/propsAreEqual.spec.ts +0 -75
  486. package/test/util/round.spec.ts +0 -112
  487. package/test/util/scale/arithmetic.spec.ts +0 -61
  488. package/test/util/scale/createCategoricalInverse.spec.ts +0 -84
  489. package/test/util/scale/getNiceTickValues.spec.ts +0 -421
  490. package/test/util/scale/getTickValuesFixedDomain.spec.ts +0 -155
  491. package/test/util/svgPropertiesAndEvents.spec.tsx +0 -206
  492. package/test/util/svgPropertiesNoEvents.spec.tsx +0 -228
  493. package/test/util/tooltip/translate.spec.ts +0 -396
  494. package/test/util/useAnimationId.spec.tsx +0 -59
  495. package/test/util/useElementOffset.spec.tsx +0 -173
  496. package/test/util/usePrefersReducedMotion.spec.ts +0 -54
  497. package/test/util/useUniqueId.spec.ts +0 -99
  498. package/test/utils/diagnostics-allowlist.ts +0 -18
  499. package/test/utils/diagnostics.ts +0 -58
  500. package/test/zIndex/AllZIndexPortals.spec.tsx +0 -83
  501. package/test/zIndex/DefaultZIndexes.spec.ts +0 -80
  502. package/test/zIndex/DynamicZIndex.spec.tsx +0 -102
  503. package/test/zIndex/ZIndexLayer.portalOwner.spec.tsx +0 -125
  504. package/test/zIndex/componentZIndex.spec.tsx +0 -255
  505. package/test/zIndex/getZIndexFromUnknown.spec.ts +0 -51
  506. package/test/zIndex/multiChartZIndexIsolation.spec.tsx +0 -90
  507. package/test/zIndex/zIndexSelectors.spec.ts +0 -172
  508. package/tsconfig.json +0 -11
@@ -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, merge, omit, Show, useContext } from "solid-js";
19
+ import { createContext, createMemo, Show, useContext, mergeProps, splitProps } from "solid-js";
20
20
  import type { Accessor } from "solid-js";
21
- import type { JSX } from "@solidjs/web";
21
+ import type { JSX } from "solid-js";
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,7 +109,11 @@ export function CartesianLabelContextProvider(
109
109
  width: props.width,
110
110
  height: props.height,
111
111
  }));
112
- return <CartesianLabelContext value={viewBox}>{props.children}</CartesianLabelContext>;
112
+ return (
113
+ <CartesianLabelContext.Provider value={viewBox}>
114
+ {props.children}
115
+ </CartesianLabelContext.Provider>
116
+ );
113
117
  }
114
118
 
115
119
  export function useCartesianLabelContext(): Accessor<TrapezoidViewBox | undefined> {
@@ -141,7 +145,7 @@ export function PolarLabelContextProvider(
141
145
  endAngle: props.endAngle,
142
146
  clockWise: props.clockWise,
143
147
  }));
144
- return <PolarLabelContext value={viewBox}>{props.children}</PolarLabelContext>;
148
+ return <PolarLabelContext.Provider value={viewBox}>{props.children}</PolarLabelContext.Provider>;
145
149
  }
146
150
 
147
151
  export function usePolarLabelContext(): Accessor<PolarViewBoxRequired | undefined> {
@@ -223,7 +227,7 @@ const getDeltaAngle = (startAngle: number, endAngle: number): number => {
223
227
  * @consumes CartesianLabelContext
224
228
  */
225
229
  export function Label(outerProps: Props): JSX.Element {
226
- const props = merge(defaultLabelProps, outerProps);
230
+ const props = mergeProps(defaultLabelProps, outerProps);
227
231
  const cartesianViewBox = useCartesianLabelContext();
228
232
  const polarLabelContext = usePolarLabelContext();
229
233
  const generatedRadialPathId = useUniqueId("recharts-radial-line");
@@ -252,8 +256,7 @@ export function Label(outerProps: Props): JSX.Element {
252
256
 
253
257
  const textSvgProps = createMemo(() =>
254
258
  svgPropertiesAndEvents(
255
- omit(
256
- props,
259
+ splitProps(props, [
257
260
  "content",
258
261
  "viewBox",
259
262
  "parentViewBox",
@@ -267,7 +270,7 @@ export function Label(outerProps: Props): JSX.Element {
267
270
  "index",
268
271
  "id",
269
272
  "class",
270
- ),
273
+ ])[1],
271
274
  ),
272
275
  );
273
276
 
@@ -389,7 +392,7 @@ export function Label(outerProps: Props): JSX.Element {
389
392
  if (vb == null || typeof content !== "function") {
390
393
  return undefined;
391
394
  }
392
- return { content, args: omit({ ...props, viewBox: vb }, "content") };
395
+ return { content, args: splitProps({ ...props, viewBox: vb }, ["content"])[1] };
393
396
  });
394
397
 
395
398
  // Render the default/polar/radial text labels inline under <Show> (their render
@@ -441,7 +444,7 @@ export function Label(outerProps: Props): JSX.Element {
441
444
  <text
442
445
  {...textSvgProps()}
443
446
  dominant-baseline="central"
444
- class={["recharts-radial-bar-label", props.class]}
447
+ class={["recharts-radial-bar-label", props.class].filter(Boolean).join(" ")}
445
448
  >
446
449
  <defs>
447
450
  <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, omit, Show, useContext } from "solid-js";
17
+ import { createContext, createMemo, For, Show, useContext, splitProps } from "solid-js";
18
18
  import type { Accessor } from "solid-js";
19
- import type { JSX } from "@solidjs/web";
19
+ import type { JSX } from "solid-js";
20
20
  import {
21
21
  type LabelContentType,
22
22
  type LabelFormatter,
@@ -135,7 +135,9 @@ export function CartesianLabelListContextProvider(props: {
135
135
  children: JSX.Element;
136
136
  }): JSX.Element {
137
137
  return (
138
- <CartesianLabelListContext value={props.value}>{props.children}</CartesianLabelListContext>
138
+ <CartesianLabelListContext.Provider value={props.value}>
139
+ {props.children}
140
+ </CartesianLabelListContext.Provider>
139
141
  );
140
142
  }
141
143
 
@@ -147,7 +149,11 @@ export function PolarLabelListContextProvider(props: {
147
149
  value: Accessor<ReadonlyArray<PolarLabelListEntry> | undefined>;
148
150
  children: JSX.Element;
149
151
  }): JSX.Element {
150
- return <PolarLabelListContext value={props.value}>{props.children}</PolarLabelListContext>;
152
+ return (
153
+ <PolarLabelListContext.Provider value={props.value}>
154
+ {props.children}
155
+ </PolarLabelListContext.Provider>
156
+ );
151
157
  }
152
158
 
153
159
  /**
@@ -165,8 +171,7 @@ export function LabelList(props: Props): JSX.Element {
165
171
  const list = cartesianData?.() ?? polarData?.();
166
172
  return list != null && list.length > 0 ? list : undefined;
167
173
  });
168
- const others = omit(
169
- props,
174
+ const others = splitProps(props, [
170
175
  "valueAccessor",
171
176
  "clockWise",
172
177
  "dataKey",
@@ -177,7 +182,7 @@ export function LabelList(props: Props): JSX.Element {
177
182
  "offset",
178
183
  "angle",
179
184
  "formatter",
180
- );
185
+ ])[1];
181
186
 
182
187
  const valueOf = (
183
188
  entry: CartesianLabelListEntry | PolarLabelListEntry,
@@ -6,8 +6,9 @@
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 { createEffect, createMemo, merge, Show } from "solid-js";
10
- import { JSX, Portal } from "@solidjs/web";
9
+ import { createMemo, Show, mergeProps, createEffect, on } from "solid-js";
10
+ import type { JSX } from "solid-js";
11
+ import { DirectPortal } from "../util/DirectPortal";
11
12
  import {
12
13
  ContentType,
13
14
  DefaultLegendContent,
@@ -127,7 +128,7 @@ function getDefaultPosition(
127
128
  }
128
129
 
129
130
  export const Legend = (props: LegendProps): JSX.Element => {
130
- const merged = merge(legendDefaultProps, props);
131
+ const merged = mergeProps(legendDefaultProps, props);
131
132
  const store = useAppStore();
132
133
  const contextPayload = useLegendPayload();
133
134
  const legendPortalFromContext = useLegendPortal();
@@ -138,26 +139,30 @@ export const Legend = (props: LegendProps): JSX.Element => {
138
139
 
139
140
  // Push the legend settings into the store (drives the offset's legend space).
140
141
  createEffect(
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
- },
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
+ ),
150
153
  );
151
154
 
152
155
  // Report the measured size; reset to 0 on cleanup. (When a portal is supplied
153
156
  // from props, nothing needs the size, matching recharts.)
154
157
  createEffect(
155
- () => ({ width: lastBoundingBox().width, height: lastBoundingBox().height }),
156
- (size) => {
157
- if (props.portal == null) {
158
- store?.actions.legend.setLegendSize(size);
159
- }
160
- },
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
+ ),
161
166
  );
162
167
 
163
168
  const portal = (): HTMLElement | null => props.portal ?? legendPortalFromContext();
@@ -167,7 +172,7 @@ export const Legend = (props: LegendProps): JSX.Element => {
167
172
  );
168
173
 
169
174
  // Props handed to a function-form `content`. Built as a plain object (spreading
170
- // the Solid `merge()` proxy leaks a MERGE_SOURCE symbol and doesn't materialize
175
+ // the Solid `mergeProps()` proxy leaks a MERGE_SOURCE symbol and doesn't materialize
171
176
  // keys); reads finalPayload()/chart dims so the enclosing reactive insert re-runs
172
177
  // when the payload populates.
173
178
  const buildContentProps = (): LegendContentProps => {
@@ -242,7 +247,7 @@ export const Legend = (props: LegendProps): JSX.Element => {
242
247
  }
243
248
  >
244
249
  {(mount) => (
245
- <Portal mount={mount()}>
250
+ <DirectPortal mount={mount()}>
246
251
  <div class="recharts-legend-wrapper" style={outerStyle()} ref={updateBoundingBox}>
247
252
  <Show
248
253
  when={typeof merged.content === "function" ? merged.content : null}
@@ -266,7 +271,7 @@ export const Legend = (props: LegendProps): JSX.Element => {
266
271
  {(contentFn) => <>{contentFn()(buildContentProps())}</>}
267
272
  </Show>
268
273
  </div>
269
- </Portal>
274
+ </DirectPortal>
270
275
  )}
271
276
  </Show>
272
277
  );
@@ -3,18 +3,19 @@
3
3
  // prop, and two-arg createEffect. Prop deviation: className -> class.
4
4
  import {
5
5
  Accessor,
6
+ batch,
6
7
  createContext,
7
- createEffect,
8
8
  createMemo,
9
9
  createSignal,
10
- flush,
11
- omit,
12
10
  onCleanup,
13
- onSettled,
11
+ onMount,
14
12
  untrack,
15
13
  useContext,
14
+ splitProps,
15
+ createEffect,
16
+ on,
16
17
  } from "solid-js";
17
- import type { JSX } from "@solidjs/web";
18
+ import type { JSX } from "solid-js";
18
19
  import {
19
20
  calculateChartDimensions,
20
21
  defaultResponsiveContainerProps,
@@ -93,9 +94,9 @@ function ResponsiveContainerContextProvider(props: {
93
94
  });
94
95
 
95
96
  return (
96
- <ResponsiveContainerContext value={size}>
97
+ <ResponsiveContainerContext.Provider value={size}>
97
98
  {size() == null ? null : props.children}
98
- </ResponsiveContainerContext>
99
+ </ResponsiveContainerContext.Provider>
99
100
  );
100
101
  }
101
102
 
@@ -181,8 +182,7 @@ function SizeDetectorContainer(props: Props): JSX.Element {
181
182
  // forwarded onto the wrapper div, mirroring recharts' `{...others}` spread.
182
183
  // We omit every prop this component consumes itself so they don't leak onto
183
184
  // the DOM. (`omit` keeps the rest reactive — no destructuring.)
184
- const others = omit(
185
- props,
185
+ const others = splitProps(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
- );
201
+ ])[1];
202
202
  const initialDimension = (): { width: number; height: number } =>
203
203
  props.initialDimension ?? defaultResponsiveContainerProps.initialDimension;
204
204
  const width = (): Percent | number | undefined => props.width;
@@ -217,13 +217,14 @@ function SizeDetectorContainer(props: Props): JSX.Element {
217
217
  if (untrack(containerWidth) === roundedWidth && untrack(containerHeight) === roundedHeight) {
218
218
  return;
219
219
  }
220
- setContainerWidth(roundedWidth);
221
- setContainerHeight(roundedHeight);
220
+ batch(() => {
221
+ setContainerWidth(roundedWidth);
222
+ setContainerHeight(roundedHeight);
223
+ });
222
224
  };
223
225
 
224
226
  const setContainerSize = (newWidth: number, newHeight: number): void => {
225
227
  writeContainerSize(newWidth, newHeight);
226
- flush();
227
228
  };
228
229
 
229
230
  let containerEl: HTMLDivElement | undefined;
@@ -240,10 +241,8 @@ function SizeDetectorContainer(props: Props): JSX.Element {
240
241
  // i.e. AFTER the committed DOM is laid out. The ref callback runs at element
241
242
  // creation (possibly before insertion/layout), where getBoundingClientRect()
242
243
  // returns 0x0 and a bogus "width(0) and height(0)" warning fires on every
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(() => {
244
+ // mount. Measure after insertion in onMount.
245
+ onMount(() => {
247
246
  const el = containerEl;
248
247
  if (el == null || typeof ResizeObserver === "undefined") {
249
248
  return;
@@ -292,49 +291,53 @@ function SizeDetectorContainer(props: Props): JSX.Element {
292
291
  ]);
293
292
 
294
293
  createEffect(
295
- () => props.aspect,
296
- (aspect) => {
297
- warn(!aspect || aspect > 0, "The aspect(%s) must be greater than zero.", aspect);
298
- },
294
+ on(
295
+ () => props.aspect,
296
+ (aspect) => {
297
+ warn(!aspect || aspect > 0, "The aspect(%s) must be greater than zero.", aspect);
298
+ },
299
+ ),
299
300
  );
300
301
 
301
302
  createEffect(
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,
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,
320
322
  please check the style of container, or the props width(%s) and height(%s),
321
323
  or add a minWidth(%s) or minHeight(%s) or use aspect(%s) to control the
322
324
  height and width.`,
323
- value.calculatedWidth,
324
- value.calculatedHeight,
325
- value.width,
326
- value.height,
327
- value.minWidth,
328
- value.minHeight,
329
- value.aspect,
330
- );
331
- },
325
+ value.calculatedWidth,
326
+ value.calculatedHeight,
327
+ value.width,
328
+ value.height,
329
+ value.minWidth,
330
+ value.minHeight,
331
+ value.aspect,
332
+ );
333
+ },
334
+ ),
332
335
  );
333
336
 
334
337
  return (
335
338
  <div
336
339
  id={props.id ? `${props.id}` : undefined}
337
- class={["recharts-responsive-container", props.class]}
340
+ class={["recharts-responsive-container", props.class].filter(Boolean).join(" ")}
338
341
  style={wrapperStyle()}
339
342
  ref={setRef}
340
343
  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, merge, omit, Show } from "solid-js";
12
- import type { JSX } from "@solidjs/web";
11
+ import { createMemo, For, Show, mergeProps, splitProps } from "solid-js";
12
+ import type { JSX } from "solid-js";
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 = merge(textDefaultProps, props);
317
+ const merged = mergeProps(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 = omit(merged, ...HANDLED_KEYS);
386
+ const rest = splitProps(merged, [...HANDLED_KEYS])[1];
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]}
421
+ class={["recharts-text", g().class].filter(Boolean).join(" ")}
422
422
  text-anchor={g().textAnchor}
423
423
  fill={g().fill}
424
424
  >
@@ -9,8 +9,9 @@
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 { createEffect, createMemo, merge, Show } from "solid-js";
13
- import { JSX, Portal } from "@solidjs/web";
12
+ import { createMemo, Show, mergeProps, createEffect, on } from "solid-js";
13
+ import type { JSX } from "solid-js";
14
+ import { DirectPortal } from "../util/DirectPortal";
14
15
  import {
15
16
  DefaultTooltipContent,
16
17
  Formatter,
@@ -148,7 +149,7 @@ function renderContent(content: ContentType | undefined, props: TooltipContentPr
148
149
  * interaction or, before any interaction, from `defaultIndex`.
149
150
  */
150
151
  export const Tooltip = (props: TooltipProps): JSX.Element => {
151
- const merged = merge(defaultTooltipProps, props);
152
+ const merged = mergeProps(defaultTooltipProps, props);
152
153
  const store = useAppStore();
153
154
  const viewBox = useViewBox();
154
155
  const accessibilityLayer = useAccessibilityLayer();
@@ -158,7 +159,7 @@ export const Tooltip = (props: TooltipProps): JSX.Element => {
158
159
  const defaultIndexAsString = (): TooltipIndex | undefined =>
159
160
  typeof merged.defaultIndex === "number" ? String(merged.defaultIndex) : merged.defaultIndex;
160
161
 
161
- // merge() keeps an explicit `trigger={undefined}` as undefined (unlike React's
162
+ // mergeProps() keeps an explicit `trigger={undefined}` as undefined (unlike React's
162
163
  // resolveDefaultProps, which would apply the default). The interaction selectors
163
164
  // gate on `trigger === "hover"`, so resolve the default explicitly.
164
165
  const resolvedTrigger = (): TooltipTrigger => merged.trigger ?? defaultTooltipProps.trigger;
@@ -166,16 +167,18 @@ export const Tooltip = (props: TooltipProps): JSX.Element => {
166
167
  // Push the Tooltip's settings into the store so the interaction selectors can
167
168
  // read shared/trigger/axisId/active/defaultIndex.
168
169
  createEffect(
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
- },
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
+ ),
179
182
  );
180
183
 
181
184
  const tooltipEventType = useAppSelector((state) => selectTooltipEventType(state, merged.shared));
@@ -244,7 +247,7 @@ export const Tooltip = (props: TooltipProps): JSX.Element => {
244
247
  </Show>
245
248
  <Show when={viewBox() && tooltipEventType() && portal()}>
246
249
  {(mount) => {
247
- // Built as a plain object (spreading the Solid merge() proxy leaks a
250
+ // Built as a plain object (spreading the Solid mergeProps() proxy leaks a
248
251
  // MERGE_SOURCE symbol into the bag handed to a function-form `content`).
249
252
  const contentProps = (): TooltipContentProps => ({
250
253
  accessibilityLayer: accessibilityLayer(),
@@ -262,7 +265,7 @@ export const Tooltip = (props: TooltipProps): JSX.Element => {
262
265
  formatter: merged.formatter,
263
266
  includeHidden: merged.includeHidden,
264
267
  isAnimationActive: merged.isAnimationActive,
265
- // merge() leaves explicit `undefined`; React defaultProps would still apply defaults.
268
+ // mergeProps() leaves explicit `undefined`; React defaultProps would still apply defaults.
266
269
  itemSorter: props.itemSorter ?? defaultTooltipProps.itemSorter,
267
270
  itemStyle: merged.itemStyle,
268
271
  label: finalLabel(),
@@ -279,7 +282,7 @@ export const Tooltip = (props: TooltipProps): JSX.Element => {
279
282
  wrapperStyle: merged.wrapperStyle,
280
283
  });
281
284
  return (
282
- <Portal mount={mount()}>
285
+ <DirectPortal mount={mount()}>
283
286
  <TooltipBoundingBox
284
287
  allowEscapeViewBox={merged.allowEscapeViewBox}
285
288
  animationDuration={merged.animationDuration}
@@ -300,7 +303,7 @@ export const Tooltip = (props: TooltipProps): JSX.Element => {
300
303
  >
301
304
  {renderContent(merged.content, contentProps())}
302
305
  </TooltipBoundingBox>
303
- </Portal>
306
+ </DirectPortal>
304
307
  );
305
308
  }}
306
309
  </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 onSettled (single listener; the handler reads
4
+ // listener moves from useEffect to onMount (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 { createEffect, createSignal, onSettled } from "solid-js";
11
- import type { JSX } from "@solidjs/web";
10
+ import { createSignal, onCleanup, onMount, createEffect, on } from "solid-js";
11
+ import type { JSX } from "solid-js";
12
12
  import {
13
13
  AllowInDimension,
14
14
  AnimationDuration,
@@ -77,31 +77,33 @@ export const TooltipBoundingBox = (props: TooltipBoundingBoxProps): JSX.Element
77
77
  y: props.coordinate?.y ?? 0,
78
78
  });
79
79
 
80
- onSettled(() => {
80
+ onMount(() => {
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
- return () => {
87
+ onCleanup(() => {
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
- () => ({ 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
- },
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
+ ),
105
107
  );
106
108
 
107
109
  const translate = (): { cssProperties: JSX.CSSProperties; cssClasses: string } =>
@@ -145,7 +147,7 @@ export const TooltipBoundingBox = (props: TooltipBoundingBoxProps): JSX.Element
145
147
  };
146
148
 
147
149
  return (
148
- <div tabindex={-1} class={translate().cssClasses} style={outerStyle()} ref={props.innerRef}>
150
+ <div tabIndex={-1} class={translate().cssClasses} style={outerStyle()} ref={props.innerRef}>
149
151
  {props.children}
150
152
  </div>
151
153
  );
@@ -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 "@solidjs/web";
5
+ import type { JSX } from "solid-js";
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 "@solidjs/web";
7
+ import type { JSX } from "solid-js";
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 value={clipPathId}>
27
+ <ClipPathIdContext.Provider 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>
34
+ </ClipPathIdContext.Provider>
35
35
  )}
36
36
  </Show>
37
37
  );
@@ -1,9 +1,9 @@
1
+ import { splitProps } from "solid-js";
1
2
  // Ported from recharts 3.8.1 src/container/Layer.tsx (commit 7a23854).
2
3
  // Solid deviations: `className` → `class` (Omit the wide SVG `class`); `clsx` →
3
- // `class={[...]}`; `forwardRef` → `ref` prop; no destructuring (omit + props).
4
+ // `class={[...].filter(Boolean).join(" ")}`; `forwardRef` → `ref` prop; no destructuring (omit + props).
4
5
  import { type CamelSvgProps } from "../util/svgPropertiesNoEvents";
5
- import { omit } from "solid-js";
6
- import type { JSX } from "@solidjs/web";
6
+ import type { JSX } from "solid-js";
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]}
32
- {...svgPropertiesAndEvents({ ...omit(props, "class", "children", "ref") })}
31
+ class={["recharts-layer", props.class].filter(Boolean).join(" ")}
32
+ {...svgPropertiesAndEvents({ ...splitProps(props, ["class", "children", "ref"])[1] })}
33
33
  ref={props.ref}
34
34
  >
35
35
  {props.children}