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,190 @@
1
+ // Ported from recharts 3.9.0 src/cartesian/LineDrawShape.tsx.
2
+ //
3
+ // The default shape for <Line>. During the entrance animation the line is
4
+ // progressively revealed via the `strokeDasharray` SVG attribute: the visible
5
+ // portion grows from 0 to the full path length as the animation progresses.
6
+ //
7
+ // Solid 2.0 deviations:
8
+ // - React reads `pathRef.current.getTotalLength()` synchronously during render.
9
+ // jsdom returns 0 for getTotalLength and the attribute `d` is only applied
10
+ // AFTER the ref fires, so measuring in a ref/render degrades the draw. We
11
+ // measure in an effect (after attributes land) into a signal and recompute the
12
+ // dasharray reactively — the same "measure in an effect, not the ref" idiom the
13
+ // previous Line port already documented.
14
+ // - `pathRef: RefObject<SVGPathElement>` (a read-only object ref) becomes our
15
+ // Curve's `pathRef` callback form; LineDrawShape owns the element capture and
16
+ // forwards the element to the parent-supplied `forwardPathRef` so the parent
17
+ // (<Line>) can drive `shouldUpdatePreviousRef`/`getVisibleLength` off the same
18
+ // measured length.
19
+ import { createEffect, createSignal, omit } from "solid-js";
20
+ import type { JSX } from "@solidjs/web";
21
+ import { Curve, type CurveProps } from "../shape/Curve";
22
+ import type { ShapeAnimationProps } from "../util/types";
23
+
24
+ /**
25
+ * Reads the total length of an SVG path element, returning 0 if the element is
26
+ * null or the measurement fails (e.g. in JSDOM).
27
+ */
28
+ function getTotalLength(path: SVGPathElement | null | undefined): number {
29
+ try {
30
+ return (path && path.getTotalLength && path.getTotalLength()) || 0;
31
+ } catch {
32
+ return 0;
33
+ }
34
+ }
35
+
36
+ /**
37
+ * Generates a simple stroke-dasharray string for animating a line draw effect.
38
+ *
39
+ * Uses `totalLength` as the gap (instead of `totalLength - length`) to avoid a
40
+ * floating-point precision artifact that can render a phantom dot at the path
41
+ * endpoint with round or square strokeLinecap.
42
+ */
43
+ function generateSimpleStrokeDasharray(totalLength: number, length: number): string {
44
+ return `${length}px ${totalLength}px`;
45
+ }
46
+
47
+ /**
48
+ * Normalizes a dash pattern to the even-length sequence SVG renderers use. Odd-length
49
+ * stroke-dasharray values repeat once, so "5" behaves like "5 5".
50
+ */
51
+ function normalizeDashPattern(lines: number[]): number[] {
52
+ return lines.length % 2 !== 0 ? [...lines, ...lines] : lines;
53
+ }
54
+
55
+ /** Repeats a dash pattern array `count` times. */
56
+ function repeat(lines: number[], count: number): number[] {
57
+ const result: number[] = [];
58
+ for (let i = 0; i < count; ++i) {
59
+ result.push(...lines);
60
+ }
61
+ return result;
62
+ }
63
+
64
+ /**
65
+ * Computes a stroke-dasharray string for a custom-dashed line draw effect: reveals
66
+ * exactly `length` px of the user pattern, followed by a `totalLength` gap.
67
+ */
68
+ function getStrokeDasharray(length: number, totalLength: number, lines: number[]): string {
69
+ const normalizedLines = normalizeDashPattern(lines);
70
+ const lineLength = normalizedLines.reduce((pre, next) => pre + next, 0);
71
+
72
+ if (!lineLength) {
73
+ return generateSimpleStrokeDasharray(totalLength, length);
74
+ }
75
+
76
+ const count = Math.floor(length / lineLength);
77
+ const remainLength = length % lineLength;
78
+ let remainLines: number[] = [];
79
+ for (let i = 0, sum = 0; i < normalizedLines.length; sum += normalizedLines[i] ?? 0, ++i) {
80
+ const lineValue = normalizedLines[i];
81
+ if (lineValue != null && sum + lineValue > remainLength) {
82
+ remainLines = [...normalizedLines.slice(0, i), remainLength - sum];
83
+ break;
84
+ }
85
+ }
86
+
87
+ const emptyLines = remainLines.length % 2 === 0 ? [0, totalLength] : [totalLength];
88
+
89
+ return [...repeat(normalizedLines, count), ...remainLines, ...emptyLines]
90
+ .map((line) => `${line}px`)
91
+ .join(", ");
92
+ }
93
+
94
+ /** Computes the animated stroke-dasharray for the current frame. */
95
+ function computeAnimatedStrokeDasharray(
96
+ userStrokeDasharray: string | number | undefined,
97
+ totalLength: number,
98
+ visibleLength: number,
99
+ ): string {
100
+ if (userStrokeDasharray) {
101
+ const lines = `${userStrokeDasharray}`.split(/[,\s]+/gim).map((num) => parseFloat(num));
102
+ return getStrokeDasharray(visibleLength, totalLength, lines);
103
+ }
104
+ return generateSimpleStrokeDasharray(totalLength, visibleLength);
105
+ }
106
+
107
+ export type LineDrawShapeProps = Omit<CurveProps, "pathRef"> &
108
+ ShapeAnimationProps & {
109
+ /**
110
+ * The computed visible length of the SVG path during entrance animation, in pixels.
111
+ * - number: apply stroke-dasharray to reveal exactly this many pixels.
112
+ * - null/undefined: no entrance-driven stroke-dasharray is applied.
113
+ *
114
+ * Computed by `useAnimatedLineLength` in <Line>.
115
+ */
116
+ visibleLength?: number | null;
117
+ /**
118
+ * Callback handed the underlying <path> element once it mounts, so <Line> can
119
+ * measure the same path length that drives this shape's dash. (Replaces sharing
120
+ * React's `pathRef` object.)
121
+ */
122
+ forwardPathRef?: (el: SVGPathElement) => void;
123
+ };
124
+
125
+ /**
126
+ * The default shape for Line — see the recharts animation guide. Custom shapes can
127
+ * import it as a reference or reuse it directly via `<Line shape={LineDrawShape} />`.
128
+ *
129
+ * @since 3.9
130
+ */
131
+ export function LineDrawShape(props: LineDrawShapeProps): JSX.Element {
132
+ // Measure the path length in an effect (NOT the ref callback): the ref fires
133
+ // before the dynamic `d` attribute is applied, where getTotalLength() is 0.
134
+ const [totalLength, setTotalLength] = createSignal(0);
135
+ let pathEl: SVGPathElement | undefined;
136
+ const capturePath = (el: SVGPathElement): void => {
137
+ pathEl = el;
138
+ props.forwardPathRef?.(el);
139
+ };
140
+
141
+ // Re-measure whenever the geometry or the animation frame changes (a data-change
142
+ // morph alters the path per frame; remeasuring once the frame committed gives the
143
+ // settled dash the new curve's true length — mirrors recharts recomputing
144
+ // totalLength on the post-animation re-render).
145
+ createEffect(
146
+ () => ({ points: props.points, visibleLength: props.visibleLength }),
147
+ () => {
148
+ if (pathEl?.getTotalLength == null) {
149
+ return;
150
+ }
151
+ const length = getTotalLength(pathEl);
152
+ setTotalLength(length);
153
+ },
154
+ );
155
+
156
+ const strokeDasharray = (): string | undefined => {
157
+ const visibleLength = props.visibleLength;
158
+ const userStrokeDasharray = props.strokeDasharray;
159
+ if (visibleLength != null) {
160
+ return computeAnimatedStrokeDasharray(userStrokeDasharray, totalLength(), visibleLength);
161
+ }
162
+ if (userStrokeDasharray != null) {
163
+ return String(userStrokeDasharray);
164
+ }
165
+ return undefined;
166
+ };
167
+
168
+ // Strip the animation-only props before forwarding to <Curve>; we set
169
+ // connectNulls/strokeDasharray/pathRef explicitly below. `omit` keeps the
170
+ // remaining props reactive (no destructuring of `props`).
171
+ const curveProps = omit(
172
+ props,
173
+ "animationElapsedTime",
174
+ "isAnimating",
175
+ "isEntrance",
176
+ "visibleLength",
177
+ "forwardPathRef",
178
+ "strokeDasharray",
179
+ "connectNulls",
180
+ );
181
+
182
+ return (
183
+ <Curve
184
+ {...curveProps}
185
+ connectNulls={props.connectNulls ?? false}
186
+ strokeDasharray={strokeDasharray()}
187
+ pathRef={capturePath}
188
+ />
189
+ );
190
+ }
@@ -0,0 +1,275 @@
1
+ // Ported from recharts 3.8.1 src/cartesian/ReferenceArea.tsx (commit 7a23854).
2
+ //
3
+ // Draws a rectangle spanning a DATA-coordinate range (x1..x2, y1..y2), mapped to
4
+ // pixels through the cartesian scale spine. Omitted edges extend to the plot-area
5
+ // boundary (rangeMin/rangeMax of the corresponding scale).
6
+ //
7
+ // Solid deviations (documented):
8
+ // - resolveDefaultProps → `merge`; useEffect add/remove → createEffect + onCleanup.
9
+ // - The registered settings carry a generated `id` (proxy-safe removal).
10
+ // - recharts builds the rect from NullableCoordinate via `@ts-expect-error`
11
+ // (relying on JS `null`→0 arithmetic coercion in rectWithPoints). We make that
12
+ // explicit with `?? 0`, keeping it typed (no assertions). The isInRange discard
13
+ // check still uses the nullable coordinates.
14
+ // - The `label` prop IS wired (CartesianLabelFromLabelProp), and the rect renders
15
+ // inside <ZIndexLayer zIndex={merged.zIndex ?? DefaultZIndexes.area}>.
16
+ // - PERMANENT-N/A (by design, NOT deferred): the custom-element `shape` branch
17
+ // (React.cloneElement — use the render-function form). <Label>
18
+ // CHILDREN are not rendered (the `label` prop is).
19
+ import { createEffect, createMemo, merge, Show } from "solid-js";
20
+ import type { JSX } from "@solidjs/web";
21
+ import { Layer } from "../container/Layer";
22
+ import {
23
+ CartesianLabelContextProvider,
24
+ CartesianLabelFromLabelProp,
25
+ type ImplicitLabelType,
26
+ } from "../component/Label";
27
+ import { rectWithPoints } from "../util/CartesianUtils";
28
+ import { IfOverflow } from "../util/IfOverflow";
29
+ import { isNumOrStr } from "../util/DataUtils";
30
+ import { type RectangleProps, Rectangle } from "../shape/Rectangle";
31
+ import type { ReferenceAreaSettings } from "../state/referenceElementsSlice";
32
+ import { useAppSelector, useAppStore } from "../state/hooks";
33
+ import { selectAxisScale } from "../state/selectors/axisSelectors";
34
+ import { useIsPanorama } from "../context/PanoramaContext";
35
+ import { useClipPathId } from "../container/ClipPathProvider";
36
+ import { svgPropertiesAndEventsKeepCase } from "../util/svgPropertiesAndEvents";
37
+ import { useUniqueId } from "../util/useUniqueId";
38
+ import { RectanglePosition } from "../util/types";
39
+ import { RechartsScale } from "../util/scale/RechartsScale";
40
+ import { CartesianScaleHelperImpl } from "../util/scale/CartesianScaleHelper";
41
+ import type { AxisId } from "../state/cartesianAxisSlice";
42
+ import { DefaultZIndexes } from "../zIndex/DefaultZIndexes";
43
+ import { ZIndexLayer } from "../zIndex/ZIndexLayer";
44
+ import { unregisterOnCleanup } from "../state/unregisterOnCleanup";
45
+
46
+ type ReferenceCoordinateValue = number | string;
47
+
48
+ export interface ReferenceAreaProps<
49
+ XValueType extends ReferenceCoordinateValue = ReferenceCoordinateValue,
50
+ YValueType extends ReferenceCoordinateValue = ReferenceCoordinateValue,
51
+ > {
52
+ /** Starting X-coordinate (data space). Extends to the left edge if undefined. */
53
+ x1?: XValueType;
54
+ /** Ending X-coordinate (data space). Extends to the right edge if undefined. */
55
+ x2?: XValueType;
56
+ /** Starting Y-coordinate (data space). Extends to the top edge if undefined. */
57
+ y1?: YValueType;
58
+ /** Ending Y-coordinate (data space). Extends to the bottom edge if undefined. */
59
+ y2?: YValueType;
60
+ /** The id of the corresponding y-axis. @defaultValue 0 */
61
+ yAxisId?: AxisId;
62
+ /** The id of the corresponding x-axis. @defaultValue 0 */
63
+ xAxisId?: AxisId;
64
+ /** Defines how to draw the area when it overflows the plot area. @defaultValue 'discard' */
65
+ ifOverflow?: IfOverflow;
66
+ /** Custom render function for the area shape. */
67
+ shape?: (props: RectangleProps) => JSX.Element;
68
+ /** A single label rendered inside the area. @defaultValue false */
69
+ label?: ImplicitLabelType;
70
+ /** Stacking order within the chart's z-index system. @defaultValue DefaultZIndexes.area */
71
+ zIndex?: number;
72
+ class?: string;
73
+ children?: JSX.Element;
74
+ }
75
+
76
+ export type Props<
77
+ XValueType extends ReferenceCoordinateValue = ReferenceCoordinateValue,
78
+ YValueType extends ReferenceCoordinateValue = ReferenceCoordinateValue,
79
+ > = Omit<RectangleProps, "width" | "height" | "x" | "y" | "class"> &
80
+ ReferenceAreaProps<XValueType, YValueType>;
81
+
82
+ const getRect = (
83
+ hasX1: boolean,
84
+ hasX2: boolean,
85
+ hasY1: boolean,
86
+ hasY2: boolean,
87
+ xAxisScale: RechartsScale,
88
+ yAxisScale: RechartsScale,
89
+ props: { x1?: unknown; x2?: unknown; y1?: unknown; y2?: unknown; ifOverflow: IfOverflow },
90
+ ): RectanglePosition | null => {
91
+ const scales = new CartesianScaleHelperImpl({ x: xAxisScale, y: yAxisScale });
92
+
93
+ const p1x = hasX1
94
+ ? (xAxisScale.map(props.x1, { position: "start" }) ?? null)
95
+ : xAxisScale.rangeMin();
96
+ const p1y = hasY1
97
+ ? (yAxisScale.map(props.y1, { position: "start" }) ?? null)
98
+ : yAxisScale.rangeMin();
99
+ const p2x = hasX2
100
+ ? (xAxisScale.map(props.x2, { position: "end" }) ?? null)
101
+ : xAxisScale.rangeMax();
102
+ const p2y = hasY2
103
+ ? (yAxisScale.map(props.y2, { position: "end" }) ?? null)
104
+ : yAxisScale.rangeMax();
105
+
106
+ if (
107
+ props.ifOverflow === "discard" &&
108
+ (!scales.isInRange({ x: p1x, y: p1y }) || !scales.isInRange({ x: p2x, y: p2y }))
109
+ ) {
110
+ return null;
111
+ }
112
+
113
+ // recharts passes NullableCoordinate here behind an `@ts-expect-error`; the
114
+ // `?? 0` makes the JS null→0 arithmetic coercion (in rectWithPoints) explicit.
115
+ return rectWithPoints({ x: p1x ?? 0, y: p1y ?? 0 }, { x: p2x ?? 0, y: p2y ?? 0 });
116
+ };
117
+
118
+ const renderRect = (option: ReferenceAreaProps["shape"], props: RectangleProps): JSX.Element => {
119
+ if (typeof option === "function") {
120
+ return option(props);
121
+ }
122
+ return <Rectangle {...props} class="recharts-reference-area-rect" />;
123
+ };
124
+
125
+ function ReportReferenceArea(props: ReferenceAreaSettings): JSX.Element {
126
+ const store = useAppStore();
127
+ let prev: ReferenceAreaSettings | null = null;
128
+
129
+ createEffect(
130
+ (): ReferenceAreaSettings => ({
131
+ id: props.id,
132
+ xAxisId: props.xAxisId,
133
+ yAxisId: props.yAxisId,
134
+ ifOverflow: props.ifOverflow,
135
+ x1: props.x1,
136
+ x2: props.x2,
137
+ y1: props.y1,
138
+ y2: props.y2,
139
+ }),
140
+ (settings) => {
141
+ if (store == null) {
142
+ return;
143
+ }
144
+ if (prev === null) {
145
+ store.actions.referenceElements.addArea(settings);
146
+ } else if (prev !== settings) {
147
+ store.actions.referenceElements.removeArea(prev);
148
+ store.actions.referenceElements.addArea(settings);
149
+ }
150
+ prev = settings;
151
+ },
152
+ );
153
+
154
+ unregisterOnCleanup(() => {
155
+ if (prev && store != null) {
156
+ store.actions.referenceElements.removeArea(prev);
157
+ prev = null;
158
+ }
159
+ });
160
+
161
+ return null;
162
+ }
163
+
164
+ const referenceAreaDefaultProps = {
165
+ ifOverflow: "discard",
166
+ xAxisId: 0,
167
+ yAxisId: 0,
168
+ radius: 0,
169
+ fill: "#ccc",
170
+ stroke: "none",
171
+ fillOpacity: 0.5,
172
+ strokeWidth: 1,
173
+ label: false,
174
+ } as const satisfies Partial<Props>;
175
+
176
+ function ReferenceAreaImpl(props: Props): JSX.Element {
177
+ const merged = merge(referenceAreaDefaultProps, props);
178
+ const clipPathId = useClipPathId();
179
+ const isPanorama = useIsPanorama();
180
+ const xAxisScale = useAppSelector((s) => selectAxisScale(s, "xAxis", merged.xAxisId, isPanorama));
181
+ const yAxisScale = useAppSelector((s) => selectAxisScale(s, "yAxis", merged.yAxisId, isPanorama));
182
+
183
+ const rect = createMemo<RectanglePosition | null>(() => {
184
+ const xs = xAxisScale();
185
+ const ys = yAxisScale();
186
+ if (xs == null || ys == null) {
187
+ return null;
188
+ }
189
+ const hasX1 = isNumOrStr(merged.x1);
190
+ const hasX2 = isNumOrStr(merged.x2);
191
+ const hasY1 = isNumOrStr(merged.y1);
192
+ const hasY2 = isNumOrStr(merged.y2);
193
+ if (!hasX1 && !hasX2 && !hasY1 && !hasY2 && merged.shape == null) {
194
+ return null;
195
+ }
196
+ return getRect(hasX1, hasX2, hasY1, hasY2, xs, ys, {
197
+ x1: merged.x1,
198
+ x2: merged.x2,
199
+ y1: merged.y1,
200
+ y2: merged.y2,
201
+ ifOverflow: merged.ifOverflow,
202
+ });
203
+ });
204
+
205
+ // The memo returns the rect PROPS (or null) — all reactive prop reads (the svg
206
+ // spread) happen in this tracking scope. Show keys on it; the callback only
207
+ // reads the memo accessor + the (static) shape, so no untracked reads.
208
+ const rectProps = createMemo<RectangleProps | null>(() => {
209
+ const r = rect();
210
+ if (r == null && merged.shape == null) {
211
+ return null;
212
+ }
213
+ const clipPath = merged.ifOverflow === "hidden" ? `url(#${clipPathId})` : undefined;
214
+ return {
215
+ clipPath,
216
+ ...svgPropertiesAndEventsKeepCase({ ...merged }),
217
+ ...(r ?? {}),
218
+ };
219
+ });
220
+
221
+ return (
222
+ <Show when={rectProps()}>
223
+ {(p) => (
224
+ <ZIndexLayer zIndex={merged.zIndex ?? DefaultZIndexes.area}>
225
+ <Layer class="recharts-reference-area">
226
+ {renderRect(merged.shape, p())}
227
+ <Show when={rect()}>
228
+ {(box) => (
229
+ <CartesianLabelContextProvider
230
+ x={box().x}
231
+ y={box().y}
232
+ width={box().width}
233
+ height={box().height}
234
+ upperWidth={box().width}
235
+ lowerWidth={box().width}
236
+ >
237
+ <CartesianLabelFromLabelProp label={merged.label} />
238
+ </CartesianLabelContextProvider>
239
+ )}
240
+ </Show>
241
+ </Layer>
242
+ </ZIndexLayer>
243
+ )}
244
+ </Show>
245
+ );
246
+ }
247
+
248
+ /**
249
+ * Draws a rectangular area on the chart spanning a data-coordinate range (the
250
+ * cartesian-aware version of {@link Rectangle}).
251
+ */
252
+ export function ReferenceArea<
253
+ XValueType extends ReferenceCoordinateValue = ReferenceCoordinateValue,
254
+ YValueType extends ReferenceCoordinateValue = ReferenceCoordinateValue,
255
+ >(props: Props<XValueType, YValueType>): JSX.Element {
256
+ const merged = merge(referenceAreaDefaultProps, props);
257
+ const id = useUniqueId("recharts-reference-area");
258
+ return (
259
+ <>
260
+ <ReportReferenceArea
261
+ id={id}
262
+ yAxisId={merged.yAxisId}
263
+ xAxisId={merged.xAxisId}
264
+ ifOverflow={merged.ifOverflow}
265
+ x1={merged.x1}
266
+ x2={merged.x2}
267
+ y1={merged.y1}
268
+ y2={merged.y2}
269
+ />
270
+ <ReferenceAreaImpl {...props} />
271
+ </>
272
+ );
273
+ }
274
+
275
+ ReferenceArea.displayName = "ReferenceArea";