@octanejs/recharts 0.1.41 → 0.1.43

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
@@ -1,6 +1,12 @@
1
- // Vendored verbatim from recharts@3.9.2 es6/state/store.js (framework-agnostic).
2
- // Do not edit — update by re-vendoring when the recharts devDependency moves.
3
- import { autoBatchEnhancer, combineReducers, configureStore } from '@reduxjs/toolkit';
1
+ // Adapted from recharts@3.9.2, commit b3451050c027a23957ffa50a2665c9119df21e47.
2
+ import {
3
+ Action,
4
+ autoBatchEnhancer,
5
+ combineReducers,
6
+ configureStore,
7
+ Dispatch,
8
+ Store,
9
+ } from '@reduxjs/toolkit';
4
10
  import { optionsReducer } from './optionsSlice';
5
11
  import { tooltipReducer } from './tooltipSlice';
6
12
  import { chartDataReducer } from './chartDataSlice';
@@ -23,7 +29,27 @@ import { Global } from '../util/Global';
23
29
  import { zIndexReducer } from './zIndexSlice';
24
30
  import { eventSettingsReducer } from './eventSettingsSlice';
25
31
  import { renderedTicksReducer } from './renderedTicksSlice';
26
- var rootReducer = combineReducers({
32
+
33
+ export type RechartsRootState = {
34
+ brush: ReturnType<typeof brushReducer>;
35
+ cartesianAxis: ReturnType<typeof cartesianAxisReducer>;
36
+ chartData: ReturnType<typeof chartDataReducer>;
37
+ errorBars: ReturnType<typeof errorBarReducer>;
38
+ eventSettings: ReturnType<typeof eventSettingsReducer>;
39
+ graphicalItems: ReturnType<typeof graphicalItemsReducer>;
40
+ layout: ReturnType<typeof chartLayoutReducer>;
41
+ legend: ReturnType<typeof legendReducer>;
42
+ options: ReturnType<typeof optionsReducer>;
43
+ polarAxis: ReturnType<typeof polarAxisReducer>;
44
+ polarOptions: ReturnType<typeof polarOptionsReducer>;
45
+ referenceElements: ReturnType<typeof referenceElementsReducer>;
46
+ renderedTicks: ReturnType<typeof renderedTicksReducer>;
47
+ rootProps: ReturnType<typeof rootPropsReducer>;
48
+ tooltip: ReturnType<typeof tooltipReducer>;
49
+ zIndex: ReturnType<typeof zIndexReducer>;
50
+ };
51
+
52
+ const rootReducer = combineReducers({
27
53
  brush: brushReducer,
28
54
  cartesianAxis: cartesianAxisReducer,
29
55
  chartData: chartDataReducer,
@@ -41,51 +67,33 @@ var rootReducer = combineReducers({
41
67
  tooltip: tooltipReducer,
42
68
  zIndex: zIndexReducer,
43
69
  });
44
- export var createRechartsStore = function createRechartsStore(preloadedState) {
45
- var chartName = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'Chart';
70
+
71
+ export const createRechartsStore = (
72
+ preloadedState?: Partial<RechartsRootState>,
73
+ chartName: string = 'Chart',
74
+ ): Store<RechartsRootState> => {
46
75
  return configureStore({
47
76
  reducer: rootReducer,
48
- // redux-toolkit v1 types are unhappy with the preloadedState type. Remove the `as any` when bumping to v2
49
77
  preloadedState: preloadedState,
50
- // @ts-expect-error redux-toolkit v1 types are unhappy with the middleware array. Remove this comment when bumping to v2
51
- middleware: (getDefaultMiddleware) => {
52
- var _process$env$NODE_ENV;
53
- return getDefaultMiddleware({
78
+ middleware: (getDefaultMiddleware) =>
79
+ getDefaultMiddleware({
54
80
  serializableCheck: false,
55
- immutableCheck: !['commonjs', 'es6', 'production'].includes(
56
- (_process$env$NODE_ENV = 'es6') !== null && _process$env$NODE_ENV !== void 0
57
- ? _process$env$NODE_ENV
58
- : '',
59
- ),
81
+ immutableCheck: false,
60
82
  }).concat([
61
83
  mouseClickMiddleware.middleware,
62
84
  mouseMoveMiddleware.middleware,
63
85
  keyboardEventsMiddleware.middleware,
64
86
  externalEventsMiddleware.middleware,
65
87
  touchEventMiddleware.middleware,
66
- ]);
67
- },
68
- /*
69
- * I can't find out how to satisfy typescript here.
70
- * We return `EnhancerArray<[StoreEnhancer<{}, {}>, StoreEnhancer]>` from this function,
71
- * but the types say we should return `EnhancerArray<StoreEnhancer<{}, {}>`.
72
- * Looks like it's badly inferred generics, but it won't allow me to provide the correct type manually either.
73
- * So let's just ignore the error for now.
74
- */
75
- // @ts-expect-error mismatched generics
88
+ ]),
76
89
  enhancers: (getDefaultEnhancers) => {
77
- var enhancers = getDefaultEnhancers;
90
+ let enhancers: typeof getDefaultEnhancers | ReturnType<typeof getDefaultEnhancers> =
91
+ getDefaultEnhancers;
78
92
  if (typeof getDefaultEnhancers === 'function') {
79
- /*
80
- * In RTK v2 this is always a function, but in v1 it is an array.
81
- * Because we have @types/redux-toolkit v1 as a dependency, typescript is going to flag this as an error.
82
- * We support both RTK v1 and v2, so we need to do this check.
83
- * https://redux-toolkit.js.org/usage/migrating-rtk-2#configurestoreenhancers-must-be-a-callback
84
- */
85
- // @ts-expect-error RTK v2 behaviour on RTK v1 types
86
93
  enhancers = getDefaultEnhancers();
87
94
  }
88
- return enhancers.concat(
95
+ // RTK 2 supplies a callback; the retained legacy branch accepts its array.
96
+ return (enhancers as ReturnType<typeof getDefaultEnhancers>).concat(
89
97
  autoBatchEnhancer({
90
98
  type: 'raf',
91
99
  }),
@@ -95,7 +103,9 @@ export var createRechartsStore = function createRechartsStore(preloadedState) {
95
103
  serialize: {
96
104
  replacer: reduxDevtoolsJsonStringifyReplacer,
97
105
  },
98
- name: 'recharts-'.concat(chartName),
106
+ name: `recharts-${chartName}`,
99
107
  },
100
108
  });
101
109
  };
110
+
111
+ export type AppDispatch = Dispatch<Action>;
@@ -0,0 +1,507 @@
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 { TooltipTrigger } from '../chart/types';
5
+ import type { NameType, Payload, ValueType } from '../component/DefaultTooltipContent.tsrx';
6
+ import { CartesianViewBoxRequired, Coordinate, DataKey, PolarCoordinate } from '../util/types';
7
+ import { AxisId } from './cartesianAxisSlice';
8
+ import { GraphicalItemId } from './graphicalItemsSlice';
9
+
10
+ /**
11
+ * One Tooltip can display multiple TooltipPayloadEntries at a time.
12
+ */
13
+ export type TooltipPayloadEntry = Payload<ValueType, NameType>;
14
+
15
+ /**
16
+ * So what happens is that the tooltip payload is decided based on the available data, and the dataKey.
17
+ * The dataKey can either be defined on the graphical element (like Line, or Bar)
18
+ * or on the tooltip itself.
19
+ *
20
+ * The data can be defined in the chart element, or in the graphical item.
21
+ *
22
+ * So this type is all the settings, other than the data + dataKey complications.
23
+ */
24
+ export type TooltipEntrySettings = Omit<TooltipPayloadEntry, 'payload' | 'value'> & {
25
+ nameKey: DataKey<any> | undefined;
26
+ };
27
+
28
+ /**
29
+ * This is what Tooltip renders.
30
+ */
31
+ export type TooltipPayload = ReadonlyArray<TooltipPayloadEntry>;
32
+
33
+ /**
34
+ * null means no active index
35
+ * string means: whichever index from the chart data it is.
36
+ * Different charts have different requirements on data shapes,
37
+ * and are also responsible for providing a function that will accept this index
38
+ * and return data.
39
+ */
40
+ export type TooltipIndex = string | null;
41
+
42
+ /**
43
+ * Different items have different data shapes so the state has no opinion on what the data shape should be;
44
+ * the only requirement is that the chart also provides a searcher function
45
+ * that accepts the data, and a key, and returns whatever the payload in Tooltip should be.
46
+ */
47
+ export type TooltipPayloadSearcher<T = unknown> = (
48
+ data: T,
49
+ index: TooltipIndex,
50
+ computedData?: unknown,
51
+ nameKey?: DataKey<any>,
52
+ ) => T | undefined;
53
+
54
+ export type TooltipPayloadConfiguration = {
55
+ // This is the data that is the same for all tooltip payloads, regardless of activeIndex
56
+ settings: TooltipEntrySettings;
57
+ /**
58
+ * This is the data that the item has provided, all of it mixed together.
59
+ * Later as user is interacting with the chart, a redux selector will use this
60
+ * data + activeIndex, pass it to the TooltipPayloadSearcher, and render the result in a Tooltip.
61
+ *
62
+ * Because we have no controls over which data shape the graphical item provides,
63
+ * this is typed as unknown, and it is the responsibility of the selector
64
+ * to know what to do with it.
65
+ *
66
+ * We can't have better typing here because different graphical items
67
+ * may provide different data shapes. For example someone may decide to put Area element
68
+ * in a Sankey chart.
69
+ */
70
+ dataDefinedOnItem: unknown;
71
+ /**
72
+ * Opportunity for the graphical item to define its own Tooltip coordinates
73
+ * instead of relying on the axes.
74
+ *
75
+ * If undefined, then Recharts will use mouse interaction coordinates, or the axis coordinates,
76
+ * with some defaults (like, top/left of the chart).
77
+ *
78
+ * Unlike the chart data which can be nested, the positions are expected to be flat array or record.
79
+ * They however should reuse the same tooltip index format as the chart data.
80
+ */
81
+ getPosition: (tooltipIndex: NonNullable<TooltipIndex>) => Coordinate | undefined;
82
+ };
83
+
84
+ export type ActiveTooltipProps = {
85
+ activeIndex: TooltipIndex;
86
+ activeCoordinate: Coordinate | undefined;
87
+ };
88
+
89
+ /**
90
+ * So this informs the "tooltip event type". Tooltip event type can be either "axis" or "item"
91
+ * and it is used for two things:
92
+ * 1. Sets the active area
93
+ * 2. Sets the background and cursor highlights
94
+ *
95
+ * Some charts only allow to have one type of tooltip event type, some allow both.
96
+ * Those charts that allow both will have one default, and the "shared" prop will be used to switch between them.
97
+ * Undefined means "use the chart default".
98
+ *
99
+ * Charts that only allow one tooltip event type, will ignore the shared prop.
100
+ */
101
+ export type SharedTooltipSettings = boolean | undefined;
102
+
103
+ export type TooltipSettingsState = {
104
+ shared: SharedTooltipSettings;
105
+ trigger: TooltipTrigger;
106
+ axisId: AxisId;
107
+ /**
108
+ * The `active` prop, despite its name, does not mean "always active".
109
+ * It means "active after user interaction has ended".
110
+ * By default, the tooltip is only active while the user is hovering over the chart.
111
+ * With `active=true`, the tooltip will remain visible after mouse leave event.
112
+ *
113
+ * If you want to see the "active before user interaction" settings, see `defaultIndex`.
114
+ *
115
+ * Undefined means "depends on user interactions".
116
+ */
117
+ active: boolean | undefined;
118
+ /**
119
+ * If you want to set the tooltip to be active before user interaction, you can set this property.
120
+ */
121
+ defaultIndex: TooltipIndex | undefined;
122
+ };
123
+
124
+ /**
125
+ * A generic state for user interaction with the chart.
126
+ * User interaction can come through multiple channels: mouse events, keyboard events, or hardcoded in props, or synchronised from other charts.
127
+ *
128
+ * Each of the interaction states is represented as TooltipInteractionState,
129
+ * and then the selectors and Tooltip will decide which of the interaction states to use.
130
+ */
131
+ export type TooltipInteractionState = {
132
+ /**
133
+ * If user interaction is in progress or not.
134
+ * Why is this its own property? Why is this not computed from the index?
135
+ * Certainly if index !== -1 then the tooltip is active, right?
136
+ * Well not so fast. Recharts allows Tooltips can be set to `active=true`
137
+ * which means the tooltip remains displayed after the user stops interacting.
138
+ * - This implies that we cannot set index to <empty value> after interaction ends,
139
+ * because the chart must remember the last position just in case the `active` prop on Tooltip is set to true.
140
+ */
141
+ active: boolean;
142
+ /**
143
+ * This is the current data index that is set for the chart.
144
+ * This can come from mouse events, keyboard events, or hardcoded in props
145
+ * in property `defaultIndex` on Tooltip.
146
+ */
147
+ index: TooltipIndex | undefined;
148
+ /**
149
+ * DataKey filter.
150
+ *
151
+ * In case of multiple graphical items, this is the dataKey that is set for the item.
152
+ * Very useful for `Tooltip.shared=false`, where activeIndex can display multiple values,
153
+ * but we only want to display one of them.
154
+ *
155
+ * If we want to interact with all the graphical items, then this is undefined.
156
+ * This is the case for eventTooltipType === 'axis' for example.
157
+ */
158
+ dataKey: DataKey<any> | undefined;
159
+ /**
160
+ * GraphicalItemId filter.
161
+ *
162
+ * In case of multiple graphical items with the same dataKey (e.g., multiple Pie charts),
163
+ * this identifies which specific graphical item is being interacted with.
164
+ * This is more reliable than coordinate matching for distinguishing between items.
165
+ */
166
+ graphicalItemId: string | undefined;
167
+ /**
168
+ * The Coordinate where user last interacted with the chart. This needs saved so we can continue to render the tooltip at that point.
169
+ * This is undefined on several occasions:
170
+ * - before the user started interacting with the chart,
171
+ * - when the chart is controlled programmatically through `defaultIndex` prop
172
+ * - when the chart is controlled using keyboard interactions
173
+ */
174
+ coordinate: Coordinate | PolarCoordinate | undefined;
175
+ };
176
+
177
+ export type TooltipSyncState = TooltipInteractionState & {
178
+ /**
179
+ * Tooltip synchronization is a feature that allows multiple charts to share the same interaction state.
180
+ * This comes with one specialty - the syncMethod. `syncMethod=value` allows the user to synchronise charts
181
+ * based on the active label (which is rendered as the title of the Tooltip).
182
+ * To allow that, we need the label to be stored in the sync state.
183
+ */
184
+ label: string | undefined;
185
+ /**
186
+ * ViewBox of the chart that sent the sync event.
187
+ * Used to scale coordinates between charts of different sizes so tooltips
188
+ * show up in the right place on all synchronized charts.
189
+ */
190
+ sourceViewBox: CartesianViewBoxRequired | undefined;
191
+ };
192
+
193
+ export const noInteraction: TooltipInteractionState = {
194
+ active: false,
195
+ index: null,
196
+ dataKey: undefined,
197
+ graphicalItemId: undefined,
198
+ coordinate: undefined,
199
+ };
200
+
201
+ /**
202
+ * The tooltip interaction state stores:
203
+ *
204
+ * - Which graphical item is user interacting with at the moment,
205
+ * - which axis (or, which part of chart background) is user interacting with at the moment
206
+ * - The data that individual graphical items wish to be displayed in case the tooltip gets activated
207
+ */
208
+ export type TooltipState = {
209
+ /**
210
+ * This is the state of interactions with individual graphical items.
211
+ */
212
+ itemInteraction: {
213
+ click: TooltipInteractionState;
214
+ /**
215
+ * Why is hover activation separate from click activation? Because they are independent:
216
+ * If a click is set, then mouseLeave should not clear it.
217
+ * - the opposite is technically true too - but it's difficult to click on things without also hovering.
218
+ */
219
+ hover: TooltipInteractionState;
220
+ };
221
+ /**
222
+ * This is the state of interaction with the bar background - which will get mapped
223
+ * to the axis index.
224
+ *
225
+ * Axis interaction is independent of item interaction so the state must also be independent.
226
+ */
227
+ axisInteraction: {
228
+ click: TooltipInteractionState;
229
+ hover: TooltipInteractionState;
230
+ };
231
+ keyboardInteraction: TooltipInteractionState;
232
+ /**
233
+ * This part of the state is the information coming from other charts.
234
+ * If there are two charts with the same syncId, events from one chart will be transferred
235
+ * to other charts. So this is what the other charts are reporting.
236
+ */
237
+ syncInteraction: TooltipSyncState;
238
+ /**
239
+ * One graphical item will have one configuration;
240
+ * hovering over multiple of them (for example with tooltipEventType===axis)
241
+ * may render multiple tooltip payloads.
242
+ */
243
+ tooltipItemPayloads: ReadonlyArray<TooltipPayloadConfiguration>;
244
+ /**
245
+ * Tooltip props or other settings that need redux access.
246
+ * This assumes that there is always only one Tooltip. In case we want to start supporting multiple Tooltips,
247
+ * we have to change this to an array - and update all the places reading this state too.
248
+ */
249
+ settings: TooltipSettingsState;
250
+ };
251
+
252
+ export const initialState: TooltipState = {
253
+ itemInteraction: {
254
+ click: noInteraction,
255
+ hover: noInteraction,
256
+ },
257
+ axisInteraction: {
258
+ click: noInteraction,
259
+ hover: noInteraction,
260
+ },
261
+ keyboardInteraction: noInteraction,
262
+ syncInteraction: {
263
+ active: false,
264
+ index: null,
265
+ dataKey: undefined,
266
+ label: undefined,
267
+ coordinate: undefined,
268
+ sourceViewBox: undefined,
269
+ graphicalItemId: undefined,
270
+ },
271
+ tooltipItemPayloads: [],
272
+ settings: {
273
+ shared: undefined,
274
+ trigger: 'hover',
275
+ axisId: 0,
276
+ active: false,
277
+ defaultIndex: undefined,
278
+ },
279
+ };
280
+
281
+ /**
282
+ * This is the event we get when user is interacting with a specific graphical item.
283
+ */
284
+ export type GraphicalItemTooltipActionPayload = {
285
+ /**
286
+ * Every graphical item must report its own index.
287
+ */
288
+ activeIndex: TooltipIndex;
289
+ /**
290
+ * A graphical item may or may not have a particular dataKey specified.
291
+ * This is undefined in case the user did not set a dataKey on the graphical item.
292
+ * In which case the dataKey is implied by the axes settings.
293
+ */
294
+ activeDataKey: DataKey<any> | undefined;
295
+ /**
296
+ * This is the coordinate where Recharts think the tooltip should appear.
297
+ *
298
+ * Graphical items have a preference where to render the actual tooltip
299
+ * which is defined in the TooltipPayloadConfiguration.positions.
300
+ *
301
+ * This property is resolved by combining that preference with the actual user interaction coordinate.
302
+ * This is not the raw mouse coordinate! We don't store that currently in this slice.
303
+ *
304
+ * This can be undefined depending on the graphical item settings, and the tooltip searcher.
305
+ */
306
+ activeCoordinate: Coordinate | undefined;
307
+ /**
308
+ * ID of the element user is interacting with.
309
+ * Cannot be undefined - each graphical item is responsible for generating its own ID
310
+ * in case user did not provide an explicit one.
311
+ */
312
+ activeGraphicalItemId: GraphicalItemId;
313
+ };
314
+
315
+ export type AxisTooltipActionPayload = {
316
+ /**
317
+ * Each axis interaction must report the index of where the user is interacting.
318
+ */
319
+ activeIndex: TooltipIndex;
320
+ /**
321
+ * DataKey filter. An axis may or may not have a particular dataKey specified.
322
+ * This is undefined in case the user did not set a dataKey on the axis.
323
+ * In which case the dataKey is implied by the graphical item settings.
324
+ */
325
+ activeDataKey: DataKey<any> | undefined;
326
+ /**
327
+ This is the coordinate where Recharts think the tooltip should appear.
328
+ *
329
+ * Graphical items have a preference where to render the actual tooltip
330
+ * which is defined in the TooltipPayloadConfiguration.positions.
331
+ *
332
+ * This property is resolved by combining that preference with the actual user interaction coordinate.
333
+ * This is not the raw mouse coordinate! We don't store that currently in this slice.
334
+ *
335
+ * This can be undefined depending on the graphical item settings, and the tooltip searcher.
336
+ */
337
+ activeCoordinate?: Coordinate;
338
+ };
339
+
340
+ /**
341
+ * Keyboard interaction payload has no graphical item ID,
342
+ * and no dataKey, because keyboard interaction is always
343
+ * with the whole chart, not with a specific graphical item.
344
+ */
345
+ export type KeyboardTooltipActionPayload = {
346
+ /**
347
+ * If true, means user is actively interacting with the chart using keyboard.
348
+ * If false, means user has stopped interacting with the chart using keyboard - perhaps focus has moved away, or ESC key was pressed.
349
+ */
350
+ active: boolean;
351
+ /**
352
+ * Keyboard interaction index. The middleware is responsible for computing this index based on
353
+ * current index, key pressed, chart direction, etc.
354
+ * Each chart type may have different index types (string or number) and different idea on how to iterate them.
355
+ */
356
+ activeIndex: TooltipIndex | undefined;
357
+ /**
358
+ This is the coordinate where Recharts think the tooltip should appear.
359
+
360
+ * Keyboard coordinate follows the same rules as defaultIndex coordinate.
361
+ * In an absence of mouse coordinates, the chart must compute where to render the tooltip
362
+ * based on the activeIndex and domain and range.
363
+ */
364
+ activeCoordinate: Coordinate | undefined;
365
+ };
366
+
367
+ // Registered props may contain native DOM refs. The private callback boundary
368
+ // avoids RTK's prepared-action validator recursively comparing raw DOM-backed
369
+ // settings with Draft<Settings>. Every access still uses the exact known draft;
370
+ // the exported reducer state and action payloads remain fully typed.
371
+ const tooltipSlice = createSlice({
372
+ name: 'tooltip',
373
+ initialState,
374
+ reducers: {
375
+ addTooltipEntrySettings: {
376
+ reducer(state: unknown, action: PayloadAction<TooltipPayloadConfiguration>) {
377
+ (state as Draft<TooltipState>).tooltipItemPayloads.push(castDraft(action.payload));
378
+ },
379
+ prepare: prepareAutoBatched<TooltipPayloadConfiguration>(),
380
+ },
381
+ replaceTooltipEntrySettings: {
382
+ reducer(
383
+ state: unknown,
384
+ action: PayloadAction<{
385
+ prev: TooltipPayloadConfiguration;
386
+ next: TooltipPayloadConfiguration;
387
+ }>,
388
+ ) {
389
+ const { prev, next } = action.payload;
390
+ const index = current(state as Draft<TooltipState>).tooltipItemPayloads.indexOf(
391
+ castDraft(prev),
392
+ );
393
+ if (index > -1) {
394
+ (state as Draft<TooltipState>).tooltipItemPayloads[index] = castDraft(next);
395
+ }
396
+ },
397
+ prepare: prepareAutoBatched<{
398
+ prev: TooltipPayloadConfiguration;
399
+ next: TooltipPayloadConfiguration;
400
+ }>(),
401
+ },
402
+ removeTooltipEntrySettings: {
403
+ reducer(state: unknown, action: PayloadAction<TooltipPayloadConfiguration>) {
404
+ const index = current(state as Draft<TooltipState>).tooltipItemPayloads.indexOf(
405
+ castDraft(action.payload),
406
+ );
407
+ if (index > -1) {
408
+ (state as Draft<TooltipState>).tooltipItemPayloads.splice(index, 1);
409
+ }
410
+ },
411
+ prepare: prepareAutoBatched<TooltipPayloadConfiguration>(),
412
+ },
413
+ setTooltipSettingsState(state: unknown, action: PayloadAction<TooltipSettingsState>) {
414
+ (state as Draft<TooltipState>).settings = action.payload;
415
+ },
416
+ setActiveMouseOverItemIndex(
417
+ state: unknown,
418
+ action: PayloadAction<GraphicalItemTooltipActionPayload>,
419
+ ) {
420
+ (state as Draft<TooltipState>).syncInteraction.active = false;
421
+ (state as Draft<TooltipState>).syncInteraction.sourceViewBox = undefined;
422
+ (state as Draft<TooltipState>).keyboardInteraction.active = false;
423
+ (state as Draft<TooltipState>).itemInteraction.hover.active = true;
424
+ (state as Draft<TooltipState>).itemInteraction.hover.index = action.payload.activeIndex;
425
+ (state as Draft<TooltipState>).itemInteraction.hover.dataKey = action.payload.activeDataKey;
426
+ (state as Draft<TooltipState>).itemInteraction.hover.graphicalItemId =
427
+ action.payload.activeGraphicalItemId;
428
+ (state as Draft<TooltipState>).itemInteraction.hover.coordinate =
429
+ action.payload.activeCoordinate;
430
+ },
431
+ mouseLeaveChart(state: unknown) {
432
+ /*
433
+ * Clear only the active flags. Why?
434
+ * 1. Keep Coordinate to preserve animation - next time the Tooltip appears, we want to render it from
435
+ * the last place where it was when it disappeared.
436
+ * 2. We want to keep all the properties anyway just in case the tooltip has `active=true` prop
437
+ * and continues being visible even after the mouse has left the chart.
438
+ */
439
+ (state as Draft<TooltipState>).itemInteraction.hover.active = false;
440
+ (state as Draft<TooltipState>).axisInteraction.hover.active = false;
441
+ },
442
+ mouseLeaveItem(state: unknown) {
443
+ (state as Draft<TooltipState>).itemInteraction.hover.active = false;
444
+ },
445
+ setActiveClickItemIndex(
446
+ state: unknown,
447
+ action: PayloadAction<GraphicalItemTooltipActionPayload>,
448
+ ) {
449
+ (state as Draft<TooltipState>).syncInteraction.active = false;
450
+ (state as Draft<TooltipState>).syncInteraction.sourceViewBox = undefined;
451
+ (state as Draft<TooltipState>).itemInteraction.click.active = true;
452
+ (state as Draft<TooltipState>).keyboardInteraction.active = false;
453
+ (state as Draft<TooltipState>).itemInteraction.click.index = action.payload.activeIndex;
454
+ (state as Draft<TooltipState>).itemInteraction.click.dataKey = action.payload.activeDataKey;
455
+ (state as Draft<TooltipState>).itemInteraction.click.graphicalItemId =
456
+ action.payload.activeGraphicalItemId;
457
+ (state as Draft<TooltipState>).itemInteraction.click.coordinate =
458
+ action.payload.activeCoordinate;
459
+ },
460
+ setMouseOverAxisIndex(state: unknown, action: PayloadAction<AxisTooltipActionPayload>) {
461
+ (state as Draft<TooltipState>).syncInteraction.active = false;
462
+ (state as Draft<TooltipState>).syncInteraction.sourceViewBox = undefined;
463
+ (state as Draft<TooltipState>).axisInteraction.hover.active = true;
464
+ (state as Draft<TooltipState>).keyboardInteraction.active = false;
465
+ (state as Draft<TooltipState>).axisInteraction.hover.index = action.payload.activeIndex;
466
+ (state as Draft<TooltipState>).axisInteraction.hover.dataKey = action.payload.activeDataKey;
467
+ (state as Draft<TooltipState>).axisInteraction.hover.coordinate =
468
+ action.payload.activeCoordinate;
469
+ },
470
+ setMouseClickAxisIndex(state: unknown, action: PayloadAction<AxisTooltipActionPayload>) {
471
+ (state as Draft<TooltipState>).syncInteraction.active = false;
472
+ (state as Draft<TooltipState>).syncInteraction.sourceViewBox = undefined;
473
+ (state as Draft<TooltipState>).keyboardInteraction.active = false;
474
+ (state as Draft<TooltipState>).axisInteraction.click.active = true;
475
+ (state as Draft<TooltipState>).axisInteraction.click.index = action.payload.activeIndex;
476
+ (state as Draft<TooltipState>).axisInteraction.click.dataKey = action.payload.activeDataKey;
477
+ (state as Draft<TooltipState>).axisInteraction.click.coordinate =
478
+ action.payload.activeCoordinate;
479
+ },
480
+ setSyncInteraction(state: unknown, action: PayloadAction<TooltipSyncState>) {
481
+ (state as Draft<TooltipState>).syncInteraction = action.payload;
482
+ },
483
+ setKeyboardInteraction(state: unknown, action: PayloadAction<KeyboardTooltipActionPayload>) {
484
+ (state as Draft<TooltipState>).keyboardInteraction.active = action.payload.active;
485
+ (state as Draft<TooltipState>).keyboardInteraction.index = action.payload.activeIndex;
486
+ (state as Draft<TooltipState>).keyboardInteraction.coordinate =
487
+ action.payload.activeCoordinate;
488
+ },
489
+ },
490
+ });
491
+
492
+ export const {
493
+ addTooltipEntrySettings,
494
+ replaceTooltipEntrySettings,
495
+ removeTooltipEntrySettings,
496
+ setTooltipSettingsState,
497
+ setActiveMouseOverItemIndex,
498
+ mouseLeaveItem,
499
+ mouseLeaveChart,
500
+ setActiveClickItemIndex,
501
+ setMouseOverAxisIndex,
502
+ setMouseClickAxisIndex,
503
+ setSyncInteraction,
504
+ setKeyboardInteraction,
505
+ } = tooltipSlice.actions;
506
+
507
+ export const tooltipReducer = tooltipSlice.reducer;