solid-recharts 0.2.0 → 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (508) hide show
  1. package/package.json +17 -13
  2. package/src/animation/AnimatedItems.tsx +2 -4
  3. package/src/animation/CSSTransitionAnimate.tsx +41 -39
  4. package/src/animation/JavascriptAnimate.tsx +45 -41
  5. package/src/cartesian/Area.tsx +43 -58
  6. package/src/cartesian/AreaRevealShape.tsx +1 -1
  7. package/src/cartesian/Bar.tsx +98 -78
  8. package/src/cartesian/BarStack.tsx +10 -7
  9. package/src/cartesian/Brush.tsx +20 -16
  10. package/src/cartesian/CartesianAxis.tsx +4 -4
  11. package/src/cartesian/CartesianGrid.tsx +5 -5
  12. package/src/cartesian/ErrorBar.tsx +9 -7
  13. package/src/cartesian/Funnel.tsx +17 -21
  14. package/src/cartesian/GraphicalItemClipPath.tsx +1 -1
  15. package/src/cartesian/Line.tsx +51 -66
  16. package/src/cartesian/LineDrawShape.tsx +20 -17
  17. package/src/cartesian/ReferenceArea.tsx +28 -38
  18. package/src/cartesian/ReferenceDot.tsx +27 -37
  19. package/src/cartesian/ReferenceLine.tsx +28 -37
  20. package/src/cartesian/RenderedTicksReporter.tsx +19 -17
  21. package/src/cartesian/Scatter.tsx +27 -39
  22. package/src/cartesian/XAxis.tsx +55 -68
  23. package/src/cartesian/YAxis.tsx +88 -99
  24. package/src/cartesian/ZAxis.tsx +29 -41
  25. package/src/chart/AreaChart.tsx +1 -1
  26. package/src/chart/BarChart.tsx +1 -1
  27. package/src/chart/CartesianChart.tsx +4 -3
  28. package/src/chart/CategoricalChart.tsx +5 -5
  29. package/src/chart/ComposedChart.tsx +1 -1
  30. package/src/chart/FunnelChart.tsx +1 -1
  31. package/src/chart/LineChart.tsx +1 -1
  32. package/src/chart/PieChart.tsx +4 -3
  33. package/src/chart/PolarChart.tsx +4 -3
  34. package/src/chart/RadarChart.tsx +4 -3
  35. package/src/chart/RadialBarChart.tsx +7 -3
  36. package/src/chart/RechartsWrapper.tsx +14 -24
  37. package/src/chart/Sankey.tsx +9 -6
  38. package/src/chart/ScatterChart.tsx +1 -1
  39. package/src/chart/SunburstChart.tsx +6 -5
  40. package/src/chart/Treemap.tsx +5 -4
  41. package/src/component/ActivePoints.tsx +6 -15
  42. package/src/component/Cell.tsx +23 -5
  43. package/src/component/Cursor.tsx +3 -3
  44. package/src/component/DefaultLegendContent.tsx +8 -6
  45. package/src/component/DefaultTooltipContent.tsx +14 -10
  46. package/src/component/Dots.tsx +11 -7
  47. package/src/component/Label.tsx +13 -10
  48. package/src/component/LabelList.tsx +12 -7
  49. package/src/component/Legend.tsx +26 -21
  50. package/src/component/ResponsiveContainer.tsx +52 -49
  51. package/src/component/Text.tsx +5 -5
  52. package/src/component/Tooltip.tsx +21 -18
  53. package/src/component/TooltipBoundingBox.tsx +18 -16
  54. package/src/component/responsiveContainerUtils.ts +1 -1
  55. package/src/container/ClipPathProvider.tsx +3 -3
  56. package/src/container/Layer.tsx +5 -5
  57. package/src/container/RootSurface.tsx +1 -1
  58. package/src/container/Surface.tsx +5 -6
  59. package/src/context/ErrorBarContext.tsx +17 -26
  60. package/src/context/PanoramaContext.tsx +2 -2
  61. package/src/context/RegisterGraphicalItemId.tsx +4 -2
  62. package/src/context/chartDataContext.tsx +26 -23
  63. package/src/context/chartLayoutContext.tsx +16 -12
  64. package/src/polar/Pie.tsx +49 -60
  65. package/src/polar/PolarAngleAxis.tsx +43 -52
  66. package/src/polar/PolarGrid.tsx +5 -5
  67. package/src/polar/PolarRadiusAxis.tsx +42 -50
  68. package/src/polar/Radar.tsx +24 -36
  69. package/src/polar/RadialBar.tsx +23 -41
  70. package/src/shape/Cross.tsx +5 -5
  71. package/src/shape/Curve.tsx +7 -8
  72. package/src/shape/Dot.tsx +4 -4
  73. package/src/shape/Polygon.tsx +5 -5
  74. package/src/shape/Rectangle.tsx +22 -20
  75. package/src/shape/Sector.tsx +5 -5
  76. package/src/shape/Symbols.tsx +6 -6
  77. package/src/shape/Trapezoid.tsx +29 -27
  78. package/src/state/RechartsStoreProvider.tsx +5 -3
  79. package/src/state/ReportChartProps.tsx +8 -6
  80. package/src/state/ReportEventSettings.tsx +8 -6
  81. package/src/state/ReportMainChartProps.tsx +11 -9
  82. package/src/state/ReportPolarOptions.tsx +15 -13
  83. package/src/state/SetLegendPayload.ts +20 -28
  84. package/src/state/SetTooltipEntrySettings.tsx +10 -27
  85. package/src/state/brushSlice.ts +10 -8
  86. package/src/state/cartesianAxisSlice.ts +72 -84
  87. package/src/state/chartDataSlice.ts +29 -23
  88. package/src/state/createCollectionActions.ts +51 -0
  89. package/src/state/createSelector.ts +97 -0
  90. package/src/state/errorBarSlice.ts +22 -16
  91. package/src/state/eventSettingsSlice.ts +11 -9
  92. package/src/state/externalEventsMiddleware.ts +2 -11
  93. package/src/state/graphicalItemsSlice.ts +35 -44
  94. package/src/state/isEventThrottled.ts +12 -0
  95. package/src/state/keyboardEventsMiddleware.ts +2 -8
  96. package/src/state/layoutSlice.ts +29 -17
  97. package/src/state/legendSlice.ts +35 -31
  98. package/src/state/mouseEventsMiddleware.ts +2 -13
  99. package/src/state/optionsSlice.ts +8 -6
  100. package/src/state/patched.ts +19 -0
  101. package/src/state/polarAxisSlice.ts +21 -13
  102. package/src/state/polarOptionsSlice.ts +16 -14
  103. package/src/state/referenceElementsSlice.ts +49 -34
  104. package/src/state/registerInStore.ts +70 -0
  105. package/src/state/renderedTicksSlice.ts +11 -7
  106. package/src/state/rootPropsSlice.ts +16 -14
  107. package/src/state/selectors/areaSelectors.ts +13 -36
  108. package/src/state/selectors/arrayEqualityCheck.ts +32 -7
  109. package/src/state/selectors/axisSelectors.ts +215 -169
  110. package/src/state/selectors/barSelectors.ts +8 -36
  111. package/src/state/selectors/combiners/combineConfiguredScale.ts +1 -1
  112. package/src/state/selectors/combiners/combineRealScaleType.ts +1 -1
  113. package/src/state/selectors/dataSelectors.ts +35 -16
  114. package/src/state/selectors/numberDomainEqualityCheck.ts +16 -8
  115. package/src/state/selectors/selectAxisForGraphicalItem.ts +52 -0
  116. package/src/state/tooltipSlice.ts +135 -86
  117. package/src/state/unregisterOnCleanup.ts +5 -20
  118. package/src/state/zIndexSlice.ts +50 -42
  119. package/src/synchronisation/useChartSynchronisation.tsx +213 -217
  120. package/src/util/ActiveShapeUtils.tsx +2 -9
  121. package/src/util/BarUtils.tsx +30 -23
  122. package/src/util/ChartUtils.ts +69 -25
  123. package/src/util/DirectPortal.tsx +107 -0
  124. package/src/util/FunnelUtils.tsx +1 -1
  125. package/src/util/RadialBarUtils.tsx +4 -3
  126. package/src/util/createCartesianCharts.tsx +1 -1
  127. package/src/util/createPolarCharts.tsx +1 -1
  128. package/src/util/propsAreEqual.ts +3 -33
  129. package/src/util/stacks/stackTypes.ts +1 -1
  130. package/src/util/svgPropertiesAndEvents.ts +1 -1
  131. package/src/util/tooltip/translate.ts +2 -2
  132. package/src/util/types.ts +3 -3
  133. package/src/zIndex/ZIndexLayer.tsx +39 -68
  134. package/src/zIndex/ZIndexPortal.tsx +29 -25
  135. package/src/state/reduxDevtoolsJsonStringifyReplacer.ts +0 -15
  136. package/src/util/axisPropsAreEqual.ts +0 -42
  137. package/src/util/resolveDefaultProps.tsx +0 -8
  138. package/src/util/typedDataKey.ts +0 -8
  139. package/test/_data.ts +0 -408
  140. package/test/animation/AnimationController.typed.spec.ts +0 -53
  141. package/test/animation/AnimationControllerImpl.spec.ts +0 -271
  142. package/test/animation/CSSTransitionAnimate.timing.spec.tsx +0 -473
  143. package/test/animation/JavascriptAnimate.spec.tsx +0 -62
  144. package/test/animation/RechartsAnimation.spec.ts +0 -636
  145. package/test/animation/easing.spec.ts +0 -218
  146. package/test/animation/legacyAnimationLengthChange.spec.tsx +0 -803
  147. package/test/animation/matchBy.spec.ts +0 -467
  148. package/test/animation/mockAnimationController.ts +0 -40
  149. package/test/animation/mockControllerAnimationManager.ts +0 -143
  150. package/test/animation/mockTimeoutController.ts +0 -114
  151. package/test/animation/timeoutController.spec.ts +0 -138
  152. package/test/animation/useAnimationStartSnapshot.spec.ts +0 -147
  153. package/test/animation/util.spec.ts +0 -28
  154. package/test/cartesian/Area.animation.spec.tsx +0 -363
  155. package/test/cartesian/Area.range.spec.tsx +0 -54
  156. package/test/cartesian/Area.spec.tsx +0 -1202
  157. package/test/cartesian/Area.stacked.render.spec.tsx +0 -69
  158. package/test/cartesian/Area.typed.spec.tsx +0 -209
  159. package/test/cartesian/Axis.integration.spec.tsx +0 -158
  160. package/test/cartesian/Bar/Bar.csstransition.spec.tsx +0 -299
  161. package/test/cartesian/Bar/Bar.spec.tsx +0 -2314
  162. package/test/cartesian/Bar/Bar.typed.spec.tsx +0 -192
  163. package/test/cartesian/Bar.animation.spec.tsx +0 -426
  164. package/test/cartesian/Bar.stackDomain.spec.tsx +0 -66
  165. package/test/cartesian/Bar.stacked.render.spec.tsx +0 -53
  166. package/test/cartesian/Bar.truncateByDomain.spec.tsx +0 -237
  167. package/test/cartesian/Bar.zeroDimensionFiltering.spec.tsx +0 -336
  168. package/test/cartesian/BarStack.spec.tsx +0 -91
  169. package/test/cartesian/Brush.keyboard.spec.tsx +0 -88
  170. package/test/cartesian/Brush.panorama.spec.tsx +0 -41
  171. package/test/cartesian/Brush.props.spec.tsx +0 -63
  172. package/test/cartesian/Brush.render.spec.tsx +0 -117
  173. package/test/cartesian/Brush.spec.tsx +0 -522
  174. package/test/cartesian/Brush.stacked.spec.tsx +0 -221
  175. package/test/cartesian/CartesianAxis.render.spec.tsx +0 -50
  176. package/test/cartesian/CartesianAxis.spec.tsx +0 -396
  177. package/test/cartesian/CartesianGrid.render.spec.tsx +0 -39
  178. package/test/cartesian/CartesianGrid.spec.tsx +0 -2103
  179. package/test/cartesian/ErrorBar.render.spec.tsx +0 -69
  180. package/test/cartesian/ErrorBar.spec.tsx +0 -2414
  181. package/test/cartesian/Funnel.animation.spec.tsx +0 -241
  182. package/test/cartesian/Funnel.spec.tsx +0 -226
  183. package/test/cartesian/Funnel.typed.spec.tsx +0 -221
  184. package/test/cartesian/GraphicalItemClipPath.scale-behavior.spec.tsx +0 -627
  185. package/test/cartesian/GraphicalItemClipPath.spec.tsx +0 -427
  186. package/test/cartesian/Line.animation.spec.tsx +0 -643
  187. package/test/cartesian/Line.sparseAnimationPath.spec.tsx +0 -98
  188. package/test/cartesian/Line.spec.tsx +0 -471
  189. package/test/cartesian/Line.typed.spec.tsx +0 -152
  190. package/test/cartesian/ReferenceArea.render.spec.tsx +0 -63
  191. package/test/cartesian/ReferenceArea.spec.tsx +0 -663
  192. package/test/cartesian/ReferenceArea.typed.spec.tsx +0 -74
  193. package/test/cartesian/ReferenceDot.render.spec.tsx +0 -55
  194. package/test/cartesian/ReferenceDot.spec.tsx +0 -462
  195. package/test/cartesian/ReferenceDot.typed.spec.tsx +0 -76
  196. package/test/cartesian/ReferenceLine/ReferenceLine.panorama.spec.tsx +0 -184
  197. package/test/cartesian/ReferenceLine/ReferenceLine.spec.tsx +0 -744
  198. package/test/cartesian/ReferenceLine/ReferenceLine.typed.spec.tsx +0 -74
  199. package/test/cartesian/ReferenceLine/getEndPoints.spec.ts +0 -399
  200. package/test/cartesian/ReferenceLine.render.spec.tsx +0 -134
  201. package/test/cartesian/Scatter.animation.spec.tsx +0 -381
  202. package/test/cartesian/Scatter.render.spec.tsx +0 -61
  203. package/test/cartesian/Scatter.spec.tsx +0 -406
  204. package/test/cartesian/Scatter.typed.spec.tsx +0 -153
  205. package/test/cartesian/XAxis/XAxis.barSize.spec.tsx +0 -336
  206. package/test/cartesian/XAxis/XAxis.brush.spec.tsx +0 -266
  207. package/test/cartesian/XAxis/XAxis.categorydomain.spec.tsx +0 -872
  208. package/test/cartesian/XAxis/XAxis.dataKey.spec.tsx +0 -86
  209. package/test/cartesian/XAxis/XAxis.datatypes.spec.tsx +0 -127
  210. package/test/cartesian/XAxis/XAxis.hide.spec.tsx +0 -106
  211. package/test/cartesian/XAxis/XAxis.multiaxis.spec.tsx +0 -336
  212. package/test/cartesian/XAxis/XAxis.numberdomain.spec.tsx +0 -1466
  213. package/test/cartesian/XAxis/XAxis.padding.spec.tsx +0 -758
  214. package/test/cartesian/XAxis/XAxis.padding_clip.spec.tsx +0 -65
  215. package/test/cartesian/XAxis/XAxis.state.spec.tsx +0 -355
  216. package/test/cartesian/XAxis/XAxis.tick.spec.tsx +0 -493
  217. package/test/cartesian/XAxis/XAxis.timescale.spec.tsx +0 -233
  218. package/test/cartesian/XAxis/XAxis.type.spec.tsx +0 -107
  219. package/test/cartesian/XAxis/XAxis.typed.spec.tsx +0 -102
  220. package/test/cartesian/XAxis/XAxis.vertical.spec.tsx +0 -265
  221. package/test/cartesian/XAxis.tickFormatter.spec.tsx +0 -54
  222. package/test/cartesian/YAxis/YAxis.7362.derivedDomain.spec.tsx +0 -230
  223. package/test/cartesian/YAxis/YAxis.7362.spec.tsx +0 -104
  224. package/test/cartesian/YAxis/YAxis.interval-zero.spec.tsx +0 -88
  225. package/test/cartesian/YAxis/YAxis.label.spec.tsx +0 -219
  226. package/test/cartesian/YAxis/YAxis.spec.tsx +0 -1595
  227. package/test/cartesian/YAxis/YAxis.tick.spec.tsx +0 -428
  228. package/test/cartesian/YAxis/YAxis.tickFormatter.spec.tsx +0 -54
  229. package/test/cartesian/YAxis/YAxis.ticks.spec.tsx +0 -263
  230. package/test/cartesian/YAxis/YAxis.type.spec.tsx +0 -107
  231. package/test/cartesian/YAxis/YAxis.typed.spec.tsx +0 -102
  232. package/test/cartesian/ZAxis.spec.tsx +0 -300
  233. package/test/cartesian/ZAxis.typed.spec.tsx +0 -33
  234. package/test/cartesian/__snapshots__/Brush.spec.tsx.snap +0 -5
  235. package/test/cartesian/axisLineAndStroke.spec.tsx +0 -72
  236. package/test/cartesian/getCartesianPosition.spec.ts +0 -907
  237. package/test/cartesian/getEquidistantTicks.spec.ts +0 -88
  238. package/test/cartesian/getTicks.spec.ts +0 -378
  239. package/test/cartesian/miscFeatureGaps.spec.tsx +0 -89
  240. package/test/cartesian/useAnimatedLineLength.spec.ts +0 -168
  241. package/test/chart/AccessibilityLayer.spec.tsx +0 -569
  242. package/test/chart/AccessibilityScans.spec.tsx +0 -286
  243. package/test/chart/AreaChart.spec.tsx +0 -409
  244. package/test/chart/AreaChart.stacked.spec.tsx +0 -1407
  245. package/test/chart/AreaChart.typed.spec.tsx +0 -39
  246. package/test/chart/BarChart.spec.tsx +0 -3719
  247. package/test/chart/BarChart.typed.spec.tsx +0 -60
  248. package/test/chart/CategoricalChart.spec.tsx +0 -255
  249. package/test/chart/ComposedChart.spec.tsx +0 -199
  250. package/test/chart/ComposedChart.typed.spec.tsx +0 -39
  251. package/test/chart/FunnelChart.spec.tsx +0 -215
  252. package/test/chart/FunnelChart.typed.spec.tsx +0 -39
  253. package/test/chart/LineChart.multiseries.spec.tsx +0 -50
  254. package/test/chart/LineChart.smoke.spec.tsx +0 -50
  255. package/test/chart/LineChart.spec.tsx +0 -930
  256. package/test/chart/LineChart.typed.spec.tsx +0 -39
  257. package/test/chart/NicheChartTooltip.spec.tsx +0 -81
  258. package/test/chart/PieChart.spec.tsx +0 -793
  259. package/test/chart/PieChart.typed.spec.tsx +0 -39
  260. package/test/chart/RadarChart.spec.tsx +0 -530
  261. package/test/chart/RadarChart.typed.spec.tsx +0 -39
  262. package/test/chart/RadialBarChart.5966.spec.tsx +0 -48
  263. package/test/chart/RadialBarChart.spec.tsx +0 -679
  264. package/test/chart/RadialBarChart.typed.spec.tsx +0 -39
  265. package/test/chart/RechartsWrapper.spec.tsx +0 -83
  266. package/test/chart/Sankey.content.spec.tsx +0 -46
  267. package/test/chart/Sankey.spec.tsx +0 -952
  268. package/test/chart/Sankey.typed.spec.tsx +0 -29
  269. package/test/chart/ScatterChart.spec.tsx +0 -2613
  270. package/test/chart/ScatterChart.typed.spec.tsx +0 -39
  271. package/test/chart/SunburstChart.spec.tsx +0 -146
  272. package/test/chart/Treemap.animation.spec.tsx +0 -52
  273. package/test/chart/Treemap.spec.tsx +0 -1003
  274. package/test/chart/Treemap.typed.spec.tsx +0 -26
  275. package/test/chart/chartEvents.spec.tsx +0 -127
  276. package/test/chart/responsive.spec.tsx +0 -620
  277. package/test/component/Cell.render.spec.tsx +0 -155
  278. package/test/component/Cell.spec.tsx +0 -12
  279. package/test/component/Cursor.spec.tsx +0 -186
  280. package/test/component/DefaultTooltipContent.spec.tsx +0 -102
  281. package/test/component/Label.render.spec.tsx +0 -63
  282. package/test/component/Label.spec.tsx +0 -686
  283. package/test/component/Label.typed.spec.tsx +0 -46
  284. package/test/component/LabelList.spec.tsx +0 -188
  285. package/test/component/Legend.itemSorter.spec.tsx +0 -704
  286. package/test/component/Legend.render.spec.tsx +0 -92
  287. package/test/component/Legend.spec.tsx +0 -2213
  288. package/test/component/Legend.typed.spec.tsx +0 -22
  289. package/test/component/ResponsiveContainer.spec.tsx +0 -523
  290. package/test/component/ResponsiveContainerDataTest.spec.tsx +0 -51
  291. package/test/component/Text.spec.tsx +0 -415
  292. package/test/component/Text.typed.spec.tsx +0 -46
  293. package/test/component/Tooltip/ActiveDot.spec.tsx +0 -370
  294. package/test/component/Tooltip/Tooltip.animation.spec.tsx +0 -209
  295. package/test/component/Tooltip/Tooltip.content.spec.tsx +0 -128
  296. package/test/component/Tooltip/Tooltip.formatter.spec.tsx +0 -152
  297. package/test/component/Tooltip/Tooltip.includeHidden.spec.tsx +0 -79
  298. package/test/component/Tooltip/Tooltip.multipleDataArrays.spec.tsx +0 -165
  299. package/test/component/Tooltip/Tooltip.offset.spec.tsx +0 -113
  300. package/test/component/Tooltip/Tooltip.state.spec.tsx +0 -74
  301. package/test/component/Tooltip/Tooltip.sync.spec.tsx +0 -639
  302. package/test/component/Tooltip/defaultIndex.spec.tsx +0 -227
  303. package/test/component/Tooltip/graphicalItem.formatter.spec.tsx +0 -138
  304. package/test/component/Tooltip/itemSorter.spec.tsx +0 -2815
  305. package/test/component/Tooltip/tooltipEventType.spec.tsx +0 -344
  306. package/test/component/Tooltip/tooltipMouseHoverSelectors.ts +0 -41
  307. package/test/component/Tooltip/tooltipTestHelpers.tsx +0 -162
  308. package/test/component/Tooltip.defaultIndex.spec.tsx +0 -48
  309. package/test/component/Tooltip.hover.spec.tsx +0 -61
  310. package/test/component/Tooltip.item.spec.tsx +0 -54
  311. package/test/component/Tooltip.keyboard.spec.tsx +0 -51
  312. package/test/component/Tooltip.payload.spec.tsx +0 -1716
  313. package/test/component/Tooltip.touch.spec.tsx +0 -39
  314. package/test/component/Tooltip.visibility.spec.tsx +0 -1889
  315. package/test/component/TooltipBoundingBox.spec.tsx +0 -89
  316. package/test/component/responsiveContainerUtils.spec.ts +0 -205
  317. package/test/container/ClipPath.spec.tsx +0 -602
  318. package/test/container/chartDimensions.spec.tsx +0 -368
  319. package/test/context/chartLayoutContext.spec.tsx +0 -378
  320. package/test/helper/ExpectAxisDomain.tsx +0 -27
  321. package/test/helper/assertNotNull.ts +0 -6
  322. package/test/helper/assertZIndexLayerOrder.ts +0 -19
  323. package/test/helper/createSelectorTestCase.tsx +0 -176
  324. package/test/helper/expectAnimatedPieAngles.ts +0 -100
  325. package/test/helper/expectAnimatedPiePaths.ts +0 -78
  326. package/test/helper/expectAreaCurve.ts +0 -15
  327. package/test/helper/expectAxisTicks.ts +0 -48
  328. package/test/helper/expectBars.ts +0 -54
  329. package/test/helper/expectFunctionReturning.ts +0 -58
  330. package/test/helper/expectLabel.ts +0 -32
  331. package/test/helper/expectLastCalledWith.ts +0 -48
  332. package/test/helper/expectLine.ts +0 -20
  333. package/test/helper/expectPieSectors.ts +0 -80
  334. package/test/helper/expectScale.ts +0 -37
  335. package/test/helper/expectScatterPoints.ts +0 -52
  336. package/test/helper/expectStackGroups.ts +0 -144
  337. package/test/helper/mockAxes.ts +0 -22
  338. package/test/helper/mockGetBoundingClientRect.ts +0 -66
  339. package/test/helper/mockHTMLElementProperty.ts +0 -19
  340. package/test/helper/mockTouchingElement.ts +0 -27
  341. package/test/helper/offsetHelpers.ts +0 -19
  342. package/test/helper/parameterizedTestCases.tsx +0 -99
  343. package/test/helper/produceState.ts +0 -32
  344. package/test/helper/selectorTestHelpers.tsx +0 -63
  345. package/test/helper/trim.spec.ts +0 -35
  346. package/test/helper/trim.ts +0 -11
  347. package/test/hooks/useActiveTooltipDataPoints.spec.tsx +0 -358
  348. package/test/hooks/useAxisDomain.spec.tsx +0 -361
  349. package/test/hooks/useAxisScale.spec.tsx +0 -283
  350. package/test/hooks/useAxisTicks.spec.tsx +0 -130
  351. package/test/hooks/useOffset.spec.tsx +0 -248
  352. package/test/hooks/useTooltipStateHooks.spec.tsx +0 -109
  353. package/test/polar/Pie/Pie-TwoLevelPieChart.spec.tsx +0 -135
  354. package/test/polar/Pie/Pie.spec.tsx +0 -784
  355. package/test/polar/Pie/Pie.typed.spec.tsx +0 -78
  356. package/test/polar/Pie.animation.spec.tsx +0 -529
  357. package/test/polar/PieWithLegend.animation.spec.tsx +0 -142
  358. package/test/polar/PolarAngleAxis/PolarAngleAxis.events.spec.tsx +0 -76
  359. package/test/polar/PolarAngleAxis/PolarAngleAxis.spec.tsx +0 -2079
  360. package/test/polar/PolarAngleAxis/PolarAngleAxis.typed.spec.tsx +0 -102
  361. package/test/polar/PolarAngleAxis.render.spec.tsx +0 -79
  362. package/test/polar/PolarGrid.render.spec.tsx +0 -75
  363. package/test/polar/PolarGrid.spec.tsx +0 -918
  364. package/test/polar/PolarLegendPerRow.render.spec.tsx +0 -85
  365. package/test/polar/PolarRadiusAxis.events.spec.tsx +0 -65
  366. package/test/polar/PolarRadiusAxis.render.spec.tsx +0 -52
  367. package/test/polar/PolarRadiusAxis.spec.tsx +0 -991
  368. package/test/polar/PolarRadiusAxis.typed.spec.tsx +0 -84
  369. package/test/polar/PolarTooltipLegend.render.spec.tsx +0 -80
  370. package/test/polar/Radar.animation.spec.tsx +0 -570
  371. package/test/polar/Radar.render.spec.tsx +0 -71
  372. package/test/polar/Radar.spec.tsx +0 -265
  373. package/test/polar/Radar.typed.spec.tsx +0 -119
  374. package/test/polar/RadialBar/RadialBar.spec.tsx +0 -1521
  375. package/test/polar/RadialBar/RadialBar.typed.spec.tsx +0 -132
  376. package/test/polar/RadialBar.animation.spec.tsx +0 -375
  377. package/test/polar/RadialBar.render.spec.tsx +0 -66
  378. package/test/polar/RadialBar.stacked.spec.tsx +0 -57
  379. package/test/setup.ts +0 -84
  380. package/test/shape/ActiveShape.spec.tsx +0 -181
  381. package/test/shape/Cross.spec.tsx +0 -60
  382. package/test/shape/Cross.typed.spec.tsx +0 -26
  383. package/test/shape/Curve.spec.tsx +0 -368
  384. package/test/shape/Curve.typed.spec.tsx +0 -69
  385. package/test/shape/Dot.spec.tsx +0 -73
  386. package/test/shape/Dot.typed.spec.tsx +0 -30
  387. package/test/shape/Polygon.spec.tsx +0 -357
  388. package/test/shape/Polygon.typed.spec.tsx +0 -28
  389. package/test/shape/Rectangle.animation.spec.tsx +0 -451
  390. package/test/shape/Rectangle.spec.tsx +0 -68
  391. package/test/shape/Rectangle.typed.spec.tsx +0 -24
  392. package/test/shape/Sector.spec.tsx +0 -76
  393. package/test/shape/Sector.typed.spec.tsx +0 -24
  394. package/test/shape/Symbols.spec.tsx +0 -43
  395. package/test/shape/Symbols.typed.spec.tsx +0 -24
  396. package/test/shape/Trapezoid.spec.tsx +0 -50
  397. package/test/shape/Trapezoid.typed.spec.tsx +0 -24
  398. package/test/shape/__snapshots__/Cross.spec.tsx.snap +0 -62
  399. package/test/shape/__snapshots__/Curve.spec.tsx.snap +0 -460
  400. package/test/shape/__snapshots__/Polygon.spec.tsx.snap +0 -58
  401. package/test/shape/__snapshots__/Rectangle.spec.tsx.snap +0 -117
  402. package/test/shape/__snapshots__/Sector.spec.tsx.snap +0 -71
  403. package/test/shape/__snapshots__/Trapezoid.spec.tsx.snap +0 -64
  404. package/test/state/chartDataSlice.spec.ts +0 -53
  405. package/test/state/externalEventsMiddleware.spec.ts +0 -178
  406. package/test/state/graphicalItemsSlice.spec.ts +0 -92
  407. package/test/state/hooks.spec.tsx +0 -68
  408. package/test/state/legendSlice.spec.ts +0 -44
  409. package/test/state/mouseEventsMiddleware.spec.ts +0 -75
  410. package/test/state/optionsSlice.spec.ts +0 -19
  411. package/test/state/reduxDevtoolsJsonStringifyReplacer.spec.ts +0 -25
  412. package/test/state/referenceElementsSlice.spec.ts +0 -84
  413. package/test/state/selectors/areaSelectors.spec.tsx +0 -77
  414. package/test/state/selectors/axisSelectors.spec.tsx +0 -1418
  415. package/test/state/selectors/barStackSelectors.spec.tsx +0 -752
  416. package/test/state/selectors/brushSelectors.spec.tsx +0 -30
  417. package/test/state/selectors/cartesianAxisSlice.spec.ts +0 -96
  418. package/test/state/selectors/combineNiceTicks.spec.ts +0 -207
  419. package/test/state/selectors/combiners/combineActiveTooltipIndex.spec.ts +0 -61
  420. package/test/state/selectors/combiners/combineAllBarPositions.spec.ts +0 -39
  421. package/test/state/selectors/combiners/combineConfiguredScale.spec.ts +0 -56
  422. package/test/state/selectors/combiners/combineDisplayedStackedData.spec.ts +0 -123
  423. package/test/state/selectors/combiners/combineRealScaleType.spec.ts +0 -80
  424. package/test/state/selectors/containerSelectors.spec.tsx +0 -168
  425. package/test/state/selectors/dataSelectors.spec.tsx +0 -136
  426. package/test/state/selectors/legendSelectors.spec.tsx +0 -113
  427. package/test/state/selectors/lineSelectors.spec.tsx +0 -60
  428. package/test/state/selectors/pieSelectors.spec.tsx +0 -72
  429. package/test/state/selectors/radarSelectors.spec.tsx +0 -496
  430. package/test/state/selectors/rootPropsSelectors.spec.tsx +0 -169
  431. package/test/state/selectors/scatterSelectors.spec.tsx +0 -47
  432. package/test/state/selectors/selectActiveTooltipIndex.spec.tsx +0 -234
  433. package/test/state/selectors/selectAllAxes.spec.tsx +0 -18
  434. package/test/state/selectors/selectAxisDomain.spec.tsx +0 -21
  435. package/test/state/selectors/selectAxisDomainIncludingNiceTicks.spec.tsx +0 -19
  436. package/test/state/selectors/selectAxisRangeWithReverse.spec.tsx +0 -22
  437. package/test/state/selectors/selectAxisScale.spec.tsx +0 -91
  438. package/test/state/selectors/selectBarRectangles.stackOffset.spec.tsx +0 -503
  439. package/test/state/selectors/selectBaseAxis.spec.tsx +0 -56
  440. package/test/state/selectors/selectCartesianItemsSettings.spec.tsx +0 -57
  441. package/test/state/selectors/selectChartOffset.spec.tsx +0 -26
  442. package/test/state/selectors/selectDisplayedData.spec.tsx +0 -282
  443. package/test/state/selectors/selectIsTooltipActive.spec.tsx +0 -231
  444. package/test/state/selectors/selectNumericalDomain.spec.tsx +0 -21
  445. package/test/state/selectors/selectRealScaleType.spec.tsx +0 -19
  446. package/test/state/selectors/selectStackGroups.spec.tsx +0 -322
  447. package/test/state/selectors/selectXAxisPosition.spec.tsx +0 -22
  448. package/test/state/selectors/selectYAxisPosition.spec.tsx +0 -22
  449. package/test/state/selectors/selectors.spec.tsx +0 -1613
  450. package/test/state/throttling.spec.ts +0 -200
  451. package/test/state/zIndexSlice.spec.ts +0 -85
  452. package/test/synchronisation/useChartSynchronisation.spec.tsx +0 -225
  453. package/test/util/BarUtils.spec.ts +0 -39
  454. package/test/util/CartesianUtils/CartesianUtils.spec.ts +0 -261
  455. package/test/util/CartesianUtils/rectWithPoints.spec.ts +0 -48
  456. package/test/util/ChartUtils/ChartUtils.spec.ts +0 -491
  457. package/test/util/ChartUtils/appendOffsetOfLegend.spec.ts +0 -136
  458. package/test/util/ChartUtils/appendOffsetOfLegend.spec.tsx +0 -133
  459. package/test/util/ChartUtils/getCateCoordinateOfLine.spec.ts +0 -83
  460. package/test/util/ChartUtils/getStackedData.spec.ts +0 -416
  461. package/test/util/ChartUtils/truncateByDomain.spec.ts +0 -70
  462. package/test/util/DataUtils.spec.ts +0 -385
  463. package/test/util/DomUtils.spec.tsx +0 -117
  464. package/test/util/FunnelUtils.spec.tsx +0 -70
  465. package/test/util/Global.spec.ts +0 -11
  466. package/test/util/LRUCache.spec.ts +0 -81
  467. package/test/util/LogUtils.spec.ts +0 -45
  468. package/test/util/PolarUtils.spec.ts +0 -66
  469. package/test/util/ReduceCssCalcPrototype.spec.ts +0 -141
  470. package/test/util/ShallowEqual.spec.ts +0 -102
  471. package/test/util/TickUtils.spec.ts +0 -29
  472. package/test/util/axisPropsAreEqual.spec.ts +0 -93
  473. package/test/util/createChartHelpers.spec.tsx +0 -210
  474. package/test/util/cursor/getCursorPoints.spec.ts +0 -136
  475. package/test/util/cursor/getCursorRectangle.spec.ts +0 -50
  476. package/test/util/cursor/getRadialCursorPoints.spec.ts +0 -36
  477. package/test/util/errorValue.spec.ts +0 -69
  478. package/test/util/getEveryNth.spec.ts +0 -39
  479. package/test/util/getRadiusAndStrokeWidthFromDot.spec.ts +0 -51
  480. package/test/util/getRelativeCoordinate.spec.ts +0 -250
  481. package/test/util/getSliced.spec.ts +0 -45
  482. package/test/util/isDomainSpecifiedByUser.spec.ts +0 -207
  483. package/test/util/isWellBehavedNumber.spec.ts +0 -54
  484. package/test/util/payload/getUniqPayload.spec.ts +0 -56
  485. package/test/util/propsAreEqual.spec.ts +0 -75
  486. package/test/util/round.spec.ts +0 -112
  487. package/test/util/scale/arithmetic.spec.ts +0 -61
  488. package/test/util/scale/createCategoricalInverse.spec.ts +0 -84
  489. package/test/util/scale/getNiceTickValues.spec.ts +0 -421
  490. package/test/util/scale/getTickValuesFixedDomain.spec.ts +0 -155
  491. package/test/util/svgPropertiesAndEvents.spec.tsx +0 -206
  492. package/test/util/svgPropertiesNoEvents.spec.tsx +0 -228
  493. package/test/util/tooltip/translate.spec.ts +0 -396
  494. package/test/util/useAnimationId.spec.tsx +0 -59
  495. package/test/util/useElementOffset.spec.tsx +0 -173
  496. package/test/util/usePrefersReducedMotion.spec.ts +0 -54
  497. package/test/util/useUniqueId.spec.ts +0 -99
  498. package/test/utils/diagnostics-allowlist.ts +0 -18
  499. package/test/utils/diagnostics.ts +0 -58
  500. package/test/zIndex/AllZIndexPortals.spec.tsx +0 -83
  501. package/test/zIndex/DefaultZIndexes.spec.ts +0 -80
  502. package/test/zIndex/DynamicZIndex.spec.tsx +0 -102
  503. package/test/zIndex/ZIndexLayer.portalOwner.spec.tsx +0 -125
  504. package/test/zIndex/componentZIndex.spec.tsx +0 -255
  505. package/test/zIndex/getZIndexFromUnknown.spec.ts +0 -51
  506. package/test/zIndex/multiChartZIndexIsolation.spec.tsx +0 -90
  507. package/test/zIndex/zIndexSelectors.spec.ts +0 -172
  508. package/tsconfig.json +0 -11
@@ -1,793 +0,0 @@
1
- // Ported from recharts 3.8.1 test/chart/PieChart.spec.tsx (commit 7a23854).
2
- //
3
- // Tier-A: geometry/value assertions are byte-identical to recharts. The render
4
- // helper is the Solid one; `flush()` after render because the Pie registers via
5
- // an effect and computes sectors from the store. Active-shape interactions use
6
- // `fireEvent.mouseEnter`/`mouseLeave` + `flush()` (recharts uses mouseOver/mouseOut).
7
- //
8
- // PERMANENT-N/A (omitted): render-count assertions (`toHaveBeenCalledTimes` tied to
9
- // React's render model); the `recharts-active-shape` default-class probe combined
10
- // with `.recharts-active-shape` click bubbling (chart-level onClick payload depends
11
- // on the unported PieChart-level mouse-state forwarding); reselect reference checks.
12
- import { describe, expect, it, test } from "vitest";
13
- import { flush } from "solid-js";
14
- import { Cell, Legend, Pie, PieChart, Sector, Tooltip } from "../../src";
15
- import type { PieSectorShapeProps } from "../../src/polar/Pie";
16
- import { useChartWidth, useChartHeight, useViewBox } from "../../src/context/chartLayoutContext";
17
- import { useClipPathId } from "../../src/container/ClipPathProvider";
18
- import { createSelectorTestCase } from "../helper/createSelectorTestCase";
19
- import {
20
- expectPieSectors,
21
- expectPieSectorAngles,
22
- selectPieSectors,
23
- } from "../helper/expectPieSectors";
24
- import { expectLastCalledWith } from "../helper/expectLastCalledWith";
25
- import { selectDisplayedData, selectPieLegend } from "../../src/state/selectors/pieSelectors";
26
- import { render, fireEvent } from "@solidjs/testing-library";
27
- import { PageData } from "../_data";
28
-
29
- const SECTOR_SELECTOR = ".recharts-pie-sector path.recharts-sector";
30
-
31
- function trim(s: string | null): string {
32
- return (s ?? "").replace(/\s+/g, " ").trim();
33
- }
34
-
35
- // inlined helper (reference: test/helper/expectLegendLabels.tsx)
36
- function expectLegendLabels(
37
- container: Element,
38
- expected: ReadonlyArray<{
39
- fill: string | undefined;
40
- stroke: string | undefined;
41
- textContent: string | null;
42
- }>,
43
- ): void {
44
- const items = Array.from(container.querySelectorAll(".recharts-legend-item"));
45
- const actual = items.map((item) => {
46
- const icon = item.querySelector(".recharts-surface path, .recharts-legend-icon");
47
- const text = item.querySelector(".recharts-legend-item-text");
48
- // The Solid legend icon renders stroke="none" where recharts omits it; treat
49
- // them as equivalent (visually identical) so the fill/text assertions match.
50
- const stroke = icon?.getAttribute("stroke");
51
- return {
52
- fill: icon?.getAttribute("fill") ?? undefined,
53
- stroke: stroke == null || stroke === "none" ? undefined : stroke,
54
- textContent: text?.textContent ?? null,
55
- };
56
- });
57
- expect(actual).toEqual(expected);
58
- }
59
-
60
- const data = [
61
- { name: "Group A", value: 400, v: 89 },
62
- { name: "Group B", value: 300, v: 100 },
63
- { name: "Group C", value: 200, v: 200 },
64
- { name: "Group D", value: 200, v: 20 },
65
- { name: "Group E", value: 278, v: 40 },
66
- { name: "Group F", value: 189, v: 60 },
67
- ];
68
-
69
- const pageDataSectorPaths = [
70
- "M 455,255 A 200,200,0, 0,0, 267.6184,55.3985 L 255,255 Z",
71
- "M 267.6184,55.3985 A 200,200,0, 0,0, 79.7896,158.5566 L 255,255 Z",
72
- "M 79.7896,158.5566 A 200,200,0, 0,0, 93.1078,372.4347 L 255,255 Z",
73
- "M 93.1078,372.4347 A 200,200,0, 0,0, 217.3458,451.4234 L 255,255 Z",
74
- "M 217.3458,451.4234 A 200,200,0, 0,0, 406.3627,385.7261 L 255,255 Z",
75
- "M 406.3627,385.7261 A 200,200,0, 0,0, 455,255.0003 L 255,255 Z",
76
- ];
77
-
78
- describe("<PieChart />", () => {
79
- it("renders sectors in a simple Pie with exact geometry", () => {
80
- const { container } = render(() => (
81
- <PieChart width={500} height={500}>
82
- <Pie
83
- isAnimationActive={false}
84
- cx={250}
85
- cy={250}
86
- innerRadius={0}
87
- outerRadius={200}
88
- data={PageData}
89
- dataKey="uv"
90
- />
91
- </PieChart>
92
- ));
93
- flush();
94
-
95
- const sectors = container.querySelectorAll(SECTOR_SELECTOR);
96
- expect(sectors).toHaveLength(PageData.length);
97
- expect([...sectors].map((s) => trim(s.getAttribute("d")))).toEqual(pageDataSectorPaths);
98
- });
99
-
100
- it("renders nothing when hide is set", () => {
101
- const { container } = render(() => (
102
- <PieChart width={500} height={500}>
103
- <Pie
104
- hide
105
- isAnimationActive={false}
106
- cx={250}
107
- cy={250}
108
- innerRadius={0}
109
- outerRadius={200}
110
- data={PageData}
111
- dataKey="uv"
112
- />
113
- </PieChart>
114
- ));
115
- flush();
116
-
117
- expect(container.querySelectorAll(SECTOR_SELECTOR)).toHaveLength(0);
118
- });
119
-
120
- it("renders a custom slice via the shape render prop (replacing the default sector)", () => {
121
- const { container } = render(() => (
122
- <PieChart width={500} height={500}>
123
- <Pie
124
- isAnimationActive={false}
125
- cx={250}
126
- cy={250}
127
- innerRadius={0}
128
- outerRadius={200}
129
- data={PageData}
130
- dataKey="uv"
131
- shape={(s) => <circle class="custom-slice" cx={s.cx} cy={s.cy} r={3} />}
132
- />
133
- </PieChart>
134
- ));
135
- flush();
136
-
137
- expect(container.querySelectorAll(SECTOR_SELECTOR)).toHaveLength(0);
138
- const customs = container.querySelectorAll(".recharts-pie-sector circle.custom-slice");
139
- expect(customs).toHaveLength(PageData.length);
140
- expect(customs[0]!.getAttribute("cx")).toBe("255");
141
- });
142
-
143
- test("Renders 1 sector in simple PieChart", () => {
144
- const { container } = render(() => (
145
- <PieChart width={800} height={400}>
146
- <Pie
147
- dataKey="value"
148
- isAnimationActive={false}
149
- data={[data[0]]}
150
- cx={200}
151
- cy={200}
152
- outerRadius={80}
153
- fill="#ff7300"
154
- label
155
- />
156
- </PieChart>
157
- ));
158
- flush();
159
-
160
- expectPieSectors(container, [{ d: "M 285,205 A 80,80,0, 1,0, 285,205.0014 L 205,205 Z" }]);
161
- });
162
-
163
- test("render 4 equal sectors in PieChart with 4 data points", () => {
164
- const crossData = [
165
- { name: "Group A", value: 100 },
166
- { name: "Group B", value: 100 },
167
- { name: "Group C", value: 100 },
168
- { name: "Group D", value: 100 },
169
- ];
170
- const { container } = render(() => (
171
- <PieChart width={800} height={400}>
172
- <Pie
173
- dataKey="value"
174
- isAnimationActive={false}
175
- data={crossData}
176
- cx={200}
177
- cy={200}
178
- outerRadius={80}
179
- fill="#ff7300"
180
- label
181
- />
182
- </PieChart>
183
- ));
184
- flush();
185
-
186
- expectPieSectorAngles(container, [
187
- { startAngle: 0, endAngle: 90 },
188
- { startAngle: 90, endAngle: 180 },
189
- { startAngle: 180, endAngle: 270 },
190
- { startAngle: 270, endAngle: 0 },
191
- ]);
192
- });
193
-
194
- test("minAngle does not shift segments when all are already above the threshold", () => {
195
- const { container } = render(() => (
196
- <PieChart width={800} height={400}>
197
- <Pie
198
- dataKey="value"
199
- isAnimationActive={false}
200
- data={[
201
- { name: "A", value: 300 },
202
- { name: "B", value: 30 },
203
- { name: "C", value: 20 },
204
- { name: "D", value: 10 },
205
- ]}
206
- cx={200}
207
- cy={200}
208
- outerRadius={80}
209
- fill="#ff7300"
210
- minAngle={9}
211
- />
212
- </PieChart>
213
- ));
214
- flush();
215
-
216
- expectPieSectorAngles(container, [
217
- { startAngle: 0, endAngle: 300 },
218
- { startAngle: 300, endAngle: 330 },
219
- { startAngle: 330, endAngle: 350 },
220
- { startAngle: 350, endAngle: 0 },
221
- ]);
222
- });
223
-
224
- test("Renders 6 sectors in simple PieChart", () => {
225
- const { container } = render(() => (
226
- <PieChart width={800} height={400}>
227
- <Pie
228
- dataKey="value"
229
- isAnimationActive={false}
230
- data={data}
231
- cx={200}
232
- cy={200}
233
- outerRadius={80}
234
- fill="#ff7300"
235
- label
236
- />
237
- </PieChart>
238
- ));
239
- flush();
240
-
241
- expectPieSectors(container, [
242
- { d: "M 285,205 A 80,80,0, 0,0, 202.3541,125.0438 L 205,205 Z" },
243
- { d: "M 202.3541,125.0438 A 80,80,0, 0,0, 129.4422,178.7128 L 205,205 Z" },
244
- { d: "M 129.4422,178.7128 A 80,80,0, 0,0, 133.5708,241.026 L 205,205 Z" },
245
- { d: "M 133.5708,241.026 A 80,80,0, 0,0, 181.2263,281.3859 L 205,205 Z" },
246
- { d: "M 181.2263,281.3859 A 80,80,0, 0,0, 263.1063,259.9878 L 205,205 Z" },
247
- { d: "M 263.1063,259.9878 A 80,80,0, 0,0, 285,205 L 205,205 Z" },
248
- ]);
249
- });
250
-
251
- describe("active shape interactions", () => {
252
- function assertActiveShapeInteractions(container: HTMLElement, selectors: string): void {
253
- const sectorNodes = container.querySelectorAll(".recharts-pie-sector");
254
- expect(sectorNodes.length).toBeGreaterThanOrEqual(2);
255
- const [sector1, sector2] = Array.from(sectorNodes);
256
-
257
- fireEvent.mouseEnter(sector1!);
258
- flush();
259
- expect(container.querySelectorAll(selectors)).toHaveLength(1);
260
-
261
- fireEvent.mouseEnter(sector2!);
262
- flush();
263
- expect(container.querySelectorAll(selectors)).toHaveLength(1);
264
-
265
- fireEvent.mouseLeave(sector2!);
266
- flush();
267
- expect(container.querySelectorAll(selectors)).toHaveLength(0);
268
- }
269
-
270
- test("render customized active sector when activeShape is a function", () => {
271
- const { container } = render(() => (
272
- <PieChart width={800} height={400}>
273
- <Pie
274
- dataKey="value"
275
- isAnimationActive={false}
276
- activeShape={(props: PieSectorShapeProps) => (
277
- <Sector {...props} fill="#ff7300" class="customized-active-shape" />
278
- )}
279
- data={data}
280
- cx={200}
281
- cy={200}
282
- outerRadius={80}
283
- fill="#ff7300"
284
- label
285
- />
286
- <Tooltip />
287
- </PieChart>
288
- ));
289
- flush();
290
-
291
- assertActiveShapeInteractions(container, ".recharts-active-shape");
292
- assertActiveShapeInteractions(container, ".customized-active-shape");
293
- });
294
-
295
- test("render customized active sector when activeShape is an object", () => {
296
- const { container } = render(() => (
297
- <PieChart width={800} height={400}>
298
- <Pie
299
- dataKey="value"
300
- isAnimationActive={false}
301
- activeShape={{ fill: "#ff7300", class: "customized-active-shape" }}
302
- data={data}
303
- cx={200}
304
- cy={200}
305
- outerRadius={80}
306
- fill="#ff7300"
307
- label
308
- />
309
- <Tooltip />
310
- </PieChart>
311
- ));
312
- flush();
313
-
314
- assertActiveShapeInteractions(container, ".recharts-active-shape");
315
- assertActiveShapeInteractions(container, ".customized-active-shape");
316
- });
317
-
318
- test("render customized active sector when activeShape is a truthy boolean", () => {
319
- const { container } = render(() => (
320
- <PieChart width={800} height={400}>
321
- <Pie
322
- dataKey="value"
323
- isAnimationActive={false}
324
- activeShape
325
- data={data}
326
- cx={200}
327
- cy={200}
328
- outerRadius={80}
329
- fill="#ff7300"
330
- label
331
- />
332
- <Tooltip />
333
- </PieChart>
334
- ));
335
- flush();
336
-
337
- assertActiveShapeInteractions(container, ".recharts-active-shape");
338
- });
339
- });
340
-
341
- test("Renders 6 sectors when adding Cell to each slice", () => {
342
- const { container } = render(() => (
343
- <PieChart width={800} height={400}>
344
- <Pie
345
- dataKey="value"
346
- isAnimationActive={false}
347
- cx={200}
348
- cy={200}
349
- outerRadius={80}
350
- fill="#ff7300"
351
- label
352
- >
353
- {data.map((entry, index) => {
354
- const cellProps: Record<string, unknown> = { ...entry, strokeWidth: index + 1 };
355
- return <Cell {...cellProps} />;
356
- })}
357
- </Pie>
358
- </PieChart>
359
- ));
360
- flush();
361
-
362
- expectPieSectors(container, [
363
- { d: "M 285,205 A 80,80,0, 0,0, 202.3541,125.0438 L 205,205 Z" },
364
- { d: "M 202.3541,125.0438 A 80,80,0, 0,0, 129.4422,178.7128 L 205,205 Z" },
365
- { d: "M 129.4422,178.7128 A 80,80,0, 0,0, 133.5708,241.026 L 205,205 Z" },
366
- { d: "M 133.5708,241.026 A 80,80,0, 0,0, 181.2263,281.3859 L 205,205 Z" },
367
- { d: "M 181.2263,281.3859 A 80,80,0, 0,0, 263.1063,259.9878 L 205,205 Z" },
368
- { d: "M 263.1063,259.9878 A 80,80,0, 0,0, 285,205 L 205,205 Z" },
369
- ]);
370
- });
371
-
372
- describe("when all values are zero", () => {
373
- const emptyData = [
374
- { name: "Group A", value: 0 },
375
- { name: "Group B", value: 0 },
376
- { name: "Group C", value: 0 },
377
- { name: "Group D", value: 0 },
378
- { name: "Group E", value: 0 },
379
- { name: "Group F", value: 0 },
380
- ];
381
- const renderTestCase = createSelectorTestCase((props) => (
382
- <PieChart width={800} height={400}>
383
- <Pie
384
- dataKey="value"
385
- data={emptyData}
386
- isAnimationActive={false}
387
- cx={200}
388
- cy={200}
389
- outerRadius={80}
390
- id="empty-pie"
391
- />
392
- <Legend />
393
- {props.children}
394
- </PieChart>
395
- ));
396
-
397
- test("selectDisplayedData", () => {
398
- const { spy } = renderTestCase((state) => selectDisplayedData(state, "empty-pie", undefined));
399
- expectLastCalledWith(spy, emptyData);
400
- });
401
-
402
- test("selectPieLegend", () => {
403
- const { spy } = renderTestCase((state) => selectPieLegend(state, "empty-pie", undefined));
404
- expectLastCalledWith(spy, [
405
- {
406
- color: "#808080",
407
- dataKey: "value",
408
- payload: { name: "Group A", value: 0 },
409
- type: "rect",
410
- value: "Group A",
411
- },
412
- {
413
- color: "#808080",
414
- dataKey: "value",
415
- payload: { name: "Group B", value: 0 },
416
- type: "rect",
417
- value: "Group B",
418
- },
419
- {
420
- color: "#808080",
421
- dataKey: "value",
422
- payload: { name: "Group C", value: 0 },
423
- type: "rect",
424
- value: "Group C",
425
- },
426
- {
427
- color: "#808080",
428
- dataKey: "value",
429
- payload: { name: "Group D", value: 0 },
430
- type: "rect",
431
- value: "Group D",
432
- },
433
- {
434
- color: "#808080",
435
- dataKey: "value",
436
- payload: { name: "Group E", value: 0 },
437
- type: "rect",
438
- value: "Group E",
439
- },
440
- {
441
- color: "#808080",
442
- dataKey: "value",
443
- payload: { name: "Group F", value: 0 },
444
- type: "rect",
445
- value: "Group F",
446
- },
447
- ]);
448
- });
449
-
450
- test("Renders legend when all the values are 0", () => {
451
- const { container } = renderTestCase();
452
- expectLegendLabels(container, [
453
- { fill: "#808080", stroke: undefined, textContent: "Group A" },
454
- { fill: "#808080", stroke: undefined, textContent: "Group B" },
455
- { fill: "#808080", stroke: undefined, textContent: "Group C" },
456
- { fill: "#808080", stroke: undefined, textContent: "Group D" },
457
- { fill: "#808080", stroke: undefined, textContent: "Group E" },
458
- { fill: "#808080", stroke: undefined, textContent: "Group F" },
459
- ]);
460
- });
461
- });
462
-
463
- test("Don't render any sectors when width or height is smaller than 0", () => {
464
- const { container } = render(() => (
465
- <PieChart width={-10} height={400}>
466
- <Pie
467
- dataKey="value"
468
- isAnimationActive={false}
469
- data={data}
470
- cx={200}
471
- cy={200}
472
- outerRadius={80}
473
- fill="#ff7300"
474
- label
475
- />
476
- </PieChart>
477
- ));
478
- flush();
479
-
480
- expectPieSectors(container, []);
481
- });
482
-
483
- describe("with Legend", () => {
484
- const renderTestCase = createSelectorTestCase((props) => (
485
- <PieChart width={800} height={400}>
486
- <Pie
487
- dataKey="value"
488
- isAnimationActive={false}
489
- data={data}
490
- cx={200}
491
- cy={200}
492
- outerRadius={80}
493
- fill="#ff7300"
494
- label
495
- id="pie1"
496
- />
497
- <Legend />
498
- {props.children}
499
- </PieChart>
500
- ));
501
-
502
- test("selectDisplayedData", () => {
503
- const { spy } = renderTestCase((state) => selectDisplayedData(state, "pie1", undefined));
504
- expectLastCalledWith(spy, data);
505
- });
506
-
507
- test("selectPieLegend", () => {
508
- const { spy } = renderTestCase((state) => selectPieLegend(state, "pie1", undefined));
509
- expectLastCalledWith(spy, [
510
- {
511
- color: "#ff7300",
512
- dataKey: "value",
513
- payload: { name: "Group A", v: 89, value: 400 },
514
- type: "rect",
515
- value: "Group A",
516
- },
517
- {
518
- color: "#ff7300",
519
- dataKey: "value",
520
- payload: { name: "Group B", v: 100, value: 300 },
521
- type: "rect",
522
- value: "Group B",
523
- },
524
- {
525
- color: "#ff7300",
526
- dataKey: "value",
527
- payload: { name: "Group C", v: 200, value: 200 },
528
- type: "rect",
529
- value: "Group C",
530
- },
531
- {
532
- color: "#ff7300",
533
- dataKey: "value",
534
- payload: { name: "Group D", v: 20, value: 200 },
535
- type: "rect",
536
- value: "Group D",
537
- },
538
- {
539
- color: "#ff7300",
540
- dataKey: "value",
541
- payload: { name: "Group E", v: 40, value: 278 },
542
- type: "rect",
543
- value: "Group E",
544
- },
545
- {
546
- color: "#ff7300",
547
- dataKey: "value",
548
- payload: { name: "Group F", v: 60, value: 189 },
549
- type: "rect",
550
- value: "Group F",
551
- },
552
- ]);
553
- });
554
-
555
- describe("issue #7056 - dataKey in Legend payload for PieChart", () => {
556
- const renderIssueTestCase = createSelectorTestCase((props) => (
557
- <PieChart width={400} height={400}>
558
- <Pie
559
- id="issue-pie"
560
- dataKey="visits"
561
- isAnimationActive={false}
562
- data={[
563
- { browser: "chrome", visits: 2764 },
564
- { browser: "safari", visits: 4048 },
565
- ]}
566
- cx={200}
567
- cy={200}
568
- outerRadius={80}
569
- fill="#ff7300"
570
- />
571
- <Legend />
572
- {props.children}
573
- </PieChart>
574
- ));
575
-
576
- test("Legend payload should contain dataKey", () => {
577
- const { spy } = renderIssueTestCase((state) =>
578
- selectPieLegend(state, "issue-pie", undefined),
579
- );
580
- expectLastCalledWith(spy, [
581
- expect.objectContaining({ dataKey: "visits" }),
582
- expect.objectContaining({ dataKey: "visits" }),
583
- ]);
584
- });
585
-
586
- test("Legend payload should contain dataKey even when dataKey is a function", () => {
587
- const dataKeyFn = (d: { browser: string; visits: number }): number => d.visits;
588
- const renderFnTestCase = createSelectorTestCase((props) => (
589
- <PieChart width={400} height={400}>
590
- <Pie
591
- id="fn-pie"
592
- dataKey={dataKeyFn}
593
- isAnimationActive={false}
594
- data={[
595
- { browser: "chrome", visits: 2764 },
596
- { browser: "safari", visits: 4048 },
597
- ]}
598
- cx={200}
599
- cy={200}
600
- outerRadius={80}
601
- fill="#ff7300"
602
- />
603
- <Legend />
604
- {props.children}
605
- </PieChart>
606
- ));
607
-
608
- const { spy } = renderFnTestCase((state) => selectPieLegend(state, "fn-pie", undefined));
609
- const payload = spy.mock.lastCall?.[0];
610
- expect(payload).toBeDefined();
611
- payload?.forEach((entry: { dataKey: unknown }) => {
612
- expect(entry.dataKey).toBe(dataKeyFn);
613
- expect(typeof entry.dataKey).toBe("function");
614
- });
615
- });
616
- });
617
-
618
- test("Renders 6 legend items", () => {
619
- const { container } = renderTestCase();
620
- expectLegendLabels(container, [
621
- { fill: "#ff7300", stroke: undefined, textContent: "Group A" },
622
- { fill: "#ff7300", stroke: undefined, textContent: "Group B" },
623
- { fill: "#ff7300", stroke: undefined, textContent: "Group C" },
624
- { fill: "#ff7300", stroke: undefined, textContent: "Group D" },
625
- { fill: "#ff7300", stroke: undefined, textContent: "Group E" },
626
- { fill: "#ff7300", stroke: undefined, textContent: "Group F" },
627
- ]);
628
- });
629
- });
630
-
631
- test("Renders tooltip when adding a Tooltip element", () => {
632
- const { container } = render(() => (
633
- <PieChart width={800} height={400}>
634
- <Pie
635
- isAnimationActive={false}
636
- dataKey="value"
637
- data={data}
638
- cx={200}
639
- cy={200}
640
- outerRadius={80}
641
- fill="#ff7300"
642
- label
643
- />
644
- <Tooltip />
645
- </PieChart>
646
- ));
647
- flush();
648
-
649
- expect(container.querySelectorAll(".recharts-tooltip-wrapper")).toHaveLength(1);
650
- expect(container.querySelectorAll(".recharts-default-tooltip")).toHaveLength(1);
651
- });
652
-
653
- describe("PieChart layout context", () => {
654
- const renderTestCase = createSelectorTestCase((props) => (
655
- <PieChart width={100} height={50} barSize={20}>
656
- {props.children}
657
- </PieChart>
658
- ));
659
-
660
- it("should provide viewBox", () => {
661
- const { spy } = renderTestCase(useViewBox);
662
- expectLastCalledWith(spy, { height: 40, width: 90, x: 5, y: 5 });
663
- });
664
-
665
- it("should provide clipPathId", () => {
666
- const { spy } = renderTestCase(useClipPathId);
667
- expectLastCalledWith(spy, expect.stringMatching(/recharts\d+-clip/));
668
- });
669
-
670
- it("should provide chart width", () => {
671
- const { spy } = renderTestCase(useChartWidth);
672
- expectLastCalledWith(spy, 100);
673
- });
674
-
675
- it("should provide chart height", () => {
676
- const { spy } = renderTestCase(useChartHeight);
677
- expectLastCalledWith(spy, 50);
678
- });
679
- });
680
-
681
- test("classNames can be given to label and labelLine", () => {
682
- const { container } = render(() => (
683
- <PieChart width={800} height={400}>
684
- <Pie
685
- dataKey="value"
686
- isAnimationActive={false}
687
- data={data}
688
- cx={200}
689
- cy={200}
690
- outerRadius={80}
691
- fill="#ff7300"
692
- label={{ class: "label-custom-className" }}
693
- labelLine={{ class: "label-line-custom-className" }}
694
- />
695
- <Tooltip />
696
- </PieChart>
697
- ));
698
- flush();
699
-
700
- expect(container.querySelectorAll(".label-custom-className")).toHaveLength(6);
701
- expect(container.querySelectorAll(".label-line-custom-className")).toHaveLength(6);
702
- });
703
-
704
- describe("PieChart sector radius rendering", () => {
705
- const assertSectorRadius = (element: Element, radius: number): void => {
706
- const dAttribute = element.getAttribute("d");
707
- expect(dAttribute).toMatch(new RegExp(`A ${radius},${radius}`));
708
- };
709
-
710
- it("renders sectors with a constant radius", () => {
711
- const outerRadius = 80;
712
- const { container } = render(() => (
713
- <PieChart width={800} height={400}>
714
- <Pie
715
- dataKey="value"
716
- isAnimationActive={false}
717
- data={[
718
- { name: "Group A", value: 400 },
719
- { name: "Group B", value: 300 },
720
- ]}
721
- cx={200}
722
- cy={200}
723
- outerRadius={outerRadius}
724
- fill="#ff7300"
725
- />
726
- </PieChart>
727
- ));
728
- flush();
729
-
730
- const elementA = container.querySelector('path[name="Group A"]');
731
- const elementB = container.querySelector('path[name="Group B"]');
732
- expect(elementA).not.toBeNull();
733
- expect(elementB).not.toBeNull();
734
- assertSectorRadius(elementA!, outerRadius);
735
- assertSectorRadius(elementB!, outerRadius);
736
- });
737
-
738
- it("renders sectors with radius based on outerRadius function", () => {
739
- const { container } = render(() => (
740
- <PieChart width={800} height={400}>
741
- <Pie
742
- dataKey="value"
743
- isAnimationActive={false}
744
- data={[
745
- { name: "Group A", value: 400 },
746
- { name: "Group B", value: 300 },
747
- ]}
748
- cx={200}
749
- cy={200}
750
- outerRadius={(element: unknown) =>
751
- (typeof element === "object" && element != null && "value" in element
752
- ? Number((element as Record<string, unknown>).value)
753
- : 0) / 10
754
- }
755
- fill="#ff7300"
756
- />
757
- </PieChart>
758
- ));
759
- flush();
760
-
761
- const elementA = container.querySelector('path[name="Group A"]');
762
- const elementB = container.querySelector('path[name="Group B"]');
763
- expect(elementA).not.toBeNull();
764
- expect(elementB).not.toBeNull();
765
- assertSectorRadius(elementA!, 40);
766
- assertSectorRadius(elementB!, 30);
767
- });
768
- });
769
-
770
- describe("without dataKey", () => {
771
- const renderTestCase = createSelectorTestCase((props) => (
772
- <PieChart width={100} height={100}>
773
- <Pie
774
- data={[
775
- { name: "A", value: 100 },
776
- { name: "B", value: 200 },
777
- ]}
778
- cx={50}
779
- cy={50}
780
- outerRadius={40}
781
- isAnimationActive={false}
782
- />
783
- {props.children}
784
- </PieChart>
785
- ));
786
-
787
- it("should default to dataKey = value", () => {
788
- const { container } = renderTestCase();
789
- flush();
790
- expect(selectPieSectors(container)).toHaveLength(2);
791
- });
792
- });
793
- });