solid-recharts 0.2.1 → 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 (488) hide show
  1. package/package.json +13 -11
  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 +4 -4
  6. package/src/cartesian/AreaRevealShape.tsx +1 -1
  7. package/src/cartesian/Bar.tsx +33 -21
  8. package/src/cartesian/BarStack.tsx +5 -5
  9. package/src/cartesian/Brush.tsx +19 -15
  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 +3 -3
  14. package/src/cartesian/GraphicalItemClipPath.tsx +1 -1
  15. package/src/cartesian/Line.tsx +18 -16
  16. package/src/cartesian/LineDrawShape.tsx +14 -13
  17. package/src/cartesian/ReferenceArea.tsx +4 -4
  18. package/src/cartesian/ReferenceDot.tsx +4 -4
  19. package/src/cartesian/ReferenceLine.tsx +4 -4
  20. package/src/cartesian/RenderedTicksReporter.tsx +19 -17
  21. package/src/cartesian/Scatter.tsx +3 -3
  22. package/src/cartesian/XAxis.tsx +1 -1
  23. package/src/cartesian/YAxis.tsx +35 -33
  24. package/src/cartesian/ZAxis.tsx +3 -2
  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 +5 -4
  40. package/src/chart/Treemap.tsx +5 -4
  41. package/src/component/ActivePoints.tsx +6 -6
  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 +5 -5
  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 +2 -2
  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 +13 -12
  65. package/src/polar/PolarAngleAxis.tsx +3 -3
  66. package/src/polar/PolarGrid.tsx +5 -5
  67. package/src/polar/PolarRadiusAxis.tsx +3 -3
  68. package/src/polar/Radar.tsx +3 -3
  69. package/src/polar/RadialBar.tsx +3 -3
  70. package/src/shape/Cross.tsx +5 -5
  71. package/src/shape/Curve.tsx +6 -7
  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 +5 -5
  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 +1 -1
  84. package/src/state/SetTooltipEntrySettings.tsx +1 -1
  85. package/src/state/brushSlice.ts +10 -8
  86. package/src/state/cartesianAxisSlice.ts +46 -38
  87. package/src/state/chartDataSlice.ts +29 -23
  88. package/src/state/errorBarSlice.ts +22 -16
  89. package/src/state/eventSettingsSlice.ts +11 -9
  90. package/src/state/graphicalItemsSlice.ts +17 -13
  91. package/src/state/layoutSlice.ts +27 -19
  92. package/src/state/legendSlice.ts +24 -18
  93. package/src/state/optionsSlice.ts +8 -6
  94. package/src/state/polarAxisSlice.ts +21 -13
  95. package/src/state/polarOptionsSlice.ts +16 -14
  96. package/src/state/referenceElementsSlice.ts +25 -19
  97. package/src/state/registerInStore.ts +15 -13
  98. package/src/state/renderedTicksSlice.ts +11 -7
  99. package/src/state/rootPropsSlice.ts +16 -14
  100. package/src/state/tooltipSlice.ts +115 -95
  101. package/src/state/unregisterOnCleanup.ts +5 -20
  102. package/src/state/zIndexSlice.ts +50 -42
  103. package/src/synchronisation/useChartSynchronisation.tsx +213 -217
  104. package/src/util/ActiveShapeUtils.tsx +2 -2
  105. package/src/util/BarUtils.tsx +5 -3
  106. package/src/util/DirectPortal.tsx +107 -0
  107. package/src/util/FunnelUtils.tsx +1 -1
  108. package/src/util/RadialBarUtils.tsx +4 -3
  109. package/src/util/createCartesianCharts.tsx +1 -1
  110. package/src/util/createPolarCharts.tsx +1 -1
  111. package/src/util/svgPropertiesAndEvents.ts +1 -1
  112. package/src/util/tooltip/translate.ts +2 -2
  113. package/src/util/types.ts +2 -2
  114. package/src/zIndex/ZIndexLayer.tsx +39 -68
  115. package/src/zIndex/ZIndexPortal.tsx +29 -25
  116. package/test/_data.ts +0 -408
  117. package/test/animation/AnimationController.typed.spec.ts +0 -53
  118. package/test/animation/AnimationControllerImpl.spec.ts +0 -271
  119. package/test/animation/CSSTransitionAnimate.timing.spec.tsx +0 -473
  120. package/test/animation/JavascriptAnimate.spec.tsx +0 -62
  121. package/test/animation/RechartsAnimation.spec.ts +0 -636
  122. package/test/animation/easing.spec.ts +0 -218
  123. package/test/animation/legacyAnimationLengthChange.spec.tsx +0 -803
  124. package/test/animation/matchBy.spec.ts +0 -467
  125. package/test/animation/mockAnimationController.ts +0 -40
  126. package/test/animation/mockControllerAnimationManager.ts +0 -143
  127. package/test/animation/mockTimeoutController.ts +0 -114
  128. package/test/animation/timeoutController.spec.ts +0 -138
  129. package/test/animation/useAnimationStartSnapshot.spec.ts +0 -147
  130. package/test/animation/util.spec.ts +0 -28
  131. package/test/cartesian/Area.animation.spec.tsx +0 -363
  132. package/test/cartesian/Area.range.spec.tsx +0 -54
  133. package/test/cartesian/Area.spec.tsx +0 -1202
  134. package/test/cartesian/Area.stacked.render.spec.tsx +0 -69
  135. package/test/cartesian/Area.typed.spec.tsx +0 -209
  136. package/test/cartesian/Axis.integration.spec.tsx +0 -158
  137. package/test/cartesian/Bar/Bar.csstransition.spec.tsx +0 -299
  138. package/test/cartesian/Bar/Bar.spec.tsx +0 -2314
  139. package/test/cartesian/Bar/Bar.typed.spec.tsx +0 -192
  140. package/test/cartesian/Bar.animation.spec.tsx +0 -426
  141. package/test/cartesian/Bar.stackDomain.spec.tsx +0 -66
  142. package/test/cartesian/Bar.stacked.render.spec.tsx +0 -53
  143. package/test/cartesian/Bar.truncateByDomain.spec.tsx +0 -237
  144. package/test/cartesian/Bar.zeroDimensionFiltering.spec.tsx +0 -336
  145. package/test/cartesian/BarStack.spec.tsx +0 -91
  146. package/test/cartesian/Brush.keyboard.spec.tsx +0 -88
  147. package/test/cartesian/Brush.panorama.spec.tsx +0 -41
  148. package/test/cartesian/Brush.props.spec.tsx +0 -63
  149. package/test/cartesian/Brush.render.spec.tsx +0 -117
  150. package/test/cartesian/Brush.spec.tsx +0 -522
  151. package/test/cartesian/Brush.stacked.spec.tsx +0 -221
  152. package/test/cartesian/CartesianAxis.render.spec.tsx +0 -50
  153. package/test/cartesian/CartesianAxis.spec.tsx +0 -396
  154. package/test/cartesian/CartesianGrid.render.spec.tsx +0 -39
  155. package/test/cartesian/CartesianGrid.spec.tsx +0 -2103
  156. package/test/cartesian/ErrorBar.render.spec.tsx +0 -69
  157. package/test/cartesian/ErrorBar.spec.tsx +0 -2414
  158. package/test/cartesian/Funnel.animation.spec.tsx +0 -241
  159. package/test/cartesian/Funnel.spec.tsx +0 -226
  160. package/test/cartesian/Funnel.typed.spec.tsx +0 -221
  161. package/test/cartesian/GraphicalItemClipPath.scale-behavior.spec.tsx +0 -627
  162. package/test/cartesian/GraphicalItemClipPath.spec.tsx +0 -427
  163. package/test/cartesian/Line.animation.spec.tsx +0 -643
  164. package/test/cartesian/Line.sparseAnimationPath.spec.tsx +0 -98
  165. package/test/cartesian/Line.spec.tsx +0 -471
  166. package/test/cartesian/Line.typed.spec.tsx +0 -152
  167. package/test/cartesian/ReferenceArea.render.spec.tsx +0 -63
  168. package/test/cartesian/ReferenceArea.spec.tsx +0 -663
  169. package/test/cartesian/ReferenceArea.typed.spec.tsx +0 -74
  170. package/test/cartesian/ReferenceDot.render.spec.tsx +0 -55
  171. package/test/cartesian/ReferenceDot.spec.tsx +0 -462
  172. package/test/cartesian/ReferenceDot.typed.spec.tsx +0 -76
  173. package/test/cartesian/ReferenceLine/ReferenceLine.panorama.spec.tsx +0 -184
  174. package/test/cartesian/ReferenceLine/ReferenceLine.spec.tsx +0 -744
  175. package/test/cartesian/ReferenceLine/ReferenceLine.typed.spec.tsx +0 -74
  176. package/test/cartesian/ReferenceLine/getEndPoints.spec.ts +0 -399
  177. package/test/cartesian/ReferenceLine.render.spec.tsx +0 -134
  178. package/test/cartesian/Scatter.animation.spec.tsx +0 -381
  179. package/test/cartesian/Scatter.render.spec.tsx +0 -61
  180. package/test/cartesian/Scatter.spec.tsx +0 -406
  181. package/test/cartesian/Scatter.typed.spec.tsx +0 -153
  182. package/test/cartesian/XAxis/XAxis.barSize.spec.tsx +0 -336
  183. package/test/cartesian/XAxis/XAxis.brush.spec.tsx +0 -266
  184. package/test/cartesian/XAxis/XAxis.categorydomain.spec.tsx +0 -872
  185. package/test/cartesian/XAxis/XAxis.dataKey.spec.tsx +0 -86
  186. package/test/cartesian/XAxis/XAxis.datatypes.spec.tsx +0 -127
  187. package/test/cartesian/XAxis/XAxis.hide.spec.tsx +0 -106
  188. package/test/cartesian/XAxis/XAxis.multiaxis.spec.tsx +0 -336
  189. package/test/cartesian/XAxis/XAxis.numberdomain.spec.tsx +0 -1466
  190. package/test/cartesian/XAxis/XAxis.padding.spec.tsx +0 -758
  191. package/test/cartesian/XAxis/XAxis.padding_clip.spec.tsx +0 -65
  192. package/test/cartesian/XAxis/XAxis.state.spec.tsx +0 -355
  193. package/test/cartesian/XAxis/XAxis.tick.spec.tsx +0 -493
  194. package/test/cartesian/XAxis/XAxis.timescale.spec.tsx +0 -233
  195. package/test/cartesian/XAxis/XAxis.type.spec.tsx +0 -107
  196. package/test/cartesian/XAxis/XAxis.typed.spec.tsx +0 -102
  197. package/test/cartesian/XAxis/XAxis.vertical.spec.tsx +0 -265
  198. package/test/cartesian/XAxis.tickFormatter.spec.tsx +0 -54
  199. package/test/cartesian/YAxis/YAxis.7362.derivedDomain.spec.tsx +0 -230
  200. package/test/cartesian/YAxis/YAxis.7362.spec.tsx +0 -104
  201. package/test/cartesian/YAxis/YAxis.interval-zero.spec.tsx +0 -88
  202. package/test/cartesian/YAxis/YAxis.label.spec.tsx +0 -219
  203. package/test/cartesian/YAxis/YAxis.spec.tsx +0 -1595
  204. package/test/cartesian/YAxis/YAxis.tick.spec.tsx +0 -428
  205. package/test/cartesian/YAxis/YAxis.tickFormatter.spec.tsx +0 -54
  206. package/test/cartesian/YAxis/YAxis.ticks.spec.tsx +0 -263
  207. package/test/cartesian/YAxis/YAxis.type.spec.tsx +0 -107
  208. package/test/cartesian/YAxis/YAxis.typed.spec.tsx +0 -102
  209. package/test/cartesian/ZAxis.spec.tsx +0 -300
  210. package/test/cartesian/ZAxis.typed.spec.tsx +0 -33
  211. package/test/cartesian/__snapshots__/Brush.spec.tsx.snap +0 -5
  212. package/test/cartesian/axisLineAndStroke.spec.tsx +0 -72
  213. package/test/cartesian/getCartesianPosition.spec.ts +0 -907
  214. package/test/cartesian/getEquidistantTicks.spec.ts +0 -88
  215. package/test/cartesian/getTicks.spec.ts +0 -378
  216. package/test/cartesian/miscFeatureGaps.spec.tsx +0 -89
  217. package/test/cartesian/useAnimatedLineLength.spec.ts +0 -168
  218. package/test/chart/AccessibilityLayer.spec.tsx +0 -569
  219. package/test/chart/AccessibilityScans.spec.tsx +0 -286
  220. package/test/chart/AreaChart.spec.tsx +0 -409
  221. package/test/chart/AreaChart.stacked.spec.tsx +0 -1407
  222. package/test/chart/AreaChart.typed.spec.tsx +0 -39
  223. package/test/chart/BarChart.spec.tsx +0 -3719
  224. package/test/chart/BarChart.typed.spec.tsx +0 -60
  225. package/test/chart/CategoricalChart.spec.tsx +0 -255
  226. package/test/chart/ComposedChart.spec.tsx +0 -199
  227. package/test/chart/ComposedChart.typed.spec.tsx +0 -39
  228. package/test/chart/FunnelChart.spec.tsx +0 -215
  229. package/test/chart/FunnelChart.typed.spec.tsx +0 -39
  230. package/test/chart/LineChart.multiseries.spec.tsx +0 -50
  231. package/test/chart/LineChart.smoke.spec.tsx +0 -50
  232. package/test/chart/LineChart.spec.tsx +0 -930
  233. package/test/chart/LineChart.typed.spec.tsx +0 -39
  234. package/test/chart/NicheChartTooltip.spec.tsx +0 -81
  235. package/test/chart/PieChart.spec.tsx +0 -793
  236. package/test/chart/PieChart.typed.spec.tsx +0 -39
  237. package/test/chart/RadarChart.spec.tsx +0 -530
  238. package/test/chart/RadarChart.typed.spec.tsx +0 -39
  239. package/test/chart/RadialBarChart.5966.spec.tsx +0 -48
  240. package/test/chart/RadialBarChart.spec.tsx +0 -679
  241. package/test/chart/RadialBarChart.typed.spec.tsx +0 -39
  242. package/test/chart/RechartsWrapper.spec.tsx +0 -83
  243. package/test/chart/Sankey.content.spec.tsx +0 -46
  244. package/test/chart/Sankey.spec.tsx +0 -952
  245. package/test/chart/Sankey.typed.spec.tsx +0 -29
  246. package/test/chart/ScatterChart.spec.tsx +0 -2613
  247. package/test/chart/ScatterChart.typed.spec.tsx +0 -39
  248. package/test/chart/SunburstChart.spec.tsx +0 -146
  249. package/test/chart/Treemap.animation.spec.tsx +0 -52
  250. package/test/chart/Treemap.spec.tsx +0 -1003
  251. package/test/chart/Treemap.typed.spec.tsx +0 -26
  252. package/test/chart/chartEvents.spec.tsx +0 -127
  253. package/test/chart/responsive.spec.tsx +0 -620
  254. package/test/component/Cell.render.spec.tsx +0 -155
  255. package/test/component/Cell.spec.tsx +0 -12
  256. package/test/component/Cursor.spec.tsx +0 -186
  257. package/test/component/DefaultTooltipContent.spec.tsx +0 -102
  258. package/test/component/Label.render.spec.tsx +0 -63
  259. package/test/component/Label.spec.tsx +0 -686
  260. package/test/component/Label.typed.spec.tsx +0 -46
  261. package/test/component/LabelList.spec.tsx +0 -188
  262. package/test/component/Legend.itemSorter.spec.tsx +0 -704
  263. package/test/component/Legend.render.spec.tsx +0 -92
  264. package/test/component/Legend.spec.tsx +0 -2213
  265. package/test/component/Legend.typed.spec.tsx +0 -22
  266. package/test/component/ResponsiveContainer.spec.tsx +0 -523
  267. package/test/component/ResponsiveContainerDataTest.spec.tsx +0 -51
  268. package/test/component/Text.spec.tsx +0 -415
  269. package/test/component/Text.typed.spec.tsx +0 -46
  270. package/test/component/Tooltip/ActiveDot.spec.tsx +0 -370
  271. package/test/component/Tooltip/Tooltip.animation.spec.tsx +0 -209
  272. package/test/component/Tooltip/Tooltip.content.spec.tsx +0 -128
  273. package/test/component/Tooltip/Tooltip.formatter.spec.tsx +0 -152
  274. package/test/component/Tooltip/Tooltip.includeHidden.spec.tsx +0 -79
  275. package/test/component/Tooltip/Tooltip.multipleDataArrays.spec.tsx +0 -165
  276. package/test/component/Tooltip/Tooltip.offset.spec.tsx +0 -113
  277. package/test/component/Tooltip/Tooltip.state.spec.tsx +0 -74
  278. package/test/component/Tooltip/Tooltip.sync.spec.tsx +0 -639
  279. package/test/component/Tooltip/defaultIndex.spec.tsx +0 -227
  280. package/test/component/Tooltip/graphicalItem.formatter.spec.tsx +0 -138
  281. package/test/component/Tooltip/itemSorter.spec.tsx +0 -2815
  282. package/test/component/Tooltip/tooltipEventType.spec.tsx +0 -344
  283. package/test/component/Tooltip/tooltipMouseHoverSelectors.ts +0 -41
  284. package/test/component/Tooltip/tooltipTestHelpers.tsx +0 -162
  285. package/test/component/Tooltip.defaultIndex.spec.tsx +0 -48
  286. package/test/component/Tooltip.hover.spec.tsx +0 -61
  287. package/test/component/Tooltip.item.spec.tsx +0 -54
  288. package/test/component/Tooltip.keyboard.spec.tsx +0 -51
  289. package/test/component/Tooltip.payload.spec.tsx +0 -1716
  290. package/test/component/Tooltip.touch.spec.tsx +0 -39
  291. package/test/component/Tooltip.visibility.spec.tsx +0 -1889
  292. package/test/component/TooltipBoundingBox.spec.tsx +0 -89
  293. package/test/component/responsiveContainerUtils.spec.ts +0 -205
  294. package/test/container/ClipPath.spec.tsx +0 -602
  295. package/test/container/chartDimensions.spec.tsx +0 -368
  296. package/test/context/chartLayoutContext.spec.tsx +0 -378
  297. package/test/helper/ExpectAxisDomain.tsx +0 -27
  298. package/test/helper/assertNotNull.ts +0 -6
  299. package/test/helper/assertZIndexLayerOrder.ts +0 -19
  300. package/test/helper/createSelectorTestCase.tsx +0 -176
  301. package/test/helper/expectAnimatedPieAngles.ts +0 -100
  302. package/test/helper/expectAnimatedPiePaths.ts +0 -78
  303. package/test/helper/expectAreaCurve.ts +0 -15
  304. package/test/helper/expectAxisTicks.ts +0 -48
  305. package/test/helper/expectBars.ts +0 -54
  306. package/test/helper/expectFunctionReturning.ts +0 -58
  307. package/test/helper/expectLabel.ts +0 -32
  308. package/test/helper/expectLastCalledWith.ts +0 -48
  309. package/test/helper/expectLine.ts +0 -20
  310. package/test/helper/expectPieSectors.ts +0 -80
  311. package/test/helper/expectScale.ts +0 -37
  312. package/test/helper/expectScatterPoints.ts +0 -52
  313. package/test/helper/expectStackGroups.ts +0 -144
  314. package/test/helper/mockAxes.ts +0 -22
  315. package/test/helper/mockGetBoundingClientRect.ts +0 -66
  316. package/test/helper/mockHTMLElementProperty.ts +0 -19
  317. package/test/helper/mockTouchingElement.ts +0 -27
  318. package/test/helper/offsetHelpers.ts +0 -19
  319. package/test/helper/parameterizedTestCases.tsx +0 -99
  320. package/test/helper/produceState.ts +0 -32
  321. package/test/helper/selectorTestHelpers.tsx +0 -63
  322. package/test/helper/trim.spec.ts +0 -35
  323. package/test/helper/trim.ts +0 -11
  324. package/test/hooks/useActiveTooltipDataPoints.spec.tsx +0 -358
  325. package/test/hooks/useAxisDomain.spec.tsx +0 -361
  326. package/test/hooks/useAxisScale.spec.tsx +0 -283
  327. package/test/hooks/useAxisTicks.spec.tsx +0 -130
  328. package/test/hooks/useOffset.spec.tsx +0 -248
  329. package/test/hooks/useTooltipStateHooks.spec.tsx +0 -109
  330. package/test/polar/Pie/Pie-TwoLevelPieChart.spec.tsx +0 -135
  331. package/test/polar/Pie/Pie.spec.tsx +0 -784
  332. package/test/polar/Pie/Pie.typed.spec.tsx +0 -78
  333. package/test/polar/Pie.animation.spec.tsx +0 -529
  334. package/test/polar/PieWithLegend.animation.spec.tsx +0 -142
  335. package/test/polar/PolarAngleAxis/PolarAngleAxis.events.spec.tsx +0 -76
  336. package/test/polar/PolarAngleAxis/PolarAngleAxis.spec.tsx +0 -2079
  337. package/test/polar/PolarAngleAxis/PolarAngleAxis.typed.spec.tsx +0 -102
  338. package/test/polar/PolarAngleAxis.render.spec.tsx +0 -79
  339. package/test/polar/PolarGrid.render.spec.tsx +0 -75
  340. package/test/polar/PolarGrid.spec.tsx +0 -918
  341. package/test/polar/PolarLegendPerRow.render.spec.tsx +0 -85
  342. package/test/polar/PolarRadiusAxis.events.spec.tsx +0 -65
  343. package/test/polar/PolarRadiusAxis.render.spec.tsx +0 -52
  344. package/test/polar/PolarRadiusAxis.spec.tsx +0 -991
  345. package/test/polar/PolarRadiusAxis.typed.spec.tsx +0 -84
  346. package/test/polar/PolarTooltipLegend.render.spec.tsx +0 -80
  347. package/test/polar/Radar.animation.spec.tsx +0 -570
  348. package/test/polar/Radar.render.spec.tsx +0 -71
  349. package/test/polar/Radar.spec.tsx +0 -265
  350. package/test/polar/Radar.typed.spec.tsx +0 -119
  351. package/test/polar/RadialBar/RadialBar.spec.tsx +0 -1521
  352. package/test/polar/RadialBar/RadialBar.typed.spec.tsx +0 -132
  353. package/test/polar/RadialBar.animation.spec.tsx +0 -375
  354. package/test/polar/RadialBar.render.spec.tsx +0 -66
  355. package/test/polar/RadialBar.stacked.spec.tsx +0 -57
  356. package/test/setup.ts +0 -84
  357. package/test/shape/ActiveShape.spec.tsx +0 -181
  358. package/test/shape/Cross.spec.tsx +0 -60
  359. package/test/shape/Cross.typed.spec.tsx +0 -26
  360. package/test/shape/Curve.spec.tsx +0 -368
  361. package/test/shape/Curve.typed.spec.tsx +0 -69
  362. package/test/shape/Dot.spec.tsx +0 -73
  363. package/test/shape/Dot.typed.spec.tsx +0 -30
  364. package/test/shape/Polygon.spec.tsx +0 -357
  365. package/test/shape/Polygon.typed.spec.tsx +0 -28
  366. package/test/shape/Rectangle.animation.spec.tsx +0 -451
  367. package/test/shape/Rectangle.spec.tsx +0 -68
  368. package/test/shape/Rectangle.typed.spec.tsx +0 -24
  369. package/test/shape/Sector.spec.tsx +0 -76
  370. package/test/shape/Sector.typed.spec.tsx +0 -24
  371. package/test/shape/Symbols.spec.tsx +0 -43
  372. package/test/shape/Symbols.typed.spec.tsx +0 -24
  373. package/test/shape/Trapezoid.spec.tsx +0 -50
  374. package/test/shape/Trapezoid.typed.spec.tsx +0 -24
  375. package/test/shape/__snapshots__/Cross.spec.tsx.snap +0 -62
  376. package/test/shape/__snapshots__/Curve.spec.tsx.snap +0 -460
  377. package/test/shape/__snapshots__/Polygon.spec.tsx.snap +0 -58
  378. package/test/shape/__snapshots__/Rectangle.spec.tsx.snap +0 -117
  379. package/test/shape/__snapshots__/Sector.spec.tsx.snap +0 -71
  380. package/test/shape/__snapshots__/Trapezoid.spec.tsx.snap +0 -64
  381. package/test/state/chartDataSlice.spec.ts +0 -53
  382. package/test/state/createCollectionActions.spec.ts +0 -87
  383. package/test/state/createSelector.spec.ts +0 -158
  384. package/test/state/externalEventsMiddleware.spec.ts +0 -178
  385. package/test/state/graphicalItemsSlice.spec.ts +0 -92
  386. package/test/state/hooks.spec.tsx +0 -68
  387. package/test/state/legendSlice.spec.ts +0 -44
  388. package/test/state/mouseEventsMiddleware.spec.ts +0 -75
  389. package/test/state/optionsSlice.spec.ts +0 -19
  390. package/test/state/referenceElementsSlice.spec.ts +0 -84
  391. package/test/state/registerInStore.spec.tsx +0 -101
  392. package/test/state/selectors/areaSelectors.spec.tsx +0 -77
  393. package/test/state/selectors/axisSelectors.spec.tsx +0 -1418
  394. package/test/state/selectors/barStackSelectors.spec.tsx +0 -752
  395. package/test/state/selectors/brushSelectors.spec.tsx +0 -30
  396. package/test/state/selectors/cartesianAxisSlice.spec.ts +0 -96
  397. package/test/state/selectors/combineNiceTicks.spec.ts +0 -207
  398. package/test/state/selectors/combiners/combineActiveTooltipIndex.spec.ts +0 -61
  399. package/test/state/selectors/combiners/combineAllBarPositions.spec.ts +0 -39
  400. package/test/state/selectors/combiners/combineConfiguredScale.spec.ts +0 -56
  401. package/test/state/selectors/combiners/combineDisplayedStackedData.spec.ts +0 -123
  402. package/test/state/selectors/combiners/combineRealScaleType.spec.ts +0 -80
  403. package/test/state/selectors/containerSelectors.spec.tsx +0 -168
  404. package/test/state/selectors/dataSelectors.spec.tsx +0 -136
  405. package/test/state/selectors/legendSelectors.spec.tsx +0 -113
  406. package/test/state/selectors/lineSelectors.spec.tsx +0 -60
  407. package/test/state/selectors/pieSelectors.spec.tsx +0 -72
  408. package/test/state/selectors/radarSelectors.spec.tsx +0 -496
  409. package/test/state/selectors/rootPropsSelectors.spec.tsx +0 -169
  410. package/test/state/selectors/scatterSelectors.spec.tsx +0 -47
  411. package/test/state/selectors/selectActiveTooltipIndex.spec.tsx +0 -234
  412. package/test/state/selectors/selectAllAxes.spec.tsx +0 -18
  413. package/test/state/selectors/selectAxisDomain.spec.tsx +0 -21
  414. package/test/state/selectors/selectAxisDomainIncludingNiceTicks.spec.tsx +0 -19
  415. package/test/state/selectors/selectAxisRangeWithReverse.spec.tsx +0 -22
  416. package/test/state/selectors/selectAxisScale.spec.tsx +0 -91
  417. package/test/state/selectors/selectBarRectangles.stackOffset.spec.tsx +0 -503
  418. package/test/state/selectors/selectBaseAxis.spec.tsx +0 -56
  419. package/test/state/selectors/selectCartesianItemsSettings.spec.tsx +0 -57
  420. package/test/state/selectors/selectChartOffset.spec.tsx +0 -26
  421. package/test/state/selectors/selectDisplayedData.spec.tsx +0 -282
  422. package/test/state/selectors/selectIsTooltipActive.spec.tsx +0 -231
  423. package/test/state/selectors/selectNumericalDomain.spec.tsx +0 -21
  424. package/test/state/selectors/selectRealScaleType.spec.tsx +0 -19
  425. package/test/state/selectors/selectStackGroups.spec.tsx +0 -322
  426. package/test/state/selectors/selectXAxisPosition.spec.tsx +0 -22
  427. package/test/state/selectors/selectYAxisPosition.spec.tsx +0 -22
  428. package/test/state/selectors/selectorMemoization.spec.tsx +0 -136
  429. package/test/state/selectors/selectors.spec.tsx +0 -1613
  430. package/test/state/throttling.spec.ts +0 -200
  431. package/test/state/zIndexSlice.spec.ts +0 -85
  432. package/test/synchronisation/useChartSynchronisation.spec.tsx +0 -225
  433. package/test/util/BarUtils.spec.ts +0 -39
  434. package/test/util/CartesianUtils/CartesianUtils.spec.ts +0 -261
  435. package/test/util/CartesianUtils/rectWithPoints.spec.ts +0 -48
  436. package/test/util/ChartUtils/ChartUtils.spec.ts +0 -491
  437. package/test/util/ChartUtils/appendOffsetOfLegend.spec.ts +0 -136
  438. package/test/util/ChartUtils/appendOffsetOfLegend.spec.tsx +0 -133
  439. package/test/util/ChartUtils/getCateCoordinateOfLine.spec.ts +0 -97
  440. package/test/util/ChartUtils/getStackedData.spec.ts +0 -416
  441. package/test/util/ChartUtils/truncateByDomain.spec.ts +0 -70
  442. package/test/util/DataUtils.spec.ts +0 -385
  443. package/test/util/DomUtils.spec.tsx +0 -117
  444. package/test/util/FunnelUtils.spec.tsx +0 -70
  445. package/test/util/Global.spec.ts +0 -11
  446. package/test/util/LRUCache.spec.ts +0 -81
  447. package/test/util/LogUtils.spec.ts +0 -45
  448. package/test/util/PolarUtils.spec.ts +0 -66
  449. package/test/util/ReduceCssCalcPrototype.spec.ts +0 -141
  450. package/test/util/ShallowEqual.spec.ts +0 -102
  451. package/test/util/TickUtils.spec.ts +0 -29
  452. package/test/util/createChartHelpers.spec.tsx +0 -210
  453. package/test/util/cursor/getCursorPoints.spec.ts +0 -136
  454. package/test/util/cursor/getCursorRectangle.spec.ts +0 -50
  455. package/test/util/cursor/getRadialCursorPoints.spec.ts +0 -36
  456. package/test/util/errorValue.spec.ts +0 -69
  457. package/test/util/getEveryNth.spec.ts +0 -39
  458. package/test/util/getRadiusAndStrokeWidthFromDot.spec.ts +0 -51
  459. package/test/util/getRelativeCoordinate.spec.ts +0 -250
  460. package/test/util/getSliced.spec.ts +0 -45
  461. package/test/util/isDomainSpecifiedByUser.spec.ts +0 -207
  462. package/test/util/isWellBehavedNumber.spec.ts +0 -54
  463. package/test/util/payload/getUniqPayload.spec.ts +0 -56
  464. package/test/util/propsAreEqual.spec.ts +0 -75
  465. package/test/util/round.spec.ts +0 -112
  466. package/test/util/scale/arithmetic.spec.ts +0 -61
  467. package/test/util/scale/createCategoricalInverse.spec.ts +0 -84
  468. package/test/util/scale/getNiceTickValues.spec.ts +0 -421
  469. package/test/util/scale/getTickValuesFixedDomain.spec.ts +0 -155
  470. package/test/util/svgPropertiesAndEvents.spec.tsx +0 -206
  471. package/test/util/svgPropertiesNoEvents.spec.tsx +0 -228
  472. package/test/util/tooltip/translate.spec.ts +0 -396
  473. package/test/util/useAnimationId.spec.tsx +0 -59
  474. package/test/util/useElementOffset.spec.tsx +0 -173
  475. package/test/util/usePrefersReducedMotion.spec.ts +0 -54
  476. package/test/util/useUniqueId.spec.ts +0 -99
  477. package/test/utils/diagnostics-allowlist.ts +0 -18
  478. package/test/utils/diagnostics.ts +0 -58
  479. package/test/zIndex/AllZIndexPortals.spec.tsx +0 -83
  480. package/test/zIndex/DefaultZIndexes.spec.ts +0 -80
  481. package/test/zIndex/DynamicZIndex.spec.tsx +0 -102
  482. package/test/zIndex/ZIndexLayer.portalOwner.spec.tsx +0 -125
  483. package/test/zIndex/componentZIndex.spec.tsx +0 -255
  484. package/test/zIndex/getZIndexFromUnknown.spec.ts +0 -51
  485. package/test/zIndex/multiChartZIndexIsolation.spec.tsx +0 -90
  486. package/test/zIndex/zIndexSelectors.spec.ts +0 -172
  487. package/test-results/.last-run.json +0 -4
  488. package/tsconfig.json +0 -11
@@ -1,1613 +0,0 @@
1
- // Ported from recharts 3.8.1 test/state/selectors/selectors.spec.tsx
2
- // (commit 7a23854). Solid deviations: upstream's Redux dispatch cases use the
3
- // Solid-native store actions; tooltip selector exports live in tooltipSelectors.
4
- import { createEffect, flush } from "solid-js";
5
- import { describe, expect, it, test, vi } from "vitest";
6
- import { render } from "@solidjs/testing-library";
7
- import { RechartsStoreProvider } from "../../../src/state/RechartsStoreProvider";
8
- import { createRechartsStore, type RechartsRootState } from "../../../src/state/store";
9
- import { arrayTooltipSearcher } from "../../../src/state/optionsSlice";
10
- import { useTooltipEventType } from "../../../src/state/selectors/selectTooltipEventType";
11
- import {
12
- selectActiveCoordinate,
13
- selectActiveIndex,
14
- selectActivePropsFromChartPointer,
15
- selectIsTooltipActive,
16
- selectTooltipPayload,
17
- selectTooltipPayloadConfigurations,
18
- } from "../../../src/state/selectors/tooltipSelectors";
19
- import { selectTooltipState } from "../../../src/state/selectors/selectTooltipState";
20
- import { combineTooltipPayload } from "../../../src/state/selectors/combiners/combineTooltipPayload";
21
- import { useAppSelector } from "../../../src/state/hooks";
22
- import type {
23
- TooltipIndex,
24
- TooltipPayload,
25
- TooltipPayloadConfiguration,
26
- TooltipPayloadEntry,
27
- } from "../../../src/state/tooltipSlice";
28
- import { ChartDataState, initialChartDataState } from "../../../src/state/chartDataSlice";
29
- import { noop } from "../../../src/util/DataUtils";
30
- import type {
31
- Coordinate,
32
- PolarCoordinate,
33
- RelativePointer,
34
- TooltipEventType,
35
- } from "../../../src/util/types";
36
- import type { TooltipTrigger } from "../../../src/chart/types";
37
- import { produceState } from "../../helper/produceState";
38
- import {
39
- Area,
40
- BarChart,
41
- ComposedChart,
42
- Line,
43
- LineChart,
44
- Pie,
45
- PieChart,
46
- Scatter,
47
- } from "../../../src";
48
- import { PageData, pageData } from "../../_data";
49
- import { mockGetBoundingClientRect } from "../../helper/mockGetBoundingClientRect";
50
- import { expectLastCalledWith } from "../../helper/expectLastCalledWith";
51
- import { useAppSelectorWithStableTest } from "../../helper/selectorTestHelpers";
52
-
53
- // preloadedState used by selectTooltipPayload cases (mirrors recharts).
54
- const preloadedTooltipState: Partial<RechartsRootState> = {
55
- options: {
56
- tooltipPayloadSearcher: arrayTooltipSearcher,
57
- chartName: "",
58
- eventEmitter: undefined,
59
- defaultTooltipEventType: "axis",
60
- },
61
- };
62
- const tooltipActiveCoordinate: Coordinate = { x: 100, y: 200 };
63
- const activeCoordinate: Coordinate = { x: 100, y: 200 };
64
-
65
- const allTooltipEventTypes: ReadonlyArray<TooltipEventType> = ["axis", "item"];
66
-
67
- const exampleTooltipPayloadConfiguration1: TooltipPayloadConfiguration = {
68
- settings: {
69
- fill: "fill",
70
- name: "name is ignored in Scatter in recharts 2.x",
71
- color: "color",
72
- dataKey: "dataKey1",
73
- nameKey: "nameKey1",
74
- graphicalItemId: "graphicalItemId1",
75
- },
76
- dataDefinedOnItem: [
77
- [
78
- {
79
- name: "stature",
80
- unit: "cm",
81
- value: 100,
82
- payload: { x: 100, y: 200, z: 200 },
83
- dataKey: "x",
84
- },
85
- { name: "weight", unit: "kg", value: 200, payload: { x: 100, y: 200, z: 200 }, dataKey: "y" },
86
- ],
87
- ],
88
- getPosition: noop,
89
- };
90
- const exampleTooltipPayloadConfiguration2: TooltipPayloadConfiguration = {
91
- settings: {
92
- fill: "fill 2",
93
- name: "name 2",
94
- color: "color 2",
95
- dataKey: "dataKey2",
96
- nameKey: "nameKey2",
97
- graphicalItemId: "graphicalItemId2",
98
- },
99
- dataDefinedOnItem: [
100
- [
101
- { name: "height", unit: "cm", value: 100, payload: { x: 100, y: 200, z: 200 }, dataKey: "x" },
102
- { name: "width", unit: "m", value: 4, payload: { x: 10, y: 20, z: 20 }, dataKey: "y" },
103
- ],
104
- ],
105
- getPosition: noop,
106
- };
107
-
108
- type TestCaseTooltipCombination = {
109
- tooltipEventType: TooltipEventType;
110
- trigger: TooltipTrigger;
111
- };
112
-
113
- const allTooltipCombinations: ReadonlyArray<TestCaseTooltipCombination> = [
114
- { tooltipEventType: "axis", trigger: "hover" },
115
- { tooltipEventType: "axis", trigger: "click" },
116
- { tooltipEventType: "item", trigger: "hover" },
117
- { tooltipEventType: "item", trigger: "click" },
118
- ];
119
-
120
- describe("useTooltipEventType", () => {
121
- type TooltipEventTypeTestScenario = {
122
- testName: string;
123
- shared: undefined | boolean;
124
- defaultTooltipEventType: TooltipEventType;
125
- validateTooltipEventTypes: ReadonlyArray<TooltipEventType>;
126
- expected: TooltipEventType;
127
- };
128
-
129
- const testCases: ReadonlyArray<TooltipEventTypeTestScenario> = [
130
- {
131
- testName: "default case",
132
- shared: undefined,
133
- defaultTooltipEventType: "item",
134
- validateTooltipEventTypes: [],
135
- expected: "item",
136
- },
137
- {
138
- testName: "shared and axis type is allowed",
139
- shared: true,
140
- defaultTooltipEventType: "item",
141
- validateTooltipEventTypes: ["axis", "item"],
142
- expected: "axis",
143
- },
144
- {
145
- testName: "shared but axis type is not allowed",
146
- shared: true,
147
- defaultTooltipEventType: "item",
148
- validateTooltipEventTypes: ["item"],
149
- expected: "item",
150
- },
151
- {
152
- testName: "not shared and item type is allowed",
153
- shared: false,
154
- defaultTooltipEventType: "axis",
155
- validateTooltipEventTypes: ["axis", "item"],
156
- expected: "item",
157
- },
158
- {
159
- testName: "not shared but item type is not allowed",
160
- shared: false,
161
- defaultTooltipEventType: "axis",
162
- validateTooltipEventTypes: ["axis"],
163
- expected: "axis",
164
- },
165
- ];
166
-
167
- it("should return undefined when outside of store context", () => {
168
- const spy = vi.fn();
169
- const Comp = (): null => {
170
- const eventType = useTooltipEventType(undefined);
171
- createEffect(
172
- () => eventType(),
173
- (value) => spy(value),
174
- );
175
- return null;
176
- };
177
- render(() => <Comp />);
178
- flush();
179
- expect(spy).toHaveBeenCalledWith(undefined);
180
- });
181
-
182
- test.each(testCases)(
183
- "$testName should return $expected",
184
- ({ shared, defaultTooltipEventType, validateTooltipEventTypes, expected }) => {
185
- const spy = vi.fn();
186
- const Comp = (): null => {
187
- const eventType = useTooltipEventType(shared);
188
- createEffect(
189
- () => eventType(),
190
- (value) => spy(value),
191
- );
192
- return null;
193
- };
194
- const preloadedState: Partial<RechartsRootState> = {
195
- options: {
196
- defaultTooltipEventType,
197
- validateTooltipEventTypes,
198
- tooltipPayloadSearcher: arrayTooltipSearcher,
199
- chartName: "",
200
- eventEmitter: undefined,
201
- },
202
- };
203
- render(() => (
204
- <RechartsStoreProvider preloadedState={preloadedState}>
205
- <Comp />
206
- </RechartsStoreProvider>
207
- ));
208
- flush();
209
- expect(spy).toHaveBeenCalledWith(expected);
210
- },
211
- );
212
- });
213
-
214
- describe("selectActiveCoordinate", () => {
215
- it.each(allTooltipCombinations)(
216
- "should return undefined for initial state for $tooltipEventType $trigger",
217
- ({ tooltipEventType, trigger }) => {
218
- const store = createRechartsStore();
219
- const actual = selectActiveCoordinate(store.state, tooltipEventType, trigger, undefined);
220
- expect(actual).toEqual(undefined);
221
- },
222
- );
223
-
224
- it("should return coordinate after setMouseOverAxisIndex", () => {
225
- const store = createRechartsStore();
226
- store.actions.tooltip.setMouseOverAxisIndex({
227
- activeCoordinate: { x: 3, y: 4 },
228
- activeDataKey: "uv",
229
- activeIndex: "1",
230
- });
231
- flush();
232
- const actual = selectActiveCoordinate(store.state, "axis", "hover", undefined);
233
- expect(actual).toEqual({ x: 3, y: 4 });
234
- });
235
-
236
- it("should return coordinate after setMouseClickAxisIndex", () => {
237
- const store = createRechartsStore();
238
- store.actions.tooltip.setMouseClickAxisIndex({
239
- activeCoordinate: { x: 7, y: 8 },
240
- activeDataKey: "uv",
241
- activeIndex: "2",
242
- });
243
- flush();
244
- const actual = selectActiveCoordinate(store.state, "axis", "click", undefined);
245
- expect(actual).toEqual({ x: 7, y: 8 });
246
- });
247
-
248
- it("should return coordinate after setSyncInteraction", () => {
249
- const store = createRechartsStore();
250
- store.actions.tooltip.setSyncInteraction({
251
- active: true,
252
- coordinate: { x: 5, y: 6 },
253
- dataKey: "uv",
254
- index: "1",
255
- label: "Page B",
256
- sourceViewBox: { x: 0, y: 0, width: 100, height: 100 },
257
- graphicalItemId: undefined,
258
- });
259
- flush();
260
- const actual = selectActiveCoordinate(store.state, "axis", "hover", undefined);
261
- expect(actual).toEqual({ x: 5, y: 6 });
262
- });
263
-
264
- it("should return coordinates when mouseOverAxisIndex is fired and stop returning them after mouseLeaveChart", () => {
265
- const store = createRechartsStore(preloadedTooltipState);
266
-
267
- const initialState = createRechartsStore().state;
268
- const expected: Coordinate | PolarCoordinate | undefined = { x: 100, y: 150 };
269
- expect(selectActiveCoordinate(initialState, "axis", "hover", undefined)).toBe(undefined);
270
-
271
- store.actions.tooltip.setMouseOverAxisIndex({
272
- activeIndex: "1",
273
- activeCoordinate: expected,
274
- activeDataKey: undefined,
275
- });
276
- flush();
277
-
278
- expect(selectActiveCoordinate(store.state, "axis", "hover", undefined)).toEqual(expected);
279
-
280
- store.actions.tooltip.mouseLeaveChart();
281
- flush();
282
-
283
- expect(selectActiveCoordinate(store.state, "axis", "hover", undefined)).toEqual({
284
- x: 100,
285
- y: 150,
286
- });
287
- // the selector stops returning the coordinates but they should still be present in store for the next animation
288
- expect(store.state.tooltip.axisInteraction.hover.coordinate).toEqual(expected);
289
- });
290
-
291
- it("should return coordinates when mouseClickAxisIndex is fired and keep them after mouseLeaveChart", () => {
292
- const store = createRechartsStore(preloadedTooltipState);
293
-
294
- const initialState = createRechartsStore().state;
295
- const expected: Coordinate | PolarCoordinate | undefined = { x: 100, y: 150 };
296
- expect(selectActiveCoordinate(initialState, "axis", "click", undefined)).toBe(undefined);
297
-
298
- store.actions.tooltip.setMouseClickAxisIndex({
299
- activeIndex: "1",
300
- activeCoordinate: expected,
301
- activeDataKey: undefined,
302
- });
303
- flush();
304
-
305
- expect(selectActiveCoordinate(store.state, "axis", "click", undefined)).toEqual(expected);
306
-
307
- store.actions.tooltip.mouseLeaveChart();
308
- flush();
309
-
310
- expect(selectActiveCoordinate(store.state, "axis", "click", undefined)).toEqual(expected);
311
- });
312
-
313
- it("should return coordinates when mouseOverItemIndex is fired and keep them after mouseLeaveItem", () => {
314
- const store = createRechartsStore(preloadedTooltipState);
315
-
316
- const initialState = createRechartsStore().state;
317
- const expected: Coordinate | PolarCoordinate | undefined = { x: 100, y: 150 };
318
- expect(selectActiveCoordinate(initialState, "item", "hover", undefined)).toBe(undefined);
319
-
320
- store.actions.tooltip.setActiveMouseOverItemIndex({
321
- activeIndex: "1",
322
- activeCoordinate: expected,
323
- activeDataKey: undefined,
324
- activeGraphicalItemId: "id-1",
325
- });
326
- flush();
327
-
328
- expect(selectActiveCoordinate(store.state, "item", "hover", undefined)).toEqual(expected);
329
-
330
- // neither of these reset the coordinates and the selector does NOT stop returning them
331
- store.actions.tooltip.mouseLeaveItem();
332
- store.actions.tooltip.mouseLeaveChart();
333
- flush();
334
-
335
- expect(selectActiveCoordinate(store.state, "item", "hover", undefined)).toEqual({
336
- x: 100,
337
- y: 150,
338
- });
339
- // the selector stops returning the coordinates but they should still be present in store for the next animation
340
- expect(store.state.tooltip.itemInteraction.hover.coordinate).toEqual(expected);
341
- });
342
-
343
- it("should return coordinates when mouseClickItemIndex is fired and keep them after mouseLeaveItem", () => {
344
- const store = createRechartsStore(preloadedTooltipState);
345
-
346
- const initialState = createRechartsStore().state;
347
- const expected: Coordinate | PolarCoordinate | undefined = {
348
- x: 100,
349
- y: 150,
350
- };
351
- expect(selectActiveCoordinate(initialState, "item", "click", undefined)).toBe(undefined);
352
-
353
- store.actions.tooltip.setActiveClickItemIndex({
354
- activeIndex: "1",
355
- activeCoordinate: expected,
356
- activeDataKey: undefined,
357
- activeGraphicalItemId: "id-1",
358
- });
359
- flush();
360
-
361
- expect(selectActiveCoordinate(store.state, "item", "click", undefined)).toEqual(expected);
362
-
363
- // neither of these should reset coordinate
364
- store.actions.tooltip.mouseLeaveItem();
365
- store.actions.tooltip.mouseLeaveChart();
366
- flush();
367
-
368
- expect(selectActiveCoordinate(store.state, "item", "click", undefined)).toEqual(expected);
369
- });
370
- });
371
-
372
- describe("selectIsTooltipActive", () => {
373
- it.each(allTooltipCombinations)(
374
- "should return false for initial state for $tooltipEventType $trigger",
375
- ({ tooltipEventType, trigger }) => {
376
- const store = createRechartsStore();
377
- const actual = selectIsTooltipActive(store.state, tooltipEventType, trigger, undefined);
378
- expect(actual).toEqual({
379
- activeIndex: null,
380
- isActive: false,
381
- });
382
- },
383
- );
384
-
385
- it("should return true after setMouseOverAxisIndex", () => {
386
- const store = createRechartsStore();
387
- store.actions.tooltip.setMouseOverAxisIndex({
388
- activeCoordinate: { x: 0, y: 0 },
389
- activeDataKey: "uv",
390
- activeIndex: "1",
391
- });
392
- flush();
393
- const actual = selectIsTooltipActive(store.state, "axis", "hover", undefined);
394
- expect(actual).toEqual({
395
- activeIndex: "1",
396
- isActive: true,
397
- });
398
- });
399
-
400
- it("should return true after setSyncInteraction", () => {
401
- const store = createRechartsStore();
402
- store.actions.tooltip.setSyncInteraction({
403
- active: true,
404
- dataKey: "uv",
405
- index: "1",
406
- label: "Page B",
407
- coordinate: { x: 0, y: 0 },
408
- sourceViewBox: { x: 0, y: 0, width: 100, height: 100 },
409
- graphicalItemId: undefined,
410
- });
411
- flush();
412
- const actual = selectIsTooltipActive(store.state, "axis", "hover", undefined);
413
- expect(actual).toEqual({
414
- activeIndex: "1",
415
- isActive: true,
416
- });
417
- });
418
-
419
- describe.each(allTooltipCombinations)(
420
- "tooltipEventType: $tooltipEventType tooltipTrigger: $trigger",
421
- ({ tooltipEventType, trigger }) => {
422
- it("should return true if a defaultIndex has been set", () => {
423
- const store = createRechartsStore();
424
- expect(selectIsTooltipActive(store.state, tooltipEventType, trigger, "1")).toEqual({
425
- isActive: true,
426
- activeIndex: "1",
427
- });
428
- });
429
- },
430
- );
431
-
432
- describe("trigger: hover", () => {
433
- const trigger = "hover";
434
-
435
- describe.each(allTooltipEventTypes)("tooltipEventType: %s", (tooltipEventType) => {
436
- it("should return false if user is clicking on a graphical item", () => {
437
- // in browser, this is difficult to reproduce - one usually has to mouse over first before clicking
438
- const store = createRechartsStore();
439
- store.actions.tooltip.setActiveClickItemIndex({
440
- activeIndex: "1",
441
- activeDataKey: "dataKey1",
442
- activeCoordinate,
443
- activeGraphicalItemId: "foo",
444
- });
445
- flush();
446
- expect(selectIsTooltipActive(store.state, tooltipEventType, trigger, undefined)).toEqual({
447
- isActive: false,
448
- activeIndex: null,
449
- });
450
- });
451
-
452
- it("should return false if user is clicking on an axis", () => {
453
- // in browser, this is difficult to reproduce - one usually has to mouse over first before clicking
454
- const store = createRechartsStore();
455
- store.actions.tooltip.setMouseClickAxisIndex({
456
- activeIndex: "1",
457
- activeDataKey: "dataKey1",
458
- activeCoordinate,
459
- });
460
- flush();
461
- expect(selectIsTooltipActive(store.state, tooltipEventType, trigger, undefined)).toEqual({
462
- isActive: false,
463
- activeIndex: null,
464
- });
465
- });
466
- });
467
-
468
- describe("tooltipEventType: item", () => {
469
- const tooltipEventType = "item";
470
- it("should return true if user is hovering over a graphical item but not axis", () => {
471
- const store = createRechartsStore();
472
- store.actions.tooltip.setMouseOverAxisIndex({
473
- activeIndex: "1",
474
- activeDataKey: undefined,
475
- activeCoordinate,
476
- });
477
- flush();
478
- expect(selectIsTooltipActive(store.state, tooltipEventType, trigger, undefined)).toEqual({
479
- isActive: false,
480
- activeIndex: null,
481
- });
482
- store.actions.tooltip.setActiveMouseOverItemIndex({
483
- activeIndex: "1",
484
- activeDataKey: "dataKey1",
485
- activeCoordinate,
486
- activeGraphicalItemId: "foo",
487
- });
488
- flush();
489
- expect(selectIsTooltipActive(store.state, tooltipEventType, trigger, undefined)).toEqual({
490
- isActive: true,
491
- activeIndex: "1",
492
- });
493
- store.actions.tooltip.mouseLeaveItem();
494
- flush();
495
- expect(selectIsTooltipActive(store.state, tooltipEventType, trigger, undefined)).toEqual({
496
- isActive: false,
497
- activeIndex: null,
498
- });
499
- });
500
-
501
- it("should return false after mouse leaves the chart element", () => {
502
- const store = createRechartsStore();
503
- store.actions.tooltip.setActiveMouseOverItemIndex({
504
- activeIndex: "1",
505
- activeDataKey: "dataKey1",
506
- activeCoordinate,
507
- activeGraphicalItemId: "id-1",
508
- });
509
- flush();
510
- expect(selectIsTooltipActive(store.state, tooltipEventType, trigger, undefined)).toEqual({
511
- isActive: true,
512
- activeIndex: "1",
513
- });
514
- store.actions.tooltip.mouseLeaveChart();
515
- flush();
516
- expect(selectIsTooltipActive(store.state, tooltipEventType, trigger, undefined)).toEqual({
517
- isActive: false,
518
- activeIndex: null,
519
- });
520
- });
521
- });
522
-
523
- describe("tooltipEventType: axis", () => {
524
- const tooltipEventType = "axis";
525
- it(`should return true if user is hovering over an axis,
526
- and then continue returning true when user hovers over and then leaves a graphical item`, () => {
527
- const store = createRechartsStore();
528
- store.actions.tooltip.setActiveMouseOverItemIndex({
529
- activeIndex: "1",
530
- activeDataKey: "dataKey1",
531
- activeCoordinate,
532
- activeGraphicalItemId: "foo",
533
- });
534
- flush();
535
- expect(selectIsTooltipActive(store.state, tooltipEventType, trigger, undefined)).toEqual({
536
- isActive: false,
537
- activeIndex: null,
538
- });
539
- store.actions.tooltip.setMouseOverAxisIndex({
540
- activeIndex: "1",
541
- activeDataKey: undefined,
542
- activeCoordinate,
543
- });
544
- flush();
545
- expect(selectIsTooltipActive(store.state, tooltipEventType, trigger, undefined)).toEqual({
546
- isActive: true,
547
- activeIndex: "1",
548
- });
549
- store.actions.tooltip.setActiveMouseOverItemIndex({
550
- activeIndex: "1",
551
- activeDataKey: "dataKey1",
552
- activeCoordinate,
553
- activeGraphicalItemId: "foo",
554
- });
555
- flush();
556
- expect(selectIsTooltipActive(store.state, tooltipEventType, trigger, undefined)).toEqual({
557
- isActive: true,
558
- activeIndex: "1",
559
- });
560
- store.actions.tooltip.mouseLeaveItem();
561
- flush();
562
- expect(selectIsTooltipActive(store.state, tooltipEventType, trigger, undefined)).toEqual({
563
- isActive: true,
564
- activeIndex: "1",
565
- });
566
- });
567
-
568
- it.todo("should return false after mouse leaves the chart element");
569
- });
570
- });
571
-
572
- describe("trigger: click", () => {
573
- const trigger = "click";
574
-
575
- describe.each(allTooltipEventTypes)("tooltipEventType: %s", (tooltipEventType) => {
576
- it("should return false if user is hovering over a graphical item", () => {
577
- const store = createRechartsStore();
578
- store.actions.tooltip.setActiveMouseOverItemIndex({
579
- activeIndex: "1",
580
- activeDataKey: "dataKey1",
581
- activeCoordinate,
582
- activeGraphicalItemId: "foo",
583
- });
584
- flush();
585
- expect(selectIsTooltipActive(store.state, tooltipEventType, trigger, undefined)).toEqual({
586
- isActive: false,
587
- activeIndex: null,
588
- });
589
- });
590
-
591
- it("should return false if user is hovering over an axis", () => {
592
- const store = createRechartsStore();
593
- store.actions.tooltip.setMouseOverAxisIndex({
594
- activeIndex: null,
595
- activeDataKey: undefined,
596
- activeCoordinate,
597
- });
598
- flush();
599
- expect(selectIsTooltipActive(store.state, tooltipEventType, trigger, undefined)).toEqual({
600
- isActive: false,
601
- activeIndex: null,
602
- });
603
- });
604
- });
605
-
606
- describe("tooltipEventType: item", () => {
607
- const tooltipEventType = "item";
608
- it(`should return true if user is clicking a graphical item and continue returning true forever,
609
- because recharts does not allow ever turning off a tooltip that was triggered by a click`, () => {
610
- const store = createRechartsStore();
611
- store.actions.tooltip.setActiveClickItemIndex({
612
- activeIndex: "1",
613
- activeDataKey: "dataKey1",
614
- activeCoordinate,
615
- activeGraphicalItemId: "foo",
616
- });
617
- flush();
618
- expect(selectIsTooltipActive(store.state, tooltipEventType, trigger, undefined)).toEqual({
619
- isActive: true,
620
- activeIndex: "1",
621
- });
622
- store.actions.tooltip.setActiveClickItemIndex({
623
- activeIndex: "2",
624
- activeDataKey: undefined,
625
- activeCoordinate,
626
- activeGraphicalItemId: "bar",
627
- });
628
- flush();
629
- expect(selectIsTooltipActive(store.state, tooltipEventType, trigger, undefined)).toEqual({
630
- isActive: true,
631
- activeIndex: "2",
632
- });
633
- store.actions.tooltip.mouseLeaveItem();
634
- flush();
635
- expect(selectIsTooltipActive(store.state, tooltipEventType, trigger, undefined)).toEqual({
636
- isActive: true,
637
- activeIndex: "2",
638
- });
639
- store.actions.tooltip.setMouseClickAxisIndex({
640
- activeIndex: "1",
641
- activeDataKey: undefined,
642
- activeCoordinate,
643
- });
644
- flush();
645
- expect(selectIsTooltipActive(store.state, tooltipEventType, trigger, undefined)).toEqual({
646
- isActive: true,
647
- activeIndex: "2",
648
- });
649
- });
650
-
651
- it("should return false if user is clicking on an axis", () => {
652
- const store = createRechartsStore();
653
- store.actions.tooltip.setMouseClickAxisIndex({
654
- activeIndex: "1",
655
- activeDataKey: "dataKey1",
656
- activeCoordinate,
657
- });
658
- flush();
659
- expect(selectIsTooltipActive(store.state, tooltipEventType, trigger, undefined)).toEqual({
660
- isActive: false,
661
- activeIndex: null,
662
- });
663
- });
664
- });
665
-
666
- describe("tooltipEventType: axis", () => {
667
- const tooltipEventType = "axis";
668
- it("should return true if user is clicking on an axis, and continue returning true forever", () => {
669
- const store = createRechartsStore();
670
- store.actions.tooltip.setMouseClickAxisIndex({
671
- activeIndex: "1",
672
- activeDataKey: "dataKey1",
673
- activeCoordinate,
674
- });
675
- flush();
676
- expect(selectIsTooltipActive(store.state, tooltipEventType, trigger, undefined)).toEqual({
677
- isActive: true,
678
- activeIndex: "1",
679
- });
680
- store.actions.tooltip.setMouseClickAxisIndex({
681
- activeIndex: "2",
682
- activeDataKey: undefined,
683
- activeCoordinate,
684
- });
685
- flush();
686
- expect(selectIsTooltipActive(store.state, tooltipEventType, trigger, undefined)).toEqual({
687
- isActive: true,
688
- activeIndex: "2",
689
- });
690
- store.actions.tooltip.mouseLeaveItem();
691
- flush();
692
- expect(selectIsTooltipActive(store.state, tooltipEventType, trigger, undefined)).toEqual({
693
- isActive: true,
694
- activeIndex: "2",
695
- });
696
- store.actions.tooltip.setActiveClickItemIndex({
697
- activeIndex: "1",
698
- activeDataKey: "dataKey1",
699
- activeCoordinate,
700
- activeGraphicalItemId: "id-1",
701
- });
702
- flush();
703
- expect(selectIsTooltipActive(store.state, tooltipEventType, trigger, undefined)).toEqual({
704
- isActive: true,
705
- activeIndex: "2",
706
- });
707
- });
708
- });
709
- });
710
- });
711
-
712
- describe("selectActiveIndexFromChartPointer", () => {
713
- const exampleChartPointer: RelativePointer = {
714
- relativeX: 10,
715
- relativeY: 10,
716
- };
717
-
718
- it("should return active props after mouse hover", () => {
719
- const tooltipActiveSpy = vi.fn();
720
- mockGetBoundingClientRect({ width: 100, height: 100 });
721
- const Comp = (): null => {
722
- const props = useAppSelectorWithStableTest((state) =>
723
- selectActivePropsFromChartPointer(state, exampleChartPointer),
724
- );
725
- createEffect(
726
- () => props(),
727
- (value) => tooltipActiveSpy(value),
728
- );
729
- return null;
730
- };
731
- render(() => (
732
- <LineChart data={pageData} width={100} height={100}>
733
- <Line dataKey="pv" />
734
- <Comp />
735
- </LineChart>
736
- ));
737
- flush();
738
-
739
- expect(tooltipActiveSpy).toHaveBeenLastCalledWith({
740
- activeCoordinate: {
741
- x: 5,
742
- y: 10,
743
- },
744
- activeIndex: "0",
745
- });
746
- });
747
- });
748
-
749
- describe("selectTooltipState.tooltipItemPayloads", () => {
750
- it("should return undefined when called outside of store context", () => {
751
- const spy = vi.fn();
752
- const Comp = (): null => {
753
- const payload = useAppSelectorWithStableTest(selectTooltipState);
754
- createEffect(
755
- () => payload(),
756
- (value) => spy(value),
757
- );
758
- return null;
759
- };
760
- render(() => <Comp />);
761
- flush();
762
- expect(spy).toHaveBeenCalledWith(undefined);
763
- });
764
-
765
- it("should return empty array for initial state", () => {
766
- const store = createRechartsStore();
767
- expect(selectTooltipState(store.state).tooltipItemPayloads).toEqual([]);
768
- });
769
-
770
- it("should return empty array in an empty chart", () => {
771
- const spy = vi.fn();
772
- const Comp = (): null => {
773
- const tooltipState = useAppSelectorWithStableTest(selectTooltipState);
774
- createEffect(
775
- () => tooltipState()?.tooltipItemPayloads.map((tp) => tp.dataDefinedOnItem),
776
- (value) => spy(value),
777
- );
778
- return null;
779
- };
780
- render(() => (
781
- <BarChart data={PageData} width={100} height={100}>
782
- <Comp />
783
- </BarChart>
784
- ));
785
- flush();
786
- expectLastCalledWith(spy, []);
787
- });
788
-
789
- it("should return all tooltip payloads defined on graphical items in ComposedChart", () => {
790
- const spy = vi.fn();
791
- const Comp = (): null => {
792
- const tooltipState = useAppSelectorWithStableTest(selectTooltipState);
793
- createEffect(
794
- () => tooltipState()?.tooltipItemPayloads.map((tp) => tp.dataDefinedOnItem),
795
- (value) => spy(value),
796
- );
797
- return null;
798
- };
799
- const data1 = [{ x: 1 }, { x: 2 }, { x: 3 }];
800
- const data2 = [{ x: 10 }, { x: 20 }, { x: 30 }];
801
- render(() => (
802
- <ComposedChart data={PageData} width={100} height={100}>
803
- <Area dataKey="x" data={data1} />
804
- <Area dataKey="x" data={data2} />
805
- <Line data={[4, 5, 6]} />
806
- <Line data={[40, 50, 60]} />
807
- <Scatter data={[{ x: 7 }, { x: 8 }, { x: 9 }]} dataKey="x" />
808
- <Scatter data={[{ y: 70 }, { y: 80 }, { y: 90 }]} dataKey="y" />
809
- <Comp />
810
- </ComposedChart>
811
- ));
812
- flush();
813
- // two of these elements will send the data as defined; Scatter decides to pre-chew it
814
- expectLastCalledWith(spy, [
815
- data1,
816
- data2,
817
- [4, 5, 6],
818
- [40, 50, 60],
819
- [
820
- [
821
- {
822
- dataKey: "x",
823
- graphicalItemId: expect.stringMatching(/^recharts-scatter-.+/),
824
- name: undefined,
825
- payload: {
826
- x: 7,
827
- },
828
- type: undefined,
829
- unit: "",
830
- value: 7,
831
- },
832
- {
833
- dataKey: "x",
834
- graphicalItemId: expect.stringMatching(/^recharts-scatter-.+/),
835
- name: undefined,
836
- payload: {
837
- x: 7,
838
- },
839
- type: undefined,
840
- unit: "",
841
- value: 7,
842
- },
843
- ],
844
- [
845
- {
846
- dataKey: "x",
847
- graphicalItemId: expect.stringMatching(/^recharts-scatter-.+/),
848
- name: undefined,
849
- payload: {
850
- x: 8,
851
- },
852
- type: undefined,
853
- unit: "",
854
- value: 8,
855
- },
856
- {
857
- dataKey: "x",
858
- graphicalItemId: expect.stringMatching(/^recharts-scatter-.+/),
859
- name: undefined,
860
- payload: {
861
- x: 8,
862
- },
863
- type: undefined,
864
- unit: "",
865
- value: 8,
866
- },
867
- ],
868
- [
869
- {
870
- dataKey: "x",
871
- graphicalItemId: expect.stringMatching(/^recharts-scatter-.+/),
872
- name: undefined,
873
- payload: {
874
- x: 9,
875
- },
876
- type: undefined,
877
- unit: "",
878
- value: 9,
879
- },
880
- {
881
- dataKey: "x",
882
- graphicalItemId: expect.stringMatching(/^recharts-scatter-.+/),
883
- name: undefined,
884
- payload: {
885
- x: 9,
886
- },
887
- type: undefined,
888
- unit: "",
889
- value: 9,
890
- },
891
- ],
892
- ],
893
- [
894
- [
895
- {
896
- dataKey: "y",
897
- graphicalItemId: expect.stringMatching(/^recharts-scatter-.+/),
898
- name: undefined,
899
- payload: {
900
- y: 70,
901
- },
902
- type: undefined,
903
- unit: "",
904
- value: 70,
905
- },
906
- {
907
- dataKey: "y",
908
- graphicalItemId: expect.stringMatching(/^recharts-scatter-.+/),
909
- name: undefined,
910
- payload: {
911
- y: 70,
912
- },
913
- type: undefined,
914
- unit: "",
915
- value: 70,
916
- },
917
- ],
918
- [
919
- {
920
- dataKey: "y",
921
- graphicalItemId: expect.stringMatching(/^recharts-scatter-.+/),
922
- name: undefined,
923
- payload: {
924
- y: 80,
925
- },
926
- type: undefined,
927
- unit: "",
928
- value: 80,
929
- },
930
- {
931
- dataKey: "y",
932
- graphicalItemId: expect.stringMatching(/^recharts-scatter-.+/),
933
- name: undefined,
934
- payload: {
935
- y: 80,
936
- },
937
- type: undefined,
938
- unit: "",
939
- value: 80,
940
- },
941
- ],
942
- [
943
- {
944
- dataKey: "y",
945
- graphicalItemId: expect.stringMatching(/^recharts-scatter-.+/),
946
- name: undefined,
947
- payload: {
948
- y: 90,
949
- },
950
- type: undefined,
951
- unit: "",
952
- value: 90,
953
- },
954
- {
955
- dataKey: "y",
956
- graphicalItemId: expect.stringMatching(/^recharts-scatter-.+/),
957
- name: undefined,
958
- payload: {
959
- y: 90,
960
- },
961
- type: undefined,
962
- unit: "",
963
- value: 90,
964
- },
965
- ],
966
- ],
967
- ]);
968
- });
969
-
970
- it("should return all payloads in PieChart", () => {
971
- const spy = vi.fn();
972
- const Comp = (): null => {
973
- const tooltipState = useAppSelectorWithStableTest(selectTooltipState);
974
- createEffect(
975
- () => tooltipState()?.tooltipItemPayloads.map((tp) => tp.dataDefinedOnItem),
976
- (value) => spy(value),
977
- );
978
- return null;
979
- };
980
- render(() => (
981
- <PieChart width={100} height={100}>
982
- <Comp />
983
- <Pie data={[{ x: 1 }, { x: 2 }, { x: 3 }]} dataKey="x" id="pie-1" />
984
- <Pie data={[{ y: 10 }, { y: 20 }, { y: 30 }]} dataKey="y" id="pie-2" />
985
- </PieChart>
986
- ));
987
- flush();
988
- expectLastCalledWith(spy, [
989
- [
990
- [
991
- {
992
- color: "#808080",
993
- dataKey: "x",
994
- fill: "#808080",
995
- name: 0,
996
- payload: { x: 1 },
997
- type: undefined,
998
- value: 1,
999
- graphicalItemId: "pie-1",
1000
- },
1001
- ],
1002
- [
1003
- {
1004
- color: "#808080",
1005
- dataKey: "x",
1006
- fill: "#808080",
1007
- name: 1,
1008
- payload: { x: 2 },
1009
- type: undefined,
1010
- value: 2,
1011
- graphicalItemId: "pie-1",
1012
- },
1013
- ],
1014
- [
1015
- {
1016
- color: "#808080",
1017
- dataKey: "x",
1018
- fill: "#808080",
1019
- name: 2,
1020
- payload: { x: 3 },
1021
- type: undefined,
1022
- value: 3,
1023
- graphicalItemId: "pie-1",
1024
- },
1025
- ],
1026
- ],
1027
- [
1028
- [
1029
- {
1030
- color: "#808080",
1031
- dataKey: "y",
1032
- fill: "#808080",
1033
- name: 0,
1034
- payload: { y: 10 },
1035
- type: undefined,
1036
- value: 10,
1037
- graphicalItemId: "pie-2",
1038
- },
1039
- ],
1040
- [
1041
- {
1042
- color: "#808080",
1043
- dataKey: "y",
1044
- fill: "#808080",
1045
- name: 1,
1046
- payload: { y: 20 },
1047
- type: undefined,
1048
- value: 20,
1049
- graphicalItemId: "pie-2",
1050
- },
1051
- ],
1052
- [
1053
- {
1054
- color: "#808080",
1055
- dataKey: "y",
1056
- fill: "#808080",
1057
- name: 2,
1058
- payload: { y: 30 },
1059
- type: undefined,
1060
- value: 30,
1061
- graphicalItemId: "pie-2",
1062
- },
1063
- ],
1064
- ],
1065
- ]);
1066
- });
1067
- });
1068
-
1069
- describe("selectActiveIndex", () => {
1070
- it.each(allTooltipCombinations)(
1071
- "should return null for initial state for $tooltipEventType $trigger",
1072
- ({ tooltipEventType, trigger }) => {
1073
- const store = createRechartsStore();
1074
- const actual = selectActiveIndex(store.state, tooltipEventType, trigger, undefined);
1075
- expect(actual).toEqual(null);
1076
- },
1077
- );
1078
-
1079
- it("should return index after setMouseOverAxisIndex", () => {
1080
- const store = createRechartsStore();
1081
- store.actions.tooltip.setMouseOverAxisIndex({
1082
- activeCoordinate: { x: 0, y: 0 },
1083
- activeDataKey: "uv",
1084
- activeIndex: "1",
1085
- });
1086
- flush();
1087
- const actual = selectActiveIndex(store.state, "axis", "hover", undefined);
1088
- expect(actual).toEqual("1");
1089
- });
1090
-
1091
- it("should return index after setSyncInteraction", () => {
1092
- const store = createRechartsStore();
1093
- store.actions.tooltip.setSyncInteraction({
1094
- active: true,
1095
- dataKey: "uv",
1096
- index: "2",
1097
- label: "Page B",
1098
- coordinate: { x: 0, y: 0 },
1099
- sourceViewBox: { x: 0, y: 0, width: 100, height: 100 },
1100
- graphicalItemId: undefined,
1101
- });
1102
- flush();
1103
- const actual = selectActiveIndex(store.state, "axis", "hover", undefined);
1104
- expect(actual).toEqual("2");
1105
- });
1106
-
1107
- it("should return null for initial state", () => {
1108
- const initialState = createRechartsStore().state;
1109
- const expected: TooltipIndex = null;
1110
- expect(selectActiveIndex(initialState, "axis", "hover", undefined)).toBe(expected);
1111
- expect(selectActiveIndex(initialState, "axis", "click", undefined)).toBe(expected);
1112
- expect(selectActiveIndex(initialState, "item", "hover", undefined)).toBe(expected);
1113
- expect(selectActiveIndex(initialState, "item", "click", undefined)).toBe(expected);
1114
- });
1115
-
1116
- it("should return defaultIndex if it is defined", () => {
1117
- const initialState = createRechartsStore().state;
1118
- const expected: TooltipIndex = "7";
1119
- expect(selectActiveIndex(initialState, "axis", "hover", "7")).toBe(expected);
1120
- expect(selectActiveIndex(initialState, "axis", "click", "7")).toBe(expected);
1121
- expect(selectActiveIndex(initialState, "item", "hover", "7")).toBe(expected);
1122
- expect(selectActiveIndex(initialState, "item", "click", "7")).toBe(expected);
1123
- });
1124
-
1125
- it("should ignore defaultIndex if item hover index is set and active", () => {
1126
- const state = produceState((draft) => {
1127
- draft.tooltip.itemInteraction.hover.active = true;
1128
- draft.tooltip.itemInteraction.hover.index = "7";
1129
- });
1130
- expect(selectActiveIndex(state, "axis", "hover", "8")).toBe("8" satisfies TooltipIndex);
1131
- expect(selectActiveIndex(state, "axis", "click", "8")).toBe("8" satisfies TooltipIndex);
1132
- expect(selectActiveIndex(state, "item", "hover", "8")).toBe("7" satisfies TooltipIndex);
1133
- expect(selectActiveIndex(state, "item", "click", "8")).toBe("8" satisfies TooltipIndex);
1134
- });
1135
-
1136
- it("should return item hover index", () => {
1137
- const state = produceState((draft) => {
1138
- draft.tooltip.itemInteraction.hover.active = true;
1139
- draft.tooltip.itemInteraction.hover.index = "7";
1140
- });
1141
- const expected: TooltipIndex = "7";
1142
- expect(selectActiveIndex(state, "item", "hover", "9")).toBe(expected);
1143
- });
1144
-
1145
- it("should return item click index", () => {
1146
- const state = produceState((draft) => {
1147
- draft.tooltip.itemInteraction.click.active = true;
1148
- draft.tooltip.itemInteraction.click.index = "7";
1149
- });
1150
- const expected: TooltipIndex = "7";
1151
- expect(selectActiveIndex(state, "item", "click", "11")).toBe(expected);
1152
- });
1153
-
1154
- it("should return axis hover index", () => {
1155
- const state = produceState((draft) => {
1156
- draft.tooltip.axisInteraction.hover.active = true;
1157
- draft.tooltip.axisInteraction.hover.index = "7";
1158
- });
1159
- const expected: TooltipIndex = "7";
1160
- expect(selectActiveIndex(state, "axis", "hover", "13")).toBe(expected);
1161
- });
1162
-
1163
- it("should return axis click index", () => {
1164
- const state = produceState((draft) => {
1165
- draft.tooltip.axisInteraction.click.active = true;
1166
- draft.tooltip.axisInteraction.click.index = "7";
1167
- });
1168
- const expected: TooltipIndex = "7";
1169
- expect(selectActiveIndex(state, "axis", "click", "17")).toBe(expected);
1170
- });
1171
- });
1172
-
1173
- describe("selectTooltipPayload", () => {
1174
- it.each(allTooltipCombinations)(
1175
- "should return undefined when outside of store context for $tooltipEventType $trigger",
1176
- ({ tooltipEventType, trigger }) => {
1177
- const spy = vi.fn();
1178
- const Comp = (): null => {
1179
- const payload = useAppSelector((state) =>
1180
- selectTooltipPayload(state, tooltipEventType, trigger, undefined),
1181
- );
1182
- createEffect(
1183
- () => payload(),
1184
- (value) => spy(value),
1185
- );
1186
- return null;
1187
- };
1188
- render(() => <Comp />);
1189
- flush();
1190
- expect(spy).toHaveBeenCalledWith(undefined);
1191
- },
1192
- );
1193
-
1194
- it.each(allTooltipCombinations)(
1195
- "initial state should return undefined for $tooltipEventType $trigger",
1196
- ({ tooltipEventType, trigger }) => {
1197
- const store = createRechartsStore();
1198
- expect(selectTooltipPayload(store.state, tooltipEventType, trigger, undefined)).toEqual(
1199
- undefined,
1200
- );
1201
- },
1202
- );
1203
-
1204
- it("should return settings and data from axis hover, if activeIndex is set for the item", () => {
1205
- const store = createRechartsStore(preloadedTooltipState);
1206
- const tooltipSettings1: TooltipPayloadConfiguration = {
1207
- getPosition: noop,
1208
- settings: { nameKey: "y", graphicalItemId: "graphicalItemId1" },
1209
- dataDefinedOnItem: undefined,
1210
- };
1211
- const expectedEntry1: TooltipPayloadEntry = {
1212
- payload: undefined,
1213
- dataKey: undefined,
1214
- name: undefined,
1215
- nameKey: "y",
1216
- value: undefined,
1217
- graphicalItemId: "graphicalItemId1",
1218
- };
1219
- const tooltipSettings2: TooltipPayloadConfiguration = {
1220
- getPosition: noop,
1221
- settings: {
1222
- stroke: "red",
1223
- fill: "green",
1224
- dataKey: "x",
1225
- nameKey: "y",
1226
- name: "foo",
1227
- unit: "bar",
1228
- graphicalItemId: "graphicalItemId2",
1229
- },
1230
- dataDefinedOnItem: [
1231
- { x: 8, y: 9 },
1232
- { x: 10, y: 11 },
1233
- ],
1234
- };
1235
- const expectedEntry2: TooltipPayloadEntry = {
1236
- name: 11,
1237
- dataKey: "x",
1238
- nameKey: "y",
1239
- stroke: "red",
1240
- fill: "green",
1241
- payload: { x: 10, y: 11 },
1242
- value: 10,
1243
- unit: "bar",
1244
- graphicalItemId: "graphicalItemId2",
1245
- };
1246
- store.actions.tooltip.addTooltipEntrySettings(tooltipSettings1);
1247
- store.actions.tooltip.addTooltipEntrySettings(tooltipSettings2);
1248
- flush();
1249
- expect(selectTooltipPayload(store.state, "axis", "hover", undefined)).toEqual(undefined);
1250
- store.actions.tooltip.setMouseOverAxisIndex({
1251
- activeIndex: "1",
1252
- activeDataKey: undefined,
1253
- activeCoordinate: tooltipActiveCoordinate,
1254
- });
1255
- flush();
1256
- expect(selectTooltipPayload(store.state, "axis", "hover", undefined)).toEqual([
1257
- expectedEntry1,
1258
- expectedEntry2,
1259
- ]);
1260
- });
1261
-
1262
- it("should return settings and data if defaultIndex is provided", () => {
1263
- const store = createRechartsStore(preloadedTooltipState);
1264
- const tooltipSettings1: TooltipPayloadConfiguration = {
1265
- getPosition: noop,
1266
- settings: { nameKey: "y", graphicalItemId: "graphicalItemId1" },
1267
- dataDefinedOnItem: undefined,
1268
- };
1269
- const expectedEntry1: TooltipPayloadEntry = {
1270
- payload: undefined,
1271
- dataKey: undefined,
1272
- name: undefined,
1273
- nameKey: "y",
1274
- value: undefined,
1275
- graphicalItemId: "graphicalItemId1",
1276
- };
1277
- const tooltipSettings2: TooltipPayloadConfiguration = {
1278
- getPosition: noop,
1279
- settings: {
1280
- stroke: "red",
1281
- fill: "green",
1282
- dataKey: "x",
1283
- nameKey: "y",
1284
- name: "foo",
1285
- unit: "bar",
1286
- graphicalItemId: "graphicalItemId2",
1287
- },
1288
- dataDefinedOnItem: [
1289
- { x: 8, y: 9 },
1290
- { x: 10, y: 11 },
1291
- ],
1292
- };
1293
- const expectedEntry2: TooltipPayloadEntry = {
1294
- name: 11,
1295
- dataKey: "x",
1296
- nameKey: "y",
1297
- stroke: "red",
1298
- fill: "green",
1299
- payload: { x: 10, y: 11 },
1300
- value: 10,
1301
- unit: "bar",
1302
- graphicalItemId: "graphicalItemId2",
1303
- };
1304
- store.actions.tooltip.addTooltipEntrySettings(tooltipSettings1);
1305
- store.actions.tooltip.addTooltipEntrySettings(tooltipSettings2);
1306
- flush();
1307
- expect(selectTooltipPayload(store.state, "axis", "hover", "1")).toEqual([
1308
- expectedEntry1,
1309
- expectedEntry2,
1310
- ]);
1311
- });
1312
-
1313
- it("should fill in chartData, if it is not defined on the item for item hover", () => {
1314
- const store = createRechartsStore(preloadedTooltipState);
1315
- const tooltipSettings: TooltipPayloadConfiguration = {
1316
- getPosition: noop,
1317
- settings: {
1318
- stroke: "red",
1319
- fill: "green",
1320
- dataKey: "y",
1321
- nameKey: "x",
1322
- name: "foo",
1323
- unit: "bar",
1324
- graphicalItemId: "graphicalItemId1",
1325
- },
1326
- dataDefinedOnItem: undefined,
1327
- };
1328
- store.actions.tooltip.addTooltipEntrySettings(tooltipSettings);
1329
- store.actions.chartData.setChartData([
1330
- { x: 1, y: 2 },
1331
- { x: 3, y: 4 },
1332
- ]);
1333
- store.actions.tooltip.setActiveMouseOverItemIndex({
1334
- activeIndex: "0",
1335
- activeDataKey: "y",
1336
- activeCoordinate: tooltipActiveCoordinate,
1337
- activeGraphicalItemId: tooltipSettings.settings.graphicalItemId,
1338
- });
1339
- flush();
1340
- const expectedEntry: TooltipPayloadEntry = {
1341
- name: 1,
1342
- dataKey: "y",
1343
- nameKey: "x",
1344
- stroke: "red",
1345
- fill: "green",
1346
- payload: { x: 1, y: 2 },
1347
- value: 2,
1348
- unit: "bar",
1349
- graphicalItemId: "graphicalItemId1",
1350
- };
1351
- expect(selectTooltipPayload(store.state, "item", "hover", undefined)).toEqual([expectedEntry]);
1352
- });
1353
-
1354
- it("should return sliced data if set by Brush for item hover", () => {
1355
- const store = createRechartsStore(preloadedTooltipState);
1356
- const tooltipSettings: TooltipPayloadConfiguration = {
1357
- getPosition: noop,
1358
- settings: {
1359
- stroke: "red",
1360
- fill: "green",
1361
- dataKey: "y",
1362
- nameKey: "x",
1363
- name: "foo",
1364
- graphicalItemId: "graphicalItemId3",
1365
- },
1366
- dataDefinedOnItem: [
1367
- { x: 1, y: 2 },
1368
- { x: 3, y: 4 },
1369
- ],
1370
- };
1371
- store.actions.tooltip.addTooltipEntrySettings(tooltipSettings);
1372
- store.actions.chartData.setChartData([
1373
- { x: 1, y: 2 },
1374
- { x: 3, y: 4 },
1375
- ]);
1376
- flush();
1377
- expect(selectTooltipPayload(store.state, "item", "hover", undefined)).toEqual(undefined);
1378
- store.actions.tooltip.setActiveMouseOverItemIndex({
1379
- activeIndex: "0",
1380
- activeDataKey: "y",
1381
- activeCoordinate: tooltipActiveCoordinate,
1382
- activeGraphicalItemId: tooltipSettings.settings.graphicalItemId,
1383
- });
1384
- store.actions.chartData.setDataStartEndIndexes({ startIndex: 1, endIndex: 10 });
1385
- flush();
1386
- const expectedEntry: TooltipPayloadEntry = {
1387
- name: 3,
1388
- dataKey: "y",
1389
- nameKey: "x",
1390
- stroke: "red",
1391
- fill: "green",
1392
- payload: { x: 3, y: 4 },
1393
- value: 4,
1394
- graphicalItemId: "graphicalItemId3",
1395
- };
1396
- expect(selectTooltipPayload(store.state, "item", "hover", undefined)).toEqual([expectedEntry]);
1397
- });
1398
-
1399
- it("should return array of payloads for Scatter because Scatter naturally does its own special thing", () => {
1400
- const chartDataState: ChartDataState = initialChartDataState;
1401
- const actual: TooltipPayload | undefined = combineTooltipPayload(
1402
- [exampleTooltipPayloadConfiguration1],
1403
- "0",
1404
- chartDataState,
1405
- undefined,
1406
- undefined,
1407
- arrayTooltipSearcher,
1408
- "item",
1409
- );
1410
- const expectedEntry1: TooltipPayloadEntry = {
1411
- name: "stature",
1412
- color: "color",
1413
- fill: "fill",
1414
- unit: "cm",
1415
- value: 100,
1416
- payload: { x: 100, y: 200, z: 200 },
1417
- dataKey: "x",
1418
- nameKey: "nameKey1",
1419
- graphicalItemId: "graphicalItemId1",
1420
- };
1421
- const expectedEntry2: TooltipPayloadEntry = {
1422
- name: "weight",
1423
- color: "color",
1424
- fill: "fill",
1425
- unit: "kg",
1426
- value: 200,
1427
- payload: { x: 100, y: 200, z: 200 },
1428
- dataKey: "y",
1429
- nameKey: "nameKey1",
1430
- graphicalItemId: "graphicalItemId1",
1431
- };
1432
- expect(actual).toEqual([expectedEntry1, expectedEntry2]);
1433
- });
1434
-
1435
- it("should use dataKey from tooltipAxis, if item dataKey is undefined", () => {
1436
- const tooltipPayloadConfiguration: TooltipPayloadConfiguration = {
1437
- settings: { nameKey: undefined, graphicalItemId: "graphicalItemId1" },
1438
- dataDefinedOnItem: [],
1439
- getPosition: noop,
1440
- };
1441
- const chartDataState: ChartDataState = initialChartDataState;
1442
- const actual: TooltipPayload | undefined = combineTooltipPayload(
1443
- [tooltipPayloadConfiguration],
1444
- "0",
1445
- chartDataState,
1446
- "dataKeyOnAxis",
1447
- undefined,
1448
- arrayTooltipSearcher,
1449
- "axis",
1450
- );
1451
- const expected: TooltipPayloadEntry = {
1452
- dataKey: "dataKeyOnAxis",
1453
- payload: undefined,
1454
- value: undefined,
1455
- graphicalItemId: "graphicalItemId1",
1456
- };
1457
- expect(actual).toEqual([expected]);
1458
- });
1459
- });
1460
-
1461
- describe("selectTooltipPayloadConfigurations", () => {
1462
- let exampleStore: ReturnType<typeof createRechartsStore>;
1463
-
1464
- beforeEach(() => {
1465
- exampleStore = createRechartsStore();
1466
- exampleStore.actions.tooltip.addTooltipEntrySettings(exampleTooltipPayloadConfiguration1);
1467
- exampleStore.actions.tooltip.addTooltipEntrySettings(exampleTooltipPayloadConfiguration2);
1468
- flush();
1469
- });
1470
-
1471
- describe.each(allTooltipCombinations)(
1472
- "tooltipEventType: $tooltipEventType tooltipTrigger: $trigger",
1473
- ({ tooltipEventType, trigger }) => {
1474
- it("should return undefined when outside of store context", () => {
1475
- const spy = vi.fn();
1476
- const Comp = (): null => {
1477
- const result = useAppSelector((state) =>
1478
- selectTooltipPayloadConfigurations(state, tooltipEventType, trigger, undefined),
1479
- );
1480
- createEffect(
1481
- () => result(),
1482
- (value) => spy(value),
1483
- );
1484
- return null;
1485
- };
1486
- render(() => <Comp />);
1487
- flush();
1488
- expect(spy).toHaveBeenCalledWith(undefined);
1489
- });
1490
-
1491
- it("should return empty array from empty state", () => {
1492
- const store = createRechartsStore();
1493
- expect(
1494
- selectTooltipPayloadConfigurations(store.state, tooltipEventType, trigger, undefined),
1495
- ).toEqual([]);
1496
- });
1497
- },
1498
- );
1499
-
1500
- describe.each<TooltipTrigger>(["hover", "click"])(
1501
- 'tooltipEventType: "axis" tooltipTrigger: %s',
1502
- (trigger) => {
1503
- it("should return unfiltered configurations with tooltipEventType: axis", () => {
1504
- const expected: ReadonlyArray<TooltipPayloadConfiguration> = [
1505
- exampleTooltipPayloadConfiguration1,
1506
- exampleTooltipPayloadConfiguration2,
1507
- ];
1508
- expect(
1509
- selectTooltipPayloadConfigurations(exampleStore.state, "axis", trigger, undefined),
1510
- ).toEqual(expected);
1511
- });
1512
- },
1513
- );
1514
-
1515
- it("should filter by dataKey with tooltipEventType: item and trigger: hover", () => {
1516
- exampleStore.actions.tooltip.setActiveMouseOverItemIndex({
1517
- activeIndex: "1",
1518
- activeDataKey: "dataKey1",
1519
- activeCoordinate: undefined,
1520
- activeGraphicalItemId: exampleTooltipPayloadConfiguration1.settings.graphicalItemId,
1521
- });
1522
- flush();
1523
- expect(
1524
- selectTooltipPayloadConfigurations(exampleStore.state, "item", "hover", undefined),
1525
- ).toEqual([exampleTooltipPayloadConfiguration1]);
1526
- exampleStore.actions.tooltip.setActiveMouseOverItemIndex({
1527
- activeIndex: "1",
1528
- activeDataKey: "dataKey2",
1529
- activeCoordinate: undefined,
1530
- activeGraphicalItemId: exampleTooltipPayloadConfiguration2.settings.graphicalItemId,
1531
- });
1532
- flush();
1533
- expect(
1534
- selectTooltipPayloadConfigurations(exampleStore.state, "item", "hover", undefined),
1535
- ).toEqual([exampleTooltipPayloadConfiguration2]);
1536
- });
1537
-
1538
- it("should return nothing if the tooltipEventType is hover but the only interactions are clicks", () => {
1539
- exampleStore.actions.tooltip.setActiveClickItemIndex({
1540
- activeIndex: "1",
1541
- activeDataKey: "dataKey1",
1542
- activeGraphicalItemId: "foo",
1543
- activeCoordinate: undefined,
1544
- });
1545
- flush();
1546
- expect(
1547
- selectTooltipPayloadConfigurations(exampleStore.state, "item", "hover", undefined),
1548
- ).toEqual([]);
1549
- exampleStore.actions.tooltip.setMouseClickAxisIndex({
1550
- activeIndex: "1",
1551
- activeDataKey: "dataKey2",
1552
- });
1553
- flush();
1554
- expect(
1555
- selectTooltipPayloadConfigurations(exampleStore.state, "item", "hover", undefined),
1556
- ).toEqual([]);
1557
- });
1558
-
1559
- it("should return nothing if the tooltipEventType is click but the only interactions are hovers", () => {
1560
- exampleStore.actions.tooltip.setActiveMouseOverItemIndex({
1561
- activeIndex: "1",
1562
- activeDataKey: "dataKey1",
1563
- activeCoordinate: undefined,
1564
- activeGraphicalItemId: "foo",
1565
- });
1566
- flush();
1567
- expect(
1568
- selectTooltipPayloadConfigurations(exampleStore.state, "item", "click", undefined),
1569
- ).toEqual([]);
1570
- exampleStore.actions.tooltip.setMouseOverAxisIndex({
1571
- activeIndex: "1",
1572
- activeDataKey: "dataKey2",
1573
- });
1574
- flush();
1575
- expect(
1576
- selectTooltipPayloadConfigurations(exampleStore.state, "item", "click", undefined),
1577
- ).toEqual([]);
1578
- });
1579
-
1580
- describe("with defaultIndex", () => {
1581
- it("should return the first configuration if the tooltipEventType is item and the defaultIndex is set, before user started interacting with the chart", () => {
1582
- expect(selectTooltipPayloadConfigurations(exampleStore.state, "item", "hover", "1")).toEqual([
1583
- exampleTooltipPayloadConfiguration1,
1584
- ]);
1585
- });
1586
-
1587
- it("should return configuration that matches the dataKey after user has started interacting", () => {
1588
- exampleStore.actions.tooltip.setActiveMouseOverItemIndex({
1589
- activeIndex: "1",
1590
- activeDataKey: "dataKey2",
1591
- activeCoordinate: undefined,
1592
- activeGraphicalItemId: exampleTooltipPayloadConfiguration2.settings.graphicalItemId,
1593
- });
1594
- flush();
1595
- expect(selectTooltipPayloadConfigurations(exampleStore.state, "item", "hover", "1")).toEqual([
1596
- exampleTooltipPayloadConfiguration2,
1597
- ]);
1598
- });
1599
-
1600
- it("should return empty array if user interacted with a an item that is not represented in the tooltip payloads", () => {
1601
- exampleStore.actions.tooltip.setActiveMouseOverItemIndex({
1602
- activeIndex: "1",
1603
- activeGraphicalItemId: "id-notPresentInPayloads",
1604
- activeCoordinate: undefined,
1605
- activeDataKey: "dataKey-notPresentInPayloads",
1606
- });
1607
- flush();
1608
- expect(selectTooltipPayloadConfigurations(exampleStore.state, "item", "hover", "1")).toEqual(
1609
- [],
1610
- );
1611
- });
1612
- });
1613
- });