@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,201 @@
1
+ // Adapted from recharts@3.9.2, commit b3451050c027a23957ffa50a2665c9119df21e47.
2
+ import {
3
+ TooltipEntrySettings,
4
+ TooltipIndex,
5
+ TooltipPayload,
6
+ TooltipPayloadConfiguration,
7
+ TooltipPayloadEntry,
8
+ TooltipPayloadSearcher,
9
+ } from '../../tooltipSlice';
10
+ import { ChartData, ChartDataState } from '../../chartDataSlice';
11
+ import { DataKey, TooltipEventType } from '../../../util/types';
12
+ import { findEntryInArray } from '../../../util/DataUtils';
13
+ import { getTooltipEntry, getValueByDataKey } from '../../../util/ChartUtils';
14
+ import { getSliced } from '../../../util/getSliced';
15
+ import { ActiveLabel } from '../../../synchronisation/types';
16
+
17
+ type TooltipPayloadItemLike = {
18
+ name: TooltipEntrySettings['name'];
19
+ unit: TooltipEntrySettings['unit'];
20
+ dataKey: DataKey<any> | undefined;
21
+ payload: unknown;
22
+ color: string | undefined;
23
+ fill: string | undefined;
24
+ };
25
+
26
+ function parseName(value: unknown): TooltipEntrySettings['name'] {
27
+ if (typeof value === 'string' || typeof value === 'number') {
28
+ return value;
29
+ }
30
+ return undefined;
31
+ }
32
+
33
+ function parseUnit(value: unknown): TooltipEntrySettings['unit'] {
34
+ if (typeof value === 'string' || typeof value === 'number' || typeof value === 'boolean') {
35
+ return value;
36
+ }
37
+ return undefined;
38
+ }
39
+
40
+ function parseDataKey(value: unknown): DataKey<any> | undefined {
41
+ if (typeof value === 'string' || typeof value === 'number') {
42
+ return value;
43
+ }
44
+ if (typeof value === 'function') {
45
+ return (obj) => value(obj);
46
+ }
47
+ return undefined;
48
+ }
49
+
50
+ function parseColor(value: unknown): string | undefined {
51
+ if (typeof value === 'string') {
52
+ return value;
53
+ }
54
+ return undefined;
55
+ }
56
+
57
+ function parseTooltipPayloadItem(item: unknown): TooltipPayloadItemLike | undefined {
58
+ if (item == null || typeof item !== 'object') {
59
+ return undefined;
60
+ }
61
+
62
+ const name = 'name' in item ? parseName(item.name) : undefined;
63
+ const unit = 'unit' in item ? parseUnit(item.unit) : undefined;
64
+ const dataKey = 'dataKey' in item ? parseDataKey(item.dataKey) : undefined;
65
+ const payload = 'payload' in item ? item.payload : undefined;
66
+ const color = 'color' in item ? parseColor(item.color) : undefined;
67
+ const fill = 'fill' in item ? parseColor(item.fill) : undefined;
68
+
69
+ return {
70
+ name,
71
+ unit,
72
+ dataKey,
73
+ payload,
74
+ color,
75
+ fill,
76
+ };
77
+ }
78
+
79
+ function selectFinalData(
80
+ dataDefinedOnItem: unknown,
81
+ dataDefinedOnChart: ChartData | undefined,
82
+ ): unknown {
83
+ /*
84
+ * If a payload has data specified directly from the graphical item, prefer that.
85
+ * Otherwise, fill in data from the chart level, using the same index.
86
+ */
87
+ if (dataDefinedOnItem != null) {
88
+ return dataDefinedOnItem;
89
+ }
90
+ return dataDefinedOnChart;
91
+ }
92
+
93
+ export const combineTooltipPayload = (
94
+ tooltipPayloadConfigurations: ReadonlyArray<TooltipPayloadConfiguration>,
95
+ activeIndex: TooltipIndex,
96
+ chartDataState: ChartDataState,
97
+ tooltipAxisDataKey: DataKey<any> | undefined,
98
+ activeLabel: ActiveLabel,
99
+ tooltipPayloadSearcher: TooltipPayloadSearcher | undefined,
100
+ tooltipEventType: TooltipEventType | undefined,
101
+ ): TooltipPayload | undefined => {
102
+ if (activeIndex == null || tooltipPayloadSearcher == null) {
103
+ return undefined;
104
+ }
105
+ const { chartData, computedData, dataStartIndex, dataEndIndex } = chartDataState;
106
+
107
+ const init: Array<TooltipPayloadEntry> = [];
108
+
109
+ return tooltipPayloadConfigurations.reduce(
110
+ (agg, { dataDefinedOnItem, settings }): Array<TooltipPayloadEntry> => {
111
+ const finalData = selectFinalData(dataDefinedOnItem, chartData);
112
+
113
+ const sliced = Array.isArray(finalData)
114
+ ? getSliced(finalData, dataStartIndex, dataEndIndex)
115
+ : finalData;
116
+
117
+ const finalDataKey: DataKey<any> | undefined = settings?.dataKey ?? tooltipAxisDataKey;
118
+ // BaseAxisProps does not support nameKey but it could!
119
+ const finalNameKey: DataKey<any> | undefined = settings?.nameKey; // ?? tooltipAxis?.nameKey;
120
+ let tooltipPayload: unknown;
121
+ if (
122
+ tooltipAxisDataKey &&
123
+ Array.isArray(sliced) &&
124
+ /*
125
+ * findEntryInArray won't work for Scatter because Scatter provides an array of arrays
126
+ * as tooltip payloads and findEntryInArray is not prepared to handle that.
127
+ * Sad but also ScatterChart only allows 'item' tooltipEventType
128
+ * and also this is only a problem if there are multiple Scatters and each has its own data array
129
+ * so let's fix that some other time.
130
+ */
131
+ !Array.isArray(sliced[0]) &&
132
+ /*
133
+ * If the tooltipEventType is 'axis', we should search for the dataKey in the sliced data
134
+ * because thanks to allowDuplicatedCategory=false, the order of elements in the array
135
+ * no longer matches the order of elements in the original data
136
+ * and so we need to search by the active dataKey + label rather than by index.
137
+ *
138
+ * The same happens if multiple graphical items are present in the chart
139
+ * and each of them has its own data array. Those arrays get concatenated
140
+ * and again the tooltip index no longer matches the original data.
141
+ *
142
+ * On the other hand the tooltipEventType 'item' should always search by index
143
+ * because we get the index from interacting over the individual elements
144
+ * which is always accurate, irrespective of the allowDuplicatedCategory setting.
145
+ */
146
+ tooltipEventType === 'axis'
147
+ ) {
148
+ tooltipPayload = findEntryInArray(sliced, tooltipAxisDataKey, activeLabel);
149
+ } else {
150
+ /*
151
+ * This is a problem because it assumes that the index is pointing to the displayed data
152
+ * which it isn't because the index is pointing to the tooltip ticks array.
153
+ * The above approach (with findEntryInArray) is the correct one, but it only works
154
+ * if the axis dataKey is defined explicitly, and if the data is an array of objects.
155
+ */
156
+ tooltipPayload = tooltipPayloadSearcher(sliced, activeIndex, computedData, finalNameKey);
157
+ }
158
+
159
+ if (Array.isArray(tooltipPayload)) {
160
+ tooltipPayload.forEach((item) => {
161
+ const parsedItem = parseTooltipPayloadItem(item);
162
+ const itemName = parsedItem?.name;
163
+ const itemDataKey = parsedItem?.dataKey;
164
+ const itemPayload = parsedItem?.payload;
165
+ const newSettings: TooltipEntrySettings = {
166
+ ...settings,
167
+ name: itemName,
168
+ unit: parsedItem?.unit,
169
+ // Preserve item-level color/fill from graphical items.
170
+ color: parsedItem?.color ?? settings?.color,
171
+ fill: parsedItem?.fill ?? settings?.fill,
172
+ };
173
+ agg.push(
174
+ getTooltipEntry({
175
+ tooltipEntrySettings: newSettings,
176
+ dataKey: itemDataKey,
177
+ payload: itemPayload,
178
+ value: getValueByDataKey(itemPayload, itemDataKey),
179
+ name: itemName == null ? undefined : String(itemName),
180
+ }),
181
+ );
182
+ });
183
+ } else {
184
+ // I am not quite sure why these two branches (Array vs Array of Arrays) have to behave differently - I imagine we should unify these. 3.x breaking change?
185
+ agg.push(
186
+ getTooltipEntry({
187
+ tooltipEntrySettings: settings,
188
+ dataKey: finalDataKey,
189
+ payload: tooltipPayload,
190
+ // getValueByDataKey does not validate the output type
191
+ value: getValueByDataKey(tooltipPayload, finalDataKey),
192
+ // getValueByDataKey does not validate the output type
193
+ name: getValueByDataKey(tooltipPayload, finalNameKey) ?? settings?.name,
194
+ }),
195
+ );
196
+ }
197
+ return agg;
198
+ },
199
+ init,
200
+ );
201
+ };
@@ -1,11 +1,15 @@
1
- // Vendored verbatim from recharts@3.9.2 es6/state/selectors/combiners/combineTooltipPayloadConfigurations.js (framework-agnostic).
2
- // Do not edit update by re-vendoring when the recharts devDependency moves.
3
- export var combineTooltipPayloadConfigurations = (
4
- tooltipState,
5
- tooltipEventType,
6
- trigger,
7
- defaultIndex,
8
- ) => {
1
+ // Adapted from recharts@3.9.2, commit b3451050c027a23957ffa50a2665c9119df21e47.
2
+ import { TooltipIndex, TooltipPayloadConfiguration, TooltipState } from '../../tooltipSlice';
3
+ import { TooltipEventType } from '../../../util/types';
4
+ import { TooltipTrigger } from '../../../chart/types';
5
+ import { GraphicalItemId } from '../../graphicalItemsSlice';
6
+
7
+ export const combineTooltipPayloadConfigurations = (
8
+ tooltipState: TooltipState,
9
+ tooltipEventType: TooltipEventType | undefined,
10
+ trigger: TooltipTrigger,
11
+ defaultIndex: TooltipIndex | undefined,
12
+ ): ReadonlyArray<TooltipPayloadConfiguration> => {
9
13
  // if tooltip reacts to axis interaction, then we display all items at the same time.
10
14
  if (tooltipEventType === 'axis') {
11
15
  return tooltipState.tooltipItemPayloads;
@@ -18,7 +22,7 @@ export var combineTooltipPayloadConfigurations = (
18
22
  // No point filtering if the payload is empty
19
23
  return [];
20
24
  }
21
- var filterByGraphicalItemId;
25
+ let filterByGraphicalItemId: GraphicalItemId | undefined;
22
26
  if (trigger === 'hover') {
23
27
  filterByGraphicalItemId = tooltipState.itemInteraction.hover.graphicalItemId;
24
28
  } else {
@@ -42,18 +46,13 @@ export var combineTooltipPayloadConfigurations = (
42
46
  * In that case let's display the first item in the tooltip; after all, this is `item` interaction case,
43
47
  * so we should display only one item at a time instead of all.
44
48
  */
45
- var firstItemPayload = tooltipState.tooltipItemPayloads[0];
49
+ const firstItemPayload = tooltipState.tooltipItemPayloads[0];
46
50
  if (firstItemPayload != null) {
47
51
  return [firstItemPayload];
48
52
  }
49
53
  return [];
50
54
  }
51
- return tooltipState.tooltipItemPayloads.filter((tpc) => {
52
- var _tpc$settings;
53
- return (
54
- ((_tpc$settings = tpc.settings) === null || _tpc$settings === void 0
55
- ? void 0
56
- : _tpc$settings.graphicalItemId) === filterByGraphicalItemId
57
- );
58
- });
55
+ return tooltipState.tooltipItemPayloads.filter(
56
+ (tpc) => tpc.settings?.graphicalItemId === filterByGraphicalItemId,
57
+ );
59
58
  };
@@ -0,0 +1,12 @@
1
+ // Adapted from recharts@3.9.2, commit b3451050c027a23957ffa50a2665c9119df21e47.
2
+ import { RechartsRootState } from '../store';
3
+ import { Margin } from '../../util/types';
4
+
5
+ export const selectChartWidth = (state: RechartsRootState): number => state.layout.width;
6
+
7
+ export const selectChartHeight = (state: RechartsRootState): number => state.layout.height;
8
+
9
+ export const selectContainerScale: (state: RechartsRootState) => number = (state) =>
10
+ state.layout.scale;
11
+
12
+ export const selectMargin = (state: RechartsRootState): Margin => state.layout.margin;
@@ -1,6 +1,8 @@
1
- // Vendored verbatim from recharts@3.9.2 es6/state/selectors/dataSelectors.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
  import { createSelector } from 'reselect';
3
+ import { RechartsRootState } from '../store';
4
+ import { ChartData, ChartDataState } from '../chartDataSlice';
5
+
4
6
  /**
5
7
  * This selector always returns the data with the indexes set by a Brush.
6
8
  * Trouble is, that might or might not be what you want.
@@ -13,37 +15,42 @@ import { createSelector } from 'reselect';
13
15
  * @param state RechartsRootState
14
16
  * @returns data defined on the chart root element, such as BarChart or ScatterChart
15
17
  */
16
- export var selectChartDataWithIndexes = (state) => state.chartData;
18
+ export const selectChartDataWithIndexes = (state: RechartsRootState): ChartDataState =>
19
+ state.chartData;
17
20
 
18
21
  /**
19
22
  * This selector will always return the full range of data, ignoring the indexes set by a Brush.
20
23
  * Useful for when you want to render the full range of data, even if a Brush is active.
21
24
  * For example: in the Brush panorama, in Legend, in Tooltip.
22
25
  */
23
- export var selectChartDataAndAlwaysIgnoreIndexes = createSelector(
24
- [selectChartDataWithIndexes],
25
- (dataState) => {
26
- var dataEndIndex = dataState.chartData != null ? dataState.chartData.length - 1 : 0;
26
+ export const selectChartDataAndAlwaysIgnoreIndexes: (state: RechartsRootState) => ChartDataState =
27
+ createSelector([selectChartDataWithIndexes], (dataState: ChartDataState) => {
28
+ const dataEndIndex = dataState.chartData != null ? dataState.chartData.length - 1 : 0;
27
29
  return {
28
30
  chartData: dataState.chartData,
29
31
  computedData: dataState.computedData,
30
32
  dataEndIndex,
31
33
  dataStartIndex: 0,
32
34
  };
33
- },
34
- );
35
- export var selectChartDataWithIndexesIfNotInPanoramaPosition4 = (
36
- state,
37
- _unused1,
38
- _unused2,
39
- isPanorama,
40
- ) => {
35
+ });
36
+
37
+ export const selectChartDataWithIndexesIfNotInPanoramaPosition4 = (
38
+ state: RechartsRootState,
39
+ _unused1: unknown,
40
+ _unused2: unknown,
41
+ isPanorama: boolean,
42
+ ): ChartDataState => {
41
43
  if (isPanorama) {
42
44
  return selectChartDataAndAlwaysIgnoreIndexes(state);
43
45
  }
44
46
  return selectChartDataWithIndexes(state);
45
47
  };
46
- export var selectChartDataWithIndexesIfNotInPanoramaPosition3 = (state, _unused1, isPanorama) => {
48
+
49
+ export const selectChartDataWithIndexesIfNotInPanoramaPosition3 = (
50
+ state: RechartsRootState,
51
+ _unused1: unknown,
52
+ isPanorama: boolean,
53
+ ): ChartDataState => {
47
54
  if (isPanorama) {
48
55
  return selectChartDataAndAlwaysIgnoreIndexes(state);
49
56
  }
@@ -58,40 +65,35 @@ export var selectChartDataWithIndexesIfNotInPanoramaPosition3 = (state, _unused1
58
65
  * Used when a selector needs chart-level data but must avoid extra recomputes when the
59
66
  * data content has not actually changed.
60
67
  */
61
- export var selectChartDataSliceIfNotInPanorama = createSelector(
68
+ export const selectChartDataSliceIfNotInPanorama: (
69
+ state: RechartsRootState,
70
+ _unused1: unknown,
71
+ _unused2: unknown,
72
+ isPanorama: boolean,
73
+ ) => ChartData = createSelector(
62
74
  [selectChartDataWithIndexesIfNotInPanoramaPosition4],
63
- (_ref) => {
64
- var chartData = _ref.chartData,
65
- dataStartIndex = _ref.dataStartIndex,
66
- dataEndIndex = _ref.dataEndIndex;
67
- return chartData != null ? chartData.slice(dataStartIndex, dataEndIndex + 1) : [];
68
- },
75
+ ({ chartData, dataStartIndex, dataEndIndex }: ChartDataState): ChartData =>
76
+ chartData != null ? chartData.slice(dataStartIndex, dataEndIndex + 1) : [],
69
77
  );
70
78
 
71
79
  /**
72
80
  * Returns the chart-level data slice (ignoring Brush indexes), memoized by content.
73
81
  * Used in tooltip and polar selectors that always need the full data range.
74
82
  */
75
- export var selectChartDataSliceIgnoringIndexes = createSelector(
76
- [selectChartDataAndAlwaysIgnoreIndexes],
77
- (_ref2) => {
78
- var chartData = _ref2.chartData,
79
- dataStartIndex = _ref2.dataStartIndex,
80
- dataEndIndex = _ref2.dataEndIndex;
81
- return chartData != null ? chartData.slice(dataStartIndex, dataEndIndex + 1) : [];
82
- },
83
- );
83
+ export const selectChartDataSliceIgnoringIndexes: (state: RechartsRootState) => ChartData =
84
+ createSelector(
85
+ [selectChartDataAndAlwaysIgnoreIndexes],
86
+ ({ chartData, dataStartIndex, dataEndIndex }: ChartDataState): ChartData =>
87
+ chartData != null ? chartData.slice(dataStartIndex, dataEndIndex + 1) : [],
88
+ );
84
89
 
85
90
  /**
86
91
  * Returns the chart-level data slice (with Brush indexes applied), memoized by content.
87
92
  * Used in tooltip selectors.
88
93
  */
89
- export var selectChartDataSliceWithIndexes = createSelector(
90
- [selectChartDataWithIndexes],
91
- (_ref3) => {
92
- var chartData = _ref3.chartData,
93
- dataStartIndex = _ref3.dataStartIndex,
94
- dataEndIndex = _ref3.dataEndIndex;
95
- return chartData != null ? chartData.slice(dataStartIndex, dataEndIndex + 1) : [];
96
- },
97
- );
94
+ export const selectChartDataSliceWithIndexes: (state: RechartsRootState) => ChartData =
95
+ createSelector(
96
+ [selectChartDataWithIndexes],
97
+ ({ chartData, dataStartIndex, dataEndIndex }: ChartDataState): ChartData =>
98
+ chartData != null ? chartData.slice(dataStartIndex, dataEndIndex + 1) : [],
99
+ );
@@ -1,12 +1,12 @@
1
+ import type { RegisteredCell } from '../../context/CellsContext';
1
2
  import { createSelector } from 'reselect';
2
- import { ReactElement } from 'octane';
3
- import { computeFunnelTrapezoids, FunnelTrapezoidItem } from '../../cartesian/Funnel';
3
+
4
+ import { computeFunnelTrapezoids, FunnelTrapezoidItem } from '../../cartesian/Funnel.tsrx';
4
5
  import { ChartData } from '../chartDataSlice';
5
6
  import { RechartsRootState } from '../store';
6
7
  import { selectChartOffsetInternal } from './selectChartOffsetInternal';
7
8
  import { selectChartDataAndAlwaysIgnoreIndexes } from './dataSelectors';
8
9
  import { ChartOffsetInternal, DataKey, TooltipType } from '../../util/types';
9
- import { CellProps } from '../..';
10
10
  import { GraphicalItemId } from '../graphicalItemsSlice';
11
11
 
12
12
  export type ResolvedFunnelSettings = {
@@ -17,7 +17,7 @@ export type ResolvedFunnelSettings = {
17
17
  lastShapeType?: 'triangle' | 'rectangle';
18
18
  reversed?: boolean;
19
19
  customWidth?: string | number;
20
- cells: ReadonlyArray<ReactElement>;
20
+ cells: ReadonlyArray<RegisteredCell> | undefined;
21
21
  presentationProps: Record<string, any> | null;
22
22
  id: GraphicalItemId;
23
23
  };
@@ -63,7 +63,7 @@ export const selectFunnelTrapezoids: (
63
63
  ...(cells && cells[index] && cells[index].props),
64
64
  }));
65
65
  } else if (cells && cells.length) {
66
- displayedData = cells.map((cell: ReactElement<CellProps>) => ({
66
+ displayedData = cells.map((cell: RegisteredCell) => ({
67
67
  ...presentationProps,
68
68
  ...cell.props,
69
69
  }));
@@ -0,0 +1,22 @@
1
+ // Adapted from recharts@3.9.2, commit b3451050c027a23957ffa50a2665c9119df21e47.
2
+ import { RechartsRootState } from '../store';
3
+ import { GraphicalItemId } from '../graphicalItemsSlice';
4
+ import { AxisId, defaultAxisId } from '../cartesianAxisSlice';
5
+
6
+ export function selectXAxisIdFromGraphicalItemId(
7
+ state: RechartsRootState,
8
+ id: GraphicalItemId,
9
+ ): AxisId {
10
+ return (
11
+ state.graphicalItems.cartesianItems.find((item) => item.id === id)?.xAxisId ?? defaultAxisId
12
+ );
13
+ }
14
+
15
+ export function selectYAxisIdFromGraphicalItemId(
16
+ state: RechartsRootState,
17
+ id: GraphicalItemId,
18
+ ): AxisId {
19
+ return (
20
+ state.graphicalItems.cartesianItems.find((item) => item.id === id)?.yAxisId ?? defaultAxisId
21
+ );
22
+ }
@@ -0,0 +1,25 @@
1
+ // Adapted from recharts@3.9.2, commit b3451050c027a23957ffa50a2665c9119df21e47.
2
+ import { createSelector } from 'reselect';
3
+ import { sortBy } from 'es-toolkit/compat';
4
+ import { RechartsRootState } from '../store';
5
+ import { LegendSettings } from '../legendSlice';
6
+ import { LegendPayload } from '../../component/DefaultLegendContent.tsrx';
7
+ import { Size } from '../../util/types';
8
+
9
+ export const selectLegendSettings = (state: RechartsRootState): LegendSettings =>
10
+ state.legend.settings;
11
+
12
+ export const selectLegendSize = (state: RechartsRootState): Size => state.legend.size;
13
+
14
+ const selectAllLegendPayload2DArray = (
15
+ state: RechartsRootState,
16
+ ): ReadonlyArray<ReadonlyArray<LegendPayload>> => state.legend.payload;
17
+
18
+ export const selectLegendPayload: (state: RechartsRootState) => ReadonlyArray<LegendPayload> =
19
+ createSelector(
20
+ [selectAllLegendPayload2DArray, selectLegendSettings],
21
+ (payloads, { itemSorter }) => {
22
+ const flat = payloads.flat(1);
23
+ return itemSorter ? sortBy(flat, itemSorter) : flat;
24
+ },
25
+ );
@@ -0,0 +1,159 @@
1
+ // Adapted from recharts@3.9.2, commit b3451050c027a23957ffa50a2665c9119df21e47.
2
+ import { createSelector } from 'reselect';
3
+ import { computeLinePoints, LinePointItem } from '../../cartesian/Line.tsrx';
4
+ import { RechartsRootState } from '../store';
5
+ import { AxisId } from '../cartesianAxisSlice';
6
+ import { selectChartDataWithIndexesIfNotInPanoramaPosition4 } from './dataSelectors';
7
+ import { selectChartLayout } from '../../context/chartLayoutContext';
8
+ import {
9
+ selectAxisWithScale,
10
+ selectTicksOfGraphicalItem,
11
+ selectUnfilteredCartesianItems,
12
+ } from './axisSelectors';
13
+ import { getBandSizeOfAxis, isCategoricalAxis } from '../../util/ChartUtils';
14
+ import { ChartData } from '../chartDataSlice';
15
+ import { CartesianGraphicalItemSettings, GraphicalItemId } from '../graphicalItemsSlice';
16
+ import { LineSettings } from '../types/LineSettings';
17
+
18
+ const selectXAxisWithScale = (
19
+ state: RechartsRootState,
20
+ xAxisId: AxisId,
21
+ _yAxisId: AxisId,
22
+ isPanorama: boolean,
23
+ ) => selectAxisWithScale(state, 'xAxis', xAxisId, isPanorama);
24
+
25
+ const selectXAxisTicks = (
26
+ state: RechartsRootState,
27
+ xAxisId: AxisId,
28
+ _yAxisId: AxisId,
29
+ isPanorama: boolean,
30
+ ) => selectTicksOfGraphicalItem(state, 'xAxis', xAxisId, isPanorama);
31
+
32
+ const selectYAxisWithScale = (
33
+ state: RechartsRootState,
34
+ _xAxisId: AxisId,
35
+ yAxisId: AxisId,
36
+ isPanorama: boolean,
37
+ ) => selectAxisWithScale(state, 'yAxis', yAxisId, isPanorama);
38
+
39
+ const selectYAxisTicks = (
40
+ state: RechartsRootState,
41
+ _xAxisId: AxisId,
42
+ yAxisId: AxisId,
43
+ isPanorama: boolean,
44
+ ) => selectTicksOfGraphicalItem(state, 'yAxis', yAxisId, isPanorama);
45
+
46
+ const selectBandSize = createSelector(
47
+ [
48
+ selectChartLayout,
49
+ selectXAxisWithScale,
50
+ selectYAxisWithScale,
51
+ selectXAxisTicks,
52
+ selectYAxisTicks,
53
+ ],
54
+ (layout, xAxis, yAxis, xAxisTicks, yAxisTicks) => {
55
+ if (isCategoricalAxis(layout, 'xAxis')) {
56
+ return getBandSizeOfAxis(xAxis, xAxisTicks, false);
57
+ }
58
+ return getBandSizeOfAxis(yAxis, yAxisTicks, false);
59
+ },
60
+ );
61
+
62
+ const pickLineId = (
63
+ _state: RechartsRootState,
64
+ _xAxisId: AxisId,
65
+ _yAxisId: AxisId,
66
+ _isPanorama: boolean,
67
+ id: GraphicalItemId,
68
+ ) => id;
69
+
70
+ function isLineSettings(item: CartesianGraphicalItemSettings): item is LineSettings {
71
+ return item.type === 'line';
72
+ }
73
+
74
+ /*
75
+ * There is a race condition problem because we read some data from props and some from the state.
76
+ * The state is updated through a dispatch and is one render behind,
77
+ * and so we have this weird one tick render where the displayedData in one selector have the old dataKey
78
+ * but the new dataKey in another selector.
79
+ *
80
+ * So here instead of reading the dataKey from the props, we always read it from the state.
81
+ */
82
+ const selectSynchronisedLineSettings: (
83
+ state: RechartsRootState,
84
+ xAxisId: AxisId,
85
+ yAxisId: AxisId,
86
+ isPanorama: boolean,
87
+ id: GraphicalItemId,
88
+ ) => LineSettings | undefined = createSelector(
89
+ [selectUnfilteredCartesianItems, pickLineId],
90
+ (graphicalItems, id: GraphicalItemId): LineSettings | undefined =>
91
+ graphicalItems.filter(isLineSettings).find((x) => x.id === id),
92
+ );
93
+
94
+ export const selectLinePoints: (
95
+ state: RechartsRootState,
96
+ xAxisId: AxisId,
97
+ yAxisId: AxisId,
98
+ isPanorama: boolean,
99
+ id: GraphicalItemId,
100
+ ) => ReadonlyArray<LinePointItem> | undefined = createSelector(
101
+ [
102
+ selectChartLayout,
103
+ selectXAxisWithScale,
104
+ selectYAxisWithScale,
105
+ selectXAxisTicks,
106
+ selectYAxisTicks,
107
+ selectSynchronisedLineSettings,
108
+ selectBandSize,
109
+ selectChartDataWithIndexesIfNotInPanoramaPosition4,
110
+ ],
111
+ (
112
+ layout,
113
+ xAxis,
114
+ yAxis,
115
+ xAxisTicks,
116
+ yAxisTicks,
117
+ lineSettings,
118
+ bandSize,
119
+ { chartData, dataStartIndex, dataEndIndex },
120
+ ): ReadonlyArray<LinePointItem> | undefined => {
121
+ if (
122
+ lineSettings == null ||
123
+ xAxis == null ||
124
+ yAxis == null ||
125
+ xAxisTicks == null ||
126
+ yAxisTicks == null ||
127
+ xAxisTicks.length === 0 ||
128
+ yAxisTicks.length === 0 ||
129
+ bandSize == null ||
130
+ (layout !== 'horizontal' && layout !== 'vertical')
131
+ ) {
132
+ return undefined;
133
+ }
134
+
135
+ const { dataKey, data } = lineSettings;
136
+ let displayedData: ChartData | undefined;
137
+
138
+ if (data != null && data.length > 0) {
139
+ displayedData = data;
140
+ } else {
141
+ displayedData = chartData?.slice(dataStartIndex, dataEndIndex + 1);
142
+ }
143
+
144
+ if (displayedData == null) {
145
+ return undefined;
146
+ }
147
+
148
+ return computeLinePoints({
149
+ layout,
150
+ xAxis,
151
+ yAxis,
152
+ xAxisTicks,
153
+ yAxisTicks,
154
+ dataKey,
155
+ bandSize,
156
+ displayedData,
157
+ });
158
+ },
159
+ );
@@ -0,0 +1,15 @@
1
+ // Adapted from recharts@3.9.2, commit b3451050c027a23957ffa50a2665c9119df21e47.
2
+ import { NumberDomain } from '../../util/types';
3
+
4
+ export const numberDomainEqualityCheck = (
5
+ a: NumberDomain | undefined,
6
+ b: NumberDomain | undefined,
7
+ ): boolean => {
8
+ if (a === b) {
9
+ return true;
10
+ }
11
+ if (a == null || b == null) {
12
+ return false;
13
+ }
14
+ return a[0] === b[0] && a[1] === b[1];
15
+ };
@@ -0,0 +1,6 @@
1
+ // Adapted from recharts@3.9.2, commit b3451050c027a23957ffa50a2665c9119df21e47.
2
+ import { RechartsRootState } from '../store';
3
+ import { AxisId } from '../cartesianAxisSlice';
4
+
5
+ export const pickAxisId = (_state: RechartsRootState, _axisType: unknown, axisId: AxisId): AxisId =>
6
+ axisId;
@@ -0,0 +1,4 @@
1
+ // Adapted from recharts@3.9.2, commit b3451050c027a23957ffa50a2665c9119df21e47.
2
+ import { RechartsRootState } from '../store';
3
+
4
+ export const pickAxisType = <T>(_state: RechartsRootState, axisType: T): T => axisType;