@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,291 @@
1
+ // Adapted from recharts@3.9.2, commit b3451050c027a23957ffa50a2665c9119df21e47.
2
+ import { createSlice, PayloadAction, prepareAutoBatched } from '@reduxjs/toolkit';
3
+ import { castDraft, type Draft } from 'immer';
4
+ import {
5
+ AxisDomain,
6
+ AxisInterval,
7
+ AxisTick,
8
+ DataKey,
9
+ EvaluatedAxisDomainType,
10
+ ScaleType,
11
+ TickProp,
12
+ } from '../util/types';
13
+ import { TickFormatter } from '../cartesian/CartesianAxis.tsrx';
14
+ import type { AxisRange } from './selectors/axisSelectors';
15
+ import { CustomScaleDefinition } from '../util/scale/CustomScaleDefinition';
16
+
17
+ /**
18
+ * @inline
19
+ */
20
+ export type AxisId = string | number;
21
+ export const defaultAxisId: AxisId = 0;
22
+ export type XAxisPadding = { left?: number; right?: number } | 'gap' | 'no-gap';
23
+ export type YAxisPadding = { top?: number; bottom?: number } | 'gap' | 'no-gap';
24
+
25
+ export type XAxisOrientation = 'top' | 'bottom';
26
+ export type YAxisOrientation = 'left' | 'right';
27
+
28
+ /**
29
+ * Properties shared in X, Y, and Z axes.
30
+ * User defined axis settings, coming from props.
31
+ */
32
+ export type BaseCartesianAxis = {
33
+ id: AxisId;
34
+ scale:
35
+ | ScaleType
36
+ | CustomScaleDefinition
37
+ | CustomScaleDefinition<string>
38
+ | CustomScaleDefinition<number>
39
+ | CustomScaleDefinition<Date>;
40
+ /**
41
+ * Before creating this object, evaluate the domain type based on the chart layout so that we have the 'auto' resolved.
42
+ */
43
+ type: EvaluatedAxisDomainType;
44
+ /**
45
+ * The axis functionality is severely restricted without a dataKey
46
+ * - but there is still something left, and the prop is optional
47
+ * so this can also be undefined even in real charts.
48
+ * There are no defaults.
49
+ */
50
+ dataKey: DataKey<any> | undefined;
51
+ unit: string | undefined;
52
+ name: string | undefined;
53
+ allowDuplicatedCategory: boolean;
54
+ allowDataOverflow: boolean;
55
+ reversed: boolean;
56
+ includeHidden: boolean;
57
+ domain: AxisDomain | undefined;
58
+ };
59
+
60
+ /**
61
+ * Controls how Recharts calculates "nice" tick values for numerical axes.
62
+ *
63
+ * - `'none'`: Recharts does not apply any tick-rounding algorithm; tick positions are
64
+ * determined entirely by d3, evenly spaced but not rounded to human-friendly numbers.
65
+ * There is no domain-extension logic applied in this mode.
66
+ *
67
+ * - `'auto'` *(default)*: Recharts automatically decides whether and how to apply tick
68
+ * niceties based on the domain definition. When the domain contains an `'auto'` keyword,
69
+ * Recharts uses the `'adaptive'` algorithm and may extend the domain slightly to
70
+ * produce clean tick labels. Otherwise, it applies the same algorithm while keeping
71
+ * ticks within the fixed domain. This mirrors the default behavior from Recharts v2.
72
+ *
73
+ * - `'adaptive'`: Always applies the space-efficient algorithm (`getAdaptiveStep`),
74
+ * which fills the available range as densely as possible while still rounding steps
75
+ * to reasonable numbers (e.g. 10, 20, 25). May produce less "round-looking" labels
76
+ * than `'snap125'`, but wastes less space. The domain-extension logic still applies
77
+ * when the domain contains an `'auto'` keyword.
78
+ *
79
+ * - `'snap125'`: Always applies the round-numbers algorithm (`getSnap125Step`), which
80
+ * snaps step sizes to values from the set {1, 2, 2.5, 5} × 10ⁿ. Produces very
81
+ * human-friendly labels (e.g. 0, 5, 10, 15, 20) but may leave blank space at the
82
+ * edges of the chart. The domain-extension logic still applies when the domain
83
+ * contains an `'auto'` keyword.
84
+ *
85
+ * @see {@link https://recharts.github.io/guide/axisTicks/}
86
+ * @inline
87
+ */
88
+ export type NiceTicksAlgorithm = 'none' | 'auto' | 'adaptive' | 'snap125';
89
+
90
+ export type TicksSettings = {
91
+ allowDecimals: boolean;
92
+ /**
93
+ * We pass the suggested number of ticks to d3 https://d3js.org/d3-scale/linear#linear_ticks
94
+ * This number is a suggestion. d3 tries to accommodate it, but it might return more or less ticks than requested:
95
+ * > The specified count is only a hint; the scale may return more or fewer values depending on the domain.
96
+ *
97
+ * If undefined, then d3 decides the number of ticks on its own. The default in d3 is 10,
98
+ * but it can vary based on the domain size and other factors.
99
+ */
100
+ tickCount: number | undefined;
101
+ /**
102
+ * Ticks can be any type when the axis is the type of category
103
+ * Ticks must be numbers when the axis is the type of number
104
+ */
105
+ ticks: ReadonlyArray<AxisTick> | undefined;
106
+ tick: TickProp<any>;
107
+ /**
108
+ * Controls how Recharts calculates "nice" tick values for this axis.
109
+ * See {@link NiceTicksAlgorithm} for a full description of each option.
110
+ *
111
+ * @defaultValue 'auto'
112
+ */
113
+ niceTicks: NiceTicksAlgorithm;
114
+ };
115
+
116
+ /**
117
+ * These are the external props, visible for users as they set them using our public API.
118
+ * There is all sorts of internal computed things based on these, but they will come through selectors.
119
+ *
120
+ * Properties shared between X and Y axes
121
+ */
122
+ export type CartesianAxisSettings = BaseCartesianAxis &
123
+ TicksSettings & {
124
+ interval: AxisInterval;
125
+ mirror: boolean;
126
+ minTickGap: number;
127
+ angle: number;
128
+ hide: boolean;
129
+ tickFormatter: TickFormatter | undefined;
130
+ };
131
+
132
+ export type XAxisSettings = CartesianAxisSettings & {
133
+ padding: XAxisPadding;
134
+ height: number;
135
+ orientation: XAxisOrientation;
136
+ };
137
+
138
+ export type YAxisWidth = number | 'auto';
139
+
140
+ export type YAxisSettings = CartesianAxisSettings & {
141
+ padding: YAxisPadding;
142
+ width: YAxisWidth;
143
+ orientation: YAxisOrientation;
144
+ widthHistory?: number[];
145
+ };
146
+
147
+ /**
148
+ * Z axis is special because it's never displayed. It controls the size of Scatter dots,
149
+ * but it never displays ticks anywhere.
150
+ */
151
+ export type ZAxisSettings = BaseCartesianAxis & {
152
+ range: AxisRange;
153
+ };
154
+
155
+ type AxisMapState = {
156
+ xAxis: Record<AxisId, XAxisSettings>;
157
+ yAxis: Record<AxisId, YAxisSettings>;
158
+ zAxis: Record<AxisId, ZAxisSettings>;
159
+ };
160
+
161
+ const initialState: AxisMapState = {
162
+ xAxis: {},
163
+ yAxis: {},
164
+ zAxis: {},
165
+ };
166
+
167
+ /**
168
+ * This is the slice where each individual Axis element pushes its own configuration.
169
+ * Prefer to use this one instead of axisSlice.
170
+ */
171
+ // Registered props may contain native DOM refs. The private callback boundary
172
+ // avoids RTK's prepared-action validator recursively comparing raw DOM-backed
173
+ // settings with Draft<Settings>. Every access still uses the exact known draft;
174
+ // the exported reducer state and action payloads remain fully typed.
175
+ const cartesianAxisSlice = createSlice({
176
+ name: 'cartesianAxis',
177
+ initialState,
178
+ reducers: {
179
+ addXAxis: {
180
+ reducer(state: unknown, action: PayloadAction<XAxisSettings>) {
181
+ (state as Draft<AxisMapState>).xAxis[action.payload.id] = castDraft(action.payload);
182
+ },
183
+ prepare: prepareAutoBatched<XAxisSettings>(),
184
+ },
185
+ replaceXAxis: {
186
+ reducer(state: unknown, action: PayloadAction<{ prev: XAxisSettings; next: XAxisSettings }>) {
187
+ const { prev, next } = action.payload;
188
+ if ((state as Draft<AxisMapState>).xAxis[prev.id] !== undefined) {
189
+ if (prev.id !== next.id) {
190
+ delete (state as Draft<AxisMapState>).xAxis[prev.id];
191
+ }
192
+ (state as Draft<AxisMapState>).xAxis[next.id] = castDraft(next);
193
+ }
194
+ },
195
+ prepare: prepareAutoBatched<{ prev: XAxisSettings; next: XAxisSettings }>(),
196
+ },
197
+ removeXAxis: {
198
+ reducer(state: unknown, action: PayloadAction<XAxisSettings>) {
199
+ delete (state as Draft<AxisMapState>).xAxis[action.payload.id];
200
+ },
201
+ prepare: prepareAutoBatched<XAxisSettings>(),
202
+ },
203
+ addYAxis: {
204
+ reducer(state: unknown, action: PayloadAction<YAxisSettings>) {
205
+ (state as Draft<AxisMapState>).yAxis[action.payload.id] = castDraft(action.payload);
206
+ },
207
+ prepare: prepareAutoBatched<YAxisSettings>(),
208
+ },
209
+ replaceYAxis: {
210
+ reducer(state: unknown, action: PayloadAction<{ prev: YAxisSettings; next: YAxisSettings }>) {
211
+ const { prev, next } = action.payload;
212
+ if ((state as Draft<AxisMapState>).yAxis[prev.id] !== undefined) {
213
+ if (prev.id !== next.id) {
214
+ delete (state as Draft<AxisMapState>).yAxis[prev.id];
215
+ }
216
+ (state as Draft<AxisMapState>).yAxis[next.id] = castDraft(next);
217
+ }
218
+ },
219
+ prepare: prepareAutoBatched<{ prev: YAxisSettings; next: YAxisSettings }>(),
220
+ },
221
+ removeYAxis: {
222
+ reducer(state: unknown, action: PayloadAction<YAxisSettings>) {
223
+ delete (state as Draft<AxisMapState>).yAxis[action.payload.id];
224
+ },
225
+ prepare: prepareAutoBatched<YAxisSettings>(),
226
+ },
227
+ addZAxis: {
228
+ reducer(state: unknown, action: PayloadAction<ZAxisSettings>) {
229
+ (state as Draft<AxisMapState>).zAxis[action.payload.id] = castDraft(action.payload);
230
+ },
231
+ prepare: prepareAutoBatched<ZAxisSettings>(),
232
+ },
233
+ replaceZAxis: {
234
+ reducer(state: unknown, action: PayloadAction<{ prev: ZAxisSettings; next: ZAxisSettings }>) {
235
+ const { prev, next } = action.payload;
236
+ if ((state as Draft<AxisMapState>).zAxis[prev.id] !== undefined) {
237
+ if (prev.id !== next.id) {
238
+ delete (state as Draft<AxisMapState>).zAxis[prev.id];
239
+ }
240
+ (state as Draft<AxisMapState>).zAxis[next.id] = castDraft(next);
241
+ }
242
+ },
243
+ prepare: prepareAutoBatched<{ prev: ZAxisSettings; next: ZAxisSettings }>(),
244
+ },
245
+ removeZAxis: {
246
+ reducer(state: unknown, action: PayloadAction<ZAxisSettings>) {
247
+ delete (state as Draft<AxisMapState>).zAxis[action.payload.id];
248
+ },
249
+ prepare: prepareAutoBatched<ZAxisSettings>(),
250
+ },
251
+ updateYAxisWidth(state: unknown, action: PayloadAction<{ id: AxisId; width: number }>) {
252
+ const { id, width } = action.payload;
253
+ const axis = (state as Draft<AxisMapState>).yAxis[id];
254
+ if (axis) {
255
+ const history = axis.widthHistory || [];
256
+ // An oscillation is detected when the new width is the same as the width before the last one.
257
+ // This is a simple A -> B -> A pattern. If the next width is B, and the difference is less than 1 pixel, we ignore it.
258
+ if (
259
+ history.length === 3 &&
260
+ history[0] === history[2] &&
261
+ width === history[1] &&
262
+ width !== axis.width &&
263
+ Math.abs(width - (history[0] ?? 0)) <= 1
264
+ ) {
265
+ return;
266
+ }
267
+ const newHistory = [...history, width].slice(-3);
268
+ (state as Draft<AxisMapState>).yAxis[id] = {
269
+ ...axis,
270
+ width,
271
+ widthHistory: newHistory,
272
+ };
273
+ }
274
+ },
275
+ },
276
+ });
277
+
278
+ export const {
279
+ addXAxis,
280
+ replaceXAxis,
281
+ removeXAxis,
282
+ addYAxis,
283
+ replaceYAxis,
284
+ removeYAxis,
285
+ addZAxis,
286
+ replaceZAxis,
287
+ removeZAxis,
288
+ updateYAxisWidth,
289
+ } = cartesianAxisSlice.actions;
290
+
291
+ export const cartesianAxisReducer = cartesianAxisSlice.reducer;
@@ -0,0 +1,87 @@
1
+ // Adapted from recharts@3.9.2, commit b3451050c027a23957ffa50a2665c9119df21e47.
2
+ import { PayloadAction, createSlice } from '@reduxjs/toolkit';
3
+ import { castDraft } from 'immer';
4
+ import { BrushStartEndIndex } from '../context/brushUpdateContext';
5
+
6
+ /**
7
+ * This is the data that's coming through main chart `data` prop
8
+ * Recharts is very flexible in what it accepts so the type is very flexible too.
9
+ * This will typically be an object, and various components will provide various `dataKey`
10
+ * that dictates how to pull data from that object.
11
+ *
12
+ * TL;DR: before dataKey
13
+ *
14
+ * @inline
15
+ */
16
+ export type ChartData<DataPointType = unknown> = ReadonlyArray<DataPointType>;
17
+
18
+ /**
19
+ * So this is the same unknown type as ChartData but this is after the dataKey has been applied.
20
+ * We still don't know what the type is - that depends on what exactly it was before the dataKey application,
21
+ * and the dataKey can return whatever anyway - but let's keep it separate as a form of documentation.
22
+ *
23
+ * TL;DR: ChartData after dataKey.
24
+ */
25
+ export type AppliedChartData = ReadonlyArray<{ value: unknown }>;
26
+
27
+ export type ChartDataState = {
28
+ chartData: ChartData | undefined;
29
+ /**
30
+ * store a copy of chart data after it has been processed by each chart's specific
31
+ * compute functions. TODO: add other charts besides Sankey
32
+ */
33
+ computedData: unknown | undefined;
34
+ /**
35
+ * Using Brush, users can choose where they want to zoom in.
36
+ * This is zero-based index of the starting data point.
37
+ */
38
+ dataStartIndex: number;
39
+ /**
40
+ * Using Brush, users can choose where they want to zoom in.
41
+ * This is zero-based index of the last data point.
42
+ */
43
+ dataEndIndex: number;
44
+ };
45
+
46
+ export const initialChartDataState: ChartDataState = {
47
+ chartData: undefined,
48
+ computedData: undefined,
49
+ dataStartIndex: 0,
50
+ dataEndIndex: 0,
51
+ };
52
+
53
+ type BrushStartEndIndexActionPayload = Partial<BrushStartEndIndex>;
54
+
55
+ const chartDataSlice = createSlice({
56
+ name: 'chartData',
57
+ initialState: initialChartDataState,
58
+ reducers: {
59
+ setChartData(state, action: PayloadAction<ChartData | undefined>) {
60
+ state.chartData = castDraft(action.payload);
61
+ if (action.payload == null) {
62
+ state.dataStartIndex = 0;
63
+ state.dataEndIndex = 0;
64
+ return;
65
+ }
66
+ if (action.payload.length > 0 && state.dataEndIndex !== action.payload.length - 1) {
67
+ state.dataEndIndex = action.payload.length - 1;
68
+ }
69
+ },
70
+ setComputedData(state, action: PayloadAction<unknown | undefined>) {
71
+ state.computedData = action.payload;
72
+ },
73
+ setDataStartEndIndexes(state, action: PayloadAction<BrushStartEndIndexActionPayload>) {
74
+ const { startIndex, endIndex } = action.payload;
75
+ if (startIndex != null) {
76
+ state.dataStartIndex = startIndex;
77
+ }
78
+ if (endIndex != null) {
79
+ state.dataEndIndex = endIndex;
80
+ }
81
+ },
82
+ },
83
+ });
84
+
85
+ export const { setChartData, setDataStartEndIndexes, setComputedData } = chartDataSlice.actions;
86
+
87
+ export const chartDataReducer = chartDataSlice.reducer;
@@ -0,0 +1,78 @@
1
+ // Adapted from recharts@3.9.2, commit b3451050c027a23957ffa50a2665c9119df21e47.
2
+ import { createSlice, PayloadAction } from '@reduxjs/toolkit';
3
+ import { ErrorBarDirection } from '../cartesian/ErrorBar.tsrx';
4
+ import { DataKey } from '../util/types';
5
+ import { GraphicalItemId } from './graphicalItemsSlice';
6
+
7
+ /**
8
+ * ErrorBars have lot more settings but all the others are scoped to the component itself.
9
+ * Only some of them required to be reported to the global store because XAxis and YAxis need to know
10
+ * if the error bar is contributing to extending the axis domain.
11
+ */
12
+ export type ErrorBarsSettings = {
13
+ /**
14
+ * The direction is only used in Scatter chart, and decided based on ChartLayout in other charts.
15
+ */
16
+ direction: ErrorBarDirection;
17
+ /**
18
+ * The dataKey decides which property from the data will each individual ErrorBar use.
19
+ * If it so happens that the ErrorBar data are bigger than the axis domain,
20
+ * the error bar data will stretch the axis domain.
21
+ */
22
+ dataKey: DataKey<any>;
23
+ /*
24
+ * ErrorBar props say that it has explicit xAxis and yAxis props,
25
+ * but actually it always inherits the xAxis and yAxis defined on the parent graphical item.
26
+ */
27
+ };
28
+
29
+ export type ErrorBarsState = Record<GraphicalItemId, ReadonlyArray<ErrorBarsSettings>>;
30
+
31
+ const initialState: ErrorBarsState = {};
32
+
33
+ const errorBarSlice = createSlice({
34
+ name: 'errorBars',
35
+ initialState,
36
+ reducers: {
37
+ addErrorBar: (
38
+ state,
39
+ action: PayloadAction<{ itemId: GraphicalItemId; errorBar: ErrorBarsSettings }>,
40
+ ) => {
41
+ const { itemId, errorBar } = action.payload;
42
+ if (!state[itemId]) {
43
+ state[itemId] = [];
44
+ }
45
+ state[itemId].push(errorBar);
46
+ },
47
+ replaceErrorBar: (
48
+ state,
49
+ action: PayloadAction<{
50
+ itemId: GraphicalItemId;
51
+ prev: ErrorBarsSettings;
52
+ next: ErrorBarsSettings;
53
+ }>,
54
+ ) => {
55
+ const { itemId, prev, next } = action.payload;
56
+ if (state[itemId]) {
57
+ state[itemId] = state[itemId].map((e) =>
58
+ e.dataKey === prev.dataKey && e.direction === prev.direction ? next : e,
59
+ );
60
+ }
61
+ },
62
+ removeErrorBar: (
63
+ state,
64
+ action: PayloadAction<{ itemId: GraphicalItemId; errorBar: ErrorBarsSettings }>,
65
+ ) => {
66
+ const { itemId, errorBar } = action.payload;
67
+ if (state[itemId]) {
68
+ state[itemId] = state[itemId].filter(
69
+ (e) => e.dataKey !== errorBar.dataKey || e.direction !== errorBar.direction,
70
+ );
71
+ }
72
+ },
73
+ },
74
+ });
75
+
76
+ export const { addErrorBar, replaceErrorBar, removeErrorBar } = errorBarSlice.actions;
77
+
78
+ export const errorBarReducer = errorBarSlice.reducer;
@@ -0,0 +1,30 @@
1
+ // Adapted from recharts@3.9.2, commit b3451050c027a23957ffa50a2665c9119df21e47.
2
+ import { createSlice, PayloadAction } from '@reduxjs/toolkit';
3
+ import { castDraft } from 'immer';
4
+ import { EventThrottlingProps } from '../util/types';
5
+
6
+ export type EventSettingsState = Required<EventThrottlingProps>;
7
+
8
+ export const initialEventSettingsState: EventSettingsState = {
9
+ throttleDelay: 'raf',
10
+ throttledEvents: ['mousemove', 'touchmove', 'pointermove', 'scroll', 'wheel'],
11
+ };
12
+
13
+ const eventSettingsSlice = createSlice({
14
+ name: 'eventSettings',
15
+ initialState: initialEventSettingsState,
16
+ reducers: {
17
+ setEventSettings: (state, action: PayloadAction<EventThrottlingProps>) => {
18
+ if (action.payload.throttleDelay != null) {
19
+ state.throttleDelay = action.payload.throttleDelay;
20
+ }
21
+ if (action.payload.throttledEvents != null) {
22
+ state.throttledEvents = castDraft(action.payload.throttledEvents);
23
+ }
24
+ },
25
+ },
26
+ });
27
+
28
+ export const { setEventSettings } = eventSettingsSlice.actions;
29
+
30
+ export const eventSettingsReducer = eventSettingsSlice.reducer;
@@ -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 {