@octanejs/recharts 0.1.41 → 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 (375) hide show
  1. package/{LICENSE → LICENSE.recharts} +3 -2
  2. package/README.md +12 -0
  3. package/package.json +10 -9
  4. package/src/animation/AnimatedItems.tsrx +36 -3
  5. package/src/animation/AnimationController.ts +17 -65
  6. package/src/animation/{AnimationControllerImpl.js → AnimationControllerImpl.ts} +19 -12
  7. package/src/animation/{AnimationHandle.js → AnimationHandle.ts} +82 -65
  8. package/src/animation/CSSTransitionAnimate.tsrx +3 -2
  9. package/src/animation/JavascriptAnimate.tsrx +18 -2
  10. package/src/animation/easing.ts +235 -0
  11. package/src/animation/{matchBy.js → matchBy.ts} +76 -120
  12. package/src/animation/timeoutController.ts +71 -0
  13. package/src/animation/useAnimationController.ts +4 -1
  14. package/src/animation/useAnimationStartSnapshot.ts +3 -3
  15. package/src/animation/util.ts +12 -0
  16. package/src/cartesian/Area.tsrx +33 -31
  17. package/src/cartesian/AreaRevealShape.tsrx +4 -3
  18. package/src/cartesian/Bar.ts +1 -0
  19. package/src/cartesian/Bar.tsrx +293 -39
  20. package/src/cartesian/BarStack.tsrx +31 -9
  21. package/src/cartesian/CartesianAxis.tsrx +154 -22
  22. package/src/cartesian/CartesianGrid.tsrx +5 -6
  23. package/src/cartesian/ErrorBar.tsrx +9 -8
  24. package/src/cartesian/Funnel.tsrx +40 -37
  25. package/src/cartesian/GraphicalItemClipPath.tsrx +11 -4
  26. package/src/cartesian/Line.ts +1 -0
  27. package/src/cartesian/Line.tsrx +206 -28
  28. package/src/cartesian/LineDrawShape.tsrx +23 -10
  29. package/src/cartesian/ReferenceLine.tsrx +8 -8
  30. package/src/cartesian/Scatter.tsrx +61 -66
  31. package/src/cartesian/XAxis.tsrx +78 -9
  32. package/src/cartesian/YAxis.tsrx +85 -12
  33. package/src/cartesian/getCartesianPosition.ts +265 -0
  34. package/src/cartesian/getEquidistantTicks.ts +144 -0
  35. package/src/cartesian/getTicks.ts +221 -0
  36. package/src/chart/AreaChart.tsrx +5 -1
  37. package/src/chart/BarChart.tsrx +8 -2
  38. package/src/chart/CartesianChart.tsrx +17 -4
  39. package/src/chart/CategoricalChart.tsrx +4 -1
  40. package/src/chart/ComposedChart.tsrx +5 -1
  41. package/src/chart/FunnelChart.tsrx +5 -1
  42. package/src/chart/LineChart.tsrx +8 -2
  43. package/src/chart/PieChart.tsrx +6 -2
  44. package/src/chart/PolarChart.tsrx +5 -4
  45. package/src/chart/RadarChart.tsrx +6 -2
  46. package/src/chart/RadialBarChart.tsrx +6 -2
  47. package/src/chart/RechartsWrapper.tsrx +57 -21
  48. package/src/chart/Sankey.tsrx +89 -91
  49. package/src/chart/ScatterChart.tsrx +5 -1
  50. package/src/chart/SunburstChart.tsrx +21 -14
  51. package/src/chart/types.ts +0 -1
  52. package/src/component/ActivePoints.tsrx +30 -5
  53. package/src/component/Cell.ts +19 -1
  54. package/src/component/Cursor.tsrx +11 -10
  55. package/src/component/DefaultLegendContent.tsrx +15 -10
  56. package/src/component/DefaultTooltipContent.tsrx +11 -9
  57. package/src/component/Dots.tsrx +37 -6
  58. package/src/component/Label.tsrx +99 -19
  59. package/src/component/LabelList.tsrx +54 -5
  60. package/src/component/Legend.tsrx +9 -5
  61. package/src/component/ResponsiveContainer.tsrx +13 -10
  62. package/src/component/Text.tsrx +95 -32
  63. package/src/component/Tooltip.tsrx +11 -10
  64. package/src/component/TooltipBoundingBox.tsrx +4 -5
  65. package/src/component/{responsiveContainerUtils.js → responsiveContainerUtils.ts} +59 -36
  66. package/src/container/ClipPathProvider.tsrx +6 -2
  67. package/src/container/Layer.tsrx +8 -1
  68. package/src/container/RootSurface.tsrx +15 -4
  69. package/src/container/Surface.tsrx +15 -1
  70. package/src/context/CellsContext.ts +6 -5
  71. package/src/context/ErrorBarContext.tsrx +23 -4
  72. package/src/context/RegisterGraphicalItemId.tsrx +10 -2
  73. package/src/context/accessibilityContext.ts +5 -0
  74. package/src/context/brushUpdateContext.ts +11 -0
  75. package/src/context/chartDataContext.ts +5 -4
  76. package/src/context/chartLayoutContext.ts +22 -8
  77. package/src/context/legendPayloadContext.tsrx +1 -1
  78. package/src/context/tooltipContext.ts +83 -0
  79. package/src/{hooks.js → hooks.ts} +88 -66
  80. package/src/index.ts +37 -37
  81. package/src/legacy-props.ts +129 -0
  82. package/src/polar/Pie.tsrx +91 -69
  83. package/src/polar/PolarAngleAxis.tsrx +47 -47
  84. package/src/polar/PolarGrid.tsrx +7 -6
  85. package/src/polar/PolarRadiusAxis.tsrx +29 -21
  86. package/src/polar/Radar.tsrx +26 -19
  87. package/src/polar/RadialBar.tsrx +59 -42
  88. package/src/polar/{defaultPolarAngleAxisProps.js → defaultPolarAngleAxisProps.ts} +6 -6
  89. package/src/polar/{defaultPolarRadiusAxisProps.js → defaultPolarRadiusAxisProps.ts} +5 -4
  90. package/src/shape/Cross.tsrx +14 -2
  91. package/src/shape/Curve.tsrx +111 -23
  92. package/src/shape/Dot.tsrx +12 -1
  93. package/src/shape/Polygon.tsrx +28 -6
  94. package/src/shape/Rectangle.tsrx +30 -3
  95. package/src/shape/Sector.tsrx +48 -6
  96. package/src/shape/Symbols.tsrx +24 -6
  97. package/src/shape/Trapezoid.tsrx +33 -3
  98. package/src/state/RechartsStoreProvider.tsrx +11 -2
  99. package/src/state/ReportChartProps.ts +2 -2
  100. package/src/state/ReportMainChartProps.ts +2 -1
  101. package/src/state/SetGraphicalItem.ts +6 -4
  102. package/src/state/SetLegendPayload.ts +7 -4
  103. package/src/state/SetTooltipEntrySettings.ts +5 -2
  104. package/src/state/brushSlice.ts +40 -0
  105. package/src/state/cartesianAxisSlice.ts +291 -0
  106. package/src/state/chartDataSlice.ts +87 -0
  107. package/src/state/errorBarSlice.ts +78 -0
  108. package/src/state/eventSettingsSlice.ts +30 -0
  109. package/src/state/{externalEventsMiddleware.js → externalEventsMiddleware.ts} +55 -34
  110. package/src/state/graphicalItemsSlice.ts +180 -0
  111. package/src/state/{keyboardEventsMiddleware.js → keyboardEventsMiddleware.ts} +72 -57
  112. package/src/state/layoutSlice.ts +50 -0
  113. package/src/state/legendSlice.ts +109 -0
  114. package/src/state/{mouseEventsMiddleware.js → mouseEventsMiddleware.ts} +45 -35
  115. package/src/state/optionsSlice.ts +65 -0
  116. package/src/state/polarAxisSlice.ts +42 -0
  117. package/src/state/polarOptionsSlice.ts +43 -0
  118. package/src/state/reduxDevtoolsJsonStringifyReplacer.ts +13 -0
  119. package/src/state/referenceElementsSlice.ts +100 -0
  120. package/src/state/renderedTicksSlice.ts +60 -0
  121. package/src/state/rootPropsSlice.ts +72 -0
  122. package/src/state/selectors/areaSelectors.ts +1 -2
  123. package/src/state/selectors/{arrayEqualityCheck.js → arrayEqualityCheck.ts} +4 -5
  124. package/src/state/selectors/axisSelectors.ts +2502 -0
  125. package/src/state/selectors/barSelectors.ts +373 -0
  126. package/src/state/selectors/barStackSelectors.ts +99 -0
  127. package/src/state/selectors/brushSelectors.ts +28 -0
  128. package/src/state/selectors/combiners/combineActiveLabel.ts +16 -0
  129. package/src/state/selectors/combiners/{combineActiveTooltipIndex.js → combineActiveTooltipIndex.ts} +45 -23
  130. package/src/state/selectors/combiners/combineAllBarPositions.ts +130 -0
  131. package/src/state/selectors/combiners/combineAxisRangeWithReverse.ts +16 -0
  132. package/src/state/selectors/combiners/combineBarPosition.ts +23 -0
  133. package/src/state/selectors/combiners/combineBarSizeList.ts +79 -0
  134. package/src/state/selectors/combiners/{combineCheckedDomain.js → combineCheckedDomain.ts} +9 -6
  135. package/src/state/selectors/combiners/combineConfiguredScale.ts +100 -0
  136. package/src/state/selectors/combiners/combineCoordinateForDefaultIndex.ts +46 -0
  137. package/src/state/selectors/combiners/{combineDisplayedStackedData.js → combineDisplayedStackedData.ts} +23 -19
  138. package/src/state/selectors/combiners/combineInverseScaleFunction.ts +16 -0
  139. package/src/state/selectors/combiners/{combineRealScaleType.js → combineRealScaleType.ts} +16 -8
  140. package/src/state/selectors/combiners/combineStackedData.ts +27 -0
  141. package/src/state/selectors/combiners/combineTooltipInteractionState.ts +86 -0
  142. package/src/state/selectors/combiners/combineTooltipPayload.ts +201 -0
  143. package/src/state/selectors/combiners/{combineTooltipPayloadConfigurations.js → combineTooltipPayloadConfigurations.ts} +17 -18
  144. package/src/state/selectors/containerSelectors.ts +12 -0
  145. package/src/state/selectors/{dataSelectors.js → dataSelectors.ts} +43 -41
  146. package/src/state/selectors/funnelSelectors.ts +5 -5
  147. package/src/state/selectors/graphicalItemSelectors.ts +22 -0
  148. package/src/state/selectors/legendSelectors.ts +25 -0
  149. package/src/state/selectors/lineSelectors.ts +159 -0
  150. package/src/state/selectors/numberDomainEqualityCheck.ts +15 -0
  151. package/src/state/selectors/pickAxisId.ts +6 -0
  152. package/src/state/selectors/pickAxisType.ts +4 -0
  153. package/src/state/selectors/pieSelectors.ts +14 -13
  154. package/src/state/selectors/polarAxisSelectors.ts +223 -0
  155. package/src/state/selectors/polarSelectors.ts +1 -1
  156. package/src/state/selectors/radarSelectors.ts +1 -1
  157. package/src/state/selectors/radialBarSelectors.ts +17 -16
  158. package/src/state/selectors/rootPropsSelectors.ts +26 -0
  159. package/src/state/selectors/scatterSelectors.ts +11 -10
  160. package/src/state/selectors/{selectActivePropsFromChartPointer.js → selectActivePropsFromChartPointer.ts} +11 -4
  161. package/src/state/selectors/selectAllAxes.ts +20 -0
  162. package/src/state/selectors/selectChartOffset.ts +17 -0
  163. package/src/state/selectors/selectChartOffsetInternal.ts +147 -0
  164. package/src/state/selectors/{selectPlotArea.js → selectPlotArea.ts} +4 -3
  165. package/src/state/selectors/selectTooltipAxisId.ts +6 -0
  166. package/src/state/selectors/{selectTooltipAxisType.js → selectTooltipAxisType.ts} +10 -4
  167. package/src/state/selectors/selectTooltipEventType.ts +39 -0
  168. package/src/state/selectors/selectTooltipPayloadSearcher.ts +6 -0
  169. package/src/state/selectors/selectTooltipSettings.ts +6 -0
  170. package/src/state/selectors/selectTooltipState.ts +5 -0
  171. package/src/state/selectors/selectors.ts +315 -0
  172. package/src/state/selectors/tooltipSelectors.ts +611 -0
  173. package/src/state/selectors/touchSelectors.ts +52 -0
  174. package/src/state/{store.js → store.ts} +46 -36
  175. package/src/state/tooltipSlice.ts +507 -0
  176. package/src/state/{touchEventsMiddleware.js → touchEventsMiddleware.ts} +54 -42
  177. package/src/state/types/AreaSettings.ts +15 -0
  178. package/src/state/types/BarSettings.ts +15 -0
  179. package/src/state/types/LineSettings.ts +10 -0
  180. package/src/state/types/PieSettings.ts +32 -0
  181. package/src/state/types/RadarSettings.ts +6 -0
  182. package/src/state/types/RadialBarSettings.ts +10 -0
  183. package/src/state/types/ScatterSettings.ts +13 -0
  184. package/src/state/types/StackedGraphicalItem.ts +34 -0
  185. package/src/state/zIndexSlice.ts +137 -0
  186. package/src/synchronisation/syncSelectors.ts +7 -0
  187. package/src/synchronisation/types.ts +42 -0
  188. package/src/synchronisation/useChartSynchronisation.tsrx +26 -11
  189. package/src/types.ts +55 -0
  190. package/src/util/ActiveShapeUtils.tsrx +34 -10
  191. package/src/util/BarUtils.tsrx +43 -3
  192. package/src/util/{CartesianUtils.js → CartesianUtils.ts} +22 -39
  193. package/src/util/ChartUtils.ts +759 -0
  194. package/src/util/{Constants.js → Constants.ts} +6 -6
  195. package/src/util/DOMUtils.ts +135 -0
  196. package/src/util/{DataUtils.js → DataUtils.ts} +120 -47
  197. package/src/util/Events.ts +22 -0
  198. package/src/util/FunnelUtils.tsrx +3 -3
  199. package/src/util/Global.ts +13 -0
  200. package/src/util/IfOverflow.ts +16 -0
  201. package/src/util/LRUCache.ts +42 -0
  202. package/src/util/{LogUtils.js → LogUtils.ts} +7 -12
  203. package/src/util/OctaneTypes.ts +51 -0
  204. package/src/util/PolarUtils.ts +132 -0
  205. package/src/util/RadialBarUtils.tsrx +3 -3
  206. package/src/util/ReduceCSSCalc.ts +186 -0
  207. package/src/util/ScatterUtils.tsrx +9 -7
  208. package/src/util/{TickUtils.js → TickUtils.ts} +30 -13
  209. package/src/util/{YAxisUtils.js → YAxisUtils.ts} +27 -17
  210. package/src/util/axisPropsAreEqual.ts +49 -0
  211. package/src/util/createEventProxy.ts +20 -0
  212. package/src/util/{excludeEventProps.js → excludeEventProps.ts} +8 -6
  213. package/src/util/getActiveCoordinate.ts +210 -0
  214. package/src/util/{getAxisTypeBasedOnLayout.js → getAxisTypeBasedOnLayout.ts} +7 -3
  215. package/src/util/getClassNameFromUnknown.ts +7 -0
  216. package/src/util/{getEveryNth.js → getEveryNth.ts} +5 -6
  217. package/src/util/getRadiusAndStrokeWidthFromDot.ts +31 -0
  218. package/src/util/{getRelativeCoordinate.js → getRelativeCoordinate.ts} +26 -9
  219. package/src/util/getSliced.ts +14 -0
  220. package/src/util/{isDomainSpecifiedByUser.js → isDomainSpecifiedByUser.ts} +46 -100
  221. package/src/util/isWellBehavedNumber.ts +8 -0
  222. package/src/util/payload/getUniqPayload.ts +1 -1
  223. package/src/util/{propsAreEqual.js → propsAreEqual.ts} +10 -8
  224. package/src/util/{resolveDefaultProps.js → resolveDefaultProps.ts} +35 -57
  225. package/src/util/round.ts +33 -0
  226. package/src/util/scale/CustomScaleDefinition.ts +82 -0
  227. package/src/util/scale/RechartsScale.ts +131 -0
  228. package/src/util/scale/{createCategoricalInverse.js → createCategoricalInverse.ts} +24 -29
  229. package/src/util/scale/{getNiceTickValues.js → getNiceTickValues.ts} +125 -146
  230. package/src/util/scale/index.ts +2 -0
  231. package/src/util/scale/util/{arithmetic.js → arithmetic.ts} +12 -8
  232. package/src/util/stacks/getStackSeriesIdentifier.ts +21 -0
  233. package/src/util/stacks/stackTypes.ts +58 -0
  234. package/src/util/{svgPropertiesNoEvents.js → svgPropertiesNoEvents.ts} +52 -27
  235. package/src/util/tooltip/translate.ts +2 -1
  236. package/src/util/typedDataKey.ts +49 -0
  237. package/src/util/types.ts +1265 -7
  238. package/src/util/{useUniqueId.js → useUniqueId.ts} +9 -5
  239. package/src/zIndex/{DefaultZIndexes.js → DefaultZIndexes.ts} +13 -4
  240. package/src/zIndex/ZIndexLayer.tsrx +13 -4
  241. package/src/zIndex/ZIndexPortal.tsrx +14 -4
  242. package/src/zIndex/{getZIndexFromUnknown.js → getZIndexFromUnknown.ts} +3 -3
  243. package/src/zIndex/{zIndexSelectors.js → zIndexSelectors.ts} +17 -11
  244. package/src/animation/easing.js +0 -193
  245. package/src/animation/timeoutController.js +0 -49
  246. package/src/animation/util.js +0 -11
  247. package/src/cartesian/Area.tsrx.d.ts +0 -340
  248. package/src/cartesian/Bar.tsrx.d.ts +0 -4
  249. package/src/cartesian/BarStack.tsrx.d.ts +0 -6
  250. package/src/cartesian/CartesianAxis.tsrx.d.ts +0 -3
  251. package/src/cartesian/CartesianGrid.tsrx.d.ts +0 -219
  252. package/src/cartesian/ErrorBar.tsrx.d.ts +0 -131
  253. package/src/cartesian/Funnel.tsrx.d.ts +0 -274
  254. package/src/cartesian/Line.tsrx.d.ts +0 -4
  255. package/src/cartesian/LineDrawShape.tsrx.d.ts +0 -2
  256. package/src/cartesian/ReferenceLine.tsrx.d.ts +0 -178
  257. package/src/cartesian/Scatter.tsrx.d.ts +0 -351
  258. package/src/cartesian/XAxis.tsrx.d.ts +0 -3
  259. package/src/cartesian/YAxis.tsrx.d.ts +0 -3
  260. package/src/cartesian/ZAxis.tsrx.d.ts +0 -102
  261. package/src/cartesian/getCartesianPosition.js +0 -277
  262. package/src/cartesian/getEquidistantTicks.js +0 -133
  263. package/src/cartesian/getTicks.js +0 -280
  264. package/src/chart/AreaChart.tsrx.d.ts +0 -12
  265. package/src/chart/BarChart.tsrx.d.ts +0 -2
  266. package/src/chart/CartesianChart.tsrx.d.ts +0 -10
  267. package/src/chart/ComposedChart.tsrx.d.ts +0 -12
  268. package/src/chart/FunnelChart.tsrx.d.ts +0 -12
  269. package/src/chart/LineChart.tsrx.d.ts +0 -2
  270. package/src/chart/PieChart.tsrx.d.ts +0 -31
  271. package/src/chart/RadarChart.tsrx.d.ts +0 -31
  272. package/src/chart/RadialBarChart.tsrx.d.ts +0 -31
  273. package/src/chart/Sankey.tsrx.d.ts +0 -253
  274. package/src/chart/ScatterChart.tsrx.d.ts +0 -12
  275. package/src/chart/SunburstChart.tsrx.d.ts +0 -146
  276. package/src/component/DefaultLegendContent.tsrx.d.ts +0 -125
  277. package/src/component/DefaultTooltipContent.tsrx.d.ts +0 -87
  278. package/src/component/Label.tsrx.d.ts +0 -12
  279. package/src/component/LabelList.tsrx.d.ts +0 -8
  280. package/src/component/Legend.tsrx.d.ts +0 -88
  281. package/src/component/ResponsiveContainer.tsrx.d.ts +0 -81
  282. package/src/component/Text.tsrx.d.ts +0 -9
  283. package/src/component/Tooltip.tsrx.d.ts +0 -246
  284. package/src/container/Layer.tsrx.d.ts +0 -6
  285. package/src/container/Surface.tsrx.d.ts +0 -12
  286. package/src/context/accessibilityContext.js +0 -10
  287. package/src/context/tooltipContext.js +0 -55
  288. package/src/index.d.ts +0 -281
  289. package/src/polar/Pie.tsrx.d.ts +0 -436
  290. package/src/polar/PolarAngleAxis.tsrx.d.ts +0 -215
  291. package/src/polar/PolarGrid.tsrx.d.ts +0 -117
  292. package/src/polar/PolarRadiusAxis.tsrx.d.ts +0 -209
  293. package/src/polar/Radar.tsrx.d.ts +0 -215
  294. package/src/polar/RadialBar.tsrx.d.ts +0 -340
  295. package/src/shape/Cross.tsrx.d.ts +0 -12
  296. package/src/shape/Curve.tsrx.d.ts +0 -42
  297. package/src/shape/Dot.tsrx.d.ts +0 -9
  298. package/src/shape/Polygon.tsrx.d.ts +0 -13
  299. package/src/shape/Rectangle.tsrx.d.ts +0 -31
  300. package/src/shape/Sector.tsrx.d.ts +0 -29
  301. package/src/shape/Symbols.tsrx.d.ts +0 -15
  302. package/src/shape/Trapezoid.tsrx.d.ts +0 -29
  303. package/src/state/brushSlice.js +0 -36
  304. package/src/state/cartesianAxisSlice.js +0 -256
  305. package/src/state/chartDataSlice.js +0 -67
  306. package/src/state/errorBarSlice.js +0 -53
  307. package/src/state/eventSettingsSlice.js +0 -25
  308. package/src/state/graphicalItemsSlice.js +0 -91
  309. package/src/state/layoutSlice.js +0 -57
  310. package/src/state/legendSlice.js +0 -83
  311. package/src/state/optionsSlice.js +0 -45
  312. package/src/state/polarAxisSlice.js +0 -33
  313. package/src/state/polarOptionsSlice.js +0 -26
  314. package/src/state/reduxDevtoolsJsonStringifyReplacer.js +0 -14
  315. package/src/state/referenceElementsSlice.js +0 -51
  316. package/src/state/renderedTicksSlice.js +0 -41
  317. package/src/state/rootPropsSlice.js +0 -48
  318. package/src/state/selectors/axisSelectors.js +0 -2113
  319. package/src/state/selectors/barSelectors.js +0 -263
  320. package/src/state/selectors/barStackSelectors.js +0 -65
  321. package/src/state/selectors/brushSelectors.js +0 -21
  322. package/src/state/selectors/combiners/combineActiveLabel.js +0 -18
  323. package/src/state/selectors/combiners/combineAllBarPositions.js +0 -169
  324. package/src/state/selectors/combiners/combineAxisRangeWithReverse.js +0 -11
  325. package/src/state/selectors/combiners/combineBarPosition.js +0 -17
  326. package/src/state/selectors/combiners/combineBarSizeList.js +0 -115
  327. package/src/state/selectors/combiners/combineConfiguredScale.js +0 -46
  328. package/src/state/selectors/combiners/combineCoordinateForDefaultIndex.js +0 -48
  329. package/src/state/selectors/combiners/combineInverseScaleFunction.js +0 -12
  330. package/src/state/selectors/combiners/combineStackedData.js +0 -22
  331. package/src/state/selectors/combiners/combineTooltipInteractionState.js +0 -121
  332. package/src/state/selectors/combiners/combineTooltipPayload.js +0 -248
  333. package/src/state/selectors/containerSelectors.js +0 -6
  334. package/src/state/selectors/graphicalItemSelectors.js +0 -25
  335. package/src/state/selectors/legendSelectors.js +0 -18
  336. package/src/state/selectors/lineSelectors.js +0 -106
  337. package/src/state/selectors/numberDomainEqualityCheck.js +0 -11
  338. package/src/state/selectors/pickAxisId.js +0 -3
  339. package/src/state/selectors/pickAxisType.js +0 -3
  340. package/src/state/selectors/polarAxisSelectors.js +0 -237
  341. package/src/state/selectors/rootPropsSelectors.js +0 -13
  342. package/src/state/selectors/selectAllAxes.js +0 -15
  343. package/src/state/selectors/selectChartOffset.js +0 -12
  344. package/src/state/selectors/selectChartOffsetInternal.js +0 -174
  345. package/src/state/selectors/selectTooltipAxisId.js +0 -3
  346. package/src/state/selectors/selectTooltipEventType.js +0 -27
  347. package/src/state/selectors/selectTooltipPayloadSearcher.js +0 -3
  348. package/src/state/selectors/selectTooltipSettings.js +0 -3
  349. package/src/state/selectors/selectTooltipState.js +0 -3
  350. package/src/state/selectors/selectors.js +0 -222
  351. package/src/state/selectors/tooltipSelectors.js +0 -471
  352. package/src/state/selectors/touchSelectors.js +0 -31
  353. package/src/state/tooltipSlice.js +0 -237
  354. package/src/state/types/StackedGraphicalItem.js +0 -18
  355. package/src/state/zIndexSlice.js +0 -167
  356. package/src/synchronisation/syncSelectors.js +0 -5
  357. package/src/util/ChartUtils.js +0 -630
  358. package/src/util/DOMUtils.js +0 -180
  359. package/src/util/Events.js +0 -7
  360. package/src/util/Global.js +0 -13
  361. package/src/util/LRUCache.js +0 -58
  362. package/src/util/PolarUtils.js +0 -190
  363. package/src/util/ReduceCSSCalc.js +0 -260
  364. package/src/util/axisPropsAreEqual.js +0 -63
  365. package/src/util/createEventProxy.js +0 -18
  366. package/src/util/getActiveCoordinate.js +0 -253
  367. package/src/util/getClassNameFromUnknown.js +0 -8
  368. package/src/util/getRadiusAndStrokeWidthFromDot.js +0 -28
  369. package/src/util/getSliced.js +0 -11
  370. package/src/util/isWellBehavedNumber.js +0 -8
  371. package/src/util/round.js +0 -39
  372. package/src/util/scale/RechartsScale.js +0 -68
  373. package/src/util/scale/index.js +0 -3
  374. package/src/util/stacks/getStackSeriesIdentifier.js +0 -10
  375. package/src/zIndex/ZIndexLayer.tsrx.d.ts +0 -2
package/src/index.ts CHANGED
@@ -3,15 +3,12 @@
3
3
  // Recharts 3 splits cleanly along the same seam as the other octane bindings:
4
4
  // its chart STATE is framework-agnostic (Redux Toolkit slices + reselect
5
5
  // selectors; d3 math via victory-vendor; es-toolkit utilities) and its React
6
- // layer is components + hooks over an isolated redux store. This package
7
- // MIRRORS upstream's file layout under src/: framework-agnostic modules are
8
- // vendored verbatim (`.js`, marked with a "Vendored verbatim" header) and the
9
- // React layer is re-implemented on octane (`.ts`/`.tsrx`) at the same paths —
10
- // so upstream's relative imports resolve unchanged, vendored or ported.
11
- // The store runs through @octanejs/redux.
12
- //
13
- // Port status: Phase 1 (static BarChart + LineChart pipeline) — see
14
- // docs/recharts-port-plan.md for the phase map.
6
+ // layer is components + hooks over an isolated redux store. The authored
7
+ // TypeScript modules retain the reviewed upstream layout and native Octane
8
+ // component contracts. The store runs through @octanejs/redux, and consumers
9
+ // typecheck and compile the same .ts/.tsrx source that is executed.
10
+ import type { Props as NativeAreaProps } from './cartesian/Area.tsrx';
11
+ import type { Props as NativePieProps } from './polar/Pie.tsrx';
15
12
  export { Surface } from './container/Surface.tsrx';
16
13
  export { Layer } from './container/Layer.tsrx';
17
14
  export { Cell } from './component/Cell';
@@ -71,34 +68,37 @@ export { PolarRadiusAxis } from './polar/PolarRadiusAxis.tsrx';
71
68
  export { Sankey } from './chart/Sankey.tsrx';
72
69
  export { SunburstChart } from './chart/SunburstChart.tsrx';
73
70
 
74
- // Public prop contracts used by component-library wrappers. The runtime port
75
- // accepts the same prop bags as Recharts; keep these structural while the
76
- // generated declaration surface is expanded component by component.
77
- export type AreaProps<DataPointType = any, ValueAxisType = any> = Record<string, any>;
78
- export type BarProps = Record<string, any>;
79
- export type BarShapeProps = Record<string, any>;
80
- export type BrushProps = Record<string, any>;
81
- export type CartesianGridProps = Record<string, any>;
82
- export type DotProps = Record<string, any>;
83
- export type FunnelProps = Record<string, any>;
84
- export type LabelListProps = Record<string, any>;
85
- export type LabelProps = Record<string, any>;
86
- export type LineProps = Record<string, any>;
87
- export type PieLabel = (props: Record<string, any>) => unknown;
88
- export type PieProps<DataPointType = any, DataValueType = any> = Record<string, any>;
89
- export type PolarAngleAxisProps = Record<string, any>;
90
- export type PolarGridProps = Record<string, any>;
91
- export type PolarRadiusAxisProps = Record<string, any>;
92
- export type RadarProps = Record<string, any>;
93
- export type RadialBarProps = Record<string, any>;
94
- export type ReferenceLineProps = Record<string, any>;
95
- export type SankeyProps = Record<string, any>;
96
- export type ScatterProps = Record<string, any>;
97
- export type SunburstChartProps = Record<string, any>;
98
- export type TreemapProps = Record<string, any>;
99
- export type XAxisProps = Record<string, any>;
100
- export type YAxisProps = Record<string, any>;
101
- export type ZAxisProps = Record<string, any>;
71
+ // Public aliases come from each component's implementation, not a parallel
72
+ // declaration facade. Keep the previously defaulted Area/Pie generic aliases.
73
+ export type AreaProps<DataPointType = unknown, ValueAxisType = unknown> = NativeAreaProps<
74
+ DataPointType,
75
+ ValueAxisType
76
+ >;
77
+ export type PieProps<DataPointType = unknown, DataValueType = unknown> = NativePieProps<
78
+ DataPointType,
79
+ DataValueType
80
+ >;
81
+ export type { Props as BarProps, BarShapeProps } from './cartesian/Bar.tsrx';
82
+ export type { Props as CartesianGridProps } from './cartesian/CartesianGrid.tsrx';
83
+ export type { Props as DotProps } from './shape/Dot.tsrx';
84
+ export type { Props as FunnelProps } from './cartesian/Funnel.tsrx';
85
+ export type { Props as LabelListProps } from './component/LabelList.tsrx';
86
+ export type { Props as LabelProps } from './component/Label.tsrx';
87
+ export type { Props as LineProps } from './cartesian/Line.tsrx';
88
+ export type { PieLabel, PieLabelRenderProps } from './polar/Pie.tsrx';
89
+ export type { Props as PolarAngleAxisProps } from './polar/PolarAngleAxis.tsrx';
90
+ export type { Props as PolarGridProps } from './polar/PolarGrid.tsrx';
91
+ export type { Props as PolarRadiusAxisProps } from './polar/PolarRadiusAxis.tsrx';
92
+ export type { Props as RadarProps } from './polar/Radar.tsrx';
93
+ export type { RadialBarProps } from './polar/RadialBar.tsrx';
94
+ export type { Props as ReferenceLineProps } from './cartesian/ReferenceLine.tsrx';
95
+ export type { Props as SankeyProps } from './chart/Sankey.tsrx';
96
+ export type { Props as ScatterProps } from './cartesian/Scatter.tsrx';
97
+ export type { SunburstChartProps } from './chart/SunburstChart.tsrx';
98
+ export type { Props as XAxisProps } from './cartesian/XAxis.tsrx';
99
+ export type { Props as YAxisProps } from './cartesian/YAxis.tsrx';
100
+ export type { Props as ZAxisProps } from './cartesian/ZAxis.tsrx';
101
+ export type { RechartsProps, BrushProps, TreemapProps } from './legacy-props';
102
102
  export { CartesianAxis } from './cartesian/CartesianAxis.tsrx';
103
103
  export { BarStack } from './cartesian/BarStack.tsrx';
104
104
  export { LineDrawShape } from './cartesian/LineDrawShape.tsrx';
@@ -0,0 +1,129 @@
1
+ import type { OctaneNode } from 'octane';
2
+
3
+ type Render = OctaneNode | ((...args: any[]) => OctaneNode);
4
+ type Handler = (...args: any[]) => void;
5
+
6
+ /**
7
+ * Legacy broad prop bag retained for source compatibility only.
8
+ * @deprecated Use the specific exported component prop type instead.
9
+ * No rendered component uses this interface as its props contract.
10
+ */
11
+ export interface RechartsProps {
12
+ accessibilityLayer?: boolean;
13
+ allowDecimals?: boolean;
14
+ activeBar?: Render | Record<string, unknown>;
15
+ activeDot?: Render;
16
+ activeIndex?: number;
17
+ activeShape?: Render | Record<string, unknown>;
18
+ angle?: number;
19
+ animationBegin?: number;
20
+ animationDuration?: number;
21
+ animationEasing?: string;
22
+ aspect?: number;
23
+ axisLine?: boolean | Record<string, unknown>;
24
+ barCategoryGap?: number | string;
25
+ barGap?: number | string;
26
+ barSize?: number | string;
27
+ baseValue?: number | 'dataMin' | 'dataMax';
28
+ background?: Render | Record<string, unknown>;
29
+ children?: OctaneNode;
30
+ className?: string;
31
+ color?: string;
32
+ connectNulls?: boolean;
33
+ content?: Render | Record<string, unknown>;
34
+ cursor?: Render | Record<string, unknown>;
35
+ cx?: number | string;
36
+ cy?: number | string;
37
+ data?: readonly unknown[];
38
+ dataKey?: string | number | ((entry: unknown) => unknown);
39
+ debounce?: number;
40
+ domain?: readonly unknown[];
41
+ dot?: Render | Record<string, unknown>;
42
+ dy?: number | string;
43
+ endAngle?: number;
44
+ fill?: string;
45
+ fillOpacity?: number;
46
+ fontFamily?: string;
47
+ fontSize?: number | string;
48
+ formatter?: (...args: any[]) => OctaneNode;
49
+ height?: number | string;
50
+ hide?: boolean;
51
+ horizontal?: boolean;
52
+ id?: string;
53
+ innerRadius?: number | string;
54
+ interval?: number | string;
55
+ isAnimationActive?: boolean;
56
+ label?: Render | Record<string, unknown>;
57
+ labelLine?: boolean | Record<string, unknown>;
58
+ labelFormatter?: (...args: any[]) => OctaneNode;
59
+ layout?: 'horizontal' | 'vertical' | 'centric' | 'radial';
60
+ legendType?: string;
61
+ line?: boolean | Record<string, unknown>;
62
+ link?: Render | Record<string, unknown>;
63
+ linkCurvature?: number;
64
+ margin?: number | { top?: number; right?: number; bottom?: number; left?: number };
65
+ maxBarSize?: number;
66
+ maxHeight?: number;
67
+ minTickGap?: number;
68
+ minHeight?: number | string;
69
+ minPointSize?: number | ((value: unknown) => number);
70
+ minWidth?: number | string;
71
+ name?: string | number;
72
+ nameKey?: string | number | ((entry: unknown) => unknown);
73
+ node?: Render | Record<string, unknown>;
74
+ nodePadding?: number;
75
+ nodeWidth?: number;
76
+ onAnimationEnd?: Handler;
77
+ onAnimationStart?: Handler;
78
+ onClick?: Handler;
79
+ onMouseEnter?: Handler;
80
+ onMouseLeave?: Handler;
81
+ onResize?: (width: number, height: number) => void;
82
+ orientation?: string;
83
+ outerRadius?: number | string;
84
+ offset?: number;
85
+ paddingAngle?: number;
86
+ padding?: number | { top?: number; right?: number; bottom?: number; left?: number };
87
+ payload?: Record<string, any> | readonly Record<string, any>[];
88
+ position?: string | { x?: number; y?: number };
89
+ radius?: number | readonly number[];
90
+ range?: readonly number[];
91
+ ref?: unknown;
92
+ reversed?: boolean;
93
+ ringPadding?: number;
94
+ scale?: string | ((value: unknown) => unknown);
95
+ shape?: Render | Record<string, unknown>;
96
+ stackId?: string | number;
97
+ stackOffset?: string;
98
+ startAngle?: number;
99
+ stroke?: string;
100
+ strokeDasharray?: string | number;
101
+ strokeOpacity?: number;
102
+ strokeWidth?: number;
103
+ style?: object;
104
+ syncId?: string | number;
105
+ textAnchor?: string;
106
+ textOptions?: Record<string, unknown>;
107
+ tick?: Render | Record<string, unknown>;
108
+ tickCount?: number;
109
+ tickFormatter?: (value: any, index: number) => string;
110
+ tickLine?: boolean | Record<string, unknown>;
111
+ ticks?: readonly unknown[];
112
+ tooltipType?: string;
113
+ type?: string;
114
+ unit?: string | number;
115
+ valueKey?: string | number | ((entry: unknown) => unknown);
116
+ vertical?: boolean;
117
+ verticalAlign?: 'top' | 'middle' | 'bottom';
118
+ iterations?: number;
119
+ width?: number | string;
120
+ xAxisId?: string | number;
121
+ yAxisId?: string | number;
122
+ zAxisId?: string | number;
123
+ }
124
+
125
+ /** @deprecated Brush is not implemented by the Octane runtime port. */
126
+ export type BrushProps = RechartsProps;
127
+
128
+ /** @deprecated Treemap is not implemented by the Octane runtime port. */
129
+ export type TreemapProps = RechartsProps;
@@ -1,14 +1,24 @@
1
+ import type { RegisteredCell } from '../context/CellsContext.ts';
2
+
3
+ import type {
4
+ MutableRefObject,
5
+ NativeMouseEvent,
6
+ NativeTouchEvent,
7
+ OctaneElement,
8
+ OctaneNode,
9
+ SVGProps,
10
+ } from '../util/OctaneTypes.ts';
1
11
  import * as React from 'octane';
2
- import { MutableRefObject, ReactElement, ReactNode, SVGProps, useMemo, useRef } from 'octane';
12
+ import { useMemo, useRef } from 'octane';
3
13
  import get from 'es-toolkit/compat/get';
4
14
 
5
15
  import { clsx } from 'clsx';
6
16
  import { selectPieLegend, selectPieSectors } from '../state/selectors/pieSelectors';
7
17
  import { useAppSelector } from '../state/hooks';
8
- import { Layer } from '../container/Layer';
9
- import { Curve, Props as CurveProps } from '../shape/Curve';
10
- import { Sector } from '../shape/Sector';
11
- import { Text } from '../component/Text';
18
+ import { Layer } from '../container/Layer.tsrx';
19
+ import { Curve, Props as CurveProps } from '../shape/Curve.tsrx';
20
+ import { Sector } from '../shape/Sector.tsrx';
21
+ import { Text, type RenderableText, type TextAnchor } from '../component/Text.tsrx';
12
22
  import { getMaxRadius, polarToCartesian } from '../util/PolarUtils';
13
23
  import { getPercentValue, interpolate, isNumber, mathSign } from '../util/DataUtils';
14
24
  import { getTooltipNameProp, getValueByDataKey } from '../util/ChartUtils';
@@ -29,7 +39,7 @@ import {
29
39
  ShapeAnimationProps,
30
40
  TooltipType,
31
41
  } from '../util/types';
32
- import { Shape } from '../util/ActiveShapeUtils';
42
+ import { Shape } from '../util/ActiveShapeUtils.tsrx';
33
43
  import {
34
44
  TooltipTriggerInfo,
35
45
  useMouseClickItemDispatch,
@@ -38,7 +48,7 @@ import {
38
48
  } from '../context/tooltipContext';
39
49
  import { TooltipPayload, TooltipPayloadConfiguration } from '../state/tooltipSlice';
40
50
  import { SetTooltipEntrySettings } from '../state/SetTooltipEntrySettings';
41
- import { Formatter } from '../component/DefaultTooltipContent';
51
+ import { Formatter } from '../component/DefaultTooltipContent.tsrx';
42
52
  import {
43
53
  selectActiveTooltipDataKey,
44
54
  selectActiveTooltipGraphicalItemId,
@@ -53,10 +63,10 @@ import {
53
63
  AnimatedItems,
54
64
  AnimationInterpolateFn,
55
65
  useAnimationCallbacks,
56
- } from '../animation/AnimatedItems';
66
+ } from '../animation/AnimatedItems.tsrx';
57
67
  import { AnimationMatchByProp, matchAppend } from '../animation/matchBy';
58
68
  import { RequiresDefaultProps, resolveDefaultProps } from '../util/resolveDefaultProps';
59
- import { RegisterGraphicalItemId } from '../context/RegisterGraphicalItemId';
69
+ import { RegisterGraphicalItemId } from '../context/RegisterGraphicalItemId.tsrx';
60
70
  import { SetPolarGraphicalItem } from '../state/SetGraphicalItem';
61
71
  import type { PiePresentationProps, PieSettings } from '../state/types/PieSettings';
62
72
  import {
@@ -69,9 +79,9 @@ import {
69
79
  PolarLabelListContextProvider,
70
80
  PolarLabelListEntry,
71
81
  Props as LabelListProps,
72
- } from '../component/LabelList';
82
+ } from '../component/LabelList.tsrx';
73
83
  import { GraphicalItemId } from '../state/graphicalItemsSlice';
74
- import { ZIndexable, ZIndexLayer } from '../zIndex/ZIndexLayer';
84
+ import { ZIndexable, ZIndexLayer } from '../zIndex/ZIndexLayer.tsrx';
75
85
  import { DefaultZIndexes } from '../zIndex/DefaultZIndexes';
76
86
  import { ChartData } from '../state/chartDataSlice';
77
87
  import { getClassNameFromUnknown } from '../util/getClassNameFromUnknown';
@@ -118,24 +128,27 @@ interface PieDef {
118
128
  }
119
129
 
120
130
  type PieLabelLine =
121
- | ReactElement<SVGElement>
122
- | ((props: any) => ReactElement<SVGElement>)
131
+ | OctaneElement<CurveProps>
132
+ | ((props: CurveProps & { index: number }) => OctaneNode)
123
133
  | SVGProps<SVGPathElement>
124
134
  | boolean;
125
135
 
126
136
  interface PieLabelExtraProps {
127
137
  stroke: string;
128
138
  index: number;
129
- textAnchor: string;
139
+ textAnchor: TextAnchor;
130
140
  }
131
141
 
132
142
  export type PieLabelRenderProps =
133
143
  Omit<SVGPropsNoEvents<PieSvgAttributes>, 'offset'> & Omit<
134
144
  PieSectorDataItem,
135
- 'offset'
136
- > & PieLabelExtraProps & Coordinate;
145
+ 'offset' | 'ref'
146
+ > & Pick<SVGProps<SVGTextElement>, 'ref'> & PieLabelExtraProps & Coordinate;
137
147
 
138
- export type LabelListPropsWithPosition = LabelListProps & { position: LabelListProps['position'] };
148
+ export type LabelListPropsWithPosition =
149
+ Omit<LabelListProps, keyof PieCoordinate> & Partial<PieCoordinate> & {
150
+ position: LabelListProps['position'];
151
+ };
139
152
 
140
153
  /**
141
154
  * The `label` prop in Pie accepts a variety of alternatives.
@@ -161,12 +174,12 @@ export type PieLabel =
161
174
  * If label prop is a function, or a React component, it will be called once for each label.
162
175
  * The result of each call will be rendered.
163
176
  */
164
- ((props: PieLabelRenderProps) => ReactNode | ReactElement<SVGElement>)
177
+ ((props: PieLabelRenderProps) => RenderableText | OctaneElement<PieLabelRenderProps>)
165
178
  | /*
166
- * If label prop is a ReactElement, it will get cloned and receive brand-new surprise props.
179
+ * If label prop is a OctaneElement, it will get cloned and receive brand-new surprise props.
167
180
  * I do not recommend this variant
168
181
  */
169
- ReactElement<SVGElement>;
182
+ OctaneElement<PieLabelRenderProps>;
170
183
 
171
184
  export type PieSectorData =
172
185
  GeometrySector & TooltipTriggerInfo & {
@@ -208,58 +221,58 @@ interface PieEvents {
208
221
  /**
209
222
  * The customized event handler of click on the sectors in this group.
210
223
  */
211
- onClick?: (data: PieSectorDataItem, index: number, e: React.MouseEvent<
224
+ onClick?: (data: PieSectorDataItem, index: number, e: NativeMouseEvent<
212
225
  SVGGraphicsElement
213
226
  >) => void;
214
227
  /**
215
228
  * The customized event handler of mousedown on the sectors in this group.
216
229
  */
217
- onMouseDown?: (data: PieSectorDataItem, index: number, e: React.MouseEvent<
230
+ onMouseDown?: (data: PieSectorDataItem, index: number, e: NativeMouseEvent<
218
231
  SVGGraphicsElement
219
232
  >) => void;
220
233
  /**
221
234
  * The customized event handler of mouseup on the sectors in this group.
222
235
  */
223
- onMouseUp?: (data: PieSectorDataItem, index: number, e: React.MouseEvent<
236
+ onMouseUp?: (data: PieSectorDataItem, index: number, e: NativeMouseEvent<
224
237
  SVGGraphicsElement
225
238
  >) => void;
226
239
  /**
227
240
  * The customized event handler of mousemove on the sectors in this group.
228
241
  */
229
- onMouseMove?: (data: PieSectorDataItem, index: number, e: React.MouseEvent<
242
+ onMouseMove?: (data: PieSectorDataItem, index: number, e: NativeMouseEvent<
230
243
  SVGGraphicsElement
231
244
  >) => void;
232
245
  /**
233
246
  * The customized event handler of mouseover on the sectors in this group.
234
247
  */
235
- onMouseOver?: (data: PieSectorDataItem, index: number, e: React.MouseEvent<
248
+ onMouseOver?: (data: PieSectorDataItem, index: number, e: NativeMouseEvent<
236
249
  SVGGraphicsElement
237
250
  >) => void;
238
251
  /**
239
252
  * The customized event handler of mouseout on the sectors in this group.
240
253
  */
241
- onMouseOut?: (data: PieSectorDataItem, index: number, e: React.MouseEvent<
254
+ onMouseOut?: (data: PieSectorDataItem, index: number, e: NativeMouseEvent<
242
255
  SVGGraphicsElement
243
256
  >) => void;
244
257
  /**
245
258
  * The customized event handler of mouseenter on the sectors in this group.
246
259
  */
247
- onMouseEnter?: (data: PieSectorDataItem, index: number, e: React.MouseEvent<
260
+ onMouseEnter?: (data: PieSectorDataItem, index: number, e: NativeMouseEvent<
248
261
  SVGGraphicsElement
249
262
  >) => void;
250
263
  /**
251
264
  * The customized event handler of mouseleave on the sectors in this group.
252
265
  */
253
- onMouseLeave?: (data: PieSectorDataItem, index: number, e: React.MouseEvent<
266
+ onMouseLeave?: (data: PieSectorDataItem, index: number, e: NativeMouseEvent<
254
267
  SVGGraphicsElement
255
268
  >) => void;
256
- onTouchStart?: (data: PieSectorDataItem, index: number, e: React.TouchEvent<
269
+ onTouchStart?: (data: PieSectorDataItem, index: number, e: NativeTouchEvent<
257
270
  SVGGraphicsElement
258
271
  >) => void;
259
- onTouchMove?: (data: PieSectorDataItem, index: number, e: React.TouchEvent<
272
+ onTouchMove?: (data: PieSectorDataItem, index: number, e: NativeTouchEvent<
260
273
  SVGGraphicsElement
261
274
  >) => void;
262
- onTouchEnd?: (data: PieSectorDataItem, index: number, e: React.TouchEvent<
275
+ onTouchEnd?: (data: PieSectorDataItem, index: number, e: NativeTouchEvent<
263
276
  SVGGraphicsElement
264
277
  >) => void;
265
278
  }
@@ -283,7 +296,7 @@ interface PieProps<DataPointType = any, DataValueType = any> extends DataProvide
283
296
  * @example <Pie activeShape={<CustomActiveShape />} />
284
297
  * @example https://recharts.github.io/examples/CustomActiveShapePieChart
285
298
  */
286
- activeShape?: ActiveShape<PieSectorDataItem>;
299
+ activeShape?: ActiveShape<PieSectorDataItem, SVGPathElement>;
287
300
  /**
288
301
  * Specifies when the animation should begin, the unit of this option is ms.
289
302
  * @defaultValue 400
@@ -348,7 +361,7 @@ interface PieProps<DataPointType = any, DataValueType = any> extends DataProvide
348
361
  * The shape of inactive sector.
349
362
  * @deprecated Use the `shape` prop to modify each sector.
350
363
  */
351
- inactiveShape?: ActiveShape<PieSectorDataItem>;
364
+ inactiveShape?: ActiveShape<PieSectorDataItem, SVGPathElement>;
352
365
  /**
353
366
  * If set false, animation will be disabled.
354
367
  * If set "auto", the animation will be disabled in SSR and will respect the user's prefers-reduced-motion system preference for accessibility.
@@ -361,7 +374,7 @@ interface PieProps<DataPointType = any, DataValueType = any> extends DataProvide
361
374
  * - `false`: no labels are rendered;
362
375
  * - `object` that has `position` prop: the props of LabelList component;
363
376
  * - `object` that does not have `position` prop: the props of a custom Pie label (similar to Label with position "outside"); this variant supports `labelLine`
364
- * - `ReactElement`: a custom SVG label element, such as `<text>` or `<g>`.
377
+ * - `OctaneElement`: a custom SVG label element, such as `<text>` or `<g>`.
365
378
  * HTML elements such as `<div>` are not valid inside the chart SVG and may trigger React DOM warnings.
366
379
  * - `function`: a render function of custom label.
367
380
  *
@@ -375,7 +388,7 @@ interface PieProps<DataPointType = any, DataValueType = any> extends DataProvide
375
388
  /**
376
389
  * If false set, label lines will not be drawn. If true set, label lines will be drawn which have the props calculated internally.
377
390
  * If object set, label lines will be drawn which have the props merged by the internal calculated props and the option.
378
- * If ReactElement set, the option can be the custom label line element.
391
+ * If OctaneElement set, the option can be the custom label line element.
379
392
  * If set a function, the function will be called to render customized label line.
380
393
  * @defaultValue true
381
394
  * @example <Pie labelLine={<CustomizedLabelLine />} />
@@ -456,9 +469,10 @@ export type PieCoordinate = {
456
469
  };
457
470
 
458
471
  const defaultPieSectorShape = Sector;
472
+ const PieSectorShape = Shape<PieSectorShapeProps, SVGPathElement>;
459
473
 
460
474
  function SetPiePayloadLegend(props: {
461
- cells: ReadonlyArray<ReactElement> | undefined;
475
+ cells: ReadonlyArray<RegisteredCell> | undefined;
462
476
  id: GraphicalItemId;
463
477
  }) {
464
478
  const legendPayload = useAppSelector((state) => selectPieLegend(state, props.id, props.cells));
@@ -474,18 +488,18 @@ type PieSectorsProps =
474
488
  /**
475
489
  * @deprecated
476
490
  */
477
- activeShape: ActiveShape<Readonly<PieSectorDataItem>> | undefined;
491
+ activeShape: ActiveShape<Readonly<PieSectorDataItem>, SVGPathElement> | undefined;
478
492
  /**
479
493
  * @deprecated
480
494
  */
481
- inactiveShape: ActiveShape<Readonly<PieSectorDataItem>> | undefined;
495
+ inactiveShape: ActiveShape<Readonly<PieSectorDataItem>, SVGPathElement> | undefined;
482
496
  shape: PieShape;
483
497
  allOtherPieProps: WithoutId<InternalProps>;
484
498
  id: GraphicalItemId;
485
499
  };
486
500
 
487
501
  function getActiveShapeFill(
488
- activeShape: ActiveShape<Readonly<PieSectorDataItem>> | undefined,
502
+ activeShape: ActiveShape<Readonly<PieSectorDataItem>, SVGPathElement> | undefined,
489
503
  ): string | undefined {
490
504
  // activeShape can be boolean/function/element/object; only element/object can carry a static fill value.
491
505
  if (
@@ -494,7 +508,11 @@ function getActiveShapeFill(
494
508
  return undefined;
495
509
  }
496
510
 
497
- if (React.isValidElement(activeShape)) {
511
+ if (
512
+ React.isValidElement<Partial<Readonly<PieSectorDataItem>> & SVGProps<SVGPathElement>>(
513
+ activeShape,
514
+ )
515
+ ) {
498
516
  // React element form: <Sector fill="..."/> or custom element with fill prop.
499
517
  const fill = activeShape.props?.fill;
500
518
  return typeof fill === 'string' ? fill : undefined;
@@ -617,9 +635,8 @@ const parseDeltaAngle = (startAngle: number, endAngle: number) => {
617
635
  return sign * deltaAngle;
618
636
  };
619
637
 
620
- const renderLabelLineItem = (option: PieLabelLine, props: CurveProps) => {
621
- if (React.isValidElement(option)) {
622
- // @ts-expect-error we can't know if the type of props matches the element
638
+ const renderLabelLineItem = (option: PieLabelLine, props: CurveProps & { index: number }) => {
639
+ if (React.isValidElement<CurveProps>(option)) {
623
640
  return React.cloneElement(option, props);
624
641
  }
625
642
  if (typeof option === 'function') {
@@ -635,24 +652,20 @@ const renderLabelLineItem = (option: PieLabelLine, props: CurveProps) => {
635
652
  return <Curve {...otherProps} type="linear" className={className} />;
636
653
  };
637
654
 
638
- const renderLabelItem = (option: PieLabel, props: PieLabelRenderProps, value: unknown) => {
639
- if (React.isValidElement(option)) {
640
- // @ts-expect-error element cloning is not typed
655
+ const renderLabelItem = (option: PieLabel, props: PieLabelRenderProps, value: RenderableText) => {
656
+ if (React.isValidElement<PieLabelRenderProps>(option)) {
641
657
  return React.cloneElement(option, props);
642
658
  }
643
- let label = value;
659
+ let label: RenderableText | OctaneElement<PieLabelRenderProps> = value;
644
660
  if (typeof option === 'function') {
645
661
  label = option(props);
646
- if (React.isValidElement(label)) {
662
+ if (React.isValidElement<PieLabelRenderProps>(label)) {
647
663
  return label;
648
664
  }
649
665
  }
650
666
 
651
667
  const className = clsx('recharts-pie-label-text', getClassNameFromUnknown(option));
652
- return <Text {...props} alignmentBaseline="middle" className={className}>
653
- {/* @ts-expect-error we pass unknown but Text expects string | number */}
654
- {label}
655
- </Text>;
668
+ return <Text {...props} alignmentBaseline="middle" className={className}>{label}</Text>;
656
669
  };
657
670
 
658
671
  function PieLabels({
@@ -678,6 +691,9 @@ function PieLabels({
678
691
  20;
679
692
 
680
693
  const labels = sectors.map((entry, i) => {
694
+ // The Cell ref belongs to its sector, not to the label or connector.
695
+ // Label and labelLine options may supply their own native refs below.
696
+ const { ref: sectorRef, ...labelEntry } = entry;
681
697
  const midAngle = (entry.startAngle + entry.endAngle) / 2;
682
698
  const endPoint = polarToCartesian(
683
699
  entry.cx,
@@ -687,20 +703,17 @@ function PieLabels({
687
703
  );
688
704
  const labelProps: PieLabelRenderProps = {
689
705
  ...pieProps,
690
- ...entry,
691
- // @ts-expect-error customLabelProps is contributing unknown props
706
+ ...labelEntry,
692
707
  stroke: 'none',
693
708
  ...customLabelProps,
694
709
  index: i,
695
710
  textAnchor: getTextAnchor(endPoint.x, entry.cx),
696
711
  ...endPoint,
697
712
  };
698
- const lineProps: CurveProps = {
713
+ const lineProps: CurveProps & { index: number } = {
699
714
  ...pieProps,
700
- ...entry,
701
- // @ts-expect-error customLabelLineProps is contributing unknown props
715
+ ...labelEntry,
702
716
  fill: 'none',
703
- // @ts-expect-error customLabelLineProps is contributing unknown props
704
717
  stroke: entry.fill,
705
718
  ...customLabelLineProps,
706
719
  index: i,
@@ -714,8 +727,11 @@ function PieLabels({
714
727
  >
715
728
  <Layer>
716
729
  {labelLine && renderLabelLineItem(labelLine, lineProps)}
717
- {/* @ts-expect-error we send the full PieSectorDataItem */}
718
- {renderLabelItem(label, labelProps, getValueByDataKey(entry, dataKey))}
730
+ {renderLabelItem(
731
+ label,
732
+ labelProps,
733
+ getValueByDataKey<unknown, RenderableText>(entry, dataKey),
734
+ )}
719
735
  </Layer>
720
736
  </ZIndexLayer>;
721
737
  });
@@ -815,7 +831,7 @@ function PieSectors(props: PieSectorsProps) {
815
831
  onMouseLeave={onMouseLeaveFromContext(entry, i)}
816
832
  onClick={onClickFromContext(entry, i)}
817
833
  >
818
- <Shape
834
+ <PieSectorShape
819
835
  option={sectorOptions ?? shape}
820
836
  DefaultShape={defaultPieSectorShape}
821
837
  shapeProps={sectorProps}
@@ -833,7 +849,7 @@ export function computePieSectors({
833
849
  }: {
834
850
  pieSettings: PieSettings;
835
851
  displayedData: ChartData;
836
- cells: ReadonlyArray<ReactElement> | undefined;
852
+ cells: ReadonlyArray<RegisteredCell> | undefined;
837
853
  offset: ChartOffsetInternal;
838
854
  }): ReadonlyArray<PieSectorDataItem> | undefined {
839
855
  const { cornerRadius, startAngle, endAngle, dataKey, nameKey, tooltipType } = pieSettings;
@@ -877,8 +893,10 @@ export function computePieSectors({
877
893
  const percent = (isNumber(val) ? val : 0) / sum;
878
894
  let tempStartAngle;
879
895
 
880
- // @ts-expect-error can't spread unknown
881
- const entryWithCellInfo: RealPieData = { ...entry, ...cells && cells[i] && cells[i].props };
896
+ const entryWithCellInfo: RealPieData = {
897
+ ...entry as Record<string, unknown>,
898
+ ...cells && cells[i] && cells[i].props,
899
+ };
882
900
  const sectorColor =
883
901
  entryWithCellInfo != null && 'fill' in entryWithCellInfo &&
884
902
  typeof entryWithCellInfo.fill === 'string'
@@ -947,7 +965,7 @@ function PieLabelListProvider({
947
965
  }: {
948
966
  showLabels: boolean;
949
967
  sectors: ReadonlyArray<PieSectorDataItem>;
950
- children: ReactNode;
968
+ children: OctaneNode;
951
969
  }) {
952
970
  const labelListEntries: ReadonlyArray<PolarLabelListEntry> = useMemo(() => {
953
971
  if (!showLabels || !sectors) {
@@ -1183,8 +1201,13 @@ type PropsWithResolvedDefaults = RequiresDefaultProps<Props, typeof defaultPiePr
1183
1201
  * @provides LabelListContext
1184
1202
  * @provides CellReader
1185
1203
  */
1186
- function PieFn(outsideProps: Props) {
1187
- const props: PropsWithResolvedDefaults = resolveDefaultProps(outsideProps, defaultPieProps);
1204
+ function PieFn<DataPointType = any, DataValueType = any>(
1205
+ outsideProps: Props<DataPointType, DataValueType>,
1206
+ ) {
1207
+ const props: PropsWithResolvedDefaults = resolveDefaultProps<Props, typeof defaultPieProps>(
1208
+ outsideProps,
1209
+ defaultPieProps,
1210
+ );
1188
1211
  const { id: externalId, ...propsWithoutId } = props;
1189
1212
  const presentationProps: PiePresentationProps | null = svgPropertiesNoEvents(propsWithoutId);
1190
1213
 
@@ -1219,6 +1242,5 @@ function PieFn(outsideProps: Props) {
1219
1242
  </>}
1220
1243
  </RegisterGraphicalItemId>;
1221
1244
  }
1222
- export const Pie = PieFn as (outsideProps: Props<DataPointType, DataValueType>) => ReactElement;
1223
- // @ts-expect-error we need to set the displayName for debugging purposes
1245
+ export const Pie = PieFn as typeof PieFn & { displayName?: string };
1224
1246
  Pie.displayName = 'Pie';