solid-recharts 1.0.0 → 2.0.0-beta.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (488) hide show
  1. package/package.json +4 -6
  2. package/src/animation/AnimatedItems.tsx +4 -2
  3. package/src/animation/CSSTransitionAnimate.tsx +39 -41
  4. package/src/animation/JavascriptAnimate.tsx +41 -45
  5. package/src/cartesian/Area.tsx +4 -4
  6. package/src/cartesian/AreaRevealShape.tsx +1 -1
  7. package/src/cartesian/Bar.tsx +21 -33
  8. package/src/cartesian/BarStack.tsx +5 -5
  9. package/src/cartesian/Brush.tsx +15 -19
  10. package/src/cartesian/CartesianAxis.tsx +4 -4
  11. package/src/cartesian/CartesianGrid.tsx +5 -5
  12. package/src/cartesian/ErrorBar.tsx +7 -9
  13. package/src/cartesian/Funnel.tsx +3 -3
  14. package/src/cartesian/GraphicalItemClipPath.tsx +1 -1
  15. package/src/cartesian/Line.tsx +16 -18
  16. package/src/cartesian/LineDrawShape.tsx +13 -14
  17. package/src/cartesian/ReferenceArea.tsx +4 -4
  18. package/src/cartesian/ReferenceDot.tsx +4 -4
  19. package/src/cartesian/ReferenceLine.tsx +4 -4
  20. package/src/cartesian/RenderedTicksReporter.tsx +17 -19
  21. package/src/cartesian/Scatter.tsx +3 -3
  22. package/src/cartesian/XAxis.tsx +1 -1
  23. package/src/cartesian/YAxis.tsx +33 -35
  24. package/src/cartesian/ZAxis.tsx +2 -3
  25. package/src/chart/AreaChart.tsx +1 -1
  26. package/src/chart/BarChart.tsx +1 -1
  27. package/src/chart/CartesianChart.tsx +3 -4
  28. package/src/chart/CategoricalChart.tsx +5 -5
  29. package/src/chart/ComposedChart.tsx +1 -1
  30. package/src/chart/FunnelChart.tsx +1 -1
  31. package/src/chart/LineChart.tsx +1 -1
  32. package/src/chart/PieChart.tsx +3 -4
  33. package/src/chart/PolarChart.tsx +3 -4
  34. package/src/chart/RadarChart.tsx +3 -4
  35. package/src/chart/RadialBarChart.tsx +3 -7
  36. package/src/chart/RechartsWrapper.tsx +24 -14
  37. package/src/chart/Sankey.tsx +6 -9
  38. package/src/chart/ScatterChart.tsx +1 -1
  39. package/src/chart/SunburstChart.tsx +4 -5
  40. package/src/chart/Treemap.tsx +4 -5
  41. package/src/component/ActivePoints.tsx +6 -6
  42. package/src/component/Cell.tsx +5 -23
  43. package/src/component/Cursor.tsx +3 -3
  44. package/src/component/DefaultLegendContent.tsx +6 -8
  45. package/src/component/DefaultTooltipContent.tsx +10 -14
  46. package/src/component/Dots.tsx +5 -5
  47. package/src/component/Label.tsx +10 -13
  48. package/src/component/LabelList.tsx +7 -12
  49. package/src/component/Legend.tsx +21 -26
  50. package/src/component/ResponsiveContainer.tsx +49 -52
  51. package/src/component/Text.tsx +5 -5
  52. package/src/component/Tooltip.tsx +18 -21
  53. package/src/component/TooltipBoundingBox.tsx +16 -18
  54. package/src/component/responsiveContainerUtils.ts +1 -1
  55. package/src/container/ClipPathProvider.tsx +3 -3
  56. package/src/container/Layer.tsx +5 -5
  57. package/src/container/RootSurface.tsx +1 -1
  58. package/src/container/Surface.tsx +6 -5
  59. package/src/context/ErrorBarContext.tsx +2 -2
  60. package/src/context/PanoramaContext.tsx +2 -2
  61. package/src/context/RegisterGraphicalItemId.tsx +2 -4
  62. package/src/context/chartDataContext.tsx +23 -26
  63. package/src/context/chartLayoutContext.tsx +12 -16
  64. package/src/polar/Pie.tsx +12 -13
  65. package/src/polar/PolarAngleAxis.tsx +3 -3
  66. package/src/polar/PolarGrid.tsx +5 -5
  67. package/src/polar/PolarRadiusAxis.tsx +3 -3
  68. package/src/polar/Radar.tsx +3 -3
  69. package/src/polar/RadialBar.tsx +3 -3
  70. package/src/shape/Cross.tsx +5 -5
  71. package/src/shape/Curve.tsx +7 -6
  72. package/src/shape/Dot.tsx +4 -4
  73. package/src/shape/Polygon.tsx +5 -5
  74. package/src/shape/Rectangle.tsx +20 -22
  75. package/src/shape/Sector.tsx +5 -5
  76. package/src/shape/Symbols.tsx +5 -5
  77. package/src/shape/Trapezoid.tsx +27 -29
  78. package/src/state/RechartsStoreProvider.tsx +3 -5
  79. package/src/state/ReportChartProps.tsx +6 -8
  80. package/src/state/ReportEventSettings.tsx +6 -8
  81. package/src/state/ReportMainChartProps.tsx +9 -11
  82. package/src/state/ReportPolarOptions.tsx +13 -15
  83. package/src/state/SetLegendPayload.ts +1 -1
  84. package/src/state/SetTooltipEntrySettings.tsx +1 -1
  85. package/src/state/brushSlice.ts +8 -10
  86. package/src/state/cartesianAxisSlice.ts +38 -46
  87. package/src/state/chartDataSlice.ts +23 -29
  88. package/src/state/errorBarSlice.ts +16 -22
  89. package/src/state/eventSettingsSlice.ts +9 -11
  90. package/src/state/graphicalItemsSlice.ts +13 -17
  91. package/src/state/layoutSlice.ts +19 -27
  92. package/src/state/legendSlice.ts +18 -24
  93. package/src/state/optionsSlice.ts +6 -8
  94. package/src/state/polarAxisSlice.ts +13 -21
  95. package/src/state/polarOptionsSlice.ts +14 -16
  96. package/src/state/referenceElementsSlice.ts +19 -25
  97. package/src/state/registerInStore.ts +13 -15
  98. package/src/state/renderedTicksSlice.ts +7 -11
  99. package/src/state/rootPropsSlice.ts +14 -16
  100. package/src/state/tooltipSlice.ts +95 -115
  101. package/src/state/unregisterOnCleanup.ts +20 -5
  102. package/src/state/zIndexSlice.ts +42 -50
  103. package/src/synchronisation/useChartSynchronisation.tsx +217 -213
  104. package/src/util/ActiveShapeUtils.tsx +2 -2
  105. package/src/util/BarUtils.tsx +3 -5
  106. package/src/util/FunnelUtils.tsx +1 -1
  107. package/src/util/RadialBarUtils.tsx +3 -4
  108. package/src/util/createCartesianCharts.tsx +1 -1
  109. package/src/util/createPolarCharts.tsx +1 -1
  110. package/src/util/svgPropertiesAndEvents.ts +1 -1
  111. package/src/util/tooltip/translate.ts +2 -2
  112. package/src/util/types.ts +2 -2
  113. package/src/zIndex/ZIndexLayer.tsx +68 -39
  114. package/src/zIndex/ZIndexPortal.tsx +25 -29
  115. package/test/_data.ts +408 -0
  116. package/test/animation/AnimationController.typed.spec.ts +53 -0
  117. package/test/animation/AnimationControllerImpl.spec.ts +271 -0
  118. package/test/animation/CSSTransitionAnimate.timing.spec.tsx +473 -0
  119. package/test/animation/JavascriptAnimate.spec.tsx +62 -0
  120. package/test/animation/RechartsAnimation.spec.ts +636 -0
  121. package/test/animation/easing.spec.ts +218 -0
  122. package/test/animation/legacyAnimationLengthChange.spec.tsx +803 -0
  123. package/test/animation/matchBy.spec.ts +467 -0
  124. package/test/animation/mockAnimationController.ts +40 -0
  125. package/test/animation/mockControllerAnimationManager.ts +143 -0
  126. package/test/animation/mockTimeoutController.ts +114 -0
  127. package/test/animation/timeoutController.spec.ts +138 -0
  128. package/test/animation/useAnimationStartSnapshot.spec.ts +147 -0
  129. package/test/animation/util.spec.ts +28 -0
  130. package/test/cartesian/Area.animation.spec.tsx +363 -0
  131. package/test/cartesian/Area.range.spec.tsx +54 -0
  132. package/test/cartesian/Area.spec.tsx +1202 -0
  133. package/test/cartesian/Area.stacked.render.spec.tsx +69 -0
  134. package/test/cartesian/Area.typed.spec.tsx +209 -0
  135. package/test/cartesian/Axis.integration.spec.tsx +158 -0
  136. package/test/cartesian/Bar/Bar.csstransition.spec.tsx +299 -0
  137. package/test/cartesian/Bar/Bar.spec.tsx +2314 -0
  138. package/test/cartesian/Bar/Bar.typed.spec.tsx +192 -0
  139. package/test/cartesian/Bar.animation.spec.tsx +426 -0
  140. package/test/cartesian/Bar.stackDomain.spec.tsx +66 -0
  141. package/test/cartesian/Bar.stacked.render.spec.tsx +53 -0
  142. package/test/cartesian/Bar.truncateByDomain.spec.tsx +237 -0
  143. package/test/cartesian/Bar.zeroDimensionFiltering.spec.tsx +336 -0
  144. package/test/cartesian/BarStack.spec.tsx +91 -0
  145. package/test/cartesian/Brush.keyboard.spec.tsx +88 -0
  146. package/test/cartesian/Brush.panorama.spec.tsx +41 -0
  147. package/test/cartesian/Brush.props.spec.tsx +63 -0
  148. package/test/cartesian/Brush.render.spec.tsx +117 -0
  149. package/test/cartesian/Brush.spec.tsx +522 -0
  150. package/test/cartesian/Brush.stacked.spec.tsx +221 -0
  151. package/test/cartesian/CartesianAxis.render.spec.tsx +50 -0
  152. package/test/cartesian/CartesianAxis.spec.tsx +396 -0
  153. package/test/cartesian/CartesianGrid.render.spec.tsx +39 -0
  154. package/test/cartesian/CartesianGrid.spec.tsx +2103 -0
  155. package/test/cartesian/ErrorBar.render.spec.tsx +69 -0
  156. package/test/cartesian/ErrorBar.spec.tsx +2414 -0
  157. package/test/cartesian/Funnel.animation.spec.tsx +241 -0
  158. package/test/cartesian/Funnel.spec.tsx +226 -0
  159. package/test/cartesian/Funnel.typed.spec.tsx +221 -0
  160. package/test/cartesian/GraphicalItemClipPath.scale-behavior.spec.tsx +627 -0
  161. package/test/cartesian/GraphicalItemClipPath.spec.tsx +427 -0
  162. package/test/cartesian/Line.animation.spec.tsx +643 -0
  163. package/test/cartesian/Line.sparseAnimationPath.spec.tsx +98 -0
  164. package/test/cartesian/Line.spec.tsx +471 -0
  165. package/test/cartesian/Line.typed.spec.tsx +152 -0
  166. package/test/cartesian/ReferenceArea.render.spec.tsx +63 -0
  167. package/test/cartesian/ReferenceArea.spec.tsx +663 -0
  168. package/test/cartesian/ReferenceArea.typed.spec.tsx +74 -0
  169. package/test/cartesian/ReferenceDot.render.spec.tsx +55 -0
  170. package/test/cartesian/ReferenceDot.spec.tsx +462 -0
  171. package/test/cartesian/ReferenceDot.typed.spec.tsx +76 -0
  172. package/test/cartesian/ReferenceLine/ReferenceLine.panorama.spec.tsx +184 -0
  173. package/test/cartesian/ReferenceLine/ReferenceLine.spec.tsx +744 -0
  174. package/test/cartesian/ReferenceLine/ReferenceLine.typed.spec.tsx +74 -0
  175. package/test/cartesian/ReferenceLine/getEndPoints.spec.ts +399 -0
  176. package/test/cartesian/ReferenceLine.render.spec.tsx +134 -0
  177. package/test/cartesian/Scatter.animation.spec.tsx +381 -0
  178. package/test/cartesian/Scatter.render.spec.tsx +61 -0
  179. package/test/cartesian/Scatter.spec.tsx +406 -0
  180. package/test/cartesian/Scatter.typed.spec.tsx +153 -0
  181. package/test/cartesian/XAxis/XAxis.barSize.spec.tsx +336 -0
  182. package/test/cartesian/XAxis/XAxis.brush.spec.tsx +266 -0
  183. package/test/cartesian/XAxis/XAxis.categorydomain.spec.tsx +872 -0
  184. package/test/cartesian/XAxis/XAxis.dataKey.spec.tsx +86 -0
  185. package/test/cartesian/XAxis/XAxis.datatypes.spec.tsx +127 -0
  186. package/test/cartesian/XAxis/XAxis.hide.spec.tsx +106 -0
  187. package/test/cartesian/XAxis/XAxis.multiaxis.spec.tsx +336 -0
  188. package/test/cartesian/XAxis/XAxis.numberdomain.spec.tsx +1466 -0
  189. package/test/cartesian/XAxis/XAxis.padding.spec.tsx +758 -0
  190. package/test/cartesian/XAxis/XAxis.padding_clip.spec.tsx +65 -0
  191. package/test/cartesian/XAxis/XAxis.state.spec.tsx +355 -0
  192. package/test/cartesian/XAxis/XAxis.tick.spec.tsx +493 -0
  193. package/test/cartesian/XAxis/XAxis.timescale.spec.tsx +233 -0
  194. package/test/cartesian/XAxis/XAxis.type.spec.tsx +107 -0
  195. package/test/cartesian/XAxis/XAxis.typed.spec.tsx +102 -0
  196. package/test/cartesian/XAxis/XAxis.vertical.spec.tsx +265 -0
  197. package/test/cartesian/XAxis.tickFormatter.spec.tsx +54 -0
  198. package/test/cartesian/YAxis/YAxis.7362.derivedDomain.spec.tsx +230 -0
  199. package/test/cartesian/YAxis/YAxis.7362.spec.tsx +104 -0
  200. package/test/cartesian/YAxis/YAxis.interval-zero.spec.tsx +88 -0
  201. package/test/cartesian/YAxis/YAxis.label.spec.tsx +219 -0
  202. package/test/cartesian/YAxis/YAxis.spec.tsx +1595 -0
  203. package/test/cartesian/YAxis/YAxis.tick.spec.tsx +428 -0
  204. package/test/cartesian/YAxis/YAxis.tickFormatter.spec.tsx +54 -0
  205. package/test/cartesian/YAxis/YAxis.ticks.spec.tsx +263 -0
  206. package/test/cartesian/YAxis/YAxis.type.spec.tsx +107 -0
  207. package/test/cartesian/YAxis/YAxis.typed.spec.tsx +102 -0
  208. package/test/cartesian/ZAxis.spec.tsx +300 -0
  209. package/test/cartesian/ZAxis.typed.spec.tsx +33 -0
  210. package/test/cartesian/__snapshots__/Brush.spec.tsx.snap +5 -0
  211. package/test/cartesian/axisLineAndStroke.spec.tsx +72 -0
  212. package/test/cartesian/getCartesianPosition.spec.ts +907 -0
  213. package/test/cartesian/getEquidistantTicks.spec.ts +88 -0
  214. package/test/cartesian/getTicks.spec.ts +378 -0
  215. package/test/cartesian/miscFeatureGaps.spec.tsx +89 -0
  216. package/test/cartesian/useAnimatedLineLength.spec.ts +168 -0
  217. package/test/chart/AccessibilityLayer.spec.tsx +569 -0
  218. package/test/chart/AccessibilityScans.spec.tsx +286 -0
  219. package/test/chart/AreaChart.spec.tsx +409 -0
  220. package/test/chart/AreaChart.stacked.spec.tsx +1407 -0
  221. package/test/chart/AreaChart.typed.spec.tsx +39 -0
  222. package/test/chart/BarChart.spec.tsx +3719 -0
  223. package/test/chart/BarChart.typed.spec.tsx +60 -0
  224. package/test/chart/CategoricalChart.spec.tsx +255 -0
  225. package/test/chart/ComposedChart.spec.tsx +199 -0
  226. package/test/chart/ComposedChart.typed.spec.tsx +39 -0
  227. package/test/chart/FunnelChart.spec.tsx +215 -0
  228. package/test/chart/FunnelChart.typed.spec.tsx +39 -0
  229. package/test/chart/LineChart.multiseries.spec.tsx +50 -0
  230. package/test/chart/LineChart.smoke.spec.tsx +50 -0
  231. package/test/chart/LineChart.spec.tsx +930 -0
  232. package/test/chart/LineChart.typed.spec.tsx +39 -0
  233. package/test/chart/NicheChartTooltip.spec.tsx +81 -0
  234. package/test/chart/PieChart.spec.tsx +793 -0
  235. package/test/chart/PieChart.typed.spec.tsx +39 -0
  236. package/test/chart/RadarChart.spec.tsx +530 -0
  237. package/test/chart/RadarChart.typed.spec.tsx +39 -0
  238. package/test/chart/RadialBarChart.5966.spec.tsx +48 -0
  239. package/test/chart/RadialBarChart.spec.tsx +679 -0
  240. package/test/chart/RadialBarChart.typed.spec.tsx +39 -0
  241. package/test/chart/RechartsWrapper.spec.tsx +83 -0
  242. package/test/chart/Sankey.content.spec.tsx +46 -0
  243. package/test/chart/Sankey.spec.tsx +952 -0
  244. package/test/chart/Sankey.typed.spec.tsx +29 -0
  245. package/test/chart/ScatterChart.spec.tsx +2613 -0
  246. package/test/chart/ScatterChart.typed.spec.tsx +39 -0
  247. package/test/chart/SunburstChart.spec.tsx +146 -0
  248. package/test/chart/Treemap.animation.spec.tsx +52 -0
  249. package/test/chart/Treemap.spec.tsx +1003 -0
  250. package/test/chart/Treemap.typed.spec.tsx +26 -0
  251. package/test/chart/chartEvents.spec.tsx +127 -0
  252. package/test/chart/responsive.spec.tsx +620 -0
  253. package/test/component/Cell.render.spec.tsx +155 -0
  254. package/test/component/Cell.spec.tsx +12 -0
  255. package/test/component/Cursor.spec.tsx +186 -0
  256. package/test/component/DefaultTooltipContent.spec.tsx +102 -0
  257. package/test/component/Label.render.spec.tsx +63 -0
  258. package/test/component/Label.spec.tsx +686 -0
  259. package/test/component/Label.typed.spec.tsx +46 -0
  260. package/test/component/LabelList.spec.tsx +188 -0
  261. package/test/component/Legend.itemSorter.spec.tsx +704 -0
  262. package/test/component/Legend.render.spec.tsx +92 -0
  263. package/test/component/Legend.spec.tsx +2213 -0
  264. package/test/component/Legend.typed.spec.tsx +22 -0
  265. package/test/component/ResponsiveContainer.spec.tsx +523 -0
  266. package/test/component/ResponsiveContainerDataTest.spec.tsx +51 -0
  267. package/test/component/Text.spec.tsx +415 -0
  268. package/test/component/Text.typed.spec.tsx +46 -0
  269. package/test/component/Tooltip/ActiveDot.spec.tsx +370 -0
  270. package/test/component/Tooltip/Tooltip.animation.spec.tsx +209 -0
  271. package/test/component/Tooltip/Tooltip.content.spec.tsx +128 -0
  272. package/test/component/Tooltip/Tooltip.formatter.spec.tsx +152 -0
  273. package/test/component/Tooltip/Tooltip.includeHidden.spec.tsx +79 -0
  274. package/test/component/Tooltip/Tooltip.multipleDataArrays.spec.tsx +165 -0
  275. package/test/component/Tooltip/Tooltip.offset.spec.tsx +113 -0
  276. package/test/component/Tooltip/Tooltip.state.spec.tsx +74 -0
  277. package/test/component/Tooltip/Tooltip.sync.spec.tsx +639 -0
  278. package/test/component/Tooltip/defaultIndex.spec.tsx +227 -0
  279. package/test/component/Tooltip/graphicalItem.formatter.spec.tsx +138 -0
  280. package/test/component/Tooltip/itemSorter.spec.tsx +2815 -0
  281. package/test/component/Tooltip/tooltipEventType.spec.tsx +344 -0
  282. package/test/component/Tooltip/tooltipMouseHoverSelectors.ts +41 -0
  283. package/test/component/Tooltip/tooltipTestHelpers.tsx +162 -0
  284. package/test/component/Tooltip.defaultIndex.spec.tsx +48 -0
  285. package/test/component/Tooltip.hover.spec.tsx +61 -0
  286. package/test/component/Tooltip.item.spec.tsx +54 -0
  287. package/test/component/Tooltip.keyboard.spec.tsx +51 -0
  288. package/test/component/Tooltip.payload.spec.tsx +1716 -0
  289. package/test/component/Tooltip.touch.spec.tsx +39 -0
  290. package/test/component/Tooltip.visibility.spec.tsx +1889 -0
  291. package/test/component/TooltipBoundingBox.spec.tsx +89 -0
  292. package/test/component/responsiveContainerUtils.spec.ts +205 -0
  293. package/test/container/ClipPath.spec.tsx +602 -0
  294. package/test/container/chartDimensions.spec.tsx +368 -0
  295. package/test/context/chartLayoutContext.spec.tsx +378 -0
  296. package/test/helper/ExpectAxisDomain.tsx +27 -0
  297. package/test/helper/assertNotNull.ts +6 -0
  298. package/test/helper/assertZIndexLayerOrder.ts +19 -0
  299. package/test/helper/createSelectorTestCase.tsx +176 -0
  300. package/test/helper/expectAnimatedPieAngles.ts +100 -0
  301. package/test/helper/expectAnimatedPiePaths.ts +78 -0
  302. package/test/helper/expectAreaCurve.ts +15 -0
  303. package/test/helper/expectAxisTicks.ts +48 -0
  304. package/test/helper/expectBars.ts +54 -0
  305. package/test/helper/expectFunctionReturning.ts +58 -0
  306. package/test/helper/expectLabel.ts +32 -0
  307. package/test/helper/expectLastCalledWith.ts +48 -0
  308. package/test/helper/expectLine.ts +20 -0
  309. package/test/helper/expectPieSectors.ts +80 -0
  310. package/test/helper/expectScale.ts +37 -0
  311. package/test/helper/expectScatterPoints.ts +52 -0
  312. package/test/helper/expectStackGroups.ts +144 -0
  313. package/test/helper/mockAxes.ts +22 -0
  314. package/test/helper/mockGetBoundingClientRect.ts +66 -0
  315. package/test/helper/mockHTMLElementProperty.ts +19 -0
  316. package/test/helper/mockTouchingElement.ts +27 -0
  317. package/test/helper/offsetHelpers.ts +19 -0
  318. package/test/helper/parameterizedTestCases.tsx +99 -0
  319. package/test/helper/produceState.ts +32 -0
  320. package/test/helper/selectorTestHelpers.tsx +63 -0
  321. package/test/helper/trim.spec.ts +35 -0
  322. package/test/helper/trim.ts +11 -0
  323. package/test/hooks/useActiveTooltipDataPoints.spec.tsx +358 -0
  324. package/test/hooks/useAxisDomain.spec.tsx +361 -0
  325. package/test/hooks/useAxisScale.spec.tsx +283 -0
  326. package/test/hooks/useAxisTicks.spec.tsx +130 -0
  327. package/test/hooks/useOffset.spec.tsx +248 -0
  328. package/test/hooks/useTooltipStateHooks.spec.tsx +109 -0
  329. package/test/polar/Pie/Pie-TwoLevelPieChart.spec.tsx +135 -0
  330. package/test/polar/Pie/Pie.spec.tsx +784 -0
  331. package/test/polar/Pie/Pie.typed.spec.tsx +78 -0
  332. package/test/polar/Pie.animation.spec.tsx +529 -0
  333. package/test/polar/PieWithLegend.animation.spec.tsx +142 -0
  334. package/test/polar/PolarAngleAxis/PolarAngleAxis.events.spec.tsx +76 -0
  335. package/test/polar/PolarAngleAxis/PolarAngleAxis.spec.tsx +2079 -0
  336. package/test/polar/PolarAngleAxis/PolarAngleAxis.typed.spec.tsx +102 -0
  337. package/test/polar/PolarAngleAxis.render.spec.tsx +79 -0
  338. package/test/polar/PolarGrid.render.spec.tsx +75 -0
  339. package/test/polar/PolarGrid.spec.tsx +918 -0
  340. package/test/polar/PolarLegendPerRow.render.spec.tsx +85 -0
  341. package/test/polar/PolarRadiusAxis.events.spec.tsx +65 -0
  342. package/test/polar/PolarRadiusAxis.render.spec.tsx +52 -0
  343. package/test/polar/PolarRadiusAxis.spec.tsx +991 -0
  344. package/test/polar/PolarRadiusAxis.typed.spec.tsx +84 -0
  345. package/test/polar/PolarTooltipLegend.render.spec.tsx +80 -0
  346. package/test/polar/Radar.animation.spec.tsx +570 -0
  347. package/test/polar/Radar.render.spec.tsx +71 -0
  348. package/test/polar/Radar.spec.tsx +265 -0
  349. package/test/polar/Radar.typed.spec.tsx +119 -0
  350. package/test/polar/RadialBar/RadialBar.spec.tsx +1521 -0
  351. package/test/polar/RadialBar/RadialBar.typed.spec.tsx +132 -0
  352. package/test/polar/RadialBar.animation.spec.tsx +375 -0
  353. package/test/polar/RadialBar.render.spec.tsx +66 -0
  354. package/test/polar/RadialBar.stacked.spec.tsx +57 -0
  355. package/test/setup.ts +84 -0
  356. package/test/shape/ActiveShape.spec.tsx +181 -0
  357. package/test/shape/Cross.spec.tsx +60 -0
  358. package/test/shape/Cross.typed.spec.tsx +26 -0
  359. package/test/shape/Curve.spec.tsx +368 -0
  360. package/test/shape/Curve.typed.spec.tsx +69 -0
  361. package/test/shape/Dot.spec.tsx +73 -0
  362. package/test/shape/Dot.typed.spec.tsx +30 -0
  363. package/test/shape/Polygon.spec.tsx +357 -0
  364. package/test/shape/Polygon.typed.spec.tsx +28 -0
  365. package/test/shape/Rectangle.animation.spec.tsx +451 -0
  366. package/test/shape/Rectangle.spec.tsx +68 -0
  367. package/test/shape/Rectangle.typed.spec.tsx +24 -0
  368. package/test/shape/Sector.spec.tsx +76 -0
  369. package/test/shape/Sector.typed.spec.tsx +24 -0
  370. package/test/shape/Symbols.spec.tsx +43 -0
  371. package/test/shape/Symbols.typed.spec.tsx +24 -0
  372. package/test/shape/Trapezoid.spec.tsx +50 -0
  373. package/test/shape/Trapezoid.typed.spec.tsx +24 -0
  374. package/test/shape/__snapshots__/Cross.spec.tsx.snap +62 -0
  375. package/test/shape/__snapshots__/Curve.spec.tsx.snap +460 -0
  376. package/test/shape/__snapshots__/Polygon.spec.tsx.snap +58 -0
  377. package/test/shape/__snapshots__/Rectangle.spec.tsx.snap +117 -0
  378. package/test/shape/__snapshots__/Sector.spec.tsx.snap +71 -0
  379. package/test/shape/__snapshots__/Trapezoid.spec.tsx.snap +64 -0
  380. package/test/state/chartDataSlice.spec.ts +53 -0
  381. package/test/state/createCollectionActions.spec.ts +87 -0
  382. package/test/state/createSelector.spec.ts +158 -0
  383. package/test/state/externalEventsMiddleware.spec.ts +178 -0
  384. package/test/state/graphicalItemsSlice.spec.ts +92 -0
  385. package/test/state/hooks.spec.tsx +68 -0
  386. package/test/state/legendSlice.spec.ts +44 -0
  387. package/test/state/mouseEventsMiddleware.spec.ts +75 -0
  388. package/test/state/optionsSlice.spec.ts +19 -0
  389. package/test/state/referenceElementsSlice.spec.ts +84 -0
  390. package/test/state/registerInStore.spec.tsx +101 -0
  391. package/test/state/selectors/areaSelectors.spec.tsx +77 -0
  392. package/test/state/selectors/axisSelectors.spec.tsx +1418 -0
  393. package/test/state/selectors/barStackSelectors.spec.tsx +752 -0
  394. package/test/state/selectors/brushSelectors.spec.tsx +30 -0
  395. package/test/state/selectors/cartesianAxisSlice.spec.ts +96 -0
  396. package/test/state/selectors/combineNiceTicks.spec.ts +207 -0
  397. package/test/state/selectors/combiners/combineActiveTooltipIndex.spec.ts +61 -0
  398. package/test/state/selectors/combiners/combineAllBarPositions.spec.ts +39 -0
  399. package/test/state/selectors/combiners/combineConfiguredScale.spec.ts +56 -0
  400. package/test/state/selectors/combiners/combineDisplayedStackedData.spec.ts +123 -0
  401. package/test/state/selectors/combiners/combineRealScaleType.spec.ts +80 -0
  402. package/test/state/selectors/containerSelectors.spec.tsx +168 -0
  403. package/test/state/selectors/dataSelectors.spec.tsx +136 -0
  404. package/test/state/selectors/legendSelectors.spec.tsx +113 -0
  405. package/test/state/selectors/lineSelectors.spec.tsx +60 -0
  406. package/test/state/selectors/pieSelectors.spec.tsx +72 -0
  407. package/test/state/selectors/radarSelectors.spec.tsx +496 -0
  408. package/test/state/selectors/rootPropsSelectors.spec.tsx +169 -0
  409. package/test/state/selectors/scatterSelectors.spec.tsx +47 -0
  410. package/test/state/selectors/selectActiveTooltipIndex.spec.tsx +234 -0
  411. package/test/state/selectors/selectAllAxes.spec.tsx +18 -0
  412. package/test/state/selectors/selectAxisDomain.spec.tsx +21 -0
  413. package/test/state/selectors/selectAxisDomainIncludingNiceTicks.spec.tsx +19 -0
  414. package/test/state/selectors/selectAxisRangeWithReverse.spec.tsx +22 -0
  415. package/test/state/selectors/selectAxisScale.spec.tsx +91 -0
  416. package/test/state/selectors/selectBarRectangles.stackOffset.spec.tsx +503 -0
  417. package/test/state/selectors/selectBaseAxis.spec.tsx +56 -0
  418. package/test/state/selectors/selectCartesianItemsSettings.spec.tsx +57 -0
  419. package/test/state/selectors/selectChartOffset.spec.tsx +26 -0
  420. package/test/state/selectors/selectDisplayedData.spec.tsx +282 -0
  421. package/test/state/selectors/selectIsTooltipActive.spec.tsx +231 -0
  422. package/test/state/selectors/selectNumericalDomain.spec.tsx +21 -0
  423. package/test/state/selectors/selectRealScaleType.spec.tsx +19 -0
  424. package/test/state/selectors/selectStackGroups.spec.tsx +322 -0
  425. package/test/state/selectors/selectXAxisPosition.spec.tsx +22 -0
  426. package/test/state/selectors/selectYAxisPosition.spec.tsx +22 -0
  427. package/test/state/selectors/selectorMemoization.spec.tsx +136 -0
  428. package/test/state/selectors/selectors.spec.tsx +1613 -0
  429. package/test/state/throttling.spec.ts +200 -0
  430. package/test/state/zIndexSlice.spec.ts +85 -0
  431. package/test/synchronisation/useChartSynchronisation.spec.tsx +225 -0
  432. package/test/util/BarUtils.spec.ts +39 -0
  433. package/test/util/CartesianUtils/CartesianUtils.spec.ts +261 -0
  434. package/test/util/CartesianUtils/rectWithPoints.spec.ts +48 -0
  435. package/test/util/ChartUtils/ChartUtils.spec.ts +491 -0
  436. package/test/util/ChartUtils/appendOffsetOfLegend.spec.ts +136 -0
  437. package/test/util/ChartUtils/appendOffsetOfLegend.spec.tsx +133 -0
  438. package/test/util/ChartUtils/getCateCoordinateOfLine.spec.ts +97 -0
  439. package/test/util/ChartUtils/getStackedData.spec.ts +416 -0
  440. package/test/util/ChartUtils/truncateByDomain.spec.ts +70 -0
  441. package/test/util/DataUtils.spec.ts +385 -0
  442. package/test/util/DomUtils.spec.tsx +117 -0
  443. package/test/util/FunnelUtils.spec.tsx +70 -0
  444. package/test/util/Global.spec.ts +11 -0
  445. package/test/util/LRUCache.spec.ts +81 -0
  446. package/test/util/LogUtils.spec.ts +45 -0
  447. package/test/util/PolarUtils.spec.ts +66 -0
  448. package/test/util/ReduceCssCalcPrototype.spec.ts +141 -0
  449. package/test/util/ShallowEqual.spec.ts +102 -0
  450. package/test/util/TickUtils.spec.ts +29 -0
  451. package/test/util/createChartHelpers.spec.tsx +210 -0
  452. package/test/util/cursor/getCursorPoints.spec.ts +136 -0
  453. package/test/util/cursor/getCursorRectangle.spec.ts +50 -0
  454. package/test/util/cursor/getRadialCursorPoints.spec.ts +36 -0
  455. package/test/util/errorValue.spec.ts +69 -0
  456. package/test/util/getEveryNth.spec.ts +39 -0
  457. package/test/util/getRadiusAndStrokeWidthFromDot.spec.ts +51 -0
  458. package/test/util/getRelativeCoordinate.spec.ts +250 -0
  459. package/test/util/getSliced.spec.ts +45 -0
  460. package/test/util/isDomainSpecifiedByUser.spec.ts +207 -0
  461. package/test/util/isWellBehavedNumber.spec.ts +54 -0
  462. package/test/util/payload/getUniqPayload.spec.ts +56 -0
  463. package/test/util/propsAreEqual.spec.ts +75 -0
  464. package/test/util/round.spec.ts +112 -0
  465. package/test/util/scale/arithmetic.spec.ts +61 -0
  466. package/test/util/scale/createCategoricalInverse.spec.ts +84 -0
  467. package/test/util/scale/getNiceTickValues.spec.ts +421 -0
  468. package/test/util/scale/getTickValuesFixedDomain.spec.ts +155 -0
  469. package/test/util/svgPropertiesAndEvents.spec.tsx +206 -0
  470. package/test/util/svgPropertiesNoEvents.spec.tsx +228 -0
  471. package/test/util/tooltip/translate.spec.ts +396 -0
  472. package/test/util/useAnimationId.spec.tsx +59 -0
  473. package/test/util/useElementOffset.spec.tsx +173 -0
  474. package/test/util/usePrefersReducedMotion.spec.ts +54 -0
  475. package/test/util/useUniqueId.spec.ts +99 -0
  476. package/test/utils/diagnostics-allowlist.ts +18 -0
  477. package/test/utils/diagnostics.ts +58 -0
  478. package/test/zIndex/AllZIndexPortals.spec.tsx +83 -0
  479. package/test/zIndex/DefaultZIndexes.spec.ts +80 -0
  480. package/test/zIndex/DynamicZIndex.spec.tsx +102 -0
  481. package/test/zIndex/ZIndexLayer.portalOwner.spec.tsx +125 -0
  482. package/test/zIndex/componentZIndex.spec.tsx +255 -0
  483. package/test/zIndex/getZIndexFromUnknown.spec.ts +51 -0
  484. package/test/zIndex/multiChartZIndexIsolation.spec.tsx +90 -0
  485. package/test/zIndex/zIndexSelectors.spec.ts +172 -0
  486. package/test-results/.last-run.json +4 -0
  487. package/tsconfig.json +11 -0
  488. package/src/util/DirectPortal.tsx +0 -107
@@ -0,0 +1,991 @@
1
+ import { beforeEach, describe, expect, it, test, vi } from "vitest";
2
+ import { exampleRadarData, PageData } from "../_data";
3
+ import { PolarRadiusAxis, Radar, RadarChart, RadialBar, RadialBarChart } from "../../src";
4
+ import type { PolarRadiusTickContentProps } from "../../src/polar/PolarRadiusAxis";
5
+ import type { LabelContentType } from "../../src/component/Label";
6
+ import { assertNotNull } from "../helper/assertNotNull";
7
+ import { render } from "@solidjs/testing-library";
8
+ import {
9
+ implicitRadiusAxis,
10
+ selectRadiusAxis,
11
+ selectRadiusAxisRangeWithReversed,
12
+ } from "../../src/state/selectors/polarAxisSelectors";
13
+ import { selectAxisDomain, selectRealScaleType } from "../../src/state/selectors/axisSelectors";
14
+ import {
15
+ selectPolarAxisDomain,
16
+ selectPolarAxisDomainIncludingNiceTicks,
17
+ } from "../../src/state/selectors/polarSelectors";
18
+ import { createSelectorTestCase } from "../helper/createSelectorTestCase";
19
+ import { selectPolarAxisScale } from "../../src/state/selectors/polarScaleSelectors";
20
+ import { expectLastCalledWithScale } from "../helper/expectScale";
21
+ import { expectLastCalledWith } from "../helper/expectLastCalledWith";
22
+
23
+ /*
24
+ * Ported from recharts 3.8.1 test/polar/PolarRadiusAxis.spec.tsx.
25
+ * Wrappers read `props.children` (not destructured) so the Spy mounts inside the
26
+ * chart store. Ported incrementally by describe block.
27
+ */
28
+
29
+ type ExpectedRadiusAxisTick = {
30
+ x: string | null;
31
+ y: string | null;
32
+ transform: string | null;
33
+ textContent: string | null;
34
+ };
35
+
36
+ function expectRadiusAxisTicks(
37
+ container: Element,
38
+ expectedTicks: ReadonlyArray<ExpectedRadiusAxisTick>,
39
+ ): void {
40
+ assertNotNull(container);
41
+ const allTicks = container.querySelectorAll(".recharts-polar-radius-axis-tick-value");
42
+ const actualTicks = Array.from(allTicks).map((tick) => ({
43
+ x: tick.getAttribute("x"),
44
+ y: tick.getAttribute("y"),
45
+ transform: tick.getAttribute("transform"),
46
+ textContent: tick.textContent,
47
+ }));
48
+ expect(actualTicks).toEqual(expectedTicks);
49
+ }
50
+
51
+ type ExpectedLabel = {
52
+ x: string | null;
53
+ y: string | null;
54
+ textContent: string | null;
55
+ };
56
+
57
+ function expectRadiusAxisLabel(container: Element, expectedLabel: ExpectedLabel | null): void {
58
+ assertNotNull(container);
59
+ const allLabels = container.querySelectorAll(".recharts-label");
60
+ const actualLabels = Array.from(allLabels).map((label) => ({
61
+ x: label.getAttribute("x"),
62
+ y: label.getAttribute("y"),
63
+ textContent: label.textContent,
64
+ }));
65
+ if (expectedLabel == null) {
66
+ expect(actualLabels).toEqual([]);
67
+ } else {
68
+ expect(actualLabels).toEqual([expectedLabel]);
69
+ }
70
+ }
71
+
72
+ describe("<PolarRadiusAxis />", () => {
73
+ describe("in RadarChart", () => {
74
+ describe("with numerical dataKey", () => {
75
+ const renderTestCase = createSelectorTestCase((props) => (
76
+ <RadarChart width={500} height={500} data={exampleRadarData}>
77
+ <PolarRadiusAxis orientation="middle" cx={250} cy={250} label="test" dataKey="value" />
78
+ {props.children}
79
+ </RadarChart>
80
+ ));
81
+
82
+ it("should select angle settings", () => {
83
+ const { spy } = renderTestCase((state) => selectRadiusAxis(state, 0));
84
+ expectLastCalledWith(spy, {
85
+ allowDataOverflow: false,
86
+ allowDecimals: false,
87
+ allowDuplicatedCategory: true,
88
+ dataKey: "value",
89
+ domain: undefined,
90
+ id: 0,
91
+ includeHidden: false,
92
+ name: undefined,
93
+ reversed: false,
94
+ niceTicks: "auto",
95
+ scale: "auto",
96
+ tick: true,
97
+ tickCount: 5,
98
+ ticks: undefined,
99
+ type: "number",
100
+ unit: undefined,
101
+ });
102
+ });
103
+
104
+ it("should select domain", () => {
105
+ const { spy } = renderTestCase((state) => selectPolarAxisDomain(state, "radiusAxis", 0));
106
+ expectLastCalledWith(spy, [0, 999]);
107
+ });
108
+
109
+ it("should select real scale type", () => {
110
+ const { spy } = renderTestCase((state) => selectRealScaleType(state, "radiusAxis", 0));
111
+ expectLastCalledWith(spy, "linear");
112
+ });
113
+
114
+ it("should select domain with nice ticks", () => {
115
+ const { spy } = renderTestCase((state) =>
116
+ selectPolarAxisDomainIncludingNiceTicks(state, "radiusAxis", 0),
117
+ );
118
+ expectLastCalledWith(spy, [0, 1000]);
119
+ });
120
+
121
+ it("should select range", () => {
122
+ const { spy } = renderTestCase((state) => selectRadiusAxisRangeWithReversed(state, 0));
123
+ expectLastCalledWith(spy, [0, 196]);
124
+ });
125
+
126
+ it("should select scale", () => {
127
+ const { spy } = renderTestCase((state) => selectPolarAxisScale(state, "radiusAxis", 0));
128
+ expectLastCalledWithScale(spy, { domain: [0, 1000], range: [0, 196] });
129
+ });
130
+
131
+ it("should render ticks", () => {
132
+ const { container } = renderTestCase();
133
+ expectRadiusAxisTicks(container, [
134
+ { textContent: "0", transform: "rotate(90, 250, 250)", x: "250", y: "250" },
135
+ { textContent: "250", transform: "rotate(90, 299, 250)", x: "299", y: "250" },
136
+ { textContent: "500", transform: "rotate(90, 348, 250)", x: "348", y: "250" },
137
+ { textContent: "750", transform: "rotate(90, 397, 250)", x: "397", y: "250" },
138
+ { textContent: "1000", transform: "rotate(90, 446, 250)", x: "446", y: "250" },
139
+ ]);
140
+ expectRadiusAxisLabel(container, { textContent: "test", x: "348", y: "250" });
141
+ });
142
+
143
+ it("should render label", () => {
144
+ const { container } = renderTestCase();
145
+ expectRadiusAxisLabel(container, { textContent: "test", x: "348", y: "250" });
146
+ });
147
+ });
148
+
149
+ describe("with categorical dataKey", () => {
150
+ const renderTestCase = createSelectorTestCase((props) => (
151
+ <RadarChart width={500} height={500} data={exampleRadarData}>
152
+ <PolarRadiusAxis label="test" dataKey="name" type="category" />
153
+ {props.children}
154
+ </RadarChart>
155
+ ));
156
+
157
+ it("should select angle settings", () => {
158
+ const { spy } = renderTestCase((state) => selectRadiusAxis(state, 0));
159
+ expectLastCalledWith(spy, {
160
+ allowDataOverflow: false,
161
+ allowDecimals: false,
162
+ allowDuplicatedCategory: true,
163
+ dataKey: "name",
164
+ domain: undefined,
165
+ id: 0,
166
+ includeHidden: false,
167
+ name: undefined,
168
+ reversed: false,
169
+ niceTicks: "auto",
170
+ scale: "auto",
171
+ tick: true,
172
+ tickCount: 5,
173
+ ticks: undefined,
174
+ type: "category",
175
+ unit: undefined,
176
+ });
177
+ });
178
+
179
+ it("should select domain", () => {
180
+ const { spy } = renderTestCase((state) => selectPolarAxisDomain(state, "radiusAxis", 0));
181
+ expectLastCalledWith(spy, [
182
+ "iPhone 3GS",
183
+ "iPhone 4",
184
+ "iPhone 4s",
185
+ "iPhone 5",
186
+ "iPhone 5s",
187
+ "iPhone 6",
188
+ "iPhone 6s",
189
+ "iPhone 5se",
190
+ ]);
191
+ });
192
+
193
+ it("should select real scale type", () => {
194
+ const { spy } = renderTestCase((state) => selectRealScaleType(state, "radiusAxis", 0));
195
+ expectLastCalledWith(spy, "band");
196
+ });
197
+
198
+ it("should select domain with nice ticks", () => {
199
+ const { spy } = renderTestCase((state) =>
200
+ selectPolarAxisDomainIncludingNiceTicks(state, "radiusAxis", 0),
201
+ );
202
+ expectLastCalledWith(spy, [
203
+ "iPhone 3GS",
204
+ "iPhone 4",
205
+ "iPhone 4s",
206
+ "iPhone 5",
207
+ "iPhone 5s",
208
+ "iPhone 6",
209
+ "iPhone 6s",
210
+ "iPhone 5se",
211
+ ]);
212
+ });
213
+
214
+ it("should render ticks", () => {
215
+ const { container } = renderTestCase();
216
+ expectRadiusAxisTicks(container, [
217
+ {
218
+ textContent: "iPhone 3GS",
219
+ transform: "rotate(90, 262.25, 250)",
220
+ x: "262.25",
221
+ y: "250",
222
+ },
223
+ { textContent: "iPhone 4", transform: "rotate(90, 286.75, 250)", x: "286.75", y: "250" },
224
+ { textContent: "iPhone 4s", transform: "rotate(90, 311.25, 250)", x: "311.25", y: "250" },
225
+ { textContent: "iPhone 5", transform: "rotate(90, 335.75, 250)", x: "335.75", y: "250" },
226
+ { textContent: "iPhone 5s", transform: "rotate(90, 360.25, 250)", x: "360.25", y: "250" },
227
+ { textContent: "iPhone 6", transform: "rotate(90, 384.75, 250)", x: "384.75", y: "250" },
228
+ { textContent: "iPhone 6s", transform: "rotate(90, 409.25, 250)", x: "409.25", y: "250" },
229
+ {
230
+ textContent: "iPhone 5se",
231
+ transform: "rotate(90, 433.75, 250)",
232
+ x: "433.75",
233
+ y: "250",
234
+ },
235
+ ]);
236
+ });
237
+
238
+ it("should render label", () => {
239
+ const { container } = renderTestCase();
240
+ expectRadiusAxisLabel(container, { textContent: "test", x: "348", y: "250" });
241
+ });
242
+ });
243
+
244
+ describe("with default axis", () => {
245
+ const renderTestCase = createSelectorTestCase((props) => (
246
+ <RadarChart width={500} height={500} data={exampleRadarData}>
247
+ <PolarRadiusAxis />
248
+ <Radar dataKey="value" />
249
+ {props.children}
250
+ </RadarChart>
251
+ ));
252
+
253
+ it("should select axis settings", () => {
254
+ const { spy } = renderTestCase((state) => selectRadiusAxis(state, 0));
255
+ expectLastCalledWith(spy, {
256
+ allowDataOverflow: false,
257
+ allowDecimals: false,
258
+ allowDuplicatedCategory: true,
259
+ dataKey: undefined,
260
+ domain: undefined,
261
+ id: 0,
262
+ includeHidden: false,
263
+ name: undefined,
264
+ reversed: false,
265
+ niceTicks: "auto",
266
+ scale: "auto",
267
+ tick: true,
268
+ tickCount: 5,
269
+ ticks: undefined,
270
+ type: "number",
271
+ unit: undefined,
272
+ });
273
+ });
274
+
275
+ it("should select domain", () => {
276
+ const { spy } = renderTestCase((state) => selectPolarAxisDomain(state, "radiusAxis", 0));
277
+ expectLastCalledWith(spy, [0, 999]);
278
+ });
279
+
280
+ it("should select real scale type", () => {
281
+ const { spy } = renderTestCase((state) => selectRealScaleType(state, "radiusAxis", 0));
282
+ expectLastCalledWith(spy, "linear");
283
+ });
284
+
285
+ it("should select domain with nice ticks", () => {
286
+ const { spy } = renderTestCase((state) =>
287
+ selectPolarAxisDomainIncludingNiceTicks(state, "radiusAxis", 0),
288
+ );
289
+ expectLastCalledWith(spy, [0, 1000]);
290
+ });
291
+
292
+ it("should select range", () => {
293
+ const { spy } = renderTestCase((state) => selectRadiusAxisRangeWithReversed(state, 0));
294
+ expectLastCalledWith(spy, [0, 196]);
295
+ });
296
+
297
+ it("should select scale", () => {
298
+ const { spy } = renderTestCase((state) => selectPolarAxisScale(state, "radiusAxis", 0));
299
+ expectLastCalledWithScale(spy, { domain: [0, 1000], range: [0, 196] });
300
+ });
301
+
302
+ it("should render ticks", () => {
303
+ const { container } = renderTestCase();
304
+ expectRadiusAxisTicks(container, [
305
+ { textContent: "0", transform: "rotate(90, 250, 250)", x: "250", y: "250" },
306
+ { textContent: "250", transform: "rotate(90, 299, 250)", x: "299", y: "250" },
307
+ { textContent: "500", transform: "rotate(90, 348, 250)", x: "348", y: "250" },
308
+ { textContent: "750", transform: "rotate(90, 397, 250)", x: "397", y: "250" },
309
+ { textContent: "1000", transform: "rotate(90, 446, 250)", x: "446", y: "250" },
310
+ ]);
311
+ });
312
+
313
+ it("should not render label", () => {
314
+ const { container } = renderTestCase();
315
+ expectRadiusAxisLabel(container, null);
316
+ });
317
+ });
318
+
319
+ describe("with implicit axis", () => {
320
+ const renderTestCase = createSelectorTestCase((props) => (
321
+ <RadarChart width={500} height={500} data={exampleRadarData}>
322
+ <Radar dataKey="value" />
323
+ {props.children}
324
+ </RadarChart>
325
+ ));
326
+
327
+ it("should select angle settings", () => {
328
+ const { spy } = renderTestCase((state) => selectRadiusAxis(state, 0));
329
+ expectLastCalledWith(spy, { ...implicitRadiusAxis, type: "number" });
330
+ });
331
+
332
+ it("should select domain", () => {
333
+ const { spy } = renderTestCase((state) => selectPolarAxisDomain(state, "radiusAxis", 0));
334
+ expectLastCalledWith(spy, [0, 999]);
335
+ });
336
+
337
+ it("should select real scale type", () => {
338
+ const { spy } = renderTestCase((state) => selectRealScaleType(state, "radiusAxis", 0));
339
+ expectLastCalledWith(spy, "linear");
340
+ });
341
+
342
+ it("should select domain with nice ticks", () => {
343
+ const { spy } = renderTestCase((state) =>
344
+ selectPolarAxisDomainIncludingNiceTicks(state, "radiusAxis", 0),
345
+ );
346
+ expectLastCalledWith(spy, [0, 1000]);
347
+ });
348
+
349
+ it("should select range", () => {
350
+ const { spy } = renderTestCase((state) => selectRadiusAxisRangeWithReversed(state, 0));
351
+ expectLastCalledWith(spy, [0, 196]);
352
+ });
353
+
354
+ it("should select scale", () => {
355
+ const { spy } = renderTestCase((state) => selectPolarAxisScale(state, "radiusAxis", 0));
356
+ expectLastCalledWithScale(spy, { domain: [0, 1000], range: [0, 196] });
357
+ });
358
+
359
+ it("should not render ticks", () => {
360
+ const { container } = renderTestCase();
361
+ expectRadiusAxisTicks(container, []);
362
+ });
363
+
364
+ it("should not render label", () => {
365
+ const { container } = renderTestCase();
366
+ expectRadiusAxisLabel(container, null);
367
+ });
368
+ });
369
+
370
+ // Omitted (documented deferrals in PolarRadiusAxis.tsx / Label.tsx): the custom
371
+ // `tick` as function/element and `label` as function/element tests — this port
372
+ // renders the default tick only and drops element/function Label content.
373
+
374
+ test("Renders ticks when orientation=left", () => {
375
+ const { container } = render(() => (
376
+ <RadarChart width={500} height={500} data={exampleRadarData}>
377
+ <Radar dataKey="value" />
378
+ <PolarRadiusAxis orientation="left" cx={250} cy={250} label="test" />
379
+ </RadarChart>
380
+ ));
381
+ expectRadiusAxisTicks(container, [
382
+ { textContent: "0", transform: "rotate(90, 250, 250)", x: "250", y: "250" },
383
+ { textContent: "250", transform: "rotate(90, 299, 250)", x: "299", y: "250" },
384
+ { textContent: "500", transform: "rotate(90, 348, 250)", x: "348", y: "250" },
385
+ { textContent: "750", transform: "rotate(90, 397, 250)", x: "397", y: "250" },
386
+ { textContent: "1000", transform: "rotate(90, 446, 250)", x: "446", y: "250" },
387
+ ]);
388
+ expectRadiusAxisLabel(container, { textContent: "test", x: "348", y: "250" });
389
+ });
390
+
391
+ test("Don't Renders any ticks or label in when data is empty", () => {
392
+ const { container } = render(() => (
393
+ <RadarChart width={500} height={500} data={[]}>
394
+ <PolarRadiusAxis orientation="left" cx={250} cy={250} label="test" dataKey="value" />
395
+ </RadarChart>
396
+ ));
397
+ expectRadiusAxisTicks(container, []);
398
+ expectRadiusAxisLabel(container, null);
399
+ });
400
+
401
+ test("don't render any ticks or label when dataKey is empty", () => {
402
+ const { container } = render(() => (
403
+ <RadarChart width={500} height={500} data={exampleRadarData}>
404
+ <PolarRadiusAxis orientation="left" cx={250} cy={250} label="test" dataKey="" />
405
+ </RadarChart>
406
+ ));
407
+ expectRadiusAxisTicks(container, []);
408
+ expectRadiusAxisLabel(container, null);
409
+ });
410
+
411
+ test("Renders polar radius axis", () => {
412
+ const { container } = render(() => (
413
+ <RadarChart width={500} height={500} data={exampleRadarData}>
414
+ <Radar dataKey="value" />
415
+ <PolarRadiusAxis dataKey="value" label="test" />
416
+ </RadarChart>
417
+ ));
418
+ expectRadiusAxisTicks(container, [
419
+ { textContent: "0", transform: "rotate(90, 250, 250)", x: "250", y: "250" },
420
+ { textContent: "250", transform: "rotate(90, 299, 250)", x: "299", y: "250" },
421
+ { textContent: "500", transform: "rotate(90, 348, 250)", x: "348", y: "250" },
422
+ { textContent: "750", transform: "rotate(90, 397, 250)", x: "397", y: "250" },
423
+ { textContent: "1000", transform: "rotate(90, 446, 250)", x: "446", y: "250" },
424
+ ]);
425
+ expectRadiusAxisLabel(container, { textContent: "test", x: "348", y: "250" });
426
+ });
427
+
428
+ test("tickCount", () => {
429
+ const { container } = render(() => (
430
+ <RadarChart width={500} height={500} data={exampleRadarData}>
431
+ <Radar dataKey="value" />
432
+ <PolarRadiusAxis dataKey="value" tickCount={3} />
433
+ </RadarChart>
434
+ ));
435
+ expectRadiusAxisTicks(container, [
436
+ { textContent: "0", transform: "rotate(90, 250, 250)", x: "250", y: "250" },
437
+ { textContent: "500", transform: "rotate(90, 348, 250)", x: "348", y: "250" },
438
+ { textContent: "1000", transform: "rotate(90, 446, 250)", x: "446", y: "250" },
439
+ ]);
440
+ });
441
+ });
442
+
443
+ describe("in RadialBarChart", () => {
444
+ describe("with implicit axis", () => {
445
+ const renderTestCase = createSelectorTestCase((props) => (
446
+ <RadialBarChart width={500} height={500} data={PageData}>
447
+ <RadialBar dataKey="ov" />
448
+ {props.children}
449
+ </RadialBarChart>
450
+ ));
451
+
452
+ it("should select angle settings", () => {
453
+ const { spy } = renderTestCase((state) => selectRadiusAxis(state, 0));
454
+ expectLastCalledWith(spy, { ...implicitRadiusAxis, type: "category" });
455
+ });
456
+
457
+ it("should select domain", () => {
458
+ const { spy } = renderTestCase((state) => selectPolarAxisDomain(state, "radiusAxis", 0));
459
+ expectLastCalledWith(spy, [0, 1, 2, 3, 4, 5]);
460
+ });
461
+
462
+ it("should select real scale type", () => {
463
+ const { spy } = renderTestCase((state) => selectRealScaleType(state, "radiusAxis", 0));
464
+ expectLastCalledWith(spy, "band");
465
+ });
466
+
467
+ it("should select domain with nice ticks", () => {
468
+ const { spy } = renderTestCase((state) =>
469
+ selectPolarAxisDomainIncludingNiceTicks(state, "radiusAxis", 0),
470
+ );
471
+ expectLastCalledWith(spy, [0, 1, 2, 3, 4, 5]);
472
+ });
473
+
474
+ it("should select range", () => {
475
+ const { spy } = renderTestCase((state) => selectRadiusAxisRangeWithReversed(state, 0));
476
+ expectLastCalledWith(spy, [0, 196]);
477
+ });
478
+
479
+ it("should select scale", () => {
480
+ const { spy } = renderTestCase((state) => selectPolarAxisScale(state, "radiusAxis", 0));
481
+ expectLastCalledWithScale(spy, { domain: [0, 1, 2, 3, 4, 5], range: [0, 196] });
482
+ });
483
+
484
+ it("should not render ticks", () => {
485
+ const { container } = renderTestCase();
486
+ expectRadiusAxisTicks(container, []);
487
+ });
488
+
489
+ it("should not render label", () => {
490
+ const { container } = renderTestCase();
491
+ expectRadiusAxisLabel(container, null);
492
+ });
493
+ });
494
+
495
+ describe("with default axis", () => {
496
+ const renderTestCase = createSelectorTestCase((props) => (
497
+ <RadialBarChart width={500} height={500} data={PageData}>
498
+ <PolarRadiusAxis />
499
+ <RadialBar dataKey="ov" />
500
+ {props.children}
501
+ </RadialBarChart>
502
+ ));
503
+
504
+ it("should select angle settings", () => {
505
+ const { spy } = renderTestCase((state) => selectRadiusAxis(state, 0));
506
+ expectLastCalledWith(spy, {
507
+ allowDataOverflow: false,
508
+ allowDecimals: false,
509
+ allowDuplicatedCategory: true,
510
+ dataKey: undefined,
511
+ domain: undefined,
512
+ id: 0,
513
+ includeHidden: false,
514
+ name: undefined,
515
+ reversed: false,
516
+ niceTicks: "auto",
517
+ scale: "auto",
518
+ tick: true,
519
+ tickCount: 5,
520
+ ticks: undefined,
521
+ type: "category",
522
+ unit: undefined,
523
+ });
524
+ });
525
+
526
+ it("should select domain", () => {
527
+ const { spy } = renderTestCase((state) => selectPolarAxisDomain(state, "radiusAxis", 0));
528
+ expectLastCalledWith(spy, [0, 1, 2, 3, 4, 5]);
529
+ });
530
+
531
+ it("should select real scale type", () => {
532
+ const { spy } = renderTestCase((state) => selectRealScaleType(state, "radiusAxis", 0));
533
+ expectLastCalledWith(spy, "band");
534
+ });
535
+
536
+ it("should select domain with nice ticks", () => {
537
+ const { spy } = renderTestCase((state) =>
538
+ selectPolarAxisDomainIncludingNiceTicks(state, "radiusAxis", 0),
539
+ );
540
+ expectLastCalledWith(spy, [0, 1, 2, 3, 4, 5]);
541
+ });
542
+
543
+ it("should select range", () => {
544
+ const { spy } = renderTestCase((state) => selectRadiusAxisRangeWithReversed(state, 0));
545
+ expectLastCalledWith(spy, [0, 196]);
546
+ });
547
+
548
+ it("should select scale", () => {
549
+ const { spy } = renderTestCase((state) => selectPolarAxisScale(state, "radiusAxis", 0));
550
+ expectLastCalledWithScale(spy, { domain: [0, 1, 2, 3, 4, 5], range: [0, 196] });
551
+ });
552
+
553
+ it("should render ticks", () => {
554
+ const { container } = renderTestCase();
555
+ expectRadiusAxisTicks(container, [
556
+ {
557
+ textContent: "0",
558
+ transform: "rotate(90, 266.3333333333333, 250)",
559
+ x: "266.3333333333333",
560
+ y: "250",
561
+ },
562
+ { textContent: "1", transform: "rotate(90, 299, 250)", x: "299", y: "250" },
563
+ {
564
+ textContent: "2",
565
+ transform: "rotate(90, 331.66666666666663, 250)",
566
+ x: "331.66666666666663",
567
+ y: "250",
568
+ },
569
+ {
570
+ textContent: "3",
571
+ transform: "rotate(90, 364.3333333333333, 250)",
572
+ x: "364.3333333333333",
573
+ y: "250",
574
+ },
575
+ { textContent: "4", transform: "rotate(90, 397, 250)", x: "397", y: "250" },
576
+ {
577
+ textContent: "5",
578
+ transform: "rotate(90, 429.66666666666663, 250)",
579
+ x: "429.66666666666663",
580
+ y: "250",
581
+ },
582
+ ]);
583
+ });
584
+
585
+ it("should not render label", () => {
586
+ const { container } = renderTestCase();
587
+ expectRadiusAxisLabel(container, null);
588
+ });
589
+ });
590
+
591
+ describe("with numerical axis", () => {
592
+ const renderTestCase = createSelectorTestCase((props) => (
593
+ <RadialBarChart width={500} height={500} data={PageData}>
594
+ <RadialBar dataKey="uv" />
595
+ <PolarRadiusAxis dataKey="uv" type="number" label="test" />
596
+ {props.children}
597
+ </RadialBarChart>
598
+ ));
599
+
600
+ it("should select angle settings", () => {
601
+ const { spy } = renderTestCase((state) => selectRadiusAxis(state, 0));
602
+ expectLastCalledWith(spy, {
603
+ allowDataOverflow: false,
604
+ allowDecimals: false,
605
+ allowDuplicatedCategory: true,
606
+ dataKey: "uv",
607
+ domain: undefined,
608
+ id: 0,
609
+ includeHidden: false,
610
+ name: undefined,
611
+ reversed: false,
612
+ niceTicks: "auto",
613
+ scale: "auto",
614
+ tick: true,
615
+ tickCount: 5,
616
+ ticks: undefined,
617
+ type: "number",
618
+ unit: undefined,
619
+ });
620
+ });
621
+
622
+ it("should select domain", () => {
623
+ const { spy } = renderTestCase((state) => selectPolarAxisDomain(state, "radiusAxis", 0));
624
+ expectLastCalledWith(spy, [0, 400]);
625
+ });
626
+
627
+ it("should select real scale type", () => {
628
+ const { spy } = renderTestCase((state) => selectRealScaleType(state, "radiusAxis", 0));
629
+ expectLastCalledWith(spy, "linear");
630
+ });
631
+
632
+ it("should select domain with nice ticks", () => {
633
+ const { spy } = renderTestCase((state) =>
634
+ selectPolarAxisDomainIncludingNiceTicks(state, "radiusAxis", 0),
635
+ );
636
+ expectLastCalledWith(spy, [0, 400]);
637
+ });
638
+
639
+ it("should select range", () => {
640
+ const { spy } = renderTestCase((state) => selectRadiusAxisRangeWithReversed(state, 0));
641
+ expectLastCalledWith(spy, [0, 196]);
642
+ });
643
+
644
+ it("should select scale", () => {
645
+ const { spy } = renderTestCase((state) => selectPolarAxisScale(state, "radiusAxis", 0));
646
+ expectLastCalledWithScale(spy, { domain: [0, 400], range: [0, 196] });
647
+ });
648
+
649
+ it("should render ticks", () => {
650
+ const { container } = renderTestCase();
651
+ expectRadiusAxisTicks(container, [
652
+ { textContent: "0", transform: "rotate(90, 250, 250)", x: "250", y: "250" },
653
+ { textContent: "100", transform: "rotate(90, 299, 250)", x: "299", y: "250" },
654
+ { textContent: "200", transform: "rotate(90, 348, 250)", x: "348", y: "250" },
655
+ { textContent: "300", transform: "rotate(90, 397, 250)", x: "397", y: "250" },
656
+ { textContent: "400", transform: "rotate(90, 446, 250)", x: "446", y: "250" },
657
+ ]);
658
+ });
659
+
660
+ it("should render label", () => {
661
+ const { container } = renderTestCase();
662
+ expectRadiusAxisLabel(container, { textContent: "test", x: "348", y: "250" });
663
+ });
664
+ });
665
+
666
+ describe("axis alone without RadialBar sibling", () => {
667
+ const renderTestCase = createSelectorTestCase((props) => (
668
+ <RadialBarChart width={500} height={500} data={PageData}>
669
+ <PolarRadiusAxis dataKey="uv" />
670
+ {props.children}
671
+ </RadialBarChart>
672
+ ));
673
+
674
+ it("should select angle settings", () => {
675
+ const { spy } = renderTestCase((state) => selectRadiusAxis(state, 0));
676
+ expectLastCalledWith(spy, {
677
+ allowDataOverflow: false,
678
+ allowDecimals: false,
679
+ allowDuplicatedCategory: true,
680
+ dataKey: "uv",
681
+ domain: undefined,
682
+ id: 0,
683
+ includeHidden: false,
684
+ name: undefined,
685
+ reversed: false,
686
+ niceTicks: "auto",
687
+ scale: "auto",
688
+ tick: true,
689
+ tickCount: 5,
690
+ ticks: undefined,
691
+ type: "category",
692
+ unit: undefined,
693
+ });
694
+ });
695
+
696
+ it("should select domain", () => {
697
+ const { spy } = renderTestCase((state) => selectPolarAxisDomain(state, "radiusAxis", 0));
698
+ expectLastCalledWith(spy, [0, 1, 2, 3, 4, 5]);
699
+ });
700
+
701
+ it("should select real scale type", () => {
702
+ const { spy } = renderTestCase((state) => selectRealScaleType(state, "radiusAxis", 0));
703
+ expectLastCalledWith(spy, "band");
704
+ });
705
+
706
+ it("should select categorical domain", () => {
707
+ const { spy } = renderTestCase((state) =>
708
+ selectPolarAxisDomainIncludingNiceTicks(state, "radiusAxis", 0),
709
+ );
710
+ expectLastCalledWith(spy, [0, 1, 2, 3, 4, 5]);
711
+ });
712
+
713
+ it("should select range", () => {
714
+ const { spy } = renderTestCase((state) => selectRadiusAxisRangeWithReversed(state, 0));
715
+ expectLastCalledWith(spy, [0, 196]);
716
+ });
717
+
718
+ it("should select scale", () => {
719
+ const { spy } = renderTestCase((state) => selectPolarAxisScale(state, "radiusAxis", 0));
720
+ expectLastCalledWithScale(spy, { domain: [0, 1, 2, 3, 4, 5], range: [0, 196] });
721
+ });
722
+
723
+ it("should render ticks", () => {
724
+ const { container } = renderTestCase();
725
+ expectRadiusAxisTicks(container, [
726
+ {
727
+ textContent: "400",
728
+ transform: "rotate(90, 266.3333333333333, 250)",
729
+ x: "266.3333333333333",
730
+ y: "250",
731
+ },
732
+ { textContent: "300", transform: "rotate(90, 299, 250)", x: "299", y: "250" },
733
+ {
734
+ textContent: "300",
735
+ transform: "rotate(90, 331.66666666666663, 250)",
736
+ x: "331.66666666666663",
737
+ y: "250",
738
+ },
739
+ {
740
+ textContent: "200",
741
+ transform: "rotate(90, 364.3333333333333, 250)",
742
+ x: "364.3333333333333",
743
+ y: "250",
744
+ },
745
+ { textContent: "278", transform: "rotate(90, 397, 250)", x: "397", y: "250" },
746
+ {
747
+ textContent: "189",
748
+ transform: "rotate(90, 429.66666666666663, 250)",
749
+ x: "429.66666666666663",
750
+ y: "250",
751
+ },
752
+ ]);
753
+ });
754
+
755
+ it("should not render label", () => {
756
+ const { container } = renderTestCase();
757
+ expectRadiusAxisLabel(container, null);
758
+ });
759
+ });
760
+
761
+ test("follows tickCount", () => {
762
+ const { container } = render(() => (
763
+ <RadialBarChart width={500} height={500} data={PageData}>
764
+ <RadialBar dataKey="uv" />
765
+ <PolarRadiusAxis dataKey="uv" type="number" label="test" tickCount={3} />
766
+ </RadialBarChart>
767
+ ));
768
+ expectRadiusAxisTicks(container, [
769
+ { textContent: "0", transform: "rotate(90, 250, 250)", x: "250", y: "250" },
770
+ { textContent: "200", transform: "rotate(90, 348, 250)", x: "348", y: "250" },
771
+ { textContent: "400", transform: "rotate(90, 446, 250)", x: "446", y: "250" },
772
+ ]);
773
+ expectRadiusAxisLabel(container, { textContent: "test", x: "348", y: "250" });
774
+ });
775
+ });
776
+
777
+ // Omitted: state-integration "report settings + remove when component removed"
778
+ // (needs React rerender to unmount the axis; the Solid equivalent is a signal
779
+ // toggle — deferred). The two non-rerender state selectors are ported below.
780
+ describe("state integration", () => {
781
+ it("should select radius axis settings", () => {
782
+ const renderTestCase = createSelectorTestCase((props) => (
783
+ <RadarChart width={300} height={200} data={exampleRadarData}>
784
+ <Radar dataKey="value" radiusAxisId="radius-id" />
785
+ <PolarRadiusAxis
786
+ allowDuplicatedCategory={false}
787
+ type="category"
788
+ radiusAxisId="radius-id"
789
+ allowDataOverflow
790
+ scale="log"
791
+ reversed
792
+ name="radius-name"
793
+ dataKey="value"
794
+ tick={false}
795
+ ticks={[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]}
796
+ tickCount={9}
797
+ allowDecimals
798
+ domain={[100, 500]}
799
+ />
800
+ {props.children}
801
+ </RadarChart>
802
+ ));
803
+
804
+ const settingsCase = renderTestCase((state) => selectRadiusAxis(state, "radius-id"));
805
+ expectLastCalledWith(settingsCase.spy, {
806
+ domain: [100, 500],
807
+ allowDataOverflow: true,
808
+ allowDecimals: true,
809
+ allowDuplicatedCategory: false,
810
+ dataKey: "value",
811
+ id: "radius-id",
812
+ includeHidden: false,
813
+ name: "radius-name",
814
+ reversed: true,
815
+ niceTicks: "auto",
816
+ scale: "log",
817
+ tick: false,
818
+ tickCount: 9,
819
+ ticks: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10],
820
+ type: "category",
821
+ unit: undefined,
822
+ });
823
+
824
+ const rangeCase = renderTestCase((state) =>
825
+ selectRadiusAxisRangeWithReversed(state, "radius-id"),
826
+ );
827
+ expectLastCalledWith(rangeCase.spy, [76, 0]);
828
+
829
+ const domainCase = renderTestCase((state) =>
830
+ selectAxisDomain(state, "radiusAxis", "radius-id", false),
831
+ );
832
+ expectLastCalledWith(domainCase.spy, [420, 460, 999, 500, 864, 650, 765, 365]);
833
+ });
834
+
835
+ it("should select numerical radius axis domain", () => {
836
+ const renderTestCase = createSelectorTestCase((props) => (
837
+ <RadarChart width={300} height={200} data={exampleRadarData}>
838
+ <Radar dataKey="value" radiusAxisId="radius-id" />
839
+ <PolarRadiusAxis dataKey="value" radiusAxisId="radius-id" />
840
+ {props.children}
841
+ </RadarChart>
842
+ ));
843
+
844
+ const domainCase = renderTestCase((state) =>
845
+ selectAxisDomain(state, "radiusAxis", "radius-id", false),
846
+ );
847
+ expectLastCalledWith(domainCase.spy, [0, 999]);
848
+
849
+ const scaleTypeCase = renderTestCase((state) =>
850
+ selectRealScaleType(state, "radiusAxis", "radius-id"),
851
+ );
852
+ expectLastCalledWith(scaleTypeCase.spy, "linear");
853
+ });
854
+ });
855
+
856
+ describe("with custom tick formatter and category values", () => {
857
+ // https://github.com/recharts/recharts/issues/6010
858
+ const formatter = vi.fn((value: unknown): string => `Formatted: ${String(value)}`);
859
+
860
+ beforeEach(() => {
861
+ formatter.mockClear();
862
+ });
863
+
864
+ const renderTestCase = createSelectorTestCase((props) => (
865
+ <RadarChart width={500} height={500} data={exampleRadarData}>
866
+ <PolarRadiusAxis dataKey="name" type="category" tickFormatter={formatter} />
867
+ <Radar dataKey="value" />
868
+ {props.children}
869
+ </RadarChart>
870
+ ));
871
+
872
+ it("should render labels with custom formatter", () => {
873
+ const { container } = renderTestCase();
874
+ expectRadiusAxisTicks(container, [
875
+ {
876
+ textContent: "Formatted: iPhone 3GS",
877
+ transform: "rotate(90, 262.25, 250)",
878
+ x: "262.25",
879
+ y: "250",
880
+ },
881
+ {
882
+ textContent: "Formatted: iPhone 4",
883
+ transform: "rotate(90, 286.75, 250)",
884
+ x: "286.75",
885
+ y: "250",
886
+ },
887
+ {
888
+ textContent: "Formatted: iPhone 4s",
889
+ transform: "rotate(90, 311.25, 250)",
890
+ x: "311.25",
891
+ y: "250",
892
+ },
893
+ {
894
+ textContent: "Formatted: iPhone 5",
895
+ transform: "rotate(90, 335.75, 250)",
896
+ x: "335.75",
897
+ y: "250",
898
+ },
899
+ {
900
+ textContent: "Formatted: iPhone 5s",
901
+ transform: "rotate(90, 360.25, 250)",
902
+ x: "360.25",
903
+ y: "250",
904
+ },
905
+ {
906
+ textContent: "Formatted: iPhone 6",
907
+ transform: "rotate(90, 384.75, 250)",
908
+ x: "384.75",
909
+ y: "250",
910
+ },
911
+ {
912
+ textContent: "Formatted: iPhone 6s",
913
+ transform: "rotate(90, 409.25, 250)",
914
+ x: "409.25",
915
+ y: "250",
916
+ },
917
+ {
918
+ textContent: "Formatted: iPhone 5se",
919
+ transform: "rotate(90, 433.75, 250)",
920
+ x: "433.75",
921
+ y: "250",
922
+ },
923
+ ]);
924
+ });
925
+
926
+ it("should call the custom tick formatter function with the tick value, and index", () => {
927
+ renderTestCase();
928
+ expect(formatter).toHaveBeenCalledTimes(exampleRadarData.length);
929
+ expect(formatter).toHaveBeenNthCalledWith(1, "iPhone 3GS", 0);
930
+ expect(formatter).toHaveBeenNthCalledWith(2, "iPhone 4", 1);
931
+ expect(formatter).toHaveBeenNthCalledWith(3, "iPhone 4s", 2);
932
+ expect(formatter).toHaveBeenNthCalledWith(4, "iPhone 5", 3);
933
+ expect(formatter).toHaveBeenNthCalledWith(5, "iPhone 5s", 4);
934
+ expect(formatter).toHaveBeenNthCalledWith(6, "iPhone 6", 5);
935
+ expect(formatter).toHaveBeenNthCalledWith(7, "iPhone 6s", 6);
936
+ expect(formatter).toHaveBeenNthCalledWith(8, "iPhone 5se", 7);
937
+ });
938
+ });
939
+
940
+ describe("function-form tick", () => {
941
+ test("Renders ticks when tick is set to be a function", () => {
942
+ const renderTick = (props: PolarRadiusTickContentProps) => (
943
+ <text x={props.x} y={props.y} class="customized-tick">
944
+ {String(props.payload.value)}
945
+ </text>
946
+ );
947
+ const { container } = render(() => (
948
+ <RadarChart width={500} height={500} data={exampleRadarData}>
949
+ <Radar dataKey="value" />
950
+ <PolarRadiusAxis
951
+ orientation="left"
952
+ cx={250}
953
+ cy={250}
954
+ label="test"
955
+ tick={renderTick}
956
+ dataKey="value"
957
+ />
958
+ </RadarChart>
959
+ ));
960
+
961
+ expect(container.querySelectorAll(".customized-tick")).toHaveLength(5);
962
+ expect(container.querySelectorAll(".recharts-label")).toHaveLength(1);
963
+ });
964
+ });
965
+
966
+ // Element-form label is PERMANENT-N/A (Solid has no cloneElement); the function
967
+ // form is the supported custom-content path (recharts renders it via <Label content>).
968
+ describe("function-form label", () => {
969
+ test("Renders label when label is set to be a function", () => {
970
+ const renderLabel: LabelContentType = (labelProps) => (
971
+ <text x={labelProps.x} y={labelProps.y} class="customized-label">
972
+ any
973
+ </text>
974
+ );
975
+ const { container } = render(() => (
976
+ <RadarChart width={500} height={500} data={exampleRadarData}>
977
+ <Radar dataKey="value" />
978
+ <PolarRadiusAxis
979
+ orientation="left"
980
+ cx={250}
981
+ cy={250}
982
+ label={renderLabel}
983
+ dataKey="value"
984
+ />
985
+ </RadarChart>
986
+ ));
987
+
988
+ expect(container.querySelectorAll(".customized-label")).toHaveLength(1);
989
+ });
990
+ });
991
+ });