@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,14 +1,26 @@
1
+ import type { SVGProps } from '../util/OctaneTypes.ts';
2
+
3
+ interface CrossProps {
4
+ x?: number;
5
+ y?: number;
6
+ width?: number;
7
+ height?: number;
8
+ top?: number;
9
+ left?: number;
10
+ className?: SVGProps<SVGPathElement>['className'];
11
+ }
12
+ export type Props = SVGProps<SVGPathElement> & CrossProps;
1
13
  // Port of shape/Cross.tsx — the axis-cursor crosshair (a vertical + horizontal
2
14
  // line pair as one path).
3
15
  import { clsx } from 'clsx';
4
16
  import { isNumber } from '../util/DataUtils';
5
17
  import { svgPropertiesAndEvents } from '../util/svgPropertiesAndEvents.ts';
6
18
 
7
- function getPath(x, y, width, height, top, left) {
19
+ function getPath(x: number, y: number, width: number, height: number, top: number, left: number) {
8
20
  return 'M' + x + ',' + top + 'v' + height + 'M' + left + ',' + y + 'h' + width;
9
21
  }
10
22
 
11
- export function Cross(crossProps) {
23
+ export function Cross(crossProps: Props) {
12
24
  const { x = 0, y = 0, top = 0, left = 0, width = 0, height = 0, className, ...rest } = crossProps;
13
25
  const props = { x, y, top, left, width, height, ...rest };
14
26
  if (
@@ -1,3 +1,83 @@
1
+ import type { Ref, SVGProps } from '../util/OctaneTypes.ts';
2
+ import type {
3
+ Area as D3AreaCurve,
4
+ CurveFactory,
5
+ Line as D3LineCurve,
6
+ } from 'victory-vendor/d3-shape';
7
+ import type {
8
+ Coordinate,
9
+ LayoutType,
10
+ NullableCoordinate,
11
+ PresentationAttributesWithProps,
12
+ RechartsMouseEventHandler,
13
+ } from '../util/types';
14
+
15
+ interface CurveFactories {
16
+ [index: string]: CurveFactory;
17
+ }
18
+ export type CurveType =
19
+ | 'basis'
20
+ | 'basisClosed'
21
+ | 'basisOpen'
22
+ | 'bumpX'
23
+ | 'bumpY'
24
+ | 'bump'
25
+ | 'linear'
26
+ | 'linearClosed'
27
+ | 'natural'
28
+ | 'monotoneX'
29
+ | 'monotoneY'
30
+ | 'monotone'
31
+ | 'step'
32
+ | 'stepBefore'
33
+ | 'stepAfter'
34
+ | CurveFactory;
35
+ type AreaPoint =
36
+ Coordinate & {
37
+ base: Coordinate;
38
+ };
39
+ type NullableAreaPoint =
40
+ NullableCoordinate & {
41
+ base?: NullableCoordinate;
42
+ };
43
+ export type BaseLineType = number | ReadonlyArray<NullableCoordinate>;
44
+ interface CurveProps {
45
+ className?: SVGProps<SVGPathElement>['className'];
46
+ type?: CurveType;
47
+ layout?: LayoutType;
48
+ baseLine?: BaseLineType;
49
+ points?: ReadonlyArray<NullableCoordinate>;
50
+ connectNulls?: boolean;
51
+ path?: string;
52
+ pathRef?: Ref<SVGPathElement>;
53
+ strokeDasharray?: string | number;
54
+ }
55
+ export type CurveMouseEventHandler = RechartsMouseEventHandler<Props, SVGPathElement>;
56
+ type CurveMouseEvents = {
57
+ onClick?: CurveMouseEventHandler;
58
+ onMouseEnter?: CurveMouseEventHandler;
59
+ onMouseLeave?: CurveMouseEventHandler;
60
+ onMouseDown?: CurveMouseEventHandler;
61
+ onMouseUp?: CurveMouseEventHandler;
62
+ onMouseMove?: CurveMouseEventHandler;
63
+ onMouseOver?: CurveMouseEventHandler;
64
+ onMouseOut?: CurveMouseEventHandler;
65
+ };
66
+ export type Props =
67
+ Omit<
68
+ PresentationAttributesWithProps<CurveProps, SVGPathElement>,
69
+ | 'type'
70
+ | 'points'
71
+ | 'onClick'
72
+ | 'onMouseEnter'
73
+ | 'onMouseLeave'
74
+ | 'onMouseDown'
75
+ | 'onMouseUp'
76
+ | 'onMouseMove'
77
+ | 'onMouseOver'
78
+ | 'onMouseOut'
79
+ > & CurveMouseEvents & CurveProps;
80
+ type GetPathProps = Pick<Props, 'type' | 'points' | 'baseLine' | 'layout' | 'connectNulls'>;
1
81
  // Port of shape/Curve.tsx — the line/area path. The `d` string comes straight
2
82
  // from victory-vendor's d3-shape line/area generators (same dependency, same
3
83
  // version as upstream), so output is byte-identical by construction.
@@ -25,7 +105,7 @@ import { isWellBehavedNumber } from '../util/isWellBehavedNumber';
25
105
  import { svgPropertiesNoEvents } from '../util/svgPropertiesNoEvents';
26
106
  import { useChartLayout } from '../context/chartLayoutContext.ts';
27
107
 
28
- const CURVE_FACTORIES = {
108
+ const CURVE_FACTORIES: CurveFactories = {
29
109
  curveBasisClosed,
30
110
  curveBasisOpen,
31
111
  curveBasis,
@@ -41,12 +121,12 @@ const CURVE_FACTORIES = {
41
121
  curveStepBefore,
42
122
  };
43
123
 
44
- const defined = (p) => isWellBehavedNumber(p.x) && isWellBehavedNumber(p.y);
45
- const areaDefined = (d) => d.base != null && defined(d.base) && defined(d);
46
- const getX = (p) => p.x;
47
- const getY = (p) => p.y;
124
+ const defined = (p: NullableCoordinate) => isWellBehavedNumber(p.x) && isWellBehavedNumber(p.y);
125
+ const areaDefined = (d: NullableAreaPoint) => d.base != null && defined(d.base) && defined(d);
126
+ const getX = (p: Coordinate) => p.x;
127
+ const getY = (p: Coordinate) => p.y;
48
128
 
49
- const getCurveFactory = (type, layout) => {
129
+ const getCurveFactory = (type: CurveType, layout: LayoutType | undefined) => {
50
130
  if (typeof type === 'function') {
51
131
  return type;
52
132
  }
@@ -63,7 +143,7 @@ const getCurveFactory = (type, layout) => {
63
143
  export const defaultCurveProps = {
64
144
  connectNulls: false,
65
145
  type: 'linear',
66
- };
146
+ } as const satisfies Partial<Props>;
67
147
 
68
148
  /**
69
149
  * Calculate the path of curve. Returns null if points is an empty array.
@@ -75,52 +155,60 @@ export const getPath = ({
75
155
  baseLine,
76
156
  layout,
77
157
  connectNulls = defaultCurveProps.connectNulls,
78
- }) => {
158
+ }: GetPathProps): string | null => {
79
159
  const curveFactory = getCurveFactory(type, layout);
80
- const formatPoints =
160
+ const formatPoints: ReadonlyArray<NullableCoordinate> =
81
161
  connectNulls ? points.filter(defined) : points;
82
162
 
83
163
  // An area chart's array `baseLine` pairs each point with its baseline
84
164
  // counterpart FIRST, so the `defined` filter drops both sides together.
85
165
  if (Array.isArray(baseLine)) {
86
- const areaPoints = points.map((entry, index) => ({ ...entry, base: baseLine[index] }));
87
- let lineFunction;
166
+ const areaPoints: ReadonlyArray<NullableAreaPoint> = points.map(
167
+ (entry, index) => ({ ...entry, base: baseLine[index] }),
168
+ );
169
+ let lineFunction: D3AreaCurve<AreaPoint>;
88
170
  if (layout === 'vertical') {
89
- lineFunction = shapeArea().y(getY).x1(getX).x0((d) => d.base.x);
171
+ lineFunction = shapeArea<AreaPoint>().y(getY).x1(getX).x0((d) => d.base.x);
90
172
  } else {
91
- lineFunction = shapeArea().x(getX).y1(getY).y0((d) => d.base.y);
173
+ lineFunction = shapeArea<AreaPoint>().x(getX).y1(getY).y0((d) => d.base.y);
92
174
  }
93
- const nullableLineFunction = lineFunction.defined(areaDefined).curve(curveFactory);
94
- const finalPoints =
175
+ // d3 runs the defined predicate before coordinate accessors; its single
176
+ // generic cannot express the nullable inputs accepted after this guard.
177
+ const nullableLineFunction = lineFunction.defined(areaDefined).curve(
178
+ curveFactory,
179
+ ) as D3AreaCurve<NullableAreaPoint>;
180
+ const finalPoints: ReadonlyArray<NullableAreaPoint> =
95
181
  connectNulls ? areaPoints.filter(areaDefined) : areaPoints;
96
182
  return nullableLineFunction(finalPoints);
97
183
  }
98
- let lineFunction;
184
+ let lineFunction: D3LineCurve<Coordinate> | D3AreaCurve<Coordinate>;
99
185
  if (layout === 'vertical' && isNumber(baseLine)) {
100
- lineFunction = shapeArea().y(getY).x1(getX).x0(baseLine);
186
+ lineFunction = shapeArea<Coordinate>().y(getY).x1(getX).x0(baseLine);
101
187
  } else if (isNumber(baseLine)) {
102
- lineFunction = shapeArea().x(getX).y1(getY).y0(baseLine);
188
+ lineFunction = shapeArea<Coordinate>().x(getX).y1(getY).y0(baseLine);
103
189
  } else {
104
- lineFunction = shapeLine().x(getX).y(getY);
190
+ lineFunction = shapeLine<Coordinate>().x(getX).y(getY);
105
191
  }
106
- const nullableLineFunction = lineFunction.defined(defined).curve(curveFactory);
192
+ const nullableLineFunction = lineFunction.defined(defined).curve(curveFactory) as D3LineCurve<
193
+ NullableCoordinate
194
+ >;
107
195
  return nullableLineFunction(formatPoints);
108
196
  };
109
197
 
110
- export function Curve(props) {
198
+ export function Curve(props: Props) {
111
199
  const { className, points, path, pathRef } = props;
112
200
  const layout = useChartLayout();
113
201
  if ((!points || !points.length) && !path) {
114
202
  return null;
115
203
  }
116
- const getPathInput = {
204
+ const getPathInput: GetPathProps = {
117
205
  type: props.type,
118
206
  points: props.points,
119
207
  baseLine: props.baseLine,
120
208
  layout: props.layout || layout,
121
209
  connectNulls: props.connectNulls,
122
210
  };
123
- const realPath =
211
+ const realPath: string | null | undefined =
124
212
  points && points.length ? getPath(getPathInput) : path;
125
213
  return <path
126
214
  {...svgPropertiesNoEvents(props)}
@@ -1,10 +1,21 @@
1
+ import type { SVGProps } from '../util/OctaneTypes.ts';
2
+ import type { PresentationAttributesWithProps } from '../util/types';
3
+
4
+ interface DotProps {
5
+ className?: SVGProps<SVGCircleElement>['className'];
6
+ cx?: number;
7
+ cy?: number;
8
+ r?: number | string;
9
+ clipDot?: boolean;
10
+ }
11
+ export type Props = PresentationAttributesWithProps<DotProps, SVGCircleElement> & DotProps;
1
12
  // Port of shape/Dot.tsx — a circle marker.
2
13
  import { clsx } from 'clsx';
3
14
  import { adaptEventHandlers } from '../util/types.ts';
4
15
  import { svgPropertiesNoEvents } from '../util/svgPropertiesNoEvents';
5
16
  import { isNumber } from '../util/DataUtils';
6
17
 
7
- export function Dot(props) {
18
+ export function Dot(props: Props) {
8
19
  const { cx, cy, r, className } = props;
9
20
  const layerClass = clsx('recharts-dot', className);
10
21
  if (isNumber(cx) && isNumber(cy) && isNumber(r)) {
@@ -1,15 +1,33 @@
1
+ import type { NativeMouseEvent, SVGProps } from '../util/OctaneTypes.ts';
2
+ import type { Coordinate } from '../util/types';
3
+
4
+ interface PolygonProps {
5
+ className?: SVGProps<SVGPathElement>['className'];
6
+ points?: ReadonlyArray<Coordinate>;
7
+ baseLinePoints?: ReadonlyArray<Coordinate>;
8
+ connectNulls?: boolean;
9
+ onClick?: (e: NativeMouseEvent<SVGPathElement>) => void;
10
+ onMouseDown?: (e: NativeMouseEvent<SVGPathElement>) => void;
11
+ onMouseUp?: (e: NativeMouseEvent<SVGPathElement>) => void;
12
+ onMouseMove?: (e: NativeMouseEvent<SVGPathElement>) => void;
13
+ onMouseOver?: (e: NativeMouseEvent<SVGPathElement>) => void;
14
+ onMouseOut?: (e: NativeMouseEvent<SVGPathElement>) => void;
15
+ onMouseEnter?: (e: NativeMouseEvent<SVGPathElement>) => void;
16
+ onMouseLeave?: (e: NativeMouseEvent<SVGPathElement>) => void;
17
+ }
18
+ export type Props = Omit<SVGProps<SVGPathElement>, 'points'> & PolygonProps;
1
19
  // Port of shape/Polygon.tsx — closed/segmented polygon paths (Radar,
2
20
  // PolarGrid). Path strings mirror upstream's roundTemplateLiteral output.
3
21
  import { clsx } from 'clsx';
4
22
  import { svgPropertiesAndEvents } from '../util/svgPropertiesAndEvents.ts';
5
23
  import { round } from '../util/round';
6
24
 
7
- function isValidatePoint(point) {
25
+ function isValidatePoint(point: Coordinate | undefined) {
8
26
  return point != null && point.x === +point.x && point.y === +point.y;
9
27
  }
10
28
 
11
- function getParsedPoints(points = []) {
12
- let segmentPoints = [[]];
29
+ function getParsedPoints(points: ReadonlyArray<Coordinate> = []) {
30
+ let segmentPoints: Coordinate[][] = [[]];
13
31
  points.forEach((entry) => {
14
32
  const lastLink = segmentPoints[segmentPoints.length - 1];
15
33
  if (isValidatePoint(entry)) {
@@ -32,7 +50,7 @@ function getParsedPoints(points = []) {
32
50
  return segmentPoints;
33
51
  }
34
52
 
35
- function getSinglePolygonPath(points, connectNulls) {
53
+ function getSinglePolygonPath(points: ReadonlyArray<Coordinate>, connectNulls?: boolean) {
36
54
  let segmentPoints = getParsedPoints(points);
37
55
  if (connectNulls) {
38
56
  segmentPoints = [segmentPoints.reduce((res, segPoints) => [...res, ...segPoints], [])];
@@ -47,13 +65,17 @@ function getSinglePolygonPath(points, connectNulls) {
47
65
  return segmentPoints.length === 1 ? polygonPath + 'Z' : polygonPath;
48
66
  }
49
67
 
50
- function getRanglePath(points, baseLinePoints, connectNulls) {
68
+ function getRanglePath(
69
+ points: ReadonlyArray<Coordinate>,
70
+ baseLinePoints: ReadonlyArray<Coordinate>,
71
+ connectNulls?: boolean,
72
+ ) {
51
73
  const outerPath = getSinglePolygonPath(points, connectNulls);
52
74
  return (outerPath.slice(-1) === 'Z' ? outerPath.slice(0, -1) : outerPath) + 'L' +
53
75
  getSinglePolygonPath(Array.from(baseLinePoints).reverse(), connectNulls).slice(1);
54
76
  }
55
77
 
56
- export function Polygon(props) {
78
+ export function Polygon(props: Props) {
57
79
  const { points, className, baseLinePoints, connectNulls, ...others } = props;
58
80
  if (!points || !points.length) {
59
81
  return null;
@@ -1,3 +1,30 @@
1
+ import type { NativeMouseEvent, SVGProps } from '../util/OctaneTypes.ts';
2
+ import type { AnimationDuration } from '../util/types';
3
+ import type { EasingInput } from '../animation/easing';
4
+
5
+ export type RectRadius = number | [number, number, number, number];
6
+ interface RectangleProps {
7
+ className?: SVGProps<SVGPathElement>['className'];
8
+ x?: number;
9
+ y?: number;
10
+ width?: number;
11
+ height?: number;
12
+ radius?: RectRadius;
13
+ isAnimationActive?: boolean;
14
+ isUpdateAnimationActive?: boolean;
15
+ animationBegin?: number;
16
+ animationDuration?: AnimationDuration;
17
+ animationEasing?: EasingInput;
18
+ onClick?: (e: NativeMouseEvent<SVGPathElement>) => void;
19
+ onMouseDown?: (e: NativeMouseEvent<SVGPathElement>) => void;
20
+ onMouseUp?: (e: NativeMouseEvent<SVGPathElement>) => void;
21
+ onMouseMove?: (e: NativeMouseEvent<SVGPathElement>) => void;
22
+ onMouseOver?: (e: NativeMouseEvent<SVGPathElement>) => void;
23
+ onMouseOut?: (e: NativeMouseEvent<SVGPathElement>) => void;
24
+ onMouseEnter?: (e: NativeMouseEvent<SVGPathElement>) => void;
25
+ onMouseLeave?: (e: NativeMouseEvent<SVGPathElement>) => void;
26
+ }
27
+ export type Props = Omit<SVGProps<SVGPathElement>, 'radius'> & RectangleProps;
1
28
  // Port of shape/Rectangle.tsx — a rectangle path with per-corner rounding.
2
29
  // Phase 0 ports the STATIC path (isUpdateAnimationActive defaults false, and
3
30
  // standalone Rectangles never animate); the width/height update animation and
@@ -10,7 +37,7 @@ import { resolveDefaultProps } from '../util/resolveDefaultProps';
10
37
  import { round } from '../util/round';
11
38
  import { svgPropertiesAndEvents } from '../util/svgPropertiesAndEvents.ts';
12
39
 
13
- function getRectanglePath(x, y, width, height, radius) {
40
+ function getRectanglePath(x: number, y: number, width: number, height: number, radius: RectRadius) {
14
41
  const roundedWidth = round(width);
15
42
  const roundedHeight = round(height);
16
43
  const maxRadius = Math.min(Math.abs(roundedWidth) / 2, Math.abs(roundedHeight) / 2);
@@ -134,9 +161,9 @@ export const defaultRectangleProps = {
134
161
  animationBegin: 0,
135
162
  animationDuration: 1500,
136
163
  animationEasing: 'ease',
137
- };
164
+ } as const satisfies Partial<Props>;
138
165
 
139
- export function Rectangle(rectangleProps) {
166
+ export function Rectangle(rectangleProps: Props) {
140
167
  const props = resolveDefaultProps(rectangleProps, defaultRectangleProps);
141
168
  const { x, y, width, height, radius, className } = props;
142
169
 
@@ -1,3 +1,38 @@
1
+ import type { NativeMouseEvent, SVGProps } from '../util/OctaneTypes.ts';
2
+ import type { GeometrySector, GeometrySectorWithCornerRadius } from '../util/types';
3
+
4
+ interface TangentCircleDef {
5
+ cx: number;
6
+ cy: number;
7
+ radius: number;
8
+ angle: number;
9
+ sign: number;
10
+ isExternal?: boolean;
11
+ cornerRadius: number;
12
+ cornerIsExternal?: boolean;
13
+ }
14
+ interface SectorProps {
15
+ className?: SVGProps<SVGPathElement>['className'];
16
+ cx?: number;
17
+ cy?: number;
18
+ innerRadius?: number;
19
+ outerRadius?: number;
20
+ startAngle?: number;
21
+ endAngle?: number;
22
+ cornerRadius?: number;
23
+ forceCornerRadius?: boolean;
24
+ cornerIsExternal?: boolean;
25
+ onClick?: (e: NativeMouseEvent<SVGPathElement>) => void;
26
+ onMouseDown?: (e: NativeMouseEvent<SVGPathElement>) => void;
27
+ onMouseUp?: (e: NativeMouseEvent<SVGPathElement>) => void;
28
+ onMouseMove?: (e: NativeMouseEvent<SVGPathElement>) => void;
29
+ onMouseOver?: (e: NativeMouseEvent<SVGPathElement>) => void;
30
+ onMouseOut?: (e: NativeMouseEvent<SVGPathElement>) => void;
31
+ onMouseEnter?: (e: NativeMouseEvent<SVGPathElement>) => void;
32
+ onMouseLeave?: (e: NativeMouseEvent<SVGPathElement>) => void;
33
+ }
34
+ export type Props =
35
+ Omit<SVGProps<SVGPathElement>, 'cx' | 'cy' | 'dangerouslySetInnerHTML'> & Partial<SectorProps>;
1
36
  // Port of shape/Sector.tsx — the pie/radial-bar wedge (arc path with optional
2
37
  // per-corner rounding). Path strings must be BYTE-IDENTICAL to upstream:
3
38
  // recharts builds them with roundTemplateLiteral (every interpolated number
@@ -11,7 +46,7 @@ import { resolveDefaultProps } from '../util/resolveDefaultProps';
11
46
  import { svgPropertiesAndEvents } from '../util/svgPropertiesAndEvents.ts';
12
47
  import { roundTemplateLiteral } from '../util/round';
13
48
 
14
- const getDeltaAngle = (startAngle, endAngle) => {
49
+ const getDeltaAngle = (startAngle: number, endAngle: number) => {
15
50
  const sign = mathSign(endAngle - startAngle);
16
51
  const deltaAngle = Math.min(Math.abs(endAngle - startAngle), 359.999);
17
52
  return sign * deltaAngle;
@@ -26,7 +61,7 @@ const getTangentCircle = ({
26
61
  isExternal,
27
62
  cornerRadius,
28
63
  cornerIsExternal,
29
- }) => {
64
+ }: TangentCircleDef) => {
30
65
  const centerRadius = cornerRadius * (isExternal ? 1 : -1) + radius;
31
66
  const theta = Math.asin(cornerRadius / centerRadius) / RADIAN;
32
67
  const centerAngle = cornerIsExternal ? angle : angle + sign * theta;
@@ -44,7 +79,14 @@ const getTangentCircle = ({
44
79
  return { center, circleTangency, lineTangency, theta };
45
80
  };
46
81
 
47
- const getSectorPath = ({ cx, cy, innerRadius, outerRadius, startAngle, endAngle }) => {
82
+ const getSectorPath = ({
83
+ cx,
84
+ cy,
85
+ innerRadius,
86
+ outerRadius,
87
+ startAngle,
88
+ endAngle,
89
+ }: GeometrySector) => {
48
90
  const angle = getDeltaAngle(startAngle, endAngle);
49
91
 
50
92
  // When the angle of sector equals to 360, start point and end point coincide
@@ -85,7 +127,7 @@ const getSectorWithCorner = ({
85
127
  cornerIsExternal,
86
128
  startAngle,
87
129
  endAngle,
88
- }) => {
130
+ }: GeometrySectorWithCornerRadius) => {
89
131
  const sign = mathSign(endAngle - startAngle);
90
132
  const { circleTangency: soct, lineTangency: solt, theta: sot } = getTangentCircle({
91
133
  cx,
@@ -177,9 +219,9 @@ export const defaultSectorProps = {
177
219
  cornerRadius: 0,
178
220
  forceCornerRadius: false,
179
221
  cornerIsExternal: false,
180
- };
222
+ } as const satisfies Partial<Props>;
181
223
 
182
- export function Sector(sectorProps) {
224
+ export function Sector(sectorProps: Props) {
183
225
  const props = resolveDefaultProps(sectorProps, defaultSectorProps);
184
226
  const {
185
227
  cx,
@@ -1,3 +1,21 @@
1
+ import type { SVGProps } from '../util/OctaneTypes.ts';
2
+ import type { SymbolType as D3SymbolType } from 'victory-vendor/d3-shape';
3
+ import type { SymbolType } from '../util/types';
4
+
5
+ type SizeType = 'area' | 'diameter';
6
+ interface SymbolFactory {
7
+ [type: string]: D3SymbolType;
8
+ }
9
+ export interface InnerSymbolsProp {
10
+ className?: SVGProps<SVGPathElement>['className'];
11
+ type?: SymbolType;
12
+ cx?: number | null;
13
+ cy?: number | null;
14
+ size?: number;
15
+ sizeType?: SizeType;
16
+ }
17
+ export type SymbolsProps =
18
+ Omit<SVGProps<SVGPathElement>, keyof InnerSymbolsProp> & InnerSymbolsProp;
1
19
  // Port of shape/Symbols.tsx — the scatter/legend marker shapes, drawn by
2
20
  // victory-vendor's d3-shape symbol generators (byte-identical `d` output).
3
21
  import {
@@ -14,7 +32,7 @@ import { clsx } from 'clsx';
14
32
  import { isNumber, upperFirst } from '../util/DataUtils';
15
33
  import { svgPropertiesAndEvents } from '../util/svgPropertiesAndEvents.ts';
16
34
 
17
- const symbolFactories = {
35
+ const symbolFactories: SymbolFactory = {
18
36
  symbolCircle,
19
37
  symbolCross,
20
38
  symbolDiamond,
@@ -25,12 +43,12 @@ const symbolFactories = {
25
43
  };
26
44
  const RADIAN = Math.PI / 180;
27
45
 
28
- const getSymbolFactory = (type) => {
46
+ const getSymbolFactory = (type: SymbolType) => {
29
47
  const name = 'symbol' + upperFirst(type);
30
48
  return symbolFactories[name] || symbolCircle;
31
49
  };
32
50
 
33
- const calculateAreaSize = (size, sizeType, type) => {
51
+ const calculateAreaSize = (size: number, sizeType: SizeType, type: SymbolType) => {
34
52
  if (sizeType === 'area') {
35
53
  return size;
36
54
  }
@@ -54,17 +72,17 @@ const calculateAreaSize = (size, sizeType, type) => {
54
72
  }
55
73
  };
56
74
 
57
- const registerSymbol = (key, factory) => {
75
+ const registerSymbol = (key: string, factory: D3SymbolType) => {
58
76
  symbolFactories['symbol' + upperFirst(key)] = factory;
59
77
  };
60
78
 
61
79
  /** Renders a symbol from a set of predefined shapes. */
62
- export function Symbols(symbolsProps) {
80
+ export function Symbols(symbolsProps: SymbolsProps) {
63
81
  const { type = 'circle', size = 64, sizeType = 'area', ...rest } = symbolsProps;
64
82
  const props = { ...rest, type, size, sizeType };
65
83
  // Runtime guard (recharts#6197): `type` can arrive as a non-string despite
66
84
  // the declared union; fall back to 'circle'.
67
- let realType = 'circle';
85
+ let realType: SymbolType = 'circle';
68
86
  if (typeof type === 'string') {
69
87
  realType = type;
70
88
  }
@@ -1,3 +1,27 @@
1
+ import type { NativeMouseEvent, SVGProps } from '../util/OctaneTypes.ts';
2
+ import type { AnimationDuration, EasingInput } from '../util/types';
3
+
4
+ interface TrapezoidProps {
5
+ className?: SVGProps<SVGPathElement>['className'];
6
+ x?: number;
7
+ y?: number;
8
+ upperWidth?: number;
9
+ lowerWidth?: number;
10
+ height?: number;
11
+ isUpdateAnimationActive?: boolean;
12
+ animationBegin?: number;
13
+ animationDuration?: AnimationDuration;
14
+ animationEasing?: EasingInput;
15
+ onClick?: (e: NativeMouseEvent<SVGPathElement>) => void;
16
+ onMouseDown?: (e: NativeMouseEvent<SVGPathElement>) => void;
17
+ onMouseUp?: (e: NativeMouseEvent<SVGPathElement>) => void;
18
+ onMouseMove?: (e: NativeMouseEvent<SVGPathElement>) => void;
19
+ onMouseOver?: (e: NativeMouseEvent<SVGPathElement>) => void;
20
+ onMouseOut?: (e: NativeMouseEvent<SVGPathElement>) => void;
21
+ onMouseEnter?: (e: NativeMouseEvent<SVGPathElement>) => void;
22
+ onMouseLeave?: (e: NativeMouseEvent<SVGPathElement>) => void;
23
+ }
24
+ export type Props = SVGProps<SVGPathElement> & TrapezoidProps;
1
25
  // Port of shape/Trapezoid.tsx — the funnel-chart segment. Phase 0 ports the
2
26
  // STATIC path (isUpdateAnimationActive defaults false); the update animation
3
27
  // and the getTotalLength entrance dash arrive with the Phase 5 animation port.
@@ -7,7 +31,13 @@ import { resolveDefaultProps } from '../util/resolveDefaultProps';
7
31
  import { svgPropertiesAndEvents } from '../util/svgPropertiesAndEvents.ts';
8
32
  import { roundTemplateLiteral } from '../util/round';
9
33
 
10
- const getTrapezoidPath = (x, y, upperWidth, lowerWidth, height) => {
34
+ const getTrapezoidPath = (
35
+ x: number,
36
+ y: number,
37
+ upperWidth: number,
38
+ lowerWidth: number,
39
+ height: number,
40
+ ) => {
11
41
  const widthGap = upperWidth - lowerWidth;
12
42
  let path;
13
43
  path = roundTemplateLiteral`M ${x},${y}`;
@@ -28,9 +58,9 @@ export const defaultTrapezoidProps = {
28
58
  animationBegin: 0,
29
59
  animationDuration: 1500,
30
60
  animationEasing: 'ease',
31
- };
61
+ } as const satisfies Partial<Props>;
32
62
 
33
- export function Trapezoid(outsideProps) {
63
+ export function Trapezoid(outsideProps: Props) {
34
64
  const trapezoidProps = resolveDefaultProps(outsideProps, defaultTrapezoidProps);
35
65
  const { x, y, upperWidth, lowerWidth, height, className } = trapezoidProps;
36
66
 
@@ -1,3 +1,12 @@
1
+ import type { MutableRefObject, OctaneNode } from '../util/OctaneTypes.ts';
2
+ import type { Action, Store } from '@reduxjs/toolkit';
3
+ import type { RechartsRootState } from './store';
4
+
5
+ type RechartsStoreProviderProps = {
6
+ children: OctaneNode;
7
+ preloadedState?: Partial<RechartsRootState>;
8
+ reduxStoreName?: string;
9
+ };
1
10
  // Port of state/RechartsStoreProvider.tsx — one isolated RTK store per chart,
2
11
  // provided through the custom RechartsReduxContext (via @octanejs/redux's
3
12
  // Provider). A PANORAMA chart (the Brush preview) renders NO provider and
@@ -8,12 +17,12 @@ import { createRechartsStore } from './store';
8
17
  import { useIsPanorama } from '../context/PanoramaContext';
9
18
  import { RechartsReduxContext } from './RechartsReduxContext';
10
19
 
11
- export function RechartsStoreProvider(props) {
20
+ export function RechartsStoreProvider(props: RechartsStoreProviderProps) {
12
21
  const { preloadedState, children, reduxStoreName } = props;
13
22
  const isPanorama = useIsPanorama();
14
23
  // One store per CHART (not per page): recharts supports multiple independent
15
24
  // charts, so the store rides a ref, created on first render.
16
- const storeRef = useRef(null);
25
+ const storeRef: MutableRefObject<Store<RechartsRootState, Action> | null> = useRef(null);
17
26
  if (isPanorama) {
18
27
  return children;
19
28
  }
@@ -1,10 +1,10 @@
1
1
  // Port of state/ReportChartProps.tsx — publishes the chart root's props into
2
2
  // the rootProps slice.
3
3
  import { useEffect } from 'octane';
4
- import { updateOptions } from './rootPropsSlice';
4
+ import { updateOptions, type UpdatableChartOptions } from './rootPropsSlice';
5
5
  import { useAppDispatch } from './hooks';
6
6
 
7
- export function ReportChartProps(props: Record<string, unknown>): null {
7
+ export function ReportChartProps(props: UpdatableChartOptions): null {
8
8
  const dispatch = useAppDispatch();
9
9
  useEffect(() => {
10
10
  dispatch(updateOptions(props));
@@ -5,8 +5,9 @@ import { useIsPanorama } from '../context/PanoramaContext';
5
5
  import { setLayout, setMargin } from './layoutSlice';
6
6
  import { useAppDispatch } from './hooks';
7
7
  import { propsAreEqual } from '../util/propsAreEqual';
8
+ import type { LayoutType, Margin } from '../util/types';
8
9
 
9
- function ReportMainChartPropsImpl(props: { layout: unknown; margin: unknown }): null {
10
+ function ReportMainChartPropsImpl(props: { layout: LayoutType; margin: Partial<Margin> }): null {
10
11
  const { layout, margin } = props;
11
12
  const dispatch = useAppDispatch();
12
13
  const isPanorama = useIsPanorama();
@@ -10,11 +10,13 @@ import {
10
10
  removePolarGraphicalItem,
11
11
  replaceCartesianGraphicalItem,
12
12
  replacePolarGraphicalItem,
13
+ type CartesianGraphicalItemSettings,
14
+ type PolarGraphicalItemSettings,
13
15
  } from './graphicalItemsSlice';
14
16
 
15
- const SetCartesianGraphicalItemImpl = (props: Record<string, unknown>): null => {
17
+ const SetCartesianGraphicalItemImpl = (props: CartesianGraphicalItemSettings): null => {
16
18
  const dispatch = useAppDispatch();
17
- const prevPropsRef = useRef<Record<string, unknown> | null>(null);
19
+ const prevPropsRef = useRef<CartesianGraphicalItemSettings | null>(null);
18
20
  useLayoutEffect(() => {
19
21
  if (prevPropsRef.current === null) {
20
22
  dispatch(addCartesianGraphicalItem(props));
@@ -36,9 +38,9 @@ const SetCartesianGraphicalItemImpl = (props: Record<string, unknown>): null =>
36
38
 
37
39
  export const SetCartesianGraphicalItem = memo(SetCartesianGraphicalItemImpl);
38
40
 
39
- const SetPolarGraphicalItemImpl = (props: Record<string, unknown>): null => {
41
+ const SetPolarGraphicalItemImpl = (props: PolarGraphicalItemSettings): null => {
40
42
  const dispatch = useAppDispatch();
41
- const prevPropsRef = useRef<Record<string, unknown> | null>(null);
43
+ const prevPropsRef = useRef<PolarGraphicalItemSettings | null>(null);
42
44
  useLayoutEffect(() => {
43
45
  if (prevPropsRef.current === null) {
44
46
  dispatch(addPolarGraphicalItem(props));