@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
@@ -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;
@@ -1,25 +1,35 @@
1
- // Vendored verbatim from recharts@3.9.2 es6/state/mouseEventsMiddleware.js (framework-agnostic).
2
- // Do not edit — update by re-vendoring when the recharts devDependency moves.
3
- import { createAction, createListenerMiddleware } from '@reduxjs/toolkit';
1
+ // Adapted from recharts@3.9.2, commit b3451050c027a23957ffa50a2665c9119df21e47.
2
+ import {
3
+ createAction,
4
+ createListenerMiddleware,
5
+ ListenerEffectAPI,
6
+ PayloadAction,
7
+ } from '@reduxjs/toolkit';
8
+ import { AppDispatch, RechartsRootState } from './store';
4
9
  import { mouseLeaveChart, setMouseClickAxisIndex, setMouseOverAxisIndex } from './tooltipSlice';
5
10
  import { selectActivePropsFromChartPointer } from './selectors/selectActivePropsFromChartPointer';
6
11
  import { selectTooltipEventType } from './selectors/selectTooltipEventType';
12
+
7
13
  import { getRelativeCoordinate } from '../util/getRelativeCoordinate';
8
- export var mouseClickAction = createAction('mouseClick');
9
- export var mouseClickMiddleware = createListenerMiddleware();
14
+ import { RelativePointer, HTMLMousePointer } from '../util/types';
15
+
16
+ export const mouseClickAction = createAction<HTMLMousePointer>('mouseClick');
17
+
18
+ export const mouseClickMiddleware = createListenerMiddleware<RechartsRootState>();
10
19
 
11
20
  // TODO: there's a bug here when you click the chart the activeIndex resets to zero
12
21
  mouseClickMiddleware.startListening({
13
22
  actionCreator: mouseClickAction,
14
- effect: (action, listenerApi) => {
15
- var mousePointer = action.payload;
16
- var activeProps = selectActivePropsFromChartPointer(
23
+ effect: (
24
+ action: PayloadAction<HTMLMousePointer>,
25
+ listenerApi: ListenerEffectAPI<RechartsRootState, AppDispatch>,
26
+ ) => {
27
+ const mousePointer = action.payload;
28
+ const activeProps = selectActivePropsFromChartPointer(
17
29
  listenerApi.getState(),
18
30
  getRelativeCoordinate(mousePointer),
19
31
  );
20
- if (
21
- (activeProps === null || activeProps === void 0 ? void 0 : activeProps.activeIndex) != null
22
- ) {
32
+ if (activeProps?.activeIndex != null) {
23
33
  listenerApi.dispatch(
24
34
  setMouseClickAxisIndex({
25
35
  activeIndex: activeProps.activeIndex,
@@ -30,8 +40,10 @@ mouseClickMiddleware.startListening({
30
40
  }
31
41
  },
32
42
  });
33
- export var mouseMoveAction = createAction('mouseMove');
34
- export var mouseMoveMiddleware = createListenerMiddleware();
43
+
44
+ export const mouseMoveAction = createAction<HTMLMousePointer>('mouseMove');
45
+
46
+ export const mouseMoveMiddleware = createListenerMiddleware<RechartsRootState>();
35
47
 
36
48
  /*
37
49
  * This single rafId is safe because:
@@ -41,22 +53,21 @@ export var mouseMoveMiddleware = createListenerMiddleware();
41
53
  * This is different from externalEventsMiddleware which handles multiple event types
42
54
  * (click, mouseenter, mouseleave, etc.) that should NOT cancel each other.
43
55
  */
44
- var rafId = null;
45
- var timeoutId = null;
46
- var latestChartPointer = null;
56
+ let rafId: number | null = null;
57
+ let timeoutId: ReturnType<typeof setTimeout> | null = null;
58
+ let latestChartPointer: RelativePointer | null = null;
59
+
47
60
  mouseMoveMiddleware.startListening({
48
61
  actionCreator: mouseMoveAction,
49
- effect: (action, listenerApi) => {
50
- var mousePointer = action.payload;
51
- var state = listenerApi.getState();
52
- var _state$eventSettings = state.eventSettings,
53
- throttleDelay = _state$eventSettings.throttleDelay,
54
- throttledEvents = _state$eventSettings.throttledEvents;
55
- var isThrottled =
56
- throttledEvents === 'all' ||
57
- (throttledEvents === null || throttledEvents === void 0
58
- ? void 0
59
- : throttledEvents.includes('mousemove'));
62
+ effect: (
63
+ action: PayloadAction<HTMLMousePointer>,
64
+ listenerApi: ListenerEffectAPI<RechartsRootState, AppDispatch>,
65
+ ) => {
66
+ const mousePointer = action.payload;
67
+
68
+ const state = listenerApi.getState();
69
+ const { throttleDelay, throttledEvents } = state.eventSettings;
70
+ const isThrottled = throttledEvents === 'all' || throttledEvents?.includes('mousemove');
60
71
 
61
72
  // Cancel any pending execution
62
73
  if (rafId !== null) {
@@ -74,13 +85,13 @@ mouseMoveMiddleware.startListening({
74
85
  * reference to currentTarget which getRelativeCoordinate uses.
75
86
  */
76
87
  latestChartPointer = getRelativeCoordinate(mousePointer);
77
- var callback = () => {
88
+ const callback = () => {
78
89
  /*
79
90
  * Here we read a fresh state again inside the callback to ensure we have the latest state values
80
91
  * after any potential actions that may have been dispatched between the original event and this callback.
81
92
  */
82
- var currentState = listenerApi.getState();
83
- var tooltipEventType = selectTooltipEventType(
93
+ const currentState = listenerApi.getState();
94
+ const tooltipEventType = selectTooltipEventType(
84
95
  currentState,
85
96
  currentState.tooltip.settings.shared,
86
97
  );
@@ -95,11 +106,8 @@ mouseMoveMiddleware.startListening({
95
106
  * Graphical items have its own mouse events handling mechanism where they attach events directly to the items.
96
107
  */
97
108
  if (tooltipEventType === 'axis') {
98
- var activeProps = selectActivePropsFromChartPointer(currentState, latestChartPointer);
99
- if (
100
- (activeProps === null || activeProps === void 0 ? void 0 : activeProps.activeIndex) !=
101
- null
102
- ) {
109
+ const activeProps = selectActivePropsFromChartPointer(currentState, latestChartPointer);
110
+ if (activeProps?.activeIndex != null) {
103
111
  listenerApi.dispatch(
104
112
  setMouseOverAxisIndex({
105
113
  activeIndex: activeProps.activeIndex,
@@ -115,10 +123,12 @@ mouseMoveMiddleware.startListening({
115
123
  rafId = null;
116
124
  timeoutId = null;
117
125
  };
126
+
118
127
  if (!isThrottled) {
119
128
  callback();
120
129
  return;
121
130
  }
131
+
122
132
  if (throttleDelay === 'raf') {
123
133
  rafId = requestAnimationFrame(callback);
124
134
  } else if (typeof throttleDelay === 'number') {
@@ -0,0 +1,65 @@
1
+ // Adapted from recharts@3.9.2, commit b3451050c027a23957ffa50a2665c9119df21e47.
2
+ import { createSlice } from '@reduxjs/toolkit';
3
+ import { TooltipEventType } from '../util/types';
4
+ import { TooltipIndex, TooltipPayloadSearcher } from './tooltipSlice';
5
+ import { isNan } from '../util/DataUtils';
6
+
7
+ /**
8
+ * These chart options are decided internally, by Recharts,
9
+ * and will not change during the lifetime of the chart.
10
+ *
11
+ * Changing these options can be done by swapping the root element
12
+ * which will make a brand-new Redux store.
13
+ *
14
+ * If you want to store options that can be changed by the user,
15
+ * use UpdatableChartOptions in rootPropsSlice.ts.
16
+ */
17
+ export type ChartOptions = {
18
+ chartName: string;
19
+ defaultTooltipEventType: TooltipEventType;
20
+ validateTooltipEventTypes?: ReadonlyArray<TooltipEventType>;
21
+ // Should this instead be a property of a graphical item? Do we want to mix items with different data types in one chart?
22
+ tooltipPayloadSearcher: TooltipPayloadSearcher;
23
+ /**
24
+ * We use this to identify which chart is sending events when synchronising.
25
+ * Without it, we can't tell the difference between an action that arrived from another chart
26
+ * and an action that was dispatched by the chart itself.
27
+ */
28
+ eventEmitter: symbol | undefined;
29
+ };
30
+
31
+ export const arrayTooltipSearcher: TooltipPayloadSearcher = (
32
+ data: unknown,
33
+ strIndex: TooltipIndex,
34
+ ): unknown | undefined => {
35
+ if (!strIndex) return undefined;
36
+ if (!Array.isArray(data)) return undefined;
37
+ const numIndex = Number.parseInt(strIndex, 10);
38
+ if (isNan(numIndex)) {
39
+ return undefined;
40
+ }
41
+ return data[numIndex];
42
+ };
43
+
44
+ const initialState: ChartOptions = {
45
+ chartName: '',
46
+ tooltipPayloadSearcher: () => undefined,
47
+ eventEmitter: undefined,
48
+ defaultTooltipEventType: 'axis',
49
+ };
50
+
51
+ const optionsSlice = createSlice({
52
+ name: 'options',
53
+ initialState,
54
+ reducers: {
55
+ createEventEmitter: (state: ChartOptions) => {
56
+ if (state.eventEmitter == null) {
57
+ state.eventEmitter = Symbol('rechartsEventEmitter');
58
+ }
59
+ },
60
+ },
61
+ });
62
+
63
+ export const optionsReducer = optionsSlice.reducer;
64
+
65
+ export const { createEventEmitter } = optionsSlice.actions;
@@ -0,0 +1,42 @@
1
+ // Adapted from recharts@3.9.2, commit b3451050c027a23957ffa50a2665c9119df21e47.
2
+ import { createSlice, PayloadAction } from '@reduxjs/toolkit';
3
+ import { castDraft } from 'immer';
4
+ import { AxisId, BaseCartesianAxis, TicksSettings } from './cartesianAxisSlice';
5
+
6
+ export type RadiusAxisSettings = BaseCartesianAxis & TicksSettings;
7
+
8
+ export type AngleAxisSettings = BaseCartesianAxis & TicksSettings;
9
+
10
+ type PolarAxisState = {
11
+ radiusAxis: Record<AxisId, RadiusAxisSettings>;
12
+ angleAxis: Record<AxisId, AngleAxisSettings>;
13
+ };
14
+
15
+ const initialState: PolarAxisState = {
16
+ radiusAxis: {},
17
+ angleAxis: {},
18
+ };
19
+
20
+ const polarAxisSlice = createSlice({
21
+ name: 'polarAxis',
22
+ initialState,
23
+ reducers: {
24
+ addRadiusAxis(state, action: PayloadAction<RadiusAxisSettings>) {
25
+ state.radiusAxis[action.payload.id] = castDraft(action.payload);
26
+ },
27
+ removeRadiusAxis(state, action: PayloadAction<RadiusAxisSettings>) {
28
+ delete state.radiusAxis[action.payload.id];
29
+ },
30
+ addAngleAxis(state, action: PayloadAction<AngleAxisSettings>) {
31
+ state.angleAxis[action.payload.id] = castDraft(action.payload);
32
+ },
33
+ removeAngleAxis(state, action: PayloadAction<AngleAxisSettings>) {
34
+ delete state.angleAxis[action.payload.id];
35
+ },
36
+ },
37
+ });
38
+
39
+ export const { addRadiusAxis, removeRadiusAxis, addAngleAxis, removeAngleAxis } =
40
+ polarAxisSlice.actions;
41
+
42
+ export const polarAxisReducer = polarAxisSlice.reducer;
@@ -0,0 +1,43 @@
1
+ // Adapted from recharts@3.9.2, commit b3451050c027a23957ffa50a2665c9119df21e47.
2
+ import { createSlice, PayloadAction } from '@reduxjs/toolkit';
3
+
4
+ export type PolarChartOptions = {
5
+ cx: number | string;
6
+ cy: number | string;
7
+ startAngle: number;
8
+ endAngle: number;
9
+ innerRadius: number | string;
10
+ outerRadius: number | string;
11
+ };
12
+
13
+ type PolarChartState = PolarChartOptions | null;
14
+
15
+ const initialState: PolarChartState = null;
16
+
17
+ const reducers = {
18
+ updatePolarOptions: (
19
+ state: PolarChartState,
20
+ action: PayloadAction<PolarChartOptions>,
21
+ ): PolarChartOptions => {
22
+ if (state === null) {
23
+ return action.payload;
24
+ }
25
+ state.startAngle = action.payload.startAngle;
26
+ state.endAngle = action.payload.endAngle;
27
+ state.cx = action.payload.cx;
28
+ state.cy = action.payload.cy;
29
+ state.innerRadius = action.payload.innerRadius;
30
+ state.outerRadius = action.payload.outerRadius;
31
+ return state;
32
+ },
33
+ };
34
+
35
+ const polarOptionsSlice = createSlice<PolarChartState, typeof reducers, 'polarOptions', {}>({
36
+ name: 'polarOptions',
37
+ initialState,
38
+ reducers,
39
+ });
40
+
41
+ export const { updatePolarOptions } = polarOptionsSlice.actions;
42
+
43
+ export const polarOptionsReducer = polarOptionsSlice.reducer;
@@ -0,0 +1,13 @@
1
+ // Adapted from recharts@3.9.2, commit b3451050c027a23957ffa50a2665c9119df21e47.
2
+ export function reduxDevtoolsJsonStringifyReplacer(key: string, value: unknown) {
3
+ if (value instanceof HTMLElement) {
4
+ return `HTMLElement <${value.tagName} class="${value.className}">`;
5
+ }
6
+ if (value === window) {
7
+ return 'global.window';
8
+ }
9
+ if (key === 'children' && typeof value === 'object' && value !== null) {
10
+ return '<<CHILDREN>>';
11
+ }
12
+ return value;
13
+ }
@@ -0,0 +1,100 @@
1
+ // Adapted from recharts@3.9.2, commit b3451050c027a23957ffa50a2665c9119df21e47.
2
+ import { createSlice, current, PayloadAction } from '@reduxjs/toolkit';
3
+ import { castDraft, WritableDraft } from 'immer';
4
+ import { AxisId } from './cartesianAxisSlice';
5
+ import { IfOverflow } from '../util/IfOverflow';
6
+ import { ReferenceLineSegment } from '../cartesian/ReferenceLine.tsrx';
7
+
8
+ export type ReferenceElementSettings = {
9
+ yAxisId: AxisId;
10
+ xAxisId: AxisId;
11
+ ifOverflow: IfOverflow;
12
+ };
13
+
14
+ export type ReferenceDotSettings = ReferenceElementSettings & {
15
+ x: unknown;
16
+ y: unknown;
17
+ r: number;
18
+ };
19
+
20
+ export type ReferenceAreaSettings = ReferenceElementSettings & {
21
+ x1: unknown;
22
+ x2: unknown;
23
+ y1: unknown;
24
+ y2: unknown;
25
+ };
26
+
27
+ export type ReferenceLineSettings = ReferenceElementSettings & {
28
+ x: unknown;
29
+ y: unknown;
30
+ segment: ReferenceLineSegment | undefined;
31
+ };
32
+
33
+ type ReferenceElementState = {
34
+ dots: ReadonlyArray<ReferenceDotSettings>;
35
+ areas: ReadonlyArray<ReferenceAreaSettings>;
36
+ lines: ReadonlyArray<ReferenceLineSettings>;
37
+ };
38
+
39
+ const initialState: ReferenceElementState = {
40
+ dots: [],
41
+ areas: [],
42
+ lines: [],
43
+ };
44
+
45
+ export const referenceElementsSlice = createSlice({
46
+ name: 'referenceElements',
47
+ initialState,
48
+ reducers: {
49
+ addDot: (
50
+ state: WritableDraft<ReferenceElementState>,
51
+ action: PayloadAction<ReferenceDotSettings>,
52
+ ) => {
53
+ state.dots.push(action.payload);
54
+ },
55
+ removeDot: (
56
+ state: WritableDraft<ReferenceElementState>,
57
+ action: PayloadAction<ReferenceDotSettings>,
58
+ ) => {
59
+ const index = current(state).dots.findIndex((dot) => dot === action.payload);
60
+ if (index !== -1) {
61
+ state.dots.splice(index, 1);
62
+ }
63
+ },
64
+ addArea: (
65
+ state: WritableDraft<ReferenceElementState>,
66
+ action: PayloadAction<ReferenceAreaSettings>,
67
+ ) => {
68
+ state.areas.push(action.payload);
69
+ },
70
+ removeArea: (
71
+ state: WritableDraft<ReferenceElementState>,
72
+ action: PayloadAction<ReferenceAreaSettings>,
73
+ ) => {
74
+ const index = current(state).areas.findIndex((area) => area === action.payload);
75
+ if (index !== -1) {
76
+ state.areas.splice(index, 1);
77
+ }
78
+ },
79
+ addLine: (
80
+ state: WritableDraft<ReferenceElementState>,
81
+ action: PayloadAction<ReferenceLineSettings>,
82
+ ) => {
83
+ state.lines.push(castDraft(action.payload));
84
+ },
85
+ removeLine: (
86
+ state: WritableDraft<ReferenceElementState>,
87
+ action: PayloadAction<ReferenceLineSettings>,
88
+ ) => {
89
+ const index = current(state).lines.findIndex((line) => line === action.payload);
90
+ if (index !== -1) {
91
+ state.lines.splice(index, 1);
92
+ }
93
+ },
94
+ },
95
+ });
96
+
97
+ export const { addDot, removeDot, addArea, removeArea, addLine, removeLine } =
98
+ referenceElementsSlice.actions;
99
+
100
+ export const referenceElementsReducer = referenceElementsSlice.reducer;
@@ -0,0 +1,60 @@
1
+ // Adapted from recharts@3.9.2, commit b3451050c027a23957ffa50a2665c9119df21e47.
2
+ /**
3
+ * @fileOverview this stores actually rendered ticks.
4
+ *
5
+ * What we do is that we have the domain -> ticks mapping in the cartesianSlice,
6
+ * which is fine but the result then goes to CartesianAxis where we use DOM measurement
7
+ * to decide which ticks to actually render.
8
+ *
9
+ * This renderedTickSlice stores those actually rendered ticks so that we can return them from a hook later.
10
+ */
11
+ import { createSlice, PayloadAction } from '@reduxjs/toolkit';
12
+ import { castDraft, WritableDraft } from 'immer';
13
+ import { TickItem } from '../util/types';
14
+ import { AxisId } from './cartesianAxisSlice';
15
+
16
+ type RenderedTicksAxisState = {
17
+ [axisId: AxisId]: ReadonlyArray<TickItem>;
18
+ };
19
+
20
+ type RenderedTicksState = {
21
+ xAxis: RenderedTicksAxisState;
22
+ yAxis: RenderedTicksAxisState;
23
+ };
24
+
25
+ const initialState: RenderedTicksState = {
26
+ xAxis: {},
27
+ yAxis: {},
28
+ };
29
+
30
+ export const renderedTicksSlice = createSlice({
31
+ name: 'renderedTicks',
32
+ initialState,
33
+ reducers: {
34
+ setRenderedTicks: (
35
+ state: WritableDraft<RenderedTicksState>,
36
+ action: PayloadAction<{
37
+ axisType: 'xAxis' | 'yAxis';
38
+ axisId: AxisId;
39
+ ticks: ReadonlyArray<TickItem>;
40
+ }>,
41
+ ) => {
42
+ const { axisType, axisId, ticks } = action.payload;
43
+ state[axisType][axisId] = castDraft(ticks);
44
+ },
45
+ removeRenderedTicks: (
46
+ state: WritableDraft<RenderedTicksState>,
47
+ action: PayloadAction<{
48
+ axisType: 'xAxis' | 'yAxis';
49
+ axisId: AxisId;
50
+ }>,
51
+ ) => {
52
+ const { axisType, axisId } = action.payload;
53
+ delete state[axisType][axisId];
54
+ },
55
+ },
56
+ });
57
+
58
+ export const { setRenderedTicks, removeRenderedTicks } = renderedTicksSlice.actions;
59
+
60
+ export const renderedTicksReducer = renderedTicksSlice.reducer;
@@ -0,0 +1,72 @@
1
+ // Adapted from recharts@3.9.2, commit b3451050c027a23957ffa50a2665c9119df21e47.
2
+ import { createSlice, PayloadAction } from '@reduxjs/toolkit';
3
+ import { StackOffsetType } from '../util/types';
4
+ import { SyncMethod } from '../synchronisation/types';
5
+ import { BaseValue } from '../cartesian/Area.tsrx';
6
+
7
+ /**
8
+ * These are chart options that users can choose - which means they can also
9
+ * choose to change them which should trigger a re-render.
10
+ */
11
+ export type UpdatableChartOptions = {
12
+ accessibilityLayer: boolean;
13
+ barCategoryGap: number | string;
14
+ barGap: number | string;
15
+ barSize: string | number | undefined;
16
+ /**
17
+ * Useful for debugging which chart is which when synchronising.
18
+ * The className is also passed to the root element of the chart but that's done in the JSX, not through Redux.
19
+ */
20
+ className: string | undefined;
21
+ maxBarSize: number | undefined;
22
+ stackOffset: StackOffsetType;
23
+ /**
24
+ * Charts that share the same syncId will have their Tooltip and Brush synchronised.
25
+ */
26
+ syncId: number | string | undefined;
27
+ syncMethod: SyncMethod;
28
+ baseValue: BaseValue | undefined;
29
+ /**
30
+ * If false, stacked items will be rendered left to right. If true, stacked items will be rendered right to left.
31
+ * (Render direction affects SVG layering, not x position.)
32
+ */
33
+ reverseStackOrder: boolean;
34
+ };
35
+
36
+ export const initialState: UpdatableChartOptions = {
37
+ accessibilityLayer: true,
38
+ barCategoryGap: '10%',
39
+ barGap: 4,
40
+ barSize: undefined,
41
+ className: undefined,
42
+ maxBarSize: undefined,
43
+ stackOffset: 'none',
44
+ syncId: undefined,
45
+ syncMethod: 'index',
46
+ baseValue: undefined,
47
+ reverseStackOrder: false,
48
+ };
49
+
50
+ const rootPropsSlice = createSlice({
51
+ name: 'rootProps',
52
+ initialState,
53
+ reducers: {
54
+ updateOptions: (state: UpdatableChartOptions, action: PayloadAction<UpdatableChartOptions>) => {
55
+ state.accessibilityLayer = action.payload.accessibilityLayer;
56
+ state.barCategoryGap = action.payload.barCategoryGap;
57
+ state.barGap = action.payload.barGap ?? initialState.barGap;
58
+ state.barSize = action.payload.barSize;
59
+ state.maxBarSize = action.payload.maxBarSize;
60
+ state.stackOffset = action.payload.stackOffset;
61
+ state.syncId = action.payload.syncId;
62
+ state.syncMethod = action.payload.syncMethod;
63
+ state.className = action.payload.className;
64
+ state.baseValue = action.payload.baseValue;
65
+ state.reverseStackOrder = action.payload.reverseStackOrder;
66
+ },
67
+ },
68
+ });
69
+
70
+ export const rootPropsReducer = rootPropsSlice.reducer;
71
+
72
+ export const { updateOptions } = rootPropsSlice.actions;
@@ -1,8 +1,7 @@
1
- // @ts-nocheck -- retained upstream selector typing is outside the initial Area runtime port.
2
1
  import { createSelector } from 'reselect';
3
2
  import { SeriesPoint } from 'victory-vendor/d3-shape';
4
3
  import { NullableCoordinate } from '../../util/types';
5
- import { computeArea } from '../../cartesian/Area';
4
+ import { computeArea } from '../../cartesian/Area.tsrx';
6
5
  import {
7
6
  selectAxisWithScale,
8
7
  selectStackGroups,
@@ -1,12 +1,11 @@
1
- // Vendored verbatim from recharts@3.9.2 es6/state/selectors/arrayEqualityCheck.js (framework-agnostic).
2
- // Do not edit — update by re-vendoring when the recharts devDependency moves.
1
+ // Adapted from recharts@3.9.2, commit b3451050c027a23957ffa50a2665c9119df21e47.
3
2
  /**
4
3
  * Checks if two arrays are equal, treating empty arrays as equal regardless of reference.
5
4
  * If both arrays are non-empty, it checks for reference equality.
6
5
  * @param a
7
6
  * @param b
8
7
  */
9
- export function emptyArraysAreEqualCheck(a, b) {
8
+ export function emptyArraysAreEqualCheck<T>(a: ReadonlyArray<T>, b: ReadonlyArray<T>): boolean {
10
9
  if (Array.isArray(a) && Array.isArray(b) && a.length === 0 && b.length === 0) {
11
10
  // empty arrays are always equal, regardless of reference
12
11
  return true;
@@ -19,9 +18,9 @@ export function emptyArraysAreEqualCheck(a, b) {
19
18
  * @param a
20
19
  * @param b
21
20
  */
22
- export function arrayContentsAreEqualCheck(a, b) {
21
+ export function arrayContentsAreEqualCheck<T>(a: ReadonlyArray<T>, b: ReadonlyArray<T>): boolean {
23
22
  if (a.length === b.length) {
24
- for (var i = 0; i < a.length; i++) {
23
+ for (let i = 0; i < a.length; i++) {
25
24
  if (a[i] !== b[i]) {
26
25
  return false;
27
26
  }