solid-recharts 0.1.0

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 (639) hide show
  1. package/NEXT_SESSION_PROMPT.md +114 -0
  2. package/package.json +28 -0
  3. package/src/animation/AnimatedItems.tsx +169 -0
  4. package/src/animation/AnimationController.ts +24 -0
  5. package/src/animation/AnimationControllerImpl.ts +37 -0
  6. package/src/animation/AnimationHandle.ts +273 -0
  7. package/src/animation/CSSTransitionAnimate.tsx +142 -0
  8. package/src/animation/JavascriptAnimate.tsx +107 -0
  9. package/src/animation/easing.ts +261 -0
  10. package/src/animation/matchBy.ts +211 -0
  11. package/src/animation/timeoutController.ts +51 -0
  12. package/src/animation/useAnimationController.tsx +31 -0
  13. package/src/animation/useAnimationStartSnapshot.ts +73 -0
  14. package/src/animation/util.ts +16 -0
  15. package/src/cartesian/Area.tsx +810 -0
  16. package/src/cartesian/AreaRevealShape.tsx +250 -0
  17. package/src/cartesian/Bar.tsx +1216 -0
  18. package/src/cartesian/BarStack.tsx +148 -0
  19. package/src/cartesian/Brush.tsx +653 -0
  20. package/src/cartesian/CartesianAxis.tsx +541 -0
  21. package/src/cartesian/CartesianGrid.tsx +605 -0
  22. package/src/cartesian/ErrorBar.tsx +319 -0
  23. package/src/cartesian/Funnel.tsx +594 -0
  24. package/src/cartesian/GraphicalItemClipPath.tsx +75 -0
  25. package/src/cartesian/Line.tsx +742 -0
  26. package/src/cartesian/LineDrawShape.tsx +190 -0
  27. package/src/cartesian/ReferenceArea.tsx +275 -0
  28. package/src/cartesian/ReferenceDot.tsx +286 -0
  29. package/src/cartesian/ReferenceLine.tsx +414 -0
  30. package/src/cartesian/RenderedTicksReporter.tsx +49 -0
  31. package/src/cartesian/Scatter.tsx +741 -0
  32. package/src/cartesian/XAxis.tsx +293 -0
  33. package/src/cartesian/YAxis.tsx +333 -0
  34. package/src/cartesian/ZAxis.tsx +80 -0
  35. package/src/cartesian/getCartesianPosition.ts +255 -0
  36. package/src/cartesian/getEquidistantTicks.ts +126 -0
  37. package/src/cartesian/getTicks.ts +225 -0
  38. package/src/cartesian/useAnimatedLineLength.ts +84 -0
  39. package/src/chart/AreaChart.tsx +30 -0
  40. package/src/chart/BarChart.tsx +27 -0
  41. package/src/chart/CartesianChart.tsx +91 -0
  42. package/src/chart/CategoricalChart.tsx +60 -0
  43. package/src/chart/ComposedChart.tsx +29 -0
  44. package/src/chart/FunnelChart.tsx +29 -0
  45. package/src/chart/LineChart.tsx +29 -0
  46. package/src/chart/PieChart.tsx +41 -0
  47. package/src/chart/PolarChart.tsx +97 -0
  48. package/src/chart/RadarChart.tsx +37 -0
  49. package/src/chart/RadialBarChart.tsx +39 -0
  50. package/src/chart/RechartsWrapper.tsx +486 -0
  51. package/src/chart/Sankey.tsx +992 -0
  52. package/src/chart/ScatterChart.tsx +29 -0
  53. package/src/chart/SunburstChart.tsx +394 -0
  54. package/src/chart/Treemap.tsx +874 -0
  55. package/src/chart/types.ts +37 -0
  56. package/src/component/ActivePoints.tsx +136 -0
  57. package/src/component/Cell.tsx +72 -0
  58. package/src/component/Cursor.tsx +249 -0
  59. package/src/component/Customized.tsx +8 -0
  60. package/src/component/DefaultLegendContent.tsx +205 -0
  61. package/src/component/DefaultTooltipContent.tsx +247 -0
  62. package/src/component/Dots.tsx +128 -0
  63. package/src/component/Label.tsx +507 -0
  64. package/src/component/LabelList.tsx +270 -0
  65. package/src/component/Legend.tsx +273 -0
  66. package/src/component/ResponsiveContainer.tsx +397 -0
  67. package/src/component/Text.tsx +436 -0
  68. package/src/component/Tooltip.tsx +309 -0
  69. package/src/component/TooltipBoundingBox.tsx +152 -0
  70. package/src/component/responsiveContainerUtils.ts +128 -0
  71. package/src/container/ClipPathProvider.tsx +40 -0
  72. package/src/container/Layer.tsx +38 -0
  73. package/src/container/RootSurface.tsx +124 -0
  74. package/src/container/Surface.tsx +70 -0
  75. package/src/context/ErrorBarContext.tsx +85 -0
  76. package/src/context/PanoramaContext.tsx +13 -0
  77. package/src/context/RegisterGraphicalItemId.tsx +41 -0
  78. package/src/context/accessibilityContext.tsx +10 -0
  79. package/src/context/brushUpdateContext.ts +14 -0
  80. package/src/context/chartDataContext.tsx +79 -0
  81. package/src/context/chartLayoutContext.tsx +158 -0
  82. package/src/context/legendPayloadContext.ts +11 -0
  83. package/src/context/legendPortalContext.ts +11 -0
  84. package/src/context/tooltipContext.ts +72 -0
  85. package/src/context/tooltipPortalContext.ts +14 -0
  86. package/src/context/useTooltipAxis.ts +24 -0
  87. package/src/hooks.ts +312 -0
  88. package/src/index.ts +288 -0
  89. package/src/polar/Pie.tsx +912 -0
  90. package/src/polar/PolarAngleAxis.tsx +494 -0
  91. package/src/polar/PolarGrid.tsx +269 -0
  92. package/src/polar/PolarRadiusAxis.tsx +422 -0
  93. package/src/polar/Radar.tsx +652 -0
  94. package/src/polar/RadialBar.tsx +767 -0
  95. package/src/polar/defaultPolarAngleAxisProps.tsx +33 -0
  96. package/src/polar/defaultPolarRadiusAxisProps.tsx +28 -0
  97. package/src/shape/Cross.tsx +83 -0
  98. package/src/shape/Curve.tsx +335 -0
  99. package/src/shape/Dot.tsx +49 -0
  100. package/src/shape/Polygon.tsx +168 -0
  101. package/src/shape/Rectangle.tsx +301 -0
  102. package/src/shape/Sector.tsx +304 -0
  103. package/src/shape/Symbols.tsx +144 -0
  104. package/src/shape/Trapezoid.tsx +228 -0
  105. package/src/state/RechartsReduxContext.tsx +8 -0
  106. package/src/state/RechartsStoreContext.ts +15 -0
  107. package/src/state/RechartsStoreProvider.tsx +27 -0
  108. package/src/state/ReportChartProps.tsx +19 -0
  109. package/src/state/ReportEventSettings.tsx +19 -0
  110. package/src/state/ReportMainChartProps.tsx +35 -0
  111. package/src/state/ReportPolarOptions.tsx +28 -0
  112. package/src/state/SetLegendPayload.ts +50 -0
  113. package/src/state/SetTooltipEntrySettings.tsx +46 -0
  114. package/src/state/brushSlice.ts +60 -0
  115. package/src/state/cartesianAxisSlice.ts +288 -0
  116. package/src/state/chartDataSlice.ts +115 -0
  117. package/src/state/errorBarSlice.ts +84 -0
  118. package/src/state/eventSettingsSlice.ts +41 -0
  119. package/src/state/externalEventsMiddleware.ts +136 -0
  120. package/src/state/graphicalItemsSlice.ts +162 -0
  121. package/src/state/hooks.ts +42 -0
  122. package/src/state/keyboardEventsMiddleware.ts +213 -0
  123. package/src/state/layoutSlice.ts +71 -0
  124. package/src/state/legendSlice.ts +107 -0
  125. package/src/state/mouseEventsMiddleware.ts +103 -0
  126. package/src/state/optionsSlice.ts +64 -0
  127. package/src/state/polarAxisSlice.ts +65 -0
  128. package/src/state/polarOptionsSlice.ts +54 -0
  129. package/src/state/reduxDevtoolsJsonStringifyReplacer.ts +15 -0
  130. package/src/state/referenceElementsSlice.ts +121 -0
  131. package/src/state/renderedTicksSlice.ts +61 -0
  132. package/src/state/rootPropsSlice.ts +70 -0
  133. package/src/state/selectors/areaSelectors.ts +169 -0
  134. package/src/state/selectors/arrayEqualityCheck.ts +8 -0
  135. package/src/state/selectors/axisSelectors.ts +2196 -0
  136. package/src/state/selectors/barSelectors.ts +319 -0
  137. package/src/state/selectors/barStackSelectors.ts +79 -0
  138. package/src/state/selectors/brushSelectors.ts +40 -0
  139. package/src/state/selectors/combiners/combineActiveLabel.ts +21 -0
  140. package/src/state/selectors/combiners/combineActiveTooltipIndex.ts +93 -0
  141. package/src/state/selectors/combiners/combineAllBarPositions.ts +131 -0
  142. package/src/state/selectors/combiners/combineAxisRangeWithReverse.ts +17 -0
  143. package/src/state/selectors/combiners/combineBarPosition.ts +24 -0
  144. package/src/state/selectors/combiners/combineBarSizeList.ts +75 -0
  145. package/src/state/selectors/combiners/combineCheckedDomain.ts +49 -0
  146. package/src/state/selectors/combiners/combineConfiguredScale.ts +121 -0
  147. package/src/state/selectors/combiners/combineCoordinateForDefaultIndex.ts +43 -0
  148. package/src/state/selectors/combiners/combineDisplayedStackedData.ts +50 -0
  149. package/src/state/selectors/combiners/combineInverseScaleFunction.ts +17 -0
  150. package/src/state/selectors/combiners/combineRealScaleType.ts +48 -0
  151. package/src/state/selectors/combiners/combineStackedData.ts +28 -0
  152. package/src/state/selectors/combiners/combineTooltipInteractionState.ts +86 -0
  153. package/src/state/selectors/combiners/combineTooltipPayload.ts +203 -0
  154. package/src/state/selectors/combiners/combineTooltipPayloadConfigurations.ts +45 -0
  155. package/src/state/selectors/containerSelectors.ts +12 -0
  156. package/src/state/selectors/dataSelectors.ts +90 -0
  157. package/src/state/selectors/funnelSelectors.ts +83 -0
  158. package/src/state/selectors/graphicalItemSelectors.ts +23 -0
  159. package/src/state/selectors/legendSelectors.ts +29 -0
  160. package/src/state/selectors/lineSelectors.ts +111 -0
  161. package/src/state/selectors/numberDomainEqualityCheck.ts +8 -0
  162. package/src/state/selectors/pickAxisId.ts +6 -0
  163. package/src/state/selectors/pickAxisType.ts +4 -0
  164. package/src/state/selectors/pieSelectors.ts +103 -0
  165. package/src/state/selectors/polarAxisSelectors.ts +202 -0
  166. package/src/state/selectors/polarGridSelectors.ts +24 -0
  167. package/src/state/selectors/polarScaleSelectors.ts +149 -0
  168. package/src/state/selectors/polarSelectors.ts +211 -0
  169. package/src/state/selectors/radarSelectors.ts +152 -0
  170. package/src/state/selectors/radialBarSelectors.ts +328 -0
  171. package/src/state/selectors/rootPropsSelectors.ts +36 -0
  172. package/src/state/selectors/scatterSelectors.ts +77 -0
  173. package/src/state/selectors/selectAllAxes.ts +10 -0
  174. package/src/state/selectors/selectChartOffset.ts +15 -0
  175. package/src/state/selectors/selectChartOffsetInternal.ts +111 -0
  176. package/src/state/selectors/selectPlotArea.ts +27 -0
  177. package/src/state/selectors/selectTooltipAxisId.ts +6 -0
  178. package/src/state/selectors/selectTooltipAxisType.ts +33 -0
  179. package/src/state/selectors/selectTooltipEventType.ts +45 -0
  180. package/src/state/selectors/selectTooltipPayloadSearcher.ts +7 -0
  181. package/src/state/selectors/selectTooltipSettings.ts +6 -0
  182. package/src/state/selectors/selectTooltipState.ts +5 -0
  183. package/src/state/selectors/tooltipSelectors.ts +690 -0
  184. package/src/state/selectors/touchSelectors.ts +29 -0
  185. package/src/state/store.ts +167 -0
  186. package/src/state/tooltipSlice.ts +289 -0
  187. package/src/state/types/AreaSettings.ts +17 -0
  188. package/src/state/types/BarSettings.ts +16 -0
  189. package/src/state/types/LineSettings.ts +12 -0
  190. package/src/state/types/PieSettings.ts +32 -0
  191. package/src/state/types/RadarSettings.ts +6 -0
  192. package/src/state/types/RadialBarSettings.ts +10 -0
  193. package/src/state/types/ScatterSettings.ts +13 -0
  194. package/src/state/types/StackedGraphicalItem.ts +33 -0
  195. package/src/state/unregisterOnCleanup.ts +26 -0
  196. package/src/state/zIndexSlice.ts +128 -0
  197. package/src/synchronisation/syncRegistry.ts +131 -0
  198. package/src/synchronisation/syncSelectors.ts +7 -0
  199. package/src/synchronisation/types.ts +42 -0
  200. package/src/synchronisation/useChartSynchronisation.tsx +372 -0
  201. package/src/types.ts +39 -0
  202. package/src/util/ActiveShapeUtils.tsx +80 -0
  203. package/src/util/BarUtils.tsx +74 -0
  204. package/src/util/CartesianUtils.ts +53 -0
  205. package/src/util/ChartUtils.ts +696 -0
  206. package/src/util/Constants.ts +42 -0
  207. package/src/util/CssPrefixUtils.ts +24 -0
  208. package/src/util/DOMUtils.ts +141 -0
  209. package/src/util/DataUtils.ts +205 -0
  210. package/src/util/FunnelUtils.tsx +37 -0
  211. package/src/util/Global.ts +15 -0
  212. package/src/util/IfOverflow.ts +17 -0
  213. package/src/util/LRUCache.ts +46 -0
  214. package/src/util/LogUtils.ts +26 -0
  215. package/src/util/PolarUtils.ts +134 -0
  216. package/src/util/RadialBarUtils.tsx +35 -0
  217. package/src/util/ReduceCSSCalc.ts +186 -0
  218. package/src/util/ShallowEqual.ts +43 -0
  219. package/src/util/TickUtils.ts +61 -0
  220. package/src/util/YAxisUtils.ts +49 -0
  221. package/src/util/adaptEventHandlers.ts +69 -0
  222. package/src/util/axisPropsAreEqual.ts +42 -0
  223. package/src/util/collectionUtils.ts +83 -0
  224. package/src/util/createCartesianCharts.tsx +101 -0
  225. package/src/util/createEventProxy.ts +24 -0
  226. package/src/util/createPolarCharts.tsx +86 -0
  227. package/src/util/cursor/getCursorPoints.ts +48 -0
  228. package/src/util/cursor/getCursorRectangle.ts +31 -0
  229. package/src/util/cursor/getRadialCursorPoints.ts +34 -0
  230. package/src/util/excludeEventProps.ts +172 -0
  231. package/src/util/getActiveCoordinate.ts +205 -0
  232. package/src/util/getAxisTypeBasedOnLayout.ts +21 -0
  233. package/src/util/getEveryNth.ts +30 -0
  234. package/src/util/getRadiusAndStrokeWidthFromDot.ts +35 -0
  235. package/src/util/getRelativeCoordinate.ts +84 -0
  236. package/src/util/getSliced.ts +21 -0
  237. package/src/util/isDomainSpecifiedByUser.ts +217 -0
  238. package/src/util/isWellBehavedNumber.ts +10 -0
  239. package/src/util/objectPath.ts +129 -0
  240. package/src/util/payload/getUniqPayload.ts +31 -0
  241. package/src/util/propsAreEqual.ts +137 -0
  242. package/src/util/resolveDefaultProps.tsx +8 -0
  243. package/src/util/round.ts +35 -0
  244. package/src/util/scale/CartesianScaleHelper.ts +72 -0
  245. package/src/util/scale/CustomScaleDefinition.ts +82 -0
  246. package/src/util/scale/RechartsScale.ts +131 -0
  247. package/src/util/scale/createCategoricalInverse.ts +83 -0
  248. package/src/util/scale/getNiceTickValues.ts +334 -0
  249. package/src/util/scale/index.ts +3 -0
  250. package/src/util/scale/util/DecimalLite.ts +194 -0
  251. package/src/util/scale/util/arithmetic.ts +56 -0
  252. package/src/util/stacks/getStackSeriesIdentifier.ts +20 -0
  253. package/src/util/stacks/stackTypes.ts +53 -0
  254. package/src/util/svgPropertiesAndEvents.ts +84 -0
  255. package/src/util/svgPropertiesNoEvents.ts +520 -0
  256. package/src/util/tooltip/translate.ts +179 -0
  257. package/src/util/typedDataKey.ts +8 -0
  258. package/src/util/types.ts +724 -0
  259. package/src/util/useAnimationId.tsx +31 -0
  260. package/src/util/useElementOffset.ts +164 -0
  261. package/src/util/useId.ts +20 -0
  262. package/src/util/usePrefersReducedMotion.ts +44 -0
  263. package/src/util/useUniqueId.ts +34 -0
  264. package/src/zIndex/DefaultZIndexes.tsx +87 -0
  265. package/src/zIndex/ZIndexLayer.tsx +126 -0
  266. package/src/zIndex/ZIndexPortal.tsx +69 -0
  267. package/src/zIndex/getZIndexFromUnknown.tsx +17 -0
  268. package/src/zIndex/zIndexSelectors.ts +46 -0
  269. package/test/_data.ts +408 -0
  270. package/test/animation/AnimationController.typed.spec.ts +53 -0
  271. package/test/animation/AnimationControllerImpl.spec.ts +271 -0
  272. package/test/animation/CSSTransitionAnimate.timing.spec.tsx +473 -0
  273. package/test/animation/JavascriptAnimate.spec.tsx +62 -0
  274. package/test/animation/RechartsAnimation.spec.ts +636 -0
  275. package/test/animation/easing.spec.ts +218 -0
  276. package/test/animation/legacyAnimationLengthChange.spec.tsx +803 -0
  277. package/test/animation/matchBy.spec.ts +467 -0
  278. package/test/animation/mockAnimationController.ts +40 -0
  279. package/test/animation/mockControllerAnimationManager.ts +143 -0
  280. package/test/animation/mockTimeoutController.ts +114 -0
  281. package/test/animation/timeoutController.spec.ts +138 -0
  282. package/test/animation/useAnimationStartSnapshot.spec.ts +147 -0
  283. package/test/animation/util.spec.ts +28 -0
  284. package/test/cartesian/Area.animation.spec.tsx +363 -0
  285. package/test/cartesian/Area.range.spec.tsx +54 -0
  286. package/test/cartesian/Area.spec.tsx +1202 -0
  287. package/test/cartesian/Area.stacked.render.spec.tsx +69 -0
  288. package/test/cartesian/Area.typed.spec.tsx +209 -0
  289. package/test/cartesian/Axis.integration.spec.tsx +158 -0
  290. package/test/cartesian/Bar/Bar.csstransition.spec.tsx +299 -0
  291. package/test/cartesian/Bar/Bar.spec.tsx +2314 -0
  292. package/test/cartesian/Bar/Bar.typed.spec.tsx +192 -0
  293. package/test/cartesian/Bar.animation.spec.tsx +426 -0
  294. package/test/cartesian/Bar.stackDomain.spec.tsx +66 -0
  295. package/test/cartesian/Bar.stacked.render.spec.tsx +53 -0
  296. package/test/cartesian/Bar.truncateByDomain.spec.tsx +237 -0
  297. package/test/cartesian/Bar.zeroDimensionFiltering.spec.tsx +336 -0
  298. package/test/cartesian/BarStack.spec.tsx +91 -0
  299. package/test/cartesian/Brush.keyboard.spec.tsx +88 -0
  300. package/test/cartesian/Brush.panorama.spec.tsx +41 -0
  301. package/test/cartesian/Brush.props.spec.tsx +63 -0
  302. package/test/cartesian/Brush.render.spec.tsx +117 -0
  303. package/test/cartesian/Brush.spec.tsx +522 -0
  304. package/test/cartesian/Brush.stacked.spec.tsx +221 -0
  305. package/test/cartesian/CartesianAxis.render.spec.tsx +50 -0
  306. package/test/cartesian/CartesianAxis.spec.tsx +396 -0
  307. package/test/cartesian/CartesianGrid.render.spec.tsx +39 -0
  308. package/test/cartesian/CartesianGrid.spec.tsx +2103 -0
  309. package/test/cartesian/ErrorBar.render.spec.tsx +69 -0
  310. package/test/cartesian/ErrorBar.spec.tsx +2414 -0
  311. package/test/cartesian/Funnel.animation.spec.tsx +241 -0
  312. package/test/cartesian/Funnel.spec.tsx +226 -0
  313. package/test/cartesian/Funnel.typed.spec.tsx +221 -0
  314. package/test/cartesian/GraphicalItemClipPath.scale-behavior.spec.tsx +627 -0
  315. package/test/cartesian/GraphicalItemClipPath.spec.tsx +427 -0
  316. package/test/cartesian/Line.animation.spec.tsx +643 -0
  317. package/test/cartesian/Line.sparseAnimationPath.spec.tsx +98 -0
  318. package/test/cartesian/Line.spec.tsx +471 -0
  319. package/test/cartesian/Line.typed.spec.tsx +152 -0
  320. package/test/cartesian/ReferenceArea.render.spec.tsx +63 -0
  321. package/test/cartesian/ReferenceArea.spec.tsx +663 -0
  322. package/test/cartesian/ReferenceArea.typed.spec.tsx +74 -0
  323. package/test/cartesian/ReferenceDot.render.spec.tsx +55 -0
  324. package/test/cartesian/ReferenceDot.spec.tsx +462 -0
  325. package/test/cartesian/ReferenceDot.typed.spec.tsx +76 -0
  326. package/test/cartesian/ReferenceLine/ReferenceLine.panorama.spec.tsx +184 -0
  327. package/test/cartesian/ReferenceLine/ReferenceLine.spec.tsx +744 -0
  328. package/test/cartesian/ReferenceLine/ReferenceLine.typed.spec.tsx +74 -0
  329. package/test/cartesian/ReferenceLine/getEndPoints.spec.ts +399 -0
  330. package/test/cartesian/ReferenceLine.render.spec.tsx +134 -0
  331. package/test/cartesian/Scatter.animation.spec.tsx +381 -0
  332. package/test/cartesian/Scatter.render.spec.tsx +61 -0
  333. package/test/cartesian/Scatter.spec.tsx +406 -0
  334. package/test/cartesian/Scatter.typed.spec.tsx +153 -0
  335. package/test/cartesian/XAxis/XAxis.barSize.spec.tsx +336 -0
  336. package/test/cartesian/XAxis/XAxis.brush.spec.tsx +266 -0
  337. package/test/cartesian/XAxis/XAxis.categorydomain.spec.tsx +872 -0
  338. package/test/cartesian/XAxis/XAxis.dataKey.spec.tsx +86 -0
  339. package/test/cartesian/XAxis/XAxis.datatypes.spec.tsx +127 -0
  340. package/test/cartesian/XAxis/XAxis.hide.spec.tsx +106 -0
  341. package/test/cartesian/XAxis/XAxis.multiaxis.spec.tsx +336 -0
  342. package/test/cartesian/XAxis/XAxis.numberdomain.spec.tsx +1466 -0
  343. package/test/cartesian/XAxis/XAxis.padding.spec.tsx +758 -0
  344. package/test/cartesian/XAxis/XAxis.padding_clip.spec.tsx +65 -0
  345. package/test/cartesian/XAxis/XAxis.state.spec.tsx +355 -0
  346. package/test/cartesian/XAxis/XAxis.tick.spec.tsx +493 -0
  347. package/test/cartesian/XAxis/XAxis.timescale.spec.tsx +233 -0
  348. package/test/cartesian/XAxis/XAxis.type.spec.tsx +107 -0
  349. package/test/cartesian/XAxis/XAxis.typed.spec.tsx +102 -0
  350. package/test/cartesian/XAxis/XAxis.vertical.spec.tsx +265 -0
  351. package/test/cartesian/XAxis.tickFormatter.spec.tsx +54 -0
  352. package/test/cartesian/YAxis/YAxis.7362.derivedDomain.spec.tsx +230 -0
  353. package/test/cartesian/YAxis/YAxis.7362.spec.tsx +104 -0
  354. package/test/cartesian/YAxis/YAxis.interval-zero.spec.tsx +88 -0
  355. package/test/cartesian/YAxis/YAxis.label.spec.tsx +219 -0
  356. package/test/cartesian/YAxis/YAxis.spec.tsx +1595 -0
  357. package/test/cartesian/YAxis/YAxis.tick.spec.tsx +428 -0
  358. package/test/cartesian/YAxis/YAxis.tickFormatter.spec.tsx +54 -0
  359. package/test/cartesian/YAxis/YAxis.ticks.spec.tsx +263 -0
  360. package/test/cartesian/YAxis/YAxis.type.spec.tsx +107 -0
  361. package/test/cartesian/YAxis/YAxis.typed.spec.tsx +102 -0
  362. package/test/cartesian/ZAxis.spec.tsx +300 -0
  363. package/test/cartesian/ZAxis.typed.spec.tsx +33 -0
  364. package/test/cartesian/__snapshots__/Brush.spec.tsx.snap +5 -0
  365. package/test/cartesian/axisLineAndStroke.spec.tsx +72 -0
  366. package/test/cartesian/getCartesianPosition.spec.ts +907 -0
  367. package/test/cartesian/getEquidistantTicks.spec.ts +88 -0
  368. package/test/cartesian/getTicks.spec.ts +378 -0
  369. package/test/cartesian/miscFeatureGaps.spec.tsx +89 -0
  370. package/test/cartesian/useAnimatedLineLength.spec.ts +168 -0
  371. package/test/chart/AccessibilityLayer.spec.tsx +569 -0
  372. package/test/chart/AccessibilityScans.spec.tsx +286 -0
  373. package/test/chart/AreaChart.spec.tsx +409 -0
  374. package/test/chart/AreaChart.stacked.spec.tsx +1407 -0
  375. package/test/chart/AreaChart.typed.spec.tsx +39 -0
  376. package/test/chart/BarChart.spec.tsx +3719 -0
  377. package/test/chart/BarChart.typed.spec.tsx +60 -0
  378. package/test/chart/CategoricalChart.spec.tsx +255 -0
  379. package/test/chart/ComposedChart.spec.tsx +199 -0
  380. package/test/chart/ComposedChart.typed.spec.tsx +39 -0
  381. package/test/chart/FunnelChart.spec.tsx +215 -0
  382. package/test/chart/FunnelChart.typed.spec.tsx +39 -0
  383. package/test/chart/LineChart.multiseries.spec.tsx +50 -0
  384. package/test/chart/LineChart.smoke.spec.tsx +50 -0
  385. package/test/chart/LineChart.spec.tsx +930 -0
  386. package/test/chart/LineChart.typed.spec.tsx +39 -0
  387. package/test/chart/NicheChartTooltip.spec.tsx +81 -0
  388. package/test/chart/PieChart.spec.tsx +793 -0
  389. package/test/chart/PieChart.typed.spec.tsx +39 -0
  390. package/test/chart/RadarChart.spec.tsx +530 -0
  391. package/test/chart/RadarChart.typed.spec.tsx +39 -0
  392. package/test/chart/RadialBarChart.5966.spec.tsx +48 -0
  393. package/test/chart/RadialBarChart.spec.tsx +679 -0
  394. package/test/chart/RadialBarChart.typed.spec.tsx +39 -0
  395. package/test/chart/RechartsWrapper.spec.tsx +83 -0
  396. package/test/chart/Sankey.content.spec.tsx +46 -0
  397. package/test/chart/Sankey.spec.tsx +952 -0
  398. package/test/chart/Sankey.typed.spec.tsx +29 -0
  399. package/test/chart/ScatterChart.spec.tsx +2613 -0
  400. package/test/chart/ScatterChart.typed.spec.tsx +39 -0
  401. package/test/chart/SunburstChart.spec.tsx +146 -0
  402. package/test/chart/Treemap.animation.spec.tsx +52 -0
  403. package/test/chart/Treemap.spec.tsx +1003 -0
  404. package/test/chart/Treemap.typed.spec.tsx +26 -0
  405. package/test/chart/chartEvents.spec.tsx +127 -0
  406. package/test/chart/responsive.spec.tsx +620 -0
  407. package/test/component/Cell.render.spec.tsx +155 -0
  408. package/test/component/Cell.spec.tsx +12 -0
  409. package/test/component/Cursor.spec.tsx +186 -0
  410. package/test/component/DefaultTooltipContent.spec.tsx +102 -0
  411. package/test/component/Label.render.spec.tsx +63 -0
  412. package/test/component/Label.spec.tsx +686 -0
  413. package/test/component/Label.typed.spec.tsx +46 -0
  414. package/test/component/LabelList.spec.tsx +188 -0
  415. package/test/component/Legend.itemSorter.spec.tsx +704 -0
  416. package/test/component/Legend.render.spec.tsx +92 -0
  417. package/test/component/Legend.spec.tsx +2213 -0
  418. package/test/component/Legend.typed.spec.tsx +22 -0
  419. package/test/component/ResponsiveContainer.spec.tsx +523 -0
  420. package/test/component/ResponsiveContainerDataTest.spec.tsx +51 -0
  421. package/test/component/Text.spec.tsx +415 -0
  422. package/test/component/Text.typed.spec.tsx +46 -0
  423. package/test/component/Tooltip/ActiveDot.spec.tsx +370 -0
  424. package/test/component/Tooltip/Tooltip.animation.spec.tsx +209 -0
  425. package/test/component/Tooltip/Tooltip.content.spec.tsx +128 -0
  426. package/test/component/Tooltip/Tooltip.formatter.spec.tsx +152 -0
  427. package/test/component/Tooltip/Tooltip.includeHidden.spec.tsx +79 -0
  428. package/test/component/Tooltip/Tooltip.multipleDataArrays.spec.tsx +165 -0
  429. package/test/component/Tooltip/Tooltip.offset.spec.tsx +113 -0
  430. package/test/component/Tooltip/Tooltip.state.spec.tsx +74 -0
  431. package/test/component/Tooltip/Tooltip.sync.spec.tsx +639 -0
  432. package/test/component/Tooltip/defaultIndex.spec.tsx +227 -0
  433. package/test/component/Tooltip/graphicalItem.formatter.spec.tsx +138 -0
  434. package/test/component/Tooltip/itemSorter.spec.tsx +2815 -0
  435. package/test/component/Tooltip/tooltipEventType.spec.tsx +344 -0
  436. package/test/component/Tooltip/tooltipMouseHoverSelectors.ts +41 -0
  437. package/test/component/Tooltip/tooltipTestHelpers.tsx +162 -0
  438. package/test/component/Tooltip.defaultIndex.spec.tsx +48 -0
  439. package/test/component/Tooltip.hover.spec.tsx +61 -0
  440. package/test/component/Tooltip.item.spec.tsx +54 -0
  441. package/test/component/Tooltip.keyboard.spec.tsx +51 -0
  442. package/test/component/Tooltip.payload.spec.tsx +1716 -0
  443. package/test/component/Tooltip.touch.spec.tsx +39 -0
  444. package/test/component/Tooltip.visibility.spec.tsx +1889 -0
  445. package/test/component/TooltipBoundingBox.spec.tsx +89 -0
  446. package/test/component/responsiveContainerUtils.spec.ts +205 -0
  447. package/test/container/ClipPath.spec.tsx +602 -0
  448. package/test/container/chartDimensions.spec.tsx +368 -0
  449. package/test/context/chartLayoutContext.spec.tsx +378 -0
  450. package/test/helper/ExpectAxisDomain.tsx +27 -0
  451. package/test/helper/assertNotNull.ts +6 -0
  452. package/test/helper/assertZIndexLayerOrder.ts +19 -0
  453. package/test/helper/createSelectorTestCase.tsx +176 -0
  454. package/test/helper/expectAnimatedPieAngles.ts +100 -0
  455. package/test/helper/expectAnimatedPiePaths.ts +78 -0
  456. package/test/helper/expectAreaCurve.ts +15 -0
  457. package/test/helper/expectAxisTicks.ts +48 -0
  458. package/test/helper/expectBars.ts +54 -0
  459. package/test/helper/expectFunctionReturning.ts +58 -0
  460. package/test/helper/expectLabel.ts +32 -0
  461. package/test/helper/expectLastCalledWith.ts +48 -0
  462. package/test/helper/expectLine.ts +20 -0
  463. package/test/helper/expectPieSectors.ts +80 -0
  464. package/test/helper/expectScale.ts +37 -0
  465. package/test/helper/expectScatterPoints.ts +52 -0
  466. package/test/helper/expectStackGroups.ts +144 -0
  467. package/test/helper/mockAxes.ts +22 -0
  468. package/test/helper/mockGetBoundingClientRect.ts +66 -0
  469. package/test/helper/mockHTMLElementProperty.ts +19 -0
  470. package/test/helper/mockTouchingElement.ts +27 -0
  471. package/test/helper/offsetHelpers.ts +19 -0
  472. package/test/helper/parameterizedTestCases.tsx +99 -0
  473. package/test/helper/produceState.ts +32 -0
  474. package/test/helper/render.ts +7 -0
  475. package/test/helper/selectorTestHelpers.tsx +63 -0
  476. package/test/helper/trim.spec.ts +35 -0
  477. package/test/helper/trim.ts +11 -0
  478. package/test/hooks/useActiveTooltipDataPoints.spec.tsx +358 -0
  479. package/test/hooks/useAxisDomain.spec.tsx +361 -0
  480. package/test/hooks/useAxisScale.spec.tsx +283 -0
  481. package/test/hooks/useAxisTicks.spec.tsx +130 -0
  482. package/test/hooks/useOffset.spec.tsx +248 -0
  483. package/test/hooks/useTooltipStateHooks.spec.tsx +109 -0
  484. package/test/polar/Pie/Pie-TwoLevelPieChart.spec.tsx +135 -0
  485. package/test/polar/Pie/Pie.spec.tsx +784 -0
  486. package/test/polar/Pie/Pie.typed.spec.tsx +78 -0
  487. package/test/polar/Pie.animation.spec.tsx +529 -0
  488. package/test/polar/PieWithLegend.animation.spec.tsx +142 -0
  489. package/test/polar/PolarAngleAxis/PolarAngleAxis.events.spec.tsx +76 -0
  490. package/test/polar/PolarAngleAxis/PolarAngleAxis.spec.tsx +2079 -0
  491. package/test/polar/PolarAngleAxis/PolarAngleAxis.typed.spec.tsx +102 -0
  492. package/test/polar/PolarAngleAxis.render.spec.tsx +79 -0
  493. package/test/polar/PolarGrid.render.spec.tsx +75 -0
  494. package/test/polar/PolarGrid.spec.tsx +918 -0
  495. package/test/polar/PolarLegendPerRow.render.spec.tsx +85 -0
  496. package/test/polar/PolarRadiusAxis.events.spec.tsx +65 -0
  497. package/test/polar/PolarRadiusAxis.render.spec.tsx +52 -0
  498. package/test/polar/PolarRadiusAxis.spec.tsx +991 -0
  499. package/test/polar/PolarRadiusAxis.typed.spec.tsx +84 -0
  500. package/test/polar/PolarTooltipLegend.render.spec.tsx +80 -0
  501. package/test/polar/Radar.animation.spec.tsx +570 -0
  502. package/test/polar/Radar.render.spec.tsx +71 -0
  503. package/test/polar/Radar.spec.tsx +265 -0
  504. package/test/polar/Radar.typed.spec.tsx +119 -0
  505. package/test/polar/RadialBar/RadialBar.spec.tsx +1521 -0
  506. package/test/polar/RadialBar/RadialBar.typed.spec.tsx +132 -0
  507. package/test/polar/RadialBar.animation.spec.tsx +375 -0
  508. package/test/polar/RadialBar.render.spec.tsx +66 -0
  509. package/test/polar/RadialBar.stacked.spec.tsx +57 -0
  510. package/test/setup.ts +84 -0
  511. package/test/shape/ActiveShape.spec.tsx +181 -0
  512. package/test/shape/Cross.spec.tsx +60 -0
  513. package/test/shape/Cross.typed.spec.tsx +26 -0
  514. package/test/shape/Curve.spec.tsx +368 -0
  515. package/test/shape/Curve.typed.spec.tsx +69 -0
  516. package/test/shape/Dot.spec.tsx +73 -0
  517. package/test/shape/Dot.typed.spec.tsx +30 -0
  518. package/test/shape/Polygon.spec.tsx +357 -0
  519. package/test/shape/Polygon.typed.spec.tsx +28 -0
  520. package/test/shape/Rectangle.animation.spec.tsx +451 -0
  521. package/test/shape/Rectangle.spec.tsx +68 -0
  522. package/test/shape/Rectangle.typed.spec.tsx +24 -0
  523. package/test/shape/Sector.spec.tsx +76 -0
  524. package/test/shape/Sector.typed.spec.tsx +24 -0
  525. package/test/shape/Symbols.spec.tsx +43 -0
  526. package/test/shape/Symbols.typed.spec.tsx +24 -0
  527. package/test/shape/Trapezoid.spec.tsx +50 -0
  528. package/test/shape/Trapezoid.typed.spec.tsx +24 -0
  529. package/test/shape/__snapshots__/Cross.spec.tsx.snap +62 -0
  530. package/test/shape/__snapshots__/Curve.spec.tsx.snap +460 -0
  531. package/test/shape/__snapshots__/Polygon.spec.tsx.snap +58 -0
  532. package/test/shape/__snapshots__/Rectangle.spec.tsx.snap +117 -0
  533. package/test/shape/__snapshots__/Sector.spec.tsx.snap +71 -0
  534. package/test/shape/__snapshots__/Trapezoid.spec.tsx.snap +64 -0
  535. package/test/state/chartDataSlice.spec.ts +53 -0
  536. package/test/state/externalEventsMiddleware.spec.ts +178 -0
  537. package/test/state/graphicalItemsSlice.spec.ts +92 -0
  538. package/test/state/hooks.spec.tsx +68 -0
  539. package/test/state/legendSlice.spec.ts +44 -0
  540. package/test/state/mouseEventsMiddleware.spec.ts +75 -0
  541. package/test/state/optionsSlice.spec.ts +19 -0
  542. package/test/state/reduxDevtoolsJsonStringifyReplacer.spec.ts +25 -0
  543. package/test/state/referenceElementsSlice.spec.ts +84 -0
  544. package/test/state/selectors/areaSelectors.spec.tsx +77 -0
  545. package/test/state/selectors/axisSelectors.spec.tsx +1418 -0
  546. package/test/state/selectors/barStackSelectors.spec.tsx +752 -0
  547. package/test/state/selectors/brushSelectors.spec.tsx +30 -0
  548. package/test/state/selectors/cartesianAxisSlice.spec.ts +96 -0
  549. package/test/state/selectors/combineNiceTicks.spec.ts +207 -0
  550. package/test/state/selectors/combiners/combineActiveTooltipIndex.spec.ts +61 -0
  551. package/test/state/selectors/combiners/combineAllBarPositions.spec.ts +39 -0
  552. package/test/state/selectors/combiners/combineConfiguredScale.spec.ts +56 -0
  553. package/test/state/selectors/combiners/combineDisplayedStackedData.spec.ts +123 -0
  554. package/test/state/selectors/combiners/combineRealScaleType.spec.ts +80 -0
  555. package/test/state/selectors/containerSelectors.spec.tsx +168 -0
  556. package/test/state/selectors/dataSelectors.spec.tsx +136 -0
  557. package/test/state/selectors/legendSelectors.spec.tsx +113 -0
  558. package/test/state/selectors/lineSelectors.spec.tsx +60 -0
  559. package/test/state/selectors/pieSelectors.spec.tsx +72 -0
  560. package/test/state/selectors/radarSelectors.spec.tsx +496 -0
  561. package/test/state/selectors/rootPropsSelectors.spec.tsx +169 -0
  562. package/test/state/selectors/scatterSelectors.spec.tsx +47 -0
  563. package/test/state/selectors/selectActiveTooltipIndex.spec.tsx +234 -0
  564. package/test/state/selectors/selectAllAxes.spec.tsx +18 -0
  565. package/test/state/selectors/selectAxisDomain.spec.tsx +21 -0
  566. package/test/state/selectors/selectAxisDomainIncludingNiceTicks.spec.tsx +19 -0
  567. package/test/state/selectors/selectAxisRangeWithReverse.spec.tsx +22 -0
  568. package/test/state/selectors/selectAxisScale.spec.tsx +91 -0
  569. package/test/state/selectors/selectBarRectangles.stackOffset.spec.tsx +503 -0
  570. package/test/state/selectors/selectBaseAxis.spec.tsx +56 -0
  571. package/test/state/selectors/selectCartesianItemsSettings.spec.tsx +57 -0
  572. package/test/state/selectors/selectChartOffset.spec.tsx +26 -0
  573. package/test/state/selectors/selectDisplayedData.spec.tsx +282 -0
  574. package/test/state/selectors/selectIsTooltipActive.spec.tsx +231 -0
  575. package/test/state/selectors/selectNumericalDomain.spec.tsx +21 -0
  576. package/test/state/selectors/selectRealScaleType.spec.tsx +19 -0
  577. package/test/state/selectors/selectStackGroups.spec.tsx +322 -0
  578. package/test/state/selectors/selectXAxisPosition.spec.tsx +22 -0
  579. package/test/state/selectors/selectYAxisPosition.spec.tsx +22 -0
  580. package/test/state/selectors/selectors.spec.tsx +1613 -0
  581. package/test/state/throttling.spec.ts +200 -0
  582. package/test/state/zIndexSlice.spec.ts +85 -0
  583. package/test/synchronisation/useChartSynchronisation.spec.tsx +225 -0
  584. package/test/util/BarUtils.spec.ts +39 -0
  585. package/test/util/CartesianUtils/CartesianUtils.spec.ts +261 -0
  586. package/test/util/CartesianUtils/rectWithPoints.spec.ts +48 -0
  587. package/test/util/ChartUtils/ChartUtils.spec.ts +491 -0
  588. package/test/util/ChartUtils/appendOffsetOfLegend.spec.ts +136 -0
  589. package/test/util/ChartUtils/appendOffsetOfLegend.spec.tsx +133 -0
  590. package/test/util/ChartUtils/getCateCoordinateOfLine.spec.ts +83 -0
  591. package/test/util/ChartUtils/getStackedData.spec.ts +416 -0
  592. package/test/util/ChartUtils/truncateByDomain.spec.ts +70 -0
  593. package/test/util/DataUtils.spec.ts +385 -0
  594. package/test/util/DomUtils.spec.tsx +117 -0
  595. package/test/util/FunnelUtils.spec.tsx +70 -0
  596. package/test/util/Global.spec.ts +11 -0
  597. package/test/util/LRUCache.spec.ts +81 -0
  598. package/test/util/LogUtils.spec.ts +45 -0
  599. package/test/util/PolarUtils.spec.ts +66 -0
  600. package/test/util/ReduceCssCalcPrototype.spec.ts +141 -0
  601. package/test/util/ShallowEqual.spec.ts +102 -0
  602. package/test/util/TickUtils.spec.ts +29 -0
  603. package/test/util/axisPropsAreEqual.spec.ts +93 -0
  604. package/test/util/createChartHelpers.spec.tsx +210 -0
  605. package/test/util/cursor/getCursorPoints.spec.ts +136 -0
  606. package/test/util/cursor/getCursorRectangle.spec.ts +50 -0
  607. package/test/util/cursor/getRadialCursorPoints.spec.ts +36 -0
  608. package/test/util/errorValue.spec.ts +69 -0
  609. package/test/util/getEveryNth.spec.ts +39 -0
  610. package/test/util/getRadiusAndStrokeWidthFromDot.spec.ts +51 -0
  611. package/test/util/getRelativeCoordinate.spec.ts +250 -0
  612. package/test/util/getSliced.spec.ts +45 -0
  613. package/test/util/isDomainSpecifiedByUser.spec.ts +207 -0
  614. package/test/util/isWellBehavedNumber.spec.ts +54 -0
  615. package/test/util/payload/getUniqPayload.spec.ts +56 -0
  616. package/test/util/propsAreEqual.spec.ts +75 -0
  617. package/test/util/round.spec.ts +112 -0
  618. package/test/util/scale/arithmetic.spec.ts +61 -0
  619. package/test/util/scale/createCategoricalInverse.spec.ts +84 -0
  620. package/test/util/scale/getNiceTickValues.spec.ts +421 -0
  621. package/test/util/scale/getTickValuesFixedDomain.spec.ts +155 -0
  622. package/test/util/svgPropertiesAndEvents.spec.tsx +206 -0
  623. package/test/util/svgPropertiesNoEvents.spec.tsx +228 -0
  624. package/test/util/tooltip/translate.spec.ts +396 -0
  625. package/test/util/useAnimationId.spec.tsx +59 -0
  626. package/test/util/useElementOffset.spec.tsx +173 -0
  627. package/test/util/usePrefersReducedMotion.spec.ts +54 -0
  628. package/test/util/useUniqueId.spec.ts +99 -0
  629. package/test/utils/diagnostics-allowlist.ts +18 -0
  630. package/test/utils/diagnostics.ts +58 -0
  631. package/test/zIndex/AllZIndexPortals.spec.tsx +83 -0
  632. package/test/zIndex/DefaultZIndexes.spec.ts +80 -0
  633. package/test/zIndex/DynamicZIndex.spec.tsx +102 -0
  634. package/test/zIndex/ZIndexLayer.portalOwner.spec.tsx +125 -0
  635. package/test/zIndex/componentZIndex.spec.tsx +255 -0
  636. package/test/zIndex/getZIndexFromUnknown.spec.ts +51 -0
  637. package/test/zIndex/multiChartZIndexIsolation.spec.tsx +90 -0
  638. package/test/zIndex/zIndexSelectors.spec.ts +172 -0
  639. package/tsconfig.json +11 -0
@@ -0,0 +1,142 @@
1
+ // Ported from recharts 3.9.0 src/animation/CSSTransitionAnimate.tsx.
2
+ //
3
+ // Solid 2.0 port of the CSS-transition render-prop driver, on the v3.9 engine
4
+ // (CSSTransitionAnimation handle + injectable AnimationController). Deviations:
5
+ // - `resolveDefaultProps` → per-prop `?? default` accessors.
6
+ // - `useState` → `createSignal`; the `initialized` `useRef` → a `createSignal`
7
+ // flipped in the start effect and read reactively in the render memo.
8
+ // - `usePrefersReducedMotion()` returns an Accessor → call it.
9
+ // - the `useEffect` → two-arg `createEffect(compute, apply)`; cleanup returned
10
+ // from the apply phase.
11
+ // - `return children(style)` → a reactive `<>{props.children(styleObject())}</>`.
12
+ // - the children style is a `Record<string, string | undefined>`: the dynamic
13
+ // `[attributeName]` key can't be typed against Solid's stricter `JSX.CSSProperties`,
14
+ // so consumers read the known keys (e.g. `transform`/`transition`) into their style.
15
+ import { createEffect, createMemo, createSignal, untrack } from "solid-js";
16
+ import type { JSX } from "@solidjs/web";
17
+ import { noop } from "../util/DataUtils";
18
+ import { getTransitionVal } from "./util";
19
+ import { Global } from "../util/Global";
20
+ import { usePrefersReducedMotion } from "../util/usePrefersReducedMotion";
21
+ import { CSSTransitionAnimation } from "./AnimationHandle";
22
+ import type { EasingInput, NamedBezier } from "./easing";
23
+ import { RequestAnimationFrameTimeoutController } from "./timeoutController";
24
+ import type { AnimationController } from "./AnimationController";
25
+ import { useAnimationController } from "./useAnimationController";
26
+
27
+ /** The style object handed to the render-prop child (dynamic `[attributeName]` key). */
28
+ export type CSSTransitionStyle = Record<string, string | undefined>;
29
+
30
+ /**
31
+ * A CSS transition can only use a named/cubic-bezier easing — `spring` and custom
32
+ * function easings have no CSS equivalent, so they fall back to `ease`.
33
+ */
34
+ export function extractCssEasing(easingInput: EasingInput): NamedBezier {
35
+ if (easingInput === "spring" || typeof easingInput !== "string") {
36
+ return "ease";
37
+ }
38
+ return easingInput;
39
+ }
40
+
41
+ interface CSSTransitionAnimateProps {
42
+ animationId: string;
43
+ animationController?: AnimationController;
44
+ duration?: number;
45
+ begin?: number;
46
+ easing?: EasingInput;
47
+ isActive?: boolean | "auto";
48
+ canBegin?: boolean;
49
+ from: string;
50
+ to: string;
51
+ attributeName: string;
52
+ onAnimationStart?: () => void;
53
+ onAnimationEnd?: () => void;
54
+ children: (style: CSSTransitionStyle) => JSX.Element;
55
+ }
56
+
57
+ export function CSSTransitionAnimate(props: CSSTransitionAnimateProps): JSX.Element {
58
+ const duration = (): number => props.duration ?? 1000;
59
+ const easing = (): NamedBezier => extractCssEasing(props.easing ?? "ease");
60
+ const begin = (): number => props.begin ?? 0;
61
+ const canBegin = (): boolean => props.canBegin ?? true;
62
+ const isActiveProp = (): boolean | "auto" => props.isActive ?? true;
63
+ const onAnimationStartProp = (): (() => void) => props.onAnimationStart ?? noop;
64
+ const onAnimationEnd = (): (() => void) => props.onAnimationEnd ?? noop;
65
+
66
+ const prefersReducedMotion = usePrefersReducedMotion();
67
+
68
+ const isActive = (): boolean => {
69
+ const active = isActiveProp();
70
+ return active === "auto" ? !Global.isSsr && !prefersReducedMotion() : active;
71
+ };
72
+
73
+ const animationController = useAnimationController(props.animationController);
74
+
75
+ const [style, setStyle] = createSignal<string>(
76
+ untrack(() => (isActive() ? props.from : props.to)),
77
+ );
78
+ const [initialized, setInitialized] = createSignal(false);
79
+
80
+ // Start (and clean up) the animation when its inputs change. `onStart` closes over
81
+ // the already-read `deps.from` (reading props.from when the controller invokes it
82
+ // later would be an untracked read).
83
+ createEffect(
84
+ () => ({
85
+ active: isActive(),
86
+ canBegin: canBegin(),
87
+ duration: duration(),
88
+ easing: easing(),
89
+ begin: begin(),
90
+ from: props.from,
91
+ to: props.to,
92
+ animationId: props.animationId,
93
+ attributeName: props.attributeName,
94
+ onStart: onAnimationStartProp(),
95
+ onEnd: onAnimationEnd(),
96
+ controller: animationController,
97
+ }),
98
+ (deps) => {
99
+ if (!deps.active || !deps.canBegin) {
100
+ return undefined;
101
+ }
102
+ setInitialized(true);
103
+ const onStart = (): void => {
104
+ setStyle(deps.from);
105
+ deps.onStart();
106
+ };
107
+ const timeoutController = new RequestAnimationFrameTimeoutController();
108
+ const animation = new CSSTransitionAnimation({
109
+ animationId: deps.animationId + deps.attributeName,
110
+ easing: deps.easing,
111
+ animationDuration: deps.duration,
112
+ animationBegin: deps.begin,
113
+ onAnimationStart: onStart,
114
+ onAnimationEnd: deps.onEnd,
115
+ from: deps.from,
116
+ to: deps.to,
117
+ });
118
+ return deps.controller(timeoutController, animation, (next) => setStyle(String(next)));
119
+ },
120
+ );
121
+
122
+ // All reactive reads live in this memo (a tracking scope); the JSX insert below
123
+ // re-invokes the render-prop child whenever the resolved style changes.
124
+ const styleObject = createMemo<CSSTransitionStyle>(() => {
125
+ if (!isActive()) {
126
+ // isActive=false: render the final style immediately, no transition.
127
+ return { [props.attributeName]: props.to };
128
+ }
129
+ if (!canBegin()) {
130
+ return { [props.attributeName]: props.from };
131
+ }
132
+ if (initialized()) {
133
+ return {
134
+ transition: getTransitionVal([props.attributeName], duration(), easing()),
135
+ [props.attributeName]: style(),
136
+ };
137
+ }
138
+ return { [props.attributeName]: props.from };
139
+ });
140
+
141
+ return <>{props.children(styleObject())}</>;
142
+ }
@@ -0,0 +1,107 @@
1
+ // Ported from recharts 3.9.0 src/animation/JavascriptAnimate.tsx.
2
+ //
3
+ // Solid 2.0 port of the JavaScript render-prop animation driver, on the v3.9 engine
4
+ // (JavascriptAnimation handle + injectable AnimationController). Deviations:
5
+ // - `resolveDefaultProps` → per-prop `?? default` accessors.
6
+ // - `useState` → `createSignal`; the two `useEffect`s → two-arg
7
+ // `createEffect(compute, apply)`; the start effect returns its cleanup.
8
+ // - `usePrefersReducedMotion()` returns an Accessor → call it.
9
+ // - `return children(Number(style))` → a reactive `{props.children(...)}` so the
10
+ // function child re-runs each frame (Solid components run once).
11
+ // This is the same driver `AnimatedItems` uses; standalone consumers are the shape
12
+ // update-tweens (`Rectangle`, `Trapezoid`).
13
+ import { createSignal, createEffect, untrack } from "solid-js";
14
+ import type { JSX } from "@solidjs/web";
15
+ import { noop } from "../util/DataUtils";
16
+ import { createEasingFunction, type EasingInput } from "./easing";
17
+ import { Global } from "../util/Global";
18
+ import { usePrefersReducedMotion } from "../util/usePrefersReducedMotion";
19
+ import { JavascriptAnimation } from "./AnimationHandle";
20
+ import { RequestAnimationFrameTimeoutController } from "./timeoutController";
21
+ import type { AnimationController } from "./AnimationController";
22
+ import { useAnimationController } from "./useAnimationController";
23
+
24
+ interface JavascriptAnimateProps {
25
+ animationId: string;
26
+ animationController?: AnimationController;
27
+ duration?: number;
28
+ begin?: number;
29
+ easing?: EasingInput;
30
+ isActive?: boolean | "auto";
31
+ canBegin?: boolean;
32
+ onAnimationStart?: () => void;
33
+ onAnimationEnd?: () => void;
34
+ children: (time: number) => JSX.Element;
35
+ }
36
+
37
+ const from = 0;
38
+ const to = 1;
39
+
40
+ export function JavascriptAnimate(props: JavascriptAnimateProps): JSX.Element {
41
+ const duration = (): number => props.duration ?? 1000;
42
+ const easing = (): EasingInput => props.easing ?? "ease";
43
+ const begin = (): number => props.begin ?? 0;
44
+ const canBegin = (): boolean => props.canBegin ?? true;
45
+ const isActiveProp = (): boolean | "auto" => props.isActive ?? true;
46
+ const onAnimationStart = (): (() => void) => props.onAnimationStart ?? noop;
47
+ const onAnimationEnd = (): (() => void) => props.onAnimationEnd ?? noop;
48
+
49
+ const prefersReducedMotion = usePrefersReducedMotion();
50
+
51
+ const isActive = (): boolean => {
52
+ const active = isActiveProp();
53
+ return active === "auto" ? !Global.isSsr && !prefersReducedMotion() : active;
54
+ };
55
+
56
+ const animationController = useAnimationController(props.animationController);
57
+
58
+ const [style, setStyle] = createSignal<number | string>(untrack(() => (isActive() ? from : to)));
59
+
60
+ // When the animation is not active, jump straight to the final state.
61
+ createEffect(
62
+ () => isActive(),
63
+ (active) => {
64
+ if (!active) {
65
+ setStyle(to);
66
+ }
67
+ },
68
+ );
69
+
70
+ // Start (and clean up) the animation when its inputs change.
71
+ createEffect(
72
+ () => ({
73
+ active: isActive(),
74
+ canBegin: canBegin(),
75
+ duration: duration(),
76
+ easing: easing(),
77
+ begin: begin(),
78
+ animationId: props.animationId,
79
+ onAnimationStart: onAnimationStart(),
80
+ onAnimationEnd: onAnimationEnd(),
81
+ controller: animationController,
82
+ }),
83
+ (deps) => {
84
+ if (!deps.active || !deps.canBegin) {
85
+ return undefined;
86
+ }
87
+ const easingFunction = createEasingFunction(deps.easing);
88
+ if (easingFunction == null) {
89
+ return undefined;
90
+ }
91
+ const timeoutController = new RequestAnimationFrameTimeoutController();
92
+ const animation = new JavascriptAnimation({
93
+ animationId: deps.animationId,
94
+ easing: easingFunction,
95
+ animationDuration: deps.duration,
96
+ animationBegin: deps.begin,
97
+ onAnimationStart: deps.onAnimationStart,
98
+ onAnimationEnd: deps.onAnimationEnd,
99
+ from,
100
+ to,
101
+ });
102
+ return deps.controller(timeoutController, animation, setStyle);
103
+ },
104
+ );
105
+
106
+ return <>{props.children(Number(style()))}</>;
107
+ }
@@ -0,0 +1,261 @@
1
+ // Ported from recharts 3.8.1 src/animation/easing.ts (commit 7a23854).
2
+ // Pure math — no framework surface — so behavior is byte-identical to recharts.
3
+ // Deviations from the reference are limited to satisfying this repo's type
4
+ // discipline (no `as` / no non-null `!`); `as const` is retained where it
5
+ // brands the stepper/bezier discriminant.
6
+
7
+ export const ACCURACY = 1e-4;
8
+
9
+ const cubicBezierFactor = (c1: number, c2: number): number[] => [
10
+ 0,
11
+ 3 * c1,
12
+ 3 * c2 - 6 * c1,
13
+ 3 * c1 - 3 * c2 + 1,
14
+ ];
15
+
16
+ const evaluatePolynomial = (params: ReadonlyArray<number>, t: number): number =>
17
+ params.map((param, i) => param * t ** i).reduce((pre, curr) => pre + curr);
18
+
19
+ const cubicBezier = (c1: number, c2: number) => (t: number) => {
20
+ const params = cubicBezierFactor(c1, c2);
21
+
22
+ return evaluatePolynomial(params, t);
23
+ };
24
+
25
+ const derivativeCubicBezier = (c1: number, c2: number) => (t: number) => {
26
+ const params = cubicBezierFactor(c1, c2);
27
+ const newParams = [...params.map((param, i) => param * i).slice(1), 0];
28
+
29
+ return evaluatePolynomial(newParams, t);
30
+ };
31
+
32
+ type CubicBezierTemplate = `cubic-bezier(${number},${number},${number},${number})`;
33
+
34
+ export type NamedBezier =
35
+ | "linear"
36
+ | "ease"
37
+ | "ease-in"
38
+ | "ease-out"
39
+ | "ease-in-out"
40
+ | CubicBezierTemplate;
41
+
42
+ type BezierInput = [NamedBezier] | [number, number, number, number];
43
+
44
+ export type BezierEasingFunction = {
45
+ isStepper: false;
46
+ (t: number): number;
47
+ };
48
+
49
+ const parseCubicBezier = (easing: string): [number, number, number, number] | null => {
50
+ const easingParts = easing.split("(");
51
+ if (easingParts.length !== 2 || easingParts[0] !== "cubic-bezier") {
52
+ return null;
53
+ }
54
+ const numbers = easingParts[1]?.split(")")[0]?.split(",");
55
+ if (numbers == null || numbers.length !== 4) {
56
+ return null;
57
+ }
58
+ const [x1, y1, x2, y2] = numbers.map((x: string) => parseFloat(x));
59
+ // `noUncheckedIndexedAccess` keeps the tuple elements possibly-undefined even
60
+ // after the length check, so narrow explicitly instead of asserting.
61
+ if (x1 === undefined || y1 === undefined || x2 === undefined || y2 === undefined) {
62
+ return null;
63
+ }
64
+ return [x1, y1, x2, y2];
65
+ };
66
+
67
+ const getBezierCoordinates = (...args: BezierInput): [number, number, number, number] => {
68
+ if (args.length === 1) {
69
+ switch (args[0]) {
70
+ case "linear":
71
+ return [0.0, 0.0, 1.0, 1.0];
72
+ case "ease":
73
+ return [0.25, 0.1, 0.25, 1.0];
74
+ case "ease-in":
75
+ return [0.42, 0.0, 1.0, 1.0];
76
+ case "ease-out":
77
+ return [0.42, 0.0, 0.58, 1.0];
78
+ case "ease-in-out":
79
+ return [0.0, 0.0, 0.58, 1.0];
80
+ default: {
81
+ const easing = parseCubicBezier(args[0]);
82
+ if (easing) {
83
+ return easing;
84
+ }
85
+ }
86
+ }
87
+ }
88
+
89
+ if (args.length === 4) {
90
+ return args;
91
+ }
92
+
93
+ // Fallback for invalid inputs. The previous implementation was buggy and would lead to NaN.
94
+ // Returning linear easing is a safe default.
95
+ return [0.0, 0.0, 1.0, 1.0];
96
+ };
97
+
98
+ const createBezierEasing = (
99
+ x1: number,
100
+ y1: number,
101
+ x2: number,
102
+ y2: number,
103
+ ): BezierEasingFunction => {
104
+ const curveX = cubicBezier(x1, x2);
105
+ const curveY = cubicBezier(y1, y2);
106
+ const derCurveX = derivativeCubicBezier(x1, x2);
107
+ const rangeValue = (value: number): number => {
108
+ if (value > 1) {
109
+ return 1;
110
+ }
111
+ if (value < 0) {
112
+ return 0;
113
+ }
114
+
115
+ return value;
116
+ };
117
+
118
+ const bezier = (_t: number) => {
119
+ const t = _t > 1 ? 1 : _t;
120
+ let x = t;
121
+
122
+ for (let i = 0; i < 8; ++i) {
123
+ const evalT = curveX(x) - t;
124
+ const derVal = derCurveX(x);
125
+
126
+ if (Math.abs(evalT - t) < ACCURACY || derVal < ACCURACY) {
127
+ return curveY(x);
128
+ }
129
+
130
+ x = rangeValue(x - evalT / derVal);
131
+ }
132
+
133
+ return curveY(x);
134
+ };
135
+
136
+ bezier.isStepper = false as const;
137
+
138
+ return bezier;
139
+ };
140
+
141
+ // calculate cubic-bezier using Newton's method
142
+ export const configBezier = (...args: BezierInput): BezierEasingFunction => {
143
+ return createBezierEasing(...getBezierCoordinates(...args));
144
+ };
145
+
146
+ type SpringInput = {
147
+ /**
148
+ * The stiffness coefficient of the spring.
149
+ * Higher values create a more forceful, faster pull towards the target.
150
+ */
151
+ stiff?: number;
152
+ /**
153
+ * The damping coefficient (friction/resistance).
154
+ * Higher values reduce bounciness and stop oscillation sooner. Lower values create more bounce.
155
+ */
156
+ damping?: number;
157
+ /**
158
+ * The physics simulation time step in milliseconds.
159
+ * Determines the granularity of the baked frames. 16.67ms roughly equals a 60fps frame delta.
160
+ */
161
+ dt?: number;
162
+ };
163
+
164
+ /**
165
+ * Creates a performance-optimized, progress-based spring easing function.
166
+ * It pre-calculates ("bakes") spring physics frames upfront based on a fixed duration,
167
+ * then returns a pure, lightweight function mapping progress (0 to 1) to the animated position.
168
+ * This approach is ideal for low-power devices because it removes heavy physics math from the frame loop.
169
+ */
170
+ export const createSpringEasing = (config: SpringInput = {}): ProgressEasingFn => {
171
+ const { stiff = 100, damping = 8, dt = 16.67 } = config;
172
+ const destX = 1;
173
+
174
+ const positions: number[] = [0];
175
+ let currX = 0;
176
+ let currV = 0;
177
+
178
+ // Safety valve to prevent accidental infinite loops if physics config is extreme
179
+ const maxIterations = 10000;
180
+ let iterations = 0;
181
+
182
+ // 1. Run the simulation until the spring completely stops moving
183
+ while (iterations < maxIterations) {
184
+ const FSpring = -(currX - destX) * stiff;
185
+ const FDamping = currV * damping;
186
+
187
+ currV += ((FSpring - FDamping) * dt) / 1000;
188
+ currX += (currV * dt) / 1000;
189
+
190
+ positions.push(currX);
191
+
192
+ // Stop only when position is essentially at 1.0 AND bounce velocity has died down
193
+ if (Math.abs(currX - destX) < ACCURACY && Math.abs(currV) < ACCURACY) {
194
+ break;
195
+ }
196
+ iterations++;
197
+ }
198
+
199
+ // Force the absolute final element to be exactly 1.0 for a perfect finish
200
+ positions[positions.length - 1] = destX;
201
+ const maxIndex = positions.length - 1;
202
+
203
+ // 2. The ultra-smooth runtime function mapping your 0..1 progress
204
+ return (t: number): number => {
205
+ if (t <= 0) return 0;
206
+ if (t >= 1) return destX;
207
+
208
+ // Scale t (0..1) proportionally across our entire pre-calculated array
209
+ const exactFrame = t * maxIndex;
210
+ const index = Math.floor(exactFrame);
211
+ const fraction = exactFrame - index;
212
+
213
+ // Blend between the two closest frames
214
+ return (
215
+ (positions[index] ?? 0) + ((positions[index + 1] ?? 0) - (positions[index] ?? 0)) * fraction
216
+ );
217
+ };
218
+ };
219
+
220
+ /**
221
+ * The unified easing-function shape (v3.9): maps progress `t` to an eased value.
222
+ * `ProgressEasingFn` is the canonical name; `EasingFunction` is kept as an alias for
223
+ * callers that reference it.
224
+ */
225
+ export type ProgressEasingFn = (t: number) => number;
226
+ export type EasingFunction = ProgressEasingFn;
227
+
228
+ /**
229
+ * @inline
230
+ */
231
+ export type EasingInput = NamedBezier | "spring" | EasingFunction;
232
+
233
+ /**
234
+ * The v3.9 easing resolver. Resolves an {@link EasingInput} to a {@link ProgressEasingFn}:
235
+ * named beziers, `cubic-bezier(...)`, `'spring'` via baked physics, or a passed-through
236
+ * `(t) => number`. Returns `null` for unrecognized input.
237
+ */
238
+ export const createEasingFunction = (easing: EasingInput): ProgressEasingFn | null => {
239
+ if (typeof easing === "string") {
240
+ switch (easing) {
241
+ case "ease":
242
+ case "ease-in-out":
243
+ case "ease-out":
244
+ case "ease-in":
245
+ case "linear":
246
+ return configBezier(easing);
247
+ case "spring":
248
+ return createSpringEasing();
249
+ default:
250
+ if (easing.split("(")[0] === "cubic-bezier") {
251
+ return configBezier(easing);
252
+ }
253
+ }
254
+ }
255
+
256
+ if (typeof easing === "function") {
257
+ return easing;
258
+ }
259
+
260
+ return null;
261
+ };