@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
@@ -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));
@@ -5,12 +5,13 @@ import { useIsPanorama } from '../context/PanoramaContext';
5
5
  import { selectChartLayout } from '../context/chartLayoutContext';
6
6
  import { useAppDispatch, useAppSelector } from './hooks';
7
7
  import { addLegendPayload, replaceLegendPayload, removeLegendPayload } from './legendSlice';
8
+ import type { LegendPayload } from '../component/DefaultLegendContent.tsrx';
8
9
 
9
- export function SetLegendPayload(props: { legendPayload: unknown }): null {
10
+ export function SetLegendPayload(props: { legendPayload: ReadonlyArray<LegendPayload> }): null {
10
11
  const { legendPayload } = props;
11
12
  const dispatch = useAppDispatch();
12
13
  const isPanorama = useIsPanorama();
13
- const prevPayloadRef = useRef<unknown>(null);
14
+ const prevPayloadRef = useRef<ReadonlyArray<LegendPayload> | null>(null);
14
15
  useLayoutEffect(() => {
15
16
  if (isPanorama) {
16
17
  return;
@@ -33,11 +34,13 @@ export function SetLegendPayload(props: { legendPayload: unknown }): null {
33
34
  return null;
34
35
  }
35
36
 
36
- export function SetPolarLegendPayload(props: { legendPayload: unknown }): null {
37
+ export function SetPolarLegendPayload(props: {
38
+ legendPayload: ReadonlyArray<LegendPayload>;
39
+ }): null {
37
40
  const { legendPayload } = props;
38
41
  const dispatch = useAppDispatch();
39
42
  const layout = useAppSelector(selectChartLayout);
40
- const prevPayloadRef = useRef<unknown>(null);
43
+ const prevPayloadRef = useRef<ReadonlyArray<LegendPayload> | null>(null);
41
44
  useLayoutEffect(() => {
42
45
  if (layout !== 'centric' && layout !== 'radial') {
43
46
  return;
@@ -6,14 +6,17 @@ import {
6
6
  addTooltipEntrySettings,
7
7
  removeTooltipEntrySettings,
8
8
  replaceTooltipEntrySettings,
9
+ type TooltipPayloadConfiguration,
9
10
  } from './tooltipSlice';
10
11
  import { useIsPanorama } from '../context/PanoramaContext';
11
12
 
12
- export function SetTooltipEntrySettings(props: { tooltipEntrySettings: unknown }): null {
13
+ export function SetTooltipEntrySettings(props: {
14
+ tooltipEntrySettings: TooltipPayloadConfiguration;
15
+ }): null {
13
16
  const { tooltipEntrySettings } = props;
14
17
  const dispatch = useAppDispatch();
15
18
  const isPanorama = useIsPanorama();
16
- const prevSettingsRef = useRef<unknown>(null);
19
+ const prevSettingsRef = useRef<TooltipPayloadConfiguration | null>(null);
17
20
  useLayoutEffect(() => {
18
21
  if (isPanorama) {
19
22
  // Panorama graphical items should never contribute to Tooltip payload.
@@ -0,0 +1,40 @@
1
+ // Adapted from recharts@3.9.2, commit b3451050c027a23957ffa50a2665c9119df21e47.
2
+ import { createSlice, PayloadAction } from '@reduxjs/toolkit';
3
+ import { Padding } from '../util/types';
4
+
5
+ /**
6
+ * From all Brush properties, only height has a default value and will always be defined.
7
+ * Other properties are nullable and will be computed from offsets and margins if they are not set.
8
+ */
9
+ export type BrushSettings = {
10
+ x: number | undefined;
11
+ y: number | undefined;
12
+ width: number | undefined;
13
+ height: number;
14
+ padding: Padding;
15
+ };
16
+
17
+ const initialState: BrushSettings = {
18
+ x: 0,
19
+ y: 0,
20
+ width: 0,
21
+ height: 0,
22
+ padding: { top: 0, right: 0, bottom: 0, left: 0 },
23
+ };
24
+
25
+ export const brushSlice = createSlice({
26
+ name: 'brush',
27
+ initialState,
28
+ reducers: {
29
+ setBrushSettings(_state: BrushSettings, action: PayloadAction<BrushSettings | null>) {
30
+ if (action.payload == null) {
31
+ return initialState;
32
+ }
33
+ return action.payload;
34
+ },
35
+ },
36
+ });
37
+
38
+ export const { setBrushSettings } = brushSlice.actions;
39
+
40
+ export const brushReducer = brushSlice.reducer;