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
|
@@ -0,0 +1,216 @@
|
|
|
1
|
+
import { R as RUNTIME_VERSION } from '../chunks/registry-CT-TT_bx.js';
|
|
2
|
+
import { P as Playable } from '../chunks/tween-BcejKpsx.js';
|
|
3
|
+
import '../chunks/ticker-C8lSGml9.js';
|
|
4
|
+
import '../chunks/ease-XN8_0sXu.js';
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* `motionary/runtime/format-sprite` (10.3) — sprite sheets and image
|
|
8
|
+
* sequences on the runtime timeline (original implementation).
|
|
9
|
+
*
|
|
10
|
+
* - `parseSpriteSheet(json)` — TexturePacker JSON (hash and array), Aseprite
|
|
11
|
+
* JSON (hash and array, per-frame `duration`, `meta.frameTags` with
|
|
12
|
+
* `forward` / `reverse` / `pingpong` directions) and the generic
|
|
13
|
+
* `{ frames: [{ x, y, w, h }] }` shape; trimmed frames (`spriteSourceSize` /
|
|
14
|
+
* `sourceSize`) and rotated frames are supported.
|
|
15
|
+
* - `gridSheet(cols, rows, w, h, n?)` — a plain grid sheet.
|
|
16
|
+
* - `frameOrder(sheet, tag?)` — the playback order of a tag (pingpong without repeating the ends).
|
|
17
|
+
* - `spritePlayer(target, sheet, image, { tag, fps })` — a runtime `Playable`
|
|
18
|
+
* that draws frames onto a `<canvas>` or moves the background of an element.
|
|
19
|
+
* - `imageSequence('frame_{0001}.webp', { start, end })`, `preloadImages(urls)`,
|
|
20
|
+
* `sequencePlayer(canvas, images, { fps })` — numbered image sequences,
|
|
21
|
+
* scrubbable (`player.progress = p`, e.g. from a scroll scene).
|
|
22
|
+
* Parsing works without the DOM (SSR / workers); players need a canvas / element.
|
|
23
|
+
*/
|
|
24
|
+
const num = (v, d = 0) => (typeof v === 'number' && Number.isFinite(v) ? v : d);
|
|
25
|
+
/** Parse a sprite-sheet JSON (object or string). */
|
|
26
|
+
function parseSpriteSheet(input) {
|
|
27
|
+
const j = typeof input === 'string' ? JSON.parse(input) : input;
|
|
28
|
+
if (!j || !j.frames)
|
|
29
|
+
throw new Error('[motionary] format-sprite: no "frames" in the sprite sheet JSON');
|
|
30
|
+
const meta = j.meta || {};
|
|
31
|
+
const aseprite = /aseprite/i.test(meta.app || '') || Array.isArray(meta.frameTags);
|
|
32
|
+
const entries = Array.isArray(j.frames) ? j.frames.map((f, i) => [f.filename ?? f.name ?? String(i), f]) : Object.entries(j.frames);
|
|
33
|
+
const frames = entries.map(([name, f]) => {
|
|
34
|
+
const r = f.frame || f;
|
|
35
|
+
const rotated = !!f.rotated;
|
|
36
|
+
const sss = f.spriteSourceSize || { x: 0, y: 0 };
|
|
37
|
+
const ss = f.sourceSize || { w: r.w, h: r.h };
|
|
38
|
+
const out = { name, x: num(r.x), y: num(r.y), w: num(r.w), h: num(r.h), rotated, offsetX: num(sss.x), offsetY: num(sss.y), sourceW: num(ss.w, r.w), sourceH: num(ss.h, r.h) };
|
|
39
|
+
if (typeof f.duration === 'number')
|
|
40
|
+
out.duration = f.duration;
|
|
41
|
+
return out;
|
|
42
|
+
});
|
|
43
|
+
if (!Array.isArray(j.frames) && !aseprite)
|
|
44
|
+
frames.sort((a, b) => a.name.localeCompare(b.name, undefined, { numeric: true }));
|
|
45
|
+
const tags = (meta.frameTags || []).map((t) => ({ name: t.name, from: num(t.from), to: num(t.to), direction: t.direction || 'forward' }));
|
|
46
|
+
return { frames, tags, image: meta.image, size: meta.size, format: aseprite ? 'aseprite' : meta.app || j.meta ? 'texturepacker' : 'generic' };
|
|
47
|
+
}
|
|
48
|
+
/** A grid sheet: `cols × rows` cells of `w × h` (first `n` cells). */
|
|
49
|
+
function gridSheet(cols, rows, w, h, n = cols * rows) {
|
|
50
|
+
const frames = [];
|
|
51
|
+
for (let i = 0; i < n; i++)
|
|
52
|
+
frames.push({ name: String(i), x: (i % cols) * w, y: Math.floor(i / cols) * h, w, h, rotated: false, offsetX: 0, offsetY: 0, sourceW: w, sourceH: h });
|
|
53
|
+
return { frames, tags: [], format: 'generic' };
|
|
54
|
+
}
|
|
55
|
+
/** Frame indices for a tag (or the whole sheet). */
|
|
56
|
+
function frameOrder(sheet, tag) {
|
|
57
|
+
const t = tag ? sheet.tags.find((x) => x.name === tag) : undefined;
|
|
58
|
+
if (tag && !t)
|
|
59
|
+
throw new Error(`[motionary] format-sprite: unknown tag "${tag}" (have: ${sheet.tags.map((x) => x.name).join(', ') || 'none'})`);
|
|
60
|
+
const from = t ? t.from : 0, to = t ? t.to : sheet.frames.length - 1;
|
|
61
|
+
const fwd = Array.from({ length: to - from + 1 }, (_, i) => from + i);
|
|
62
|
+
const dir = t?.direction || 'forward';
|
|
63
|
+
if (dir === 'reverse')
|
|
64
|
+
return fwd.reverse();
|
|
65
|
+
if (dir === 'pingpong')
|
|
66
|
+
return [...fwd, ...fwd.slice(1, -1).reverse()];
|
|
67
|
+
if (dir === 'pingpong_reverse') {
|
|
68
|
+
const r = fwd.reverse();
|
|
69
|
+
return [...r, ...r.slice(1, -1).reverse()];
|
|
70
|
+
}
|
|
71
|
+
return fwd;
|
|
72
|
+
}
|
|
73
|
+
/** Draw one frame onto a 2D context at (dx, dy), honouring trim offsets and rotation. */
|
|
74
|
+
function drawFrame(ctx, image, f, dx = 0, dy = 0, scale = 1) {
|
|
75
|
+
ctx.save();
|
|
76
|
+
ctx.translate(dx + f.offsetX * scale, dy + f.offsetY * scale);
|
|
77
|
+
if (f.rotated) {
|
|
78
|
+
// TexturePacker stores rotated frames 90° clockwise: w/h are the unrotated size
|
|
79
|
+
ctx.rotate(-Math.PI / 2);
|
|
80
|
+
ctx.drawImage(image, f.x, f.y, f.h, f.w, -f.h * scale, 0, f.h * scale, f.w * scale);
|
|
81
|
+
}
|
|
82
|
+
else
|
|
83
|
+
ctx.drawImage(image, f.x, f.y, f.w, f.h, 0, 0, f.w * scale, f.h * scale);
|
|
84
|
+
ctx.restore();
|
|
85
|
+
}
|
|
86
|
+
/** Plays a list of frames (by index) with per-frame durations. */
|
|
87
|
+
class FramePlayable extends Playable {
|
|
88
|
+
constructor() {
|
|
89
|
+
super(...arguments);
|
|
90
|
+
this.times = [0];
|
|
91
|
+
this.order = [];
|
|
92
|
+
this.current = -1;
|
|
93
|
+
}
|
|
94
|
+
setOrder(order, dur) {
|
|
95
|
+
this.order = order;
|
|
96
|
+
this.times = [0];
|
|
97
|
+
for (const i of order)
|
|
98
|
+
this.times.push(this.times[this.times.length - 1] + dur(i));
|
|
99
|
+
}
|
|
100
|
+
get duration() {
|
|
101
|
+
return this.times[this.times.length - 1];
|
|
102
|
+
}
|
|
103
|
+
/** Index into `order` at a local time. */
|
|
104
|
+
indexAt(ms) {
|
|
105
|
+
let lo = 0, hi = this.order.length - 1;
|
|
106
|
+
while (lo < hi) {
|
|
107
|
+
const mid = (lo + hi + 1) >> 1;
|
|
108
|
+
if (this.times[mid] <= ms)
|
|
109
|
+
lo = mid;
|
|
110
|
+
else
|
|
111
|
+
hi = mid - 1;
|
|
112
|
+
}
|
|
113
|
+
return Math.min(lo, this.order.length - 1);
|
|
114
|
+
}
|
|
115
|
+
renderLocal(ms) {
|
|
116
|
+
const k = this.order[this.indexAt(Math.min(ms, this.duration - 0.001))];
|
|
117
|
+
if (k === this.current)
|
|
118
|
+
return;
|
|
119
|
+
this.current = k;
|
|
120
|
+
this.show(k);
|
|
121
|
+
}
|
|
122
|
+
/** The frame index currently shown. */
|
|
123
|
+
get frame() {
|
|
124
|
+
return this.current;
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
class SpritePlayer extends FramePlayable {
|
|
128
|
+
constructor(target, sheet, image, o) {
|
|
129
|
+
super({ repeat: o.repeat ?? -1, yoyo: o.yoyo });
|
|
130
|
+
this.target = target;
|
|
131
|
+
this.sheet = sheet;
|
|
132
|
+
this.image = image;
|
|
133
|
+
const fps = o.fps || 12;
|
|
134
|
+
this.setOrder(frameOrder(sheet, o.tag), (i) => sheet.frames[i].duration ?? 1000 / fps);
|
|
135
|
+
this.scale = o.scale;
|
|
136
|
+
if (!o.paused)
|
|
137
|
+
this.play();
|
|
138
|
+
}
|
|
139
|
+
show(i) {
|
|
140
|
+
const f = this.sheet.frames[i];
|
|
141
|
+
const t = this.target;
|
|
142
|
+
if (typeof t.getContext === 'function' && typeof this.image !== 'string') {
|
|
143
|
+
const ctx = t.getContext('2d');
|
|
144
|
+
if (!ctx)
|
|
145
|
+
return;
|
|
146
|
+
const s = this.scale ?? t.width / (f.sourceW || f.w || 1);
|
|
147
|
+
ctx.clearRect(0, 0, t.width, t.height);
|
|
148
|
+
drawFrame(ctx, this.image, f, 0, 0, s);
|
|
149
|
+
}
|
|
150
|
+
else {
|
|
151
|
+
const el = this.target;
|
|
152
|
+
if (typeof this.image === 'string')
|
|
153
|
+
el.style.backgroundImage = `url("${this.image}")`;
|
|
154
|
+
el.style.backgroundPosition = `${-f.x}px ${-f.y}px`;
|
|
155
|
+
el.style.width = `${f.w}px`;
|
|
156
|
+
el.style.height = `${f.h}px`;
|
|
157
|
+
el.style.backgroundRepeat = 'no-repeat';
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
/** Play a sprite sheet on a canvas (image = loaded image / bitmap) or an element's background (image = URL). */
|
|
162
|
+
function spritePlayer(target, sheet, image, o = {}) {
|
|
163
|
+
return new SpritePlayer(target, sheet, image, o);
|
|
164
|
+
}
|
|
165
|
+
/** 'frame_{0001}.webp' + { start: 1, end: 3 } → frame_0001.webp, frame_0002.webp, frame_0003.webp ('{1}' = no padding). */
|
|
166
|
+
function imageSequence(pattern, o) {
|
|
167
|
+
const m = /\{(\d+)\}/.exec(pattern);
|
|
168
|
+
if (!m)
|
|
169
|
+
throw new Error('[motionary] format-sprite: the pattern needs a {0001}-style placeholder');
|
|
170
|
+
const pad = m[1].length;
|
|
171
|
+
const out = [];
|
|
172
|
+
for (let i = o.start ?? (+m[1] || 0); i <= o.end; i += o.step || 1)
|
|
173
|
+
out.push(pattern.replace(m[0], String(i).padStart(pad, '0')));
|
|
174
|
+
return out;
|
|
175
|
+
}
|
|
176
|
+
/** Load images (resolves when all are decoded; rejects with the failing URL). */
|
|
177
|
+
function preloadImages(urls) {
|
|
178
|
+
return Promise.all(urls.map((u) => new Promise((ok, bad) => {
|
|
179
|
+
const img = new Image();
|
|
180
|
+
img.decoding = 'async';
|
|
181
|
+
img.onload = () => ok(img);
|
|
182
|
+
img.onerror = () => bad(new Error(`[motionary] format-sprite: could not load ${u}`));
|
|
183
|
+
img.src = u;
|
|
184
|
+
})));
|
|
185
|
+
}
|
|
186
|
+
class SequencePlayer extends FramePlayable {
|
|
187
|
+
constructor(canvas, images, o) {
|
|
188
|
+
super({ repeat: o.repeat ?? 0, yoyo: o.yoyo });
|
|
189
|
+
this.canvas = canvas;
|
|
190
|
+
this.images = images;
|
|
191
|
+
const fps = o.fps || 24;
|
|
192
|
+
this.setOrder(images.map((_, i) => i), () => 1000 / fps);
|
|
193
|
+
if (!o.paused)
|
|
194
|
+
this.play();
|
|
195
|
+
}
|
|
196
|
+
show(i) {
|
|
197
|
+
const ctx = this.canvas.getContext('2d');
|
|
198
|
+
const img = this.images[i];
|
|
199
|
+
if (!ctx || !img)
|
|
200
|
+
return;
|
|
201
|
+
const w = this.canvas.width, h = this.canvas.height;
|
|
202
|
+
const iw = img.naturalWidth || img.width || w, ih = img.naturalHeight || img.height || h;
|
|
203
|
+
const s = Math.max(w / iw, h / ih); // cover
|
|
204
|
+
ctx.clearRect(0, 0, w, h);
|
|
205
|
+
ctx.drawImage(img, (w - iw * s) / 2, (h - ih * s) / 2, iw * s, ih * s);
|
|
206
|
+
}
|
|
207
|
+
}
|
|
208
|
+
/** Play (or scrub, via `progress`) an image sequence on a canvas, `object-fit: cover` style. */
|
|
209
|
+
function sequencePlayer(canvas, images, o = {}) {
|
|
210
|
+
return new SequencePlayer(canvas, images, o);
|
|
211
|
+
}
|
|
212
|
+
/** The module object for `use(formatSprite)`. */
|
|
213
|
+
const formatSprite = { id: 'format-sprite', version: RUNTIME_VERSION, requires: ['core'], api: { parseSpriteSheet, gridSheet, frameOrder, drawFrame, spritePlayer, imageSequence, preloadImages, sequencePlayer } };
|
|
214
|
+
|
|
215
|
+
export { drawFrame, formatSprite, frameOrder, gridSheet, imageSequence, parseSpriteSheet, preloadImages, sequencePlayer, spritePlayer };
|
|
216
|
+
//# sourceMappingURL=format-sprite.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"format-sprite.js","sources":["../../src/runtime/format-sprite.ts"],"sourcesContent":["/**\n * `motionary/runtime/format-sprite` (10.3) — sprite sheets and image\n * sequences on the runtime timeline (original implementation).\n *\n * - `parseSpriteSheet(json)` — TexturePacker JSON (hash and array), Aseprite\n * JSON (hash and array, per-frame `duration`, `meta.frameTags` with\n * `forward` / `reverse` / `pingpong` directions) and the generic\n * `{ frames: [{ x, y, w, h }] }` shape; trimmed frames (`spriteSourceSize` /\n * `sourceSize`) and rotated frames are supported.\n * - `gridSheet(cols, rows, w, h, n?)` — a plain grid sheet.\n * - `frameOrder(sheet, tag?)` — the playback order of a tag (pingpong without repeating the ends).\n * - `spritePlayer(target, sheet, image, { tag, fps })` — a runtime `Playable`\n * that draws frames onto a `<canvas>` or moves the background of an element.\n * - `imageSequence('frame_{0001}.webp', { start, end })`, `preloadImages(urls)`,\n * `sequencePlayer(canvas, images, { fps })` — numbered image sequences,\n * scrubbable (`player.progress = p`, e.g. from a scroll scene).\n * Parsing works without the DOM (SSR / workers); players need a canvas / element.\n */\nimport { RUNTIME_VERSION, type RuntimeModule } from './registry';\nimport { Playable } from './tween';\n\nexport interface SpriteFrame {\n name: string;\n x: number;\n y: number;\n w: number;\n h: number;\n rotated: boolean;\n /** Offset of the trimmed frame inside the original (untrimmed) size. */\n offsetX: number;\n offsetY: number;\n sourceW: number;\n sourceH: number;\n /** ms (Aseprite), or undefined (use the player's fps). */\n duration?: number;\n}\nexport interface SpriteTag {\n name: string;\n from: number;\n to: number;\n direction: 'forward' | 'reverse' | 'pingpong' | 'pingpong_reverse';\n}\nexport interface SpriteSheet {\n frames: SpriteFrame[];\n tags: SpriteTag[];\n image?: string;\n size?: { w: number; h: number };\n format: 'texturepacker' | 'aseprite' | 'generic';\n}\n\nconst num = (v: unknown, d = 0) => (typeof v === 'number' && Number.isFinite(v) ? v : d);\n\n/** Parse a sprite-sheet JSON (object or string). */\nexport function parseSpriteSheet(input: string | Record<string, any>): SpriteSheet {\n const j = typeof input === 'string' ? JSON.parse(input) : input;\n if (!j || !j.frames) throw new Error('[motionary] format-sprite: no \"frames\" in the sprite sheet JSON');\n const meta = j.meta || {};\n const aseprite = /aseprite/i.test(meta.app || '') || Array.isArray(meta.frameTags);\n const entries: [string, any][] = Array.isArray(j.frames) ? j.frames.map((f: any, i: number) => [f.filename ?? f.name ?? String(i), f]) : Object.entries(j.frames);\n const frames = entries.map(([name, f]) => {\n const r = f.frame || f;\n const rotated = !!f.rotated;\n const sss = f.spriteSourceSize || { x: 0, y: 0 };\n const ss = f.sourceSize || { w: r.w, h: r.h };\n const out: SpriteFrame = { name, x: num(r.x), y: num(r.y), w: num(r.w), h: num(r.h), rotated, offsetX: num(sss.x), offsetY: num(sss.y), sourceW: num(ss.w, r.w), sourceH: num(ss.h, r.h) };\n if (typeof f.duration === 'number') out.duration = f.duration;\n return out;\n });\n if (!Array.isArray(j.frames) && !aseprite) frames.sort((a, b) => a.name.localeCompare(b.name, undefined, { numeric: true }));\n const tags: SpriteTag[] = (meta.frameTags || []).map((t: any) => ({ name: t.name, from: num(t.from), to: num(t.to), direction: t.direction || 'forward' }));\n return { frames, tags, image: meta.image, size: meta.size, format: aseprite ? 'aseprite' : meta.app || j.meta ? 'texturepacker' : 'generic' };\n}\n\n/** A grid sheet: `cols × rows` cells of `w × h` (first `n` cells). */\nexport function gridSheet(cols: number, rows: number, w: number, h: number, n = cols * rows): SpriteSheet {\n const frames: SpriteFrame[] = [];\n for (let i = 0; i < n; i++) frames.push({ name: String(i), x: (i % cols) * w, y: Math.floor(i / cols) * h, w, h, rotated: false, offsetX: 0, offsetY: 0, sourceW: w, sourceH: h });\n return { frames, tags: [], format: 'generic' };\n}\n\n/** Frame indices for a tag (or the whole sheet). */\nexport function frameOrder(sheet: SpriteSheet, tag?: string): number[] {\n const t = tag ? sheet.tags.find((x) => x.name === tag) : undefined;\n if (tag && !t) throw new Error(`[motionary] format-sprite: unknown tag \"${tag}\" (have: ${sheet.tags.map((x) => x.name).join(', ') || 'none'})`);\n const from = t ? t.from : 0, to = t ? t.to : sheet.frames.length - 1;\n const fwd = Array.from({ length: to - from + 1 }, (_, i) => from + i);\n const dir = t?.direction || 'forward';\n if (dir === 'reverse') return fwd.reverse();\n if (dir === 'pingpong') return [...fwd, ...fwd.slice(1, -1).reverse()];\n if (dir === 'pingpong_reverse') { const r = fwd.reverse(); return [...r, ...r.slice(1, -1).reverse()]; }\n return fwd;\n}\n\n/** Draw one frame onto a 2D context at (dx, dy), honouring trim offsets and rotation. */\nexport function drawFrame(ctx: CanvasRenderingContext2D, image: CanvasImageSource, f: SpriteFrame, dx = 0, dy = 0, scale = 1): void {\n ctx.save();\n ctx.translate(dx + f.offsetX * scale, dy + f.offsetY * scale);\n if (f.rotated) {\n // TexturePacker stores rotated frames 90° clockwise: w/h are the unrotated size\n ctx.rotate(-Math.PI / 2);\n ctx.drawImage(image, f.x, f.y, f.h, f.w, -f.h * scale, 0, f.h * scale, f.w * scale);\n } else ctx.drawImage(image, f.x, f.y, f.w, f.h, 0, 0, f.w * scale, f.h * scale);\n ctx.restore();\n}\n\n/** Plays a list of frames (by index) with per-frame durations. */\nabstract class FramePlayable extends Playable {\n protected times: number[] = [0];\n protected order: number[] = [];\n protected current = -1;\n protected setOrder(order: number[], dur: (i: number) => number): void {\n this.order = order;\n this.times = [0];\n for (const i of order) this.times.push(this.times[this.times.length - 1] + dur(i));\n }\n get duration(): number {\n return this.times[this.times.length - 1];\n }\n /** Index into `order` at a local time. */\n protected indexAt(ms: number): number {\n let lo = 0, hi = this.order.length - 1;\n while (lo < hi) {\n const mid = (lo + hi + 1) >> 1;\n if (this.times[mid] <= ms) lo = mid;\n else hi = mid - 1;\n }\n return Math.min(lo, this.order.length - 1);\n }\n protected renderLocal(ms: number): void {\n const k = this.order[this.indexAt(Math.min(ms, this.duration - 0.001))];\n if (k === this.current) return;\n this.current = k;\n this.show(k);\n }\n /** The frame index currently shown. */\n get frame(): number {\n return this.current;\n }\n protected abstract show(index: number): void;\n}\n\nexport interface SpritePlayerOptions {\n tag?: string;\n /** Frames per second for frames without their own duration (default 12). */\n fps?: number;\n repeat?: number;\n yoyo?: boolean;\n paused?: boolean;\n /** Canvas only: draw scale (default: fit the canvas width). */\n scale?: number;\n}\n\nclass SpritePlayer extends FramePlayable {\n constructor(private target: HTMLCanvasElement | HTMLElement, private sheet: SpriteSheet, private image: CanvasImageSource | string, o: SpritePlayerOptions) {\n super({ repeat: o.repeat ?? -1, yoyo: o.yoyo });\n const fps = o.fps || 12;\n this.setOrder(frameOrder(sheet, o.tag), (i) => sheet.frames[i].duration ?? 1000 / fps);\n this.scale = o.scale;\n if (!o.paused) this.play();\n }\n private scale?: number;\n protected show(i: number): void {\n const f = this.sheet.frames[i];\n const t = this.target as HTMLCanvasElement;\n if (typeof t.getContext === 'function' && typeof this.image !== 'string') {\n const ctx = t.getContext('2d');\n if (!ctx) return;\n const s = this.scale ?? t.width / (f.sourceW || f.w || 1);\n ctx.clearRect(0, 0, t.width, t.height);\n drawFrame(ctx, this.image, f, 0, 0, s);\n } else {\n const el = this.target as HTMLElement;\n if (typeof this.image === 'string') el.style.backgroundImage = `url(\"${this.image}\")`;\n el.style.backgroundPosition = `${-f.x}px ${-f.y}px`;\n el.style.width = `${f.w}px`;\n el.style.height = `${f.h}px`;\n el.style.backgroundRepeat = 'no-repeat';\n }\n }\n}\n\n/** Play a sprite sheet on a canvas (image = loaded image / bitmap) or an element's background (image = URL). */\nexport function spritePlayer(target: HTMLCanvasElement | HTMLElement, sheet: SpriteSheet, image: CanvasImageSource | string, o: SpritePlayerOptions = {}): Playable & { readonly frame: number } {\n return new SpritePlayer(target, sheet, image, o);\n}\n\n/** 'frame_{0001}.webp' + { start: 1, end: 3 } → frame_0001.webp, frame_0002.webp, frame_0003.webp ('{1}' = no padding). */\nexport function imageSequence(pattern: string, o: { start?: number; end: number; step?: number }): string[] {\n const m = /\\{(\\d+)\\}/.exec(pattern);\n if (!m) throw new Error('[motionary] format-sprite: the pattern needs a {0001}-style placeholder');\n const pad = m[1].length;\n const out: string[] = [];\n for (let i = o.start ?? (+m[1] || 0); i <= o.end; i += o.step || 1) out.push(pattern.replace(m[0], String(i).padStart(pad, '0')));\n return out;\n}\n\n/** Load images (resolves when all are decoded; rejects with the failing URL). */\nexport function preloadImages(urls: string[]): Promise<HTMLImageElement[]> {\n return Promise.all(urls.map((u) => new Promise<HTMLImageElement>((ok, bad) => {\n const img = new Image();\n img.decoding = 'async';\n img.onload = () => ok(img);\n img.onerror = () => bad(new Error(`[motionary] format-sprite: could not load ${u}`));\n img.src = u;\n })));\n}\n\nclass SequencePlayer extends FramePlayable {\n constructor(private canvas: HTMLCanvasElement, private images: CanvasImageSource[], o: { fps?: number; repeat?: number; yoyo?: boolean; paused?: boolean }) {\n super({ repeat: o.repeat ?? 0, yoyo: o.yoyo });\n const fps = o.fps || 24;\n this.setOrder(images.map((_, i) => i), () => 1000 / fps);\n if (!o.paused) this.play();\n }\n protected show(i: number): void {\n const ctx = this.canvas.getContext('2d');\n const img = this.images[i] as any;\n if (!ctx || !img) return;\n const w = this.canvas.width, h = this.canvas.height;\n const iw = img.naturalWidth || img.width || w, ih = img.naturalHeight || img.height || h;\n const s = Math.max(w / iw, h / ih); // cover\n ctx.clearRect(0, 0, w, h);\n ctx.drawImage(img, (w - iw * s) / 2, (h - ih * s) / 2, iw * s, ih * s);\n }\n}\n\n/** Play (or scrub, via `progress`) an image sequence on a canvas, `object-fit: cover` style. */\nexport function sequencePlayer(canvas: HTMLCanvasElement, images: CanvasImageSource[], o: { fps?: number; repeat?: number; yoyo?: boolean; paused?: boolean } = {}): Playable & { readonly frame: number } {\n return new SequencePlayer(canvas, images, o);\n}\n\nexport interface FormatSpriteApi {\n parseSpriteSheet: typeof parseSpriteSheet;\n gridSheet: typeof gridSheet;\n frameOrder: typeof frameOrder;\n drawFrame: typeof drawFrame;\n spritePlayer: typeof spritePlayer;\n imageSequence: typeof imageSequence;\n preloadImages: typeof preloadImages;\n sequencePlayer: typeof sequencePlayer;\n}\n\n/** The module object for `use(formatSprite)`. */\nexport const formatSprite: RuntimeModule<FormatSpriteApi> = { id: 'format-sprite', version: RUNTIME_VERSION, requires: ['core'], api: { parseSpriteSheet, gridSheet, frameOrder, drawFrame, spritePlayer, imageSequence, preloadImages, sequencePlayer } };\n"],"names":[],"mappings":"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"}
|
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
-
var registry = require('../chunks/registry-
|
|
4
|
-
var tween = require('../chunks/tween-
|
|
5
|
-
require('../chunks/
|
|
3
|
+
var registry = require('../chunks/registry-tzwKkldE.cjs');
|
|
4
|
+
var tween = require('../chunks/tween-CwLLC3Ko.cjs');
|
|
5
|
+
var ease = require('../chunks/ease-HwYZnZat.cjs');
|
|
6
|
+
require('../chunks/ticker-Un0bvTWR.cjs');
|
|
6
7
|
|
|
7
8
|
/**
|
|
8
9
|
* `motionary/runtime/format-svg` (10.2) — SVG animation with the runtime
|
|
@@ -356,7 +357,7 @@ class SmilTrack extends tween.Playable {
|
|
|
356
357
|
this.morphs = [];
|
|
357
358
|
this.base = info.target.getAttribute(info.attribute);
|
|
358
359
|
this.interp = info.attribute === 'd' ? (a, b, p) => this.morph(a, b)(p) : info.kind === 'animateTransform' ? lerpNumbers : lerpAny;
|
|
359
|
-
this.splines = (info.keySplines || '').split(';').filter((s) => s.trim()).map((s) => { const n = numList(s); return
|
|
360
|
+
this.splines = (info.keySplines || '').split(';').filter((s) => s.trim()).map((s) => { const n = numList(s); return ease.cubicBezier(n[0], n[1], n[2], n[3]); });
|
|
360
361
|
}
|
|
361
362
|
morph(a, b) {
|
|
362
363
|
const key = a + '|' + b;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"format-svg.cjs","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":["parseValue","Playable","cubicBezier","Timeline","RUNTIME_VERSION"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"format-svg.cjs","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":["parseValue","Playable","cubicBezier","Timeline","RUNTIME_VERSION"],"mappings":"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"}
|