solid-recharts 0.2.1 → 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (488) hide show
  1. package/package.json +13 -11
  2. package/src/animation/AnimatedItems.tsx +2 -4
  3. package/src/animation/CSSTransitionAnimate.tsx +41 -39
  4. package/src/animation/JavascriptAnimate.tsx +45 -41
  5. package/src/cartesian/Area.tsx +4 -4
  6. package/src/cartesian/AreaRevealShape.tsx +1 -1
  7. package/src/cartesian/Bar.tsx +33 -21
  8. package/src/cartesian/BarStack.tsx +5 -5
  9. package/src/cartesian/Brush.tsx +19 -15
  10. package/src/cartesian/CartesianAxis.tsx +4 -4
  11. package/src/cartesian/CartesianGrid.tsx +5 -5
  12. package/src/cartesian/ErrorBar.tsx +9 -7
  13. package/src/cartesian/Funnel.tsx +3 -3
  14. package/src/cartesian/GraphicalItemClipPath.tsx +1 -1
  15. package/src/cartesian/Line.tsx +18 -16
  16. package/src/cartesian/LineDrawShape.tsx +14 -13
  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 +19 -17
  21. package/src/cartesian/Scatter.tsx +3 -3
  22. package/src/cartesian/XAxis.tsx +1 -1
  23. package/src/cartesian/YAxis.tsx +35 -33
  24. package/src/cartesian/ZAxis.tsx +3 -2
  25. package/src/chart/AreaChart.tsx +1 -1
  26. package/src/chart/BarChart.tsx +1 -1
  27. package/src/chart/CartesianChart.tsx +4 -3
  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 +4 -3
  33. package/src/chart/PolarChart.tsx +4 -3
  34. package/src/chart/RadarChart.tsx +4 -3
  35. package/src/chart/RadialBarChart.tsx +7 -3
  36. package/src/chart/RechartsWrapper.tsx +14 -24
  37. package/src/chart/Sankey.tsx +9 -6
  38. package/src/chart/ScatterChart.tsx +1 -1
  39. package/src/chart/SunburstChart.tsx +5 -4
  40. package/src/chart/Treemap.tsx +5 -4
  41. package/src/component/ActivePoints.tsx +6 -6
  42. package/src/component/Cell.tsx +23 -5
  43. package/src/component/Cursor.tsx +3 -3
  44. package/src/component/DefaultLegendContent.tsx +8 -6
  45. package/src/component/DefaultTooltipContent.tsx +14 -10
  46. package/src/component/Dots.tsx +5 -5
  47. package/src/component/Label.tsx +13 -10
  48. package/src/component/LabelList.tsx +12 -7
  49. package/src/component/Legend.tsx +26 -21
  50. package/src/component/ResponsiveContainer.tsx +52 -49
  51. package/src/component/Text.tsx +5 -5
  52. package/src/component/Tooltip.tsx +21 -18
  53. package/src/component/TooltipBoundingBox.tsx +18 -16
  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 +5 -6
  59. package/src/context/ErrorBarContext.tsx +2 -2
  60. package/src/context/PanoramaContext.tsx +2 -2
  61. package/src/context/RegisterGraphicalItemId.tsx +4 -2
  62. package/src/context/chartDataContext.tsx +26 -23
  63. package/src/context/chartLayoutContext.tsx +16 -12
  64. package/src/polar/Pie.tsx +13 -12
  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 +6 -7
  72. package/src/shape/Dot.tsx +4 -4
  73. package/src/shape/Polygon.tsx +5 -5
  74. package/src/shape/Rectangle.tsx +22 -20
  75. package/src/shape/Sector.tsx +5 -5
  76. package/src/shape/Symbols.tsx +5 -5
  77. package/src/shape/Trapezoid.tsx +29 -27
  78. package/src/state/RechartsStoreProvider.tsx +5 -3
  79. package/src/state/ReportChartProps.tsx +8 -6
  80. package/src/state/ReportEventSettings.tsx +8 -6
  81. package/src/state/ReportMainChartProps.tsx +11 -9
  82. package/src/state/ReportPolarOptions.tsx +15 -13
  83. package/src/state/SetLegendPayload.ts +1 -1
  84. package/src/state/SetTooltipEntrySettings.tsx +1 -1
  85. package/src/state/brushSlice.ts +10 -8
  86. package/src/state/cartesianAxisSlice.ts +46 -38
  87. package/src/state/chartDataSlice.ts +29 -23
  88. package/src/state/errorBarSlice.ts +22 -16
  89. package/src/state/eventSettingsSlice.ts +11 -9
  90. package/src/state/graphicalItemsSlice.ts +17 -13
  91. package/src/state/layoutSlice.ts +27 -19
  92. package/src/state/legendSlice.ts +24 -18
  93. package/src/state/optionsSlice.ts +8 -6
  94. package/src/state/polarAxisSlice.ts +21 -13
  95. package/src/state/polarOptionsSlice.ts +16 -14
  96. package/src/state/referenceElementsSlice.ts +25 -19
  97. package/src/state/registerInStore.ts +15 -13
  98. package/src/state/renderedTicksSlice.ts +11 -7
  99. package/src/state/rootPropsSlice.ts +16 -14
  100. package/src/state/tooltipSlice.ts +115 -95
  101. package/src/state/unregisterOnCleanup.ts +5 -20
  102. package/src/state/zIndexSlice.ts +50 -42
  103. package/src/synchronisation/useChartSynchronisation.tsx +213 -217
  104. package/src/util/ActiveShapeUtils.tsx +2 -2
  105. package/src/util/BarUtils.tsx +5 -3
  106. package/src/util/DirectPortal.tsx +107 -0
  107. package/src/util/FunnelUtils.tsx +1 -1
  108. package/src/util/RadialBarUtils.tsx +4 -3
  109. package/src/util/createCartesianCharts.tsx +1 -1
  110. package/src/util/createPolarCharts.tsx +1 -1
  111. package/src/util/svgPropertiesAndEvents.ts +1 -1
  112. package/src/util/tooltip/translate.ts +2 -2
  113. package/src/util/types.ts +2 -2
  114. package/src/zIndex/ZIndexLayer.tsx +39 -68
  115. package/src/zIndex/ZIndexPortal.tsx +29 -25
  116. package/test/_data.ts +0 -408
  117. package/test/animation/AnimationController.typed.spec.ts +0 -53
  118. package/test/animation/AnimationControllerImpl.spec.ts +0 -271
  119. package/test/animation/CSSTransitionAnimate.timing.spec.tsx +0 -473
  120. package/test/animation/JavascriptAnimate.spec.tsx +0 -62
  121. package/test/animation/RechartsAnimation.spec.ts +0 -636
  122. package/test/animation/easing.spec.ts +0 -218
  123. package/test/animation/legacyAnimationLengthChange.spec.tsx +0 -803
  124. package/test/animation/matchBy.spec.ts +0 -467
  125. package/test/animation/mockAnimationController.ts +0 -40
  126. package/test/animation/mockControllerAnimationManager.ts +0 -143
  127. package/test/animation/mockTimeoutController.ts +0 -114
  128. package/test/animation/timeoutController.spec.ts +0 -138
  129. package/test/animation/useAnimationStartSnapshot.spec.ts +0 -147
  130. package/test/animation/util.spec.ts +0 -28
  131. package/test/cartesian/Area.animation.spec.tsx +0 -363
  132. package/test/cartesian/Area.range.spec.tsx +0 -54
  133. package/test/cartesian/Area.spec.tsx +0 -1202
  134. package/test/cartesian/Area.stacked.render.spec.tsx +0 -69
  135. package/test/cartesian/Area.typed.spec.tsx +0 -209
  136. package/test/cartesian/Axis.integration.spec.tsx +0 -158
  137. package/test/cartesian/Bar/Bar.csstransition.spec.tsx +0 -299
  138. package/test/cartesian/Bar/Bar.spec.tsx +0 -2314
  139. package/test/cartesian/Bar/Bar.typed.spec.tsx +0 -192
  140. package/test/cartesian/Bar.animation.spec.tsx +0 -426
  141. package/test/cartesian/Bar.stackDomain.spec.tsx +0 -66
  142. package/test/cartesian/Bar.stacked.render.spec.tsx +0 -53
  143. package/test/cartesian/Bar.truncateByDomain.spec.tsx +0 -237
  144. package/test/cartesian/Bar.zeroDimensionFiltering.spec.tsx +0 -336
  145. package/test/cartesian/BarStack.spec.tsx +0 -91
  146. package/test/cartesian/Brush.keyboard.spec.tsx +0 -88
  147. package/test/cartesian/Brush.panorama.spec.tsx +0 -41
  148. package/test/cartesian/Brush.props.spec.tsx +0 -63
  149. package/test/cartesian/Brush.render.spec.tsx +0 -117
  150. package/test/cartesian/Brush.spec.tsx +0 -522
  151. package/test/cartesian/Brush.stacked.spec.tsx +0 -221
  152. package/test/cartesian/CartesianAxis.render.spec.tsx +0 -50
  153. package/test/cartesian/CartesianAxis.spec.tsx +0 -396
  154. package/test/cartesian/CartesianGrid.render.spec.tsx +0 -39
  155. package/test/cartesian/CartesianGrid.spec.tsx +0 -2103
  156. package/test/cartesian/ErrorBar.render.spec.tsx +0 -69
  157. package/test/cartesian/ErrorBar.spec.tsx +0 -2414
  158. package/test/cartesian/Funnel.animation.spec.tsx +0 -241
  159. package/test/cartesian/Funnel.spec.tsx +0 -226
  160. package/test/cartesian/Funnel.typed.spec.tsx +0 -221
  161. package/test/cartesian/GraphicalItemClipPath.scale-behavior.spec.tsx +0 -627
  162. package/test/cartesian/GraphicalItemClipPath.spec.tsx +0 -427
  163. package/test/cartesian/Line.animation.spec.tsx +0 -643
  164. package/test/cartesian/Line.sparseAnimationPath.spec.tsx +0 -98
  165. package/test/cartesian/Line.spec.tsx +0 -471
  166. package/test/cartesian/Line.typed.spec.tsx +0 -152
  167. package/test/cartesian/ReferenceArea.render.spec.tsx +0 -63
  168. package/test/cartesian/ReferenceArea.spec.tsx +0 -663
  169. package/test/cartesian/ReferenceArea.typed.spec.tsx +0 -74
  170. package/test/cartesian/ReferenceDot.render.spec.tsx +0 -55
  171. package/test/cartesian/ReferenceDot.spec.tsx +0 -462
  172. package/test/cartesian/ReferenceDot.typed.spec.tsx +0 -76
  173. package/test/cartesian/ReferenceLine/ReferenceLine.panorama.spec.tsx +0 -184
  174. package/test/cartesian/ReferenceLine/ReferenceLine.spec.tsx +0 -744
  175. package/test/cartesian/ReferenceLine/ReferenceLine.typed.spec.tsx +0 -74
  176. package/test/cartesian/ReferenceLine/getEndPoints.spec.ts +0 -399
  177. package/test/cartesian/ReferenceLine.render.spec.tsx +0 -134
  178. package/test/cartesian/Scatter.animation.spec.tsx +0 -381
  179. package/test/cartesian/Scatter.render.spec.tsx +0 -61
  180. package/test/cartesian/Scatter.spec.tsx +0 -406
  181. package/test/cartesian/Scatter.typed.spec.tsx +0 -153
  182. package/test/cartesian/XAxis/XAxis.barSize.spec.tsx +0 -336
  183. package/test/cartesian/XAxis/XAxis.brush.spec.tsx +0 -266
  184. package/test/cartesian/XAxis/XAxis.categorydomain.spec.tsx +0 -872
  185. package/test/cartesian/XAxis/XAxis.dataKey.spec.tsx +0 -86
  186. package/test/cartesian/XAxis/XAxis.datatypes.spec.tsx +0 -127
  187. package/test/cartesian/XAxis/XAxis.hide.spec.tsx +0 -106
  188. package/test/cartesian/XAxis/XAxis.multiaxis.spec.tsx +0 -336
  189. package/test/cartesian/XAxis/XAxis.numberdomain.spec.tsx +0 -1466
  190. package/test/cartesian/XAxis/XAxis.padding.spec.tsx +0 -758
  191. package/test/cartesian/XAxis/XAxis.padding_clip.spec.tsx +0 -65
  192. package/test/cartesian/XAxis/XAxis.state.spec.tsx +0 -355
  193. package/test/cartesian/XAxis/XAxis.tick.spec.tsx +0 -493
  194. package/test/cartesian/XAxis/XAxis.timescale.spec.tsx +0 -233
  195. package/test/cartesian/XAxis/XAxis.type.spec.tsx +0 -107
  196. package/test/cartesian/XAxis/XAxis.typed.spec.tsx +0 -102
  197. package/test/cartesian/XAxis/XAxis.vertical.spec.tsx +0 -265
  198. package/test/cartesian/XAxis.tickFormatter.spec.tsx +0 -54
  199. package/test/cartesian/YAxis/YAxis.7362.derivedDomain.spec.tsx +0 -230
  200. package/test/cartesian/YAxis/YAxis.7362.spec.tsx +0 -104
  201. package/test/cartesian/YAxis/YAxis.interval-zero.spec.tsx +0 -88
  202. package/test/cartesian/YAxis/YAxis.label.spec.tsx +0 -219
  203. package/test/cartesian/YAxis/YAxis.spec.tsx +0 -1595
  204. package/test/cartesian/YAxis/YAxis.tick.spec.tsx +0 -428
  205. package/test/cartesian/YAxis/YAxis.tickFormatter.spec.tsx +0 -54
  206. package/test/cartesian/YAxis/YAxis.ticks.spec.tsx +0 -263
  207. package/test/cartesian/YAxis/YAxis.type.spec.tsx +0 -107
  208. package/test/cartesian/YAxis/YAxis.typed.spec.tsx +0 -102
  209. package/test/cartesian/ZAxis.spec.tsx +0 -300
  210. package/test/cartesian/ZAxis.typed.spec.tsx +0 -33
  211. package/test/cartesian/__snapshots__/Brush.spec.tsx.snap +0 -5
  212. package/test/cartesian/axisLineAndStroke.spec.tsx +0 -72
  213. package/test/cartesian/getCartesianPosition.spec.ts +0 -907
  214. package/test/cartesian/getEquidistantTicks.spec.ts +0 -88
  215. package/test/cartesian/getTicks.spec.ts +0 -378
  216. package/test/cartesian/miscFeatureGaps.spec.tsx +0 -89
  217. package/test/cartesian/useAnimatedLineLength.spec.ts +0 -168
  218. package/test/chart/AccessibilityLayer.spec.tsx +0 -569
  219. package/test/chart/AccessibilityScans.spec.tsx +0 -286
  220. package/test/chart/AreaChart.spec.tsx +0 -409
  221. package/test/chart/AreaChart.stacked.spec.tsx +0 -1407
  222. package/test/chart/AreaChart.typed.spec.tsx +0 -39
  223. package/test/chart/BarChart.spec.tsx +0 -3719
  224. package/test/chart/BarChart.typed.spec.tsx +0 -60
  225. package/test/chart/CategoricalChart.spec.tsx +0 -255
  226. package/test/chart/ComposedChart.spec.tsx +0 -199
  227. package/test/chart/ComposedChart.typed.spec.tsx +0 -39
  228. package/test/chart/FunnelChart.spec.tsx +0 -215
  229. package/test/chart/FunnelChart.typed.spec.tsx +0 -39
  230. package/test/chart/LineChart.multiseries.spec.tsx +0 -50
  231. package/test/chart/LineChart.smoke.spec.tsx +0 -50
  232. package/test/chart/LineChart.spec.tsx +0 -930
  233. package/test/chart/LineChart.typed.spec.tsx +0 -39
  234. package/test/chart/NicheChartTooltip.spec.tsx +0 -81
  235. package/test/chart/PieChart.spec.tsx +0 -793
  236. package/test/chart/PieChart.typed.spec.tsx +0 -39
  237. package/test/chart/RadarChart.spec.tsx +0 -530
  238. package/test/chart/RadarChart.typed.spec.tsx +0 -39
  239. package/test/chart/RadialBarChart.5966.spec.tsx +0 -48
  240. package/test/chart/RadialBarChart.spec.tsx +0 -679
  241. package/test/chart/RadialBarChart.typed.spec.tsx +0 -39
  242. package/test/chart/RechartsWrapper.spec.tsx +0 -83
  243. package/test/chart/Sankey.content.spec.tsx +0 -46
  244. package/test/chart/Sankey.spec.tsx +0 -952
  245. package/test/chart/Sankey.typed.spec.tsx +0 -29
  246. package/test/chart/ScatterChart.spec.tsx +0 -2613
  247. package/test/chart/ScatterChart.typed.spec.tsx +0 -39
  248. package/test/chart/SunburstChart.spec.tsx +0 -146
  249. package/test/chart/Treemap.animation.spec.tsx +0 -52
  250. package/test/chart/Treemap.spec.tsx +0 -1003
  251. package/test/chart/Treemap.typed.spec.tsx +0 -26
  252. package/test/chart/chartEvents.spec.tsx +0 -127
  253. package/test/chart/responsive.spec.tsx +0 -620
  254. package/test/component/Cell.render.spec.tsx +0 -155
  255. package/test/component/Cell.spec.tsx +0 -12
  256. package/test/component/Cursor.spec.tsx +0 -186
  257. package/test/component/DefaultTooltipContent.spec.tsx +0 -102
  258. package/test/component/Label.render.spec.tsx +0 -63
  259. package/test/component/Label.spec.tsx +0 -686
  260. package/test/component/Label.typed.spec.tsx +0 -46
  261. package/test/component/LabelList.spec.tsx +0 -188
  262. package/test/component/Legend.itemSorter.spec.tsx +0 -704
  263. package/test/component/Legend.render.spec.tsx +0 -92
  264. package/test/component/Legend.spec.tsx +0 -2213
  265. package/test/component/Legend.typed.spec.tsx +0 -22
  266. package/test/component/ResponsiveContainer.spec.tsx +0 -523
  267. package/test/component/ResponsiveContainerDataTest.spec.tsx +0 -51
  268. package/test/component/Text.spec.tsx +0 -415
  269. package/test/component/Text.typed.spec.tsx +0 -46
  270. package/test/component/Tooltip/ActiveDot.spec.tsx +0 -370
  271. package/test/component/Tooltip/Tooltip.animation.spec.tsx +0 -209
  272. package/test/component/Tooltip/Tooltip.content.spec.tsx +0 -128
  273. package/test/component/Tooltip/Tooltip.formatter.spec.tsx +0 -152
  274. package/test/component/Tooltip/Tooltip.includeHidden.spec.tsx +0 -79
  275. package/test/component/Tooltip/Tooltip.multipleDataArrays.spec.tsx +0 -165
  276. package/test/component/Tooltip/Tooltip.offset.spec.tsx +0 -113
  277. package/test/component/Tooltip/Tooltip.state.spec.tsx +0 -74
  278. package/test/component/Tooltip/Tooltip.sync.spec.tsx +0 -639
  279. package/test/component/Tooltip/defaultIndex.spec.tsx +0 -227
  280. package/test/component/Tooltip/graphicalItem.formatter.spec.tsx +0 -138
  281. package/test/component/Tooltip/itemSorter.spec.tsx +0 -2815
  282. package/test/component/Tooltip/tooltipEventType.spec.tsx +0 -344
  283. package/test/component/Tooltip/tooltipMouseHoverSelectors.ts +0 -41
  284. package/test/component/Tooltip/tooltipTestHelpers.tsx +0 -162
  285. package/test/component/Tooltip.defaultIndex.spec.tsx +0 -48
  286. package/test/component/Tooltip.hover.spec.tsx +0 -61
  287. package/test/component/Tooltip.item.spec.tsx +0 -54
  288. package/test/component/Tooltip.keyboard.spec.tsx +0 -51
  289. package/test/component/Tooltip.payload.spec.tsx +0 -1716
  290. package/test/component/Tooltip.touch.spec.tsx +0 -39
  291. package/test/component/Tooltip.visibility.spec.tsx +0 -1889
  292. package/test/component/TooltipBoundingBox.spec.tsx +0 -89
  293. package/test/component/responsiveContainerUtils.spec.ts +0 -205
  294. package/test/container/ClipPath.spec.tsx +0 -602
  295. package/test/container/chartDimensions.spec.tsx +0 -368
  296. package/test/context/chartLayoutContext.spec.tsx +0 -378
  297. package/test/helper/ExpectAxisDomain.tsx +0 -27
  298. package/test/helper/assertNotNull.ts +0 -6
  299. package/test/helper/assertZIndexLayerOrder.ts +0 -19
  300. package/test/helper/createSelectorTestCase.tsx +0 -176
  301. package/test/helper/expectAnimatedPieAngles.ts +0 -100
  302. package/test/helper/expectAnimatedPiePaths.ts +0 -78
  303. package/test/helper/expectAreaCurve.ts +0 -15
  304. package/test/helper/expectAxisTicks.ts +0 -48
  305. package/test/helper/expectBars.ts +0 -54
  306. package/test/helper/expectFunctionReturning.ts +0 -58
  307. package/test/helper/expectLabel.ts +0 -32
  308. package/test/helper/expectLastCalledWith.ts +0 -48
  309. package/test/helper/expectLine.ts +0 -20
  310. package/test/helper/expectPieSectors.ts +0 -80
  311. package/test/helper/expectScale.ts +0 -37
  312. package/test/helper/expectScatterPoints.ts +0 -52
  313. package/test/helper/expectStackGroups.ts +0 -144
  314. package/test/helper/mockAxes.ts +0 -22
  315. package/test/helper/mockGetBoundingClientRect.ts +0 -66
  316. package/test/helper/mockHTMLElementProperty.ts +0 -19
  317. package/test/helper/mockTouchingElement.ts +0 -27
  318. package/test/helper/offsetHelpers.ts +0 -19
  319. package/test/helper/parameterizedTestCases.tsx +0 -99
  320. package/test/helper/produceState.ts +0 -32
  321. package/test/helper/selectorTestHelpers.tsx +0 -63
  322. package/test/helper/trim.spec.ts +0 -35
  323. package/test/helper/trim.ts +0 -11
  324. package/test/hooks/useActiveTooltipDataPoints.spec.tsx +0 -358
  325. package/test/hooks/useAxisDomain.spec.tsx +0 -361
  326. package/test/hooks/useAxisScale.spec.tsx +0 -283
  327. package/test/hooks/useAxisTicks.spec.tsx +0 -130
  328. package/test/hooks/useOffset.spec.tsx +0 -248
  329. package/test/hooks/useTooltipStateHooks.spec.tsx +0 -109
  330. package/test/polar/Pie/Pie-TwoLevelPieChart.spec.tsx +0 -135
  331. package/test/polar/Pie/Pie.spec.tsx +0 -784
  332. package/test/polar/Pie/Pie.typed.spec.tsx +0 -78
  333. package/test/polar/Pie.animation.spec.tsx +0 -529
  334. package/test/polar/PieWithLegend.animation.spec.tsx +0 -142
  335. package/test/polar/PolarAngleAxis/PolarAngleAxis.events.spec.tsx +0 -76
  336. package/test/polar/PolarAngleAxis/PolarAngleAxis.spec.tsx +0 -2079
  337. package/test/polar/PolarAngleAxis/PolarAngleAxis.typed.spec.tsx +0 -102
  338. package/test/polar/PolarAngleAxis.render.spec.tsx +0 -79
  339. package/test/polar/PolarGrid.render.spec.tsx +0 -75
  340. package/test/polar/PolarGrid.spec.tsx +0 -918
  341. package/test/polar/PolarLegendPerRow.render.spec.tsx +0 -85
  342. package/test/polar/PolarRadiusAxis.events.spec.tsx +0 -65
  343. package/test/polar/PolarRadiusAxis.render.spec.tsx +0 -52
  344. package/test/polar/PolarRadiusAxis.spec.tsx +0 -991
  345. package/test/polar/PolarRadiusAxis.typed.spec.tsx +0 -84
  346. package/test/polar/PolarTooltipLegend.render.spec.tsx +0 -80
  347. package/test/polar/Radar.animation.spec.tsx +0 -570
  348. package/test/polar/Radar.render.spec.tsx +0 -71
  349. package/test/polar/Radar.spec.tsx +0 -265
  350. package/test/polar/Radar.typed.spec.tsx +0 -119
  351. package/test/polar/RadialBar/RadialBar.spec.tsx +0 -1521
  352. package/test/polar/RadialBar/RadialBar.typed.spec.tsx +0 -132
  353. package/test/polar/RadialBar.animation.spec.tsx +0 -375
  354. package/test/polar/RadialBar.render.spec.tsx +0 -66
  355. package/test/polar/RadialBar.stacked.spec.tsx +0 -57
  356. package/test/setup.ts +0 -84
  357. package/test/shape/ActiveShape.spec.tsx +0 -181
  358. package/test/shape/Cross.spec.tsx +0 -60
  359. package/test/shape/Cross.typed.spec.tsx +0 -26
  360. package/test/shape/Curve.spec.tsx +0 -368
  361. package/test/shape/Curve.typed.spec.tsx +0 -69
  362. package/test/shape/Dot.spec.tsx +0 -73
  363. package/test/shape/Dot.typed.spec.tsx +0 -30
  364. package/test/shape/Polygon.spec.tsx +0 -357
  365. package/test/shape/Polygon.typed.spec.tsx +0 -28
  366. package/test/shape/Rectangle.animation.spec.tsx +0 -451
  367. package/test/shape/Rectangle.spec.tsx +0 -68
  368. package/test/shape/Rectangle.typed.spec.tsx +0 -24
  369. package/test/shape/Sector.spec.tsx +0 -76
  370. package/test/shape/Sector.typed.spec.tsx +0 -24
  371. package/test/shape/Symbols.spec.tsx +0 -43
  372. package/test/shape/Symbols.typed.spec.tsx +0 -24
  373. package/test/shape/Trapezoid.spec.tsx +0 -50
  374. package/test/shape/Trapezoid.typed.spec.tsx +0 -24
  375. package/test/shape/__snapshots__/Cross.spec.tsx.snap +0 -62
  376. package/test/shape/__snapshots__/Curve.spec.tsx.snap +0 -460
  377. package/test/shape/__snapshots__/Polygon.spec.tsx.snap +0 -58
  378. package/test/shape/__snapshots__/Rectangle.spec.tsx.snap +0 -117
  379. package/test/shape/__snapshots__/Sector.spec.tsx.snap +0 -71
  380. package/test/shape/__snapshots__/Trapezoid.spec.tsx.snap +0 -64
  381. package/test/state/chartDataSlice.spec.ts +0 -53
  382. package/test/state/createCollectionActions.spec.ts +0 -87
  383. package/test/state/createSelector.spec.ts +0 -158
  384. package/test/state/externalEventsMiddleware.spec.ts +0 -178
  385. package/test/state/graphicalItemsSlice.spec.ts +0 -92
  386. package/test/state/hooks.spec.tsx +0 -68
  387. package/test/state/legendSlice.spec.ts +0 -44
  388. package/test/state/mouseEventsMiddleware.spec.ts +0 -75
  389. package/test/state/optionsSlice.spec.ts +0 -19
  390. package/test/state/referenceElementsSlice.spec.ts +0 -84
  391. package/test/state/registerInStore.spec.tsx +0 -101
  392. package/test/state/selectors/areaSelectors.spec.tsx +0 -77
  393. package/test/state/selectors/axisSelectors.spec.tsx +0 -1418
  394. package/test/state/selectors/barStackSelectors.spec.tsx +0 -752
  395. package/test/state/selectors/brushSelectors.spec.tsx +0 -30
  396. package/test/state/selectors/cartesianAxisSlice.spec.ts +0 -96
  397. package/test/state/selectors/combineNiceTicks.spec.ts +0 -207
  398. package/test/state/selectors/combiners/combineActiveTooltipIndex.spec.ts +0 -61
  399. package/test/state/selectors/combiners/combineAllBarPositions.spec.ts +0 -39
  400. package/test/state/selectors/combiners/combineConfiguredScale.spec.ts +0 -56
  401. package/test/state/selectors/combiners/combineDisplayedStackedData.spec.ts +0 -123
  402. package/test/state/selectors/combiners/combineRealScaleType.spec.ts +0 -80
  403. package/test/state/selectors/containerSelectors.spec.tsx +0 -168
  404. package/test/state/selectors/dataSelectors.spec.tsx +0 -136
  405. package/test/state/selectors/legendSelectors.spec.tsx +0 -113
  406. package/test/state/selectors/lineSelectors.spec.tsx +0 -60
  407. package/test/state/selectors/pieSelectors.spec.tsx +0 -72
  408. package/test/state/selectors/radarSelectors.spec.tsx +0 -496
  409. package/test/state/selectors/rootPropsSelectors.spec.tsx +0 -169
  410. package/test/state/selectors/scatterSelectors.spec.tsx +0 -47
  411. package/test/state/selectors/selectActiveTooltipIndex.spec.tsx +0 -234
  412. package/test/state/selectors/selectAllAxes.spec.tsx +0 -18
  413. package/test/state/selectors/selectAxisDomain.spec.tsx +0 -21
  414. package/test/state/selectors/selectAxisDomainIncludingNiceTicks.spec.tsx +0 -19
  415. package/test/state/selectors/selectAxisRangeWithReverse.spec.tsx +0 -22
  416. package/test/state/selectors/selectAxisScale.spec.tsx +0 -91
  417. package/test/state/selectors/selectBarRectangles.stackOffset.spec.tsx +0 -503
  418. package/test/state/selectors/selectBaseAxis.spec.tsx +0 -56
  419. package/test/state/selectors/selectCartesianItemsSettings.spec.tsx +0 -57
  420. package/test/state/selectors/selectChartOffset.spec.tsx +0 -26
  421. package/test/state/selectors/selectDisplayedData.spec.tsx +0 -282
  422. package/test/state/selectors/selectIsTooltipActive.spec.tsx +0 -231
  423. package/test/state/selectors/selectNumericalDomain.spec.tsx +0 -21
  424. package/test/state/selectors/selectRealScaleType.spec.tsx +0 -19
  425. package/test/state/selectors/selectStackGroups.spec.tsx +0 -322
  426. package/test/state/selectors/selectXAxisPosition.spec.tsx +0 -22
  427. package/test/state/selectors/selectYAxisPosition.spec.tsx +0 -22
  428. package/test/state/selectors/selectorMemoization.spec.tsx +0 -136
  429. package/test/state/selectors/selectors.spec.tsx +0 -1613
  430. package/test/state/throttling.spec.ts +0 -200
  431. package/test/state/zIndexSlice.spec.ts +0 -85
  432. package/test/synchronisation/useChartSynchronisation.spec.tsx +0 -225
  433. package/test/util/BarUtils.spec.ts +0 -39
  434. package/test/util/CartesianUtils/CartesianUtils.spec.ts +0 -261
  435. package/test/util/CartesianUtils/rectWithPoints.spec.ts +0 -48
  436. package/test/util/ChartUtils/ChartUtils.spec.ts +0 -491
  437. package/test/util/ChartUtils/appendOffsetOfLegend.spec.ts +0 -136
  438. package/test/util/ChartUtils/appendOffsetOfLegend.spec.tsx +0 -133
  439. package/test/util/ChartUtils/getCateCoordinateOfLine.spec.ts +0 -97
  440. package/test/util/ChartUtils/getStackedData.spec.ts +0 -416
  441. package/test/util/ChartUtils/truncateByDomain.spec.ts +0 -70
  442. package/test/util/DataUtils.spec.ts +0 -385
  443. package/test/util/DomUtils.spec.tsx +0 -117
  444. package/test/util/FunnelUtils.spec.tsx +0 -70
  445. package/test/util/Global.spec.ts +0 -11
  446. package/test/util/LRUCache.spec.ts +0 -81
  447. package/test/util/LogUtils.spec.ts +0 -45
  448. package/test/util/PolarUtils.spec.ts +0 -66
  449. package/test/util/ReduceCssCalcPrototype.spec.ts +0 -141
  450. package/test/util/ShallowEqual.spec.ts +0 -102
  451. package/test/util/TickUtils.spec.ts +0 -29
  452. package/test/util/createChartHelpers.spec.tsx +0 -210
  453. package/test/util/cursor/getCursorPoints.spec.ts +0 -136
  454. package/test/util/cursor/getCursorRectangle.spec.ts +0 -50
  455. package/test/util/cursor/getRadialCursorPoints.spec.ts +0 -36
  456. package/test/util/errorValue.spec.ts +0 -69
  457. package/test/util/getEveryNth.spec.ts +0 -39
  458. package/test/util/getRadiusAndStrokeWidthFromDot.spec.ts +0 -51
  459. package/test/util/getRelativeCoordinate.spec.ts +0 -250
  460. package/test/util/getSliced.spec.ts +0 -45
  461. package/test/util/isDomainSpecifiedByUser.spec.ts +0 -207
  462. package/test/util/isWellBehavedNumber.spec.ts +0 -54
  463. package/test/util/payload/getUniqPayload.spec.ts +0 -56
  464. package/test/util/propsAreEqual.spec.ts +0 -75
  465. package/test/util/round.spec.ts +0 -112
  466. package/test/util/scale/arithmetic.spec.ts +0 -61
  467. package/test/util/scale/createCategoricalInverse.spec.ts +0 -84
  468. package/test/util/scale/getNiceTickValues.spec.ts +0 -421
  469. package/test/util/scale/getTickValuesFixedDomain.spec.ts +0 -155
  470. package/test/util/svgPropertiesAndEvents.spec.tsx +0 -206
  471. package/test/util/svgPropertiesNoEvents.spec.tsx +0 -228
  472. package/test/util/tooltip/translate.spec.ts +0 -396
  473. package/test/util/useAnimationId.spec.tsx +0 -59
  474. package/test/util/useElementOffset.spec.tsx +0 -173
  475. package/test/util/usePrefersReducedMotion.spec.ts +0 -54
  476. package/test/util/useUniqueId.spec.ts +0 -99
  477. package/test/utils/diagnostics-allowlist.ts +0 -18
  478. package/test/utils/diagnostics.ts +0 -58
  479. package/test/zIndex/AllZIndexPortals.spec.tsx +0 -83
  480. package/test/zIndex/DefaultZIndexes.spec.ts +0 -80
  481. package/test/zIndex/DynamicZIndex.spec.tsx +0 -102
  482. package/test/zIndex/ZIndexLayer.portalOwner.spec.tsx +0 -125
  483. package/test/zIndex/componentZIndex.spec.tsx +0 -255
  484. package/test/zIndex/getZIndexFromUnknown.spec.ts +0 -51
  485. package/test/zIndex/multiChartZIndexIsolation.spec.tsx +0 -90
  486. package/test/zIndex/zIndexSelectors.spec.ts +0 -172
  487. package/test-results/.last-run.json +0 -4
  488. package/tsconfig.json +0 -11
@@ -1,1595 +0,0 @@
1
- import { describe, expect, it, test, vi } from "vitest";
2
- import type { Mock } from "vitest";
3
- import { createEffect, createSignal, flush } from "solid-js";
4
- import type { JSX } from "@solidjs/web";
5
- import {
6
- Area,
7
- AreaChart,
8
- Bar,
9
- BarChart,
10
- CartesianGrid,
11
- ComposedChart,
12
- Line,
13
- LineChart,
14
- ReferenceArea,
15
- ReferenceDot,
16
- ReferenceLine,
17
- Tooltip,
18
- XAxis,
19
- YAxis,
20
- } from "../../../src";
21
- import type { YAxisProps, IfOverflow } from "../../../src";
22
- import type {
23
- AxisDomain,
24
- CategoricalDomain,
25
- NumberDomain,
26
- StackOffsetType,
27
- } from "../../../src/util/types";
28
- import { pageData, rangeData } from "../../_data";
29
- import { useAppSelector } from "../../../src/state/hooks";
30
- import {
31
- implicitYAxis,
32
- selectAxisDomain,
33
- selectNumericalDomain,
34
- selectRenderableAxisSettings,
35
- } from "../../../src/state/selectors/axisSelectors";
36
- import type { YAxisSettings } from "../../../src/state/cartesianAxisSlice";
37
- import { expectYAxisTicks } from "../../helper/expectAxisTicks";
38
- import { useIsPanorama } from "../../../src/context/PanoramaContext";
39
- import { mockGetBoundingClientRect } from "../../helper/mockGetBoundingClientRect";
40
- import { getCalculatedYAxisWidth } from "../../../src/util/YAxisUtils";
41
- import { expectLastCalledWith } from "../../helper/expectLastCalledWith";
42
- import { createSelectorTestCase } from "../../helper/createSelectorTestCase";
43
- import { assertNotNull } from "../../helper/assertNotNull";
44
- import { render, fireEvent } from "@solidjs/testing-library";
45
-
46
- describe("<YAxis />", () => {
47
- const data = [
48
- { name: "Page A", uv: 400, pv: 2400, amt: 2400 },
49
- { name: "Page B", uv: 300, pv: 1398, amt: 2400 },
50
- { name: "Page C", uv: 200, pv: 9800, amt: 2400 },
51
- { name: "Page D", uv: 278, pv: 3908, amt: 2400 },
52
- { name: "Page E", uv: 189, pv: 4800, amt: 2400 },
53
- ];
54
-
55
- it("Should render 3 y-CartesianAxis in AreaChart", () => {
56
- const { container } = render(() => (
57
- <AreaChart width={600} height={400} data={data}>
58
- <YAxis type="number" yAxisId={0} />
59
- <YAxis type="number" orientation="right" yAxisId={1} />
60
- <YAxis type="number" orientation="right" yAxisId={2} />
61
- <Area dataKey="uv" stroke="#ff7300" fill="#ff7300" strokeWidth={2} yAxisId={0} />
62
- <Area dataKey="pv" stroke="#387908" fill="#387908" strokeWidth={2} yAxisId={1} />
63
- <Area dataKey="amt" stroke="#38abc8" fill="#38abc8" strokeWidth={2} yAxisId={2} />
64
- </AreaChart>
65
- ));
66
-
67
- expect(container.querySelectorAll(".recharts-cartesian-axis-line")).toHaveLength(3);
68
- });
69
-
70
- describe("Area with range", () => {
71
- const renderTestCase = createSelectorTestCase((props) => (
72
- <AreaChart
73
- width={500}
74
- height={400}
75
- data={rangeData}
76
- margin={{
77
- top: 10,
78
- right: 30,
79
- left: 0,
80
- bottom: 0,
81
- }}
82
- >
83
- <XAxis dataKey="day" />
84
- <YAxis />
85
- <Area dataKey="temperature" stroke="#d82428" fill="#8884d8" />
86
- <Tooltip defaultIndex={4} active />
87
- {props.children}
88
- </AreaChart>
89
- ));
90
-
91
- it("should render YAxis ticks", () => {
92
- const { container } = renderTestCase();
93
- expectYAxisTicks(container, [
94
- {
95
- textContent: "-6",
96
- x: "52",
97
- y: "370",
98
- },
99
- {
100
- textContent: "0",
101
- x: "52",
102
- y: "280",
103
- },
104
- {
105
- textContent: "6",
106
- x: "52",
107
- y: "190",
108
- },
109
- {
110
- textContent: "12",
111
- x: "52",
112
- y: "100",
113
- },
114
- {
115
- textContent: "18",
116
- x: "52",
117
- y: "10",
118
- },
119
- ]);
120
- });
121
-
122
- it("should select numerical domain", () => {
123
- const { spy } = renderTestCase((state) => selectNumericalDomain(state, "yAxis", 0, false));
124
- expectLastCalledWith(spy, [-3, 16]);
125
- });
126
-
127
- it("should select final domain", () => {
128
- const { spy } = renderTestCase((state) => selectAxisDomain(state, "yAxis", 0, false));
129
- expectLastCalledWith(spy, [-3, 16]);
130
- });
131
- });
132
-
133
- it("Should render 5 ticks", () => {
134
- const { container } = render(() => (
135
- <AreaChart width={600} height={400} data={data}>
136
- <YAxis type="number" />
137
- <Area dataKey="uv" stroke="#ff7300" fill="#ff7300" />
138
- </AreaChart>
139
- ));
140
- const ticks = container.querySelectorAll("text");
141
-
142
- expect(ticks).toHaveLength(5);
143
- expect(ticks[1]!.getAttribute("y")).toBe("297.5");
144
- });
145
-
146
- const casesThatShowTicks: [number, AxisDomain, string][] = [
147
- // [ticksLength, domain, textContentOfTickElement]
148
- [5, [0, 10000], "10000"],
149
- [5, [0, "dataMax"], "9800"],
150
- [5, [0, "dataMax - 100"], "9800"],
151
- ];
152
-
153
- test.each(casesThatShowTicks)(
154
- "Should render %s ticks when domain={%s}",
155
- (length, domain, textContent) => {
156
- const { container } = render(() => (
157
- <AreaChart width={600} height={400} data={data}>
158
- <YAxis type="number" domain={domain} />
159
- <Area dataKey="uv" stroke="#ff7300" fill="#ff7300" />
160
- <Area dataKey="pv" stroke="#ff7300" fill="#ff7300" />
161
- </AreaChart>
162
- ));
163
- const ticks = container.querySelectorAll("text");
164
-
165
- expect(ticks).toHaveLength(length);
166
- expect(ticks[ticks.length - 1]).toHaveTextContent(textContent);
167
- },
168
- );
169
-
170
- it("should render multiple axes", () => {
171
- const { container } = render(() => (
172
- <AreaChart width={600} height={400} data={data}>
173
- <YAxis yAxisId="a" />
174
- <Area dataKey="uv" yAxisId="a" />
175
- <YAxis yAxisId="b" />
176
- <Area dataKey="pv" yAxisId="b" />
177
- <YAxis yAxisId="c" orientation="right" />
178
- <Area dataKey="amt" yAxisId="c" />
179
- <YAxis yAxisId="d" type="category" orientation="right" />
180
- <Area dataKey="name" yAxisId="d" />
181
- </AreaChart>
182
- ));
183
-
184
- expectYAxisTicks(container, [
185
- { textContent: "0", x: "117", y: "395" },
186
- { textContent: "100", x: "117", y: "297.5" },
187
- { textContent: "200", x: "117", y: "200" },
188
- { textContent: "300", x: "117", y: "102.5" },
189
- { textContent: "400", x: "117", y: "5" },
190
- { textContent: "0", x: "57", y: "395" },
191
- { textContent: "2500", x: "57", y: "297.5" },
192
- { textContent: "5000", x: "57", y: "200" },
193
- { textContent: "7500", x: "57", y: "102.5" },
194
- { textContent: "10000", x: "57", y: "5" },
195
- { textContent: "0", x: "483", y: "395" },
196
- { textContent: "600", x: "483", y: "297.5" },
197
- { textContent: "1200", x: "483", y: "200" },
198
- { textContent: "1800", x: "483", y: "102.5" },
199
- { textContent: "2400", x: "483", y: "5" },
200
- { textContent: "Page A", x: "543", y: "395" },
201
- { textContent: "Page B", x: "543", y: "297.5" },
202
- { textContent: "Page C", x: "543", y: "200" },
203
- { textContent: "Page D", x: "543", y: "102.5" },
204
- { textContent: "Page E", x: "543", y: "5" },
205
- ]);
206
- });
207
-
208
- it("should render multiple axes with some ticks mirrored", () => {
209
- const { container } = render(() => (
210
- <AreaChart width={600} height={400} data={data}>
211
- <YAxis yAxisId="a" />
212
- <Area dataKey="uv" yAxisId="a" />
213
- <YAxis mirror yAxisId="b" />
214
- <Area dataKey="pv" yAxisId="b" />
215
- <YAxis yAxisId="c" orientation="right" />
216
- <Area dataKey="amt" yAxisId="c" />
217
- <YAxis mirror yAxisId="d" type="category" orientation="right" />
218
- <Area dataKey="name" yAxisId="d" />
219
- </AreaChart>
220
- ));
221
-
222
- expectYAxisTicks(container, [
223
- { textContent: "0", x: "57", y: "395" },
224
- { textContent: "100", x: "57", y: "297.5" },
225
- { textContent: "200", x: "57", y: "200" },
226
- { textContent: "300", x: "57", y: "102.5" },
227
- { textContent: "400", x: "57", y: "5" },
228
- { textContent: "0", x: "73", y: "395" },
229
- { textContent: "2500", x: "73", y: "297.5" },
230
- { textContent: "5000", x: "73", y: "200" },
231
- { textContent: "7500", x: "73", y: "102.5" },
232
- { textContent: "10000", x: "73", y: "5" },
233
- { textContent: "0", x: "543", y: "395" },
234
- { textContent: "600", x: "543", y: "297.5" },
235
- { textContent: "1200", x: "543", y: "200" },
236
- { textContent: "1800", x: "543", y: "102.5" },
237
- { textContent: "2400", x: "543", y: "5" },
238
- { textContent: "Page A", x: "527", y: "395" },
239
- { textContent: "Page B", x: "527", y: "297.5" },
240
- { textContent: "Page C", x: "527", y: "200" },
241
- { textContent: "Page D", x: "527", y: "102.5" },
242
- { textContent: "Page E", x: "527", y: "5" },
243
- ]);
244
- });
245
-
246
- it("should not leave space for hidden axes", () => {
247
- const { container } = render(() => (
248
- <AreaChart width={600} height={400} data={data}>
249
- <YAxis yAxisId="a" />
250
- <Area dataKey="uv" yAxisId="a" />
251
- <YAxis yAxisId="b" hide />
252
- <Area dataKey="pv" yAxisId="b" />
253
- <YAxis yAxisId="c" orientation="right" />
254
- <Area dataKey="amt" yAxisId="c" />
255
- <YAxis yAxisId="d" type="category" orientation="right" hide />
256
- <Area dataKey="name" yAxisId="d" />
257
- </AreaChart>
258
- ));
259
- expectYAxisTicks(container, [
260
- { textContent: "0", x: "57", y: "395" },
261
- { textContent: "100", x: "57", y: "297.5" },
262
- { textContent: "200", x: "57", y: "200" },
263
- { textContent: "300", x: "57", y: "102.5" },
264
- { textContent: "400", x: "57", y: "5" },
265
- { textContent: "0", x: "543", y: "395" },
266
- { textContent: "600", x: "543", y: "297.5" },
267
- { textContent: "1200", x: "543", y: "200" },
268
- { textContent: "1800", x: "543", y: "102.5" },
269
- { textContent: "2400", x: "543", y: "5" },
270
- ]);
271
- });
272
-
273
- it('Renders evenly distributed ticks when domain={[0, 1000]} and dataKey is "noExist", and allowDataOverflow', () => {
274
- const domain = [0, 1000] as const;
275
- const { container } = render(() => (
276
- <AreaChart width={600} height={400} data={data}>
277
- <YAxis domain={domain} allowDataOverflow />
278
- <Area dataKey="noExist" stroke="#ff7300" fill="#ff7300" />
279
- </AreaChart>
280
- ));
281
- expectYAxisTicks(container, [
282
- { textContent: "0", x: "57", y: "395" },
283
- { textContent: "250", x: "57", y: "297.5" },
284
- { textContent: "500", x: "57", y: "200" },
285
- { textContent: "750", x: "57", y: "102.5" },
286
- { textContent: "1000", x: "57", y: "5" },
287
- ]);
288
- });
289
-
290
- it('Renders no ticks when domain={[0, 1000]} and dataKey is "noExist", and allowDataOverflow=false', () => {
291
- const { container } = render(() => (
292
- <AreaChart width={600} height={400} data={data}>
293
- <YAxis domain={[0, 1000]} allowDataOverflow={false} />
294
- <Area dataKey="noExist" stroke="#ff7300" fill="#ff7300" />
295
- </AreaChart>
296
- ));
297
- expectYAxisTicks(container, []);
298
- });
299
-
300
- it('Renders no ticks when dataKey is "noExist"', () => {
301
- const { container } = render(() => (
302
- <AreaChart width={600} height={400} data={data}>
303
- <YAxis />
304
- <Area dataKey="noExist" stroke="#ff7300" fill="#ff7300" />
305
- </AreaChart>
306
- ));
307
- expectYAxisTicks(container, []);
308
- });
309
-
310
- const casesThatDoNotShowTicks: [AxisDomain][] = [
311
- [[0, "dataMax + 100"]],
312
- [[0, "dataMax - 100"]],
313
- [["auto", "auto"]],
314
- ];
315
-
316
- test.each(casesThatDoNotShowTicks)(
317
- 'Should render 0 ticks when domain={%s} and dataKey is "noExist" ',
318
- (domain) => {
319
- const { container } = render(() => (
320
- <AreaChart width={600} height={400} data={data}>
321
- <YAxis domain={domain} />
322
- <Area dataKey="noExist" stroke="#ff7300" fill="#ff7300" />
323
- </AreaChart>
324
- ));
325
- const ticks = container.querySelectorAll("text");
326
-
327
- expect(ticks).toHaveLength(0);
328
- },
329
- );
330
-
331
- describe("in simple AreaChart", () => {
332
- const renderTestCase = createSelectorTestCase((props) => (
333
- <AreaChart width={600} height={400} data={data}>
334
- <YAxis type="number" ticks={[0, 400, 800, 1200]} />
335
- <Area dataKey="uv" stroke="#ff7300" fill="#ff7300" />
336
- {props.children}
337
- </AreaChart>
338
- ));
339
-
340
- it("should select numerical domain", () => {
341
- const { spy } = renderTestCase((state) => selectNumericalDomain(state, "yAxis", 0, false));
342
- expectLastCalledWith(spy, [0, 1200]);
343
- });
344
-
345
- it("should select domain", () => {
346
- const { spy } = renderTestCase((state) => selectAxisDomain(state, "yAxis", 0, false));
347
- expectLastCalledWith(spy, [0, 1200]);
348
- });
349
-
350
- it("should render ticks", () => {
351
- const { container } = renderTestCase();
352
- expectYAxisTicks(container, [
353
- { textContent: "0", x: "57", y: "395" },
354
- { textContent: "400", x: "57", y: "265.00000000000006" },
355
- { textContent: "800", x: "57", y: "135.00000000000003" },
356
- { textContent: "1200", x: "57", y: "5" },
357
- ]);
358
- });
359
- });
360
-
361
- // SKIP: parity gap — YAxisProps has no `onClick`/tick-click handler in this port
362
- // (verified: `grep onClick src/cartesian/YAxis.tsx` → none). The tick click event
363
- // contract (data/index/event passed to onClick) is unimplemented.
364
- it("Should pass data, index, and event to the onClick event handler", () => {
365
- // intentionally empty — see skip comment above.
366
- });
367
-
368
- it("Renders axis based on specified domain when data overflow is allowed", () => {
369
- /*
370
- * We take domain values that have nothing to do with the test data to make sure they're really used.
371
- * We generate a random integer between 1 and 100.
372
- */
373
- const domainStart = Math.round(Math.random() * 100);
374
- const domainEnd = domainStart + Math.round(Math.random() * 100);
375
-
376
- const { container } = render(() => (
377
- <AreaChart width={600} height={400} data={data}>
378
- <YAxis type="number" domain={[domainStart, domainEnd]} allowDataOverflow />
379
- <Area dataKey="uv" stroke="#ff7300" fill="#ff7300" />
380
- </AreaChart>
381
- ));
382
-
383
- // all ticks
384
- const ticks = container.querySelectorAll(".recharts-cartesian-axis-tick-value");
385
-
386
- // value of each tick
387
- const tickValues: number[] = [];
388
- ticks.forEach((tick) => {
389
- const tickValueText = tick.textContent;
390
- expect(tickValueText).toBeTruthy();
391
- // convert string to number
392
- if (tickValueText) tickValues.push(Number(tickValueText));
393
- });
394
-
395
- const tickValueMax = Math.max(...tickValues);
396
- const tickValueMin = Math.min(...tickValues);
397
-
398
- expect(tickValueMin).toBe(domainStart);
399
- expect(tickValueMax).toBe(domainEnd);
400
- });
401
-
402
- it("Render ticks reversed", () => {
403
- const { container } = render(() => (
404
- <AreaChart width={600} height={400} data={data}>
405
- <YAxis reversed type="number" />
406
- <Area dataKey="uv" stroke="#ff7300" fill="#ff7300" />
407
- </AreaChart>
408
- ));
409
- expectYAxisTicks(container, [
410
- { textContent: "0", x: "57", y: "5" },
411
- { textContent: "100", x: "57", y: "102.5" },
412
- { textContent: "200", x: "57", y: "200" },
413
- { textContent: "300", x: "57", y: "297.5" },
414
- { textContent: "400", x: "57", y: "395" },
415
- ]);
416
- });
417
-
418
- it("Should skip rendering ticks with empty text", () => {
419
- const areaData = [
420
- { day: "05-01", weather: "sunny" },
421
- { day: "05-02" },
422
- { day: "05-03", weather: "cloudy" },
423
- { day: "05-04", weather: "rain" },
424
- ];
425
- const { container } = render(() => (
426
- <AreaChart width={400} height={400} data={areaData}>
427
- <YAxis type="category" />
428
- <Area type="stepAfter" dataKey="weather" stroke="#0088FE" />
429
- </AreaChart>
430
- ));
431
- expectYAxisTicks(container, [
432
- { textContent: "sunny", x: "57", y: "395" },
433
- { textContent: "cloudy", x: "57", y: "200" },
434
- { textContent: "rain", x: "57", y: "5" },
435
- ]);
436
- });
437
-
438
- it("Should render the YAxis line without any ticks", () => {
439
- const areaData = [{ day: "05-01" }, { day: "05-02" }];
440
- const { container } = render(() => (
441
- <AreaChart width={400} height={400} data={areaData}>
442
- <YAxis type="category" />
443
- <Area type="stepAfter" dataKey="weather" stroke="#0088FE" />
444
- </AreaChart>
445
- ));
446
- const ticksGroup = container.getElementsByClassName("recharts-cartesian-axis-tick-line");
447
- expect(ticksGroup).toHaveLength(0);
448
-
449
- const axisLine = container.getElementsByClassName("recharts-cartesian-axis-line");
450
- expect(axisLine).toHaveLength(1);
451
-
452
- expectYAxisTicks(container, []);
453
- });
454
-
455
- it("should not render anything when attempting to render outside of Chart", () => {
456
- const { container } = render(() => <YAxis dataKey="x" name="stature" unit="cm" />);
457
- expect(container.querySelectorAll(".recharts-cartesian-axis-line")).toHaveLength(0);
458
- });
459
-
460
- describe("includeHidden", () => {
461
- it.each([undefined, true, false])(
462
- "should show ticks for visibleData when includeHidden=%s",
463
- (includeHidden) => {
464
- const domainSpy = vi.fn();
465
- function Comp(props: {
466
- domainSpy: (domain: NumberDomain | CategoricalDomain | undefined) => void;
467
- }): null {
468
- const isPanorama = useIsPanorama();
469
- const domain = useAppSelector((state) => selectAxisDomain(state, "yAxis", 0, isPanorama));
470
- createEffect(
471
- () => domain(),
472
- (d) => props.domainSpy(d),
473
- );
474
- return null;
475
- }
476
- const { container } = render(() => (
477
- <BarChart width={600} height={400} data={data}>
478
- <YAxis includeHidden={includeHidden} />
479
- <Bar dataKey="pv" />
480
- <Bar dataKey="uv" />
481
- <Comp domainSpy={domainSpy} />
482
- </BarChart>
483
- ));
484
- expectYAxisTicks(container, [
485
- { textContent: "0", x: "57", y: "395" },
486
- { textContent: "2500", x: "57", y: "297.5" },
487
- { textContent: "5000", x: "57", y: "200" },
488
- { textContent: "7500", x: "57", y: "102.5" },
489
- { textContent: "10000", x: "57", y: "5" },
490
- ]);
491
- expect(domainSpy).toHaveBeenLastCalledWith([0, 9800]);
492
- },
493
- );
494
-
495
- it.each([false, undefined])(
496
- "should exclude hidden items domain when includeHidden=%s",
497
- (includeHidden) => {
498
- const domainSpy = vi.fn();
499
- function Comp(props: {
500
- domainSpy: (domain: NumberDomain | CategoricalDomain | undefined) => void;
501
- }): null {
502
- const isPanorama = useIsPanorama();
503
- const domain = useAppSelector((state) => selectAxisDomain(state, "yAxis", 0, isPanorama));
504
- createEffect(
505
- () => domain(),
506
- (d) => props.domainSpy(d),
507
- );
508
- return null;
509
- }
510
- const { container } = render(() => (
511
- <BarChart width={600} height={400} data={data}>
512
- <YAxis includeHidden={includeHidden} />
513
- <Bar dataKey="pv" hide />
514
- <Bar dataKey="uv" />
515
- <Comp domainSpy={domainSpy} />
516
- </BarChart>
517
- ));
518
- expectYAxisTicks(container, [
519
- { textContent: "0", x: "57", y: "395" },
520
- { textContent: "100", x: "57", y: "297.5" },
521
- { textContent: "200", x: "57", y: "200" },
522
- { textContent: "300", x: "57", y: "102.5" },
523
- { textContent: "400", x: "57", y: "5" },
524
- ]);
525
- expect(domainSpy).toHaveBeenLastCalledWith([0, 400]);
526
- },
527
- );
528
-
529
- it("should include hidden data domain when includeHidden=true", () => {
530
- const domainSpy = vi.fn();
531
- function Comp(props: {
532
- domainSpy: (domain: NumberDomain | CategoricalDomain | undefined) => void;
533
- }): null {
534
- const isPanorama = useIsPanorama();
535
- const domain = useAppSelector((state) => selectAxisDomain(state, "yAxis", 0, isPanorama));
536
- createEffect(
537
- () => domain(),
538
- (d) => props.domainSpy(d),
539
- );
540
- return null;
541
- }
542
- const { container } = render(() => (
543
- <BarChart width={600} height={400} data={data}>
544
- <YAxis includeHidden />
545
- <Bar dataKey="pv" hide />
546
- <Bar dataKey="uv" />
547
- <Comp domainSpy={domainSpy} />
548
- </BarChart>
549
- ));
550
- expectYAxisTicks(container, [
551
- { textContent: "0", x: "57", y: "395" },
552
- { textContent: "2500", x: "57", y: "297.5" },
553
- { textContent: "5000", x: "57", y: "200" },
554
- { textContent: "7500", x: "57", y: "102.5" },
555
- { textContent: "10000", x: "57", y: "5" },
556
- ]);
557
- expect(domainSpy).toHaveBeenLastCalledWith([0, 9800]);
558
- });
559
- });
560
-
561
- it("should render all labels in an example", () => {
562
- const view = render(() => (
563
- <AreaChart
564
- width={500}
565
- height={400}
566
- data={data}
567
- margin={{
568
- top: 10,
569
- right: 30,
570
- left: 0,
571
- bottom: 0,
572
- }}
573
- >
574
- <YAxis />
575
- <Area type="monotone" dataKey="uv" stroke="#000" fill="url(#splitColor)" />
576
- </AreaChart>
577
- ));
578
- expect(view.getByText("0")).toBeVisible();
579
- expect(view.getByText("100")).toBeVisible();
580
- expect(view.getByText("200")).toBeVisible();
581
- expect(view.getByText("300")).toBeVisible();
582
- expect(view.getByText("400")).toBeVisible();
583
- });
584
-
585
- it("should render all labels in another example", () => {
586
- const { container } = render(() => (
587
- <LineChart
588
- width={500}
589
- height={300}
590
- data={pageData}
591
- accessibilityLayer
592
- margin={{
593
- top: 5,
594
- right: 5,
595
- bottom: 5,
596
- left: 0,
597
- }}
598
- >
599
- <YAxis />
600
- <CartesianGrid stroke="#eee" strokeDasharray="5 5" />
601
- <Line type="monotone" dataKey="uv" stroke="#8884d8" />
602
- <Line type="monotone" dataKey="pv" stroke="#82ca9d" />
603
- <Tooltip />
604
- </LineChart>
605
- ));
606
- expectYAxisTicks(container, [
607
- { textContent: "0", x: "52", y: "295" },
608
- { textContent: "400", x: "52", y: "222.5" },
609
- { textContent: "800", x: "52", y: "150" },
610
- { textContent: "1200", x: "52", y: "77.5" },
611
- { textContent: "1600", x: "52", y: "5" },
612
- ]);
613
- });
614
-
615
- describe("state integration", () => {
616
- it("should publish its configuration to redux store", () => {
617
- const spy = vi.fn();
618
- function Comp(props: { spy: (settings: YAxisSettings) => void }): null {
619
- const settings = useAppSelector((state) =>
620
- selectRenderableAxisSettings(state, "yAxis", "foo"),
621
- );
622
- createEffect(
623
- () => settings(),
624
- (v) => props.spy(v as YAxisSettings),
625
- );
626
- return null;
627
- }
628
- const fakeTickFormatter = () => "";
629
- const { container } = render(() => (
630
- <BarChart width={100} height={100}>
631
- <YAxis
632
- yAxisId="foo"
633
- scale="log"
634
- type="number"
635
- includeHidden
636
- reversed
637
- ticks={[1, 2, 3]}
638
- width={32}
639
- orientation="right"
640
- mirror
641
- name="axis name"
642
- unit="axis unit"
643
- interval={9}
644
- angle={17}
645
- tick={false}
646
- minTickGap={8}
647
- tickFormatter={fakeTickFormatter}
648
- />
649
- <Comp spy={spy} />
650
- </BarChart>
651
- ));
652
- // PARITY GAP (rendering only): the published settings (the subject of this test)
653
- // are asserted below. recharts asserts `.yAxis` is visible; this port gates the
654
- // axis Layer on a resolvable domain, so a data-less chart renders no `.yAxis`.
655
- // We assert the chart surface mounted instead.
656
- expect(container.querySelector(".recharts-surface")).toBeVisible();
657
- const expectedSettings: YAxisSettings = {
658
- angle: 17,
659
- minTickGap: 8,
660
- tick: false,
661
- tickFormatter: fakeTickFormatter,
662
- interval: 9,
663
- name: "axis name",
664
- unit: "axis unit",
665
- hide: false,
666
- orientation: "right",
667
- mirror: true,
668
- width: 32,
669
- ticks: [1, 2, 3],
670
- includeHidden: true,
671
- tickCount: 5,
672
- allowDecimals: true,
673
- id: "foo",
674
- scale: "log",
675
- type: "number",
676
- allowDataOverflow: false,
677
- allowDuplicatedCategory: true,
678
- dataKey: undefined,
679
- domain: undefined,
680
- padding: {
681
- top: 0,
682
- bottom: 0,
683
- },
684
- reversed: true,
685
- niceTicks: "auto",
686
- };
687
- expectLastCalledWith(spy, expectedSettings);
688
- });
689
-
690
- it("should remove the configuration from store when DOM element is removed", () => {
691
- // recharts rerenders to add/remove axis children; this Solid port uses static
692
- // renders (unmount between) per variant to avoid the dynamic-remount artifact.
693
- const expectedSettingsFoo: YAxisSettings = {
694
- angle: 0,
695
- minTickGap: 5,
696
- tick: true,
697
- tickFormatter: undefined,
698
- interval: "preserveEnd",
699
- name: undefined,
700
- unit: undefined,
701
- orientation: "left",
702
- mirror: false,
703
- width: 60,
704
- ticks: undefined,
705
- includeHidden: false,
706
- tickCount: 5,
707
- allowDecimals: true,
708
- id: "foo",
709
- scale: "log",
710
- type: "number",
711
- allowDataOverflow: false,
712
- allowDuplicatedCategory: true,
713
- dataKey: undefined,
714
- domain: undefined,
715
- padding: {
716
- top: 0,
717
- bottom: 0,
718
- },
719
- reversed: false,
720
- niceTicks: "auto",
721
- hide: false,
722
- };
723
- const expectedSettingsBar: YAxisSettings = {
724
- angle: 0,
725
- minTickGap: 5,
726
- tick: true,
727
- tickFormatter: undefined,
728
- interval: "preserveEnd",
729
- name: undefined,
730
- unit: undefined,
731
- hide: false,
732
- orientation: "left",
733
- mirror: false,
734
- width: 60,
735
- includeHidden: false,
736
- id: "bar",
737
- scale: "utc",
738
- type: "category",
739
- allowDataOverflow: false,
740
- allowDuplicatedCategory: true,
741
- dataKey: undefined,
742
- domain: undefined,
743
- padding: {
744
- top: 0,
745
- bottom: 0,
746
- },
747
- allowDecimals: true,
748
- tickCount: 5,
749
- reversed: false,
750
- niceTicks: "auto",
751
- ticks: undefined,
752
- };
753
-
754
- const makeComp = (spy: Mock) => (): null => {
755
- const foo = useAppSelector((state) => selectRenderableAxisSettings(state, "yAxis", "foo"));
756
- const bar = useAppSelector((state) => selectRenderableAxisSettings(state, "yAxis", "bar"));
757
- createEffect(
758
- () => ({ foo: foo(), bar: bar() }),
759
- (v) => spy(v),
760
- );
761
- return null;
762
- };
763
-
764
- // variant 1: only foo
765
- const spy1 = vi.fn();
766
- const Comp1 = makeComp(spy1);
767
- const r1 = render(() => (
768
- <BarChart width={100} height={100}>
769
- <YAxis yAxisId="foo" scale="log" type="number" />
770
- <Comp1 />
771
- </BarChart>
772
- ));
773
- expectLastCalledWith(spy1, {
774
- foo: expectedSettingsFoo,
775
- bar: implicitYAxis,
776
- });
777
- r1.unmount();
778
-
779
- // variant 2: foo + bar
780
- const spy2 = vi.fn();
781
- const Comp2 = makeComp(spy2);
782
- const r2 = render(() => (
783
- <BarChart width={100} height={100}>
784
- <YAxis yAxisId="foo" scale="log" type="number" />
785
- <YAxis yAxisId="bar" scale="utc" type="category" />
786
- <Comp2 />
787
- </BarChart>
788
- ));
789
- expectLastCalledWith(spy2, {
790
- foo: expectedSettingsFoo,
791
- bar: expectedSettingsBar,
792
- });
793
- r2.unmount();
794
-
795
- // variant 3: only bar
796
- const spy3 = vi.fn();
797
- const Comp3 = makeComp(spy3);
798
- const r3 = render(() => (
799
- <BarChart width={100} height={100}>
800
- <YAxis yAxisId="bar" scale="utc" type="category" />
801
- <Comp3 />
802
- </BarChart>
803
- ));
804
- expectLastCalledWith(spy3, {
805
- foo: implicitYAxis,
806
- bar: expectedSettingsBar,
807
- });
808
- r3.unmount();
809
-
810
- // variant 4: neither
811
- const spy4 = vi.fn();
812
- const Comp4 = makeComp(spy4);
813
- render(() => (
814
- <BarChart width={100} height={100}>
815
- <Comp4 />
816
- </BarChart>
817
- ));
818
- expectLastCalledWith(spy4, {
819
- foo: implicitYAxis,
820
- bar: implicitYAxis,
821
- });
822
- });
823
-
824
- it("should remove old ID configuration when the ID changes", () => {
825
- const IDChangingComponent = (props: { children: JSX.Element }): JSX.Element => {
826
- const [id, setId] = createSignal("1");
827
- const onClick = () => setId("2");
828
- return (
829
- <>
830
- <button type="button" class="pushbutton" onClick={onClick}>
831
- Change ID
832
- </button>
833
- <BarChart width={100} height={100}>
834
- <YAxis yAxisId={id()} scale="log" type="number" />
835
- {props.children}
836
- </BarChart>
837
- </>
838
- );
839
- };
840
- const renderTestCase = createSelectorTestCase(IDChangingComponent);
841
-
842
- const { spy, container } = renderTestCase((state) => state.cartesianAxis.yAxis);
843
-
844
- // only id "1" exists
845
- const lastCallArgs1 = spy.mock.lastCall?.[0];
846
- assertNotNull(lastCallArgs1);
847
- expect(Object.keys(lastCallArgs1)).toEqual(["1"]);
848
-
849
- fireEvent.click(container.getElementsByClassName("pushbutton")[0]!);
850
- flush();
851
- flush();
852
- flush();
853
-
854
- // only id "2" exists
855
- const lastCallArgs2 = spy.mock.lastCall?.[0];
856
- assertNotNull(lastCallArgs2);
857
- expect(Object.keys(lastCallArgs2)).toEqual(["2"]);
858
- });
859
- });
860
-
861
- describe("in stacked BarChart", () => {
862
- it.each([undefined, "none"] as const)(
863
- "should render sum of stacked values with stackOffset = %s",
864
- (stackOffset: StackOffsetType | undefined) => {
865
- const stackedData = [
866
- {
867
- x: 100,
868
- y: 200,
869
- },
870
- ];
871
- const domainSpy = vi.fn();
872
- function Comp(props: {
873
- domainSpy: (domain: NumberDomain | CategoricalDomain | undefined) => void;
874
- }): null {
875
- const isPanorama = useIsPanorama();
876
- const domain = useAppSelector((state) => selectAxisDomain(state, "yAxis", 0, isPanorama));
877
- createEffect(
878
- () => domain(),
879
- (d) => props.domainSpy(d),
880
- );
881
- return null;
882
- }
883
- // variant A: single Bar
884
- const rA = render(() => (
885
- <BarChart width={100} height={100} data={stackedData} stackOffset={stackOffset}>
886
- <YAxis />
887
- <Bar dataKey="x" stackId="a" />
888
- <Comp domainSpy={domainSpy} />
889
- </BarChart>
890
- ));
891
- expectYAxisTicks(rA.container, [
892
- { textContent: "0", x: "57", y: "95" },
893
- { textContent: "25", x: "57", y: "72.5" },
894
- { textContent: "50", x: "57", y: "50" },
895
- { textContent: "75", x: "57", y: "27.5" },
896
- { textContent: "100", x: "57", y: "5" },
897
- ]);
898
- expect(domainSpy).toHaveBeenLastCalledWith([0, 100]);
899
- rA.unmount();
900
-
901
- // variant B: two stacked Bars
902
- const domainSpyB = vi.fn();
903
- const rB = render(() => (
904
- <BarChart width={100} height={100} data={stackedData}>
905
- <YAxis />
906
- <Bar dataKey="x" stackId="a" />
907
- <Bar dataKey="y" stackId="a" />
908
- <Comp domainSpy={domainSpyB} />
909
- </BarChart>
910
- ));
911
- expectYAxisTicks(rB.container, [
912
- { textContent: "0", x: "57", y: "95" },
913
- { textContent: "75", x: "57", y: "72.5" },
914
- { textContent: "150", x: "57", y: "50" },
915
- { textContent: "225", x: "57", y: "27.5" },
916
- { textContent: "300", x: "57", y: "5" },
917
- ]);
918
- expect(domainSpyB).toHaveBeenLastCalledWith([0, 300]);
919
- rB.unmount();
920
- },
921
- );
922
-
923
- it.each([undefined, false])(
924
- "should ignore domain of hidden items when includeHidden=%s",
925
- (includeHidden) => {
926
- const stackedData = [
927
- {
928
- x: 100,
929
- y: 200,
930
- },
931
- ];
932
- const domainSpy = vi.fn();
933
- function Comp(props: {
934
- domainSpy: (domain: NumberDomain | CategoricalDomain | undefined) => void;
935
- }): null {
936
- const isPanorama = useIsPanorama();
937
- const domain = useAppSelector((state) => selectAxisDomain(state, "yAxis", 0, isPanorama));
938
- createEffect(
939
- () => domain(),
940
- (d) => props.domainSpy(d),
941
- );
942
- return null;
943
- }
944
- const { container } = render(() => (
945
- <BarChart width={100} height={100} data={stackedData}>
946
- <YAxis includeHidden={includeHidden} />
947
- <Bar dataKey="x" stackId="a" />
948
- <Bar dataKey="y" stackId="a" hide />
949
- <Comp domainSpy={domainSpy} />
950
- </BarChart>
951
- ));
952
- expectYAxisTicks(container, [
953
- { textContent: "0", x: "57", y: "95" },
954
- { textContent: "25", x: "57", y: "72.5" },
955
- { textContent: "50", x: "57", y: "50" },
956
- { textContent: "75", x: "57", y: "27.5" },
957
- { textContent: "100", x: "57", y: "5" },
958
- ]);
959
- expect(domainSpy).toHaveBeenLastCalledWith([0, 100]);
960
- },
961
- );
962
-
963
- it("should include domain of hidden items when includeHidden=true", () => {
964
- const stackedData = [
965
- {
966
- x: 10,
967
- y: 200,
968
- },
969
- ];
970
- const domainSpy = vi.fn();
971
- function Comp(props: {
972
- domainSpy: (domain: NumberDomain | CategoricalDomain | undefined) => void;
973
- }): null {
974
- const isPanorama = useIsPanorama();
975
- const domain = useAppSelector((state) => selectAxisDomain(state, "yAxis", 0, isPanorama));
976
- createEffect(
977
- () => domain(),
978
- (d) => props.domainSpy(d),
979
- );
980
- return null;
981
- }
982
- // variant A: stacked
983
- const rA = render(() => (
984
- <BarChart width={100} height={100} data={stackedData}>
985
- <YAxis includeHidden />
986
- <Bar dataKey="x" stackId="a" />
987
- <Bar dataKey="y" stackId="a" hide />
988
- <Comp domainSpy={domainSpy} />
989
- </BarChart>
990
- ));
991
- expectYAxisTicks(rA.container, [
992
- { textContent: "0", x: "57", y: "95" },
993
- { textContent: "55", x: "57", y: "72.5" },
994
- { textContent: "110", x: "57", y: "50" },
995
- { textContent: "165", x: "57", y: "27.5" },
996
- { textContent: "220", x: "57", y: "5" },
997
- ]);
998
- expect(domainSpy).toHaveBeenLastCalledWith([0, 210]);
999
- rA.unmount();
1000
-
1001
- // variant B: the same data, not stacked
1002
- const domainSpyB = vi.fn();
1003
- const rB = render(() => (
1004
- <BarChart width={100} height={100} data={stackedData}>
1005
- <YAxis includeHidden />
1006
- <Bar dataKey="x" />
1007
- <Bar dataKey="y" hide />
1008
- <Comp domainSpy={domainSpyB} />
1009
- </BarChart>
1010
- ));
1011
- expectYAxisTicks(rB.container, [
1012
- { textContent: "0", x: "57", y: "95" },
1013
- { textContent: "50", x: "57", y: "72.5" },
1014
- { textContent: "100", x: "57", y: "50" },
1015
- { textContent: "150", x: "57", y: "27.5" },
1016
- { textContent: "200", x: "57", y: "5" },
1017
- ]);
1018
- expect(domainSpyB).toHaveBeenLastCalledWith([0, 200]);
1019
- rB.unmount();
1020
- });
1021
-
1022
- it('should render positive and negative ticks with stackOffset = "sign"', () => {
1023
- const stackedSignedData = [
1024
- {
1025
- x: 100,
1026
- y: -2000,
1027
- },
1028
- ];
1029
- const domainSpy = vi.fn();
1030
- function Comp(props: {
1031
- domainSpy: (domain: NumberDomain | CategoricalDomain | undefined) => void;
1032
- }): null {
1033
- const isPanorama = useIsPanorama();
1034
- const domain = useAppSelector((state) => selectAxisDomain(state, "yAxis", 0, isPanorama));
1035
- createEffect(
1036
- () => domain(),
1037
- (d) => props.domainSpy(d),
1038
- );
1039
- return null;
1040
- }
1041
- const { container } = render(() => (
1042
- <BarChart width={100} height={100} data={stackedSignedData} stackOffset="sign">
1043
- <YAxis />
1044
- <Bar dataKey="x" stackId="a" />
1045
- <Bar dataKey="y" stackId="a" />
1046
- <Comp domainSpy={domainSpy} />
1047
- </BarChart>
1048
- ));
1049
- expectYAxisTicks(container, [
1050
- { textContent: "-2100", x: "57", y: "95" },
1051
- { textContent: "-1400", x: "57", y: "72.5" },
1052
- { textContent: "-700", x: "57", y: "50" },
1053
- { textContent: "0", x: "57", y: "27.5" },
1054
- { textContent: "700", x: "57", y: "5" },
1055
- ]);
1056
- // -2000, 100 is the correct domain - the tick generator decides to extend it beyond, to 700. But the domain ends at 100.
1057
- expect(domainSpy).toHaveBeenLastCalledWith([-2000, 100]);
1058
- });
1059
-
1060
- it('should render ticks between 0 and 1 with stackOffset = "expand"', () => {
1061
- const stackedData = [
1062
- {
1063
- x: 100,
1064
- y: 200,
1065
- },
1066
- ];
1067
- const domainSpy = vi.fn();
1068
- function Comp(props: {
1069
- domainSpy: (domain: NumberDomain | CategoricalDomain | undefined) => void;
1070
- }): null {
1071
- const isPanorama = useIsPanorama();
1072
- const domain = useAppSelector((state) => selectAxisDomain(state, "yAxis", 0, isPanorama));
1073
- createEffect(
1074
- () => domain(),
1075
- (d) => props.domainSpy(d),
1076
- );
1077
- return null;
1078
- }
1079
- const { container } = render(() => (
1080
- <BarChart width={100} height={100} data={stackedData} stackOffset="expand">
1081
- <YAxis />
1082
- <Bar dataKey="x" stackId="a" />
1083
- <Bar dataKey="y" stackId="a" />
1084
- <Comp domainSpy={domainSpy} />
1085
- </BarChart>
1086
- ));
1087
- expectYAxisTicks(container, [
1088
- { textContent: "0", x: "57", y: "95" },
1089
- { textContent: "0.25", x: "57", y: "72.5" },
1090
- { textContent: "0.5", x: "57", y: "50" },
1091
- { textContent: "0.75", x: "57", y: "27.5" },
1092
- { textContent: "1", x: "57", y: "5" },
1093
- ]);
1094
- expect(domainSpy).toHaveBeenLastCalledWith([0, 1]);
1095
- });
1096
-
1097
- it('should render ticks with stackOffset = "wiggle"', () => {
1098
- const stackedData = [
1099
- {
1100
- x: 100,
1101
- y: 200,
1102
- },
1103
- ];
1104
- const domainSpy = vi.fn();
1105
- function Comp(props: {
1106
- domainSpy: (domain: NumberDomain | CategoricalDomain | undefined) => void;
1107
- }): null {
1108
- const isPanorama = useIsPanorama();
1109
- const domain = useAppSelector((state) => selectAxisDomain(state, "yAxis", 0, isPanorama));
1110
- createEffect(
1111
- () => domain(),
1112
- (d) => props.domainSpy(d),
1113
- );
1114
- return null;
1115
- }
1116
- const { container } = render(() => (
1117
- <BarChart width={100} height={100} data={stackedData} stackOffset="wiggle">
1118
- <YAxis />
1119
- <Bar dataKey="x" stackId="a" />
1120
- <Bar dataKey="y" stackId="a" />
1121
- <Comp domainSpy={domainSpy} />
1122
- </BarChart>
1123
- ));
1124
- expectYAxisTicks(container, [
1125
- { textContent: "0", x: "57", y: "95" },
1126
- { textContent: "75", x: "57", y: "72.5" },
1127
- { textContent: "150", x: "57", y: "50" },
1128
- { textContent: "225", x: "57", y: "27.5" },
1129
- { textContent: "300", x: "57", y: "5" },
1130
- ]);
1131
- expect(domainSpy).toHaveBeenLastCalledWith([0, 300]);
1132
- });
1133
-
1134
- it('should render ticks with stackOffset = "silhouette"', () => {
1135
- const stackedData = [
1136
- {
1137
- x: 100,
1138
- y: 200,
1139
- },
1140
- ];
1141
- const domainSpy = vi.fn();
1142
- function Comp(props: {
1143
- domainSpy: (domain: NumberDomain | CategoricalDomain | undefined) => void;
1144
- }): null {
1145
- const isPanorama = useIsPanorama();
1146
- const domain = useAppSelector((state) => selectAxisDomain(state, "yAxis", 0, isPanorama));
1147
- createEffect(
1148
- () => domain(),
1149
- (d) => props.domainSpy(d),
1150
- );
1151
- return null;
1152
- }
1153
- const { container } = render(() => (
1154
- <BarChart width={100} height={100} data={stackedData} stackOffset="silhouette">
1155
- <YAxis />
1156
- <Bar dataKey="x" stackId="a" />
1157
- <Bar dataKey="y" stackId="a" />
1158
- <Comp domainSpy={domainSpy} />
1159
- </BarChart>
1160
- ));
1161
- expectYAxisTicks(container, [
1162
- { textContent: "-150", x: "57", y: "95" },
1163
- { textContent: "-75", x: "57", y: "72.5" },
1164
- { textContent: "0", x: "57", y: "50" },
1165
- { textContent: "75", x: "57", y: "27.5" },
1166
- { textContent: "150", x: "57", y: "5" },
1167
- ]);
1168
- expect(domainSpy).toHaveBeenLastCalledWith([-150, 150]);
1169
- });
1170
-
1171
- it('should ignore negative values with stackOffset = "positive"', () => {
1172
- const stackedData = [
1173
- {
1174
- x: 100,
1175
- y: -200,
1176
- },
1177
- ];
1178
- const domainSpy = vi.fn();
1179
- function Comp(props: {
1180
- domainSpy: (domain: NumberDomain | CategoricalDomain | undefined) => void;
1181
- }): null {
1182
- const isPanorama = useIsPanorama();
1183
- const domain = useAppSelector((state) => selectAxisDomain(state, "yAxis", 0, isPanorama));
1184
- createEffect(
1185
- () => domain(),
1186
- (d) => props.domainSpy(d),
1187
- );
1188
- return null;
1189
- }
1190
- const { container } = render(() => (
1191
- <BarChart width={100} height={100} data={stackedData} stackOffset="positive">
1192
- <YAxis />
1193
- <Bar dataKey="x" stackId="a" />
1194
- <Bar dataKey="y" stackId="a" />
1195
- <Comp domainSpy={domainSpy} />
1196
- </BarChart>
1197
- ));
1198
- expectYAxisTicks(container, [
1199
- { textContent: "0", x: "57", y: "95" },
1200
- { textContent: "25", x: "57", y: "72.5" },
1201
- { textContent: "50", x: "57", y: "50" },
1202
- { textContent: "75", x: "57", y: "27.5" },
1203
- { textContent: "100", x: "57", y: "5" },
1204
- ]);
1205
- expect(domainSpy).toHaveBeenLastCalledWith([0, 100]);
1206
- });
1207
- });
1208
-
1209
- describe("with reference elements", () => {
1210
- const casesThatDoNotExtendDomain: ReadonlyArray<IfOverflow | undefined> = [
1211
- "discard",
1212
- "hidden",
1213
- "visible",
1214
- undefined,
1215
- ];
1216
-
1217
- it("should render usual domain when without reference elements", () => {
1218
- const domainSpy = vi.fn();
1219
- function Comp(props: {
1220
- domainSpy: (domain: NumberDomain | CategoricalDomain | undefined) => void;
1221
- }): null {
1222
- const isPanorama = useIsPanorama();
1223
- const domain = useAppSelector((state) => selectAxisDomain(state, "yAxis", 0, isPanorama));
1224
- createEffect(
1225
- () => domain(),
1226
- (d) => props.domainSpy(d),
1227
- );
1228
- return null;
1229
- }
1230
- const { container } = render(() => (
1231
- <LineChart width={100} height={100} data={pageData}>
1232
- <YAxis />
1233
- <Line dataKey="pv" />
1234
- <Comp domainSpy={domainSpy} />
1235
- </LineChart>
1236
- ));
1237
- expectYAxisTicks(container, [
1238
- { textContent: "0", x: "57", y: "95" },
1239
- { textContent: "300", x: "57", y: "72.5" },
1240
- { textContent: "600", x: "57", y: "50" },
1241
- { textContent: "900", x: "57", y: "27.5" },
1242
- { textContent: "1200", x: "57", y: "5" },
1243
- ]);
1244
- expect(domainSpy).toHaveBeenLastCalledWith([0, 1200]);
1245
- });
1246
-
1247
- describe("ReferenceDot", () => {
1248
- const ChartWithReferenceDot = (props: {
1249
- ifOverflow: IfOverflow | undefined;
1250
- domainSpy: (domain: NumberDomain | CategoricalDomain | undefined) => void;
1251
- }): JSX.Element => {
1252
- function Comp(): null {
1253
- const isPanorama = useIsPanorama();
1254
- const domain = useAppSelector((state) => selectAxisDomain(state, "yAxis", 0, isPanorama));
1255
- createEffect(
1256
- () => domain(),
1257
- (d) => props.domainSpy(d),
1258
- );
1259
- return null;
1260
- }
1261
- return (
1262
- <LineChart width={100} height={100} data={pageData}>
1263
- <YAxis />
1264
- <Line dataKey="pv" />
1265
- {/* the r prop is ignored from domain extension - perhaps it should expand the domain too? */}
1266
- <ReferenceDot x={9999} y={2000} r={500} ifOverflow={props.ifOverflow} />
1267
- <Comp />
1268
- </LineChart>
1269
- );
1270
- };
1271
-
1272
- it.each(casesThatDoNotExtendDomain)(
1273
- "should not extend domain when ifOverflow=%s",
1274
- (ifOverflow) => {
1275
- const domainSpy = vi.fn();
1276
- const { container } = render(() => (
1277
- <ChartWithReferenceDot ifOverflow={ifOverflow} domainSpy={domainSpy} />
1278
- ));
1279
- expectYAxisTicks(container, [
1280
- { textContent: "0", x: "57", y: "95" },
1281
- { textContent: "300", x: "57", y: "72.5" },
1282
- { textContent: "600", x: "57", y: "50" },
1283
- { textContent: "900", x: "57", y: "27.5" },
1284
- { textContent: "1200", x: "57", y: "5" },
1285
- ]);
1286
- expect(domainSpy).toHaveBeenLastCalledWith([0, 1200]);
1287
- },
1288
- );
1289
-
1290
- it("should extend domain when ifOverflow=extendDomain", () => {
1291
- const domainSpy = vi.fn();
1292
- const { container } = render(() => (
1293
- <ChartWithReferenceDot ifOverflow="extendDomain" domainSpy={domainSpy} />
1294
- ));
1295
- expectYAxisTicks(container, [
1296
- { textContent: "0", x: "57", y: "95" },
1297
- { textContent: "500", x: "57", y: "72.5" },
1298
- { textContent: "1000", x: "57", y: "50" },
1299
- { textContent: "1500", x: "57", y: "27.5" },
1300
- { textContent: "2000", x: "57", y: "5" },
1301
- ]);
1302
- expect(domainSpy).toHaveBeenLastCalledWith([0, 2000]);
1303
- });
1304
- });
1305
-
1306
- describe("ReferenceArea", () => {
1307
- const ChartWithReferenceArea = (props: {
1308
- ifOverflow: IfOverflow | undefined;
1309
- domainSpy: (domain: NumberDomain | CategoricalDomain | undefined) => void;
1310
- }): JSX.Element => {
1311
- function Comp(): null {
1312
- const isPanorama = useIsPanorama();
1313
- const domain = useAppSelector((state) => selectAxisDomain(state, "yAxis", 0, isPanorama));
1314
- createEffect(
1315
- () => domain(),
1316
- (d) => props.domainSpy(d),
1317
- );
1318
- return null;
1319
- }
1320
- return (
1321
- <LineChart width={100} height={100} data={pageData}>
1322
- <YAxis />
1323
- <Line dataKey="pv" />
1324
- <ReferenceArea x1={-10} x2={3000} y1={-100} y2={5000} ifOverflow={props.ifOverflow} />
1325
- <Comp />
1326
- </LineChart>
1327
- );
1328
- };
1329
-
1330
- it.each(casesThatDoNotExtendDomain)(
1331
- "should not extend domain when ifOverflow=%s",
1332
- (ifOverflow) => {
1333
- const domainSpy = vi.fn();
1334
- const { container } = render(() => (
1335
- <ChartWithReferenceArea ifOverflow={ifOverflow} domainSpy={domainSpy} />
1336
- ));
1337
- expectYAxisTicks(container, [
1338
- { textContent: "0", x: "57", y: "95" },
1339
- { textContent: "300", x: "57", y: "72.5" },
1340
- { textContent: "600", x: "57", y: "50" },
1341
- { textContent: "900", x: "57", y: "27.5" },
1342
- { textContent: "1200", x: "57", y: "5" },
1343
- ]);
1344
- expect(domainSpy).toHaveBeenLastCalledWith([0, 1200]);
1345
- },
1346
- );
1347
-
1348
- it("should extend domain when ifOverflow=extendDomain", () => {
1349
- const domainSpy = vi.fn();
1350
- const { container } = render(() => (
1351
- <ChartWithReferenceArea ifOverflow="extendDomain" domainSpy={domainSpy} />
1352
- ));
1353
- expectYAxisTicks(container, [
1354
- { textContent: "-2000", x: "57", y: "95" },
1355
- { textContent: "0", x: "57", y: "72.5" },
1356
- { textContent: "2000", x: "57", y: "50" },
1357
- { textContent: "4000", x: "57", y: "27.5" },
1358
- { textContent: "6000", x: "57", y: "5" },
1359
- ]);
1360
- expect(domainSpy).toHaveBeenLastCalledWith([-100, 5000]);
1361
- });
1362
- });
1363
-
1364
- describe("ReferenceArea without any graphical elements", () => {
1365
- it("should render ticks following the domain of the area", () => {
1366
- const axisDomainSpy = vi.fn();
1367
- function Comp(props: {
1368
- axisDomainSpy: (domain: NumberDomain | CategoricalDomain | undefined) => void;
1369
- }): null {
1370
- const isPanorama = useIsPanorama();
1371
- const domain = useAppSelector((state) => selectAxisDomain(state, "yAxis", 0, isPanorama));
1372
- createEffect(
1373
- () => domain(),
1374
- (d) => props.axisDomainSpy(d),
1375
- );
1376
- return null;
1377
- }
1378
- const { container } = render(() => (
1379
- <ComposedChart
1380
- width={500}
1381
- height={500}
1382
- data={pageData}
1383
- margin={{
1384
- top: 5,
1385
- right: 30,
1386
- left: 20,
1387
- bottom: 5,
1388
- }}
1389
- >
1390
- <CartesianGrid strokeDasharray="3 3" />
1391
- <XAxis dataKey="name" />
1392
- <YAxis type="number" />
1393
- <ReferenceArea x1="Page B" x2="Page E" y1={1890} y2={-1000} ifOverflow="extendDomain" />
1394
- <Comp axisDomainSpy={axisDomainSpy} />
1395
- </ComposedChart>
1396
- ));
1397
- expect(axisDomainSpy).toHaveBeenLastCalledWith([-1000, 1890]);
1398
- expectYAxisTicks(container, [
1399
- { textContent: "-1900", x: "72", y: "465" },
1400
- { textContent: "-950", x: "72", y: "350" },
1401
- { textContent: "0", x: "72", y: "235" },
1402
- { textContent: "950", x: "72", y: "120" },
1403
- { textContent: "1900", x: "72", y: "5" },
1404
- ]);
1405
- });
1406
- });
1407
-
1408
- describe("ReferenceLine with one dimension", () => {
1409
- const ChartWithReferenceLine = (props: {
1410
- ifOverflow: IfOverflow | undefined;
1411
- domainSpy: (domain: NumberDomain | CategoricalDomain | undefined) => void;
1412
- }): JSX.Element => {
1413
- function Comp(): null {
1414
- const isPanorama = useIsPanorama();
1415
- const domain = useAppSelector((state) => selectAxisDomain(state, "yAxis", 0, isPanorama));
1416
- createEffect(
1417
- () => domain(),
1418
- (d) => props.domainSpy(d),
1419
- );
1420
- return null;
1421
- }
1422
- return (
1423
- <LineChart width={100} height={100} data={pageData}>
1424
- <YAxis />
1425
- <Line dataKey="pv" />
1426
- <ReferenceLine y={2000} ifOverflow={props.ifOverflow} />
1427
- <Comp />
1428
- </LineChart>
1429
- );
1430
- };
1431
-
1432
- it.each(casesThatDoNotExtendDomain)(
1433
- "should not extend domain when ifOverflow=%s",
1434
- (ifOverflow) => {
1435
- const domainSpy = vi.fn();
1436
- const { container } = render(() => (
1437
- <ChartWithReferenceLine ifOverflow={ifOverflow} domainSpy={domainSpy} />
1438
- ));
1439
- expectYAxisTicks(container, [
1440
- { textContent: "0", x: "57", y: "95" },
1441
- { textContent: "300", x: "57", y: "72.5" },
1442
- { textContent: "600", x: "57", y: "50" },
1443
- { textContent: "900", x: "57", y: "27.5" },
1444
- { textContent: "1200", x: "57", y: "5" },
1445
- ]);
1446
- expect(domainSpy).toHaveBeenLastCalledWith([0, 1200]);
1447
- },
1448
- );
1449
-
1450
- it("should extend domain when ifOverflow=extendDomain", () => {
1451
- const domainSpy = vi.fn();
1452
- const { container } = render(() => (
1453
- <ChartWithReferenceLine ifOverflow="extendDomain" domainSpy={domainSpy} />
1454
- ));
1455
- expect(domainSpy).toHaveBeenLastCalledWith([0, 2000]);
1456
- expectYAxisTicks(container, [
1457
- { textContent: "0", x: "57", y: "95" },
1458
- { textContent: "500", x: "57", y: "72.5" },
1459
- { textContent: "1000", x: "57", y: "50" },
1460
- { textContent: "1500", x: "57", y: "27.5" },
1461
- { textContent: "2000", x: "57", y: "5" },
1462
- ]);
1463
- });
1464
- });
1465
-
1466
- describe("ReferenceLine with segment", () => {
1467
- const ChartWithReferenceLineWithSegment = (props: {
1468
- ifOverflow: IfOverflow | undefined;
1469
- domainSpy: (domain: NumberDomain | CategoricalDomain | undefined) => void;
1470
- }): JSX.Element => {
1471
- function Comp(): null {
1472
- const isPanorama = useIsPanorama();
1473
- const domain = useAppSelector((state) => selectAxisDomain(state, "yAxis", 0, isPanorama));
1474
- createEffect(
1475
- () => domain(),
1476
- (d) => props.domainSpy(d),
1477
- );
1478
- return null;
1479
- }
1480
- return (
1481
- <LineChart width={100} height={100} data={pageData}>
1482
- <YAxis />
1483
- <Line dataKey="pv" />
1484
- <ReferenceLine
1485
- segment={[
1486
- { x: "Page A", y: 100 },
1487
- { x: "Page B", y: 2000 },
1488
- ]}
1489
- ifOverflow={props.ifOverflow}
1490
- />
1491
- <Comp />
1492
- </LineChart>
1493
- );
1494
- };
1495
-
1496
- it.each(casesThatDoNotExtendDomain)(
1497
- "should not extend domain when ifOverflow=%s",
1498
- (ifOverflow) => {
1499
- const domainSpy = vi.fn();
1500
- const { container } = render(() => (
1501
- <ChartWithReferenceLineWithSegment ifOverflow={ifOverflow} domainSpy={domainSpy} />
1502
- ));
1503
- expectYAxisTicks(container, [
1504
- { textContent: "0", x: "57", y: "95" },
1505
- { textContent: "300", x: "57", y: "72.5" },
1506
- { textContent: "600", x: "57", y: "50" },
1507
- { textContent: "900", x: "57", y: "27.5" },
1508
- { textContent: "1200", x: "57", y: "5" },
1509
- ]);
1510
- expect(domainSpy).toHaveBeenLastCalledWith([0, 1200]);
1511
- },
1512
- );
1513
-
1514
- it("should extend domain when ifOverflow=extendDomain", () => {
1515
- // https://github.com/recharts/recharts/issues/3379
1516
- const domainSpy = vi.fn();
1517
- const { container } = render(() => (
1518
- <ChartWithReferenceLineWithSegment ifOverflow="extendDomain" domainSpy={domainSpy} />
1519
- ));
1520
- expectYAxisTicks(container, [
1521
- { textContent: "0", x: "57", y: "95" },
1522
- { textContent: "500", x: "57", y: "72.5" },
1523
- { textContent: "1000", x: "57", y: "50" },
1524
- { textContent: "1500", x: "57", y: "27.5" },
1525
- { textContent: "2000", x: "57", y: "5" },
1526
- ]);
1527
- expect(domainSpy).toHaveBeenLastCalledWith([0, 2000]);
1528
- });
1529
- });
1530
- });
1531
-
1532
- it("should render the axis when wrapped in a custom component", () => {
1533
- /*
1534
- * https://github.com/recharts/recharts/issues/5445#issuecomment-2628711736
1535
- */
1536
- const YAxisWrapper = (props: YAxisProps) => {
1537
- return <YAxis {...props} />;
1538
- };
1539
-
1540
- const { container } = render(() => (
1541
- <BarChart width={100} height={100}>
1542
- <YAxisWrapper />
1543
- </BarChart>
1544
- ));
1545
-
1546
- expect(container.querySelector(".yAxis")).toBeVisible();
1547
- });
1548
-
1549
- it("should render the y-axis with given width in the prop", () => {
1550
- const yAxisWidth = 40;
1551
-
1552
- const { container } = render(() => (
1553
- <BarChart width={100} height={100} data={data}>
1554
- <YAxis width={yAxisWidth} />
1555
- <Bar dataKey="amt" />
1556
- </BarChart>
1557
- ));
1558
-
1559
- const yAxis = container.querySelector(".yAxis");
1560
- assertNotNull(yAxis);
1561
- const yAxisLine = yAxis.querySelector("line");
1562
-
1563
- expect(yAxis).toBeVisible();
1564
- expect(yAxisLine).toHaveAttribute("width", String(yAxisWidth));
1565
- });
1566
-
1567
- it("should render y-axis with dynamically calculated width", () => {
1568
- mockGetBoundingClientRect({ width: 80, height: 30 });
1569
-
1570
- const { container } = render(() => (
1571
- <BarChart width={400} height={300} data={data}>
1572
- <YAxis width="auto" ticks={[0, 800, 1600, 2400]} />
1573
- <Bar dataKey="amt" />
1574
- </BarChart>
1575
- ));
1576
-
1577
- // Get all tick elements from the rendered Y-axis
1578
- const tickElements = container.querySelectorAll(".recharts-cartesian-axis-tick-value");
1579
-
1580
- const yAxis = container.querySelector(".yAxis");
1581
- assertNotNull(yAxis);
1582
- const yAxisLine = yAxis.querySelector("line");
1583
-
1584
- const calculatedYAxisWidth = getCalculatedYAxisWidth({
1585
- ticks: Array.from(tickElements),
1586
- tickSize: 6,
1587
- tickMargin: 2,
1588
- label: undefined,
1589
- labelGapWithTick: 5,
1590
- });
1591
-
1592
- expect(calculatedYAxisWidth).toBe(88); // 80 width + 6 tick size + 2 tick margin
1593
- expect(yAxisLine).toHaveAttribute("width", "88");
1594
- });
1595
- });