solid-recharts 1.0.0 → 2.0.0-beta.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (488) hide show
  1. package/package.json +4 -6
  2. package/src/animation/AnimatedItems.tsx +4 -2
  3. package/src/animation/CSSTransitionAnimate.tsx +39 -41
  4. package/src/animation/JavascriptAnimate.tsx +41 -45
  5. package/src/cartesian/Area.tsx +4 -4
  6. package/src/cartesian/AreaRevealShape.tsx +1 -1
  7. package/src/cartesian/Bar.tsx +21 -33
  8. package/src/cartesian/BarStack.tsx +5 -5
  9. package/src/cartesian/Brush.tsx +15 -19
  10. package/src/cartesian/CartesianAxis.tsx +4 -4
  11. package/src/cartesian/CartesianGrid.tsx +5 -5
  12. package/src/cartesian/ErrorBar.tsx +7 -9
  13. package/src/cartesian/Funnel.tsx +3 -3
  14. package/src/cartesian/GraphicalItemClipPath.tsx +1 -1
  15. package/src/cartesian/Line.tsx +16 -18
  16. package/src/cartesian/LineDrawShape.tsx +13 -14
  17. package/src/cartesian/ReferenceArea.tsx +4 -4
  18. package/src/cartesian/ReferenceDot.tsx +4 -4
  19. package/src/cartesian/ReferenceLine.tsx +4 -4
  20. package/src/cartesian/RenderedTicksReporter.tsx +17 -19
  21. package/src/cartesian/Scatter.tsx +3 -3
  22. package/src/cartesian/XAxis.tsx +1 -1
  23. package/src/cartesian/YAxis.tsx +33 -35
  24. package/src/cartesian/ZAxis.tsx +2 -3
  25. package/src/chart/AreaChart.tsx +1 -1
  26. package/src/chart/BarChart.tsx +1 -1
  27. package/src/chart/CartesianChart.tsx +3 -4
  28. package/src/chart/CategoricalChart.tsx +5 -5
  29. package/src/chart/ComposedChart.tsx +1 -1
  30. package/src/chart/FunnelChart.tsx +1 -1
  31. package/src/chart/LineChart.tsx +1 -1
  32. package/src/chart/PieChart.tsx +3 -4
  33. package/src/chart/PolarChart.tsx +3 -4
  34. package/src/chart/RadarChart.tsx +3 -4
  35. package/src/chart/RadialBarChart.tsx +3 -7
  36. package/src/chart/RechartsWrapper.tsx +24 -14
  37. package/src/chart/Sankey.tsx +6 -9
  38. package/src/chart/ScatterChart.tsx +1 -1
  39. package/src/chart/SunburstChart.tsx +4 -5
  40. package/src/chart/Treemap.tsx +4 -5
  41. package/src/component/ActivePoints.tsx +6 -6
  42. package/src/component/Cell.tsx +5 -23
  43. package/src/component/Cursor.tsx +3 -3
  44. package/src/component/DefaultLegendContent.tsx +6 -8
  45. package/src/component/DefaultTooltipContent.tsx +10 -14
  46. package/src/component/Dots.tsx +5 -5
  47. package/src/component/Label.tsx +10 -13
  48. package/src/component/LabelList.tsx +7 -12
  49. package/src/component/Legend.tsx +21 -26
  50. package/src/component/ResponsiveContainer.tsx +49 -52
  51. package/src/component/Text.tsx +5 -5
  52. package/src/component/Tooltip.tsx +18 -21
  53. package/src/component/TooltipBoundingBox.tsx +16 -18
  54. package/src/component/responsiveContainerUtils.ts +1 -1
  55. package/src/container/ClipPathProvider.tsx +3 -3
  56. package/src/container/Layer.tsx +5 -5
  57. package/src/container/RootSurface.tsx +1 -1
  58. package/src/container/Surface.tsx +6 -5
  59. package/src/context/ErrorBarContext.tsx +2 -2
  60. package/src/context/PanoramaContext.tsx +2 -2
  61. package/src/context/RegisterGraphicalItemId.tsx +2 -4
  62. package/src/context/chartDataContext.tsx +23 -26
  63. package/src/context/chartLayoutContext.tsx +12 -16
  64. package/src/polar/Pie.tsx +12 -13
  65. package/src/polar/PolarAngleAxis.tsx +3 -3
  66. package/src/polar/PolarGrid.tsx +5 -5
  67. package/src/polar/PolarRadiusAxis.tsx +3 -3
  68. package/src/polar/Radar.tsx +3 -3
  69. package/src/polar/RadialBar.tsx +3 -3
  70. package/src/shape/Cross.tsx +5 -5
  71. package/src/shape/Curve.tsx +7 -6
  72. package/src/shape/Dot.tsx +4 -4
  73. package/src/shape/Polygon.tsx +5 -5
  74. package/src/shape/Rectangle.tsx +20 -22
  75. package/src/shape/Sector.tsx +5 -5
  76. package/src/shape/Symbols.tsx +5 -5
  77. package/src/shape/Trapezoid.tsx +27 -29
  78. package/src/state/RechartsStoreProvider.tsx +3 -5
  79. package/src/state/ReportChartProps.tsx +6 -8
  80. package/src/state/ReportEventSettings.tsx +6 -8
  81. package/src/state/ReportMainChartProps.tsx +9 -11
  82. package/src/state/ReportPolarOptions.tsx +13 -15
  83. package/src/state/SetLegendPayload.ts +1 -1
  84. package/src/state/SetTooltipEntrySettings.tsx +1 -1
  85. package/src/state/brushSlice.ts +8 -10
  86. package/src/state/cartesianAxisSlice.ts +38 -46
  87. package/src/state/chartDataSlice.ts +23 -29
  88. package/src/state/errorBarSlice.ts +16 -22
  89. package/src/state/eventSettingsSlice.ts +9 -11
  90. package/src/state/graphicalItemsSlice.ts +13 -17
  91. package/src/state/layoutSlice.ts +19 -27
  92. package/src/state/legendSlice.ts +18 -24
  93. package/src/state/optionsSlice.ts +6 -8
  94. package/src/state/polarAxisSlice.ts +13 -21
  95. package/src/state/polarOptionsSlice.ts +14 -16
  96. package/src/state/referenceElementsSlice.ts +19 -25
  97. package/src/state/registerInStore.ts +13 -15
  98. package/src/state/renderedTicksSlice.ts +7 -11
  99. package/src/state/rootPropsSlice.ts +14 -16
  100. package/src/state/tooltipSlice.ts +95 -115
  101. package/src/state/unregisterOnCleanup.ts +20 -5
  102. package/src/state/zIndexSlice.ts +42 -50
  103. package/src/synchronisation/useChartSynchronisation.tsx +217 -213
  104. package/src/util/ActiveShapeUtils.tsx +2 -2
  105. package/src/util/BarUtils.tsx +3 -5
  106. package/src/util/FunnelUtils.tsx +1 -1
  107. package/src/util/RadialBarUtils.tsx +3 -4
  108. package/src/util/createCartesianCharts.tsx +1 -1
  109. package/src/util/createPolarCharts.tsx +1 -1
  110. package/src/util/svgPropertiesAndEvents.ts +1 -1
  111. package/src/util/tooltip/translate.ts +2 -2
  112. package/src/util/types.ts +2 -2
  113. package/src/zIndex/ZIndexLayer.tsx +68 -39
  114. package/src/zIndex/ZIndexPortal.tsx +25 -29
  115. package/test/_data.ts +408 -0
  116. package/test/animation/AnimationController.typed.spec.ts +53 -0
  117. package/test/animation/AnimationControllerImpl.spec.ts +271 -0
  118. package/test/animation/CSSTransitionAnimate.timing.spec.tsx +473 -0
  119. package/test/animation/JavascriptAnimate.spec.tsx +62 -0
  120. package/test/animation/RechartsAnimation.spec.ts +636 -0
  121. package/test/animation/easing.spec.ts +218 -0
  122. package/test/animation/legacyAnimationLengthChange.spec.tsx +803 -0
  123. package/test/animation/matchBy.spec.ts +467 -0
  124. package/test/animation/mockAnimationController.ts +40 -0
  125. package/test/animation/mockControllerAnimationManager.ts +143 -0
  126. package/test/animation/mockTimeoutController.ts +114 -0
  127. package/test/animation/timeoutController.spec.ts +138 -0
  128. package/test/animation/useAnimationStartSnapshot.spec.ts +147 -0
  129. package/test/animation/util.spec.ts +28 -0
  130. package/test/cartesian/Area.animation.spec.tsx +363 -0
  131. package/test/cartesian/Area.range.spec.tsx +54 -0
  132. package/test/cartesian/Area.spec.tsx +1202 -0
  133. package/test/cartesian/Area.stacked.render.spec.tsx +69 -0
  134. package/test/cartesian/Area.typed.spec.tsx +209 -0
  135. package/test/cartesian/Axis.integration.spec.tsx +158 -0
  136. package/test/cartesian/Bar/Bar.csstransition.spec.tsx +299 -0
  137. package/test/cartesian/Bar/Bar.spec.tsx +2314 -0
  138. package/test/cartesian/Bar/Bar.typed.spec.tsx +192 -0
  139. package/test/cartesian/Bar.animation.spec.tsx +426 -0
  140. package/test/cartesian/Bar.stackDomain.spec.tsx +66 -0
  141. package/test/cartesian/Bar.stacked.render.spec.tsx +53 -0
  142. package/test/cartesian/Bar.truncateByDomain.spec.tsx +237 -0
  143. package/test/cartesian/Bar.zeroDimensionFiltering.spec.tsx +336 -0
  144. package/test/cartesian/BarStack.spec.tsx +91 -0
  145. package/test/cartesian/Brush.keyboard.spec.tsx +88 -0
  146. package/test/cartesian/Brush.panorama.spec.tsx +41 -0
  147. package/test/cartesian/Brush.props.spec.tsx +63 -0
  148. package/test/cartesian/Brush.render.spec.tsx +117 -0
  149. package/test/cartesian/Brush.spec.tsx +522 -0
  150. package/test/cartesian/Brush.stacked.spec.tsx +221 -0
  151. package/test/cartesian/CartesianAxis.render.spec.tsx +50 -0
  152. package/test/cartesian/CartesianAxis.spec.tsx +396 -0
  153. package/test/cartesian/CartesianGrid.render.spec.tsx +39 -0
  154. package/test/cartesian/CartesianGrid.spec.tsx +2103 -0
  155. package/test/cartesian/ErrorBar.render.spec.tsx +69 -0
  156. package/test/cartesian/ErrorBar.spec.tsx +2414 -0
  157. package/test/cartesian/Funnel.animation.spec.tsx +241 -0
  158. package/test/cartesian/Funnel.spec.tsx +226 -0
  159. package/test/cartesian/Funnel.typed.spec.tsx +221 -0
  160. package/test/cartesian/GraphicalItemClipPath.scale-behavior.spec.tsx +627 -0
  161. package/test/cartesian/GraphicalItemClipPath.spec.tsx +427 -0
  162. package/test/cartesian/Line.animation.spec.tsx +643 -0
  163. package/test/cartesian/Line.sparseAnimationPath.spec.tsx +98 -0
  164. package/test/cartesian/Line.spec.tsx +471 -0
  165. package/test/cartesian/Line.typed.spec.tsx +152 -0
  166. package/test/cartesian/ReferenceArea.render.spec.tsx +63 -0
  167. package/test/cartesian/ReferenceArea.spec.tsx +663 -0
  168. package/test/cartesian/ReferenceArea.typed.spec.tsx +74 -0
  169. package/test/cartesian/ReferenceDot.render.spec.tsx +55 -0
  170. package/test/cartesian/ReferenceDot.spec.tsx +462 -0
  171. package/test/cartesian/ReferenceDot.typed.spec.tsx +76 -0
  172. package/test/cartesian/ReferenceLine/ReferenceLine.panorama.spec.tsx +184 -0
  173. package/test/cartesian/ReferenceLine/ReferenceLine.spec.tsx +744 -0
  174. package/test/cartesian/ReferenceLine/ReferenceLine.typed.spec.tsx +74 -0
  175. package/test/cartesian/ReferenceLine/getEndPoints.spec.ts +399 -0
  176. package/test/cartesian/ReferenceLine.render.spec.tsx +134 -0
  177. package/test/cartesian/Scatter.animation.spec.tsx +381 -0
  178. package/test/cartesian/Scatter.render.spec.tsx +61 -0
  179. package/test/cartesian/Scatter.spec.tsx +406 -0
  180. package/test/cartesian/Scatter.typed.spec.tsx +153 -0
  181. package/test/cartesian/XAxis/XAxis.barSize.spec.tsx +336 -0
  182. package/test/cartesian/XAxis/XAxis.brush.spec.tsx +266 -0
  183. package/test/cartesian/XAxis/XAxis.categorydomain.spec.tsx +872 -0
  184. package/test/cartesian/XAxis/XAxis.dataKey.spec.tsx +86 -0
  185. package/test/cartesian/XAxis/XAxis.datatypes.spec.tsx +127 -0
  186. package/test/cartesian/XAxis/XAxis.hide.spec.tsx +106 -0
  187. package/test/cartesian/XAxis/XAxis.multiaxis.spec.tsx +336 -0
  188. package/test/cartesian/XAxis/XAxis.numberdomain.spec.tsx +1466 -0
  189. package/test/cartesian/XAxis/XAxis.padding.spec.tsx +758 -0
  190. package/test/cartesian/XAxis/XAxis.padding_clip.spec.tsx +65 -0
  191. package/test/cartesian/XAxis/XAxis.state.spec.tsx +355 -0
  192. package/test/cartesian/XAxis/XAxis.tick.spec.tsx +493 -0
  193. package/test/cartesian/XAxis/XAxis.timescale.spec.tsx +233 -0
  194. package/test/cartesian/XAxis/XAxis.type.spec.tsx +107 -0
  195. package/test/cartesian/XAxis/XAxis.typed.spec.tsx +102 -0
  196. package/test/cartesian/XAxis/XAxis.vertical.spec.tsx +265 -0
  197. package/test/cartesian/XAxis.tickFormatter.spec.tsx +54 -0
  198. package/test/cartesian/YAxis/YAxis.7362.derivedDomain.spec.tsx +230 -0
  199. package/test/cartesian/YAxis/YAxis.7362.spec.tsx +104 -0
  200. package/test/cartesian/YAxis/YAxis.interval-zero.spec.tsx +88 -0
  201. package/test/cartesian/YAxis/YAxis.label.spec.tsx +219 -0
  202. package/test/cartesian/YAxis/YAxis.spec.tsx +1595 -0
  203. package/test/cartesian/YAxis/YAxis.tick.spec.tsx +428 -0
  204. package/test/cartesian/YAxis/YAxis.tickFormatter.spec.tsx +54 -0
  205. package/test/cartesian/YAxis/YAxis.ticks.spec.tsx +263 -0
  206. package/test/cartesian/YAxis/YAxis.type.spec.tsx +107 -0
  207. package/test/cartesian/YAxis/YAxis.typed.spec.tsx +102 -0
  208. package/test/cartesian/ZAxis.spec.tsx +300 -0
  209. package/test/cartesian/ZAxis.typed.spec.tsx +33 -0
  210. package/test/cartesian/__snapshots__/Brush.spec.tsx.snap +5 -0
  211. package/test/cartesian/axisLineAndStroke.spec.tsx +72 -0
  212. package/test/cartesian/getCartesianPosition.spec.ts +907 -0
  213. package/test/cartesian/getEquidistantTicks.spec.ts +88 -0
  214. package/test/cartesian/getTicks.spec.ts +378 -0
  215. package/test/cartesian/miscFeatureGaps.spec.tsx +89 -0
  216. package/test/cartesian/useAnimatedLineLength.spec.ts +168 -0
  217. package/test/chart/AccessibilityLayer.spec.tsx +569 -0
  218. package/test/chart/AccessibilityScans.spec.tsx +286 -0
  219. package/test/chart/AreaChart.spec.tsx +409 -0
  220. package/test/chart/AreaChart.stacked.spec.tsx +1407 -0
  221. package/test/chart/AreaChart.typed.spec.tsx +39 -0
  222. package/test/chart/BarChart.spec.tsx +3719 -0
  223. package/test/chart/BarChart.typed.spec.tsx +60 -0
  224. package/test/chart/CategoricalChart.spec.tsx +255 -0
  225. package/test/chart/ComposedChart.spec.tsx +199 -0
  226. package/test/chart/ComposedChart.typed.spec.tsx +39 -0
  227. package/test/chart/FunnelChart.spec.tsx +215 -0
  228. package/test/chart/FunnelChart.typed.spec.tsx +39 -0
  229. package/test/chart/LineChart.multiseries.spec.tsx +50 -0
  230. package/test/chart/LineChart.smoke.spec.tsx +50 -0
  231. package/test/chart/LineChart.spec.tsx +930 -0
  232. package/test/chart/LineChart.typed.spec.tsx +39 -0
  233. package/test/chart/NicheChartTooltip.spec.tsx +81 -0
  234. package/test/chart/PieChart.spec.tsx +793 -0
  235. package/test/chart/PieChart.typed.spec.tsx +39 -0
  236. package/test/chart/RadarChart.spec.tsx +530 -0
  237. package/test/chart/RadarChart.typed.spec.tsx +39 -0
  238. package/test/chart/RadialBarChart.5966.spec.tsx +48 -0
  239. package/test/chart/RadialBarChart.spec.tsx +679 -0
  240. package/test/chart/RadialBarChart.typed.spec.tsx +39 -0
  241. package/test/chart/RechartsWrapper.spec.tsx +83 -0
  242. package/test/chart/Sankey.content.spec.tsx +46 -0
  243. package/test/chart/Sankey.spec.tsx +952 -0
  244. package/test/chart/Sankey.typed.spec.tsx +29 -0
  245. package/test/chart/ScatterChart.spec.tsx +2613 -0
  246. package/test/chart/ScatterChart.typed.spec.tsx +39 -0
  247. package/test/chart/SunburstChart.spec.tsx +146 -0
  248. package/test/chart/Treemap.animation.spec.tsx +52 -0
  249. package/test/chart/Treemap.spec.tsx +1003 -0
  250. package/test/chart/Treemap.typed.spec.tsx +26 -0
  251. package/test/chart/chartEvents.spec.tsx +127 -0
  252. package/test/chart/responsive.spec.tsx +620 -0
  253. package/test/component/Cell.render.spec.tsx +155 -0
  254. package/test/component/Cell.spec.tsx +12 -0
  255. package/test/component/Cursor.spec.tsx +186 -0
  256. package/test/component/DefaultTooltipContent.spec.tsx +102 -0
  257. package/test/component/Label.render.spec.tsx +63 -0
  258. package/test/component/Label.spec.tsx +686 -0
  259. package/test/component/Label.typed.spec.tsx +46 -0
  260. package/test/component/LabelList.spec.tsx +188 -0
  261. package/test/component/Legend.itemSorter.spec.tsx +704 -0
  262. package/test/component/Legend.render.spec.tsx +92 -0
  263. package/test/component/Legend.spec.tsx +2213 -0
  264. package/test/component/Legend.typed.spec.tsx +22 -0
  265. package/test/component/ResponsiveContainer.spec.tsx +523 -0
  266. package/test/component/ResponsiveContainerDataTest.spec.tsx +51 -0
  267. package/test/component/Text.spec.tsx +415 -0
  268. package/test/component/Text.typed.spec.tsx +46 -0
  269. package/test/component/Tooltip/ActiveDot.spec.tsx +370 -0
  270. package/test/component/Tooltip/Tooltip.animation.spec.tsx +209 -0
  271. package/test/component/Tooltip/Tooltip.content.spec.tsx +128 -0
  272. package/test/component/Tooltip/Tooltip.formatter.spec.tsx +152 -0
  273. package/test/component/Tooltip/Tooltip.includeHidden.spec.tsx +79 -0
  274. package/test/component/Tooltip/Tooltip.multipleDataArrays.spec.tsx +165 -0
  275. package/test/component/Tooltip/Tooltip.offset.spec.tsx +113 -0
  276. package/test/component/Tooltip/Tooltip.state.spec.tsx +74 -0
  277. package/test/component/Tooltip/Tooltip.sync.spec.tsx +639 -0
  278. package/test/component/Tooltip/defaultIndex.spec.tsx +227 -0
  279. package/test/component/Tooltip/graphicalItem.formatter.spec.tsx +138 -0
  280. package/test/component/Tooltip/itemSorter.spec.tsx +2815 -0
  281. package/test/component/Tooltip/tooltipEventType.spec.tsx +344 -0
  282. package/test/component/Tooltip/tooltipMouseHoverSelectors.ts +41 -0
  283. package/test/component/Tooltip/tooltipTestHelpers.tsx +162 -0
  284. package/test/component/Tooltip.defaultIndex.spec.tsx +48 -0
  285. package/test/component/Tooltip.hover.spec.tsx +61 -0
  286. package/test/component/Tooltip.item.spec.tsx +54 -0
  287. package/test/component/Tooltip.keyboard.spec.tsx +51 -0
  288. package/test/component/Tooltip.payload.spec.tsx +1716 -0
  289. package/test/component/Tooltip.touch.spec.tsx +39 -0
  290. package/test/component/Tooltip.visibility.spec.tsx +1889 -0
  291. package/test/component/TooltipBoundingBox.spec.tsx +89 -0
  292. package/test/component/responsiveContainerUtils.spec.ts +205 -0
  293. package/test/container/ClipPath.spec.tsx +602 -0
  294. package/test/container/chartDimensions.spec.tsx +368 -0
  295. package/test/context/chartLayoutContext.spec.tsx +378 -0
  296. package/test/helper/ExpectAxisDomain.tsx +27 -0
  297. package/test/helper/assertNotNull.ts +6 -0
  298. package/test/helper/assertZIndexLayerOrder.ts +19 -0
  299. package/test/helper/createSelectorTestCase.tsx +176 -0
  300. package/test/helper/expectAnimatedPieAngles.ts +100 -0
  301. package/test/helper/expectAnimatedPiePaths.ts +78 -0
  302. package/test/helper/expectAreaCurve.ts +15 -0
  303. package/test/helper/expectAxisTicks.ts +48 -0
  304. package/test/helper/expectBars.ts +54 -0
  305. package/test/helper/expectFunctionReturning.ts +58 -0
  306. package/test/helper/expectLabel.ts +32 -0
  307. package/test/helper/expectLastCalledWith.ts +48 -0
  308. package/test/helper/expectLine.ts +20 -0
  309. package/test/helper/expectPieSectors.ts +80 -0
  310. package/test/helper/expectScale.ts +37 -0
  311. package/test/helper/expectScatterPoints.ts +52 -0
  312. package/test/helper/expectStackGroups.ts +144 -0
  313. package/test/helper/mockAxes.ts +22 -0
  314. package/test/helper/mockGetBoundingClientRect.ts +66 -0
  315. package/test/helper/mockHTMLElementProperty.ts +19 -0
  316. package/test/helper/mockTouchingElement.ts +27 -0
  317. package/test/helper/offsetHelpers.ts +19 -0
  318. package/test/helper/parameterizedTestCases.tsx +99 -0
  319. package/test/helper/produceState.ts +32 -0
  320. package/test/helper/selectorTestHelpers.tsx +63 -0
  321. package/test/helper/trim.spec.ts +35 -0
  322. package/test/helper/trim.ts +11 -0
  323. package/test/hooks/useActiveTooltipDataPoints.spec.tsx +358 -0
  324. package/test/hooks/useAxisDomain.spec.tsx +361 -0
  325. package/test/hooks/useAxisScale.spec.tsx +283 -0
  326. package/test/hooks/useAxisTicks.spec.tsx +130 -0
  327. package/test/hooks/useOffset.spec.tsx +248 -0
  328. package/test/hooks/useTooltipStateHooks.spec.tsx +109 -0
  329. package/test/polar/Pie/Pie-TwoLevelPieChart.spec.tsx +135 -0
  330. package/test/polar/Pie/Pie.spec.tsx +784 -0
  331. package/test/polar/Pie/Pie.typed.spec.tsx +78 -0
  332. package/test/polar/Pie.animation.spec.tsx +529 -0
  333. package/test/polar/PieWithLegend.animation.spec.tsx +142 -0
  334. package/test/polar/PolarAngleAxis/PolarAngleAxis.events.spec.tsx +76 -0
  335. package/test/polar/PolarAngleAxis/PolarAngleAxis.spec.tsx +2079 -0
  336. package/test/polar/PolarAngleAxis/PolarAngleAxis.typed.spec.tsx +102 -0
  337. package/test/polar/PolarAngleAxis.render.spec.tsx +79 -0
  338. package/test/polar/PolarGrid.render.spec.tsx +75 -0
  339. package/test/polar/PolarGrid.spec.tsx +918 -0
  340. package/test/polar/PolarLegendPerRow.render.spec.tsx +85 -0
  341. package/test/polar/PolarRadiusAxis.events.spec.tsx +65 -0
  342. package/test/polar/PolarRadiusAxis.render.spec.tsx +52 -0
  343. package/test/polar/PolarRadiusAxis.spec.tsx +991 -0
  344. package/test/polar/PolarRadiusAxis.typed.spec.tsx +84 -0
  345. package/test/polar/PolarTooltipLegend.render.spec.tsx +80 -0
  346. package/test/polar/Radar.animation.spec.tsx +570 -0
  347. package/test/polar/Radar.render.spec.tsx +71 -0
  348. package/test/polar/Radar.spec.tsx +265 -0
  349. package/test/polar/Radar.typed.spec.tsx +119 -0
  350. package/test/polar/RadialBar/RadialBar.spec.tsx +1521 -0
  351. package/test/polar/RadialBar/RadialBar.typed.spec.tsx +132 -0
  352. package/test/polar/RadialBar.animation.spec.tsx +375 -0
  353. package/test/polar/RadialBar.render.spec.tsx +66 -0
  354. package/test/polar/RadialBar.stacked.spec.tsx +57 -0
  355. package/test/setup.ts +84 -0
  356. package/test/shape/ActiveShape.spec.tsx +181 -0
  357. package/test/shape/Cross.spec.tsx +60 -0
  358. package/test/shape/Cross.typed.spec.tsx +26 -0
  359. package/test/shape/Curve.spec.tsx +368 -0
  360. package/test/shape/Curve.typed.spec.tsx +69 -0
  361. package/test/shape/Dot.spec.tsx +73 -0
  362. package/test/shape/Dot.typed.spec.tsx +30 -0
  363. package/test/shape/Polygon.spec.tsx +357 -0
  364. package/test/shape/Polygon.typed.spec.tsx +28 -0
  365. package/test/shape/Rectangle.animation.spec.tsx +451 -0
  366. package/test/shape/Rectangle.spec.tsx +68 -0
  367. package/test/shape/Rectangle.typed.spec.tsx +24 -0
  368. package/test/shape/Sector.spec.tsx +76 -0
  369. package/test/shape/Sector.typed.spec.tsx +24 -0
  370. package/test/shape/Symbols.spec.tsx +43 -0
  371. package/test/shape/Symbols.typed.spec.tsx +24 -0
  372. package/test/shape/Trapezoid.spec.tsx +50 -0
  373. package/test/shape/Trapezoid.typed.spec.tsx +24 -0
  374. package/test/shape/__snapshots__/Cross.spec.tsx.snap +62 -0
  375. package/test/shape/__snapshots__/Curve.spec.tsx.snap +460 -0
  376. package/test/shape/__snapshots__/Polygon.spec.tsx.snap +58 -0
  377. package/test/shape/__snapshots__/Rectangle.spec.tsx.snap +117 -0
  378. package/test/shape/__snapshots__/Sector.spec.tsx.snap +71 -0
  379. package/test/shape/__snapshots__/Trapezoid.spec.tsx.snap +64 -0
  380. package/test/state/chartDataSlice.spec.ts +53 -0
  381. package/test/state/createCollectionActions.spec.ts +87 -0
  382. package/test/state/createSelector.spec.ts +158 -0
  383. package/test/state/externalEventsMiddleware.spec.ts +178 -0
  384. package/test/state/graphicalItemsSlice.spec.ts +92 -0
  385. package/test/state/hooks.spec.tsx +68 -0
  386. package/test/state/legendSlice.spec.ts +44 -0
  387. package/test/state/mouseEventsMiddleware.spec.ts +75 -0
  388. package/test/state/optionsSlice.spec.ts +19 -0
  389. package/test/state/referenceElementsSlice.spec.ts +84 -0
  390. package/test/state/registerInStore.spec.tsx +101 -0
  391. package/test/state/selectors/areaSelectors.spec.tsx +77 -0
  392. package/test/state/selectors/axisSelectors.spec.tsx +1418 -0
  393. package/test/state/selectors/barStackSelectors.spec.tsx +752 -0
  394. package/test/state/selectors/brushSelectors.spec.tsx +30 -0
  395. package/test/state/selectors/cartesianAxisSlice.spec.ts +96 -0
  396. package/test/state/selectors/combineNiceTicks.spec.ts +207 -0
  397. package/test/state/selectors/combiners/combineActiveTooltipIndex.spec.ts +61 -0
  398. package/test/state/selectors/combiners/combineAllBarPositions.spec.ts +39 -0
  399. package/test/state/selectors/combiners/combineConfiguredScale.spec.ts +56 -0
  400. package/test/state/selectors/combiners/combineDisplayedStackedData.spec.ts +123 -0
  401. package/test/state/selectors/combiners/combineRealScaleType.spec.ts +80 -0
  402. package/test/state/selectors/containerSelectors.spec.tsx +168 -0
  403. package/test/state/selectors/dataSelectors.spec.tsx +136 -0
  404. package/test/state/selectors/legendSelectors.spec.tsx +113 -0
  405. package/test/state/selectors/lineSelectors.spec.tsx +60 -0
  406. package/test/state/selectors/pieSelectors.spec.tsx +72 -0
  407. package/test/state/selectors/radarSelectors.spec.tsx +496 -0
  408. package/test/state/selectors/rootPropsSelectors.spec.tsx +169 -0
  409. package/test/state/selectors/scatterSelectors.spec.tsx +47 -0
  410. package/test/state/selectors/selectActiveTooltipIndex.spec.tsx +234 -0
  411. package/test/state/selectors/selectAllAxes.spec.tsx +18 -0
  412. package/test/state/selectors/selectAxisDomain.spec.tsx +21 -0
  413. package/test/state/selectors/selectAxisDomainIncludingNiceTicks.spec.tsx +19 -0
  414. package/test/state/selectors/selectAxisRangeWithReverse.spec.tsx +22 -0
  415. package/test/state/selectors/selectAxisScale.spec.tsx +91 -0
  416. package/test/state/selectors/selectBarRectangles.stackOffset.spec.tsx +503 -0
  417. package/test/state/selectors/selectBaseAxis.spec.tsx +56 -0
  418. package/test/state/selectors/selectCartesianItemsSettings.spec.tsx +57 -0
  419. package/test/state/selectors/selectChartOffset.spec.tsx +26 -0
  420. package/test/state/selectors/selectDisplayedData.spec.tsx +282 -0
  421. package/test/state/selectors/selectIsTooltipActive.spec.tsx +231 -0
  422. package/test/state/selectors/selectNumericalDomain.spec.tsx +21 -0
  423. package/test/state/selectors/selectRealScaleType.spec.tsx +19 -0
  424. package/test/state/selectors/selectStackGroups.spec.tsx +322 -0
  425. package/test/state/selectors/selectXAxisPosition.spec.tsx +22 -0
  426. package/test/state/selectors/selectYAxisPosition.spec.tsx +22 -0
  427. package/test/state/selectors/selectorMemoization.spec.tsx +136 -0
  428. package/test/state/selectors/selectors.spec.tsx +1613 -0
  429. package/test/state/throttling.spec.ts +200 -0
  430. package/test/state/zIndexSlice.spec.ts +85 -0
  431. package/test/synchronisation/useChartSynchronisation.spec.tsx +225 -0
  432. package/test/util/BarUtils.spec.ts +39 -0
  433. package/test/util/CartesianUtils/CartesianUtils.spec.ts +261 -0
  434. package/test/util/CartesianUtils/rectWithPoints.spec.ts +48 -0
  435. package/test/util/ChartUtils/ChartUtils.spec.ts +491 -0
  436. package/test/util/ChartUtils/appendOffsetOfLegend.spec.ts +136 -0
  437. package/test/util/ChartUtils/appendOffsetOfLegend.spec.tsx +133 -0
  438. package/test/util/ChartUtils/getCateCoordinateOfLine.spec.ts +97 -0
  439. package/test/util/ChartUtils/getStackedData.spec.ts +416 -0
  440. package/test/util/ChartUtils/truncateByDomain.spec.ts +70 -0
  441. package/test/util/DataUtils.spec.ts +385 -0
  442. package/test/util/DomUtils.spec.tsx +117 -0
  443. package/test/util/FunnelUtils.spec.tsx +70 -0
  444. package/test/util/Global.spec.ts +11 -0
  445. package/test/util/LRUCache.spec.ts +81 -0
  446. package/test/util/LogUtils.spec.ts +45 -0
  447. package/test/util/PolarUtils.spec.ts +66 -0
  448. package/test/util/ReduceCssCalcPrototype.spec.ts +141 -0
  449. package/test/util/ShallowEqual.spec.ts +102 -0
  450. package/test/util/TickUtils.spec.ts +29 -0
  451. package/test/util/createChartHelpers.spec.tsx +210 -0
  452. package/test/util/cursor/getCursorPoints.spec.ts +136 -0
  453. package/test/util/cursor/getCursorRectangle.spec.ts +50 -0
  454. package/test/util/cursor/getRadialCursorPoints.spec.ts +36 -0
  455. package/test/util/errorValue.spec.ts +69 -0
  456. package/test/util/getEveryNth.spec.ts +39 -0
  457. package/test/util/getRadiusAndStrokeWidthFromDot.spec.ts +51 -0
  458. package/test/util/getRelativeCoordinate.spec.ts +250 -0
  459. package/test/util/getSliced.spec.ts +45 -0
  460. package/test/util/isDomainSpecifiedByUser.spec.ts +207 -0
  461. package/test/util/isWellBehavedNumber.spec.ts +54 -0
  462. package/test/util/payload/getUniqPayload.spec.ts +56 -0
  463. package/test/util/propsAreEqual.spec.ts +75 -0
  464. package/test/util/round.spec.ts +112 -0
  465. package/test/util/scale/arithmetic.spec.ts +61 -0
  466. package/test/util/scale/createCategoricalInverse.spec.ts +84 -0
  467. package/test/util/scale/getNiceTickValues.spec.ts +421 -0
  468. package/test/util/scale/getTickValuesFixedDomain.spec.ts +155 -0
  469. package/test/util/svgPropertiesAndEvents.spec.tsx +206 -0
  470. package/test/util/svgPropertiesNoEvents.spec.tsx +228 -0
  471. package/test/util/tooltip/translate.spec.ts +396 -0
  472. package/test/util/useAnimationId.spec.tsx +59 -0
  473. package/test/util/useElementOffset.spec.tsx +173 -0
  474. package/test/util/usePrefersReducedMotion.spec.ts +54 -0
  475. package/test/util/useUniqueId.spec.ts +99 -0
  476. package/test/utils/diagnostics-allowlist.ts +18 -0
  477. package/test/utils/diagnostics.ts +58 -0
  478. package/test/zIndex/AllZIndexPortals.spec.tsx +83 -0
  479. package/test/zIndex/DefaultZIndexes.spec.ts +80 -0
  480. package/test/zIndex/DynamicZIndex.spec.tsx +102 -0
  481. package/test/zIndex/ZIndexLayer.portalOwner.spec.tsx +125 -0
  482. package/test/zIndex/componentZIndex.spec.tsx +255 -0
  483. package/test/zIndex/getZIndexFromUnknown.spec.ts +51 -0
  484. package/test/zIndex/multiChartZIndexIsolation.spec.tsx +90 -0
  485. package/test/zIndex/zIndexSelectors.spec.ts +172 -0
  486. package/test-results/.last-run.json +4 -0
  487. package/tsconfig.json +11 -0
  488. package/src/util/DirectPortal.tsx +0 -107
@@ -0,0 +1,70 @@
1
+ import type { SeriesPoint } from "d3-shape";
2
+ import { truncateByDomain } from "../../../src/util/ChartUtils";
3
+
4
+ function createMockSeriesPoint(val: [number, number]): SeriesPoint<Record<number, number>> {
5
+ // @ts-expect-error just can't make ts happy with custom properties on an array can I
6
+ const seriesPoint: SeriesPoint<Record<number, number>> = [...val];
7
+ seriesPoint.data = val;
8
+ return seriesPoint;
9
+ }
10
+
11
+ describe("truncateByDomain", () => {
12
+ test.each([{ domain: [] }, { domain: [1] }, { domain: ["", ""] }])(
13
+ "should return value without change if domain is %o",
14
+ ({ domain }) => {
15
+ const value = createMockSeriesPoint([1, 2]);
16
+ const result = truncateByDomain(value, domain as never);
17
+ expect(result).toBe(value);
18
+ expect(result).toEqual(createMockSeriesPoint([1, 2]));
19
+ },
20
+ );
21
+
22
+ it("should return value if it fits the domain", () => {
23
+ const value = createMockSeriesPoint([10, 20]);
24
+ const domain = [0, 30];
25
+ const result = truncateByDomain(value, domain);
26
+ expect(result).toEqual([10, 20]);
27
+ });
28
+
29
+ it("should return value if it same as the domain", () => {
30
+ const value = createMockSeriesPoint([10, 20]);
31
+ const domain = [10, 20];
32
+ const result = truncateByDomain(value, domain);
33
+ expect(result).toEqual([10, 20]);
34
+ });
35
+
36
+ it("should truncate when value overflows from both ends", () => {
37
+ const value = createMockSeriesPoint([0, 30]);
38
+ const domain = [10, 20];
39
+ const result = truncateByDomain(value, domain);
40
+ expect(result).toEqual([10, 20]);
41
+ });
42
+
43
+ it("should truncate when value is larger than domain", () => {
44
+ const value = createMockSeriesPoint([100, 300]);
45
+ const domain = [10, 20];
46
+ const result = truncateByDomain(value, domain);
47
+ expect(result).toEqual([20, 20]);
48
+ });
49
+
50
+ it("should truncate when value is smaller than domain", () => {
51
+ const value = createMockSeriesPoint([10, 20]);
52
+ const domain = [100, 200];
53
+ const result = truncateByDomain(value, domain);
54
+ expect(result).toEqual([100, 100]);
55
+ });
56
+
57
+ it("should not change value if domain has NaN in it", () => {
58
+ const value = createMockSeriesPoint([0, 30]);
59
+ const domain = [NaN, NaN];
60
+ const result = truncateByDomain(value, domain);
61
+ expect(result).toEqual(createMockSeriesPoint([0, 30]));
62
+ });
63
+
64
+ it("should return domain if value has NaN in it", () => {
65
+ const value = createMockSeriesPoint([NaN, NaN]);
66
+ const domain = [10, 20];
67
+ const result = truncateByDomain(value, domain);
68
+ expect(result).toEqual([10, 20]);
69
+ });
70
+ });
@@ -0,0 +1,385 @@
1
+ // Ported from recharts 3.8.1 test/util/DataUtils.spec.ts (only the import path changed).
2
+ import {
3
+ getPercentValue,
4
+ hasDuplicate,
5
+ mathSign,
6
+ isPercent,
7
+ isNumber,
8
+ isNumOrStr,
9
+ getLinearRegression,
10
+ findEntryInArray,
11
+ uniqueId,
12
+ isNullish,
13
+ upperFirst,
14
+ isNan,
15
+ interpolate,
16
+ isNotNil,
17
+ noop,
18
+ } from "../../src/util/DataUtils";
19
+
20
+ /**
21
+ * @noteNeverCasting added casting to avoid ts error and to be able to test wrong error provided at runtime
22
+ */
23
+
24
+ describe("mathSign", () => {
25
+ it("(0)", () => {
26
+ expect(mathSign(0)).toBe(0);
27
+ });
28
+
29
+ it("(-0)", () => {
30
+ expect(mathSign(-0)).toBe(0);
31
+ });
32
+
33
+ it("(100)", () => {
34
+ expect(mathSign(100)).toBe(1);
35
+ });
36
+
37
+ it("(-100)", () => {
38
+ expect(mathSign(-100)).toBe(-1);
39
+ });
40
+ });
41
+
42
+ describe("is functions", () => {
43
+ interface IsFunctionTestDefinition<F extends (value: any) => any> {
44
+ value: Parameters<F>[0];
45
+ result: ReturnType<F>;
46
+ }
47
+
48
+ describe("isPercent", () => {
49
+ const tests: IsFunctionTestDefinition<typeof isPercent>[] = [
50
+ { value: "0%", result: true },
51
+ { value: "10%", result: true },
52
+ { value: "0", result: false },
53
+ { value: "", result: false },
54
+ { value: "%", result: false },
55
+ { value: "%%", result: false },
56
+ { value: "0%%", result: false },
57
+ ];
58
+
59
+ test.each(tests)("should return $result with input $value", ({ value, result }) => {
60
+ expect(isPercent(value)).toBe(result);
61
+ });
62
+ });
63
+
64
+ describe("isNumber", () => {
65
+ const tests: IsFunctionTestDefinition<typeof isNumber>[] = [
66
+ { value: 0, result: true },
67
+ { value: "0", result: false },
68
+ { value: {}, result: false },
69
+ { value: [], result: false },
70
+ ];
71
+
72
+ test.each(tests)("should return $result with input $value", ({ value, result }) => {
73
+ expect(isNumber(value)).toBe(result);
74
+ });
75
+
76
+ it("should allow type refinement", () => {
77
+ const arr: unknown[] = ["a", 1, false, NaN];
78
+ // @ts-expect-error typescript should highlight this - invalid assignment
79
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
80
+ const invalid: number[] = arr;
81
+ const result: number[] = arr.filter(isNumber);
82
+ expect(result).toEqual([1]);
83
+ });
84
+ });
85
+
86
+ describe("isNumOrStr", () => {
87
+ const tests: IsFunctionTestDefinition<typeof isNumOrStr>[] = [
88
+ { value: 0, result: true },
89
+ { value: "0", result: true },
90
+ { value: {}, result: false },
91
+ { value: [], result: false },
92
+ ];
93
+
94
+ test.each(tests)("should return $result with input $value", ({ value, result }) => {
95
+ expect(isNumOrStr(value)).toBe(result);
96
+ });
97
+ });
98
+ });
99
+
100
+ describe("uniqueId", () => {
101
+ test("should return unique ID independent of prefix", () => {
102
+ expect(uniqueId()).toEqual("1");
103
+ expect(uniqueId(undefined)).toEqual("2");
104
+ expect(uniqueId("")).toEqual("3");
105
+ expect(uniqueId("myprefix")).toEqual("myprefix4");
106
+ expect(uniqueId()).toEqual("5");
107
+ });
108
+ });
109
+
110
+ describe("getPercentValue", () => {
111
+ it('getPercentValue("25%", 1) should return 0.25 ', () => {
112
+ expect(getPercentValue("25%", 1)).toBe(0.25);
113
+ });
114
+ it('getPercentValue("25%", "a") should return 0 ', () => {
115
+ /** @see noteNeverCasting */
116
+ expect(getPercentValue("25%", "a" as never)).toBe(0);
117
+ });
118
+ it("getPercentValue(1)) should return 1", () => {
119
+ /** @see noteNeverCasting */
120
+ expect(getPercentValue(1, undefined as never)).toBe(1);
121
+ });
122
+ it('getPercentValue("120%", 100)) should return 120', () => {
123
+ expect(getPercentValue("120%", 100)).toBe(120);
124
+ });
125
+
126
+ it('getPercentValue("120%", 100, 0, true)) should return 100', () => {
127
+ expect(getPercentValue("120%", 100, 0, true)).toBe(100);
128
+ });
129
+
130
+ it("should return defaultValue if percent is neither number not string", () => {
131
+ /** @see noteNeverCasting */
132
+ expect(getPercentValue(false as never, 0, 5)).toEqual(5);
133
+ });
134
+ });
135
+
136
+ describe("hasDuplicate", () => {
137
+ it("of an object should return false when input value is not an array", () => {
138
+ /** @see noteNeverCasting */
139
+ expect(hasDuplicate({} as never)).toBe(false);
140
+ });
141
+
142
+ it("of [12, 12] should return true", () => {
143
+ expect(hasDuplicate([12, 12])).toBe(true);
144
+ });
145
+
146
+ it('["12", 12] should return true due to implicit cast', () => {
147
+ expect(hasDuplicate(["12", 12])).toBe(true);
148
+ });
149
+
150
+ it("[1, 12] should return false", () => {
151
+ expect(hasDuplicate([1, 12])).toBe(false);
152
+ });
153
+ });
154
+
155
+ describe("interpolate", () => {
156
+ it("should return a number when called with two numbers", () => {
157
+ expect(interpolate(10, 20, 0.5)).toBe(15);
158
+ expect(interpolate(10, 20, 0)).toBe(10);
159
+ expect(interpolate(10, 20, 1)).toBe(20);
160
+ expect(interpolate(10, 20, 0.25)).toBe(12.5);
161
+ expect(interpolate(10, 20, 0.75)).toBe(17.5);
162
+ expect(interpolate(10, 20, 0.1)).toBe(11);
163
+ expect(interpolate(20, 620, 0.8)).toBe(500);
164
+ });
165
+
166
+ it("should return second number if the first is null", () => {
167
+ expect(interpolate(null, 20, 0.5)).toBe(20);
168
+ expect(interpolate(null, 20, 0.3)).toBe(20);
169
+ expect(interpolate(null, 20, 0.9)).toBe(20);
170
+ });
171
+
172
+ it("should return second number if the first is undefined", () => {
173
+ expect(interpolate(undefined, 20, 0.5)).toBe(20);
174
+ expect(interpolate(undefined, 20, 0.3)).toBe(20);
175
+ expect(interpolate(undefined, 20, 0.9)).toBe(20);
176
+ });
177
+
178
+ it("should return null if second number is null", () => {
179
+ expect(interpolate(10, null, 0.5)).toBeNull();
180
+ expect(interpolate(null, null, 0.5)).toBeNull();
181
+ });
182
+
183
+ it("should return undefined if second number is undefined", () => {
184
+ expect(interpolate(10, undefined, 0.5)).toBeUndefined();
185
+ expect(interpolate(undefined, undefined, 0.5)).toBeUndefined();
186
+ });
187
+ });
188
+
189
+ describe("findEntryInArray", () => {
190
+ const dataList = [
191
+ { name: "a", address: { street: "somewhere" } },
192
+ { name: "b", address: { street: "over" } },
193
+ { name: "c", address: { street: "here" } },
194
+ ];
195
+
196
+ it("should work with string key", () => {
197
+ expect(findEntryInArray(dataList, "name", "a")).toStrictEqual(dataList[0]);
198
+ });
199
+ it("should work with string keypath", () => {
200
+ expect(findEntryInArray(dataList, "address.street", "over")).toStrictEqual(dataList[1]);
201
+ });
202
+ it("should work with simple function", () => {
203
+ expect(findEntryInArray(dataList, (v) => v.address.street, "here")).toStrictEqual(dataList[2]);
204
+ });
205
+
206
+ it("should return undefined if first argument is null or undefined or empty array", () => {
207
+ /** @see noteNeverCasting */
208
+ expect(findEntryInArray(null as never, 0, "0")).toEqual(undefined);
209
+ /** @see noteNeverCasting */
210
+ expect(findEntryInArray(undefined as never, 0, "0")).toEqual(undefined);
211
+ expect(findEntryInArray([], 0, "0")).toEqual(undefined);
212
+ });
213
+ });
214
+
215
+ describe("getLinearRegression", () => {
216
+ it("should throw an error when null is supplied", () => {
217
+ expect(() => getLinearRegression(null as never)).toThrowError();
218
+ });
219
+
220
+ it("should return nonsense object when an empty array is supplied", () => {
221
+ /** @see noteNeverCasting */
222
+ expect(getLinearRegression([] as never)).toEqual({
223
+ a: 0,
224
+ b: NaN,
225
+ xmax: -Infinity,
226
+ xmin: Infinity,
227
+ });
228
+ });
229
+ it("should return a linear progression with supplied data", () => {
230
+ const data: Parameters<typeof getLinearRegression>[0] = [
231
+ { cx: 100, cy: 200 },
232
+ { cx: 120, cy: 100 },
233
+ { cx: 170, cy: 300 },
234
+ { cx: 140, cy: 250 },
235
+ { cx: 150, cy: 400 },
236
+ { cx: 110, cy: 280 },
237
+ ];
238
+
239
+ expect(getLinearRegression(data)).toStrictEqual({
240
+ a: 2.110047846889952,
241
+ b: -22.822966507177018,
242
+ xmax: 170,
243
+ xmin: 100,
244
+ });
245
+ });
246
+
247
+ it("should return a linear progression without cx or cy in data", () => {
248
+ const data: Parameters<typeof getLinearRegression>[0] = [
249
+ { cx: 100 },
250
+ { cx: 120, cy: 100 },
251
+ { cx: 170, cy: 300 },
252
+ { cy: 250 },
253
+ { cx: 150 },
254
+ { cx: 110, cy: 280 },
255
+ ];
256
+
257
+ expect(getLinearRegression(data)).toStrictEqual({
258
+ a: -0.39752144899904673,
259
+ b: 198.0648236415634,
260
+ xmax: 170,
261
+ xmin: 0,
262
+ });
263
+ });
264
+
265
+ it("should return a linear progression with only cy", () => {
266
+ const data: Parameters<typeof getLinearRegression>[0] = [
267
+ { cy: 100 },
268
+ { cy: 100 },
269
+ { cy: 300 },
270
+ { cy: 250 },
271
+ { cy: 150 },
272
+ { cy: 280 },
273
+ ];
274
+
275
+ expect(getLinearRegression(data)).toStrictEqual({
276
+ a: 0,
277
+ b: 196.66666666666666,
278
+ xmax: 0,
279
+ xmin: 0,
280
+ });
281
+ });
282
+ });
283
+
284
+ describe("isNullish", () => {
285
+ it("should return true when value is null", () => {
286
+ expect(isNullish(null)).toBe(true);
287
+ });
288
+
289
+ it("should return true when value is undefined", () => {
290
+ expect(isNullish(undefined)).toBe(true);
291
+ });
292
+
293
+ it("should return false when value is not null or undefined", () => {
294
+ expect(isNullish(0)).toBe(false);
295
+ expect(isNullish("")).toBe(false);
296
+ expect(isNullish("0")).toBe(false);
297
+ });
298
+ });
299
+
300
+ describe("isNotNil", () => {
301
+ it("should return false when value is null", () => {
302
+ expect(isNotNil(null)).toBe(false);
303
+ });
304
+
305
+ it("should return false when value is undefined", () => {
306
+ expect(isNotNil(undefined)).toBe(false);
307
+ });
308
+
309
+ it("should return true when value is not null or undefined", () => {
310
+ expect(isNotNil(0)).toBe(true);
311
+ expect(isNotNil("")).toBe(true);
312
+ expect(isNotNil("0")).toBe(true);
313
+ expect(isNotNil(false)).toBe(true);
314
+ expect(isNotNil({})).toBe(true);
315
+ expect(isNotNil([])).toBe(true);
316
+ });
317
+
318
+ it("should allow type refinement", () => {
319
+ const arr: (number | undefined)[] = [1, undefined, 3];
320
+ const result: number[] = arr.filter(isNotNil);
321
+ expect(result).toEqual([1, 3]);
322
+ });
323
+ });
324
+
325
+ describe("noop", () => {
326
+ it("should return undefined", () => {
327
+ expect(noop()).toBe(undefined);
328
+ });
329
+
330
+ it("should be callable without errors", () => {
331
+ expect(() => noop()).not.toThrow();
332
+ });
333
+
334
+ it("should be usable as a placeholder callback", () => {
335
+ const callback: () => void = noop;
336
+ expect(() => callback()).not.toThrow();
337
+ expect(callback()).toBe(undefined);
338
+ });
339
+ });
340
+
341
+ describe("upperFirst", () => {
342
+ it("should return null when value is null", () => {
343
+ // @ts-expect-error typescript is correct here, but we are testing runtime behavior with invalid input
344
+ expect(upperFirst(null)).toBe(null);
345
+ });
346
+
347
+ it("should return undefined when value is undefined", () => {
348
+ // @ts-expect-error typescript is correct here, but we are testing runtime behavior with invalid input
349
+ expect(upperFirst(undefined)).toBe(undefined);
350
+ });
351
+
352
+ it("should return empty string when value is empty string", () => {
353
+ expect(upperFirst("")).toBe("");
354
+ });
355
+
356
+ it("should return the string with the first letter uppercased", () => {
357
+ expect(upperFirst("hello")).toBe("Hello");
358
+ });
359
+ });
360
+
361
+ describe("isNan", () => {
362
+ it("should return true when value is NaN", () => {
363
+ expect(isNan(NaN)).toBe(true);
364
+ });
365
+
366
+ it("should return false when value is undefined", () => {
367
+ expect(isNan(undefined)).toBe(false);
368
+ });
369
+
370
+ it("should return false when value is null", () => {
371
+ expect(isNan(null)).toBe(false);
372
+ });
373
+
374
+ it("should return false when value is empty string", () => {
375
+ expect(isNan("")).toBe(false);
376
+ });
377
+
378
+ it('should return false when value is "0"', () => {
379
+ expect(isNan("0")).toBe(false);
380
+ });
381
+
382
+ it("should return false when value is a number", () => {
383
+ expect(isNan(1)).toBe(false);
384
+ });
385
+ });
@@ -0,0 +1,117 @@
1
+ // Ported from recharts 3.8.1 test/util/DomUtils.spec.tsx.
2
+ // Harness changes only: render from the local Solid shim (thunk), no React
3
+ // import. Assertions are byte-identical to recharts.
4
+ import { render } from "@solidjs/testing-library";
5
+ import {
6
+ getStringSize,
7
+ clearStringCache,
8
+ getStringCacheStats,
9
+ configureTextMeasurement,
10
+ getTextMeasurementConfig,
11
+ } from "../../src/util/DOMUtils";
12
+ import { mockGetBoundingClientRect } from "../helper/mockGetBoundingClientRect";
13
+
14
+ describe("DOMUtils", () => {
15
+ beforeEach(() => {
16
+ configureTextMeasurement({
17
+ cacheSize: 2000,
18
+ enableCache: true,
19
+ });
20
+ clearStringCache();
21
+ });
22
+
23
+ test("getStringSize() returns 0", () => {
24
+ // @ts-expect-error typescript is correct here, but we are testing runtime behavior with invalid input
25
+ expect(getStringSize(undefined)).toEqual({ width: 0, height: 0 });
26
+ });
27
+
28
+ test("getStringSize() with value returns mocked getBoundingClientRect values", () => {
29
+ render(() => <span id="recharts_measurement_span">test</span>);
30
+ mockGetBoundingClientRect({
31
+ x: 200,
32
+ y: 100,
33
+ width: 25,
34
+ height: 17,
35
+ top: 10,
36
+ right: 10,
37
+ bottom: 10,
38
+ left: 10,
39
+ });
40
+
41
+ expect(getStringSize("test")).toEqual({
42
+ width: 25,
43
+ height: 17,
44
+ });
45
+ });
46
+
47
+ test("cache should store and retrieve values correctly", () => {
48
+ render(() => <span id="recharts_measurement_span">test</span>);
49
+ mockGetBoundingClientRect({
50
+ width: 25,
51
+ height: 17,
52
+ });
53
+
54
+ const result1 = getStringSize("test", { fontSize: "14px" });
55
+ expect(result1).toEqual({ width: 25, height: 17 });
56
+ expect(getStringCacheStats().size).toBe(1);
57
+
58
+ const result2 = getStringSize("test", { fontSize: "14px" });
59
+ expect(result2).toEqual({ width: 25, height: 17 });
60
+ expect(getStringCacheStats().size).toBe(1);
61
+ });
62
+
63
+ test("clearStringCache should clear the cache", () => {
64
+ render(() => <span id="recharts_measurement_span">test</span>);
65
+ mockGetBoundingClientRect({
66
+ width: 25,
67
+ height: 17,
68
+ });
69
+
70
+ getStringSize("test");
71
+ expect(getStringCacheStats().size).toBe(1);
72
+
73
+ clearStringCache();
74
+ expect(getStringCacheStats().size).toBe(0);
75
+ });
76
+
77
+ test("cache should handle different styles separately", () => {
78
+ render(() => <span id="recharts_measurement_span">test</span>);
79
+ mockGetBoundingClientRect({
80
+ width: 25,
81
+ height: 17,
82
+ });
83
+
84
+ getStringSize("test", { fontSize: "14px" });
85
+ getStringSize("test", { fontSize: "16px" });
86
+
87
+ expect(getStringCacheStats().size).toBe(2);
88
+ });
89
+
90
+ test("configureTextMeasurement should update configuration", () => {
91
+ const newConfig = {
92
+ cacheSize: 1000,
93
+ enableCache: false,
94
+ };
95
+
96
+ configureTextMeasurement(newConfig);
97
+ const config = getTextMeasurementConfig();
98
+
99
+ expect(config.cacheSize).toBe(1000);
100
+ expect(config.enableCache).toBe(false);
101
+ });
102
+
103
+ test("should not cache when caching is disabled", () => {
104
+ configureTextMeasurement({ enableCache: false });
105
+
106
+ render(() => <span id="recharts_measurement_span">test</span>);
107
+ mockGetBoundingClientRect({
108
+ width: 25,
109
+ height: 17,
110
+ });
111
+
112
+ getStringSize("test");
113
+ getStringSize("test");
114
+
115
+ expect(getStringCacheStats().size).toBe(0);
116
+ });
117
+ });
@@ -0,0 +1,70 @@
1
+ // Ported from recharts 3.8.1 test/util/FunnelUtils.spec.tsx (commit 7a23854).
2
+ //
3
+ // <FunnelTrapezoid> renders the funnel shape through the shared <Shape> helper:
4
+ // when `isActive` is true the wrapping <g> carries `recharts-active-shape`.
5
+ // `render(<svg>...)` from React → Solid's `render(() => <svg>...)`. The Solid
6
+ // <Shape>/<Layer> emits `<g class="recharts-layer recharts-active-shape">`, so
7
+ // `toHaveClass('recharts-active-shape')` (substring-class match) still holds.
8
+ import { describe, expect, it } from "vitest";
9
+ import { render } from "@solidjs/testing-library";
10
+ import { FunnelTrapezoid, type FunnelTrapezoidProps } from "../../src/util/FunnelUtils";
11
+ import type { Coordinate, TrapezoidViewBox } from "../../src/util/types";
12
+
13
+ describe("funnelUtils", () => {
14
+ const mockTooltipPosition: Coordinate = { x: 10, y: 10 };
15
+
16
+ const viewBox: TrapezoidViewBox = {
17
+ x: 0,
18
+ y: 0,
19
+ upperWidth: 0,
20
+ lowerWidth: 0,
21
+ width: 0,
22
+ height: 0,
23
+ };
24
+ const mockProps: FunnelTrapezoidProps = {
25
+ width: 100,
26
+ upperWidth: 80,
27
+ lowerWidth: 60,
28
+ x: 11,
29
+ y: 11,
30
+ isActive: false,
31
+ tooltipPosition: mockTooltipPosition,
32
+ height: 0,
33
+ name: "",
34
+ option: undefined,
35
+ labelViewBox: viewBox,
36
+ parentViewBox: viewBox,
37
+ val: 1,
38
+ tooltipPayload: [],
39
+ };
40
+
41
+ it("<FunnelTrapezoid /> returns a trapezoid shape with no options", () => {
42
+ const { container } = render(() => (
43
+ <svg width={100} height={100}>
44
+ <FunnelTrapezoid {...mockProps} isActive={Boolean(true)} />
45
+ </svg>
46
+ ));
47
+ expect(container.querySelector("g")).toHaveClass("recharts-active-shape");
48
+ });
49
+
50
+ it("<FunnelTrapezoid /> returns a trapezoid shape with x & y from options", () => {
51
+ const { container } = render(() => (
52
+ <svg width={100} height={100}>
53
+ <FunnelTrapezoid
54
+ {...mockProps}
55
+ width={100}
56
+ tooltipPosition={mockTooltipPosition}
57
+ option={{ x: 10, y: 10 }}
58
+ isActive
59
+ height={100}
60
+ x={0}
61
+ y={0}
62
+ upperWidth={0}
63
+ lowerWidth={0}
64
+ name="my name"
65
+ />
66
+ </svg>
67
+ ));
68
+ expect(container.querySelector("g")).toHaveClass("recharts-active-shape");
69
+ });
70
+ });
@@ -0,0 +1,11 @@
1
+ import { Global } from "../../src/util/Global";
2
+
3
+ describe("Global util", () => {
4
+ it("is an object", () => {
5
+ expect(typeof Global).toEqual("object");
6
+ });
7
+
8
+ it("has property isSsr", () => {
9
+ expect(Global.isSsr).toEqual(false);
10
+ });
11
+ });