@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
@@ -0,0 +1,90 @@
1
+ import { defineTransition } from "./define.js";
2
+ /**
3
+ * Multi-pass transition. A noise-seeded mask grows outward via iterated
4
+ * dilation with an expanding kernel, producing an ink-in-water spread
5
+ * that can't be computed in a single pass (each pixel has to read its
6
+ * neighbours' mask values from the previous iteration).
7
+ *
8
+ * pass 0 — seed the mask by thresholding a noise field
9
+ * against progress. At progress 0 all zero;
10
+ * at progress 1 all one; in between, a noisy
11
+ * boundary seeded where noise ≈ progress.
12
+ * pass 1..passCount-2 — dilate the mask with an expanding kernel
13
+ * (step doubles each pass: 1, 2, 4, 8, 16 px),
14
+ * biased with a light smoothing so edges
15
+ * stay organic.
16
+ * final pass — use the diffused mask to mix from → to.
17
+ *
18
+ * Endpoints: seed saturates to 0 at progress 0 and 1 at progress 1
19
+ * regardless of the noise field. Dilation is monotone on constants,
20
+ * so the mask stays saturated through every pass, and the final
21
+ * composition resolves to pure from / to.
22
+ */
23
+ export const inkDiffuse = defineTransition({
24
+ name: "ink-diffuse",
25
+ passes: 7,
26
+ defaults: {
27
+ scale: 7,
28
+ softness: 0.08,
29
+ },
30
+ glsl: `
31
+ uniform float uScale;
32
+ uniform float uSoftness;
33
+
34
+ float hash21(vec2 p) {
35
+ return fract(sin(dot(p, vec2(12.9898, 78.233))) * 43758.5453);
36
+ }
37
+
38
+ float valNoise(vec2 p) {
39
+ vec2 i = floor(p);
40
+ vec2 f = fract(p);
41
+ f = f * f * (3.0 - 2.0 * f);
42
+ float a = hash21(i);
43
+ float b = hash21(i + vec2(1.0, 0.0));
44
+ float c = hash21(i + vec2(0.0, 1.0));
45
+ float d = hash21(i + vec2(1.0, 1.0));
46
+ return mix(mix(a, b, f.x), mix(c, d, f.x), f.y);
47
+ }
48
+
49
+ float fbm(vec2 p) {
50
+ return valNoise(p) * 0.55 +
51
+ valNoise(p * 2.1) * 0.28 +
52
+ valNoise(p * 4.3) * 0.17;
53
+ }
54
+
55
+ vec4 transition(vec2 uv) {
56
+ // Final pass: use the diffused mask to composite from/to.
57
+ if (uPass == uPassCount - 1) {
58
+ float mask = getPrevious(uv).r;
59
+ return mix(getFromColor(uv), getToColor(uv), mask);
60
+ }
61
+
62
+ // Seed pass: threshold noise by progress. Clamped noise range
63
+ // [0.05, 0.95] plus a soft edge guarantees the mask saturates to 0
64
+ // at progress=0 and 1 at progress=1, for every pixel.
65
+ if (uPass == 0) {
66
+ float n = clamp(fbm(uv * uScale) * 0.9 + 0.05, 0.05, 0.95);
67
+ float mask = smoothstep(n - uSoftness, n + uSoftness, uProgress);
68
+ return vec4(mask, 0.0, 0.0, 1.0);
69
+ }
70
+
71
+ // Diffusion pass: expanding-kernel dilation blended with light
72
+ // neighbour-averaging. Step doubles each pass for an effective
73
+ // reach of ~2^(passCount-2) pixels by the last iteration.
74
+ float step = pow(2.0, float(uPass - 1));
75
+ vec2 px = vec2(step) / uResolution;
76
+ float c = getPrevious(uv).r;
77
+ float e = getPrevious(uv + vec2(px.x, 0.0)).r;
78
+ float w = getPrevious(uv - vec2(px.x, 0.0)).r;
79
+ float n = getPrevious(uv + vec2(0.0, px.y)).r;
80
+ float s = getPrevious(uv - vec2(0.0, px.y)).r;
81
+
82
+ float dilated = max(c, max(max(e, w), max(n, s)));
83
+ float avg = (c + e + w + n + s) * 0.2;
84
+ float nextMask = mix(dilated, avg, 0.3);
85
+
86
+ return vec4(nextMask, 0.0, 0.0, 1.0);
87
+ }
88
+ `,
89
+ });
90
+ //# sourceMappingURL=ink-diffuse.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ink-diffuse.js","sourceRoot":"","sources":["../../src/transitions/ink-diffuse.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAE/C;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,MAAM,CAAC,MAAM,UAAU,GAAG,gBAAgB,CAAC;IACzC,IAAI,EAAE,aAAa;IACnB,MAAM,EAAE,CAAC;IACT,QAAQ,EAAE;QACR,KAAK,EAAE,CAAC;QACR,QAAQ,EAAE,IAAI;KACf;IACD,IAAI,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA0DP;CACA,CAAC,CAAC"}
@@ -0,0 +1,13 @@
1
+ /**
2
+ * Inspired by akella demo3 (made procedural — original used a baked
3
+ * displacement-map texture that we don't yet support). Circular reveal
4
+ * with a noise-perturbed edge AND bidirectional zoom: from-image shrinks
5
+ * to center while to-image grows from center. Sibling to film-burn but
6
+ * without the flame glow and with the akella zoom-shift on top.
7
+ */
8
+ export declare const irisZoom: import("../types.js").Transition<import("@vysmo/gl-core").Widen<{
9
+ readonly center: readonly [0.5, 0.5];
10
+ readonly width: 0.08;
11
+ readonly scale: 8;
12
+ }>>;
13
+ //# sourceMappingURL=iris-zoom.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"iris-zoom.d.ts","sourceRoot":"","sources":["../../src/transitions/iris-zoom.ts"],"names":[],"mappings":"AAEA;;;;;;GAMG;AACH,eAAO,MAAM,QAAQ;;;;GAyDnB,CAAC"}
@@ -0,0 +1,67 @@
1
+ import { defineTransition } from "./define.js";
2
+ /**
3
+ * Inspired by akella demo3 (made procedural — original used a baked
4
+ * displacement-map texture that we don't yet support). Circular reveal
5
+ * with a noise-perturbed edge AND bidirectional zoom: from-image shrinks
6
+ * to center while to-image grows from center. Sibling to film-burn but
7
+ * without the flame glow and with the akella zoom-shift on top.
8
+ */
9
+ export const irisZoom = defineTransition({
10
+ name: "iris-zoom",
11
+ defaults: {
12
+ center: [0.5, 0.5],
13
+ width: 0.08,
14
+ scale: 8,
15
+ },
16
+ glsl: `
17
+ uniform vec2 uCenter;
18
+ uniform float uWidth;
19
+ uniform float uScale;
20
+
21
+ float hash21(vec2 p) {
22
+ return fract(sin(dot(p, vec2(12.9898, 78.233))) * 43758.5453);
23
+ }
24
+
25
+ float valueNoise(vec2 p) {
26
+ vec2 i = floor(p);
27
+ vec2 f = fract(p);
28
+ f = f * f * (3.0 - 2.0 * f);
29
+ float a = hash21(i);
30
+ float b = hash21(i + vec2(1.0, 0.0));
31
+ float c = hash21(i + vec2(0.0, 1.0));
32
+ float d = hash21(i + vec2(1.0, 1.0));
33
+ return mix(mix(a, b, f.x), mix(c, d, f.x), f.y);
34
+ }
35
+
36
+ vec4 transition(vec2 uv) {
37
+ // Aspect-correct distance from the iris center, normalized to [0,1] by
38
+ // the farthest canvas corner.
39
+ vec2 pixel = uv * uResolution;
40
+ vec2 centerPx = uCenter * uResolution;
41
+ float dist = distance(pixel, centerPx);
42
+ float maxDist = max(
43
+ max(length(centerPx), length(centerPx - vec2(uResolution.x, 0.0))),
44
+ max(length(centerPx - vec2(0.0, uResolution.y)), length(centerPx - uResolution))
45
+ );
46
+ float normalizedDist = dist / max(maxDist, 0.0001);
47
+
48
+ float noiseStrength = 0.12;
49
+ float n = valueNoise(uv * uScale);
50
+ float perturbed = normalizedDist - (n - 0.5) * noiseStrength;
51
+
52
+ float totalEdge = uWidth + noiseStrength * 0.5;
53
+ float radius = uProgress * (1.0 + 2.0 * totalEdge) - totalEdge;
54
+ float signedDist = perturbed - radius;
55
+
56
+ // intpl: 0 = unburned (from), 1 = revealed (to).
57
+ float intpl = 1.0 - smoothstep(-uWidth, uWidth, signedDist);
58
+
59
+ // Bidirectional zoom: from shrinks to center, to grows from center.
60
+ vec2 fromUv = clamp((uv - 0.5) * (1.0 - intpl) + 0.5, 0.0, 1.0);
61
+ vec2 toUv = clamp((uv - 0.5) * intpl + 0.5, 0.0, 1.0);
62
+
63
+ return mix(getFromColor(fromUv), getToColor(toUv), intpl);
64
+ }
65
+ `,
66
+ });
67
+ //# sourceMappingURL=iris-zoom.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"iris-zoom.js","sourceRoot":"","sources":["../../src/transitions/iris-zoom.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAE/C;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,QAAQ,GAAG,gBAAgB,CAAC;IACvC,IAAI,EAAE,WAAW;IACjB,QAAQ,EAAE;QACR,MAAM,EAAE,CAAC,GAAG,EAAE,GAAG,CAAC;QAClB,KAAK,EAAE,IAAI;QACX,KAAK,EAAE,CAAC;KACT;IACD,IAAI,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAiDP;CACA,CAAC,CAAC"}
@@ -0,0 +1,7 @@
1
+ export declare const kineticBands: import("../types.js").Transition<import("@vysmo/gl-core").Widen<{
2
+ readonly count: 12;
3
+ readonly stagger: 0.6;
4
+ readonly softness: 0.02;
5
+ readonly direction: readonly [1, 0];
6
+ }>>;
7
+ //# sourceMappingURL=kinetic-bands.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"kinetic-bands.d.ts","sourceRoot":"","sources":["../../src/transitions/kinetic-bands.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,YAAY;;;;;GAuDvB,CAAC"}
@@ -0,0 +1,58 @@
1
+ import { defineTransition } from "./define.js";
2
+ export const kineticBands = defineTransition({
3
+ name: "kinetic-bands",
4
+ defaults: {
5
+ count: 12,
6
+ stagger: 0.6,
7
+ softness: 0.02,
8
+ direction: [1, 0],
9
+ },
10
+ glsl: `
11
+ uniform float uCount;
12
+ uniform float uStagger;
13
+ uniform float uSoftness;
14
+ uniform vec2 uDirection;
15
+
16
+ // Snap to nearest axis-aligned unit. Diagonals would tilt the bands away
17
+ // from the natural horizontal stack and the boundary math would no longer
18
+ // align with the band's own progress envelope. Enforced in-shader so the
19
+ // UI's axis-only picker matches.
20
+ vec2 snapAxis(vec2 v) {
21
+ vec2 dn = normalize(v);
22
+ return abs(dn.x) > abs(dn.y) ? vec2(sign(dn.x), 0.0) : vec2(0.0, sign(dn.y));
23
+ }
24
+
25
+ vec4 transition(vec2 uv) {
26
+ // count=1 collapses to a single full-frame slide; not "kinetic bands".
27
+ // Clamp here so the transition is reliable regardless of caller input.
28
+ float count = max(uCount, 2.0);
29
+
30
+ vec2 d = snapAxis(uDirection);
31
+
32
+ // Bands run perpendicular to the sweep direction. For a horizontal sweep
33
+ // (Right/Left), bands are horizontal stripes stacked vertically (indexed
34
+ // by uv.y). For a vertical sweep (Up/Down), bands are vertical stripes
35
+ // stacked horizontally (indexed by uv.x). Otherwise the bands and sweep
36
+ // axis are mismatched and the effect looks broken.
37
+ bool horizontalBands = abs(d.x) > abs(d.y);
38
+ float bandCoord = horizontalBands ? uv.y : uv.x;
39
+ float band = floor(bandCoord * count);
40
+ float bandPos = (band + 0.5) / count;
41
+
42
+ // Each band starts at bandPos * stagger and runs for (1 - stagger) of time.
43
+ float start = bandPos * uStagger;
44
+ float window = max(0.0001, 1.0 - uStagger);
45
+ float localProgress = clamp((uProgress - start) / window, 0.0, 1.0);
46
+
47
+ // Within the band, run a slide-style sweep so each band has its own
48
+ // endpoint-correct mini-transition.
49
+ float maxProj = 0.5;
50
+ float projected = dot(uv - 0.5, -d);
51
+ float boundary = (maxProj + uSoftness) * (1.0 - 2.0 * localProgress);
52
+ float w = smoothstep(boundary - uSoftness, boundary + uSoftness, projected);
53
+
54
+ return mix(getFromColor(uv), getToColor(uv), w);
55
+ }
56
+ `,
57
+ });
58
+ //# sourceMappingURL=kinetic-bands.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"kinetic-bands.js","sourceRoot":"","sources":["../../src/transitions/kinetic-bands.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAE/C,MAAM,CAAC,MAAM,YAAY,GAAG,gBAAgB,CAAC;IAC3C,IAAI,EAAE,eAAe;IACrB,QAAQ,EAAE;QACR,KAAK,EAAE,EAAE;QACT,OAAO,EAAE,GAAG;QACZ,QAAQ,EAAE,IAAI;QACd,SAAS,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;KAClB;IACD,IAAI,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA8CP;CACA,CAAC,CAAC"}
@@ -0,0 +1,22 @@
1
+ /**
2
+ * Hologram-card flip. The frame is divided into vertical strips, each
3
+ * modelled as a narrow rectangle that rotates around its vertical axis
4
+ * from 0 (showing from face-on) through 90° (edge-on — content pinches
5
+ * to zero width) to 180° (showing to face-on). Flip timing is
6
+ * staggered across strips left → right, so a wavefront of flipping
7
+ * strips sweeps across the image.
8
+ *
9
+ * Perspective is faked by compressing strip content to fit the
10
+ * visible half-width |cos(rotation)| · stripWidth/2. When a strip is
11
+ * edge-on, its visible half-width is zero and every pixel falls into
12
+ * the "crease" region, which fills with a mix(from, to, flipT) so
13
+ * the full-frame rule holds (no black cracks).
14
+ *
15
+ * Endpoints: at progress 0 every strip is at flipT=0 (cos=1, full
16
+ * visibility, sampling from at the correct uv). At progress 1 every
17
+ * strip is at flipT=1 (cos=-1, full visibility, sampling to).
18
+ */
19
+ export declare const lenticularFlip: import("../types.js").Transition<import("@vysmo/gl-core").Widen<{
20
+ readonly stripCount: 22;
21
+ }>>;
22
+ //# sourceMappingURL=lenticular-flip.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lenticular-flip.d.ts","sourceRoot":"","sources":["../../src/transitions/lenticular-flip.ts"],"names":[],"mappings":"AAEA;;;;;;;;;;;;;;;;;GAiBG;AACH,eAAO,MAAM,cAAc;;GAoDzB,CAAC"}
@@ -0,0 +1,73 @@
1
+ import { defineTransition } from "./define.js";
2
+ /**
3
+ * Hologram-card flip. The frame is divided into vertical strips, each
4
+ * modelled as a narrow rectangle that rotates around its vertical axis
5
+ * from 0 (showing from face-on) through 90° (edge-on — content pinches
6
+ * to zero width) to 180° (showing to face-on). Flip timing is
7
+ * staggered across strips left → right, so a wavefront of flipping
8
+ * strips sweeps across the image.
9
+ *
10
+ * Perspective is faked by compressing strip content to fit the
11
+ * visible half-width |cos(rotation)| · stripWidth/2. When a strip is
12
+ * edge-on, its visible half-width is zero and every pixel falls into
13
+ * the "crease" region, which fills with a mix(from, to, flipT) so
14
+ * the full-frame rule holds (no black cracks).
15
+ *
16
+ * Endpoints: at progress 0 every strip is at flipT=0 (cos=1, full
17
+ * visibility, sampling from at the correct uv). At progress 1 every
18
+ * strip is at flipT=1 (cos=-1, full visibility, sampling to).
19
+ */
20
+ export const lenticularFlip = defineTransition({
21
+ name: "lenticular-flip",
22
+ defaults: {
23
+ stripCount: 22,
24
+ },
25
+ glsl: `
26
+ uniform float uStripCount;
27
+
28
+ vec4 transition(vec2 uv) {
29
+ // stripCount<3 collapses to a single full-canvas flip (1) or a half-and-half
30
+ // (2) — neither reads as "lenticular". Clamp here so the transition is
31
+ // reliable regardless of caller input.
32
+ float stripCount = max(uStripCount, 3.0);
33
+
34
+ float stripF = uv.x * stripCount;
35
+ float stripIdx = floor(stripF);
36
+ float localU = fract(stripF);
37
+
38
+ // Staggered flip timing: each strip flips over a window of 0.5 in
39
+ // progress. The window's start scales from 0 (leftmost strip) to
40
+ // 0.5 (rightmost strip), so the wave finishes exactly at progress 1.
41
+ float stripStart = stripIdx / stripCount;
42
+ float windowStart = stripStart * 0.5;
43
+ float flipT = smoothstep(windowStart, windowStart + 0.5, uProgress);
44
+
45
+ // Strip rotation: 0 at flipT=0, PI at flipT=1.
46
+ float rotAngle = flipT * 3.14159265;
47
+ float cosRot = cos(rotAngle);
48
+ float visibleHalfWidth = abs(cosRot) * 0.5;
49
+
50
+ // Local coord centred in the strip, range [-0.5, 0.5].
51
+ float centered = localU - 0.5;
52
+
53
+ // Decompress: map visible [-vhw, vhw] back to [0, 1] strip-local,
54
+ // clamped so out-of-window pixels sample the strip's edge cleanly
55
+ // (instead of out-of-strip or out-of-canvas).
56
+ float decompressed = clamp((centered / max(visibleHalfWidth, 0.0001) + 1.0) * 0.5, 0.0, 1.0);
57
+ vec2 sampleUv = vec2((stripIdx + decompressed) / stripCount, uv.y);
58
+ vec4 stripColor = cosRot >= 0.0 ? getFromColor(sampleUv) : getToColor(sampleUv);
59
+
60
+ // Crease fallback: outside the visible window, crossfade from→to so
61
+ // we never emit a black pixel. Feather across a small band at the
62
+ // boundary so the spatial edge between "compressed strip sample" and
63
+ // "crossfade crease" doesn't read as a 1-pixel flickering line —
64
+ // those two values are computed from completely different source
65
+ // positions and the hard step between them was the visible artifact.
66
+ vec4 creaseColor = mix(getFromColor(uv), getToColor(uv), flipT);
67
+ float feather = 1.0 / stripCount * 0.04;
68
+ float t = smoothstep(visibleHalfWidth - feather, visibleHalfWidth + feather, abs(centered));
69
+ return mix(stripColor, creaseColor, t);
70
+ }
71
+ `,
72
+ });
73
+ //# sourceMappingURL=lenticular-flip.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lenticular-flip.js","sourceRoot":"","sources":["../../src/transitions/lenticular-flip.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAE/C;;;;;;;;;;;;;;;;;GAiBG;AACH,MAAM,CAAC,MAAM,cAAc,GAAG,gBAAgB,CAAC;IAC7C,IAAI,EAAE,iBAAiB;IACvB,QAAQ,EAAE;QACR,UAAU,EAAE,EAAE;KACf;IACD,IAAI,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA8CP;CACA,CAAC,CAAC"}
@@ -0,0 +1,7 @@
1
+ export declare const lightLeak: import("../types.js").Transition<import("@vysmo/gl-core").Widen<{
2
+ readonly direction: readonly [1, 0];
3
+ readonly color: readonly [1, 0.85, 0.55];
4
+ readonly bandWidth: 0.2;
5
+ readonly intensity: 1;
6
+ }>>;
7
+ //# sourceMappingURL=light-leak.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"light-leak.d.ts","sourceRoot":"","sources":["../../src/transitions/light-leak.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,SAAS;;;;;GAwCpB,CAAC"}
@@ -0,0 +1,43 @@
1
+ import { defineTransition } from "./define.js";
2
+ export const lightLeak = defineTransition({
3
+ name: "light-leak",
4
+ defaults: {
5
+ direction: [1, 0],
6
+ color: [1.0, 0.85, 0.55],
7
+ bandWidth: 0.2,
8
+ intensity: 1.0,
9
+ },
10
+ glsl: `
11
+ uniform vec2 uDirection;
12
+ uniform vec3 uColor;
13
+ uniform float uBandWidth;
14
+ uniform float uIntensity;
15
+
16
+ vec4 transition(vec2 uv) {
17
+ vec2 d = normalize(uDirection);
18
+ // Scale by maxProj so diagonal directions clear corners at endpoints
19
+ // (see paint-bleed.ts).
20
+ float maxProj = max((abs(d.x) + abs(d.y)) * 0.5, 0.0001);
21
+ float projected = dot(uv - 0.5, -d);
22
+
23
+ // Boundary sweeps from just beyond the trailing edge to just beyond the
24
+ // leading edge (offset by bandWidth so the bloom zone clears both edges
25
+ // cleanly at the endpoints).
26
+ float boundary = (maxProj + uBandWidth) * (1.0 - 2.0 * uProgress);
27
+
28
+ // Which side of the boundary? 0 = still from, 1 = already to.
29
+ float sweep = smoothstep(-uBandWidth * 0.5, uBandWidth * 0.5, projected - boundary);
30
+ vec4 baseColor = mix(getFromColor(uv), getToColor(uv), sweep);
31
+
32
+ // Gaussian-ish bloom centered on the boundary, scaled to zero at endpoints.
33
+ float env = 4.0 * uProgress * (1.0 - uProgress);
34
+ float distToBand = abs(projected - boundary);
35
+ float bandX = distToBand / max(uBandWidth, 0.0001);
36
+ float bandIntensity = exp(-bandX * bandX * 4.0) * env * uIntensity;
37
+
38
+ vec3 bloomed = baseColor.rgb + uColor * bandIntensity;
39
+ return vec4(bloomed, baseColor.a);
40
+ }
41
+ `,
42
+ });
43
+ //# sourceMappingURL=light-leak.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"light-leak.js","sourceRoot":"","sources":["../../src/transitions/light-leak.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAE/C,MAAM,CAAC,MAAM,SAAS,GAAG,gBAAgB,CAAC;IACxC,IAAI,EAAE,YAAY;IAClB,QAAQ,EAAE;QACR,SAAS,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;QACjB,KAAK,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC;QACxB,SAAS,EAAE,GAAG;QACd,SAAS,EAAE,GAAG;KACf;IACD,IAAI,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA+BP;CACA,CAAC,CAAC"}
@@ -0,0 +1,22 @@
1
+ /**
2
+ * A jagged lightning bolt flashes across the frame and the strike
3
+ * lights up the scene. Three parallel fractal paths (fbm-perturbed
4
+ * vertical lines at decreasing scales) give a branching look; the
5
+ * nearest-path distance drives a bright core + wider glow. A
6
+ * 4·p·(1-p) flash envelope peaks at mid-progress, so the whole scene
7
+ * whites up momentarily at strike time before settling into to.
8
+ *
9
+ * from-to crossfade is separate from the flash (monotonic smoothstep
10
+ * across progress), so the hand-off reads as "lightning reveals what
11
+ * was behind" rather than a regular wipe with a light effect tacked
12
+ * on.
13
+ *
14
+ * Endpoints: flash envelope is zero at progress 0 and 1, so no
15
+ * synthetic luminance leaks into either endpoint. Crossfade saturates
16
+ * to 0 at progress 0 and 1 at progress 1. Output is pixel-pure
17
+ * from / to respectively.
18
+ */
19
+ export declare const lightningStrike: import("../types.js").Transition<import("../types.js").Widen<{
20
+ readonly intensity: 1;
21
+ }>>;
22
+ //# sourceMappingURL=lightning-strike.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lightning-strike.d.ts","sourceRoot":"","sources":["../../src/transitions/lightning-strike.ts"],"names":[],"mappings":"AAEA;;;;;;;;;;;;;;;;;GAiBG;AACH,eAAO,MAAM,eAAe;;GAqE1B,CAAC"}
@@ -0,0 +1,90 @@
1
+ import { defineTransition } from "./define.js";
2
+ /**
3
+ * A jagged lightning bolt flashes across the frame and the strike
4
+ * lights up the scene. Three parallel fractal paths (fbm-perturbed
5
+ * vertical lines at decreasing scales) give a branching look; the
6
+ * nearest-path distance drives a bright core + wider glow. A
7
+ * 4·p·(1-p) flash envelope peaks at mid-progress, so the whole scene
8
+ * whites up momentarily at strike time before settling into to.
9
+ *
10
+ * from-to crossfade is separate from the flash (monotonic smoothstep
11
+ * across progress), so the hand-off reads as "lightning reveals what
12
+ * was behind" rather than a regular wipe with a light effect tacked
13
+ * on.
14
+ *
15
+ * Endpoints: flash envelope is zero at progress 0 and 1, so no
16
+ * synthetic luminance leaks into either endpoint. Crossfade saturates
17
+ * to 0 at progress 0 and 1 at progress 1. Output is pixel-pure
18
+ * from / to respectively.
19
+ */
20
+ export const lightningStrike = defineTransition({
21
+ name: "lightning-strike",
22
+ defaults: {
23
+ intensity: 1.0,
24
+ },
25
+ glsl: `
26
+ uniform float uIntensity;
27
+
28
+ float hash21(vec2 p) {
29
+ return fract(sin(dot(p, vec2(12.9898, 78.233))) * 43758.5453);
30
+ }
31
+
32
+ float valNoise(vec2 p) {
33
+ vec2 i = floor(p);
34
+ vec2 f = fract(p);
35
+ f = f * f * (3.0 - 2.0 * f);
36
+ float a = hash21(i);
37
+ float b = hash21(i + vec2(1.0, 0.0));
38
+ float c = hash21(i + vec2(0.0, 1.0));
39
+ float d = hash21(i + vec2(1.0, 1.0));
40
+ return mix(mix(a, b, f.x), mix(c, d, f.x), f.y);
41
+ }
42
+
43
+ float fbm(vec2 p) {
44
+ return valNoise(p) * 0.55 +
45
+ valNoise(p * 2.1) * 0.28 +
46
+ valNoise(p * 4.3) * 0.17;
47
+ }
48
+
49
+ // One fractal lightning path: a vertical line at x ≈ 0.5 perturbed
50
+ // by noise at three decreasing scales, giving fractal jaggedness.
51
+ float boltPath(float y, float seed) {
52
+ float x = 0.5;
53
+ x += (fbm(vec2(y * 2.0, seed)) * 2.0 - 1.0) * 0.22;
54
+ x += (fbm(vec2(y * 6.0, seed + 1.3)) * 2.0 - 1.0) * 0.08;
55
+ x += (fbm(vec2(y * 18.0, seed + 2.7)) * 2.0 - 1.0) * 0.025;
56
+ return x;
57
+ }
58
+
59
+ // Nearest-bolt distance across three parallel paths — the min is the
60
+ // distance to the nearest "branch".
61
+ float boltDist(vec2 uv) {
62
+ float d1 = abs(uv.x - boltPath(uv.y, 0.0));
63
+ float d2 = abs(uv.x - boltPath(uv.y, 5.4));
64
+ float d3 = abs(uv.x - boltPath(uv.y, 11.1));
65
+ return min(d1, min(d2, d3));
66
+ }
67
+
68
+ vec4 transition(vec2 uv) {
69
+ // Base: a gently-soft from→to crossfade that runs alongside the flash.
70
+ float blend = smoothstep(0.15, 0.85, uProgress);
71
+ vec3 base = mix(getFromColor(uv).rgb, getToColor(uv).rgb, blend);
72
+
73
+ // Flash envelope: zero at both endpoints, peaks at mid.
74
+ float flash = 4.0 * uProgress * (1.0 - uProgress);
75
+ float d = boltDist(uv);
76
+
77
+ // Bright hot core right on the bolt, wider electric halo around.
78
+ float core = (1.0 - smoothstep(0.0, 0.004, d)) * flash;
79
+ float halo = (1.0 - smoothstep(0.004, 0.08, d)) * flash * 0.35;
80
+
81
+ // Content-derived brightening: push base toward white by an amount
82
+ // proportional to core + halo. Keeps output inside "meaningful
83
+ // content" rather than injecting synthetic colour.
84
+ vec3 litBase = base + (1.0 - base) * (core + halo) * uIntensity;
85
+
86
+ return vec4(litBase, 1.0);
87
+ }
88
+ `,
89
+ });
90
+ //# sourceMappingURL=lightning-strike.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lightning-strike.js","sourceRoot":"","sources":["../../src/transitions/lightning-strike.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAE/C;;;;;;;;;;;;;;;;;GAiBG;AACH,MAAM,CAAC,MAAM,eAAe,GAAG,gBAAgB,CAAC;IAC9C,IAAI,EAAE,kBAAkB;IACxB,QAAQ,EAAE;QACR,SAAS,EAAE,GAAG;KACf;IACD,IAAI,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA+DP;CACA,CAAC,CAAC"}
@@ -0,0 +1,11 @@
1
+ /**
2
+ * Directional linear blur. 32 samples along a configurable axis, avoiding
3
+ * the 2D grid artifacts that box-blur kernels produce at high displacement.
4
+ * Blur amount peaks at the midpoint (triangular envelope), linear crossfade
5
+ * across the full progress range.
6
+ */
7
+ export declare const linearBlur: import("../types.js").Transition<import("@vysmo/gl-core").Widen<{
8
+ readonly direction: readonly [1, 0];
9
+ readonly intensity: 0.1;
10
+ }>>;
11
+ //# sourceMappingURL=linear-blur.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"linear-blur.d.ts","sourceRoot":"","sources":["../../src/transitions/linear-blur.ts"],"names":[],"mappings":"AAEA;;;;;GAKG;AACH,eAAO,MAAM,UAAU;;;GA+BrB,CAAC"}
@@ -0,0 +1,40 @@
1
+ import { defineTransition } from "./define.js";
2
+ /**
3
+ * Directional linear blur. 32 samples along a configurable axis, avoiding
4
+ * the 2D grid artifacts that box-blur kernels produce at high displacement.
5
+ * Blur amount peaks at the midpoint (triangular envelope), linear crossfade
6
+ * across the full progress range.
7
+ */
8
+ export const linearBlur = defineTransition({
9
+ name: "linear-blur",
10
+ defaults: {
11
+ direction: [1, 0],
12
+ intensity: 0.1,
13
+ },
14
+ glsl: `
15
+ uniform vec2 uDirection;
16
+ uniform float uIntensity;
17
+
18
+ const int SAMPLES = 32;
19
+
20
+ vec4 transition(vec2 uv) {
21
+ vec2 d = normalize(uDirection);
22
+ // Triangular envelope: zero at endpoints, peaks at p=0.5.
23
+ float disp = uIntensity * (0.5 - distance(0.5, uProgress)) * 2.0;
24
+
25
+ vec4 c1 = vec4(0.0);
26
+ vec4 c2 = vec4(0.0);
27
+ for (int i = 0; i < SAMPLES; i++) {
28
+ float t = (float(i) - float(SAMPLES - 1) * 0.5) / float(SAMPLES - 1);
29
+ vec2 off = d * disp * t;
30
+ c1 += getFromColor(uv + off);
31
+ c2 += getToColor(uv + off);
32
+ }
33
+ c1 /= float(SAMPLES);
34
+ c2 /= float(SAMPLES);
35
+
36
+ return mix(c1, c2, uProgress);
37
+ }
38
+ `,
39
+ });
40
+ //# sourceMappingURL=linear-blur.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"linear-blur.js","sourceRoot":"","sources":["../../src/transitions/linear-blur.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAE/C;;;;;GAKG;AACH,MAAM,CAAC,MAAM,UAAU,GAAG,gBAAgB,CAAC;IACzC,IAAI,EAAE,aAAa;IACnB,QAAQ,EAAE;QACR,SAAS,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;QACjB,SAAS,EAAE,GAAG;KACf;IACD,IAAI,EAAE;;;;;;;;;;;;;;;;;;;;;;;;CAwBP;CACA,CAAC,CAAC"}
@@ -0,0 +1,22 @@
1
+ /**
2
+ * A liquid-metal blob expands from the centre, showing `to` through its
3
+ * glossy surface. The silhouette is a three-lobe metaball with small
4
+ * orbital wobbles so the boundary feels organic rather than a clean
5
+ * circle. Inside the blob, a fake specular highlight (overhead-left
6
+ * light) and rim brightening derived from the sampled `to` luminance
7
+ * produce the T-1000 chrome read — all gain derived from sampled content,
8
+ * so the full-frame rule holds (no synthetic white).
9
+ *
10
+ * Sample UVs only ever shift inward, so the clamp stays a no-op (no
11
+ * radial streaks from out-of-bounds reads). Specular + rim + refraction
12
+ * all scale by a `4·p·(1-p)` envelope, so at progress 0 and 1 the
13
+ * mercury shading collapses to pure from/to respectively.
14
+ */
15
+ export declare const liquidChrome: import("../types.js").Transition<import("@vysmo/gl-core").Widen<{
16
+ readonly shine: 0.9;
17
+ readonly rim: 0.25;
18
+ readonly wobble: 0.12;
19
+ readonly refraction: 0.035;
20
+ readonly reflection: 0;
21
+ }>>;
22
+ //# sourceMappingURL=liquid-chrome.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"liquid-chrome.d.ts","sourceRoot":"","sources":["../../src/transitions/liquid-chrome.ts"],"names":[],"mappings":"AAEA;;;;;;;;;;;;;GAaG;AACH,eAAO,MAAM,YAAY;;;;;;GAiGvB,CAAC"}