@octanejs/recharts 0.1.40 → 0.1.42

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (376) hide show
  1. package/{LICENSE → LICENSE.recharts} +3 -2
  2. package/README.md +12 -0
  3. package/package.json +10 -9
  4. package/src/animation/AnimatedItems.tsrx +36 -3
  5. package/src/animation/AnimationController.ts +17 -65
  6. package/src/animation/{AnimationControllerImpl.js → AnimationControllerImpl.ts} +19 -12
  7. package/src/animation/{AnimationHandle.js → AnimationHandle.ts} +82 -65
  8. package/src/animation/CSSTransitionAnimate.tsrx +3 -2
  9. package/src/animation/JavascriptAnimate.tsrx +18 -2
  10. package/src/animation/easing.ts +235 -0
  11. package/src/animation/{matchBy.js → matchBy.ts} +76 -120
  12. package/src/animation/timeoutController.ts +71 -0
  13. package/src/animation/useAnimationController.ts +4 -1
  14. package/src/animation/useAnimationStartSnapshot.ts +3 -3
  15. package/src/animation/util.ts +12 -0
  16. package/src/cartesian/Area.tsrx +33 -31
  17. package/src/cartesian/AreaRevealShape.tsrx +4 -3
  18. package/src/cartesian/Bar.ts +1 -0
  19. package/src/cartesian/Bar.tsrx +293 -39
  20. package/src/cartesian/BarStack.tsrx +31 -9
  21. package/src/cartesian/CartesianAxis.tsrx +154 -22
  22. package/src/cartesian/CartesianGrid.tsrx +5 -6
  23. package/src/cartesian/ErrorBar.tsrx +9 -8
  24. package/src/cartesian/Funnel.tsrx +40 -37
  25. package/src/cartesian/GraphicalItemClipPath.tsrx +11 -4
  26. package/src/cartesian/Line.ts +1 -0
  27. package/src/cartesian/Line.tsrx +206 -28
  28. package/src/cartesian/LineDrawShape.tsrx +23 -10
  29. package/src/cartesian/ReferenceLine.tsrx +8 -8
  30. package/src/cartesian/Scatter.tsrx +61 -66
  31. package/src/cartesian/XAxis.tsrx +78 -9
  32. package/src/cartesian/YAxis.tsrx +85 -12
  33. package/src/cartesian/getCartesianPosition.ts +265 -0
  34. package/src/cartesian/getEquidistantTicks.ts +144 -0
  35. package/src/cartesian/getTicks.ts +221 -0
  36. package/src/chart/AreaChart.tsrx +5 -1
  37. package/src/chart/BarChart.tsrx +8 -2
  38. package/src/chart/CartesianChart.tsrx +17 -4
  39. package/src/chart/CategoricalChart.tsrx +4 -1
  40. package/src/chart/ComposedChart.tsrx +5 -1
  41. package/src/chart/FunnelChart.tsrx +5 -1
  42. package/src/chart/LineChart.tsrx +8 -2
  43. package/src/chart/PieChart.tsrx +6 -2
  44. package/src/chart/PolarChart.tsrx +5 -4
  45. package/src/chart/RadarChart.tsrx +6 -2
  46. package/src/chart/RadialBarChart.tsrx +6 -2
  47. package/src/chart/RechartsWrapper.tsrx +57 -21
  48. package/src/chart/Sankey.tsrx +89 -91
  49. package/src/chart/ScatterChart.tsrx +5 -1
  50. package/src/chart/SunburstChart.tsrx +21 -14
  51. package/src/chart/types.ts +0 -1
  52. package/src/component/ActivePoints.tsrx +30 -5
  53. package/src/component/Cell.ts +19 -1
  54. package/src/component/Cursor.tsrx +11 -10
  55. package/src/component/DefaultLegendContent.tsrx +15 -10
  56. package/src/component/DefaultTooltipContent.tsrx +11 -9
  57. package/src/component/Dots.tsrx +37 -6
  58. package/src/component/Label.tsrx +99 -19
  59. package/src/component/LabelList.tsrx +54 -5
  60. package/src/component/Legend.tsrx +9 -5
  61. package/src/component/ResponsiveContainer.tsrx +13 -10
  62. package/src/component/Text.tsrx +95 -32
  63. package/src/component/Tooltip.tsrx +11 -10
  64. package/src/component/TooltipBoundingBox.tsrx +4 -5
  65. package/src/component/{responsiveContainerUtils.js → responsiveContainerUtils.ts} +59 -36
  66. package/src/container/ClipPathProvider.tsrx +6 -2
  67. package/src/container/Layer.tsrx +8 -1
  68. package/src/container/RootSurface.tsrx +15 -4
  69. package/src/container/Surface.tsrx +15 -1
  70. package/src/context/CellsContext.ts +6 -5
  71. package/src/context/ErrorBarContext.tsrx +23 -4
  72. package/src/context/RegisterGraphicalItemId.tsrx +10 -2
  73. package/src/context/accessibilityContext.ts +5 -0
  74. package/src/context/brushUpdateContext.ts +11 -0
  75. package/src/context/chartDataContext.ts +5 -4
  76. package/src/context/chartLayoutContext.ts +22 -8
  77. package/src/context/legendPayloadContext.tsrx +1 -1
  78. package/src/context/tooltipContext.ts +83 -0
  79. package/src/{hooks.js → hooks.ts} +88 -66
  80. package/src/index.ts +37 -37
  81. package/src/internal.ts +4 -20
  82. package/src/legacy-props.ts +129 -0
  83. package/src/polar/Pie.tsrx +91 -69
  84. package/src/polar/PolarAngleAxis.tsrx +47 -47
  85. package/src/polar/PolarGrid.tsrx +7 -6
  86. package/src/polar/PolarRadiusAxis.tsrx +29 -21
  87. package/src/polar/Radar.tsrx +26 -19
  88. package/src/polar/RadialBar.tsrx +59 -42
  89. package/src/polar/{defaultPolarAngleAxisProps.js → defaultPolarAngleAxisProps.ts} +6 -6
  90. package/src/polar/{defaultPolarRadiusAxisProps.js → defaultPolarRadiusAxisProps.ts} +5 -4
  91. package/src/shape/Cross.tsrx +14 -2
  92. package/src/shape/Curve.tsrx +111 -23
  93. package/src/shape/Dot.tsrx +12 -1
  94. package/src/shape/Polygon.tsrx +28 -6
  95. package/src/shape/Rectangle.tsrx +30 -3
  96. package/src/shape/Sector.tsrx +48 -6
  97. package/src/shape/Symbols.tsrx +24 -6
  98. package/src/shape/Trapezoid.tsrx +33 -3
  99. package/src/state/RechartsStoreProvider.tsrx +11 -2
  100. package/src/state/ReportChartProps.ts +2 -2
  101. package/src/state/ReportMainChartProps.ts +2 -1
  102. package/src/state/SetGraphicalItem.ts +6 -4
  103. package/src/state/SetLegendPayload.ts +7 -4
  104. package/src/state/SetTooltipEntrySettings.ts +5 -2
  105. package/src/state/brushSlice.ts +40 -0
  106. package/src/state/cartesianAxisSlice.ts +291 -0
  107. package/src/state/chartDataSlice.ts +87 -0
  108. package/src/state/errorBarSlice.ts +78 -0
  109. package/src/state/eventSettingsSlice.ts +30 -0
  110. package/src/state/{externalEventsMiddleware.js → externalEventsMiddleware.ts} +55 -34
  111. package/src/state/graphicalItemsSlice.ts +180 -0
  112. package/src/state/{keyboardEventsMiddleware.js → keyboardEventsMiddleware.ts} +72 -57
  113. package/src/state/layoutSlice.ts +50 -0
  114. package/src/state/legendSlice.ts +109 -0
  115. package/src/state/{mouseEventsMiddleware.js → mouseEventsMiddleware.ts} +45 -35
  116. package/src/state/optionsSlice.ts +65 -0
  117. package/src/state/polarAxisSlice.ts +42 -0
  118. package/src/state/polarOptionsSlice.ts +43 -0
  119. package/src/state/reduxDevtoolsJsonStringifyReplacer.ts +13 -0
  120. package/src/state/referenceElementsSlice.ts +100 -0
  121. package/src/state/renderedTicksSlice.ts +60 -0
  122. package/src/state/rootPropsSlice.ts +72 -0
  123. package/src/state/selectors/areaSelectors.ts +1 -2
  124. package/src/state/selectors/{arrayEqualityCheck.js → arrayEqualityCheck.ts} +4 -5
  125. package/src/state/selectors/axisSelectors.ts +2502 -0
  126. package/src/state/selectors/barSelectors.ts +373 -0
  127. package/src/state/selectors/barStackSelectors.ts +99 -0
  128. package/src/state/selectors/brushSelectors.ts +28 -0
  129. package/src/state/selectors/combiners/combineActiveLabel.ts +16 -0
  130. package/src/state/selectors/combiners/{combineActiveTooltipIndex.js → combineActiveTooltipIndex.ts} +45 -23
  131. package/src/state/selectors/combiners/combineAllBarPositions.ts +130 -0
  132. package/src/state/selectors/combiners/combineAxisRangeWithReverse.ts +16 -0
  133. package/src/state/selectors/combiners/combineBarPosition.ts +23 -0
  134. package/src/state/selectors/combiners/combineBarSizeList.ts +79 -0
  135. package/src/state/selectors/combiners/{combineCheckedDomain.js → combineCheckedDomain.ts} +9 -6
  136. package/src/state/selectors/combiners/combineConfiguredScale.ts +100 -0
  137. package/src/state/selectors/combiners/combineCoordinateForDefaultIndex.ts +46 -0
  138. package/src/state/selectors/combiners/{combineDisplayedStackedData.js → combineDisplayedStackedData.ts} +23 -19
  139. package/src/state/selectors/combiners/combineInverseScaleFunction.ts +16 -0
  140. package/src/state/selectors/combiners/{combineRealScaleType.js → combineRealScaleType.ts} +16 -8
  141. package/src/state/selectors/combiners/combineStackedData.ts +27 -0
  142. package/src/state/selectors/combiners/combineTooltipInteractionState.ts +86 -0
  143. package/src/state/selectors/combiners/combineTooltipPayload.ts +201 -0
  144. package/src/state/selectors/combiners/{combineTooltipPayloadConfigurations.js → combineTooltipPayloadConfigurations.ts} +17 -18
  145. package/src/state/selectors/containerSelectors.ts +12 -0
  146. package/src/state/selectors/{dataSelectors.js → dataSelectors.ts} +43 -41
  147. package/src/state/selectors/funnelSelectors.ts +5 -5
  148. package/src/state/selectors/graphicalItemSelectors.ts +22 -0
  149. package/src/state/selectors/legendSelectors.ts +25 -0
  150. package/src/state/selectors/lineSelectors.ts +159 -0
  151. package/src/state/selectors/numberDomainEqualityCheck.ts +15 -0
  152. package/src/state/selectors/pickAxisId.ts +6 -0
  153. package/src/state/selectors/pickAxisType.ts +4 -0
  154. package/src/state/selectors/pieSelectors.ts +14 -13
  155. package/src/state/selectors/polarAxisSelectors.ts +223 -0
  156. package/src/state/selectors/polarSelectors.ts +1 -1
  157. package/src/state/selectors/radarSelectors.ts +1 -1
  158. package/src/state/selectors/radialBarSelectors.ts +17 -16
  159. package/src/state/selectors/rootPropsSelectors.ts +26 -0
  160. package/src/state/selectors/scatterSelectors.ts +11 -10
  161. package/src/state/selectors/{selectActivePropsFromChartPointer.js → selectActivePropsFromChartPointer.ts} +11 -4
  162. package/src/state/selectors/selectAllAxes.ts +20 -0
  163. package/src/state/selectors/selectChartOffset.ts +17 -0
  164. package/src/state/selectors/selectChartOffsetInternal.ts +147 -0
  165. package/src/state/selectors/{selectPlotArea.js → selectPlotArea.ts} +4 -3
  166. package/src/state/selectors/selectTooltipAxisId.ts +6 -0
  167. package/src/state/selectors/{selectTooltipAxisType.js → selectTooltipAxisType.ts} +10 -4
  168. package/src/state/selectors/selectTooltipEventType.ts +39 -0
  169. package/src/state/selectors/selectTooltipPayloadSearcher.ts +6 -0
  170. package/src/state/selectors/selectTooltipSettings.ts +6 -0
  171. package/src/state/selectors/selectTooltipState.ts +5 -0
  172. package/src/state/selectors/selectors.ts +315 -0
  173. package/src/state/selectors/tooltipSelectors.ts +611 -0
  174. package/src/state/selectors/touchSelectors.ts +52 -0
  175. package/src/state/{store.js → store.ts} +46 -36
  176. package/src/state/tooltipSlice.ts +507 -0
  177. package/src/state/{touchEventsMiddleware.js → touchEventsMiddleware.ts} +54 -42
  178. package/src/state/types/AreaSettings.ts +15 -0
  179. package/src/state/types/BarSettings.ts +15 -0
  180. package/src/state/types/LineSettings.ts +10 -0
  181. package/src/state/types/PieSettings.ts +32 -0
  182. package/src/state/types/RadarSettings.ts +6 -0
  183. package/src/state/types/RadialBarSettings.ts +10 -0
  184. package/src/state/types/ScatterSettings.ts +13 -0
  185. package/src/state/types/StackedGraphicalItem.ts +34 -0
  186. package/src/state/zIndexSlice.ts +137 -0
  187. package/src/synchronisation/syncSelectors.ts +7 -0
  188. package/src/synchronisation/types.ts +42 -0
  189. package/src/synchronisation/useChartSynchronisation.tsrx +26 -11
  190. package/src/types.ts +55 -0
  191. package/src/util/ActiveShapeUtils.tsrx +34 -10
  192. package/src/util/BarUtils.tsrx +43 -3
  193. package/src/util/{CartesianUtils.js → CartesianUtils.ts} +22 -39
  194. package/src/util/ChartUtils.ts +759 -0
  195. package/src/util/{Constants.js → Constants.ts} +6 -6
  196. package/src/util/DOMUtils.ts +135 -0
  197. package/src/util/{DataUtils.js → DataUtils.ts} +120 -47
  198. package/src/util/Events.ts +22 -0
  199. package/src/util/FunnelUtils.tsrx +3 -3
  200. package/src/util/Global.ts +13 -0
  201. package/src/util/IfOverflow.ts +16 -0
  202. package/src/util/LRUCache.ts +42 -0
  203. package/src/util/{LogUtils.js → LogUtils.ts} +7 -12
  204. package/src/util/OctaneTypes.ts +51 -0
  205. package/src/util/PolarUtils.ts +132 -0
  206. package/src/util/RadialBarUtils.tsrx +3 -3
  207. package/src/util/ReduceCSSCalc.ts +186 -0
  208. package/src/util/ScatterUtils.tsrx +9 -7
  209. package/src/util/{TickUtils.js → TickUtils.ts} +30 -13
  210. package/src/util/{YAxisUtils.js → YAxisUtils.ts} +27 -17
  211. package/src/util/axisPropsAreEqual.ts +49 -0
  212. package/src/util/createEventProxy.ts +20 -0
  213. package/src/util/{excludeEventProps.js → excludeEventProps.ts} +8 -6
  214. package/src/util/getActiveCoordinate.ts +210 -0
  215. package/src/util/{getAxisTypeBasedOnLayout.js → getAxisTypeBasedOnLayout.ts} +7 -3
  216. package/src/util/getClassNameFromUnknown.ts +7 -0
  217. package/src/util/{getEveryNth.js → getEveryNth.ts} +5 -6
  218. package/src/util/getRadiusAndStrokeWidthFromDot.ts +31 -0
  219. package/src/util/{getRelativeCoordinate.js → getRelativeCoordinate.ts} +26 -9
  220. package/src/util/getSliced.ts +14 -0
  221. package/src/util/{isDomainSpecifiedByUser.js → isDomainSpecifiedByUser.ts} +46 -100
  222. package/src/util/isWellBehavedNumber.ts +8 -0
  223. package/src/util/payload/getUniqPayload.ts +1 -1
  224. package/src/util/{propsAreEqual.js → propsAreEqual.ts} +10 -8
  225. package/src/util/{resolveDefaultProps.js → resolveDefaultProps.ts} +35 -57
  226. package/src/util/round.ts +33 -0
  227. package/src/util/scale/CustomScaleDefinition.ts +82 -0
  228. package/src/util/scale/RechartsScale.ts +131 -0
  229. package/src/util/scale/{createCategoricalInverse.js → createCategoricalInverse.ts} +24 -29
  230. package/src/util/scale/{getNiceTickValues.js → getNiceTickValues.ts} +125 -146
  231. package/src/util/scale/index.ts +2 -0
  232. package/src/util/scale/util/{arithmetic.js → arithmetic.ts} +12 -8
  233. package/src/util/stacks/getStackSeriesIdentifier.ts +21 -0
  234. package/src/util/stacks/stackTypes.ts +58 -0
  235. package/src/util/{svgPropertiesNoEvents.js → svgPropertiesNoEvents.ts} +52 -27
  236. package/src/util/tooltip/translate.ts +2 -1
  237. package/src/util/typedDataKey.ts +49 -0
  238. package/src/util/types.ts +1265 -7
  239. package/src/util/{useUniqueId.js → useUniqueId.ts} +9 -5
  240. package/src/zIndex/{DefaultZIndexes.js → DefaultZIndexes.ts} +13 -4
  241. package/src/zIndex/ZIndexLayer.tsrx +13 -4
  242. package/src/zIndex/ZIndexPortal.tsrx +14 -4
  243. package/src/zIndex/{getZIndexFromUnknown.js → getZIndexFromUnknown.ts} +3 -3
  244. package/src/zIndex/{zIndexSelectors.js → zIndexSelectors.ts} +17 -11
  245. package/src/animation/easing.js +0 -193
  246. package/src/animation/timeoutController.js +0 -49
  247. package/src/animation/util.js +0 -11
  248. package/src/cartesian/Area.tsrx.d.ts +0 -340
  249. package/src/cartesian/Bar.tsrx.d.ts +0 -4
  250. package/src/cartesian/BarStack.tsrx.d.ts +0 -6
  251. package/src/cartesian/CartesianAxis.tsrx.d.ts +0 -3
  252. package/src/cartesian/CartesianGrid.tsrx.d.ts +0 -219
  253. package/src/cartesian/ErrorBar.tsrx.d.ts +0 -131
  254. package/src/cartesian/Funnel.tsrx.d.ts +0 -274
  255. package/src/cartesian/Line.tsrx.d.ts +0 -4
  256. package/src/cartesian/LineDrawShape.tsrx.d.ts +0 -2
  257. package/src/cartesian/ReferenceLine.tsrx.d.ts +0 -178
  258. package/src/cartesian/Scatter.tsrx.d.ts +0 -351
  259. package/src/cartesian/XAxis.tsrx.d.ts +0 -3
  260. package/src/cartesian/YAxis.tsrx.d.ts +0 -3
  261. package/src/cartesian/ZAxis.tsrx.d.ts +0 -102
  262. package/src/cartesian/getCartesianPosition.js +0 -277
  263. package/src/cartesian/getEquidistantTicks.js +0 -133
  264. package/src/cartesian/getTicks.js +0 -280
  265. package/src/chart/AreaChart.tsrx.d.ts +0 -12
  266. package/src/chart/BarChart.tsrx.d.ts +0 -2
  267. package/src/chart/CartesianChart.tsrx.d.ts +0 -10
  268. package/src/chart/ComposedChart.tsrx.d.ts +0 -12
  269. package/src/chart/FunnelChart.tsrx.d.ts +0 -12
  270. package/src/chart/LineChart.tsrx.d.ts +0 -2
  271. package/src/chart/PieChart.tsrx.d.ts +0 -31
  272. package/src/chart/RadarChart.tsrx.d.ts +0 -31
  273. package/src/chart/RadialBarChart.tsrx.d.ts +0 -31
  274. package/src/chart/Sankey.tsrx.d.ts +0 -253
  275. package/src/chart/ScatterChart.tsrx.d.ts +0 -12
  276. package/src/chart/SunburstChart.tsrx.d.ts +0 -146
  277. package/src/component/DefaultLegendContent.tsrx.d.ts +0 -125
  278. package/src/component/DefaultTooltipContent.tsrx.d.ts +0 -87
  279. package/src/component/Label.tsrx.d.ts +0 -12
  280. package/src/component/LabelList.tsrx.d.ts +0 -8
  281. package/src/component/Legend.tsrx.d.ts +0 -88
  282. package/src/component/ResponsiveContainer.tsrx.d.ts +0 -81
  283. package/src/component/Text.tsrx.d.ts +0 -9
  284. package/src/component/Tooltip.tsrx.d.ts +0 -246
  285. package/src/container/Layer.tsrx.d.ts +0 -6
  286. package/src/container/Surface.tsrx.d.ts +0 -12
  287. package/src/context/accessibilityContext.js +0 -10
  288. package/src/context/tooltipContext.js +0 -55
  289. package/src/index.d.ts +0 -281
  290. package/src/polar/Pie.tsrx.d.ts +0 -436
  291. package/src/polar/PolarAngleAxis.tsrx.d.ts +0 -215
  292. package/src/polar/PolarGrid.tsrx.d.ts +0 -117
  293. package/src/polar/PolarRadiusAxis.tsrx.d.ts +0 -209
  294. package/src/polar/Radar.tsrx.d.ts +0 -215
  295. package/src/polar/RadialBar.tsrx.d.ts +0 -340
  296. package/src/shape/Cross.tsrx.d.ts +0 -12
  297. package/src/shape/Curve.tsrx.d.ts +0 -42
  298. package/src/shape/Dot.tsrx.d.ts +0 -9
  299. package/src/shape/Polygon.tsrx.d.ts +0 -13
  300. package/src/shape/Rectangle.tsrx.d.ts +0 -31
  301. package/src/shape/Sector.tsrx.d.ts +0 -29
  302. package/src/shape/Symbols.tsrx.d.ts +0 -15
  303. package/src/shape/Trapezoid.tsrx.d.ts +0 -29
  304. package/src/state/brushSlice.js +0 -36
  305. package/src/state/cartesianAxisSlice.js +0 -256
  306. package/src/state/chartDataSlice.js +0 -67
  307. package/src/state/errorBarSlice.js +0 -53
  308. package/src/state/eventSettingsSlice.js +0 -25
  309. package/src/state/graphicalItemsSlice.js +0 -91
  310. package/src/state/layoutSlice.js +0 -57
  311. package/src/state/legendSlice.js +0 -83
  312. package/src/state/optionsSlice.js +0 -45
  313. package/src/state/polarAxisSlice.js +0 -33
  314. package/src/state/polarOptionsSlice.js +0 -26
  315. package/src/state/reduxDevtoolsJsonStringifyReplacer.js +0 -14
  316. package/src/state/referenceElementsSlice.js +0 -51
  317. package/src/state/renderedTicksSlice.js +0 -41
  318. package/src/state/rootPropsSlice.js +0 -48
  319. package/src/state/selectors/axisSelectors.js +0 -2113
  320. package/src/state/selectors/barSelectors.js +0 -263
  321. package/src/state/selectors/barStackSelectors.js +0 -65
  322. package/src/state/selectors/brushSelectors.js +0 -21
  323. package/src/state/selectors/combiners/combineActiveLabel.js +0 -18
  324. package/src/state/selectors/combiners/combineAllBarPositions.js +0 -169
  325. package/src/state/selectors/combiners/combineAxisRangeWithReverse.js +0 -11
  326. package/src/state/selectors/combiners/combineBarPosition.js +0 -17
  327. package/src/state/selectors/combiners/combineBarSizeList.js +0 -115
  328. package/src/state/selectors/combiners/combineConfiguredScale.js +0 -46
  329. package/src/state/selectors/combiners/combineCoordinateForDefaultIndex.js +0 -48
  330. package/src/state/selectors/combiners/combineInverseScaleFunction.js +0 -12
  331. package/src/state/selectors/combiners/combineStackedData.js +0 -22
  332. package/src/state/selectors/combiners/combineTooltipInteractionState.js +0 -121
  333. package/src/state/selectors/combiners/combineTooltipPayload.js +0 -248
  334. package/src/state/selectors/containerSelectors.js +0 -6
  335. package/src/state/selectors/graphicalItemSelectors.js +0 -25
  336. package/src/state/selectors/legendSelectors.js +0 -18
  337. package/src/state/selectors/lineSelectors.js +0 -106
  338. package/src/state/selectors/numberDomainEqualityCheck.js +0 -11
  339. package/src/state/selectors/pickAxisId.js +0 -3
  340. package/src/state/selectors/pickAxisType.js +0 -3
  341. package/src/state/selectors/polarAxisSelectors.js +0 -237
  342. package/src/state/selectors/rootPropsSelectors.js +0 -13
  343. package/src/state/selectors/selectAllAxes.js +0 -15
  344. package/src/state/selectors/selectChartOffset.js +0 -12
  345. package/src/state/selectors/selectChartOffsetInternal.js +0 -174
  346. package/src/state/selectors/selectTooltipAxisId.js +0 -3
  347. package/src/state/selectors/selectTooltipEventType.js +0 -27
  348. package/src/state/selectors/selectTooltipPayloadSearcher.js +0 -3
  349. package/src/state/selectors/selectTooltipSettings.js +0 -3
  350. package/src/state/selectors/selectTooltipState.js +0 -3
  351. package/src/state/selectors/selectors.js +0 -222
  352. package/src/state/selectors/tooltipSelectors.js +0 -471
  353. package/src/state/selectors/touchSelectors.js +0 -31
  354. package/src/state/tooltipSlice.js +0 -237
  355. package/src/state/types/StackedGraphicalItem.js +0 -18
  356. package/src/state/zIndexSlice.js +0 -167
  357. package/src/synchronisation/syncSelectors.js +0 -5
  358. package/src/util/ChartUtils.js +0 -630
  359. package/src/util/DOMUtils.js +0 -180
  360. package/src/util/Events.js +0 -7
  361. package/src/util/Global.js +0 -13
  362. package/src/util/LRUCache.js +0 -58
  363. package/src/util/PolarUtils.js +0 -190
  364. package/src/util/ReduceCSSCalc.js +0 -260
  365. package/src/util/axisPropsAreEqual.js +0 -63
  366. package/src/util/createEventProxy.js +0 -18
  367. package/src/util/getActiveCoordinate.js +0 -253
  368. package/src/util/getClassNameFromUnknown.js +0 -8
  369. package/src/util/getRadiusAndStrokeWidthFromDot.js +0 -28
  370. package/src/util/getSliced.js +0 -11
  371. package/src/util/isWellBehavedNumber.js +0 -8
  372. package/src/util/round.js +0 -39
  373. package/src/util/scale/RechartsScale.js +0 -68
  374. package/src/util/scale/index.js +0 -3
  375. package/src/util/stacks/getStackSeriesIdentifier.js +0 -10
  376. package/src/zIndex/ZIndexLayer.tsrx.d.ts +0 -2
@@ -5,12 +5,13 @@ import { useIsPanorama } from '../context/PanoramaContext';
5
5
  import { selectChartLayout } from '../context/chartLayoutContext';
6
6
  import { useAppDispatch, useAppSelector } from './hooks';
7
7
  import { addLegendPayload, replaceLegendPayload, removeLegendPayload } from './legendSlice';
8
+ import type { LegendPayload } from '../component/DefaultLegendContent.tsrx';
8
9
 
9
- export function SetLegendPayload(props: { legendPayload: unknown }): null {
10
+ export function SetLegendPayload(props: { legendPayload: ReadonlyArray<LegendPayload> }): null {
10
11
  const { legendPayload } = props;
11
12
  const dispatch = useAppDispatch();
12
13
  const isPanorama = useIsPanorama();
13
- const prevPayloadRef = useRef<unknown>(null);
14
+ const prevPayloadRef = useRef<ReadonlyArray<LegendPayload> | null>(null);
14
15
  useLayoutEffect(() => {
15
16
  if (isPanorama) {
16
17
  return;
@@ -33,11 +34,13 @@ export function SetLegendPayload(props: { legendPayload: unknown }): null {
33
34
  return null;
34
35
  }
35
36
 
36
- export function SetPolarLegendPayload(props: { legendPayload: unknown }): null {
37
+ export function SetPolarLegendPayload(props: {
38
+ legendPayload: ReadonlyArray<LegendPayload>;
39
+ }): null {
37
40
  const { legendPayload } = props;
38
41
  const dispatch = useAppDispatch();
39
42
  const layout = useAppSelector(selectChartLayout);
40
- const prevPayloadRef = useRef<unknown>(null);
43
+ const prevPayloadRef = useRef<ReadonlyArray<LegendPayload> | null>(null);
41
44
  useLayoutEffect(() => {
42
45
  if (layout !== 'centric' && layout !== 'radial') {
43
46
  return;
@@ -6,14 +6,17 @@ import {
6
6
  addTooltipEntrySettings,
7
7
  removeTooltipEntrySettings,
8
8
  replaceTooltipEntrySettings,
9
+ type TooltipPayloadConfiguration,
9
10
  } from './tooltipSlice';
10
11
  import { useIsPanorama } from '../context/PanoramaContext';
11
12
 
12
- export function SetTooltipEntrySettings(props: { tooltipEntrySettings: unknown }): null {
13
+ export function SetTooltipEntrySettings(props: {
14
+ tooltipEntrySettings: TooltipPayloadConfiguration;
15
+ }): null {
13
16
  const { tooltipEntrySettings } = props;
14
17
  const dispatch = useAppDispatch();
15
18
  const isPanorama = useIsPanorama();
16
- const prevSettingsRef = useRef<unknown>(null);
19
+ const prevSettingsRef = useRef<TooltipPayloadConfiguration | null>(null);
17
20
  useLayoutEffect(() => {
18
21
  if (isPanorama) {
19
22
  // Panorama graphical items should never contribute to Tooltip payload.
@@ -0,0 +1,40 @@
1
+ // Adapted from recharts@3.9.2, commit b3451050c027a23957ffa50a2665c9119df21e47.
2
+ import { createSlice, PayloadAction } from '@reduxjs/toolkit';
3
+ import { Padding } from '../util/types';
4
+
5
+ /**
6
+ * From all Brush properties, only height has a default value and will always be defined.
7
+ * Other properties are nullable and will be computed from offsets and margins if they are not set.
8
+ */
9
+ export type BrushSettings = {
10
+ x: number | undefined;
11
+ y: number | undefined;
12
+ width: number | undefined;
13
+ height: number;
14
+ padding: Padding;
15
+ };
16
+
17
+ const initialState: BrushSettings = {
18
+ x: 0,
19
+ y: 0,
20
+ width: 0,
21
+ height: 0,
22
+ padding: { top: 0, right: 0, bottom: 0, left: 0 },
23
+ };
24
+
25
+ export const brushSlice = createSlice({
26
+ name: 'brush',
27
+ initialState,
28
+ reducers: {
29
+ setBrushSettings(_state: BrushSettings, action: PayloadAction<BrushSettings | null>) {
30
+ if (action.payload == null) {
31
+ return initialState;
32
+ }
33
+ return action.payload;
34
+ },
35
+ },
36
+ });
37
+
38
+ export const { setBrushSettings } = brushSlice.actions;
39
+
40
+ export const brushReducer = brushSlice.reducer;
@@ -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;