@vysmo/transitions 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 (384) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +618 -0
  3. package/dist/index.d.ts +6 -0
  4. package/dist/index.d.ts.map +1 -0
  5. package/dist/index.js +3 -0
  6. package/dist/index.js.map +1 -0
  7. package/dist/inputs/normalize.d.ts +2 -0
  8. package/dist/inputs/normalize.d.ts.map +1 -0
  9. package/dist/inputs/normalize.js +2 -0
  10. package/dist/inputs/normalize.js.map +1 -0
  11. package/dist/runner/gl.d.ts +7 -0
  12. package/dist/runner/gl.d.ts.map +1 -0
  13. package/dist/runner/gl.js +59 -0
  14. package/dist/runner/gl.js.map +1 -0
  15. package/dist/runner/mesh.d.ts +28 -0
  16. package/dist/runner/mesh.d.ts.map +1 -0
  17. package/dist/runner/mesh.js +96 -0
  18. package/dist/runner/mesh.js.map +1 -0
  19. package/dist/runner/runner.d.ts +107 -0
  20. package/dist/runner/runner.d.ts.map +1 -0
  21. package/dist/runner/runner.js +410 -0
  22. package/dist/runner/runner.js.map +1 -0
  23. package/dist/transitions/all.d.ts +9 -0
  24. package/dist/transitions/all.d.ts.map +1 -0
  25. package/dist/transitions/all.js +129 -0
  26. package/dist/transitions/all.js.map +1 -0
  27. package/dist/transitions/bloom-reveal.d.ts +27 -0
  28. package/dist/transitions/bloom-reveal.d.ts.map +1 -0
  29. package/dist/transitions/bloom-reveal.js +106 -0
  30. package/dist/transitions/bloom-reveal.js.map +1 -0
  31. package/dist/transitions/chromatic-pulse.d.ts +4 -0
  32. package/dist/transitions/chromatic-pulse.d.ts.map +1 -0
  33. package/dist/transitions/chromatic-pulse.js +40 -0
  34. package/dist/transitions/chromatic-pulse.js.map +1 -0
  35. package/dist/transitions/clock-wipe.d.ts +6 -0
  36. package/dist/transitions/clock-wipe.d.ts.map +1 -0
  37. package/dist/transitions/clock-wipe.js +33 -0
  38. package/dist/transitions/clock-wipe.js.map +1 -0
  39. package/dist/transitions/color-phase.d.ts +10 -0
  40. package/dist/transitions/color-phase.d.ts.map +1 -0
  41. package/dist/transitions/color-phase.js +24 -0
  42. package/dist/transitions/color-phase.js.map +1 -0
  43. package/dist/transitions/colour-distance.d.ts.map +1 -0
  44. package/dist/transitions/cross-warp.d.ts.map +1 -0
  45. package/dist/transitions/cross-zoom.d.ts +5 -0
  46. package/dist/transitions/cross-zoom.d.ts.map +1 -0
  47. package/dist/transitions/cross-zoom.js +59 -0
  48. package/dist/transitions/cross-zoom.js.map +1 -0
  49. package/dist/transitions/crosshatch.d.ts +12 -0
  50. package/dist/transitions/crosshatch.d.ts.map +1 -0
  51. package/dist/transitions/crosshatch.js +49 -0
  52. package/dist/transitions/crosshatch.js.map +1 -0
  53. package/dist/transitions/define.d.ts +35 -0
  54. package/dist/transitions/define.d.ts.map +1 -0
  55. package/dist/transitions/define.js +37 -0
  56. package/dist/transitions/define.js.map +1 -0
  57. package/dist/transitions/directional-burn.d.ts +14 -0
  58. package/dist/transitions/directional-burn.d.ts.map +1 -0
  59. package/dist/transitions/directional-burn.js +67 -0
  60. package/dist/transitions/directional-burn.js.map +1 -0
  61. package/dist/transitions/directional-warp.d.ts +12 -0
  62. package/dist/transitions/directional-warp.d.ts.map +1 -0
  63. package/dist/transitions/directional-warp.js +46 -0
  64. package/dist/transitions/directional-warp.js.map +1 -0
  65. package/dist/transitions/dissolve.d.ts +2 -0
  66. package/dist/transitions/dissolve.d.ts.map +1 -0
  67. package/dist/transitions/dissolve.js +16 -0
  68. package/dist/transitions/dissolve.js.map +1 -0
  69. package/dist/transitions/dreamy-zoom.d.ts +25 -0
  70. package/dist/transitions/dreamy-zoom.d.ts.map +1 -0
  71. package/dist/transitions/dreamy-zoom.js +66 -0
  72. package/dist/transitions/dreamy-zoom.js.map +1 -0
  73. package/dist/transitions/dreamy.d.ts +8 -0
  74. package/dist/transitions/dreamy.d.ts.map +1 -0
  75. package/dist/transitions/dreamy.js +26 -0
  76. package/dist/transitions/dreamy.js.map +1 -0
  77. package/dist/transitions/drip-wipe.d.ts +22 -0
  78. package/dist/transitions/drip-wipe.d.ts.map +1 -0
  79. package/dist/transitions/drip-wipe.js +109 -0
  80. package/dist/transitions/drip-wipe.js.map +1 -0
  81. package/dist/transitions/ember-scatter.d.ts +22 -0
  82. package/dist/transitions/ember-scatter.d.ts.map +1 -0
  83. package/dist/transitions/ember-scatter.js +94 -0
  84. package/dist/transitions/ember-scatter.js.map +1 -0
  85. package/dist/transitions/film-burn.d.ts +17 -0
  86. package/dist/transitions/film-burn.d.ts.map +1 -0
  87. package/dist/transitions/film-burn.js +101 -0
  88. package/dist/transitions/film-burn.js.map +1 -0
  89. package/dist/transitions/film-grain.d.ts +24 -0
  90. package/dist/transitions/film-grain.d.ts.map +1 -0
  91. package/dist/transitions/film-grain.js +78 -0
  92. package/dist/transitions/film-grain.js.map +1 -0
  93. package/dist/transitions/flow-warp.d.ts +20 -0
  94. package/dist/transitions/flow-warp.d.ts.map +1 -0
  95. package/dist/transitions/flow-warp.js +51 -0
  96. package/dist/transitions/flow-warp.js.map +1 -0
  97. package/dist/transitions/fluid-flow.d.ts +26 -0
  98. package/dist/transitions/fluid-flow.d.ts.map +1 -0
  99. package/dist/transitions/fluid-flow.js +94 -0
  100. package/dist/transitions/fluid-flow.js.map +1 -0
  101. package/dist/transitions/fly-eye.d.ts.map +1 -0
  102. package/dist/transitions/fly-eye.js +58 -0
  103. package/dist/transitions/fly-eye.js.map +1 -0
  104. package/dist/transitions/glass-shatter.d.ts +25 -0
  105. package/dist/transitions/glass-shatter.d.ts.map +1 -0
  106. package/dist/transitions/glass-shatter.js +86 -0
  107. package/dist/transitions/glass-shatter.js.map +1 -0
  108. package/dist/transitions/glitch.d.ts +6 -0
  109. package/dist/transitions/glitch.d.ts.map +1 -0
  110. package/dist/transitions/glitch.js +59 -0
  111. package/dist/transitions/glitch.js.map +1 -0
  112. package/dist/transitions/god-rays-reveal.d.ts +32 -0
  113. package/dist/transitions/god-rays-reveal.d.ts.map +1 -0
  114. package/dist/transitions/god-rays-reveal.js +110 -0
  115. package/dist/transitions/god-rays-reveal.js.map +1 -0
  116. package/dist/transitions/gravity-pull.d.ts +16 -0
  117. package/dist/transitions/gravity-pull.d.ts.map +1 -0
  118. package/dist/transitions/gravity-pull.js +65 -0
  119. package/dist/transitions/gravity-pull.js.map +1 -0
  120. package/dist/transitions/grid-reveal.d.ts +12 -0
  121. package/dist/transitions/grid-reveal.d.ts.map +1 -0
  122. package/dist/transitions/grid-reveal.js +53 -0
  123. package/dist/transitions/grid-reveal.js.map +1 -0
  124. package/dist/transitions/heat-haze.d.ts +13 -0
  125. package/dist/transitions/heat-haze.d.ts.map +1 -0
  126. package/dist/transitions/heat-haze.js +51 -0
  127. package/dist/transitions/heat-haze.js.map +1 -0
  128. package/dist/transitions/index.d.ts +64 -0
  129. package/dist/transitions/index.d.ts.map +1 -0
  130. package/dist/transitions/index.js +63 -0
  131. package/dist/transitions/index.js.map +1 -0
  132. package/dist/transitions/ink-bloom.d.ts +15 -0
  133. package/dist/transitions/ink-bloom.d.ts.map +1 -0
  134. package/dist/transitions/ink-bloom.js +76 -0
  135. package/dist/transitions/ink-bloom.js.map +1 -0
  136. package/dist/transitions/ink-diffuse.d.ts +26 -0
  137. package/dist/transitions/ink-diffuse.d.ts.map +1 -0
  138. package/dist/transitions/ink-diffuse.js +90 -0
  139. package/dist/transitions/ink-diffuse.js.map +1 -0
  140. package/dist/transitions/iris-zoom.d.ts +13 -0
  141. package/dist/transitions/iris-zoom.d.ts.map +1 -0
  142. package/dist/transitions/iris-zoom.js +67 -0
  143. package/dist/transitions/iris-zoom.js.map +1 -0
  144. package/dist/transitions/kinetic-bands.d.ts +7 -0
  145. package/dist/transitions/kinetic-bands.d.ts.map +1 -0
  146. package/dist/transitions/kinetic-bands.js +58 -0
  147. package/dist/transitions/kinetic-bands.js.map +1 -0
  148. package/dist/transitions/lenticular-flip.d.ts +22 -0
  149. package/dist/transitions/lenticular-flip.d.ts.map +1 -0
  150. package/dist/transitions/lenticular-flip.js +73 -0
  151. package/dist/transitions/lenticular-flip.js.map +1 -0
  152. package/dist/transitions/light-leak.d.ts +7 -0
  153. package/dist/transitions/light-leak.d.ts.map +1 -0
  154. package/dist/transitions/light-leak.js +43 -0
  155. package/dist/transitions/light-leak.js.map +1 -0
  156. package/dist/transitions/lightning-strike.d.ts +22 -0
  157. package/dist/transitions/lightning-strike.d.ts.map +1 -0
  158. package/dist/transitions/lightning-strike.js +90 -0
  159. package/dist/transitions/lightning-strike.js.map +1 -0
  160. package/dist/transitions/linear-blur.d.ts +11 -0
  161. package/dist/transitions/linear-blur.d.ts.map +1 -0
  162. package/dist/transitions/linear-blur.js +40 -0
  163. package/dist/transitions/linear-blur.js.map +1 -0
  164. package/dist/transitions/liquid-chrome.d.ts +22 -0
  165. package/dist/transitions/liquid-chrome.d.ts.map +1 -0
  166. package/dist/transitions/liquid-chrome.js +114 -0
  167. package/dist/transitions/liquid-chrome.js.map +1 -0
  168. package/dist/transitions/liquid-morph.d.ts +6 -0
  169. package/dist/transitions/liquid-morph.d.ts.map +1 -0
  170. package/dist/transitions/liquid-morph.js +50 -0
  171. package/dist/transitions/liquid-morph.js.map +1 -0
  172. package/dist/transitions/lumina-melt.d.ts +11 -0
  173. package/dist/transitions/lumina-melt.d.ts.map +1 -0
  174. package/dist/transitions/lumina-melt.js +36 -0
  175. package/dist/transitions/lumina-melt.js.map +1 -0
  176. package/dist/transitions/mosaic.d.ts +13 -0
  177. package/dist/transitions/mosaic.d.ts.map +1 -0
  178. package/dist/transitions/mosaic.js +58 -0
  179. package/dist/transitions/mosaic.js.map +1 -0
  180. package/dist/transitions/noise-dissolve.d.ts +5 -0
  181. package/dist/transitions/noise-dissolve.d.ts.map +1 -0
  182. package/dist/transitions/noise-dissolve.js +41 -0
  183. package/dist/transitions/noise-dissolve.js.map +1 -0
  184. package/dist/transitions/page-curl.d.ts +32 -0
  185. package/dist/transitions/page-curl.d.ts.map +1 -0
  186. package/dist/transitions/page-curl.js +165 -0
  187. package/dist/transitions/page-curl.js.map +1 -0
  188. package/dist/transitions/paint-bleed.d.ts +12 -0
  189. package/dist/transitions/paint-bleed.d.ts.map +1 -0
  190. package/dist/transitions/paint-bleed.js +59 -0
  191. package/dist/transitions/paint-bleed.js.map +1 -0
  192. package/dist/transitions/particle-assemble.d.ts +23 -0
  193. package/dist/transitions/particle-assemble.d.ts.map +1 -0
  194. package/dist/transitions/particle-assemble.js +65 -0
  195. package/dist/transitions/particle-assemble.js.map +1 -0
  196. package/dist/transitions/pinwheel.d.ts +11 -0
  197. package/dist/transitions/pinwheel.d.ts.map +1 -0
  198. package/dist/transitions/pinwheel.js +40 -0
  199. package/dist/transitions/pinwheel.js.map +1 -0
  200. package/dist/transitions/pixelate.d.ts +4 -0
  201. package/dist/transitions/pixelate.d.ts.map +1 -0
  202. package/dist/transitions/pixelate.js +26 -0
  203. package/dist/transitions/pixelate.js.map +1 -0
  204. package/dist/transitions/plasma-pulse.d.ts.map +1 -0
  205. package/dist/transitions/plasma-pulse.js +92 -0
  206. package/dist/transitions/plasma-pulse.js.map +1 -0
  207. package/dist/transitions/polka-dots-curtain.d.ts +13 -0
  208. package/dist/transitions/polka-dots-curtain.d.ts.map +1 -0
  209. package/dist/transitions/polka-dots-curtain.js +46 -0
  210. package/dist/transitions/polka-dots-curtain.js.map +1 -0
  211. package/dist/transitions/polygon-flip.d.ts +27 -0
  212. package/dist/transitions/polygon-flip.d.ts.map +1 -0
  213. package/dist/transitions/polygon-flip.js +97 -0
  214. package/dist/transitions/polygon-flip.js.map +1 -0
  215. package/dist/transitions/portal-dive.d.ts +18 -0
  216. package/dist/transitions/portal-dive.d.ts.map +1 -0
  217. package/dist/transitions/portal-dive.js +83 -0
  218. package/dist/transitions/portal-dive.js.map +1 -0
  219. package/dist/transitions/prism-split.d.ts +12 -0
  220. package/dist/transitions/prism-split.d.ts.map +1 -0
  221. package/dist/transitions/prism-split.js +52 -0
  222. package/dist/transitions/prism-split.js.map +1 -0
  223. package/dist/transitions/push.d.ts +4 -0
  224. package/dist/transitions/push.d.ts.map +1 -0
  225. package/dist/transitions/push.js +34 -0
  226. package/dist/transitions/push.js.map +1 -0
  227. package/dist/transitions/radial-reveal.d.ts +5 -0
  228. package/dist/transitions/radial-reveal.d.ts.map +1 -0
  229. package/dist/transitions/radial-reveal.js +31 -0
  230. package/dist/transitions/radial-reveal.js.map +1 -0
  231. package/dist/transitions/ripple-wave.d.ts +24 -0
  232. package/dist/transitions/ripple-wave.d.ts.map +1 -0
  233. package/dist/transitions/ripple-wave.js +135 -0
  234. package/dist/transitions/ripple-wave.js.map +1 -0
  235. package/dist/transitions/ripple.d.ts +7 -0
  236. package/dist/transitions/ripple.d.ts.map +1 -0
  237. package/dist/transitions/ripple.js +43 -0
  238. package/dist/transitions/ripple.js.map +1 -0
  239. package/dist/transitions/shape-reveal.d.ts +12 -0
  240. package/dist/transitions/shape-reveal.d.ts.map +1 -0
  241. package/dist/transitions/shape-reveal.js +53 -0
  242. package/dist/transitions/shape-reveal.js.map +1 -0
  243. package/dist/transitions/shockwave.d.ts +10 -0
  244. package/dist/transitions/shockwave.d.ts.map +1 -0
  245. package/dist/transitions/shockwave.js +56 -0
  246. package/dist/transitions/shockwave.js.map +1 -0
  247. package/dist/transitions/singularity.d.ts +22 -0
  248. package/dist/transitions/singularity.d.ts.map +1 -0
  249. package/dist/transitions/singularity.js +59 -0
  250. package/dist/transitions/singularity.js.map +1 -0
  251. package/dist/transitions/slide.d.ts +10 -0
  252. package/dist/transitions/slide.d.ts.map +1 -0
  253. package/dist/transitions/slide.js +76 -0
  254. package/dist/transitions/slide.js.map +1 -0
  255. package/dist/transitions/smoldering-edge.d.ts +15 -0
  256. package/dist/transitions/smoldering-edge.d.ts.map +1 -0
  257. package/dist/transitions/smoldering-edge.js +74 -0
  258. package/dist/transitions/smoldering-edge.js.map +1 -0
  259. package/dist/transitions/split.d.ts +14 -0
  260. package/dist/transitions/split.d.ts.map +1 -0
  261. package/dist/transitions/split.js +53 -0
  262. package/dist/transitions/split.js.map +1 -0
  263. package/dist/transitions/swirl.d.ts +12 -0
  264. package/dist/transitions/swirl.d.ts.map +1 -0
  265. package/dist/transitions/swirl.js +42 -0
  266. package/dist/transitions/swirl.js.map +1 -0
  267. package/dist/transitions/tangent-motion-blur.d.ts +13 -0
  268. package/dist/transitions/tangent-motion-blur.d.ts.map +1 -0
  269. package/dist/transitions/tangent-motion-blur.js +58 -0
  270. package/dist/transitions/tangent-motion-blur.js.map +1 -0
  271. package/dist/transitions/tile-scatter.d.ts +22 -0
  272. package/dist/transitions/tile-scatter.d.ts.map +1 -0
  273. package/dist/transitions/tile-scatter.js +122 -0
  274. package/dist/transitions/tile-scatter.js.map +1 -0
  275. package/dist/transitions/tilt-sweep.d.ts +11 -0
  276. package/dist/transitions/tilt-sweep.d.ts.map +1 -0
  277. package/dist/transitions/tilt-sweep.js +31 -0
  278. package/dist/transitions/tilt-sweep.js.map +1 -0
  279. package/dist/transitions/warp-zoom.d.ts +7 -0
  280. package/dist/transitions/warp-zoom.d.ts.map +1 -0
  281. package/dist/transitions/warp-zoom.js +70 -0
  282. package/dist/transitions/warp-zoom.js.map +1 -0
  283. package/dist/transitions/wave-stripes.d.ts +16 -0
  284. package/dist/transitions/wave-stripes.d.ts.map +1 -0
  285. package/dist/transitions/wave-stripes.js +55 -0
  286. package/dist/transitions/wave-stripes.js.map +1 -0
  287. package/dist/transitions/wave-wipe.d.ts +23 -0
  288. package/dist/transitions/wave-wipe.d.ts.map +1 -0
  289. package/dist/transitions/wave-wipe.js +84 -0
  290. package/dist/transitions/wave-wipe.js.map +1 -0
  291. package/dist/transitions/wind.d.ts +9 -0
  292. package/dist/transitions/wind.d.ts.map +1 -0
  293. package/dist/transitions/wind.js +48 -0
  294. package/dist/transitions/wind.js.map +1 -0
  295. package/dist/transitions/window-slice.d.ts +11 -0
  296. package/dist/transitions/window-slice.d.ts.map +1 -0
  297. package/dist/transitions/window-slice.js +34 -0
  298. package/dist/transitions/window-slice.js.map +1 -0
  299. package/dist/transitions/wipe-directional.d.ts +5 -0
  300. package/dist/transitions/wipe-directional.d.ts.map +1 -0
  301. package/dist/transitions/wipe-directional.js +26 -0
  302. package/dist/transitions/wipe-directional.js.map +1 -0
  303. package/dist/types.d.ts +78 -0
  304. package/dist/types.d.ts.map +1 -0
  305. package/dist/types.js +2 -0
  306. package/dist/types.js.map +1 -0
  307. package/package.json +56 -0
  308. package/src/__tests__/__screenshots__/endpoint-correctness.test.ts/endpoint-correctness---every-transition-must-be-pixel-pure-from-to-at-progress-0-1-rippleWave-at-progress-0-is-pure--from--1.png +0 -0
  309. package/src/__tests__/__screenshots__/endpoint-correctness.test.ts/endpoint-correctness---every-transition-must-be-pixel-pure-from-to-at-progress-0-1-rippleWave-at-progress-1-is-pure--to--1.png +0 -0
  310. package/src/__tests__/endpoint-correctness.test.ts +161 -0
  311. package/src/__tests__/readme.test.ts +39 -0
  312. package/src/__tests__/ssr.test.ts +45 -0
  313. package/src/index.ts +75 -0
  314. package/src/inputs/normalize.ts +1 -0
  315. package/src/runner/__tests__/__screenshots__/mesh.test.ts/buildSubdividedPlane-centroid-is-shared-across-a-face-and-equals-mean-of-its-3-positions-1.png +0 -0
  316. package/src/runner/__tests__/__screenshots__/mesh.test.ts/buildSubdividedPlane-uv-matches-aPosition---0-5---0-5-1.png +0 -0
  317. package/src/runner/__tests__/mesh.test.ts +128 -0
  318. package/src/runner/gl.ts +69 -0
  319. package/src/runner/mesh.ts +135 -0
  320. package/src/runner/runner.ts +528 -0
  321. package/src/transitions/all.ts +131 -0
  322. package/src/transitions/bloom-reveal.ts +106 -0
  323. package/src/transitions/chromatic-pulse.ts +40 -0
  324. package/src/transitions/clock-wipe.ts +33 -0
  325. package/src/transitions/color-phase.ts +24 -0
  326. package/src/transitions/cross-zoom.ts +59 -0
  327. package/src/transitions/crosshatch.ts +49 -0
  328. package/src/transitions/define.ts +56 -0
  329. package/src/transitions/directional-burn.ts +67 -0
  330. package/src/transitions/directional-warp.ts +46 -0
  331. package/src/transitions/dissolve.ts +16 -0
  332. package/src/transitions/dreamy-zoom.ts +66 -0
  333. package/src/transitions/dreamy.ts +26 -0
  334. package/src/transitions/drip-wipe.ts +109 -0
  335. package/src/transitions/ember-scatter.ts +94 -0
  336. package/src/transitions/film-burn.ts +101 -0
  337. package/src/transitions/film-grain.ts +78 -0
  338. package/src/transitions/flow-warp.ts +51 -0
  339. package/src/transitions/fluid-flow.ts +94 -0
  340. package/src/transitions/glass-shatter.ts +86 -0
  341. package/src/transitions/glitch.ts +59 -0
  342. package/src/transitions/god-rays-reveal.ts +110 -0
  343. package/src/transitions/gravity-pull.ts +65 -0
  344. package/src/transitions/grid-reveal.ts +53 -0
  345. package/src/transitions/heat-haze.ts +51 -0
  346. package/src/transitions/index.ts +63 -0
  347. package/src/transitions/ink-bloom.ts +76 -0
  348. package/src/transitions/ink-diffuse.ts +90 -0
  349. package/src/transitions/iris-zoom.ts +67 -0
  350. package/src/transitions/kinetic-bands.ts +58 -0
  351. package/src/transitions/lenticular-flip.ts +73 -0
  352. package/src/transitions/light-leak.ts +43 -0
  353. package/src/transitions/linear-blur.ts +40 -0
  354. package/src/transitions/liquid-chrome.ts +114 -0
  355. package/src/transitions/liquid-morph.ts +50 -0
  356. package/src/transitions/lumina-melt.ts +36 -0
  357. package/src/transitions/mosaic.ts +58 -0
  358. package/src/transitions/noise-dissolve.ts +41 -0
  359. package/src/transitions/page-curl.ts +165 -0
  360. package/src/transitions/paint-bleed.ts +59 -0
  361. package/src/transitions/pinwheel.ts +40 -0
  362. package/src/transitions/pixelate.ts +26 -0
  363. package/src/transitions/polka-dots-curtain.ts +46 -0
  364. package/src/transitions/polygon-flip.ts +97 -0
  365. package/src/transitions/portal-dive.ts +83 -0
  366. package/src/transitions/prism-split.ts +52 -0
  367. package/src/transitions/push.ts +34 -0
  368. package/src/transitions/radial-reveal.ts +31 -0
  369. package/src/transitions/ripple-wave.ts +135 -0
  370. package/src/transitions/ripple.ts +43 -0
  371. package/src/transitions/shape-reveal.ts +53 -0
  372. package/src/transitions/shockwave.ts +56 -0
  373. package/src/transitions/singularity.ts +59 -0
  374. package/src/transitions/slide.ts +76 -0
  375. package/src/transitions/smoldering-edge.ts +74 -0
  376. package/src/transitions/split.ts +53 -0
  377. package/src/transitions/swirl.ts +42 -0
  378. package/src/transitions/tangent-motion-blur.ts +58 -0
  379. package/src/transitions/tile-scatter.ts +122 -0
  380. package/src/transitions/warp-zoom.ts +70 -0
  381. package/src/transitions/wave-stripes.ts +55 -0
  382. package/src/transitions/wind.ts +48 -0
  383. package/src/transitions/wipe-directional.ts +26 -0
  384. package/src/types.ts +87 -0
package/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 Maesto LLC
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/README.md ADDED
@@ -0,0 +1,618 @@
1
+ # @vysmo/transitions
2
+
3
+ 60 WebGL2 transition shaders, defined as plain data. Mesh-based, tree-shakable to the byte, endpoint-correct by construction. One Runner takes any combination of canvas / image / video sources and crossfades, displaces, warps, or curls between them.
4
+
5
+ [Live demos + parameter playground](https://vysmo.com/transitions) · [Source](https://github.com/vysmodev)
6
+
7
+ ## Install
8
+
9
+ ```bash
10
+ pnpm add @vysmo/transitions @vysmo/animations
11
+ ```
12
+
13
+ The runner doesn't drive time — you do. The Quick start uses [`@vysmo/animations`](https://www.npmjs.com/package/@vysmo/animations) for a four-line tween from `0` to `1`, but the runner doesn't care: any rAF loop, [`@vysmo/scroll`](https://www.npmjs.com/package/@vysmo/scroll) handler, Motion / GSAP timeline, or scrubbed input works.
14
+
15
+ ## Quick start
16
+
17
+ End-to-end: load two images, drive a transition between them. The runner is thin enough that this is genuinely all you need.
18
+
19
+ ```ts
20
+ import { Runner, paintBleed } from "@vysmo/transitions";
21
+ import { animate } from "@vysmo/animations";
22
+
23
+ const canvas = document.querySelector<HTMLCanvasElement>("canvas")!;
24
+ const runner = new Runner({ canvas });
25
+
26
+ // Two images you want to crossfade between.
27
+ const fromImg = new Image();
28
+ const toImg = new Image();
29
+ fromImg.src = "/photo-a.jpg";
30
+ toImg.src = "/photo-b.jpg";
31
+
32
+ await Promise.all([fromImg.decode(), toImg.decode()]);
33
+
34
+ // Animate progress 0 → 1 and render every frame.
35
+ animate({
36
+ from: 0,
37
+ to: 1,
38
+ duration: 1200,
39
+ onUpdate: (p) => runner.render(paintBleed, {
40
+ from: fromImg,
41
+ to: toImg,
42
+ progress: p,
43
+ }),
44
+ });
45
+ ```
46
+
47
+ `runner.render()` is one draw call per frame, regardless of the transition.
48
+
49
+ ## Tree-shake by what you import
50
+
51
+ Every transition is its own module. Import only the ones you ship:
52
+
53
+ ```ts
54
+ import { Runner, crossZoom, pageCurl } from "@vysmo/transitions";
55
+ // → Runner + 2 transitions, ~6 KB gzipped
56
+ ```
57
+
58
+ vs
59
+
60
+ ```ts
61
+ import * as transitions from "@vysmo/transitions";
62
+ // → Runner + all 60 transitions, ~28 KB gzipped
63
+ ```
64
+
65
+ `sideEffects: false`, no CSS, no global state.
66
+
67
+ ## Catalog
68
+
69
+ Each transition is a `Transition<P>` — the parameter type `P` is inferred from `defaults`, so overrides are typed without any hand-typing. The auto-generated catalog below mirrors the playground's slider ranges.
70
+
71
+ <!-- catalog:start -->
72
+
73
+ Every built-in transition with its parameters, defaults, and accepted values. The catalog mirrors the playground at [vysmo.com/transitions/docs#catalog](https://vysmo.com/transitions/docs#catalog).
74
+
75
+ ### Light & Optics
76
+
77
+ #### `filmBurn`
78
+
79
+ | Prop | Type | Default | Values |
80
+ |---|---|---|---|
81
+ | `center` | vec2 | `[0.5, 0.5]` | `[0.5, 0.5]` Center · `[0.5, 0.85]` Top · `[0.5, 0.15]` Bottom · `[0.15, 0.5]` Left · `[0.85, 0.5]` Right · `[0.15, 0.85]` TL · `[0.85, 0.85]` TR |
82
+ | `scale` | number | `6` | 0.5 – 18, step 0.05 |
83
+ | `edgeWidth` | number | `0.05` | 0 – 1, step 0.05 |
84
+ | `chroma` | number | `0` | 0 – 1, step 0.01 |
85
+ | `flameColor` | vec3 | `[1.6, 0.7, 0.15]` | `[1.6, 0.7, 0.15]` Ember · `[1.8, 0.4, 0.05]` Molten · `[1.2, 0.15, 0.1]` Deep red · `[0.5, 1.6, 0.4]` Acid · `[0.4, 1, 1.6]` Ice blue · `[1.2, 1.6, 2.5]` Electric · `[1.4, 0.6, 1.8]` Violet |
86
+
87
+ #### `lightLeak`
88
+
89
+ | Prop | Type | Default | Values |
90
+ |---|---|---|---|
91
+ | `direction` | vec2 | `[1, 0]` | `[1, 0]` Right · `[-1, 0]` Left · `[0, -1]` Down · `[0, 1]` Up · `[1, -1]` Diagonal · `[-1, -1]` Anti-diag |
92
+ | `color` | vec3 | `[1, 0.85, 0.55]` | `[1, 0.85, 0.55]` Sunset · `[1, 0.7, 0.85]` Magic hour · `[1, 0.96, 0.92]` Daylight · `[0.5, 1, 1.1]` Cyan · `[1.1, 0.4, 0.95]` Magenta |
93
+ | `bandWidth` | number | `0.2` | 0 – 1, step 0.05 |
94
+ | `intensity` | number | `1` | 0 – 3, step 0.01 |
95
+
96
+ #### `heatHaze`
97
+
98
+ | Prop | Type | Default | Values |
99
+ |---|---|---|---|
100
+ | `intensity` | number | `0.04` | 0 – 1.5, step 0.01 |
101
+ | `frequency` | number | `14` | 0 – 56, step 1 |
102
+ | `flow` | number | `5` | 0 – 15, step 1 |
103
+
104
+ #### `bloomReveal`
105
+
106
+ | Prop | Type | Default | Values |
107
+ |---|---|---|---|
108
+ | `scale` | number | `5` | 0.5 – 15, step 0.05 |
109
+ | `softness` | number | `0.08` | 0 – 0.4, step 0.005 |
110
+ | `threshold` | number | `0.55` | 0 – 1, step 0.01 |
111
+ | `intensity` | number | `3` | 0 – 9, step 0.01 |
112
+
113
+ #### `directionalBurn`
114
+
115
+ | Prop | Type | Default | Values |
116
+ |---|---|---|---|
117
+ | `direction` | vec2 | `[1, 0]` | `[1, 0]` Right · `[-1, 0]` Left · `[0, -1]` Down · `[0, 1]` Up · `[1, -1]` Diagonal · `[-1, -1]` Anti-diag |
118
+ | `scale` | number | `10` | 0.5 – 30, step 0.05 |
119
+ | `edgeWidth` | number | `0.035` | 0 – 1, step 0.05 |
120
+ | `flameColor` | vec3 | `[1.6, 0.7, 0.15]` | `[1.6, 0.7, 0.15]` Ember · `[1.8, 0.4, 0.05]` Molten · `[1.2, 0.15, 0.1]` Deep red · `[0.5, 1.6, 0.4]` Acid · `[0.4, 1, 1.6]` Ice blue · `[1.2, 1.6, 2.5]` Electric · `[1.4, 0.6, 1.8]` Violet |
121
+
122
+ #### `prismSplit`
123
+
124
+ | Prop | Type | Default | Values |
125
+ |---|---|---|---|
126
+ | `direction` | vec2 | `[1, 0]` | `[1, 0]` Right · `[-1, 0]` Left · `[0, -1]` Down · `[0, 1]` Up · `[1, -1]` Diagonal · `[-1, -1]` Anti-diag |
127
+ | `intensity` | number | `0.04` | 0 – 0.07, step 0.005 |
128
+ | `softness` | number | `0.2` | 0 – 0.4, step 0.005 |
129
+
130
+ #### `emberScatter`
131
+
132
+ | Prop | Type | Default | Values |
133
+ |---|---|---|---|
134
+ | `count` | number | `5` | 0 – 24, step 1 |
135
+ | `scale` | number | `8` | 0.5 – 24, step 0.05 |
136
+ | `edgeWidth` | number | `0.04` | 0 – 1, step 0.05 |
137
+ | `stagger` | number | `0.35` | 0 – 1, step 0.01 |
138
+ | `flameColor` | vec3 | `[1.6, 0.7, 0.15]` | `[1.6, 0.7, 0.15]` Ember · `[1.8, 0.4, 0.05]` Molten · `[1.2, 0.15, 0.1]` Deep red · `[0.5, 1.6, 0.4]` Acid · `[0.4, 1, 1.6]` Ice blue · `[1.2, 1.6, 2.5]` Electric · `[1.4, 0.6, 1.8]` Violet |
139
+
140
+ #### `godRaysReveal`
141
+
142
+ | Prop | Type | Default | Values |
143
+ |---|---|---|---|
144
+ | `scale` | number | `5` | 0.5 – 15, step 0.05 |
145
+ | `softness` | number | `0.08` | 0 – 0.4, step 0.005 |
146
+ | `threshold` | number | `0.45` | 0 – 1, step 0.01 |
147
+ | `intensity` | number | `1.6` | 0 – 4.8, step 0.01 |
148
+ | `decay` | number | `0.92` | 0.5 – 1, step 0.005 |
149
+ | `source` | vec2 | `[0.5, 0.5]` | `[0.5, 0.5]` Center · `[0.5, 0.85]` Top · `[0.5, 0.15]` Bottom · `[0.15, 0.5]` Left · `[0.85, 0.5]` Right · `[0.15, 0.85]` TL · `[0.85, 0.85]` TR |
150
+
151
+ #### `chromaticPulse`
152
+
153
+ | Prop | Type | Default | Values |
154
+ |---|---|---|---|
155
+ | `intensity` | number | `0.6` | 0 – 1.8, step 0.01 |
156
+
157
+ ### Fluid & Ink
158
+
159
+ #### `paintBleed`
160
+
161
+ | Prop | Type | Default | Values |
162
+ |---|---|---|---|
163
+ | `direction` | vec2 | `[-1, 0]` | `[-1, 0]` Right · `[1, 0]` Left · `[0, 1]` Down · `[0, -1]` Up · `[-1, 1]` Diagonal · `[1, 1]` Anti-diag |
164
+ | `scale` | number | `10` | 0.5 – 30, step 0.05 |
165
+ | `softness` | number | `0.02` | 0 – 0.4, step 0.005 |
166
+ | `noiseStrength` | number | `0.35` | 0 – 1.5, step 0.01 |
167
+
168
+ #### `inkDiffuse`
169
+
170
+ | Prop | Type | Default | Values |
171
+ |---|---|---|---|
172
+ | `scale` | number | `7` | 0.5 – 21, step 0.05 |
173
+ | `softness` | number | `0.08` | 0 – 0.4, step 0.005 |
174
+
175
+ #### `inkBloom`
176
+
177
+ | Prop | Type | Default | Values |
178
+ |---|---|---|---|
179
+ | `center` | vec2 | `[0.5, 0.5]` | `[0.5, 0.5]` Center · `[0.5, 0.85]` Top · `[0.5, 0.15]` Bottom · `[0.15, 0.5]` Left · `[0.85, 0.5]` Right · `[0.15, 0.85]` TL · `[0.85, 0.85]` TR |
180
+ | `scale` | number | `5` | 0.5 – 15, step 0.05 |
181
+ | `edgeWidth` | number | `0.07` | 0 – 1, step 0.05 |
182
+ | `bloomWidth` | number | `0.12` | 0 – 1, step 0.05 |
183
+ | `inkColor` | vec3 | `[0.25, 0.08, 0.45]` | `[0.25, 0.08, 0.45]` Indigo · `[0.06, 0.06, 0.08]` Sumi · `[0.55, 0.05, 0.12]` Crimson · `[0.06, 0.32, 0.18]` Forest · `[0.05, 0.18, 0.55]` Sapphire |
184
+
185
+ #### `fluidFlow`
186
+
187
+ | Prop | Type | Default | Values |
188
+ |---|---|---|---|
189
+ | `strength` | number | `0.12` | 0 – 1.5, step 0.01 |
190
+ | `scale` | number | `3` | 0.5 – 9, step 0.05 |
191
+
192
+ #### `liquidMorph`
193
+
194
+ | Prop | Type | Default | Values |
195
+ |---|---|---|---|
196
+ | `scale` | number | `3` | 0.5 – 9, step 0.05 |
197
+ | `strength` | number | `0.1` | 0 – 1.5, step 0.01 |
198
+ | `flow` | number | `3` | 0 – 9, step 0.1 |
199
+
200
+ #### `dripWipe`
201
+
202
+ | Prop | Type | Default | Values |
203
+ |---|---|---|---|
204
+ | `direction` | vec2 | `[-1, 0]` | `[1, 0]` Right · `[-1, 0]` Left · `[0, -1]` Down · `[0, 1]` Up |
205
+ | `width` | number | `0.5` | 0 – 1.5, step 0.05 |
206
+ | `scaleX` | number | `40` | 0.5 – 120, step 0.05 |
207
+ | `scaleY` | number | `40` | 0.5 – 120, step 0.05 |
208
+
209
+ #### `smolderingEdge`
210
+
211
+ | Prop | Type | Default | Values |
212
+ |---|---|---|---|
213
+ | `direction` | vec2 | `[1, 1]` | `[1, 0]` Right · `[-1, 0]` Left · `[0, -1]` Down · `[0, 1]` Up · `[1, -1]` Diagonal · `[-1, -1]` Anti-diag |
214
+ | `scale` | number | `3` | 0.5 – 9, step 0.05 |
215
+ | `edgeWidth` | number | `0.04` | 0 – 1, step 0.05 |
216
+ | `trailLength` | number | `0.18` | 0 – 1, step 0.01 |
217
+ | `emberColor` | vec3 | `[1.4, 0.5, 0.1]` | `[1.4, 0.5, 0.1]` Ember · `[1.7, 0.3, 0.05]` Molten · `[1.1, 0.12, 0.08]` Deep red · `[0.4, 1.5, 0.3]` Acid |
218
+
219
+ #### `luminaMelt`
220
+
221
+ | Prop | Type | Default | Values |
222
+ |---|---|---|---|
223
+ | `softness` | number | `0.15` | 0 – 0.4, step 0.005 |
224
+ | `invert` | enum | `0` | `0` Bright melts first · `1` Dark melts first |
225
+
226
+ ### Wipes & Slides
227
+
228
+ #### `dissolve`
229
+
230
+ _No params._
231
+
232
+ #### `wipeDirectional`
233
+
234
+ | Prop | Type | Default | Values |
235
+ |---|---|---|---|
236
+ | `angle` | enum | `0` | `0` Right · `-1.5708` Down · `3.1416` Left · `1.5708` Up · `-0.7854` Diagonal · `-2.3562` Anti-diag |
237
+ | `softness` | number | `0.05` | 0 – 0.4, step 0.005 |
238
+
239
+ #### `slide`
240
+
241
+ | Prop | Type | Default | Values |
242
+ |---|---|---|---|
243
+ | `direction` | vec2 | `[-1, 0]` | `[1, 0]` Right · `[-1, 0]` Left · `[0, -1]` Down · `[0, 1]` Up |
244
+ | `feather` | number | `0.015` | 0 – 0.4, step 0.005 |
245
+ | `blur` | number | `0` | 0 – 0.1, step 0.005 |
246
+
247
+ #### `push`
248
+
249
+ | Prop | Type | Default | Values |
250
+ |---|---|---|---|
251
+ | `direction` | vec2 | `[1, 0]` | `[-1, 0]` Right · `[1, 0]` Left · `[0, 1]` Down · `[0, -1]` Up |
252
+
253
+ #### `split`
254
+
255
+ | Prop | Type | Default | Values |
256
+ |---|---|---|---|
257
+ | `axis` | enum | `0` | `0` Horizontal · `1` Vertical |
258
+ | `mode` | enum | `0` | `0` Open · `1` Close |
259
+ | `softness` | number | `0.01` | 0 – 0.4, step 0.005 |
260
+
261
+ #### `clockWipe`
262
+
263
+ | Prop | Type | Default | Values |
264
+ |---|---|---|---|
265
+ | `startAngle` | number | `-1.5708` | -3.1416 – 3.1416, step 0.01 |
266
+ | `direction` | enum | `1` | `1` Clockwise · `-1` Counter-clockwise |
267
+ | `softness` | number | `0.02` | 0 – 0.4, step 0.005 |
268
+
269
+ #### `radialReveal`
270
+
271
+ | Prop | Type | Default | Values |
272
+ |---|---|---|---|
273
+ | `center` | vec2 | `[0.5, 0.5]` | `[0.5, 0.5]` Center · `[0.5, 0.85]` Top · `[0.5, 0.15]` Bottom · `[0.15, 0.5]` Left · `[0.85, 0.5]` Right · `[0.15, 0.85]` TL · `[0.85, 0.85]` TR |
274
+ | `softness` | number | `0.05` | 0 – 0.4, step 0.005 |
275
+
276
+ #### `irisZoom`
277
+
278
+ | Prop | Type | Default | Values |
279
+ |---|---|---|---|
280
+ | `center` | vec2 | `[0.5, 0.5]` | `[0.5, 0.5]` Center · `[0.5, 0.85]` Top · `[0.5, 0.15]` Bottom · `[0.15, 0.5]` Left · `[0.85, 0.5]` Right · `[0.15, 0.85]` TL · `[0.85, 0.85]` TR |
281
+ | `width` | number | `0.08` | 0 – 1, step 0.05 |
282
+ | `scale` | number | `8` | 0.5 – 24, step 0.05 |
283
+
284
+ #### `shapeReveal`
285
+
286
+ | Prop | Type | Default | Values |
287
+ |---|---|---|---|
288
+ | `center` | vec2 | `[0.5, 0.5]` | `[0.5, 0.5]` Center · `[0.5, 0.85]` Top · `[0.5, 0.15]` Bottom · `[0.15, 0.5]` Left · `[0.85, 0.5]` Right · `[0.15, 0.85]` TL · `[0.85, 0.85]` TR |
289
+ | `sides` | enum | `6` | `3` Triangle · `4` Diamond · `5` Pentagon · `6` Hexagon · `8` Octagon · `12` Dodecagon · `32` Circle |
290
+ | `rotation` | number | `0` | -6.2832 – 6.2832, step 0.01 |
291
+ | `softness` | number | `0.05` | 0 – 0.4, step 0.005 |
292
+
293
+ #### `gridReveal`
294
+
295
+ | Prop | Type | Default | Values |
296
+ |---|---|---|---|
297
+ | `count` | number | `8` | 3 – 24, step 1 |
298
+ | `stagger` | number | `0.7` | 0 – 1, step 0.01 |
299
+ | `pattern` | enum | `1` | `0` Sequential · `1` Radial · `2` Random |
300
+
301
+ ### Distort & Warp
302
+
303
+ #### `warpZoom`
304
+
305
+ | Prop | Type | Default | Values |
306
+ |---|---|---|---|
307
+ | `center` | vec2 | `[0.5, 0.5]` | `[0.5, 0.5]` Center · `[0.5, 0.85]` Top · `[0.5, 0.15]` Bottom · `[0.15, 0.5]` Left · `[0.85, 0.5]` Right · `[0.15, 0.85]` TL · `[0.85, 0.85]` TR |
308
+ | `strength` | number | `1` | 0 – 3, step 0.01 |
309
+ | `rotation` | number | `1` | -6.2832 – 6.2832, step 0.01 |
310
+ | `blur` | number | `0.02` | 0 – 0.4, step 0.005 |
311
+
312
+ #### `crossZoom`
313
+
314
+ | Prop | Type | Default | Values |
315
+ |---|---|---|---|
316
+ | `strength` | number | `1.2` | 0 – 3.6, step 0.01 |
317
+ | `blur` | number | `0.04` | 0 – 0.4, step 0.005 |
318
+
319
+ #### `directionalWarp`
320
+
321
+ | Prop | Type | Default | Values |
322
+ |---|---|---|---|
323
+ | `direction` | vec2 | `[-1, 1]` | `[1, 0]` Right · `[-1, 0]` Left · `[0, -1]` Down · `[0, 1]` Up · `[1, -1]` Diagonal · `[-1, -1]` Anti-diag |
324
+ | `smoothness` | number | `0.5` | 0 – 1, step 0.01 |
325
+
326
+ #### `swirl`
327
+
328
+ | Prop | Type | Default | Values |
329
+ |---|---|---|---|
330
+ | `radius` | number | `1` | 0 – 3, step 0.1 |
331
+ | `strength` | number | `25.13` | 0 – 75.39, step 0.01 |
332
+
333
+ #### `flowWarp`
334
+
335
+ | Prop | Type | Default | Values |
336
+ |---|---|---|---|
337
+ | `intensity` | number | `0.4` | 0 – 1.5, step 0.01 |
338
+ | `angle1` | number | `0.7854` | -3.1416 – 3.1416, step 0.01 |
339
+ | `angle2` | number | `-2.3562` | -3.1416 – 3.1416, step 0.01 |
340
+
341
+ #### `ripple`
342
+
343
+ | Prop | Type | Default | Values |
344
+ |---|---|---|---|
345
+ | `center` | vec2 | `[0.5, 0.5]` | `[0.5, 0.5]` Center · `[0.5, 0.85]` Top · `[0.5, 0.15]` Bottom · `[0.15, 0.5]` Left · `[0.85, 0.5]` Right · `[0.15, 0.85]` TL · `[0.85, 0.85]` TR |
346
+ | `amplitude` | number | `0.03` | 0 – 1.5, step 0.01 |
347
+ | `frequency` | number | `6` | 0 – 24, step 1 |
348
+ | `speed` | number | `8` | 0 – 24, step 0.05 |
349
+
350
+ #### `rippleWave`
351
+
352
+ | Prop | Type | Default | Values |
353
+ |---|---|---|---|
354
+ | `amplitude` | number | `0.1` | 0 – 1.5, step 0.01 |
355
+ | `source` | vec2 | `[0.5, 0.5]` | `[0.5, 0.5]` Center · `[0.5, 0.85]` Top · `[0.5, 0.15]` Bottom · `[0.15, 0.5]` Left · `[0.85, 0.5]` Right · `[0.15, 0.85]` TL · `[0.85, 0.85]` TR |
356
+
357
+ #### `shockwave`
358
+
359
+ | Prop | Type | Default | Values |
360
+ |---|---|---|---|
361
+ | `center` | vec2 | `[0.5, 0.5]` | `[0.5, 0.5]` Center · `[0.5, 0.85]` Top · `[0.5, 0.15]` Bottom · `[0.15, 0.5]` Left · `[0.85, 0.5]` Right · `[0.15, 0.85]` TL · `[0.85, 0.85]` TR |
362
+ | `thickness` | number | `0.15` | 0 – 1, step 0.01 |
363
+ | `strength` | number | `0.04` | 0 – 1.5, step 0.01 |
364
+
365
+ #### `gravityPull`
366
+
367
+ | Prop | Type | Default | Values |
368
+ |---|---|---|---|
369
+ | `center` | vec2 | `[0.5, 0.5]` | `[0.5, 0.5]` Center · `[0.5, 0.85]` Top · `[0.5, 0.15]` Bottom · `[0.15, 0.5]` Left · `[0.85, 0.5]` Right · `[0.15, 0.85]` TL · `[0.85, 0.85]` TR |
370
+ | `intensity` | number | `0.15` | 0 – 1.5, step 0.01 |
371
+
372
+ #### `portalDive`
373
+
374
+ | Prop | Type | Default | Values |
375
+ |---|---|---|---|
376
+ | `twist` | number | `3.1416` | -6.2832 – 6.2832, step 0.01 |
377
+ | `depth` | number | `1` | 0 – 3, step 0.05 |
378
+ | `reflection` | number | `0` | 0 – 1, step 0.01 |
379
+
380
+ #### `singularity`
381
+
382
+ | Prop | Type | Default | Values |
383
+ |---|---|---|---|
384
+ | `center` | vec2 | `[0.5, 0.5]` | `[0.5, 0.5]` Center · `[0.5, 0.85]` Top · `[0.5, 0.15]` Bottom · `[0.15, 0.5]` Left · `[0.85, 0.5]` Right · `[0.15, 0.85]` TL · `[0.85, 0.85]` TR |
385
+
386
+ #### `wind`
387
+
388
+ | Prop | Type | Default | Values |
389
+ |---|---|---|---|
390
+ | `size` | number | `0.2` | 0 – 1, step 0.01 |
391
+ | `direction` | vec2 | `[1, 0]` | `[1, 0]` Right · `[-1, 0]` Left · `[0, -1]` Down · `[0, 1]` Up · `[1, -1]` Diagonal · `[-1, -1]` Anti-diag |
392
+
393
+ #### `linearBlur`
394
+
395
+ | Prop | Type | Default | Values |
396
+ |---|---|---|---|
397
+ | `direction` | vec2 | `[1, 0]` | `[1, 0]` Right · `[-1, 0]` Left · `[0, -1]` Down · `[0, 1]` Up · `[1, -1]` Diagonal · `[-1, -1]` Anti-diag |
398
+ | `intensity` | number | `0.1` | 0 – 1.5, step 0.01 |
399
+
400
+ #### `tangentMotionBlur`
401
+
402
+ | Prop | Type | Default | Values |
403
+ |---|---|---|---|
404
+ | `direction` | vec2 | `[1, 0]` | `[1, 0]` Right · `[-1, 0]` Left · `[0, -1]` Down · `[0, 1]` Up · `[1, -1]` Diagonal · `[-1, -1]` Anti-diag |
405
+ | `intensity` | number | `0.08` | 0 – 1.5, step 0.01 |
406
+ | `softness` | number | `0.2` | 0 – 0.4, step 0.005 |
407
+
408
+ ### Glitch & Noise
409
+
410
+ #### `glitch`
411
+
412
+ | Prop | Type | Default | Values |
413
+ |---|---|---|---|
414
+ | `intensity` | number | `0.6` | 0 – 1.8, step 0.01 |
415
+ | `chroma` | number | `0.02` | 0 – 0.05, step 0.002 |
416
+ | `blocks` | number | `30` | 0 – 90, step 1 |
417
+
418
+ #### `noiseDissolve`
419
+
420
+ | Prop | Type | Default | Values |
421
+ |---|---|---|---|
422
+ | `scale` | number | `20` | 0.5 – 60, step 0.05 |
423
+ | `softness` | number | `0.05` | 0 – 0.4, step 0.005 |
424
+
425
+ #### `pixelate`
426
+
427
+ | Prop | Type | Default | Values |
428
+ |---|---|---|---|
429
+ | `maxBlockSize` | number | `40` | 0 – 120, step 0.05 |
430
+
431
+ #### `mosaic`
432
+
433
+ | Prop | Type | Default | Values |
434
+ |---|---|---|---|
435
+ | `count` | number | `14` | 3 – 24, step 1 |
436
+ | `jitter` | number | `0.08` | 0 – 1, step 0.01 |
437
+ | `stagger` | number | `0.4` | 0 – 1, step 0.01 |
438
+
439
+ #### `filmGrain`
440
+
441
+ | Prop | Type | Default | Values |
442
+ |---|---|---|---|
443
+ | `grain` | number | `1` | 0 – 3, step 0.1 |
444
+
445
+ #### `crosshatch`
446
+
447
+ | Prop | Type | Default | Values |
448
+ |---|---|---|---|
449
+ | `center` | vec2 | `[0.5, 0.5]` | `[0.5, 0.5]` Center · `[0.5, 0.85]` Top · `[0.5, 0.15]` Bottom · `[0.15, 0.5]` Left · `[0.85, 0.5]` Right · `[0.15, 0.85]` TL · `[0.85, 0.85]` TR |
450
+ | `threshold` | number | `3` | 3 – 30, step 0.5 |
451
+ | `fadeEdge` | number | `0.1` | 0 – 1, step 0.01 |
452
+
453
+ ### Cinematic
454
+
455
+ #### `dreamy`
456
+
457
+ _No params._
458
+
459
+ #### `dreamyZoom`
460
+
461
+ | Prop | Type | Default | Values |
462
+ |---|---|---|---|
463
+ | `intensity` | number | `0.5` | 0 – 1, step 0.01 |
464
+
465
+ #### `colorPhase`
466
+
467
+ _No params._
468
+
469
+ #### `liquidChrome`
470
+
471
+ | Prop | Type | Default | Values |
472
+ |---|---|---|---|
473
+ | `shine` | number | `0.9` | 0 – 1, step 0.01 |
474
+ | `rim` | number | `0.25` | 0 – 1, step 0.01 |
475
+ | `wobble` | number | `0.12` | 0 – 1, step 0.01 |
476
+ | `refraction` | number | `0.035` | 0 – 1, step 0.01 |
477
+ | `reflection` | number | `0` | 0 – 1, step 0.01 |
478
+
479
+ ### Geometric
480
+
481
+ #### `kineticBands`
482
+
483
+ | Prop | Type | Default | Values |
484
+ |---|---|---|---|
485
+ | `count` | number | `12` | 2 – 24, step 1 |
486
+ | `stagger` | number | `0.6` | 0 – 1, step 0.01 |
487
+ | `softness` | number | `0.02` | 0 – 0.4, step 0.005 |
488
+ | `direction` | vec2 | `[1, 0]` | `[1, 0]` Right · `[-1, 0]` Left · `[0, -1]` Down · `[0, 1]` Up |
489
+
490
+ #### `polkaDotsCurtain`
491
+
492
+ | Prop | Type | Default | Values |
493
+ |---|---|---|---|
494
+ | `dots` | number | `15` | 1 – 45, step 1 |
495
+ | `center` | vec2 | `[0.5, 0.5]` | `[0.5, 0.5]` Center · `[0.5, 0.85]` Top · `[0.5, 0.15]` Bottom · `[0.15, 0.5]` Left · `[0.85, 0.5]` Right · `[0.15, 0.85]` TL · `[0.85, 0.85]` TR |
496
+ | `softness` | number | `0.05` | 0 – 0.4, step 0.005 |
497
+
498
+ #### `waveStripes`
499
+
500
+ | Prop | Type | Default | Values |
501
+ |---|---|---|---|
502
+ | `direction` | vec2 | `[1, 0]` | `[1, 0]` Right · `[-1, 0]` Left · `[0, -1]` Down · `[0, 1]` Up |
503
+
504
+ #### `pinwheel`
505
+
506
+ | Prop | Type | Default | Values |
507
+ |---|---|---|---|
508
+ | `center` | vec2 | `[0.5, 0.5]` | `[0.5, 0.5]` Center · `[0.5, 0.85]` Top · `[0.5, 0.15]` Bottom · `[0.15, 0.5]` Left · `[0.85, 0.5]` Right · `[0.15, 0.85]` TL · `[0.85, 0.85]` TR |
509
+ | `spokes` | number | `8` | 0 – 24, step 1 |
510
+ | `softness` | number | `0.05` | 0 – 0.4, step 0.005 |
511
+
512
+ ### 3D Mesh
513
+
514
+ #### `pageCurl`
515
+
516
+ | Prop | Type | Default | Values |
517
+ |---|---|---|---|
518
+ | `tilt` | number | `0.12` | 0 – 1, step 0.01 |
519
+ | `backColor` | vec3 | `[0.97, 0.96, 0.94]` | `[0.97, 0.96, 0.94]` Paper · `[0.93, 0.86, 0.72]` Parchment · `[0.99, 0.98, 0.92]` Ivory · `[0.86, 0.88, 0.92]` Cool gray · `[0.32, 0.34, 0.4]` Slate |
520
+
521
+ #### `polygonFlip`
522
+
523
+ | Prop | Type | Default | Values |
524
+ |---|---|---|---|
525
+ | `rim` | number | `0.25` | 0 – 1, step 0.01 |
526
+
527
+ #### `glassShatter`
528
+
529
+ | Prop | Type | Default | Values |
530
+ |---|---|---|---|
531
+ | `cells` | number | `14` | 0 – 42, step 1 |
532
+ | `reflection` | number | `0` | 0 – 1, step 0.01 |
533
+
534
+ #### `tileScatter`
535
+
536
+ | Prop | Type | Default | Values |
537
+ |---|---|---|---|
538
+ | `scatter` | number | `1` | 0 – 3, step 0.1 |
539
+
540
+ #### `lenticularFlip`
541
+
542
+ | Prop | Type | Default | Values |
543
+ |---|---|---|---|
544
+ | `stripCount` | number | `22` | 3 – 60, step 1 |
545
+
546
+ <!-- catalog:end -->
547
+
548
+ ## Parameter overrides
549
+
550
+ Each transition exports its own `defaults` object. Override per render:
551
+
552
+ ```ts
553
+ import { pixelate } from "@vysmo/transitions";
554
+
555
+ runner.render(pixelate, {
556
+ from, to, progress,
557
+ params: { maxBlockSize: 60 }, // typed from pixelate.defaults
558
+ });
559
+ ```
560
+
561
+ Anything you don't override falls back to the default. Defaults are tuned to look good out of the box.
562
+
563
+ ## Defining your own transition
564
+
565
+ ```ts
566
+ import { defineTransition } from "@vysmo/transitions";
567
+
568
+ export const myFade = defineTransition({
569
+ name: "my-fade",
570
+ defaults: { gamma: 2.2 },
571
+ glsl: `
572
+ vec4 transition(vec2 uv) {
573
+ vec4 a = getFromColor(uv);
574
+ vec4 b = getToColor(uv);
575
+ float p = pow(uProgress, uGamma);
576
+ return mix(a, b, p);
577
+ }
578
+ `,
579
+ });
580
+
581
+ runner.render(myFade, { from, to, progress: 0.5, params: { gamma: 1.8 } });
582
+ ```
583
+
584
+ The Runner wraps the GLSL with the standard header (`#version 300 es`, precision, `uFrom` / `uTo` / `uProgress` / `uResolution`, `getFromColor` / `getToColor` helpers) and maps each `defaults` key to a `u<PascalCase>` uniform.
585
+
586
+ ## Transition shape contracts
587
+
588
+ Every built-in transition clears five non-negotiable invariants. Custom transitions should too:
589
+
590
+ - **Endpoint correctness.** `progress=0` is pixel-pure `from`; `progress=1` is pixel-pure `to`. Enforced by [`endpoint-correctness.test.ts`](src/__tests__/endpoint-correctness.test.ts).
591
+ - **Polish degrades at endpoints.** Visual params (feather, blur, chroma split, displacement) hit zero at both ends — typically scaled by `4 * p * (1 - p)`.
592
+ - **No hard cuts.** Every boundary between `from` and `to` is feathered or motion-softened.
593
+ - **Full-frame.** Every pixel at every progress samples meaningful content. No black background, no letterboxing.
594
+ - **Continuous motion.** No visual freeze at any progress value. Symmetric envelopes don't drive position.
595
+
596
+ ## Source flexibility
597
+
598
+ `from` / `to` accept any `TextureSource`:
599
+
600
+ - `HTMLImageElement` (uploaded once — cached)
601
+ - `HTMLVideoElement` (re-uploaded each render — animated source)
602
+ - `HTMLCanvasElement` / `OffscreenCanvas` (re-uploaded each render)
603
+ - `ImageBitmap` (uploaded once — cached)
604
+ - `WebGLTexture` (used as-is — bring-your-own GPU data)
605
+
606
+ Mix freely. Page-curl an image to a video. Crossfade two canvases. Transition between a static logo and a live camera feed.
607
+
608
+ ## Characteristics
609
+
610
+ - **WebGL2 only.** No WebGL1 fallback.
611
+ - **Zero runtime dependencies** except `@vysmo/gl-core` (transitive).
612
+ - **SSR-safe at module load.** No DOM access at import — all checks guarded by `typeof X !== "undefined"`.
613
+ - **Tree-shakable.** Runner alone is ~4.6 KB gzipped; Runner + 3 typical transitions is ~6.5 KB; full bundle (Runner + all 60) is ~28 KB. Each additional transition adds ~0.4 KB.
614
+ - **Endpoint-tested.** Every transition is verified pixel-pure at `progress=0` and `progress=1` in headless Chromium per CI.
615
+
616
+ ## License
617
+
618
+ MIT.
@@ -0,0 +1,6 @@
1
+ export { Runner } from "./runner/runner.js";
2
+ export type { RunnerOptions } from "./runner/runner.js";
3
+ export { dissolve, wipeDirectional, slide, radialReveal, crossZoom, glitch, noiseDissolve, clockWipe, ripple, pixelate, kineticBands, lightLeak, liquidMorph, gridReveal, warpZoom, chromaticPulse, push, shapeReveal, paintBleed, shockwave, swirl, split, directionalWarp, wind, linearBlur, luminaMelt, pinwheel, dreamy, tangentMotionBlur, colorPhase, filmBurn, mosaic, emberScatter, directionalBurn, inkBloom, smolderingEdge, polkaDotsCurtain, crosshatch, dreamyZoom, heatHaze, prismSplit, irisZoom, gravityPull, waveStripes, flowWarp, dripWipe, portalDive, liquidChrome, glassShatter, inkDiffuse, bloomReveal, godRaysReveal, fluidFlow, lenticularFlip, filmGrain, singularity, polygonFlip, pageCurl, rippleWave, tileScatter, defineTransition, ALL_TRANSITIONS, } from "./transitions/index.js";
4
+ export type { DefineTransitionSpec } from "./transitions/index.js";
5
+ export type { RenderArgs, TextureSource, Transition, TransitionShader, UniformParams, UniformValue, } from "./types.js";
6
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAC5C,YAAY,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACxD,OAAO,EACL,QAAQ,EACR,eAAe,EACf,KAAK,EACL,YAAY,EACZ,SAAS,EACT,MAAM,EACN,aAAa,EACb,SAAS,EACT,MAAM,EACN,QAAQ,EACR,YAAY,EACZ,SAAS,EACT,WAAW,EACX,UAAU,EACV,QAAQ,EACR,cAAc,EACd,IAAI,EACJ,WAAW,EACX,UAAU,EACV,SAAS,EACT,KAAK,EACL,KAAK,EACL,eAAe,EACf,IAAI,EACJ,UAAU,EACV,UAAU,EACV,QAAQ,EACR,MAAM,EACN,iBAAiB,EACjB,UAAU,EACV,QAAQ,EACR,MAAM,EACN,YAAY,EACZ,eAAe,EACf,QAAQ,EACR,cAAc,EACd,gBAAgB,EAChB,UAAU,EACV,UAAU,EACV,QAAQ,EACR,UAAU,EACV,QAAQ,EACR,WAAW,EACX,WAAW,EACX,QAAQ,EACR,QAAQ,EACR,UAAU,EACV,YAAY,EACZ,YAAY,EACZ,UAAU,EACV,WAAW,EACX,aAAa,EACb,SAAS,EACT,cAAc,EACd,SAAS,EACT,WAAW,EACX,WAAW,EACX,QAAQ,EACR,UAAU,EACV,WAAW,EACX,gBAAgB,EAChB,eAAe,GAChB,MAAM,wBAAwB,CAAC;AAChC,YAAY,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AACnE,YAAY,EACV,UAAU,EACV,aAAa,EACb,UAAU,EACV,gBAAgB,EAChB,aAAa,EACb,YAAY,GACb,MAAM,YAAY,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1,3 @@
1
+ export { Runner } from "./runner/runner.js";
2
+ export { dissolve, wipeDirectional, slide, radialReveal, crossZoom, glitch, noiseDissolve, clockWipe, ripple, pixelate, kineticBands, lightLeak, liquidMorph, gridReveal, warpZoom, chromaticPulse, push, shapeReveal, paintBleed, shockwave, swirl, split, directionalWarp, wind, linearBlur, luminaMelt, pinwheel, dreamy, tangentMotionBlur, colorPhase, filmBurn, mosaic, emberScatter, directionalBurn, inkBloom, smolderingEdge, polkaDotsCurtain, crosshatch, dreamyZoom, heatHaze, prismSplit, irisZoom, gravityPull, waveStripes, flowWarp, dripWipe, portalDive, liquidChrome, glassShatter, inkDiffuse, bloomReveal, godRaysReveal, fluidFlow, lenticularFlip, filmGrain, singularity, polygonFlip, pageCurl, rippleWave, tileScatter, defineTransition, ALL_TRANSITIONS, } from "./transitions/index.js";
3
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAE5C,OAAO,EACL,QAAQ,EACR,eAAe,EACf,KAAK,EACL,YAAY,EACZ,SAAS,EACT,MAAM,EACN,aAAa,EACb,SAAS,EACT,MAAM,EACN,QAAQ,EACR,YAAY,EACZ,SAAS,EACT,WAAW,EACX,UAAU,EACV,QAAQ,EACR,cAAc,EACd,IAAI,EACJ,WAAW,EACX,UAAU,EACV,SAAS,EACT,KAAK,EACL,KAAK,EACL,eAAe,EACf,IAAI,EACJ,UAAU,EACV,UAAU,EACV,QAAQ,EACR,MAAM,EACN,iBAAiB,EACjB,UAAU,EACV,QAAQ,EACR,MAAM,EACN,YAAY,EACZ,eAAe,EACf,QAAQ,EACR,cAAc,EACd,gBAAgB,EAChB,UAAU,EACV,UAAU,EACV,QAAQ,EACR,UAAU,EACV,QAAQ,EACR,WAAW,EACX,WAAW,EACX,QAAQ,EACR,QAAQ,EACR,UAAU,EACV,YAAY,EACZ,YAAY,EACZ,UAAU,EACV,WAAW,EACX,aAAa,EACb,SAAS,EACT,cAAc,EACd,SAAS,EACT,WAAW,EACX,WAAW,EACX,QAAQ,EACR,UAAU,EACV,WAAW,EACX,gBAAgB,EAChB,eAAe,GAChB,MAAM,wBAAwB,CAAC"}
@@ -0,0 +1,2 @@
1
+ export { TextureCache } from "@vysmo/gl-core";
2
+ //# sourceMappingURL=normalize.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"normalize.d.ts","sourceRoot":"","sources":["../../src/inputs/normalize.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC"}
@@ -0,0 +1,2 @@
1
+ export { TextureCache } from "@vysmo/gl-core";
2
+ //# sourceMappingURL=normalize.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"normalize.js","sourceRoot":"","sources":["../../src/inputs/normalize.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC"}
@@ -0,0 +1,7 @@
1
+ export { FULLSCREEN_VERTEX_SHADER as VERTEX_SHADER, compileShader, linkProgram, buildProgram, paramKeyToUniformName, } from "@vysmo/gl-core";
2
+ export declare const MESH_VERTEX_SHELL_HEAD = "#version 300 es\nprecision highp float;\nuniform float uProgress;\nuniform vec2 uResolution;\nuniform int uPass;\nuniform int uPassCount;\nuniform int uInstances;\nin vec2 aPosition;\nin vec2 aUv;\nin float aOffset;\nin vec2 aCentroid;\nin vec3 aBary;\nin float aRandom;\nout vec2 vUv;\n\n";
3
+ export declare const FRAGMENT_SHELL_HEAD = "#version 300 es\nprecision highp float;\nuniform sampler2D uFrom;\nuniform sampler2D uTo;\nuniform sampler2D uDisplacement;\nuniform sampler2D uEnvironment;\nuniform sampler2D uPrevious;\nuniform float uProgress;\nuniform vec2 uResolution;\nuniform int uPass;\nuniform int uPassCount;\nuniform int uInstances;\nin vec2 vUv;\nout vec4 fragColor;\n\nvec4 getFromColor(vec2 uv) { return texture(uFrom, uv); }\nvec4 getToColor(vec2 uv) { return texture(uTo, uv); }\nvec4 getDisplacement(vec2 uv) { return texture(uDisplacement, uv); }\nvec4 getEnvironment(vec2 uv) { return texture(uEnvironment, uv); }\nvec4 getPrevious(vec2 uv) { return texture(uPrevious, uv); }\n\n// Reflect out-of-range UVs back into [0,1] instead of clamping to edge.\n// Use this when a shader displaces UVs (warp, flow, etc.) and you want\n// the displaced regions to sample real interior content rather than\n// streaked edge texels.\nvec2 mirrorUv(vec2 uv) {\n return abs(mod(uv + 1.0, 2.0) - 1.0);\n}\n\n";
4
+ export declare const FRAGMENT_SHELL_TAIL = "\nvoid main() {\n fragColor = transition(vUv);\n}\n";
5
+ export declare function wrapFragmentShader(userBody: string): string;
6
+ export declare function wrapMeshVertexShader(userBody: string): string;
7
+ //# sourceMappingURL=gl.d.ts.map