solid-recharts 0.2.0 → 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 (508) hide show
  1. package/package.json +17 -13
  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 +43 -58
  6. package/src/cartesian/AreaRevealShape.tsx +1 -1
  7. package/src/cartesian/Bar.tsx +98 -78
  8. package/src/cartesian/BarStack.tsx +10 -7
  9. package/src/cartesian/Brush.tsx +20 -16
  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 +17 -21
  14. package/src/cartesian/GraphicalItemClipPath.tsx +1 -1
  15. package/src/cartesian/Line.tsx +51 -66
  16. package/src/cartesian/LineDrawShape.tsx +20 -17
  17. package/src/cartesian/ReferenceArea.tsx +28 -38
  18. package/src/cartesian/ReferenceDot.tsx +27 -37
  19. package/src/cartesian/ReferenceLine.tsx +28 -37
  20. package/src/cartesian/RenderedTicksReporter.tsx +19 -17
  21. package/src/cartesian/Scatter.tsx +27 -39
  22. package/src/cartesian/XAxis.tsx +55 -68
  23. package/src/cartesian/YAxis.tsx +88 -99
  24. package/src/cartesian/ZAxis.tsx +29 -41
  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 +6 -5
  40. package/src/chart/Treemap.tsx +5 -4
  41. package/src/component/ActivePoints.tsx +6 -15
  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 +11 -7
  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 +17 -26
  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 +49 -60
  65. package/src/polar/PolarAngleAxis.tsx +43 -52
  66. package/src/polar/PolarGrid.tsx +5 -5
  67. package/src/polar/PolarRadiusAxis.tsx +42 -50
  68. package/src/polar/Radar.tsx +24 -36
  69. package/src/polar/RadialBar.tsx +23 -41
  70. package/src/shape/Cross.tsx +5 -5
  71. package/src/shape/Curve.tsx +7 -8
  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 +6 -6
  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 +20 -28
  84. package/src/state/SetTooltipEntrySettings.tsx +10 -27
  85. package/src/state/brushSlice.ts +10 -8
  86. package/src/state/cartesianAxisSlice.ts +72 -84
  87. package/src/state/chartDataSlice.ts +29 -23
  88. package/src/state/createCollectionActions.ts +51 -0
  89. package/src/state/createSelector.ts +97 -0
  90. package/src/state/errorBarSlice.ts +22 -16
  91. package/src/state/eventSettingsSlice.ts +11 -9
  92. package/src/state/externalEventsMiddleware.ts +2 -11
  93. package/src/state/graphicalItemsSlice.ts +35 -44
  94. package/src/state/isEventThrottled.ts +12 -0
  95. package/src/state/keyboardEventsMiddleware.ts +2 -8
  96. package/src/state/layoutSlice.ts +29 -17
  97. package/src/state/legendSlice.ts +35 -31
  98. package/src/state/mouseEventsMiddleware.ts +2 -13
  99. package/src/state/optionsSlice.ts +8 -6
  100. package/src/state/patched.ts +19 -0
  101. package/src/state/polarAxisSlice.ts +21 -13
  102. package/src/state/polarOptionsSlice.ts +16 -14
  103. package/src/state/referenceElementsSlice.ts +49 -34
  104. package/src/state/registerInStore.ts +70 -0
  105. package/src/state/renderedTicksSlice.ts +11 -7
  106. package/src/state/rootPropsSlice.ts +16 -14
  107. package/src/state/selectors/areaSelectors.ts +13 -36
  108. package/src/state/selectors/arrayEqualityCheck.ts +32 -7
  109. package/src/state/selectors/axisSelectors.ts +215 -169
  110. package/src/state/selectors/barSelectors.ts +8 -36
  111. package/src/state/selectors/combiners/combineConfiguredScale.ts +1 -1
  112. package/src/state/selectors/combiners/combineRealScaleType.ts +1 -1
  113. package/src/state/selectors/dataSelectors.ts +35 -16
  114. package/src/state/selectors/numberDomainEqualityCheck.ts +16 -8
  115. package/src/state/selectors/selectAxisForGraphicalItem.ts +52 -0
  116. package/src/state/tooltipSlice.ts +135 -86
  117. package/src/state/unregisterOnCleanup.ts +5 -20
  118. package/src/state/zIndexSlice.ts +50 -42
  119. package/src/synchronisation/useChartSynchronisation.tsx +213 -217
  120. package/src/util/ActiveShapeUtils.tsx +2 -9
  121. package/src/util/BarUtils.tsx +30 -23
  122. package/src/util/ChartUtils.ts +69 -25
  123. package/src/util/DirectPortal.tsx +107 -0
  124. package/src/util/FunnelUtils.tsx +1 -1
  125. package/src/util/RadialBarUtils.tsx +4 -3
  126. package/src/util/createCartesianCharts.tsx +1 -1
  127. package/src/util/createPolarCharts.tsx +1 -1
  128. package/src/util/propsAreEqual.ts +3 -33
  129. package/src/util/stacks/stackTypes.ts +1 -1
  130. package/src/util/svgPropertiesAndEvents.ts +1 -1
  131. package/src/util/tooltip/translate.ts +2 -2
  132. package/src/util/types.ts +3 -3
  133. package/src/zIndex/ZIndexLayer.tsx +39 -68
  134. package/src/zIndex/ZIndexPortal.tsx +29 -25
  135. package/src/state/reduxDevtoolsJsonStringifyReplacer.ts +0 -15
  136. package/src/util/axisPropsAreEqual.ts +0 -42
  137. package/src/util/resolveDefaultProps.tsx +0 -8
  138. package/src/util/typedDataKey.ts +0 -8
  139. package/test/_data.ts +0 -408
  140. package/test/animation/AnimationController.typed.spec.ts +0 -53
  141. package/test/animation/AnimationControllerImpl.spec.ts +0 -271
  142. package/test/animation/CSSTransitionAnimate.timing.spec.tsx +0 -473
  143. package/test/animation/JavascriptAnimate.spec.tsx +0 -62
  144. package/test/animation/RechartsAnimation.spec.ts +0 -636
  145. package/test/animation/easing.spec.ts +0 -218
  146. package/test/animation/legacyAnimationLengthChange.spec.tsx +0 -803
  147. package/test/animation/matchBy.spec.ts +0 -467
  148. package/test/animation/mockAnimationController.ts +0 -40
  149. package/test/animation/mockControllerAnimationManager.ts +0 -143
  150. package/test/animation/mockTimeoutController.ts +0 -114
  151. package/test/animation/timeoutController.spec.ts +0 -138
  152. package/test/animation/useAnimationStartSnapshot.spec.ts +0 -147
  153. package/test/animation/util.spec.ts +0 -28
  154. package/test/cartesian/Area.animation.spec.tsx +0 -363
  155. package/test/cartesian/Area.range.spec.tsx +0 -54
  156. package/test/cartesian/Area.spec.tsx +0 -1202
  157. package/test/cartesian/Area.stacked.render.spec.tsx +0 -69
  158. package/test/cartesian/Area.typed.spec.tsx +0 -209
  159. package/test/cartesian/Axis.integration.spec.tsx +0 -158
  160. package/test/cartesian/Bar/Bar.csstransition.spec.tsx +0 -299
  161. package/test/cartesian/Bar/Bar.spec.tsx +0 -2314
  162. package/test/cartesian/Bar/Bar.typed.spec.tsx +0 -192
  163. package/test/cartesian/Bar.animation.spec.tsx +0 -426
  164. package/test/cartesian/Bar.stackDomain.spec.tsx +0 -66
  165. package/test/cartesian/Bar.stacked.render.spec.tsx +0 -53
  166. package/test/cartesian/Bar.truncateByDomain.spec.tsx +0 -237
  167. package/test/cartesian/Bar.zeroDimensionFiltering.spec.tsx +0 -336
  168. package/test/cartesian/BarStack.spec.tsx +0 -91
  169. package/test/cartesian/Brush.keyboard.spec.tsx +0 -88
  170. package/test/cartesian/Brush.panorama.spec.tsx +0 -41
  171. package/test/cartesian/Brush.props.spec.tsx +0 -63
  172. package/test/cartesian/Brush.render.spec.tsx +0 -117
  173. package/test/cartesian/Brush.spec.tsx +0 -522
  174. package/test/cartesian/Brush.stacked.spec.tsx +0 -221
  175. package/test/cartesian/CartesianAxis.render.spec.tsx +0 -50
  176. package/test/cartesian/CartesianAxis.spec.tsx +0 -396
  177. package/test/cartesian/CartesianGrid.render.spec.tsx +0 -39
  178. package/test/cartesian/CartesianGrid.spec.tsx +0 -2103
  179. package/test/cartesian/ErrorBar.render.spec.tsx +0 -69
  180. package/test/cartesian/ErrorBar.spec.tsx +0 -2414
  181. package/test/cartesian/Funnel.animation.spec.tsx +0 -241
  182. package/test/cartesian/Funnel.spec.tsx +0 -226
  183. package/test/cartesian/Funnel.typed.spec.tsx +0 -221
  184. package/test/cartesian/GraphicalItemClipPath.scale-behavior.spec.tsx +0 -627
  185. package/test/cartesian/GraphicalItemClipPath.spec.tsx +0 -427
  186. package/test/cartesian/Line.animation.spec.tsx +0 -643
  187. package/test/cartesian/Line.sparseAnimationPath.spec.tsx +0 -98
  188. package/test/cartesian/Line.spec.tsx +0 -471
  189. package/test/cartesian/Line.typed.spec.tsx +0 -152
  190. package/test/cartesian/ReferenceArea.render.spec.tsx +0 -63
  191. package/test/cartesian/ReferenceArea.spec.tsx +0 -663
  192. package/test/cartesian/ReferenceArea.typed.spec.tsx +0 -74
  193. package/test/cartesian/ReferenceDot.render.spec.tsx +0 -55
  194. package/test/cartesian/ReferenceDot.spec.tsx +0 -462
  195. package/test/cartesian/ReferenceDot.typed.spec.tsx +0 -76
  196. package/test/cartesian/ReferenceLine/ReferenceLine.panorama.spec.tsx +0 -184
  197. package/test/cartesian/ReferenceLine/ReferenceLine.spec.tsx +0 -744
  198. package/test/cartesian/ReferenceLine/ReferenceLine.typed.spec.tsx +0 -74
  199. package/test/cartesian/ReferenceLine/getEndPoints.spec.ts +0 -399
  200. package/test/cartesian/ReferenceLine.render.spec.tsx +0 -134
  201. package/test/cartesian/Scatter.animation.spec.tsx +0 -381
  202. package/test/cartesian/Scatter.render.spec.tsx +0 -61
  203. package/test/cartesian/Scatter.spec.tsx +0 -406
  204. package/test/cartesian/Scatter.typed.spec.tsx +0 -153
  205. package/test/cartesian/XAxis/XAxis.barSize.spec.tsx +0 -336
  206. package/test/cartesian/XAxis/XAxis.brush.spec.tsx +0 -266
  207. package/test/cartesian/XAxis/XAxis.categorydomain.spec.tsx +0 -872
  208. package/test/cartesian/XAxis/XAxis.dataKey.spec.tsx +0 -86
  209. package/test/cartesian/XAxis/XAxis.datatypes.spec.tsx +0 -127
  210. package/test/cartesian/XAxis/XAxis.hide.spec.tsx +0 -106
  211. package/test/cartesian/XAxis/XAxis.multiaxis.spec.tsx +0 -336
  212. package/test/cartesian/XAxis/XAxis.numberdomain.spec.tsx +0 -1466
  213. package/test/cartesian/XAxis/XAxis.padding.spec.tsx +0 -758
  214. package/test/cartesian/XAxis/XAxis.padding_clip.spec.tsx +0 -65
  215. package/test/cartesian/XAxis/XAxis.state.spec.tsx +0 -355
  216. package/test/cartesian/XAxis/XAxis.tick.spec.tsx +0 -493
  217. package/test/cartesian/XAxis/XAxis.timescale.spec.tsx +0 -233
  218. package/test/cartesian/XAxis/XAxis.type.spec.tsx +0 -107
  219. package/test/cartesian/XAxis/XAxis.typed.spec.tsx +0 -102
  220. package/test/cartesian/XAxis/XAxis.vertical.spec.tsx +0 -265
  221. package/test/cartesian/XAxis.tickFormatter.spec.tsx +0 -54
  222. package/test/cartesian/YAxis/YAxis.7362.derivedDomain.spec.tsx +0 -230
  223. package/test/cartesian/YAxis/YAxis.7362.spec.tsx +0 -104
  224. package/test/cartesian/YAxis/YAxis.interval-zero.spec.tsx +0 -88
  225. package/test/cartesian/YAxis/YAxis.label.spec.tsx +0 -219
  226. package/test/cartesian/YAxis/YAxis.spec.tsx +0 -1595
  227. package/test/cartesian/YAxis/YAxis.tick.spec.tsx +0 -428
  228. package/test/cartesian/YAxis/YAxis.tickFormatter.spec.tsx +0 -54
  229. package/test/cartesian/YAxis/YAxis.ticks.spec.tsx +0 -263
  230. package/test/cartesian/YAxis/YAxis.type.spec.tsx +0 -107
  231. package/test/cartesian/YAxis/YAxis.typed.spec.tsx +0 -102
  232. package/test/cartesian/ZAxis.spec.tsx +0 -300
  233. package/test/cartesian/ZAxis.typed.spec.tsx +0 -33
  234. package/test/cartesian/__snapshots__/Brush.spec.tsx.snap +0 -5
  235. package/test/cartesian/axisLineAndStroke.spec.tsx +0 -72
  236. package/test/cartesian/getCartesianPosition.spec.ts +0 -907
  237. package/test/cartesian/getEquidistantTicks.spec.ts +0 -88
  238. package/test/cartesian/getTicks.spec.ts +0 -378
  239. package/test/cartesian/miscFeatureGaps.spec.tsx +0 -89
  240. package/test/cartesian/useAnimatedLineLength.spec.ts +0 -168
  241. package/test/chart/AccessibilityLayer.spec.tsx +0 -569
  242. package/test/chart/AccessibilityScans.spec.tsx +0 -286
  243. package/test/chart/AreaChart.spec.tsx +0 -409
  244. package/test/chart/AreaChart.stacked.spec.tsx +0 -1407
  245. package/test/chart/AreaChart.typed.spec.tsx +0 -39
  246. package/test/chart/BarChart.spec.tsx +0 -3719
  247. package/test/chart/BarChart.typed.spec.tsx +0 -60
  248. package/test/chart/CategoricalChart.spec.tsx +0 -255
  249. package/test/chart/ComposedChart.spec.tsx +0 -199
  250. package/test/chart/ComposedChart.typed.spec.tsx +0 -39
  251. package/test/chart/FunnelChart.spec.tsx +0 -215
  252. package/test/chart/FunnelChart.typed.spec.tsx +0 -39
  253. package/test/chart/LineChart.multiseries.spec.tsx +0 -50
  254. package/test/chart/LineChart.smoke.spec.tsx +0 -50
  255. package/test/chart/LineChart.spec.tsx +0 -930
  256. package/test/chart/LineChart.typed.spec.tsx +0 -39
  257. package/test/chart/NicheChartTooltip.spec.tsx +0 -81
  258. package/test/chart/PieChart.spec.tsx +0 -793
  259. package/test/chart/PieChart.typed.spec.tsx +0 -39
  260. package/test/chart/RadarChart.spec.tsx +0 -530
  261. package/test/chart/RadarChart.typed.spec.tsx +0 -39
  262. package/test/chart/RadialBarChart.5966.spec.tsx +0 -48
  263. package/test/chart/RadialBarChart.spec.tsx +0 -679
  264. package/test/chart/RadialBarChart.typed.spec.tsx +0 -39
  265. package/test/chart/RechartsWrapper.spec.tsx +0 -83
  266. package/test/chart/Sankey.content.spec.tsx +0 -46
  267. package/test/chart/Sankey.spec.tsx +0 -952
  268. package/test/chart/Sankey.typed.spec.tsx +0 -29
  269. package/test/chart/ScatterChart.spec.tsx +0 -2613
  270. package/test/chart/ScatterChart.typed.spec.tsx +0 -39
  271. package/test/chart/SunburstChart.spec.tsx +0 -146
  272. package/test/chart/Treemap.animation.spec.tsx +0 -52
  273. package/test/chart/Treemap.spec.tsx +0 -1003
  274. package/test/chart/Treemap.typed.spec.tsx +0 -26
  275. package/test/chart/chartEvents.spec.tsx +0 -127
  276. package/test/chart/responsive.spec.tsx +0 -620
  277. package/test/component/Cell.render.spec.tsx +0 -155
  278. package/test/component/Cell.spec.tsx +0 -12
  279. package/test/component/Cursor.spec.tsx +0 -186
  280. package/test/component/DefaultTooltipContent.spec.tsx +0 -102
  281. package/test/component/Label.render.spec.tsx +0 -63
  282. package/test/component/Label.spec.tsx +0 -686
  283. package/test/component/Label.typed.spec.tsx +0 -46
  284. package/test/component/LabelList.spec.tsx +0 -188
  285. package/test/component/Legend.itemSorter.spec.tsx +0 -704
  286. package/test/component/Legend.render.spec.tsx +0 -92
  287. package/test/component/Legend.spec.tsx +0 -2213
  288. package/test/component/Legend.typed.spec.tsx +0 -22
  289. package/test/component/ResponsiveContainer.spec.tsx +0 -523
  290. package/test/component/ResponsiveContainerDataTest.spec.tsx +0 -51
  291. package/test/component/Text.spec.tsx +0 -415
  292. package/test/component/Text.typed.spec.tsx +0 -46
  293. package/test/component/Tooltip/ActiveDot.spec.tsx +0 -370
  294. package/test/component/Tooltip/Tooltip.animation.spec.tsx +0 -209
  295. package/test/component/Tooltip/Tooltip.content.spec.tsx +0 -128
  296. package/test/component/Tooltip/Tooltip.formatter.spec.tsx +0 -152
  297. package/test/component/Tooltip/Tooltip.includeHidden.spec.tsx +0 -79
  298. package/test/component/Tooltip/Tooltip.multipleDataArrays.spec.tsx +0 -165
  299. package/test/component/Tooltip/Tooltip.offset.spec.tsx +0 -113
  300. package/test/component/Tooltip/Tooltip.state.spec.tsx +0 -74
  301. package/test/component/Tooltip/Tooltip.sync.spec.tsx +0 -639
  302. package/test/component/Tooltip/defaultIndex.spec.tsx +0 -227
  303. package/test/component/Tooltip/graphicalItem.formatter.spec.tsx +0 -138
  304. package/test/component/Tooltip/itemSorter.spec.tsx +0 -2815
  305. package/test/component/Tooltip/tooltipEventType.spec.tsx +0 -344
  306. package/test/component/Tooltip/tooltipMouseHoverSelectors.ts +0 -41
  307. package/test/component/Tooltip/tooltipTestHelpers.tsx +0 -162
  308. package/test/component/Tooltip.defaultIndex.spec.tsx +0 -48
  309. package/test/component/Tooltip.hover.spec.tsx +0 -61
  310. package/test/component/Tooltip.item.spec.tsx +0 -54
  311. package/test/component/Tooltip.keyboard.spec.tsx +0 -51
  312. package/test/component/Tooltip.payload.spec.tsx +0 -1716
  313. package/test/component/Tooltip.touch.spec.tsx +0 -39
  314. package/test/component/Tooltip.visibility.spec.tsx +0 -1889
  315. package/test/component/TooltipBoundingBox.spec.tsx +0 -89
  316. package/test/component/responsiveContainerUtils.spec.ts +0 -205
  317. package/test/container/ClipPath.spec.tsx +0 -602
  318. package/test/container/chartDimensions.spec.tsx +0 -368
  319. package/test/context/chartLayoutContext.spec.tsx +0 -378
  320. package/test/helper/ExpectAxisDomain.tsx +0 -27
  321. package/test/helper/assertNotNull.ts +0 -6
  322. package/test/helper/assertZIndexLayerOrder.ts +0 -19
  323. package/test/helper/createSelectorTestCase.tsx +0 -176
  324. package/test/helper/expectAnimatedPieAngles.ts +0 -100
  325. package/test/helper/expectAnimatedPiePaths.ts +0 -78
  326. package/test/helper/expectAreaCurve.ts +0 -15
  327. package/test/helper/expectAxisTicks.ts +0 -48
  328. package/test/helper/expectBars.ts +0 -54
  329. package/test/helper/expectFunctionReturning.ts +0 -58
  330. package/test/helper/expectLabel.ts +0 -32
  331. package/test/helper/expectLastCalledWith.ts +0 -48
  332. package/test/helper/expectLine.ts +0 -20
  333. package/test/helper/expectPieSectors.ts +0 -80
  334. package/test/helper/expectScale.ts +0 -37
  335. package/test/helper/expectScatterPoints.ts +0 -52
  336. package/test/helper/expectStackGroups.ts +0 -144
  337. package/test/helper/mockAxes.ts +0 -22
  338. package/test/helper/mockGetBoundingClientRect.ts +0 -66
  339. package/test/helper/mockHTMLElementProperty.ts +0 -19
  340. package/test/helper/mockTouchingElement.ts +0 -27
  341. package/test/helper/offsetHelpers.ts +0 -19
  342. package/test/helper/parameterizedTestCases.tsx +0 -99
  343. package/test/helper/produceState.ts +0 -32
  344. package/test/helper/selectorTestHelpers.tsx +0 -63
  345. package/test/helper/trim.spec.ts +0 -35
  346. package/test/helper/trim.ts +0 -11
  347. package/test/hooks/useActiveTooltipDataPoints.spec.tsx +0 -358
  348. package/test/hooks/useAxisDomain.spec.tsx +0 -361
  349. package/test/hooks/useAxisScale.spec.tsx +0 -283
  350. package/test/hooks/useAxisTicks.spec.tsx +0 -130
  351. package/test/hooks/useOffset.spec.tsx +0 -248
  352. package/test/hooks/useTooltipStateHooks.spec.tsx +0 -109
  353. package/test/polar/Pie/Pie-TwoLevelPieChart.spec.tsx +0 -135
  354. package/test/polar/Pie/Pie.spec.tsx +0 -784
  355. package/test/polar/Pie/Pie.typed.spec.tsx +0 -78
  356. package/test/polar/Pie.animation.spec.tsx +0 -529
  357. package/test/polar/PieWithLegend.animation.spec.tsx +0 -142
  358. package/test/polar/PolarAngleAxis/PolarAngleAxis.events.spec.tsx +0 -76
  359. package/test/polar/PolarAngleAxis/PolarAngleAxis.spec.tsx +0 -2079
  360. package/test/polar/PolarAngleAxis/PolarAngleAxis.typed.spec.tsx +0 -102
  361. package/test/polar/PolarAngleAxis.render.spec.tsx +0 -79
  362. package/test/polar/PolarGrid.render.spec.tsx +0 -75
  363. package/test/polar/PolarGrid.spec.tsx +0 -918
  364. package/test/polar/PolarLegendPerRow.render.spec.tsx +0 -85
  365. package/test/polar/PolarRadiusAxis.events.spec.tsx +0 -65
  366. package/test/polar/PolarRadiusAxis.render.spec.tsx +0 -52
  367. package/test/polar/PolarRadiusAxis.spec.tsx +0 -991
  368. package/test/polar/PolarRadiusAxis.typed.spec.tsx +0 -84
  369. package/test/polar/PolarTooltipLegend.render.spec.tsx +0 -80
  370. package/test/polar/Radar.animation.spec.tsx +0 -570
  371. package/test/polar/Radar.render.spec.tsx +0 -71
  372. package/test/polar/Radar.spec.tsx +0 -265
  373. package/test/polar/Radar.typed.spec.tsx +0 -119
  374. package/test/polar/RadialBar/RadialBar.spec.tsx +0 -1521
  375. package/test/polar/RadialBar/RadialBar.typed.spec.tsx +0 -132
  376. package/test/polar/RadialBar.animation.spec.tsx +0 -375
  377. package/test/polar/RadialBar.render.spec.tsx +0 -66
  378. package/test/polar/RadialBar.stacked.spec.tsx +0 -57
  379. package/test/setup.ts +0 -84
  380. package/test/shape/ActiveShape.spec.tsx +0 -181
  381. package/test/shape/Cross.spec.tsx +0 -60
  382. package/test/shape/Cross.typed.spec.tsx +0 -26
  383. package/test/shape/Curve.spec.tsx +0 -368
  384. package/test/shape/Curve.typed.spec.tsx +0 -69
  385. package/test/shape/Dot.spec.tsx +0 -73
  386. package/test/shape/Dot.typed.spec.tsx +0 -30
  387. package/test/shape/Polygon.spec.tsx +0 -357
  388. package/test/shape/Polygon.typed.spec.tsx +0 -28
  389. package/test/shape/Rectangle.animation.spec.tsx +0 -451
  390. package/test/shape/Rectangle.spec.tsx +0 -68
  391. package/test/shape/Rectangle.typed.spec.tsx +0 -24
  392. package/test/shape/Sector.spec.tsx +0 -76
  393. package/test/shape/Sector.typed.spec.tsx +0 -24
  394. package/test/shape/Symbols.spec.tsx +0 -43
  395. package/test/shape/Symbols.typed.spec.tsx +0 -24
  396. package/test/shape/Trapezoid.spec.tsx +0 -50
  397. package/test/shape/Trapezoid.typed.spec.tsx +0 -24
  398. package/test/shape/__snapshots__/Cross.spec.tsx.snap +0 -62
  399. package/test/shape/__snapshots__/Curve.spec.tsx.snap +0 -460
  400. package/test/shape/__snapshots__/Polygon.spec.tsx.snap +0 -58
  401. package/test/shape/__snapshots__/Rectangle.spec.tsx.snap +0 -117
  402. package/test/shape/__snapshots__/Sector.spec.tsx.snap +0 -71
  403. package/test/shape/__snapshots__/Trapezoid.spec.tsx.snap +0 -64
  404. package/test/state/chartDataSlice.spec.ts +0 -53
  405. package/test/state/externalEventsMiddleware.spec.ts +0 -178
  406. package/test/state/graphicalItemsSlice.spec.ts +0 -92
  407. package/test/state/hooks.spec.tsx +0 -68
  408. package/test/state/legendSlice.spec.ts +0 -44
  409. package/test/state/mouseEventsMiddleware.spec.ts +0 -75
  410. package/test/state/optionsSlice.spec.ts +0 -19
  411. package/test/state/reduxDevtoolsJsonStringifyReplacer.spec.ts +0 -25
  412. package/test/state/referenceElementsSlice.spec.ts +0 -84
  413. package/test/state/selectors/areaSelectors.spec.tsx +0 -77
  414. package/test/state/selectors/axisSelectors.spec.tsx +0 -1418
  415. package/test/state/selectors/barStackSelectors.spec.tsx +0 -752
  416. package/test/state/selectors/brushSelectors.spec.tsx +0 -30
  417. package/test/state/selectors/cartesianAxisSlice.spec.ts +0 -96
  418. package/test/state/selectors/combineNiceTicks.spec.ts +0 -207
  419. package/test/state/selectors/combiners/combineActiveTooltipIndex.spec.ts +0 -61
  420. package/test/state/selectors/combiners/combineAllBarPositions.spec.ts +0 -39
  421. package/test/state/selectors/combiners/combineConfiguredScale.spec.ts +0 -56
  422. package/test/state/selectors/combiners/combineDisplayedStackedData.spec.ts +0 -123
  423. package/test/state/selectors/combiners/combineRealScaleType.spec.ts +0 -80
  424. package/test/state/selectors/containerSelectors.spec.tsx +0 -168
  425. package/test/state/selectors/dataSelectors.spec.tsx +0 -136
  426. package/test/state/selectors/legendSelectors.spec.tsx +0 -113
  427. package/test/state/selectors/lineSelectors.spec.tsx +0 -60
  428. package/test/state/selectors/pieSelectors.spec.tsx +0 -72
  429. package/test/state/selectors/radarSelectors.spec.tsx +0 -496
  430. package/test/state/selectors/rootPropsSelectors.spec.tsx +0 -169
  431. package/test/state/selectors/scatterSelectors.spec.tsx +0 -47
  432. package/test/state/selectors/selectActiveTooltipIndex.spec.tsx +0 -234
  433. package/test/state/selectors/selectAllAxes.spec.tsx +0 -18
  434. package/test/state/selectors/selectAxisDomain.spec.tsx +0 -21
  435. package/test/state/selectors/selectAxisDomainIncludingNiceTicks.spec.tsx +0 -19
  436. package/test/state/selectors/selectAxisRangeWithReverse.spec.tsx +0 -22
  437. package/test/state/selectors/selectAxisScale.spec.tsx +0 -91
  438. package/test/state/selectors/selectBarRectangles.stackOffset.spec.tsx +0 -503
  439. package/test/state/selectors/selectBaseAxis.spec.tsx +0 -56
  440. package/test/state/selectors/selectCartesianItemsSettings.spec.tsx +0 -57
  441. package/test/state/selectors/selectChartOffset.spec.tsx +0 -26
  442. package/test/state/selectors/selectDisplayedData.spec.tsx +0 -282
  443. package/test/state/selectors/selectIsTooltipActive.spec.tsx +0 -231
  444. package/test/state/selectors/selectNumericalDomain.spec.tsx +0 -21
  445. package/test/state/selectors/selectRealScaleType.spec.tsx +0 -19
  446. package/test/state/selectors/selectStackGroups.spec.tsx +0 -322
  447. package/test/state/selectors/selectXAxisPosition.spec.tsx +0 -22
  448. package/test/state/selectors/selectYAxisPosition.spec.tsx +0 -22
  449. package/test/state/selectors/selectors.spec.tsx +0 -1613
  450. package/test/state/throttling.spec.ts +0 -200
  451. package/test/state/zIndexSlice.spec.ts +0 -85
  452. package/test/synchronisation/useChartSynchronisation.spec.tsx +0 -225
  453. package/test/util/BarUtils.spec.ts +0 -39
  454. package/test/util/CartesianUtils/CartesianUtils.spec.ts +0 -261
  455. package/test/util/CartesianUtils/rectWithPoints.spec.ts +0 -48
  456. package/test/util/ChartUtils/ChartUtils.spec.ts +0 -491
  457. package/test/util/ChartUtils/appendOffsetOfLegend.spec.ts +0 -136
  458. package/test/util/ChartUtils/appendOffsetOfLegend.spec.tsx +0 -133
  459. package/test/util/ChartUtils/getCateCoordinateOfLine.spec.ts +0 -83
  460. package/test/util/ChartUtils/getStackedData.spec.ts +0 -416
  461. package/test/util/ChartUtils/truncateByDomain.spec.ts +0 -70
  462. package/test/util/DataUtils.spec.ts +0 -385
  463. package/test/util/DomUtils.spec.tsx +0 -117
  464. package/test/util/FunnelUtils.spec.tsx +0 -70
  465. package/test/util/Global.spec.ts +0 -11
  466. package/test/util/LRUCache.spec.ts +0 -81
  467. package/test/util/LogUtils.spec.ts +0 -45
  468. package/test/util/PolarUtils.spec.ts +0 -66
  469. package/test/util/ReduceCssCalcPrototype.spec.ts +0 -141
  470. package/test/util/ShallowEqual.spec.ts +0 -102
  471. package/test/util/TickUtils.spec.ts +0 -29
  472. package/test/util/axisPropsAreEqual.spec.ts +0 -93
  473. package/test/util/createChartHelpers.spec.tsx +0 -210
  474. package/test/util/cursor/getCursorPoints.spec.ts +0 -136
  475. package/test/util/cursor/getCursorRectangle.spec.ts +0 -50
  476. package/test/util/cursor/getRadialCursorPoints.spec.ts +0 -36
  477. package/test/util/errorValue.spec.ts +0 -69
  478. package/test/util/getEveryNth.spec.ts +0 -39
  479. package/test/util/getRadiusAndStrokeWidthFromDot.spec.ts +0 -51
  480. package/test/util/getRelativeCoordinate.spec.ts +0 -250
  481. package/test/util/getSliced.spec.ts +0 -45
  482. package/test/util/isDomainSpecifiedByUser.spec.ts +0 -207
  483. package/test/util/isWellBehavedNumber.spec.ts +0 -54
  484. package/test/util/payload/getUniqPayload.spec.ts +0 -56
  485. package/test/util/propsAreEqual.spec.ts +0 -75
  486. package/test/util/round.spec.ts +0 -112
  487. package/test/util/scale/arithmetic.spec.ts +0 -61
  488. package/test/util/scale/createCategoricalInverse.spec.ts +0 -84
  489. package/test/util/scale/getNiceTickValues.spec.ts +0 -421
  490. package/test/util/scale/getTickValuesFixedDomain.spec.ts +0 -155
  491. package/test/util/svgPropertiesAndEvents.spec.tsx +0 -206
  492. package/test/util/svgPropertiesNoEvents.spec.tsx +0 -228
  493. package/test/util/tooltip/translate.spec.ts +0 -396
  494. package/test/util/useAnimationId.spec.tsx +0 -59
  495. package/test/util/useElementOffset.spec.tsx +0 -173
  496. package/test/util/usePrefersReducedMotion.spec.ts +0 -54
  497. package/test/util/useUniqueId.spec.ts +0 -99
  498. package/test/utils/diagnostics-allowlist.ts +0 -18
  499. package/test/utils/diagnostics.ts +0 -58
  500. package/test/zIndex/AllZIndexPortals.spec.tsx +0 -83
  501. package/test/zIndex/DefaultZIndexes.spec.ts +0 -80
  502. package/test/zIndex/DynamicZIndex.spec.tsx +0 -102
  503. package/test/zIndex/ZIndexLayer.portalOwner.spec.tsx +0 -125
  504. package/test/zIndex/componentZIndex.spec.tsx +0 -255
  505. package/test/zIndex/getZIndexFromUnknown.spec.ts +0 -51
  506. package/test/zIndex/multiChartZIndexIsolation.spec.tsx +0 -90
  507. package/test/zIndex/zIndexSelectors.spec.ts +0 -172
  508. 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
- });