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
@@ -15,16 +15,8 @@ import {
15
15
  stackOffsetSilhouette,
16
16
  stackOffsetWiggle,
17
17
  stackOrderNone,
18
- } from "victory-vendor/d3-shape";
19
- import {
20
- findEntryInArray,
21
- isNan,
22
- isNotNil,
23
- isNullish,
24
- isNumber,
25
- isNumOrStr,
26
- mathSign,
27
- } from "./DataUtils";
18
+ } from "d3-shape";
19
+ import { isNan, isNotNil, isNullish, isNumber, isNumOrStr, mathSign } from "./DataUtils";
28
20
  import { getSliced } from "./getSliced";
29
21
  import { isWellBehavedNumber } from "./isWellBehavedNumber";
30
22
  import type {
@@ -276,6 +268,32 @@ export const truncateByDomain = <T>(
276
268
  return result;
277
269
  };
278
270
 
271
+ // Value→tick lookup cache, keyed on the ticks array reference. getCateCoordinateOfLine
272
+ // is called once per data point; a linear findEntryInArray scan there is O(points²)
273
+ // across a full series when allowDuplicatedCategory=false (ticks.length ≈ points).
274
+ // The axis-ticks selector memoizes the ticks array, so this map is built once per
275
+ // render and reused for every point lookup, making it O(points). First value wins,
276
+ // mirroring Array.find.
277
+ const tickByValueCache = new WeakMap<ReadonlyArray<TickItem>, Map<unknown, TickItem>>();
278
+ function findTickByValue(ticks: ReadonlyArray<TickItem>, value: unknown): TickItem | undefined {
279
+ // Map uses SameValueZero and would match NaN, while the upstream Array.find
280
+ // lookup uses strict equality (NaN !== NaN). Preserve that fallback behavior.
281
+ if (typeof value === "number" && Number.isNaN(value)) {
282
+ return undefined;
283
+ }
284
+ let map = tickByValueCache.get(ticks);
285
+ if (map == null) {
286
+ map = new Map<unknown, TickItem>();
287
+ for (const tick of ticks) {
288
+ if (tick != null && !map.has(tick.value)) {
289
+ map.set(tick.value, tick);
290
+ }
291
+ }
292
+ tickByValueCache.set(ticks, map);
293
+ }
294
+ return map.get(value);
295
+ }
296
+
279
297
  export function getCateCoordinateOfLine<T>({
280
298
  axis,
281
299
  ticks,
@@ -312,7 +330,7 @@ export function getCateCoordinateOfLine<T>({
312
330
  const key: string | number = axisDataKey;
313
331
  const cellValue = entry[key];
314
332
  if (!isNullish(cellValue)) {
315
- const matchedTick = ticks ? findEntryInArray(ticks, "value", cellValue) : undefined;
333
+ const matchedTick = ticks ? findTickByValue(ticks, cellValue) : undefined;
316
334
 
317
335
  if (matchedTick) {
318
336
  return matchedTick.coordinate + bandSize / 2;
@@ -625,35 +643,61 @@ export const getStackedData = (
625
643
  offsetType: StackOffsetType,
626
644
  ): ReadonlyArray<Series<StackDatum, StackKey>> => {
627
645
  const offsetAccessor: OffsetAccessor = STACK_OFFSET_MAP[offsetType] ?? offsetSign;
646
+ // Track whether any value is a [min, max] tuple during the (unavoidable) value
647
+ // accessor pass, so the ranged-data fixup below can be skipped entirely for the
648
+ // common scalar case instead of running a second full series×points scan.
649
+ let hasRangedValues = false;
628
650
  const stack = shapeStack<StackDatum, StackKey>()
629
651
  .keys(dataKeys)
630
- .value((d, key) => Number(getValueByDataKey(d, key, 0)))
652
+ .value((d, key) => {
653
+ const raw = getValueByDataKey(d, key, 0);
654
+ if (Array.isArray(raw) && raw.length === 2) {
655
+ hasRangedValues = true;
656
+ }
657
+ return Number(raw);
658
+ })
631
659
  .order(stackOrderNone)
632
660
  .offset(offsetAccessor);
633
661
 
634
662
  const result = stack(data);
635
663
 
636
664
  // Ranged data: when a value is a [min, max] tuple, use it directly (no stacking).
637
- result.forEach((s, seriesIndex) => {
638
- s.forEach((point, pointIndex) => {
639
- const value = getValueByDataKey(data[pointIndex], dataKeys[seriesIndex], 0);
640
- if (value != null && Array.isArray(value) && value.length === 2) {
641
- const lo: unknown = value[0];
642
- const hi: unknown = value[1];
643
- if (isNumber(lo) && isNumber(hi)) {
644
- point[0] = lo;
645
- point[1] = hi;
665
+ if (hasRangedValues) {
666
+ result.forEach((s, seriesIndex) => {
667
+ s.forEach((point, pointIndex) => {
668
+ const value = getValueByDataKey(data[pointIndex], dataKeys[seriesIndex], 0);
669
+ if (value != null && Array.isArray(value) && value.length === 2) {
670
+ const lo: unknown = value[0];
671
+ const hi: unknown = value[1];
672
+ if (isNumber(lo) && isNumber(hi)) {
673
+ point[0] = lo;
674
+ point[1] = hi;
675
+ }
646
676
  }
647
- }
677
+ });
648
678
  });
649
- });
679
+ }
650
680
 
651
681
  return result;
652
682
  };
653
683
 
654
684
  const getDomainOfSingle = (data: ReadonlyArray<ReadonlyArray<unknown>>): number[] => {
655
- const flat = data.flat(2).filter(isNumber);
656
- return [Math.min(...flat), Math.max(...flat)];
685
+ // Reduce loop, not `Math.min(...flat)`: spreading a data-sized array throws a V8
686
+ // RangeError past ~100k elements. Empty input yields [Infinity, -Infinity],
687
+ // matching the previous Math.min/Math.max-of-empty behavior.
688
+ let min = Infinity;
689
+ let max = -Infinity;
690
+ for (const value of data.flat(2)) {
691
+ if (isNumber(value)) {
692
+ if (value < min) {
693
+ min = value;
694
+ }
695
+ if (value > max) {
696
+ max = value;
697
+ }
698
+ }
699
+ }
700
+ return [min, max];
657
701
  };
658
702
 
659
703
  const makeDomainFinite = (domain: NumberDomain): NumberDomain => [
@@ -0,0 +1,107 @@
1
+ import { createEffect, createRoot, on, onCleanup } from "solid-js";
2
+ import type { JSX } from "solid-js";
3
+ import { insert, isServer } from "solid-js/web";
4
+
5
+ export interface DirectPortalProps {
6
+ mount: Element;
7
+ children: JSX.Element;
8
+ }
9
+
10
+ interface PortalRange {
11
+ placeholder: Text;
12
+ start: Comment;
13
+ end: Comment;
14
+ sequence: number;
15
+ }
16
+
17
+ const rangesByMount = new WeakMap<Element, PortalRange[]>();
18
+ let nextSequence = 0;
19
+
20
+ function reorderRanges(mount: Element, ranges: PortalRange[]): void {
21
+ ranges.sort((left, right) => {
22
+ const position = left.placeholder.compareDocumentPosition(right.placeholder);
23
+ if (position & Node.DOCUMENT_POSITION_FOLLOWING) {
24
+ return -1;
25
+ }
26
+ if (position & Node.DOCUMENT_POSITION_PRECEDING) {
27
+ return 1;
28
+ }
29
+ return left.sequence - right.sequence;
30
+ });
31
+
32
+ const fragment = document.createDocumentFragment();
33
+ ranges.forEach((range) => {
34
+ let node: Node | null = range.start;
35
+ while (node != null) {
36
+ const next: Node | null = node.nextSibling;
37
+ fragment.append(node);
38
+ if (node === range.end) {
39
+ break;
40
+ }
41
+ node = next;
42
+ }
43
+ });
44
+ mount.append(fragment);
45
+ }
46
+
47
+ /**
48
+ * Portal content directly into a target without Solid 1's wrapper div/g.
49
+ *
50
+ * Recharts exposes the portal DOM shape, so the wrapper added by Solid 1's
51
+ * built-in Portal would break direct-child selectors and SVG parity.
52
+ */
53
+ export function DirectPortal(props: DirectPortalProps): JSX.Element {
54
+ if (isServer) {
55
+ return null;
56
+ }
57
+
58
+ const placeholder = document.createTextNode("");
59
+
60
+ createEffect(
61
+ on(
62
+ () => props.mount,
63
+ (mount) => {
64
+ const start = document.createComment("solid-recharts-portal-start");
65
+ const end = document.createComment("solid-recharts-portal-end");
66
+ mount.append(start, end);
67
+
68
+ const dispose = createRoot((disposeRoot) => {
69
+ insert(mount, () => props.children, end);
70
+ return disposeRoot;
71
+ });
72
+ const range: PortalRange = {
73
+ placeholder,
74
+ start,
75
+ end,
76
+ sequence: nextSequence,
77
+ };
78
+ nextSequence += 1;
79
+ const ranges = rangesByMount.get(mount) ?? [];
80
+ ranges.push(range);
81
+ rangesByMount.set(mount, ranges);
82
+ reorderRanges(mount, ranges);
83
+
84
+ onCleanup(() => {
85
+ dispose();
86
+ let node: ChildNode | null = start.nextSibling;
87
+ while (node != null && node !== end) {
88
+ const next: ChildNode | null = node.nextSibling;
89
+ node.remove();
90
+ node = next;
91
+ }
92
+ start.remove();
93
+ end.remove();
94
+ const index = ranges.indexOf(range);
95
+ if (index >= 0) {
96
+ ranges.splice(index, 1);
97
+ }
98
+ if (ranges.length === 0) {
99
+ rangesByMount.delete(mount);
100
+ }
101
+ });
102
+ },
103
+ ),
104
+ );
105
+
106
+ return placeholder;
107
+ }
@@ -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 "@solidjs/web";
11
+ import type { JSX } from "solid-js";
12
12
  import { Trapezoid } from "../shape/Trapezoid";
13
13
  import { Shape } from "./ActiveShapeUtils";
14
14
  import type { ActiveShape, ShapeAnimationProps } from "./types";
@@ -1,7 +1,8 @@
1
+ import { splitProps } from "solid-js";
1
2
  // Ported from recharts 3.8.1 src/util/RadialBarUtils.tsx (commit 7a23854).
2
3
  // Renders a RadialBar sector through the <Shape> abstraction (default = Sector).
3
- import { omit } from "solid-js";
4
- import type { JSX } from "@solidjs/web";
4
+
5
+ import type { JSX } from "solid-js";
5
6
  import { RadialBarDataItem, RadialBarProps } from "../polar/RadialBar";
6
7
  import { Sector } from "../shape/Sector";
7
8
  import { Shape } from "./ActiveShapeUtils";
@@ -29,7 +30,7 @@ export function RadialBarSector(props: RadialBarSectorComponentProps): JSX.Eleme
29
30
  <Shape<RadialBarSectorProps, SVGPathElement>
30
31
  option={props.option}
31
32
  DefaultShape={defaultRadialBarShape}
32
- shapeProps={omit(props, "option")}
33
+ shapeProps={splitProps(props, ["option"])[1]}
33
34
  />
34
35
  );
35
36
  }
@@ -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 "@solidjs/web";
6
+ import type { JSX } from "solid-js";
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 "@solidjs/web";
4
+ import type { JSX } from "solid-js";
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";
@@ -1,16 +1,15 @@
1
1
  // Ported from recharts 3.8.1 src/util/propsAreEqual.ts (commit 7a23854).
2
2
  //
3
3
  // Deviation: recharts imports `shallowEqual` from `react-redux`. A SolidJS port
4
- // has no react-redux, so we inline an equivalent one-level same-value compare.
5
- // react-redux's `shallowEqual` is just `Object.is` applied per own-enumerable
6
- // key (its internal `is` predates and mirrors `Object.is`), so the local
7
- // version below is behavior-identical — NaN compares equal, +0 and -0 do not.
4
+ // has no react-redux, so it reuses the local equivalent in `./ShallowEqual`
5
+ // (one-level same-value compare NaN equal, +0 and -0 distinct).
8
6
  //
9
7
  // NOTE on relevance: recharts uses `propsAreEqual` only as the `React.memo`
10
8
  // comparator on Bar/Area/Line/Scatter/Legend/ReportEventSettings/etc. Solid
11
9
  // components do not re-render, so when those units are ported this comparator
12
10
  // will most likely be dropped or repurposed. The function itself is pure and
13
11
  // spec-tested, so we port it now and revisit its call sites in Tier 2.
12
+ import { shallowEqual } from "./ShallowEqual";
14
13
 
15
14
  const propsToShallowCompare = new Set<string>([
16
15
  "axisLine",
@@ -37,35 +36,6 @@ const propsToShallowCompare = new Set<string>([
37
36
  "throttledEvents",
38
37
  ]);
39
38
 
40
- function isRecord(value: unknown): value is Record<string, unknown> {
41
- return typeof value === "object" && value !== null;
42
- }
43
-
44
- /**
45
- * One-level same-value comparison, equivalent to react-redux's `shallowEqual`.
46
- * Uses `Object.is`, so two NaNs are equal and +0/-0 are not — matching the
47
- * original.
48
- */
49
- function shallowEqual(objA: unknown, objB: unknown): boolean {
50
- if (Object.is(objA, objB)) {
51
- return true;
52
- }
53
- if (!isRecord(objA) || !isRecord(objB)) {
54
- return false;
55
- }
56
- const keysA = Object.keys(objA);
57
- const keysB = Object.keys(objB);
58
- if (keysA.length !== keysB.length) {
59
- return false;
60
- }
61
- for (const key of keysA) {
62
- if (!Object.hasOwn(objB, key) || !Object.is(objA[key], objB[key])) {
63
- return false;
64
- }
65
- }
66
- return true;
67
- }
68
-
69
39
  /**
70
40
  * When comparing two values, returns true if they are the same value or
71
41
  * are both NaN.
@@ -1,5 +1,5 @@
1
1
  // Ported from recharts 3.8.1 src/util/stacks/stackTypes.ts (commit 7a23854).
2
- import { Series } from "victory-vendor/d3-shape";
2
+ import { Series } from "d3-shape";
3
3
  import { StackId } from "../ChartUtils";
4
4
  import { DataKey } from "../types";
5
5
  import { GraphicalItemId } from "../../state/graphicalItemsSlice";
@@ -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 '@solidjs/web'.
8
+ // from 'solid-js/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 '@solidjs/web'
5
+ // - `CSSProperties` from 'react' → `JSX.CSSProperties` from 'solid-js/web'
6
6
 
7
- import type { JSX } from "@solidjs/web";
7
+ import type { JSX } from "solid-js";
8
8
  import { isNumber } from "../DataUtils";
9
9
  import type { Coordinate, CartesianViewBox, AllowInDimension } from "../types";
10
10
 
package/src/util/types.ts CHANGED
@@ -1,6 +1,6 @@
1
- import type { JSX } from "@solidjs/web";
2
- import type { Element } from "solid-js";
3
- import type * as d3Scales from "victory-vendor/d3-scale";
1
+ import type { JSX } from "solid-js";
2
+ type Element = JSX.Element;
3
+ import type * as d3Scales from "d3-scale";
4
4
  import type { DotProps } from "../shape/Dot";
5
5
  import type { ExternalMouseEvents } from "../chart/types";
6
6
 
@@ -1,17 +1,9 @@
1
1
  // Ported from recharts 3.8.1 src/zIndex/ZIndexLayer.tsx (commit 7a23854).
2
2
  // Solid deviations: `useLayoutEffect` → two-arg `createEffect`; `createPortal` →
3
3
  // `<Portal mount>`; dispatch → `store.actions.zIndex`.
4
- import {
5
- createEffect,
6
- createMemo,
7
- createRoot,
8
- getOwner,
9
- onCleanup,
10
- onSettled,
11
- runWithOwner,
12
- Show,
13
- } from "solid-js";
14
- import { Portal, type JSX } from "@solidjs/web";
4
+ import { createMemo, onCleanup, Show, createEffect, on } from "solid-js";
5
+ import type { JSX } from "solid-js";
6
+ import { DirectPortal } from "../util/DirectPortal";
15
7
  import { useAppSelector, useAppStore } from "../state/hooks";
16
8
  import { unregisterCleanup } from "../state/unregisterOnCleanup";
17
9
  import { selectZIndexPortalElement } from "./zIndexSelectors";
@@ -48,78 +40,57 @@ export function ZIndexLayer(props: {
48
40
  );
49
41
 
50
42
  createEffect(
51
- () => ({
52
- should: shouldRenderInPortal(),
53
- zIndex: props.zIndex,
54
- portal: portalElement(),
55
- }),
56
- ({ should, zIndex, portal }) => {
57
- const actions = zIndexActions;
58
- if (!should || zIndex === undefined || actions == null) {
59
- registeredZIndexes.forEach((z) => {
60
- actions?.unregisterZIndexPortal({ zIndex: z });
61
- });
62
- registeredZIndexes.clear();
63
- lastPortalElement = undefined;
64
- return;
65
- }
43
+ on(
44
+ () => ({
45
+ should: shouldRenderInPortal(),
46
+ zIndex: props.zIndex,
47
+ portal: portalElement(),
48
+ }),
49
+ ({ should, zIndex, portal }) => {
50
+ const actions = zIndexActions;
51
+ if (!should || zIndex === undefined || actions == null) {
52
+ registeredZIndexes.forEach((z) => {
53
+ actions?.unregisterZIndexPortal({ zIndex: z });
54
+ });
55
+ registeredZIndexes.clear();
56
+ lastPortalElement = undefined;
57
+ return;
58
+ }
66
59
 
67
- if (!registeredZIndexes.has(zIndex)) {
68
- actions.registerZIndexPortal({ zIndex });
69
- registeredZIndexes.add(zIndex);
70
- }
60
+ if (!registeredZIndexes.has(zIndex)) {
61
+ actions.registerZIndexPortal({ zIndex });
62
+ registeredZIndexes.add(zIndex);
63
+ }
71
64
 
72
- if (portal) {
73
- lastPortalElement = portal;
74
- registeredZIndexes.forEach((z) => {
75
- if (z !== zIndex) {
76
- actions.unregisterZIndexPortal({ zIndex: z });
77
- registeredZIndexes.delete(z);
78
- }
79
- });
80
- }
81
- },
65
+ if (portal) {
66
+ lastPortalElement = portal;
67
+ registeredZIndexes.forEach((z) => {
68
+ if (z !== zIndex) {
69
+ actions.unregisterZIndexPortal({ zIndex: z });
70
+ registeredZIndexes.delete(z);
71
+ }
72
+ });
73
+ }
74
+ },
75
+ ),
82
76
  );
83
77
 
84
- onSettled(() => {
85
- return unregisterCleanup(() => {
78
+ onCleanup(
79
+ unregisterCleanup(() => {
86
80
  const actions = zIndexActions;
87
81
  registeredZIndexes.forEach((z) => {
88
82
  actions?.unregisterZIndexPortal({ zIndex: z });
89
83
  });
90
84
  registeredZIndexes.clear();
91
- });
92
- });
85
+ }),
86
+ );
93
87
 
94
88
  const targetElement = createMemo(() => portalElement() ?? lastPortalElement);
95
89
 
96
- // The portal target settles asynchronously (the <g> ref → register → selector),
97
- // so this Portal is created during a flush, NOT during the initial owned render.
98
- // Solid's runEffect invokes an effect's APPLY phase without re-establishing the
99
- // effect as owner, so <Portal>'s apply-phase `insert()` would create its child
100
- // render-effects with no owner (NO_OWNER_EFFECT — they never dispose). Capture the
101
- // component owner and create the Portal inside a `createRoot` parented to it, so
102
- // those effects are owned. The root's manual `dispose` is hooked to the keyed
103
- // <Show> branch's cleanup: when the target identity changes, the old Portal
104
- // subtree is torn down (parenting it to the component owner alone would leave
105
- // every previous Portal alive until the whole layer unmounts — stale chart
106
- // content stays portal'd into the old <g>).
107
- const owner = getOwner();
108
-
109
90
  return (
110
91
  <Show when={shouldRenderInPortal()} fallback={props.children}>
111
92
  <Show when={targetElement()} keyed>
112
- {(mount) => {
113
- let disposePortal: (() => void) | undefined;
114
- const rendered = runWithOwner(owner, () =>
115
- createRoot((dispose) => {
116
- disposePortal = dispose;
117
- return <Portal mount={mount}>{props.children}</Portal>;
118
- }),
119
- );
120
- onCleanup(() => disposePortal?.());
121
- return rendered;
122
- }}
93
+ {(mount) => <DirectPortal mount={mount}>{props.children}</DirectPortal>}
123
94
  </Show>
124
95
  </Show>
125
96
  );
@@ -1,7 +1,7 @@
1
1
  // Ported from recharts 3.8.1 src/zIndex/ZIndexPortal.tsx (commit 7a23854).
2
2
  // Solid deviations: `useLayoutEffect` → two-arg `createEffect`; `className` → `class`.
3
- import { createEffect, createMemo, createSignal, For, onSettled } from "solid-js";
4
- import type { JSX } from "@solidjs/web";
3
+ import { createMemo, createSignal, For, onCleanup, onMount, createEffect, on } from "solid-js";
4
+ import type { JSX } from "solid-js";
5
5
  import { useAppSelector, useAppStore } from "../state/hooks";
6
6
  import { unregisterCleanup } from "../state/unregisterOnCleanup";
7
7
  import { selectAllRegisteredZIndexes } from "./zIndexSelectors";
@@ -12,35 +12,39 @@ function ZIndexSvgPortal(props: { zIndex: number; isPanorama: boolean }): JSX.El
12
12
  const [gRef, setGRef] = createSignal<SVGGElement | undefined>();
13
13
 
14
14
  createEffect(
15
- () => ({
16
- zIndex: props.zIndex,
17
- isPanorama: props.isPanorama,
18
- element: gRef(),
19
- }),
20
- ({ zIndex, isPanorama, element }) => {
21
- const actions = zIndexActions;
22
- if (element != null && actions != null) {
23
- actions.registerZIndexPortalElement({
24
- zIndex,
25
- element,
26
- isPanorama,
27
- });
28
- }
29
- },
15
+ on(
16
+ () => ({
17
+ zIndex: props.zIndex,
18
+ isPanorama: props.isPanorama,
19
+ element: gRef(),
20
+ }),
21
+ ({ zIndex, isPanorama, element }) => {
22
+ const actions = zIndexActions;
23
+ if (element != null && actions != null) {
24
+ actions.registerZIndexPortalElement({
25
+ zIndex,
26
+ element,
27
+ isPanorama,
28
+ });
29
+ }
30
+ },
31
+ ),
30
32
  );
31
33
 
32
- onSettled(() => {
34
+ onMount(() => {
33
35
  const zIndex = props.zIndex;
34
36
  const isPanorama = props.isPanorama;
35
- return unregisterCleanup(() => {
36
- zIndexActions?.unregisterZIndexPortalElement({
37
- zIndex,
38
- isPanorama,
39
- });
40
- });
37
+ onCleanup(
38
+ unregisterCleanup(() => {
39
+ zIndexActions?.unregisterZIndexPortalElement({
40
+ zIndex,
41
+ isPanorama,
42
+ });
43
+ }),
44
+ );
41
45
  });
42
46
 
43
- return <g tabindex={-1} class={`recharts-zIndex-layer_${props.zIndex}`} ref={setGRef} />;
47
+ return <g tabIndex={-1} class={`recharts-zIndex-layer_${props.zIndex}`} ref={setGRef} />;
44
48
  }
45
49
 
46
50
  export const AllZIndexPortals = (props: {
@@ -1,15 +0,0 @@
1
- // Ported from recharts 3.8.1 src/state/reduxDevtoolsJsonStringifyReplacer.ts
2
- // Pure util — no framework surface — behavior is byte-identical to recharts.
3
-
4
- export function reduxDevtoolsJsonStringifyReplacer(key: string, value: unknown) {
5
- if (value instanceof HTMLElement) {
6
- return `HTMLElement <${value.tagName} class="${value.className}">`;
7
- }
8
- if (value === window) {
9
- return "global.window";
10
- }
11
- if (key === "children" && typeof value === "object" && value !== null) {
12
- return "<<CHILDREN>>";
13
- }
14
- return value;
15
- }
@@ -1,42 +0,0 @@
1
- // Ported from recharts 3.8.1 src/util/axisPropsAreEqual.ts (commit 7a23854).
2
- import { AxisRange } from "../state/selectors/axisSelectors";
3
- import { AxisDomain } from "./types";
4
- import { propsAreEqual } from "./propsAreEqual";
5
-
6
- function shortArraysAreEqual(
7
- arr1: AxisDomain | AxisRange | undefined,
8
- arr2: AxisDomain | AxisRange | undefined,
9
- ): boolean {
10
- if (arr1 === arr2) {
11
- return true;
12
- }
13
-
14
- if (Array.isArray(arr1) && arr1.length === 2 && Array.isArray(arr2) && arr2.length === 2) {
15
- return arr1[0] === arr2[0] && arr1[1] === arr2[1];
16
- }
17
-
18
- return false;
19
- }
20
-
21
- export function axisPropsAreEqual<
22
- T extends Record<string, unknown> & {
23
- domain?: AxisDomain;
24
- range?: AxisRange;
25
- },
26
- >(prevProps: T, nextProps: T): boolean {
27
- if (prevProps === nextProps) {
28
- return true;
29
- }
30
- const { domain: prevDomain, range: prevRange, ...prevRest } = prevProps;
31
- const { domain: nextDomain, range: nextRange, ...nextRest } = nextProps;
32
-
33
- if (!shortArraysAreEqual(prevDomain, nextDomain)) {
34
- return false;
35
- }
36
-
37
- if (!shortArraysAreEqual(prevRange, nextRange)) {
38
- return false;
39
- }
40
-
41
- return propsAreEqual(prevRest, nextRest);
42
- }