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
@@ -20,12 +20,16 @@
20
20
  // `any`); the value comes from `getValueByDataKey`, which is genuinely
21
21
  // untyped, and only x/y are needed to draw. It flows through `scale.map`
22
22
  // (which accepts `unknown`) unchanged.
23
- import { createEffect, createMemo, createSignal, merge, Show, untrack } from "solid-js";
23
+ import { createMemo, createSignal, Show, untrack, mergeProps, createEffect, on } from "solid-js";
24
24
  import { useActiveTooltipDataPoints } from "../hooks";
25
25
  import { selectActiveTooltipIndex } from "../state/selectors/tooltipSelectors";
26
- import type { JSX } from "@solidjs/web";
26
+ import type { JSX } from "solid-js";
27
27
  import { useAppSelector, useAppStore } from "../state/hooks";
28
- import { AnimatedItems, type AnimationInterpolateFn } from "../animation/AnimatedItems";
28
+ import {
29
+ AnimatedItems,
30
+ useAnimationCallbacks,
31
+ type AnimationInterpolateFn,
32
+ } from "../animation/AnimatedItems";
29
33
  import { matchByIndex, type AnimationItem, type AnimationMatchByProp } from "../animation/matchBy";
30
34
  import type { MutableRef } from "../animation/useAnimationStartSnapshot";
31
35
  import { LineDrawShape, type LineDrawShapeProps } from "./LineDrawShape";
@@ -80,7 +84,7 @@ import { BaseAxisWithScale } from "../state/selectors/axisSelectors";
80
84
  import { GraphicalItemClipPath, useNeedsClip } from "./GraphicalItemClipPath";
81
85
  import { DefaultZIndexes } from "../zIndex/DefaultZIndexes";
82
86
  import { ZIndexLayer } from "../zIndex/ZIndexLayer";
83
- import { unregisterOnCleanup } from "../state/unregisterOnCleanup";
87
+ import { registerInStore } from "../state/registerInStore";
84
88
 
85
89
  export interface LinePointItem {
86
90
  readonly value: unknown;
@@ -337,44 +341,32 @@ export const lineDefaultProps = {
337
341
 
338
342
  export const Line = (props: LineProps): JSX.Element => {
339
343
  const store = useAppStore();
340
- const merged = merge(lineDefaultProps, props);
344
+ const merged = mergeProps(lineDefaultProps, props);
341
345
  const isPanorama = useIsPanorama();
342
346
  const layout = useCartesianChartLayout();
343
347
  const id = useUniqueId("recharts-line", props.id);
344
348
 
345
- let prev: LineSettings | null = null;
346
-
347
- createEffect(
348
- (): LineSettings => ({
349
- id,
350
- type: "line",
351
- isPanorama,
352
- data: merged.data,
353
- dataKey: merged.dataKey,
354
- xAxisId: merged.xAxisId,
355
- yAxisId: merged.yAxisId,
356
- zAxisId: 0,
357
- hide: merged.hide,
358
- }),
359
- (settings) => {
360
- if (store == null) {
361
- return;
362
- }
363
- if (prev === null) {
364
- store.actions.graphicalItems.addCartesianGraphicalItem(settings);
365
- } else if (prev !== settings) {
366
- store.actions.graphicalItems.replaceCartesianGraphicalItem({ prev, next: settings });
367
- }
368
- prev = settings;
369
- },
370
- );
371
-
372
- unregisterOnCleanup(() => {
373
- if (prev && store != null) {
374
- store.actions.graphicalItems.removeCartesianGraphicalItem(prev);
375
- prev = null;
376
- }
377
- });
349
+ if (store != null) {
350
+ registerInStore<LineSettings>(
351
+ () => ({
352
+ id,
353
+ type: "line",
354
+ isPanorama,
355
+ data: merged.data,
356
+ dataKey: merged.dataKey,
357
+ xAxisId: merged.xAxisId,
358
+ yAxisId: merged.yAxisId,
359
+ zAxisId: 0,
360
+ hide: merged.hide,
361
+ }),
362
+ {
363
+ add: (next) => store.actions.graphicalItems.addCartesianGraphicalItem(next),
364
+ replace: (prev, next) =>
365
+ store.actions.graphicalItems.replaceCartesianGraphicalItem({ prev, next }),
366
+ remove: (prev) => store.actions.graphicalItems.removeCartesianGraphicalItem(prev),
367
+ },
368
+ );
369
+ }
378
370
 
379
371
  const points = useAppSelector((state) =>
380
372
  selectLinePoints(state, merged.xAxisId, merged.yAxisId, isPanorama, id),
@@ -494,19 +486,11 @@ export const Line = (props: LineProps): JSX.Element => {
494
486
  });
495
487
  // Labels are hidden while the entrance animation runs and shown once it ends
496
488
  // (matching recharts: showLabels = !isAnimating).
497
- // ownedWrite: handleAnimationEnd also fires from the animation effect cleanup
498
- // when a mid-animation chart is disposed (route/soft navigation) — a legal
499
- // teardown write, not a write-in-computation bug.
500
- const [showLabels, setShowLabels] = createSignal(true, { ownedWrite: true });
501
- const labelContextEntries = createMemo(() => (showLabels() ? labelListEntries() : undefined));
502
- const handleAnimationStart = (): void => {
503
- props.onAnimationStart?.();
504
- setShowLabels(false);
505
- };
506
- const handleAnimationEnd = (): void => {
507
- props.onAnimationEnd?.();
508
- setShowLabels(true);
509
- };
489
+ const { isAnimating, handleAnimationStart, handleAnimationEnd } = useAnimationCallbacks(
490
+ () => props.onAnimationStart?.(),
491
+ () => props.onAnimationEnd?.(),
492
+ );
493
+ const labelContextEntries = createMemo(() => (isAnimating() ? undefined : labelListEntries()));
510
494
 
511
495
  // Measure on data change AND on animation start/end (showLabels flips): a
512
496
  // data-change morph alters the path geometry per frame, so the length taken
@@ -515,19 +499,21 @@ export const Line = (props: LineProps): JSX.Element => {
515
499
  // settled dasharray the new curve's true length — mirroring recharts, which
516
500
  // recomputes totalLength on the post-animation re-render.
517
501
  createEffect(
518
- () => ({ points: points(), showLabels: showLabels() }),
519
- () => {
520
- if (curveEl?.getTotalLength == null) {
521
- return;
522
- }
523
- let length = 0;
524
- try {
525
- length = curveEl.getTotalLength() || 0;
526
- } catch {
527
- return; // getTotalLength can throw on detached/empty paths — keep the last value.
528
- }
529
- setTotalLength(length);
530
- },
502
+ on(
503
+ () => ({ points: points(), showLabels: !isAnimating() }),
504
+ () => {
505
+ if (curveEl?.getTotalLength == null) {
506
+ return;
507
+ }
508
+ let length = 0;
509
+ try {
510
+ length = curveEl.getTotalLength() || 0;
511
+ } catch {
512
+ return; // getTotalLength can throw on detached/empty paths — keep the last value.
513
+ }
514
+ setTotalLength(length);
515
+ },
516
+ ),
531
517
  );
532
518
 
533
519
  // Raw user event handlers forwarded to the curve. recharts' StaticCurve spreads
@@ -627,8 +613,7 @@ export const Line = (props: LineProps): JSX.Element => {
627
613
  // recharts: visibleLength is computed only while the animation is
628
614
  // active; once settled it is null so no entrance dasharray remains.
629
615
  const len = untrack(totalLength);
630
- const animationActive =
631
- untrack(showLabels) === false || animationElapsedTime < 1;
616
+ const animationActive = untrack(isAnimating) || animationElapsedTime < 1;
632
617
  const visibleLength = animationActive
633
618
  ? animatedLineLength.getVisibleLength(animationElapsedTime, len)
634
619
  : null;
@@ -16,8 +16,8 @@
16
16
  // forwards the element to the parent-supplied `forwardPathRef` so the parent
17
17
  // (<Line>) can drive `shouldUpdatePreviousRef`/`getVisibleLength` off the same
18
18
  // measured length.
19
- import { createEffect, createSignal, omit } from "solid-js";
20
- import type { JSX } from "@solidjs/web";
19
+ import { createSignal, splitProps, createEffect, on } from "solid-js";
20
+ import type { JSX } from "solid-js";
21
21
  import { Curve, type CurveProps } from "../shape/Curve";
22
22
  import type { ShapeAnimationProps } from "../util/types";
23
23
 
@@ -138,19 +138,23 @@ export function LineDrawShape(props: LineDrawShapeProps): JSX.Element {
138
138
  props.forwardPathRef?.(el);
139
139
  };
140
140
 
141
- // Re-measure whenever the geometry or the animation frame changes (a data-change
142
- // morph alters the path per frame; remeasuring once the frame committed gives the
143
- // settled dash the new curve's true length mirrors recharts recomputing
144
- // totalLength on the post-animation re-render).
141
+ // Re-measure the path length only while the entrance dash is actually being
142
+ // drawn (`visibleLength != null`). `totalLength` feeds `strokeDasharray` ONLY on
143
+ // that branch (see below), so once the reveal is doneincluding every
144
+ // subsequent data-change morph, where `frame` changes per frame — measuring
145
+ // would force a synchronous SVG layout (reflow) each frame for a value nothing
146
+ // reads. Guarding on visibleLength drops those per-frame reflows.
145
147
  createEffect(
146
- () => ({ points: props.points, visibleLength: props.visibleLength }),
147
- () => {
148
- if (pathEl?.getTotalLength == null) {
149
- return;
150
- }
151
- const length = getTotalLength(pathEl);
152
- setTotalLength(length);
153
- },
148
+ on(
149
+ () => ({ points: props.points, visibleLength: props.visibleLength }),
150
+ (deps) => {
151
+ if (deps.visibleLength == null || pathEl?.getTotalLength == null) {
152
+ return;
153
+ }
154
+ const length = getTotalLength(pathEl);
155
+ setTotalLength(length);
156
+ },
157
+ ),
154
158
  );
155
159
 
156
160
  const strokeDasharray = (): string | undefined => {
@@ -168,8 +172,7 @@ export function LineDrawShape(props: LineDrawShapeProps): JSX.Element {
168
172
  // Strip the animation-only props before forwarding to <Curve>; we set
169
173
  // connectNulls/strokeDasharray/pathRef explicitly below. `omit` keeps the
170
174
  // remaining props reactive (no destructuring of `props`).
171
- const curveProps = omit(
172
- props,
175
+ const curveProps = splitProps(props, [
173
176
  "animationElapsedTime",
174
177
  "isAnimating",
175
178
  "isEntrance",
@@ -177,7 +180,7 @@ export function LineDrawShape(props: LineDrawShapeProps): JSX.Element {
177
180
  "forwardPathRef",
178
181
  "strokeDasharray",
179
182
  "connectNulls",
180
- );
183
+ ])[1];
181
184
 
182
185
  return (
183
186
  <Curve
@@ -16,8 +16,8 @@
16
16
  // - PERMANENT-N/A (by design, NOT deferred): the custom-element `shape` branch
17
17
  // (React.cloneElement — use the render-function form). <Label>
18
18
  // CHILDREN are not rendered (the `label` prop is).
19
- import { createEffect, createMemo, merge, Show } from "solid-js";
20
- import type { JSX } from "@solidjs/web";
19
+ import { createMemo, Show, mergeProps } from "solid-js";
20
+ import type { JSX } from "solid-js";
21
21
  import { Layer } from "../container/Layer";
22
22
  import {
23
23
  CartesianLabelContextProvider,
@@ -41,7 +41,7 @@ import { CartesianScaleHelperImpl } from "../util/scale/CartesianScaleHelper";
41
41
  import type { AxisId } from "../state/cartesianAxisSlice";
42
42
  import { DefaultZIndexes } from "../zIndex/DefaultZIndexes";
43
43
  import { ZIndexLayer } from "../zIndex/ZIndexLayer";
44
- import { unregisterOnCleanup } from "../state/unregisterOnCleanup";
44
+ import { registerInStore } from "../state/registerInStore";
45
45
 
46
46
  type ReferenceCoordinateValue = number | string;
47
47
 
@@ -124,39 +124,29 @@ const renderRect = (option: ReferenceAreaProps["shape"], props: RectangleProps):
124
124
 
125
125
  function ReportReferenceArea(props: ReferenceAreaSettings): JSX.Element {
126
126
  const store = useAppStore();
127
- let prev: ReferenceAreaSettings | null = null;
128
-
129
- createEffect(
130
- (): ReferenceAreaSettings => ({
131
- id: props.id,
132
- xAxisId: props.xAxisId,
133
- yAxisId: props.yAxisId,
134
- ifOverflow: props.ifOverflow,
135
- x1: props.x1,
136
- x2: props.x2,
137
- y1: props.y1,
138
- y2: props.y2,
139
- }),
140
- (settings) => {
141
- if (store == null) {
142
- return;
143
- }
144
- if (prev === null) {
145
- store.actions.referenceElements.addArea(settings);
146
- } else if (prev !== settings) {
147
- store.actions.referenceElements.removeArea(prev);
148
- store.actions.referenceElements.addArea(settings);
149
- }
150
- prev = settings;
151
- },
152
- );
153
-
154
- unregisterOnCleanup(() => {
155
- if (prev && store != null) {
156
- store.actions.referenceElements.removeArea(prev);
157
- prev = null;
158
- }
159
- });
127
+ if (store != null) {
128
+ registerInStore<ReferenceAreaSettings>(
129
+ () => ({
130
+ id: props.id,
131
+ xAxisId: props.xAxisId,
132
+ yAxisId: props.yAxisId,
133
+ ifOverflow: props.ifOverflow,
134
+ x1: props.x1,
135
+ x2: props.x2,
136
+ y1: props.y1,
137
+ y2: props.y2,
138
+ }),
139
+ {
140
+ add: (next) => store.actions.referenceElements.addArea(next),
141
+ // No replace action on the slice; a change is remove-then-add (recharts idiom).
142
+ replace: (prev, next) => {
143
+ store.actions.referenceElements.removeArea(prev);
144
+ store.actions.referenceElements.addArea(next);
145
+ },
146
+ remove: (prev) => store.actions.referenceElements.removeArea(prev),
147
+ },
148
+ );
149
+ }
160
150
 
161
151
  return null;
162
152
  }
@@ -174,7 +164,7 @@ const referenceAreaDefaultProps = {
174
164
  } as const satisfies Partial<Props>;
175
165
 
176
166
  function ReferenceAreaImpl(props: Props): JSX.Element {
177
- const merged = merge(referenceAreaDefaultProps, props);
167
+ const merged = mergeProps(referenceAreaDefaultProps, props);
178
168
  const clipPathId = useClipPathId();
179
169
  const isPanorama = useIsPanorama();
180
170
  const xAxisScale = useAppSelector((s) => selectAxisScale(s, "xAxis", merged.xAxisId, isPanorama));
@@ -253,7 +243,7 @@ export function ReferenceArea<
253
243
  XValueType extends ReferenceCoordinateValue = ReferenceCoordinateValue,
254
244
  YValueType extends ReferenceCoordinateValue = ReferenceCoordinateValue,
255
245
  >(props: Props<XValueType, YValueType>): JSX.Element {
256
- const merged = merge(referenceAreaDefaultProps, props);
246
+ const merged = mergeProps(referenceAreaDefaultProps, props);
257
247
  const id = useUniqueId("recharts-reference-area");
258
248
  return (
259
249
  <>
@@ -12,8 +12,8 @@
12
12
  // - PERMANENT-N/A (by design, NOT deferred): the custom-element `shape` branch
13
13
  // (React.cloneElement — use the render-function form);
14
14
  // `children` is not rendered (CartesianLabelContext).
15
- import { createEffect, createMemo, merge, Show } from "solid-js";
16
- import type { JSX } from "@solidjs/web";
15
+ import { createMemo, Show, mergeProps } from "solid-js";
16
+ import type { JSX } from "solid-js";
17
17
  import { Layer } from "../container/Layer";
18
18
  import { Dot, type DotProps } from "../shape/Dot";
19
19
  import {
@@ -36,7 +36,7 @@ import { DefaultZIndexes } from "../zIndex/DefaultZIndexes";
36
36
  import { ZIndexLayer } from "../zIndex/ZIndexLayer";
37
37
  import { Coordinate } from "../util/types";
38
38
  import { CartesianScaleHelperImpl } from "../util/scale/CartesianScaleHelper";
39
- import { unregisterOnCleanup } from "../state/unregisterOnCleanup";
39
+ import { registerInStore } from "../state/registerInStore";
40
40
 
41
41
  type ReferenceCoordinateValue = number | string;
42
42
 
@@ -130,38 +130,28 @@ export type Props<
130
130
 
131
131
  function ReportReferenceDot(props: ReferenceDotSettings): JSX.Element {
132
132
  const store = useAppStore();
133
- let prev: ReferenceDotSettings | null = null;
134
-
135
- createEffect(
136
- (): ReferenceDotSettings => ({
137
- id: props.id,
138
- xAxisId: props.xAxisId,
139
- yAxisId: props.yAxisId,
140
- ifOverflow: props.ifOverflow,
141
- x: props.x,
142
- y: props.y,
143
- r: props.r,
144
- }),
145
- (settings) => {
146
- if (store == null) {
147
- return;
148
- }
149
- if (prev === null) {
150
- store.actions.referenceElements.addDot(settings);
151
- } else if (prev !== settings) {
152
- store.actions.referenceElements.removeDot(prev);
153
- store.actions.referenceElements.addDot(settings);
154
- }
155
- prev = settings;
156
- },
157
- );
158
-
159
- unregisterOnCleanup(() => {
160
- if (prev && store != null) {
161
- store.actions.referenceElements.removeDot(prev);
162
- prev = null;
163
- }
164
- });
133
+ if (store != null) {
134
+ registerInStore<ReferenceDotSettings>(
135
+ () => ({
136
+ id: props.id,
137
+ xAxisId: props.xAxisId,
138
+ yAxisId: props.yAxisId,
139
+ ifOverflow: props.ifOverflow,
140
+ x: props.x,
141
+ y: props.y,
142
+ r: props.r,
143
+ }),
144
+ {
145
+ add: (next) => store.actions.referenceElements.addDot(next),
146
+ // No replace action on the slice; a change is remove-then-add (recharts idiom).
147
+ replace: (prev, next) => {
148
+ store.actions.referenceElements.removeDot(prev);
149
+ store.actions.referenceElements.addDot(next);
150
+ },
151
+ remove: (prev) => store.actions.referenceElements.removeDot(prev),
152
+ },
153
+ );
154
+ }
165
155
 
166
156
  return null;
167
157
  }
@@ -193,7 +183,7 @@ const referenceDotDefaultProps = {
193
183
  } as const satisfies Partial<Props>;
194
184
 
195
185
  function ReferenceDotImpl(props: Props): JSX.Element {
196
- const merged = merge(referenceDotDefaultProps, props);
186
+ const merged = mergeProps(referenceDotDefaultProps, props);
197
187
  const clipPathId = useClipPathId();
198
188
  const isPanorama = useIsPanorama();
199
189
  const xAxisScale = useAppSelector((s) => selectAxisScale(s, "xAxis", merged.xAxisId, isPanorama));
@@ -265,7 +255,7 @@ export function ReferenceDot<
265
255
  XValueType extends ReferenceCoordinateValue = ReferenceCoordinateValue,
266
256
  YValueType extends ReferenceCoordinateValue = ReferenceCoordinateValue,
267
257
  >(props: Props<XValueType, YValueType>): JSX.Element {
268
- const merged = merge(referenceDotDefaultProps, props);
258
+ const merged = mergeProps(referenceDotDefaultProps, props);
269
259
  const id = useUniqueId("recharts-reference-dot");
270
260
  return (
271
261
  <>
@@ -16,8 +16,8 @@
16
16
  // render-function form; the default-`<line>` branch is kept). <Label> CHILDREN
17
17
  // are not rendered (the `label` prop is).
18
18
  import { type CamelSvgProps } from "../util/svgPropertiesNoEvents";
19
- import { createEffect, createMemo, merge, Show } from "solid-js";
20
- import type { JSX } from "@solidjs/web";
19
+ import { createMemo, Show, mergeProps } from "solid-js";
20
+ import type { JSX } from "solid-js";
21
21
  import { Layer } from "../container/Layer";
22
22
  import {
23
23
  CartesianLabelContextProvider,
@@ -46,7 +46,7 @@ import { CartesianScaleHelper, CartesianScaleHelperImpl } from "../util/scale/Ca
46
46
  import type { AxisId } from "../state/cartesianAxisSlice";
47
47
  import { DefaultZIndexes } from "../zIndex/DefaultZIndexes";
48
48
  import { ZIndexLayer } from "../zIndex/ZIndexLayer";
49
- import { unregisterOnCleanup } from "../state/unregisterOnCleanup";
49
+ import { registerInStore } from "../state/registerInStore";
50
50
 
51
51
  /**
52
52
  * Single point that defines one end of a segment, in data space.
@@ -242,38 +242,29 @@ const renderLine = (
242
242
 
243
243
  function ReportReferenceLine(props: ReferenceLineSettings): JSX.Element {
244
244
  const store = useAppStore();
245
- let prev: ReferenceLineSettings | null = null;
246
-
247
- createEffect(
248
- (): ReferenceLineSettings => ({
249
- id: props.id,
250
- xAxisId: props.xAxisId,
251
- yAxisId: props.yAxisId,
252
- ifOverflow: props.ifOverflow,
253
- x: props.x,
254
- y: props.y,
255
- segment: props.segment,
256
- }),
257
- (settings) => {
258
- if (store == null) {
259
- return;
260
- }
261
- if (prev === null) {
262
- store.actions.referenceElements.addLine(settings);
263
- } else if (prev !== settings) {
264
- store.actions.referenceElements.removeLine(prev);
265
- store.actions.referenceElements.addLine(settings);
266
- }
267
- prev = settings;
268
- },
269
- );
270
-
271
- unregisterOnCleanup(() => {
272
- if (prev && store != null) {
273
- store.actions.referenceElements.removeLine(prev);
274
- prev = null;
275
- }
276
- });
245
+ if (store != null) {
246
+ registerInStore<ReferenceLineSettings>(
247
+ () => ({
248
+ id: props.id,
249
+ xAxisId: props.xAxisId,
250
+ yAxisId: props.yAxisId,
251
+ ifOverflow: props.ifOverflow,
252
+ x: props.x,
253
+ y: props.y,
254
+ segment: props.segment,
255
+ }),
256
+ {
257
+ add: (next) => store.actions.referenceElements.addLine(next),
258
+ // The referenceElements slice has no replace action; the change is a
259
+ // remove of the old settings followed by an add of the new (recharts idiom).
260
+ replace: (prev, next) => {
261
+ store.actions.referenceElements.removeLine(prev);
262
+ store.actions.referenceElements.addLine(next);
263
+ },
264
+ remove: (prev) => store.actions.referenceElements.removeLine(prev),
265
+ },
266
+ );
267
+ }
277
268
 
278
269
  return null;
279
270
  }
@@ -291,7 +282,7 @@ const referenceLineDefaultProps = {
291
282
  } as const satisfies Partial<Props>;
292
283
 
293
284
  function ReferenceLineImpl(props: Props): JSX.Element {
294
- const merged = merge(referenceLineDefaultProps, props);
285
+ const merged = mergeProps(referenceLineDefaultProps, props);
295
286
  const isPanorama = useIsPanorama();
296
287
  const clipPathId = useClipPathId();
297
288
  const viewBox = useViewBox();
@@ -393,7 +384,7 @@ export function ReferenceLine<
393
384
  XValueType extends ReferenceCoordinateValue = ReferenceCoordinateValue,
394
385
  YValueType extends ReferenceCoordinateValue = ReferenceCoordinateValue,
395
386
  >(props: Props<XValueType, YValueType>): JSX.Element {
396
- const merged = merge(referenceLineDefaultProps, props);
387
+ const merged = mergeProps(referenceLineDefaultProps, props);
397
388
  const id = useUniqueId("recharts-reference-line");
398
389
  return (
399
390
  <>
@@ -1,3 +1,4 @@
1
+ import { createEffect, on } from "solid-js";
1
2
  // Ported from recharts 3.8.1 src/cartesian/CartesianAxis.tsx RenderedTicksReporter
2
3
  // (commit 7a23854).
3
4
  //
@@ -5,8 +6,7 @@
5
6
  // useXAxisTicks/useYAxisTicks hooks (and the tick-snap inverse scale) can read
6
7
  // them. Solid deviation: useEffect add + cleanup remove → createEffect + onCleanup
7
8
  // (the same effect-dispatch idiom the other Report* components use).
8
- import { createEffect } from "solid-js";
9
- import type { JSX } from "@solidjs/web";
9
+ import type { JSX } from "solid-js";
10
10
  import { useAppStore } from "../state/hooks";
11
11
  import type { AxisId } from "../state/cartesianAxisSlice";
12
12
  import type { CartesianTickItem, TickItem } from "../util/types";
@@ -21,21 +21,23 @@ export function RenderedTicksReporter(props: {
21
21
  let prev: { axisType: "xAxis" | "yAxis"; axisId: AxisId } | null = null;
22
22
 
23
23
  createEffect(
24
- (): { axisType: "xAxis" | "yAxis"; axisId: AxisId; ticks: ReadonlyArray<TickItem> } => ({
25
- axisType: props.axisType,
26
- axisId: props.axisId,
27
- // Expose only the external tick shape (drop internal props).
28
- ticks: props.ticks.map((t) => ({
29
- value: t.value,
30
- coordinate: t.coordinate,
31
- offset: t.offset,
32
- index: t.index,
33
- })),
34
- }),
35
- (payload) => {
36
- store?.actions.renderedTicks.setRenderedTicks(payload);
37
- prev = { axisType: payload.axisType, axisId: payload.axisId };
38
- },
24
+ on(
25
+ (): { axisType: "xAxis" | "yAxis"; axisId: AxisId; ticks: ReadonlyArray<TickItem> } => ({
26
+ axisType: props.axisType,
27
+ axisId: props.axisId,
28
+ // Expose only the external tick shape (drop internal props).
29
+ ticks: props.ticks.map((t) => ({
30
+ value: t.value,
31
+ coordinate: t.coordinate,
32
+ offset: t.offset,
33
+ index: t.index,
34
+ })),
35
+ }),
36
+ (payload) => {
37
+ store?.actions.renderedTicks.setRenderedTicks(payload);
38
+ prev = { axisType: payload.axisType, axisId: payload.axisId };
39
+ },
40
+ ),
39
41
  );
40
42
 
41
43
  unregisterOnCleanup(() => {