@humanspeak/svelte-motion 0.1.3 → 0.1.5

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 (359) hide show
  1. package/README.md +32 -0
  2. package/dist/components/AnimatePresence.svelte +32 -0
  3. package/dist/components/AnimatePresence.svelte.d.ts +8 -0
  4. package/dist/components/MotionConfig.svelte +11 -2
  5. package/dist/components/MotionConfig.svelte.d.ts +1 -1
  6. package/dist/components/motionConfig.context.js +1 -1
  7. package/dist/html/A.svelte +1 -1
  8. package/dist/html/A.svelte.d.ts +1 -1
  9. package/dist/html/Abbr.svelte +1 -1
  10. package/dist/html/Abbr.svelte.d.ts +1 -1
  11. package/dist/html/Address.svelte +1 -1
  12. package/dist/html/Address.svelte.d.ts +1 -1
  13. package/dist/html/Animate.svelte +1 -1
  14. package/dist/html/Animate.svelte.d.ts +1 -1
  15. package/dist/html/Animatemotion.svelte +1 -1
  16. package/dist/html/Animatemotion.svelte.d.ts +1 -1
  17. package/dist/html/Animatetransform.svelte +1 -1
  18. package/dist/html/Animatetransform.svelte.d.ts +1 -1
  19. package/dist/html/Area.svelte +1 -1
  20. package/dist/html/Area.svelte.d.ts +1 -1
  21. package/dist/html/Article.svelte +1 -1
  22. package/dist/html/Article.svelte.d.ts +1 -1
  23. package/dist/html/Aside.svelte +1 -1
  24. package/dist/html/Aside.svelte.d.ts +1 -1
  25. package/dist/html/Audio.svelte +1 -1
  26. package/dist/html/Audio.svelte.d.ts +1 -1
  27. package/dist/html/B.svelte +1 -1
  28. package/dist/html/B.svelte.d.ts +1 -1
  29. package/dist/html/Base.svelte +1 -1
  30. package/dist/html/Base.svelte.d.ts +1 -1
  31. package/dist/html/Bdi.svelte +1 -1
  32. package/dist/html/Bdi.svelte.d.ts +1 -1
  33. package/dist/html/Bdo.svelte +1 -1
  34. package/dist/html/Bdo.svelte.d.ts +1 -1
  35. package/dist/html/Blockquote.svelte +1 -1
  36. package/dist/html/Blockquote.svelte.d.ts +1 -1
  37. package/dist/html/Br.svelte +1 -1
  38. package/dist/html/Br.svelte.d.ts +1 -1
  39. package/dist/html/Button.svelte +1 -1
  40. package/dist/html/Button.svelte.d.ts +1 -1
  41. package/dist/html/Canvas.svelte +1 -1
  42. package/dist/html/Canvas.svelte.d.ts +1 -1
  43. package/dist/html/Caption.svelte +1 -1
  44. package/dist/html/Caption.svelte.d.ts +1 -1
  45. package/dist/html/Circle.svelte +1 -1
  46. package/dist/html/Circle.svelte.d.ts +1 -1
  47. package/dist/html/Cite.svelte +1 -1
  48. package/dist/html/Cite.svelte.d.ts +1 -1
  49. package/dist/html/Clippath.svelte +1 -1
  50. package/dist/html/Clippath.svelte.d.ts +1 -1
  51. package/dist/html/Code.svelte +1 -1
  52. package/dist/html/Code.svelte.d.ts +1 -1
  53. package/dist/html/Col.svelte +1 -1
  54. package/dist/html/Col.svelte.d.ts +1 -1
  55. package/dist/html/Colgroup.svelte +1 -1
  56. package/dist/html/Colgroup.svelte.d.ts +1 -1
  57. package/dist/html/Cursor.svelte +1 -1
  58. package/dist/html/Cursor.svelte.d.ts +1 -1
  59. package/dist/html/Data.svelte +1 -1
  60. package/dist/html/Data.svelte.d.ts +1 -1
  61. package/dist/html/Datalist.svelte +1 -1
  62. package/dist/html/Datalist.svelte.d.ts +1 -1
  63. package/dist/html/Dd.svelte +1 -1
  64. package/dist/html/Dd.svelte.d.ts +1 -1
  65. package/dist/html/Defs.svelte +1 -1
  66. package/dist/html/Defs.svelte.d.ts +1 -1
  67. package/dist/html/Del.svelte +1 -1
  68. package/dist/html/Del.svelte.d.ts +1 -1
  69. package/dist/html/Desc.svelte +1 -1
  70. package/dist/html/Desc.svelte.d.ts +1 -1
  71. package/dist/html/Details.svelte +1 -1
  72. package/dist/html/Details.svelte.d.ts +1 -1
  73. package/dist/html/Dfn.svelte +1 -1
  74. package/dist/html/Dfn.svelte.d.ts +1 -1
  75. package/dist/html/Dialog.svelte +1 -1
  76. package/dist/html/Dialog.svelte.d.ts +1 -1
  77. package/dist/html/Div.svelte +1 -1
  78. package/dist/html/Div.svelte.d.ts +1 -1
  79. package/dist/html/Dl.svelte +1 -1
  80. package/dist/html/Dl.svelte.d.ts +1 -1
  81. package/dist/html/Dt.svelte +1 -1
  82. package/dist/html/Dt.svelte.d.ts +1 -1
  83. package/dist/html/Ellipse.svelte +1 -1
  84. package/dist/html/Ellipse.svelte.d.ts +1 -1
  85. package/dist/html/Em.svelte +1 -1
  86. package/dist/html/Em.svelte.d.ts +1 -1
  87. package/dist/html/Embed.svelte +1 -1
  88. package/dist/html/Embed.svelte.d.ts +1 -1
  89. package/dist/html/Feblend.svelte +1 -1
  90. package/dist/html/Feblend.svelte.d.ts +1 -1
  91. package/dist/html/Fecolormatrix.svelte +1 -1
  92. package/dist/html/Fecolormatrix.svelte.d.ts +1 -1
  93. package/dist/html/Fecomponenttransfer.svelte +1 -1
  94. package/dist/html/Fecomponenttransfer.svelte.d.ts +1 -1
  95. package/dist/html/Fecomposite.svelte +1 -1
  96. package/dist/html/Fecomposite.svelte.d.ts +1 -1
  97. package/dist/html/Feconvolvematrix.svelte +1 -1
  98. package/dist/html/Feconvolvematrix.svelte.d.ts +1 -1
  99. package/dist/html/Fediffuselighting.svelte +1 -1
  100. package/dist/html/Fediffuselighting.svelte.d.ts +1 -1
  101. package/dist/html/Fedisplacementmap.svelte +1 -1
  102. package/dist/html/Fedisplacementmap.svelte.d.ts +1 -1
  103. package/dist/html/Fedistantlight.svelte +1 -1
  104. package/dist/html/Fedistantlight.svelte.d.ts +1 -1
  105. package/dist/html/Feflood.svelte +1 -1
  106. package/dist/html/Feflood.svelte.d.ts +1 -1
  107. package/dist/html/Fefunca.svelte +1 -1
  108. package/dist/html/Fefunca.svelte.d.ts +1 -1
  109. package/dist/html/Fefuncb.svelte +1 -1
  110. package/dist/html/Fefuncb.svelte.d.ts +1 -1
  111. package/dist/html/Fefuncg.svelte +1 -1
  112. package/dist/html/Fefuncg.svelte.d.ts +1 -1
  113. package/dist/html/Fefuncr.svelte +1 -1
  114. package/dist/html/Fefuncr.svelte.d.ts +1 -1
  115. package/dist/html/Fegaussianblur.svelte +1 -1
  116. package/dist/html/Fegaussianblur.svelte.d.ts +1 -1
  117. package/dist/html/Feimage.svelte +1 -1
  118. package/dist/html/Feimage.svelte.d.ts +1 -1
  119. package/dist/html/Femerge.svelte +1 -1
  120. package/dist/html/Femerge.svelte.d.ts +1 -1
  121. package/dist/html/Femergenode.svelte +1 -1
  122. package/dist/html/Femergenode.svelte.d.ts +1 -1
  123. package/dist/html/Femorphology.svelte +1 -1
  124. package/dist/html/Femorphology.svelte.d.ts +1 -1
  125. package/dist/html/Feoffset.svelte +1 -1
  126. package/dist/html/Feoffset.svelte.d.ts +1 -1
  127. package/dist/html/Fepointlight.svelte +1 -1
  128. package/dist/html/Fepointlight.svelte.d.ts +1 -1
  129. package/dist/html/Fespecularlighting.svelte +1 -1
  130. package/dist/html/Fespecularlighting.svelte.d.ts +1 -1
  131. package/dist/html/Fespotlight.svelte +1 -1
  132. package/dist/html/Fespotlight.svelte.d.ts +1 -1
  133. package/dist/html/Fetile.svelte +1 -1
  134. package/dist/html/Fetile.svelte.d.ts +1 -1
  135. package/dist/html/Feturbulence.svelte +1 -1
  136. package/dist/html/Feturbulence.svelte.d.ts +1 -1
  137. package/dist/html/Fieldset.svelte +1 -1
  138. package/dist/html/Fieldset.svelte.d.ts +1 -1
  139. package/dist/html/Figcaption.svelte +1 -1
  140. package/dist/html/Figcaption.svelte.d.ts +1 -1
  141. package/dist/html/Figure.svelte +1 -1
  142. package/dist/html/Figure.svelte.d.ts +1 -1
  143. package/dist/html/Filter.svelte +1 -1
  144. package/dist/html/Filter.svelte.d.ts +1 -1
  145. package/dist/html/Footer.svelte +1 -1
  146. package/dist/html/Footer.svelte.d.ts +1 -1
  147. package/dist/html/Foreignobject.svelte +1 -1
  148. package/dist/html/Foreignobject.svelte.d.ts +1 -1
  149. package/dist/html/Form.svelte +1 -1
  150. package/dist/html/Form.svelte.d.ts +1 -1
  151. package/dist/html/G.svelte +1 -1
  152. package/dist/html/G.svelte.d.ts +1 -1
  153. package/dist/html/H1.svelte +1 -1
  154. package/dist/html/H1.svelte.d.ts +1 -1
  155. package/dist/html/H2.svelte +1 -1
  156. package/dist/html/H2.svelte.d.ts +1 -1
  157. package/dist/html/H3.svelte +1 -1
  158. package/dist/html/H3.svelte.d.ts +1 -1
  159. package/dist/html/H4.svelte +1 -1
  160. package/dist/html/H4.svelte.d.ts +1 -1
  161. package/dist/html/H5.svelte +1 -1
  162. package/dist/html/H5.svelte.d.ts +1 -1
  163. package/dist/html/H6.svelte +1 -1
  164. package/dist/html/H6.svelte.d.ts +1 -1
  165. package/dist/html/Header.svelte +1 -1
  166. package/dist/html/Header.svelte.d.ts +1 -1
  167. package/dist/html/Hgroup.svelte +1 -1
  168. package/dist/html/Hgroup.svelte.d.ts +1 -1
  169. package/dist/html/Hr.svelte +1 -1
  170. package/dist/html/Hr.svelte.d.ts +1 -1
  171. package/dist/html/I.svelte +1 -1
  172. package/dist/html/I.svelte.d.ts +1 -1
  173. package/dist/html/Iframe.svelte +1 -1
  174. package/dist/html/Iframe.svelte.d.ts +1 -1
  175. package/dist/html/Image.svelte +1 -1
  176. package/dist/html/Image.svelte.d.ts +1 -1
  177. package/dist/html/Img.svelte +1 -1
  178. package/dist/html/Img.svelte.d.ts +1 -1
  179. package/dist/html/Input.svelte +1 -1
  180. package/dist/html/Input.svelte.d.ts +1 -1
  181. package/dist/html/Ins.svelte +1 -1
  182. package/dist/html/Ins.svelte.d.ts +1 -1
  183. package/dist/html/Kbd.svelte +1 -1
  184. package/dist/html/Kbd.svelte.d.ts +1 -1
  185. package/dist/html/Label.svelte +1 -1
  186. package/dist/html/Label.svelte.d.ts +1 -1
  187. package/dist/html/Legend.svelte +1 -1
  188. package/dist/html/Legend.svelte.d.ts +1 -1
  189. package/dist/html/Li.svelte +1 -1
  190. package/dist/html/Li.svelte.d.ts +1 -1
  191. package/dist/html/Line.svelte +1 -1
  192. package/dist/html/Line.svelte.d.ts +1 -1
  193. package/dist/html/Lineargradient.svelte +1 -1
  194. package/dist/html/Lineargradient.svelte.d.ts +1 -1
  195. package/dist/html/Main.svelte +1 -1
  196. package/dist/html/Main.svelte.d.ts +1 -1
  197. package/dist/html/Map.svelte +1 -1
  198. package/dist/html/Map.svelte.d.ts +1 -1
  199. package/dist/html/Mark.svelte +1 -1
  200. package/dist/html/Mark.svelte.d.ts +1 -1
  201. package/dist/html/Marker.svelte +1 -1
  202. package/dist/html/Marker.svelte.d.ts +1 -1
  203. package/dist/html/Mask.svelte +1 -1
  204. package/dist/html/Mask.svelte.d.ts +1 -1
  205. package/dist/html/Math.svelte +1 -1
  206. package/dist/html/Math.svelte.d.ts +1 -1
  207. package/dist/html/Menu.svelte +1 -1
  208. package/dist/html/Menu.svelte.d.ts +1 -1
  209. package/dist/html/Metadata.svelte +1 -1
  210. package/dist/html/Metadata.svelte.d.ts +1 -1
  211. package/dist/html/Meter.svelte +1 -1
  212. package/dist/html/Meter.svelte.d.ts +1 -1
  213. package/dist/html/Mpath.svelte +1 -1
  214. package/dist/html/Mpath.svelte.d.ts +1 -1
  215. package/dist/html/Nav.svelte +1 -1
  216. package/dist/html/Nav.svelte.d.ts +1 -1
  217. package/dist/html/Noscript.svelte +1 -1
  218. package/dist/html/Noscript.svelte.d.ts +1 -1
  219. package/dist/html/Object.svelte +1 -1
  220. package/dist/html/Object.svelte.d.ts +1 -1
  221. package/dist/html/Ol.svelte +1 -1
  222. package/dist/html/Ol.svelte.d.ts +1 -1
  223. package/dist/html/Optgroup.svelte +1 -1
  224. package/dist/html/Optgroup.svelte.d.ts +1 -1
  225. package/dist/html/Option.svelte +1 -1
  226. package/dist/html/Option.svelte.d.ts +1 -1
  227. package/dist/html/Output.svelte +1 -1
  228. package/dist/html/Output.svelte.d.ts +1 -1
  229. package/dist/html/P.svelte +1 -1
  230. package/dist/html/P.svelte.d.ts +1 -1
  231. package/dist/html/Path.svelte +1 -1
  232. package/dist/html/Path.svelte.d.ts +1 -1
  233. package/dist/html/Pattern.svelte +1 -1
  234. package/dist/html/Pattern.svelte.d.ts +1 -1
  235. package/dist/html/Picture.svelte +1 -1
  236. package/dist/html/Picture.svelte.d.ts +1 -1
  237. package/dist/html/Polygon.svelte +1 -1
  238. package/dist/html/Polygon.svelte.d.ts +1 -1
  239. package/dist/html/Polyline.svelte +1 -1
  240. package/dist/html/Polyline.svelte.d.ts +1 -1
  241. package/dist/html/Pre.svelte +1 -1
  242. package/dist/html/Pre.svelte.d.ts +1 -1
  243. package/dist/html/Progress.svelte +1 -1
  244. package/dist/html/Progress.svelte.d.ts +1 -1
  245. package/dist/html/Q.svelte +1 -1
  246. package/dist/html/Q.svelte.d.ts +1 -1
  247. package/dist/html/Radialgradient.svelte +1 -1
  248. package/dist/html/Radialgradient.svelte.d.ts +1 -1
  249. package/dist/html/Rect.svelte +1 -1
  250. package/dist/html/Rect.svelte.d.ts +1 -1
  251. package/dist/html/Rp.svelte +1 -1
  252. package/dist/html/Rp.svelte.d.ts +1 -1
  253. package/dist/html/Rt.svelte +1 -1
  254. package/dist/html/Rt.svelte.d.ts +1 -1
  255. package/dist/html/Ruby.svelte +1 -1
  256. package/dist/html/Ruby.svelte.d.ts +1 -1
  257. package/dist/html/S.svelte +1 -1
  258. package/dist/html/S.svelte.d.ts +1 -1
  259. package/dist/html/Samp.svelte +1 -1
  260. package/dist/html/Samp.svelte.d.ts +1 -1
  261. package/dist/html/Script.svelte +1 -1
  262. package/dist/html/Script.svelte.d.ts +1 -1
  263. package/dist/html/Search.svelte +1 -1
  264. package/dist/html/Search.svelte.d.ts +1 -1
  265. package/dist/html/Section.svelte +1 -1
  266. package/dist/html/Section.svelte.d.ts +1 -1
  267. package/dist/html/Select.svelte +1 -1
  268. package/dist/html/Select.svelte.d.ts +1 -1
  269. package/dist/html/Selectedcontent.svelte +1 -1
  270. package/dist/html/Selectedcontent.svelte.d.ts +1 -1
  271. package/dist/html/Set.svelte +1 -1
  272. package/dist/html/Set.svelte.d.ts +1 -1
  273. package/dist/html/Slot.svelte +1 -1
  274. package/dist/html/Slot.svelte.d.ts +1 -1
  275. package/dist/html/Small.svelte +1 -1
  276. package/dist/html/Small.svelte.d.ts +1 -1
  277. package/dist/html/Source.svelte +1 -1
  278. package/dist/html/Source.svelte.d.ts +1 -1
  279. package/dist/html/Span.svelte +1 -1
  280. package/dist/html/Span.svelte.d.ts +1 -1
  281. package/dist/html/Stop.svelte +1 -1
  282. package/dist/html/Stop.svelte.d.ts +1 -1
  283. package/dist/html/Strong.svelte +1 -1
  284. package/dist/html/Strong.svelte.d.ts +1 -1
  285. package/dist/html/Style.svelte +1 -1
  286. package/dist/html/Style.svelte.d.ts +1 -1
  287. package/dist/html/Sub.svelte +1 -1
  288. package/dist/html/Sub.svelte.d.ts +1 -1
  289. package/dist/html/Summary.svelte +1 -1
  290. package/dist/html/Summary.svelte.d.ts +1 -1
  291. package/dist/html/Sup.svelte +1 -1
  292. package/dist/html/Sup.svelte.d.ts +1 -1
  293. package/dist/html/Svg.svelte +1 -1
  294. package/dist/html/Svg.svelte.d.ts +1 -1
  295. package/dist/html/Switch.svelte +1 -1
  296. package/dist/html/Switch.svelte.d.ts +1 -1
  297. package/dist/html/Symbol.svelte +1 -1
  298. package/dist/html/Symbol.svelte.d.ts +1 -1
  299. package/dist/html/Table.svelte +1 -1
  300. package/dist/html/Table.svelte.d.ts +1 -1
  301. package/dist/html/Tbody.svelte +1 -1
  302. package/dist/html/Tbody.svelte.d.ts +1 -1
  303. package/dist/html/Td.svelte +1 -1
  304. package/dist/html/Td.svelte.d.ts +1 -1
  305. package/dist/html/Template.svelte +1 -1
  306. package/dist/html/Template.svelte.d.ts +1 -1
  307. package/dist/html/Text.svelte +1 -1
  308. package/dist/html/Text.svelte.d.ts +1 -1
  309. package/dist/html/Textarea.svelte +1 -1
  310. package/dist/html/Textarea.svelte.d.ts +1 -1
  311. package/dist/html/Textpath.svelte +1 -1
  312. package/dist/html/Textpath.svelte.d.ts +1 -1
  313. package/dist/html/Tfoot.svelte +1 -1
  314. package/dist/html/Tfoot.svelte.d.ts +1 -1
  315. package/dist/html/Th.svelte +1 -1
  316. package/dist/html/Th.svelte.d.ts +1 -1
  317. package/dist/html/Thead.svelte +1 -1
  318. package/dist/html/Thead.svelte.d.ts +1 -1
  319. package/dist/html/Time.svelte +1 -1
  320. package/dist/html/Time.svelte.d.ts +1 -1
  321. package/dist/html/Title.svelte +1 -1
  322. package/dist/html/Title.svelte.d.ts +1 -1
  323. package/dist/html/Tr.svelte +1 -1
  324. package/dist/html/Tr.svelte.d.ts +1 -1
  325. package/dist/html/Track.svelte +1 -1
  326. package/dist/html/Track.svelte.d.ts +1 -1
  327. package/dist/html/Tref.svelte +1 -1
  328. package/dist/html/Tref.svelte.d.ts +1 -1
  329. package/dist/html/Tspan.svelte +1 -1
  330. package/dist/html/Tspan.svelte.d.ts +1 -1
  331. package/dist/html/U.svelte +1 -1
  332. package/dist/html/U.svelte.d.ts +1 -1
  333. package/dist/html/Ul.svelte +1 -1
  334. package/dist/html/Ul.svelte.d.ts +1 -1
  335. package/dist/html/Use.svelte +1 -1
  336. package/dist/html/Use.svelte.d.ts +1 -1
  337. package/dist/html/Var.svelte +1 -1
  338. package/dist/html/Var.svelte.d.ts +1 -1
  339. package/dist/html/Video.svelte +1 -1
  340. package/dist/html/Video.svelte.d.ts +1 -1
  341. package/dist/html/View.svelte +1 -1
  342. package/dist/html/View.svelte.d.ts +1 -1
  343. package/dist/html/Wbr.svelte +1 -1
  344. package/dist/html/Wbr.svelte.d.ts +1 -1
  345. package/dist/html/_MotionContainer.svelte +95 -22
  346. package/dist/html/_MotionContainer.svelte.d.ts +1 -1
  347. package/dist/index.d.ts +2 -1
  348. package/dist/index.js +2 -1
  349. package/dist/types.d.ts +12 -0
  350. package/dist/utils/animation.d.ts +12 -8
  351. package/dist/utils/animation.js +20 -10
  352. package/dist/utils/hover.js +2 -1
  353. package/dist/utils/layout.d.ts +1 -1
  354. package/dist/utils/objects.js +1 -3
  355. package/dist/utils/presence.d.ts +69 -0
  356. package/dist/utils/presence.js +228 -0
  357. package/dist/utils/spring.d.ts +15 -2
  358. package/dist/utils/transform.js +1 -1
  359. package/package.json +18 -18
package/README.md CHANGED
@@ -50,6 +50,37 @@ Svelte Motion supports minimal layout animations via FLIP using the `layout` pro
50
50
  - **`layout`**: smoothly animates translation and scale between layout changes (size and position).
51
51
  - **`layout="position"`**: only animates translation (no scale).
52
52
 
53
+ ### Exit Animations (AnimatePresence)
54
+
55
+ Animate elements as they leave the DOM using `AnimatePresence`. This mirrors Motion’s React API and docs for exit animations ([reference](https://motion.dev/docs/react)).
56
+
57
+ ```svelte
58
+ <script lang="ts">
59
+ import { motion, AnimatePresence } from '$lib'
60
+ let show = $state(true)
61
+ </script>
62
+
63
+ <AnimatePresence>
64
+ {#if show}
65
+ <motion.div
66
+ initial={{ opacity: 0, scale: 0.9 }}
67
+ animate={{ opacity: 1, scale: 1 }}
68
+ exit={{ opacity: 0, scale: 0.9 }}
69
+ transition={{ duration: 0.5 }}
70
+ class="size-24 rounded-md bg-cyan-400"
71
+ />
72
+ {/if}
73
+ </AnimatePresence>
74
+
75
+ <motion.button whileTap={{ scale: 0.97 }} onclick={() => (show = !show)}>Toggle</motion.button>
76
+ ```
77
+
78
+ - The exit animation is driven by `exit` and will play when the element unmounts.
79
+ - Transition precedence (merged before running exit):
80
+ - `exit.transition` (highest precedence)
81
+ - component `transition` (merged with `MotionConfig`)
82
+ - fallback default `{ duration: 0.35 }`
83
+
53
84
  #### Current Limitations
54
85
 
55
86
  Some Motion features are not yet implemented:
@@ -84,6 +115,7 @@ This package carefully selects its dependencies to provide a robust and maintain
84
115
  | [Fancy Like Button](https://github.com/DRlFTER/fancyLikeButton) | `/tests/random/fancy-like-button` | [View Example](https://svelte.dev/playground/c34b7e53d41c48b0ab1eaf21ca120c6e?version=5.38.10) |
85
116
  | [Keyframes (square → circle → square; scale 1→2→1)](https://motion.dev/docs/react-animation#keyframes) | `/tests/motion/keyframes` | [View Example](https://svelte.dev/playground/05595ce0db124c1cbbe4e74fda68d717?version=5.38.10) |
86
117
  | [Animated Border Gradient (conic-gradient rotate)](https://www.youtube.com/watch?v=OgQI1-9T6ZA) | `/tests/random/animated-border-gradient` | [View Example](https://svelte.dev/playground/6983a61b4c35441b8aa72a971de01a23?version=5.38.10) |
118
+ | [Exit Animation](https://motion.dev/docs/react#exit-animations) | `/tests/motion/animate-presence` | [View Example](https://svelte.dev/playground/ef277e283d864653ace54e7453801601?version=5.38.10) |
87
119
 
88
120
  ## Interactions
89
121
 
@@ -0,0 +1,32 @@
1
+ <script lang="ts">
2
+ import type { Snippet } from 'svelte'
3
+ import { createAnimatePresenceContext, setAnimatePresenceContext } from '../utils/presence'
4
+
5
+ /**
6
+ * Provide `AnimatePresence` context to descendants.
7
+ *
8
+ * Wrap content whose children may be conditionally rendered so exit
9
+ * animations can run after teardown. When a motion element unmounts, a
10
+ * styled clone is animated out before being removed from the DOM.
11
+ *
12
+ * @prop children Slotted content participating in presence.
13
+ * @prop onExitComplete Optional callback invoked once all exits complete.
14
+ */
15
+ const { children, onExitComplete } = $props<{
16
+ children?: Snippet
17
+ onExitComplete?: () => void
18
+ }>()
19
+
20
+ const context = createAnimatePresenceContext({ onExitComplete })
21
+ setAnimatePresenceContext(context)
22
+ </script>
23
+
24
+ <div class="animate-presence-container">
25
+ {@render children?.()}
26
+ </div>
27
+
28
+ <style>
29
+ .animate-presence-container {
30
+ position: relative;
31
+ }
32
+ </style>
@@ -0,0 +1,8 @@
1
+ import type { Snippet } from 'svelte';
2
+ type $$ComponentProps = {
3
+ children?: Snippet;
4
+ onExitComplete?: () => void;
5
+ };
6
+ declare const AnimatePresence: import("svelte").Component<$$ComponentProps, {}, "">;
7
+ type AnimatePresence = ReturnType<typeof AnimatePresence>;
8
+ export default AnimatePresence;
@@ -1,8 +1,17 @@
1
1
  <script lang="ts">
2
2
  import type { Snippet } from 'svelte'
3
- import type { MotionConfigProps } from '../types.js'
4
- import { createMotionConfig } from './motionConfig.context.js'
3
+ import type { MotionConfigProps } from '../types'
4
+ import { createMotionConfig } from './motionConfig.context'
5
5
 
6
+ /**
7
+ * Provide default Motion configuration to descendants.
8
+ *
9
+ * Wraps content and supplies defaults such as `transition` that are merged
10
+ * with per-element props. Descendants can retrieve config via context.
11
+ *
12
+ * @prop transition Default `AnimationOptions` merged with element props.
13
+ * @prop children Slotted content receiving this configuration.
14
+ */
6
15
  let { transition, children }: MotionConfigProps & { children?: Snippet } = $props()
7
16
 
8
17
  let motionConfig = $state<MotionConfigProps>({ transition })
@@ -1,5 +1,5 @@
1
1
  import type { Snippet } from 'svelte';
2
- import type { MotionConfigProps } from '../types.js';
2
+ import type { MotionConfigProps } from '../types';
3
3
  type $$ComponentProps = MotionConfigProps & {
4
4
  children?: Snippet;
5
5
  };
@@ -1,5 +1,5 @@
1
1
  import { getContext, setContext } from 'svelte';
2
- const key = 'motionConfig';
2
+ const key = Symbol('motionConfig');
3
3
  export const getMotionConfig = () => {
4
4
  return getContext(key);
5
5
  };
@@ -1,6 +1,6 @@
1
1
  <script lang="ts">
2
2
  import MotionContainer from './_MotionContainer.svelte'
3
- import type { HTMLElementProps } from '../types.js'
3
+ import type { HTMLElementProps } from '../types'
4
4
 
5
5
  let { children, ...rest }: HTMLElementProps = $props()
6
6
  </script>
@@ -1,4 +1,4 @@
1
- import type { HTMLElementProps } from '../types.js';
1
+ import type { HTMLElementProps } from '../types';
2
2
  declare const A: import("svelte").Component<HTMLElementProps, {}, "">;
3
3
  type A = ReturnType<typeof A>;
4
4
  export default A;
@@ -1,6 +1,6 @@
1
1
  <script lang="ts">
2
2
  import MotionContainer from './_MotionContainer.svelte'
3
- import type { HTMLElementProps } from '../types.js'
3
+ import type { HTMLElementProps } from '../types'
4
4
 
5
5
  let { children, ...rest }: HTMLElementProps = $props()
6
6
  </script>
@@ -1,4 +1,4 @@
1
- import type { HTMLElementProps } from '../types.js';
1
+ import type { HTMLElementProps } from '../types';
2
2
  declare const Abbr: import("svelte").Component<HTMLElementProps, {}, "">;
3
3
  type Abbr = ReturnType<typeof Abbr>;
4
4
  export default Abbr;
@@ -1,6 +1,6 @@
1
1
  <script lang="ts">
2
2
  import MotionContainer from './_MotionContainer.svelte'
3
- import type { HTMLElementProps } from '../types.js'
3
+ import type { HTMLElementProps } from '../types'
4
4
 
5
5
  let { children, ...rest }: HTMLElementProps = $props()
6
6
  </script>
@@ -1,4 +1,4 @@
1
- import type { HTMLElementProps } from '../types.js';
1
+ import type { HTMLElementProps } from '../types';
2
2
  declare const Address: import("svelte").Component<HTMLElementProps, {}, "">;
3
3
  type Address = ReturnType<typeof Address>;
4
4
  export default Address;
@@ -1,6 +1,6 @@
1
1
  <script lang="ts">
2
2
  import MotionContainer from './_MotionContainer.svelte'
3
- import type { HTMLElementProps } from '../types.js'
3
+ import type { HTMLElementProps } from '../types'
4
4
 
5
5
  let { children, ...rest }: HTMLElementProps = $props()
6
6
  </script>
@@ -1,4 +1,4 @@
1
- import type { HTMLElementProps } from '../types.js';
1
+ import type { HTMLElementProps } from '../types';
2
2
  declare const Animate: import("svelte").Component<HTMLElementProps, {}, "">;
3
3
  type Animate = ReturnType<typeof Animate>;
4
4
  export default Animate;
@@ -1,6 +1,6 @@
1
1
  <script lang="ts">
2
2
  import MotionContainer from './_MotionContainer.svelte'
3
- import type { HTMLElementProps } from '../types.js'
3
+ import type { HTMLElementProps } from '../types'
4
4
 
5
5
  let { children, ...rest }: HTMLElementProps = $props()
6
6
  </script>
@@ -1,4 +1,4 @@
1
- import type { HTMLElementProps } from '../types.js';
1
+ import type { HTMLElementProps } from '../types';
2
2
  declare const Animatemotion: import("svelte").Component<HTMLElementProps, {}, "">;
3
3
  type Animatemotion = ReturnType<typeof Animatemotion>;
4
4
  export default Animatemotion;
@@ -1,6 +1,6 @@
1
1
  <script lang="ts">
2
2
  import MotionContainer from './_MotionContainer.svelte'
3
- import type { HTMLElementProps } from '../types.js'
3
+ import type { HTMLElementProps } from '../types'
4
4
 
5
5
  let { children, ...rest }: HTMLElementProps = $props()
6
6
  </script>
@@ -1,4 +1,4 @@
1
- import type { HTMLElementProps } from '../types.js';
1
+ import type { HTMLElementProps } from '../types';
2
2
  declare const Animatetransform: import("svelte").Component<HTMLElementProps, {}, "">;
3
3
  type Animatetransform = ReturnType<typeof Animatetransform>;
4
4
  export default Animatetransform;
@@ -1,6 +1,6 @@
1
1
  <script lang="ts">
2
2
  import MotionContainer from './_MotionContainer.svelte'
3
- import type { HTMLVoidElementProps } from '../types.js'
3
+ import type { HTMLVoidElementProps } from '../types'
4
4
 
5
5
  let { ...rest }: HTMLVoidElementProps = $props()
6
6
  </script>
@@ -1,4 +1,4 @@
1
- import type { HTMLVoidElementProps } from '../types.js';
1
+ import type { HTMLVoidElementProps } from '../types';
2
2
  declare const Area: import("svelte").Component<HTMLVoidElementProps, {}, "">;
3
3
  type Area = ReturnType<typeof Area>;
4
4
  export default Area;
@@ -1,6 +1,6 @@
1
1
  <script lang="ts">
2
2
  import MotionContainer from './_MotionContainer.svelte'
3
- import type { HTMLElementProps } from '../types.js'
3
+ import type { HTMLElementProps } from '../types'
4
4
 
5
5
  let { children, ...rest }: HTMLElementProps = $props()
6
6
  </script>
@@ -1,4 +1,4 @@
1
- import type { HTMLElementProps } from '../types.js';
1
+ import type { HTMLElementProps } from '../types';
2
2
  declare const Article: import("svelte").Component<HTMLElementProps, {}, "">;
3
3
  type Article = ReturnType<typeof Article>;
4
4
  export default Article;
@@ -1,6 +1,6 @@
1
1
  <script lang="ts">
2
2
  import MotionContainer from './_MotionContainer.svelte'
3
- import type { HTMLElementProps } from '../types.js'
3
+ import type { HTMLElementProps } from '../types'
4
4
 
5
5
  let { children, ...rest }: HTMLElementProps = $props()
6
6
  </script>
@@ -1,4 +1,4 @@
1
- import type { HTMLElementProps } from '../types.js';
1
+ import type { HTMLElementProps } from '../types';
2
2
  declare const Aside: import("svelte").Component<HTMLElementProps, {}, "">;
3
3
  type Aside = ReturnType<typeof Aside>;
4
4
  export default Aside;
@@ -1,6 +1,6 @@
1
1
  <script lang="ts">
2
2
  import MotionContainer from './_MotionContainer.svelte'
3
- import type { HTMLElementProps } from '../types.js'
3
+ import type { HTMLElementProps } from '../types'
4
4
 
5
5
  let { children, ...rest }: HTMLElementProps = $props()
6
6
  </script>
@@ -1,4 +1,4 @@
1
- import type { HTMLElementProps } from '../types.js';
1
+ import type { HTMLElementProps } from '../types';
2
2
  declare const Audio: import("svelte").Component<HTMLElementProps, {}, "">;
3
3
  type Audio = ReturnType<typeof Audio>;
4
4
  export default Audio;
@@ -1,6 +1,6 @@
1
1
  <script lang="ts">
2
2
  import MotionContainer from './_MotionContainer.svelte'
3
- import type { HTMLElementProps } from '../types.js'
3
+ import type { HTMLElementProps } from '../types'
4
4
 
5
5
  let { children, ...rest }: HTMLElementProps = $props()
6
6
  </script>
@@ -1,4 +1,4 @@
1
- import type { HTMLElementProps } from '../types.js';
1
+ import type { HTMLElementProps } from '../types';
2
2
  declare const B: import("svelte").Component<HTMLElementProps, {}, "">;
3
3
  type B = ReturnType<typeof B>;
4
4
  export default B;
@@ -1,6 +1,6 @@
1
1
  <script lang="ts">
2
2
  import MotionContainer from './_MotionContainer.svelte'
3
- import type { HTMLVoidElementProps } from '../types.js'
3
+ import type { HTMLVoidElementProps } from '../types'
4
4
 
5
5
  let { ...rest }: HTMLVoidElementProps = $props()
6
6
  </script>
@@ -1,4 +1,4 @@
1
- import type { HTMLVoidElementProps } from '../types.js';
1
+ import type { HTMLVoidElementProps } from '../types';
2
2
  declare const Base: import("svelte").Component<HTMLVoidElementProps, {}, "">;
3
3
  type Base = ReturnType<typeof Base>;
4
4
  export default Base;
@@ -1,6 +1,6 @@
1
1
  <script lang="ts">
2
2
  import MotionContainer from './_MotionContainer.svelte'
3
- import type { HTMLElementProps } from '../types.js'
3
+ import type { HTMLElementProps } from '../types'
4
4
 
5
5
  let { children, ...rest }: HTMLElementProps = $props()
6
6
  </script>
@@ -1,4 +1,4 @@
1
- import type { HTMLElementProps } from '../types.js';
1
+ import type { HTMLElementProps } from '../types';
2
2
  declare const Bdi: import("svelte").Component<HTMLElementProps, {}, "">;
3
3
  type Bdi = ReturnType<typeof Bdi>;
4
4
  export default Bdi;
@@ -1,6 +1,6 @@
1
1
  <script lang="ts">
2
2
  import MotionContainer from './_MotionContainer.svelte'
3
- import type { HTMLElementProps } from '../types.js'
3
+ import type { HTMLElementProps } from '../types'
4
4
 
5
5
  let { children, ...rest }: HTMLElementProps = $props()
6
6
  </script>
@@ -1,4 +1,4 @@
1
- import type { HTMLElementProps } from '../types.js';
1
+ import type { HTMLElementProps } from '../types';
2
2
  declare const Bdo: import("svelte").Component<HTMLElementProps, {}, "">;
3
3
  type Bdo = ReturnType<typeof Bdo>;
4
4
  export default Bdo;
@@ -1,6 +1,6 @@
1
1
  <script lang="ts">
2
2
  import MotionContainer from './_MotionContainer.svelte'
3
- import type { HTMLElementProps } from '../types.js'
3
+ import type { HTMLElementProps } from '../types'
4
4
 
5
5
  let { children, ...rest }: HTMLElementProps = $props()
6
6
  </script>
@@ -1,4 +1,4 @@
1
- import type { HTMLElementProps } from '../types.js';
1
+ import type { HTMLElementProps } from '../types';
2
2
  declare const Blockquote: import("svelte").Component<HTMLElementProps, {}, "">;
3
3
  type Blockquote = ReturnType<typeof Blockquote>;
4
4
  export default Blockquote;
@@ -1,6 +1,6 @@
1
1
  <script lang="ts">
2
2
  import MotionContainer from './_MotionContainer.svelte'
3
- import type { HTMLVoidElementProps } from '../types.js'
3
+ import type { HTMLVoidElementProps } from '../types'
4
4
 
5
5
  let { ...rest }: HTMLVoidElementProps = $props()
6
6
  </script>
@@ -1,4 +1,4 @@
1
- import type { HTMLVoidElementProps } from '../types.js';
1
+ import type { HTMLVoidElementProps } from '../types';
2
2
  declare const Br: import("svelte").Component<HTMLVoidElementProps, {}, "">;
3
3
  type Br = ReturnType<typeof Br>;
4
4
  export default Br;
@@ -1,6 +1,6 @@
1
1
  <script lang="ts">
2
2
  import MotionContainer from './_MotionContainer.svelte'
3
- import type { HTMLElementProps } from '../types.js'
3
+ import type { HTMLElementProps } from '../types'
4
4
 
5
5
  let { children, ...rest }: HTMLElementProps = $props()
6
6
  </script>
@@ -1,4 +1,4 @@
1
- import type { HTMLElementProps } from '../types.js';
1
+ import type { HTMLElementProps } from '../types';
2
2
  declare const Button: import("svelte").Component<HTMLElementProps, {}, "">;
3
3
  type Button = ReturnType<typeof Button>;
4
4
  export default Button;
@@ -1,6 +1,6 @@
1
1
  <script lang="ts">
2
2
  import MotionContainer from './_MotionContainer.svelte'
3
- import type { HTMLElementProps } from '../types.js'
3
+ import type { HTMLElementProps } from '../types'
4
4
 
5
5
  let { children, ...rest }: HTMLElementProps = $props()
6
6
  </script>
@@ -1,4 +1,4 @@
1
- import type { HTMLElementProps } from '../types.js';
1
+ import type { HTMLElementProps } from '../types';
2
2
  declare const Canvas: import("svelte").Component<HTMLElementProps, {}, "">;
3
3
  type Canvas = ReturnType<typeof Canvas>;
4
4
  export default Canvas;
@@ -1,6 +1,6 @@
1
1
  <script lang="ts">
2
2
  import MotionContainer from './_MotionContainer.svelte'
3
- import type { HTMLElementProps } from '../types.js'
3
+ import type { HTMLElementProps } from '../types'
4
4
 
5
5
  let { children, ...rest }: HTMLElementProps = $props()
6
6
  </script>
@@ -1,4 +1,4 @@
1
- import type { HTMLElementProps } from '../types.js';
1
+ import type { HTMLElementProps } from '../types';
2
2
  declare const Caption: import("svelte").Component<HTMLElementProps, {}, "">;
3
3
  type Caption = ReturnType<typeof Caption>;
4
4
  export default Caption;
@@ -1,6 +1,6 @@
1
1
  <script lang="ts">
2
2
  import MotionContainer from './_MotionContainer.svelte'
3
- import type { HTMLElementProps } from '../types.js'
3
+ import type { HTMLElementProps } from '../types'
4
4
 
5
5
  let { children, ...rest }: HTMLElementProps = $props()
6
6
  </script>
@@ -1,4 +1,4 @@
1
- import type { HTMLElementProps } from '../types.js';
1
+ import type { HTMLElementProps } from '../types';
2
2
  declare const Circle: import("svelte").Component<HTMLElementProps, {}, "">;
3
3
  type Circle = ReturnType<typeof Circle>;
4
4
  export default Circle;
@@ -1,6 +1,6 @@
1
1
  <script lang="ts">
2
2
  import MotionContainer from './_MotionContainer.svelte'
3
- import type { HTMLElementProps } from '../types.js'
3
+ import type { HTMLElementProps } from '../types'
4
4
 
5
5
  let { children, ...rest }: HTMLElementProps = $props()
6
6
  </script>
@@ -1,4 +1,4 @@
1
- import type { HTMLElementProps } from '../types.js';
1
+ import type { HTMLElementProps } from '../types';
2
2
  declare const Cite: import("svelte").Component<HTMLElementProps, {}, "">;
3
3
  type Cite = ReturnType<typeof Cite>;
4
4
  export default Cite;
@@ -1,6 +1,6 @@
1
1
  <script lang="ts">
2
2
  import MotionContainer from './_MotionContainer.svelte'
3
- import type { HTMLElementProps } from '../types.js'
3
+ import type { HTMLElementProps } from '../types'
4
4
 
5
5
  let { children, ...rest }: HTMLElementProps = $props()
6
6
  </script>
@@ -1,4 +1,4 @@
1
- import type { HTMLElementProps } from '../types.js';
1
+ import type { HTMLElementProps } from '../types';
2
2
  declare const Clippath: import("svelte").Component<HTMLElementProps, {}, "">;
3
3
  type Clippath = ReturnType<typeof Clippath>;
4
4
  export default Clippath;
@@ -1,6 +1,6 @@
1
1
  <script lang="ts">
2
2
  import MotionContainer from './_MotionContainer.svelte'
3
- import type { HTMLElementProps } from '../types.js'
3
+ import type { HTMLElementProps } from '../types'
4
4
 
5
5
  let { children, ...rest }: HTMLElementProps = $props()
6
6
  </script>
@@ -1,4 +1,4 @@
1
- import type { HTMLElementProps } from '../types.js';
1
+ import type { HTMLElementProps } from '../types';
2
2
  declare const Code: import("svelte").Component<HTMLElementProps, {}, "">;
3
3
  type Code = ReturnType<typeof Code>;
4
4
  export default Code;
@@ -1,6 +1,6 @@
1
1
  <script lang="ts">
2
2
  import MotionContainer from './_MotionContainer.svelte'
3
- import type { HTMLVoidElementProps } from '../types.js'
3
+ import type { HTMLVoidElementProps } from '../types'
4
4
 
5
5
  let { ...rest }: HTMLVoidElementProps = $props()
6
6
  </script>
@@ -1,4 +1,4 @@
1
- import type { HTMLVoidElementProps } from '../types.js';
1
+ import type { HTMLVoidElementProps } from '../types';
2
2
  declare const Col: import("svelte").Component<HTMLVoidElementProps, {}, "">;
3
3
  type Col = ReturnType<typeof Col>;
4
4
  export default Col;
@@ -1,6 +1,6 @@
1
1
  <script lang="ts">
2
2
  import MotionContainer from './_MotionContainer.svelte'
3
- import type { HTMLElementProps } from '../types.js'
3
+ import type { HTMLElementProps } from '../types'
4
4
 
5
5
  let { children, ...rest }: HTMLElementProps = $props()
6
6
  </script>
@@ -1,4 +1,4 @@
1
- import type { HTMLElementProps } from '../types.js';
1
+ import type { HTMLElementProps } from '../types';
2
2
  declare const Colgroup: import("svelte").Component<HTMLElementProps, {}, "">;
3
3
  type Colgroup = ReturnType<typeof Colgroup>;
4
4
  export default Colgroup;
@@ -1,6 +1,6 @@
1
1
  <script lang="ts">
2
2
  import MotionContainer from './_MotionContainer.svelte'
3
- import type { HTMLElementProps } from '../types.js'
3
+ import type { HTMLElementProps } from '../types'
4
4
 
5
5
  let { children, ...rest }: HTMLElementProps = $props()
6
6
  </script>
@@ -1,4 +1,4 @@
1
- import type { HTMLElementProps } from '../types.js';
1
+ import type { HTMLElementProps } from '../types';
2
2
  declare const Cursor: import("svelte").Component<HTMLElementProps, {}, "">;
3
3
  type Cursor = ReturnType<typeof Cursor>;
4
4
  export default Cursor;
@@ -1,6 +1,6 @@
1
1
  <script lang="ts">
2
2
  import MotionContainer from './_MotionContainer.svelte'
3
- import type { HTMLElementProps } from '../types.js'
3
+ import type { HTMLElementProps } from '../types'
4
4
 
5
5
  let { children, ...rest }: HTMLElementProps = $props()
6
6
  </script>
@@ -1,4 +1,4 @@
1
- import type { HTMLElementProps } from '../types.js';
1
+ import type { HTMLElementProps } from '../types';
2
2
  declare const Data: import("svelte").Component<HTMLElementProps, {}, "">;
3
3
  type Data = ReturnType<typeof Data>;
4
4
  export default Data;
@@ -1,6 +1,6 @@
1
1
  <script lang="ts">
2
2
  import MotionContainer from './_MotionContainer.svelte'
3
- import type { HTMLElementProps } from '../types.js'
3
+ import type { HTMLElementProps } from '../types'
4
4
 
5
5
  let { children, ...rest }: HTMLElementProps = $props()
6
6
  </script>
@@ -1,4 +1,4 @@
1
- import type { HTMLElementProps } from '../types.js';
1
+ import type { HTMLElementProps } from '../types';
2
2
  declare const Datalist: import("svelte").Component<HTMLElementProps, {}, "">;
3
3
  type Datalist = ReturnType<typeof Datalist>;
4
4
  export default Datalist;
@@ -1,6 +1,6 @@
1
1
  <script lang="ts">
2
2
  import MotionContainer from './_MotionContainer.svelte'
3
- import type { HTMLElementProps } from '../types.js'
3
+ import type { HTMLElementProps } from '../types'
4
4
 
5
5
  let { children, ...rest }: HTMLElementProps = $props()
6
6
  </script>
@@ -1,4 +1,4 @@
1
- import type { HTMLElementProps } from '../types.js';
1
+ import type { HTMLElementProps } from '../types';
2
2
  declare const Dd: import("svelte").Component<HTMLElementProps, {}, "">;
3
3
  type Dd = ReturnType<typeof Dd>;
4
4
  export default Dd;
@@ -1,6 +1,6 @@
1
1
  <script lang="ts">
2
2
  import MotionContainer from './_MotionContainer.svelte'
3
- import type { HTMLElementProps } from '../types.js'
3
+ import type { HTMLElementProps } from '../types'
4
4
 
5
5
  let { children, ...rest }: HTMLElementProps = $props()
6
6
  </script>
@@ -1,4 +1,4 @@
1
- import type { HTMLElementProps } from '../types.js';
1
+ import type { HTMLElementProps } from '../types';
2
2
  declare const Defs: import("svelte").Component<HTMLElementProps, {}, "">;
3
3
  type Defs = ReturnType<typeof Defs>;
4
4
  export default Defs;