@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
@@ -1,6 +1,14 @@
1
- // Vendored verbatim from recharts@3.9.2 es6/state/externalEventsMiddleware.js (framework-agnostic).
2
- // Do not edit update by re-vendoring when the recharts devDependency moves.
3
- import { createAction, createListenerMiddleware } from '@reduxjs/toolkit';
1
+ // Adapted from recharts@3.9.2, commit b3451050c027a23957ffa50a2665c9119df21e47.
2
+ import type { NativeEvent } from '../util/OctaneTypes';
3
+ import {
4
+ createAction,
5
+ createListenerMiddleware,
6
+ ListenerEffectAPI,
7
+ PayloadAction,
8
+ } from '@reduxjs/toolkit';
9
+
10
+ import { CategoricalChartFunc } from '../chart/types';
11
+ import { MouseHandlerDataParam } from '../synchronisation/types';
4
12
  import {
5
13
  selectActiveLabel,
6
14
  selectActiveTooltipCoordinate,
@@ -8,9 +16,17 @@ import {
8
16
  selectActiveTooltipIndex,
9
17
  selectIsTooltipActive,
10
18
  } from './selectors/tooltipSelectors';
19
+ import { AppDispatch, RechartsRootState } from './store';
11
20
  import { createEventProxy } from '../util/createEventProxy';
12
- export var externalEventAction = createAction('externalEvent');
13
- export var externalEventsMiddleware = createListenerMiddleware();
21
+
22
+ type ExternalEventActionPayload<E = NativeEvent> = {
23
+ reactEvent: E;
24
+ handler: CategoricalChartFunc<E> | undefined;
25
+ };
26
+
27
+ export const externalEventAction = createAction<ExternalEventActionPayload<any>>('externalEvent');
28
+
29
+ export const externalEventsMiddleware = createListenerMiddleware<RechartsRootState>();
14
30
 
15
31
  /*
16
32
  * We need a Map keyed by event type because this middleware handles MULTIPLE different event types
@@ -19,35 +35,38 @@ export var externalEventsMiddleware = createListenerMiddleware();
19
35
  * For example, a click event and a mousemove event can happen in quick succession and both should be processed.
20
36
  * This is different from mouseMoveMiddleware which only handles one event type and uses a single rafId.
21
37
  */
22
- var rafIdMap = new Map();
23
- var timeoutIdMap = new Map();
24
- var latestEventMap = new Map();
38
+ const rafIdMap = new Map<string, number>();
39
+ const timeoutIdMap = new Map<string, ReturnType<typeof setTimeout>>();
40
+ const latestEventMap = new Map<string, ExternalEventActionPayload>();
41
+
25
42
  externalEventsMiddleware.startListening({
26
43
  actionCreator: externalEventAction,
27
- effect: (action, listenerApi) => {
28
- var _action$payload = action.payload,
29
- handler = _action$payload.handler,
30
- reactEvent = _action$payload.reactEvent;
44
+ effect: (
45
+ action: PayloadAction<ExternalEventActionPayload>,
46
+ listenerApi: ListenerEffectAPI<RechartsRootState, AppDispatch>,
47
+ ) => {
48
+ const { handler, reactEvent } = action.payload;
31
49
  if (handler == null) {
32
50
  return;
33
51
  }
34
- var eventType = reactEvent.type;
35
- var eventProxy = createEventProxy(reactEvent);
52
+
53
+ const eventType = reactEvent.type;
54
+ const eventProxy = createEventProxy(reactEvent);
55
+
36
56
  latestEventMap.set(eventType, {
37
57
  handler,
38
58
  reactEvent: eventProxy,
39
59
  });
40
60
 
41
61
  // Cancel any pending execution for this event type
42
- var existingRafId = rafIdMap.get(eventType);
62
+ const existingRafId = rafIdMap.get(eventType);
43
63
  if (existingRafId !== undefined) {
44
64
  cancelAnimationFrame(existingRafId);
45
65
  rafIdMap.delete(eventType);
46
66
  }
47
- var state = listenerApi.getState();
48
- var _state$eventSettings = state.eventSettings,
49
- throttleDelay = _state$eventSettings.throttleDelay,
50
- throttledEvents = _state$eventSettings.throttledEvents;
67
+
68
+ const state = listenerApi.getState();
69
+ const { throttleDelay, throttledEvents } = state.eventSettings;
51
70
 
52
71
  /*
53
72
  * reactEvent.type gives us the event type as a string, e.g., 'click', 'mousemove', etc.
@@ -58,31 +77,30 @@ externalEventsMiddleware.startListening({
58
77
  * with a string argument.
59
78
  * To satisfy TypeScript, we need to explicitly typecast throttledEvents here.
60
79
  */
61
- var eventListAsString = throttledEvents;
80
+ const eventListAsString: 'all' | ReadonlyArray<string> | undefined = throttledEvents;
62
81
 
63
82
  // Check if this event type should be throttled
64
83
  // throttledEvents can be 'all' or an array of event names
65
- var isThrottled =
66
- eventListAsString === 'all' ||
67
- (eventListAsString === null || eventListAsString === void 0
68
- ? void 0
69
- : eventListAsString.includes(eventType));
70
- var existingTimeoutId = timeoutIdMap.get(eventType);
84
+ const isThrottled = eventListAsString === 'all' || eventListAsString?.includes(eventType);
85
+
86
+ const existingTimeoutId = timeoutIdMap.get(eventType);
71
87
  if (existingTimeoutId !== undefined && (typeof throttleDelay !== 'number' || !isThrottled)) {
72
88
  clearTimeout(existingTimeoutId);
73
89
  timeoutIdMap.delete(eventType);
74
90
  }
75
- var callback = () => {
76
- var latestAction = latestEventMap.get(eventType);
91
+
92
+ const callback = () => {
93
+ const latestAction = latestEventMap.get(eventType);
94
+
77
95
  try {
78
96
  if (!latestAction) {
79
97
  // This happens if the event was consumed by the leading edge and no new event came in
80
98
  return;
81
99
  }
82
- var latestHandler = latestAction.handler,
83
- latestEvent = latestAction.reactEvent;
84
- var currentState = listenerApi.getState();
85
- var nextState = {
100
+
101
+ const { handler: latestHandler, reactEvent: latestEvent } = latestAction;
102
+ const currentState: RechartsRootState = listenerApi.getState();
103
+ const nextState: MouseHandlerDataParam = {
86
104
  activeCoordinate: selectActiveTooltipCoordinate(currentState),
87
105
  activeDataKey: selectActiveTooltipDataKey(currentState),
88
106
  activeIndex: selectActiveTooltipIndex(currentState),
@@ -90,6 +108,7 @@ externalEventsMiddleware.startListening({
90
108
  activeTooltipIndex: selectActiveTooltipIndex(currentState),
91
109
  isTooltipActive: selectIsTooltipActive(currentState),
92
110
  };
111
+
93
112
  if (latestHandler) {
94
113
  latestHandler(nextState, latestEvent);
95
114
  }
@@ -99,13 +118,15 @@ externalEventsMiddleware.startListening({
99
118
  latestEventMap.delete(eventType);
100
119
  }
101
120
  };
121
+
102
122
  if (!isThrottled) {
103
123
  // Execute immediately
104
124
  callback();
105
125
  return;
106
126
  }
127
+
107
128
  if (throttleDelay === 'raf') {
108
- var rafId = requestAnimationFrame(callback);
129
+ const rafId = requestAnimationFrame(callback);
109
130
  rafIdMap.set(eventType, rafId);
110
131
  } else if (typeof throttleDelay === 'number') {
111
132
  if (!timeoutIdMap.has(eventType)) {
@@ -116,7 +137,7 @@ externalEventsMiddleware.startListening({
116
137
  callback();
117
138
 
118
139
  // Start cooldown
119
- var timeoutId = setTimeout(callback, throttleDelay);
140
+ const timeoutId = setTimeout(callback, throttleDelay);
120
141
  timeoutIdMap.set(eventType, timeoutId);
121
142
  }
122
143
  } else {
@@ -0,0 +1,180 @@
1
+ // Adapted from recharts@3.9.2, commit b3451050c027a23957ffa50a2665c9119df21e47.
2
+ import { createSlice, current, PayloadAction, prepareAutoBatched } from '@reduxjs/toolkit';
3
+ import { castDraft, type Draft } from 'immer';
4
+ import { ChartData } from './chartDataSlice';
5
+ import { AxisId } from './cartesianAxisSlice';
6
+ import { DataKey } from '../util/types';
7
+ import { LineSettings } from './types/LineSettings';
8
+ import { ScatterSettings } from './types/ScatterSettings';
9
+ import { AreaSettings } from './types/AreaSettings';
10
+ import { BarSettings } from './types/BarSettings';
11
+ import { RadialBarSettings } from './types/RadialBarSettings';
12
+ import { PieSettings } from './types/PieSettings';
13
+ import { RadarSettings } from './types/RadarSettings';
14
+
15
+ /**
16
+ * Unique ID of the graphical item.
17
+ * This is used to identify the graphical item in the state and in the React tree.
18
+ * This is required for every graphical item - it's either provided by the user or generated automatically.
19
+ */
20
+ export type GraphicalItemId = string;
21
+
22
+ export interface GraphicalItemSettings {
23
+ /**
24
+ * Unique ID of the graphical item.
25
+ * This is used to identify the graphical item in the state and in the React tree.
26
+ * This is required for every graphical item - it's either provided by the user or generated automatically.
27
+ */
28
+ id: GraphicalItemId;
29
+ /**
30
+ * If the given graphical item has its own data array, it will appear here.
31
+ * If this is undefined, the data will be taken from the chart root prop.
32
+ */
33
+ data: ChartData | undefined;
34
+ dataKey: DataKey<any> | undefined;
35
+ /**
36
+ * Why not just stop pushing the graphical items to state when they are hidden?
37
+ * Well some components decide to continue showing them anyway.
38
+ * Legend for example will keep showing a record for hidden graphical items.
39
+ * Stacks for example will ignore them.
40
+ */
41
+ hide: boolean;
42
+ }
43
+
44
+ export interface BaseCartesianGraphicalItemSettings extends GraphicalItemSettings {
45
+ /**
46
+ * Each of the graphical items explicitly says which axis it uses;
47
+ * this property is optional for users but every graphical item must have a default,
48
+ * and it is required here.
49
+ */
50
+ xAxisId: AxisId;
51
+ yAxisId: AxisId;
52
+ zAxisId: AxisId;
53
+ /**
54
+ * Graphical items that are inside Brush panorama should not interact with the main area graphical items
55
+ * and vice versa.
56
+ */
57
+ isPanorama: boolean;
58
+ }
59
+
60
+ export type CartesianGraphicalItemSettings =
61
+ AreaSettings | BarSettings | LineSettings | ScatterSettings;
62
+
63
+ export interface BasePolarGraphicalItemSettings extends GraphicalItemSettings {
64
+ angleAxisId: AxisId;
65
+ radiusAxisId: AxisId;
66
+ }
67
+
68
+ export type PolarGraphicalItemSettings = PieSettings | RadarSettings | RadialBarSettings;
69
+
70
+ export type GraphicalItemsState = {
71
+ /**
72
+ * This is an array of all cartesian graphical items and their settings.
73
+ * Graphical item is a visual representation of data on the chart.
74
+ * Some examples are: Line, Bar.
75
+ *
76
+ * The order is arbitrary; do not expect that indexes here will be the same as indexes elsewhere.
77
+ */
78
+ cartesianItems: ReadonlyArray<CartesianGraphicalItemSettings>;
79
+ /**
80
+ * This is an array of all polar graphical items and their settings.
81
+ * Graphical item is a visual representation of data on the chart.
82
+ * Some examples are: Pie, Radar, RadialBar
83
+ *
84
+ * The order is arbitrary; do not expect that indexes here will be the same as indexes elsewhere.
85
+ */
86
+ polarItems: ReadonlyArray<PolarGraphicalItemSettings>;
87
+ };
88
+
89
+ const initialState: GraphicalItemsState = {
90
+ cartesianItems: [],
91
+ polarItems: [],
92
+ };
93
+
94
+ type ReplacePayload<T> = {
95
+ prev: T;
96
+ next: T;
97
+ };
98
+
99
+ // Registered props may contain native DOM refs. The private callback boundary
100
+ // avoids RTK's prepared-action validator recursively comparing raw DOM-backed
101
+ // settings with Draft<Settings>. Every access still uses the exact known draft;
102
+ // the exported reducer state and action payloads remain fully typed.
103
+ const graphicalItemsSlice = createSlice({
104
+ name: 'graphicalItems',
105
+ initialState,
106
+ reducers: {
107
+ addCartesianGraphicalItem: {
108
+ reducer(state: unknown, action: PayloadAction<CartesianGraphicalItemSettings>) {
109
+ (state as Draft<GraphicalItemsState>).cartesianItems.push(castDraft(action.payload));
110
+ },
111
+ prepare: prepareAutoBatched<CartesianGraphicalItemSettings>(),
112
+ },
113
+ replaceCartesianGraphicalItem: {
114
+ reducer(
115
+ state: unknown,
116
+ action: PayloadAction<ReplacePayload<CartesianGraphicalItemSettings>>,
117
+ ) {
118
+ const { prev, next } = action.payload;
119
+ const index = current(state as Draft<GraphicalItemsState>).cartesianItems.indexOf(
120
+ castDraft(prev),
121
+ );
122
+ if (index > -1) {
123
+ (state as Draft<GraphicalItemsState>).cartesianItems[index] = castDraft(next);
124
+ }
125
+ },
126
+ prepare: prepareAutoBatched<ReplacePayload<CartesianGraphicalItemSettings>>(),
127
+ },
128
+ removeCartesianGraphicalItem: {
129
+ reducer(state: unknown, action: PayloadAction<CartesianGraphicalItemSettings>) {
130
+ const index = current(state as Draft<GraphicalItemsState>).cartesianItems.indexOf(
131
+ castDraft(action.payload),
132
+ );
133
+ if (index > -1) {
134
+ (state as Draft<GraphicalItemsState>).cartesianItems.splice(index, 1);
135
+ }
136
+ },
137
+ prepare: prepareAutoBatched<CartesianGraphicalItemSettings>(),
138
+ },
139
+ addPolarGraphicalItem: {
140
+ reducer(state: unknown, action: PayloadAction<PolarGraphicalItemSettings>) {
141
+ (state as Draft<GraphicalItemsState>).polarItems.push(castDraft(action.payload));
142
+ },
143
+ prepare: prepareAutoBatched<PolarGraphicalItemSettings>(),
144
+ },
145
+ removePolarGraphicalItem: {
146
+ reducer(state: unknown, action: PayloadAction<PolarGraphicalItemSettings>) {
147
+ const index = current(state as Draft<GraphicalItemsState>).polarItems.indexOf(
148
+ castDraft(action.payload),
149
+ );
150
+ if (index > -1) {
151
+ (state as Draft<GraphicalItemsState>).polarItems.splice(index, 1);
152
+ }
153
+ },
154
+ prepare: prepareAutoBatched<PolarGraphicalItemSettings>(),
155
+ },
156
+ replacePolarGraphicalItem: {
157
+ reducer(state: unknown, action: PayloadAction<ReplacePayload<PolarGraphicalItemSettings>>) {
158
+ const { prev, next } = action.payload;
159
+ const index = current(state as Draft<GraphicalItemsState>).polarItems.indexOf(
160
+ castDraft(prev),
161
+ );
162
+ if (index > -1) {
163
+ (state as Draft<GraphicalItemsState>).polarItems[index] = castDraft(next);
164
+ }
165
+ },
166
+ prepare: prepareAutoBatched<ReplacePayload<PolarGraphicalItemSettings>>(),
167
+ },
168
+ },
169
+ });
170
+
171
+ export const {
172
+ addCartesianGraphicalItem,
173
+ replaceCartesianGraphicalItem,
174
+ removeCartesianGraphicalItem,
175
+ addPolarGraphicalItem,
176
+ removePolarGraphicalItem,
177
+ replacePolarGraphicalItem,
178
+ } = graphicalItemsSlice.actions;
179
+
180
+ export const graphicalItemsReducer = graphicalItemsSlice.reducer;
@@ -1,7 +1,7 @@
1
- // Vendored verbatim from recharts@3.9.2 es6/state/keyboardEventsMiddleware.js (framework-agnostic).
2
- // Do not edit update by re-vendoring when the recharts devDependency moves.
3
- import { createAction, createListenerMiddleware } from '@reduxjs/toolkit';
4
- import { setKeyboardInteraction } from './tooltipSlice';
1
+ // Adapted from recharts@3.9.2, commit b3451050c027a23957ffa50a2665c9119df21e47.
2
+ import { createAction, createListenerMiddleware, ListenerEffectAPI } from '@reduxjs/toolkit';
3
+ import { setKeyboardInteraction, TooltipInteractionState } from './tooltipSlice';
4
+ import { AppDispatch, RechartsRootState } from './store';
5
5
  import {
6
6
  selectTooltipAxisDomain,
7
7
  selectTooltipAxisTicks,
@@ -11,55 +11,64 @@ import { selectCoordinateForDefaultIndex } from './selectors/selectors';
11
11
  import { selectChartDirection, selectTooltipAxisDataKey } from './selectors/axisSelectors';
12
12
  import { combineActiveTooltipIndex } from './selectors/combiners/combineActiveTooltipIndex';
13
13
  import { selectTooltipEventType } from './selectors/selectTooltipEventType';
14
- export var keyDownAction = createAction('keyDown');
15
- export var focusAction = createAction('focus');
16
- export var blurAction = createAction('blur');
17
- export var keyboardEventsMiddleware = createListenerMiddleware();
18
- var rafId = null;
19
- var timeoutId = null;
20
- var latestKeyboardActionPayload = null;
14
+
15
+ export const keyDownAction = createAction<KeyboardEvent['key']>('keyDown');
16
+ export const focusAction = createAction('focus');
17
+ export const blurAction = createAction('blur');
18
+
19
+ export const keyboardEventsMiddleware = createListenerMiddleware<RechartsRootState>();
20
+
21
+ let rafId: number | null = null;
22
+ let timeoutId: ReturnType<typeof setTimeout> | null = null;
23
+ let latestKeyboardActionPayload: KeyboardEvent['key'] | null = null;
24
+
21
25
  keyboardEventsMiddleware.startListening({
22
26
  actionCreator: keyDownAction,
23
- effect: (action, listenerApi) => {
27
+ effect: (
28
+ action: ReturnType<typeof keyDownAction>,
29
+ listenerApi: ListenerEffectAPI<RechartsRootState, AppDispatch>,
30
+ ) => {
24
31
  latestKeyboardActionPayload = action.payload;
32
+
25
33
  if (rafId !== null) {
26
34
  cancelAnimationFrame(rafId);
27
35
  rafId = null;
28
36
  }
29
- var state = listenerApi.getState();
30
- var _state$eventSettings = state.eventSettings,
31
- throttleDelay = _state$eventSettings.throttleDelay,
32
- throttledEvents = _state$eventSettings.throttledEvents;
33
- var isThrottled = throttledEvents === 'all' || throttledEvents.includes('keydown');
37
+
38
+ const state: RechartsRootState = listenerApi.getState();
39
+ const { throttleDelay, throttledEvents } = state.eventSettings;
40
+ const isThrottled = throttledEvents === 'all' || throttledEvents.includes('keydown');
41
+
34
42
  if (timeoutId !== null && (typeof throttleDelay !== 'number' || !isThrottled)) {
35
43
  clearTimeout(timeoutId);
36
44
  timeoutId = null;
37
45
  }
38
- var callback = () => {
46
+
47
+ const callback = () => {
39
48
  try {
40
- var currentState = listenerApi.getState();
41
- var accessibilityLayerIsActive = currentState.rootProps.accessibilityLayer !== false;
49
+ const currentState = listenerApi.getState();
50
+ const accessibilityLayerIsActive = currentState.rootProps.accessibilityLayer !== false;
42
51
  if (!accessibilityLayerIsActive) {
43
52
  return;
44
53
  }
45
- var keyboardInteraction = currentState.tooltip.keyboardInteraction;
46
- var key = latestKeyboardActionPayload;
54
+ const { keyboardInteraction } = currentState.tooltip;
55
+ const key = latestKeyboardActionPayload;
47
56
  if (key !== 'ArrowRight' && key !== 'ArrowLeft' && key !== 'Enter') {
48
57
  return;
49
58
  }
50
59
 
51
60
  // TODO this is lacking index for charts that do not support numeric indexes
52
- var resolvedIndex = combineActiveTooltipIndex(
61
+ const resolvedIndex = combineActiveTooltipIndex(
53
62
  keyboardInteraction,
54
63
  selectTooltipDisplayedData(currentState),
55
64
  selectTooltipAxisDataKey(currentState),
56
65
  selectTooltipAxisDomain(currentState),
57
66
  );
58
- var currentIndex = resolvedIndex == null ? -1 : Number(resolvedIndex);
59
- var isOutsideDomain = !Number.isFinite(currentIndex) || currentIndex < 0;
60
- var tooltipTicks = selectTooltipAxisTicks(currentState);
61
- var displayedData = selectTooltipDisplayedData(currentState);
62
- var tooltipEventType = selectTooltipEventType(
67
+ const currentIndex = resolvedIndex == null ? -1 : Number(resolvedIndex);
68
+ const isOutsideDomain = !Number.isFinite(currentIndex) || currentIndex < 0;
69
+ const tooltipTicks = selectTooltipAxisTicks(currentState);
70
+ const displayedData = selectTooltipDisplayedData(currentState);
71
+ const tooltipEventType = selectTooltipEventType(
63
72
  currentState,
64
73
  currentState.tooltip.settings.shared,
65
74
  );
@@ -67,7 +76,7 @@ keyboardEventsMiddleware.startListening({
67
76
  if (isOutsideDomain) {
68
77
  return;
69
78
  }
70
- var _coordinate = selectCoordinateForDefaultIndex(
79
+ const coordinate = selectCoordinateForDefaultIndex(
71
80
  currentState,
72
81
  tooltipEventType,
73
82
  'hover',
@@ -77,31 +86,33 @@ keyboardEventsMiddleware.startListening({
77
86
  setKeyboardInteraction({
78
87
  active: !keyboardInteraction.active,
79
88
  activeIndex: keyboardInteraction.index,
80
- activeCoordinate: _coordinate,
89
+ activeCoordinate: coordinate,
81
90
  }),
82
91
  );
83
92
  return;
84
93
  }
85
- var direction = selectChartDirection(currentState);
86
- var directionMultiplier = direction === 'left-to-right' ? 1 : -1;
87
- var movement = key === 'ArrowRight' ? 1 : -1;
88
- var nextIndex;
94
+
95
+ const direction = selectChartDirection(currentState);
96
+ const directionMultiplier = direction === 'left-to-right' ? 1 : -1;
97
+ const movement = key === 'ArrowRight' ? 1 : -1;
98
+ let nextIndex: number;
89
99
  if (isOutsideDomain) {
90
- var axisDataKey = selectTooltipAxisDataKey(currentState);
91
- var domain = selectTooltipAxisDomain(currentState);
92
- var effectiveMovement = movement * directionMultiplier;
100
+ const axisDataKey = selectTooltipAxisDataKey(currentState);
101
+ const domain = selectTooltipAxisDomain(currentState);
102
+ const effectiveMovement = movement * directionMultiplier;
93
103
 
94
104
  // Build a minimal TooltipInteractionState for the candidate-index check.
95
- var mkInteraction = (i) => ({
105
+ const mkInteraction = (i: number): TooltipInteractionState => ({
96
106
  active: false,
97
107
  index: String(i),
98
108
  dataKey: undefined,
99
109
  graphicalItemId: undefined,
100
110
  coordinate: undefined,
101
111
  });
112
+
102
113
  nextIndex = -1;
103
114
  if (effectiveMovement > 0) {
104
- for (var i = 0; i < displayedData.length; i++) {
115
+ for (let i = 0; i < displayedData.length; i++) {
105
116
  if (
106
117
  combineActiveTooltipIndex(mkInteraction(i), displayedData, axisDataKey, domain) !=
107
118
  null
@@ -111,29 +122,28 @@ keyboardEventsMiddleware.startListening({
111
122
  }
112
123
  }
113
124
  } else {
114
- for (var _i = displayedData.length - 1; _i >= 0; _i--) {
125
+ for (let i = displayedData.length - 1; i >= 0; i--) {
115
126
  if (
116
- combineActiveTooltipIndex(mkInteraction(_i), displayedData, axisDataKey, domain) !=
127
+ combineActiveTooltipIndex(mkInteraction(i), displayedData, axisDataKey, domain) !=
117
128
  null
118
129
  ) {
119
- nextIndex = _i;
130
+ nextIndex = i;
120
131
  break;
121
132
  }
122
133
  }
123
134
  }
135
+
124
136
  if (nextIndex < 0) {
125
137
  return;
126
138
  }
127
139
  } else {
128
140
  nextIndex = currentIndex + movement * directionMultiplier;
129
- var dataLength =
130
- (tooltipTicks === null || tooltipTicks === void 0 ? void 0 : tooltipTicks.length) ||
131
- displayedData.length;
141
+ const dataLength = tooltipTicks?.length || displayedData.length;
132
142
  if (dataLength === 0 || nextIndex >= dataLength || nextIndex < 0) {
133
143
  return;
134
144
  }
135
145
  }
136
- var coordinate = selectCoordinateForDefaultIndex(
146
+ const coordinate = selectCoordinateForDefaultIndex(
137
147
  currentState,
138
148
  tooltipEventType,
139
149
  'hover',
@@ -151,16 +161,19 @@ keyboardEventsMiddleware.startListening({
151
161
  timeoutId = null;
152
162
  }
153
163
  };
164
+
154
165
  if (!isThrottled) {
155
166
  callback();
156
167
  return;
157
168
  }
169
+
158
170
  if (throttleDelay === 'raf') {
159
171
  rafId = requestAnimationFrame(callback);
160
172
  } else if (typeof throttleDelay === 'number') {
161
173
  if (timeoutId === null) {
162
174
  callback();
163
175
  latestKeyboardActionPayload = null;
176
+
164
177
  timeoutId = setTimeout(() => {
165
178
  if (latestKeyboardActionPayload) {
166
179
  callback();
@@ -173,22 +186,23 @@ keyboardEventsMiddleware.startListening({
173
186
  }
174
187
  },
175
188
  });
189
+
176
190
  keyboardEventsMiddleware.startListening({
177
191
  actionCreator: focusAction,
178
- effect: (_action, listenerApi) => {
179
- var state = listenerApi.getState();
180
- var accessibilityLayerIsActive = state.rootProps.accessibilityLayer !== false;
192
+ effect: (_action, listenerApi: ListenerEffectAPI<RechartsRootState, AppDispatch>) => {
193
+ const state: RechartsRootState = listenerApi.getState();
194
+ const accessibilityLayerIsActive = state.rootProps.accessibilityLayer !== false;
181
195
  if (!accessibilityLayerIsActive) {
182
196
  return;
183
197
  }
184
- var keyboardInteraction = state.tooltip.keyboardInteraction;
198
+ const { keyboardInteraction } = state.tooltip;
185
199
  if (keyboardInteraction.active) {
186
200
  return;
187
201
  }
188
202
  if (keyboardInteraction.index == null) {
189
- var nextIndex = '0';
190
- var tooltipEventType = selectTooltipEventType(state, state.tooltip.settings.shared);
191
- var coordinate = selectCoordinateForDefaultIndex(
203
+ const nextIndex = '0';
204
+ const tooltipEventType = selectTooltipEventType(state, state.tooltip.settings.shared);
205
+ const coordinate = selectCoordinateForDefaultIndex(
192
206
  state,
193
207
  tooltipEventType,
194
208
  'hover',
@@ -204,15 +218,16 @@ keyboardEventsMiddleware.startListening({
204
218
  }
205
219
  },
206
220
  });
221
+
207
222
  keyboardEventsMiddleware.startListening({
208
223
  actionCreator: blurAction,
209
- effect: (_action, listenerApi) => {
210
- var state = listenerApi.getState();
211
- var accessibilityLayerIsActive = state.rootProps.accessibilityLayer !== false;
224
+ effect: (_action, listenerApi: ListenerEffectAPI<RechartsRootState, AppDispatch>) => {
225
+ const state: RechartsRootState = listenerApi.getState();
226
+ const accessibilityLayerIsActive = state.rootProps.accessibilityLayer !== false;
212
227
  if (!accessibilityLayerIsActive) {
213
228
  return;
214
229
  }
215
- var keyboardInteraction = state.tooltip.keyboardInteraction;
230
+ const { keyboardInteraction } = state.tooltip;
216
231
  if (keyboardInteraction.active) {
217
232
  listenerApi.dispatch(
218
233
  setKeyboardInteraction({
@@ -0,0 +1,50 @@
1
+ // Adapted from recharts@3.9.2, commit b3451050c027a23957ffa50a2665c9119df21e47.
2
+ import { createSlice, PayloadAction } from '@reduxjs/toolkit';
3
+ import { LayoutType, Margin, Size } from '../util/types';
4
+
5
+ type ChartLayoutState = {
6
+ layoutType: LayoutType;
7
+ width: number;
8
+ height: number;
9
+ margin: Margin;
10
+ /**
11
+ * How much is the chart zoomed in.
12
+ * Used for scaling the mouse coordinates to the chart coordinates.
13
+ */
14
+ scale: number;
15
+ };
16
+
17
+ const initialState: ChartLayoutState = {
18
+ layoutType: 'horizontal',
19
+ width: 0,
20
+ height: 0,
21
+ margin: { top: 5, right: 5, bottom: 5, left: 5 },
22
+ scale: 1,
23
+ };
24
+
25
+ const chartLayoutSlice = createSlice({
26
+ name: 'chartLayout',
27
+ initialState,
28
+ reducers: {
29
+ setLayout(state, action: PayloadAction<LayoutType>) {
30
+ state.layoutType = action.payload;
31
+ },
32
+ setChartSize(state, action: PayloadAction<Size>) {
33
+ state.width = action.payload.width;
34
+ state.height = action.payload.height;
35
+ },
36
+ setMargin(state, action: PayloadAction<Partial<Margin>>) {
37
+ state.margin.top = action.payload.top ?? 0;
38
+ state.margin.right = action.payload.right ?? 0;
39
+ state.margin.bottom = action.payload.bottom ?? 0;
40
+ state.margin.left = action.payload.left ?? 0;
41
+ },
42
+ setScale(state, action: PayloadAction<number>) {
43
+ state.scale = action.payload;
44
+ },
45
+ },
46
+ });
47
+
48
+ export const { setMargin, setLayout, setChartSize, setScale } = chartLayoutSlice.actions;
49
+
50
+ export const chartLayoutReducer = chartLayoutSlice.reducer;