solid-recharts 1.0.0 → 2.0.0-beta.1

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 (488) hide show
  1. package/package.json +4 -6
  2. package/src/animation/AnimatedItems.tsx +4 -2
  3. package/src/animation/CSSTransitionAnimate.tsx +39 -41
  4. package/src/animation/JavascriptAnimate.tsx +41 -45
  5. package/src/cartesian/Area.tsx +4 -4
  6. package/src/cartesian/AreaRevealShape.tsx +1 -1
  7. package/src/cartesian/Bar.tsx +21 -33
  8. package/src/cartesian/BarStack.tsx +5 -5
  9. package/src/cartesian/Brush.tsx +15 -19
  10. package/src/cartesian/CartesianAxis.tsx +4 -4
  11. package/src/cartesian/CartesianGrid.tsx +5 -5
  12. package/src/cartesian/ErrorBar.tsx +7 -9
  13. package/src/cartesian/Funnel.tsx +3 -3
  14. package/src/cartesian/GraphicalItemClipPath.tsx +1 -1
  15. package/src/cartesian/Line.tsx +16 -18
  16. package/src/cartesian/LineDrawShape.tsx +13 -14
  17. package/src/cartesian/ReferenceArea.tsx +4 -4
  18. package/src/cartesian/ReferenceDot.tsx +4 -4
  19. package/src/cartesian/ReferenceLine.tsx +4 -4
  20. package/src/cartesian/RenderedTicksReporter.tsx +17 -19
  21. package/src/cartesian/Scatter.tsx +3 -3
  22. package/src/cartesian/XAxis.tsx +1 -1
  23. package/src/cartesian/YAxis.tsx +33 -35
  24. package/src/cartesian/ZAxis.tsx +2 -3
  25. package/src/chart/AreaChart.tsx +1 -1
  26. package/src/chart/BarChart.tsx +1 -1
  27. package/src/chart/CartesianChart.tsx +3 -4
  28. package/src/chart/CategoricalChart.tsx +5 -5
  29. package/src/chart/ComposedChart.tsx +1 -1
  30. package/src/chart/FunnelChart.tsx +1 -1
  31. package/src/chart/LineChart.tsx +1 -1
  32. package/src/chart/PieChart.tsx +3 -4
  33. package/src/chart/PolarChart.tsx +3 -4
  34. package/src/chart/RadarChart.tsx +3 -4
  35. package/src/chart/RadialBarChart.tsx +3 -7
  36. package/src/chart/RechartsWrapper.tsx +24 -14
  37. package/src/chart/Sankey.tsx +6 -9
  38. package/src/chart/ScatterChart.tsx +1 -1
  39. package/src/chart/SunburstChart.tsx +4 -5
  40. package/src/chart/Treemap.tsx +4 -5
  41. package/src/component/ActivePoints.tsx +6 -6
  42. package/src/component/Cell.tsx +5 -23
  43. package/src/component/Cursor.tsx +3 -3
  44. package/src/component/DefaultLegendContent.tsx +6 -8
  45. package/src/component/DefaultTooltipContent.tsx +10 -14
  46. package/src/component/Dots.tsx +5 -5
  47. package/src/component/Label.tsx +10 -13
  48. package/src/component/LabelList.tsx +7 -12
  49. package/src/component/Legend.tsx +21 -26
  50. package/src/component/ResponsiveContainer.tsx +49 -52
  51. package/src/component/Text.tsx +5 -5
  52. package/src/component/Tooltip.tsx +18 -21
  53. package/src/component/TooltipBoundingBox.tsx +16 -18
  54. package/src/component/responsiveContainerUtils.ts +1 -1
  55. package/src/container/ClipPathProvider.tsx +3 -3
  56. package/src/container/Layer.tsx +5 -5
  57. package/src/container/RootSurface.tsx +1 -1
  58. package/src/container/Surface.tsx +6 -5
  59. package/src/context/ErrorBarContext.tsx +2 -2
  60. package/src/context/PanoramaContext.tsx +2 -2
  61. package/src/context/RegisterGraphicalItemId.tsx +2 -4
  62. package/src/context/chartDataContext.tsx +23 -26
  63. package/src/context/chartLayoutContext.tsx +12 -16
  64. package/src/polar/Pie.tsx +12 -13
  65. package/src/polar/PolarAngleAxis.tsx +3 -3
  66. package/src/polar/PolarGrid.tsx +5 -5
  67. package/src/polar/PolarRadiusAxis.tsx +3 -3
  68. package/src/polar/Radar.tsx +3 -3
  69. package/src/polar/RadialBar.tsx +3 -3
  70. package/src/shape/Cross.tsx +5 -5
  71. package/src/shape/Curve.tsx +7 -6
  72. package/src/shape/Dot.tsx +4 -4
  73. package/src/shape/Polygon.tsx +5 -5
  74. package/src/shape/Rectangle.tsx +20 -22
  75. package/src/shape/Sector.tsx +5 -5
  76. package/src/shape/Symbols.tsx +5 -5
  77. package/src/shape/Trapezoid.tsx +27 -29
  78. package/src/state/RechartsStoreProvider.tsx +3 -5
  79. package/src/state/ReportChartProps.tsx +6 -8
  80. package/src/state/ReportEventSettings.tsx +6 -8
  81. package/src/state/ReportMainChartProps.tsx +9 -11
  82. package/src/state/ReportPolarOptions.tsx +13 -15
  83. package/src/state/SetLegendPayload.ts +1 -1
  84. package/src/state/SetTooltipEntrySettings.tsx +1 -1
  85. package/src/state/brushSlice.ts +8 -10
  86. package/src/state/cartesianAxisSlice.ts +38 -46
  87. package/src/state/chartDataSlice.ts +23 -29
  88. package/src/state/errorBarSlice.ts +16 -22
  89. package/src/state/eventSettingsSlice.ts +9 -11
  90. package/src/state/graphicalItemsSlice.ts +13 -17
  91. package/src/state/layoutSlice.ts +19 -27
  92. package/src/state/legendSlice.ts +18 -24
  93. package/src/state/optionsSlice.ts +6 -8
  94. package/src/state/polarAxisSlice.ts +13 -21
  95. package/src/state/polarOptionsSlice.ts +14 -16
  96. package/src/state/referenceElementsSlice.ts +19 -25
  97. package/src/state/registerInStore.ts +13 -15
  98. package/src/state/renderedTicksSlice.ts +7 -11
  99. package/src/state/rootPropsSlice.ts +14 -16
  100. package/src/state/tooltipSlice.ts +95 -115
  101. package/src/state/unregisterOnCleanup.ts +20 -5
  102. package/src/state/zIndexSlice.ts +42 -50
  103. package/src/synchronisation/useChartSynchronisation.tsx +217 -213
  104. package/src/util/ActiveShapeUtils.tsx +2 -2
  105. package/src/util/BarUtils.tsx +3 -5
  106. package/src/util/FunnelUtils.tsx +1 -1
  107. package/src/util/RadialBarUtils.tsx +3 -4
  108. package/src/util/createCartesianCharts.tsx +1 -1
  109. package/src/util/createPolarCharts.tsx +1 -1
  110. package/src/util/svgPropertiesAndEvents.ts +1 -1
  111. package/src/util/tooltip/translate.ts +2 -2
  112. package/src/util/types.ts +2 -2
  113. package/src/zIndex/ZIndexLayer.tsx +68 -39
  114. package/src/zIndex/ZIndexPortal.tsx +25 -29
  115. package/test/_data.ts +408 -0
  116. package/test/animation/AnimationController.typed.spec.ts +53 -0
  117. package/test/animation/AnimationControllerImpl.spec.ts +271 -0
  118. package/test/animation/CSSTransitionAnimate.timing.spec.tsx +473 -0
  119. package/test/animation/JavascriptAnimate.spec.tsx +62 -0
  120. package/test/animation/RechartsAnimation.spec.ts +636 -0
  121. package/test/animation/easing.spec.ts +218 -0
  122. package/test/animation/legacyAnimationLengthChange.spec.tsx +803 -0
  123. package/test/animation/matchBy.spec.ts +467 -0
  124. package/test/animation/mockAnimationController.ts +40 -0
  125. package/test/animation/mockControllerAnimationManager.ts +143 -0
  126. package/test/animation/mockTimeoutController.ts +114 -0
  127. package/test/animation/timeoutController.spec.ts +138 -0
  128. package/test/animation/useAnimationStartSnapshot.spec.ts +147 -0
  129. package/test/animation/util.spec.ts +28 -0
  130. package/test/cartesian/Area.animation.spec.tsx +363 -0
  131. package/test/cartesian/Area.range.spec.tsx +54 -0
  132. package/test/cartesian/Area.spec.tsx +1202 -0
  133. package/test/cartesian/Area.stacked.render.spec.tsx +69 -0
  134. package/test/cartesian/Area.typed.spec.tsx +209 -0
  135. package/test/cartesian/Axis.integration.spec.tsx +158 -0
  136. package/test/cartesian/Bar/Bar.csstransition.spec.tsx +299 -0
  137. package/test/cartesian/Bar/Bar.spec.tsx +2314 -0
  138. package/test/cartesian/Bar/Bar.typed.spec.tsx +192 -0
  139. package/test/cartesian/Bar.animation.spec.tsx +426 -0
  140. package/test/cartesian/Bar.stackDomain.spec.tsx +66 -0
  141. package/test/cartesian/Bar.stacked.render.spec.tsx +53 -0
  142. package/test/cartesian/Bar.truncateByDomain.spec.tsx +237 -0
  143. package/test/cartesian/Bar.zeroDimensionFiltering.spec.tsx +336 -0
  144. package/test/cartesian/BarStack.spec.tsx +91 -0
  145. package/test/cartesian/Brush.keyboard.spec.tsx +88 -0
  146. package/test/cartesian/Brush.panorama.spec.tsx +41 -0
  147. package/test/cartesian/Brush.props.spec.tsx +63 -0
  148. package/test/cartesian/Brush.render.spec.tsx +117 -0
  149. package/test/cartesian/Brush.spec.tsx +522 -0
  150. package/test/cartesian/Brush.stacked.spec.tsx +221 -0
  151. package/test/cartesian/CartesianAxis.render.spec.tsx +50 -0
  152. package/test/cartesian/CartesianAxis.spec.tsx +396 -0
  153. package/test/cartesian/CartesianGrid.render.spec.tsx +39 -0
  154. package/test/cartesian/CartesianGrid.spec.tsx +2103 -0
  155. package/test/cartesian/ErrorBar.render.spec.tsx +69 -0
  156. package/test/cartesian/ErrorBar.spec.tsx +2414 -0
  157. package/test/cartesian/Funnel.animation.spec.tsx +241 -0
  158. package/test/cartesian/Funnel.spec.tsx +226 -0
  159. package/test/cartesian/Funnel.typed.spec.tsx +221 -0
  160. package/test/cartesian/GraphicalItemClipPath.scale-behavior.spec.tsx +627 -0
  161. package/test/cartesian/GraphicalItemClipPath.spec.tsx +427 -0
  162. package/test/cartesian/Line.animation.spec.tsx +643 -0
  163. package/test/cartesian/Line.sparseAnimationPath.spec.tsx +98 -0
  164. package/test/cartesian/Line.spec.tsx +471 -0
  165. package/test/cartesian/Line.typed.spec.tsx +152 -0
  166. package/test/cartesian/ReferenceArea.render.spec.tsx +63 -0
  167. package/test/cartesian/ReferenceArea.spec.tsx +663 -0
  168. package/test/cartesian/ReferenceArea.typed.spec.tsx +74 -0
  169. package/test/cartesian/ReferenceDot.render.spec.tsx +55 -0
  170. package/test/cartesian/ReferenceDot.spec.tsx +462 -0
  171. package/test/cartesian/ReferenceDot.typed.spec.tsx +76 -0
  172. package/test/cartesian/ReferenceLine/ReferenceLine.panorama.spec.tsx +184 -0
  173. package/test/cartesian/ReferenceLine/ReferenceLine.spec.tsx +744 -0
  174. package/test/cartesian/ReferenceLine/ReferenceLine.typed.spec.tsx +74 -0
  175. package/test/cartesian/ReferenceLine/getEndPoints.spec.ts +399 -0
  176. package/test/cartesian/ReferenceLine.render.spec.tsx +134 -0
  177. package/test/cartesian/Scatter.animation.spec.tsx +381 -0
  178. package/test/cartesian/Scatter.render.spec.tsx +61 -0
  179. package/test/cartesian/Scatter.spec.tsx +406 -0
  180. package/test/cartesian/Scatter.typed.spec.tsx +153 -0
  181. package/test/cartesian/XAxis/XAxis.barSize.spec.tsx +336 -0
  182. package/test/cartesian/XAxis/XAxis.brush.spec.tsx +266 -0
  183. package/test/cartesian/XAxis/XAxis.categorydomain.spec.tsx +872 -0
  184. package/test/cartesian/XAxis/XAxis.dataKey.spec.tsx +86 -0
  185. package/test/cartesian/XAxis/XAxis.datatypes.spec.tsx +127 -0
  186. package/test/cartesian/XAxis/XAxis.hide.spec.tsx +106 -0
  187. package/test/cartesian/XAxis/XAxis.multiaxis.spec.tsx +336 -0
  188. package/test/cartesian/XAxis/XAxis.numberdomain.spec.tsx +1466 -0
  189. package/test/cartesian/XAxis/XAxis.padding.spec.tsx +758 -0
  190. package/test/cartesian/XAxis/XAxis.padding_clip.spec.tsx +65 -0
  191. package/test/cartesian/XAxis/XAxis.state.spec.tsx +355 -0
  192. package/test/cartesian/XAxis/XAxis.tick.spec.tsx +493 -0
  193. package/test/cartesian/XAxis/XAxis.timescale.spec.tsx +233 -0
  194. package/test/cartesian/XAxis/XAxis.type.spec.tsx +107 -0
  195. package/test/cartesian/XAxis/XAxis.typed.spec.tsx +102 -0
  196. package/test/cartesian/XAxis/XAxis.vertical.spec.tsx +265 -0
  197. package/test/cartesian/XAxis.tickFormatter.spec.tsx +54 -0
  198. package/test/cartesian/YAxis/YAxis.7362.derivedDomain.spec.tsx +230 -0
  199. package/test/cartesian/YAxis/YAxis.7362.spec.tsx +104 -0
  200. package/test/cartesian/YAxis/YAxis.interval-zero.spec.tsx +88 -0
  201. package/test/cartesian/YAxis/YAxis.label.spec.tsx +219 -0
  202. package/test/cartesian/YAxis/YAxis.spec.tsx +1595 -0
  203. package/test/cartesian/YAxis/YAxis.tick.spec.tsx +428 -0
  204. package/test/cartesian/YAxis/YAxis.tickFormatter.spec.tsx +54 -0
  205. package/test/cartesian/YAxis/YAxis.ticks.spec.tsx +263 -0
  206. package/test/cartesian/YAxis/YAxis.type.spec.tsx +107 -0
  207. package/test/cartesian/YAxis/YAxis.typed.spec.tsx +102 -0
  208. package/test/cartesian/ZAxis.spec.tsx +300 -0
  209. package/test/cartesian/ZAxis.typed.spec.tsx +33 -0
  210. package/test/cartesian/__snapshots__/Brush.spec.tsx.snap +5 -0
  211. package/test/cartesian/axisLineAndStroke.spec.tsx +72 -0
  212. package/test/cartesian/getCartesianPosition.spec.ts +907 -0
  213. package/test/cartesian/getEquidistantTicks.spec.ts +88 -0
  214. package/test/cartesian/getTicks.spec.ts +378 -0
  215. package/test/cartesian/miscFeatureGaps.spec.tsx +89 -0
  216. package/test/cartesian/useAnimatedLineLength.spec.ts +168 -0
  217. package/test/chart/AccessibilityLayer.spec.tsx +569 -0
  218. package/test/chart/AccessibilityScans.spec.tsx +286 -0
  219. package/test/chart/AreaChart.spec.tsx +409 -0
  220. package/test/chart/AreaChart.stacked.spec.tsx +1407 -0
  221. package/test/chart/AreaChart.typed.spec.tsx +39 -0
  222. package/test/chart/BarChart.spec.tsx +3719 -0
  223. package/test/chart/BarChart.typed.spec.tsx +60 -0
  224. package/test/chart/CategoricalChart.spec.tsx +255 -0
  225. package/test/chart/ComposedChart.spec.tsx +199 -0
  226. package/test/chart/ComposedChart.typed.spec.tsx +39 -0
  227. package/test/chart/FunnelChart.spec.tsx +215 -0
  228. package/test/chart/FunnelChart.typed.spec.tsx +39 -0
  229. package/test/chart/LineChart.multiseries.spec.tsx +50 -0
  230. package/test/chart/LineChart.smoke.spec.tsx +50 -0
  231. package/test/chart/LineChart.spec.tsx +930 -0
  232. package/test/chart/LineChart.typed.spec.tsx +39 -0
  233. package/test/chart/NicheChartTooltip.spec.tsx +81 -0
  234. package/test/chart/PieChart.spec.tsx +793 -0
  235. package/test/chart/PieChart.typed.spec.tsx +39 -0
  236. package/test/chart/RadarChart.spec.tsx +530 -0
  237. package/test/chart/RadarChart.typed.spec.tsx +39 -0
  238. package/test/chart/RadialBarChart.5966.spec.tsx +48 -0
  239. package/test/chart/RadialBarChart.spec.tsx +679 -0
  240. package/test/chart/RadialBarChart.typed.spec.tsx +39 -0
  241. package/test/chart/RechartsWrapper.spec.tsx +83 -0
  242. package/test/chart/Sankey.content.spec.tsx +46 -0
  243. package/test/chart/Sankey.spec.tsx +952 -0
  244. package/test/chart/Sankey.typed.spec.tsx +29 -0
  245. package/test/chart/ScatterChart.spec.tsx +2613 -0
  246. package/test/chart/ScatterChart.typed.spec.tsx +39 -0
  247. package/test/chart/SunburstChart.spec.tsx +146 -0
  248. package/test/chart/Treemap.animation.spec.tsx +52 -0
  249. package/test/chart/Treemap.spec.tsx +1003 -0
  250. package/test/chart/Treemap.typed.spec.tsx +26 -0
  251. package/test/chart/chartEvents.spec.tsx +127 -0
  252. package/test/chart/responsive.spec.tsx +620 -0
  253. package/test/component/Cell.render.spec.tsx +155 -0
  254. package/test/component/Cell.spec.tsx +12 -0
  255. package/test/component/Cursor.spec.tsx +186 -0
  256. package/test/component/DefaultTooltipContent.spec.tsx +102 -0
  257. package/test/component/Label.render.spec.tsx +63 -0
  258. package/test/component/Label.spec.tsx +686 -0
  259. package/test/component/Label.typed.spec.tsx +46 -0
  260. package/test/component/LabelList.spec.tsx +188 -0
  261. package/test/component/Legend.itemSorter.spec.tsx +704 -0
  262. package/test/component/Legend.render.spec.tsx +92 -0
  263. package/test/component/Legend.spec.tsx +2213 -0
  264. package/test/component/Legend.typed.spec.tsx +22 -0
  265. package/test/component/ResponsiveContainer.spec.tsx +523 -0
  266. package/test/component/ResponsiveContainerDataTest.spec.tsx +51 -0
  267. package/test/component/Text.spec.tsx +415 -0
  268. package/test/component/Text.typed.spec.tsx +46 -0
  269. package/test/component/Tooltip/ActiveDot.spec.tsx +370 -0
  270. package/test/component/Tooltip/Tooltip.animation.spec.tsx +209 -0
  271. package/test/component/Tooltip/Tooltip.content.spec.tsx +128 -0
  272. package/test/component/Tooltip/Tooltip.formatter.spec.tsx +152 -0
  273. package/test/component/Tooltip/Tooltip.includeHidden.spec.tsx +79 -0
  274. package/test/component/Tooltip/Tooltip.multipleDataArrays.spec.tsx +165 -0
  275. package/test/component/Tooltip/Tooltip.offset.spec.tsx +113 -0
  276. package/test/component/Tooltip/Tooltip.state.spec.tsx +74 -0
  277. package/test/component/Tooltip/Tooltip.sync.spec.tsx +639 -0
  278. package/test/component/Tooltip/defaultIndex.spec.tsx +227 -0
  279. package/test/component/Tooltip/graphicalItem.formatter.spec.tsx +138 -0
  280. package/test/component/Tooltip/itemSorter.spec.tsx +2815 -0
  281. package/test/component/Tooltip/tooltipEventType.spec.tsx +344 -0
  282. package/test/component/Tooltip/tooltipMouseHoverSelectors.ts +41 -0
  283. package/test/component/Tooltip/tooltipTestHelpers.tsx +162 -0
  284. package/test/component/Tooltip.defaultIndex.spec.tsx +48 -0
  285. package/test/component/Tooltip.hover.spec.tsx +61 -0
  286. package/test/component/Tooltip.item.spec.tsx +54 -0
  287. package/test/component/Tooltip.keyboard.spec.tsx +51 -0
  288. package/test/component/Tooltip.payload.spec.tsx +1716 -0
  289. package/test/component/Tooltip.touch.spec.tsx +39 -0
  290. package/test/component/Tooltip.visibility.spec.tsx +1889 -0
  291. package/test/component/TooltipBoundingBox.spec.tsx +89 -0
  292. package/test/component/responsiveContainerUtils.spec.ts +205 -0
  293. package/test/container/ClipPath.spec.tsx +602 -0
  294. package/test/container/chartDimensions.spec.tsx +368 -0
  295. package/test/context/chartLayoutContext.spec.tsx +378 -0
  296. package/test/helper/ExpectAxisDomain.tsx +27 -0
  297. package/test/helper/assertNotNull.ts +6 -0
  298. package/test/helper/assertZIndexLayerOrder.ts +19 -0
  299. package/test/helper/createSelectorTestCase.tsx +176 -0
  300. package/test/helper/expectAnimatedPieAngles.ts +100 -0
  301. package/test/helper/expectAnimatedPiePaths.ts +78 -0
  302. package/test/helper/expectAreaCurve.ts +15 -0
  303. package/test/helper/expectAxisTicks.ts +48 -0
  304. package/test/helper/expectBars.ts +54 -0
  305. package/test/helper/expectFunctionReturning.ts +58 -0
  306. package/test/helper/expectLabel.ts +32 -0
  307. package/test/helper/expectLastCalledWith.ts +48 -0
  308. package/test/helper/expectLine.ts +20 -0
  309. package/test/helper/expectPieSectors.ts +80 -0
  310. package/test/helper/expectScale.ts +37 -0
  311. package/test/helper/expectScatterPoints.ts +52 -0
  312. package/test/helper/expectStackGroups.ts +144 -0
  313. package/test/helper/mockAxes.ts +22 -0
  314. package/test/helper/mockGetBoundingClientRect.ts +66 -0
  315. package/test/helper/mockHTMLElementProperty.ts +19 -0
  316. package/test/helper/mockTouchingElement.ts +27 -0
  317. package/test/helper/offsetHelpers.ts +19 -0
  318. package/test/helper/parameterizedTestCases.tsx +99 -0
  319. package/test/helper/produceState.ts +32 -0
  320. package/test/helper/selectorTestHelpers.tsx +63 -0
  321. package/test/helper/trim.spec.ts +35 -0
  322. package/test/helper/trim.ts +11 -0
  323. package/test/hooks/useActiveTooltipDataPoints.spec.tsx +358 -0
  324. package/test/hooks/useAxisDomain.spec.tsx +361 -0
  325. package/test/hooks/useAxisScale.spec.tsx +283 -0
  326. package/test/hooks/useAxisTicks.spec.tsx +130 -0
  327. package/test/hooks/useOffset.spec.tsx +248 -0
  328. package/test/hooks/useTooltipStateHooks.spec.tsx +109 -0
  329. package/test/polar/Pie/Pie-TwoLevelPieChart.spec.tsx +135 -0
  330. package/test/polar/Pie/Pie.spec.tsx +784 -0
  331. package/test/polar/Pie/Pie.typed.spec.tsx +78 -0
  332. package/test/polar/Pie.animation.spec.tsx +529 -0
  333. package/test/polar/PieWithLegend.animation.spec.tsx +142 -0
  334. package/test/polar/PolarAngleAxis/PolarAngleAxis.events.spec.tsx +76 -0
  335. package/test/polar/PolarAngleAxis/PolarAngleAxis.spec.tsx +2079 -0
  336. package/test/polar/PolarAngleAxis/PolarAngleAxis.typed.spec.tsx +102 -0
  337. package/test/polar/PolarAngleAxis.render.spec.tsx +79 -0
  338. package/test/polar/PolarGrid.render.spec.tsx +75 -0
  339. package/test/polar/PolarGrid.spec.tsx +918 -0
  340. package/test/polar/PolarLegendPerRow.render.spec.tsx +85 -0
  341. package/test/polar/PolarRadiusAxis.events.spec.tsx +65 -0
  342. package/test/polar/PolarRadiusAxis.render.spec.tsx +52 -0
  343. package/test/polar/PolarRadiusAxis.spec.tsx +991 -0
  344. package/test/polar/PolarRadiusAxis.typed.spec.tsx +84 -0
  345. package/test/polar/PolarTooltipLegend.render.spec.tsx +80 -0
  346. package/test/polar/Radar.animation.spec.tsx +570 -0
  347. package/test/polar/Radar.render.spec.tsx +71 -0
  348. package/test/polar/Radar.spec.tsx +265 -0
  349. package/test/polar/Radar.typed.spec.tsx +119 -0
  350. package/test/polar/RadialBar/RadialBar.spec.tsx +1521 -0
  351. package/test/polar/RadialBar/RadialBar.typed.spec.tsx +132 -0
  352. package/test/polar/RadialBar.animation.spec.tsx +375 -0
  353. package/test/polar/RadialBar.render.spec.tsx +66 -0
  354. package/test/polar/RadialBar.stacked.spec.tsx +57 -0
  355. package/test/setup.ts +84 -0
  356. package/test/shape/ActiveShape.spec.tsx +181 -0
  357. package/test/shape/Cross.spec.tsx +60 -0
  358. package/test/shape/Cross.typed.spec.tsx +26 -0
  359. package/test/shape/Curve.spec.tsx +368 -0
  360. package/test/shape/Curve.typed.spec.tsx +69 -0
  361. package/test/shape/Dot.spec.tsx +73 -0
  362. package/test/shape/Dot.typed.spec.tsx +30 -0
  363. package/test/shape/Polygon.spec.tsx +357 -0
  364. package/test/shape/Polygon.typed.spec.tsx +28 -0
  365. package/test/shape/Rectangle.animation.spec.tsx +451 -0
  366. package/test/shape/Rectangle.spec.tsx +68 -0
  367. package/test/shape/Rectangle.typed.spec.tsx +24 -0
  368. package/test/shape/Sector.spec.tsx +76 -0
  369. package/test/shape/Sector.typed.spec.tsx +24 -0
  370. package/test/shape/Symbols.spec.tsx +43 -0
  371. package/test/shape/Symbols.typed.spec.tsx +24 -0
  372. package/test/shape/Trapezoid.spec.tsx +50 -0
  373. package/test/shape/Trapezoid.typed.spec.tsx +24 -0
  374. package/test/shape/__snapshots__/Cross.spec.tsx.snap +62 -0
  375. package/test/shape/__snapshots__/Curve.spec.tsx.snap +460 -0
  376. package/test/shape/__snapshots__/Polygon.spec.tsx.snap +58 -0
  377. package/test/shape/__snapshots__/Rectangle.spec.tsx.snap +117 -0
  378. package/test/shape/__snapshots__/Sector.spec.tsx.snap +71 -0
  379. package/test/shape/__snapshots__/Trapezoid.spec.tsx.snap +64 -0
  380. package/test/state/chartDataSlice.spec.ts +53 -0
  381. package/test/state/createCollectionActions.spec.ts +87 -0
  382. package/test/state/createSelector.spec.ts +158 -0
  383. package/test/state/externalEventsMiddleware.spec.ts +178 -0
  384. package/test/state/graphicalItemsSlice.spec.ts +92 -0
  385. package/test/state/hooks.spec.tsx +68 -0
  386. package/test/state/legendSlice.spec.ts +44 -0
  387. package/test/state/mouseEventsMiddleware.spec.ts +75 -0
  388. package/test/state/optionsSlice.spec.ts +19 -0
  389. package/test/state/referenceElementsSlice.spec.ts +84 -0
  390. package/test/state/registerInStore.spec.tsx +101 -0
  391. package/test/state/selectors/areaSelectors.spec.tsx +77 -0
  392. package/test/state/selectors/axisSelectors.spec.tsx +1418 -0
  393. package/test/state/selectors/barStackSelectors.spec.tsx +752 -0
  394. package/test/state/selectors/brushSelectors.spec.tsx +30 -0
  395. package/test/state/selectors/cartesianAxisSlice.spec.ts +96 -0
  396. package/test/state/selectors/combineNiceTicks.spec.ts +207 -0
  397. package/test/state/selectors/combiners/combineActiveTooltipIndex.spec.ts +61 -0
  398. package/test/state/selectors/combiners/combineAllBarPositions.spec.ts +39 -0
  399. package/test/state/selectors/combiners/combineConfiguredScale.spec.ts +56 -0
  400. package/test/state/selectors/combiners/combineDisplayedStackedData.spec.ts +123 -0
  401. package/test/state/selectors/combiners/combineRealScaleType.spec.ts +80 -0
  402. package/test/state/selectors/containerSelectors.spec.tsx +168 -0
  403. package/test/state/selectors/dataSelectors.spec.tsx +136 -0
  404. package/test/state/selectors/legendSelectors.spec.tsx +113 -0
  405. package/test/state/selectors/lineSelectors.spec.tsx +60 -0
  406. package/test/state/selectors/pieSelectors.spec.tsx +72 -0
  407. package/test/state/selectors/radarSelectors.spec.tsx +496 -0
  408. package/test/state/selectors/rootPropsSelectors.spec.tsx +169 -0
  409. package/test/state/selectors/scatterSelectors.spec.tsx +47 -0
  410. package/test/state/selectors/selectActiveTooltipIndex.spec.tsx +234 -0
  411. package/test/state/selectors/selectAllAxes.spec.tsx +18 -0
  412. package/test/state/selectors/selectAxisDomain.spec.tsx +21 -0
  413. package/test/state/selectors/selectAxisDomainIncludingNiceTicks.spec.tsx +19 -0
  414. package/test/state/selectors/selectAxisRangeWithReverse.spec.tsx +22 -0
  415. package/test/state/selectors/selectAxisScale.spec.tsx +91 -0
  416. package/test/state/selectors/selectBarRectangles.stackOffset.spec.tsx +503 -0
  417. package/test/state/selectors/selectBaseAxis.spec.tsx +56 -0
  418. package/test/state/selectors/selectCartesianItemsSettings.spec.tsx +57 -0
  419. package/test/state/selectors/selectChartOffset.spec.tsx +26 -0
  420. package/test/state/selectors/selectDisplayedData.spec.tsx +282 -0
  421. package/test/state/selectors/selectIsTooltipActive.spec.tsx +231 -0
  422. package/test/state/selectors/selectNumericalDomain.spec.tsx +21 -0
  423. package/test/state/selectors/selectRealScaleType.spec.tsx +19 -0
  424. package/test/state/selectors/selectStackGroups.spec.tsx +322 -0
  425. package/test/state/selectors/selectXAxisPosition.spec.tsx +22 -0
  426. package/test/state/selectors/selectYAxisPosition.spec.tsx +22 -0
  427. package/test/state/selectors/selectorMemoization.spec.tsx +136 -0
  428. package/test/state/selectors/selectors.spec.tsx +1613 -0
  429. package/test/state/throttling.spec.ts +200 -0
  430. package/test/state/zIndexSlice.spec.ts +85 -0
  431. package/test/synchronisation/useChartSynchronisation.spec.tsx +225 -0
  432. package/test/util/BarUtils.spec.ts +39 -0
  433. package/test/util/CartesianUtils/CartesianUtils.spec.ts +261 -0
  434. package/test/util/CartesianUtils/rectWithPoints.spec.ts +48 -0
  435. package/test/util/ChartUtils/ChartUtils.spec.ts +491 -0
  436. package/test/util/ChartUtils/appendOffsetOfLegend.spec.ts +136 -0
  437. package/test/util/ChartUtils/appendOffsetOfLegend.spec.tsx +133 -0
  438. package/test/util/ChartUtils/getCateCoordinateOfLine.spec.ts +97 -0
  439. package/test/util/ChartUtils/getStackedData.spec.ts +416 -0
  440. package/test/util/ChartUtils/truncateByDomain.spec.ts +70 -0
  441. package/test/util/DataUtils.spec.ts +385 -0
  442. package/test/util/DomUtils.spec.tsx +117 -0
  443. package/test/util/FunnelUtils.spec.tsx +70 -0
  444. package/test/util/Global.spec.ts +11 -0
  445. package/test/util/LRUCache.spec.ts +81 -0
  446. package/test/util/LogUtils.spec.ts +45 -0
  447. package/test/util/PolarUtils.spec.ts +66 -0
  448. package/test/util/ReduceCssCalcPrototype.spec.ts +141 -0
  449. package/test/util/ShallowEqual.spec.ts +102 -0
  450. package/test/util/TickUtils.spec.ts +29 -0
  451. package/test/util/createChartHelpers.spec.tsx +210 -0
  452. package/test/util/cursor/getCursorPoints.spec.ts +136 -0
  453. package/test/util/cursor/getCursorRectangle.spec.ts +50 -0
  454. package/test/util/cursor/getRadialCursorPoints.spec.ts +36 -0
  455. package/test/util/errorValue.spec.ts +69 -0
  456. package/test/util/getEveryNth.spec.ts +39 -0
  457. package/test/util/getRadiusAndStrokeWidthFromDot.spec.ts +51 -0
  458. package/test/util/getRelativeCoordinate.spec.ts +250 -0
  459. package/test/util/getSliced.spec.ts +45 -0
  460. package/test/util/isDomainSpecifiedByUser.spec.ts +207 -0
  461. package/test/util/isWellBehavedNumber.spec.ts +54 -0
  462. package/test/util/payload/getUniqPayload.spec.ts +56 -0
  463. package/test/util/propsAreEqual.spec.ts +75 -0
  464. package/test/util/round.spec.ts +112 -0
  465. package/test/util/scale/arithmetic.spec.ts +61 -0
  466. package/test/util/scale/createCategoricalInverse.spec.ts +84 -0
  467. package/test/util/scale/getNiceTickValues.spec.ts +421 -0
  468. package/test/util/scale/getTickValuesFixedDomain.spec.ts +155 -0
  469. package/test/util/svgPropertiesAndEvents.spec.tsx +206 -0
  470. package/test/util/svgPropertiesNoEvents.spec.tsx +228 -0
  471. package/test/util/tooltip/translate.spec.ts +396 -0
  472. package/test/util/useAnimationId.spec.tsx +59 -0
  473. package/test/util/useElementOffset.spec.tsx +173 -0
  474. package/test/util/usePrefersReducedMotion.spec.ts +54 -0
  475. package/test/util/useUniqueId.spec.ts +99 -0
  476. package/test/utils/diagnostics-allowlist.ts +18 -0
  477. package/test/utils/diagnostics.ts +58 -0
  478. package/test/zIndex/AllZIndexPortals.spec.tsx +83 -0
  479. package/test/zIndex/DefaultZIndexes.spec.ts +80 -0
  480. package/test/zIndex/DynamicZIndex.spec.tsx +102 -0
  481. package/test/zIndex/ZIndexLayer.portalOwner.spec.tsx +125 -0
  482. package/test/zIndex/componentZIndex.spec.tsx +255 -0
  483. package/test/zIndex/getZIndexFromUnknown.spec.ts +51 -0
  484. package/test/zIndex/multiChartZIndexIsolation.spec.tsx +90 -0
  485. package/test/zIndex/zIndexSelectors.spec.ts +172 -0
  486. package/test-results/.last-run.json +4 -0
  487. package/tsconfig.json +11 -0
  488. package/src/util/DirectPortal.tsx +0 -107
@@ -0,0 +1,620 @@
1
+ import { afterEach, beforeEach, describe, expect, it, vi } from "vitest";
2
+ import { flush } from "solid-js";
3
+ import { render } from "@solidjs/testing-library";
4
+ import { mockGetBoundingClientRect } from "../helper/mockGetBoundingClientRect";
5
+ import { createSelectorTestCase } from "../helper/createSelectorTestCase";
6
+ import { expectLastCalledWith } from "../helper/expectLastCalledWith";
7
+ import { PageData } from "../_data";
8
+ import { ComposedChart, Line, ResponsiveContainer, useChartHeight, useChartWidth } from "../../src";
9
+
10
+ /*
11
+ * Ported from recharts 3.8.1 test/chart/responsive.spec.tsx.
12
+ * Solid adaptations: JSX render factory, hook accessors, and flush instead of act.
13
+ */
14
+
15
+ describe("responsive prop", () => {
16
+ let resizeObserverCallback: (entries: ResizeObserverEntry[]) => void;
17
+ let resizeObserverMock: {
18
+ observe: ReturnType<typeof vi.fn>;
19
+ unobserve: ReturnType<typeof vi.fn>;
20
+ disconnect: ReturnType<typeof vi.fn>;
21
+ };
22
+
23
+ beforeEach(() => {
24
+ resizeObserverMock = {
25
+ observe: vi.fn(),
26
+ unobserve: vi.fn(),
27
+ disconnect: vi.fn(),
28
+ };
29
+ mockGetBoundingClientRect({ width: 500, height: 400 });
30
+ vi.stubGlobal(
31
+ "ResizeObserver",
32
+ vi.fn(function ResizeObserverMock(cb: (entries: ResizeObserverEntry[]) => void) {
33
+ resizeObserverCallback = cb;
34
+ return resizeObserverMock;
35
+ }),
36
+ );
37
+ });
38
+
39
+ afterEach(() => {
40
+ vi.unstubAllGlobals();
41
+ });
42
+
43
+ describe.each([false, undefined])("with responsive=%s", (responsive) => {
44
+ describe("when width and height are not specified", () => {
45
+ const renderTestCase = createSelectorTestCase((props) => (
46
+ <ComposedChart responsive={responsive} data={PageData}>
47
+ <Line dataKey="uv" />
48
+ {props.children}
49
+ </ComposedChart>
50
+ ));
51
+
52
+ it("should not render any SVG", () => {
53
+ const { container } = renderTestCase();
54
+ expect(container.querySelector("svg")).toBeNull();
55
+ });
56
+
57
+ it("should render wrapper div", () => {
58
+ const { container } = renderTestCase();
59
+ const wrapperElement = container.querySelector(".recharts-wrapper");
60
+ expect(wrapperElement).toBeInTheDocument();
61
+ expect(wrapperElement).toHaveStyle({
62
+ position: "relative",
63
+ width: undefined,
64
+ height: undefined,
65
+ });
66
+ });
67
+
68
+ it("should not interact with ResizeObserver", () => {
69
+ renderTestCase();
70
+ expect(resizeObserverMock.observe).not.toHaveBeenCalled();
71
+ });
72
+
73
+ it("should not render children", () => {
74
+ const { spy } = renderTestCase(useChartWidth);
75
+ expect(spy).not.toHaveBeenCalled();
76
+ });
77
+ });
78
+
79
+ describe("when width and height are numbers", () => {
80
+ const renderTestCase = createSelectorTestCase((props) => (
81
+ <ComposedChart width={600} height={400} responsive={responsive} data={PageData}>
82
+ <Line dataKey="uv" />
83
+ {props.children}
84
+ </ComposedChart>
85
+ ));
86
+
87
+ it("should render svg with given width and height", () => {
88
+ const { container } = renderTestCase();
89
+ const svg = container.querySelector("svg");
90
+ expect(svg).not.toBeNull();
91
+ expect(svg).toHaveAttribute("width", "600");
92
+ expect(svg).toHaveAttribute("height", "400");
93
+ });
94
+
95
+ it("should render wrapper div with width and height", () => {
96
+ const { container } = renderTestCase();
97
+ const wrapperElement = container.querySelector(".recharts-wrapper");
98
+ expect(wrapperElement).toBeInTheDocument();
99
+ expect(wrapperElement).toHaveStyle({
100
+ position: "relative",
101
+ width: "600px",
102
+ height: "400px",
103
+ });
104
+ });
105
+
106
+ it("should not interact with ResizeObserver", () => {
107
+ renderTestCase();
108
+ expect(resizeObserverMock.observe).not.toHaveBeenCalled();
109
+ });
110
+
111
+ it("should return the width from useChartWidth", () => {
112
+ const { spy } = renderTestCase(useChartWidth);
113
+ expectLastCalledWith(spy, 600);
114
+ });
115
+
116
+ it("should return the height from useChartHeight", () => {
117
+ const { spy } = renderTestCase(useChartHeight);
118
+ expectLastCalledWith(spy, 400);
119
+ });
120
+ });
121
+
122
+ describe("when width and height are percentages", () => {
123
+ const renderTestCase = createSelectorTestCase((props) => (
124
+ <ComposedChart width="50%" height="50%" responsive={responsive} data={PageData}>
125
+ <Line dataKey="uv" />
126
+ {props.children}
127
+ </ComposedChart>
128
+ ));
129
+
130
+ it("should render svg with dimensions from getBoundingClientRect", () => {
131
+ const { container } = renderTestCase();
132
+ const svg = container.querySelector("svg");
133
+ expect(svg).not.toBeNull();
134
+ expect(svg).toHaveAttribute("width", "500");
135
+ expect(svg).toHaveAttribute("height", "400");
136
+ });
137
+
138
+ it("should render wrapper div with width and height", () => {
139
+ const { container } = renderTestCase();
140
+ const wrapperElement = container.querySelector(".recharts-wrapper");
141
+ expect(wrapperElement).toBeInTheDocument();
142
+ expect(wrapperElement).toHaveStyle({
143
+ position: "relative",
144
+ width: "50%",
145
+ height: "50%",
146
+ });
147
+ });
148
+
149
+ it("should not interact with ResizeObserver", () => {
150
+ renderTestCase();
151
+ expect(resizeObserverMock.observe).not.toHaveBeenCalled();
152
+ });
153
+
154
+ it("should return the width from useChartWidth", () => {
155
+ const { spy } = renderTestCase(useChartWidth);
156
+ expectLastCalledWith(spy, 500);
157
+ });
158
+
159
+ it("should return the height from useChartHeight", () => {
160
+ const { spy } = renderTestCase(useChartHeight);
161
+ expectLastCalledWith(spy, 400);
162
+ });
163
+ });
164
+
165
+ describe("when width and height are passed in style prop as numbers", () => {
166
+ const renderTestCase = createSelectorTestCase((props) => (
167
+ <ComposedChart style={{ width: 600, height: 200 }} responsive={responsive} data={PageData}>
168
+ <Line dataKey="uv" />
169
+ {props.children}
170
+ </ComposedChart>
171
+ ));
172
+
173
+ it("should render svg with given width and height", () => {
174
+ const { container } = renderTestCase();
175
+ const svg = container.querySelector("svg");
176
+ expect(svg).not.toBeNull();
177
+ expect(svg).toHaveAttribute("width", "600");
178
+ expect(svg).toHaveAttribute("height", "200");
179
+ });
180
+
181
+ it("should render wrapper div with width and height", () => {
182
+ const { container } = renderTestCase();
183
+ const wrapperElement = container.querySelector(".recharts-wrapper");
184
+ expect(wrapperElement).toBeInTheDocument();
185
+ expect(wrapperElement).toHaveStyle({
186
+ position: "relative",
187
+ width: "600px",
188
+ height: "200px",
189
+ });
190
+ });
191
+
192
+ it("should not interact with ResizeObserver", () => {
193
+ renderTestCase();
194
+ expect(resizeObserverMock.observe).not.toHaveBeenCalled();
195
+ });
196
+
197
+ it("should return the width from useChartWidth", () => {
198
+ const { spy } = renderTestCase(useChartWidth);
199
+ expectLastCalledWith(spy, 600);
200
+ });
201
+
202
+ it("should return the height from useChartHeight", () => {
203
+ const { spy } = renderTestCase(useChartHeight);
204
+ expectLastCalledWith(spy, 200);
205
+ });
206
+ });
207
+
208
+ describe("when width and height are passed in style prop as percentages", () => {
209
+ const renderTestCase = createSelectorTestCase((props) => (
210
+ <ComposedChart
211
+ style={{ width: "50%", height: "50%" }}
212
+ responsive={responsive}
213
+ data={PageData}
214
+ >
215
+ <Line dataKey="uv" />
216
+ {props.children}
217
+ </ComposedChart>
218
+ ));
219
+
220
+ it("should render svg with dimensions from getBoundingClientRect", () => {
221
+ const { container } = renderTestCase();
222
+ const svg = container.querySelector("svg");
223
+ expect(svg).not.toBeNull();
224
+ expect(svg).toHaveAttribute("width", "500");
225
+ expect(svg).toHaveAttribute("height", "400");
226
+ });
227
+
228
+ it("should render wrapper div with width and height", () => {
229
+ const { container } = renderTestCase();
230
+ const wrapperElement = container.querySelector(".recharts-wrapper");
231
+ expect(wrapperElement).toBeInTheDocument();
232
+ expect(wrapperElement).toHaveStyle({
233
+ position: "relative",
234
+ width: "50%",
235
+ height: "50%",
236
+ });
237
+ });
238
+
239
+ it("should not interact with ResizeObserver", () => {
240
+ renderTestCase();
241
+ expect(resizeObserverMock.observe).not.toHaveBeenCalled();
242
+ });
243
+
244
+ it("should return the width from useChartWidth", () => {
245
+ const { spy } = renderTestCase(useChartWidth);
246
+ expectLastCalledWith(spy, 500);
247
+ });
248
+
249
+ it("should return the height from useChartHeight", () => {
250
+ const { spy } = renderTestCase(useChartHeight);
251
+ expectLastCalledWith(spy, 400);
252
+ });
253
+ });
254
+
255
+ describe("when width is a prop and height is from style", () => {
256
+ const renderTestCase = createSelectorTestCase((props) => (
257
+ <ComposedChart width={600} style={{ height: 200 }} responsive={responsive} data={PageData}>
258
+ <Line dataKey="uv" />
259
+ {props.children}
260
+ </ComposedChart>
261
+ ));
262
+
263
+ it("should render svg with combined width and height", () => {
264
+ const { container } = renderTestCase();
265
+ const svg = container.querySelector("svg");
266
+ expect(svg).not.toBeNull();
267
+ expect(svg).toHaveAttribute("width", "600");
268
+ expect(svg).toHaveAttribute("height", "200");
269
+ });
270
+ });
271
+ });
272
+
273
+ describe("with responsive=true", () => {
274
+ describe("when width and height are not specified", () => {
275
+ const renderTestCase = createSelectorTestCase((props) => (
276
+ <ComposedChart responsive data={PageData}>
277
+ <Line dataKey="uv" />
278
+ {props.children}
279
+ </ComposedChart>
280
+ ));
281
+
282
+ it("should render svg with dimensions from getBoundingClientRect", () => {
283
+ const { container } = renderTestCase();
284
+ const svg = container.querySelector("svg");
285
+ expect(svg).not.toBeNull();
286
+ expect(svg).toHaveAttribute("width", "500");
287
+ expect(svg).toHaveAttribute("height", "400");
288
+ });
289
+
290
+ it("should render wrapper div", () => {
291
+ const { container } = renderTestCase();
292
+ const wrapperElement = container.querySelector(".recharts-wrapper");
293
+ expect(wrapperElement).toBeInTheDocument();
294
+ expect(wrapperElement).toHaveStyle({
295
+ position: "relative",
296
+ width: undefined,
297
+ height: undefined,
298
+ });
299
+ });
300
+
301
+ it("should subscribe to ResizeObserver", () => {
302
+ renderTestCase();
303
+ expect(resizeObserverMock.observe).toHaveBeenCalled();
304
+ });
305
+
306
+ it("should unsubscribe from ResizeObserver on unmount", () => {
307
+ const { unmount } = renderTestCase();
308
+ unmount();
309
+ expect(resizeObserverMock.disconnect).toHaveBeenCalled();
310
+ });
311
+
312
+ it("should return the width from useChartWidth", () => {
313
+ const { spy } = renderTestCase(useChartWidth);
314
+ expectLastCalledWith(spy, 500);
315
+ });
316
+
317
+ it("should return the height from useChartHeight", () => {
318
+ const { spy } = renderTestCase(useChartHeight);
319
+ expectLastCalledWith(spy, 400);
320
+ });
321
+ });
322
+
323
+ describe("when width and height are numbers", () => {
324
+ beforeEach(() => {
325
+ mockGetBoundingClientRect({ width: 600, height: 400 });
326
+ });
327
+ const renderTestCase = createSelectorTestCase((props) => (
328
+ <ComposedChart width={600} height={400} responsive data={PageData}>
329
+ <Line dataKey="uv" />
330
+ {props.children}
331
+ </ComposedChart>
332
+ ));
333
+
334
+ it("should render svg with given width and height", () => {
335
+ const { container } = renderTestCase();
336
+ const svg = container.querySelector("svg");
337
+ expect(svg).not.toBeNull();
338
+ expect(svg).toHaveAttribute("width", "600");
339
+ expect(svg).toHaveAttribute("height", "400");
340
+ });
341
+
342
+ it("should render wrapper div with width and height", () => {
343
+ const { container } = renderTestCase();
344
+ const wrapperElement = container.querySelector(".recharts-wrapper");
345
+ expect(wrapperElement).toBeInTheDocument();
346
+ expect(wrapperElement).toHaveStyle({
347
+ position: "relative",
348
+ width: "600px",
349
+ height: "400px",
350
+ });
351
+ });
352
+
353
+ it("should interact with ResizeObserver", () => {
354
+ renderTestCase();
355
+ expect(resizeObserverMock.observe).toHaveBeenCalled();
356
+ });
357
+
358
+ it("should return the width from useChartWidth", () => {
359
+ const { spy } = renderTestCase(useChartWidth);
360
+ expectLastCalledWith(spy, 600);
361
+ });
362
+
363
+ it("should return the height from useChartHeight", () => {
364
+ const { spy } = renderTestCase(useChartHeight);
365
+ expectLastCalledWith(spy, 400);
366
+ });
367
+ });
368
+
369
+ describe("when width and height are percentages", () => {
370
+ const renderTestCase = createSelectorTestCase((props) => (
371
+ <ComposedChart width="50%" height="50%" responsive data={PageData}>
372
+ <Line dataKey="uv" />
373
+ {props.children}
374
+ </ComposedChart>
375
+ ));
376
+
377
+ it("should render svg with dimensions from getBoundingClientRect", () => {
378
+ const { container } = renderTestCase();
379
+ const svg = container.querySelector("svg");
380
+ expect(svg).not.toBeNull();
381
+ expect(svg).toHaveAttribute("width", "500");
382
+ expect(svg).toHaveAttribute("height", "400");
383
+ });
384
+
385
+ it("should render wrapper div with width and height", () => {
386
+ const { container } = renderTestCase();
387
+ const wrapperElement = container.querySelector(".recharts-wrapper");
388
+ expect(wrapperElement).toBeInTheDocument();
389
+ expect(wrapperElement).toHaveStyle({
390
+ position: "relative",
391
+ width: "50%",
392
+ height: "50%",
393
+ });
394
+ });
395
+
396
+ it("should interact with ResizeObserver", () => {
397
+ renderTestCase();
398
+ expect(resizeObserverMock.observe).toHaveBeenCalled();
399
+ });
400
+
401
+ it("should return the width from useChartWidth", () => {
402
+ const { spy } = renderTestCase(useChartWidth);
403
+ expectLastCalledWith(spy, 500);
404
+ });
405
+
406
+ it("should return the height from useChartHeight", () => {
407
+ const { spy } = renderTestCase(useChartHeight);
408
+ expectLastCalledWith(spy, 400);
409
+ });
410
+ });
411
+
412
+ it("should resize the chart when the container size changes", () => {
413
+ const ChartSize = () => {
414
+ const width = useChartWidth();
415
+ const height = useChartHeight();
416
+ return <div data-testid="chart-size">{`${width()}x${height()}`}</div>;
417
+ };
418
+ const result = render(() => (
419
+ <ComposedChart responsive data={PageData}>
420
+ <Line dataKey="uv" />
421
+ <ChartSize />
422
+ </ComposedChart>
423
+ ));
424
+ const { container } = result;
425
+
426
+ const svg = container.querySelector("svg");
427
+ expect(svg).toHaveAttribute("width", "500");
428
+ expect(svg).toHaveAttribute("height", "400");
429
+ expect(result.getByTestId("chart-size").textContent).toBe("500x400");
430
+
431
+ resizeObserverCallback([{ contentRect: { width: 300, height: 200 } } as ResizeObserverEntry]);
432
+ flush();
433
+
434
+ expect(svg).toHaveAttribute("width", "300");
435
+ expect(svg).toHaveAttribute("height", "200");
436
+ expect(result.getByTestId("chart-size").textContent).toBe("300x200");
437
+ });
438
+
439
+ describe("when width and height are passed in style prop as numbers", () => {
440
+ beforeEach(() => {
441
+ mockGetBoundingClientRect({ width: 700, height: 100 });
442
+ });
443
+ const renderTestCase = createSelectorTestCase((props) => (
444
+ <ComposedChart style={{ width: 700, height: 100 }} responsive data={PageData}>
445
+ <Line dataKey="uv" />
446
+ {props.children}
447
+ </ComposedChart>
448
+ ));
449
+
450
+ it("should render svg with given width and height", () => {
451
+ const { container } = renderTestCase();
452
+ const svg = container.querySelector("svg");
453
+ expect(svg).not.toBeNull();
454
+ expect(svg).toHaveAttribute("width", "700");
455
+ expect(svg).toHaveAttribute("height", "100");
456
+ });
457
+
458
+ it("should render wrapper div with width and height", () => {
459
+ const { container } = renderTestCase();
460
+ const wrapperElement = container.querySelector(".recharts-wrapper");
461
+ expect(wrapperElement).toBeInTheDocument();
462
+ expect(wrapperElement).toHaveStyle({
463
+ position: "relative",
464
+ width: "700px",
465
+ height: "100px",
466
+ });
467
+ });
468
+
469
+ it("should interact with ResizeObserver", () => {
470
+ renderTestCase();
471
+ expect(resizeObserverMock.observe).toHaveBeenCalled();
472
+ });
473
+
474
+ it("should return the width from useChartWidth", () => {
475
+ const { spy } = renderTestCase(useChartWidth);
476
+ expectLastCalledWith(spy, 700);
477
+ });
478
+
479
+ it("should return the height from useChartHeight", () => {
480
+ const { spy } = renderTestCase(useChartHeight);
481
+ expectLastCalledWith(spy, 100);
482
+ });
483
+ });
484
+
485
+ describe("when width and height are passed in style prop as percentages", () => {
486
+ const renderTestCase = createSelectorTestCase((props) => (
487
+ <ComposedChart style={{ width: "90%", height: "80%" }} responsive data={PageData}>
488
+ <Line dataKey="uv" />
489
+ {props.children}
490
+ </ComposedChart>
491
+ ));
492
+
493
+ it("should render svg with dimensions from getBoundingClientRect", () => {
494
+ const { container } = renderTestCase();
495
+ const svg = container.querySelector("svg");
496
+ expect(svg).not.toBeNull();
497
+ expect(svg).toHaveAttribute("width", "500");
498
+ expect(svg).toHaveAttribute("height", "400");
499
+ });
500
+
501
+ it("should render wrapper div with width and height", () => {
502
+ const { container } = renderTestCase();
503
+ const wrapperElement = container.querySelector(".recharts-wrapper");
504
+ expect(wrapperElement).toBeInTheDocument();
505
+ expect(wrapperElement).toHaveStyle({
506
+ position: "relative",
507
+ width: "90%",
508
+ height: "80%",
509
+ });
510
+ });
511
+
512
+ it("should interact with ResizeObserver", () => {
513
+ renderTestCase();
514
+ expect(resizeObserverMock.observe).toHaveBeenCalled();
515
+ });
516
+
517
+ it("should return the width from useChartWidth", () => {
518
+ const { spy } = renderTestCase(useChartWidth);
519
+ expectLastCalledWith(spy, 500);
520
+ });
521
+
522
+ it("should return the height from useChartHeight", () => {
523
+ const { spy } = renderTestCase(useChartHeight);
524
+ expectLastCalledWith(spy, 400);
525
+ });
526
+ });
527
+
528
+ it("should resize the chart when the container size changes and size is in style", () => {
529
+ const ChartSize = () => {
530
+ const width = useChartWidth();
531
+ const height = useChartHeight();
532
+ return <div data-testid="chart-size">{`${width()}x${height()}`}</div>;
533
+ };
534
+ const result = render(() => (
535
+ <ComposedChart responsive data={PageData} style={{ width: "100%", height: "100%" }}>
536
+ <Line dataKey="uv" />
537
+ <ChartSize />
538
+ </ComposedChart>
539
+ ));
540
+ const { container } = result;
541
+
542
+ const svg = container.querySelector("svg");
543
+ expect(svg).toHaveAttribute("width", "500");
544
+ expect(svg).toHaveAttribute("height", "400");
545
+ expect(result.getByTestId("chart-size").textContent).toBe("500x400");
546
+
547
+ resizeObserverCallback([{ contentRect: { width: 300, height: 200 } } as ResizeObserverEntry]);
548
+ flush();
549
+
550
+ expect(svg).toHaveAttribute("width", "300");
551
+ expect(svg).toHaveAttribute("height", "200");
552
+ expect(result.getByTestId("chart-size").textContent).toBe("300x200");
553
+ });
554
+
555
+ describe("when width is a prop and height is from style", () => {
556
+ beforeEach(() => {
557
+ mockGetBoundingClientRect({ width: 600, height: 200 });
558
+ });
559
+ const renderTestCase = createSelectorTestCase((props) => (
560
+ <ComposedChart width={600} style={{ height: 200 }} responsive data={PageData}>
561
+ <Line dataKey="uv" />
562
+ {props.children}
563
+ </ComposedChart>
564
+ ));
565
+
566
+ it("should render svg with combined width and height", () => {
567
+ const { container } = renderTestCase();
568
+ const svg = container.querySelector("svg");
569
+ expect(svg).not.toBeNull();
570
+ expect(svg).toHaveAttribute("width", "600");
571
+ expect(svg).toHaveAttribute("height", "200");
572
+ });
573
+
574
+ it("should interact with ResizeObserver", () => {
575
+ renderTestCase();
576
+ expect(resizeObserverMock.observe).toHaveBeenCalled();
577
+ });
578
+ });
579
+ });
580
+
581
+ describe("Edge cases", () => {
582
+ describe("when width and height are zero", () => {
583
+ it("should not render an svg", () => {
584
+ const { container } = render(() => (
585
+ <ComposedChart width={0} height={0} data={PageData}>
586
+ <Line dataKey="uv" />
587
+ </ComposedChart>
588
+ ));
589
+ expect(container.querySelector("svg")).toBeNull();
590
+ });
591
+ });
592
+
593
+ describe("when width and height are negative", () => {
594
+ it("should not render an svg", () => {
595
+ const { container } = render(() => (
596
+ <ComposedChart width={-100} height={-100} data={PageData}>
597
+ <Line dataKey="uv" />
598
+ </ComposedChart>
599
+ ));
600
+ expect(container.querySelector("svg")).toBeNull();
601
+ });
602
+ });
603
+ });
604
+
605
+ describe("Interaction with ResponsiveContainer", () => {
606
+ it("should prioritize dimensions from ResponsiveContainer over its own props", () => {
607
+ const { container } = render(() => (
608
+ <ResponsiveContainer width={800} height={600}>
609
+ <ComposedChart width={100} height={100} data={PageData}>
610
+ <Line dataKey="uv" />
611
+ </ComposedChart>
612
+ </ResponsiveContainer>
613
+ ));
614
+ const svg = container.querySelector("svg");
615
+ expect(svg).not.toBeNull();
616
+ expect(svg).toHaveAttribute("width", "800");
617
+ expect(svg).toHaveAttribute("height", "600");
618
+ });
619
+ });
620
+ });