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,53 +0,0 @@
1
- // Proves stacked Bar RENDERING (the domain math was already done): two Bars
2
- // sharing a stackId draw stacked rectangles — series 2 sits on top of series 1
3
- // (series-2 bottom == series-1 top). `isAnimationActive={false}` so bars are at
4
- // their final geometry (jsdom resolves "auto" to active). `flush()` because bars
5
- // register via effects and rects compute from the store.
6
- import { describe, expect, it } from "vitest";
7
- import { flush } from "solid-js";
8
- import { render } from "@solidjs/testing-library";
9
- import { BarChart, Bar } from "../../src";
10
-
11
- const data = [
12
- { name: "A", uv: 100, pv: 200 },
13
- { name: "B", uv: 150, pv: 120 },
14
- ];
15
-
16
- function rectsOf(barLayer: Element): Array<{ y: number; height: number }> {
17
- return [...barLayer.querySelectorAll(".recharts-bar-rectangle path.recharts-rectangle")].map(
18
- (r) => ({
19
- y: Number(r.getAttribute("y")),
20
- height: Number(r.getAttribute("height")),
21
- }),
22
- );
23
- }
24
-
25
- describe("stacked <Bar /> rendering", () => {
26
- it("stacks series 2 on top of series 1 (shared stackId)", () => {
27
- const { container } = render(() => (
28
- <BarChart
29
- width={400}
30
- height={400}
31
- data={data}
32
- margin={{ top: 20, right: 20, bottom: 20, left: 20 }}
33
- >
34
- <Bar dataKey="uv" stackId="a" fill="#8884d8" isAnimationActive={false} />
35
- <Bar dataKey="pv" stackId="a" fill="#82ca9d" isAnimationActive={false} />
36
- </BarChart>
37
- ));
38
- flush();
39
-
40
- const bars = container.querySelectorAll(".recharts-bar");
41
- expect(bars).toHaveLength(2);
42
- const series1 = rectsOf(bars[0]!);
43
- const series2 = rectsOf(bars[1]!);
44
- expect(series1).toHaveLength(data.length);
45
- expect(series2).toHaveLength(data.length);
46
-
47
- // For each category, series-2's bottom edge meets series-1's top edge.
48
- for (let i = 0; i < data.length; i++) {
49
- const bottomOfSeries2 = series2[i]!.y + series2[i]!.height;
50
- expect(bottomOfSeries2).toBeCloseTo(series1[i]!.y, 4);
51
- }
52
- });
53
- });
@@ -1,237 +0,0 @@
1
- // Ported from recharts 3.8.1 test/cartesian/Bar.truncateByDomain.spec.tsx (commit 7a23854).
2
- import { describe, expect, it, test } from "vitest";
3
- import { createSelectorTestCase } from "../helper/createSelectorTestCase";
4
- import { Bar, Area, CartesianGrid, ComposedChart, XAxis, YAxis, Legend } from "../../src";
5
- import { expectBars } from "../helper/expectBars";
6
- import { selectBarRectangles } from "../../src/state/selectors/barSelectors";
7
- import { selectChartDataWithIndexesIfNotInPanoramaPosition4 } from "../../src/state/selectors/dataSelectors";
8
- import {
9
- selectDisplayedStackedData,
10
- selectStackGroups,
11
- } from "../../src/state/selectors/axisSelectors";
12
- import { expectStackedData } from "../helper/expectStackGroups";
13
-
14
- const data = [
15
- {
16
- date: "2025-06-30T17:00:00.000Z",
17
- day: 1,
18
- wins: 0,
19
- losses: 0,
20
- },
21
- {
22
- date: "2025-07-31T17:00:00.000Z",
23
- day: 1,
24
- wins: 3,
25
- losses: -5,
26
- kd: 9.764204545454545,
27
- },
28
- ];
29
-
30
- describe("Bar stacked with truncateByDomain", () => {
31
- const renderTestCase = createSelectorTestCase((props) => (
32
- <ComposedChart
33
- width={800}
34
- height={400}
35
- data={data}
36
- stackOffset="sign"
37
- margin={{
38
- top: 5,
39
- right: 0,
40
- left: -20,
41
- bottom: 5,
42
- }}
43
- >
44
- <CartesianGrid stroke="#ffffff" strokeOpacity="0.2" />
45
- <XAxis
46
- dataKey="day"
47
- strokeOpacity="0"
48
- tick={{ fill: "#ffffff", fillOpacity: "0.6" } as never}
49
- tickLine={false}
50
- />
51
- <YAxis
52
- strokeOpacity="0"
53
- tick={{ fill: "#ffffff", fillOpacity: "0.6" } as never}
54
- tickLine={false}
55
- />
56
- <Area
57
- name="Av"
58
- dataKey="kd"
59
- fill="url(#fillKD)"
60
- type="monotoneX"
61
- stroke="gold"
62
- strokeWidth={2}
63
- dot={false}
64
- connectNulls
65
- pointerEvents="none"
66
- />
67
- <Bar
68
- id="bar-wins"
69
- name="Wi"
70
- dataKey="wins"
71
- fill="#ffffff"
72
- opacity={0.8}
73
- stackId="date"
74
- cursor="pointer"
75
- isAnimationActive={false}
76
- />
77
- <Bar
78
- id="bar-losses"
79
- name="Lo"
80
- dataKey="losses"
81
- fill="red"
82
- opacity={0.8}
83
- stackId="date"
84
- cursor="pointer"
85
- isAnimationActive={false}
86
- />
87
- <Legend verticalAlign="bottom" wrapperStyle={{ left: 0, width: "100%" }} />
88
- {props.children}
89
- </ComposedChart>
90
- ));
91
-
92
- describe("wins", () => {
93
- test("selectBarRectangles", () => {
94
- const { spy } = renderTestCase((state) =>
95
- selectBarRectangles(state, "bar-wins", false, undefined),
96
- );
97
- expect(spy).toHaveBeenLastCalledWith([
98
- {
99
- background: {
100
- height: 360,
101
- width: 304,
102
- x: 458,
103
- y: 5,
104
- },
105
- date: "2025-07-31T17:00:00.000Z",
106
- day: 1,
107
- height: 54,
108
- kd: 9.764204545454545,
109
- losses: -5,
110
- originalDataIndex: 1,
111
- payload: {
112
- date: "2025-07-31T17:00:00.000Z",
113
- day: 1,
114
- kd: 9.764204545454545,
115
- losses: -5,
116
- wins: 3,
117
- },
118
- stackedBarStart: 275,
119
- tooltipPosition: {
120
- x: 610,
121
- y: 248,
122
- },
123
- value: [0, 3],
124
- width: 304,
125
- wins: 3,
126
- x: 458,
127
- y: 221,
128
- parentViewBox: {
129
- height: 400,
130
- width: 800,
131
- x: 0,
132
- y: 0,
133
- },
134
- },
135
- ]);
136
- });
137
-
138
- test("selectChartDataWithIndexesIfNotInPanorama", () => {
139
- const { spy } = renderTestCase((state) =>
140
- selectChartDataWithIndexesIfNotInPanoramaPosition4(state, 0, 0, false),
141
- );
142
- expect(spy).toHaveBeenLastCalledWith({
143
- chartData: data,
144
- computedData: undefined,
145
- dataEndIndex: 1,
146
- dataStartIndex: 0,
147
- });
148
- });
149
-
150
- test("selectDisplayedStackedData", () => {
151
- const { spy } = renderTestCase((state) =>
152
- selectDisplayedStackedData(state, "yAxis", 0, false),
153
- );
154
- expect(spy).toHaveBeenLastCalledWith([
155
- {
156
- "bar-losses": 0,
157
- "bar-wins": 0,
158
- },
159
- {
160
- "bar-losses": -5,
161
- "bar-wins": 3,
162
- },
163
- ]);
164
- });
165
-
166
- test("selectStackGroups", () => {
167
- const { spy } = renderTestCase((state) => selectStackGroups(state, "yAxis", 0, false));
168
- const stackGroups = spy.mock.lastCall?.[0] as ReturnType<typeof selectStackGroups>;
169
- expect(stackGroups?.date?.graphicalItems).toEqual([
170
- {
171
- barSize: undefined,
172
- data: undefined,
173
- dataKey: "wins",
174
- hasCustomShape: false,
175
- hide: false,
176
- id: "bar-wins",
177
- isPanorama: false,
178
- maxBarSize: undefined,
179
- minPointSize: 0,
180
- stackId: "date",
181
- type: "bar",
182
- xAxisId: 0,
183
- yAxisId: 0,
184
- zAxisId: 0,
185
- },
186
- {
187
- barSize: undefined,
188
- data: undefined,
189
- dataKey: "losses",
190
- hasCustomShape: false,
191
- hide: false,
192
- id: "bar-losses",
193
- isPanorama: false,
194
- maxBarSize: undefined,
195
- minPointSize: 0,
196
- stackId: "date",
197
- type: "bar",
198
- xAxisId: 0,
199
- yAxisId: 0,
200
- zAxisId: 0,
201
- },
202
- ]);
203
- expectStackedData((stackGroups?.date?.stackedData ?? []) as never, [
204
- [
205
- [0, 0],
206
- [0, 3],
207
- ],
208
- [
209
- [0, 0],
210
- [0, -5],
211
- ],
212
- ]);
213
- });
214
- });
215
-
216
- it("should render bars", () => {
217
- const { container } = renderTestCase();
218
- expectBars(container, [
219
- {
220
- d: "M 458,221 h 304 v 54 h -304 Z",
221
- height: "54",
222
- radius: "0",
223
- width: "304",
224
- x: "458",
225
- y: "221",
226
- },
227
- {
228
- d: "M 458,365 h 304 v -90 h -304 Z",
229
- height: "-90",
230
- radius: "0",
231
- width: "304",
232
- x: "458",
233
- y: "365",
234
- },
235
- ]);
236
- });
237
- });
@@ -1,336 +0,0 @@
1
- // Ported from recharts 3.8.1 test/cartesian/Bar.zeroDimensionFiltering.spec.tsx (commit 7a23854).
2
- import { describe, expect, it } from "vitest";
3
- import { flush } from "solid-js";
4
- import { Bar, BarChart, BarStack, XAxis, YAxis } from "../../src";
5
- import { createSelectorTestCase } from "../helper/createSelectorTestCase";
6
- import { render } from "@solidjs/testing-library";
7
- import { selectBarRectangles } from "../../src/state/selectors/barSelectors";
8
- import { getAllBars } from "../helper/expectBars";
9
-
10
- function generateSparseStackedData(totalCategories: number, nonZeroCount: number) {
11
- const data: Array<{ category: string; stackA: number; stackB: number; stackC: number }> = [];
12
- const nonZeroIndices = new Set<number>();
13
-
14
- while (nonZeroIndices.size < nonZeroCount) {
15
- nonZeroIndices.add(Math.floor(Math.random() * totalCategories));
16
- }
17
-
18
- for (let i = 0; i < totalCategories; i++) {
19
- if (nonZeroIndices.has(i)) {
20
- data.push({
21
- category: `cat-${i}`,
22
- stackA: Math.floor(Math.random() * 100) + 10,
23
- stackB: Math.floor(Math.random() * 100) + 10,
24
- stackC: Math.floor(Math.random() * 100) + 10,
25
- });
26
- } else {
27
- data.push({
28
- category: `cat-${i}`,
29
- stackA: 0,
30
- stackB: 0,
31
- stackC: 0,
32
- });
33
- }
34
- }
35
-
36
- return data;
37
- }
38
-
39
- describe("Bar zero-dimension filtering", () => {
40
- it("should filter zero-dimension rectangles inside BarStack and preserve originalDataIndex", () => {
41
- const data = [
42
- { category: "A", stackA: -100, stackB: 60, stackC: 40 },
43
- { category: "B", stackA: 80, stackB: -30, stackC: 20 },
44
- ];
45
-
46
- const renderTestCase = createSelectorTestCase((props) => (
47
- <BarChart width={300} height={200} data={data} stackOffset="positive">
48
- <XAxis dataKey="category" />
49
- <YAxis />
50
- <BarStack>
51
- <Bar id="bar-a" dataKey="stackA" fill="#8884d8" isAnimationActive={false} />
52
- <Bar id="bar-b" dataKey="stackB" fill="#82ca9d" isAnimationActive={false} />
53
- <Bar id="bar-c" dataKey="stackC" fill="#ffc658" isAnimationActive={false} />
54
- {props.children}
55
- </BarStack>
56
- </BarChart>
57
- ));
58
-
59
- const { spy } = renderTestCase((state) =>
60
- selectBarRectangles(state, "bar-a", false, undefined),
61
- );
62
- const rectangles = spy.mock.lastCall?.[0] ?? [];
63
-
64
- expect(rectangles.length).toBe(1);
65
- expect(rectangles[0]).toEqual(
66
- expect.objectContaining({
67
- originalDataIndex: 1,
68
- }),
69
- );
70
- expect(
71
- rectangles.some(
72
- (rect: { width: number; height: number }) => rect.width === 0 || rect.height === 0,
73
- ),
74
- ).toBe(false);
75
- });
76
-
77
- it("should keep BarStack clip-path indices aligned after filtering sparse rectangles", () => {
78
- const data = [
79
- { category: "A", stackA: 0 },
80
- { category: "B", stackA: 12 },
81
- ];
82
-
83
- const { container } = render(() => (
84
- <BarChart width={300} height={200} data={data}>
85
- <XAxis dataKey="category" />
86
- <YAxis />
87
- <BarStack stackId="sparse-stack" radius={8}>
88
- <Bar dataKey="stackA" fill="#8884d8" isAnimationActive={false} />
89
- </BarStack>
90
- </BarChart>
91
- ));
92
- flush();
93
-
94
- const clippedBarLayers = container.querySelectorAll(".recharts-bar-rectangle[clip-path]");
95
- expect(clippedBarLayers).toHaveLength(1);
96
- expect(clippedBarLayers[0]!.getAttribute("clip-path")).toBe(
97
- "url(#recharts-bar-stack-clip-path-sparse-stack-1)",
98
- );
99
-
100
- expect(
101
- container.querySelector("clipPath#recharts-bar-stack-clip-path-sparse-stack-1"),
102
- ).not.toBeNull();
103
- expect(
104
- container.querySelector("clipPath#recharts-bar-stack-clip-path-sparse-stack-0"),
105
- ).toBeNull();
106
- });
107
-
108
- it("should filter out zero-dimension rectangles from selectBarRectangles", () => {
109
- const totalCategories = 100;
110
- const nonZeroCategories = 10;
111
- const data = generateSparseStackedData(totalCategories, nonZeroCategories);
112
-
113
- const renderTestCase = createSelectorTestCase((props) => (
114
- <BarChart width={800} height={400} data={data}>
115
- <XAxis dataKey="category" />
116
- <YAxis />
117
- <Bar id="bar-a" dataKey="stackA" stackId="stack" fill="#8884d8" isAnimationActive={false} />
118
- <Bar id="bar-b" dataKey="stackB" stackId="stack" fill="#82ca9d" isAnimationActive={false} />
119
- <Bar id="bar-c" dataKey="stackC" stackId="stack" fill="#ffc658" isAnimationActive={false} />
120
- {props.children}
121
- </BarChart>
122
- ));
123
-
124
- const { spy } = renderTestCase((state) =>
125
- selectBarRectangles(state, "bar-a", false, undefined),
126
- );
127
- const rectangles = spy.mock.lastCall?.[0] ?? [];
128
-
129
- expect(rectangles.length).toBeLessThanOrEqual(nonZeroCategories);
130
-
131
- rectangles.forEach((rect: { width: number; height: number }) => {
132
- expect(rect.width).not.toBe(0);
133
- expect(rect.height).not.toBe(0);
134
- });
135
- });
136
-
137
- it("should render only non-zero rectangles as DOM elements", () => {
138
- const totalCategories = 50;
139
- const nonZeroCategories = 5;
140
- const data = generateSparseStackedData(totalCategories, nonZeroCategories);
141
-
142
- const { container } = render(() => (
143
- <BarChart width={800} height={400} data={data}>
144
- <XAxis dataKey="category" />
145
- <YAxis />
146
- <Bar dataKey="stackA" stackId="stack" fill="#8884d8" isAnimationActive={false} />
147
- </BarChart>
148
- ));
149
- flush();
150
-
151
- const bars = getAllBars(container);
152
-
153
- expect(bars.length).toBeLessThanOrEqual(nonZeroCategories);
154
- });
155
-
156
- it("should reduce component tree size proportionally to sparsity", { timeout: 30_000 }, () => {
157
- const scenarios = [
158
- { totalCategories: 100, nonZeroCategories: 10 },
159
- { totalCategories: 500, nonZeroCategories: 25 },
160
- { totalCategories: 1000, nonZeroCategories: 50 },
161
- ];
162
-
163
- scenarios.forEach(({ totalCategories, nonZeroCategories }) => {
164
- const data = generateSparseStackedData(totalCategories, nonZeroCategories);
165
-
166
- const { container, unmount } = render(() => (
167
- <BarChart width={800} height={400} data={data}>
168
- <XAxis dataKey="category" />
169
- <YAxis />
170
- <Bar dataKey="stackA" stackId="stack" fill="#8884d8" isAnimationActive={false} />
171
- <Bar dataKey="stackB" stackId="stack" fill="#82ca9d" isAnimationActive={false} />
172
- <Bar dataKey="stackC" stackId="stack" fill="#ffc658" isAnimationActive={false} />
173
- </BarChart>
174
- ));
175
- flush();
176
-
177
- const actualBars = getAllBars(container).length;
178
- const potentialBars = totalCategories * 3;
179
- const reductionPercent = Math.round((1 - actualBars / potentialBars) * 100);
180
-
181
- expect(actualBars).toBeLessThan(potentialBars);
182
- expect(reductionPercent).toBeGreaterThanOrEqual(90);
183
-
184
- unmount();
185
- });
186
- });
187
-
188
- it("should reduce rectangle count at selector level", () => {
189
- const totalCategories = 200;
190
- const nonZeroCategories = 20;
191
- const numberOfStackedBars = 3;
192
- const data = generateSparseStackedData(totalCategories, nonZeroCategories);
193
-
194
- const renderTestCase = createSelectorTestCase((props) => (
195
- <BarChart width={800} height={400} data={data}>
196
- <XAxis dataKey="category" />
197
- <YAxis />
198
- <Bar id="bar-a" dataKey="stackA" stackId="stack" fill="#8884d8" isAnimationActive={false} />
199
- <Bar id="bar-b" dataKey="stackB" stackId="stack" fill="#82ca9d" isAnimationActive={false} />
200
- <Bar id="bar-c" dataKey="stackC" stackId="stack" fill="#ffc658" isAnimationActive={false} />
201
- {props.children}
202
- </BarChart>
203
- ));
204
-
205
- const { spy, unmount } = renderTestCase((state) => ({
206
- barA: selectBarRectangles(state, "bar-a", false, undefined),
207
- barB: selectBarRectangles(state, "bar-b", false, undefined),
208
- barC: selectBarRectangles(state, "bar-c", false, undefined),
209
- }));
210
-
211
- const counts = spy.mock.lastCall?.[0] as
212
- | { barA: ReadonlyArray<unknown>; barB: ReadonlyArray<unknown>; barC: ReadonlyArray<unknown> }
213
- | undefined;
214
- const actualRectangles =
215
- (counts?.barA.length ?? 0) + (counts?.barB.length ?? 0) + (counts?.barC.length ?? 0);
216
-
217
- const potentialRectangles = totalCategories * numberOfStackedBars;
218
- const percentSaved = Math.round(
219
- ((potentialRectangles - actualRectangles) / potentialRectangles) * 100,
220
- );
221
-
222
- expect(percentSaved).toBeGreaterThan(80);
223
- expect(actualRectangles).toBeLessThanOrEqual(nonZeroCategories * numberOfStackedBars);
224
-
225
- unmount();
226
- });
227
-
228
- it("should handle sparse dashboard data efficiently", { timeout: 30_000 }, () => {
229
- const months = 36;
230
- const metrics = 50;
231
- const sparsity = 0.85;
232
-
233
- const data: Array<Record<string, number | string>> = [];
234
- for (let month = 0; month < months; month++) {
235
- const entry: Record<string, number | string> = { month: `Month ${month + 1}` };
236
- for (let metric = 0; metric < metrics; metric++) {
237
- entry[`metric${metric}`] =
238
- Math.random() > sparsity ? Math.floor(Math.random() * 100) + 1 : 0;
239
- }
240
- data.push(entry);
241
- }
242
-
243
- const { container } = render(() => (
244
- <BarChart width={1200} height={600} data={data}>
245
- <XAxis dataKey="month" />
246
- <YAxis />
247
- {Array.from({ length: metrics }, (_, i) => (
248
- <Bar
249
- dataKey={`metric${i}`}
250
- stackId="stack"
251
- fill={`hsl(${(i * 7) % 360}, 70%, 50%)`}
252
- isAnimationActive={false}
253
- />
254
- ))}
255
- </BarChart>
256
- ));
257
- flush();
258
-
259
- const actualBars = getAllBars(container).length;
260
- const potentialBars = months * metrics;
261
-
262
- expect(actualBars).toBeLessThan(potentialBars * 0.5);
263
- });
264
-
265
- it("should handle extreme sparsity efficiently", { timeout: 30_000 }, () => {
266
- const dataPoints = 672;
267
- const errorRate = 0.01;
268
-
269
- const data = Array.from({ length: dataPoints }, (_, i) => ({
270
- time: `Hour ${i}`,
271
- errors: Math.random() < errorRate ? Math.floor(Math.random() * 10) + 1 : 0,
272
- warnings: Math.random() < errorRate * 2 ? Math.floor(Math.random() * 20) + 1 : 0,
273
- info: Math.random() < errorRate * 5 ? Math.floor(Math.random() * 50) + 1 : 0,
274
- }));
275
-
276
- const { container } = render(() => (
277
- <BarChart width={1200} height={400} data={data}>
278
- <XAxis dataKey="time" />
279
- <YAxis />
280
- <Bar dataKey="errors" stackId="log" fill="#ff4444" isAnimationActive={false} />
281
- <Bar dataKey="warnings" stackId="log" fill="#ffaa00" isAnimationActive={false} />
282
- <Bar dataKey="info" stackId="log" fill="#4488ff" isAnimationActive={false} />
283
- </BarChart>
284
- ));
285
- flush();
286
-
287
- const actualBars = getAllBars(container).length;
288
- const potentialBars = dataPoints * 3;
289
-
290
- expect(actualBars).toBeLessThan(potentialBars * 0.2);
291
- });
292
-
293
- it("should not filter out zero-height bars that have a custom shape (BoxPlot use case)", () => {
294
- const HorizonBar = (barProps: { x?: number; y?: number; width?: number; height?: number }) => {
295
- const { x, y, width } = barProps;
296
- if (x == null || y == null || width == null) {
297
- return null;
298
- }
299
- return <line x1={x} y1={y} x2={x + width} y2={y} stroke="#000" stroke-width={3} />;
300
- };
301
-
302
- const data = [
303
- { min: 100, bottomWhisker: 100, bottomBox: 50, topBox: 200, topWhisker: 200, marker: 0 },
304
- { min: 200, bottomWhisker: 200, bottomBox: 200, topBox: 100, topWhisker: 100, marker: 0 },
305
- ];
306
-
307
- const renderTestCase = createSelectorTestCase((props) => (
308
- <BarChart width={400} height={400} data={data}>
309
- <XAxis />
310
- <YAxis />
311
- <Bar stackId="a" id="bar-min" dataKey="min" fill="none" isAnimationActive={false} />
312
- <Bar
313
- stackId="a"
314
- id="bar-marker"
315
- dataKey="marker"
316
- shape={(item) => (
317
- <HorizonBar x={item.x} y={item.y} width={item.width} height={item.height} />
318
- )}
319
- isAnimationActive={false}
320
- />
321
- <Bar stackId="a" id="bar-whisker" dataKey="bottomWhisker" isAnimationActive={false} />
322
- {props.children}
323
- </BarChart>
324
- ));
325
-
326
- const { spy } = renderTestCase((state) =>
327
- selectBarRectangles(state, "bar-marker", false, undefined),
328
- );
329
- const rectangles = spy.mock.lastCall?.[0] ?? [];
330
-
331
- expect(rectangles.length).toBe(data.length);
332
- rectangles.forEach((rect: { height: number }) => {
333
- expect(rect.height).toBe(0);
334
- });
335
- });
336
- });