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,679 @@
1
+ // Ported from recharts 3.8.1 test/chart/RadialBarChart.spec.tsx (commit 7a23854).
2
+ //
3
+ // The reference `expectRadialBars` helper is inlined here (not in the ported
4
+ // test/helper set). `flush()` is needed because RadialBar registers via an effect
5
+ // and sectors compute from the store.
6
+ //
7
+ // The `expectRadialBarLabels` exact arc-path assertions ARE ported: the ported
8
+ // polar `Label` arc-path generation (Label.tsx polar `renderRadialLabel` branch)
9
+ // now matches recharts' curved `recharts-radial-bar-label` `d` byte-for-byte (both
10
+ // render the same `M…A…` textPath geometry). Helper inlined below (not in the
11
+ // shared ported test/helper set).
12
+ //
13
+ // PERMANENT-N/A in this spec:
14
+ // - `re-renders when barSize prop changes`: render-count (toHaveBeenCalledTimes)
15
+ // coupling on a Customized selector spy. The barSize-change geometry it asserts
16
+ // is identical to the static `Renders bigger sectors` case already ported.
17
+ // - The element-form `shape` case (React.cloneElement); the FUNCTION form IS ported.
18
+ //
19
+ // The `activeShape` (function/object/boolean) hover cases ARE ported: they assert via
20
+ // `assertActiveShapeInteractions`, which drives the active sector by hover
21
+ // (`mockGetBoundingClientRect` gives the wrapper a non-zero rect) and asserts the
22
+ // `.recharts-active-shape` WRAPPER class emitted by <Shape>. The element-form
23
+ // activeShape case (`activeShape={<Sector/>}`) is PERMANENT-N/A (no cloneElement).
24
+ import { createEffect, flush } from "solid-js";
25
+ import { describe, expect, it, test, vi } from "vitest";
26
+ import { Cell, Legend, RadialBar, RadialBarChart, Sector, Tooltip } from "../../src";
27
+ import type { SectorProps } from "../../src/shape/Sector";
28
+ import { render, fireEvent } from "@solidjs/testing-library";
29
+ import { mockGetBoundingClientRect } from "../helper/mockGetBoundingClientRect";
30
+ import { trim } from "../helper/trim";
31
+ import { assertNotNull } from "../helper/assertNotNull";
32
+ import { useChartHeight, useChartWidth, useViewBox } from "../../src/context/chartLayoutContext";
33
+ import { useClipPathId } from "../../src/container/ClipPathProvider";
34
+
35
+ type ExpectRadialBar = { d: string };
36
+
37
+ function expectRadialBars(container: Element, expected: ReadonlyArray<ExpectRadialBar>): void {
38
+ const bars = container.querySelectorAll(
39
+ ".recharts-radial-bar-sectors path.recharts-sector.recharts-radial-bar-sector",
40
+ );
41
+ const actual = Array.from(bars).map((bar) => {
42
+ const trimmed = trim(bar.getAttribute("d"));
43
+ assertNotNull(trimmed);
44
+ return { d: trimmed };
45
+ });
46
+ expect(actual).toEqual(expected);
47
+ }
48
+
49
+ type ExpectRadialBarLabel = { d: string; textContent: string | null };
50
+
51
+ function expectRadialBarLabels(
52
+ container: Element,
53
+ expected: ReadonlyArray<ExpectRadialBarLabel>,
54
+ ): void {
55
+ const allLabels = container.querySelectorAll(
56
+ ".recharts-label-list text.recharts-radial-bar-label",
57
+ );
58
+ const actual = Array.from(allLabels).map((l) => {
59
+ const path = l.querySelector("defs path");
60
+ assertNotNull(path);
61
+ return { d: trim(path.getAttribute("d")), textContent: l.textContent };
62
+ });
63
+ expect(actual).toEqual(expected);
64
+ }
65
+
66
+ const data = [
67
+ { name: "18-24", uv: 31.47, pv: 2400, fill: "#8884d8" },
68
+ { name: "25-29", uv: 26.69, pv: 4567, fill: "#83a6ed" },
69
+ { name: "30-34", uv: 15.69, pv: 1398, fill: "#8dd1e1" },
70
+ { name: "35-39", uv: 8.22, pv: 9800, fill: "#82ca9d" },
71
+ { name: "40-49", uv: 8.63, pv: 3908, fill: "#a4de6c" },
72
+ { name: "50+", uv: 2.63, pv: 4800, fill: "#d0ed57" },
73
+ { name: "unknown", uv: 6.67, pv: 4800, fill: "#ffc658" },
74
+ ];
75
+
76
+ // Ported from the reference `assertActiveShapeInteractions`. Solid adaptations: the
77
+ // port's chart surface (RechartsWrapper) drives the active AXIS index off a bubbling
78
+ // `mouseMove` (recharts uses `mouseOver`), settled with `flush()` + timers; the
79
+ // active index is cleared via the wrapper's (non-bubbling) `mouseLeave` (recharts
80
+ // clears on the sector's `mouseOut`). Both hovers use the same (200, 200) coordinate
81
+ // — as upstream — so they resolve to the same active axis index (still one active
82
+ // shape). Asserts the `.recharts-active-shape` wrapper class emitted by <Shape>.
83
+ function assertActiveShapeInteractions(container: HTMLElement): void {
84
+ const sectorNodes = container.querySelectorAll(".recharts-sector");
85
+ expect(sectorNodes.length).toBeGreaterThanOrEqual(2);
86
+ const [sector1, sector2] = Array.from(sectorNodes);
87
+ assertNotNull(sector1);
88
+ assertNotNull(sector2);
89
+
90
+ fireEvent.mouseMove(sector1, { clientX: 200, clientY: 200 });
91
+ flush();
92
+ vi.runAllTimers();
93
+ flush();
94
+
95
+ expect(container.querySelectorAll(".recharts-active-shape")).toHaveLength(1);
96
+
97
+ fireEvent.mouseMove(sector2, { clientX: 200, clientY: 200 });
98
+ flush();
99
+ vi.runAllTimers();
100
+ flush();
101
+
102
+ expect(container.querySelectorAll(".recharts-active-shape")).toHaveLength(1);
103
+
104
+ const wrapper = container.querySelector(".recharts-wrapper");
105
+ assertNotNull(wrapper);
106
+ fireEvent.mouseLeave(wrapper);
107
+ flush();
108
+ expect(container.querySelectorAll(".recharts-active-shape")).toHaveLength(0);
109
+ }
110
+
111
+ describe("<RadialBarChart />", () => {
112
+ test("Renders sectors in simple RadialBarChart", () => {
113
+ const { container } = render(() => (
114
+ <RadialBarChart
115
+ width={500}
116
+ height={300}
117
+ cx={150}
118
+ cy={150}
119
+ innerRadius={20}
120
+ outerRadius={140}
121
+ barSize={10}
122
+ data={data}
123
+ >
124
+ <RadialBar
125
+ label={{ position: "insideStart" }}
126
+ background
127
+ dataKey="uv"
128
+ isAnimationActive={false}
129
+ />
130
+ </RadialBarChart>
131
+ ));
132
+ flush();
133
+
134
+ expectRadialBars(container, [
135
+ { d: "M 184,150 A 34,34,0, 1,0, 184,150.0006 L 174,150.0004 A 24,24,0, 1,1, 174,150 Z" },
136
+ {
137
+ d: "M 201.1429,150 A 51.1429,51.1429,0, 1,0, 179.5674,191.7296 L 173.7861,183.5702 A 41.1429,41.1429,0, 1,1, 191.1429,150 Z",
138
+ },
139
+ {
140
+ d: "M 218.2857,150 A 68.2857,68.2857,0, 0,0, 81.717,149.3865 L 91.7166,149.4763 A 58.2857,58.2857,0, 0,1, 208.2857,150 Z",
141
+ },
142
+ {
143
+ d: "M 235.4286,150 A 85.4286,85.4286,0, 0,0, 143.9926,64.7829 L 144.6958,74.7582 A 75.4286,75.4286,0, 0,1, 225.4286,150 Z",
144
+ },
145
+ {
146
+ d: "M 252.5714,150 A 102.5714,102.5714,0, 0,0, 134.445,48.6149 L 135.9615,58.4992 A 92.5714,92.5714,0, 0,1, 242.5714,150 Z",
147
+ },
148
+ {
149
+ d: "M 269.7143,150 A 119.7143,119.7143,0, 0,0, 253.5859,89.9877 L 244.9331,95.0006 A 109.7143,109.7143,0, 0,1, 259.7143,150 Z",
150
+ },
151
+ {
152
+ d: "M 286.8571,150 A 136.8571,136.8571,0, 0,0, 182.4101,17.0359 L 180.0419,26.7514 A 126.8571,126.8571,0, 0,1, 276.8571,150 Z",
153
+ },
154
+ ]);
155
+
156
+ expectRadialBarLabels(container, [
157
+ {
158
+ d: "M178.8896462446606,147.4724834603179 A29,29,0,1,0, 178.9293574575349,147.97706226142037",
159
+ textContent: "31.47",
160
+ },
161
+ {
162
+ d: "M195.9672696405191,145.9783850132152 A46.14285714285714,46.14285714285714,0,1,0, 196.03045546198905,146.78123699723537",
163
+ textContent: "26.69",
164
+ },
165
+ {
166
+ d: "M213.0448930363776,144.4842865661125 A63.28571428571428,63.28571428571428,0,1,0, 213.13155346644317,145.58541173305036",
167
+ textContent: "15.69",
168
+ },
169
+ {
170
+ d: "M230.12251643223613,142.9901881190098 A80.42857142857143,80.42857142857143,0,1,0, 230.23265147089728,144.38958646886536",
171
+ textContent: "8.22",
172
+ },
173
+ {
174
+ d: "M247.2001398280946,141.49608967190707 A97.57142857142857,97.57142857142857,0,1,0, 247.33374947535142,143.19376120468036",
175
+ textContent: "8.63",
176
+ },
177
+ {
178
+ d: "M264.2777632239531,140.00199122480436 A114.71428571428571,114.71428571428571,0,1,0, 264.43484747980557,141.99793594049535",
179
+ textContent: "2.63",
180
+ },
181
+ {
182
+ d: "M281.3553866198116,138.50789277770164 A131.85714285714286,131.85714285714286,0,1,0, 281.5359454842597,140.80211067631035",
183
+ textContent: "6.67",
184
+ },
185
+ ]);
186
+ });
187
+
188
+ test("Renders bigger sectors with larger barSize", () => {
189
+ const { container } = render(() => (
190
+ <RadialBarChart
191
+ width={500}
192
+ height={300}
193
+ cx={150}
194
+ cy={150}
195
+ innerRadius={20}
196
+ outerRadius={140}
197
+ barSize={20}
198
+ data={data}
199
+ >
200
+ <RadialBar
201
+ label={{ position: "insideStart" }}
202
+ background
203
+ dataKey="uv"
204
+ isAnimationActive={false}
205
+ />
206
+ </RadialBarChart>
207
+ ));
208
+ flush();
209
+
210
+ expectRadialBars(container, [
211
+ {
212
+ d: "M 186.4286,150 A 36.4286,36.4286,0, 1,0, 186.4286,150.0006 L 171,150.0004 A 21,21,0, 1,1, 171,150 Z",
213
+ },
214
+ {
215
+ d: "M 203.5714,150 A 53.5714,53.5714,0, 1,0, 180.9714,193.7112 L 172.0517,181.1224 A 38.1429,38.1429,0, 1,1, 188.1429,150 Z",
216
+ },
217
+ {
218
+ d: "M 220.7143,150 A 70.7143,70.7143,0, 0,0, 79.2886,149.3647 L 94.7165,149.5033 A 55.2857,55.2857,0, 0,1, 205.2857,150 Z",
219
+ },
220
+ {
221
+ d: "M 237.8571,150 A 87.8571,87.8571,0, 0,0, 143.8218,62.3604 L 144.9068,77.7507 A 72.4286,72.4286,0, 0,1, 222.4286,150 Z",
222
+ },
223
+ {
224
+ d: "M 255,150 A 105,105,0, 0,0, 134.0767,46.2144 L 136.4164,61.4645 A 89.5714,89.5714,0, 0,1, 239.5714,150 Z",
225
+ },
226
+ {
227
+ d: "M 272.1429,150 A 122.1429,122.1429,0, 0,0, 255.6872,88.7702 L 242.3373,96.5045 A 106.7143,106.7143,0, 0,1, 256.7143,150 Z",
228
+ },
229
+ {
230
+ d: "M 289.2857,150 A 139.2857,139.2857,0, 0,0, 182.9852,14.6764 L 179.3315,29.6661 A 123.8571,123.8571,0, 0,1, 273.8571,150 Z",
231
+ },
232
+ ]);
233
+
234
+ expectRadialBarLabels(container, [
235
+ {
236
+ d: "M178.60501918806298,147.49738510110296 A28.714285714285715,28.714285714285715,0,1,0, 178.64433915746068,147.99699268249012",
237
+ textContent: "31.47",
238
+ },
239
+ {
240
+ d: "M195.68264258392148,146.00328665400025 A45.857142857142854,45.857142857142854,0,1,0, 195.7454371619148,146.8011674183051",
241
+ textContent: "26.69",
242
+ },
243
+ {
244
+ d: "M212.76026597977997,144.50918820689753 A63,63,0,1,0, 212.84653516636894,145.6053421541201",
245
+ textContent: "15.69",
246
+ },
247
+ {
248
+ d: "M229.83788937563844,143.01508975979482 A80.14285714285714,80.14285714285714,0,1,0, 229.94763317082305,144.4095168899351",
249
+ textContent: "8.22",
250
+ },
251
+ {
252
+ d: "M246.91551277149694,141.5209913126921 A97.28571428571428,97.28571428571428,0,1,0, 247.04873117527717,143.2136916257501",
253
+ textContent: "8.63",
254
+ },
255
+ {
256
+ d: "M263.99313616735543,140.0268928655894 A114.42857142857142,114.42857142857142,0,1,0, 264.14982917973134,142.0178663615651",
257
+ textContent: "2.63",
258
+ },
259
+ {
260
+ d: "M281.0707595632139,138.5327944184867 A131.57142857142856,131.57142857142856,0,1,0, 281.25092718418546,140.8220410973801",
261
+ textContent: "6.67",
262
+ },
263
+ ]);
264
+ });
265
+
266
+ test("Adds class when set on radial bar and radial bar background", () => {
267
+ const { container } = render(() => (
268
+ <RadialBarChart
269
+ width={500}
270
+ height={300}
271
+ cx={150}
272
+ cy={150}
273
+ innerRadius={20}
274
+ outerRadius={140}
275
+ barSize={10}
276
+ data={data}
277
+ >
278
+ <RadialBar
279
+ class="test-radial-bar"
280
+ label
281
+ background={{ class: "test-custom-background" }}
282
+ dataKey="uv"
283
+ isAnimationActive={false}
284
+ />
285
+ </RadialBarChart>
286
+ ));
287
+ flush();
288
+ expect(container.querySelectorAll(".test-radial-bar")).toHaveLength(1);
289
+ expect(container.querySelectorAll(".test-custom-background")).toHaveLength(data.length);
290
+ });
291
+
292
+ test("Don't renders any sectors when no RadialBar is added", () => {
293
+ const { container } = render(() => (
294
+ <RadialBarChart
295
+ width={500}
296
+ height={300}
297
+ cx={150}
298
+ cy={150}
299
+ innerRadius={20}
300
+ outerRadius={140}
301
+ barSize={10}
302
+ data={data}
303
+ />
304
+ ));
305
+ flush();
306
+ expectRadialBars(container, []);
307
+ });
308
+
309
+ test("Don't renders any sectors when width is 0", () => {
310
+ const { container } = render(() => (
311
+ <RadialBarChart
312
+ width={0}
313
+ height={300}
314
+ cx={150}
315
+ cy={150}
316
+ innerRadius={20}
317
+ outerRadius={140}
318
+ barSize={10}
319
+ data={data}
320
+ >
321
+ <RadialBar dataKey="uv" isAnimationActive={false} />
322
+ </RadialBarChart>
323
+ ));
324
+ flush();
325
+ expect(container.querySelectorAll(".recharts-radial-bar-sector")).toHaveLength(0);
326
+ });
327
+
328
+ test("Don't renders any sectors when height is 0", () => {
329
+ const { container } = render(() => (
330
+ <RadialBarChart
331
+ width={10}
332
+ height={0}
333
+ cx={150}
334
+ cy={150}
335
+ innerRadius={20}
336
+ outerRadius={140}
337
+ barSize={10}
338
+ data={data}
339
+ >
340
+ <RadialBar dataKey="uv" isAnimationActive={false} />
341
+ </RadialBarChart>
342
+ ));
343
+ flush();
344
+ expect(container.querySelectorAll(".recharts-radial-bar-sector")).toHaveLength(0);
345
+ });
346
+
347
+ test("Renders sectors when barSize is not specified", () => {
348
+ const { container } = render(() => (
349
+ <RadialBarChart
350
+ width={500}
351
+ height={300}
352
+ cx={150}
353
+ cy={150}
354
+ innerRadius={20}
355
+ outerRadius={140}
356
+ data={data}
357
+ >
358
+ <RadialBar label background dataKey="uv" isAnimationActive={false} />
359
+ </RadialBarChart>
360
+ ));
361
+ flush();
362
+ expect(container.querySelectorAll(".recharts-radial-bar-sector")).toHaveLength(7);
363
+ });
364
+
365
+ test("Renders 7 sectors in simple RadialBarChart", () => {
366
+ const { container } = render(() => (
367
+ <RadialBarChart
368
+ width={500}
369
+ height={300}
370
+ cx={150}
371
+ cy={150}
372
+ innerRadius={20}
373
+ outerRadius={140}
374
+ barSize={10}
375
+ data={data}
376
+ >
377
+ <RadialBar label background dataKey="uv" isAnimationActive={false} />
378
+ </RadialBarChart>
379
+ ));
380
+ flush();
381
+ expect(container.querySelectorAll(".recharts-radial-bar-sector")).toHaveLength(7);
382
+ });
383
+
384
+ test("Renders 7 customized shape when shape is set to be a function", () => {
385
+ const renderShape = (props: SectorProps) => <Sector {...props} class="customized-shape" />;
386
+ const { container } = render(() => (
387
+ <RadialBarChart
388
+ width={500}
389
+ height={300}
390
+ cx={150}
391
+ cy={150}
392
+ innerRadius={20}
393
+ outerRadius={140}
394
+ barSize={10}
395
+ data={data}
396
+ >
397
+ <RadialBar shape={renderShape} label background dataKey="uv" isAnimationActive={false} />
398
+ </RadialBarChart>
399
+ ));
400
+ flush();
401
+ expect(container.querySelectorAll(".customized-shape")).toHaveLength(7);
402
+ });
403
+
404
+ test("Renders 7 legend item when add a Legend element", () => {
405
+ const { container } = render(() => (
406
+ <RadialBarChart
407
+ width={500}
408
+ height={300}
409
+ cx={150}
410
+ cy={150}
411
+ innerRadius={20}
412
+ outerRadius={140}
413
+ barSize={10}
414
+ data={data}
415
+ >
416
+ <RadialBar background dataKey="uv" isAnimationActive={false} />
417
+ <Legend />
418
+ </RadialBarChart>
419
+ ));
420
+ flush();
421
+ expect(container.querySelectorAll(".recharts-legend-wrapper")).toHaveLength(1);
422
+ expect(container.querySelectorAll(".recharts-legend-item")).toHaveLength(7);
423
+ });
424
+
425
+ test("Renders tooltip when add a Tooltip element", () => {
426
+ const { container } = render(() => (
427
+ <RadialBarChart
428
+ width={500}
429
+ height={300}
430
+ cx={150}
431
+ cy={150}
432
+ innerRadius={20}
433
+ outerRadius={140}
434
+ barSize={10}
435
+ data={data}
436
+ >
437
+ <RadialBar background dataKey="uv" isAnimationActive={false} />
438
+ <Tooltip />
439
+ </RadialBarChart>
440
+ ));
441
+ flush();
442
+ expect(container.querySelectorAll(".recharts-tooltip-wrapper")).toHaveLength(1);
443
+ expect(container.querySelectorAll(".recharts-default-tooltip")).toHaveLength(1);
444
+ });
445
+
446
+ test("Renders Cell children component class prop", () => {
447
+ const { container } = render(() => (
448
+ <RadialBarChart
449
+ width={500}
450
+ height={300}
451
+ cx={150}
452
+ cy={150}
453
+ innerRadius={20}
454
+ outerRadius={140}
455
+ barSize={10}
456
+ data={data}
457
+ >
458
+ <RadialBar background dataKey="uv" isAnimationActive={false}>
459
+ {data.map(() => (
460
+ <Cell class="unit-test-class" />
461
+ ))}
462
+ </RadialBar>
463
+ </RadialBarChart>
464
+ ));
465
+ flush();
466
+ expect(container.querySelectorAll(".unit-test-class")).toHaveLength(data.length);
467
+ });
468
+
469
+ test("renders background in the exact same position as foreground", () => {
470
+ const preparedData = [{ value: 42, fill: "#241084" }];
471
+ const emptyBackgroundColor = "#D8BDF3";
472
+
473
+ const { container } = render(() => (
474
+ <RadialBarChart
475
+ data={preparedData}
476
+ height={280}
477
+ width={340}
478
+ cx="47%"
479
+ startAngle={180}
480
+ endAngle={0}
481
+ >
482
+ <RadialBar
483
+ background={{ fill: emptyBackgroundColor }}
484
+ dataKey="value"
485
+ isAnimationActive={false}
486
+ />
487
+ </RadialBarChart>
488
+ ));
489
+ flush();
490
+ const background = container.querySelector(".recharts-radial-bar-background-sector");
491
+ expect(background).not.toBeNull();
492
+ const foreground = container.querySelector(".recharts-radial-bar-sector");
493
+ expect(foreground).not.toBeNull();
494
+ expect(foreground!.getAttribute("d")).toEqual(background!.getAttribute("d"));
495
+ });
496
+
497
+ test("Renders customized active shape when activeShape set to be a function", () => {
498
+ mockGetBoundingClientRect({ width: 100, height: 100 });
499
+ const { container } = render(() => (
500
+ <RadialBarChart
501
+ width={500}
502
+ height={300}
503
+ cx={150}
504
+ cy={150}
505
+ innerRadius={20}
506
+ outerRadius={140}
507
+ barSize={10}
508
+ data={data}
509
+ >
510
+ <RadialBar
511
+ background
512
+ dataKey="uv"
513
+ isAnimationActive={false}
514
+ activeShape={(props: SectorProps) => <Sector {...props} fill="red" />}
515
+ />
516
+ <Tooltip />
517
+ </RadialBarChart>
518
+ ));
519
+
520
+ assertActiveShapeInteractions(container);
521
+ });
522
+
523
+ // element-form activeShape (React.cloneElement) is PERMANENT-N/A in Solid, so the
524
+ // upstream "activeShape set to be a ReactElement" case is omitted.
525
+
526
+ test("Renders customized active bar when activeBar is set to be a truthy boolean", () => {
527
+ mockGetBoundingClientRect({ width: 100, height: 100 });
528
+ const { container } = render(() => (
529
+ <RadialBarChart
530
+ width={500}
531
+ height={300}
532
+ cx={150}
533
+ cy={150}
534
+ innerRadius={20}
535
+ outerRadius={140}
536
+ barSize={10}
537
+ data={data}
538
+ >
539
+ <RadialBar background dataKey="uv" isAnimationActive={false} activeShape />
540
+ <Tooltip />
541
+ </RadialBarChart>
542
+ ));
543
+
544
+ assertActiveShapeInteractions(container);
545
+ });
546
+
547
+ test("Does not render customized active bar when activeBar set to be a falsy boolean", () => {
548
+ mockGetBoundingClientRect({ width: 100, height: 100 });
549
+ const { container } = render(() => (
550
+ <RadialBarChart
551
+ width={500}
552
+ height={300}
553
+ cx={150}
554
+ cy={150}
555
+ innerRadius={20}
556
+ outerRadius={140}
557
+ barSize={10}
558
+ data={data}
559
+ >
560
+ <RadialBar background dataKey="uv" isAnimationActive={false} activeShape={false} />
561
+ <Tooltip />
562
+ </RadialBarChart>
563
+ ));
564
+
565
+ const sectorNodes = container.querySelectorAll(".recharts-sector");
566
+ const [sector] = Array.from(sectorNodes);
567
+ assertNotNull(sector);
568
+ fireEvent.mouseMove(sector, { clientX: 200, clientY: 200 });
569
+ flush();
570
+ vi.runAllTimers();
571
+ flush();
572
+
573
+ const activeSector = container.querySelectorAll(".recharts-active-shape");
574
+ expect(activeSector).toHaveLength(0);
575
+ });
576
+
577
+ test("Renders customized active bar when activeBar set to be an object", () => {
578
+ mockGetBoundingClientRect({ width: 100, height: 100 });
579
+ const { container } = render(() => (
580
+ <RadialBarChart
581
+ width={500}
582
+ height={300}
583
+ cx={150}
584
+ cy={150}
585
+ innerRadius={20}
586
+ outerRadius={140}
587
+ barSize={10}
588
+ data={data}
589
+ >
590
+ <RadialBar
591
+ background
592
+ dataKey="uv"
593
+ isAnimationActive={false}
594
+ activeShape={{ fill: "red" }}
595
+ />
596
+ <Tooltip />
597
+ </RadialBarChart>
598
+ ));
599
+
600
+ assertActiveShapeInteractions(container);
601
+ });
602
+
603
+ describe("RadialBarChart layout context", () => {
604
+ it("should provide viewBox", () => {
605
+ const spy = vi.fn();
606
+ const Comp = (): null => {
607
+ const viewBox = useViewBox();
608
+ createEffect(
609
+ () => viewBox(),
610
+ (v) => spy(v),
611
+ );
612
+ return null;
613
+ };
614
+ render(() => (
615
+ <RadialBarChart width={100} height={50} barSize={20}>
616
+ <Comp />
617
+ </RadialBarChart>
618
+ ));
619
+ flush();
620
+ expect(spy).toHaveBeenLastCalledWith({ height: 40, width: 90, x: 5, y: 5 });
621
+ });
622
+
623
+ it("should provide clipPathId", () => {
624
+ const spy = vi.fn();
625
+ const Comp = (): null => {
626
+ createEffect(
627
+ () => useClipPathId(),
628
+ (v) => spy(v),
629
+ );
630
+ return null;
631
+ };
632
+ render(() => (
633
+ <RadialBarChart width={100} height={50} barSize={20}>
634
+ <Comp />
635
+ </RadialBarChart>
636
+ ));
637
+ flush();
638
+ expect(spy).toHaveBeenLastCalledWith(expect.stringMatching(/recharts\d+-clip/));
639
+ });
640
+
641
+ it("should provide width", () => {
642
+ const spy = vi.fn();
643
+ const Comp = (): null => {
644
+ const width = useChartWidth();
645
+ createEffect(
646
+ () => width(),
647
+ (v) => spy(v),
648
+ );
649
+ return null;
650
+ };
651
+ render(() => (
652
+ <RadialBarChart width={100} height={50} barSize={20}>
653
+ <Comp />
654
+ </RadialBarChart>
655
+ ));
656
+ flush();
657
+ expect(spy).toHaveBeenLastCalledWith(100);
658
+ });
659
+
660
+ it("should provide height", () => {
661
+ const spy = vi.fn();
662
+ const Comp = (): null => {
663
+ const height = useChartHeight();
664
+ createEffect(
665
+ () => height(),
666
+ (v) => spy(v),
667
+ );
668
+ return null;
669
+ };
670
+ render(() => (
671
+ <RadialBarChart width={100} height={50} barSize={20}>
672
+ <Comp />
673
+ </RadialBarChart>
674
+ ));
675
+ flush();
676
+ expect(spy).toHaveBeenLastCalledWith(50);
677
+ });
678
+ });
679
+ });