solid-recharts 0.1.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 (639) hide show
  1. package/NEXT_SESSION_PROMPT.md +114 -0
  2. package/package.json +28 -0
  3. package/src/animation/AnimatedItems.tsx +169 -0
  4. package/src/animation/AnimationController.ts +24 -0
  5. package/src/animation/AnimationControllerImpl.ts +37 -0
  6. package/src/animation/AnimationHandle.ts +273 -0
  7. package/src/animation/CSSTransitionAnimate.tsx +142 -0
  8. package/src/animation/JavascriptAnimate.tsx +107 -0
  9. package/src/animation/easing.ts +261 -0
  10. package/src/animation/matchBy.ts +211 -0
  11. package/src/animation/timeoutController.ts +51 -0
  12. package/src/animation/useAnimationController.tsx +31 -0
  13. package/src/animation/useAnimationStartSnapshot.ts +73 -0
  14. package/src/animation/util.ts +16 -0
  15. package/src/cartesian/Area.tsx +810 -0
  16. package/src/cartesian/AreaRevealShape.tsx +250 -0
  17. package/src/cartesian/Bar.tsx +1216 -0
  18. package/src/cartesian/BarStack.tsx +148 -0
  19. package/src/cartesian/Brush.tsx +653 -0
  20. package/src/cartesian/CartesianAxis.tsx +541 -0
  21. package/src/cartesian/CartesianGrid.tsx +605 -0
  22. package/src/cartesian/ErrorBar.tsx +319 -0
  23. package/src/cartesian/Funnel.tsx +594 -0
  24. package/src/cartesian/GraphicalItemClipPath.tsx +75 -0
  25. package/src/cartesian/Line.tsx +742 -0
  26. package/src/cartesian/LineDrawShape.tsx +190 -0
  27. package/src/cartesian/ReferenceArea.tsx +275 -0
  28. package/src/cartesian/ReferenceDot.tsx +286 -0
  29. package/src/cartesian/ReferenceLine.tsx +414 -0
  30. package/src/cartesian/RenderedTicksReporter.tsx +49 -0
  31. package/src/cartesian/Scatter.tsx +741 -0
  32. package/src/cartesian/XAxis.tsx +293 -0
  33. package/src/cartesian/YAxis.tsx +333 -0
  34. package/src/cartesian/ZAxis.tsx +80 -0
  35. package/src/cartesian/getCartesianPosition.ts +255 -0
  36. package/src/cartesian/getEquidistantTicks.ts +126 -0
  37. package/src/cartesian/getTicks.ts +225 -0
  38. package/src/cartesian/useAnimatedLineLength.ts +84 -0
  39. package/src/chart/AreaChart.tsx +30 -0
  40. package/src/chart/BarChart.tsx +27 -0
  41. package/src/chart/CartesianChart.tsx +91 -0
  42. package/src/chart/CategoricalChart.tsx +60 -0
  43. package/src/chart/ComposedChart.tsx +29 -0
  44. package/src/chart/FunnelChart.tsx +29 -0
  45. package/src/chart/LineChart.tsx +29 -0
  46. package/src/chart/PieChart.tsx +41 -0
  47. package/src/chart/PolarChart.tsx +97 -0
  48. package/src/chart/RadarChart.tsx +37 -0
  49. package/src/chart/RadialBarChart.tsx +39 -0
  50. package/src/chart/RechartsWrapper.tsx +486 -0
  51. package/src/chart/Sankey.tsx +992 -0
  52. package/src/chart/ScatterChart.tsx +29 -0
  53. package/src/chart/SunburstChart.tsx +394 -0
  54. package/src/chart/Treemap.tsx +874 -0
  55. package/src/chart/types.ts +37 -0
  56. package/src/component/ActivePoints.tsx +136 -0
  57. package/src/component/Cell.tsx +72 -0
  58. package/src/component/Cursor.tsx +249 -0
  59. package/src/component/Customized.tsx +8 -0
  60. package/src/component/DefaultLegendContent.tsx +205 -0
  61. package/src/component/DefaultTooltipContent.tsx +247 -0
  62. package/src/component/Dots.tsx +128 -0
  63. package/src/component/Label.tsx +507 -0
  64. package/src/component/LabelList.tsx +270 -0
  65. package/src/component/Legend.tsx +273 -0
  66. package/src/component/ResponsiveContainer.tsx +397 -0
  67. package/src/component/Text.tsx +436 -0
  68. package/src/component/Tooltip.tsx +309 -0
  69. package/src/component/TooltipBoundingBox.tsx +152 -0
  70. package/src/component/responsiveContainerUtils.ts +128 -0
  71. package/src/container/ClipPathProvider.tsx +40 -0
  72. package/src/container/Layer.tsx +38 -0
  73. package/src/container/RootSurface.tsx +124 -0
  74. package/src/container/Surface.tsx +70 -0
  75. package/src/context/ErrorBarContext.tsx +85 -0
  76. package/src/context/PanoramaContext.tsx +13 -0
  77. package/src/context/RegisterGraphicalItemId.tsx +41 -0
  78. package/src/context/accessibilityContext.tsx +10 -0
  79. package/src/context/brushUpdateContext.ts +14 -0
  80. package/src/context/chartDataContext.tsx +79 -0
  81. package/src/context/chartLayoutContext.tsx +158 -0
  82. package/src/context/legendPayloadContext.ts +11 -0
  83. package/src/context/legendPortalContext.ts +11 -0
  84. package/src/context/tooltipContext.ts +72 -0
  85. package/src/context/tooltipPortalContext.ts +14 -0
  86. package/src/context/useTooltipAxis.ts +24 -0
  87. package/src/hooks.ts +312 -0
  88. package/src/index.ts +288 -0
  89. package/src/polar/Pie.tsx +912 -0
  90. package/src/polar/PolarAngleAxis.tsx +494 -0
  91. package/src/polar/PolarGrid.tsx +269 -0
  92. package/src/polar/PolarRadiusAxis.tsx +422 -0
  93. package/src/polar/Radar.tsx +652 -0
  94. package/src/polar/RadialBar.tsx +767 -0
  95. package/src/polar/defaultPolarAngleAxisProps.tsx +33 -0
  96. package/src/polar/defaultPolarRadiusAxisProps.tsx +28 -0
  97. package/src/shape/Cross.tsx +83 -0
  98. package/src/shape/Curve.tsx +335 -0
  99. package/src/shape/Dot.tsx +49 -0
  100. package/src/shape/Polygon.tsx +168 -0
  101. package/src/shape/Rectangle.tsx +301 -0
  102. package/src/shape/Sector.tsx +304 -0
  103. package/src/shape/Symbols.tsx +144 -0
  104. package/src/shape/Trapezoid.tsx +228 -0
  105. package/src/state/RechartsReduxContext.tsx +8 -0
  106. package/src/state/RechartsStoreContext.ts +15 -0
  107. package/src/state/RechartsStoreProvider.tsx +27 -0
  108. package/src/state/ReportChartProps.tsx +19 -0
  109. package/src/state/ReportEventSettings.tsx +19 -0
  110. package/src/state/ReportMainChartProps.tsx +35 -0
  111. package/src/state/ReportPolarOptions.tsx +28 -0
  112. package/src/state/SetLegendPayload.ts +50 -0
  113. package/src/state/SetTooltipEntrySettings.tsx +46 -0
  114. package/src/state/brushSlice.ts +60 -0
  115. package/src/state/cartesianAxisSlice.ts +288 -0
  116. package/src/state/chartDataSlice.ts +115 -0
  117. package/src/state/errorBarSlice.ts +84 -0
  118. package/src/state/eventSettingsSlice.ts +41 -0
  119. package/src/state/externalEventsMiddleware.ts +136 -0
  120. package/src/state/graphicalItemsSlice.ts +162 -0
  121. package/src/state/hooks.ts +42 -0
  122. package/src/state/keyboardEventsMiddleware.ts +213 -0
  123. package/src/state/layoutSlice.ts +71 -0
  124. package/src/state/legendSlice.ts +107 -0
  125. package/src/state/mouseEventsMiddleware.ts +103 -0
  126. package/src/state/optionsSlice.ts +64 -0
  127. package/src/state/polarAxisSlice.ts +65 -0
  128. package/src/state/polarOptionsSlice.ts +54 -0
  129. package/src/state/reduxDevtoolsJsonStringifyReplacer.ts +15 -0
  130. package/src/state/referenceElementsSlice.ts +121 -0
  131. package/src/state/renderedTicksSlice.ts +61 -0
  132. package/src/state/rootPropsSlice.ts +70 -0
  133. package/src/state/selectors/areaSelectors.ts +169 -0
  134. package/src/state/selectors/arrayEqualityCheck.ts +8 -0
  135. package/src/state/selectors/axisSelectors.ts +2196 -0
  136. package/src/state/selectors/barSelectors.ts +319 -0
  137. package/src/state/selectors/barStackSelectors.ts +79 -0
  138. package/src/state/selectors/brushSelectors.ts +40 -0
  139. package/src/state/selectors/combiners/combineActiveLabel.ts +21 -0
  140. package/src/state/selectors/combiners/combineActiveTooltipIndex.ts +93 -0
  141. package/src/state/selectors/combiners/combineAllBarPositions.ts +131 -0
  142. package/src/state/selectors/combiners/combineAxisRangeWithReverse.ts +17 -0
  143. package/src/state/selectors/combiners/combineBarPosition.ts +24 -0
  144. package/src/state/selectors/combiners/combineBarSizeList.ts +75 -0
  145. package/src/state/selectors/combiners/combineCheckedDomain.ts +49 -0
  146. package/src/state/selectors/combiners/combineConfiguredScale.ts +121 -0
  147. package/src/state/selectors/combiners/combineCoordinateForDefaultIndex.ts +43 -0
  148. package/src/state/selectors/combiners/combineDisplayedStackedData.ts +50 -0
  149. package/src/state/selectors/combiners/combineInverseScaleFunction.ts +17 -0
  150. package/src/state/selectors/combiners/combineRealScaleType.ts +48 -0
  151. package/src/state/selectors/combiners/combineStackedData.ts +28 -0
  152. package/src/state/selectors/combiners/combineTooltipInteractionState.ts +86 -0
  153. package/src/state/selectors/combiners/combineTooltipPayload.ts +203 -0
  154. package/src/state/selectors/combiners/combineTooltipPayloadConfigurations.ts +45 -0
  155. package/src/state/selectors/containerSelectors.ts +12 -0
  156. package/src/state/selectors/dataSelectors.ts +90 -0
  157. package/src/state/selectors/funnelSelectors.ts +83 -0
  158. package/src/state/selectors/graphicalItemSelectors.ts +23 -0
  159. package/src/state/selectors/legendSelectors.ts +29 -0
  160. package/src/state/selectors/lineSelectors.ts +111 -0
  161. package/src/state/selectors/numberDomainEqualityCheck.ts +8 -0
  162. package/src/state/selectors/pickAxisId.ts +6 -0
  163. package/src/state/selectors/pickAxisType.ts +4 -0
  164. package/src/state/selectors/pieSelectors.ts +103 -0
  165. package/src/state/selectors/polarAxisSelectors.ts +202 -0
  166. package/src/state/selectors/polarGridSelectors.ts +24 -0
  167. package/src/state/selectors/polarScaleSelectors.ts +149 -0
  168. package/src/state/selectors/polarSelectors.ts +211 -0
  169. package/src/state/selectors/radarSelectors.ts +152 -0
  170. package/src/state/selectors/radialBarSelectors.ts +328 -0
  171. package/src/state/selectors/rootPropsSelectors.ts +36 -0
  172. package/src/state/selectors/scatterSelectors.ts +77 -0
  173. package/src/state/selectors/selectAllAxes.ts +10 -0
  174. package/src/state/selectors/selectChartOffset.ts +15 -0
  175. package/src/state/selectors/selectChartOffsetInternal.ts +111 -0
  176. package/src/state/selectors/selectPlotArea.ts +27 -0
  177. package/src/state/selectors/selectTooltipAxisId.ts +6 -0
  178. package/src/state/selectors/selectTooltipAxisType.ts +33 -0
  179. package/src/state/selectors/selectTooltipEventType.ts +45 -0
  180. package/src/state/selectors/selectTooltipPayloadSearcher.ts +7 -0
  181. package/src/state/selectors/selectTooltipSettings.ts +6 -0
  182. package/src/state/selectors/selectTooltipState.ts +5 -0
  183. package/src/state/selectors/tooltipSelectors.ts +690 -0
  184. package/src/state/selectors/touchSelectors.ts +29 -0
  185. package/src/state/store.ts +167 -0
  186. package/src/state/tooltipSlice.ts +289 -0
  187. package/src/state/types/AreaSettings.ts +17 -0
  188. package/src/state/types/BarSettings.ts +16 -0
  189. package/src/state/types/LineSettings.ts +12 -0
  190. package/src/state/types/PieSettings.ts +32 -0
  191. package/src/state/types/RadarSettings.ts +6 -0
  192. package/src/state/types/RadialBarSettings.ts +10 -0
  193. package/src/state/types/ScatterSettings.ts +13 -0
  194. package/src/state/types/StackedGraphicalItem.ts +33 -0
  195. package/src/state/unregisterOnCleanup.ts +26 -0
  196. package/src/state/zIndexSlice.ts +128 -0
  197. package/src/synchronisation/syncRegistry.ts +131 -0
  198. package/src/synchronisation/syncSelectors.ts +7 -0
  199. package/src/synchronisation/types.ts +42 -0
  200. package/src/synchronisation/useChartSynchronisation.tsx +372 -0
  201. package/src/types.ts +39 -0
  202. package/src/util/ActiveShapeUtils.tsx +80 -0
  203. package/src/util/BarUtils.tsx +74 -0
  204. package/src/util/CartesianUtils.ts +53 -0
  205. package/src/util/ChartUtils.ts +696 -0
  206. package/src/util/Constants.ts +42 -0
  207. package/src/util/CssPrefixUtils.ts +24 -0
  208. package/src/util/DOMUtils.ts +141 -0
  209. package/src/util/DataUtils.ts +205 -0
  210. package/src/util/FunnelUtils.tsx +37 -0
  211. package/src/util/Global.ts +15 -0
  212. package/src/util/IfOverflow.ts +17 -0
  213. package/src/util/LRUCache.ts +46 -0
  214. package/src/util/LogUtils.ts +26 -0
  215. package/src/util/PolarUtils.ts +134 -0
  216. package/src/util/RadialBarUtils.tsx +35 -0
  217. package/src/util/ReduceCSSCalc.ts +186 -0
  218. package/src/util/ShallowEqual.ts +43 -0
  219. package/src/util/TickUtils.ts +61 -0
  220. package/src/util/YAxisUtils.ts +49 -0
  221. package/src/util/adaptEventHandlers.ts +69 -0
  222. package/src/util/axisPropsAreEqual.ts +42 -0
  223. package/src/util/collectionUtils.ts +83 -0
  224. package/src/util/createCartesianCharts.tsx +101 -0
  225. package/src/util/createEventProxy.ts +24 -0
  226. package/src/util/createPolarCharts.tsx +86 -0
  227. package/src/util/cursor/getCursorPoints.ts +48 -0
  228. package/src/util/cursor/getCursorRectangle.ts +31 -0
  229. package/src/util/cursor/getRadialCursorPoints.ts +34 -0
  230. package/src/util/excludeEventProps.ts +172 -0
  231. package/src/util/getActiveCoordinate.ts +205 -0
  232. package/src/util/getAxisTypeBasedOnLayout.ts +21 -0
  233. package/src/util/getEveryNth.ts +30 -0
  234. package/src/util/getRadiusAndStrokeWidthFromDot.ts +35 -0
  235. package/src/util/getRelativeCoordinate.ts +84 -0
  236. package/src/util/getSliced.ts +21 -0
  237. package/src/util/isDomainSpecifiedByUser.ts +217 -0
  238. package/src/util/isWellBehavedNumber.ts +10 -0
  239. package/src/util/objectPath.ts +129 -0
  240. package/src/util/payload/getUniqPayload.ts +31 -0
  241. package/src/util/propsAreEqual.ts +137 -0
  242. package/src/util/resolveDefaultProps.tsx +8 -0
  243. package/src/util/round.ts +35 -0
  244. package/src/util/scale/CartesianScaleHelper.ts +72 -0
  245. package/src/util/scale/CustomScaleDefinition.ts +82 -0
  246. package/src/util/scale/RechartsScale.ts +131 -0
  247. package/src/util/scale/createCategoricalInverse.ts +83 -0
  248. package/src/util/scale/getNiceTickValues.ts +334 -0
  249. package/src/util/scale/index.ts +3 -0
  250. package/src/util/scale/util/DecimalLite.ts +194 -0
  251. package/src/util/scale/util/arithmetic.ts +56 -0
  252. package/src/util/stacks/getStackSeriesIdentifier.ts +20 -0
  253. package/src/util/stacks/stackTypes.ts +53 -0
  254. package/src/util/svgPropertiesAndEvents.ts +84 -0
  255. package/src/util/svgPropertiesNoEvents.ts +520 -0
  256. package/src/util/tooltip/translate.ts +179 -0
  257. package/src/util/typedDataKey.ts +8 -0
  258. package/src/util/types.ts +724 -0
  259. package/src/util/useAnimationId.tsx +31 -0
  260. package/src/util/useElementOffset.ts +164 -0
  261. package/src/util/useId.ts +20 -0
  262. package/src/util/usePrefersReducedMotion.ts +44 -0
  263. package/src/util/useUniqueId.ts +34 -0
  264. package/src/zIndex/DefaultZIndexes.tsx +87 -0
  265. package/src/zIndex/ZIndexLayer.tsx +126 -0
  266. package/src/zIndex/ZIndexPortal.tsx +69 -0
  267. package/src/zIndex/getZIndexFromUnknown.tsx +17 -0
  268. package/src/zIndex/zIndexSelectors.ts +46 -0
  269. package/test/_data.ts +408 -0
  270. package/test/animation/AnimationController.typed.spec.ts +53 -0
  271. package/test/animation/AnimationControllerImpl.spec.ts +271 -0
  272. package/test/animation/CSSTransitionAnimate.timing.spec.tsx +473 -0
  273. package/test/animation/JavascriptAnimate.spec.tsx +62 -0
  274. package/test/animation/RechartsAnimation.spec.ts +636 -0
  275. package/test/animation/easing.spec.ts +218 -0
  276. package/test/animation/legacyAnimationLengthChange.spec.tsx +803 -0
  277. package/test/animation/matchBy.spec.ts +467 -0
  278. package/test/animation/mockAnimationController.ts +40 -0
  279. package/test/animation/mockControllerAnimationManager.ts +143 -0
  280. package/test/animation/mockTimeoutController.ts +114 -0
  281. package/test/animation/timeoutController.spec.ts +138 -0
  282. package/test/animation/useAnimationStartSnapshot.spec.ts +147 -0
  283. package/test/animation/util.spec.ts +28 -0
  284. package/test/cartesian/Area.animation.spec.tsx +363 -0
  285. package/test/cartesian/Area.range.spec.tsx +54 -0
  286. package/test/cartesian/Area.spec.tsx +1202 -0
  287. package/test/cartesian/Area.stacked.render.spec.tsx +69 -0
  288. package/test/cartesian/Area.typed.spec.tsx +209 -0
  289. package/test/cartesian/Axis.integration.spec.tsx +158 -0
  290. package/test/cartesian/Bar/Bar.csstransition.spec.tsx +299 -0
  291. package/test/cartesian/Bar/Bar.spec.tsx +2314 -0
  292. package/test/cartesian/Bar/Bar.typed.spec.tsx +192 -0
  293. package/test/cartesian/Bar.animation.spec.tsx +426 -0
  294. package/test/cartesian/Bar.stackDomain.spec.tsx +66 -0
  295. package/test/cartesian/Bar.stacked.render.spec.tsx +53 -0
  296. package/test/cartesian/Bar.truncateByDomain.spec.tsx +237 -0
  297. package/test/cartesian/Bar.zeroDimensionFiltering.spec.tsx +336 -0
  298. package/test/cartesian/BarStack.spec.tsx +91 -0
  299. package/test/cartesian/Brush.keyboard.spec.tsx +88 -0
  300. package/test/cartesian/Brush.panorama.spec.tsx +41 -0
  301. package/test/cartesian/Brush.props.spec.tsx +63 -0
  302. package/test/cartesian/Brush.render.spec.tsx +117 -0
  303. package/test/cartesian/Brush.spec.tsx +522 -0
  304. package/test/cartesian/Brush.stacked.spec.tsx +221 -0
  305. package/test/cartesian/CartesianAxis.render.spec.tsx +50 -0
  306. package/test/cartesian/CartesianAxis.spec.tsx +396 -0
  307. package/test/cartesian/CartesianGrid.render.spec.tsx +39 -0
  308. package/test/cartesian/CartesianGrid.spec.tsx +2103 -0
  309. package/test/cartesian/ErrorBar.render.spec.tsx +69 -0
  310. package/test/cartesian/ErrorBar.spec.tsx +2414 -0
  311. package/test/cartesian/Funnel.animation.spec.tsx +241 -0
  312. package/test/cartesian/Funnel.spec.tsx +226 -0
  313. package/test/cartesian/Funnel.typed.spec.tsx +221 -0
  314. package/test/cartesian/GraphicalItemClipPath.scale-behavior.spec.tsx +627 -0
  315. package/test/cartesian/GraphicalItemClipPath.spec.tsx +427 -0
  316. package/test/cartesian/Line.animation.spec.tsx +643 -0
  317. package/test/cartesian/Line.sparseAnimationPath.spec.tsx +98 -0
  318. package/test/cartesian/Line.spec.tsx +471 -0
  319. package/test/cartesian/Line.typed.spec.tsx +152 -0
  320. package/test/cartesian/ReferenceArea.render.spec.tsx +63 -0
  321. package/test/cartesian/ReferenceArea.spec.tsx +663 -0
  322. package/test/cartesian/ReferenceArea.typed.spec.tsx +74 -0
  323. package/test/cartesian/ReferenceDot.render.spec.tsx +55 -0
  324. package/test/cartesian/ReferenceDot.spec.tsx +462 -0
  325. package/test/cartesian/ReferenceDot.typed.spec.tsx +76 -0
  326. package/test/cartesian/ReferenceLine/ReferenceLine.panorama.spec.tsx +184 -0
  327. package/test/cartesian/ReferenceLine/ReferenceLine.spec.tsx +744 -0
  328. package/test/cartesian/ReferenceLine/ReferenceLine.typed.spec.tsx +74 -0
  329. package/test/cartesian/ReferenceLine/getEndPoints.spec.ts +399 -0
  330. package/test/cartesian/ReferenceLine.render.spec.tsx +134 -0
  331. package/test/cartesian/Scatter.animation.spec.tsx +381 -0
  332. package/test/cartesian/Scatter.render.spec.tsx +61 -0
  333. package/test/cartesian/Scatter.spec.tsx +406 -0
  334. package/test/cartesian/Scatter.typed.spec.tsx +153 -0
  335. package/test/cartesian/XAxis/XAxis.barSize.spec.tsx +336 -0
  336. package/test/cartesian/XAxis/XAxis.brush.spec.tsx +266 -0
  337. package/test/cartesian/XAxis/XAxis.categorydomain.spec.tsx +872 -0
  338. package/test/cartesian/XAxis/XAxis.dataKey.spec.tsx +86 -0
  339. package/test/cartesian/XAxis/XAxis.datatypes.spec.tsx +127 -0
  340. package/test/cartesian/XAxis/XAxis.hide.spec.tsx +106 -0
  341. package/test/cartesian/XAxis/XAxis.multiaxis.spec.tsx +336 -0
  342. package/test/cartesian/XAxis/XAxis.numberdomain.spec.tsx +1466 -0
  343. package/test/cartesian/XAxis/XAxis.padding.spec.tsx +758 -0
  344. package/test/cartesian/XAxis/XAxis.padding_clip.spec.tsx +65 -0
  345. package/test/cartesian/XAxis/XAxis.state.spec.tsx +355 -0
  346. package/test/cartesian/XAxis/XAxis.tick.spec.tsx +493 -0
  347. package/test/cartesian/XAxis/XAxis.timescale.spec.tsx +233 -0
  348. package/test/cartesian/XAxis/XAxis.type.spec.tsx +107 -0
  349. package/test/cartesian/XAxis/XAxis.typed.spec.tsx +102 -0
  350. package/test/cartesian/XAxis/XAxis.vertical.spec.tsx +265 -0
  351. package/test/cartesian/XAxis.tickFormatter.spec.tsx +54 -0
  352. package/test/cartesian/YAxis/YAxis.7362.derivedDomain.spec.tsx +230 -0
  353. package/test/cartesian/YAxis/YAxis.7362.spec.tsx +104 -0
  354. package/test/cartesian/YAxis/YAxis.interval-zero.spec.tsx +88 -0
  355. package/test/cartesian/YAxis/YAxis.label.spec.tsx +219 -0
  356. package/test/cartesian/YAxis/YAxis.spec.tsx +1595 -0
  357. package/test/cartesian/YAxis/YAxis.tick.spec.tsx +428 -0
  358. package/test/cartesian/YAxis/YAxis.tickFormatter.spec.tsx +54 -0
  359. package/test/cartesian/YAxis/YAxis.ticks.spec.tsx +263 -0
  360. package/test/cartesian/YAxis/YAxis.type.spec.tsx +107 -0
  361. package/test/cartesian/YAxis/YAxis.typed.spec.tsx +102 -0
  362. package/test/cartesian/ZAxis.spec.tsx +300 -0
  363. package/test/cartesian/ZAxis.typed.spec.tsx +33 -0
  364. package/test/cartesian/__snapshots__/Brush.spec.tsx.snap +5 -0
  365. package/test/cartesian/axisLineAndStroke.spec.tsx +72 -0
  366. package/test/cartesian/getCartesianPosition.spec.ts +907 -0
  367. package/test/cartesian/getEquidistantTicks.spec.ts +88 -0
  368. package/test/cartesian/getTicks.spec.ts +378 -0
  369. package/test/cartesian/miscFeatureGaps.spec.tsx +89 -0
  370. package/test/cartesian/useAnimatedLineLength.spec.ts +168 -0
  371. package/test/chart/AccessibilityLayer.spec.tsx +569 -0
  372. package/test/chart/AccessibilityScans.spec.tsx +286 -0
  373. package/test/chart/AreaChart.spec.tsx +409 -0
  374. package/test/chart/AreaChart.stacked.spec.tsx +1407 -0
  375. package/test/chart/AreaChart.typed.spec.tsx +39 -0
  376. package/test/chart/BarChart.spec.tsx +3719 -0
  377. package/test/chart/BarChart.typed.spec.tsx +60 -0
  378. package/test/chart/CategoricalChart.spec.tsx +255 -0
  379. package/test/chart/ComposedChart.spec.tsx +199 -0
  380. package/test/chart/ComposedChart.typed.spec.tsx +39 -0
  381. package/test/chart/FunnelChart.spec.tsx +215 -0
  382. package/test/chart/FunnelChart.typed.spec.tsx +39 -0
  383. package/test/chart/LineChart.multiseries.spec.tsx +50 -0
  384. package/test/chart/LineChart.smoke.spec.tsx +50 -0
  385. package/test/chart/LineChart.spec.tsx +930 -0
  386. package/test/chart/LineChart.typed.spec.tsx +39 -0
  387. package/test/chart/NicheChartTooltip.spec.tsx +81 -0
  388. package/test/chart/PieChart.spec.tsx +793 -0
  389. package/test/chart/PieChart.typed.spec.tsx +39 -0
  390. package/test/chart/RadarChart.spec.tsx +530 -0
  391. package/test/chart/RadarChart.typed.spec.tsx +39 -0
  392. package/test/chart/RadialBarChart.5966.spec.tsx +48 -0
  393. package/test/chart/RadialBarChart.spec.tsx +679 -0
  394. package/test/chart/RadialBarChart.typed.spec.tsx +39 -0
  395. package/test/chart/RechartsWrapper.spec.tsx +83 -0
  396. package/test/chart/Sankey.content.spec.tsx +46 -0
  397. package/test/chart/Sankey.spec.tsx +952 -0
  398. package/test/chart/Sankey.typed.spec.tsx +29 -0
  399. package/test/chart/ScatterChart.spec.tsx +2613 -0
  400. package/test/chart/ScatterChart.typed.spec.tsx +39 -0
  401. package/test/chart/SunburstChart.spec.tsx +146 -0
  402. package/test/chart/Treemap.animation.spec.tsx +52 -0
  403. package/test/chart/Treemap.spec.tsx +1003 -0
  404. package/test/chart/Treemap.typed.spec.tsx +26 -0
  405. package/test/chart/chartEvents.spec.tsx +127 -0
  406. package/test/chart/responsive.spec.tsx +620 -0
  407. package/test/component/Cell.render.spec.tsx +155 -0
  408. package/test/component/Cell.spec.tsx +12 -0
  409. package/test/component/Cursor.spec.tsx +186 -0
  410. package/test/component/DefaultTooltipContent.spec.tsx +102 -0
  411. package/test/component/Label.render.spec.tsx +63 -0
  412. package/test/component/Label.spec.tsx +686 -0
  413. package/test/component/Label.typed.spec.tsx +46 -0
  414. package/test/component/LabelList.spec.tsx +188 -0
  415. package/test/component/Legend.itemSorter.spec.tsx +704 -0
  416. package/test/component/Legend.render.spec.tsx +92 -0
  417. package/test/component/Legend.spec.tsx +2213 -0
  418. package/test/component/Legend.typed.spec.tsx +22 -0
  419. package/test/component/ResponsiveContainer.spec.tsx +523 -0
  420. package/test/component/ResponsiveContainerDataTest.spec.tsx +51 -0
  421. package/test/component/Text.spec.tsx +415 -0
  422. package/test/component/Text.typed.spec.tsx +46 -0
  423. package/test/component/Tooltip/ActiveDot.spec.tsx +370 -0
  424. package/test/component/Tooltip/Tooltip.animation.spec.tsx +209 -0
  425. package/test/component/Tooltip/Tooltip.content.spec.tsx +128 -0
  426. package/test/component/Tooltip/Tooltip.formatter.spec.tsx +152 -0
  427. package/test/component/Tooltip/Tooltip.includeHidden.spec.tsx +79 -0
  428. package/test/component/Tooltip/Tooltip.multipleDataArrays.spec.tsx +165 -0
  429. package/test/component/Tooltip/Tooltip.offset.spec.tsx +113 -0
  430. package/test/component/Tooltip/Tooltip.state.spec.tsx +74 -0
  431. package/test/component/Tooltip/Tooltip.sync.spec.tsx +639 -0
  432. package/test/component/Tooltip/defaultIndex.spec.tsx +227 -0
  433. package/test/component/Tooltip/graphicalItem.formatter.spec.tsx +138 -0
  434. package/test/component/Tooltip/itemSorter.spec.tsx +2815 -0
  435. package/test/component/Tooltip/tooltipEventType.spec.tsx +344 -0
  436. package/test/component/Tooltip/tooltipMouseHoverSelectors.ts +41 -0
  437. package/test/component/Tooltip/tooltipTestHelpers.tsx +162 -0
  438. package/test/component/Tooltip.defaultIndex.spec.tsx +48 -0
  439. package/test/component/Tooltip.hover.spec.tsx +61 -0
  440. package/test/component/Tooltip.item.spec.tsx +54 -0
  441. package/test/component/Tooltip.keyboard.spec.tsx +51 -0
  442. package/test/component/Tooltip.payload.spec.tsx +1716 -0
  443. package/test/component/Tooltip.touch.spec.tsx +39 -0
  444. package/test/component/Tooltip.visibility.spec.tsx +1889 -0
  445. package/test/component/TooltipBoundingBox.spec.tsx +89 -0
  446. package/test/component/responsiveContainerUtils.spec.ts +205 -0
  447. package/test/container/ClipPath.spec.tsx +602 -0
  448. package/test/container/chartDimensions.spec.tsx +368 -0
  449. package/test/context/chartLayoutContext.spec.tsx +378 -0
  450. package/test/helper/ExpectAxisDomain.tsx +27 -0
  451. package/test/helper/assertNotNull.ts +6 -0
  452. package/test/helper/assertZIndexLayerOrder.ts +19 -0
  453. package/test/helper/createSelectorTestCase.tsx +176 -0
  454. package/test/helper/expectAnimatedPieAngles.ts +100 -0
  455. package/test/helper/expectAnimatedPiePaths.ts +78 -0
  456. package/test/helper/expectAreaCurve.ts +15 -0
  457. package/test/helper/expectAxisTicks.ts +48 -0
  458. package/test/helper/expectBars.ts +54 -0
  459. package/test/helper/expectFunctionReturning.ts +58 -0
  460. package/test/helper/expectLabel.ts +32 -0
  461. package/test/helper/expectLastCalledWith.ts +48 -0
  462. package/test/helper/expectLine.ts +20 -0
  463. package/test/helper/expectPieSectors.ts +80 -0
  464. package/test/helper/expectScale.ts +37 -0
  465. package/test/helper/expectScatterPoints.ts +52 -0
  466. package/test/helper/expectStackGroups.ts +144 -0
  467. package/test/helper/mockAxes.ts +22 -0
  468. package/test/helper/mockGetBoundingClientRect.ts +66 -0
  469. package/test/helper/mockHTMLElementProperty.ts +19 -0
  470. package/test/helper/mockTouchingElement.ts +27 -0
  471. package/test/helper/offsetHelpers.ts +19 -0
  472. package/test/helper/parameterizedTestCases.tsx +99 -0
  473. package/test/helper/produceState.ts +32 -0
  474. package/test/helper/render.ts +7 -0
  475. package/test/helper/selectorTestHelpers.tsx +63 -0
  476. package/test/helper/trim.spec.ts +35 -0
  477. package/test/helper/trim.ts +11 -0
  478. package/test/hooks/useActiveTooltipDataPoints.spec.tsx +358 -0
  479. package/test/hooks/useAxisDomain.spec.tsx +361 -0
  480. package/test/hooks/useAxisScale.spec.tsx +283 -0
  481. package/test/hooks/useAxisTicks.spec.tsx +130 -0
  482. package/test/hooks/useOffset.spec.tsx +248 -0
  483. package/test/hooks/useTooltipStateHooks.spec.tsx +109 -0
  484. package/test/polar/Pie/Pie-TwoLevelPieChart.spec.tsx +135 -0
  485. package/test/polar/Pie/Pie.spec.tsx +784 -0
  486. package/test/polar/Pie/Pie.typed.spec.tsx +78 -0
  487. package/test/polar/Pie.animation.spec.tsx +529 -0
  488. package/test/polar/PieWithLegend.animation.spec.tsx +142 -0
  489. package/test/polar/PolarAngleAxis/PolarAngleAxis.events.spec.tsx +76 -0
  490. package/test/polar/PolarAngleAxis/PolarAngleAxis.spec.tsx +2079 -0
  491. package/test/polar/PolarAngleAxis/PolarAngleAxis.typed.spec.tsx +102 -0
  492. package/test/polar/PolarAngleAxis.render.spec.tsx +79 -0
  493. package/test/polar/PolarGrid.render.spec.tsx +75 -0
  494. package/test/polar/PolarGrid.spec.tsx +918 -0
  495. package/test/polar/PolarLegendPerRow.render.spec.tsx +85 -0
  496. package/test/polar/PolarRadiusAxis.events.spec.tsx +65 -0
  497. package/test/polar/PolarRadiusAxis.render.spec.tsx +52 -0
  498. package/test/polar/PolarRadiusAxis.spec.tsx +991 -0
  499. package/test/polar/PolarRadiusAxis.typed.spec.tsx +84 -0
  500. package/test/polar/PolarTooltipLegend.render.spec.tsx +80 -0
  501. package/test/polar/Radar.animation.spec.tsx +570 -0
  502. package/test/polar/Radar.render.spec.tsx +71 -0
  503. package/test/polar/Radar.spec.tsx +265 -0
  504. package/test/polar/Radar.typed.spec.tsx +119 -0
  505. package/test/polar/RadialBar/RadialBar.spec.tsx +1521 -0
  506. package/test/polar/RadialBar/RadialBar.typed.spec.tsx +132 -0
  507. package/test/polar/RadialBar.animation.spec.tsx +375 -0
  508. package/test/polar/RadialBar.render.spec.tsx +66 -0
  509. package/test/polar/RadialBar.stacked.spec.tsx +57 -0
  510. package/test/setup.ts +84 -0
  511. package/test/shape/ActiveShape.spec.tsx +181 -0
  512. package/test/shape/Cross.spec.tsx +60 -0
  513. package/test/shape/Cross.typed.spec.tsx +26 -0
  514. package/test/shape/Curve.spec.tsx +368 -0
  515. package/test/shape/Curve.typed.spec.tsx +69 -0
  516. package/test/shape/Dot.spec.tsx +73 -0
  517. package/test/shape/Dot.typed.spec.tsx +30 -0
  518. package/test/shape/Polygon.spec.tsx +357 -0
  519. package/test/shape/Polygon.typed.spec.tsx +28 -0
  520. package/test/shape/Rectangle.animation.spec.tsx +451 -0
  521. package/test/shape/Rectangle.spec.tsx +68 -0
  522. package/test/shape/Rectangle.typed.spec.tsx +24 -0
  523. package/test/shape/Sector.spec.tsx +76 -0
  524. package/test/shape/Sector.typed.spec.tsx +24 -0
  525. package/test/shape/Symbols.spec.tsx +43 -0
  526. package/test/shape/Symbols.typed.spec.tsx +24 -0
  527. package/test/shape/Trapezoid.spec.tsx +50 -0
  528. package/test/shape/Trapezoid.typed.spec.tsx +24 -0
  529. package/test/shape/__snapshots__/Cross.spec.tsx.snap +62 -0
  530. package/test/shape/__snapshots__/Curve.spec.tsx.snap +460 -0
  531. package/test/shape/__snapshots__/Polygon.spec.tsx.snap +58 -0
  532. package/test/shape/__snapshots__/Rectangle.spec.tsx.snap +117 -0
  533. package/test/shape/__snapshots__/Sector.spec.tsx.snap +71 -0
  534. package/test/shape/__snapshots__/Trapezoid.spec.tsx.snap +64 -0
  535. package/test/state/chartDataSlice.spec.ts +53 -0
  536. package/test/state/externalEventsMiddleware.spec.ts +178 -0
  537. package/test/state/graphicalItemsSlice.spec.ts +92 -0
  538. package/test/state/hooks.spec.tsx +68 -0
  539. package/test/state/legendSlice.spec.ts +44 -0
  540. package/test/state/mouseEventsMiddleware.spec.ts +75 -0
  541. package/test/state/optionsSlice.spec.ts +19 -0
  542. package/test/state/reduxDevtoolsJsonStringifyReplacer.spec.ts +25 -0
  543. package/test/state/referenceElementsSlice.spec.ts +84 -0
  544. package/test/state/selectors/areaSelectors.spec.tsx +77 -0
  545. package/test/state/selectors/axisSelectors.spec.tsx +1418 -0
  546. package/test/state/selectors/barStackSelectors.spec.tsx +752 -0
  547. package/test/state/selectors/brushSelectors.spec.tsx +30 -0
  548. package/test/state/selectors/cartesianAxisSlice.spec.ts +96 -0
  549. package/test/state/selectors/combineNiceTicks.spec.ts +207 -0
  550. package/test/state/selectors/combiners/combineActiveTooltipIndex.spec.ts +61 -0
  551. package/test/state/selectors/combiners/combineAllBarPositions.spec.ts +39 -0
  552. package/test/state/selectors/combiners/combineConfiguredScale.spec.ts +56 -0
  553. package/test/state/selectors/combiners/combineDisplayedStackedData.spec.ts +123 -0
  554. package/test/state/selectors/combiners/combineRealScaleType.spec.ts +80 -0
  555. package/test/state/selectors/containerSelectors.spec.tsx +168 -0
  556. package/test/state/selectors/dataSelectors.spec.tsx +136 -0
  557. package/test/state/selectors/legendSelectors.spec.tsx +113 -0
  558. package/test/state/selectors/lineSelectors.spec.tsx +60 -0
  559. package/test/state/selectors/pieSelectors.spec.tsx +72 -0
  560. package/test/state/selectors/radarSelectors.spec.tsx +496 -0
  561. package/test/state/selectors/rootPropsSelectors.spec.tsx +169 -0
  562. package/test/state/selectors/scatterSelectors.spec.tsx +47 -0
  563. package/test/state/selectors/selectActiveTooltipIndex.spec.tsx +234 -0
  564. package/test/state/selectors/selectAllAxes.spec.tsx +18 -0
  565. package/test/state/selectors/selectAxisDomain.spec.tsx +21 -0
  566. package/test/state/selectors/selectAxisDomainIncludingNiceTicks.spec.tsx +19 -0
  567. package/test/state/selectors/selectAxisRangeWithReverse.spec.tsx +22 -0
  568. package/test/state/selectors/selectAxisScale.spec.tsx +91 -0
  569. package/test/state/selectors/selectBarRectangles.stackOffset.spec.tsx +503 -0
  570. package/test/state/selectors/selectBaseAxis.spec.tsx +56 -0
  571. package/test/state/selectors/selectCartesianItemsSettings.spec.tsx +57 -0
  572. package/test/state/selectors/selectChartOffset.spec.tsx +26 -0
  573. package/test/state/selectors/selectDisplayedData.spec.tsx +282 -0
  574. package/test/state/selectors/selectIsTooltipActive.spec.tsx +231 -0
  575. package/test/state/selectors/selectNumericalDomain.spec.tsx +21 -0
  576. package/test/state/selectors/selectRealScaleType.spec.tsx +19 -0
  577. package/test/state/selectors/selectStackGroups.spec.tsx +322 -0
  578. package/test/state/selectors/selectXAxisPosition.spec.tsx +22 -0
  579. package/test/state/selectors/selectYAxisPosition.spec.tsx +22 -0
  580. package/test/state/selectors/selectors.spec.tsx +1613 -0
  581. package/test/state/throttling.spec.ts +200 -0
  582. package/test/state/zIndexSlice.spec.ts +85 -0
  583. package/test/synchronisation/useChartSynchronisation.spec.tsx +225 -0
  584. package/test/util/BarUtils.spec.ts +39 -0
  585. package/test/util/CartesianUtils/CartesianUtils.spec.ts +261 -0
  586. package/test/util/CartesianUtils/rectWithPoints.spec.ts +48 -0
  587. package/test/util/ChartUtils/ChartUtils.spec.ts +491 -0
  588. package/test/util/ChartUtils/appendOffsetOfLegend.spec.ts +136 -0
  589. package/test/util/ChartUtils/appendOffsetOfLegend.spec.tsx +133 -0
  590. package/test/util/ChartUtils/getCateCoordinateOfLine.spec.ts +83 -0
  591. package/test/util/ChartUtils/getStackedData.spec.ts +416 -0
  592. package/test/util/ChartUtils/truncateByDomain.spec.ts +70 -0
  593. package/test/util/DataUtils.spec.ts +385 -0
  594. package/test/util/DomUtils.spec.tsx +117 -0
  595. package/test/util/FunnelUtils.spec.tsx +70 -0
  596. package/test/util/Global.spec.ts +11 -0
  597. package/test/util/LRUCache.spec.ts +81 -0
  598. package/test/util/LogUtils.spec.ts +45 -0
  599. package/test/util/PolarUtils.spec.ts +66 -0
  600. package/test/util/ReduceCssCalcPrototype.spec.ts +141 -0
  601. package/test/util/ShallowEqual.spec.ts +102 -0
  602. package/test/util/TickUtils.spec.ts +29 -0
  603. package/test/util/axisPropsAreEqual.spec.ts +93 -0
  604. package/test/util/createChartHelpers.spec.tsx +210 -0
  605. package/test/util/cursor/getCursorPoints.spec.ts +136 -0
  606. package/test/util/cursor/getCursorRectangle.spec.ts +50 -0
  607. package/test/util/cursor/getRadialCursorPoints.spec.ts +36 -0
  608. package/test/util/errorValue.spec.ts +69 -0
  609. package/test/util/getEveryNth.spec.ts +39 -0
  610. package/test/util/getRadiusAndStrokeWidthFromDot.spec.ts +51 -0
  611. package/test/util/getRelativeCoordinate.spec.ts +250 -0
  612. package/test/util/getSliced.spec.ts +45 -0
  613. package/test/util/isDomainSpecifiedByUser.spec.ts +207 -0
  614. package/test/util/isWellBehavedNumber.spec.ts +54 -0
  615. package/test/util/payload/getUniqPayload.spec.ts +56 -0
  616. package/test/util/propsAreEqual.spec.ts +75 -0
  617. package/test/util/round.spec.ts +112 -0
  618. package/test/util/scale/arithmetic.spec.ts +61 -0
  619. package/test/util/scale/createCategoricalInverse.spec.ts +84 -0
  620. package/test/util/scale/getNiceTickValues.spec.ts +421 -0
  621. package/test/util/scale/getTickValuesFixedDomain.spec.ts +155 -0
  622. package/test/util/svgPropertiesAndEvents.spec.tsx +206 -0
  623. package/test/util/svgPropertiesNoEvents.spec.tsx +228 -0
  624. package/test/util/tooltip/translate.spec.ts +396 -0
  625. package/test/util/useAnimationId.spec.tsx +59 -0
  626. package/test/util/useElementOffset.spec.tsx +173 -0
  627. package/test/util/usePrefersReducedMotion.spec.ts +54 -0
  628. package/test/util/useUniqueId.spec.ts +99 -0
  629. package/test/utils/diagnostics-allowlist.ts +18 -0
  630. package/test/utils/diagnostics.ts +58 -0
  631. package/test/zIndex/AllZIndexPortals.spec.tsx +83 -0
  632. package/test/zIndex/DefaultZIndexes.spec.ts +80 -0
  633. package/test/zIndex/DynamicZIndex.spec.tsx +102 -0
  634. package/test/zIndex/ZIndexLayer.portalOwner.spec.tsx +125 -0
  635. package/test/zIndex/componentZIndex.spec.tsx +255 -0
  636. package/test/zIndex/getZIndexFromUnknown.spec.ts +51 -0
  637. package/test/zIndex/multiChartZIndexIsolation.spec.tsx +90 -0
  638. package/test/zIndex/zIndexSelectors.spec.ts +172 -0
  639. package/tsconfig.json +11 -0
@@ -0,0 +1,31 @@
1
+ // Ported from recharts 3.8.1 src/util/useAnimationId.tsx (commit 7a23854).
2
+ //
3
+ // REACTIVE REDESIGN (see the porting-react-hooks-to-solid memory): recharts
4
+ // detects an input change across re-renders via refs (`prevProps !== input`).
5
+ // Solid components run once — there is no re-render to compare against — so the
6
+ // faithful Solid form takes `input` as an `Accessor` and returns an
7
+ // `Accessor<string>` backed by `createMemo`. The memo recomputes (yielding a
8
+ // fresh id) exactly when `input` changes by reference, and returns the cached id
9
+ // otherwise. Same behavior as recharts, expressed through Solid reactivity.
10
+ import { createMemo, type Accessor } from "solid-js";
11
+ import { uniqueId } from "./DataUtils";
12
+
13
+ /**
14
+ * Returns a reactive unique animation id for the `input` accessor.
15
+ * The id changes (new value) whenever `input` changes by reference equality,
16
+ * and stays the same while `input` is unchanged.
17
+ *
18
+ * @param input Accessor for the object to watch (reference equality, `===`).
19
+ * @param prefix Optional prefix for the animation id.
20
+ * @returns An accessor for the current animation id.
21
+ */
22
+ export function useAnimationId(
23
+ input: Accessor<unknown>,
24
+ prefix: string = "animation-",
25
+ ): Accessor<string> {
26
+ return createMemo(() => {
27
+ // Track `input`; a new reference re-runs this compute → fresh id.
28
+ input();
29
+ return uniqueId(prefix);
30
+ });
31
+ }
@@ -0,0 +1,164 @@
1
+ // Ported from recharts 3.8.1 src/util/useElementOffset.ts (commit 7a23854).
2
+ //
3
+ // Solid 2.0 port of a React hook. Deviations from the reference:
4
+ // - `useState<ElementOffset>` → `createSignal<ElementOffset>`; the hook returns
5
+ // `[Accessor<ElementOffset>, setter]` instead of `[value, setter]`, because the
6
+ // value changes over time (ResizeObserver) and Solid needs a reactive read.
7
+ // - `useRef(observer)` → a plain closure variable; the hook body runs once, so the
8
+ // closure persists for the lifetime of the owner (no ref cell needed).
9
+ // - `lastBoundingBoxRef` mirror is KEPT (as a plain closure variable): the ref
10
+ // and ResizeObserver callbacks are side-effect boundaries, not reactive scopes,
11
+ // so reading the signal there to diff against would fire STRICT_READ_UNTRACKED.
12
+ // The mirror lets them compare without a reactive read; it's updated in lockstep
13
+ // with the signal.
14
+ // - `useCallback` → a plain function (stable identity for the owner's lifetime).
15
+ // - `useEffect(() => () => disconnect(), [])` → `onCleanup(disconnect)`.
16
+ // - `extraDependencies` is kept in the signature for call-site parity but has no
17
+ // effect here: there is no re-render to re-trigger. If reactive re-measurement
18
+ // on dependency change is ever needed, callers pass accessors and we add a
19
+ // `createEffect` — deferred until a consumer requires it.
20
+ import { createSignal, onCleanup, type Accessor } from "solid-js";
21
+
22
+ const EPS = 1;
23
+
24
+ /**
25
+ * Stores the dimensions and position of a DOM element as returned by `getBoundingClientRect()`.
26
+ *
27
+ * Values are viewport-relative and may be fractional (subpixel precision).
28
+ *
29
+ * @see {@link https://developer.mozilla.org/en-US/docs/Web/API/Element/getBoundingClientRect}
30
+ */
31
+ export type ElementOffset = {
32
+ /**
33
+ * Height of an element as returned by `getBoundingClientRect()`.
34
+ * This is the CSS height including padding and border, and may be a fractional value.
35
+ *
36
+ * @see {@link https://developer.mozilla.org/en-US/docs/Web/API/DOMRect/height}
37
+ */
38
+ height: number;
39
+ /**
40
+ * Distance from the left edge of the viewport to the left edge of the element,
41
+ * as returned by `getBoundingClientRect()`.
42
+ *
43
+ * @see {@link https://developer.mozilla.org/en-US/docs/Web/API/DOMRect/left}
44
+ */
45
+ left: number;
46
+ /**
47
+ * Distance from the top edge of the viewport to the top edge of the element,
48
+ * as returned by `getBoundingClientRect()`.
49
+ *
50
+ * @see {@link https://developer.mozilla.org/en-US/docs/Web/API/DOMRect/top}
51
+ */
52
+ top: number;
53
+ /**
54
+ * Width of an element as returned by `getBoundingClientRect()`.
55
+ * This is the CSS width including padding and border, and may be a fractional value.
56
+ *
57
+ * @see {@link https://developer.mozilla.org/en-US/docs/Web/API/DOMRect/width}
58
+ */
59
+ width: number;
60
+ };
61
+
62
+ /**
63
+ * Callback ref setter returned by {@link useElementOffset}.
64
+ *
65
+ * Pass this to a DOM element's `ref` prop to start observing its layout.
66
+ *
67
+ * @param node - the DOM element to observe, or `null` when the element unmounts
68
+ */
69
+ export type SetElementOffset = (node: HTMLElement | null) => void;
70
+
71
+ /**
72
+ * Checks whether two ElementOffset values differ by more than `EPS` (1px) in any dimension.
73
+ *
74
+ * @param a - the first ElementOffset to compare
75
+ * @param b - the second ElementOffset to compare
76
+ * @returns true if any dimension differs by more than 1px
77
+ */
78
+ function hasSignificantChange(a: ElementOffset, b: ElementOffset): boolean {
79
+ return (
80
+ Math.abs(a.height - b.height) > EPS ||
81
+ Math.abs(a.left - b.left) > EPS ||
82
+ Math.abs(a.top - b.top) > EPS ||
83
+ Math.abs(a.width - b.width) > EPS
84
+ );
85
+ }
86
+
87
+ /**
88
+ * Reads the current bounding box of a DOM element using `getBoundingClientRect()`.
89
+ *
90
+ * @param node - the DOM element to measure
91
+ * @returns an ElementOffset with the element's current dimensions and viewport-relative position
92
+ */
93
+ function readElementOffset(node: HTMLElement): ElementOffset {
94
+ const rect = node.getBoundingClientRect();
95
+ return {
96
+ height: rect.height,
97
+ left: rect.left,
98
+ top: rect.top,
99
+ width: rect.width,
100
+ };
101
+ }
102
+
103
+ /**
104
+ * Use this to listen to element layout changes.
105
+ *
106
+ * Very useful for reading actual sizes of DOM elements relative to the viewport.
107
+ *
108
+ * Uses ResizeObserver to automatically detect size changes of the observed element.
109
+ *
110
+ * @param extraDependencies see the module note — kept for call-site parity, no effect in the Solid port.
111
+ * @returns [lastElementOffset, updateElementOffset] reactive accessor for the most recent value, and
112
+ * the ref setter. Pass the setter to a DOM element ref like this: `<div ref={updateElementOffset}>`
113
+ */
114
+ export function useElementOffset(
115
+ extraDependencies: ReadonlyArray<unknown> = [],
116
+ ): [Accessor<ElementOffset>, SetElementOffset] {
117
+ void extraDependencies; // parity with the recharts signature; no effect in the Solid port (see module note)
118
+
119
+ const initialOffset: ElementOffset = { height: 0, left: 0, top: 0, width: 0 };
120
+ const [lastBoundingBox, setLastBoundingBox] = createSignal<ElementOffset>(initialOffset);
121
+
122
+ // Plain mirror of the signal's current value: the ref/ResizeObserver callbacks
123
+ // below diff against THIS (a non-reactive read) instead of reading the signal,
124
+ // which in those side-effect scopes would fire STRICT_READ_UNTRACKED.
125
+ let current: ElementOffset = initialOffset;
126
+ const commit = (box: ElementOffset): void => {
127
+ if (hasSignificantChange(box, current)) {
128
+ current = box;
129
+ setLastBoundingBox(box);
130
+ }
131
+ };
132
+
133
+ // Replaces React's `observerRef` — the hook body runs once, so a closure holds the observer.
134
+ let observer: ResizeObserver | null = null;
135
+
136
+ const updateBoundingBox: SetElementOffset = (node) => {
137
+ // Disconnect any previously active ResizeObserver
138
+ if (observer != null) {
139
+ observer.disconnect();
140
+ observer = null;
141
+ }
142
+
143
+ if (node != null) {
144
+ // Measure immediately on ref attach
145
+ commit(readElementOffset(node));
146
+
147
+ // Set up ResizeObserver for future size changes
148
+ if (typeof ResizeObserver !== "undefined") {
149
+ const newObserver = new ResizeObserver(() => {
150
+ commit(readElementOffset(node));
151
+ });
152
+ newObserver.observe(node);
153
+ observer = newObserver;
154
+ }
155
+ }
156
+ };
157
+
158
+ // Cleanup on unmount
159
+ onCleanup(() => {
160
+ observer?.disconnect();
161
+ });
162
+
163
+ return [lastBoundingBox, updateBoundingBox];
164
+ }
@@ -0,0 +1,20 @@
1
+ // Ported from recharts 3.8.1 src/util/useId.ts (commit 7a23854).
2
+ //
3
+ // recharts picks `React.useId` (React 18+) with a counter fallback for older
4
+ // React. Solid has no React.useId; we mimic React 18's `:rN:` shape so prefixed
5
+ // ids (`recharts-bar-:r0:`) satisfy the recharts test regex `^prefix-[:a-z0-9]+$`.
6
+ // `useIdFallback` keeps the counter form (via `uniqueId`) for the legacy path.
7
+ import { uniqueId } from "./DataUtils";
8
+
9
+ /**
10
+ * Counter-based unique id. Generated once per call; stable for the caller's lifetime.
11
+ */
12
+ export const useIdFallback = (): string => uniqueId("uid-");
13
+
14
+ let reactStyleIdCounter = 0;
15
+
16
+ /**
17
+ * SSR-safe unique id in React 18 `useId` shape (`:r0:`, `:r1:`, …).
18
+ * Stable for the caller's lifetime (Solid components run once).
19
+ */
20
+ export const useId = (): string => `:r${reactStyleIdCounter++}:`;
@@ -0,0 +1,44 @@
1
+ // Ported from recharts 3.8.1 src/util/usePrefersReducedMotion.ts (commit 7a23854).
2
+ //
3
+ // Solid 2.0 port of a React hook. Deviations:
4
+ // - `useState(() => initial)` → `createSignal(initial)`; the hook returns an
5
+ // `Accessor<boolean>` (not a bare boolean) because the value changes
6
+ // reactively as the media query toggles.
7
+ // - `useEffect(() => { addEventListener; return () => removeEventListener }, [])`
8
+ // → the listener is registered once in the (run-once) hook body with
9
+ // `onCleanup` for teardown.
10
+ import { createSignal, onCleanup, type Accessor } from "solid-js";
11
+
12
+ import { Global } from "./Global";
13
+
14
+ /**
15
+ * Detects and subscribes to the user's `prefers-reduced-motion` system preference.
16
+ * Returns `true` when the user prefers reduced motion, `false` otherwise.
17
+ * SSR-safe: always returns `false` during server-side rendering.
18
+ */
19
+ export function usePrefersReducedMotion(): Accessor<boolean> {
20
+ const getInitial = (): boolean => {
21
+ if (Global.isSsr) {
22
+ return false;
23
+ }
24
+ if (!window.matchMedia) {
25
+ return false;
26
+ }
27
+ return window.matchMedia("(prefers-reduced-motion: reduce)").matches;
28
+ };
29
+
30
+ const [prefersReducedMotion, setPrefersReducedMotion] = createSignal<boolean>(getInitial());
31
+
32
+ if (window.matchMedia) {
33
+ const mediaQuery = window.matchMedia("(prefers-reduced-motion: reduce)");
34
+ const handleChange = (): void => {
35
+ setPrefersReducedMotion(mediaQuery.matches);
36
+ };
37
+ mediaQuery.addEventListener("change", handleChange);
38
+ onCleanup(() => {
39
+ mediaQuery.removeEventListener("change", handleChange);
40
+ });
41
+ }
42
+
43
+ return prefersReducedMotion;
44
+ }
@@ -0,0 +1,34 @@
1
+ // Ported from recharts 3.8.1 src/util/useUniqueId.ts (commit 7a23854).
2
+ // Returns a stable string (computed once); no Solid-specific reactivity needed.
3
+ import { useId } from "./useId";
4
+
5
+ /**
6
+ * A hook that generates a unique ID, SSR-safe via `useId`. The ID stays the same
7
+ * for the caller's lifetime; you can optionally provide a prefix or a custom ID.
8
+ *
9
+ * @param [prefix] - An optional prefix for the generated ID.
10
+ * @param [customId] - An optional custom ID to override the generated one.
11
+ * @returns The unique ID.
12
+ */
13
+ export function useUniqueId(prefix?: string, customId?: string): string {
14
+ // Always call the hook (do not call conditionally).
15
+ const generatedId = useId();
16
+
17
+ // If a custom ID is provided, it always takes precedence.
18
+ if (customId) {
19
+ return customId;
20
+ }
21
+
22
+ // Apply the prefix if one was provided.
23
+ return prefix ? `${prefix}-${generatedId}` : generatedId;
24
+ }
25
+
26
+ /**
27
+ * The useUniqueId hook returns a unique ID that is either reused from external props or generated internally.
28
+ * Either way the ID is now guaranteed to be present so no more nulls or undefined.
29
+ */
30
+ export type WithIdRequired<T> = T & {
31
+ id: string;
32
+ };
33
+
34
+ export type WithoutId<T> = Omit<T, "id">;
@@ -0,0 +1,87 @@
1
+ // Ported from recharts 3.8.1 src/zIndex/DefaultZIndexes.tsx (commit 7a23854).
2
+ // Pure data (no JSX despite the .tsx extension, kept for path parity) — the
3
+ // implementation is byte-identical to the reference.
4
+
5
+ /**
6
+ * A collection of all default zIndex values used by Recharts.
7
+ *
8
+ * You can reuse these, or you can define your own.
9
+ */
10
+ export const DefaultZIndexes = {
11
+ /**
12
+ * CartesianGrid and PolarGrid
13
+ */
14
+ grid: -100,
15
+ /**
16
+ * Background of Bar and RadialBar.
17
+ * This is not visible by default but can be enabled by setting background={true} on Bar or RadialBar.
18
+ */
19
+ barBackground: -50,
20
+
21
+ /*
22
+ * other chart elements or custom elements without specific zIndex
23
+ * render in here, at zIndex 0
24
+ */
25
+
26
+ /**
27
+ * Area, Pie, Radar, and ReferenceArea
28
+ */
29
+ area: 100,
30
+
31
+ /**
32
+ * Cursor is embedded inside Tooltip and controlled by it.
33
+ * The Tooltip itself has a separate portal and is not included in the zIndex system;
34
+ * Cursor is the decoration inside the chart area. CursorRectangle is a rectangle box.
35
+ * It renders below bar so that in a stacked bar chart the cursor rectangle does not hide the other bars.
36
+ */
37
+ cursorRectangle: 200,
38
+
39
+ /**
40
+ * Bar and RadialBar
41
+ */
42
+ bar: 300,
43
+
44
+ /**
45
+ * Line and ReferenceLine, and ErrorBor
46
+ */
47
+ line: 400,
48
+
49
+ /**
50
+ * XAxis and YAxis and PolarAngleAxis and PolarRadiusAxis ticks and lines and children
51
+ */
52
+ axis: 500,
53
+
54
+ /**
55
+ * Scatter and ReferenceDot,
56
+ * and Dots of Line and Area and Radar if they have dot=true
57
+ */
58
+ scatter: 600,
59
+
60
+ /**
61
+ * Hovering over a Bar or RadialBar renders a highlight rectangle
62
+ */
63
+ activeBar: 1000,
64
+
65
+ /**
66
+ * Cursor is embedded inside Tooltip and controlled by it.
67
+ * The Tooltip itself has a separate portal and is not included in the zIndex system;
68
+ * Cursor is the decoration inside the chart area, usually a cross or a box.
69
+ * CursorLine is a line cursor rendered in Line, Area, Scatter, Radar charts.
70
+ * It renders above the Line and Scatter so that it is always visible.
71
+ * It renders below active dot so that the dot is always visible and shows the current point.
72
+ * We're also assuming that the active dot is small enough that it does not fully cover the cursor line.
73
+ *
74
+ * This also applies to the radial cursor in RadialBarChart.
75
+ */
76
+ cursorLine: 1100,
77
+
78
+ /**
79
+ * Hovering over a Point in Line, Area, Scatter, Radar renders a highlight dot
80
+ */
81
+ activeDot: 1200,
82
+
83
+ /**
84
+ * LabelList and Label, including Axis labels
85
+ */
86
+ label: 2000,
87
+ } as const satisfies Record<string, number>;
@@ -0,0 +1,126 @@
1
+ // Ported from recharts 3.8.1 src/zIndex/ZIndexLayer.tsx (commit 7a23854).
2
+ // Solid deviations: `useLayoutEffect` → two-arg `createEffect`; `createPortal` →
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";
15
+ import { useAppSelector, useAppStore } from "../state/hooks";
16
+ import { unregisterCleanup } from "../state/unregisterOnCleanup";
17
+ import { selectZIndexPortalElement } from "./zIndexSelectors";
18
+ import { useIsInChartContext } from "../context/chartLayoutContext";
19
+ import { useIsPanorama } from "../context/PanoramaContext";
20
+
21
+ export interface ZIndexable {
22
+ /**
23
+ * Z-Index of this component and its children. The higher the value,
24
+ * the more on top it will be rendered.
25
+ */
26
+ zIndex?: number;
27
+ }
28
+
29
+ export function ZIndexLayer(props: {
30
+ zIndex: number | undefined;
31
+ children?: JSX.Element;
32
+ }): JSX.Element {
33
+ const isInChartContext = useIsInChartContext();
34
+ const isPanorama = useIsPanorama();
35
+ const store = useAppStore();
36
+ const zIndexActions = store?.actions.zIndex;
37
+
38
+ let lastPortalElement: Element | undefined;
39
+ const registeredZIndexes = new Set<number>();
40
+
41
+ const shouldRenderInPortal = createMemo(() => {
42
+ const zIndex = props.zIndex;
43
+ return isInChartContext() && zIndex !== undefined && zIndex !== 0;
44
+ });
45
+
46
+ const portalElement = useAppSelector((state) =>
47
+ selectZIndexPortalElement(state, props.zIndex, isPanorama),
48
+ );
49
+
50
+ 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
+ }
66
+
67
+ if (!registeredZIndexes.has(zIndex)) {
68
+ actions.registerZIndexPortal({ zIndex });
69
+ registeredZIndexes.add(zIndex);
70
+ }
71
+
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
+ },
82
+ );
83
+
84
+ onSettled(() => {
85
+ return unregisterCleanup(() => {
86
+ const actions = zIndexActions;
87
+ registeredZIndexes.forEach((z) => {
88
+ actions?.unregisterZIndexPortal({ zIndex: z });
89
+ });
90
+ registeredZIndexes.clear();
91
+ });
92
+ });
93
+
94
+ const targetElement = createMemo(() => portalElement() ?? lastPortalElement);
95
+
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
+ return (
110
+ <Show when={shouldRenderInPortal()} fallback={props.children}>
111
+ <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
+ }}
123
+ </Show>
124
+ </Show>
125
+ );
126
+ }
@@ -0,0 +1,69 @@
1
+ // Ported from recharts 3.8.1 src/zIndex/ZIndexPortal.tsx (commit 7a23854).
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";
5
+ import { useAppSelector, useAppStore } from "../state/hooks";
6
+ import { unregisterCleanup } from "../state/unregisterOnCleanup";
7
+ import { selectAllRegisteredZIndexes } from "./zIndexSelectors";
8
+
9
+ function ZIndexSvgPortal(props: { zIndex: number; isPanorama: boolean }): JSX.Element {
10
+ const store = useAppStore();
11
+ const zIndexActions = store?.actions.zIndex;
12
+ const [gRef, setGRef] = createSignal<SVGGElement | undefined>();
13
+
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
+ },
30
+ );
31
+
32
+ onSettled(() => {
33
+ const zIndex = props.zIndex;
34
+ const isPanorama = props.isPanorama;
35
+ return unregisterCleanup(() => {
36
+ zIndexActions?.unregisterZIndexPortalElement({
37
+ zIndex,
38
+ isPanorama,
39
+ });
40
+ });
41
+ });
42
+
43
+ return <g tabindex={-1} class={`recharts-zIndex-layer_${props.zIndex}`} ref={setGRef} />;
44
+ }
45
+
46
+ export const AllZIndexPortals = (props: {
47
+ children?: JSX.Element;
48
+ isPanorama: boolean;
49
+ }): JSX.Element => {
50
+ const allRegisteredZIndexes = useAppSelector(selectAllRegisteredZIndexes);
51
+ const negativeZIndexes = createMemo(() =>
52
+ (allRegisteredZIndexes() ?? []).filter((zIndex) => zIndex < 0),
53
+ );
54
+ const positiveZIndexes = createMemo(() =>
55
+ (allRegisteredZIndexes() ?? []).filter((zIndex) => zIndex > 0),
56
+ );
57
+
58
+ return (
59
+ <>
60
+ <For each={negativeZIndexes()}>
61
+ {(zIndex) => <ZIndexSvgPortal zIndex={zIndex} isPanorama={props.isPanorama} />}
62
+ </For>
63
+ {props.children}
64
+ <For each={positiveZIndexes()}>
65
+ {(zIndex) => <ZIndexSvgPortal zIndex={zIndex} isPanorama={props.isPanorama} />}
66
+ </For>
67
+ </>
68
+ );
69
+ };
@@ -0,0 +1,17 @@
1
+ // Ported from recharts 3.8.1 src/zIndex/getZIndexFromUnknown.tsx.
2
+ // Pure utility — no framework surface — behavior is byte-identical to recharts.
3
+
4
+ import { isWellBehavedNumber } from "../util/isWellBehavedNumber";
5
+
6
+ export function getZIndexFromUnknown(input: unknown, defaultZIndex: number): number {
7
+ if (
8
+ input &&
9
+ typeof input === "object" &&
10
+ "zIndex" in input &&
11
+ typeof input.zIndex === "number" &&
12
+ isWellBehavedNumber(input.zIndex)
13
+ ) {
14
+ return input.zIndex;
15
+ }
16
+ return defaultZIndex;
17
+ }
@@ -0,0 +1,46 @@
1
+ // Ported from recharts 3.8.1 src/zIndex/zIndexSelectors.ts (commit 7a23854).
2
+ import { RechartsRootState } from "../state/store";
3
+ import { DefaultZIndexes } from "./DefaultZIndexes";
4
+
5
+ /**
6
+ * Given a zIndex, returns the corresponding portal element reference.
7
+ * If no zIndex is provided or if the zIndex is not registered, returns undefined.
8
+ *
9
+ * It also returns undefined in case the z-index portal has not been rendered yet.
10
+ */
11
+ export const selectZIndexPortalElement = (
12
+ state: RechartsRootState,
13
+ zIndex: number | undefined,
14
+ isPanorama: boolean,
15
+ ): Element | undefined => {
16
+ if (zIndex == null) {
17
+ return undefined;
18
+ }
19
+ const entry = state.zIndex.zIndexMap[zIndex];
20
+ if (entry == null) {
21
+ return undefined;
22
+ }
23
+ if (isPanorama) {
24
+ return entry.panoramaElement;
25
+ }
26
+ return entry.element;
27
+ };
28
+
29
+ let cachedZIndexMapKeys = "";
30
+ let cachedAllRegisteredZIndexes: ReadonlyArray<number> = [];
31
+
32
+ export const selectAllRegisteredZIndexes = (state: RechartsRootState): ReadonlyArray<number> => {
33
+ const zIndexMapKeys = Object.keys(state.zIndex.zIndexMap).sort().join(",");
34
+ if (zIndexMapKeys === cachedZIndexMapKeys) {
35
+ return cachedAllRegisteredZIndexes;
36
+ }
37
+ const allNumbers = zIndexMapKeys
38
+ .split(",")
39
+ .filter((key) => key.length > 0)
40
+ .map((zIndexStr) => Number.parseInt(zIndexStr, 10))
41
+ .concat(Object.values(DefaultZIndexes));
42
+ const uniqueNumbers = Array.from(new Set(allNumbers));
43
+ cachedZIndexMapKeys = zIndexMapKeys;
44
+ cachedAllRegisteredZIndexes = uniqueNumbers.sort((a, b) => a - b);
45
+ return cachedAllRegisteredZIndexes;
46
+ };