use-scroll-animate 10.2.0 → 10.4.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.
- package/AGENTS.md +4 -0
- package/CHANGELOG.md +35 -0
- package/README.md +67 -0
- package/bin/motionary-mcp.mjs +265 -0
- package/dist/chunks/anim-image-DDdb9q3X.js +166 -0
- package/dist/chunks/anim-image-DDdb9q3X.js.map +1 -0
- package/dist/chunks/anim-image-blQgPFFS.cjs +174 -0
- package/dist/chunks/anim-image-blQgPFFS.cjs.map +1 -0
- package/dist/chunks/audio-BpU-A1m1.cjs.map +1 -1
- package/dist/chunks/{audio-D95jwlOh.js → audio-CWt1xdZB.js} +3 -3
- package/dist/chunks/{audio-D95jwlOh.js.map → audio-CWt1xdZB.js.map} +1 -1
- package/dist/chunks/{base-BnRyfuyM.js → base-BTev8qxg.js} +2 -2
- package/dist/chunks/{base-BnRyfuyM.js.map → base-BTev8qxg.js.map} +1 -1
- package/dist/chunks/base-DBheNxJu.cjs.map +1 -1
- package/dist/chunks/bind-B_CTL6Qn.js.map +1 -1
- package/dist/chunks/bind-Ui43-n2d.cjs.map +1 -1
- package/dist/chunks/builtins-CKKZNR95.cjs.map +1 -1
- package/dist/chunks/{builtins-CqIq1zBv.js → builtins-CPmS6aDB.js} +3 -3
- package/dist/chunks/{builtins-CqIq1zBv.js.map → builtins-CPmS6aDB.js.map} +1 -1
- package/dist/chunks/core-B5T0dhFH.cjs.map +1 -1
- package/dist/chunks/{core-DsGoL9EY.js → core-BviA7nFa.js} +2 -2
- package/dist/chunks/{core-DsGoL9EY.js.map → core-BviA7nFa.js.map} +1 -1
- package/dist/chunks/core-D74Fz-dL.cjs.map +1 -1
- package/dist/chunks/core-D7cVumUu.js.map +1 -1
- package/dist/chunks/{core-XA2yhn1b.js → core-KiM7MXjL.js} +2 -2
- package/dist/chunks/{core-XA2yhn1b.js.map → core-KiM7MXjL.js.map} +1 -1
- package/dist/chunks/core-MQlXZKUG.cjs.map +1 -1
- package/dist/chunks/ease-HwYZnZat.cjs +94 -0
- package/dist/chunks/ease-HwYZnZat.cjs.map +1 -0
- package/dist/chunks/ease-XN8_0sXu.js +89 -0
- package/dist/chunks/ease-XN8_0sXu.js.map +1 -0
- package/dist/chunks/fx-B_pbhpDp.cjs.map +1 -1
- package/dist/chunks/{fx-CtnrFEg9.js → fx-CgWKqVsn.js} +2 -2
- package/dist/chunks/{fx-CtnrFEg9.js.map → fx-CgWKqVsn.js.map} +1 -1
- package/dist/chunks/generative-2LhxG5BJ.js.map +1 -1
- package/dist/chunks/generative-BHIj-NU0.cjs.map +1 -1
- package/dist/chunks/{gpu-CDcXiNA8.js → gpu-BWfgYWMY.js} +2 -2
- package/dist/chunks/{gpu-CDcXiNA8.js.map → gpu-BWfgYWMY.js.map} +1 -1
- package/dist/chunks/gpu-cUixt7kT.cjs.map +1 -1
- package/dist/chunks/index-tags-B-JBecYg.js.map +1 -1
- package/dist/chunks/index-tags-hLIF2Clq.cjs.map +1 -1
- package/dist/chunks/{keyframes-W-474DMc.js → keyframes-B5PWe5bU.js} +3 -2
- package/dist/chunks/keyframes-B5PWe5bU.js.map +1 -0
- package/dist/chunks/{keyframes-ZheOkpt0.cjs → keyframes-tC3I7anQ.cjs} +4 -3
- package/dist/chunks/keyframes-tC3I7anQ.cjs.map +1 -0
- package/dist/chunks/{manifest-D58HXVY-.js → manifest-BHx5yPN6.js} +2 -2
- package/dist/chunks/{manifest-D58HXVY-.js.map → manifest-BHx5yPN6.js.map} +1 -1
- package/dist/chunks/manifest-PaF9B8Vt.cjs.map +1 -1
- package/dist/chunks/{player-48Zy_NBG.js → player-BfHMNtiM.js} +4 -4
- package/dist/chunks/{player-48Zy_NBG.js.map → player-BfHMNtiM.js.map} +1 -1
- package/dist/chunks/player-C4y4jXSv.cjs.map +1 -1
- package/dist/chunks/presets-BYBVJVeP.js.map +1 -1
- package/dist/chunks/presets-CUHys3sK.cjs.map +1 -1
- package/dist/chunks/{registry-gFJRpPES.js → registry-BKzyg1JV.js} +2 -2
- package/dist/chunks/{registry-gFJRpPES.js.map → registry-BKzyg1JV.js.map} +1 -1
- package/dist/chunks/{registry-BIEjKngP.js → registry-CT-TT_bx.js} +3 -3
- package/dist/chunks/{registry-BIEjKngP.js.map → registry-CT-TT_bx.js.map} +1 -1
- package/dist/chunks/{registry-eJgpFAzI.cjs → registry-tzwKkldE.cjs} +2 -2
- package/dist/chunks/{registry-eJgpFAzI.cjs.map → registry-tzwKkldE.cjs.map} +1 -1
- package/dist/chunks/registry-xQZnSqqV.cjs.map +1 -1
- package/dist/chunks/shared-CkKHWrtJ.js.map +1 -1
- package/dist/chunks/shared-jkgRH-Hx.cjs.map +1 -1
- package/dist/chunks/{spring-CZDNyqWp.js → spring-BHuP55DR.js} +2 -2
- package/dist/chunks/{spring-CZDNyqWp.js.map → spring-BHuP55DR.js.map} +1 -1
- package/dist/chunks/spring-BlTQD2AV.cjs.map +1 -1
- package/dist/chunks/stagger-CCFyhzSw.cjs.map +1 -1
- package/dist/chunks/stagger-DtMKo2SK.js.map +1 -1
- package/dist/chunks/{ticker-CM_56oVy.js → ticker-C8lSGml9.js} +2 -2
- package/dist/chunks/{ticker-CM_56oVy.js.map → ticker-C8lSGml9.js.map} +1 -1
- package/dist/chunks/{ticker-D4o6enH0.cjs → ticker-Un0bvTWR.cjs} +2 -2
- package/dist/chunks/{ticker-D4o6enH0.cjs.map → ticker-Un0bvTWR.cjs.map} +1 -1
- package/dist/chunks/{tween-CqX1JBuj.js → tween-BcejKpsx.js} +15 -91
- package/dist/chunks/tween-BcejKpsx.js.map +1 -0
- package/dist/chunks/{tween-CBuWYpI-.cjs → tween-CwLLC3Ko.cjs} +15 -95
- package/dist/chunks/tween-CwLLC3Ko.cjs.map +1 -0
- package/dist/chunks/variants-CrDDJoYK.cjs.map +1 -1
- package/dist/chunks/{variants-GU3yIL4F.js → variants-CsRGUIyA.js} +2 -2
- package/dist/chunks/{variants-GU3yIL4F.js.map → variants-CsRGUIyA.js.map} +1 -1
- package/dist/components/a11y.cjs.map +1 -1
- package/dist/components/a11y.js +2 -2
- package/dist/components/a11y.js.map +1 -1
- package/dist/components/angular.cjs.map +1 -1
- package/dist/components/angular.js +8 -8
- package/dist/components/angular.js.map +1 -1
- package/dist/components/background.cjs.map +1 -1
- package/dist/components/background.js +2 -2
- package/dist/components/background.js.map +1 -1
- package/dist/components/bridge.cjs.map +1 -1
- package/dist/components/bridge.js +1 -1
- package/dist/components/bridge.js.map +1 -1
- package/dist/components/cards.cjs.map +1 -1
- package/dist/components/cards.js +2 -2
- package/dist/components/cards.js.map +1 -1
- package/dist/components/click.cjs.map +1 -1
- package/dist/components/click.js +3 -3
- package/dist/components/click.js.map +1 -1
- package/dist/components/core.cjs.map +1 -1
- package/dist/components/core.js.map +1 -1
- package/dist/components/depth.cjs.map +1 -1
- package/dist/components/depth.js +3 -3
- package/dist/components/depth.js.map +1 -1
- package/dist/components/design.cjs.map +1 -1
- package/dist/components/design.js +3 -3
- package/dist/components/design.js.map +1 -1
- package/dist/components/dsl.cjs.map +1 -1
- package/dist/components/dsl.js +2 -2
- package/dist/components/dsl.js.map +1 -1
- package/dist/components/effects.cjs.map +1 -1
- package/dist/components/effects.js +9 -9
- package/dist/components/effects.js.map +1 -1
- package/dist/components/engine.cjs.map +1 -1
- package/dist/components/engine.js +2 -2
- package/dist/components/engine.js.map +1 -1
- package/dist/components/feedback.cjs.map +1 -1
- package/dist/components/feedback.js +1 -1
- package/dist/components/feedback.js.map +1 -1
- package/dist/components/fx-3d.cjs.map +1 -1
- package/dist/components/fx-3d.js +2 -2
- package/dist/components/fx-3d.js.map +1 -1
- package/dist/components/fx-ai.cjs.map +1 -1
- package/dist/components/fx-ai.js +2 -2
- package/dist/components/fx-ai.js.map +1 -1
- package/dist/components/fx-chart.cjs.map +1 -1
- package/dist/components/fx-chart.js +2 -2
- package/dist/components/fx-chart.js.map +1 -1
- package/dist/components/fx-cinema.cjs.map +1 -1
- package/dist/components/fx-cinema.js +2 -2
- package/dist/components/fx-cinema.js.map +1 -1
- package/dist/components/fx-cyber.cjs.map +1 -1
- package/dist/components/fx-cyber.js +2 -2
- package/dist/components/fx-cyber.js.map +1 -1
- package/dist/components/fx-festival.cjs.map +1 -1
- package/dist/components/fx-festival.js +2 -2
- package/dist/components/fx-festival.js.map +1 -1
- package/dist/components/fx-focus.cjs.map +1 -1
- package/dist/components/fx-focus.js +2 -2
- package/dist/components/fx-focus.js.map +1 -1
- package/dist/components/fx-form.cjs.map +1 -1
- package/dist/components/fx-form.js +2 -2
- package/dist/components/fx-form.js.map +1 -1
- package/dist/components/fx-game.cjs.map +1 -1
- package/dist/components/fx-game.js +2 -2
- package/dist/components/fx-game.js.map +1 -1
- package/dist/components/fx-genart.cjs.map +1 -1
- package/dist/components/fx-genart.js +2 -2
- package/dist/components/fx-genart.js.map +1 -1
- package/dist/components/fx-geo.cjs.map +1 -1
- package/dist/components/fx-geo.js +2 -2
- package/dist/components/fx-geo.js.map +1 -1
- package/dist/components/fx-gesture.cjs.map +1 -1
- package/dist/components/fx-gesture.js +2 -2
- package/dist/components/fx-gesture.js.map +1 -1
- package/dist/components/fx-gpu.js +3 -3
- package/dist/components/fx-light.cjs.map +1 -1
- package/dist/components/fx-light.js +2 -2
- package/dist/components/fx-light.js.map +1 -1
- package/dist/components/fx-lottie.cjs.map +1 -1
- package/dist/components/fx-lottie.js +2 -2
- package/dist/components/fx-lottie.js.map +1 -1
- package/dist/components/fx-morph.cjs.map +1 -1
- package/dist/components/fx-morph.js +2 -2
- package/dist/components/fx-morph.js.map +1 -1
- package/dist/components/fx-music.cjs.map +1 -1
- package/dist/components/fx-music.js +3 -3
- package/dist/components/fx-music.js.map +1 -1
- package/dist/components/fx-organic.cjs.map +1 -1
- package/dist/components/fx-organic.js +2 -2
- package/dist/components/fx-organic.js.map +1 -1
- package/dist/components/fx-paper.cjs.map +1 -1
- package/dist/components/fx-paper.js +2 -2
- package/dist/components/fx-paper.js.map +1 -1
- package/dist/components/fx-perf.cjs.map +1 -1
- package/dist/components/fx-perf.js +2 -2
- package/dist/components/fx-perf.js.map +1 -1
- package/dist/components/fx-physics.cjs.map +1 -1
- package/dist/components/fx-physics.js +2 -2
- package/dist/components/fx-physics.js.map +1 -1
- package/dist/components/fx-retro.cjs.map +1 -1
- package/dist/components/fx-retro.js +2 -2
- package/dist/components/fx-retro.js.map +1 -1
- package/dist/components/fx-safe.cjs.map +1 -1
- package/dist/components/fx-safe.js +2 -2
- package/dist/components/fx-safe.js.map +1 -1
- package/dist/components/fx-shop.cjs.map +1 -1
- package/dist/components/fx-shop.js +2 -2
- package/dist/components/fx-shop.js.map +1 -1
- package/dist/components/fx-social.cjs.map +1 -1
- package/dist/components/fx-social.js +2 -2
- package/dist/components/fx-social.js.map +1 -1
- package/dist/components/fx-spatial.cjs.map +1 -1
- package/dist/components/fx-spatial.js +2 -2
- package/dist/components/fx-spatial.js.map +1 -1
- package/dist/components/fx-surface.cjs.map +1 -1
- package/dist/components/fx-surface.js +2 -2
- package/dist/components/fx-surface.js.map +1 -1
- package/dist/components/fx-text.cjs.map +1 -1
- package/dist/components/fx-text.js +2 -2
- package/dist/components/fx-text.js.map +1 -1
- package/dist/components/fx-transitions.cjs.map +1 -1
- package/dist/components/fx-transitions.js +3 -3
- package/dist/components/fx-transitions.js.map +1 -1
- package/dist/components/fx-video.cjs.map +1 -1
- package/dist/components/fx-video.js +2 -2
- package/dist/components/fx-video.js.map +1 -1
- package/dist/components/fx-weather.cjs.map +1 -1
- package/dist/components/fx-weather.js +2 -2
- package/dist/components/fx-weather.js.map +1 -1
- package/dist/components/fx.cjs.map +1 -1
- package/dist/components/fx.js +6 -6
- package/dist/components/fx.js.map +1 -1
- package/dist/components/fx2.cjs.map +1 -1
- package/dist/components/fx2.js +6 -6
- package/dist/components/fx2.js.map +1 -1
- package/dist/components/gesture.cjs.map +1 -1
- package/dist/components/gesture.js +4 -4
- package/dist/components/gesture.js.map +1 -1
- package/dist/components/interaction.cjs.map +1 -1
- package/dist/components/interaction.js +1 -1
- package/dist/components/interaction.js.map +1 -1
- package/dist/components/layout.cjs.map +1 -1
- package/dist/components/layout.js +1 -1
- package/dist/components/layout.js.map +1 -1
- package/dist/components/lazy.cjs.map +1 -1
- package/dist/components/lazy.js.map +1 -1
- package/dist/components/lite.cjs.map +1 -1
- package/dist/components/lite.js.map +1 -1
- package/dist/components/marketplace.cjs.map +1 -1
- package/dist/components/marketplace.js +4 -4
- package/dist/components/marketplace.js.map +1 -1
- package/dist/components/native.cjs.map +1 -1
- package/dist/components/native.js +3 -3
- package/dist/components/native.js.map +1 -1
- package/dist/components/packs.cjs.map +1 -1
- package/dist/components/packs.js +1 -1
- package/dist/components/packs.js.map +1 -1
- package/dist/components/page.cjs.map +1 -1
- package/dist/components/page.js +3 -3
- package/dist/components/page.js.map +1 -1
- package/dist/components/perf.cjs.map +1 -1
- package/dist/components/perf.js +2 -2
- package/dist/components/perf.js.map +1 -1
- package/dist/components/physics.cjs.map +1 -1
- package/dist/components/physics.js +3 -3
- package/dist/components/physics.js.map +1 -1
- package/dist/components/plugins.cjs.map +1 -1
- package/dist/components/plugins.js +4 -4
- package/dist/components/plugins.js.map +1 -1
- package/dist/components/react.cjs.map +1 -1
- package/dist/components/react.js.map +1 -1
- package/dist/components/reveal.cjs.map +1 -1
- package/dist/components/reveal.js +1 -1
- package/dist/components/reveal.js.map +1 -1
- package/dist/components/solid.cjs.map +1 -1
- package/dist/components/solid.js +8 -8
- package/dist/components/solid.js.map +1 -1
- package/dist/components/svelte.cjs.map +1 -1
- package/dist/components/svelte.js +8 -8
- package/dist/components/svelte.js.map +1 -1
- package/dist/components/svg.cjs.map +1 -1
- package/dist/components/svg.js +1 -1
- package/dist/components/svg.js.map +1 -1
- package/dist/components/text.cjs.map +1 -1
- package/dist/components/text.js +2 -2
- package/dist/components/text.js.map +1 -1
- package/dist/components/timeline.cjs.map +1 -1
- package/dist/components/timeline.js +3 -3
- package/dist/components/timeline.js.map +1 -1
- package/dist/components/tokens.cjs.map +1 -1
- package/dist/components/tokens.js.map +1 -1
- package/dist/components/transitions.cjs.map +1 -1
- package/dist/components/transitions.js +1 -1
- package/dist/components/transitions.js.map +1 -1
- package/dist/components/ui.cjs.map +1 -1
- package/dist/components/ui.js +4 -4
- package/dist/components/ui.js.map +1 -1
- package/dist/components/vue.cjs.map +1 -1
- package/dist/components/vue.js +8 -8
- package/dist/components/vue.js.map +1 -1
- package/dist/components/webgl.cjs.map +1 -1
- package/dist/components/webgl.js +1 -1
- package/dist/components/webgl.js.map +1 -1
- package/dist/components/widgets.cjs +766 -212
- package/dist/components/widgets.cjs.map +1 -1
- package/dist/components/widgets.d.cts +207 -2
- package/dist/components/widgets.d.ts +207 -2
- package/dist/components/widgets.js +770 -221
- package/dist/components/widgets.js.map +1 -1
- package/dist/components.cjs.map +1 -1
- package/dist/components.js +10 -10
- package/dist/components.js.map +1 -1
- package/dist/element.cjs.map +1 -1
- package/dist/element.js.map +1 -1
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +2 -2
- package/dist/index.js.map +1 -1
- package/dist/llms-full.txt +250 -1
- package/dist/llms.txt +13 -2
- package/dist/manifest.json +646 -1
- package/dist/presets/extended.cjs.map +1 -1
- package/dist/presets/extended.js.map +1 -1
- package/dist/react.cjs.map +1 -1
- package/dist/react.js.map +1 -1
- package/dist/runtime/format-apng.cjs +131 -0
- package/dist/runtime/format-apng.cjs.map +1 -0
- package/dist/runtime/format-apng.d.cts +250 -0
- package/dist/runtime/format-apng.d.ts +250 -0
- package/dist/runtime/format-apng.iife.js +2 -0
- package/dist/runtime/format-apng.iife.js.map +1 -0
- package/dist/runtime/format-apng.js +123 -0
- package/dist/runtime/format-apng.js.map +1 -0
- package/dist/runtime/format-css.cjs +5 -4
- package/dist/runtime/format-css.cjs.map +1 -1
- package/dist/runtime/format-css.js +5 -4
- package/dist/runtime/format-css.js.map +1 -1
- package/dist/runtime/format-gif.cjs +206 -0
- package/dist/runtime/format-gif.cjs.map +1 -0
- package/dist/runtime/format-gif.d.cts +223 -0
- package/dist/runtime/format-gif.d.ts +223 -0
- package/dist/runtime/format-gif.iife.js +2 -0
- package/dist/runtime/format-gif.iife.js.map +1 -0
- package/dist/runtime/format-gif.js +199 -0
- package/dist/runtime/format-gif.js.map +1 -0
- package/dist/runtime/format-motion.cjs +9 -8
- package/dist/runtime/format-motion.cjs.map +1 -1
- package/dist/runtime/format-motion.js +5 -4
- package/dist/runtime/format-motion.js.map +1 -1
- package/dist/runtime/format-sprite.cjs +226 -0
- package/dist/runtime/format-sprite.cjs.map +1 -0
- package/dist/runtime/format-sprite.d.cts +224 -0
- package/dist/runtime/format-sprite.d.ts +224 -0
- package/dist/runtime/format-sprite.iife.js +2 -0
- package/dist/runtime/format-sprite.iife.js.map +1 -0
- package/dist/runtime/format-sprite.js +216 -0
- package/dist/runtime/format-sprite.js.map +1 -0
- package/dist/runtime/format-svg.cjs +5 -4
- package/dist/runtime/format-svg.cjs.map +1 -1
- package/dist/runtime/format-svg.iife.js.map +1 -1
- package/dist/runtime/format-svg.js +4 -3
- package/dist/runtime/format-svg.js.map +1 -1
- package/dist/runtime/format-webp.cjs +123 -0
- package/dist/runtime/format-webp.cjs.map +1 -0
- package/dist/runtime/format-webp.d.cts +245 -0
- package/dist/runtime/format-webp.d.ts +245 -0
- package/dist/runtime/format-webp.iife.js +2 -0
- package/dist/runtime/format-webp.iife.js.map +1 -0
- package/dist/runtime/format-webp.js +115 -0
- package/dist/runtime/format-webp.js.map +1 -0
- package/dist/runtime/scroll.cjs +2 -2
- package/dist/runtime/scroll.cjs.map +1 -1
- package/dist/runtime/scroll.js +2 -2
- package/dist/runtime/scroll.js.map +1 -1
- package/dist/runtime/smooth.cjs +284 -0
- package/dist/runtime/smooth.cjs.map +1 -0
- package/dist/runtime/smooth.d.cts +137 -0
- package/dist/runtime/smooth.d.ts +137 -0
- package/dist/runtime/smooth.iife.js +2 -0
- package/dist/runtime/smooth.iife.js.map +1 -0
- package/dist/runtime/smooth.js +279 -0
- package/dist/runtime/smooth.js.map +1 -0
- package/dist/runtime/text.cjs +147 -0
- package/dist/runtime/text.cjs.map +1 -0
- package/dist/runtime/text.d.cts +65 -0
- package/dist/runtime/text.d.ts +65 -0
- package/dist/runtime/text.iife.js +2 -0
- package/dist/runtime/text.iife.js.map +1 -0
- package/dist/runtime/text.js +143 -0
- package/dist/runtime/text.js.map +1 -0
- package/dist/runtime.cjs +9 -8
- package/dist/runtime.cjs.map +1 -1
- package/dist/runtime.d.cts +9 -2
- package/dist/runtime.d.ts +9 -2
- package/dist/runtime.iife.js +1 -1
- package/dist/runtime.iife.js.map +1 -1
- package/dist/runtime.js +6 -5
- package/dist/runtime.js.map +1 -1
- package/dist/solid.cjs.map +1 -1
- package/dist/solid.js.map +1 -1
- package/dist/svelte.cjs.map +1 -1
- package/dist/svelte.js.map +1 -1
- package/dist/vue.cjs.map +1 -1
- package/dist/vue.js.map +1 -1
- package/dist/widgets.umd.js +1 -1
- package/dist/widgets.umd.js.map +1 -1
- package/docs/ROADMAP.md +2 -2
- package/docs/components/README.md +12 -7
- package/docs/components/usa-parallax-layers.md +38 -0
- package/docs/components/usa-route-transition.md +38 -0
- package/docs/components/usa-scroll-ring.md +32 -0
- package/docs/components/usa-smooth-scroll.md +60 -0
- package/docs/components/usa-text-splitter.md +60 -0
- package/docs/components.md +94 -0
- package/docs/mcp.md +50 -0
- package/docs/runtime/format-apng.md +59 -0
- package/docs/runtime/format-gif.md +60 -0
- package/docs/runtime/format-sprite.md +60 -0
- package/docs/runtime/format-webp.md +58 -0
- package/docs/runtime/smooth.md +60 -0
- package/docs/runtime/text.md +59 -0
- package/package.json +64 -2
- package/dist/chunks/keyframes-W-474DMc.js.map +0 -1
- package/dist/chunks/keyframes-ZheOkpt0.cjs.map +0 -1
- package/dist/chunks/tween-CBuWYpI-.cjs.map +0 -1
- package/dist/chunks/tween-CqX1JBuj.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"format-svg.iife.js","sources":["../../src/runtime/format-svg.ts","../../src/runtime/iife/format-svg.ts"],"sourcesContent":["/**\n * `motionary/runtime/format-svg` (10.2) — SVG animation with the runtime\n * (original implementation):\n *\n * - **Path geometry** without the DOM (SSR / workers): `parsePath(d)` (all\n * commands, relative + absolute, arcs), `flattenPath(d)`, `pathLength(d)`,\n * `pointAtLength(d, len)`, `samplePath(d, n)`.\n * - **Path morphing**: `morphPath(from, to, { points })` → `(p) => d` — both\n * paths are resampled to the same number of points (any command mix, any\n * point counts), aligned to the closest start point, then interpolated.\n * - **SMIL playback**: `playSmil(svg)` reads `<animate>`, `<set>`,\n * `<animateTransform>` (translate / scale / rotate / skewX / skewY) and\n * `<animateMotion>` (`path` or `<mpath>`, `rotate=\"auto\"`) — `from` / `to` /\n * `by` / `values`, `keyTimes`, `keySplines` (`calcMode=\"spline\"`),\n * `calcMode=\"discrete\"`, `dur`, numeric `begin` offsets, `repeatCount`\n * (incl. `indefinite`), `fill=\"freeze\"` — and replays them as a runtime\n * timeline (seek, scrub, reverse, timeScale) instead of the browser's SMIL clock.\n * - CSS-animated SVG: use `motionary/runtime/format-css` (`@keyframes` in the SVG's `<style>`).\n *\n * Not supported (documented): event / syncbase `begin` values (`click`,\n * `a.end`), `accumulate` / `additive=\"sum\"`, `<animateColor>` (deprecated).\n */\nimport { RUNTIME_VERSION, type RuntimeModule } from './registry';\nimport { Playable, Timeline, parseValue } from './tween';\nimport { cubicBezier, type Ease } from './ease';\n\ntype Pt = [number, number];\nexport type PathCommand = [string, ...number[]];\n\nconst ARGS: Record<string, number> = { M: 2, L: 2, H: 1, V: 1, C: 6, S: 4, Q: 4, T: 2, A: 7, Z: 0 };\n\n/** Parse path data into absolute commands (M L C Q A Z; H/V/S/T expanded). */\nexport function parsePath(d: string): PathCommand[] {\n const toks = d.match(/[a-zA-Z]|[-+]?(?:\\d*\\.\\d+|\\d+\\.?)(?:[eE][-+]?\\d+)?/g) || [];\n const out: PathCommand[] = [];\n let i = 0, cmd = '', x = 0, y = 0, sx = 0, sy = 0, lc: Pt | null = null, lq: Pt | null = null;\n const num = () => parseFloat(toks[i++]);\n while (i < toks.length) {\n if (/[a-zA-Z]/.test(toks[i])) cmd = toks[i++];\n else if (!cmd) throw new Error('[motionary] format-svg: path must start with a command');\n const C = cmd.toUpperCase(), rel = cmd !== C;\n const n = ARGS[C];\n if (n === undefined) throw new Error(`[motionary] format-svg: unknown path command \"${cmd}\"`);\n if (C === 'Z') {\n out.push(['Z']);\n x = sx; y = sy; lc = lq = null;\n continue;\n }\n const a: number[] = [];\n for (let k = 0; k < n; k++) a.push(num());\n if (a.some((v) => Number.isNaN(v))) break;\n const ox = rel ? x : 0, oy = rel ? y : 0;\n switch (C) {\n case 'M': x = a[0] + ox; y = a[1] + oy; sx = x; sy = y; out.push(['M', x, y]); cmd = rel ? 'l' : 'L'; lc = lq = null; break;\n case 'L': x = a[0] + ox; y = a[1] + oy; out.push(['L', x, y]); lc = lq = null; break;\n case 'H': x = a[0] + ox; out.push(['L', x, y]); lc = lq = null; break;\n case 'V': y = a[0] + (rel ? y : 0); out.push(['L', x, y]); lc = lq = null; break;\n case 'C': { const c = [a[0] + ox, a[1] + oy, a[2] + ox, a[3] + oy, a[4] + ox, a[5] + oy]; out.push(['C', ...c]); lc = [c[2], c[3]]; x = c[4]; y = c[5]; lq = null; break; }\n case 'S': { const c1: Pt = lc ? [2 * x - lc[0], 2 * y - lc[1]] : [x, y]; const c = [a[0] + ox, a[1] + oy, a[2] + ox, a[3] + oy]; out.push(['C', c1[0], c1[1], ...c]); lc = [c[0], c[1]]; x = c[2]; y = c[3]; lq = null; break; }\n case 'Q': { const c = [a[0] + ox, a[1] + oy, a[2] + ox, a[3] + oy]; out.push(['Q', ...c]); lq = [c[0], c[1]]; x = c[2]; y = c[3]; lc = null; break; }\n case 'T': { const c1: Pt = lq ? [2 * x - lq[0], 2 * y - lq[1]] : [x, y]; x = a[0] + ox; y = a[1] + oy; out.push(['Q', c1[0], c1[1], x, y]); lq = c1; lc = null; break; }\n case 'A': { x = a[5] + ox; y = a[6] + oy; out.push(['A', a[0], a[1], a[2], a[3], a[4], x, y]); lc = lq = null; break; }\n }\n }\n return out;\n}\n\n/** Endpoint-parameterised arc → points (SVG spec F.6.5 conversion). */\nfunction arcPoints(x1: number, y1: number, rx: number, ry: number, phiDeg: number, large: number, sweep: number, x2: number, y2: number, seg: number): Pt[] {\n if (!rx || !ry) return [[x2, y2]];\n rx = Math.abs(rx); ry = Math.abs(ry);\n const phi = (phiDeg * Math.PI) / 180, cos = Math.cos(phi), sin = Math.sin(phi);\n const dx = (x1 - x2) / 2, dy = (y1 - y2) / 2;\n const xp = cos * dx + sin * dy, yp = -sin * dx + cos * dy;\n const lam = (xp * xp) / (rx * rx) + (yp * yp) / (ry * ry);\n if (lam > 1) { rx *= Math.sqrt(lam); ry *= Math.sqrt(lam); }\n const num = rx * rx * ry * ry - rx * rx * yp * yp - ry * ry * xp * xp;\n const den = rx * rx * yp * yp + ry * ry * xp * xp;\n let co = Math.sqrt(Math.max(0, num / den));\n if (large === sweep) co = -co;\n const cxp = (co * rx * yp) / ry, cyp = (-co * ry * xp) / rx;\n const cx = cos * cxp - sin * cyp + (x1 + x2) / 2, cy = sin * cxp + cos * cyp + (y1 + y2) / 2;\n const ang = (ux: number, uy: number, vx: number, vy: number) => Math.atan2(ux * vy - uy * vx, ux * vx + uy * vy);\n const t1 = ang(1, 0, (xp - cxp) / rx, (yp - cyp) / ry);\n let dt = ang((xp - cxp) / rx, (yp - cyp) / ry, (-xp - cxp) / rx, (-yp - cyp) / ry);\n if (!sweep && dt > 0) dt -= 2 * Math.PI;\n if (sweep && dt < 0) dt += 2 * Math.PI;\n const n = Math.max(2, Math.ceil((Math.abs(dt) / (Math.PI / 2)) * seg));\n const pts: Pt[] = [];\n for (let k = 1; k <= n; k++) {\n const t = t1 + (dt * k) / n;\n pts.push([cx + rx * Math.cos(t) * cos - ry * Math.sin(t) * sin, cy + rx * Math.cos(t) * sin + ry * Math.sin(t) * cos]);\n }\n return pts;\n}\n\n/** Flatten a path into polylines (one per subpath); `segments` points per curve. */\nexport function flattenPath(d: string | PathCommand[], segments = 16): Pt[][] {\n const cmds = typeof d === 'string' ? parsePath(d) : d;\n const subs: Pt[][] = [];\n let cur: Pt[] = [], x = 0, y = 0;\n for (const c of cmds) {\n const [k, ...a] = c;\n if (k === 'M') { if (cur.length) subs.push(cur); cur = [[a[0], a[1]]]; x = a[0]; y = a[1]; continue; }\n if (!cur.length) cur = [[x, y]];\n if (k === 'L') cur.push([a[0], a[1]]);\n else if (k === 'C') for (let i = 1; i <= segments; i++) { const t = i / segments, u = 1 - t; cur.push([u * u * u * x + 3 * u * u * t * a[0] + 3 * u * t * t * a[2] + t * t * t * a[4], u * u * u * y + 3 * u * u * t * a[1] + 3 * u * t * t * a[3] + t * t * t * a[5]]); }\n else if (k === 'Q') for (let i = 1; i <= segments; i++) { const t = i / segments, u = 1 - t; cur.push([u * u * x + 2 * u * t * a[0] + t * t * a[2], u * u * y + 2 * u * t * a[1] + t * t * a[3]]); }\n else if (k === 'A') cur.push(...arcPoints(x, y, a[0], a[1], a[2], a[3], a[4], a[5], a[6], segments / 4));\n else if (k === 'Z') { cur.push([cur[0][0], cur[0][1]]); subs.push(cur); x = cur[0][0]; y = cur[0][1]; cur = []; continue; }\n const last = cur[cur.length - 1];\n x = last[0]; y = last[1];\n }\n if (cur.length) subs.push(cur);\n return subs;\n}\n\nconst dist = (a: Pt, b: Pt) => Math.hypot(b[0] - a[0], b[1] - a[1]);\n\n/** Total length of a path. */\nexport function pathLength(d: string | PathCommand[]): number {\n return flattenPath(d, 48).reduce((s, pl) => s + pl.slice(1).reduce((t, p, i) => t + dist(pl[i], p), 0), 0);\n}\n\n/** Point (and tangent angle, degrees) at a distance along the path. */\nexport function pointAtLength(d: string | PathCommand[], len: number): { x: number; y: number; angle: number } {\n const pl = flattenPath(d, 48).flat();\n let acc = 0;\n for (let i = 1; i < pl.length; i++) {\n const s = dist(pl[i - 1], pl[i]);\n if (acc + s >= len || i === pl.length - 1) {\n const t = s ? Math.min(1, Math.max(0, (len - acc) / s)) : 0;\n return { x: pl[i - 1][0] + (pl[i][0] - pl[i - 1][0]) * t, y: pl[i - 1][1] + (pl[i][1] - pl[i - 1][1]) * t, angle: (Math.atan2(pl[i][1] - pl[i - 1][1], pl[i][0] - pl[i - 1][0]) * 180) / Math.PI };\n }\n acc += s;\n }\n return { x: pl[0]?.[0] ?? 0, y: pl[0]?.[1] ?? 0, angle: 0 };\n}\n\n/** `n` points evenly spaced along the path (all subpaths joined). */\nexport function samplePath(d: string | PathCommand[], n = 64): Pt[] {\n const total = pathLength(d);\n return Array.from({ length: n }, (_, i) => {\n const p = pointAtLength(d, (total * i) / (n - 1 || 1));\n return [p.x, p.y] as Pt;\n });\n}\n\nconst r3 = (v: number) => Math.round(v * 1000) / 1000;\nconst closed = (d: string) => /z\\s*$/i.test(d.trim());\n\n/**\n * Morph between two paths of any shape: `const f = morphPath(a, b); el.setAttribute('d', f(0.5))`.\n * Closed paths are rotated so their start points line up (less twisting).\n */\nexport function morphPath(from: string, to: string, o: { points?: number } = {}): (p: number) => string {\n const n = o.points ?? 64;\n const A = samplePath(from, n);\n let B = samplePath(to, n);\n const isClosed = closed(from) && closed(to);\n if (isClosed) {\n let best = 0, bestD = Infinity;\n for (let s = 0; s < n; s++) {\n let sum = 0;\n for (let i = 0; i < n; i += 4) sum += dist(A[i], B[(i + s) % n]);\n if (sum < bestD) { bestD = sum; best = s; }\n }\n B = B.map((_, i) => B[(i + best) % n]);\n }\n return (p) => {\n if (p <= 0) return from;\n if (p >= 1) return to;\n return 'M' + A.map((a, i) => `${r3(a[0] + (B[i][0] - a[0]) * p)} ${r3(a[1] + (B[i][1] - a[1]) * p)}`).join('L') + (isClosed ? 'Z' : '');\n };\n}\n\n/* ------------------------------------------------------------------ SMIL */\n\n/** '2s', '150ms', '1.5', 'indefinite' → ms (NaN for indefinite / unsupported). */\nexport function smilTime(v: string | null | undefined): number {\n if (!v) return NaN;\n const s = v.trim();\n const m = /^(-?[\\d.]+)(ms|s|min|h)?$/.exec(s);\n if (!m) {\n const c = /^(?:(\\d+):)?(\\d+):(\\d+(?:\\.\\d+)?)$/.exec(s);\n return c ? ((+(c[1] || 0) * 60 + +c[2]) * 60 + +c[3]) * 1000 : NaN;\n }\n const n = parseFloat(m[1]);\n return m[2] === 'ms' ? n : m[2] === 'min' ? n * 60000 : m[2] === 'h' ? n * 3600000 : n * 1000;\n}\n\ntype Interp = (a: string, b: string, p: number) => string;\nconst numList = (s: string) => s.trim().split(/[\\s,]+/).filter(Boolean).map(Number);\nconst lerpNumbers: Interp = (a, b, p) => {\n const x = numList(a), y = numList(b);\n return x.map((v, i) => r3(v + ((y[i] ?? v) - v) * p)).join(' ');\n};\nconst lerpAny: Interp = (a, b, p) => {\n try {\n const x = parseValue(a), y = parseValue(b);\n if ((x as { kind: string }).kind === 'str' || (y as { kind: string }).kind === 'str') throw 0; // number lists / keywords: handled below\n if (x.kind === 'col' || y.kind === 'col') {\n const ca = x.kind === 'col' ? x.c : [0, 0, 0, 1], cb = y.kind === 'col' ? y.c : [0, 0, 0, 1];\n const c = ca.map((v, i) => v + (cb[i] - v) * p);\n return `rgba(${Math.round(c[0])},${Math.round(c[1])},${Math.round(c[2])},${r3(c[3])})`;\n }\n return `${r3(x.v + (y.v - x.v) * p)}${y.u || x.u}`;\n } catch {\n if (/^[-\\d.\\s,e]+$/i.test(a) && /^[-\\d.\\s,e]+$/i.test(b)) return lerpNumbers(a, b, p);\n return p < 0.5 ? a : b;\n }\n};\n\nexport interface SmilAnimationInfo {\n kind: 'animate' | 'set' | 'animateTransform' | 'animateMotion';\n target: Element;\n attribute: string;\n begin: number;\n dur: number;\n repeat: number;\n freeze: boolean;\n values: string[];\n keyTimes: number[];\n calcMode: string;\n type?: string;\n}\n\n/** Read the SMIL animation elements of an SVG (without playing them). */\nexport function readSmil(svg: Element): SmilAnimationInfo[] {\n const out: SmilAnimationInfo[] = [];\n svg.querySelectorAll('animate, set, animateTransform, animateMotion').forEach((el) => {\n const kind = el.localName as SmilAnimationInfo['kind'];\n const href = el.getAttribute('href') || el.getAttribute('xlink:href');\n const target = href ? svg.querySelector(href) : el.parentElement;\n if (!target) return;\n const begin = smilTime((el.getAttribute('begin') || '0').split(';')[0]);\n const dur = kind === 'set' ? smilTime(el.getAttribute('dur')) || 0 : smilTime(el.getAttribute('dur'));\n const rc = el.getAttribute('repeatCount');\n const rd = smilTime(el.getAttribute('repeatDur'));\n let repeat = rc === 'indefinite' || el.getAttribute('repeatDur') === 'indefinite' ? -1 : rc ? Math.max(0, Math.ceil(parseFloat(rc)) - 1) : 0;\n if (!rc && rd > 0 && dur > 0) repeat = Math.ceil(rd / dur) - 1;\n const attribute = kind === 'animateTransform' ? 'transform' : kind === 'animateMotion' ? 'transform' : el.getAttribute('attributeName') || '';\n let values: string[];\n const v = el.getAttribute('values');\n if (kind === 'set') values = [el.getAttribute('to') || ''];\n else if (kind === 'animateMotion') {\n const mp = el.querySelector('mpath');\n const ref = mp && (mp.getAttribute('href') || mp.getAttribute('xlink:href'));\n values = [(ref && svg.querySelector(ref)?.getAttribute('d')) || el.getAttribute('path') || ''];\n } else if (v) values = v.split(';').map((s) => s.trim()).filter((s) => s !== '');\n else {\n const base = target.getAttribute(attribute) || (attribute === 'opacity' ? '1' : '0');\n const from = el.getAttribute('from') ?? base;\n const by = el.getAttribute('by');\n const to = el.getAttribute('to') ?? (by !== null ? numList(from).map((x, i) => x + (numList(by)[i] ?? 0)).join(' ') : base);\n values = [from, to];\n }\n const kt = el.getAttribute('keyTimes');\n out.push({ kind, target, attribute, begin: Number.isFinite(begin) ? begin : 0, dur: Number.isFinite(dur) ? dur : 0, repeat, freeze: el.getAttribute('fill') === 'freeze' || (kind === 'set' && !el.getAttribute('dur')) /* a <set> without dur holds its value */, values, keyTimes: kt ? kt.split(';').map(Number) : [], calcMode: el.getAttribute('calcMode') || (kind === 'animateMotion' ? 'paced' : 'linear'), type: el.getAttribute('type') || undefined, ...(el.getAttribute('rotate') ? { rotate: el.getAttribute('rotate') } : {}), ...(el.getAttribute('keySplines') ? { keySplines: el.getAttribute('keySplines') } : {}) } as SmilAnimationInfo);\n });\n return out;\n}\n\n/** One SMIL animation replayed as a runtime Playable. */\nclass SmilTrack extends Playable {\n private interp: Interp;\n private splines: Ease[];\n private base: string | null;\n private morphs: ((p: number) => string)[] = [];\n constructor(private info: SmilAnimationInfo & { rotate?: string; keySplines?: string }) {\n super({ repeat: info.repeat });\n this.base = info.target.getAttribute(info.attribute);\n this.interp = info.attribute === 'd' ? (a, b, p) => this.morph(a, b)(p) : info.kind === 'animateTransform' ? lerpNumbers : lerpAny;\n this.splines = (info.keySplines || '').split(';').filter((s) => s.trim()).map((s) => { const n = numList(s); return cubicBezier(n[0], n[1], n[2], n[3]); });\n }\n private morph(a: string, b: string): (p: number) => string {\n const key = a + '|' + b;\n const hit = (this.morphs as any)[key];\n return hit || ((this.morphs as any)[key] = morphPath(a, b));\n }\n get duration(): number {\n return this.info.dur;\n }\n private write(v: string): void {\n const { kind, target, type } = this.info;\n if (kind === 'animateTransform') target.setAttribute('transform', `${type || 'translate'}(${v})`);\n else target.setAttribute(this.info.attribute, v);\n }\n protected renderLocal(ms: number, ended: boolean): void {\n const i = this.info;\n if (ended && ms >= i.dur && !i.freeze && this.repeat >= 0) {\n if (this.base === null) i.target.removeAttribute(i.attribute);\n else i.target.setAttribute(i.attribute, this.base);\n return;\n }\n const p = i.dur ? Math.min(1, ms / i.dur) : 1;\n if (i.kind === 'set') return this.write(i.values[0]);\n if (i.kind === 'animateMotion') {\n const d = i.values[0];\n const len = pathLength(d);\n const pt = pointAtLength(d, len * p);\n const rot = (i as any).rotate;\n const a = rot === 'auto' ? pt.angle : rot === 'auto-reverse' ? pt.angle + 180 : parseFloat(rot) || 0;\n i.target.setAttribute('transform', `translate(${r3(pt.x)} ${r3(pt.y)})${a ? ` rotate(${r3(a)})` : ''}`);\n return;\n }\n const vals = i.values;\n if (vals.length === 1) return this.write(vals[0]);\n const kt = i.keyTimes.length === vals.length ? i.keyTimes : vals.map((_, k) => k / (vals.length - 1));\n if (i.calcMode === 'discrete') {\n const kd = i.keyTimes.length === vals.length ? i.keyTimes : vals.map((_, k) => k / vals.length);\n let k = 0;\n while (k < kd.length - 1 && p >= kd[k + 1]) k++;\n return this.write(vals[k]);\n }\n let k = 0;\n while (k < kt.length - 2 && p > kt[k + 1]) k++;\n const span = kt[k + 1] - kt[k] || 1;\n let local = Math.min(1, Math.max(0, (p - kt[k]) / span));\n if (i.calcMode === 'spline' && this.splines[k]) local = this.splines[k](local);\n this.write(this.interp(vals[k], vals[k + 1], local));\n }\n}\n\nexport interface SmilPlayer {\n timeline: Timeline;\n animations: SmilAnimationInfo[];\n /** Put the original SMIL elements back (the browser's clock takes over again). */\n restore(): void;\n}\n\n/**\n * Replay an SVG's SMIL animations with the runtime. The SMIL elements are\n * detached while the runtime drives the attributes (call `restore()` to put\n * them back). Playing unless `paused: true`.\n */\nexport function playSmil(svg: Element, o: { paused?: boolean; timeScale?: number } = {}): SmilPlayer {\n const animations = readSmil(svg);\n const els = Array.from(svg.querySelectorAll('animate, set, animateTransform, animateMotion'));\n const parents = els.map((e) => [e, e.parentNode, e.nextSibling] as const);\n els.forEach((e) => e.remove());\n const tl = new Timeline({});\n for (const a of animations) tl.add(new SmilTrack(a), a.begin);\n if (o.timeScale) tl.timeScale = o.timeScale;\n if (!o.paused) tl.play();\n return {\n timeline: tl,\n animations,\n restore() {\n tl.kill();\n parents.forEach(([e, p, next]) => p?.insertBefore(e, next && next.parentNode === p ? next : null));\n },\n };\n}\n\nexport interface FormatSvgApi {\n parsePath: typeof parsePath;\n flattenPath: typeof flattenPath;\n pathLength: typeof pathLength;\n pointAtLength: typeof pointAtLength;\n samplePath: typeof samplePath;\n morphPath: typeof morphPath;\n readSmil: typeof readSmil;\n playSmil: typeof playSmil;\n smilTime: typeof smilTime;\n}\n\n/** The module object for `use(formatSvg)`. */\nexport const formatSvg: RuntimeModule<FormatSvgApi> = { id: 'format-svg', version: RUNTIME_VERSION, requires: ['core'], api: { parsePath, flattenPath, pathLength, pointAtLength, samplePath, morphPath, readSmil, playSmil, smilTime } };\n","// CDN build: load runtime.iife.js first, then this file → registers motionary/runtime/format-svg and adds its API to window.MotionaryRuntime.\nimport { register } from '../registry';\nimport { formatSvg } from '../format-svg';\nexport * from '../format-svg';\nregister(formatSvg);\n"],"names":["ARGS","M","L","H","V","C","S","Q","T","A","Z","parsePath","d","toks","match","out","i","cmd","x","y","sx","sy","lc","lq","num","parseFloat","length","test","Error","toUpperCase","rel","n","undefined","push","a","k","some","v","Number","isNaN","ox","oy","c","c1","arcPoints","x1","y1","rx","ry","phiDeg","large","sweep","x2","y2","seg","Math","abs","phi","PI","cos","sin","dx","dy","xp","yp","lam","sqrt","den","co","max","cxp","cyp","cx","cy","ang","ux","uy","vx","vy","atan2","t1","dt","ceil","pts","t","flattenPath","segments","cmds","subs","cur","u","last","dist","b","hypot","pathLength","reduce","s","pl","slice","p","pointAtLength","len","flat","acc","min","angle","samplePath","total","Array","from","_","r3","round","closed","trim","morphPath","to","o","points","B","isClosed","best","bestD","Infinity","sum","map","join","smilTime","NaN","m","exec","numList","split","filter","Boolean","lerpNumbers","lerpAny","parseValue","kind","ca","cb","readSmil","svg","querySelectorAll","forEach","el","localName","href","getAttribute","target","querySelector","parentElement","begin","dur","rc","rd","repeat","attribute","values","mp","ref","base","by","kt","isFinite","freeze","keyTimes","calcMode","type","rotate","keySplines","SmilTrack","Playable","constructor","info","super","this","morphs","interp","morph","splines","cubicBezier","key","duration","write","setAttribute","renderLocal","ms","ended","removeAttribute","pt","rot","vals","kd","span","local","playSmil","animations","els","parents","e","parentNode","nextSibling","remove","tl","Timeline","add","timeScale","paused","play","timeline","restore","kill","next","insertBefore","formatSvg","id","version","RUNTIME_VERSION","requires","api","register"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"format-svg.iife.js","sources":["../../src/runtime/format-svg.ts","../../src/runtime/iife/format-svg.ts"],"sourcesContent":["/**\n * `motionary/runtime/format-svg` (10.2) — SVG animation with the runtime\n * (original implementation):\n *\n * - **Path geometry** without the DOM (SSR / workers): `parsePath(d)` (all\n * commands, relative + absolute, arcs), `flattenPath(d)`, `pathLength(d)`,\n * `pointAtLength(d, len)`, `samplePath(d, n)`.\n * - **Path morphing**: `morphPath(from, to, { points })` → `(p) => d` — both\n * paths are resampled to the same number of points (any command mix, any\n * point counts), aligned to the closest start point, then interpolated.\n * - **SMIL playback**: `playSmil(svg)` reads `<animate>`, `<set>`,\n * `<animateTransform>` (translate / scale / rotate / skewX / skewY) and\n * `<animateMotion>` (`path` or `<mpath>`, `rotate=\"auto\"`) — `from` / `to` /\n * `by` / `values`, `keyTimes`, `keySplines` (`calcMode=\"spline\"`),\n * `calcMode=\"discrete\"`, `dur`, numeric `begin` offsets, `repeatCount`\n * (incl. `indefinite`), `fill=\"freeze\"` — and replays them as a runtime\n * timeline (seek, scrub, reverse, timeScale) instead of the browser's SMIL clock.\n * - CSS-animated SVG: use `motionary/runtime/format-css` (`@keyframes` in the SVG's `<style>`).\n *\n * Not supported (documented): event / syncbase `begin` values (`click`,\n * `a.end`), `accumulate` / `additive=\"sum\"`, `<animateColor>` (deprecated).\n */\nimport { RUNTIME_VERSION, type RuntimeModule } from './registry';\nimport { Playable, Timeline, parseValue } from './tween';\nimport { cubicBezier, type Ease } from './ease';\n\ntype Pt = [number, number];\nexport type PathCommand = [string, ...number[]];\n\nconst ARGS: Record<string, number> = { M: 2, L: 2, H: 1, V: 1, C: 6, S: 4, Q: 4, T: 2, A: 7, Z: 0 };\n\n/** Parse path data into absolute commands (M L C Q A Z; H/V/S/T expanded). */\nexport function parsePath(d: string): PathCommand[] {\n const toks = d.match(/[a-zA-Z]|[-+]?(?:\\d*\\.\\d+|\\d+\\.?)(?:[eE][-+]?\\d+)?/g) || [];\n const out: PathCommand[] = [];\n let i = 0, cmd = '', x = 0, y = 0, sx = 0, sy = 0, lc: Pt | null = null, lq: Pt | null = null;\n const num = () => parseFloat(toks[i++]);\n while (i < toks.length) {\n if (/[a-zA-Z]/.test(toks[i])) cmd = toks[i++];\n else if (!cmd) throw new Error('[motionary] format-svg: path must start with a command');\n const C = cmd.toUpperCase(), rel = cmd !== C;\n const n = ARGS[C];\n if (n === undefined) throw new Error(`[motionary] format-svg: unknown path command \"${cmd}\"`);\n if (C === 'Z') {\n out.push(['Z']);\n x = sx; y = sy; lc = lq = null;\n continue;\n }\n const a: number[] = [];\n for (let k = 0; k < n; k++) a.push(num());\n if (a.some((v) => Number.isNaN(v))) break;\n const ox = rel ? x : 0, oy = rel ? y : 0;\n switch (C) {\n case 'M': x = a[0] + ox; y = a[1] + oy; sx = x; sy = y; out.push(['M', x, y]); cmd = rel ? 'l' : 'L'; lc = lq = null; break;\n case 'L': x = a[0] + ox; y = a[1] + oy; out.push(['L', x, y]); lc = lq = null; break;\n case 'H': x = a[0] + ox; out.push(['L', x, y]); lc = lq = null; break;\n case 'V': y = a[0] + (rel ? y : 0); out.push(['L', x, y]); lc = lq = null; break;\n case 'C': { const c = [a[0] + ox, a[1] + oy, a[2] + ox, a[3] + oy, a[4] + ox, a[5] + oy]; out.push(['C', ...c]); lc = [c[2], c[3]]; x = c[4]; y = c[5]; lq = null; break; }\n case 'S': { const c1: Pt = lc ? [2 * x - lc[0], 2 * y - lc[1]] : [x, y]; const c = [a[0] + ox, a[1] + oy, a[2] + ox, a[3] + oy]; out.push(['C', c1[0], c1[1], ...c]); lc = [c[0], c[1]]; x = c[2]; y = c[3]; lq = null; break; }\n case 'Q': { const c = [a[0] + ox, a[1] + oy, a[2] + ox, a[3] + oy]; out.push(['Q', ...c]); lq = [c[0], c[1]]; x = c[2]; y = c[3]; lc = null; break; }\n case 'T': { const c1: Pt = lq ? [2 * x - lq[0], 2 * y - lq[1]] : [x, y]; x = a[0] + ox; y = a[1] + oy; out.push(['Q', c1[0], c1[1], x, y]); lq = c1; lc = null; break; }\n case 'A': { x = a[5] + ox; y = a[6] + oy; out.push(['A', a[0], a[1], a[2], a[3], a[4], x, y]); lc = lq = null; break; }\n }\n }\n return out;\n}\n\n/** Endpoint-parameterised arc → points (SVG spec F.6.5 conversion). */\nfunction arcPoints(x1: number, y1: number, rx: number, ry: number, phiDeg: number, large: number, sweep: number, x2: number, y2: number, seg: number): Pt[] {\n if (!rx || !ry) return [[x2, y2]];\n rx = Math.abs(rx); ry = Math.abs(ry);\n const phi = (phiDeg * Math.PI) / 180, cos = Math.cos(phi), sin = Math.sin(phi);\n const dx = (x1 - x2) / 2, dy = (y1 - y2) / 2;\n const xp = cos * dx + sin * dy, yp = -sin * dx + cos * dy;\n const lam = (xp * xp) / (rx * rx) + (yp * yp) / (ry * ry);\n if (lam > 1) { rx *= Math.sqrt(lam); ry *= Math.sqrt(lam); }\n const num = rx * rx * ry * ry - rx * rx * yp * yp - ry * ry * xp * xp;\n const den = rx * rx * yp * yp + ry * ry * xp * xp;\n let co = Math.sqrt(Math.max(0, num / den));\n if (large === sweep) co = -co;\n const cxp = (co * rx * yp) / ry, cyp = (-co * ry * xp) / rx;\n const cx = cos * cxp - sin * cyp + (x1 + x2) / 2, cy = sin * cxp + cos * cyp + (y1 + y2) / 2;\n const ang = (ux: number, uy: number, vx: number, vy: number) => Math.atan2(ux * vy - uy * vx, ux * vx + uy * vy);\n const t1 = ang(1, 0, (xp - cxp) / rx, (yp - cyp) / ry);\n let dt = ang((xp - cxp) / rx, (yp - cyp) / ry, (-xp - cxp) / rx, (-yp - cyp) / ry);\n if (!sweep && dt > 0) dt -= 2 * Math.PI;\n if (sweep && dt < 0) dt += 2 * Math.PI;\n const n = Math.max(2, Math.ceil((Math.abs(dt) / (Math.PI / 2)) * seg));\n const pts: Pt[] = [];\n for (let k = 1; k <= n; k++) {\n const t = t1 + (dt * k) / n;\n pts.push([cx + rx * Math.cos(t) * cos - ry * Math.sin(t) * sin, cy + rx * Math.cos(t) * sin + ry * Math.sin(t) * cos]);\n }\n return pts;\n}\n\n/** Flatten a path into polylines (one per subpath); `segments` points per curve. */\nexport function flattenPath(d: string | PathCommand[], segments = 16): Pt[][] {\n const cmds = typeof d === 'string' ? parsePath(d) : d;\n const subs: Pt[][] = [];\n let cur: Pt[] = [], x = 0, y = 0;\n for (const c of cmds) {\n const [k, ...a] = c;\n if (k === 'M') { if (cur.length) subs.push(cur); cur = [[a[0], a[1]]]; x = a[0]; y = a[1]; continue; }\n if (!cur.length) cur = [[x, y]];\n if (k === 'L') cur.push([a[0], a[1]]);\n else if (k === 'C') for (let i = 1; i <= segments; i++) { const t = i / segments, u = 1 - t; cur.push([u * u * u * x + 3 * u * u * t * a[0] + 3 * u * t * t * a[2] + t * t * t * a[4], u * u * u * y + 3 * u * u * t * a[1] + 3 * u * t * t * a[3] + t * t * t * a[5]]); }\n else if (k === 'Q') for (let i = 1; i <= segments; i++) { const t = i / segments, u = 1 - t; cur.push([u * u * x + 2 * u * t * a[0] + t * t * a[2], u * u * y + 2 * u * t * a[1] + t * t * a[3]]); }\n else if (k === 'A') cur.push(...arcPoints(x, y, a[0], a[1], a[2], a[3], a[4], a[5], a[6], segments / 4));\n else if (k === 'Z') { cur.push([cur[0][0], cur[0][1]]); subs.push(cur); x = cur[0][0]; y = cur[0][1]; cur = []; continue; }\n const last = cur[cur.length - 1];\n x = last[0]; y = last[1];\n }\n if (cur.length) subs.push(cur);\n return subs;\n}\n\nconst dist = (a: Pt, b: Pt) => Math.hypot(b[0] - a[0], b[1] - a[1]);\n\n/** Total length of a path. */\nexport function pathLength(d: string | PathCommand[]): number {\n return flattenPath(d, 48).reduce((s, pl) => s + pl.slice(1).reduce((t, p, i) => t + dist(pl[i], p), 0), 0);\n}\n\n/** Point (and tangent angle, degrees) at a distance along the path. */\nexport function pointAtLength(d: string | PathCommand[], len: number): { x: number; y: number; angle: number } {\n const pl = flattenPath(d, 48).flat();\n let acc = 0;\n for (let i = 1; i < pl.length; i++) {\n const s = dist(pl[i - 1], pl[i]);\n if (acc + s >= len || i === pl.length - 1) {\n const t = s ? Math.min(1, Math.max(0, (len - acc) / s)) : 0;\n return { x: pl[i - 1][0] + (pl[i][0] - pl[i - 1][0]) * t, y: pl[i - 1][1] + (pl[i][1] - pl[i - 1][1]) * t, angle: (Math.atan2(pl[i][1] - pl[i - 1][1], pl[i][0] - pl[i - 1][0]) * 180) / Math.PI };\n }\n acc += s;\n }\n return { x: pl[0]?.[0] ?? 0, y: pl[0]?.[1] ?? 0, angle: 0 };\n}\n\n/** `n` points evenly spaced along the path (all subpaths joined). */\nexport function samplePath(d: string | PathCommand[], n = 64): Pt[] {\n const total = pathLength(d);\n return Array.from({ length: n }, (_, i) => {\n const p = pointAtLength(d, (total * i) / (n - 1 || 1));\n return [p.x, p.y] as Pt;\n });\n}\n\nconst r3 = (v: number) => Math.round(v * 1000) / 1000;\nconst closed = (d: string) => /z\\s*$/i.test(d.trim());\n\n/**\n * Morph between two paths of any shape: `const f = morphPath(a, b); el.setAttribute('d', f(0.5))`.\n * Closed paths are rotated so their start points line up (less twisting).\n */\nexport function morphPath(from: string, to: string, o: { points?: number } = {}): (p: number) => string {\n const n = o.points ?? 64;\n const A = samplePath(from, n);\n let B = samplePath(to, n);\n const isClosed = closed(from) && closed(to);\n if (isClosed) {\n let best = 0, bestD = Infinity;\n for (let s = 0; s < n; s++) {\n let sum = 0;\n for (let i = 0; i < n; i += 4) sum += dist(A[i], B[(i + s) % n]);\n if (sum < bestD) { bestD = sum; best = s; }\n }\n B = B.map((_, i) => B[(i + best) % n]);\n }\n return (p) => {\n if (p <= 0) return from;\n if (p >= 1) return to;\n return 'M' + A.map((a, i) => `${r3(a[0] + (B[i][0] - a[0]) * p)} ${r3(a[1] + (B[i][1] - a[1]) * p)}`).join('L') + (isClosed ? 'Z' : '');\n };\n}\n\n/* ------------------------------------------------------------------ SMIL */\n\n/** '2s', '150ms', '1.5', 'indefinite' → ms (NaN for indefinite / unsupported). */\nexport function smilTime(v: string | null | undefined): number {\n if (!v) return NaN;\n const s = v.trim();\n const m = /^(-?[\\d.]+)(ms|s|min|h)?$/.exec(s);\n if (!m) {\n const c = /^(?:(\\d+):)?(\\d+):(\\d+(?:\\.\\d+)?)$/.exec(s);\n return c ? ((+(c[1] || 0) * 60 + +c[2]) * 60 + +c[3]) * 1000 : NaN;\n }\n const n = parseFloat(m[1]);\n return m[2] === 'ms' ? n : m[2] === 'min' ? n * 60000 : m[2] === 'h' ? n * 3600000 : n * 1000;\n}\n\ntype Interp = (a: string, b: string, p: number) => string;\nconst numList = (s: string) => s.trim().split(/[\\s,]+/).filter(Boolean).map(Number);\nconst lerpNumbers: Interp = (a, b, p) => {\n const x = numList(a), y = numList(b);\n return x.map((v, i) => r3(v + ((y[i] ?? v) - v) * p)).join(' ');\n};\nconst lerpAny: Interp = (a, b, p) => {\n try {\n const x = parseValue(a), y = parseValue(b);\n if (x.kind === 'str' || y.kind === 'str') throw 0; // number lists / keywords: handled below\n if (x.kind === 'col' || y.kind === 'col') {\n const ca = x.kind === 'col' ? x.c : [0, 0, 0, 1], cb = y.kind === 'col' ? y.c : [0, 0, 0, 1];\n const c = ca.map((v, i) => v + (cb[i] - v) * p);\n return `rgba(${Math.round(c[0])},${Math.round(c[1])},${Math.round(c[2])},${r3(c[3])})`;\n }\n return `${r3(x.v + (y.v - x.v) * p)}${y.u || x.u}`;\n } catch {\n if (/^[-\\d.\\s,e]+$/i.test(a) && /^[-\\d.\\s,e]+$/i.test(b)) return lerpNumbers(a, b, p);\n return p < 0.5 ? a : b;\n }\n};\n\nexport interface SmilAnimationInfo {\n kind: 'animate' | 'set' | 'animateTransform' | 'animateMotion';\n target: Element;\n attribute: string;\n begin: number;\n dur: number;\n repeat: number;\n freeze: boolean;\n values: string[];\n keyTimes: number[];\n calcMode: string;\n type?: string;\n}\n\n/** Read the SMIL animation elements of an SVG (without playing them). */\nexport function readSmil(svg: Element): SmilAnimationInfo[] {\n const out: SmilAnimationInfo[] = [];\n svg.querySelectorAll('animate, set, animateTransform, animateMotion').forEach((el) => {\n const kind = el.localName as SmilAnimationInfo['kind'];\n const href = el.getAttribute('href') || el.getAttribute('xlink:href');\n const target = href ? svg.querySelector(href) : el.parentElement;\n if (!target) return;\n const begin = smilTime((el.getAttribute('begin') || '0').split(';')[0]);\n const dur = kind === 'set' ? smilTime(el.getAttribute('dur')) || 0 : smilTime(el.getAttribute('dur'));\n const rc = el.getAttribute('repeatCount');\n const rd = smilTime(el.getAttribute('repeatDur'));\n let repeat = rc === 'indefinite' || el.getAttribute('repeatDur') === 'indefinite' ? -1 : rc ? Math.max(0, Math.ceil(parseFloat(rc)) - 1) : 0;\n if (!rc && rd > 0 && dur > 0) repeat = Math.ceil(rd / dur) - 1;\n const attribute = kind === 'animateTransform' ? 'transform' : kind === 'animateMotion' ? 'transform' : el.getAttribute('attributeName') || '';\n let values: string[];\n const v = el.getAttribute('values');\n if (kind === 'set') values = [el.getAttribute('to') || ''];\n else if (kind === 'animateMotion') {\n const mp = el.querySelector('mpath');\n const ref = mp && (mp.getAttribute('href') || mp.getAttribute('xlink:href'));\n values = [(ref && svg.querySelector(ref)?.getAttribute('d')) || el.getAttribute('path') || ''];\n } else if (v) values = v.split(';').map((s) => s.trim()).filter((s) => s !== '');\n else {\n const base = target.getAttribute(attribute) || (attribute === 'opacity' ? '1' : '0');\n const from = el.getAttribute('from') ?? base;\n const by = el.getAttribute('by');\n const to = el.getAttribute('to') ?? (by !== null ? numList(from).map((x, i) => x + (numList(by)[i] ?? 0)).join(' ') : base);\n values = [from, to];\n }\n const kt = el.getAttribute('keyTimes');\n out.push({ kind, target, attribute, begin: Number.isFinite(begin) ? begin : 0, dur: Number.isFinite(dur) ? dur : 0, repeat, freeze: el.getAttribute('fill') === 'freeze' || (kind === 'set' && !el.getAttribute('dur')) /* a <set> without dur holds its value */, values, keyTimes: kt ? kt.split(';').map(Number) : [], calcMode: el.getAttribute('calcMode') || (kind === 'animateMotion' ? 'paced' : 'linear'), type: el.getAttribute('type') || undefined, ...(el.getAttribute('rotate') ? { rotate: el.getAttribute('rotate') } : {}), ...(el.getAttribute('keySplines') ? { keySplines: el.getAttribute('keySplines') } : {}) } as SmilAnimationInfo);\n });\n return out;\n}\n\n/** One SMIL animation replayed as a runtime Playable. */\nclass SmilTrack extends Playable {\n private interp: Interp;\n private splines: Ease[];\n private base: string | null;\n private morphs: ((p: number) => string)[] = [];\n constructor(private info: SmilAnimationInfo & { rotate?: string; keySplines?: string }) {\n super({ repeat: info.repeat });\n this.base = info.target.getAttribute(info.attribute);\n this.interp = info.attribute === 'd' ? (a, b, p) => this.morph(a, b)(p) : info.kind === 'animateTransform' ? lerpNumbers : lerpAny;\n this.splines = (info.keySplines || '').split(';').filter((s) => s.trim()).map((s) => { const n = numList(s); return cubicBezier(n[0], n[1], n[2], n[3]); });\n }\n private morph(a: string, b: string): (p: number) => string {\n const key = a + '|' + b;\n const hit = (this.morphs as any)[key];\n return hit || ((this.morphs as any)[key] = morphPath(a, b));\n }\n get duration(): number {\n return this.info.dur;\n }\n private write(v: string): void {\n const { kind, target, type } = this.info;\n if (kind === 'animateTransform') target.setAttribute('transform', `${type || 'translate'}(${v})`);\n else target.setAttribute(this.info.attribute, v);\n }\n protected renderLocal(ms: number, ended: boolean): void {\n const i = this.info;\n if (ended && ms >= i.dur && !i.freeze && this.repeat >= 0) {\n if (this.base === null) i.target.removeAttribute(i.attribute);\n else i.target.setAttribute(i.attribute, this.base);\n return;\n }\n const p = i.dur ? Math.min(1, ms / i.dur) : 1;\n if (i.kind === 'set') return this.write(i.values[0]);\n if (i.kind === 'animateMotion') {\n const d = i.values[0];\n const len = pathLength(d);\n const pt = pointAtLength(d, len * p);\n const rot = (i as any).rotate;\n const a = rot === 'auto' ? pt.angle : rot === 'auto-reverse' ? pt.angle + 180 : parseFloat(rot) || 0;\n i.target.setAttribute('transform', `translate(${r3(pt.x)} ${r3(pt.y)})${a ? ` rotate(${r3(a)})` : ''}`);\n return;\n }\n const vals = i.values;\n if (vals.length === 1) return this.write(vals[0]);\n const kt = i.keyTimes.length === vals.length ? i.keyTimes : vals.map((_, k) => k / (vals.length - 1));\n if (i.calcMode === 'discrete') {\n const kd = i.keyTimes.length === vals.length ? i.keyTimes : vals.map((_, k) => k / vals.length);\n let k = 0;\n while (k < kd.length - 1 && p >= kd[k + 1]) k++;\n return this.write(vals[k]);\n }\n let k = 0;\n while (k < kt.length - 2 && p > kt[k + 1]) k++;\n const span = kt[k + 1] - kt[k] || 1;\n let local = Math.min(1, Math.max(0, (p - kt[k]) / span));\n if (i.calcMode === 'spline' && this.splines[k]) local = this.splines[k](local);\n this.write(this.interp(vals[k], vals[k + 1], local));\n }\n}\n\nexport interface SmilPlayer {\n timeline: Timeline;\n animations: SmilAnimationInfo[];\n /** Put the original SMIL elements back (the browser's clock takes over again). */\n restore(): void;\n}\n\n/**\n * Replay an SVG's SMIL animations with the runtime. The SMIL elements are\n * detached while the runtime drives the attributes (call `restore()` to put\n * them back). Playing unless `paused: true`.\n */\nexport function playSmil(svg: Element, o: { paused?: boolean; timeScale?: number } = {}): SmilPlayer {\n const animations = readSmil(svg);\n const els = Array.from(svg.querySelectorAll('animate, set, animateTransform, animateMotion'));\n const parents = els.map((e) => [e, e.parentNode, e.nextSibling] as const);\n els.forEach((e) => e.remove());\n const tl = new Timeline({});\n for (const a of animations) tl.add(new SmilTrack(a), a.begin);\n if (o.timeScale) tl.timeScale = o.timeScale;\n if (!o.paused) tl.play();\n return {\n timeline: tl,\n animations,\n restore() {\n tl.kill();\n parents.forEach(([e, p, next]) => p?.insertBefore(e, next && next.parentNode === p ? next : null));\n },\n };\n}\n\nexport interface FormatSvgApi {\n parsePath: typeof parsePath;\n flattenPath: typeof flattenPath;\n pathLength: typeof pathLength;\n pointAtLength: typeof pointAtLength;\n samplePath: typeof samplePath;\n morphPath: typeof morphPath;\n readSmil: typeof readSmil;\n playSmil: typeof playSmil;\n smilTime: typeof smilTime;\n}\n\n/** The module object for `use(formatSvg)`. */\nexport const formatSvg: RuntimeModule<FormatSvgApi> = { id: 'format-svg', version: RUNTIME_VERSION, requires: ['core'], api: { parsePath, flattenPath, pathLength, pointAtLength, samplePath, morphPath, readSmil, playSmil, smilTime } };\n","// CDN build: load runtime.iife.js first, then this file → registers motionary/runtime/format-svg and adds its API to window.MotionaryRuntime.\nimport { register } from '../registry';\nimport { formatSvg } from '../format-svg';\nexport * from '../format-svg';\nregister(formatSvg);\n"],"names":["ARGS","M","L","H","V","C","S","Q","T","A","Z","parsePath","d","toks","match","out","i","cmd","x","y","sx","sy","lc","lq","num","parseFloat","length","test","Error","toUpperCase","rel","n","undefined","push","a","k","some","v","Number","isNaN","ox","oy","c","c1","arcPoints","x1","y1","rx","ry","phiDeg","large","sweep","x2","y2","seg","Math","abs","phi","PI","cos","sin","dx","dy","xp","yp","lam","sqrt","den","co","max","cxp","cyp","cx","cy","ang","ux","uy","vx","vy","atan2","t1","dt","ceil","pts","t","flattenPath","segments","cmds","subs","cur","u","last","dist","b","hypot","pathLength","reduce","s","pl","slice","p","pointAtLength","len","flat","acc","min","angle","samplePath","total","Array","from","_","r3","round","closed","trim","morphPath","to","o","points","B","isClosed","best","bestD","Infinity","sum","map","join","smilTime","NaN","m","exec","numList","split","filter","Boolean","lerpNumbers","lerpAny","parseValue","kind","ca","cb","readSmil","svg","querySelectorAll","forEach","el","localName","href","getAttribute","target","querySelector","parentElement","begin","dur","rc","rd","repeat","attribute","values","mp","ref","base","by","kt","isFinite","freeze","keyTimes","calcMode","type","rotate","keySplines","SmilTrack","Playable","constructor","info","super","this","morphs","interp","morph","splines","cubicBezier","key","duration","write","setAttribute","renderLocal","ms","ended","removeAttribute","pt","rot","vals","kd","span","local","playSmil","animations","els","parents","e","parentNode","nextSibling","remove","tl","Timeline","add","timeScale","paused","play","timeline","restore","kill","next","insertBefore","formatSvg","id","version","RUNTIME_VERSION","requires","api","register"],"mappings":"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"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
|
-
import { R as RUNTIME_VERSION } from '../chunks/registry-
|
|
2
|
-
import { T as Timeline, P as Playable,
|
|
3
|
-
import '../chunks/
|
|
1
|
+
import { R as RUNTIME_VERSION } from '../chunks/registry-CT-TT_bx.js';
|
|
2
|
+
import { T as Timeline, P as Playable, p as parseValue } from '../chunks/tween-BcejKpsx.js';
|
|
3
|
+
import { c as cubicBezier } from '../chunks/ease-XN8_0sXu.js';
|
|
4
|
+
import '../chunks/ticker-C8lSGml9.js';
|
|
4
5
|
|
|
5
6
|
/**
|
|
6
7
|
* `motionary/runtime/format-svg` (10.2) — SVG animation with the runtime
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"format-svg.js","sources":["../../src/runtime/format-svg.ts"],"sourcesContent":["/**\n * `motionary/runtime/format-svg` (10.2) — SVG animation with the runtime\n * (original implementation):\n *\n * - **Path geometry** without the DOM (SSR / workers): `parsePath(d)` (all\n * commands, relative + absolute, arcs), `flattenPath(d)`, `pathLength(d)`,\n * `pointAtLength(d, len)`, `samplePath(d, n)`.\n * - **Path morphing**: `morphPath(from, to, { points })` → `(p) => d` — both\n * paths are resampled to the same number of points (any command mix, any\n * point counts), aligned to the closest start point, then interpolated.\n * - **SMIL playback**: `playSmil(svg)` reads `<animate>`, `<set>`,\n * `<animateTransform>` (translate / scale / rotate / skewX / skewY) and\n * `<animateMotion>` (`path` or `<mpath>`, `rotate=\"auto\"`) — `from` / `to` /\n * `by` / `values`, `keyTimes`, `keySplines` (`calcMode=\"spline\"`),\n * `calcMode=\"discrete\"`, `dur`, numeric `begin` offsets, `repeatCount`\n * (incl. `indefinite`), `fill=\"freeze\"` — and replays them as a runtime\n * timeline (seek, scrub, reverse, timeScale) instead of the browser's SMIL clock.\n * - CSS-animated SVG: use `motionary/runtime/format-css` (`@keyframes` in the SVG's `<style>`).\n *\n * Not supported (documented): event / syncbase `begin` values (`click`,\n * `a.end`), `accumulate` / `additive=\"sum\"`, `<animateColor>` (deprecated).\n */\nimport { RUNTIME_VERSION, type RuntimeModule } from './registry';\nimport { Playable, Timeline, parseValue } from './tween';\nimport { cubicBezier, type Ease } from './ease';\n\ntype Pt = [number, number];\nexport type PathCommand = [string, ...number[]];\n\nconst ARGS: Record<string, number> = { M: 2, L: 2, H: 1, V: 1, C: 6, S: 4, Q: 4, T: 2, A: 7, Z: 0 };\n\n/** Parse path data into absolute commands (M L C Q A Z; H/V/S/T expanded). */\nexport function parsePath(d: string): PathCommand[] {\n const toks = d.match(/[a-zA-Z]|[-+]?(?:\\d*\\.\\d+|\\d+\\.?)(?:[eE][-+]?\\d+)?/g) || [];\n const out: PathCommand[] = [];\n let i = 0, cmd = '', x = 0, y = 0, sx = 0, sy = 0, lc: Pt | null = null, lq: Pt | null = null;\n const num = () => parseFloat(toks[i++]);\n while (i < toks.length) {\n if (/[a-zA-Z]/.test(toks[i])) cmd = toks[i++];\n else if (!cmd) throw new Error('[motionary] format-svg: path must start with a command');\n const C = cmd.toUpperCase(), rel = cmd !== C;\n const n = ARGS[C];\n if (n === undefined) throw new Error(`[motionary] format-svg: unknown path command \"${cmd}\"`);\n if (C === 'Z') {\n out.push(['Z']);\n x = sx; y = sy; lc = lq = null;\n continue;\n }\n const a: number[] = [];\n for (let k = 0; k < n; k++) a.push(num());\n if (a.some((v) => Number.isNaN(v))) break;\n const ox = rel ? x : 0, oy = rel ? y : 0;\n switch (C) {\n case 'M': x = a[0] + ox; y = a[1] + oy; sx = x; sy = y; out.push(['M', x, y]); cmd = rel ? 'l' : 'L'; lc = lq = null; break;\n case 'L': x = a[0] + ox; y = a[1] + oy; out.push(['L', x, y]); lc = lq = null; break;\n case 'H': x = a[0] + ox; out.push(['L', x, y]); lc = lq = null; break;\n case 'V': y = a[0] + (rel ? y : 0); out.push(['L', x, y]); lc = lq = null; break;\n case 'C': { const c = [a[0] + ox, a[1] + oy, a[2] + ox, a[3] + oy, a[4] + ox, a[5] + oy]; out.push(['C', ...c]); lc = [c[2], c[3]]; x = c[4]; y = c[5]; lq = null; break; }\n case 'S': { const c1: Pt = lc ? [2 * x - lc[0], 2 * y - lc[1]] : [x, y]; const c = [a[0] + ox, a[1] + oy, a[2] + ox, a[3] + oy]; out.push(['C', c1[0], c1[1], ...c]); lc = [c[0], c[1]]; x = c[2]; y = c[3]; lq = null; break; }\n case 'Q': { const c = [a[0] + ox, a[1] + oy, a[2] + ox, a[3] + oy]; out.push(['Q', ...c]); lq = [c[0], c[1]]; x = c[2]; y = c[3]; lc = null; break; }\n case 'T': { const c1: Pt = lq ? [2 * x - lq[0], 2 * y - lq[1]] : [x, y]; x = a[0] + ox; y = a[1] + oy; out.push(['Q', c1[0], c1[1], x, y]); lq = c1; lc = null; break; }\n case 'A': { x = a[5] + ox; y = a[6] + oy; out.push(['A', a[0], a[1], a[2], a[3], a[4], x, y]); lc = lq = null; break; }\n }\n }\n return out;\n}\n\n/** Endpoint-parameterised arc → points (SVG spec F.6.5 conversion). */\nfunction arcPoints(x1: number, y1: number, rx: number, ry: number, phiDeg: number, large: number, sweep: number, x2: number, y2: number, seg: number): Pt[] {\n if (!rx || !ry) return [[x2, y2]];\n rx = Math.abs(rx); ry = Math.abs(ry);\n const phi = (phiDeg * Math.PI) / 180, cos = Math.cos(phi), sin = Math.sin(phi);\n const dx = (x1 - x2) / 2, dy = (y1 - y2) / 2;\n const xp = cos * dx + sin * dy, yp = -sin * dx + cos * dy;\n const lam = (xp * xp) / (rx * rx) + (yp * yp) / (ry * ry);\n if (lam > 1) { rx *= Math.sqrt(lam); ry *= Math.sqrt(lam); }\n const num = rx * rx * ry * ry - rx * rx * yp * yp - ry * ry * xp * xp;\n const den = rx * rx * yp * yp + ry * ry * xp * xp;\n let co = Math.sqrt(Math.max(0, num / den));\n if (large === sweep) co = -co;\n const cxp = (co * rx * yp) / ry, cyp = (-co * ry * xp) / rx;\n const cx = cos * cxp - sin * cyp + (x1 + x2) / 2, cy = sin * cxp + cos * cyp + (y1 + y2) / 2;\n const ang = (ux: number, uy: number, vx: number, vy: number) => Math.atan2(ux * vy - uy * vx, ux * vx + uy * vy);\n const t1 = ang(1, 0, (xp - cxp) / rx, (yp - cyp) / ry);\n let dt = ang((xp - cxp) / rx, (yp - cyp) / ry, (-xp - cxp) / rx, (-yp - cyp) / ry);\n if (!sweep && dt > 0) dt -= 2 * Math.PI;\n if (sweep && dt < 0) dt += 2 * Math.PI;\n const n = Math.max(2, Math.ceil((Math.abs(dt) / (Math.PI / 2)) * seg));\n const pts: Pt[] = [];\n for (let k = 1; k <= n; k++) {\n const t = t1 + (dt * k) / n;\n pts.push([cx + rx * Math.cos(t) * cos - ry * Math.sin(t) * sin, cy + rx * Math.cos(t) * sin + ry * Math.sin(t) * cos]);\n }\n return pts;\n}\n\n/** Flatten a path into polylines (one per subpath); `segments` points per curve. */\nexport function flattenPath(d: string | PathCommand[], segments = 16): Pt[][] {\n const cmds = typeof d === 'string' ? parsePath(d) : d;\n const subs: Pt[][] = [];\n let cur: Pt[] = [], x = 0, y = 0;\n for (const c of cmds) {\n const [k, ...a] = c;\n if (k === 'M') { if (cur.length) subs.push(cur); cur = [[a[0], a[1]]]; x = a[0]; y = a[1]; continue; }\n if (!cur.length) cur = [[x, y]];\n if (k === 'L') cur.push([a[0], a[1]]);\n else if (k === 'C') for (let i = 1; i <= segments; i++) { const t = i / segments, u = 1 - t; cur.push([u * u * u * x + 3 * u * u * t * a[0] + 3 * u * t * t * a[2] + t * t * t * a[4], u * u * u * y + 3 * u * u * t * a[1] + 3 * u * t * t * a[3] + t * t * t * a[5]]); }\n else if (k === 'Q') for (let i = 1; i <= segments; i++) { const t = i / segments, u = 1 - t; cur.push([u * u * x + 2 * u * t * a[0] + t * t * a[2], u * u * y + 2 * u * t * a[1] + t * t * a[3]]); }\n else if (k === 'A') cur.push(...arcPoints(x, y, a[0], a[1], a[2], a[3], a[4], a[5], a[6], segments / 4));\n else if (k === 'Z') { cur.push([cur[0][0], cur[0][1]]); subs.push(cur); x = cur[0][0]; y = cur[0][1]; cur = []; continue; }\n const last = cur[cur.length - 1];\n x = last[0]; y = last[1];\n }\n if (cur.length) subs.push(cur);\n return subs;\n}\n\nconst dist = (a: Pt, b: Pt) => Math.hypot(b[0] - a[0], b[1] - a[1]);\n\n/** Total length of a path. */\nexport function pathLength(d: string | PathCommand[]): number {\n return flattenPath(d, 48).reduce((s, pl) => s + pl.slice(1).reduce((t, p, i) => t + dist(pl[i], p), 0), 0);\n}\n\n/** Point (and tangent angle, degrees) at a distance along the path. */\nexport function pointAtLength(d: string | PathCommand[], len: number): { x: number; y: number; angle: number } {\n const pl = flattenPath(d, 48).flat();\n let acc = 0;\n for (let i = 1; i < pl.length; i++) {\n const s = dist(pl[i - 1], pl[i]);\n if (acc + s >= len || i === pl.length - 1) {\n const t = s ? Math.min(1, Math.max(0, (len - acc) / s)) : 0;\n return { x: pl[i - 1][0] + (pl[i][0] - pl[i - 1][0]) * t, y: pl[i - 1][1] + (pl[i][1] - pl[i - 1][1]) * t, angle: (Math.atan2(pl[i][1] - pl[i - 1][1], pl[i][0] - pl[i - 1][0]) * 180) / Math.PI };\n }\n acc += s;\n }\n return { x: pl[0]?.[0] ?? 0, y: pl[0]?.[1] ?? 0, angle: 0 };\n}\n\n/** `n` points evenly spaced along the path (all subpaths joined). */\nexport function samplePath(d: string | PathCommand[], n = 64): Pt[] {\n const total = pathLength(d);\n return Array.from({ length: n }, (_, i) => {\n const p = pointAtLength(d, (total * i) / (n - 1 || 1));\n return [p.x, p.y] as Pt;\n });\n}\n\nconst r3 = (v: number) => Math.round(v * 1000) / 1000;\nconst closed = (d: string) => /z\\s*$/i.test(d.trim());\n\n/**\n * Morph between two paths of any shape: `const f = morphPath(a, b); el.setAttribute('d', f(0.5))`.\n * Closed paths are rotated so their start points line up (less twisting).\n */\nexport function morphPath(from: string, to: string, o: { points?: number } = {}): (p: number) => string {\n const n = o.points ?? 64;\n const A = samplePath(from, n);\n let B = samplePath(to, n);\n const isClosed = closed(from) && closed(to);\n if (isClosed) {\n let best = 0, bestD = Infinity;\n for (let s = 0; s < n; s++) {\n let sum = 0;\n for (let i = 0; i < n; i += 4) sum += dist(A[i], B[(i + s) % n]);\n if (sum < bestD) { bestD = sum; best = s; }\n }\n B = B.map((_, i) => B[(i + best) % n]);\n }\n return (p) => {\n if (p <= 0) return from;\n if (p >= 1) return to;\n return 'M' + A.map((a, i) => `${r3(a[0] + (B[i][0] - a[0]) * p)} ${r3(a[1] + (B[i][1] - a[1]) * p)}`).join('L') + (isClosed ? 'Z' : '');\n };\n}\n\n/* ------------------------------------------------------------------ SMIL */\n\n/** '2s', '150ms', '1.5', 'indefinite' → ms (NaN for indefinite / unsupported). */\nexport function smilTime(v: string | null | undefined): number {\n if (!v) return NaN;\n const s = v.trim();\n const m = /^(-?[\\d.]+)(ms|s|min|h)?$/.exec(s);\n if (!m) {\n const c = /^(?:(\\d+):)?(\\d+):(\\d+(?:\\.\\d+)?)$/.exec(s);\n return c ? ((+(c[1] || 0) * 60 + +c[2]) * 60 + +c[3]) * 1000 : NaN;\n }\n const n = parseFloat(m[1]);\n return m[2] === 'ms' ? n : m[2] === 'min' ? n * 60000 : m[2] === 'h' ? n * 3600000 : n * 1000;\n}\n\ntype Interp = (a: string, b: string, p: number) => string;\nconst numList = (s: string) => s.trim().split(/[\\s,]+/).filter(Boolean).map(Number);\nconst lerpNumbers: Interp = (a, b, p) => {\n const x = numList(a), y = numList(b);\n return x.map((v, i) => r3(v + ((y[i] ?? v) - v) * p)).join(' ');\n};\nconst lerpAny: Interp = (a, b, p) => {\n try {\n const x = parseValue(a), y = parseValue(b);\n if ((x as { kind: string }).kind === 'str' || (y as { kind: string }).kind === 'str') throw 0; // number lists / keywords: handled below\n if (x.kind === 'col' || y.kind === 'col') {\n const ca = x.kind === 'col' ? x.c : [0, 0, 0, 1], cb = y.kind === 'col' ? y.c : [0, 0, 0, 1];\n const c = ca.map((v, i) => v + (cb[i] - v) * p);\n return `rgba(${Math.round(c[0])},${Math.round(c[1])},${Math.round(c[2])},${r3(c[3])})`;\n }\n return `${r3(x.v + (y.v - x.v) * p)}${y.u || x.u}`;\n } catch {\n if (/^[-\\d.\\s,e]+$/i.test(a) && /^[-\\d.\\s,e]+$/i.test(b)) return lerpNumbers(a, b, p);\n return p < 0.5 ? a : b;\n }\n};\n\nexport interface SmilAnimationInfo {\n kind: 'animate' | 'set' | 'animateTransform' | 'animateMotion';\n target: Element;\n attribute: string;\n begin: number;\n dur: number;\n repeat: number;\n freeze: boolean;\n values: string[];\n keyTimes: number[];\n calcMode: string;\n type?: string;\n}\n\n/** Read the SMIL animation elements of an SVG (without playing them). */\nexport function readSmil(svg: Element): SmilAnimationInfo[] {\n const out: SmilAnimationInfo[] = [];\n svg.querySelectorAll('animate, set, animateTransform, animateMotion').forEach((el) => {\n const kind = el.localName as SmilAnimationInfo['kind'];\n const href = el.getAttribute('href') || el.getAttribute('xlink:href');\n const target = href ? svg.querySelector(href) : el.parentElement;\n if (!target) return;\n const begin = smilTime((el.getAttribute('begin') || '0').split(';')[0]);\n const dur = kind === 'set' ? smilTime(el.getAttribute('dur')) || 0 : smilTime(el.getAttribute('dur'));\n const rc = el.getAttribute('repeatCount');\n const rd = smilTime(el.getAttribute('repeatDur'));\n let repeat = rc === 'indefinite' || el.getAttribute('repeatDur') === 'indefinite' ? -1 : rc ? Math.max(0, Math.ceil(parseFloat(rc)) - 1) : 0;\n if (!rc && rd > 0 && dur > 0) repeat = Math.ceil(rd / dur) - 1;\n const attribute = kind === 'animateTransform' ? 'transform' : kind === 'animateMotion' ? 'transform' : el.getAttribute('attributeName') || '';\n let values: string[];\n const v = el.getAttribute('values');\n if (kind === 'set') values = [el.getAttribute('to') || ''];\n else if (kind === 'animateMotion') {\n const mp = el.querySelector('mpath');\n const ref = mp && (mp.getAttribute('href') || mp.getAttribute('xlink:href'));\n values = [(ref && svg.querySelector(ref)?.getAttribute('d')) || el.getAttribute('path') || ''];\n } else if (v) values = v.split(';').map((s) => s.trim()).filter((s) => s !== '');\n else {\n const base = target.getAttribute(attribute) || (attribute === 'opacity' ? '1' : '0');\n const from = el.getAttribute('from') ?? base;\n const by = el.getAttribute('by');\n const to = el.getAttribute('to') ?? (by !== null ? numList(from).map((x, i) => x + (numList(by)[i] ?? 0)).join(' ') : base);\n values = [from, to];\n }\n const kt = el.getAttribute('keyTimes');\n out.push({ kind, target, attribute, begin: Number.isFinite(begin) ? begin : 0, dur: Number.isFinite(dur) ? dur : 0, repeat, freeze: el.getAttribute('fill') === 'freeze' || (kind === 'set' && !el.getAttribute('dur')) /* a <set> without dur holds its value */, values, keyTimes: kt ? kt.split(';').map(Number) : [], calcMode: el.getAttribute('calcMode') || (kind === 'animateMotion' ? 'paced' : 'linear'), type: el.getAttribute('type') || undefined, ...(el.getAttribute('rotate') ? { rotate: el.getAttribute('rotate') } : {}), ...(el.getAttribute('keySplines') ? { keySplines: el.getAttribute('keySplines') } : {}) } as SmilAnimationInfo);\n });\n return out;\n}\n\n/** One SMIL animation replayed as a runtime Playable. */\nclass SmilTrack extends Playable {\n private interp: Interp;\n private splines: Ease[];\n private base: string | null;\n private morphs: ((p: number) => string)[] = [];\n constructor(private info: SmilAnimationInfo & { rotate?: string; keySplines?: string }) {\n super({ repeat: info.repeat });\n this.base = info.target.getAttribute(info.attribute);\n this.interp = info.attribute === 'd' ? (a, b, p) => this.morph(a, b)(p) : info.kind === 'animateTransform' ? lerpNumbers : lerpAny;\n this.splines = (info.keySplines || '').split(';').filter((s) => s.trim()).map((s) => { const n = numList(s); return cubicBezier(n[0], n[1], n[2], n[3]); });\n }\n private morph(a: string, b: string): (p: number) => string {\n const key = a + '|' + b;\n const hit = (this.morphs as any)[key];\n return hit || ((this.morphs as any)[key] = morphPath(a, b));\n }\n get duration(): number {\n return this.info.dur;\n }\n private write(v: string): void {\n const { kind, target, type } = this.info;\n if (kind === 'animateTransform') target.setAttribute('transform', `${type || 'translate'}(${v})`);\n else target.setAttribute(this.info.attribute, v);\n }\n protected renderLocal(ms: number, ended: boolean): void {\n const i = this.info;\n if (ended && ms >= i.dur && !i.freeze && this.repeat >= 0) {\n if (this.base === null) i.target.removeAttribute(i.attribute);\n else i.target.setAttribute(i.attribute, this.base);\n return;\n }\n const p = i.dur ? Math.min(1, ms / i.dur) : 1;\n if (i.kind === 'set') return this.write(i.values[0]);\n if (i.kind === 'animateMotion') {\n const d = i.values[0];\n const len = pathLength(d);\n const pt = pointAtLength(d, len * p);\n const rot = (i as any).rotate;\n const a = rot === 'auto' ? pt.angle : rot === 'auto-reverse' ? pt.angle + 180 : parseFloat(rot) || 0;\n i.target.setAttribute('transform', `translate(${r3(pt.x)} ${r3(pt.y)})${a ? ` rotate(${r3(a)})` : ''}`);\n return;\n }\n const vals = i.values;\n if (vals.length === 1) return this.write(vals[0]);\n const kt = i.keyTimes.length === vals.length ? i.keyTimes : vals.map((_, k) => k / (vals.length - 1));\n if (i.calcMode === 'discrete') {\n const kd = i.keyTimes.length === vals.length ? i.keyTimes : vals.map((_, k) => k / vals.length);\n let k = 0;\n while (k < kd.length - 1 && p >= kd[k + 1]) k++;\n return this.write(vals[k]);\n }\n let k = 0;\n while (k < kt.length - 2 && p > kt[k + 1]) k++;\n const span = kt[k + 1] - kt[k] || 1;\n let local = Math.min(1, Math.max(0, (p - kt[k]) / span));\n if (i.calcMode === 'spline' && this.splines[k]) local = this.splines[k](local);\n this.write(this.interp(vals[k], vals[k + 1], local));\n }\n}\n\nexport interface SmilPlayer {\n timeline: Timeline;\n animations: SmilAnimationInfo[];\n /** Put the original SMIL elements back (the browser's clock takes over again). */\n restore(): void;\n}\n\n/**\n * Replay an SVG's SMIL animations with the runtime. The SMIL elements are\n * detached while the runtime drives the attributes (call `restore()` to put\n * them back). Playing unless `paused: true`.\n */\nexport function playSmil(svg: Element, o: { paused?: boolean; timeScale?: number } = {}): SmilPlayer {\n const animations = readSmil(svg);\n const els = Array.from(svg.querySelectorAll('animate, set, animateTransform, animateMotion'));\n const parents = els.map((e) => [e, e.parentNode, e.nextSibling] as const);\n els.forEach((e) => e.remove());\n const tl = new Timeline({});\n for (const a of animations) tl.add(new SmilTrack(a), a.begin);\n if (o.timeScale) tl.timeScale = o.timeScale;\n if (!o.paused) tl.play();\n return {\n timeline: tl,\n animations,\n restore() {\n tl.kill();\n parents.forEach(([e, p, next]) => p?.insertBefore(e, next && next.parentNode === p ? next : null));\n },\n };\n}\n\nexport interface FormatSvgApi {\n parsePath: typeof parsePath;\n flattenPath: typeof flattenPath;\n pathLength: typeof pathLength;\n pointAtLength: typeof pointAtLength;\n samplePath: typeof samplePath;\n morphPath: typeof morphPath;\n readSmil: typeof readSmil;\n playSmil: typeof playSmil;\n smilTime: typeof smilTime;\n}\n\n/** The module object for `use(formatSvg)`. */\nexport const formatSvg: RuntimeModule<FormatSvgApi> = { id: 'format-svg', version: RUNTIME_VERSION, requires: ['core'], api: { parsePath, flattenPath, pathLength, pointAtLength, samplePath, morphPath, readSmil, playSmil, smilTime } };\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"format-svg.js","sources":["../../src/runtime/format-svg.ts"],"sourcesContent":["/**\n * `motionary/runtime/format-svg` (10.2) — SVG animation with the runtime\n * (original implementation):\n *\n * - **Path geometry** without the DOM (SSR / workers): `parsePath(d)` (all\n * commands, relative + absolute, arcs), `flattenPath(d)`, `pathLength(d)`,\n * `pointAtLength(d, len)`, `samplePath(d, n)`.\n * - **Path morphing**: `morphPath(from, to, { points })` → `(p) => d` — both\n * paths are resampled to the same number of points (any command mix, any\n * point counts), aligned to the closest start point, then interpolated.\n * - **SMIL playback**: `playSmil(svg)` reads `<animate>`, `<set>`,\n * `<animateTransform>` (translate / scale / rotate / skewX / skewY) and\n * `<animateMotion>` (`path` or `<mpath>`, `rotate=\"auto\"`) — `from` / `to` /\n * `by` / `values`, `keyTimes`, `keySplines` (`calcMode=\"spline\"`),\n * `calcMode=\"discrete\"`, `dur`, numeric `begin` offsets, `repeatCount`\n * (incl. `indefinite`), `fill=\"freeze\"` — and replays them as a runtime\n * timeline (seek, scrub, reverse, timeScale) instead of the browser's SMIL clock.\n * - CSS-animated SVG: use `motionary/runtime/format-css` (`@keyframes` in the SVG's `<style>`).\n *\n * Not supported (documented): event / syncbase `begin` values (`click`,\n * `a.end`), `accumulate` / `additive=\"sum\"`, `<animateColor>` (deprecated).\n */\nimport { RUNTIME_VERSION, type RuntimeModule } from './registry';\nimport { Playable, Timeline, parseValue } from './tween';\nimport { cubicBezier, type Ease } from './ease';\n\ntype Pt = [number, number];\nexport type PathCommand = [string, ...number[]];\n\nconst ARGS: Record<string, number> = { M: 2, L: 2, H: 1, V: 1, C: 6, S: 4, Q: 4, T: 2, A: 7, Z: 0 };\n\n/** Parse path data into absolute commands (M L C Q A Z; H/V/S/T expanded). */\nexport function parsePath(d: string): PathCommand[] {\n const toks = d.match(/[a-zA-Z]|[-+]?(?:\\d*\\.\\d+|\\d+\\.?)(?:[eE][-+]?\\d+)?/g) || [];\n const out: PathCommand[] = [];\n let i = 0, cmd = '', x = 0, y = 0, sx = 0, sy = 0, lc: Pt | null = null, lq: Pt | null = null;\n const num = () => parseFloat(toks[i++]);\n while (i < toks.length) {\n if (/[a-zA-Z]/.test(toks[i])) cmd = toks[i++];\n else if (!cmd) throw new Error('[motionary] format-svg: path must start with a command');\n const C = cmd.toUpperCase(), rel = cmd !== C;\n const n = ARGS[C];\n if (n === undefined) throw new Error(`[motionary] format-svg: unknown path command \"${cmd}\"`);\n if (C === 'Z') {\n out.push(['Z']);\n x = sx; y = sy; lc = lq = null;\n continue;\n }\n const a: number[] = [];\n for (let k = 0; k < n; k++) a.push(num());\n if (a.some((v) => Number.isNaN(v))) break;\n const ox = rel ? x : 0, oy = rel ? y : 0;\n switch (C) {\n case 'M': x = a[0] + ox; y = a[1] + oy; sx = x; sy = y; out.push(['M', x, y]); cmd = rel ? 'l' : 'L'; lc = lq = null; break;\n case 'L': x = a[0] + ox; y = a[1] + oy; out.push(['L', x, y]); lc = lq = null; break;\n case 'H': x = a[0] + ox; out.push(['L', x, y]); lc = lq = null; break;\n case 'V': y = a[0] + (rel ? y : 0); out.push(['L', x, y]); lc = lq = null; break;\n case 'C': { const c = [a[0] + ox, a[1] + oy, a[2] + ox, a[3] + oy, a[4] + ox, a[5] + oy]; out.push(['C', ...c]); lc = [c[2], c[3]]; x = c[4]; y = c[5]; lq = null; break; }\n case 'S': { const c1: Pt = lc ? [2 * x - lc[0], 2 * y - lc[1]] : [x, y]; const c = [a[0] + ox, a[1] + oy, a[2] + ox, a[3] + oy]; out.push(['C', c1[0], c1[1], ...c]); lc = [c[0], c[1]]; x = c[2]; y = c[3]; lq = null; break; }\n case 'Q': { const c = [a[0] + ox, a[1] + oy, a[2] + ox, a[3] + oy]; out.push(['Q', ...c]); lq = [c[0], c[1]]; x = c[2]; y = c[3]; lc = null; break; }\n case 'T': { const c1: Pt = lq ? [2 * x - lq[0], 2 * y - lq[1]] : [x, y]; x = a[0] + ox; y = a[1] + oy; out.push(['Q', c1[0], c1[1], x, y]); lq = c1; lc = null; break; }\n case 'A': { x = a[5] + ox; y = a[6] + oy; out.push(['A', a[0], a[1], a[2], a[3], a[4], x, y]); lc = lq = null; break; }\n }\n }\n return out;\n}\n\n/** Endpoint-parameterised arc → points (SVG spec F.6.5 conversion). */\nfunction arcPoints(x1: number, y1: number, rx: number, ry: number, phiDeg: number, large: number, sweep: number, x2: number, y2: number, seg: number): Pt[] {\n if (!rx || !ry) return [[x2, y2]];\n rx = Math.abs(rx); ry = Math.abs(ry);\n const phi = (phiDeg * Math.PI) / 180, cos = Math.cos(phi), sin = Math.sin(phi);\n const dx = (x1 - x2) / 2, dy = (y1 - y2) / 2;\n const xp = cos * dx + sin * dy, yp = -sin * dx + cos * dy;\n const lam = (xp * xp) / (rx * rx) + (yp * yp) / (ry * ry);\n if (lam > 1) { rx *= Math.sqrt(lam); ry *= Math.sqrt(lam); }\n const num = rx * rx * ry * ry - rx * rx * yp * yp - ry * ry * xp * xp;\n const den = rx * rx * yp * yp + ry * ry * xp * xp;\n let co = Math.sqrt(Math.max(0, num / den));\n if (large === sweep) co = -co;\n const cxp = (co * rx * yp) / ry, cyp = (-co * ry * xp) / rx;\n const cx = cos * cxp - sin * cyp + (x1 + x2) / 2, cy = sin * cxp + cos * cyp + (y1 + y2) / 2;\n const ang = (ux: number, uy: number, vx: number, vy: number) => Math.atan2(ux * vy - uy * vx, ux * vx + uy * vy);\n const t1 = ang(1, 0, (xp - cxp) / rx, (yp - cyp) / ry);\n let dt = ang((xp - cxp) / rx, (yp - cyp) / ry, (-xp - cxp) / rx, (-yp - cyp) / ry);\n if (!sweep && dt > 0) dt -= 2 * Math.PI;\n if (sweep && dt < 0) dt += 2 * Math.PI;\n const n = Math.max(2, Math.ceil((Math.abs(dt) / (Math.PI / 2)) * seg));\n const pts: Pt[] = [];\n for (let k = 1; k <= n; k++) {\n const t = t1 + (dt * k) / n;\n pts.push([cx + rx * Math.cos(t) * cos - ry * Math.sin(t) * sin, cy + rx * Math.cos(t) * sin + ry * Math.sin(t) * cos]);\n }\n return pts;\n}\n\n/** Flatten a path into polylines (one per subpath); `segments` points per curve. */\nexport function flattenPath(d: string | PathCommand[], segments = 16): Pt[][] {\n const cmds = typeof d === 'string' ? parsePath(d) : d;\n const subs: Pt[][] = [];\n let cur: Pt[] = [], x = 0, y = 0;\n for (const c of cmds) {\n const [k, ...a] = c;\n if (k === 'M') { if (cur.length) subs.push(cur); cur = [[a[0], a[1]]]; x = a[0]; y = a[1]; continue; }\n if (!cur.length) cur = [[x, y]];\n if (k === 'L') cur.push([a[0], a[1]]);\n else if (k === 'C') for (let i = 1; i <= segments; i++) { const t = i / segments, u = 1 - t; cur.push([u * u * u * x + 3 * u * u * t * a[0] + 3 * u * t * t * a[2] + t * t * t * a[4], u * u * u * y + 3 * u * u * t * a[1] + 3 * u * t * t * a[3] + t * t * t * a[5]]); }\n else if (k === 'Q') for (let i = 1; i <= segments; i++) { const t = i / segments, u = 1 - t; cur.push([u * u * x + 2 * u * t * a[0] + t * t * a[2], u * u * y + 2 * u * t * a[1] + t * t * a[3]]); }\n else if (k === 'A') cur.push(...arcPoints(x, y, a[0], a[1], a[2], a[3], a[4], a[5], a[6], segments / 4));\n else if (k === 'Z') { cur.push([cur[0][0], cur[0][1]]); subs.push(cur); x = cur[0][0]; y = cur[0][1]; cur = []; continue; }\n const last = cur[cur.length - 1];\n x = last[0]; y = last[1];\n }\n if (cur.length) subs.push(cur);\n return subs;\n}\n\nconst dist = (a: Pt, b: Pt) => Math.hypot(b[0] - a[0], b[1] - a[1]);\n\n/** Total length of a path. */\nexport function pathLength(d: string | PathCommand[]): number {\n return flattenPath(d, 48).reduce((s, pl) => s + pl.slice(1).reduce((t, p, i) => t + dist(pl[i], p), 0), 0);\n}\n\n/** Point (and tangent angle, degrees) at a distance along the path. */\nexport function pointAtLength(d: string | PathCommand[], len: number): { x: number; y: number; angle: number } {\n const pl = flattenPath(d, 48).flat();\n let acc = 0;\n for (let i = 1; i < pl.length; i++) {\n const s = dist(pl[i - 1], pl[i]);\n if (acc + s >= len || i === pl.length - 1) {\n const t = s ? Math.min(1, Math.max(0, (len - acc) / s)) : 0;\n return { x: pl[i - 1][0] + (pl[i][0] - pl[i - 1][0]) * t, y: pl[i - 1][1] + (pl[i][1] - pl[i - 1][1]) * t, angle: (Math.atan2(pl[i][1] - pl[i - 1][1], pl[i][0] - pl[i - 1][0]) * 180) / Math.PI };\n }\n acc += s;\n }\n return { x: pl[0]?.[0] ?? 0, y: pl[0]?.[1] ?? 0, angle: 0 };\n}\n\n/** `n` points evenly spaced along the path (all subpaths joined). */\nexport function samplePath(d: string | PathCommand[], n = 64): Pt[] {\n const total = pathLength(d);\n return Array.from({ length: n }, (_, i) => {\n const p = pointAtLength(d, (total * i) / (n - 1 || 1));\n return [p.x, p.y] as Pt;\n });\n}\n\nconst r3 = (v: number) => Math.round(v * 1000) / 1000;\nconst closed = (d: string) => /z\\s*$/i.test(d.trim());\n\n/**\n * Morph between two paths of any shape: `const f = morphPath(a, b); el.setAttribute('d', f(0.5))`.\n * Closed paths are rotated so their start points line up (less twisting).\n */\nexport function morphPath(from: string, to: string, o: { points?: number } = {}): (p: number) => string {\n const n = o.points ?? 64;\n const A = samplePath(from, n);\n let B = samplePath(to, n);\n const isClosed = closed(from) && closed(to);\n if (isClosed) {\n let best = 0, bestD = Infinity;\n for (let s = 0; s < n; s++) {\n let sum = 0;\n for (let i = 0; i < n; i += 4) sum += dist(A[i], B[(i + s) % n]);\n if (sum < bestD) { bestD = sum; best = s; }\n }\n B = B.map((_, i) => B[(i + best) % n]);\n }\n return (p) => {\n if (p <= 0) return from;\n if (p >= 1) return to;\n return 'M' + A.map((a, i) => `${r3(a[0] + (B[i][0] - a[0]) * p)} ${r3(a[1] + (B[i][1] - a[1]) * p)}`).join('L') + (isClosed ? 'Z' : '');\n };\n}\n\n/* ------------------------------------------------------------------ SMIL */\n\n/** '2s', '150ms', '1.5', 'indefinite' → ms (NaN for indefinite / unsupported). */\nexport function smilTime(v: string | null | undefined): number {\n if (!v) return NaN;\n const s = v.trim();\n const m = /^(-?[\\d.]+)(ms|s|min|h)?$/.exec(s);\n if (!m) {\n const c = /^(?:(\\d+):)?(\\d+):(\\d+(?:\\.\\d+)?)$/.exec(s);\n return c ? ((+(c[1] || 0) * 60 + +c[2]) * 60 + +c[3]) * 1000 : NaN;\n }\n const n = parseFloat(m[1]);\n return m[2] === 'ms' ? n : m[2] === 'min' ? n * 60000 : m[2] === 'h' ? n * 3600000 : n * 1000;\n}\n\ntype Interp = (a: string, b: string, p: number) => string;\nconst numList = (s: string) => s.trim().split(/[\\s,]+/).filter(Boolean).map(Number);\nconst lerpNumbers: Interp = (a, b, p) => {\n const x = numList(a), y = numList(b);\n return x.map((v, i) => r3(v + ((y[i] ?? v) - v) * p)).join(' ');\n};\nconst lerpAny: Interp = (a, b, p) => {\n try {\n const x = parseValue(a), y = parseValue(b);\n if (x.kind === 'str' || y.kind === 'str') throw 0; // number lists / keywords: handled below\n if (x.kind === 'col' || y.kind === 'col') {\n const ca = x.kind === 'col' ? x.c : [0, 0, 0, 1], cb = y.kind === 'col' ? y.c : [0, 0, 0, 1];\n const c = ca.map((v, i) => v + (cb[i] - v) * p);\n return `rgba(${Math.round(c[0])},${Math.round(c[1])},${Math.round(c[2])},${r3(c[3])})`;\n }\n return `${r3(x.v + (y.v - x.v) * p)}${y.u || x.u}`;\n } catch {\n if (/^[-\\d.\\s,e]+$/i.test(a) && /^[-\\d.\\s,e]+$/i.test(b)) return lerpNumbers(a, b, p);\n return p < 0.5 ? a : b;\n }\n};\n\nexport interface SmilAnimationInfo {\n kind: 'animate' | 'set' | 'animateTransform' | 'animateMotion';\n target: Element;\n attribute: string;\n begin: number;\n dur: number;\n repeat: number;\n freeze: boolean;\n values: string[];\n keyTimes: number[];\n calcMode: string;\n type?: string;\n}\n\n/** Read the SMIL animation elements of an SVG (without playing them). */\nexport function readSmil(svg: Element): SmilAnimationInfo[] {\n const out: SmilAnimationInfo[] = [];\n svg.querySelectorAll('animate, set, animateTransform, animateMotion').forEach((el) => {\n const kind = el.localName as SmilAnimationInfo['kind'];\n const href = el.getAttribute('href') || el.getAttribute('xlink:href');\n const target = href ? svg.querySelector(href) : el.parentElement;\n if (!target) return;\n const begin = smilTime((el.getAttribute('begin') || '0').split(';')[0]);\n const dur = kind === 'set' ? smilTime(el.getAttribute('dur')) || 0 : smilTime(el.getAttribute('dur'));\n const rc = el.getAttribute('repeatCount');\n const rd = smilTime(el.getAttribute('repeatDur'));\n let repeat = rc === 'indefinite' || el.getAttribute('repeatDur') === 'indefinite' ? -1 : rc ? Math.max(0, Math.ceil(parseFloat(rc)) - 1) : 0;\n if (!rc && rd > 0 && dur > 0) repeat = Math.ceil(rd / dur) - 1;\n const attribute = kind === 'animateTransform' ? 'transform' : kind === 'animateMotion' ? 'transform' : el.getAttribute('attributeName') || '';\n let values: string[];\n const v = el.getAttribute('values');\n if (kind === 'set') values = [el.getAttribute('to') || ''];\n else if (kind === 'animateMotion') {\n const mp = el.querySelector('mpath');\n const ref = mp && (mp.getAttribute('href') || mp.getAttribute('xlink:href'));\n values = [(ref && svg.querySelector(ref)?.getAttribute('d')) || el.getAttribute('path') || ''];\n } else if (v) values = v.split(';').map((s) => s.trim()).filter((s) => s !== '');\n else {\n const base = target.getAttribute(attribute) || (attribute === 'opacity' ? '1' : '0');\n const from = el.getAttribute('from') ?? base;\n const by = el.getAttribute('by');\n const to = el.getAttribute('to') ?? (by !== null ? numList(from).map((x, i) => x + (numList(by)[i] ?? 0)).join(' ') : base);\n values = [from, to];\n }\n const kt = el.getAttribute('keyTimes');\n out.push({ kind, target, attribute, begin: Number.isFinite(begin) ? begin : 0, dur: Number.isFinite(dur) ? dur : 0, repeat, freeze: el.getAttribute('fill') === 'freeze' || (kind === 'set' && !el.getAttribute('dur')) /* a <set> without dur holds its value */, values, keyTimes: kt ? kt.split(';').map(Number) : [], calcMode: el.getAttribute('calcMode') || (kind === 'animateMotion' ? 'paced' : 'linear'), type: el.getAttribute('type') || undefined, ...(el.getAttribute('rotate') ? { rotate: el.getAttribute('rotate') } : {}), ...(el.getAttribute('keySplines') ? { keySplines: el.getAttribute('keySplines') } : {}) } as SmilAnimationInfo);\n });\n return out;\n}\n\n/** One SMIL animation replayed as a runtime Playable. */\nclass SmilTrack extends Playable {\n private interp: Interp;\n private splines: Ease[];\n private base: string | null;\n private morphs: ((p: number) => string)[] = [];\n constructor(private info: SmilAnimationInfo & { rotate?: string; keySplines?: string }) {\n super({ repeat: info.repeat });\n this.base = info.target.getAttribute(info.attribute);\n this.interp = info.attribute === 'd' ? (a, b, p) => this.morph(a, b)(p) : info.kind === 'animateTransform' ? lerpNumbers : lerpAny;\n this.splines = (info.keySplines || '').split(';').filter((s) => s.trim()).map((s) => { const n = numList(s); return cubicBezier(n[0], n[1], n[2], n[3]); });\n }\n private morph(a: string, b: string): (p: number) => string {\n const key = a + '|' + b;\n const hit = (this.morphs as any)[key];\n return hit || ((this.morphs as any)[key] = morphPath(a, b));\n }\n get duration(): number {\n return this.info.dur;\n }\n private write(v: string): void {\n const { kind, target, type } = this.info;\n if (kind === 'animateTransform') target.setAttribute('transform', `${type || 'translate'}(${v})`);\n else target.setAttribute(this.info.attribute, v);\n }\n protected renderLocal(ms: number, ended: boolean): void {\n const i = this.info;\n if (ended && ms >= i.dur && !i.freeze && this.repeat >= 0) {\n if (this.base === null) i.target.removeAttribute(i.attribute);\n else i.target.setAttribute(i.attribute, this.base);\n return;\n }\n const p = i.dur ? Math.min(1, ms / i.dur) : 1;\n if (i.kind === 'set') return this.write(i.values[0]);\n if (i.kind === 'animateMotion') {\n const d = i.values[0];\n const len = pathLength(d);\n const pt = pointAtLength(d, len * p);\n const rot = (i as any).rotate;\n const a = rot === 'auto' ? pt.angle : rot === 'auto-reverse' ? pt.angle + 180 : parseFloat(rot) || 0;\n i.target.setAttribute('transform', `translate(${r3(pt.x)} ${r3(pt.y)})${a ? ` rotate(${r3(a)})` : ''}`);\n return;\n }\n const vals = i.values;\n if (vals.length === 1) return this.write(vals[0]);\n const kt = i.keyTimes.length === vals.length ? i.keyTimes : vals.map((_, k) => k / (vals.length - 1));\n if (i.calcMode === 'discrete') {\n const kd = i.keyTimes.length === vals.length ? i.keyTimes : vals.map((_, k) => k / vals.length);\n let k = 0;\n while (k < kd.length - 1 && p >= kd[k + 1]) k++;\n return this.write(vals[k]);\n }\n let k = 0;\n while (k < kt.length - 2 && p > kt[k + 1]) k++;\n const span = kt[k + 1] - kt[k] || 1;\n let local = Math.min(1, Math.max(0, (p - kt[k]) / span));\n if (i.calcMode === 'spline' && this.splines[k]) local = this.splines[k](local);\n this.write(this.interp(vals[k], vals[k + 1], local));\n }\n}\n\nexport interface SmilPlayer {\n timeline: Timeline;\n animations: SmilAnimationInfo[];\n /** Put the original SMIL elements back (the browser's clock takes over again). */\n restore(): void;\n}\n\n/**\n * Replay an SVG's SMIL animations with the runtime. The SMIL elements are\n * detached while the runtime drives the attributes (call `restore()` to put\n * them back). Playing unless `paused: true`.\n */\nexport function playSmil(svg: Element, o: { paused?: boolean; timeScale?: number } = {}): SmilPlayer {\n const animations = readSmil(svg);\n const els = Array.from(svg.querySelectorAll('animate, set, animateTransform, animateMotion'));\n const parents = els.map((e) => [e, e.parentNode, e.nextSibling] as const);\n els.forEach((e) => e.remove());\n const tl = new Timeline({});\n for (const a of animations) tl.add(new SmilTrack(a), a.begin);\n if (o.timeScale) tl.timeScale = o.timeScale;\n if (!o.paused) tl.play();\n return {\n timeline: tl,\n animations,\n restore() {\n tl.kill();\n parents.forEach(([e, p, next]) => p?.insertBefore(e, next && next.parentNode === p ? next : null));\n },\n };\n}\n\nexport interface FormatSvgApi {\n parsePath: typeof parsePath;\n flattenPath: typeof flattenPath;\n pathLength: typeof pathLength;\n pointAtLength: typeof pointAtLength;\n samplePath: typeof samplePath;\n morphPath: typeof morphPath;\n readSmil: typeof readSmil;\n playSmil: typeof playSmil;\n smilTime: typeof smilTime;\n}\n\n/** The module object for `use(formatSvg)`. */\nexport const formatSvg: RuntimeModule<FormatSvgApi> = { id: 'format-svg', version: RUNTIME_VERSION, requires: ['core'], api: { parsePath, flattenPath, pathLength, pointAtLength, samplePath, morphPath, readSmil, playSmil, smilTime } };\n"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,123 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var registry = require('../chunks/registry-tzwKkldE.cjs');
|
|
4
|
+
var animImage = require('../chunks/anim-image-blQgPFFS.cjs');
|
|
5
|
+
require('../chunks/tween-CwLLC3Ko.cjs');
|
|
6
|
+
require('../chunks/ticker-Un0bvTWR.cjs');
|
|
7
|
+
require('../chunks/ease-HwYZnZat.cjs');
|
|
8
|
+
|
|
9
|
+
/**
|
|
10
|
+
* `motionary/runtime/format-webp` (10.4) — animated WebP loader written for
|
|
11
|
+
* Motionary: reads the RIFF container (`VP8X`, `ANIM`, `ANMF`), rebuilds each
|
|
12
|
+
* frame (lossy `VP8 ` with optional `ALPH`, or lossless `VP8L`) as a
|
|
13
|
+
* standalone WebP file that the browser's own decoder decodes, then
|
|
14
|
+
* composites the frames (blending on / off, dispose to background) into
|
|
15
|
+
* full-size RGBA. A still WebP loads as a one-frame animation.
|
|
16
|
+
*
|
|
17
|
+
* `parseWebp()` and `webpFrameFiles()` are pure (no DOM); `decodeWebp()` uses
|
|
18
|
+
* the browser decoder by default (also in workers) or your own `{ decode }`.
|
|
19
|
+
* Browsers without WebP support cannot decode the frames — fall back to `<img>`.
|
|
20
|
+
*/
|
|
21
|
+
const u24 = (b, i) => b[i] | (b[i + 1] << 8) | (b[i + 2] << 16);
|
|
22
|
+
const u32le = (b, i) => (b[i] | (b[i + 1] << 8) | (b[i + 2] << 16) | (b[i + 3] << 24)) >>> 0;
|
|
23
|
+
const tag = (b, i) => String.fromCharCode(b[i], b[i + 1], b[i + 2], b[i + 3]);
|
|
24
|
+
/** Read RIFF chunks from `start` to `end` (pure). */
|
|
25
|
+
function riffChunks(b, start = 12, end = b.length) {
|
|
26
|
+
const out = [];
|
|
27
|
+
let p = start;
|
|
28
|
+
while (p + 8 <= end) {
|
|
29
|
+
const n = u32le(b, p + 4);
|
|
30
|
+
out.push({ type: tag(b, p), data: b.subarray(p + 8, p + 8 + n) });
|
|
31
|
+
p += 8 + n + (n & 1);
|
|
32
|
+
}
|
|
33
|
+
return out;
|
|
34
|
+
}
|
|
35
|
+
/** Size of a still VP8 / VP8L bitstream. */
|
|
36
|
+
function bitstreamSize(c) {
|
|
37
|
+
const d = c.data;
|
|
38
|
+
if (c.type === 'VP8L') {
|
|
39
|
+
const bits = u32le(d, 1);
|
|
40
|
+
return [(bits & 0x3fff) + 1, ((bits >> 14) & 0x3fff) + 1];
|
|
41
|
+
}
|
|
42
|
+
return [(d[6] | (d[7] << 8)) & 0x3fff, (d[8] | (d[9] << 8)) & 0x3fff];
|
|
43
|
+
}
|
|
44
|
+
/** Parse the container (pure; no pixels decoded). */
|
|
45
|
+
function parseWebp(input) {
|
|
46
|
+
const b = animImage.u8(input);
|
|
47
|
+
if (tag(b, 0) !== 'RIFF' || tag(b, 8) !== 'WEBP')
|
|
48
|
+
throw new Error('[motionary] format-webp: not a WebP file');
|
|
49
|
+
const chunks = riffChunks(b, 12, Math.min(b.length, 8 + u32le(b, 4)));
|
|
50
|
+
const x = chunks.find((c) => c.type === 'VP8X');
|
|
51
|
+
const anim = chunks.find((c) => c.type === 'ANIM');
|
|
52
|
+
const anmf = chunks.filter((c) => c.type === 'ANMF');
|
|
53
|
+
if (x && anim && anmf.length) {
|
|
54
|
+
const width = u24(x.data, 4) + 1, height = u24(x.data, 7) + 1;
|
|
55
|
+
const bg = anim.data;
|
|
56
|
+
const frames = anmf.map((f) => {
|
|
57
|
+
const d = f.data, flags = d[15];
|
|
58
|
+
return { x: u24(d, 0) * 2, y: u24(d, 3) * 2, width: u24(d, 6) + 1, height: u24(d, 9) + 1, delay: animImage.fixDelay(u24(d, 12)), blend: flags & 2 ? 'source' : 'over', dispose: flags & 1 ? 'background' : 'none', chunks: riffChunks(d, 16, d.length).filter((c) => /^(ALPH|VP8 |VP8L)$/.test(c.type)) };
|
|
59
|
+
});
|
|
60
|
+
// ANIM background is stored B, G, R, A
|
|
61
|
+
return { width, height, animated: true, plays: bg[4] | (bg[5] << 8), background: [bg[2], bg[1], bg[0], bg[3]], frames };
|
|
62
|
+
}
|
|
63
|
+
const img = chunks.filter((c) => /^(ALPH|VP8 |VP8L)$/.test(c.type));
|
|
64
|
+
const main = img.find((c) => c.type !== 'ALPH');
|
|
65
|
+
if (!main)
|
|
66
|
+
throw new Error('[motionary] format-webp: no image data');
|
|
67
|
+
const [w, h] = x ? [u24(x.data, 4) + 1, u24(x.data, 7) + 1] : bitstreamSize(main);
|
|
68
|
+
return { width: w, height: h, animated: false, plays: 1, background: [0, 0, 0, 0], frames: [{ x: 0, y: 0, width: w, height: h, delay: 100, blend: 'source', dispose: 'none', chunks: img }] };
|
|
69
|
+
}
|
|
70
|
+
function riff(chunks) {
|
|
71
|
+
const size = chunks.reduce((n, c) => n + 8 + c.data.length + (c.data.length & 1), 4);
|
|
72
|
+
const out = new Uint8Array(8 + size);
|
|
73
|
+
const v = new DataView(out.buffer);
|
|
74
|
+
const put = (s, i) => { for (let k = 0; k < 4; k++)
|
|
75
|
+
out[i + k] = s.charCodeAt(k); };
|
|
76
|
+
put('RIFF', 0);
|
|
77
|
+
v.setUint32(4, size, true);
|
|
78
|
+
put('WEBP', 8);
|
|
79
|
+
let p = 12;
|
|
80
|
+
for (const c of chunks) {
|
|
81
|
+
put(c.type, p);
|
|
82
|
+
v.setUint32(p + 4, c.data.length, true);
|
|
83
|
+
out.set(c.data, p + 8);
|
|
84
|
+
p += 8 + c.data.length + (c.data.length & 1);
|
|
85
|
+
}
|
|
86
|
+
return out;
|
|
87
|
+
}
|
|
88
|
+
/** Rebuild every frame as a standalone (still) WebP file (pure). */
|
|
89
|
+
function webpFrameFiles(info) {
|
|
90
|
+
return info.frames.map((f) => {
|
|
91
|
+
if (!f.chunks.some((c) => c.type === 'ALPH'))
|
|
92
|
+
return riff(f.chunks.filter((c) => c.type !== 'ALPH'));
|
|
93
|
+
// lossy + alpha needs an extended header (VP8X with the alpha flag)
|
|
94
|
+
const vp8x = new Uint8Array(10);
|
|
95
|
+
vp8x[0] = 0x10;
|
|
96
|
+
const w = f.width - 1, h = f.height - 1;
|
|
97
|
+
vp8x.set([w & 255, (w >> 8) & 255, (w >> 16) & 255, h & 255, (h >> 8) & 255, (h >> 16) & 255], 4);
|
|
98
|
+
return riff([{ type: 'VP8X', data: vp8x }, ...f.chunks]);
|
|
99
|
+
});
|
|
100
|
+
}
|
|
101
|
+
/** Decode an animated (or still) WebP into composited RGBA frames. */
|
|
102
|
+
async function decodeWebp(input, o = {}) {
|
|
103
|
+
const info = parseWebp(input);
|
|
104
|
+
const decode = o.decode || animImage.browserDecode;
|
|
105
|
+
const images = await Promise.all(webpFrameFiles(info).map((f) => decode(f, 'image/webp')));
|
|
106
|
+
const parts = info.frames.map((f, i) => ({ x: f.x, y: f.y, image: images[i], delay: f.delay, blend: f.blend, dispose: f.dispose }));
|
|
107
|
+
return { format: 'webp', width: info.width, height: info.height, plays: info.plays, frames: animImage.composeFrames(info.width, info.height, parts), info };
|
|
108
|
+
}
|
|
109
|
+
/** Fetch (URL) or read (ArrayBuffer / Blob / bytes) and decode a WebP. */
|
|
110
|
+
async function loadWebp(src, o = {}) {
|
|
111
|
+
return decodeWebp(await animImage.bytesOf(src), o);
|
|
112
|
+
}
|
|
113
|
+
/** The module object for `use(formatWebp)`. */
|
|
114
|
+
const formatWebp = { id: 'format-webp', version: registry.RUNTIME_VERSION, requires: ['core'], api: { parseWebp, webpFrameFiles, decodeWebp, loadWebp, animatedImagePlayer: animImage.animatedImagePlayer } };
|
|
115
|
+
|
|
116
|
+
exports.animatedImagePlayer = animImage.animatedImagePlayer;
|
|
117
|
+
exports.decodeWebp = decodeWebp;
|
|
118
|
+
exports.formatWebp = formatWebp;
|
|
119
|
+
exports.loadWebp = loadWebp;
|
|
120
|
+
exports.parseWebp = parseWebp;
|
|
121
|
+
exports.riffChunks = riffChunks;
|
|
122
|
+
exports.webpFrameFiles = webpFrameFiles;
|
|
123
|
+
//# sourceMappingURL=format-webp.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"format-webp.cjs","sources":["../../src/runtime/format-webp.ts"],"sourcesContent":["/**\n * `motionary/runtime/format-webp` (10.4) — animated WebP loader written for\n * Motionary: reads the RIFF container (`VP8X`, `ANIM`, `ANMF`), rebuilds each\n * frame (lossy `VP8 ` with optional `ALPH`, or lossless `VP8L`) as a\n * standalone WebP file that the browser's own decoder decodes, then\n * composites the frames (blending on / off, dispose to background) into\n * full-size RGBA. A still WebP loads as a one-frame animation.\n *\n * `parseWebp()` and `webpFrameFiles()` are pure (no DOM); `decodeWebp()` uses\n * the browser decoder by default (also in workers) or your own `{ decode }`.\n * Browsers without WebP support cannot decode the frames — fall back to `<img>`.\n */\nimport { RUNTIME_VERSION, type RuntimeModule } from './registry';\nimport { composeFrames, fixDelay, bytesOf, browserDecode, animatedImagePlayer, u8, type AnimatedImage, type FramePart, type FrameDecoder } from './anim-image';\n\nexport type { AnimatedImage, AnimFrame, Rgba, AnimPlayer, AnimPlayerOptions, FrameDecoder } from './anim-image';\nexport { animatedImagePlayer } from './anim-image';\n\nexport interface WebpChunk {\n type: string;\n data: Uint8Array;\n}\n\nexport interface WebpFrameInfo {\n x: number;\n y: number;\n width: number;\n height: number;\n delay: number;\n blend: FramePart['blend'];\n dispose: FramePart['dispose'];\n /** The frame's image chunks (ALPH? + VP8, or VP8L). */\n chunks: WebpChunk[];\n}\n\nexport interface WebpInfo {\n width: number;\n height: number;\n animated: boolean;\n /** ANIM loop count (0 = forever); 1 for a still image. */\n plays: number;\n /** ANIM background colour as [r, g, b, a] (a hint; browsers composite on transparent). */\n background: [number, number, number, number];\n frames: WebpFrameInfo[];\n}\n\nconst u24 = (b: Uint8Array, i: number) => b[i] | (b[i + 1] << 8) | (b[i + 2] << 16);\nconst u32le = (b: Uint8Array, i: number) => (b[i] | (b[i + 1] << 8) | (b[i + 2] << 16) | (b[i + 3] << 24)) >>> 0;\nconst tag = (b: Uint8Array, i: number) => String.fromCharCode(b[i], b[i + 1], b[i + 2], b[i + 3]);\n\n/** Read RIFF chunks from `start` to `end` (pure). */\nexport function riffChunks(b: Uint8Array, start = 12, end = b.length): WebpChunk[] {\n const out: WebpChunk[] = [];\n let p = start;\n while (p + 8 <= end) {\n const n = u32le(b, p + 4);\n out.push({ type: tag(b, p), data: b.subarray(p + 8, p + 8 + n) });\n p += 8 + n + (n & 1);\n }\n return out;\n}\n\n/** Size of a still VP8 / VP8L bitstream. */\nfunction bitstreamSize(c: WebpChunk): [number, number] {\n const d = c.data;\n if (c.type === 'VP8L') {\n const bits = u32le(d, 1);\n return [(bits & 0x3fff) + 1, ((bits >> 14) & 0x3fff) + 1];\n }\n return [(d[6] | (d[7] << 8)) & 0x3fff, (d[8] | (d[9] << 8)) & 0x3fff];\n}\n\n/** Parse the container (pure; no pixels decoded). */\nexport function parseWebp(input: Uint8Array | ArrayBuffer): WebpInfo {\n const b = u8(input);\n if (tag(b, 0) !== 'RIFF' || tag(b, 8) !== 'WEBP') throw new Error('[motionary] format-webp: not a WebP file');\n const chunks = riffChunks(b, 12, Math.min(b.length, 8 + u32le(b, 4)));\n const x = chunks.find((c) => c.type === 'VP8X');\n const anim = chunks.find((c) => c.type === 'ANIM');\n const anmf = chunks.filter((c) => c.type === 'ANMF');\n if (x && anim && anmf.length) {\n const width = u24(x.data, 4) + 1, height = u24(x.data, 7) + 1;\n const bg = anim.data;\n const frames = anmf.map((f): WebpFrameInfo => {\n const d = f.data, flags = d[15];\n return { x: u24(d, 0) * 2, y: u24(d, 3) * 2, width: u24(d, 6) + 1, height: u24(d, 9) + 1, delay: fixDelay(u24(d, 12)), blend: flags & 2 ? 'source' : 'over', dispose: flags & 1 ? 'background' : 'none', chunks: riffChunks(d, 16, d.length).filter((c) => /^(ALPH|VP8 |VP8L)$/.test(c.type)) };\n });\n // ANIM background is stored B, G, R, A\n return { width, height, animated: true, plays: bg[4] | (bg[5] << 8), background: [bg[2], bg[1], bg[0], bg[3]], frames };\n }\n const img = chunks.filter((c) => /^(ALPH|VP8 |VP8L)$/.test(c.type));\n const main = img.find((c) => c.type !== 'ALPH');\n if (!main) throw new Error('[motionary] format-webp: no image data');\n const [w, h] = x ? [u24(x.data, 4) + 1, u24(x.data, 7) + 1] : bitstreamSize(main);\n return { width: w, height: h, animated: false, plays: 1, background: [0, 0, 0, 0], frames: [{ x: 0, y: 0, width: w, height: h, delay: 100, blend: 'source', dispose: 'none', chunks: img }] };\n}\n\nfunction riff(chunks: WebpChunk[]): Uint8Array {\n const size = chunks.reduce((n, c) => n + 8 + c.data.length + (c.data.length & 1), 4);\n const out = new Uint8Array(8 + size);\n const v = new DataView(out.buffer);\n const put = (s: string, i: number) => { for (let k = 0; k < 4; k++) out[i + k] = s.charCodeAt(k); };\n put('RIFF', 0);\n v.setUint32(4, size, true);\n put('WEBP', 8);\n let p = 12;\n for (const c of chunks) {\n put(c.type, p);\n v.setUint32(p + 4, c.data.length, true);\n out.set(c.data, p + 8);\n p += 8 + c.data.length + (c.data.length & 1);\n }\n return out;\n}\n\n/** Rebuild every frame as a standalone (still) WebP file (pure). */\nexport function webpFrameFiles(info: WebpInfo): Uint8Array[] {\n return info.frames.map((f) => {\n if (!f.chunks.some((c) => c.type === 'ALPH')) return riff(f.chunks.filter((c) => c.type !== 'ALPH'));\n // lossy + alpha needs an extended header (VP8X with the alpha flag)\n const vp8x = new Uint8Array(10);\n vp8x[0] = 0x10;\n const w = f.width - 1, h = f.height - 1;\n vp8x.set([w & 255, (w >> 8) & 255, (w >> 16) & 255, h & 255, (h >> 8) & 255, (h >> 16) & 255], 4);\n return riff([{ type: 'VP8X', data: vp8x }, ...f.chunks]);\n });\n}\n\n/** Decode an animated (or still) WebP into composited RGBA frames. */\nexport async function decodeWebp(input: Uint8Array | ArrayBuffer, o: { decode?: FrameDecoder } = {}): Promise<AnimatedImage & { info: WebpInfo }> {\n const info = parseWebp(input);\n const decode = o.decode || browserDecode;\n const images = await Promise.all(webpFrameFiles(info).map((f) => decode(f, 'image/webp')));\n const parts: FramePart[] = info.frames.map((f, i) => ({ x: f.x, y: f.y, image: images[i], delay: f.delay, blend: f.blend, dispose: f.dispose }));\n return { format: 'webp', width: info.width, height: info.height, plays: info.plays, frames: composeFrames(info.width, info.height, parts), info };\n}\n\n/** Fetch (URL) or read (ArrayBuffer / Blob / bytes) and decode a WebP. */\nexport async function loadWebp(src: string | ArrayBuffer | ArrayBufferView | Blob, o: { decode?: FrameDecoder } = {}): Promise<AnimatedImage & { info: WebpInfo }> {\n return decodeWebp(await bytesOf(src), o);\n}\n\nexport interface FormatWebpApi {\n parseWebp: typeof parseWebp;\n webpFrameFiles: typeof webpFrameFiles;\n decodeWebp: typeof decodeWebp;\n loadWebp: typeof loadWebp;\n animatedImagePlayer: typeof animatedImagePlayer;\n}\n\n/** The module object for `use(formatWebp)`. */\nexport const formatWebp: RuntimeModule<FormatWebpApi> = { id: 'format-webp', version: RUNTIME_VERSION, requires: ['core'], api: { parseWebp, webpFrameFiles, decodeWebp, loadWebp, animatedImagePlayer } };\n"],"names":["u8","fixDelay","browserDecode","composeFrames","bytesOf","RUNTIME_VERSION","animatedImagePlayer"],"mappings":"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"}
|