@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
@@ -1,3 +1,177 @@
1
+ import type { RegisteredCell } from '../context/CellsContext.ts';
2
+ import type { CellPropsFor } from '../component/Cell.ts';
3
+ import type {
4
+ MutableRefObject,
5
+ NativeMouseEvent,
6
+ OctaneElement,
7
+ OctaneNode,
8
+ } from '../util/OctaneTypes.ts';
9
+ import type { Octane } from 'octane/jsx-runtime';
10
+
11
+ type Key = Octane.Key;
12
+ import type { Series } from 'victory-vendor/d3-shape';
13
+ import type { Props as RectangleProps, RectRadius } from '../shape/Rectangle.tsrx';
14
+ import type { ErrorBarDataPointFormatter } from './ErrorBar.tsrx';
15
+ import type { CartesianLabelListEntry, ImplicitLabelListType } from '../component/LabelList.tsrx';
16
+ import type { BarPositionPosition, StackId } from '../util/ChartUtils';
17
+ import type {
18
+ ActiveShape,
19
+ AnimationDuration,
20
+ CartesianLayout,
21
+ CartesianViewBoxRequired,
22
+ ChartOffsetInternal,
23
+ Coordinate,
24
+ DataConsumer,
25
+ DataKey,
26
+ LegendType,
27
+ PresentationAttributesAdaptChildEvent,
28
+ ShapeAnimationProps,
29
+ TickItem,
30
+ TooltipType,
31
+ TrapezoidViewBox,
32
+ } from '../util/types';
33
+ import type { BarBackgroundRectangleProps, MinPointSize } from '../util/BarUtils.tsrx';
34
+ import type { Formatter } from '../component/DefaultTooltipContent.tsrx';
35
+ import type { TooltipPayloadConfiguration } from '../state/tooltipSlice';
36
+ import type { BaseAxisWithScale } from '../state/selectors/axisSelectors';
37
+ import type { BarSettings } from '../state/types/BarSettings';
38
+ import type { SVGPropsNoEvents } from '../util/svgPropertiesNoEvents';
39
+ import type { AnimationInterpolateFn } from '../animation/AnimatedItems.tsrx';
40
+ import type { AnimationMatchByProp } from '../animation/matchBy';
41
+ import type { EasingInput } from '../animation/easing';
42
+ import type { WithoutId } from '../util/useUniqueId';
43
+ import type { ZIndexable } from '../zIndex/ZIndexLayer.tsrx';
44
+ import type { AxisId } from '../state/cartesianAxisSlice';
45
+ import type { GraphicalItemId } from '../state/graphicalItemsSlice';
46
+ import type { ChartData } from '../state/chartDataSlice';
47
+
48
+ type BarRectangleType = {
49
+ x: number;
50
+ y: number;
51
+ width: number;
52
+ height: number;
53
+ };
54
+ export interface BarRectangleItem extends RectangleProps {
55
+ value: number | [number, number];
56
+ background?: BarRectangleType;
57
+ tooltipPosition: Coordinate;
58
+ readonly payload?: any;
59
+ parentViewBox: CartesianViewBoxRequired;
60
+ x: number;
61
+ y: number;
62
+ width: number;
63
+ height: number;
64
+ stackedBarStart: number | undefined;
65
+ originalDataIndex: number;
66
+ }
67
+ export type BarShapeProps =
68
+ BarRectangleItem & ShapeAnimationProps & {
69
+ isActive: boolean;
70
+ index: number;
71
+ };
72
+ export type BarBackgroundShapeProps = Omit<BarShapeProps, 'value' | 'tooltipPosition'>;
73
+ interface BarProps<DataPointType, ValueAxisType> extends DataConsumer<
74
+ DataPointType,
75
+ ValueAxisType
76
+ >, ZIndexable {
77
+ className?: string;
78
+ index?: Key;
79
+ xAxisId?: AxisId;
80
+ yAxisId?: AxisId;
81
+ stackId?: StackId;
82
+ barSize?: string | number;
83
+ unit?: string | number;
84
+ name?: string | number;
85
+ tooltipType?: TooltipType;
86
+ formatter?: Formatter;
87
+ legendType?: LegendType;
88
+ minPointSize?: MinPointSize;
89
+ maxBarSize?: number;
90
+ hide?: boolean;
91
+ shape?: ActiveShape<BarShapeProps, SVGPathElement>;
92
+ activeBar?: ActiveShape<BarShapeProps, SVGPathElement>;
93
+ background?: ActiveShape<BarBackgroundShapeProps, SVGPathElement> & ZIndexable;
94
+ radius?: RectRadius;
95
+ onAnimationStart?: () => void;
96
+ onAnimationEnd?: () => void;
97
+ isAnimationActive?: boolean | 'auto';
98
+ animationBegin?: number;
99
+ animationDuration?: AnimationDuration;
100
+ animationEasing?: EasingInput;
101
+ animationInterpolateFn?: AnimationInterpolateFn<BarRectangleItem, CartesianLayout>;
102
+ animationMatchBy?: AnimationMatchByProp<BarRectangleItem>;
103
+ id?: string;
104
+ label?: ImplicitLabelListType;
105
+ zIndex?: number;
106
+ }
107
+ type BarMouseEvent =
108
+ (data: BarRectangleItem, index: number, event: NativeMouseEvent<SVGGElement>) => void;
109
+ interface BarEvents {
110
+ onClick: BarMouseEvent;
111
+ onMouseEnter: BarMouseEvent;
112
+ onMouseLeave: BarMouseEvent;
113
+ onMouseMove: BarMouseEvent;
114
+ onMouseDown: BarMouseEvent;
115
+ onMouseUp: BarMouseEvent;
116
+ onMouseOver: BarMouseEvent;
117
+ onMouseOut: BarMouseEvent;
118
+ }
119
+ type InternalBarProps = {
120
+ layout: 'horizontal' | 'vertical';
121
+ data: ReadonlyArray<BarRectangleItem> | undefined;
122
+ xAxisId: string | number;
123
+ yAxisId: string | number;
124
+ hide: boolean;
125
+ legendType: LegendType;
126
+ minPointSize: MinPointSize;
127
+ activeBar: ActiveShape<BarShapeProps, SVGPathElement>;
128
+ isAnimationActive: boolean | 'auto';
129
+ animationBegin: number;
130
+ animationDuration: AnimationDuration;
131
+ animationEasing: EasingInput;
132
+ needClip?: boolean;
133
+ className?: string;
134
+ index?: Key;
135
+ stackId?: string | number;
136
+ barSize?: string | number;
137
+ unit?: string | number;
138
+ name?: string | number;
139
+ dataKey?: DataKey<any>;
140
+ tooltipType?: TooltipType;
141
+ formatter?: Formatter;
142
+ maxBarSize?: number;
143
+ shape: ActiveShape<BarShapeProps, SVGPathElement>;
144
+ background?: ActiveShape<BarBackgroundShapeProps, SVGPathElement>;
145
+ radius?: number | [number, number, number, number];
146
+ onAnimationStart?: () => void;
147
+ onAnimationEnd?: () => void;
148
+ animationInterpolateFn: AnimationInterpolateFn<BarRectangleItem, CartesianLayout>;
149
+ animationMatchBy: AnimationMatchByProp<BarRectangleItem>;
150
+ id: GraphicalItemId;
151
+ label?: ImplicitLabelListType;
152
+ };
153
+ type BarSvgProps =
154
+ Omit<
155
+ PresentationAttributesAdaptChildEvent<BarRectangleItem, SVGGElement>,
156
+ 'radius' | 'name' | 'ref'
157
+ >;
158
+ export type Props<DataPointType = any, ValueAxisType = any> =
159
+ Partial<BarEvents> & BarProps<DataPointType, ValueAxisType> & Omit<BarSvgProps, keyof BarEvents>;
160
+ type InternalProps = BarSvgProps & InternalBarProps;
161
+ type BarBackgroundProps = {
162
+ background?: ActiveShape<BarBackgroundShapeProps, SVGPathElement>;
163
+ data: ReadonlyArray<BarRectangleItem> | undefined;
164
+ dataKey: DataKey<any> | undefined;
165
+ allOtherBarProps: InternalProps;
166
+ };
167
+ type BarRectanglesProps =
168
+ InternalProps & {
169
+ data: ReadonlyArray<BarRectangleItem> | undefined;
170
+ };
171
+ type BarImplProps =
172
+ Omit<InternalBarProps, 'layout' | 'data'> & {
173
+ children?: OctaneNode;
174
+ };
1
175
  // Port of cartesian/Bar.tsx — the bar graphical item: redux registration
2
176
  // (graphical item, legend, tooltip settings), store-computed rectangles,
3
177
  // background bars, active-bar highlight, stack clipping, labels, animation.
@@ -21,7 +195,12 @@ import {
21
195
  truncateByDomain,
22
196
  } from '../util/ChartUtils';
23
197
  import { adaptEventsOfChild } from '../util/types.ts';
24
- import { BarRectangle, defaultBarShape, minPointSizeCallback } from '../util/BarUtils.tsrx';
198
+ import {
199
+ BarRectangle,
200
+ BarBackgroundRectangle,
201
+ defaultBarShape,
202
+ minPointSizeCallback,
203
+ } from '../util/BarUtils.tsrx';
25
204
  import {
26
205
  useMouseClickItemDispatch,
27
206
  useMouseEnterItemDispatch,
@@ -55,7 +234,7 @@ import { propsAreEqual } from '../util/propsAreEqual';
55
234
  import { BarStackClipLayer, useStackId } from './BarStack.tsrx';
56
235
  import { CellsContext, useCellRegistry } from '../context/CellsContext';
57
236
 
58
- const computeLegendPayloadFromBarData = (props) => {
237
+ const computeLegendPayloadFromBarData = (props: Props) => {
59
238
  const { dataKey, name, fill, legendType, hide } = props;
60
239
  return [
61
240
  {
@@ -69,7 +248,21 @@ const computeLegendPayloadFromBarData = (props) => {
69
248
  ];
70
249
  };
71
250
 
72
- const SetBarTooltipEntrySettings = memo((props) => {
251
+ const SetBarTooltipEntrySettings = memo((
252
+ props: Pick<
253
+ InternalProps,
254
+ | 'dataKey'
255
+ | 'stroke'
256
+ | 'strokeWidth'
257
+ | 'fill'
258
+ | 'name'
259
+ | 'hide'
260
+ | 'unit'
261
+ | 'formatter'
262
+ | 'tooltipType'
263
+ | 'id'
264
+ >,
265
+ ) => {
73
266
  const {
74
267
  dataKey,
75
268
  stroke,
@@ -82,7 +275,7 @@ const SetBarTooltipEntrySettings = memo((props) => {
82
275
  tooltipType,
83
276
  id,
84
277
  } = props;
85
- const tooltipEntrySettings = {
278
+ const tooltipEntrySettings: TooltipPayloadConfiguration = {
86
279
  dataDefinedOnItem: undefined,
87
280
  getPosition: noop,
88
281
  settings: {
@@ -103,7 +296,7 @@ const SetBarTooltipEntrySettings = memo((props) => {
103
296
  return <SetTooltipEntrySettings tooltipEntrySettings={tooltipEntrySettings} />;
104
297
  });
105
298
 
106
- function BarBackground(props) {
299
+ function BarBackground(props: BarBackgroundProps) {
107
300
  const activeIndex = useAppSelector(selectActiveTooltipIndex);
108
301
  const { data, dataKey, background: backgroundFromProps, allOtherBarProps } = props;
109
302
  const {
@@ -137,7 +330,7 @@ function BarBackground(props) {
137
330
  const onMouseEnter = onMouseEnterFromContext(entry, entry.originalDataIndex);
138
331
  const onMouseLeave = onMouseLeaveFromContext(entry, entry.originalDataIndex);
139
332
  const onClick = onClickFromContext(entry, entry.originalDataIndex);
140
- const barRectangleProps = {
333
+ const barRectangleProps: BarBackgroundRectangleProps = {
141
334
  option: backgroundFromProps,
142
335
  isActive: String(entry.originalDataIndex) === activeIndex,
143
336
  ...rest,
@@ -152,14 +345,20 @@ function BarBackground(props) {
152
345
  index: i,
153
346
  className: 'recharts-bar-background-rectangle',
154
347
  };
155
- return <BarRectangle key={'background-bar-' + i} {...barRectangleProps} />;
348
+ return <BarBackgroundRectangle key={'background-bar-' + i} {...barRectangleProps} />;
156
349
  })}</ZIndexLayer>;
157
350
  }
158
351
 
159
- function BarLabelListProvider(props) @{
352
+ function BarLabelListProvider(props: {
353
+ showLabels: boolean;
354
+ children: OctaneNode;
355
+ rects: ReadonlyArray<BarRectangleItem> | undefined;
356
+ }) @{
160
357
  const { showLabels, children, rects } = props;
161
- const labelListEntries = rects?.map((entry) => {
162
- const viewBox = {
358
+ const labelListEntries: ReadonlyArray<CartesianLabelListEntry> | undefined = rects?.map((
359
+ entry: BarRectangleItem,
360
+ ) => {
361
+ const viewBox: TrapezoidViewBox = {
163
362
  x: entry.x,
164
363
  y: entry.y,
165
364
  width: entry.width,
@@ -181,20 +380,27 @@ function BarLabelListProvider(props) @{
181
380
  >{children}</CartesianLabelListContextProvider>
182
381
  }
183
382
 
184
- function BarRectangleWithActiveState(props) {
383
+ function BarRectangleWithActiveState(props: ShapeAnimationProps & {
384
+ shape: ActiveShape<BarShapeProps, SVGPathElement>;
385
+ activeBar: ActiveShape<BarShapeProps, SVGPathElement>;
386
+ baseProps: WithoutId<SVGPropsNoEvents<BarRectanglesProps>>;
387
+ entry: BarRectangleItem;
388
+ index: number;
389
+ dataKey: DataKey<any> | undefined;
390
+ }) {
185
391
  const { shape, activeBar, baseProps, entry, index, dataKey } = props;
186
392
  const activeIndex = useAppSelector(selectActiveTooltipIndex);
187
393
  const activeDataKey = useAppSelector(selectActiveTooltipDataKey);
188
394
  // Only highlight this bar when it matches the active index AND (for
189
395
  // non-shared tooltips) the active dataKey. originalDataIndex matches
190
396
  // against the pre-filter data slice.
191
- const isActive =
397
+ const isActive: boolean =
192
398
  activeBar && String(entry.originalDataIndex) === activeIndex &&
193
399
  (activeDataKey == null || dataKey === activeDataKey);
194
400
  const [stayInLayer, setStayInLayer] = useState(false);
195
401
  const [hasMountedActive, setHasMountedActive] = useState(false);
196
402
  useEffect(() => {
197
- let rafId;
403
+ let rafId: number;
198
404
  if (isActive) {
199
405
  // 1. Enter the layer immediately
200
406
  setStayInLayer(true);
@@ -218,7 +424,7 @@ function BarRectangleWithActiveState(props) {
218
424
  }, [isActive]);
219
425
  const isVisuallyActive = isActive && hasMountedActive;
220
426
  const shouldRenderInLayer = isActive || stayInLayer;
221
- let option;
427
+ let option: ActiveShape<BarShapeProps, SVGPathElement>;
222
428
  if (isActive) {
223
429
  if (activeBar === true) {
224
430
  option = shape;
@@ -249,7 +455,13 @@ function BarRectangleWithActiveState(props) {
249
455
  return content;
250
456
  }
251
457
 
252
- function BarRectangleNeverActive(props) {
458
+ function BarRectangleNeverActive(props: ShapeAnimationProps & {
459
+ shape: ActiveShape<BarShapeProps, SVGPathElement>;
460
+ baseProps: WithoutId<SVGPropsNoEvents<BarRectanglesProps>>;
461
+ entry: BarRectangleItem;
462
+ index: number;
463
+ dataKey: DataKey<any> | undefined;
464
+ }) {
253
465
  const { shape, baseProps, entry, index, dataKey } = props;
254
466
  return <BarRectangle
255
467
  {...baseProps}
@@ -265,7 +477,10 @@ function BarRectangleNeverActive(props) {
265
477
  />;
266
478
  }
267
479
 
268
- function BarRectangles(rectanglesProps) {
480
+ function BarRectangles(rectanglesProps: ShapeAnimationProps & {
481
+ data: ReadonlyArray<BarRectangleItem> | undefined;
482
+ props: BarRectanglesProps;
483
+ }) {
269
484
  const { data, props, animationElapsedTime, isAnimating, isEntrance } = rectanglesProps;
270
485
  const { id, ...baseProps } = svgPropertiesNoEvents(props) ?? {};
271
486
  const { shape, dataKey, activeBar } = props;
@@ -321,7 +536,11 @@ function BarRectangles(rectanglesProps) {
321
536
  </>;
322
537
  }
323
538
 
324
- const defaultBarAnimateItems = (items, animationElapsedTime, layout) => {
539
+ const defaultBarAnimateItems: AnimationInterpolateFn<BarRectangleItem, CartesianLayout> = (
540
+ items,
541
+ animationElapsedTime,
542
+ layout,
543
+ ) => {
325
544
  if (items == null) return [];
326
545
  if (animationElapsedTime === 1) {
327
546
  return items.flatMap((item) => (item.status === 'removed' ? [] : [item.next]));
@@ -374,7 +593,10 @@ const defaultBarAnimateItems = (items, animationElapsedTime, layout) => {
374
593
  });
375
594
  };
376
595
 
377
- function RectanglesWithAnimation(rectanglesWithAnimationProps) {
596
+ function RectanglesWithAnimation(rectanglesWithAnimationProps: {
597
+ props: InternalProps;
598
+ previousRectanglesRef: MutableRefObject<null | ReadonlyArray<BarRectangleItem>>;
599
+ }) {
378
600
  const { props, previousRectanglesRef } = rectanglesWithAnimationProps;
379
601
  const {
380
602
  data,
@@ -420,14 +642,17 @@ function RectanglesWithAnimation(rectanglesWithAnimationProps) {
420
642
  </BarLabelListProvider>;
421
643
  }
422
644
 
423
- function RenderRectangles(props) {
424
- const previousRectanglesRef = useRef(null);
645
+ function RenderRectangles(props: InternalProps) {
646
+ const previousRectanglesRef = useRef<ReadonlyArray<BarRectangleItem> | null>(null);
425
647
  return <RectanglesWithAnimation previousRectanglesRef={previousRectanglesRef} props={props} />;
426
648
  }
427
649
 
428
- const defaultMinPointSize = 0;
650
+ const defaultMinPointSize: number = 0;
429
651
 
430
- const errorBarDataPointFormatter = (dataPoint, dataKey) => {
652
+ const errorBarDataPointFormatter: ErrorBarDataPointFormatter<BarRectangleItem> = (
653
+ dataPoint: BarRectangleItem,
654
+ dataKey,
655
+ ) => {
431
656
  // A value array means a stacked bar: arr[1] is the bar's end value.
432
657
  const value = Array.isArray(dataPoint.value) ? dataPoint.value[1] : dataPoint.value;
433
658
  return {
@@ -439,7 +664,7 @@ const errorBarDataPointFormatter = (dataPoint, dataKey) => {
439
664
  };
440
665
  };
441
666
 
442
- function BarWithState(props) @{
667
+ function BarWithState(props: InternalProps) @{
443
668
  const { hide, data, dataKey, className, xAxisId, yAxisId, needClip, background, id } = props;
444
669
  if (hide || data == null) {
445
670
  return null;
@@ -484,9 +709,9 @@ export const defaultBarProps = {
484
709
  xAxisId: 0,
485
710
  yAxisId: 0,
486
711
  zIndex: DefaultZIndexes.bar,
487
- };
712
+ } as const satisfies Partial<Props>;
488
713
 
489
- function BarImpl(props) {
714
+ function BarImpl(props: BarImplProps) {
490
715
  const {
491
716
  xAxisId,
492
717
  yAxisId,
@@ -505,11 +730,13 @@ function BarImpl(props) {
505
730
  // octane divergence: cells arrive via registration (children render inside
506
731
  // the CellsContext provider below), not children introspection.
507
732
  const [cells, cellRegistry] = useCellRegistry();
508
- const rects = useAppSelector((state) => selectBarRectangles(state, props.id, isPanorama, cells));
733
+ const rects: ReadonlyArray<BarRectangleItem> | undefined = useAppSelector(
734
+ (state) => selectBarRectangles(state, props.id, isPanorama, cells),
735
+ );
509
736
  if (layout !== 'vertical' && layout !== 'horizontal') {
510
737
  return null;
511
738
  }
512
- let errorBarOffset;
739
+ let errorBarOffset: number;
513
740
  const firstDataPoint = rects?.[0];
514
741
  if (firstDataPoint == null || firstDataPoint.height == null || firstDataPoint.width == null) {
515
742
  errorBarOffset = 0;
@@ -559,22 +786,39 @@ export function computeBarRectangles({
559
786
  cells,
560
787
  parentViewBox,
561
788
  dataStartIndex,
789
+ }: {
790
+ layout: 'horizontal' | 'vertical';
791
+ barSettings: BarSettings;
792
+ pos: BarPositionPosition;
793
+ bandSize: number;
794
+ xAxis: BaseAxisWithScale;
795
+ yAxis: BaseAxisWithScale;
796
+ xAxisTicks: TickItem[];
797
+ yAxisTicks: TickItem[];
798
+ stackedData: Series<Record<number, number>, DataKey<any>> | undefined;
799
+ offset: ChartOffsetInternal;
800
+ displayedData: ChartData;
801
+ cells: ReadonlyArray<RegisteredCell> | undefined;
802
+ parentViewBox: CartesianViewBoxRequired;
803
+ dataStartIndex: number;
562
804
  }) {
563
805
  const numericAxis =
564
806
  layout === 'horizontal' ? yAxis : xAxis;
565
- const stackedDomain =
566
- stackedData ? numericAxis.scale.domain() : null;
807
+ const stackedDomain = stackedData ? numericAxis.scale.domain() as readonly number[] : null;
567
808
  const baseValue = getBaseValueOfBar({ numericAxis });
568
- const stackedBarStart = numericAxis.scale.map(baseValue);
569
- return displayedData.map((entry, index) => {
570
- let value, x, y, width, height, background;
809
+ const stackedBarStart: number | undefined = numericAxis.scale.map(baseValue);
810
+ const rectangles = displayedData.map((entry, index) => {
811
+ let value, x: number | null, y, width, height, background: Omit<BarRectangleType, 'x' | 'y'> & {
812
+ x: number | null;
813
+ y: number | null;
814
+ };
571
815
  if (stackedData) {
572
816
  // Use dataStartIndex to access the correct element in the full stackedData array
573
817
  const untruncatedValue = stackedData[index + dataStartIndex];
574
818
  if (untruncatedValue == null) {
575
819
  return null;
576
820
  }
577
- value = truncateByDomain(untruncatedValue, stackedDomain);
821
+ value = truncateByDomain(untruncatedValue, stackedDomain!);
578
822
  } else {
579
823
  value = getValueByDataKey(entry, dataKey);
580
824
  if (!Array.isArray(value)) {
@@ -643,7 +887,7 @@ export function computeBarRectangles({
643
887
  return null;
644
888
  }
645
889
  return {
646
- ...entry,
890
+ ...entry as Record<string, unknown>,
647
891
  stackedBarStart,
648
892
  x,
649
893
  y,
@@ -651,16 +895,26 @@ export function computeBarRectangles({
651
895
  height,
652
896
  value: stackedData ? value : value[1],
653
897
  payload: entry,
654
- background,
898
+ // Background origins come from x/y or chart offsets; the guard above
899
+ // has removed every entry with unresolved x/y coordinates.
900
+ background: background as BarRectangleType,
655
901
  tooltipPosition: { x: x + width / 2, y: y + height / 2 },
656
902
  parentViewBox,
657
903
  originalDataIndex: index,
658
- ...cells && cells[index] && cells[index].props,
904
+ ...cells && cells[index] && cells[index].props as CellPropsFor<SVGPathElement>,
659
905
  };
660
- }).filter(Boolean);
906
+ });
907
+ // This map returns only objects or null, so Boolean removes exactly the nulls.
908
+ return rectangles.filter(
909
+ Boolean as BooleanConstructor & ((rectangle: (typeof rectangles)[number]) => rectangle is NonNullable<
910
+ typeof rectangle
911
+ >),
912
+ );
661
913
  }
662
914
 
663
- function BarFn(outsideProps) {
915
+ function BarFn<DataPointType = any, ValueAxisType = any>(
916
+ outsideProps: Props<DataPointType, ValueAxisType>,
917
+ ) {
664
918
  const props = resolveDefaultProps(outsideProps, defaultBarProps);
665
919
  // stackId may arrive from props or from BarStack context
666
920
  const stackId = useStackId(props.stackId);
@@ -712,5 +966,5 @@ function BarFn(outsideProps) {
712
966
  * @consumes CartesianChartContext
713
967
  * @consumes BarStackContext
714
968
  */
715
- export const Bar = memo(BarFn, propsAreEqual);
969
+ export const Bar = memo(BarFn, propsAreEqual) as typeof BarFn & { displayName?: string };
716
970
  Bar.displayName = 'Bar';
@@ -1,3 +1,17 @@
1
+ import type { ComponentType, OctaneNode } from '../util/OctaneTypes.ts';
2
+ import type { NormalizedStackId, StackId } from '../util/ChartUtils';
3
+ import type { Props as LayerProps } from '../container/Layer.tsrx';
4
+ import type { RectRadius } from '../shape/Rectangle.tsrx';
5
+
6
+ export type BarStackProps = {
7
+ stackId?: StackId;
8
+ radius?: RectRadius;
9
+ children?: OctaneNode;
10
+ };
11
+ export type BarStackSettings = {
12
+ stackId: NormalizedStackId;
13
+ radius: RectRadius;
14
+ };
1
15
  // Port of cartesian/BarStack.tsx — rounded-corner clipping for whole bar
2
16
  // stacks: one clipPath per stack rectangle, referenced by the bars.
3
17
  import { createContext, memo, useContext, useMemo } from 'octane';
@@ -11,12 +25,12 @@ import { Layer } from '../container/Layer.tsrx';
11
25
  import { Rectangle } from '../shape/Rectangle.tsrx';
12
26
  import { propsAreEqual } from '../util/propsAreEqual';
13
27
 
14
- const BarStackContext = createContext(undefined);
28
+ const BarStackContext = createContext<BarStackSettings | undefined>(undefined);
15
29
 
16
30
  /**
17
31
  * Resolves the stack ID for a Bar: explicit prop wins, then BarStack context.
18
32
  */
19
- export function useStackId(childStackId) {
33
+ export function useStackId(childStackId: StackId | undefined) {
20
34
  const stackSettings = useContext(BarStackContext);
21
35
  if (stackSettings != null) {
22
36
  return stackSettings.stackId;
@@ -29,13 +43,13 @@ export function useStackId(childStackId) {
29
43
 
30
44
  export const defaultBarStackProps = {
31
45
  radius: 0,
32
- };
46
+ } as const satisfies Partial<BarStackProps>;
33
47
 
34
- const getClipPathId = (stackId, index) => {
48
+ const getClipPathId = (stackId: NormalizedStackId, index: number) => {
35
49
  return 'recharts-bar-stack-clip-path-' + stackId + '-' + index;
36
50
  };
37
51
 
38
- export function useBarStackClipPathUrl(index) {
52
+ export function useBarStackClipPathUrl(index: number) {
39
53
  const barStackContext = useContext(BarStackContext);
40
54
  if (barStackContext == null) {
41
55
  return undefined;
@@ -44,7 +58,9 @@ export function useBarStackClipPathUrl(index) {
44
58
  return 'url(#' + getClipPathId(stackId, index) + ')';
45
59
  }
46
60
 
47
- export function BarStackClipLayer(props) {
61
+ export function BarStackClipLayer(props: LayerProps & {
62
+ index: number;
63
+ }) {
48
64
  const { index, ...rest } = props;
49
65
  const clipPathUrl = useBarStackClipPathUrl(index);
50
66
  return <Layer className="recharts-bar-stack-layer" clipPath={clipPathUrl} {...rest} />;
@@ -54,7 +70,10 @@ export function BarStackClipLayer(props) {
54
70
  * Renders one clipPath per stack rectangle so the whole stack gets rounded
55
71
  * corners.
56
72
  */
57
- function BarStackClipPath(props) {
73
+ function BarStackClipPath(props: {
74
+ stackId: NormalizedStackId;
75
+ radius: RectRadius;
76
+ }) {
58
77
  const { stackId, radius } = props;
59
78
  const isPanorama = useIsPanorama();
60
79
  const positions = useAppSelector((state) => selectStackRects(state, stackId, isPanorama));
@@ -80,10 +99,13 @@ function BarStackClipPath(props) {
80
99
  })}</defs>;
81
100
  }
82
101
 
83
- function BarStackImpl(props) @{
102
+ function BarStackImpl(props: BarStackProps) @{
84
103
  const resolvedStackId = useUniqueId('recharts-bar-stack', getNormalizedStackId(props.stackId));
85
104
  const { children, radius } = resolveDefaultProps(props, defaultBarStackProps);
86
- const context = useMemo(() => ({ stackId: resolvedStackId, radius }), [resolvedStackId, radius]);
105
+ const context: BarStackSettings = useMemo(() => ({ stackId: resolvedStackId, radius }), [
106
+ resolvedStackId,
107
+ radius,
108
+ ]);
87
109
  <BarStackContext.Provider value={context}>
88
110
  <BarStackClipPath stackId={resolvedStackId} radius={radius} />
89
111
  {children}