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,663 @@
1
+ // Ported from recharts 3.8.1 test/cartesian/ReferenceArea.spec.tsx (commit 7a23854)
2
+ // — the impl-ready behavioral subset the Solid ReferenceArea implements:
3
+ // XAxis/YAxis/Bar dependency checks, coordinate-presence gating, ifOverflow
4
+ // discard/extendDomain/hidden, string/number/object/function/boolean labels,
5
+ // default-Rectangle vs function-form shape (+ the shape-fn argument record),
6
+ // clip-path wiring, event handlers, and the Redux settings report.
7
+ //
8
+ // Solid deviations (documented):
9
+ // - React render → Solid `render(() => ...)` thunk + `flush()`.
10
+ // - @testing-library/react userEvent → fireEvent (the port's convention).
11
+ // - The function-form `shape`/`label` render props are invoked with the Solid
12
+ // prop record (kebab SVG keys, no React `props.x`/`props.y` top-level), so the
13
+ // "shape function arguments" assertion is golden-anchored to that record and
14
+ // the function-label renders a static <text> (it cannot read top-level x/y).
15
+ // - The settings report carries a generated `id` (proxy-safe removal) and is
16
+ // asserted via a createEffect spy + a Show toggle (no React `rerender`); the
17
+ // render-cycle call-count assertions are React-specific and dropped.
18
+ // - Element-form shape/label cases are NOT in this file (deferred: Solid
19
+ // elements aren't introspectable).
20
+ import { describe, expect, it, test, vi } from "vitest";
21
+ import { createEffect, createSignal, flush, Show } from "solid-js";
22
+ import type { JSX } from "@solidjs/web";
23
+ import { fireEvent, render, screen } from "../helper/render";
24
+ import { Bar, BarChart, IfOverflow, LineChart, ReferenceArea, XAxis, YAxis } from "../../src";
25
+ import { useAppSelector } from "../../src/state/hooks";
26
+ import { selectReferenceAreasByAxis } from "../../src/state/selectors/axisSelectors";
27
+ import { assertNotNull } from "../helper/assertNotNull";
28
+
29
+ describe("<ReferenceArea />", () => {
30
+ const data = [
31
+ { name: "201102", uv: -6.11, pv: 0 },
32
+ { name: "201103", uv: 0.39, pv: 0 },
33
+ { name: "201104", uv: -1.37, pv: 0 },
34
+ { name: "201105", uv: 1.16, pv: 0 },
35
+ { name: "201106", uv: 1.29, pv: 0 },
36
+ { name: "201107", uv: 0.09, pv: 0 },
37
+ { name: "201108", uv: 0.53, pv: 0 },
38
+ { name: "201109", uv: 2.52, pv: 0 },
39
+ { name: "201110", uv: 0.79, pv: 0 },
40
+ { name: "201111", uv: 2.94, pv: 0 },
41
+ { name: "201112", uv: 4.3, pv: 0 },
42
+ ];
43
+
44
+ test("Render 1 rect in ReferenceArea", () => {
45
+ const { container } = render(() => (
46
+ <BarChart
47
+ width={1100}
48
+ height={250}
49
+ barGap={2}
50
+ barSize={6}
51
+ data={data}
52
+ margin={{ top: 20, right: 60, bottom: 0, left: 20 }}
53
+ >
54
+ <XAxis dataKey="name" orientation="top" />
55
+ <YAxis tickCount={7} orientation="right" />
56
+ <Bar dataKey="uv" />
57
+ <ReferenceArea x1="201106" x2="201110" fill="#666" label="201106" />
58
+ <ReferenceArea y1={0} y2={2} fill="#666" label="201106" />
59
+ </BarChart>
60
+ ));
61
+ flush();
62
+ expect(container.querySelectorAll(".recharts-reference-area-rect")).toHaveLength(2);
63
+ expect(container.querySelectorAll(".recharts-label")).toHaveLength(2);
64
+ });
65
+
66
+ it("should render nothing if neither XAxis not Bar are present", () => {
67
+ const { container } = render(() => (
68
+ <BarChart
69
+ width={1100}
70
+ height={250}
71
+ barGap={2}
72
+ barSize={6}
73
+ data={data}
74
+ margin={{ top: 20, right: 60, bottom: 0, left: 20 }}
75
+ >
76
+ <YAxis tickCount={7} orientation="right" />
77
+ <ReferenceArea x1="201106" x2="201110" fill="#666" />
78
+ <ReferenceArea y1={0} y2={2} fill="#999" />
79
+ </BarChart>
80
+ ));
81
+ flush();
82
+ expect(container.querySelectorAll(".recharts-reference-area-rect")).toHaveLength(0);
83
+ });
84
+
85
+ it("should render nothing if neither YAxis not Bar are present", () => {
86
+ const { container } = render(() => (
87
+ <BarChart
88
+ width={1100}
89
+ height={250}
90
+ barGap={2}
91
+ barSize={6}
92
+ data={data}
93
+ margin={{ top: 20, right: 60, bottom: 0, left: 20 }}
94
+ >
95
+ <XAxis dataKey="name" orientation="top" />
96
+ <ReferenceArea x1="201106" x2="201110" fill="#666" />
97
+ <ReferenceArea y1={0} y2={2} fill="#999" />
98
+ </BarChart>
99
+ ));
100
+ flush();
101
+ expect(container.querySelectorAll(".recharts-reference-area-rect")).toHaveLength(0);
102
+ });
103
+
104
+ it("should hallucinate XAxis props from Bar", () => {
105
+ const { container } = render(() => (
106
+ <BarChart
107
+ width={1100}
108
+ height={250}
109
+ barGap={2}
110
+ barSize={6}
111
+ data={data}
112
+ margin={{ top: 20, right: 60, bottom: 0, left: 20 }}
113
+ >
114
+ <YAxis tickCount={7} orientation="right" />
115
+ <Bar dataKey="uv" />
116
+ <ReferenceArea y1={0} y2={2} fill="#999" />
117
+ </BarChart>
118
+ ));
119
+ flush();
120
+ const allAreas = container.querySelectorAll(".recharts-reference-area-rect");
121
+ expect(allAreas).toHaveLength(1);
122
+ const area = allAreas[0]!;
123
+ expect(area).toHaveAttribute("d", "M 20,109.4444 h 960 v 25.5556 h -960 Z");
124
+ });
125
+
126
+ test("Don't render any rect in ReferenceArea when no x1, x2, y1 or y2 is set", () => {
127
+ const { container } = render(() => (
128
+ <BarChart
129
+ width={1100}
130
+ height={250}
131
+ barGap={2}
132
+ barSize={6}
133
+ data={data}
134
+ margin={{ top: 20, right: 60, bottom: 0, left: 20 }}
135
+ >
136
+ <XAxis dataKey="name" orientation="top" />
137
+ <YAxis tickCount={7} orientation="right" />
138
+ <Bar dataKey="uv" />
139
+ <ReferenceArea stroke="#666" label="0" />
140
+ </BarChart>
141
+ ));
142
+ flush();
143
+ expect(container.querySelectorAll(".recharts-reference-area-rect")).toHaveLength(0);
144
+ expect(container.querySelectorAll(".recharts-label")).toHaveLength(0);
145
+ });
146
+
147
+ test("Render a rect in ReferenceArea when x1, x2, y1 or y2 is set", () => {
148
+ const { container } = render(() => (
149
+ <BarChart
150
+ width={1100}
151
+ height={250}
152
+ barGap={2}
153
+ barSize={6}
154
+ data={data}
155
+ margin={{ top: 20, right: 60, bottom: 0, left: 20 }}
156
+ >
157
+ <XAxis dataKey="name" orientation="top" />
158
+ <YAxis tickCount={7} orientation="right" />
159
+ <Bar dataKey="uv" />
160
+ <ReferenceArea x1="201106" stroke="#666" label="0" />
161
+ </BarChart>
162
+ ));
163
+ flush();
164
+ expect(container.querySelectorAll(".recharts-reference-area-rect")).toHaveLength(1);
165
+ expect(container.querySelectorAll(".recharts-label")).toHaveLength(1);
166
+ });
167
+
168
+ test("Don't render any line or label when reference area is outside domain in ReferenceArea", () => {
169
+ const { container } = render(() => (
170
+ <BarChart
171
+ width={1100}
172
+ height={250}
173
+ barGap={2}
174
+ barSize={6}
175
+ data={data}
176
+ margin={{ top: 20, right: 60, bottom: 0, left: 20 }}
177
+ >
178
+ <XAxis dataKey="name" orientation="bottom" />
179
+ <YAxis tickCount={7} orientation="right" />
180
+ <Bar dataKey="uv" />
181
+ <ReferenceArea y1={200} y2={300} fill="#666" />
182
+ <ReferenceArea x1="20150201" x2="20150201" fill="#666" />
183
+ </BarChart>
184
+ ));
185
+ flush();
186
+ expect(container.querySelectorAll(".recharts-reference-area-rect")).toHaveLength(0);
187
+ expect(container.querySelectorAll(".recharts-label")).toHaveLength(0);
188
+ });
189
+
190
+ test('Render line and label when ifOverflow is "extendDomain" in ReferenceArea', () => {
191
+ const { container } = render(() => (
192
+ <BarChart
193
+ width={1100}
194
+ height={250}
195
+ barGap={2}
196
+ barSize={6}
197
+ data={data}
198
+ margin={{ top: 20, right: 60, bottom: 0, left: 20 }}
199
+ >
200
+ <XAxis dataKey="name" />
201
+ <YAxis tickCount={7} />
202
+ <Bar dataKey="uv" />
203
+ <ReferenceArea y1={200} y2={300} fill="#666" ifOverflow="extendDomain" />
204
+ </BarChart>
205
+ ));
206
+ flush();
207
+ expect(container.querySelectorAll(".recharts-reference-area-rect")).toHaveLength(1);
208
+ });
209
+
210
+ describe("label", () => {
211
+ it("should render label defined as a string", () => {
212
+ const { container } = render(() => (
213
+ <BarChart
214
+ width={1100}
215
+ height={250}
216
+ barGap={2}
217
+ barSize={6}
218
+ data={data}
219
+ margin={{ top: 20, right: 60, bottom: 0, left: 20 }}
220
+ >
221
+ <XAxis dataKey="name" orientation="top" />
222
+ <YAxis tickCount={7} orientation="right" />
223
+ <Bar dataKey="uv" />
224
+ <ReferenceArea x1="201106" x2="201110" fill="#666" label="My label text" />
225
+ </BarChart>
226
+ ));
227
+ flush();
228
+ expect(container.querySelectorAll(".recharts-label")).toHaveLength(1);
229
+ expect(screen.getByText("My label text")).toBeVisible();
230
+ });
231
+
232
+ it("should render label defined as a number", () => {
233
+ const { container } = render(() => (
234
+ <BarChart
235
+ width={1100}
236
+ height={250}
237
+ barGap={2}
238
+ barSize={6}
239
+ data={data}
240
+ margin={{ top: 20, right: 60, bottom: 0, left: 20 }}
241
+ >
242
+ <XAxis dataKey="name" orientation="top" />
243
+ <YAxis tickCount={7} orientation="right" />
244
+ <Bar dataKey="uv" />
245
+ <ReferenceArea x1="201106" x2="201110" fill="#666" label={2024} />
246
+ </BarChart>
247
+ ));
248
+ flush();
249
+ expect(container.querySelectorAll(".recharts-label")).toHaveLength(1);
250
+ expect(screen.getByText("2024")).toBeVisible();
251
+ });
252
+
253
+ it("should render label defined as a Label props object", () => {
254
+ const { container } = render(() => (
255
+ <BarChart
256
+ width={1100}
257
+ height={250}
258
+ barGap={2}
259
+ barSize={6}
260
+ data={data}
261
+ margin={{ top: 20, right: 60, bottom: 0, left: 20 }}
262
+ >
263
+ <XAxis dataKey="name" orientation="top" />
264
+ <YAxis tickCount={7} orientation="right" />
265
+ <Bar dataKey="uv" />
266
+ <ReferenceArea
267
+ x1="201106"
268
+ x2="201110"
269
+ fill="#666"
270
+ label={{ value: "This is not documented by it works perfectly fine", offset: 8 }}
271
+ />
272
+ </BarChart>
273
+ ));
274
+ flush();
275
+ expect(container.querySelectorAll(".recharts-label")).toHaveLength(1);
276
+ expect(screen.getByText("This is not documented by it works perfectly fine")).toBeVisible();
277
+ });
278
+
279
+ test("Render 1 line and 1 label when label is a function", () => {
280
+ // Solid render-prop form: recharts reads top-level props.x/props.y, which
281
+ // the Solid Label content fn surfaces under `viewBox` instead. The original
282
+ // assertions never check x/y, so the label renders a static <text>.
283
+ const renderLabel = (): JSX.Element => (
284
+ <text class="customized-reference-area-label">My custom label text</text>
285
+ );
286
+ const { container } = render(() => (
287
+ <BarChart
288
+ width={1100}
289
+ height={250}
290
+ barGap={2}
291
+ barSize={6}
292
+ data={data}
293
+ margin={{ top: 20, right: 60, bottom: 0, left: 20 }}
294
+ >
295
+ <XAxis dataKey="name" />
296
+ <YAxis tickCount={7} />
297
+ <Bar dataKey="uv" />
298
+ <ReferenceArea x1="201106" x2="201110" fill="#666" label={renderLabel} />
299
+ </BarChart>
300
+ ));
301
+ flush();
302
+ expect(container.querySelectorAll(".recharts-reference-area-rect")).toHaveLength(1);
303
+ expect(container.querySelectorAll(".customized-reference-area-label")).toHaveLength(1);
304
+ expect(screen.getByText("My custom label text")).toBeVisible();
305
+ });
306
+
307
+ test.each([true, false])("should not render label when label=%s", (label) => {
308
+ const { container } = render(() => (
309
+ <BarChart
310
+ width={1100}
311
+ height={250}
312
+ barGap={2}
313
+ barSize={6}
314
+ data={data}
315
+ margin={{ top: 20, right: 60, bottom: 0, left: 20 }}
316
+ >
317
+ <XAxis dataKey="name" />
318
+ <YAxis tickCount={7} />
319
+ <Bar dataKey="uv" />
320
+ <ReferenceArea x1="201106" x2="201110" fill="#666" label={label} />
321
+ </BarChart>
322
+ ));
323
+ flush();
324
+ expect(container.querySelectorAll(".recharts-label")).toHaveLength(0);
325
+ });
326
+ });
327
+
328
+ describe("shape", () => {
329
+ it("should render rectangle when shape is not defined", () => {
330
+ const { container } = render(() => (
331
+ <BarChart width={200} height={200} data={data}>
332
+ <XAxis dataKey="name" />
333
+ <YAxis />
334
+ <Bar dataKey="uv" />
335
+ <ReferenceArea
336
+ x1="201106"
337
+ x2="201110"
338
+ fill="#666"
339
+ radius={20}
340
+ strokeWidth={3}
341
+ fillOpacity={0.7}
342
+ stroke="yellow"
343
+ />
344
+ </BarChart>
345
+ ));
346
+ flush();
347
+ const allAreas = container.querySelectorAll(".recharts-reference-area-rect");
348
+ expect(allAreas).toHaveLength(1);
349
+ const area = allAreas[0]!;
350
+ expect.soft(area).toHaveAttribute("x", "112.2727");
351
+ expect.soft(area).toHaveAttribute("y", "5");
352
+ expect.soft(area).toHaveAttribute("width", "59.0909");
353
+ expect.soft(area).toHaveAttribute("height", "160");
354
+ expect.soft(area).toHaveAttribute("radius", "20");
355
+ expect.soft(area).toHaveAttribute("x1", "201106");
356
+ expect.soft(area).toHaveAttribute("x2", "201110");
357
+ expect.soft(area).toHaveAttribute("fill", "#666");
358
+ expect.soft(area).toHaveAttribute("stroke-width", "3");
359
+ expect.soft(area).toHaveAttribute("fill-opacity", "0.7");
360
+ expect.soft(area).toHaveAttribute("stroke", "yellow");
361
+ expect.soft(area).toHaveAttribute("class", "recharts-rectangle recharts-reference-area-rect");
362
+ });
363
+
364
+ it("should render if shape is a function", () => {
365
+ render(() => (
366
+ <BarChart width={200} height={200} data={data}>
367
+ <XAxis dataKey="name" />
368
+ <YAxis />
369
+ <Bar dataKey="uv" />
370
+ <ReferenceArea
371
+ x1="201106"
372
+ x2="201110"
373
+ fill="#666"
374
+ shape={() => <g data-testid="my-custom-shape" />}
375
+ radius={10}
376
+ strokeWidth={3}
377
+ />
378
+ </BarChart>
379
+ ));
380
+ flush();
381
+ const area = screen.getByTestId("my-custom-shape");
382
+ expect(area).toBeVisible();
383
+ });
384
+
385
+ it("should pass arguments to the shape function", () => {
386
+ const spy = vi.fn();
387
+ render(() => (
388
+ <BarChart width={200} height={200} data={data}>
389
+ <XAxis dataKey="name" />
390
+ <YAxis />
391
+ <Bar dataKey="uv" />
392
+ <ReferenceArea
393
+ x1="201106"
394
+ x2="201110"
395
+ fill="#666"
396
+ shape={spy}
397
+ radius={10}
398
+ strokeWidth={3}
399
+ />
400
+ </BarChart>
401
+ ));
402
+ flush();
403
+ expect(spy).toHaveBeenLastCalledWith({
404
+ clipPath: undefined,
405
+ fill: "#666",
406
+ fillOpacity: 0.5,
407
+ height: 160,
408
+ radius: 10,
409
+ stroke: "none",
410
+ strokeWidth: 3,
411
+ width: 59.09090909090909,
412
+ x: 112.27272727272728,
413
+ x1: "201106",
414
+ x2: "201110",
415
+ y: 5,
416
+ });
417
+ });
418
+
419
+ it("should pass clip-path when ifOverflow=hidden", () => {
420
+ const { container } = render(() => (
421
+ <BarChart width={200} height={200} data={data}>
422
+ <XAxis dataKey="name" />
423
+ <YAxis />
424
+ <Bar dataKey="uv" />
425
+ <ReferenceArea x1="201106" x2="201110" ifOverflow="hidden" />
426
+ </BarChart>
427
+ ));
428
+ flush();
429
+ const allAreas = container.querySelectorAll(".recharts-reference-area-rect");
430
+ expect(allAreas).toHaveLength(1);
431
+ const area = allAreas[0]!;
432
+ expect(area).toHaveAttribute("clip-path");
433
+ expect(area.getAttribute("clip-path")).toMatch(/url\(#recharts(\d+)-clip\)/);
434
+ });
435
+
436
+ test.each(["discard", "extendDomain", "visible"] satisfies ReadonlyArray<IfOverflow>)(
437
+ "should pass no clip-path when ifOverflow=%s",
438
+ (ifOverflow) => {
439
+ const { container } = render(() => (
440
+ <BarChart width={200} height={200} data={data}>
441
+ <XAxis dataKey="name" />
442
+ <YAxis />
443
+ <Bar dataKey="uv" />
444
+ <ReferenceArea x1="201106" x2="201110" ifOverflow={ifOverflow} />
445
+ </BarChart>
446
+ ));
447
+ flush();
448
+ const allAreas = container.querySelectorAll(".recharts-reference-area-rect");
449
+ expect(allAreas).toHaveLength(1);
450
+ const area = allAreas[0]!;
451
+ expect(area).not.toHaveAttribute("clip-path");
452
+ },
453
+ );
454
+
455
+ it("should discard rect shape if it does not fit on the domain and ifOverflow=discard", () => {
456
+ const { container } = render(() => (
457
+ <BarChart width={200} height={200} data={data}>
458
+ <XAxis dataKey="name" />
459
+ <YAxis />
460
+ <Bar dataKey="uv" />
461
+ <ReferenceArea y1={100} y2={200} ifOverflow="discard" />
462
+ </BarChart>
463
+ ));
464
+ flush();
465
+ const allAreas = container.querySelectorAll(".recharts-reference-area-rect");
466
+ expect(allAreas).toHaveLength(0);
467
+ });
468
+
469
+ test.each(["extendDomain", "visible", "hidden"] satisfies ReadonlyArray<IfOverflow>)(
470
+ "should draw the shape if it does not fit on the domain and ifOverflow=%s",
471
+ (ifOverflow) => {
472
+ const { container } = render(() => (
473
+ <BarChart width={200} height={200} data={data}>
474
+ <XAxis dataKey="name" />
475
+ <YAxis />
476
+ <Bar dataKey="uv" />
477
+ <ReferenceArea y1={100} y2={200} ifOverflow={ifOverflow} />
478
+ </BarChart>
479
+ ));
480
+ flush();
481
+ const allAreas = container.querySelectorAll(".recharts-reference-area-rect");
482
+ expect(allAreas).toHaveLength(1);
483
+ },
484
+ );
485
+ });
486
+
487
+ describe("events", () => {
488
+ it("should fire event handlers when provided", () => {
489
+ const onClick = vi.fn();
490
+ const onMouseEnter = vi.fn();
491
+ const onMouseLeave = vi.fn();
492
+ const onMouseOver = vi.fn();
493
+ const onMouseOut = vi.fn();
494
+ const onMouseMove = vi.fn();
495
+ const onTouchStart = vi.fn();
496
+ const onTouchMove = vi.fn();
497
+ const onTouchEnd = vi.fn();
498
+
499
+ const { container } = render(() => (
500
+ <LineChart
501
+ width={100}
502
+ height={100}
503
+ data={[
504
+ { x: 0, y: 0 },
505
+ { x: 1, y: 1 },
506
+ ]}
507
+ >
508
+ <YAxis dataKey="y" />
509
+ <XAxis dataKey="x" />
510
+ <ReferenceArea
511
+ x1={0}
512
+ y1={0}
513
+ x2={1}
514
+ y2={1}
515
+ onClick={onClick}
516
+ onMouseEnter={onMouseEnter}
517
+ onMouseLeave={onMouseLeave}
518
+ onMouseOver={onMouseOver}
519
+ onMouseOut={onMouseOut}
520
+ onMouseMove={onMouseMove}
521
+ onTouchStart={onTouchStart}
522
+ onTouchMove={onTouchMove}
523
+ onTouchEnd={onTouchEnd}
524
+ />
525
+ </LineChart>
526
+ ));
527
+ flush();
528
+
529
+ const dot = container.querySelector(".recharts-reference-area-rect");
530
+ assertNotNull(dot);
531
+
532
+ fireEvent.click(dot);
533
+ expect(onClick).toHaveBeenCalledTimes(1);
534
+ expect(onClick).toHaveBeenLastCalledWith(expect.objectContaining({ type: "click" }));
535
+
536
+ fireEvent.mouseEnter(dot);
537
+ expect(onMouseEnter).toHaveBeenCalledTimes(1);
538
+ expect(onMouseEnter).toHaveBeenLastCalledWith(
539
+ expect.objectContaining({ type: "mouseenter" }),
540
+ );
541
+
542
+ fireEvent.mouseOver(dot);
543
+ expect(onMouseOver).toHaveBeenCalledTimes(1);
544
+ expect(onMouseOver).toHaveBeenLastCalledWith(expect.objectContaining({ type: "mouseover" }));
545
+
546
+ fireEvent.mouseLeave(dot);
547
+ expect(onMouseLeave).toHaveBeenCalledTimes(1);
548
+ expect(onMouseLeave).toHaveBeenLastCalledWith(
549
+ expect.objectContaining({ type: "mouseleave" }),
550
+ );
551
+
552
+ fireEvent.mouseOut(dot);
553
+ expect(onMouseOut).toHaveBeenCalledTimes(1);
554
+ expect(onMouseOut).toHaveBeenLastCalledWith(expect.objectContaining({ type: "mouseout" }));
555
+
556
+ fireEvent.mouseMove(dot);
557
+ expect(onMouseMove).toHaveBeenCalledTimes(1);
558
+ expect(onMouseMove).toHaveBeenLastCalledWith(expect.objectContaining({ type: "mousemove" }));
559
+
560
+ fireEvent.touchStart(dot);
561
+ expect(onTouchStart).toHaveBeenCalledTimes(1);
562
+ expect(onTouchStart).toHaveBeenLastCalledWith(
563
+ expect.objectContaining({ type: "touchstart" }),
564
+ );
565
+
566
+ fireEvent.touchMove(dot);
567
+ expect(onTouchMove).toHaveBeenCalledTimes(1);
568
+ expect(onTouchMove).toHaveBeenLastCalledWith(expect.objectContaining({ type: "touchmove" }));
569
+
570
+ fireEvent.touchEnd(dot);
571
+ expect(onTouchEnd).toHaveBeenCalledTimes(1);
572
+ expect(onTouchEnd).toHaveBeenLastCalledWith(expect.objectContaining({ type: "touchend" }));
573
+ });
574
+ });
575
+
576
+ describe("state integration", () => {
577
+ it("should report its settings to Redux state, and remove it after removing from DOM", () => {
578
+ const areaSpy = vi.fn();
579
+ const [showArea, setShowArea] = createSignal(true);
580
+ const Comp = (): null => {
581
+ const areas = useAppSelector((state) => selectReferenceAreasByAxis(state, "yAxis", 0));
582
+ createEffect(
583
+ () => areas(),
584
+ (v) => areaSpy(v),
585
+ );
586
+ return null;
587
+ };
588
+ // The reference wraps this in a BarChart whose <Bar> only anchors the
589
+ // chart; the settings report (the actual assertion) is independent of any
590
+ // graphical item. We use the minimal LineChart shell (matching the
591
+ // ReferenceDot port) so the toggle-driven removal doesn't re-trigger Bar's
592
+ // animation manager — a Bar-internal effect that, under the store update
593
+ // from disposal, would create an owner-less effect (NO_OWNER_EFFECT).
594
+ render(() => (
595
+ <LineChart width={200} height={200}>
596
+ <XAxis dataKey="name" />
597
+ <YAxis />
598
+ <Show when={showArea()}>
599
+ <ReferenceArea
600
+ y1={1}
601
+ y2={2}
602
+ x1="category 3"
603
+ x2="category 4"
604
+ ifOverflow="extendDomain"
605
+ />
606
+ </Show>
607
+ <Comp />
608
+ </LineChart>
609
+ ));
610
+ flush();
611
+
612
+ expect(areaSpy).toHaveBeenLastCalledWith([
613
+ {
614
+ // `id` is a documented Solid deviation: recharts matches reference
615
+ // elements by object identity; Solid store proxies break that, so the
616
+ // port mints a stable id for proxy-safe removal.
617
+ id: expect.stringMatching(/^recharts-reference-area-/) as unknown as string,
618
+ ifOverflow: "extendDomain",
619
+ x1: "category 3",
620
+ x2: "category 4",
621
+ xAxisId: 0,
622
+ y1: 1,
623
+ y2: 2,
624
+ yAxisId: 0,
625
+ },
626
+ ]);
627
+
628
+ setShowArea(false);
629
+ flush();
630
+
631
+ expect(areaSpy).toHaveBeenLastCalledWith([]);
632
+ });
633
+ });
634
+
635
+ describe("multiple axes", () => {
636
+ // The port resolves the x/y scales per-axis via selectAxisScale(state, axis,
637
+ // xAxisId/yAxisId, …). A reference area targeting a non-default axis id must map
638
+ // through THAT axis' scale: y1..y2 = 120..180 lives inside the "right" domain
639
+ // (0..200) but is out of range of the default "left" domain (0..20), so with
640
+ // ifOverflow="discard" (default) only the correctly-targeted area survives.
641
+ const multiAxisData = [
642
+ { name: "A", pv: 10, uv: 100 },
643
+ { name: "B", pv: 20, uv: 200 },
644
+ ];
645
+
646
+ it("should map the reference area through the targeted axis' scale", () => {
647
+ const { container } = render(() => (
648
+ <BarChart width={500} height={400} data={multiAxisData}>
649
+ <XAxis dataKey="name" />
650
+ <YAxis yAxisId="left" />
651
+ <YAxis yAxisId="right" orientation="right" />
652
+ <Bar dataKey="pv" yAxisId="left" />
653
+ <Bar dataKey="uv" yAxisId="right" />
654
+ <ReferenceArea y1={120} y2={180} yAxisId="right" fill="#666" />
655
+ <ReferenceArea y1={120} y2={180} yAxisId="left" fill="#f00" />
656
+ </BarChart>
657
+ ));
658
+ flush();
659
+ // Only the area targeting the "right" axis (domain 0..200) is in range.
660
+ expect(container.querySelectorAll(".recharts-reference-area-rect")).toHaveLength(1);
661
+ });
662
+ });
663
+ });