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,1407 @@
1
+ import { describe, it, expect } from "vitest";
2
+ import { Area, AreaChart, Tooltip, XAxis, YAxis } from "../../src";
3
+ import { createSelectorTestCase } from "../helper/createSelectorTestCase";
4
+ import { expectAreaCurve } from "../helper/expectAreaCurve";
5
+ import {
6
+ selectArea,
7
+ selectGraphicalItemStackedData,
8
+ } from "../../src/state/selectors/areaSelectors";
9
+ import {
10
+ selectAxisDomain,
11
+ selectDisplayedData,
12
+ selectStackGroups,
13
+ } from "../../src/state/selectors/axisSelectors";
14
+ import { defaultAxisId } from "../../src/state/cartesianAxisSlice";
15
+ import { StackId } from "../../src/util/ChartUtils";
16
+ import {
17
+ ExpectedStackedDataSeries,
18
+ expectGraphicalItemSettings,
19
+ } from "../helper/expectStackGroups";
20
+ import { ChartData } from "../../src/state/chartDataSlice";
21
+ import { StackGroup } from "../../src/util/stacks/stackTypes";
22
+ import { AreaSettings } from "../../src/state/types/AreaSettings";
23
+ import { expectLastCalledWith } from "../helper/expectLastCalledWith";
24
+
25
+ const data1 = [
26
+ { name: "a", value: 5 },
27
+ { name: "b", value: 25 },
28
+ ];
29
+ const data2 = [
30
+ { name: "a", value: 10 },
31
+ { name: "b", value: 10 },
32
+ ];
33
+ const data3 = [
34
+ { name: "a", value: 23 },
35
+ { name: "b", value: 13 },
36
+ ];
37
+ const data1Value1 = [
38
+ { name: "a", value1: 5 },
39
+ { name: "b", value1: 25 },
40
+ ];
41
+ const data2Value2 = [
42
+ { name: "a", value2: 10 },
43
+ { name: "b", value2: 10 },
44
+ ];
45
+ const data3Value3 = [
46
+ { name: "a", value3: 23 },
47
+ { name: "b", value3: 13 },
48
+ ];
49
+ const dataMerged = [
50
+ {
51
+ name: "a",
52
+ value1: 5,
53
+ value2: 10,
54
+ value3: 23,
55
+ },
56
+ {
57
+ name: "b",
58
+ value1: 25,
59
+ value2: 10,
60
+ value3: 13,
61
+ },
62
+ ];
63
+
64
+ describe("AreaChart stacked", () => {
65
+ describe("with single data array", () => {
66
+ const areaSettings1: AreaSettings = {
67
+ hide: false,
68
+ isPanorama: false,
69
+ type: "area",
70
+ xAxisId: 0,
71
+ yAxisId: 0,
72
+ zAxisId: 0,
73
+ barSize: undefined,
74
+ id: "area1",
75
+ connectNulls: false,
76
+ baseValue: undefined,
77
+ dataKey: "value1",
78
+ stackId: "1",
79
+ data: undefined,
80
+ };
81
+
82
+ const areaSettings2: AreaSettings = {
83
+ hide: false,
84
+ isPanorama: false,
85
+ type: "area",
86
+ xAxisId: 0,
87
+ yAxisId: 0,
88
+ zAxisId: 0,
89
+ barSize: undefined,
90
+ id: "area2",
91
+ connectNulls: false,
92
+ baseValue: undefined,
93
+ dataKey: "value2",
94
+ stackId: "1",
95
+ data: undefined,
96
+ };
97
+
98
+ const renderTestCase = createSelectorTestCase((props) => (
99
+ <AreaChart width={500} height={400} data={dataMerged}>
100
+ <XAxis dataKey="name" allowDuplicatedCategory={false} />
101
+ <YAxis dataKey="sum" />
102
+ <Tooltip />
103
+ <Area
104
+ isAnimationActive={false}
105
+ type="monotone"
106
+ dataKey={areaSettings1.dataKey}
107
+ stackId={areaSettings1.stackId}
108
+ id={areaSettings1.id}
109
+ stroke="red"
110
+ fill="red"
111
+ />
112
+ <Area
113
+ isAnimationActive={false}
114
+ type="monotone"
115
+ dataKey={areaSettings2.dataKey}
116
+ stackId={areaSettings2.stackId}
117
+ stroke="green"
118
+ fill="green"
119
+ id={areaSettings2.id}
120
+ />
121
+ <Area
122
+ isAnimationActive={false}
123
+ type="monotone"
124
+ dataKey="value3"
125
+ stackId="1"
126
+ id="area3"
127
+ stroke="blue"
128
+ fill="blue"
129
+ />
130
+ {props.children}
131
+ </AreaChart>
132
+ ));
133
+
134
+ it("should select displayed data", () => {
135
+ const { spy } = renderTestCase((state) => selectDisplayedData(state, "xAxis", 0, false));
136
+ const expected: ChartData = [
137
+ { name: "a", value1: 5, value2: 10, value3: 23 },
138
+ { name: "b", value1: 25, value2: 10, value3: 13 },
139
+ ];
140
+ expectLastCalledWith(spy, expected);
141
+ });
142
+
143
+ it("should select stack groups for all areas", () => {
144
+ const { spy } = renderTestCase((state) => selectStackGroups(state, "yAxis", 0, false));
145
+ const expected: Record<StackId, StackGroup> = {
146
+ "1": {
147
+ graphicalItems: [
148
+ expectGraphicalItemSettings({
149
+ barSize: undefined,
150
+ data: undefined,
151
+ dataKey: "value1",
152
+ id: "area1",
153
+ stackId: "1",
154
+ hide: false,
155
+ }),
156
+ expectGraphicalItemSettings({
157
+ barSize: undefined,
158
+ data: undefined,
159
+ dataKey: "value2",
160
+ id: "area2",
161
+ stackId: "1",
162
+ hide: false,
163
+ }),
164
+ expectGraphicalItemSettings({
165
+ barSize: undefined,
166
+ data: undefined,
167
+ dataKey: "value3",
168
+ id: "area3",
169
+ stackId: "1",
170
+ hide: false,
171
+ }),
172
+ ],
173
+ stackedData: expect.toBeRechartsStackedData([
174
+ [
175
+ [0, 5],
176
+ [0, 25],
177
+ ],
178
+ [
179
+ [5, 15],
180
+ [25, 35],
181
+ ],
182
+ [
183
+ [15, 38],
184
+ [35, 48],
185
+ ],
186
+ ]),
187
+ },
188
+ };
189
+ expectLastCalledWith(spy, expected);
190
+ });
191
+
192
+ it("should select data stacks for the first area", () => {
193
+ const { spy } = renderTestCase((state) =>
194
+ selectGraphicalItemStackedData(state, areaSettings1.id, false),
195
+ );
196
+ const expected: ExpectedStackedDataSeries = [
197
+ [0, 5],
198
+ [0, 25],
199
+ ];
200
+ expectLastCalledWith(spy, expected);
201
+ });
202
+
203
+ it("should select data stacks for the second area", () => {
204
+ const { spy } = renderTestCase((state) =>
205
+ selectGraphicalItemStackedData(state, areaSettings2.id, false),
206
+ );
207
+ const expected: ExpectedStackedDataSeries = [
208
+ [5, 15],
209
+ [25, 35],
210
+ ];
211
+ expectLastCalledWith(spy, expected);
212
+ });
213
+
214
+ it("should select points for the first area", () => {
215
+ const { spy } = renderTestCase((state) => selectArea(state, areaSettings1.id, false));
216
+ const expected = {
217
+ baseLine: [
218
+ {
219
+ x: 65,
220
+ y: 365,
221
+ payload: {
222
+ name: "a",
223
+ value1: 5,
224
+ value2: 10,
225
+ value3: 23,
226
+ },
227
+ },
228
+ {
229
+ x: 495,
230
+ y: 365,
231
+ payload: {
232
+ name: "b",
233
+ value1: 25,
234
+ value2: 10,
235
+ value3: 13,
236
+ },
237
+ },
238
+ ],
239
+ isRange: false,
240
+ points: [
241
+ {
242
+ payload: {
243
+ name: "a",
244
+ value1: 5,
245
+ value2: 10,
246
+ value3: 23,
247
+ },
248
+ value: expect.toBeRechartsStackedSeriesPoint([0, 5]),
249
+ x: 65,
250
+ y: 335,
251
+ },
252
+ {
253
+ payload: {
254
+ name: "b",
255
+ value1: 25,
256
+ value2: 10,
257
+ value3: 13,
258
+ },
259
+ value: expect.toBeRechartsStackedSeriesPoint([0, 25]),
260
+ x: 495,
261
+ y: 214.99999999999997,
262
+ },
263
+ ],
264
+ };
265
+ expectLastCalledWith(spy, expected);
266
+ });
267
+
268
+ it("should select points for the second area", () => {
269
+ const { spy } = renderTestCase((state) => selectArea(state, areaSettings2.id, false));
270
+ expectLastCalledWith(spy, {
271
+ baseLine: [
272
+ // y-value of the first area becomes the baseline for the second area
273
+ {
274
+ x: 65,
275
+ y: 335,
276
+ payload: {
277
+ name: "a",
278
+ value1: 5,
279
+ value2: 10,
280
+ value3: 23,
281
+ },
282
+ },
283
+ {
284
+ x: 495,
285
+ y: 214.99999999999997,
286
+ payload: {
287
+ name: "b",
288
+ value1: 25,
289
+ value2: 10,
290
+ value3: 13,
291
+ },
292
+ },
293
+ ],
294
+ isRange: false,
295
+ points: [
296
+ {
297
+ payload: {
298
+ name: "a",
299
+ value1: 5,
300
+ value2: 10,
301
+ value3: 23,
302
+ },
303
+ // this should be 5 -> 15 because the first area has 5 and the second area has 10
304
+ value: expect.toBeRechartsStackedSeriesPoint([5, 15]),
305
+ x: 65,
306
+ y: 275,
307
+ },
308
+ {
309
+ payload: {
310
+ name: "b",
311
+ value1: 25,
312
+ value2: 10,
313
+ value3: 13,
314
+ },
315
+ // this should be 25 -> 35 because the first area has 25 and the second area has 10
316
+ value: expect.toBeRechartsStackedSeriesPoint([25, 35]),
317
+ x: 495,
318
+ y: 154.99999999999997,
319
+ },
320
+ ],
321
+ });
322
+ });
323
+
324
+ it("should render three stacked areas", () => {
325
+ const { container } = renderTestCase();
326
+ expectAreaCurve(container, [
327
+ { d: "M65,335L495,215" },
328
+ { d: "M65,275L495,155" },
329
+ { d: "M65,137L495,77" },
330
+ ]);
331
+ });
332
+ });
333
+
334
+ describe("with single data array, and without explicit XAxis dataKey", () => {
335
+ const areaSettings1: AreaSettings = {
336
+ hide: false,
337
+ isPanorama: false,
338
+ type: "area",
339
+ xAxisId: 0,
340
+ yAxisId: 0,
341
+ zAxisId: 0,
342
+ barSize: undefined,
343
+ id: "area1",
344
+ connectNulls: false,
345
+ baseValue: undefined,
346
+ dataKey: "value1",
347
+ stackId: "1",
348
+ data: undefined,
349
+ };
350
+
351
+ const areaSettings2: AreaSettings = {
352
+ hide: false,
353
+ isPanorama: false,
354
+ type: "area",
355
+ xAxisId: 0,
356
+ yAxisId: 0,
357
+ zAxisId: 0,
358
+ barSize: undefined,
359
+ id: "area2",
360
+ connectNulls: false,
361
+ baseValue: undefined,
362
+ dataKey: "value2",
363
+ stackId: "1",
364
+ data: undefined,
365
+ };
366
+
367
+ const renderTestCase = createSelectorTestCase((props) => (
368
+ <AreaChart width={500} height={400} data={dataMerged}>
369
+ <XAxis allowDuplicatedCategory={false} />
370
+ <YAxis dataKey="sum" />
371
+ <Tooltip />
372
+ <Area
373
+ isAnimationActive={false}
374
+ type="monotone"
375
+ dataKey={areaSettings1.dataKey}
376
+ stackId={areaSettings1.stackId}
377
+ id={areaSettings1.id}
378
+ stroke="red"
379
+ fill="red"
380
+ />
381
+ <Area
382
+ isAnimationActive={false}
383
+ type="monotone"
384
+ dataKey={areaSettings2.dataKey}
385
+ stackId={areaSettings2.stackId}
386
+ stroke="green"
387
+ fill="green"
388
+ id={areaSettings2.id}
389
+ />
390
+ <Area
391
+ isAnimationActive={false}
392
+ type="monotone"
393
+ dataKey="value3"
394
+ stackId="1"
395
+ id="area3"
396
+ stroke="blue"
397
+ fill="blue"
398
+ />
399
+ {props.children}
400
+ </AreaChart>
401
+ ));
402
+
403
+ it("should select displayed data", () => {
404
+ const { spy } = renderTestCase((state) => selectDisplayedData(state, "xAxis", 0, false));
405
+ const expected: ChartData = [
406
+ { name: "a", value1: 5, value2: 10, value3: 23 },
407
+ { name: "b", value1: 25, value2: 10, value3: 13 },
408
+ ];
409
+ expectLastCalledWith(spy, expected);
410
+ });
411
+
412
+ it("should select stack groups for all areas", () => {
413
+ const { spy } = renderTestCase((state) => selectStackGroups(state, "yAxis", 0, false));
414
+ const expected: Record<StackId, StackGroup> = {
415
+ "1": {
416
+ graphicalItems: [
417
+ expectGraphicalItemSettings({
418
+ barSize: undefined,
419
+ data: undefined,
420
+ dataKey: "value1",
421
+ id: "area1",
422
+ stackId: "1",
423
+ hide: false,
424
+ }),
425
+ expectGraphicalItemSettings({
426
+ barSize: undefined,
427
+ data: undefined,
428
+ dataKey: "value2",
429
+ id: "area2",
430
+ stackId: "1",
431
+ hide: false,
432
+ }),
433
+ expectGraphicalItemSettings({
434
+ barSize: undefined,
435
+ data: undefined,
436
+ dataKey: "value3",
437
+ id: "area3",
438
+ stackId: "1",
439
+ hide: false,
440
+ }),
441
+ ],
442
+ stackedData: expect.toBeRechartsStackedData([
443
+ [
444
+ [0, 5],
445
+ [0, 25],
446
+ ],
447
+ [
448
+ [5, 15],
449
+ [25, 35],
450
+ ],
451
+ [
452
+ [15, 38],
453
+ [35, 48],
454
+ ],
455
+ ]),
456
+ },
457
+ };
458
+ expectLastCalledWith(spy, expected);
459
+ });
460
+
461
+ it("should select data stacks for the first area", () => {
462
+ const { spy } = renderTestCase((state) =>
463
+ selectGraphicalItemStackedData(state, areaSettings1.id, false),
464
+ );
465
+ const expected: ExpectedStackedDataSeries = [
466
+ [0, 5],
467
+ [0, 25],
468
+ ];
469
+ expectLastCalledWith(spy, expected);
470
+ });
471
+
472
+ it("should select data stacks for the second area", () => {
473
+ const { spy } = renderTestCase((state) =>
474
+ selectGraphicalItemStackedData(state, areaSettings2.id, false),
475
+ );
476
+ const expected: ExpectedStackedDataSeries = [
477
+ [5, 15],
478
+ [25, 35],
479
+ ];
480
+ expectLastCalledWith(spy, expected);
481
+ });
482
+
483
+ it("should select points for the first area", () => {
484
+ const { spy } = renderTestCase((state) => selectArea(state, areaSettings1.id, false));
485
+ const expected = {
486
+ baseLine: [
487
+ {
488
+ x: 65,
489
+ y: 365,
490
+ payload: {
491
+ name: "a",
492
+ value1: 5,
493
+ value2: 10,
494
+ value3: 23,
495
+ },
496
+ },
497
+ {
498
+ x: 495,
499
+ y: 365,
500
+ payload: {
501
+ name: "b",
502
+ value1: 25,
503
+ value2: 10,
504
+ value3: 13,
505
+ },
506
+ },
507
+ ],
508
+ isRange: false,
509
+ points: [
510
+ {
511
+ payload: {
512
+ name: "a",
513
+ value1: 5,
514
+ value2: 10,
515
+ value3: 23,
516
+ },
517
+ value: expect.toBeRechartsStackedSeriesPoint([0, 5]),
518
+ x: 65,
519
+ y: 335,
520
+ },
521
+ {
522
+ payload: {
523
+ name: "b",
524
+ value1: 25,
525
+ value2: 10,
526
+ value3: 13,
527
+ },
528
+ value: expect.toBeRechartsStackedSeriesPoint([0, 25]),
529
+ x: 495,
530
+ y: 214.99999999999997,
531
+ },
532
+ ],
533
+ };
534
+ expectLastCalledWith(spy, expected);
535
+ });
536
+
537
+ it("should select points for the second area", () => {
538
+ const { spy } = renderTestCase((state) => selectArea(state, areaSettings2.id, false));
539
+ expectLastCalledWith(spy, {
540
+ baseLine: [
541
+ // y-value of the first area becomes the baseline for the second area
542
+ {
543
+ x: 65,
544
+ y: 335,
545
+ payload: {
546
+ name: "a",
547
+ value1: 5,
548
+ value2: 10,
549
+ value3: 23,
550
+ },
551
+ },
552
+ {
553
+ x: 495,
554
+ y: 214.99999999999997,
555
+ payload: {
556
+ name: "b",
557
+ value1: 25,
558
+ value2: 10,
559
+ value3: 13,
560
+ },
561
+ },
562
+ ],
563
+ isRange: false,
564
+ points: [
565
+ {
566
+ payload: {
567
+ name: "a",
568
+ value1: 5,
569
+ value2: 10,
570
+ value3: 23,
571
+ },
572
+ // this should be 5 -> 15 because the first area has 5 and the second area has 10
573
+ value: expect.toBeRechartsStackedSeriesPoint([5, 15]),
574
+ x: 65,
575
+ y: 275,
576
+ },
577
+ {
578
+ payload: {
579
+ name: "b",
580
+ value1: 25,
581
+ value2: 10,
582
+ value3: 13,
583
+ },
584
+ // this should be 25 -> 35 because the first area has 25 and the second area has 10
585
+ value: expect.toBeRechartsStackedSeriesPoint([25, 35]),
586
+ x: 495,
587
+ y: 154.99999999999997,
588
+ },
589
+ ],
590
+ });
591
+ });
592
+
593
+ it("should render three stacked areas", () => {
594
+ const { container } = renderTestCase();
595
+ expectAreaCurve(container, [
596
+ { d: "M65,335L495,215" },
597
+ { d: "M65,275L495,155" },
598
+ { d: "M65,137L495,77" },
599
+ ]);
600
+ });
601
+ });
602
+
603
+ describe("with multiple data arrays but each has their own dataKey", () => {
604
+ const areaSettings1: AreaSettings = {
605
+ hide: false,
606
+ isPanorama: false,
607
+ type: "area",
608
+ xAxisId: 0,
609
+ yAxisId: 0,
610
+ zAxisId: 0,
611
+ barSize: undefined,
612
+ id: "area1",
613
+ connectNulls: false,
614
+ baseValue: undefined,
615
+ dataKey: "value1",
616
+ stackId: "1",
617
+ data: data1Value1,
618
+ };
619
+
620
+ const areaSettings2: AreaSettings = {
621
+ hide: false,
622
+ isPanorama: false,
623
+ type: "area",
624
+ xAxisId: 0,
625
+ yAxisId: 0,
626
+ zAxisId: 0,
627
+ barSize: undefined,
628
+ id: "area2",
629
+ connectNulls: false,
630
+ baseValue: undefined,
631
+ dataKey: "value2",
632
+ stackId: "1",
633
+ data: data2Value2,
634
+ };
635
+
636
+ const renderTestCase = createSelectorTestCase((props) => (
637
+ <AreaChart width={500} height={400}>
638
+ <XAxis dataKey="name" allowDuplicatedCategory={false} />
639
+ <YAxis dataKey="sum" />
640
+ <Tooltip />
641
+ <Area
642
+ isAnimationActive={false}
643
+ data={areaSettings1.data}
644
+ id={areaSettings1.id}
645
+ type="monotone"
646
+ dataKey={areaSettings1.dataKey}
647
+ stackId={areaSettings1.stackId}
648
+ stroke="red"
649
+ fill="red"
650
+ />
651
+ <Area
652
+ isAnimationActive={false}
653
+ data={data2Value2}
654
+ id={areaSettings2.id}
655
+ type="monotone"
656
+ dataKey="value2"
657
+ stackId="1"
658
+ stroke="green"
659
+ fill="green"
660
+ />
661
+ <Area
662
+ isAnimationActive={false}
663
+ data={data3Value3}
664
+ id="area3"
665
+ type="monotone"
666
+ dataKey="value3"
667
+ stackId="1"
668
+ stroke="blue"
669
+ fill="blue"
670
+ />
671
+ {props.children}
672
+ </AreaChart>
673
+ ));
674
+
675
+ it("should select displayed data", () => {
676
+ const { spy } = renderTestCase((state) => selectDisplayedData(state, "xAxis", 0, false));
677
+ const expected: ChartData = [
678
+ { name: "a", value1: 5 },
679
+ { name: "b", value1: 25 },
680
+ { name: "a", value2: 10 },
681
+ { name: "b", value2: 10 },
682
+ { name: "a", value3: 23 },
683
+ { name: "b", value3: 13 },
684
+ ];
685
+ expectLastCalledWith(spy, expected);
686
+ });
687
+
688
+ it("should select stack groups for all areas", () => {
689
+ const { spy } = renderTestCase((state) => selectStackGroups(state, "yAxis", 0, false));
690
+ const expected: Record<StackId, StackGroup> = {
691
+ "1": {
692
+ graphicalItems: [
693
+ expectGraphicalItemSettings({
694
+ id: "area1",
695
+ barSize: undefined,
696
+ data: [
697
+ { name: "a", value1: 5 },
698
+ { name: "b", value1: 25 },
699
+ ],
700
+ dataKey: "value1",
701
+ stackId: "1",
702
+ hide: false,
703
+ }),
704
+ expectGraphicalItemSettings({
705
+ id: "area2",
706
+ barSize: undefined,
707
+ data: [
708
+ { name: "a", value2: 10 },
709
+ { name: "b", value2: 10 },
710
+ ],
711
+ dataKey: "value2",
712
+ stackId: "1",
713
+ hide: false,
714
+ }),
715
+ expectGraphicalItemSettings({
716
+ id: "area3",
717
+ barSize: undefined,
718
+ data: [
719
+ { name: "a", value3: 23 },
720
+ { name: "b", value3: 13 },
721
+ ],
722
+ dataKey: "value3",
723
+ stackId: "1",
724
+ hide: false,
725
+ }),
726
+ ],
727
+ stackedData: expect.toBeRechartsStackedData([
728
+ [
729
+ [0, 5],
730
+ [0, 25],
731
+ ],
732
+ [
733
+ [5, 15],
734
+ [25, 35],
735
+ ],
736
+ [
737
+ [15, 38],
738
+ [35, 48],
739
+ ],
740
+ ]),
741
+ },
742
+ };
743
+ expectLastCalledWith(spy, expected);
744
+ });
745
+
746
+ it("should select data stacks for the first area", () => {
747
+ const { spy } = renderTestCase((state) =>
748
+ selectGraphicalItemStackedData(state, areaSettings1.id, false),
749
+ );
750
+ const expected: ExpectedStackedDataSeries = [
751
+ [0, 5],
752
+ [0, 25],
753
+ ];
754
+ expectLastCalledWith(spy, expected);
755
+ });
756
+
757
+ it("should select data stacks for the second area", () => {
758
+ const { spy } = renderTestCase((state) =>
759
+ selectGraphicalItemStackedData(state, areaSettings2.id, false),
760
+ );
761
+ const expected: ExpectedStackedDataSeries = [
762
+ [5, 15],
763
+ [25, 35],
764
+ ];
765
+ expectLastCalledWith(spy, expected);
766
+ });
767
+
768
+ it("should select points for the first area", () => {
769
+ const { spy } = renderTestCase((state) => selectArea(state, areaSettings1.id, false));
770
+ const expected = {
771
+ baseLine: [
772
+ { x: 65, y: 365, payload: { name: "a", value1: 5 } },
773
+ { x: 495, y: 365, payload: { name: "b", value1: 25 } },
774
+ ],
775
+ isRange: false,
776
+ points: [
777
+ {
778
+ payload: { name: "a", value1: 5 },
779
+ value: expect.toBeRechartsStackedSeriesPoint([0, 5]),
780
+ x: 65,
781
+ y: 335,
782
+ },
783
+ {
784
+ payload: { name: "b", value1: 25 },
785
+ value: expect.toBeRechartsStackedSeriesPoint([0, 25]),
786
+ x: 495,
787
+ y: 214.99999999999997,
788
+ },
789
+ ],
790
+ };
791
+ expectLastCalledWith(spy, expected);
792
+ });
793
+
794
+ it("should select points for the second area", () => {
795
+ const { spy } = renderTestCase((state) => selectArea(state, areaSettings2.id, false));
796
+ expectLastCalledWith(spy, {
797
+ baseLine: [
798
+ // baseline.y from second point is the same as points.y from first point
799
+ { x: 65, y: 335, payload: { name: "a", value2: 10 } },
800
+ { x: 495, y: 214.99999999999997, payload: { name: "b", value2: 10 } },
801
+ ],
802
+ isRange: false,
803
+ points: [
804
+ {
805
+ payload: { name: "a", value2: 10 },
806
+ // this should be 5 -> 15 because the first area has 5 and the second area has 10
807
+ value: expect.toBeRechartsStackedSeriesPoint([5, 15]),
808
+ x: 65,
809
+ y: 275,
810
+ },
811
+ {
812
+ payload: { name: "b", value2: 10 },
813
+ // this should be 25 -> 35 because the first area has 25 and the second area has 10
814
+ value: expect.toBeRechartsStackedSeriesPoint([25, 35]),
815
+ x: 495,
816
+ y: 154.99999999999997,
817
+ },
818
+ ],
819
+ });
820
+ });
821
+
822
+ it("should render three stacked areas", () => {
823
+ const { container } = renderTestCase();
824
+ expectAreaCurve(container, [
825
+ { d: "M65,335L495,215" },
826
+ { d: "M65,275L495,155" },
827
+ { d: "M65,137L495,77" },
828
+ ]);
829
+ });
830
+ });
831
+
832
+ describe("with multiple data arrays with the same dataKey", () => {
833
+ /*
834
+ * https://github.com/recharts/recharts/issues/6073
835
+ * https://stackblitz.com/edit/react-qarbpqfn?file=src%2FExample.tsx
836
+ * Multiple Area components with the same stackId and individual data arrays.
837
+ */
838
+
839
+ const areaSettings1: AreaSettings = {
840
+ hide: false,
841
+ isPanorama: false,
842
+ type: "area",
843
+ xAxisId: 0,
844
+ yAxisId: 0,
845
+ zAxisId: 0,
846
+ barSize: undefined,
847
+ id: "area1",
848
+ connectNulls: false,
849
+ baseValue: undefined,
850
+ dataKey: "value",
851
+ stackId: "1",
852
+ data: data1,
853
+ };
854
+
855
+ const areaSettings2: AreaSettings = {
856
+ hide: false,
857
+ isPanorama: false,
858
+ type: "area",
859
+ xAxisId: 0,
860
+ yAxisId: 0,
861
+ zAxisId: 0,
862
+ barSize: undefined,
863
+ id: "area2",
864
+ connectNulls: false,
865
+ baseValue: undefined,
866
+ dataKey: "value",
867
+ stackId: "1",
868
+ data: data2,
869
+ };
870
+
871
+ const renderTestCase = createSelectorTestCase((props) => (
872
+ <AreaChart width={500} height={400}>
873
+ <XAxis dataKey="name" allowDuplicatedCategory={false} />
874
+ <YAxis dataKey="value" />
875
+ <Tooltip />
876
+ <Area
877
+ isAnimationActive={false}
878
+ data={areaSettings1.data}
879
+ type="monotone"
880
+ dataKey={areaSettings1.dataKey}
881
+ stackId={areaSettings1.stackId}
882
+ id={areaSettings1.id}
883
+ stroke="red"
884
+ fill="red"
885
+ />
886
+ <Area
887
+ isAnimationActive={false}
888
+ data={areaSettings2.data}
889
+ type="monotone"
890
+ dataKey={areaSettings2.dataKey}
891
+ stackId={areaSettings2.stackId}
892
+ id={areaSettings2.id}
893
+ stroke="green"
894
+ fill="green"
895
+ />
896
+ <Area
897
+ isAnimationActive={false}
898
+ data={data3}
899
+ type="monotone"
900
+ dataKey="value"
901
+ stackId="1"
902
+ id="area3"
903
+ stroke="blue"
904
+ fill="blue"
905
+ />
906
+ {props.children}
907
+ </AreaChart>
908
+ ));
909
+
910
+ it("should select displayed data", () => {
911
+ const { spy } = renderTestCase((state) => selectDisplayedData(state, "xAxis", 0, false));
912
+ const expected: ChartData = [
913
+ { name: "a", value: 5 },
914
+ { name: "b", value: 25 },
915
+ { name: "a", value: 10 },
916
+ { name: "b", value: 10 },
917
+ { name: "a", value: 23 },
918
+ { name: "b", value: 13 },
919
+ ];
920
+ expectLastCalledWith(spy, expected);
921
+ });
922
+
923
+ it("should select stack groups for all areas", () => {
924
+ const { spy } = renderTestCase((state) => selectStackGroups(state, "yAxis", 0, false));
925
+ const expected: Record<StackId, StackGroup> = {
926
+ "1": {
927
+ graphicalItems: [
928
+ expectGraphicalItemSettings({
929
+ id: "area1",
930
+ barSize: undefined,
931
+ data: [
932
+ { name: "a", value: 5 },
933
+ { name: "b", value: 25 },
934
+ ],
935
+ dataKey: "value",
936
+ stackId: "1",
937
+ hide: false,
938
+ }),
939
+ expectGraphicalItemSettings({
940
+ id: "area2",
941
+ barSize: undefined,
942
+ data: [
943
+ { name: "a", value: 10 },
944
+ { name: "b", value: 10 },
945
+ ],
946
+ dataKey: "value",
947
+ stackId: "1",
948
+ hide: false,
949
+ }),
950
+ expectGraphicalItemSettings({
951
+ id: "area3",
952
+ barSize: undefined,
953
+ data: [
954
+ { name: "a", value: 23 },
955
+ { name: "b", value: 13 },
956
+ ],
957
+ dataKey: "value",
958
+ stackId: "1",
959
+ hide: false,
960
+ }),
961
+ ],
962
+ stackedData: expect.toBeRechartsStackedData([
963
+ [
964
+ [0, 5],
965
+ [0, 25],
966
+ ],
967
+ [
968
+ [5, 15],
969
+ [25, 35],
970
+ ],
971
+ [
972
+ [15, 38],
973
+ [35, 48],
974
+ ],
975
+ ]),
976
+ },
977
+ };
978
+ expectLastCalledWith(spy, expected);
979
+ });
980
+
981
+ it("should select data stacks for the first area", () => {
982
+ const { spy } = renderTestCase((state) =>
983
+ selectGraphicalItemStackedData(state, areaSettings1.id, false),
984
+ );
985
+ const expected: ExpectedStackedDataSeries = [
986
+ [0, 5],
987
+ [0, 25],
988
+ ];
989
+ expectLastCalledWith(spy, expected);
990
+ });
991
+
992
+ it("should select data stacks for the second area", () => {
993
+ const { spy } = renderTestCase((state) =>
994
+ selectGraphicalItemStackedData(state, areaSettings2.id, false),
995
+ );
996
+ const expected: ExpectedStackedDataSeries = [
997
+ [5, 15],
998
+ [25, 35],
999
+ ];
1000
+ expectLastCalledWith(spy, expected);
1001
+ });
1002
+
1003
+ it("should select points for the first area", () => {
1004
+ const { spy } = renderTestCase((state) => selectArea(state, areaSettings1.id, false));
1005
+ const expected = {
1006
+ baseLine: [
1007
+ {
1008
+ x: 65,
1009
+ y: 365,
1010
+ payload: {
1011
+ name: "a",
1012
+ value: 5,
1013
+ },
1014
+ },
1015
+ {
1016
+ x: 495,
1017
+ y: 365,
1018
+ payload: {
1019
+ name: "b",
1020
+ value: 25,
1021
+ },
1022
+ },
1023
+ ],
1024
+ isRange: false,
1025
+ points: [
1026
+ {
1027
+ payload: { name: "a", value: 5 },
1028
+ value: expect.toBeRechartsStackedSeriesPoint([0, 5]),
1029
+ x: 65,
1030
+ y: 335,
1031
+ },
1032
+ {
1033
+ payload: { name: "b", value: 25 },
1034
+ value: expect.toBeRechartsStackedSeriesPoint([0, 25]),
1035
+ x: 495,
1036
+ y: 214.99999999999997,
1037
+ },
1038
+ ],
1039
+ };
1040
+ expectLastCalledWith(spy, expected);
1041
+ });
1042
+
1043
+ it("should select points for the second area", () => {
1044
+ const { spy } = renderTestCase((state) => selectArea(state, areaSettings2.id, false));
1045
+ expectLastCalledWith(spy, {
1046
+ baseLine: [
1047
+ {
1048
+ x: 65,
1049
+ y: 335,
1050
+ payload: {
1051
+ name: "a",
1052
+ value: 10,
1053
+ },
1054
+ },
1055
+ {
1056
+ x: 495,
1057
+ y: 214.99999999999997,
1058
+ payload: {
1059
+ name: "b",
1060
+ value: 10,
1061
+ },
1062
+ },
1063
+ ],
1064
+ isRange: false,
1065
+ points: [
1066
+ {
1067
+ payload: { name: "a", value: 10 },
1068
+ // this should be 5 -> 15 because the first area has 5 and the second area has 10
1069
+ value: expect.toBeRechartsStackedSeriesPoint([5, 15]),
1070
+ x: 65,
1071
+ y: 275,
1072
+ },
1073
+ {
1074
+ payload: { name: "b", value: 10 },
1075
+ // this should be 25 -> 35 because the first area has 25 and the second area has 10
1076
+ value: expect.toBeRechartsStackedSeriesPoint([25, 35]),
1077
+ x: 495,
1078
+ y: 154.99999999999997,
1079
+ },
1080
+ ],
1081
+ });
1082
+ });
1083
+
1084
+ it("should render three stacked areas", () => {
1085
+ const { container } = renderTestCase();
1086
+ expectAreaCurve(container, [
1087
+ { d: "M65,335L495,215" },
1088
+ { d: "M65,275L495,155" },
1089
+ { d: "M65,137L495,77" },
1090
+ ]);
1091
+ });
1092
+ });
1093
+
1094
+ describe("with multiple data arrays with the same dataKey, and without explicit XAxis dataKey", () => {
1095
+ /*
1096
+ * https://github.com/recharts/recharts/issues/6073
1097
+ * https://stackblitz.com/edit/react-qarbpqfn?file=src%2FExample.tsx
1098
+ * This is a regression test for the issue where multiple Area components with the same stackId
1099
+ * were not stacked correctly when they had individual data arrays.
1100
+ *
1101
+ * This test shows the problem, but it's not actually fixed in the code.
1102
+ */
1103
+
1104
+ const areaSettings1: AreaSettings = {
1105
+ hide: false,
1106
+ isPanorama: false,
1107
+ type: "area",
1108
+ xAxisId: 0,
1109
+ yAxisId: 0,
1110
+ zAxisId: 0,
1111
+ barSize: undefined,
1112
+ id: "area1",
1113
+ connectNulls: false,
1114
+ baseValue: undefined,
1115
+ dataKey: "value",
1116
+ stackId: "1",
1117
+ data: data1,
1118
+ };
1119
+
1120
+ const areaSettings2: AreaSettings = {
1121
+ hide: false,
1122
+ isPanorama: false,
1123
+ type: "area",
1124
+ xAxisId: 0,
1125
+ yAxisId: 0,
1126
+ zAxisId: 0,
1127
+ barSize: undefined,
1128
+ id: "area2",
1129
+ connectNulls: false,
1130
+ baseValue: undefined,
1131
+ dataKey: "value",
1132
+ stackId: "1",
1133
+ data: data2,
1134
+ };
1135
+
1136
+ const renderTestCase = createSelectorTestCase((props) => (
1137
+ <AreaChart width={500} height={400}>
1138
+ <XAxis allowDuplicatedCategory={false} />
1139
+ <YAxis dataKey="value" />
1140
+ <Tooltip />
1141
+ <Area
1142
+ isAnimationActive={false}
1143
+ data={areaSettings1.data}
1144
+ type="monotone"
1145
+ dataKey={areaSettings1.dataKey}
1146
+ stackId={areaSettings1.stackId}
1147
+ id={areaSettings1.id}
1148
+ stroke="red"
1149
+ fill="red"
1150
+ />
1151
+ <Area
1152
+ isAnimationActive={false}
1153
+ data={areaSettings2.data}
1154
+ type="monotone"
1155
+ dataKey={areaSettings2.dataKey}
1156
+ stackId={areaSettings2.stackId}
1157
+ id={areaSettings2.id}
1158
+ stroke="green"
1159
+ fill="green"
1160
+ />
1161
+ <Area
1162
+ isAnimationActive={false}
1163
+ data={data3}
1164
+ type="monotone"
1165
+ dataKey="value"
1166
+ stackId="1"
1167
+ id="area3"
1168
+ stroke="blue"
1169
+ fill="blue"
1170
+ />
1171
+ {props.children}
1172
+ </AreaChart>
1173
+ ));
1174
+
1175
+ it("should select displayed data", () => {
1176
+ const { spy } = renderTestCase((state) => selectDisplayedData(state, "xAxis", 0, false));
1177
+ const expected: ChartData = [
1178
+ { name: "a", value: 5 },
1179
+ { name: "b", value: 25 },
1180
+ { name: "a", value: 10 },
1181
+ { name: "b", value: 10 },
1182
+ { name: "a", value: 23 },
1183
+ { name: "b", value: 13 },
1184
+ ];
1185
+ expectLastCalledWith(spy, expected);
1186
+ });
1187
+
1188
+ it("should select stack groups for all areas", () => {
1189
+ const { spy } = renderTestCase((state) => selectStackGroups(state, "yAxis", 0, false));
1190
+ const expected: Record<StackId, StackGroup> = {
1191
+ "1": {
1192
+ graphicalItems: [
1193
+ expectGraphicalItemSettings({
1194
+ id: "area1",
1195
+ barSize: undefined,
1196
+ data: [
1197
+ { name: "a", value: 5 },
1198
+ { name: "b", value: 25 },
1199
+ ],
1200
+ dataKey: "value",
1201
+ stackId: "1",
1202
+ hide: false,
1203
+ }),
1204
+ expectGraphicalItemSettings({
1205
+ id: "area2",
1206
+ barSize: undefined,
1207
+ data: [
1208
+ { name: "a", value: 10 },
1209
+ { name: "b", value: 10 },
1210
+ ],
1211
+ dataKey: "value",
1212
+ stackId: "1",
1213
+ hide: false,
1214
+ }),
1215
+ expectGraphicalItemSettings({
1216
+ id: "area3",
1217
+ barSize: undefined,
1218
+ data: [
1219
+ { name: "a", value: 23 },
1220
+ { name: "b", value: 13 },
1221
+ ],
1222
+ dataKey: "value",
1223
+ stackId: "1",
1224
+ hide: false,
1225
+ }),
1226
+ ],
1227
+ stackedData: expect.toBeRechartsStackedData([
1228
+ [
1229
+ [0, 5],
1230
+ [0, 25],
1231
+ ],
1232
+ [
1233
+ [5, 15],
1234
+ [25, 35],
1235
+ ],
1236
+ [
1237
+ [15, 38],
1238
+ [35, 48],
1239
+ ],
1240
+ ]),
1241
+ },
1242
+ };
1243
+ expectLastCalledWith(spy, expected);
1244
+ });
1245
+
1246
+ it("should select data stacks for the first area", () => {
1247
+ const { spy } = renderTestCase((state) =>
1248
+ selectGraphicalItemStackedData(state, areaSettings1.id, false),
1249
+ );
1250
+ const expected: ExpectedStackedDataSeries = [
1251
+ [0, 5],
1252
+ [0, 25],
1253
+ ];
1254
+ expectLastCalledWith(spy, expected);
1255
+ });
1256
+
1257
+ it("should select data stacks for the second area", () => {
1258
+ const { spy } = renderTestCase((state) =>
1259
+ selectGraphicalItemStackedData(state, areaSettings2.id, false),
1260
+ );
1261
+ const expected: ExpectedStackedDataSeries = [
1262
+ [5, 15],
1263
+ [25, 35],
1264
+ ];
1265
+ expectLastCalledWith(spy, expected);
1266
+ });
1267
+
1268
+ it("should select points for the first area", () => {
1269
+ const { spy } = renderTestCase((state) => selectArea(state, areaSettings1.id, false));
1270
+ const expected = {
1271
+ baseLine: [
1272
+ {
1273
+ x: 65,
1274
+ y: 365,
1275
+ payload: {
1276
+ name: "a",
1277
+ value: 5,
1278
+ },
1279
+ },
1280
+ {
1281
+ x: 151,
1282
+ y: 365,
1283
+ payload: {
1284
+ name: "b",
1285
+ value: 25,
1286
+ },
1287
+ },
1288
+ ],
1289
+ isRange: false,
1290
+ points: [
1291
+ {
1292
+ payload: { name: "a", value: 5 },
1293
+ value: expect.toBeRechartsStackedSeriesPoint([0, 5]),
1294
+ x: 65,
1295
+ y: 335,
1296
+ },
1297
+ {
1298
+ payload: { name: "b", value: 25 },
1299
+ value: expect.toBeRechartsStackedSeriesPoint([0, 25]),
1300
+ x: 151,
1301
+ y: 214.99999999999997,
1302
+ },
1303
+ ],
1304
+ };
1305
+ expectLastCalledWith(spy, expected);
1306
+ });
1307
+
1308
+ it("should select points for the second area", () => {
1309
+ const { spy } = renderTestCase((state) => selectArea(state, areaSettings2.id, false));
1310
+ expectLastCalledWith(spy, {
1311
+ baseLine: [
1312
+ {
1313
+ x: 65,
1314
+ y: 335,
1315
+ payload: {
1316
+ name: "a",
1317
+ value: 10,
1318
+ },
1319
+ },
1320
+ {
1321
+ x: 151,
1322
+ y: 214.99999999999997,
1323
+ payload: {
1324
+ name: "b",
1325
+ value: 10,
1326
+ },
1327
+ },
1328
+ ],
1329
+ isRange: false,
1330
+ points: [
1331
+ {
1332
+ payload: { name: "a", value: 10 },
1333
+ // this should be 5 -> 15 because the first area has 5 and the second area has 10
1334
+ value: expect.toBeRechartsStackedSeriesPoint([5, 15]),
1335
+ x: 65,
1336
+ y: 275,
1337
+ },
1338
+ {
1339
+ payload: { name: "b", value: 10 },
1340
+ // this should be 25 -> 35 because the first area has 25 and the second area has 10
1341
+ value: expect.toBeRechartsStackedSeriesPoint([25, 35]),
1342
+ x: 151,
1343
+ y: 154.99999999999997,
1344
+ },
1345
+ ],
1346
+ });
1347
+ });
1348
+
1349
+ it("should render three stacked areas", () => {
1350
+ const { container } = renderTestCase();
1351
+ expectAreaCurve(container, [
1352
+ { d: "M65,335L151,215" },
1353
+ { d: "M65,275L151,155" },
1354
+ { d: "M65,137L151,77" },
1355
+ ]);
1356
+ });
1357
+ });
1358
+
1359
+ describe.todo("when dataKey is defined on YAxis instead of individual Areas");
1360
+ describe("when XAxis is type number", () => {
1361
+ const numericData = [
1362
+ { x: 1, value1: 5, value2: 10 },
1363
+ { x: 2, value1: 15, value2: 20 },
1364
+ { x: 3, value1: 25, value2: 10 },
1365
+ ];
1366
+
1367
+ describe('with stackOffset="expand"', () => {
1368
+ const renderTestCase = createSelectorTestCase((props) => (
1369
+ <AreaChart width={400} height={400} data={numericData} stackOffset="expand">
1370
+ <XAxis dataKey="x" type="number" />
1371
+ <YAxis />
1372
+ <Area isAnimationActive={false} dataKey="value1" stackId="1" />
1373
+ <Area isAnimationActive={false} dataKey="value2" stackId="1" />
1374
+ {props.children}
1375
+ </AreaChart>
1376
+ ));
1377
+
1378
+ it("should render area curves when XAxis type is number", () => {
1379
+ const { container } = renderTestCase();
1380
+ const areaCurves = container.querySelectorAll(".recharts-area-curve");
1381
+ expect(areaCurves.length).toBe(2);
1382
+ areaCurves.forEach((curve) => {
1383
+ const d = curve.getAttribute("d");
1384
+ expect(d).toBeTruthy();
1385
+ expect(d).not.toBe("");
1386
+ });
1387
+ });
1388
+
1389
+ it("should have Y axis domain [0, 1] for expand offset", () => {
1390
+ const { spy } = renderTestCase((state) =>
1391
+ selectAxisDomain(state, "yAxis", defaultAxisId, false),
1392
+ );
1393
+ expectLastCalledWith(spy, [0, 1]);
1394
+ });
1395
+
1396
+ it("should not override X axis domain to [0, 1]", () => {
1397
+ const { spy } = renderTestCase((state) =>
1398
+ selectAxisDomain(state, "xAxis", defaultAxisId, false),
1399
+ );
1400
+ const result = spy.mock.lastCall?.[0];
1401
+ expect(result).toBeDefined();
1402
+ expect(result).not.toEqual([0, 1]);
1403
+ });
1404
+ });
1405
+ });
1406
+ describe.todo("vertical charts");
1407
+ });