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,286 @@
1
+ // Ported from recharts 3.8.1 src/cartesian/ReferenceDot.tsx (commit 7a23854).
2
+ //
3
+ // Draws a circle at a DATA coordinate (x, y), mapped to pixels through the
4
+ // cartesian scale spine (CartesianScaleHelperImpl over the x/y RechartsScales).
5
+ //
6
+ // Solid deviations (documented):
7
+ // - resolveDefaultProps → `merge`; useEffect add/remove → createEffect + onCleanup.
8
+ // - The registered settings carry a generated `id` (proxy-safe removal).
9
+ // - Mouse handlers are wrapped props-first (`(dotProps, e)`) on the default dot
10
+ // via adaptEventHandlers (recharts does this inside Dot; the port's Dot
11
+ // forwards raw delegated handlers).
12
+ // - PERMANENT-N/A (by design, NOT deferred): the custom-element `shape` branch
13
+ // (React.cloneElement — use the render-function form);
14
+ // `children` is not rendered (CartesianLabelContext).
15
+ import { createEffect, createMemo, merge, Show } from "solid-js";
16
+ import type { JSX } from "@solidjs/web";
17
+ import { Layer } from "../container/Layer";
18
+ import { Dot, type DotProps } from "../shape/Dot";
19
+ import {
20
+ CartesianLabelContextProvider,
21
+ CartesianLabelFromLabelProp,
22
+ type ImplicitLabelType,
23
+ } from "../component/Label";
24
+ import { isNumOrStr } from "../util/DataUtils";
25
+ import { IfOverflow } from "../util/IfOverflow";
26
+ import type { ReferenceDotSettings } from "../state/referenceElementsSlice";
27
+ import { useAppSelector, useAppStore } from "../state/hooks";
28
+ import { selectAxisScale } from "../state/selectors/axisSelectors";
29
+ import { useIsPanorama } from "../context/PanoramaContext";
30
+ import { useClipPathId } from "../container/ClipPathProvider";
31
+ import { svgPropertiesAndEventsKeepCase } from "../util/svgPropertiesAndEvents";
32
+ import { adaptEventHandlers } from "../util/adaptEventHandlers";
33
+ import { useUniqueId } from "../util/useUniqueId";
34
+ import type { AxisId } from "../state/cartesianAxisSlice";
35
+ import { DefaultZIndexes } from "../zIndex/DefaultZIndexes";
36
+ import { ZIndexLayer } from "../zIndex/ZIndexLayer";
37
+ import { Coordinate } from "../util/types";
38
+ import { CartesianScaleHelperImpl } from "../util/scale/CartesianScaleHelper";
39
+ import { unregisterOnCleanup } from "../state/unregisterOnCleanup";
40
+
41
+ type ReferenceCoordinateValue = number | string;
42
+
43
+ /**
44
+ * ReferenceDot mouse handlers are called props-first: `(dotProps, event)` (recharts parity).
45
+ * The event's `currentTarget` is the rendered `<circle>`, so the event satisfies
46
+ * `SVGMousePointer` and can be passed to {@link getRelativeCoordinate} directly.
47
+ */
48
+ export type ReferenceDotEventHandler = (
49
+ dotProps: DotProps,
50
+ event: MouseEvent & { currentTarget: SVGCircleElement },
51
+ ) => void;
52
+
53
+ /** Touch variant of {@link ReferenceDotEventHandler} — also called props-first. */
54
+ export type ReferenceDotTouchEventHandler = (
55
+ dotProps: DotProps,
56
+ event: TouchEvent & { currentTarget: SVGCircleElement },
57
+ ) => void;
58
+
59
+ export interface ReferenceDotProps<
60
+ XValueType extends ReferenceCoordinateValue = ReferenceCoordinateValue,
61
+ YValueType extends ReferenceCoordinateValue = ReferenceCoordinateValue,
62
+ > {
63
+ /** The radius of the dot in pixels. @defaultValue 10 */
64
+ r?: number;
65
+ /** The x-coordinate (data space) of the center of the dot. */
66
+ x?: XValueType;
67
+ /** The y-coordinate (data space) of the center of the dot. */
68
+ y?: YValueType;
69
+ /** The id of the corresponding y-axis. @defaultValue 0 */
70
+ yAxisId?: AxisId;
71
+ /** The id of the corresponding x-axis. @defaultValue 0 */
72
+ xAxisId?: AxisId;
73
+ /** Defines how to draw the dot when it overflows the plot area. @defaultValue 'discard' */
74
+ ifOverflow?: IfOverflow;
75
+ /** Custom render function for the dot shape. */
76
+ shape?: (props: DotProps) => JSX.Element;
77
+ /** A single label rendered around the dot. @defaultValue false */
78
+ label?: ImplicitLabelType;
79
+ /** Stacking order within the chart's z-index system. @defaultValue DefaultZIndexes.scatter */
80
+ zIndex?: number;
81
+ class?: string;
82
+ children?: JSX.Element;
83
+ /** The customized event handler of click on the dot. */
84
+ onClick?: ReferenceDotEventHandler;
85
+ /** The customized event handler of mousedown on the dot. */
86
+ onMouseDown?: ReferenceDotEventHandler;
87
+ /** The customized event handler of mouseup on the dot. */
88
+ onMouseUp?: ReferenceDotEventHandler;
89
+ /** The customized event handler of mouseover on the dot. */
90
+ onMouseOver?: ReferenceDotEventHandler;
91
+ /** The customized event handler of mouseout on the dot. */
92
+ onMouseOut?: ReferenceDotEventHandler;
93
+ /** The customized event handler of mouseenter on the dot. */
94
+ onMouseEnter?: ReferenceDotEventHandler;
95
+ /** The customized event handler of mousemove on the dot. */
96
+ onMouseMove?: ReferenceDotEventHandler;
97
+ /** The customized event handler of mouseleave on the dot. */
98
+ onMouseLeave?: ReferenceDotEventHandler;
99
+ /** The customized event handler of touchstart on the dot. */
100
+ onTouchStart?: ReferenceDotTouchEventHandler;
101
+ /** The customized event handler of touchmove on the dot. */
102
+ onTouchMove?: ReferenceDotTouchEventHandler;
103
+ /** The customized event handler of touchend on the dot. */
104
+ onTouchEnd?: ReferenceDotTouchEventHandler;
105
+ }
106
+
107
+ export type Props<
108
+ XValueType extends ReferenceCoordinateValue = ReferenceCoordinateValue,
109
+ YValueType extends ReferenceCoordinateValue = ReferenceCoordinateValue,
110
+ > = Omit<
111
+ DotProps,
112
+ | "cx"
113
+ | "cy"
114
+ | "clipDot"
115
+ | "class"
116
+ // Redeclared above with the recharts props-first `(dotProps, event)` signature.
117
+ | "onClick"
118
+ | "onMouseDown"
119
+ | "onMouseUp"
120
+ | "onMouseOver"
121
+ | "onMouseOut"
122
+ | "onMouseEnter"
123
+ | "onMouseMove"
124
+ | "onMouseLeave"
125
+ | "onTouchStart"
126
+ | "onTouchMove"
127
+ | "onTouchEnd"
128
+ > &
129
+ ReferenceDotProps<XValueType, YValueType>;
130
+
131
+ function ReportReferenceDot(props: ReferenceDotSettings): JSX.Element {
132
+ const store = useAppStore();
133
+ let prev: ReferenceDotSettings | null = null;
134
+
135
+ createEffect(
136
+ (): ReferenceDotSettings => ({
137
+ id: props.id,
138
+ xAxisId: props.xAxisId,
139
+ yAxisId: props.yAxisId,
140
+ ifOverflow: props.ifOverflow,
141
+ x: props.x,
142
+ y: props.y,
143
+ r: props.r,
144
+ }),
145
+ (settings) => {
146
+ if (store == null) {
147
+ return;
148
+ }
149
+ if (prev === null) {
150
+ store.actions.referenceElements.addDot(settings);
151
+ } else if (prev !== settings) {
152
+ store.actions.referenceElements.removeDot(prev);
153
+ store.actions.referenceElements.addDot(settings);
154
+ }
155
+ prev = settings;
156
+ },
157
+ );
158
+
159
+ unregisterOnCleanup(() => {
160
+ if (prev && store != null) {
161
+ store.actions.referenceElements.removeDot(prev);
162
+ prev = null;
163
+ }
164
+ });
165
+
166
+ return null;
167
+ }
168
+
169
+ const renderDot = (option: Props["shape"], props: DotProps): JSX.Element => {
170
+ if (typeof option === "function") {
171
+ return option(props);
172
+ }
173
+ // recharts' Dot rewraps its event handlers props-first via adaptEventHandlers
174
+ // (a user's onClick is called `(dotProps, event)`); the port's Dot forwards raw
175
+ // delegated handlers, so the wrapping happens here on the default-dot branch
176
+ // (a custom `shape` receives the raw props, as in recharts).
177
+ const dotProps: DotProps = { ...props, class: "recharts-reference-dot-dot" };
178
+ return (
179
+ <Dot {...dotProps} {...(adaptEventHandlers(dotProps) ?? {})} cx={props.cx} cy={props.cy} />
180
+ );
181
+ };
182
+
183
+ const referenceDotDefaultProps = {
184
+ ifOverflow: "discard",
185
+ xAxisId: 0,
186
+ yAxisId: 0,
187
+ r: 10,
188
+ fill: "#fff",
189
+ stroke: "#ccc",
190
+ fillOpacity: 1,
191
+ strokeWidth: 1,
192
+ label: false,
193
+ } as const satisfies Partial<Props>;
194
+
195
+ function ReferenceDotImpl(props: Props): JSX.Element {
196
+ const merged = merge(referenceDotDefaultProps, props);
197
+ const clipPathId = useClipPathId();
198
+ const isPanorama = useIsPanorama();
199
+ const xAxisScale = useAppSelector((s) => selectAxisScale(s, "xAxis", merged.xAxisId, isPanorama));
200
+ const yAxisScale = useAppSelector((s) => selectAxisScale(s, "yAxis", merged.yAxisId, isPanorama));
201
+
202
+ const coordinate = createMemo<Coordinate | null>(() => {
203
+ const xv = merged.x;
204
+ const yv = merged.y;
205
+ const xs = xAxisScale();
206
+ const ys = yAxisScale();
207
+ if (!isNumOrStr(xv) || !isNumOrStr(yv) || xs == null || ys == null) {
208
+ return null;
209
+ }
210
+ const scales = new CartesianScaleHelperImpl({ x: xs, y: ys });
211
+ const result = scales.map({ x: xv, y: yv }, { position: "middle" });
212
+ if (merged.ifOverflow === "discard" && !scales.isInRange(result)) {
213
+ return null;
214
+ }
215
+ return result;
216
+ });
217
+
218
+ // The memo returns the dot PROPS (or null) — all reactive prop reads (the svg
219
+ // spread) happen in this tracking scope, so the Show callback has no untracked
220
+ // reads beyond the (static) shape.
221
+ const dotProps = createMemo<DotProps | null>(() => {
222
+ const c = coordinate();
223
+ if (!c) {
224
+ return null;
225
+ }
226
+ const clipPath = merged.ifOverflow === "hidden" ? `url(#${clipPathId})` : undefined;
227
+ return {
228
+ clipPath,
229
+ ...svgPropertiesAndEventsKeepCase({ ...merged }),
230
+ cx: c.x,
231
+ cy: c.y,
232
+ r: merged.r,
233
+ };
234
+ });
235
+
236
+ return (
237
+ <Show when={dotProps()}>
238
+ {(p) => (
239
+ <ZIndexLayer zIndex={merged.zIndex ?? DefaultZIndexes.scatter}>
240
+ <Layer class="recharts-reference-dot">
241
+ {renderDot(merged.shape, p())}
242
+ <CartesianLabelContextProvider
243
+ x={(p().cx ?? 0) - merged.r}
244
+ y={(p().cy ?? 0) - merged.r}
245
+ width={2 * merged.r}
246
+ height={2 * merged.r}
247
+ upperWidth={2 * merged.r}
248
+ lowerWidth={2 * merged.r}
249
+ >
250
+ <CartesianLabelFromLabelProp label={merged.label} />
251
+ </CartesianLabelContextProvider>
252
+ </Layer>
253
+ </ZIndexLayer>
254
+ )}
255
+ </Show>
256
+ );
257
+ }
258
+
259
+ /**
260
+ * Draws a circle on the chart at a data coordinate (the cartesian-aware version
261
+ * of {@link Dot}). ReferenceDot maps the provided data coordinates to pixels
262
+ * through the chart's scales.
263
+ */
264
+ export function ReferenceDot<
265
+ XValueType extends ReferenceCoordinateValue = ReferenceCoordinateValue,
266
+ YValueType extends ReferenceCoordinateValue = ReferenceCoordinateValue,
267
+ >(props: Props<XValueType, YValueType>): JSX.Element {
268
+ const merged = merge(referenceDotDefaultProps, props);
269
+ const id = useUniqueId("recharts-reference-dot");
270
+ return (
271
+ <>
272
+ <ReportReferenceDot
273
+ id={id}
274
+ y={merged.y}
275
+ x={merged.x}
276
+ r={merged.r}
277
+ yAxisId={merged.yAxisId}
278
+ xAxisId={merged.xAxisId}
279
+ ifOverflow={merged.ifOverflow}
280
+ />
281
+ <ReferenceDotImpl {...props} />
282
+ </>
283
+ );
284
+ }
285
+
286
+ ReferenceDot.displayName = "ReferenceDot";
@@ -0,0 +1,414 @@
1
+ // Ported from recharts 3.8.1 src/cartesian/ReferenceLine.tsx (commit 7a23854).
2
+ //
3
+ // Draws a horizontal/vertical/diagonal line at a DATA coordinate, mapped to
4
+ // pixels through the cartesian scale spine (selectAxisScale → RechartsScale).
5
+ //
6
+ // Solid deviations (documented):
7
+ // - resolveDefaultProps → `merge`; useEffect add/remove → createEffect + onCleanup
8
+ // (the same effect-dispatch registration idiom Line/Bar/Area/SetTooltipEntrySettings use).
9
+ // - The registered settings carry a generated `id` (proxy-safe removal — see
10
+ // referenceElementsSlice); recharts matches by object reference.
11
+ // - `clsx` → single `class` string (Layer takes one string).
12
+ // - The `label` prop IS wired (CartesianLabelFromLabelProp), and the line renders
13
+ // inside <ZIndexLayer zIndex={merged.zIndex ?? DefaultZIndexes.line}>.
14
+ // - PERMANENT-N/A (by design, NOT deferred): the custom-element `shape` branch
15
+ // (React.cloneElement — Solid has no element-props introspection; use the
16
+ // render-function form; the default-`<line>` branch is kept). <Label> CHILDREN
17
+ // are not rendered (the `label` prop is).
18
+ import { type CamelSvgProps } from "../util/svgPropertiesNoEvents";
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 { rectWithCoords } from "../util/CartesianUtils";
28
+ import { IfOverflow } from "../util/IfOverflow";
29
+ import { isNumOrStr } from "../util/DataUtils";
30
+ import { CartesianViewBoxRequired, Coordinate, RectanglePosition } from "../util/types";
31
+ import { useViewBox } from "../context/chartLayoutContext";
32
+ import type { ReferenceLineSettings } from "../state/referenceElementsSlice";
33
+ import { useAppSelector, useAppStore } from "../state/hooks";
34
+ import {
35
+ selectAxisScale,
36
+ selectXAxisSettings,
37
+ selectYAxisSettings,
38
+ } from "../state/selectors/axisSelectors";
39
+ import { useIsPanorama } from "../context/PanoramaContext";
40
+ import { useClipPathId } from "../container/ClipPathProvider";
41
+ import { svgPropertiesAndEvents } from "../util/svgPropertiesAndEvents";
42
+ import { useUniqueId } from "../util/useUniqueId";
43
+ import { isWellBehavedNumber } from "../util/isWellBehavedNumber";
44
+ import { BandPosition, RechartsScale } from "../util/scale/RechartsScale";
45
+ import { CartesianScaleHelper, CartesianScaleHelperImpl } from "../util/scale/CartesianScaleHelper";
46
+ import type { AxisId } from "../state/cartesianAxisSlice";
47
+ import { DefaultZIndexes } from "../zIndex/DefaultZIndexes";
48
+ import { ZIndexLayer } from "../zIndex/ZIndexLayer";
49
+ import { unregisterOnCleanup } from "../state/unregisterOnCleanup";
50
+
51
+ /**
52
+ * Single point that defines one end of a segment, in data space.
53
+ * @inline
54
+ */
55
+ export type ReferenceLineSegment = readonly [
56
+ { x?: number | string; y?: number | string },
57
+ { x?: number | string; y?: number | string },
58
+ ];
59
+
60
+ type ReferenceCoordinateValue = number | string;
61
+
62
+ /** Orientation of the two cartesian axes (xAxis is top/bottom, yAxis is left/right). */
63
+ type AxisOrientation = "top" | "bottom" | "left" | "right";
64
+
65
+ /**
66
+ * Props of the inner `<line>` shape (after svg filtering + endpoint geometry).
67
+ * NOT wrapped in CamelSvgProps: this is a DOM-READY OUTPUT payload (built from
68
+ * svgPropertiesAndEvents, spread verbatim onto <line> / handed to `shape`
69
+ * functions), so its keys are the real kebab attribute names by design.
70
+ */
71
+ export type LineShapeProps = Partial<JSX.LineSVGAttributes<SVGLineElement>> & {
72
+ x1?: number;
73
+ y1?: number;
74
+ x2?: number;
75
+ y2?: number;
76
+ };
77
+
78
+ export interface ReferenceLineProps<
79
+ XValueType extends ReferenceCoordinateValue = ReferenceCoordinateValue,
80
+ YValueType extends ReferenceCoordinateValue = ReferenceCoordinateValue,
81
+ > {
82
+ /** If defined, renders a horizontal line at this (data-space) y position. */
83
+ y?: YValueType;
84
+ /** If defined, renders a vertical line at this (data-space) x position. */
85
+ x?: XValueType;
86
+ /** Tuple of coordinates. If defined, renders a diagonal line segment. */
87
+ segment?: readonly [{ x?: XValueType; y?: YValueType }, { x?: XValueType; y?: YValueType }];
88
+ /** Where within a band the line is drawn (band scales only). @defaultValue 'middle' */
89
+ position?: BandPosition;
90
+ /** The id of the corresponding y-axis. @defaultValue 0 */
91
+ yAxisId?: AxisId;
92
+ /** The id of the corresponding x-axis. @defaultValue 0 */
93
+ xAxisId?: AxisId;
94
+ /** Defines how to draw the line when it overflows the plot area. @defaultValue 'discard' */
95
+ ifOverflow?: IfOverflow;
96
+ /** Custom render function for the line shape. */
97
+ shape?: (props: LineShapeProps) => JSX.Element;
98
+ /** A single label rendered along the line. @defaultValue false */
99
+ label?: ImplicitLabelType;
100
+ /** Stacking order within the chart's z-index system. @defaultValue DefaultZIndexes.line */
101
+ zIndex?: number;
102
+ class?: string;
103
+ children?: JSX.Element;
104
+ }
105
+
106
+ export type Props<
107
+ XValueType extends ReferenceCoordinateValue = ReferenceCoordinateValue,
108
+ YValueType extends ReferenceCoordinateValue = ReferenceCoordinateValue,
109
+ > = Omit<CamelSvgProps<JSX.LineSVGAttributes<SVGLineElement>>, "x" | "y" | "class" | "children"> &
110
+ ReferenceLineProps<XValueType, YValueType>;
111
+
112
+ const getHorizontalLineEndPoints = (
113
+ yCoord: number | string,
114
+ ifOverflow: IfOverflow,
115
+ position: BandPosition | undefined,
116
+ yAxisOrientation: AxisOrientation | undefined,
117
+ yAxisScale: RechartsScale,
118
+ viewBox: CartesianViewBoxRequired,
119
+ ): ReadonlyArray<Coordinate> | null => {
120
+ const { x, width } = viewBox;
121
+ const coord = yAxisScale.map(yCoord, { position });
122
+ if (!isWellBehavedNumber(coord)) {
123
+ return null;
124
+ }
125
+ if (ifOverflow === "discard" && !yAxisScale.isInRange(coord)) {
126
+ return null;
127
+ }
128
+ const points = [
129
+ { x: x + width, y: coord },
130
+ { x, y: coord },
131
+ ];
132
+ return yAxisOrientation === "left" ? points.reverse() : points;
133
+ };
134
+
135
+ const getVerticalLineEndPoints = (
136
+ xCoord: number | string,
137
+ ifOverflow: IfOverflow,
138
+ position: BandPosition | undefined,
139
+ xAxisOrientation: AxisOrientation | undefined,
140
+ xAxisScale: RechartsScale,
141
+ viewBox: CartesianViewBoxRequired,
142
+ ): ReadonlyArray<Coordinate> | null => {
143
+ const { y, height } = viewBox;
144
+ const coord = xAxisScale.map(xCoord, { position });
145
+ if (!isWellBehavedNumber(coord)) {
146
+ return null;
147
+ }
148
+ if (ifOverflow === "discard" && !xAxisScale.isInRange(coord)) {
149
+ return null;
150
+ }
151
+ const points = [
152
+ { x: coord, y: y + height },
153
+ { x: coord, y },
154
+ ];
155
+ return xAxisOrientation === "top" ? points.reverse() : points;
156
+ };
157
+
158
+ const getSegmentLineEndPoints = (
159
+ segment: ReferenceLineSegment,
160
+ ifOverflow: IfOverflow,
161
+ position: BandPosition | undefined,
162
+ scales: CartesianScaleHelper,
163
+ ): ReadonlyArray<Coordinate> | null => {
164
+ const points: [Coordinate, Coordinate] = [
165
+ scales.mapWithFallback(segment[0], { position, fallback: "rangeMin" }),
166
+ scales.mapWithFallback(segment[1], { position, fallback: "rangeMax" }),
167
+ ];
168
+ if (ifOverflow === "discard" && points.some((p) => !scales.isInRange(p))) {
169
+ return null;
170
+ }
171
+ return points;
172
+ };
173
+
174
+ type EndPointsPropsSubset = {
175
+ x?: number | string;
176
+ y?: number | string;
177
+ segment?: ReferenceLineSegment;
178
+ ifOverflow: IfOverflow;
179
+ };
180
+
181
+ export const getEndPoints = (
182
+ xAxisScale: RechartsScale,
183
+ yAxisScale: RechartsScale,
184
+ viewBox: CartesianViewBoxRequired,
185
+ position: BandPosition | undefined,
186
+ xAxisOrientation: AxisOrientation | undefined,
187
+ yAxisOrientation: AxisOrientation | undefined,
188
+ props: EndPointsPropsSubset,
189
+ ): ReadonlyArray<Coordinate> | null => {
190
+ const { x: xCoord, y: yCoord, segment, ifOverflow } = props;
191
+ const isFixedX = isNumOrStr(xCoord);
192
+ const isFixedY = isNumOrStr(yCoord);
193
+
194
+ if (isFixedY) {
195
+ return getHorizontalLineEndPoints(
196
+ yCoord,
197
+ ifOverflow,
198
+ position,
199
+ yAxisOrientation,
200
+ yAxisScale,
201
+ viewBox,
202
+ );
203
+ }
204
+ if (isFixedX) {
205
+ return getVerticalLineEndPoints(
206
+ xCoord,
207
+ ifOverflow,
208
+ position,
209
+ xAxisOrientation,
210
+ xAxisScale,
211
+ viewBox,
212
+ );
213
+ }
214
+ if (segment != null && segment.length === 2) {
215
+ return getSegmentLineEndPoints(
216
+ segment,
217
+ ifOverflow,
218
+ position,
219
+ new CartesianScaleHelperImpl({ x: xAxisScale, y: yAxisScale }),
220
+ );
221
+ }
222
+ return null;
223
+ };
224
+
225
+ const renderLine = (
226
+ option: ReferenceLineProps["shape"],
227
+ lineProps: LineShapeProps,
228
+ ): JSX.Element => {
229
+ if (typeof option === "function") {
230
+ return option(lineProps);
231
+ }
232
+ if (
233
+ !isWellBehavedNumber(lineProps.x1) ||
234
+ !isWellBehavedNumber(lineProps.y1) ||
235
+ !isWellBehavedNumber(lineProps.x2) ||
236
+ !isWellBehavedNumber(lineProps.y2)
237
+ ) {
238
+ return null;
239
+ }
240
+ return <line {...lineProps} class="recharts-reference-line-line" />;
241
+ };
242
+
243
+ function ReportReferenceLine(props: ReferenceLineSettings): JSX.Element {
244
+ const store = useAppStore();
245
+ let prev: ReferenceLineSettings | null = null;
246
+
247
+ createEffect(
248
+ (): ReferenceLineSettings => ({
249
+ id: props.id,
250
+ xAxisId: props.xAxisId,
251
+ yAxisId: props.yAxisId,
252
+ ifOverflow: props.ifOverflow,
253
+ x: props.x,
254
+ y: props.y,
255
+ segment: props.segment,
256
+ }),
257
+ (settings) => {
258
+ if (store == null) {
259
+ return;
260
+ }
261
+ if (prev === null) {
262
+ store.actions.referenceElements.addLine(settings);
263
+ } else if (prev !== settings) {
264
+ store.actions.referenceElements.removeLine(prev);
265
+ store.actions.referenceElements.addLine(settings);
266
+ }
267
+ prev = settings;
268
+ },
269
+ );
270
+
271
+ unregisterOnCleanup(() => {
272
+ if (prev && store != null) {
273
+ store.actions.referenceElements.removeLine(prev);
274
+ prev = null;
275
+ }
276
+ });
277
+
278
+ return null;
279
+ }
280
+
281
+ const referenceLineDefaultProps = {
282
+ ifOverflow: "discard",
283
+ xAxisId: 0,
284
+ yAxisId: 0,
285
+ fill: "none",
286
+ stroke: "#ccc",
287
+ fillOpacity: 1,
288
+ strokeWidth: 1,
289
+ position: "middle",
290
+ label: false,
291
+ } as const satisfies Partial<Props>;
292
+
293
+ function ReferenceLineImpl(props: Props): JSX.Element {
294
+ const merged = merge(referenceLineDefaultProps, props);
295
+ const isPanorama = useIsPanorama();
296
+ const clipPathId = useClipPathId();
297
+ const viewBox = useViewBox();
298
+ const xAxis = useAppSelector((s) => selectXAxisSettings(s, merged.xAxisId));
299
+ const yAxis = useAppSelector((s) => selectYAxisSettings(s, merged.yAxisId));
300
+ const xAxisScale = useAppSelector((s) => selectAxisScale(s, "xAxis", merged.xAxisId, isPanorama));
301
+ const yAxisScale = useAppSelector((s) => selectAxisScale(s, "yAxis", merged.yAxisId, isPanorama));
302
+
303
+ const coords = createMemo<{ x1: number; y1: number; x2: number; y2: number } | null>(() => {
304
+ const vb = viewBox();
305
+ const xs = xAxisScale();
306
+ const ys = yAxisScale();
307
+ const xAxisSettings = xAxis();
308
+ const yAxisSettings = yAxis();
309
+ if (
310
+ clipPathId == null ||
311
+ vb == null ||
312
+ xs == null ||
313
+ ys == null ||
314
+ xAxisSettings == null ||
315
+ yAxisSettings == null
316
+ ) {
317
+ return null;
318
+ }
319
+ const endPoints = getEndPoints(
320
+ xs,
321
+ ys,
322
+ vb,
323
+ merged.position,
324
+ xAxisSettings.orientation,
325
+ yAxisSettings.orientation,
326
+ {
327
+ x: merged.x,
328
+ y: merged.y,
329
+ segment: merged.segment,
330
+ ifOverflow: merged.ifOverflow,
331
+ },
332
+ );
333
+ if (!endPoints) {
334
+ return null;
335
+ }
336
+ const point1 = endPoints[0];
337
+ const point2 = endPoints[1];
338
+ if (point1 == null || point2 == null) {
339
+ return null;
340
+ }
341
+ return { x1: point1.x, y1: point1.y, x2: point2.x, y2: point2.y };
342
+ });
343
+
344
+ // The memo returns the line PROPS (or null) — all reactive prop reads (the svg
345
+ // spread) happen in this tracking scope, so the Show callback has no untracked
346
+ // reads beyond the (static) shape.
347
+ const rendered = createMemo<{ line: LineShapeProps; rect: RectanglePosition } | null>(() => {
348
+ const c = coords();
349
+ if (!c) {
350
+ return null;
351
+ }
352
+ const clipPath = merged.ifOverflow === "hidden" ? `url(#${clipPathId})` : undefined;
353
+ const line: LineShapeProps = {
354
+ "clip-path": clipPath,
355
+ ...svgPropertiesAndEvents({ ...merged }),
356
+ x1: c.x1,
357
+ y1: c.y1,
358
+ x2: c.x2,
359
+ y2: c.y2,
360
+ };
361
+ return { line, rect: rectWithCoords({ x1: c.x1, y1: c.y1, x2: c.x2, y2: c.y2 }) };
362
+ });
363
+
364
+ return (
365
+ <Show when={rendered()}>
366
+ {(r) => (
367
+ <ZIndexLayer zIndex={merged.zIndex ?? DefaultZIndexes.line}>
368
+ <Layer class="recharts-reference-line">
369
+ {renderLine(merged.shape, r().line)}
370
+ <CartesianLabelContextProvider
371
+ x={r().rect.x}
372
+ y={r().rect.y}
373
+ width={r().rect.width}
374
+ height={r().rect.height}
375
+ upperWidth={r().rect.width}
376
+ lowerWidth={r().rect.width}
377
+ >
378
+ <CartesianLabelFromLabelProp label={merged.label} />
379
+ </CartesianLabelContextProvider>
380
+ </Layer>
381
+ </ZIndexLayer>
382
+ )}
383
+ </Show>
384
+ );
385
+ }
386
+
387
+ /**
388
+ * Draws a line on the chart at a data coordinate (the cartesian-aware version of
389
+ * an SVG `<line>`). ReferenceLine maps the provided data coordinates to pixels
390
+ * through the chart's scales.
391
+ */
392
+ export function ReferenceLine<
393
+ XValueType extends ReferenceCoordinateValue = ReferenceCoordinateValue,
394
+ YValueType extends ReferenceCoordinateValue = ReferenceCoordinateValue,
395
+ >(props: Props<XValueType, YValueType>): JSX.Element {
396
+ const merged = merge(referenceLineDefaultProps, props);
397
+ const id = useUniqueId("recharts-reference-line");
398
+ return (
399
+ <>
400
+ <ReportReferenceLine
401
+ id={id}
402
+ yAxisId={merged.yAxisId}
403
+ xAxisId={merged.xAxisId}
404
+ ifOverflow={merged.ifOverflow}
405
+ x={merged.x}
406
+ y={merged.y}
407
+ segment={merged.segment}
408
+ />
409
+ <ReferenceLineImpl {...props} />
410
+ </>
411
+ );
412
+ }
413
+
414
+ ReferenceLine.displayName = "ReferenceLine";