@octanejs/recharts 0.1.41 → 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 (375) 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/legacy-props.ts +129 -0
  82. package/src/polar/Pie.tsrx +91 -69
  83. package/src/polar/PolarAngleAxis.tsrx +47 -47
  84. package/src/polar/PolarGrid.tsrx +7 -6
  85. package/src/polar/PolarRadiusAxis.tsrx +29 -21
  86. package/src/polar/Radar.tsrx +26 -19
  87. package/src/polar/RadialBar.tsrx +59 -42
  88. package/src/polar/{defaultPolarAngleAxisProps.js → defaultPolarAngleAxisProps.ts} +6 -6
  89. package/src/polar/{defaultPolarRadiusAxisProps.js → defaultPolarRadiusAxisProps.ts} +5 -4
  90. package/src/shape/Cross.tsrx +14 -2
  91. package/src/shape/Curve.tsrx +111 -23
  92. package/src/shape/Dot.tsrx +12 -1
  93. package/src/shape/Polygon.tsrx +28 -6
  94. package/src/shape/Rectangle.tsrx +30 -3
  95. package/src/shape/Sector.tsrx +48 -6
  96. package/src/shape/Symbols.tsrx +24 -6
  97. package/src/shape/Trapezoid.tsrx +33 -3
  98. package/src/state/RechartsStoreProvider.tsrx +11 -2
  99. package/src/state/ReportChartProps.ts +2 -2
  100. package/src/state/ReportMainChartProps.ts +2 -1
  101. package/src/state/SetGraphicalItem.ts +6 -4
  102. package/src/state/SetLegendPayload.ts +7 -4
  103. package/src/state/SetTooltipEntrySettings.ts +5 -2
  104. package/src/state/brushSlice.ts +40 -0
  105. package/src/state/cartesianAxisSlice.ts +291 -0
  106. package/src/state/chartDataSlice.ts +87 -0
  107. package/src/state/errorBarSlice.ts +78 -0
  108. package/src/state/eventSettingsSlice.ts +30 -0
  109. package/src/state/{externalEventsMiddleware.js → externalEventsMiddleware.ts} +55 -34
  110. package/src/state/graphicalItemsSlice.ts +180 -0
  111. package/src/state/{keyboardEventsMiddleware.js → keyboardEventsMiddleware.ts} +72 -57
  112. package/src/state/layoutSlice.ts +50 -0
  113. package/src/state/legendSlice.ts +109 -0
  114. package/src/state/{mouseEventsMiddleware.js → mouseEventsMiddleware.ts} +45 -35
  115. package/src/state/optionsSlice.ts +65 -0
  116. package/src/state/polarAxisSlice.ts +42 -0
  117. package/src/state/polarOptionsSlice.ts +43 -0
  118. package/src/state/reduxDevtoolsJsonStringifyReplacer.ts +13 -0
  119. package/src/state/referenceElementsSlice.ts +100 -0
  120. package/src/state/renderedTicksSlice.ts +60 -0
  121. package/src/state/rootPropsSlice.ts +72 -0
  122. package/src/state/selectors/areaSelectors.ts +1 -2
  123. package/src/state/selectors/{arrayEqualityCheck.js → arrayEqualityCheck.ts} +4 -5
  124. package/src/state/selectors/axisSelectors.ts +2502 -0
  125. package/src/state/selectors/barSelectors.ts +373 -0
  126. package/src/state/selectors/barStackSelectors.ts +99 -0
  127. package/src/state/selectors/brushSelectors.ts +28 -0
  128. package/src/state/selectors/combiners/combineActiveLabel.ts +16 -0
  129. package/src/state/selectors/combiners/{combineActiveTooltipIndex.js → combineActiveTooltipIndex.ts} +45 -23
  130. package/src/state/selectors/combiners/combineAllBarPositions.ts +130 -0
  131. package/src/state/selectors/combiners/combineAxisRangeWithReverse.ts +16 -0
  132. package/src/state/selectors/combiners/combineBarPosition.ts +23 -0
  133. package/src/state/selectors/combiners/combineBarSizeList.ts +79 -0
  134. package/src/state/selectors/combiners/{combineCheckedDomain.js → combineCheckedDomain.ts} +9 -6
  135. package/src/state/selectors/combiners/combineConfiguredScale.ts +100 -0
  136. package/src/state/selectors/combiners/combineCoordinateForDefaultIndex.ts +46 -0
  137. package/src/state/selectors/combiners/{combineDisplayedStackedData.js → combineDisplayedStackedData.ts} +23 -19
  138. package/src/state/selectors/combiners/combineInverseScaleFunction.ts +16 -0
  139. package/src/state/selectors/combiners/{combineRealScaleType.js → combineRealScaleType.ts} +16 -8
  140. package/src/state/selectors/combiners/combineStackedData.ts +27 -0
  141. package/src/state/selectors/combiners/combineTooltipInteractionState.ts +86 -0
  142. package/src/state/selectors/combiners/combineTooltipPayload.ts +201 -0
  143. package/src/state/selectors/combiners/{combineTooltipPayloadConfigurations.js → combineTooltipPayloadConfigurations.ts} +17 -18
  144. package/src/state/selectors/containerSelectors.ts +12 -0
  145. package/src/state/selectors/{dataSelectors.js → dataSelectors.ts} +43 -41
  146. package/src/state/selectors/funnelSelectors.ts +5 -5
  147. package/src/state/selectors/graphicalItemSelectors.ts +22 -0
  148. package/src/state/selectors/legendSelectors.ts +25 -0
  149. package/src/state/selectors/lineSelectors.ts +159 -0
  150. package/src/state/selectors/numberDomainEqualityCheck.ts +15 -0
  151. package/src/state/selectors/pickAxisId.ts +6 -0
  152. package/src/state/selectors/pickAxisType.ts +4 -0
  153. package/src/state/selectors/pieSelectors.ts +14 -13
  154. package/src/state/selectors/polarAxisSelectors.ts +223 -0
  155. package/src/state/selectors/polarSelectors.ts +1 -1
  156. package/src/state/selectors/radarSelectors.ts +1 -1
  157. package/src/state/selectors/radialBarSelectors.ts +17 -16
  158. package/src/state/selectors/rootPropsSelectors.ts +26 -0
  159. package/src/state/selectors/scatterSelectors.ts +11 -10
  160. package/src/state/selectors/{selectActivePropsFromChartPointer.js → selectActivePropsFromChartPointer.ts} +11 -4
  161. package/src/state/selectors/selectAllAxes.ts +20 -0
  162. package/src/state/selectors/selectChartOffset.ts +17 -0
  163. package/src/state/selectors/selectChartOffsetInternal.ts +147 -0
  164. package/src/state/selectors/{selectPlotArea.js → selectPlotArea.ts} +4 -3
  165. package/src/state/selectors/selectTooltipAxisId.ts +6 -0
  166. package/src/state/selectors/{selectTooltipAxisType.js → selectTooltipAxisType.ts} +10 -4
  167. package/src/state/selectors/selectTooltipEventType.ts +39 -0
  168. package/src/state/selectors/selectTooltipPayloadSearcher.ts +6 -0
  169. package/src/state/selectors/selectTooltipSettings.ts +6 -0
  170. package/src/state/selectors/selectTooltipState.ts +5 -0
  171. package/src/state/selectors/selectors.ts +315 -0
  172. package/src/state/selectors/tooltipSelectors.ts +611 -0
  173. package/src/state/selectors/touchSelectors.ts +52 -0
  174. package/src/state/{store.js → store.ts} +46 -36
  175. package/src/state/tooltipSlice.ts +507 -0
  176. package/src/state/{touchEventsMiddleware.js → touchEventsMiddleware.ts} +54 -42
  177. package/src/state/types/AreaSettings.ts +15 -0
  178. package/src/state/types/BarSettings.ts +15 -0
  179. package/src/state/types/LineSettings.ts +10 -0
  180. package/src/state/types/PieSettings.ts +32 -0
  181. package/src/state/types/RadarSettings.ts +6 -0
  182. package/src/state/types/RadialBarSettings.ts +10 -0
  183. package/src/state/types/ScatterSettings.ts +13 -0
  184. package/src/state/types/StackedGraphicalItem.ts +34 -0
  185. package/src/state/zIndexSlice.ts +137 -0
  186. package/src/synchronisation/syncSelectors.ts +7 -0
  187. package/src/synchronisation/types.ts +42 -0
  188. package/src/synchronisation/useChartSynchronisation.tsrx +26 -11
  189. package/src/types.ts +55 -0
  190. package/src/util/ActiveShapeUtils.tsrx +34 -10
  191. package/src/util/BarUtils.tsrx +43 -3
  192. package/src/util/{CartesianUtils.js → CartesianUtils.ts} +22 -39
  193. package/src/util/ChartUtils.ts +759 -0
  194. package/src/util/{Constants.js → Constants.ts} +6 -6
  195. package/src/util/DOMUtils.ts +135 -0
  196. package/src/util/{DataUtils.js → DataUtils.ts} +120 -47
  197. package/src/util/Events.ts +22 -0
  198. package/src/util/FunnelUtils.tsrx +3 -3
  199. package/src/util/Global.ts +13 -0
  200. package/src/util/IfOverflow.ts +16 -0
  201. package/src/util/LRUCache.ts +42 -0
  202. package/src/util/{LogUtils.js → LogUtils.ts} +7 -12
  203. package/src/util/OctaneTypes.ts +51 -0
  204. package/src/util/PolarUtils.ts +132 -0
  205. package/src/util/RadialBarUtils.tsrx +3 -3
  206. package/src/util/ReduceCSSCalc.ts +186 -0
  207. package/src/util/ScatterUtils.tsrx +9 -7
  208. package/src/util/{TickUtils.js → TickUtils.ts} +30 -13
  209. package/src/util/{YAxisUtils.js → YAxisUtils.ts} +27 -17
  210. package/src/util/axisPropsAreEqual.ts +49 -0
  211. package/src/util/createEventProxy.ts +20 -0
  212. package/src/util/{excludeEventProps.js → excludeEventProps.ts} +8 -6
  213. package/src/util/getActiveCoordinate.ts +210 -0
  214. package/src/util/{getAxisTypeBasedOnLayout.js → getAxisTypeBasedOnLayout.ts} +7 -3
  215. package/src/util/getClassNameFromUnknown.ts +7 -0
  216. package/src/util/{getEveryNth.js → getEveryNth.ts} +5 -6
  217. package/src/util/getRadiusAndStrokeWidthFromDot.ts +31 -0
  218. package/src/util/{getRelativeCoordinate.js → getRelativeCoordinate.ts} +26 -9
  219. package/src/util/getSliced.ts +14 -0
  220. package/src/util/{isDomainSpecifiedByUser.js → isDomainSpecifiedByUser.ts} +46 -100
  221. package/src/util/isWellBehavedNumber.ts +8 -0
  222. package/src/util/payload/getUniqPayload.ts +1 -1
  223. package/src/util/{propsAreEqual.js → propsAreEqual.ts} +10 -8
  224. package/src/util/{resolveDefaultProps.js → resolveDefaultProps.ts} +35 -57
  225. package/src/util/round.ts +33 -0
  226. package/src/util/scale/CustomScaleDefinition.ts +82 -0
  227. package/src/util/scale/RechartsScale.ts +131 -0
  228. package/src/util/scale/{createCategoricalInverse.js → createCategoricalInverse.ts} +24 -29
  229. package/src/util/scale/{getNiceTickValues.js → getNiceTickValues.ts} +125 -146
  230. package/src/util/scale/index.ts +2 -0
  231. package/src/util/scale/util/{arithmetic.js → arithmetic.ts} +12 -8
  232. package/src/util/stacks/getStackSeriesIdentifier.ts +21 -0
  233. package/src/util/stacks/stackTypes.ts +58 -0
  234. package/src/util/{svgPropertiesNoEvents.js → svgPropertiesNoEvents.ts} +52 -27
  235. package/src/util/tooltip/translate.ts +2 -1
  236. package/src/util/typedDataKey.ts +49 -0
  237. package/src/util/types.ts +1265 -7
  238. package/src/util/{useUniqueId.js → useUniqueId.ts} +9 -5
  239. package/src/zIndex/{DefaultZIndexes.js → DefaultZIndexes.ts} +13 -4
  240. package/src/zIndex/ZIndexLayer.tsrx +13 -4
  241. package/src/zIndex/ZIndexPortal.tsrx +14 -4
  242. package/src/zIndex/{getZIndexFromUnknown.js → getZIndexFromUnknown.ts} +3 -3
  243. package/src/zIndex/{zIndexSelectors.js → zIndexSelectors.ts} +17 -11
  244. package/src/animation/easing.js +0 -193
  245. package/src/animation/timeoutController.js +0 -49
  246. package/src/animation/util.js +0 -11
  247. package/src/cartesian/Area.tsrx.d.ts +0 -340
  248. package/src/cartesian/Bar.tsrx.d.ts +0 -4
  249. package/src/cartesian/BarStack.tsrx.d.ts +0 -6
  250. package/src/cartesian/CartesianAxis.tsrx.d.ts +0 -3
  251. package/src/cartesian/CartesianGrid.tsrx.d.ts +0 -219
  252. package/src/cartesian/ErrorBar.tsrx.d.ts +0 -131
  253. package/src/cartesian/Funnel.tsrx.d.ts +0 -274
  254. package/src/cartesian/Line.tsrx.d.ts +0 -4
  255. package/src/cartesian/LineDrawShape.tsrx.d.ts +0 -2
  256. package/src/cartesian/ReferenceLine.tsrx.d.ts +0 -178
  257. package/src/cartesian/Scatter.tsrx.d.ts +0 -351
  258. package/src/cartesian/XAxis.tsrx.d.ts +0 -3
  259. package/src/cartesian/YAxis.tsrx.d.ts +0 -3
  260. package/src/cartesian/ZAxis.tsrx.d.ts +0 -102
  261. package/src/cartesian/getCartesianPosition.js +0 -277
  262. package/src/cartesian/getEquidistantTicks.js +0 -133
  263. package/src/cartesian/getTicks.js +0 -280
  264. package/src/chart/AreaChart.tsrx.d.ts +0 -12
  265. package/src/chart/BarChart.tsrx.d.ts +0 -2
  266. package/src/chart/CartesianChart.tsrx.d.ts +0 -10
  267. package/src/chart/ComposedChart.tsrx.d.ts +0 -12
  268. package/src/chart/FunnelChart.tsrx.d.ts +0 -12
  269. package/src/chart/LineChart.tsrx.d.ts +0 -2
  270. package/src/chart/PieChart.tsrx.d.ts +0 -31
  271. package/src/chart/RadarChart.tsrx.d.ts +0 -31
  272. package/src/chart/RadialBarChart.tsrx.d.ts +0 -31
  273. package/src/chart/Sankey.tsrx.d.ts +0 -253
  274. package/src/chart/ScatterChart.tsrx.d.ts +0 -12
  275. package/src/chart/SunburstChart.tsrx.d.ts +0 -146
  276. package/src/component/DefaultLegendContent.tsrx.d.ts +0 -125
  277. package/src/component/DefaultTooltipContent.tsrx.d.ts +0 -87
  278. package/src/component/Label.tsrx.d.ts +0 -12
  279. package/src/component/LabelList.tsrx.d.ts +0 -8
  280. package/src/component/Legend.tsrx.d.ts +0 -88
  281. package/src/component/ResponsiveContainer.tsrx.d.ts +0 -81
  282. package/src/component/Text.tsrx.d.ts +0 -9
  283. package/src/component/Tooltip.tsrx.d.ts +0 -246
  284. package/src/container/Layer.tsrx.d.ts +0 -6
  285. package/src/container/Surface.tsrx.d.ts +0 -12
  286. package/src/context/accessibilityContext.js +0 -10
  287. package/src/context/tooltipContext.js +0 -55
  288. package/src/index.d.ts +0 -281
  289. package/src/polar/Pie.tsrx.d.ts +0 -436
  290. package/src/polar/PolarAngleAxis.tsrx.d.ts +0 -215
  291. package/src/polar/PolarGrid.tsrx.d.ts +0 -117
  292. package/src/polar/PolarRadiusAxis.tsrx.d.ts +0 -209
  293. package/src/polar/Radar.tsrx.d.ts +0 -215
  294. package/src/polar/RadialBar.tsrx.d.ts +0 -340
  295. package/src/shape/Cross.tsrx.d.ts +0 -12
  296. package/src/shape/Curve.tsrx.d.ts +0 -42
  297. package/src/shape/Dot.tsrx.d.ts +0 -9
  298. package/src/shape/Polygon.tsrx.d.ts +0 -13
  299. package/src/shape/Rectangle.tsrx.d.ts +0 -31
  300. package/src/shape/Sector.tsrx.d.ts +0 -29
  301. package/src/shape/Symbols.tsrx.d.ts +0 -15
  302. package/src/shape/Trapezoid.tsrx.d.ts +0 -29
  303. package/src/state/brushSlice.js +0 -36
  304. package/src/state/cartesianAxisSlice.js +0 -256
  305. package/src/state/chartDataSlice.js +0 -67
  306. package/src/state/errorBarSlice.js +0 -53
  307. package/src/state/eventSettingsSlice.js +0 -25
  308. package/src/state/graphicalItemsSlice.js +0 -91
  309. package/src/state/layoutSlice.js +0 -57
  310. package/src/state/legendSlice.js +0 -83
  311. package/src/state/optionsSlice.js +0 -45
  312. package/src/state/polarAxisSlice.js +0 -33
  313. package/src/state/polarOptionsSlice.js +0 -26
  314. package/src/state/reduxDevtoolsJsonStringifyReplacer.js +0 -14
  315. package/src/state/referenceElementsSlice.js +0 -51
  316. package/src/state/renderedTicksSlice.js +0 -41
  317. package/src/state/rootPropsSlice.js +0 -48
  318. package/src/state/selectors/axisSelectors.js +0 -2113
  319. package/src/state/selectors/barSelectors.js +0 -263
  320. package/src/state/selectors/barStackSelectors.js +0 -65
  321. package/src/state/selectors/brushSelectors.js +0 -21
  322. package/src/state/selectors/combiners/combineActiveLabel.js +0 -18
  323. package/src/state/selectors/combiners/combineAllBarPositions.js +0 -169
  324. package/src/state/selectors/combiners/combineAxisRangeWithReverse.js +0 -11
  325. package/src/state/selectors/combiners/combineBarPosition.js +0 -17
  326. package/src/state/selectors/combiners/combineBarSizeList.js +0 -115
  327. package/src/state/selectors/combiners/combineConfiguredScale.js +0 -46
  328. package/src/state/selectors/combiners/combineCoordinateForDefaultIndex.js +0 -48
  329. package/src/state/selectors/combiners/combineInverseScaleFunction.js +0 -12
  330. package/src/state/selectors/combiners/combineStackedData.js +0 -22
  331. package/src/state/selectors/combiners/combineTooltipInteractionState.js +0 -121
  332. package/src/state/selectors/combiners/combineTooltipPayload.js +0 -248
  333. package/src/state/selectors/containerSelectors.js +0 -6
  334. package/src/state/selectors/graphicalItemSelectors.js +0 -25
  335. package/src/state/selectors/legendSelectors.js +0 -18
  336. package/src/state/selectors/lineSelectors.js +0 -106
  337. package/src/state/selectors/numberDomainEqualityCheck.js +0 -11
  338. package/src/state/selectors/pickAxisId.js +0 -3
  339. package/src/state/selectors/pickAxisType.js +0 -3
  340. package/src/state/selectors/polarAxisSelectors.js +0 -237
  341. package/src/state/selectors/rootPropsSelectors.js +0 -13
  342. package/src/state/selectors/selectAllAxes.js +0 -15
  343. package/src/state/selectors/selectChartOffset.js +0 -12
  344. package/src/state/selectors/selectChartOffsetInternal.js +0 -174
  345. package/src/state/selectors/selectTooltipAxisId.js +0 -3
  346. package/src/state/selectors/selectTooltipEventType.js +0 -27
  347. package/src/state/selectors/selectTooltipPayloadSearcher.js +0 -3
  348. package/src/state/selectors/selectTooltipSettings.js +0 -3
  349. package/src/state/selectors/selectTooltipState.js +0 -3
  350. package/src/state/selectors/selectors.js +0 -222
  351. package/src/state/selectors/tooltipSelectors.js +0 -471
  352. package/src/state/selectors/touchSelectors.js +0 -31
  353. package/src/state/tooltipSlice.js +0 -237
  354. package/src/state/types/StackedGraphicalItem.js +0 -18
  355. package/src/state/zIndexSlice.js +0 -167
  356. package/src/synchronisation/syncSelectors.js +0 -5
  357. package/src/util/ChartUtils.js +0 -630
  358. package/src/util/DOMUtils.js +0 -180
  359. package/src/util/Events.js +0 -7
  360. package/src/util/Global.js +0 -13
  361. package/src/util/LRUCache.js +0 -58
  362. package/src/util/PolarUtils.js +0 -190
  363. package/src/util/ReduceCSSCalc.js +0 -260
  364. package/src/util/axisPropsAreEqual.js +0 -63
  365. package/src/util/createEventProxy.js +0 -18
  366. package/src/util/getActiveCoordinate.js +0 -253
  367. package/src/util/getClassNameFromUnknown.js +0 -8
  368. package/src/util/getRadiusAndStrokeWidthFromDot.js +0 -28
  369. package/src/util/getSliced.js +0 -11
  370. package/src/util/isWellBehavedNumber.js +0 -8
  371. package/src/util/round.js +0 -39
  372. package/src/util/scale/RechartsScale.js +0 -68
  373. package/src/util/scale/index.js +0 -3
  374. package/src/util/stacks/getStackSeriesIdentifier.js +0 -10
  375. 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
  };