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