solid-recharts 1.0.0 → 2.0.0-beta.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (488) hide show
  1. package/package.json +4 -6
  2. package/src/animation/AnimatedItems.tsx +4 -2
  3. package/src/animation/CSSTransitionAnimate.tsx +39 -41
  4. package/src/animation/JavascriptAnimate.tsx +41 -45
  5. package/src/cartesian/Area.tsx +4 -4
  6. package/src/cartesian/AreaRevealShape.tsx +1 -1
  7. package/src/cartesian/Bar.tsx +21 -33
  8. package/src/cartesian/BarStack.tsx +5 -5
  9. package/src/cartesian/Brush.tsx +15 -19
  10. package/src/cartesian/CartesianAxis.tsx +4 -4
  11. package/src/cartesian/CartesianGrid.tsx +5 -5
  12. package/src/cartesian/ErrorBar.tsx +7 -9
  13. package/src/cartesian/Funnel.tsx +3 -3
  14. package/src/cartesian/GraphicalItemClipPath.tsx +1 -1
  15. package/src/cartesian/Line.tsx +16 -18
  16. package/src/cartesian/LineDrawShape.tsx +13 -14
  17. package/src/cartesian/ReferenceArea.tsx +4 -4
  18. package/src/cartesian/ReferenceDot.tsx +4 -4
  19. package/src/cartesian/ReferenceLine.tsx +4 -4
  20. package/src/cartesian/RenderedTicksReporter.tsx +17 -19
  21. package/src/cartesian/Scatter.tsx +3 -3
  22. package/src/cartesian/XAxis.tsx +1 -1
  23. package/src/cartesian/YAxis.tsx +33 -35
  24. package/src/cartesian/ZAxis.tsx +2 -3
  25. package/src/chart/AreaChart.tsx +1 -1
  26. package/src/chart/BarChart.tsx +1 -1
  27. package/src/chart/CartesianChart.tsx +3 -4
  28. package/src/chart/CategoricalChart.tsx +5 -5
  29. package/src/chart/ComposedChart.tsx +1 -1
  30. package/src/chart/FunnelChart.tsx +1 -1
  31. package/src/chart/LineChart.tsx +1 -1
  32. package/src/chart/PieChart.tsx +3 -4
  33. package/src/chart/PolarChart.tsx +3 -4
  34. package/src/chart/RadarChart.tsx +3 -4
  35. package/src/chart/RadialBarChart.tsx +3 -7
  36. package/src/chart/RechartsWrapper.tsx +24 -14
  37. package/src/chart/Sankey.tsx +6 -9
  38. package/src/chart/ScatterChart.tsx +1 -1
  39. package/src/chart/SunburstChart.tsx +4 -5
  40. package/src/chart/Treemap.tsx +4 -5
  41. package/src/component/ActivePoints.tsx +6 -6
  42. package/src/component/Cell.tsx +5 -23
  43. package/src/component/Cursor.tsx +3 -3
  44. package/src/component/DefaultLegendContent.tsx +6 -8
  45. package/src/component/DefaultTooltipContent.tsx +10 -14
  46. package/src/component/Dots.tsx +5 -5
  47. package/src/component/Label.tsx +10 -13
  48. package/src/component/LabelList.tsx +7 -12
  49. package/src/component/Legend.tsx +21 -26
  50. package/src/component/ResponsiveContainer.tsx +49 -52
  51. package/src/component/Text.tsx +5 -5
  52. package/src/component/Tooltip.tsx +18 -21
  53. package/src/component/TooltipBoundingBox.tsx +16 -18
  54. package/src/component/responsiveContainerUtils.ts +1 -1
  55. package/src/container/ClipPathProvider.tsx +3 -3
  56. package/src/container/Layer.tsx +5 -5
  57. package/src/container/RootSurface.tsx +1 -1
  58. package/src/container/Surface.tsx +6 -5
  59. package/src/context/ErrorBarContext.tsx +2 -2
  60. package/src/context/PanoramaContext.tsx +2 -2
  61. package/src/context/RegisterGraphicalItemId.tsx +2 -4
  62. package/src/context/chartDataContext.tsx +23 -26
  63. package/src/context/chartLayoutContext.tsx +12 -16
  64. package/src/polar/Pie.tsx +12 -13
  65. package/src/polar/PolarAngleAxis.tsx +3 -3
  66. package/src/polar/PolarGrid.tsx +5 -5
  67. package/src/polar/PolarRadiusAxis.tsx +3 -3
  68. package/src/polar/Radar.tsx +3 -3
  69. package/src/polar/RadialBar.tsx +3 -3
  70. package/src/shape/Cross.tsx +5 -5
  71. package/src/shape/Curve.tsx +7 -6
  72. package/src/shape/Dot.tsx +4 -4
  73. package/src/shape/Polygon.tsx +5 -5
  74. package/src/shape/Rectangle.tsx +20 -22
  75. package/src/shape/Sector.tsx +5 -5
  76. package/src/shape/Symbols.tsx +5 -5
  77. package/src/shape/Trapezoid.tsx +27 -29
  78. package/src/state/RechartsStoreProvider.tsx +3 -5
  79. package/src/state/ReportChartProps.tsx +6 -8
  80. package/src/state/ReportEventSettings.tsx +6 -8
  81. package/src/state/ReportMainChartProps.tsx +9 -11
  82. package/src/state/ReportPolarOptions.tsx +13 -15
  83. package/src/state/SetLegendPayload.ts +1 -1
  84. package/src/state/SetTooltipEntrySettings.tsx +1 -1
  85. package/src/state/brushSlice.ts +8 -10
  86. package/src/state/cartesianAxisSlice.ts +38 -46
  87. package/src/state/chartDataSlice.ts +23 -29
  88. package/src/state/errorBarSlice.ts +16 -22
  89. package/src/state/eventSettingsSlice.ts +9 -11
  90. package/src/state/graphicalItemsSlice.ts +13 -17
  91. package/src/state/layoutSlice.ts +19 -27
  92. package/src/state/legendSlice.ts +18 -24
  93. package/src/state/optionsSlice.ts +6 -8
  94. package/src/state/polarAxisSlice.ts +13 -21
  95. package/src/state/polarOptionsSlice.ts +14 -16
  96. package/src/state/referenceElementsSlice.ts +19 -25
  97. package/src/state/registerInStore.ts +13 -15
  98. package/src/state/renderedTicksSlice.ts +7 -11
  99. package/src/state/rootPropsSlice.ts +14 -16
  100. package/src/state/tooltipSlice.ts +95 -115
  101. package/src/state/unregisterOnCleanup.ts +20 -5
  102. package/src/state/zIndexSlice.ts +42 -50
  103. package/src/synchronisation/useChartSynchronisation.tsx +217 -213
  104. package/src/util/ActiveShapeUtils.tsx +2 -2
  105. package/src/util/BarUtils.tsx +3 -5
  106. package/src/util/FunnelUtils.tsx +1 -1
  107. package/src/util/RadialBarUtils.tsx +3 -4
  108. package/src/util/createCartesianCharts.tsx +1 -1
  109. package/src/util/createPolarCharts.tsx +1 -1
  110. package/src/util/svgPropertiesAndEvents.ts +1 -1
  111. package/src/util/tooltip/translate.ts +2 -2
  112. package/src/util/types.ts +2 -2
  113. package/src/zIndex/ZIndexLayer.tsx +68 -39
  114. package/src/zIndex/ZIndexPortal.tsx +25 -29
  115. package/test/_data.ts +408 -0
  116. package/test/animation/AnimationController.typed.spec.ts +53 -0
  117. package/test/animation/AnimationControllerImpl.spec.ts +271 -0
  118. package/test/animation/CSSTransitionAnimate.timing.spec.tsx +473 -0
  119. package/test/animation/JavascriptAnimate.spec.tsx +62 -0
  120. package/test/animation/RechartsAnimation.spec.ts +636 -0
  121. package/test/animation/easing.spec.ts +218 -0
  122. package/test/animation/legacyAnimationLengthChange.spec.tsx +803 -0
  123. package/test/animation/matchBy.spec.ts +467 -0
  124. package/test/animation/mockAnimationController.ts +40 -0
  125. package/test/animation/mockControllerAnimationManager.ts +143 -0
  126. package/test/animation/mockTimeoutController.ts +114 -0
  127. package/test/animation/timeoutController.spec.ts +138 -0
  128. package/test/animation/useAnimationStartSnapshot.spec.ts +147 -0
  129. package/test/animation/util.spec.ts +28 -0
  130. package/test/cartesian/Area.animation.spec.tsx +363 -0
  131. package/test/cartesian/Area.range.spec.tsx +54 -0
  132. package/test/cartesian/Area.spec.tsx +1202 -0
  133. package/test/cartesian/Area.stacked.render.spec.tsx +69 -0
  134. package/test/cartesian/Area.typed.spec.tsx +209 -0
  135. package/test/cartesian/Axis.integration.spec.tsx +158 -0
  136. package/test/cartesian/Bar/Bar.csstransition.spec.tsx +299 -0
  137. package/test/cartesian/Bar/Bar.spec.tsx +2314 -0
  138. package/test/cartesian/Bar/Bar.typed.spec.tsx +192 -0
  139. package/test/cartesian/Bar.animation.spec.tsx +426 -0
  140. package/test/cartesian/Bar.stackDomain.spec.tsx +66 -0
  141. package/test/cartesian/Bar.stacked.render.spec.tsx +53 -0
  142. package/test/cartesian/Bar.truncateByDomain.spec.tsx +237 -0
  143. package/test/cartesian/Bar.zeroDimensionFiltering.spec.tsx +336 -0
  144. package/test/cartesian/BarStack.spec.tsx +91 -0
  145. package/test/cartesian/Brush.keyboard.spec.tsx +88 -0
  146. package/test/cartesian/Brush.panorama.spec.tsx +41 -0
  147. package/test/cartesian/Brush.props.spec.tsx +63 -0
  148. package/test/cartesian/Brush.render.spec.tsx +117 -0
  149. package/test/cartesian/Brush.spec.tsx +522 -0
  150. package/test/cartesian/Brush.stacked.spec.tsx +221 -0
  151. package/test/cartesian/CartesianAxis.render.spec.tsx +50 -0
  152. package/test/cartesian/CartesianAxis.spec.tsx +396 -0
  153. package/test/cartesian/CartesianGrid.render.spec.tsx +39 -0
  154. package/test/cartesian/CartesianGrid.spec.tsx +2103 -0
  155. package/test/cartesian/ErrorBar.render.spec.tsx +69 -0
  156. package/test/cartesian/ErrorBar.spec.tsx +2414 -0
  157. package/test/cartesian/Funnel.animation.spec.tsx +241 -0
  158. package/test/cartesian/Funnel.spec.tsx +226 -0
  159. package/test/cartesian/Funnel.typed.spec.tsx +221 -0
  160. package/test/cartesian/GraphicalItemClipPath.scale-behavior.spec.tsx +627 -0
  161. package/test/cartesian/GraphicalItemClipPath.spec.tsx +427 -0
  162. package/test/cartesian/Line.animation.spec.tsx +643 -0
  163. package/test/cartesian/Line.sparseAnimationPath.spec.tsx +98 -0
  164. package/test/cartesian/Line.spec.tsx +471 -0
  165. package/test/cartesian/Line.typed.spec.tsx +152 -0
  166. package/test/cartesian/ReferenceArea.render.spec.tsx +63 -0
  167. package/test/cartesian/ReferenceArea.spec.tsx +663 -0
  168. package/test/cartesian/ReferenceArea.typed.spec.tsx +74 -0
  169. package/test/cartesian/ReferenceDot.render.spec.tsx +55 -0
  170. package/test/cartesian/ReferenceDot.spec.tsx +462 -0
  171. package/test/cartesian/ReferenceDot.typed.spec.tsx +76 -0
  172. package/test/cartesian/ReferenceLine/ReferenceLine.panorama.spec.tsx +184 -0
  173. package/test/cartesian/ReferenceLine/ReferenceLine.spec.tsx +744 -0
  174. package/test/cartesian/ReferenceLine/ReferenceLine.typed.spec.tsx +74 -0
  175. package/test/cartesian/ReferenceLine/getEndPoints.spec.ts +399 -0
  176. package/test/cartesian/ReferenceLine.render.spec.tsx +134 -0
  177. package/test/cartesian/Scatter.animation.spec.tsx +381 -0
  178. package/test/cartesian/Scatter.render.spec.tsx +61 -0
  179. package/test/cartesian/Scatter.spec.tsx +406 -0
  180. package/test/cartesian/Scatter.typed.spec.tsx +153 -0
  181. package/test/cartesian/XAxis/XAxis.barSize.spec.tsx +336 -0
  182. package/test/cartesian/XAxis/XAxis.brush.spec.tsx +266 -0
  183. package/test/cartesian/XAxis/XAxis.categorydomain.spec.tsx +872 -0
  184. package/test/cartesian/XAxis/XAxis.dataKey.spec.tsx +86 -0
  185. package/test/cartesian/XAxis/XAxis.datatypes.spec.tsx +127 -0
  186. package/test/cartesian/XAxis/XAxis.hide.spec.tsx +106 -0
  187. package/test/cartesian/XAxis/XAxis.multiaxis.spec.tsx +336 -0
  188. package/test/cartesian/XAxis/XAxis.numberdomain.spec.tsx +1466 -0
  189. package/test/cartesian/XAxis/XAxis.padding.spec.tsx +758 -0
  190. package/test/cartesian/XAxis/XAxis.padding_clip.spec.tsx +65 -0
  191. package/test/cartesian/XAxis/XAxis.state.spec.tsx +355 -0
  192. package/test/cartesian/XAxis/XAxis.tick.spec.tsx +493 -0
  193. package/test/cartesian/XAxis/XAxis.timescale.spec.tsx +233 -0
  194. package/test/cartesian/XAxis/XAxis.type.spec.tsx +107 -0
  195. package/test/cartesian/XAxis/XAxis.typed.spec.tsx +102 -0
  196. package/test/cartesian/XAxis/XAxis.vertical.spec.tsx +265 -0
  197. package/test/cartesian/XAxis.tickFormatter.spec.tsx +54 -0
  198. package/test/cartesian/YAxis/YAxis.7362.derivedDomain.spec.tsx +230 -0
  199. package/test/cartesian/YAxis/YAxis.7362.spec.tsx +104 -0
  200. package/test/cartesian/YAxis/YAxis.interval-zero.spec.tsx +88 -0
  201. package/test/cartesian/YAxis/YAxis.label.spec.tsx +219 -0
  202. package/test/cartesian/YAxis/YAxis.spec.tsx +1595 -0
  203. package/test/cartesian/YAxis/YAxis.tick.spec.tsx +428 -0
  204. package/test/cartesian/YAxis/YAxis.tickFormatter.spec.tsx +54 -0
  205. package/test/cartesian/YAxis/YAxis.ticks.spec.tsx +263 -0
  206. package/test/cartesian/YAxis/YAxis.type.spec.tsx +107 -0
  207. package/test/cartesian/YAxis/YAxis.typed.spec.tsx +102 -0
  208. package/test/cartesian/ZAxis.spec.tsx +300 -0
  209. package/test/cartesian/ZAxis.typed.spec.tsx +33 -0
  210. package/test/cartesian/__snapshots__/Brush.spec.tsx.snap +5 -0
  211. package/test/cartesian/axisLineAndStroke.spec.tsx +72 -0
  212. package/test/cartesian/getCartesianPosition.spec.ts +907 -0
  213. package/test/cartesian/getEquidistantTicks.spec.ts +88 -0
  214. package/test/cartesian/getTicks.spec.ts +378 -0
  215. package/test/cartesian/miscFeatureGaps.spec.tsx +89 -0
  216. package/test/cartesian/useAnimatedLineLength.spec.ts +168 -0
  217. package/test/chart/AccessibilityLayer.spec.tsx +569 -0
  218. package/test/chart/AccessibilityScans.spec.tsx +286 -0
  219. package/test/chart/AreaChart.spec.tsx +409 -0
  220. package/test/chart/AreaChart.stacked.spec.tsx +1407 -0
  221. package/test/chart/AreaChart.typed.spec.tsx +39 -0
  222. package/test/chart/BarChart.spec.tsx +3719 -0
  223. package/test/chart/BarChart.typed.spec.tsx +60 -0
  224. package/test/chart/CategoricalChart.spec.tsx +255 -0
  225. package/test/chart/ComposedChart.spec.tsx +199 -0
  226. package/test/chart/ComposedChart.typed.spec.tsx +39 -0
  227. package/test/chart/FunnelChart.spec.tsx +215 -0
  228. package/test/chart/FunnelChart.typed.spec.tsx +39 -0
  229. package/test/chart/LineChart.multiseries.spec.tsx +50 -0
  230. package/test/chart/LineChart.smoke.spec.tsx +50 -0
  231. package/test/chart/LineChart.spec.tsx +930 -0
  232. package/test/chart/LineChart.typed.spec.tsx +39 -0
  233. package/test/chart/NicheChartTooltip.spec.tsx +81 -0
  234. package/test/chart/PieChart.spec.tsx +793 -0
  235. package/test/chart/PieChart.typed.spec.tsx +39 -0
  236. package/test/chart/RadarChart.spec.tsx +530 -0
  237. package/test/chart/RadarChart.typed.spec.tsx +39 -0
  238. package/test/chart/RadialBarChart.5966.spec.tsx +48 -0
  239. package/test/chart/RadialBarChart.spec.tsx +679 -0
  240. package/test/chart/RadialBarChart.typed.spec.tsx +39 -0
  241. package/test/chart/RechartsWrapper.spec.tsx +83 -0
  242. package/test/chart/Sankey.content.spec.tsx +46 -0
  243. package/test/chart/Sankey.spec.tsx +952 -0
  244. package/test/chart/Sankey.typed.spec.tsx +29 -0
  245. package/test/chart/ScatterChart.spec.tsx +2613 -0
  246. package/test/chart/ScatterChart.typed.spec.tsx +39 -0
  247. package/test/chart/SunburstChart.spec.tsx +146 -0
  248. package/test/chart/Treemap.animation.spec.tsx +52 -0
  249. package/test/chart/Treemap.spec.tsx +1003 -0
  250. package/test/chart/Treemap.typed.spec.tsx +26 -0
  251. package/test/chart/chartEvents.spec.tsx +127 -0
  252. package/test/chart/responsive.spec.tsx +620 -0
  253. package/test/component/Cell.render.spec.tsx +155 -0
  254. package/test/component/Cell.spec.tsx +12 -0
  255. package/test/component/Cursor.spec.tsx +186 -0
  256. package/test/component/DefaultTooltipContent.spec.tsx +102 -0
  257. package/test/component/Label.render.spec.tsx +63 -0
  258. package/test/component/Label.spec.tsx +686 -0
  259. package/test/component/Label.typed.spec.tsx +46 -0
  260. package/test/component/LabelList.spec.tsx +188 -0
  261. package/test/component/Legend.itemSorter.spec.tsx +704 -0
  262. package/test/component/Legend.render.spec.tsx +92 -0
  263. package/test/component/Legend.spec.tsx +2213 -0
  264. package/test/component/Legend.typed.spec.tsx +22 -0
  265. package/test/component/ResponsiveContainer.spec.tsx +523 -0
  266. package/test/component/ResponsiveContainerDataTest.spec.tsx +51 -0
  267. package/test/component/Text.spec.tsx +415 -0
  268. package/test/component/Text.typed.spec.tsx +46 -0
  269. package/test/component/Tooltip/ActiveDot.spec.tsx +370 -0
  270. package/test/component/Tooltip/Tooltip.animation.spec.tsx +209 -0
  271. package/test/component/Tooltip/Tooltip.content.spec.tsx +128 -0
  272. package/test/component/Tooltip/Tooltip.formatter.spec.tsx +152 -0
  273. package/test/component/Tooltip/Tooltip.includeHidden.spec.tsx +79 -0
  274. package/test/component/Tooltip/Tooltip.multipleDataArrays.spec.tsx +165 -0
  275. package/test/component/Tooltip/Tooltip.offset.spec.tsx +113 -0
  276. package/test/component/Tooltip/Tooltip.state.spec.tsx +74 -0
  277. package/test/component/Tooltip/Tooltip.sync.spec.tsx +639 -0
  278. package/test/component/Tooltip/defaultIndex.spec.tsx +227 -0
  279. package/test/component/Tooltip/graphicalItem.formatter.spec.tsx +138 -0
  280. package/test/component/Tooltip/itemSorter.spec.tsx +2815 -0
  281. package/test/component/Tooltip/tooltipEventType.spec.tsx +344 -0
  282. package/test/component/Tooltip/tooltipMouseHoverSelectors.ts +41 -0
  283. package/test/component/Tooltip/tooltipTestHelpers.tsx +162 -0
  284. package/test/component/Tooltip.defaultIndex.spec.tsx +48 -0
  285. package/test/component/Tooltip.hover.spec.tsx +61 -0
  286. package/test/component/Tooltip.item.spec.tsx +54 -0
  287. package/test/component/Tooltip.keyboard.spec.tsx +51 -0
  288. package/test/component/Tooltip.payload.spec.tsx +1716 -0
  289. package/test/component/Tooltip.touch.spec.tsx +39 -0
  290. package/test/component/Tooltip.visibility.spec.tsx +1889 -0
  291. package/test/component/TooltipBoundingBox.spec.tsx +89 -0
  292. package/test/component/responsiveContainerUtils.spec.ts +205 -0
  293. package/test/container/ClipPath.spec.tsx +602 -0
  294. package/test/container/chartDimensions.spec.tsx +368 -0
  295. package/test/context/chartLayoutContext.spec.tsx +378 -0
  296. package/test/helper/ExpectAxisDomain.tsx +27 -0
  297. package/test/helper/assertNotNull.ts +6 -0
  298. package/test/helper/assertZIndexLayerOrder.ts +19 -0
  299. package/test/helper/createSelectorTestCase.tsx +176 -0
  300. package/test/helper/expectAnimatedPieAngles.ts +100 -0
  301. package/test/helper/expectAnimatedPiePaths.ts +78 -0
  302. package/test/helper/expectAreaCurve.ts +15 -0
  303. package/test/helper/expectAxisTicks.ts +48 -0
  304. package/test/helper/expectBars.ts +54 -0
  305. package/test/helper/expectFunctionReturning.ts +58 -0
  306. package/test/helper/expectLabel.ts +32 -0
  307. package/test/helper/expectLastCalledWith.ts +48 -0
  308. package/test/helper/expectLine.ts +20 -0
  309. package/test/helper/expectPieSectors.ts +80 -0
  310. package/test/helper/expectScale.ts +37 -0
  311. package/test/helper/expectScatterPoints.ts +52 -0
  312. package/test/helper/expectStackGroups.ts +144 -0
  313. package/test/helper/mockAxes.ts +22 -0
  314. package/test/helper/mockGetBoundingClientRect.ts +66 -0
  315. package/test/helper/mockHTMLElementProperty.ts +19 -0
  316. package/test/helper/mockTouchingElement.ts +27 -0
  317. package/test/helper/offsetHelpers.ts +19 -0
  318. package/test/helper/parameterizedTestCases.tsx +99 -0
  319. package/test/helper/produceState.ts +32 -0
  320. package/test/helper/selectorTestHelpers.tsx +63 -0
  321. package/test/helper/trim.spec.ts +35 -0
  322. package/test/helper/trim.ts +11 -0
  323. package/test/hooks/useActiveTooltipDataPoints.spec.tsx +358 -0
  324. package/test/hooks/useAxisDomain.spec.tsx +361 -0
  325. package/test/hooks/useAxisScale.spec.tsx +283 -0
  326. package/test/hooks/useAxisTicks.spec.tsx +130 -0
  327. package/test/hooks/useOffset.spec.tsx +248 -0
  328. package/test/hooks/useTooltipStateHooks.spec.tsx +109 -0
  329. package/test/polar/Pie/Pie-TwoLevelPieChart.spec.tsx +135 -0
  330. package/test/polar/Pie/Pie.spec.tsx +784 -0
  331. package/test/polar/Pie/Pie.typed.spec.tsx +78 -0
  332. package/test/polar/Pie.animation.spec.tsx +529 -0
  333. package/test/polar/PieWithLegend.animation.spec.tsx +142 -0
  334. package/test/polar/PolarAngleAxis/PolarAngleAxis.events.spec.tsx +76 -0
  335. package/test/polar/PolarAngleAxis/PolarAngleAxis.spec.tsx +2079 -0
  336. package/test/polar/PolarAngleAxis/PolarAngleAxis.typed.spec.tsx +102 -0
  337. package/test/polar/PolarAngleAxis.render.spec.tsx +79 -0
  338. package/test/polar/PolarGrid.render.spec.tsx +75 -0
  339. package/test/polar/PolarGrid.spec.tsx +918 -0
  340. package/test/polar/PolarLegendPerRow.render.spec.tsx +85 -0
  341. package/test/polar/PolarRadiusAxis.events.spec.tsx +65 -0
  342. package/test/polar/PolarRadiusAxis.render.spec.tsx +52 -0
  343. package/test/polar/PolarRadiusAxis.spec.tsx +991 -0
  344. package/test/polar/PolarRadiusAxis.typed.spec.tsx +84 -0
  345. package/test/polar/PolarTooltipLegend.render.spec.tsx +80 -0
  346. package/test/polar/Radar.animation.spec.tsx +570 -0
  347. package/test/polar/Radar.render.spec.tsx +71 -0
  348. package/test/polar/Radar.spec.tsx +265 -0
  349. package/test/polar/Radar.typed.spec.tsx +119 -0
  350. package/test/polar/RadialBar/RadialBar.spec.tsx +1521 -0
  351. package/test/polar/RadialBar/RadialBar.typed.spec.tsx +132 -0
  352. package/test/polar/RadialBar.animation.spec.tsx +375 -0
  353. package/test/polar/RadialBar.render.spec.tsx +66 -0
  354. package/test/polar/RadialBar.stacked.spec.tsx +57 -0
  355. package/test/setup.ts +84 -0
  356. package/test/shape/ActiveShape.spec.tsx +181 -0
  357. package/test/shape/Cross.spec.tsx +60 -0
  358. package/test/shape/Cross.typed.spec.tsx +26 -0
  359. package/test/shape/Curve.spec.tsx +368 -0
  360. package/test/shape/Curve.typed.spec.tsx +69 -0
  361. package/test/shape/Dot.spec.tsx +73 -0
  362. package/test/shape/Dot.typed.spec.tsx +30 -0
  363. package/test/shape/Polygon.spec.tsx +357 -0
  364. package/test/shape/Polygon.typed.spec.tsx +28 -0
  365. package/test/shape/Rectangle.animation.spec.tsx +451 -0
  366. package/test/shape/Rectangle.spec.tsx +68 -0
  367. package/test/shape/Rectangle.typed.spec.tsx +24 -0
  368. package/test/shape/Sector.spec.tsx +76 -0
  369. package/test/shape/Sector.typed.spec.tsx +24 -0
  370. package/test/shape/Symbols.spec.tsx +43 -0
  371. package/test/shape/Symbols.typed.spec.tsx +24 -0
  372. package/test/shape/Trapezoid.spec.tsx +50 -0
  373. package/test/shape/Trapezoid.typed.spec.tsx +24 -0
  374. package/test/shape/__snapshots__/Cross.spec.tsx.snap +62 -0
  375. package/test/shape/__snapshots__/Curve.spec.tsx.snap +460 -0
  376. package/test/shape/__snapshots__/Polygon.spec.tsx.snap +58 -0
  377. package/test/shape/__snapshots__/Rectangle.spec.tsx.snap +117 -0
  378. package/test/shape/__snapshots__/Sector.spec.tsx.snap +71 -0
  379. package/test/shape/__snapshots__/Trapezoid.spec.tsx.snap +64 -0
  380. package/test/state/chartDataSlice.spec.ts +53 -0
  381. package/test/state/createCollectionActions.spec.ts +87 -0
  382. package/test/state/createSelector.spec.ts +158 -0
  383. package/test/state/externalEventsMiddleware.spec.ts +178 -0
  384. package/test/state/graphicalItemsSlice.spec.ts +92 -0
  385. package/test/state/hooks.spec.tsx +68 -0
  386. package/test/state/legendSlice.spec.ts +44 -0
  387. package/test/state/mouseEventsMiddleware.spec.ts +75 -0
  388. package/test/state/optionsSlice.spec.ts +19 -0
  389. package/test/state/referenceElementsSlice.spec.ts +84 -0
  390. package/test/state/registerInStore.spec.tsx +101 -0
  391. package/test/state/selectors/areaSelectors.spec.tsx +77 -0
  392. package/test/state/selectors/axisSelectors.spec.tsx +1418 -0
  393. package/test/state/selectors/barStackSelectors.spec.tsx +752 -0
  394. package/test/state/selectors/brushSelectors.spec.tsx +30 -0
  395. package/test/state/selectors/cartesianAxisSlice.spec.ts +96 -0
  396. package/test/state/selectors/combineNiceTicks.spec.ts +207 -0
  397. package/test/state/selectors/combiners/combineActiveTooltipIndex.spec.ts +61 -0
  398. package/test/state/selectors/combiners/combineAllBarPositions.spec.ts +39 -0
  399. package/test/state/selectors/combiners/combineConfiguredScale.spec.ts +56 -0
  400. package/test/state/selectors/combiners/combineDisplayedStackedData.spec.ts +123 -0
  401. package/test/state/selectors/combiners/combineRealScaleType.spec.ts +80 -0
  402. package/test/state/selectors/containerSelectors.spec.tsx +168 -0
  403. package/test/state/selectors/dataSelectors.spec.tsx +136 -0
  404. package/test/state/selectors/legendSelectors.spec.tsx +113 -0
  405. package/test/state/selectors/lineSelectors.spec.tsx +60 -0
  406. package/test/state/selectors/pieSelectors.spec.tsx +72 -0
  407. package/test/state/selectors/radarSelectors.spec.tsx +496 -0
  408. package/test/state/selectors/rootPropsSelectors.spec.tsx +169 -0
  409. package/test/state/selectors/scatterSelectors.spec.tsx +47 -0
  410. package/test/state/selectors/selectActiveTooltipIndex.spec.tsx +234 -0
  411. package/test/state/selectors/selectAllAxes.spec.tsx +18 -0
  412. package/test/state/selectors/selectAxisDomain.spec.tsx +21 -0
  413. package/test/state/selectors/selectAxisDomainIncludingNiceTicks.spec.tsx +19 -0
  414. package/test/state/selectors/selectAxisRangeWithReverse.spec.tsx +22 -0
  415. package/test/state/selectors/selectAxisScale.spec.tsx +91 -0
  416. package/test/state/selectors/selectBarRectangles.stackOffset.spec.tsx +503 -0
  417. package/test/state/selectors/selectBaseAxis.spec.tsx +56 -0
  418. package/test/state/selectors/selectCartesianItemsSettings.spec.tsx +57 -0
  419. package/test/state/selectors/selectChartOffset.spec.tsx +26 -0
  420. package/test/state/selectors/selectDisplayedData.spec.tsx +282 -0
  421. package/test/state/selectors/selectIsTooltipActive.spec.tsx +231 -0
  422. package/test/state/selectors/selectNumericalDomain.spec.tsx +21 -0
  423. package/test/state/selectors/selectRealScaleType.spec.tsx +19 -0
  424. package/test/state/selectors/selectStackGroups.spec.tsx +322 -0
  425. package/test/state/selectors/selectXAxisPosition.spec.tsx +22 -0
  426. package/test/state/selectors/selectYAxisPosition.spec.tsx +22 -0
  427. package/test/state/selectors/selectorMemoization.spec.tsx +136 -0
  428. package/test/state/selectors/selectors.spec.tsx +1613 -0
  429. package/test/state/throttling.spec.ts +200 -0
  430. package/test/state/zIndexSlice.spec.ts +85 -0
  431. package/test/synchronisation/useChartSynchronisation.spec.tsx +225 -0
  432. package/test/util/BarUtils.spec.ts +39 -0
  433. package/test/util/CartesianUtils/CartesianUtils.spec.ts +261 -0
  434. package/test/util/CartesianUtils/rectWithPoints.spec.ts +48 -0
  435. package/test/util/ChartUtils/ChartUtils.spec.ts +491 -0
  436. package/test/util/ChartUtils/appendOffsetOfLegend.spec.ts +136 -0
  437. package/test/util/ChartUtils/appendOffsetOfLegend.spec.tsx +133 -0
  438. package/test/util/ChartUtils/getCateCoordinateOfLine.spec.ts +97 -0
  439. package/test/util/ChartUtils/getStackedData.spec.ts +416 -0
  440. package/test/util/ChartUtils/truncateByDomain.spec.ts +70 -0
  441. package/test/util/DataUtils.spec.ts +385 -0
  442. package/test/util/DomUtils.spec.tsx +117 -0
  443. package/test/util/FunnelUtils.spec.tsx +70 -0
  444. package/test/util/Global.spec.ts +11 -0
  445. package/test/util/LRUCache.spec.ts +81 -0
  446. package/test/util/LogUtils.spec.ts +45 -0
  447. package/test/util/PolarUtils.spec.ts +66 -0
  448. package/test/util/ReduceCssCalcPrototype.spec.ts +141 -0
  449. package/test/util/ShallowEqual.spec.ts +102 -0
  450. package/test/util/TickUtils.spec.ts +29 -0
  451. package/test/util/createChartHelpers.spec.tsx +210 -0
  452. package/test/util/cursor/getCursorPoints.spec.ts +136 -0
  453. package/test/util/cursor/getCursorRectangle.spec.ts +50 -0
  454. package/test/util/cursor/getRadialCursorPoints.spec.ts +36 -0
  455. package/test/util/errorValue.spec.ts +69 -0
  456. package/test/util/getEveryNth.spec.ts +39 -0
  457. package/test/util/getRadiusAndStrokeWidthFromDot.spec.ts +51 -0
  458. package/test/util/getRelativeCoordinate.spec.ts +250 -0
  459. package/test/util/getSliced.spec.ts +45 -0
  460. package/test/util/isDomainSpecifiedByUser.spec.ts +207 -0
  461. package/test/util/isWellBehavedNumber.spec.ts +54 -0
  462. package/test/util/payload/getUniqPayload.spec.ts +56 -0
  463. package/test/util/propsAreEqual.spec.ts +75 -0
  464. package/test/util/round.spec.ts +112 -0
  465. package/test/util/scale/arithmetic.spec.ts +61 -0
  466. package/test/util/scale/createCategoricalInverse.spec.ts +84 -0
  467. package/test/util/scale/getNiceTickValues.spec.ts +421 -0
  468. package/test/util/scale/getTickValuesFixedDomain.spec.ts +155 -0
  469. package/test/util/svgPropertiesAndEvents.spec.tsx +206 -0
  470. package/test/util/svgPropertiesNoEvents.spec.tsx +228 -0
  471. package/test/util/tooltip/translate.spec.ts +396 -0
  472. package/test/util/useAnimationId.spec.tsx +59 -0
  473. package/test/util/useElementOffset.spec.tsx +173 -0
  474. package/test/util/usePrefersReducedMotion.spec.ts +54 -0
  475. package/test/util/useUniqueId.spec.ts +99 -0
  476. package/test/utils/diagnostics-allowlist.ts +18 -0
  477. package/test/utils/diagnostics.ts +58 -0
  478. package/test/zIndex/AllZIndexPortals.spec.tsx +83 -0
  479. package/test/zIndex/DefaultZIndexes.spec.ts +80 -0
  480. package/test/zIndex/DynamicZIndex.spec.tsx +102 -0
  481. package/test/zIndex/ZIndexLayer.portalOwner.spec.tsx +125 -0
  482. package/test/zIndex/componentZIndex.spec.tsx +255 -0
  483. package/test/zIndex/getZIndexFromUnknown.spec.ts +51 -0
  484. package/test/zIndex/multiChartZIndexIsolation.spec.tsx +90 -0
  485. package/test/zIndex/zIndexSelectors.spec.ts +172 -0
  486. package/test-results/.last-run.json +4 -0
  487. package/tsconfig.json +11 -0
  488. package/src/util/DirectPortal.tsx +0 -107
@@ -10,10 +10,16 @@
10
10
  // (`syncRegistry.ts`, a plain synchronous bus) and Solid `createEffect`s.
11
11
  //
12
12
  // Reactivity notes (diagnostics-clean):
13
- // - Each effect uses Solid 1's `createEffect(on(deps, effect))` form so only the
14
- // explicit dependencies are tracked.
15
- // - Listener store writes are synchronous under Solid 1.
16
- import { untrack, createEffect, on, onCleanup } from "solid-js";
13
+ // - Each effect uses the two-arg `createEffect(deps, effect)` form: the first
14
+ // function tracks the reactive inputs and returns them as a tuple, the second
15
+ // runs the side effect (subscribe/emit). Reads inside the side-effect callback
16
+ // are therefore not tracked, and we never write a *local* signal there — emits
17
+ // only call OTHER charts' batched store setters via the registry, which is the
18
+ // sanctioned cross-store write path (no SIGNAL_WRITE_IN_OWNED_SCOPE).
19
+ // - The listener calls `store.actions.tooltip.setSyncInteraction(...)` +
20
+ // `flush()` on the RECEIVING chart's store; that store is a different owner, so
21
+ // the write is not "in an owned computation" of the emitting effect.
22
+ import { createEffect, flush, untrack } from "solid-js";
17
23
  import { useAppStore } from "../state/hooks";
18
24
  import {
19
25
  selectEventEmitter,
@@ -53,129 +59,134 @@ function useTooltipSyncEventsListener(store: RechartsStore): void {
53
59
  const viewBox = useViewBox();
54
60
 
55
61
  createEffect(
56
- on(
57
- () => {
58
- const mySyncId = selectSyncId(store.state);
59
- const myEventEmitter = selectEventEmitter(store.state);
60
- const syncMethod = selectSyncMethod(store.state);
61
- const tooltipTicks = selectTooltipAxisTicks(store.state);
62
- const layout = selectChartLayout(store.state);
63
- const box = viewBox();
64
- return { mySyncId, myEventEmitter, syncMethod, tooltipTicks, layout, box };
65
- },
66
- ({ mySyncId, myEventEmitter, syncMethod, tooltipTicks, layout, box }) => {
67
- if (mySyncId == null) {
68
- // Not synchronised with any other chart — nothing to listen for.
62
+ () => {
63
+ const mySyncId = selectSyncId(store.state);
64
+ const myEventEmitter = selectEventEmitter(store.state);
65
+ const syncMethod = selectSyncMethod(store.state);
66
+ const tooltipTicks = selectTooltipAxisTicks(store.state);
67
+ const layout = selectChartLayout(store.state);
68
+ const box = viewBox();
69
+ return { mySyncId, myEventEmitter, syncMethod, tooltipTicks, layout, box };
70
+ },
71
+ ({ mySyncId, myEventEmitter, syncMethod, tooltipTicks, layout, box }) => {
72
+ if (mySyncId == null) {
73
+ // Not synchronised with any other chart — nothing to listen for.
74
+ return;
75
+ }
76
+
77
+ const listener = (
78
+ incomingSyncId: SyncId,
79
+ payload: TooltipSyncState,
80
+ emitter: symbol,
81
+ ): void => {
82
+ if (myEventEmitter === emitter) {
83
+ // Don't react to our own emissions.
84
+ return;
85
+ }
86
+ if (mySyncId !== incomingSyncId) {
87
+ // Not for this chart.
69
88
  return;
70
89
  }
71
90
 
72
- const listener = (
73
- incomingSyncId: SyncId,
74
- payload: TooltipSyncState,
75
- emitter: symbol,
76
- ): void => {
77
- if (myEventEmitter === emitter) {
78
- // Don't react to our own emissions.
79
- return;
80
- }
81
- if (mySyncId !== incomingSyncId) {
82
- // Not for this chart.
83
- return;
84
- }
85
-
86
- // Source deactivation (mouseLeave) clears state for ALL sync methods,
87
- // including sourceViewBox so emission can resume.
88
- if (payload.active === false) {
89
- store.actions.tooltip.setSyncInteraction(inactiveSyncState);
90
- return;
91
- }
92
-
93
- if (syncMethod === "index") {
94
- if (box && payload.coordinate && payload.sourceViewBox) {
95
- const { coordinate } = payload;
96
- const { x, y } = coordinate;
97
- const {
98
- x: sourceX,
99
- y: sourceY,
100
- width: sourceWidth,
101
- height: sourceHeight,
102
- } = payload.sourceViewBox;
103
- const scaledCoordinate: Coordinate = {
104
- ...coordinate,
105
- x: box.x + (sourceWidth ? (x - sourceX) / sourceWidth : 0) * box.width,
106
- y: box.y + (sourceHeight ? (y - sourceY) / sourceHeight : 0) * box.height,
107
- };
108
- store.actions.tooltip.setSyncInteraction({
109
- ...payload,
110
- coordinate: scaledCoordinate,
111
- });
112
- } else {
113
- store.actions.tooltip.setSyncInteraction(payload);
114
- }
115
- return;
116
- }
117
-
118
- if (tooltipTicks == null) {
119
- // 'value'/function need ticks.
120
- return;
121
- }
91
+ // Source deactivation (mouseLeave) clears state for ALL sync methods,
92
+ // including sourceViewBox so emission can resume.
93
+ if (payload.active === false) {
94
+ store.actions.tooltip.setSyncInteraction(inactiveSyncState);
95
+ flush();
96
+ return;
97
+ }
122
98
 
123
- let activeTick: TickItem | undefined;
124
- if (typeof syncMethod === "function") {
125
- const syncMethodParam: MouseHandlerDataParam = {
126
- activeTooltipIndex: payload.index == null ? undefined : Number(payload.index),
127
- isTooltipActive: payload.active,
128
- activeIndex: payload.index == null ? undefined : Number(payload.index),
129
- activeLabel: payload.label,
130
- activeDataKey: payload.dataKey,
131
- activeCoordinate: payload.coordinate,
99
+ if (syncMethod === "index") {
100
+ if (box && payload.coordinate && payload.sourceViewBox) {
101
+ const { coordinate } = payload;
102
+ const { x, y } = coordinate;
103
+ const {
104
+ x: sourceX,
105
+ y: sourceY,
106
+ width: sourceWidth,
107
+ height: sourceHeight,
108
+ } = payload.sourceViewBox;
109
+ const scaledCoordinate: Coordinate = {
110
+ ...coordinate,
111
+ x: box.x + (sourceWidth ? (x - sourceX) / sourceWidth : 0) * box.width,
112
+ y: box.y + (sourceHeight ? (y - sourceY) / sourceHeight : 0) * box.height,
132
113
  };
133
- const activeTooltipIndex = syncMethod(tooltipTicks, syncMethodParam);
134
- activeTick = tooltipTicks[activeTooltipIndex];
135
- } else if (syncMethod === "value") {
136
- activeTick = tooltipTicks.find((tick) => String(tick.value) === payload.label);
137
- }
138
-
139
- const { coordinate } = payload;
140
- if (coordinate == null || box == null) {
141
- store.actions.tooltip.setSyncInteraction(inactiveSyncState);
142
- return;
143
- }
144
-
145
- if (activeTick == null) {
146
- // No matching tick (sparse data): hide locally but KEEP sourceViewBox so
147
- // the emission guard still sees us as "receiving" (no counter-cascade).
148
114
  store.actions.tooltip.setSyncInteraction({
149
- ...inactiveSyncState,
150
- sourceViewBox: payload.sourceViewBox,
115
+ ...payload,
116
+ coordinate: scaledCoordinate,
151
117
  });
152
- return;
118
+ } else {
119
+ store.actions.tooltip.setSyncInteraction(payload);
153
120
  }
121
+ flush();
122
+ return;
123
+ }
124
+
125
+ if (tooltipTicks == null) {
126
+ // 'value'/function need ticks.
127
+ return;
128
+ }
154
129
 
155
- const validateChartX = Math.min(coordinate.x, box.x + box.width);
156
- const validateChartY = Math.min(coordinate.y, box.y + box.height);
157
- const activeCoordinate: Coordinate = {
158
- x: layout === "horizontal" ? activeTick.coordinate : validateChartX,
159
- y: layout === "horizontal" ? validateChartY : activeTick.coordinate,
130
+ let activeTick: TickItem | undefined;
131
+ if (typeof syncMethod === "function") {
132
+ const syncMethodParam: MouseHandlerDataParam = {
133
+ activeTooltipIndex: payload.index == null ? undefined : Number(payload.index),
134
+ isTooltipActive: payload.active,
135
+ activeIndex: payload.index == null ? undefined : Number(payload.index),
136
+ activeLabel: payload.label,
137
+ activeDataKey: payload.dataKey,
138
+ activeCoordinate: payload.coordinate,
160
139
  };
140
+ const activeTooltipIndex = syncMethod(tooltipTicks, syncMethodParam);
141
+ activeTick = tooltipTicks[activeTooltipIndex];
142
+ } else if (syncMethod === "value") {
143
+ activeTick = tooltipTicks.find((tick) => String(tick.value) === payload.label);
144
+ }
145
+
146
+ const { coordinate } = payload;
147
+ if (coordinate == null || box == null) {
148
+ store.actions.tooltip.setSyncInteraction(inactiveSyncState);
149
+ flush();
150
+ return;
151
+ }
161
152
 
153
+ if (activeTick == null) {
154
+ // No matching tick (sparse data): hide locally but KEEP sourceViewBox so
155
+ // the emission guard still sees us as "receiving" (no counter-cascade).
162
156
  store.actions.tooltip.setSyncInteraction({
163
- active: payload.active,
164
- coordinate: activeCoordinate,
165
- dataKey: payload.dataKey,
166
- index: String(activeTick.index),
167
- label: payload.label,
157
+ ...inactiveSyncState,
168
158
  sourceViewBox: payload.sourceViewBox,
169
- graphicalItemId: payload.graphicalItemId,
170
159
  });
160
+ flush();
161
+ return;
162
+ }
163
+
164
+ const validateChartX = Math.min(coordinate.x, box.x + box.width);
165
+ const validateChartY = Math.min(coordinate.y, box.y + box.height);
166
+ const activeCoordinate: Coordinate = {
167
+ x: layout === "horizontal" ? activeTick.coordinate : validateChartX,
168
+ y: layout === "horizontal" ? validateChartY : activeTick.coordinate,
171
169
  };
172
170
 
173
- syncEventCenter.on(TOOLTIP_SYNC_EVENT, listener);
174
- onCleanup(() => {
175
- syncEventCenter.off(TOOLTIP_SYNC_EVENT, listener);
171
+ store.actions.tooltip.setSyncInteraction({
172
+ active: payload.active,
173
+ coordinate: activeCoordinate,
174
+ dataKey: payload.dataKey,
175
+ index: String(activeTick.index),
176
+ label: payload.label,
177
+ sourceViewBox: payload.sourceViewBox,
178
+ graphicalItemId: payload.graphicalItemId,
176
179
  });
177
- },
178
- ),
180
+ flush();
181
+ };
182
+
183
+ syncEventCenter.on(TOOLTIP_SYNC_EVENT, listener);
184
+ // The effect (apply) callback is a leaf scope — return cleanup, don't call
185
+ // onCleanup (which would warn NO_OWNER_CLEANUP). Runs before the next apply.
186
+ return () => {
187
+ syncEventCenter.off(TOOLTIP_SYNC_EVENT, listener);
188
+ };
189
+ },
179
190
  );
180
191
  }
181
192
 
@@ -185,34 +196,33 @@ function useTooltipSyncEventsListener(store: RechartsStore): void {
185
196
  */
186
197
  function useBrushSyncEventsListener(store: RechartsStore): void {
187
198
  createEffect(
188
- on(
189
- () => {
190
- const mySyncId = selectSyncId(store.state);
191
- const myEventEmitter = selectEventEmitter(store.state);
192
- return { mySyncId, myEventEmitter };
193
- },
194
- ({ mySyncId, myEventEmitter }) => {
195
- if (mySyncId == null) {
199
+ () => {
200
+ const mySyncId = selectSyncId(store.state);
201
+ const myEventEmitter = selectEventEmitter(store.state);
202
+ return { mySyncId, myEventEmitter };
203
+ },
204
+ ({ mySyncId, myEventEmitter }) => {
205
+ if (mySyncId == null) {
206
+ return;
207
+ }
208
+ const listener = (
209
+ incomingSyncId: SyncId,
210
+ payload: BrushStartEndIndex,
211
+ emitter: symbol,
212
+ ): void => {
213
+ if (myEventEmitter === emitter) {
196
214
  return;
197
215
  }
198
- const listener = (
199
- incomingSyncId: SyncId,
200
- payload: BrushStartEndIndex,
201
- emitter: symbol,
202
- ): void => {
203
- if (myEventEmitter === emitter) {
204
- return;
205
- }
206
- if (mySyncId === incomingSyncId) {
207
- store.actions.chartData.setDataStartEndIndexes(payload);
208
- }
209
- };
210
- syncEventCenter.on(BRUSH_SYNC_EVENT, listener);
211
- onCleanup(() => {
212
- syncEventCenter.off(BRUSH_SYNC_EVENT, listener);
213
- });
214
- },
215
- ),
216
+ if (mySyncId === incomingSyncId) {
217
+ store.actions.chartData.setDataStartEndIndexes(payload);
218
+ flush();
219
+ }
220
+ };
221
+ syncEventCenter.on(BRUSH_SYNC_EVENT, listener);
222
+ return () => {
223
+ syncEventCenter.off(BRUSH_SYNC_EVENT, listener);
224
+ };
225
+ },
216
226
  );
217
227
  }
218
228
 
@@ -232,10 +242,8 @@ export function useSynchronisedEventsFromOtherCharts(): void {
232
242
  // _SCOPE). Effects flush in creation order, so the symbol is set before the
233
243
  // emit effect (created later, in the Tooltip) first runs.
234
244
  createEffect(
235
- on(
236
- () => undefined,
237
- () => store.actions.options.createEventEmitter(),
238
- ),
245
+ () => undefined,
246
+ () => store.actions.options.createEventEmitter(),
239
247
  );
240
248
  useTooltipSyncEventsListener(store);
241
249
  useBrushSyncEventsListener(store);
@@ -277,54 +285,52 @@ export function useTooltipChartSynchronisation(
277
285
  let lastEmitted: string | undefined;
278
286
 
279
287
  createEffect(
280
- on(
281
- () => {
282
- // Build the *plain* (snapshotted) payload in the COMPUTE phase, where store
283
- // reads track and STRICT_READ_UNTRACKED doesn't apply. The apply phase then
284
- // only emits — it never reads store proxies (which would warn).
285
- const eventEmitterSymbol = selectEventEmitter(store.state);
286
- const syncId = selectSyncId(store.state);
287
- const tooltipState = store.state.tooltip.syncInteraction;
288
- // sourceViewBox (not `active`) flags that we're currently RECEIVING sync.
289
- const isReceivingSynchronisation = tooltipState.sourceViewBox != null;
288
+ () => {
289
+ // Build the *plain* (snapshotted) payload in the COMPUTE phase, where store
290
+ // reads track and STRICT_READ_UNTRACKED doesn't apply. The apply phase then
291
+ // only emits it never reads store proxies (which would warn).
292
+ const eventEmitterSymbol = selectEventEmitter(store.state);
293
+ const syncId = selectSyncId(store.state);
294
+ const tooltipState = store.state.tooltip.syncInteraction;
295
+ // sourceViewBox (not `active`) flags that we're currently RECEIVING sync.
296
+ const isReceivingSynchronisation = tooltipState.sourceViewBox != null;
290
297
 
291
- const box = viewBox();
292
- const rawCoordinate = activeCoordinate();
293
- const rawLabel = activeLabel();
294
- const payload: TooltipSyncState = {
295
- active: isTooltipActive(),
296
- coordinate: rawCoordinate == null ? undefined : { ...rawCoordinate },
297
- dataKey: selectTooltipDataKey(store.state, tooltipEventType(), trigger()),
298
- index: activeIndex() ?? null,
299
- label: typeof rawLabel === "number" ? String(rawLabel) : rawLabel,
300
- sourceViewBox: box == null ? undefined : { ...box },
301
- graphicalItemId: selectActiveTooltipGraphicalItemId(store.state),
302
- };
303
- return { eventEmitterSymbol, syncId, isReceivingSynchronisation, payload };
304
- },
305
- ({ eventEmitterSymbol, syncId, isReceivingSynchronisation, payload }) => {
306
- if (isReceivingSynchronisation) {
307
- // Receiving sync — don't echo events back out.
308
- return;
309
- }
310
- if (syncId == null) {
311
- // Not synchronised.
312
- return;
313
- }
314
- if (eventEmitterSymbol == null) {
315
- // Used outside a chart context — bail silently.
316
- return;
317
- }
318
- // Dedupe identical consecutive emissions (see lastEmitted note above). The
319
- // payload is already a plain snapshot, so stringifying it here is safe.
320
- const fingerprint = JSON.stringify(payload);
321
- if (fingerprint === lastEmitted) {
322
- return;
323
- }
324
- lastEmitted = fingerprint;
325
- syncEventCenter.emit(TOOLTIP_SYNC_EVENT, syncId, payload, eventEmitterSymbol);
326
- },
327
- ),
298
+ const box = viewBox();
299
+ const rawCoordinate = activeCoordinate();
300
+ const rawLabel = activeLabel();
301
+ const payload: TooltipSyncState = {
302
+ active: isTooltipActive(),
303
+ coordinate: rawCoordinate == null ? undefined : { ...rawCoordinate },
304
+ dataKey: selectTooltipDataKey(store.state, tooltipEventType(), trigger()),
305
+ index: activeIndex() ?? null,
306
+ label: typeof rawLabel === "number" ? String(rawLabel) : rawLabel,
307
+ sourceViewBox: box == null ? undefined : { ...box },
308
+ graphicalItemId: selectActiveTooltipGraphicalItemId(store.state),
309
+ };
310
+ return { eventEmitterSymbol, syncId, isReceivingSynchronisation, payload };
311
+ },
312
+ ({ eventEmitterSymbol, syncId, isReceivingSynchronisation, payload }) => {
313
+ if (isReceivingSynchronisation) {
314
+ // Receiving sync — don't echo events back out.
315
+ return;
316
+ }
317
+ if (syncId == null) {
318
+ // Not synchronised.
319
+ return;
320
+ }
321
+ if (eventEmitterSymbol == null) {
322
+ // Used outside a chart context — bail silently.
323
+ return;
324
+ }
325
+ // Dedupe identical consecutive emissions (see lastEmitted note above). The
326
+ // payload is already a plain snapshot, so stringifying it here is safe.
327
+ const fingerprint = JSON.stringify(payload);
328
+ if (fingerprint === lastEmitted) {
329
+ return;
330
+ }
331
+ lastEmitted = fingerprint;
332
+ syncEventCenter.emit(TOOLTIP_SYNC_EVENT, syncId, payload, eventEmitterSymbol);
333
+ },
328
334
  );
329
335
  }
330
336
 
@@ -338,31 +344,29 @@ export function useBrushChartSynchronisation(): void {
338
344
  return;
339
345
  }
340
346
  createEffect(
341
- on(
342
- () => {
343
- const syncId = selectSyncId(store.state);
344
- const eventEmitterSymbol = selectEventEmitter(store.state);
345
- const brushStartIndex = store.state.chartData.dataStartIndex;
346
- const brushEndIndex = store.state.chartData.dataEndIndex;
347
- return { syncId, eventEmitterSymbol, brushStartIndex, brushEndIndex };
348
- },
349
- ({ syncId, eventEmitterSymbol, brushStartIndex, brushEndIndex }) => {
350
- if (
351
- syncId == null ||
352
- brushStartIndex == null ||
353
- brushEndIndex == null ||
354
- eventEmitterSymbol == null
355
- ) {
356
- return;
357
- }
358
- const payload: BrushStartEndIndex = {
359
- startIndex: brushStartIndex,
360
- endIndex: brushEndIndex,
361
- };
362
- untrack(() => {
363
- syncEventCenter.emit(BRUSH_SYNC_EVENT, syncId, payload, eventEmitterSymbol);
364
- });
365
- },
366
- ),
347
+ () => {
348
+ const syncId = selectSyncId(store.state);
349
+ const eventEmitterSymbol = selectEventEmitter(store.state);
350
+ const brushStartIndex = store.state.chartData.dataStartIndex;
351
+ const brushEndIndex = store.state.chartData.dataEndIndex;
352
+ return { syncId, eventEmitterSymbol, brushStartIndex, brushEndIndex };
353
+ },
354
+ ({ syncId, eventEmitterSymbol, brushStartIndex, brushEndIndex }) => {
355
+ if (
356
+ syncId == null ||
357
+ brushStartIndex == null ||
358
+ brushEndIndex == null ||
359
+ eventEmitterSymbol == null
360
+ ) {
361
+ return;
362
+ }
363
+ const payload: BrushStartEndIndex = {
364
+ startIndex: brushStartIndex,
365
+ endIndex: brushEndIndex,
366
+ };
367
+ untrack(() => {
368
+ syncEventCenter.emit(BRUSH_SYNC_EVENT, syncId, payload, eventEmitterSymbol);
369
+ });
370
+ },
367
371
  );
368
372
  }
@@ -7,8 +7,8 @@
7
7
  // includes the element constituent; the default shape is rendered via `<Dynamic>`.
8
8
  // `className`→`class`.
9
9
  import { Layer } from "../container/Layer";
10
- import type { JSX } from "solid-js";
11
- import { Dynamic } from "solid-js/web";
10
+ import type { JSX } from "@solidjs/web";
11
+ import { Dynamic } from "@solidjs/web";
12
12
  import { ActiveShape } from "./types";
13
13
 
14
14
  type ShapeRenderer<PropsType> = (props: PropsType) => JSX.Element;
@@ -2,8 +2,8 @@
2
2
  //
3
3
  // Exports `BarRectangle`/`defaultBarShape` for background bars and custom shapes;
4
4
  // `MinPointSize` + `minPointSizeCallback` for computeBarRectangles.
5
- import { createMemo, splitProps } from "solid-js";
6
- import type { JSX } from "solid-js";
5
+ import { createMemo, omit } from "solid-js";
6
+ import type { JSX } from "@solidjs/web";
7
7
  import { Rectangle, type RectangleProps } from "../shape/Rectangle";
8
8
  import type { BarShapeProps } from "../cartesian/Bar";
9
9
  import { Shape } from "./ActiveShapeUtils";
@@ -32,9 +32,7 @@ export function BarRectangle(props: BarRectangleProps): JSX.Element {
32
32
  // fails to exclude `option` and leaks it to custom shape/background functions.
33
33
  // Spreading into a plain object keeps the downstream <Shape> reads a static
34
34
  // snapshot (no STRICT_READ), while the memo re-runs when any prop changes.
35
- const shapeProps = createMemo(
36
- (): BarRectangleShapeProps => ({ ...splitProps(props, ["option"])[1] }),
37
- );
35
+ const shapeProps = createMemo((): BarRectangleShapeProps => ({ ...omit(props, "option") }));
38
36
  return (
39
37
  <Shape<BarRectangleShapeProps, SVGPathElement>
40
38
  option={props.option}
@@ -8,7 +8,7 @@
8
8
  // function + object + boolean forms are supported, matching ActiveShapeUtils). The
9
9
  // `option` is typed as the wider `ActiveShape` the `<Shape>` helper accepts (the
10
10
  // `<Funnel>` `shape`/`activeShape` function-form props are assignable to it).
11
- import type { JSX } from "solid-js";
11
+ import type { JSX } from "@solidjs/web";
12
12
  import { Trapezoid } from "../shape/Trapezoid";
13
13
  import { Shape } from "./ActiveShapeUtils";
14
14
  import type { ActiveShape, ShapeAnimationProps } from "./types";
@@ -1,8 +1,7 @@
1
- import { splitProps } from "solid-js";
2
1
  // Ported from recharts 3.8.1 src/util/RadialBarUtils.tsx (commit 7a23854).
3
2
  // Renders a RadialBar sector through the <Shape> abstraction (default = Sector).
4
-
5
- import type { JSX } from "solid-js";
3
+ import { omit } from "solid-js";
4
+ import type { JSX } from "@solidjs/web";
6
5
  import { RadialBarDataItem, RadialBarProps } from "../polar/RadialBar";
7
6
  import { Sector } from "../shape/Sector";
8
7
  import { Shape } from "./ActiveShapeUtils";
@@ -30,7 +29,7 @@ export function RadialBarSector(props: RadialBarSectorComponentProps): JSX.Eleme
30
29
  <Shape<RadialBarSectorProps, SVGPathElement>
31
30
  option={props.option}
32
31
  DefaultShape={defaultRadialBarShape}
33
- shapeProps={splitProps(props, ["option"])[1]}
32
+ shapeProps={omit(props, "option")}
34
33
  />
35
34
  );
36
35
  }
@@ -3,7 +3,7 @@
3
3
  // binding wrapper spreads the user props then sets `layout` as a static
4
4
  // attribute LAST, so the bound layout wins over any passed value; the public
5
5
  // type omits `layout` so TS rejects it too.
6
- import type { JSX } from "solid-js";
6
+ import type { JSX } from "@solidjs/web";
7
7
  import { AreaChart as OriginalAreaChart } from "../chart/AreaChart";
8
8
  import { BarChart as OriginalBarChart } from "../chart/BarChart";
9
9
  import { LineChart as OriginalLineChart } from "../chart/LineChart";
@@ -1,7 +1,7 @@
1
1
  // Ported from recharts 3.8.1 src/util/createPolarCharts.tsx.
2
2
  // Solid-native: React.ComponentType → `(props) => JSX.Element`; layout binding
3
3
  // via `merge()`.
4
- import type { JSX } from "solid-js";
4
+ import type { JSX } from "@solidjs/web";
5
5
  import { RadialBarChart as OriginalRadialBarChart } from "../chart/RadialBarChart";
6
6
  import { RadarChart as OriginalRadarChart } from "../chart/RadarChart";
7
7
  import { PieChart as OriginalPieChart } from "../chart/PieChart";
@@ -5,7 +5,7 @@
5
5
  // is deferred until the Tier-2 "shape can be an element or a props object"
6
6
  // pattern lands (ActiveShapeUtils). Element inputs currently fall through to
7
7
  // `null`. React's `SVGProps`/`CSSProperties` types are replaced with JSX.*
8
- // from 'solid-js/web'.
8
+ // from '@solidjs/web'.
9
9
  import { isEventKey } from "./excludeEventProps";
10
10
  import { isDataAttribute, isSvgElementPropKey, toSvgAttributeName } from "./svgPropertiesNoEvents";
11
11
  import { svgPropertiesNoEventsKeepCase } from "./svgPropertiesNoEvents";
@@ -2,9 +2,9 @@
2
2
  // Pure functions — no JSX/components.
3
3
  // Deviations from reference:
4
4
  // - `clsx` replaced with hand-rolled class concatenation (no clsx dep, no class strings)
5
- // - `CSSProperties` from 'react' → `JSX.CSSProperties` from 'solid-js/web'
5
+ // - `CSSProperties` from 'react' → `JSX.CSSProperties` from '@solidjs/web'
6
6
 
7
- import type { JSX } from "solid-js";
7
+ import type { JSX } from "@solidjs/web";
8
8
  import { isNumber } from "../DataUtils";
9
9
  import type { Coordinate, CartesianViewBox, AllowInDimension } from "../types";
10
10
 
package/src/util/types.ts CHANGED
@@ -1,5 +1,5 @@
1
- import type { JSX } from "solid-js";
2
- type Element = JSX.Element;
1
+ import type { JSX } from "@solidjs/web";
2
+ import type { Element } from "solid-js";
3
3
  import type * as d3Scales from "d3-scale";
4
4
  import type { DotProps } from "../shape/Dot";
5
5
  import type { ExternalMouseEvents } from "../chart/types";