@octanejs/recharts 0.1.40 → 0.1.42

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 (376) hide show
  1. package/{LICENSE → LICENSE.recharts} +3 -2
  2. package/README.md +12 -0
  3. package/package.json +10 -9
  4. package/src/animation/AnimatedItems.tsrx +36 -3
  5. package/src/animation/AnimationController.ts +17 -65
  6. package/src/animation/{AnimationControllerImpl.js → AnimationControllerImpl.ts} +19 -12
  7. package/src/animation/{AnimationHandle.js → AnimationHandle.ts} +82 -65
  8. package/src/animation/CSSTransitionAnimate.tsrx +3 -2
  9. package/src/animation/JavascriptAnimate.tsrx +18 -2
  10. package/src/animation/easing.ts +235 -0
  11. package/src/animation/{matchBy.js → matchBy.ts} +76 -120
  12. package/src/animation/timeoutController.ts +71 -0
  13. package/src/animation/useAnimationController.ts +4 -1
  14. package/src/animation/useAnimationStartSnapshot.ts +3 -3
  15. package/src/animation/util.ts +12 -0
  16. package/src/cartesian/Area.tsrx +33 -31
  17. package/src/cartesian/AreaRevealShape.tsrx +4 -3
  18. package/src/cartesian/Bar.ts +1 -0
  19. package/src/cartesian/Bar.tsrx +293 -39
  20. package/src/cartesian/BarStack.tsrx +31 -9
  21. package/src/cartesian/CartesianAxis.tsrx +154 -22
  22. package/src/cartesian/CartesianGrid.tsrx +5 -6
  23. package/src/cartesian/ErrorBar.tsrx +9 -8
  24. package/src/cartesian/Funnel.tsrx +40 -37
  25. package/src/cartesian/GraphicalItemClipPath.tsrx +11 -4
  26. package/src/cartesian/Line.ts +1 -0
  27. package/src/cartesian/Line.tsrx +206 -28
  28. package/src/cartesian/LineDrawShape.tsrx +23 -10
  29. package/src/cartesian/ReferenceLine.tsrx +8 -8
  30. package/src/cartesian/Scatter.tsrx +61 -66
  31. package/src/cartesian/XAxis.tsrx +78 -9
  32. package/src/cartesian/YAxis.tsrx +85 -12
  33. package/src/cartesian/getCartesianPosition.ts +265 -0
  34. package/src/cartesian/getEquidistantTicks.ts +144 -0
  35. package/src/cartesian/getTicks.ts +221 -0
  36. package/src/chart/AreaChart.tsrx +5 -1
  37. package/src/chart/BarChart.tsrx +8 -2
  38. package/src/chart/CartesianChart.tsrx +17 -4
  39. package/src/chart/CategoricalChart.tsrx +4 -1
  40. package/src/chart/ComposedChart.tsrx +5 -1
  41. package/src/chart/FunnelChart.tsrx +5 -1
  42. package/src/chart/LineChart.tsrx +8 -2
  43. package/src/chart/PieChart.tsrx +6 -2
  44. package/src/chart/PolarChart.tsrx +5 -4
  45. package/src/chart/RadarChart.tsrx +6 -2
  46. package/src/chart/RadialBarChart.tsrx +6 -2
  47. package/src/chart/RechartsWrapper.tsrx +57 -21
  48. package/src/chart/Sankey.tsrx +89 -91
  49. package/src/chart/ScatterChart.tsrx +5 -1
  50. package/src/chart/SunburstChart.tsrx +21 -14
  51. package/src/chart/types.ts +0 -1
  52. package/src/component/ActivePoints.tsrx +30 -5
  53. package/src/component/Cell.ts +19 -1
  54. package/src/component/Cursor.tsrx +11 -10
  55. package/src/component/DefaultLegendContent.tsrx +15 -10
  56. package/src/component/DefaultTooltipContent.tsrx +11 -9
  57. package/src/component/Dots.tsrx +37 -6
  58. package/src/component/Label.tsrx +99 -19
  59. package/src/component/LabelList.tsrx +54 -5
  60. package/src/component/Legend.tsrx +9 -5
  61. package/src/component/ResponsiveContainer.tsrx +13 -10
  62. package/src/component/Text.tsrx +95 -32
  63. package/src/component/Tooltip.tsrx +11 -10
  64. package/src/component/TooltipBoundingBox.tsrx +4 -5
  65. package/src/component/{responsiveContainerUtils.js → responsiveContainerUtils.ts} +59 -36
  66. package/src/container/ClipPathProvider.tsrx +6 -2
  67. package/src/container/Layer.tsrx +8 -1
  68. package/src/container/RootSurface.tsrx +15 -4
  69. package/src/container/Surface.tsrx +15 -1
  70. package/src/context/CellsContext.ts +6 -5
  71. package/src/context/ErrorBarContext.tsrx +23 -4
  72. package/src/context/RegisterGraphicalItemId.tsrx +10 -2
  73. package/src/context/accessibilityContext.ts +5 -0
  74. package/src/context/brushUpdateContext.ts +11 -0
  75. package/src/context/chartDataContext.ts +5 -4
  76. package/src/context/chartLayoutContext.ts +22 -8
  77. package/src/context/legendPayloadContext.tsrx +1 -1
  78. package/src/context/tooltipContext.ts +83 -0
  79. package/src/{hooks.js → hooks.ts} +88 -66
  80. package/src/index.ts +37 -37
  81. package/src/internal.ts +4 -20
  82. package/src/legacy-props.ts +129 -0
  83. package/src/polar/Pie.tsrx +91 -69
  84. package/src/polar/PolarAngleAxis.tsrx +47 -47
  85. package/src/polar/PolarGrid.tsrx +7 -6
  86. package/src/polar/PolarRadiusAxis.tsrx +29 -21
  87. package/src/polar/Radar.tsrx +26 -19
  88. package/src/polar/RadialBar.tsrx +59 -42
  89. package/src/polar/{defaultPolarAngleAxisProps.js → defaultPolarAngleAxisProps.ts} +6 -6
  90. package/src/polar/{defaultPolarRadiusAxisProps.js → defaultPolarRadiusAxisProps.ts} +5 -4
  91. package/src/shape/Cross.tsrx +14 -2
  92. package/src/shape/Curve.tsrx +111 -23
  93. package/src/shape/Dot.tsrx +12 -1
  94. package/src/shape/Polygon.tsrx +28 -6
  95. package/src/shape/Rectangle.tsrx +30 -3
  96. package/src/shape/Sector.tsrx +48 -6
  97. package/src/shape/Symbols.tsrx +24 -6
  98. package/src/shape/Trapezoid.tsrx +33 -3
  99. package/src/state/RechartsStoreProvider.tsrx +11 -2
  100. package/src/state/ReportChartProps.ts +2 -2
  101. package/src/state/ReportMainChartProps.ts +2 -1
  102. package/src/state/SetGraphicalItem.ts +6 -4
  103. package/src/state/SetLegendPayload.ts +7 -4
  104. package/src/state/SetTooltipEntrySettings.ts +5 -2
  105. package/src/state/brushSlice.ts +40 -0
  106. package/src/state/cartesianAxisSlice.ts +291 -0
  107. package/src/state/chartDataSlice.ts +87 -0
  108. package/src/state/errorBarSlice.ts +78 -0
  109. package/src/state/eventSettingsSlice.ts +30 -0
  110. package/src/state/{externalEventsMiddleware.js → externalEventsMiddleware.ts} +55 -34
  111. package/src/state/graphicalItemsSlice.ts +180 -0
  112. package/src/state/{keyboardEventsMiddleware.js → keyboardEventsMiddleware.ts} +72 -57
  113. package/src/state/layoutSlice.ts +50 -0
  114. package/src/state/legendSlice.ts +109 -0
  115. package/src/state/{mouseEventsMiddleware.js → mouseEventsMiddleware.ts} +45 -35
  116. package/src/state/optionsSlice.ts +65 -0
  117. package/src/state/polarAxisSlice.ts +42 -0
  118. package/src/state/polarOptionsSlice.ts +43 -0
  119. package/src/state/reduxDevtoolsJsonStringifyReplacer.ts +13 -0
  120. package/src/state/referenceElementsSlice.ts +100 -0
  121. package/src/state/renderedTicksSlice.ts +60 -0
  122. package/src/state/rootPropsSlice.ts +72 -0
  123. package/src/state/selectors/areaSelectors.ts +1 -2
  124. package/src/state/selectors/{arrayEqualityCheck.js → arrayEqualityCheck.ts} +4 -5
  125. package/src/state/selectors/axisSelectors.ts +2502 -0
  126. package/src/state/selectors/barSelectors.ts +373 -0
  127. package/src/state/selectors/barStackSelectors.ts +99 -0
  128. package/src/state/selectors/brushSelectors.ts +28 -0
  129. package/src/state/selectors/combiners/combineActiveLabel.ts +16 -0
  130. package/src/state/selectors/combiners/{combineActiveTooltipIndex.js → combineActiveTooltipIndex.ts} +45 -23
  131. package/src/state/selectors/combiners/combineAllBarPositions.ts +130 -0
  132. package/src/state/selectors/combiners/combineAxisRangeWithReverse.ts +16 -0
  133. package/src/state/selectors/combiners/combineBarPosition.ts +23 -0
  134. package/src/state/selectors/combiners/combineBarSizeList.ts +79 -0
  135. package/src/state/selectors/combiners/{combineCheckedDomain.js → combineCheckedDomain.ts} +9 -6
  136. package/src/state/selectors/combiners/combineConfiguredScale.ts +100 -0
  137. package/src/state/selectors/combiners/combineCoordinateForDefaultIndex.ts +46 -0
  138. package/src/state/selectors/combiners/{combineDisplayedStackedData.js → combineDisplayedStackedData.ts} +23 -19
  139. package/src/state/selectors/combiners/combineInverseScaleFunction.ts +16 -0
  140. package/src/state/selectors/combiners/{combineRealScaleType.js → combineRealScaleType.ts} +16 -8
  141. package/src/state/selectors/combiners/combineStackedData.ts +27 -0
  142. package/src/state/selectors/combiners/combineTooltipInteractionState.ts +86 -0
  143. package/src/state/selectors/combiners/combineTooltipPayload.ts +201 -0
  144. package/src/state/selectors/combiners/{combineTooltipPayloadConfigurations.js → combineTooltipPayloadConfigurations.ts} +17 -18
  145. package/src/state/selectors/containerSelectors.ts +12 -0
  146. package/src/state/selectors/{dataSelectors.js → dataSelectors.ts} +43 -41
  147. package/src/state/selectors/funnelSelectors.ts +5 -5
  148. package/src/state/selectors/graphicalItemSelectors.ts +22 -0
  149. package/src/state/selectors/legendSelectors.ts +25 -0
  150. package/src/state/selectors/lineSelectors.ts +159 -0
  151. package/src/state/selectors/numberDomainEqualityCheck.ts +15 -0
  152. package/src/state/selectors/pickAxisId.ts +6 -0
  153. package/src/state/selectors/pickAxisType.ts +4 -0
  154. package/src/state/selectors/pieSelectors.ts +14 -13
  155. package/src/state/selectors/polarAxisSelectors.ts +223 -0
  156. package/src/state/selectors/polarSelectors.ts +1 -1
  157. package/src/state/selectors/radarSelectors.ts +1 -1
  158. package/src/state/selectors/radialBarSelectors.ts +17 -16
  159. package/src/state/selectors/rootPropsSelectors.ts +26 -0
  160. package/src/state/selectors/scatterSelectors.ts +11 -10
  161. package/src/state/selectors/{selectActivePropsFromChartPointer.js → selectActivePropsFromChartPointer.ts} +11 -4
  162. package/src/state/selectors/selectAllAxes.ts +20 -0
  163. package/src/state/selectors/selectChartOffset.ts +17 -0
  164. package/src/state/selectors/selectChartOffsetInternal.ts +147 -0
  165. package/src/state/selectors/{selectPlotArea.js → selectPlotArea.ts} +4 -3
  166. package/src/state/selectors/selectTooltipAxisId.ts +6 -0
  167. package/src/state/selectors/{selectTooltipAxisType.js → selectTooltipAxisType.ts} +10 -4
  168. package/src/state/selectors/selectTooltipEventType.ts +39 -0
  169. package/src/state/selectors/selectTooltipPayloadSearcher.ts +6 -0
  170. package/src/state/selectors/selectTooltipSettings.ts +6 -0
  171. package/src/state/selectors/selectTooltipState.ts +5 -0
  172. package/src/state/selectors/selectors.ts +315 -0
  173. package/src/state/selectors/tooltipSelectors.ts +611 -0
  174. package/src/state/selectors/touchSelectors.ts +52 -0
  175. package/src/state/{store.js → store.ts} +46 -36
  176. package/src/state/tooltipSlice.ts +507 -0
  177. package/src/state/{touchEventsMiddleware.js → touchEventsMiddleware.ts} +54 -42
  178. package/src/state/types/AreaSettings.ts +15 -0
  179. package/src/state/types/BarSettings.ts +15 -0
  180. package/src/state/types/LineSettings.ts +10 -0
  181. package/src/state/types/PieSettings.ts +32 -0
  182. package/src/state/types/RadarSettings.ts +6 -0
  183. package/src/state/types/RadialBarSettings.ts +10 -0
  184. package/src/state/types/ScatterSettings.ts +13 -0
  185. package/src/state/types/StackedGraphicalItem.ts +34 -0
  186. package/src/state/zIndexSlice.ts +137 -0
  187. package/src/synchronisation/syncSelectors.ts +7 -0
  188. package/src/synchronisation/types.ts +42 -0
  189. package/src/synchronisation/useChartSynchronisation.tsrx +26 -11
  190. package/src/types.ts +55 -0
  191. package/src/util/ActiveShapeUtils.tsrx +34 -10
  192. package/src/util/BarUtils.tsrx +43 -3
  193. package/src/util/{CartesianUtils.js → CartesianUtils.ts} +22 -39
  194. package/src/util/ChartUtils.ts +759 -0
  195. package/src/util/{Constants.js → Constants.ts} +6 -6
  196. package/src/util/DOMUtils.ts +135 -0
  197. package/src/util/{DataUtils.js → DataUtils.ts} +120 -47
  198. package/src/util/Events.ts +22 -0
  199. package/src/util/FunnelUtils.tsrx +3 -3
  200. package/src/util/Global.ts +13 -0
  201. package/src/util/IfOverflow.ts +16 -0
  202. package/src/util/LRUCache.ts +42 -0
  203. package/src/util/{LogUtils.js → LogUtils.ts} +7 -12
  204. package/src/util/OctaneTypes.ts +51 -0
  205. package/src/util/PolarUtils.ts +132 -0
  206. package/src/util/RadialBarUtils.tsrx +3 -3
  207. package/src/util/ReduceCSSCalc.ts +186 -0
  208. package/src/util/ScatterUtils.tsrx +9 -7
  209. package/src/util/{TickUtils.js → TickUtils.ts} +30 -13
  210. package/src/util/{YAxisUtils.js → YAxisUtils.ts} +27 -17
  211. package/src/util/axisPropsAreEqual.ts +49 -0
  212. package/src/util/createEventProxy.ts +20 -0
  213. package/src/util/{excludeEventProps.js → excludeEventProps.ts} +8 -6
  214. package/src/util/getActiveCoordinate.ts +210 -0
  215. package/src/util/{getAxisTypeBasedOnLayout.js → getAxisTypeBasedOnLayout.ts} +7 -3
  216. package/src/util/getClassNameFromUnknown.ts +7 -0
  217. package/src/util/{getEveryNth.js → getEveryNth.ts} +5 -6
  218. package/src/util/getRadiusAndStrokeWidthFromDot.ts +31 -0
  219. package/src/util/{getRelativeCoordinate.js → getRelativeCoordinate.ts} +26 -9
  220. package/src/util/getSliced.ts +14 -0
  221. package/src/util/{isDomainSpecifiedByUser.js → isDomainSpecifiedByUser.ts} +46 -100
  222. package/src/util/isWellBehavedNumber.ts +8 -0
  223. package/src/util/payload/getUniqPayload.ts +1 -1
  224. package/src/util/{propsAreEqual.js → propsAreEqual.ts} +10 -8
  225. package/src/util/{resolveDefaultProps.js → resolveDefaultProps.ts} +35 -57
  226. package/src/util/round.ts +33 -0
  227. package/src/util/scale/CustomScaleDefinition.ts +82 -0
  228. package/src/util/scale/RechartsScale.ts +131 -0
  229. package/src/util/scale/{createCategoricalInverse.js → createCategoricalInverse.ts} +24 -29
  230. package/src/util/scale/{getNiceTickValues.js → getNiceTickValues.ts} +125 -146
  231. package/src/util/scale/index.ts +2 -0
  232. package/src/util/scale/util/{arithmetic.js → arithmetic.ts} +12 -8
  233. package/src/util/stacks/getStackSeriesIdentifier.ts +21 -0
  234. package/src/util/stacks/stackTypes.ts +58 -0
  235. package/src/util/{svgPropertiesNoEvents.js → svgPropertiesNoEvents.ts} +52 -27
  236. package/src/util/tooltip/translate.ts +2 -1
  237. package/src/util/typedDataKey.ts +49 -0
  238. package/src/util/types.ts +1265 -7
  239. package/src/util/{useUniqueId.js → useUniqueId.ts} +9 -5
  240. package/src/zIndex/{DefaultZIndexes.js → DefaultZIndexes.ts} +13 -4
  241. package/src/zIndex/ZIndexLayer.tsrx +13 -4
  242. package/src/zIndex/ZIndexPortal.tsrx +14 -4
  243. package/src/zIndex/{getZIndexFromUnknown.js → getZIndexFromUnknown.ts} +3 -3
  244. package/src/zIndex/{zIndexSelectors.js → zIndexSelectors.ts} +17 -11
  245. package/src/animation/easing.js +0 -193
  246. package/src/animation/timeoutController.js +0 -49
  247. package/src/animation/util.js +0 -11
  248. package/src/cartesian/Area.tsrx.d.ts +0 -340
  249. package/src/cartesian/Bar.tsrx.d.ts +0 -4
  250. package/src/cartesian/BarStack.tsrx.d.ts +0 -6
  251. package/src/cartesian/CartesianAxis.tsrx.d.ts +0 -3
  252. package/src/cartesian/CartesianGrid.tsrx.d.ts +0 -219
  253. package/src/cartesian/ErrorBar.tsrx.d.ts +0 -131
  254. package/src/cartesian/Funnel.tsrx.d.ts +0 -274
  255. package/src/cartesian/Line.tsrx.d.ts +0 -4
  256. package/src/cartesian/LineDrawShape.tsrx.d.ts +0 -2
  257. package/src/cartesian/ReferenceLine.tsrx.d.ts +0 -178
  258. package/src/cartesian/Scatter.tsrx.d.ts +0 -351
  259. package/src/cartesian/XAxis.tsrx.d.ts +0 -3
  260. package/src/cartesian/YAxis.tsrx.d.ts +0 -3
  261. package/src/cartesian/ZAxis.tsrx.d.ts +0 -102
  262. package/src/cartesian/getCartesianPosition.js +0 -277
  263. package/src/cartesian/getEquidistantTicks.js +0 -133
  264. package/src/cartesian/getTicks.js +0 -280
  265. package/src/chart/AreaChart.tsrx.d.ts +0 -12
  266. package/src/chart/BarChart.tsrx.d.ts +0 -2
  267. package/src/chart/CartesianChart.tsrx.d.ts +0 -10
  268. package/src/chart/ComposedChart.tsrx.d.ts +0 -12
  269. package/src/chart/FunnelChart.tsrx.d.ts +0 -12
  270. package/src/chart/LineChart.tsrx.d.ts +0 -2
  271. package/src/chart/PieChart.tsrx.d.ts +0 -31
  272. package/src/chart/RadarChart.tsrx.d.ts +0 -31
  273. package/src/chart/RadialBarChart.tsrx.d.ts +0 -31
  274. package/src/chart/Sankey.tsrx.d.ts +0 -253
  275. package/src/chart/ScatterChart.tsrx.d.ts +0 -12
  276. package/src/chart/SunburstChart.tsrx.d.ts +0 -146
  277. package/src/component/DefaultLegendContent.tsrx.d.ts +0 -125
  278. package/src/component/DefaultTooltipContent.tsrx.d.ts +0 -87
  279. package/src/component/Label.tsrx.d.ts +0 -12
  280. package/src/component/LabelList.tsrx.d.ts +0 -8
  281. package/src/component/Legend.tsrx.d.ts +0 -88
  282. package/src/component/ResponsiveContainer.tsrx.d.ts +0 -81
  283. package/src/component/Text.tsrx.d.ts +0 -9
  284. package/src/component/Tooltip.tsrx.d.ts +0 -246
  285. package/src/container/Layer.tsrx.d.ts +0 -6
  286. package/src/container/Surface.tsrx.d.ts +0 -12
  287. package/src/context/accessibilityContext.js +0 -10
  288. package/src/context/tooltipContext.js +0 -55
  289. package/src/index.d.ts +0 -281
  290. package/src/polar/Pie.tsrx.d.ts +0 -436
  291. package/src/polar/PolarAngleAxis.tsrx.d.ts +0 -215
  292. package/src/polar/PolarGrid.tsrx.d.ts +0 -117
  293. package/src/polar/PolarRadiusAxis.tsrx.d.ts +0 -209
  294. package/src/polar/Radar.tsrx.d.ts +0 -215
  295. package/src/polar/RadialBar.tsrx.d.ts +0 -340
  296. package/src/shape/Cross.tsrx.d.ts +0 -12
  297. package/src/shape/Curve.tsrx.d.ts +0 -42
  298. package/src/shape/Dot.tsrx.d.ts +0 -9
  299. package/src/shape/Polygon.tsrx.d.ts +0 -13
  300. package/src/shape/Rectangle.tsrx.d.ts +0 -31
  301. package/src/shape/Sector.tsrx.d.ts +0 -29
  302. package/src/shape/Symbols.tsrx.d.ts +0 -15
  303. package/src/shape/Trapezoid.tsrx.d.ts +0 -29
  304. package/src/state/brushSlice.js +0 -36
  305. package/src/state/cartesianAxisSlice.js +0 -256
  306. package/src/state/chartDataSlice.js +0 -67
  307. package/src/state/errorBarSlice.js +0 -53
  308. package/src/state/eventSettingsSlice.js +0 -25
  309. package/src/state/graphicalItemsSlice.js +0 -91
  310. package/src/state/layoutSlice.js +0 -57
  311. package/src/state/legendSlice.js +0 -83
  312. package/src/state/optionsSlice.js +0 -45
  313. package/src/state/polarAxisSlice.js +0 -33
  314. package/src/state/polarOptionsSlice.js +0 -26
  315. package/src/state/reduxDevtoolsJsonStringifyReplacer.js +0 -14
  316. package/src/state/referenceElementsSlice.js +0 -51
  317. package/src/state/renderedTicksSlice.js +0 -41
  318. package/src/state/rootPropsSlice.js +0 -48
  319. package/src/state/selectors/axisSelectors.js +0 -2113
  320. package/src/state/selectors/barSelectors.js +0 -263
  321. package/src/state/selectors/barStackSelectors.js +0 -65
  322. package/src/state/selectors/brushSelectors.js +0 -21
  323. package/src/state/selectors/combiners/combineActiveLabel.js +0 -18
  324. package/src/state/selectors/combiners/combineAllBarPositions.js +0 -169
  325. package/src/state/selectors/combiners/combineAxisRangeWithReverse.js +0 -11
  326. package/src/state/selectors/combiners/combineBarPosition.js +0 -17
  327. package/src/state/selectors/combiners/combineBarSizeList.js +0 -115
  328. package/src/state/selectors/combiners/combineConfiguredScale.js +0 -46
  329. package/src/state/selectors/combiners/combineCoordinateForDefaultIndex.js +0 -48
  330. package/src/state/selectors/combiners/combineInverseScaleFunction.js +0 -12
  331. package/src/state/selectors/combiners/combineStackedData.js +0 -22
  332. package/src/state/selectors/combiners/combineTooltipInteractionState.js +0 -121
  333. package/src/state/selectors/combiners/combineTooltipPayload.js +0 -248
  334. package/src/state/selectors/containerSelectors.js +0 -6
  335. package/src/state/selectors/graphicalItemSelectors.js +0 -25
  336. package/src/state/selectors/legendSelectors.js +0 -18
  337. package/src/state/selectors/lineSelectors.js +0 -106
  338. package/src/state/selectors/numberDomainEqualityCheck.js +0 -11
  339. package/src/state/selectors/pickAxisId.js +0 -3
  340. package/src/state/selectors/pickAxisType.js +0 -3
  341. package/src/state/selectors/polarAxisSelectors.js +0 -237
  342. package/src/state/selectors/rootPropsSelectors.js +0 -13
  343. package/src/state/selectors/selectAllAxes.js +0 -15
  344. package/src/state/selectors/selectChartOffset.js +0 -12
  345. package/src/state/selectors/selectChartOffsetInternal.js +0 -174
  346. package/src/state/selectors/selectTooltipAxisId.js +0 -3
  347. package/src/state/selectors/selectTooltipEventType.js +0 -27
  348. package/src/state/selectors/selectTooltipPayloadSearcher.js +0 -3
  349. package/src/state/selectors/selectTooltipSettings.js +0 -3
  350. package/src/state/selectors/selectTooltipState.js +0 -3
  351. package/src/state/selectors/selectors.js +0 -222
  352. package/src/state/selectors/tooltipSelectors.js +0 -471
  353. package/src/state/selectors/touchSelectors.js +0 -31
  354. package/src/state/tooltipSlice.js +0 -237
  355. package/src/state/types/StackedGraphicalItem.js +0 -18
  356. package/src/state/zIndexSlice.js +0 -167
  357. package/src/synchronisation/syncSelectors.js +0 -5
  358. package/src/util/ChartUtils.js +0 -630
  359. package/src/util/DOMUtils.js +0 -180
  360. package/src/util/Events.js +0 -7
  361. package/src/util/Global.js +0 -13
  362. package/src/util/LRUCache.js +0 -58
  363. package/src/util/PolarUtils.js +0 -190
  364. package/src/util/ReduceCSSCalc.js +0 -260
  365. package/src/util/axisPropsAreEqual.js +0 -63
  366. package/src/util/createEventProxy.js +0 -18
  367. package/src/util/getActiveCoordinate.js +0 -253
  368. package/src/util/getClassNameFromUnknown.js +0 -8
  369. package/src/util/getRadiusAndStrokeWidthFromDot.js +0 -28
  370. package/src/util/getSliced.js +0 -11
  371. package/src/util/isWellBehavedNumber.js +0 -8
  372. package/src/util/round.js +0 -39
  373. package/src/util/scale/RechartsScale.js +0 -68
  374. package/src/util/scale/index.js +0 -3
  375. package/src/util/stacks/getStackSeriesIdentifier.js +0 -10
  376. package/src/zIndex/ZIndexLayer.tsrx.d.ts +0 -2
@@ -0,0 +1,373 @@
1
+ // Adapted from recharts@3.9.2, commit b3451050c027a23957ffa50a2665c9119df21e47.
2
+ import type { RegisteredCell } from '../../context/CellsContext';
3
+ import { createSelector } from 'reselect';
4
+
5
+ import { Series } from 'victory-vendor/d3-shape';
6
+ import { RechartsRootState } from '../store';
7
+ import {
8
+ BaseAxisWithScale,
9
+ selectAxisWithScale,
10
+ selectCartesianAxisSize,
11
+ selectStackGroups,
12
+ selectTicksOfGraphicalItem,
13
+ selectUnfilteredCartesianItems,
14
+ } from './axisSelectors';
15
+ import { isNullish } from '../../util/DataUtils';
16
+ import { BarPositionPosition, getBandSizeOfAxis, StackId } from '../../util/ChartUtils';
17
+ import {
18
+ CartesianViewBoxRequired,
19
+ ChartOffsetInternal,
20
+ DataKey,
21
+ LayoutType,
22
+ TickItem,
23
+ } from '../../util/types';
24
+ import { BarRectangleItem, computeBarRectangles } from '../../cartesian/Bar.tsrx';
25
+ import { selectChartLayout } from '../../context/chartLayoutContext';
26
+ import { ChartData } from '../chartDataSlice';
27
+ import { selectChartDataWithIndexesIfNotInPanoramaPosition3 } from './dataSelectors';
28
+ import { selectAxisViewBox, selectChartOffsetInternal } from './selectChartOffsetInternal';
29
+ import {
30
+ selectBarCategoryGap,
31
+ selectBarGap,
32
+ selectRootBarSize,
33
+ selectRootMaxBarSize,
34
+ } from './rootPropsSelectors';
35
+ import {
36
+ AllStackGroups,
37
+ StackDataPoint,
38
+ StackSeriesIdentifier,
39
+ } from '../../util/stacks/stackTypes';
40
+ import { BarSettings } from '../types/BarSettings';
41
+ import { GraphicalItemId } from '../graphicalItemsSlice';
42
+ import { BarCategory, combineBarSizeList } from './combiners/combineBarSizeList';
43
+ import { combineAllBarPositions } from './combiners/combineAllBarPositions';
44
+ import { combineStackedData } from './combiners/combineStackedData';
45
+ import {
46
+ selectXAxisIdFromGraphicalItemId,
47
+ selectYAxisIdFromGraphicalItemId,
48
+ } from './graphicalItemSelectors';
49
+ import { combineBarPosition } from './combiners/combineBarPosition';
50
+
51
+ const pickIsPanorama = (
52
+ _state: RechartsRootState,
53
+ _id: GraphicalItemId,
54
+ isPanorama: boolean,
55
+ ): boolean => isPanorama;
56
+
57
+ const pickBarId = (_state: RechartsRootState, id: GraphicalItemId): GraphicalItemId => id;
58
+
59
+ const selectSynchronisedBarSettings: (
60
+ state: RechartsRootState,
61
+ id: GraphicalItemId,
62
+ ) => BarSettings | undefined = createSelector(
63
+ [selectUnfilteredCartesianItems, pickBarId],
64
+ (graphicalItems, id: GraphicalItemId) =>
65
+ graphicalItems.filter((item) => item.type === 'bar').find((item) => item.id === id),
66
+ );
67
+
68
+ export const selectMaxBarSize: (
69
+ _state: RechartsRootState,
70
+ id: GraphicalItemId,
71
+ ) => number | undefined = createSelector(
72
+ [selectSynchronisedBarSettings],
73
+ (barSettings: BarSettings | undefined) => barSettings?.maxBarSize,
74
+ );
75
+
76
+ const pickCells = (
77
+ _state: RechartsRootState,
78
+ _id: GraphicalItemId,
79
+ _isPanorama: boolean,
80
+ cells: ReadonlyArray<RegisteredCell> | undefined,
81
+ ): ReadonlyArray<RegisteredCell> | undefined => cells;
82
+
83
+ export const selectAllVisibleBars: (
84
+ state: RechartsRootState,
85
+ id: GraphicalItemId,
86
+ isPanorama: boolean,
87
+ ) => ReadonlyArray<BarSettings> = createSelector(
88
+ [
89
+ selectChartLayout,
90
+ selectUnfilteredCartesianItems,
91
+ selectXAxisIdFromGraphicalItemId,
92
+ selectYAxisIdFromGraphicalItemId,
93
+ pickIsPanorama,
94
+ ],
95
+ (layout: LayoutType, allItems, xAxisId, yAxisId, isPanorama) =>
96
+ allItems
97
+ .filter((i) => {
98
+ if (layout === 'horizontal') {
99
+ return i.xAxisId === xAxisId;
100
+ }
101
+ return i.yAxisId === yAxisId;
102
+ })
103
+ .filter((i) => i.isPanorama === isPanorama)
104
+ .filter((i) => i.hide === false)
105
+ .filter((i) => i.type === 'bar'),
106
+ );
107
+
108
+ export type SizeList = ReadonlyArray<BarCategory>;
109
+
110
+ const selectBarStackGroups = (
111
+ state: RechartsRootState,
112
+ id: GraphicalItemId,
113
+ isPanorama: boolean,
114
+ ): AllStackGroups | undefined => {
115
+ const layout = selectChartLayout(state);
116
+ const xAxisId = selectXAxisIdFromGraphicalItemId(state, id);
117
+ const yAxisId = selectYAxisIdFromGraphicalItemId(state, id);
118
+ if (xAxisId == null || yAxisId == null) {
119
+ return undefined;
120
+ }
121
+ if (layout === 'horizontal') {
122
+ return selectStackGroups(state, 'yAxis', yAxisId, isPanorama);
123
+ }
124
+ return selectStackGroups(state, 'xAxis', xAxisId, isPanorama);
125
+ };
126
+
127
+ export const selectBarCartesianAxisSize = (state: RechartsRootState, id: GraphicalItemId) => {
128
+ const layout = selectChartLayout(state);
129
+ const xAxisId = selectXAxisIdFromGraphicalItemId(state, id);
130
+ const yAxisId = selectYAxisIdFromGraphicalItemId(state, id);
131
+ if (xAxisId == null || yAxisId == null) {
132
+ return undefined;
133
+ }
134
+ if (layout === 'horizontal') {
135
+ return selectCartesianAxisSize(state, 'xAxis', xAxisId);
136
+ }
137
+ return selectCartesianAxisSize(state, 'yAxis', yAxisId);
138
+ };
139
+
140
+ export const selectBarSizeList: (
141
+ state: RechartsRootState,
142
+ id: GraphicalItemId,
143
+ isPanorama: boolean,
144
+ ) => SizeList = createSelector(
145
+ [selectAllVisibleBars, selectRootBarSize, selectBarCartesianAxisSize],
146
+ combineBarSizeList,
147
+ );
148
+
149
+ export const selectBarBandSize: (
150
+ state: RechartsRootState,
151
+ id: GraphicalItemId,
152
+ isPanorama: boolean,
153
+ ) => number = (state: RechartsRootState, id: GraphicalItemId, isPanorama: boolean): number => {
154
+ const barSettings: BarSettings | undefined = selectSynchronisedBarSettings(state, id);
155
+ if (barSettings == null) {
156
+ return 0;
157
+ }
158
+ const xAxisId = selectXAxisIdFromGraphicalItemId(state, id);
159
+ const yAxisId = selectYAxisIdFromGraphicalItemId(state, id);
160
+ if (xAxisId == null || yAxisId == null) {
161
+ return 0;
162
+ }
163
+ const layout = selectChartLayout(state);
164
+ const globalMaxBarSize: number | undefined = selectRootMaxBarSize(state);
165
+ const { maxBarSize: childMaxBarSize } = barSettings;
166
+ const maxBarSize: number | undefined = isNullish(childMaxBarSize)
167
+ ? globalMaxBarSize
168
+ : childMaxBarSize;
169
+ let axis: BaseAxisWithScale | undefined, ticks: ReadonlyArray<TickItem> | undefined;
170
+ if (layout === 'horizontal') {
171
+ axis = selectAxisWithScale(state, 'xAxis', xAxisId, isPanorama);
172
+ ticks = selectTicksOfGraphicalItem(state, 'xAxis', xAxisId, isPanorama);
173
+ } else {
174
+ axis = selectAxisWithScale(state, 'yAxis', yAxisId, isPanorama);
175
+ ticks = selectTicksOfGraphicalItem(state, 'yAxis', yAxisId, isPanorama);
176
+ }
177
+ return getBandSizeOfAxis(axis, ticks, true) ?? maxBarSize ?? 0;
178
+ };
179
+
180
+ export const selectAxisBandSize = (
181
+ state: RechartsRootState,
182
+ id: GraphicalItemId,
183
+ isPanorama: boolean,
184
+ ): number | undefined => {
185
+ const layout = selectChartLayout(state);
186
+ const xAxisId = selectXAxisIdFromGraphicalItemId(state, id);
187
+ const yAxisId = selectYAxisIdFromGraphicalItemId(state, id);
188
+ if (xAxisId == null || yAxisId == null) {
189
+ return undefined;
190
+ }
191
+ let axis: BaseAxisWithScale | undefined, ticks: ReadonlyArray<TickItem> | undefined;
192
+ if (layout === 'horizontal') {
193
+ axis = selectAxisWithScale(state, 'xAxis', xAxisId, isPanorama);
194
+ ticks = selectTicksOfGraphicalItem(state, 'xAxis', xAxisId, isPanorama);
195
+ } else {
196
+ axis = selectAxisWithScale(state, 'yAxis', yAxisId, isPanorama);
197
+ ticks = selectTicksOfGraphicalItem(state, 'yAxis', yAxisId, isPanorama);
198
+ }
199
+ return getBandSizeOfAxis(axis, ticks);
200
+ };
201
+
202
+ export type BarWithPosition = {
203
+ stackId: StackId | undefined;
204
+ /**
205
+ * List of dataKeys of items stacked at this position.
206
+ * All of these Bars are either sharing the same stackId,
207
+ * or this is an array with one Bar because it has no stackId defined.
208
+ *
209
+ * This structure limits us to having one dataKey only once per stack which I think is reasonable.
210
+ * People who want to have the same data twice can duplicate their data to have two distinct dataKeys.
211
+ */
212
+ dataKeys: ReadonlyArray<DataKey<any>>;
213
+ /**
214
+ * Position of this stack in absolute pixels measured from the start of the chart
215
+ */
216
+ position: BarPositionPosition;
217
+ };
218
+
219
+ export const selectAllBarPositions: (
220
+ state: RechartsRootState,
221
+ id: GraphicalItemId,
222
+ isPanorama: boolean,
223
+ ) => ReadonlyArray<BarWithPosition> | undefined = createSelector(
224
+ [
225
+ selectBarSizeList,
226
+ selectRootMaxBarSize,
227
+ selectBarGap,
228
+ selectBarCategoryGap,
229
+ selectBarBandSize,
230
+ selectAxisBandSize,
231
+ selectMaxBarSize,
232
+ ],
233
+ combineAllBarPositions,
234
+ );
235
+
236
+ const selectXAxisWithScale = (
237
+ state: RechartsRootState,
238
+ id: GraphicalItemId,
239
+ isPanorama: boolean,
240
+ ) => {
241
+ const xAxisId = selectXAxisIdFromGraphicalItemId(state, id);
242
+ if (xAxisId == null) {
243
+ return undefined;
244
+ }
245
+ return selectAxisWithScale(state, 'xAxis', xAxisId, isPanorama);
246
+ };
247
+
248
+ const selectYAxisWithScale = (
249
+ state: RechartsRootState,
250
+ id: GraphicalItemId,
251
+ isPanorama: boolean,
252
+ ) => {
253
+ const yAxisId = selectYAxisIdFromGraphicalItemId(state, id);
254
+ if (yAxisId == null) {
255
+ return undefined;
256
+ }
257
+ return selectAxisWithScale(state, 'yAxis', yAxisId, isPanorama);
258
+ };
259
+
260
+ const selectXAxisTicks = (state: RechartsRootState, id: GraphicalItemId, isPanorama: boolean) => {
261
+ const xAxisId = selectXAxisIdFromGraphicalItemId(state, id);
262
+ if (xAxisId == null) {
263
+ return undefined;
264
+ }
265
+ return selectTicksOfGraphicalItem(state, 'xAxis', xAxisId, isPanorama);
266
+ };
267
+
268
+ const selectYAxisTicks = (state: RechartsRootState, id: GraphicalItemId, isPanorama: boolean) => {
269
+ const yAxisId = selectYAxisIdFromGraphicalItemId(state, id);
270
+ if (yAxisId == null) {
271
+ return undefined;
272
+ }
273
+ return selectTicksOfGraphicalItem(state, 'yAxis', yAxisId, isPanorama);
274
+ };
275
+
276
+ export const selectBarPosition: (
277
+ state: RechartsRootState,
278
+ id: GraphicalItemId,
279
+ isPanorama: boolean,
280
+ ) => BarPositionPosition | undefined = createSelector(
281
+ [selectAllBarPositions, selectSynchronisedBarSettings],
282
+ combineBarPosition,
283
+ );
284
+
285
+ export const selectStackedDataOfItem: (
286
+ state: RechartsRootState,
287
+ id: GraphicalItemId,
288
+ isPanorama: boolean,
289
+ ) => Series<StackDataPoint, StackSeriesIdentifier> | undefined = createSelector(
290
+ [selectBarStackGroups, selectSynchronisedBarSettings],
291
+ combineStackedData,
292
+ );
293
+
294
+ export const selectBarRectangles: (
295
+ state: RechartsRootState,
296
+ id: GraphicalItemId,
297
+ isPanorama: boolean,
298
+ cells: ReadonlyArray<RegisteredCell> | undefined,
299
+ ) => ReadonlyArray<BarRectangleItem> | undefined = createSelector(
300
+ [
301
+ selectChartOffsetInternal,
302
+ selectAxisViewBox,
303
+ selectXAxisWithScale,
304
+ selectYAxisWithScale,
305
+ selectXAxisTicks,
306
+ selectYAxisTicks,
307
+ selectBarPosition,
308
+ selectChartLayout,
309
+ selectChartDataWithIndexesIfNotInPanoramaPosition3,
310
+ selectAxisBandSize,
311
+ selectStackedDataOfItem,
312
+ selectSynchronisedBarSettings,
313
+ pickCells,
314
+ ],
315
+ (
316
+ offset: ChartOffsetInternal,
317
+ axisViewBox: CartesianViewBoxRequired,
318
+ xAxis: BaseAxisWithScale | undefined,
319
+ yAxis: BaseAxisWithScale | undefined,
320
+ xAxisTicks,
321
+ yAxisTicks,
322
+ pos: BarPositionPosition | undefined,
323
+ layout: LayoutType,
324
+ { chartData, dataStartIndex, dataEndIndex },
325
+ bandSize,
326
+ stackedData,
327
+ barSettings: BarSettings | undefined,
328
+ cells,
329
+ ): ReadonlyArray<BarRectangleItem> | undefined => {
330
+ if (
331
+ barSettings == null ||
332
+ pos == null ||
333
+ axisViewBox == null ||
334
+ (layout !== 'horizontal' && layout !== 'vertical') ||
335
+ xAxis == null ||
336
+ yAxis == null ||
337
+ xAxisTicks == null ||
338
+ yAxisTicks == null ||
339
+ bandSize == null
340
+ ) {
341
+ return undefined;
342
+ }
343
+ const { data } = barSettings;
344
+
345
+ let displayedData: ChartData | undefined;
346
+ if (data != null && data.length > 0) {
347
+ displayedData = data;
348
+ } else {
349
+ displayedData = chartData?.slice(dataStartIndex, dataEndIndex + 1);
350
+ }
351
+
352
+ if (displayedData == null) {
353
+ return undefined;
354
+ }
355
+
356
+ return computeBarRectangles({
357
+ layout,
358
+ barSettings,
359
+ pos,
360
+ parentViewBox: axisViewBox,
361
+ bandSize,
362
+ xAxis,
363
+ yAxis,
364
+ xAxisTicks,
365
+ yAxisTicks,
366
+ stackedData,
367
+ displayedData,
368
+ offset,
369
+ cells,
370
+ dataStartIndex,
371
+ });
372
+ },
373
+ );
@@ -0,0 +1,99 @@
1
+ // Adapted from recharts@3.9.2, commit b3451050c027a23957ffa50a2665c9119df21e47.
2
+ import { createSelector } from 'reselect';
3
+ import type { RechartsRootState } from '../store';
4
+ import type { NormalizedStackId } from '../../util/ChartUtils';
5
+ import type { BarSettings } from '../types/BarSettings';
6
+ import { selectUnfilteredCartesianItems } from './axisSelectors';
7
+ import type { CartesianGraphicalItemSettings } from '../graphicalItemsSlice';
8
+ import { selectBarRectangles } from './barSelectors';
9
+
10
+ const pickStackId = (state: RechartsRootState, stackId: NormalizedStackId): NormalizedStackId =>
11
+ stackId;
12
+
13
+ const pickIsPanorama = (
14
+ state: RechartsRootState,
15
+ stackId: NormalizedStackId,
16
+ isPanorama: boolean,
17
+ ): boolean => isPanorama;
18
+
19
+ export const selectAllBarsInStack: (
20
+ state: RechartsRootState,
21
+ stackId: NormalizedStackId,
22
+ isPanorama: boolean,
23
+ ) => ReadonlyArray<BarSettings> = createSelector(
24
+ [pickStackId, selectUnfilteredCartesianItems, pickIsPanorama],
25
+ (
26
+ stackId: NormalizedStackId,
27
+ allItems: ReadonlyArray<CartesianGraphicalItemSettings>,
28
+ isPanorama: boolean,
29
+ ): ReadonlyArray<BarSettings> => {
30
+ return allItems
31
+ .filter((i) => i.type === 'bar')
32
+ .filter((i) => i.stackId === stackId)
33
+ .filter((i) => i.isPanorama === isPanorama)
34
+ .filter((i) => !i.hide);
35
+ },
36
+ );
37
+
38
+ const selectAllBarIdsInStack = createSelector([selectAllBarsInStack], (allBars) => {
39
+ return allBars.map((bar) => bar.id);
40
+ });
41
+
42
+ export type BarStackItem = {
43
+ x: number;
44
+ y: number;
45
+ width: number;
46
+ height: number;
47
+ };
48
+
49
+ /**
50
+ * Takes two rectangles and returns a new rectangle that encompasses both.
51
+ * It takes the minimum x and y, and the maximum width and height.
52
+ * It handles overlapping rectangles, and rectangles with a gap between them.
53
+ * @param rect1
54
+ * @param rect2
55
+ */
56
+ export const expandRectangle = (
57
+ rect1: BarStackItem | undefined,
58
+ rect2: BarStackItem | undefined,
59
+ ): BarStackItem | undefined => {
60
+ if (!rect1) {
61
+ return rect2;
62
+ }
63
+ if (!rect2) {
64
+ return rect1;
65
+ }
66
+ const x = Math.min(rect1.x, rect1.x + rect1.width, rect2.x, rect2.x + rect2.width);
67
+ const y = Math.min(rect1.y, rect1.y + rect1.height, rect2.y, rect2.y + rect2.height);
68
+ const maxX = Math.max(rect1.x, rect1.x + rect1.width, rect2.x, rect2.x + rect2.width);
69
+ const maxY = Math.max(rect1.y, rect1.y + rect1.height, rect2.y, rect2.y + rect2.height);
70
+ const width = maxX - x;
71
+ const height = maxY - y;
72
+ return { x, y, width, height };
73
+ };
74
+
75
+ const combineStackRects: (
76
+ state: RechartsRootState,
77
+ stackId: NormalizedStackId,
78
+ isPanorama: boolean,
79
+ ) => ReadonlyArray<BarStackItem | undefined> = (state, stackId, isPanorama) => {
80
+ const allBarIds = selectAllBarIdsInStack(state, stackId, isPanorama);
81
+ const stackRects: Array<BarStackItem | undefined> = [];
82
+ allBarIds.forEach((barId) => {
83
+ const rectangles = selectBarRectangles(state, barId, isPanorama, undefined);
84
+ rectangles?.forEach((rect) => {
85
+ const rectIndex = rect.originalDataIndex;
86
+ stackRects[rectIndex] = expandRectangle(stackRects[rectIndex], rect);
87
+ });
88
+ });
89
+ return stackRects;
90
+ };
91
+
92
+ export const selectStackRects: (
93
+ state: RechartsRootState,
94
+ stackId: NormalizedStackId,
95
+ isPanorama: boolean,
96
+ ) => ReadonlyArray<BarStackItem | undefined> = createSelector(
97
+ [(state) => state, pickStackId, pickIsPanorama],
98
+ combineStackRects,
99
+ );
@@ -0,0 +1,28 @@
1
+ // Adapted from recharts@3.9.2, commit b3451050c027a23957ffa50a2665c9119df21e47.
2
+ import { createSelector } from 'reselect';
3
+ import { RechartsRootState } from '../store';
4
+ import { selectChartOffsetInternal } from './selectChartOffsetInternal';
5
+ import { selectMargin } from './containerSelectors';
6
+ import { isNumber } from '../../util/DataUtils';
7
+ import { BrushSettings } from '../brushSlice';
8
+
9
+ export const selectBrushSettings = (state: RechartsRootState): BrushSettings => state.brush;
10
+
11
+ export type BrushDimensions = {
12
+ x: number;
13
+ y: number;
14
+ width: number;
15
+ height: number;
16
+ };
17
+
18
+ export const selectBrushDimensions: (state: RechartsRootState) => BrushDimensions = createSelector(
19
+ [selectBrushSettings, selectChartOffsetInternal, selectMargin],
20
+ (brushSettings, offset, margin): BrushDimensions => ({
21
+ height: brushSettings.height,
22
+ x: isNumber(brushSettings.x) ? brushSettings.x : offset.left,
23
+ y: isNumber(brushSettings.y)
24
+ ? brushSettings.y
25
+ : offset.top + offset.height + offset.brushBottom - (margin?.bottom || 0),
26
+ width: isNumber(brushSettings.width) ? brushSettings.width : offset.width,
27
+ }),
28
+ );
@@ -0,0 +1,16 @@
1
+ // Adapted from recharts@3.9.2, commit b3451050c027a23957ffa50a2665c9119df21e47.
2
+ import { TickItem } from '../../../util/types';
3
+ import { TooltipIndex } from '../../tooltipSlice';
4
+ import { isNan } from '../../../util/DataUtils';
5
+ import { ActiveLabel } from '../../../synchronisation/types';
6
+
7
+ export const combineActiveLabel = (
8
+ tooltipTicks: ReadonlyArray<TickItem> | undefined,
9
+ activeIndex: TooltipIndex,
10
+ ): ActiveLabel => {
11
+ const n = Number(activeIndex);
12
+ if (isNan(n) || activeIndex == null) {
13
+ return undefined;
14
+ }
15
+ return n >= 0 ? tooltipTicks?.[n]?.value : undefined;
16
+ };
@@ -1,52 +1,70 @@
1
- // Vendored verbatim from recharts@3.9.2 es6/state/selectors/combiners/combineActiveTooltipIndex.js (framework-agnostic).
2
- // Do not edit update by re-vendoring when the recharts devDependency moves.
1
+ // Adapted from recharts@3.9.2, commit b3451050c027a23957ffa50a2665c9119df21e47.
2
+ import { TooltipIndex, TooltipInteractionState } from '../../tooltipSlice';
3
+ import { ChartData } from '../../chartDataSlice';
3
4
  import { isWellBehavedNumber } from '../../../util/isWellBehavedNumber';
5
+ import { DataKey, CategoricalDomain, NumberDomain } from '../../../util/types';
4
6
  import { getValueByDataKey } from '../../../util/ChartUtils';
5
7
  import { isWellFormedNumberDomain } from '../../../util/isDomainSpecifiedByUser';
6
- function toFiniteNumber(value) {
8
+
9
+ function toFiniteNumber(value: unknown): number | undefined {
7
10
  if (typeof value === 'number') {
8
11
  return Number.isFinite(value) ? value : undefined;
9
12
  }
10
13
  if (value instanceof Date) {
11
- var numericValue = value.valueOf();
14
+ const numericValue = value.valueOf();
12
15
  return Number.isFinite(numericValue) ? numericValue : undefined;
13
16
  }
14
- var parsed = Number(value);
17
+ const parsed = Number(value);
15
18
  return Number.isFinite(parsed) ? parsed : undefined;
16
19
  }
17
- function isValueWithinNumberDomain(value, domain) {
18
- var numericValue = toFiniteNumber(value);
19
- var lowerBound = domain[0];
20
- var upperBound = domain[1];
20
+
21
+ function isValueWithinNumberDomain(value: unknown, domain: NumberDomain): boolean {
22
+ const numericValue = toFiniteNumber(value);
23
+ const lowerBound = domain[0];
24
+ const upperBound = domain[1];
25
+
21
26
  if (numericValue === undefined) {
22
27
  return false;
23
28
  }
24
- var min = Math.min(lowerBound, upperBound);
25
- var max = Math.max(lowerBound, upperBound);
29
+
30
+ const min = Math.min(lowerBound, upperBound);
31
+ const max = Math.max(lowerBound, upperBound);
26
32
  return numericValue >= min && numericValue <= max;
27
33
  }
28
- function isValueWithinDomain(entry, axisDataKey, domain) {
34
+
35
+ function isValueWithinDomain(
36
+ entry: unknown,
37
+ axisDataKey: DataKey<unknown> | undefined,
38
+ domain: NumberDomain | CategoricalDomain | undefined,
39
+ ): boolean {
29
40
  if (domain == null || axisDataKey == null) {
30
41
  return true;
31
42
  }
32
- var value = getValueByDataKey(entry, axisDataKey);
43
+
44
+ const value = getValueByDataKey(entry, axisDataKey);
33
45
  if (value == null) {
34
46
  return true;
35
47
  }
48
+
36
49
  if (!isWellFormedNumberDomain(domain)) {
37
50
  return true;
38
51
  }
52
+
39
53
  return isValueWithinNumberDomain(value, domain);
40
54
  }
41
- export var combineActiveTooltipIndex = (tooltipInteraction, chartData, axisDataKey, domain) => {
42
- var desiredIndex =
43
- tooltipInteraction === null || tooltipInteraction === void 0
44
- ? void 0
45
- : tooltipInteraction.index;
55
+
56
+ export const combineActiveTooltipIndex = (
57
+ tooltipInteraction: TooltipInteractionState | undefined,
58
+ chartData: ChartData,
59
+ axisDataKey?: DataKey<unknown>,
60
+ domain?: NumberDomain | CategoricalDomain,
61
+ ): TooltipIndex | null => {
62
+ const desiredIndex: TooltipIndex | undefined = tooltipInteraction?.index;
46
63
  if (desiredIndex == null) {
47
64
  return null;
48
65
  }
49
- var indexAsNumber = Number(desiredIndex);
66
+
67
+ const indexAsNumber = Number(desiredIndex);
50
68
  if (!isWellBehavedNumber(indexAsNumber)) {
51
69
  // this is for charts like Sankey and Treemap that do not support numerical indexes. We need a proper solution for this before we can start supporting keyboard events on these charts.
52
70
  return desiredIndex;
@@ -56,20 +74,24 @@ export var combineActiveTooltipIndex = (tooltipInteraction, chartData, axisDataK
56
74
  * Zero is a trivial limit for single-dimensional charts like Line and Area,
57
75
  * but this also needs a support for multidimensional charts like Sankey and Treemap! TODO
58
76
  */
59
- var lowerLimit = 0;
60
- var upperLimit = +Infinity;
77
+ const lowerLimit = 0;
78
+ let upperLimit: number = +Infinity;
79
+
61
80
  if (chartData.length > 0) {
62
81
  upperLimit = chartData.length - 1;
63
82
  }
64
83
 
65
84
  // now let's clamp the desiredIndex between the limits
66
- var clampedIndex = Math.max(lowerLimit, Math.min(indexAsNumber, upperLimit));
67
- var entry = chartData[clampedIndex];
85
+ const clampedIndex = Math.max(lowerLimit, Math.min(indexAsNumber, upperLimit));
86
+ const entry = chartData[clampedIndex];
87
+
68
88
  if (entry == null) {
69
89
  return String(clampedIndex);
70
90
  }
91
+
71
92
  if (!isValueWithinDomain(entry, axisDataKey, domain)) {
72
93
  return null;
73
94
  }
95
+
74
96
  return String(clampedIndex);
75
97
  };