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":"page.js","sources":["../../src/components/page/cursor.ts","../../src/components/page/scroll.ts","../../src/components/page/fullpage.ts","../../src/components/page/loading-bar.ts","../../src/components/page/back-to-top.ts","../../src/components/page/ambient.ts","../../src/components/page/splash.ts","../../src/components/page/auto-skeleton.ts","../../src/components/page/motion-switch.ts","../../src/components/page/transitions.ts","../../src/components/page/index.ts"],"sourcesContent":["import { defineElement, raf, caf, type UsaElement } from '../base';\nimport css from './cursor.css?raw';\n\nexport const CURSOR_MODES = ['dot', 'magnetic', 'glow'] as const;\nexport type CursorMode = (typeof CURSOR_MODES)[number];\n\n/**\n * `<usa-cursor mode=\"dot | magnetic | glow\">` — a custom cursor for\n * the page (place it once, e.g. at the end of `<body>`).\n * - `dot` — a ring that follows with spring lag around the real pointer;\n * (6.0: `mode=\"trail\"` was removed — use the registered `comet-trail` effect;\n * unknown modes render as `dot`.)\n * - `magnetic` — the ring snaps onto and wraps hovered targets (`a`,\n * `button`, `[data-cursor]`);\n * - `glow` — a large soft light following the pointer (great on dark UIs).\n * Attributes: `mode`, `color`, `size` (px, 28), `hide-native` (hide the\n * system cursor), `targets` (selector, magnetic). Only for fine pointers\n * (mouse / pen); never on touch. Reduced motion: not rendered.\n */\nexport interface UsaCursorElement extends UsaElement {\n readonly active: boolean;\n}\n\nexport function defineCursor(tag = 'usa-cursor'): CustomElementConstructor | undefined {\n return defineElement(\n tag,\n (Base) =>\n class UsaCursor extends Base {\n static get observedAttributes(): string[] {\n return ['mode', 'size', 'color', 'hide-native'];\n }\n private _frame = 0;\n get active(): boolean {\n return this.hasAttribute('data-active');\n }\n\n mount(): void {\n this.setAttribute('aria-hidden', 'true');\n const fine = typeof matchMedia !== 'function' || matchMedia('(pointer: fine)').matches || matchMedia('(hover: hover)').matches;\n if (this.reduced || !fine) {\n // Decorative only: never leave (focusable) content inside aria-hidden (4.4 audit).\n this.replaceChildren();\n return;\n }\n const m = this.str('mode', 'dot') as CursorMode;\n const mode: CursorMode = CURSOR_MODES.includes(m) ? m : 'dot';\n const n = 1;\n this.innerHTML = Array.from({ length: n }, (_, i) => `<span class=\"usa-cursor-${mode === 'glow' ? 'glow' : 'ring'}\" style=\"--i:${i}\"></span>`).join('') + (mode === 'glow' ? '' : '<span class=\"usa-cursor-dot\"></span>');\n if (this.str('color')) this.style.setProperty('--usa-cursor-color', this.str('color'));\n this.style.setProperty('--usa-cursor-size', `${this.num('size', 28)}px`);\n if (this.flag('hide-native')) document.documentElement.classList.add('usa-cursor-none');\n this.onCleanup(() => document.documentElement.classList.remove('usa-cursor-none'));\n const parts = Array.from(this.querySelectorAll<HTMLElement>('.usa-cursor-ring, .usa-cursor-glow'));\n const dot = this.querySelector<HTMLElement>('.usa-cursor-dot');\n const pts = parts.map(() => ({ x: -100, y: -100 }));\n let mx = -100;\n let my = -100;\n let snap: DOMRect | null = null;\n const sel = this.str('targets', 'a, button, [role=\"button\"], [data-cursor], input, select, textarea, label');\n const loop = () => {\n this._frame = 0;\n let tx = mx;\n let ty = my;\n pts.forEach((p, i) => {\n const k = mode === 'glow' ? 0.12 : 0.22;\n const goalX = snap && i === 0 ? snap.left + snap.width / 2 : tx;\n const goalY = snap && i === 0 ? snap.top + snap.height / 2 : ty;\n p.x += (goalX - p.x) * k;\n p.y += (goalY - p.y) * k;\n parts[i].style.transform = `translate3d(${p.x.toFixed(1)}px, ${p.y.toFixed(1)}px, 0)`;\n tx = p.x;\n ty = p.y;\n });\n if (snap && parts[0]) {\n parts[0].style.width = `${snap.width + 12}px`;\n parts[0].style.height = `${snap.height + 12}px`;\n } else if (parts[0]) {\n parts[0].style.width = parts[0].style.height = '';\n }\n if (dot) dot.style.transform = `translate3d(${mx}px, ${my}px, 0)`;\n const moving = pts.some((p, i) => Math.abs(p.x - (i === 0 && snap ? snap.left + snap.width / 2 : mx)) > 0.3);\n if (moving) this._frame = raf(loop);\n };\n const kick = () => {\n if (!this._frame) this._frame = raf(loop);\n };\n this.listen(document, 'pointermove', (e: PointerEvent) => {\n if (e.pointerType === 'touch') return;\n mx = e.clientX;\n my = e.clientY;\n this.setAttribute('data-active', '');\n if (mode === 'magnetic') {\n const t = (e.target as Element)?.closest?.(sel);\n snap = t ? t.getBoundingClientRect() : null;\n this.toggleAttribute('data-snapped', !!t);\n } else {\n this.toggleAttribute('data-hover', !!(e.target as Element)?.closest?.(sel));\n }\n kick();\n }, { passive: true });\n this.listen(document, 'pointerdown', () => this.setAttribute('data-down', ''));\n this.listen(document, 'pointerup', () => this.removeAttribute('data-down'));\n this.listen(document.documentElement, 'pointerleave', () => this.removeAttribute('data-active'));\n }\n\n unmount(): void {\n caf(this._frame);\n this._frame = 0;\n this.removeAttribute('data-active');\n }\n },\n { id: 'cursor', text: css }\n );\n}\n","import { prefersReducedMotion, raf, caf, now } from '../base';\nimport { springSamples } from '../physics/spring';\n\n/**\n * `smoothScroll()` — inertial wheel smoothing for the page (or a scroll\n * container): wheel deltas are eased with a lerp each frame. Touch and\n * keyboard scrolling stay native. Returns a function that turns it off.\n * No-op under reduced motion, on touch-only devices and on the server.\n */\nexport interface SmoothScrollOptions {\n /** Scroll container (default: the page). */\n target?: HTMLElement | null;\n /** 0–1, lower = smoother / longer glide (default 0.12). */\n lerp?: number;\n /** Wheel multiplier (default 1). */\n wheelMultiplier?: number;\n}\n\nexport function smoothScroll(options: SmoothScrollOptions = {}): () => void {\n if (typeof window === 'undefined' || prefersReducedMotion()) return () => undefined;\n const el = options.target || null;\n const lerp = Math.min(1, Math.max(0.02, options.lerp ?? 0.12));\n const mult = options.wheelMultiplier ?? 1;\n const get = () => (el ? el.scrollTop : window.scrollY);\n const max = () => (el ? el.scrollHeight - el.clientHeight : document.documentElement.scrollHeight - window.innerHeight);\n const set = (y: number) => (el ? (el.scrollTop = y) : window.scrollTo(0, y));\n let target = get();\n let current = target;\n let id = 0;\n const loop = () => {\n current += (target - current) * lerp;\n if (Math.abs(target - current) < 0.5) current = target;\n set(current);\n id = current === target ? 0 : raf(loop);\n };\n const onWheel = (e: WheelEvent) => {\n if (e.ctrlKey || e.defaultPrevented) return;\n if (!id) target = current = get();\n e.preventDefault();\n const dy = e.deltaMode === 1 ? e.deltaY * 16 : e.deltaMode === 2 ? e.deltaY * (window.innerHeight || 800) : e.deltaY;\n target = Math.max(0, Math.min(max(), target + dy * mult));\n if (!id) id = raf(loop);\n };\n const onScroll = () => {\n if (!id) target = current = get();\n };\n const host: EventTarget = el || window;\n host.addEventListener('wheel', onWheel as EventListener, { passive: false });\n host.addEventListener('scroll', onScroll, { passive: true });\n return () => {\n host.removeEventListener('wheel', onWheel as EventListener);\n host.removeEventListener('scroll', onScroll);\n if (id) caf(id);\n id = 0;\n };\n}\n\n/**\n * Scroll to a y position, element or selector with spring timing (or\n * instantly under reduced motion). Resolves when done.\n */\nexport function scrollToTarget(to: number | Element | string, options: { offset?: number; target?: HTMLElement | null; preset?: string } = {}): Promise<void> {\n if (typeof window === 'undefined') return Promise.resolve();\n const el = options.target || null;\n const start = el ? el.scrollTop : window.scrollY;\n let y = typeof to === 'number' ? to : 0;\n if (typeof to !== 'number') {\n const node = typeof to === 'string' ? document.querySelector(to) : to;\n if (!node) return Promise.resolve();\n const top = node.getBoundingClientRect().top;\n y = start + top - (el ? el.getBoundingClientRect().top : 0);\n }\n y = Math.max(0, y - (options.offset ?? 0));\n const set = (v: number) => (el ? (el.scrollTop = v) : window.scrollTo(0, v));\n if (prefersReducedMotion()) {\n set(y);\n return Promise.resolve();\n }\n const { values, duration } = springSamples(options.preset || 'slow');\n const t0 = now();\n return new Promise((resolve) => {\n const step = () => {\n const p = Math.min(1, (now() - t0) / Math.max(1, duration));\n const v = values[Math.min(values.length - 1, Math.round(p * (values.length - 1)))];\n set(start + (y - start) * v);\n if (p < 1) raf(step);\n else resolve();\n };\n raf(step);\n });\n}\n","import { defineElement, type UsaElement } from '../base';\nimport { scrollToTarget } from './scroll';\nimport css from './fullpage.css?raw';\n\n/**\n * `<usa-fullpage>` — full-screen sections (its element children) that snap\n * one at a time (CSS scroll snap), with keyboard paging (PageUp/PageDown,\n * arrows, Home/End), optional dot navigation and the current section in\n * `aria-current` + `usa:section`.\n * Attributes: `dots` (show the dot nav), `axis` (`y` default, `x`).\n * Methods: `go(i)`, `next()`, `prev()`. Reduced motion: snapping stays,\n * jumps are instant.\n */\nexport interface UsaFullpageElement extends UsaElement {\n readonly index: number;\n go(i: number): void;\n next(): void;\n prev(): void;\n}\n\nexport function defineFullpage(tag = 'usa-fullpage'): CustomElementConstructor | undefined {\n return defineElement(\n tag,\n (Base) =>\n class UsaFullpage extends Base {\n private _i = 0;\n get index(): number {\n return this._i;\n }\n private sections(): HTMLElement[] {\n return (Array.from(this.children) as HTMLElement[]).filter((c) => !c.classList.contains('usa-fullpage-dots'));\n }\n\n mount(): void {\n if (!this.hasAttribute('tabindex')) this.tabIndex = 0;\n const secs = this.sections();\n secs.forEach((s, i) => {\n s.classList.add('usa-fullpage-section');\n s.setAttribute('data-index', String(i));\n });\n let nav: HTMLElement | null = null;\n if (this.flag('dots')) {\n nav = document.createElement('nav');\n nav.className = 'usa-fullpage-dots';\n nav.setAttribute('aria-label', 'Sections');\n secs.forEach((s, i) => {\n const b = document.createElement('button');\n b.type = 'button';\n b.setAttribute('aria-label', s.getAttribute('aria-label') || s.querySelector('h1,h2,h3')?.textContent?.trim() || `Section ${i + 1}`);\n b.addEventListener('click', () => this.go(i));\n nav!.append(b);\n });\n this.append(nav);\n this.onCleanup(() => nav?.remove());\n }\n this.mark(0);\n if (typeof IntersectionObserver !== 'undefined') {\n const io = new IntersectionObserver(\n (entries) => {\n for (const e of entries) if (e.isIntersecting && e.intersectionRatio >= 0.6) this.mark(Number((e.target as HTMLElement).dataset.index));\n },\n { root: this, threshold: [0.6] }\n );\n secs.forEach((s) => io.observe(s));\n this.onCleanup(() => io.disconnect());\n }\n this.listen(this, 'keydown', (e: KeyboardEvent) => {\n const n = this.sections().length;\n const map: Record<string, number> = { PageDown: this._i + 1, ArrowDown: this._i + 1, ' ': this._i + 1, PageUp: this._i - 1, ArrowUp: this._i - 1, Home: 0, End: n - 1 };\n if (this.str('axis') === 'x') Object.assign(map, { ArrowRight: this._i + 1, ArrowLeft: this._i - 1 });\n if (!(e.key in map) || (e.target as Element).closest?.('input, textarea, select')) return;\n e.preventDefault();\n this.go(map[e.key]);\n });\n }\n\n private mark(i: number): void {\n if (i === this._i && this.hasAttribute('data-ready')) return;\n this.setAttribute('data-ready', '');\n this._i = i;\n this.sections().forEach((s, j) => s.toggleAttribute('data-current', j === i));\n this.querySelectorAll('.usa-fullpage-dots button').forEach((b, j) => (j === i ? b.setAttribute('aria-current', 'true') : b.removeAttribute('aria-current')));\n this.emit('section', { index: i });\n }\n\n go(i: number): void {\n const secs = this.sections();\n const t = secs[Math.max(0, Math.min(secs.length - 1, i))];\n if (!t) return;\n if (this.str('axis') === 'x') this.scrollTo({ left: t.offsetLeft, behavior: this.reduced ? 'auto' : 'smooth' });\n else scrollToTarget(t.offsetTop, { target: this, preset: 'stiff' });\n this.mark(secs.indexOf(t));\n }\n next(): void {\n this.go(this._i + 1);\n }\n prev(): void {\n this.go(this._i - 1);\n }\n },\n { id: 'fullpage', text: css }\n );\n}\n","import { defineElement, type UsaElement } from '../base';\nimport css from './loading-bar.css?raw';\n\n/**\n * `<usa-loading-bar>` — a slim top loading bar for route changes and fetches\n * (NProgress-style): `start()` trickles towards 90 %, `done()` completes and\n * fades out, `set(0–1)` for real progress. `loadingBar` drives the first bar\n * on the page (created on demand). `role=\"progressbar\"`, `aria-busy`.\n * Attributes: `color`, `height` (px, 3), `position` (`top` default, `bottom`).\n * Reduced motion: no trickle animation — the bar shows / hides.\n */\nexport interface UsaLoadingBarElement extends UsaElement {\n readonly progress: number;\n start(): void;\n set(p: number): void;\n done(): void;\n}\n\nexport function defineLoadingBar(tag = 'usa-loading-bar'): CustomElementConstructor | undefined {\n return defineElement(\n tag,\n (Base) =>\n class UsaLoadingBar extends Base {\n private _p = 0;\n private _t: ReturnType<typeof setInterval> | undefined;\n private _h: ReturnType<typeof setTimeout> | undefined;\n get progress(): number {\n return this._p;\n }\n mount(): void {\n if (!this.querySelector('.usa-loading-bar-fill')) this.innerHTML = '<span class=\"usa-loading-bar-fill\"></span>';\n this.setAttribute('role', 'progressbar');\n this.setAttribute('aria-label', this.str('label', 'Loading'));\n this.setAttribute('aria-valuemin', '0');\n this.setAttribute('aria-valuemax', '100');\n if (this.str('color')) this.style.setProperty('--usa-loading-color', this.str('color'));\n this.style.setProperty('--usa-loading-h', `${this.num('height', 3)}px`);\n this.paint();\n }\n unmount(): void {\n clearInterval(this._t);\n clearTimeout(this._h);\n }\n private paint(): void {\n this.style.setProperty('--usa-loading', this._p.toFixed(4));\n this.setAttribute('aria-valuenow', String(Math.round(this._p * 100)));\n }\n start(): void {\n clearTimeout(this._h);\n clearInterval(this._t);\n this.setAttribute('data-active', '');\n this.setAttribute('aria-busy', 'true');\n this._p = Math.max(this._p, 0.08);\n this.paint();\n this._t = setInterval(() => {\n this._p += (0.9 - this._p) * (this.reduced ? 0.5 : 0.08);\n this.paint();\n }, 200);\n }\n set(p: number): void {\n this.setAttribute('data-active', '');\n this._p = Math.max(0, Math.min(1, p));\n this.paint();\n }\n done(): void {\n clearInterval(this._t);\n this._p = 1;\n this.paint();\n this.removeAttribute('aria-busy');\n this._h = setTimeout(() => {\n this.removeAttribute('data-active');\n this._h = setTimeout(() => {\n this._p = 0;\n this.paint();\n }, 300);\n }, 250);\n }\n },\n { id: 'loading-bar', text: css }\n );\n}\n\nfunction bar(): UsaLoadingBarElement | null {\n if (typeof document === 'undefined') return null;\n let el = document.querySelector('usa-loading-bar') as UsaLoadingBarElement | null;\n if (!el) {\n defineLoadingBar();\n el = document.createElement('usa-loading-bar') as UsaLoadingBarElement;\n document.body.appendChild(el);\n }\n return typeof el.start === 'function' ? el : null;\n}\n\n/** Drive the page's `<usa-loading-bar>` (created on first use). */\nexport const loadingBar = {\n start: (): void => bar()?.start(),\n set: (p: number): void => bar()?.set(p),\n done: (): void => bar()?.done(),\n /** Run `task` with the bar shown; resolves with its result. */\n async track<T>(task: Promise<T> | (() => Promise<T>)): Promise<T> {\n bar()?.start();\n try {\n return await (typeof task === 'function' ? task() : task);\n } finally {\n bar()?.done();\n }\n },\n};\n","import { defineElement, raf, caf, type UsaElement } from '../base';\nimport { scrollToTarget } from './scroll';\nimport css from './back-to-top.css?raw';\n\n/**\n * `<usa-back-to-top>` — a floating button that appears after `offset` px\n * (300) of scrolling, shows page progress as a ring and springs the page\n * back to the top (then focuses `focus-target`, default `#main` / `body`).\n * Attributes: `offset`, `label` (\"Back to top\"), `focus-target`, `position`\n * (`bottom-right` default, `bottom-left`). Reduced motion: instant jump.\n */\nexport interface UsaBackToTopElement extends UsaElement {\n readonly visible: boolean;\n}\n\nexport function defineBackToTop(tag = 'usa-back-to-top'): CustomElementConstructor | undefined {\n return defineElement(\n tag,\n (Base) =>\n class UsaBackToTop extends Base {\n private _frame = 0;\n get visible(): boolean {\n return this.hasAttribute('data-visible');\n }\n mount(): void {\n if (!this.querySelector('button')) {\n this.innerHTML = `<button type=\"button\" aria-label=\"${this.str('label', 'Back to top')}\"><svg viewBox=\"0 0 36 36\" aria-hidden=\"true\"><circle cx=\"18\" cy=\"18\" r=\"16\" pathLength=\"100\"/><path d=\"M12 20l6-6 6 6\"/></svg></button>`;\n }\n const btn = this.querySelector('button')!;\n const update = () => {\n this._frame = 0;\n const y = window.scrollY || document.documentElement.scrollTop || 0;\n const max = Math.max(1, (document.documentElement.scrollHeight || 0) - (window.innerHeight || 0));\n this.toggleAttribute('data-visible', y > this.num('offset', 300));\n this.style.setProperty('--usa-btt', Math.min(1, y / max).toFixed(4));\n };\n this.listen(window, 'scroll', () => {\n if (!this._frame) this._frame = raf(update);\n }, { passive: true });\n this.listen(btn, 'click', async () => {\n await scrollToTarget(0, { preset: 'slow' });\n const f = document.querySelector<HTMLElement>(this.str('focus-target', '#main')) || document.body;\n if (!f.hasAttribute('tabindex') && f !== document.body) f.tabIndex = -1;\n f.focus?.({ preventScroll: true });\n });\n update();\n }\n unmount(): void {\n caf(this._frame);\n this._frame = 0;\n }\n },\n { id: 'back-to-top', text: css }\n );\n}\n","import { defineElement, raf, caf, type UsaElement } from '../base';\nimport css from './ambient.css?raw';\n\nexport const AMBIENT_EFFECTS = ['particles', 'snow', 'stars', 'noise', 'gradient'] as const;\nexport type AmbientEffect = (typeof AMBIENT_EFFECTS)[number];\n\n/**\n * `<usa-ambient effect=\"particles | snow | stars | noise | gradient\">` — a\n * fixed, page-wide ambient layer behind (or, with `layer=\"front\"`, over)\n * the content, never catching the pointer.\n * - `particles` — slow drifting dots; `snow` — falling flakes with sway;\n * `stars` — twinkling starfield (canvas, paused in hidden tabs, DPR ≤ 2);\n * - `noise` — animated film grain (CSS, SVG turbulence);\n * - `gradient` — a gradient whose hue shifts with the scroll position.\n * Attributes: `effect`, `density` (0.2–3, 1), `color`, `opacity` (0.6),\n * `layer` (`back` default, `front`), `speed` (1). Reduced motion: one\n * static frame (no falling, twinkling or grain flicker).\n */\nexport interface UsaAmbientElement extends UsaElement {}\n\nexport function defineAmbient(tag = 'usa-ambient'): CustomElementConstructor | undefined {\n return defineElement(\n tag,\n (Base) =>\n class UsaAmbient extends Base {\n static get observedAttributes(): string[] {\n return ['effect', 'density', 'color'];\n }\n private _frame = 0;\n\n mount(): void {\n this.setAttribute('aria-hidden', 'true');\n const effect = this.str('effect', 'particles');\n this.style.setProperty('--usa-ambient-opacity', String(this.num('opacity', 0.6)));\n this.replaceChildren();\n if (effect === 'noise') return;\n if (effect === 'gradient') {\n const upd = () => {\n this._frame = 0;\n const max = Math.max(1, document.documentElement.scrollHeight - window.innerHeight);\n this.style.setProperty('--usa-ambient-p', ((window.scrollY || 0) / max).toFixed(4));\n };\n if (!this.reduced) this.listen(window, 'scroll', () => !this._frame && (this._frame = raf(upd)), { passive: true });\n upd();\n return;\n }\n const canvas = document.createElement('canvas');\n this.append(canvas);\n const ctx = canvas.getContext?.('2d');\n if (!ctx) return;\n const dpr = Math.min(2, window.devicePixelRatio || 1);\n let W = 0;\n let H = 0;\n const color = this.str('color', effect === 'snow' ? '#ffffff' : effect === 'stars' ? '#ffffff' : '#a78bfa');\n const speed = this.num('speed', 1);\n const resize = () => {\n W = window.innerWidth || 800;\n H = window.innerHeight || 600;\n canvas.width = W * dpr;\n canvas.height = H * dpr;\n canvas.style.width = `${W}px`;\n canvas.style.height = `${H}px`;\n ctx.setTransform(dpr, 0, 0, dpr, 0, 0);\n };\n resize();\n const base = effect === 'stars' ? 140 : effect === 'snow' ? 90 : 60;\n const n = Math.round(base * Math.max(0.2, Math.min(3, this.num('density', 1))) * Math.min(1.5, (W * H) / (1280 * 800)));\n const dots = Array.from({ length: n }, () => ({\n x: Math.random() * W,\n y: Math.random() * H,\n r: effect === 'stars' ? Math.random() * 1.3 + 0.2 : effect === 'snow' ? Math.random() * 2.6 + 0.8 : Math.random() * 2 + 0.6,\n vx: (Math.random() - 0.5) * 0.25,\n vy: effect === 'snow' ? Math.random() * 0.8 + 0.4 : (Math.random() - 0.5) * 0.25,\n t: Math.random() * Math.PI * 2,\n }));\n ctx.fillStyle = color;\n const draw = (move: boolean) => {\n ctx.clearRect(0, 0, W, H);\n for (const d of dots) {\n if (move) {\n d.t += 0.02 * speed;\n d.x += (d.vx + (effect === 'snow' ? Math.sin(d.t) * 0.3 : 0)) * speed;\n d.y += d.vy * speed;\n if (d.y > H + 5) d.y = -5;\n if (d.y < -5) d.y = H + 5;\n if (d.x > W + 5) d.x = -5;\n if (d.x < -5) d.x = W + 5;\n }\n ctx.globalAlpha = effect === 'stars' ? 0.35 + 0.65 * Math.abs(Math.sin(d.t)) : 0.85;\n ctx.beginPath();\n ctx.arc(d.x, d.y, d.r, 0, Math.PI * 2);\n ctx.fill();\n }\n };\n this.listen(window, 'resize', () => {\n resize();\n ctx.fillStyle = color;\n draw(false);\n });\n if (this.reduced) {\n draw(false);\n return;\n }\n const loop = () => {\n if (!document.hidden) draw(true);\n this._frame = raf(loop);\n };\n this._frame = raf(loop);\n }\n\n unmount(): void {\n caf(this._frame);\n this._frame = 0;\n }\n },\n { id: 'ambient', text: css }\n );\n}\n","import { defineElement, type UsaElement } from '../base';\nimport css from './splash.css?raw';\n\n/**\n * `<usa-splash>` — an app splash / launch screen: shows its content (logo,\n * spinner) over the page, then leaves with `exit` (`fade` default, `scale`,\n * `slide-up`, `circle`) once the page has loaded (or when you call\n * `done()`), but never sooner than `min` ms (600) — no flash.\n * Attributes: `min`, `exit`, `manual` (wait for `done()`), `label`.\n * Events: `usa:done`. The page underneath is `aria-busy` until then.\n * Reduced motion: fades.\n */\nexport interface UsaSplashElement extends UsaElement {\n done(): Promise<void>;\n}\n\nexport function defineSplash(tag = 'usa-splash'): CustomElementConstructor | undefined {\n return defineElement(\n tag,\n (Base) =>\n class UsaSplash extends Base {\n private _t0 = 0;\n private _gone = false;\n mount(): void {\n this._t0 = Date.now();\n this.setAttribute('role', 'status');\n this.setAttribute('aria-label', this.str('label', 'Loading'));\n document.body?.setAttribute('aria-busy', 'true');\n if (this.flag('manual')) return;\n if (document.readyState === 'complete') this.done();\n else this.listen(window, 'load', () => this.done(), { once: true });\n }\n async done(): Promise<void> {\n if (this._gone) return;\n this._gone = true;\n const wait = Math.max(0, this.num('min', 600) - (Date.now() - this._t0));\n if (wait) await new Promise((r) => setTimeout(r, wait));\n const exit = this.reduced ? 'fade' : this.str('exit', 'fade');\n const frames: Record<string, Keyframe[]> = {\n fade: [{ opacity: 1 }, { opacity: 0 }],\n scale: [{ opacity: 1, transform: 'scale(1)' }, { opacity: 0, transform: 'scale(1.15)' }],\n 'slide-up': [{ transform: 'translateY(0)' }, { transform: 'translateY(-100%)' }],\n circle: [{ clipPath: 'circle(150% at 50% 50%)' }, { clipPath: 'circle(0% at 50% 50%)' }],\n };\n const a = this.motion(this, frames[exit] || frames.fade, { duration: this.reduced ? 200 : 550, easing: 'cubic-bezier(0.65, 0, 0.35, 1)', fill: 'forwards' });\n await a?.finished.catch(() => undefined);\n document.body?.removeAttribute('aria-busy');\n this.hidden = true;\n this.emit('done');\n }\n },\n { id: 'splash', text: css }\n );\n}\n","import { defineElement, type UsaElement } from '../base';\nimport css from './auto-skeleton.css?raw';\n\n/**\n * `<usa-auto-skeleton loading>` — automatic skeletons: while `loading` is\n * set, every text block, image, button and input inside is drawn as a\n * shimmering placeholder of its own size — no separate skeleton markup.\n * Remove `loading` (or set `.loading = false`) and the content fades in.\n * `aria-busy` while loading. Opt elements out with `data-no-skeleton`.\n * Reduced motion: static placeholders, no shimmer or fade.\n */\nexport interface UsaAutoSkeletonElement extends UsaElement {\n loading: boolean;\n}\n\nexport function defineAutoSkeleton(tag = 'usa-auto-skeleton'): CustomElementConstructor | undefined {\n return defineElement(\n tag,\n (Base) =>\n class UsaAutoSkeleton extends Base {\n static get observedAttributes(): string[] {\n return ['loading'];\n }\n get loading(): boolean {\n return this.flag('loading');\n }\n set loading(v: boolean) {\n this.setFlag('loading', v);\n }\n mount(): void {\n this.sync(false);\n }\n changed(): void {\n this.sync(true);\n }\n private sync(animate: boolean): void {\n if (this.loading) this.setAttribute('aria-busy', 'true');\n else {\n this.removeAttribute('aria-busy');\n if (animate && !this.reduced) this.motion(this, [{ opacity: 0.4 }, { opacity: 1 }], { duration: 300, easing: 'ease-out' });\n }\n }\n },\n { id: 'auto-skeleton', text: css }\n );\n}\n","import { defineElement, configureComponents, getMotionIntensity, getMotionSensitivity, type MotionIntensity, type UsaElement } from '../base';\nimport css from './motion-switch.css?raw';\n\nconst INTENSITIES: MotionIntensity[] = ['low', 'normal', 'high'];\n/** The switch's levels: Off (motion sensitivity `minimal`) + the three intensities. */\nexport type MotionSwitchLevel = 'off' | MotionIntensity;\nconst LEVELS: MotionSwitchLevel[] = ['off', 'low', 'normal', 'high'];\nconst KEY = 'usa:motion';\n\n/**\n * Set the global motion intensity for every `<usa-*>` component:\n * `'low'`, `'normal'` (default), `'high'`. Sets `--usa-motion` and\n * `data-usa-motion` on `<html>`; with `persist` the choice is remembered\n * (localStorage) and restored by `restoreMotionIntensity()`.\n * 5.0: `'off'` was removed — use `setMotionSensitivity('minimal')`.\n */\nexport function setMotionIntensity(level: MotionIntensity, persist = false): void {\n if (!INTENSITIES.includes(level)) return;\n configureComponents({ motionIntensity: level });\n store(level, persist);\n}\n\nfunction store(level: MotionSwitchLevel, persist: boolean): void {\n if (persist) {\n try {\n localStorage.setItem(KEY, level);\n } catch {\n /* private mode */\n }\n }\n if (typeof document !== 'undefined') document.dispatchEvent(new CustomEvent('usa:motion', { detail: { level } }));\n}\n\n/** Apply a switch level: `'off'` = motion sensitivity `minimal`, otherwise full motion at that intensity. */\nexport function setMotionLevel(level: MotionSwitchLevel, persist = false): void {\n if (!LEVELS.includes(level)) return;\n if (level === 'off') configureComponents({ motionSensitivity: 'minimal' });\n else configureComponents({ motionIntensity: level, ...(getMotionSensitivity() === 'minimal' ? { motionSensitivity: 'full' as const } : {}) });\n store(level, persist);\n}\n\n/** The current switch level. */\nexport function getMotionLevel(): MotionSwitchLevel {\n return getMotionSensitivity() === 'minimal' || getMotionSensitivity() === 'static' ? 'off' : getMotionIntensity();\n}\n\n/** Re-apply a persisted level (call early on page load). Returns the active intensity. */\nexport function restoreMotionIntensity(): MotionIntensity {\n try {\n const v = localStorage.getItem(KEY) as MotionSwitchLevel | null;\n if (v && LEVELS.includes(v)) setMotionLevel(v);\n } catch {\n /* ignore */\n }\n return getMotionIntensity();\n}\n\n/**\n * `<usa-motion-switch>` — a segmented control letting users choose the\n * app's motion intensity (Off · Low · Normal · High), persisted.\n * `role=\"radiogroup\"`; arrow keys move. Attributes: `labels` (comma list),\n * `label` (\"Motion\"). Events: `usa:change` (`{ level }`).\n */\nexport interface UsaMotionSwitchElement extends UsaElement {\n value: MotionSwitchLevel;\n}\n\nexport function defineMotionSwitch(tag = 'usa-motion-switch'): CustomElementConstructor | undefined {\n return defineElement(\n tag,\n (Base) =>\n class UsaMotionSwitch extends Base {\n get value(): MotionSwitchLevel {\n return getMotionLevel();\n }\n set value(v: MotionSwitchLevel) {\n setMotionLevel(v, true);\n this.sync();\n }\n mount(): void {\n restoreMotionIntensity();\n const labels = this.str('labels', 'Off,Low,Normal,High').split(',');\n this.setAttribute('role', 'radiogroup');\n this.setAttribute('aria-label', this.str('label', 'Motion'));\n this.innerHTML = LEVELS.map((l, i) => `<button type=\"button\" role=\"radio\" data-level=\"${l}\">${labels[i] || l}</button><span hidden></span>`.replace('<span hidden></span>', '')).join('') + '<span class=\"usa-motion-thumb\" aria-hidden=\"true\"></span>';\n this.listen(this, 'click', (e: MouseEvent) => {\n const b = (e.target as Element).closest?.('[data-level]') as HTMLElement | null;\n if (b) this.pick(b.dataset.level as MotionSwitchLevel);\n });\n this.listen(this, 'keydown', (e: KeyboardEvent) => {\n const i = LEVELS.indexOf(this.value);\n const n = e.key === 'ArrowRight' || e.key === 'ArrowDown' ? i + 1 : e.key === 'ArrowLeft' || e.key === 'ArrowUp' ? i - 1 : null;\n if (n === null) return;\n e.preventDefault();\n this.pick(LEVELS[(n + LEVELS.length) % LEVELS.length]);\n (this.querySelector('[aria-checked=\"true\"]') as HTMLElement)?.focus();\n });\n this.listen(document, 'usa:motion', () => this.sync());\n this.sync();\n }\n private pick(l: MotionSwitchLevel): void {\n this.value = l;\n this.emit('change', { level: l });\n }\n private sync(): void {\n const v = this.value;\n const i = LEVELS.indexOf(v);\n this.style.setProperty('--usa-motion-i', String(i));\n this.querySelectorAll<HTMLElement>('[data-level]').forEach((b) => {\n const on = b.dataset.level === v;\n b.setAttribute('aria-checked', String(on));\n b.tabIndex = on ? 0 : -1;\n });\n }\n },\n { id: 'motion-switch', text: css }\n );\n}\n","import { prefersReducedMotion, adoptStyles } from '../base';\nimport css from './transitions.css?raw';\n\n/**\n * Page & app-wide transitions (v2.7), built on the View Transitions API\n * (Chromium: Chrome, Edge, Electron, WebView2) with graceful fallbacks.\n *\n * - `pageTransition(update, { effect })` — SPA route changes: `fade`,\n * `slide` (`slide-left` / `slide-right` / `slide-up`), `circle` (reveal\n * from `x`, `y`), `blinds`, `pixel` (stepped dissolve), `zoom`.\n * - `enableMpaTransitions(effect)` — the same effects for multi-page sites\n * (`@view-transition { navigation: auto }`); call it on every page.\n * - `themeTransition(apply, { x, y })` — a circle-reveal theme switch.\n *\n * Without View Transitions (Firefox, older Safari) or under reduced motion\n * the update runs immediately (`fade` falls back to a short cross-fade of\n * `fallback` when given).\n */\nexport const PAGE_EFFECTS = ['fade', 'slide', 'slide-left', 'slide-right', 'slide-up', 'circle', 'blinds', 'pixel', 'zoom'] as const;\nexport type PageEffect = (typeof PAGE_EFFECTS)[number];\n\nexport interface PageTransitionOptions {\n effect?: PageEffect;\n /** Circle origin in client px (default: viewport centre / last pointer). */\n x?: number;\n y?: number;\n /** Duration in ms (default 600). */\n duration?: number;\n /** Element to cross-fade when View Transitions are unavailable. */\n fallback?: Element | null;\n}\n\nlet lastPointer: [number, number] | null = null;\nfunction trackPointer(): void {\n if (typeof document === 'undefined' || (trackPointer as any).done) return;\n (trackPointer as any).done = true;\n document.addEventListener('pointerdown', (e) => (lastPointer = [e.clientX, e.clientY]), { capture: true, passive: true });\n}\n\n/** `true` when `document.startViewTransition` exists. */\nexport const supportsViewTransitions = (): boolean => typeof document !== 'undefined' && typeof (document as any).startViewTransition === 'function';\n\nfunction setVars(o: PageTransitionOptions): void {\n const d = document.documentElement;\n const W = window.innerWidth || 1024;\n const H = window.innerHeight || 768;\n const [x, y] = o.x !== undefined && o.y !== undefined ? [o.x, o.y] : lastPointer || [W / 2, H / 2];\n const r = Math.hypot(Math.max(x, W - x), Math.max(y, H - y));\n d.style.setProperty('--usa-pt-x', `${x}px`);\n d.style.setProperty('--usa-pt-y', `${y}px`);\n d.style.setProperty('--usa-pt-r', `${Math.ceil(r)}px`);\n d.style.setProperty('--usa-pt-duration', `${o.duration ?? 600}ms`);\n}\n\n/** Run `update` (sync or async) as an animated page transition. Resolves when it is done. */\nexport async function pageTransition(update: () => unknown, options: PageTransitionOptions = {}): Promise<void> {\n if (typeof document === 'undefined') {\n await update();\n return;\n }\n adoptStyles('page-transitions', css);\n trackPointer();\n const effect = options.effect || 'fade';\n if (prefersReducedMotion() || !supportsViewTransitions()) {\n await update();\n const f = options.fallback as HTMLElement | null | undefined;\n if (f && typeof f.animate === 'function' && !prefersReducedMotion()) await f.animate([{ opacity: 0 }, { opacity: 1 }], { duration: 200 }).finished.catch(() => undefined);\n return;\n }\n const d = document.documentElement;\n setVars(options);\n d.setAttribute('data-usa-pt', effect);\n try {\n const vt = (document as any).startViewTransition(() => update());\n await vt.finished;\n } finally {\n d.removeAttribute('data-usa-pt');\n }\n}\n\n/** Opt a multi-page site into cross-document view transitions with `effect`. */\nexport function enableMpaTransitions(effect: PageEffect = 'fade', duration = 450): void {\n if (typeof document === 'undefined') return;\n adoptStyles('page-transitions', css);\n adoptStyles('mpa-transitions', prefersReducedMotion() ? '' : '@view-transition{navigation:auto}');\n const d = document.documentElement;\n d.setAttribute('data-usa-pt', effect);\n setVars({ duration });\n}\n\n/**\n * Switch theme with a circle reveal from (`x`, `y`) (default: last pointer).\n * `apply` flips your theme (e.g. toggles a class / `data-theme`).\n */\nexport function themeTransition(apply: () => unknown, options: Omit<PageTransitionOptions, 'effect'> = {}): Promise<void> {\n return pageTransition(apply, { ...options, effect: 'circle', duration: options.duration ?? 650 });\n}\n","/**\n * motionary/components/page — page & app-wide effects (v2.7).\n * Page transitions (`pageTransition()`, `enableMpaTransitions()`,\n * `themeTransition()`), `<usa-cursor>`, `smoothScroll()` / `scrollToTarget()`,\n * `<usa-fullpage>`, `<usa-loading-bar>` + `loadingBar`, `<usa-back-to-top>`,\n * `<usa-ambient>`, `<usa-splash>`, `<usa-auto-skeleton>` and the global motion\n * intensity (`setMotionIntensity()`, `<usa-motion-switch>`).\n */\nimport { defineCursor, type UsaCursorElement } from './cursor';\nimport { defineFullpage, type UsaFullpageElement } from './fullpage';\nimport { defineLoadingBar, type UsaLoadingBarElement } from './loading-bar';\nimport { defineBackToTop, type UsaBackToTopElement } from './back-to-top';\nimport { defineAmbient, type UsaAmbientElement } from './ambient';\nimport { defineSplash, type UsaSplashElement } from './splash';\nimport { defineAutoSkeleton, type UsaAutoSkeletonElement } from './auto-skeleton';\nimport { defineMotionSwitch, type UsaMotionSwitchElement } from './motion-switch';\n\nexport { defineCursor, defineFullpage, defineLoadingBar, defineBackToTop, defineAmbient, defineSplash, defineAutoSkeleton, defineMotionSwitch };\nexport { pageTransition, enableMpaTransitions, themeTransition, supportsViewTransitions, PAGE_EFFECTS } from './transitions';\nexport type { PageEffect, PageTransitionOptions } from './transitions';\nexport { smoothScroll, scrollToTarget } from './scroll';\nexport type { SmoothScrollOptions } from './scroll';\nexport { loadingBar } from './loading-bar';\nexport { CURSOR_MODES } from './cursor';\nexport type { CursorMode } from './cursor';\nexport { AMBIENT_EFFECTS } from './ambient';\nexport type { AmbientEffect } from './ambient';\nexport { setMotionIntensity, restoreMotionIntensity, setMotionLevel, getMotionLevel } from './motion-switch';\nexport type { MotionSwitchLevel } from './motion-switch';\nexport { getMotionIntensity, MOTION_SCALE } from '../base';\nexport type { MotionIntensity } from '../base';\nexport type { UsaCursorElement, UsaFullpageElement, UsaLoadingBarElement, UsaBackToTopElement, UsaAmbientElement, UsaSplashElement, UsaAutoSkeletonElement, UsaMotionSwitchElement };\n\n/** Register every component of this category under its default tag. */\nexport function definePageComponents(): void {\n defineCursor();\n defineFullpage();\n defineLoadingBar();\n defineBackToTop();\n defineAmbient();\n defineSplash();\n defineAutoSkeleton();\n defineMotionSwitch();\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'usa-cursor': UsaCursorElement;\n 'usa-fullpage': UsaFullpageElement;\n 'usa-loading-bar': UsaLoadingBarElement;\n 'usa-back-to-top': UsaBackToTopElement;\n 'usa-ambient': UsaAmbientElement;\n 'usa-splash': UsaSplashElement;\n 'usa-auto-skeleton': UsaAutoSkeletonElement;\n 'usa-motion-switch': UsaMotionSwitchElement;\n }\n}\n"],"names":["css"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"page.js","sources":["../../src/components/page/cursor.ts","../../src/components/page/scroll.ts","../../src/components/page/fullpage.ts","../../src/components/page/loading-bar.ts","../../src/components/page/back-to-top.ts","../../src/components/page/ambient.ts","../../src/components/page/splash.ts","../../src/components/page/auto-skeleton.ts","../../src/components/page/motion-switch.ts","../../src/components/page/transitions.ts","../../src/components/page/index.ts"],"sourcesContent":["import { defineElement, raf, caf, type UsaElement } from '../base';\nimport css from './cursor.css?raw';\n\nexport const CURSOR_MODES = ['dot', 'magnetic', 'glow'] as const;\nexport type CursorMode = (typeof CURSOR_MODES)[number];\n\n/**\n * `<usa-cursor mode=\"dot | magnetic | glow\">` — a custom cursor for\n * the page (place it once, e.g. at the end of `<body>`).\n * - `dot` — a ring that follows with spring lag around the real pointer;\n * (6.0: `mode=\"trail\"` was removed — use the registered `comet-trail` effect;\n * unknown modes render as `dot`.)\n * - `magnetic` — the ring snaps onto and wraps hovered targets (`a`,\n * `button`, `[data-cursor]`);\n * - `glow` — a large soft light following the pointer (great on dark UIs).\n * Attributes: `mode`, `color`, `size` (px, 28), `hide-native` (hide the\n * system cursor), `targets` (selector, magnetic). Only for fine pointers\n * (mouse / pen); never on touch. Reduced motion: not rendered.\n */\nexport interface UsaCursorElement extends UsaElement {\n readonly active: boolean;\n}\n\nexport function defineCursor(tag = 'usa-cursor'): CustomElementConstructor | undefined {\n return defineElement(\n tag,\n (Base) =>\n class UsaCursor extends Base {\n static get observedAttributes(): string[] {\n return ['mode', 'size', 'color', 'hide-native'];\n }\n private _frame = 0;\n get active(): boolean {\n return this.hasAttribute('data-active');\n }\n\n mount(): void {\n this.setAttribute('aria-hidden', 'true');\n const fine = typeof matchMedia !== 'function' || matchMedia('(pointer: fine)').matches || matchMedia('(hover: hover)').matches;\n if (this.reduced || !fine) {\n // Decorative only: never leave (focusable) content inside aria-hidden (4.4 audit).\n this.replaceChildren();\n return;\n }\n const m = this.str('mode', 'dot') as CursorMode;\n const mode: CursorMode = CURSOR_MODES.includes(m) ? m : 'dot';\n const n = 1;\n this.innerHTML = Array.from({ length: n }, (_, i) => `<span class=\"usa-cursor-${mode === 'glow' ? 'glow' : 'ring'}\" style=\"--i:${i}\"></span>`).join('') + (mode === 'glow' ? '' : '<span class=\"usa-cursor-dot\"></span>');\n if (this.str('color')) this.style.setProperty('--usa-cursor-color', this.str('color'));\n this.style.setProperty('--usa-cursor-size', `${this.num('size', 28)}px`);\n if (this.flag('hide-native')) document.documentElement.classList.add('usa-cursor-none');\n this.onCleanup(() => document.documentElement.classList.remove('usa-cursor-none'));\n const parts = Array.from(this.querySelectorAll<HTMLElement>('.usa-cursor-ring, .usa-cursor-glow'));\n const dot = this.querySelector<HTMLElement>('.usa-cursor-dot');\n const pts = parts.map(() => ({ x: -100, y: -100 }));\n let mx = -100;\n let my = -100;\n let snap: DOMRect | null = null;\n const sel = this.str('targets', 'a, button, [role=\"button\"], [data-cursor], input, select, textarea, label');\n const loop = () => {\n this._frame = 0;\n let tx = mx;\n let ty = my;\n pts.forEach((p, i) => {\n const k = mode === 'glow' ? 0.12 : 0.22;\n const goalX = snap && i === 0 ? snap.left + snap.width / 2 : tx;\n const goalY = snap && i === 0 ? snap.top + snap.height / 2 : ty;\n p.x += (goalX - p.x) * k;\n p.y += (goalY - p.y) * k;\n parts[i].style.transform = `translate3d(${p.x.toFixed(1)}px, ${p.y.toFixed(1)}px, 0)`;\n tx = p.x;\n ty = p.y;\n });\n if (snap && parts[0]) {\n parts[0].style.width = `${snap.width + 12}px`;\n parts[0].style.height = `${snap.height + 12}px`;\n } else if (parts[0]) {\n parts[0].style.width = parts[0].style.height = '';\n }\n if (dot) dot.style.transform = `translate3d(${mx}px, ${my}px, 0)`;\n const moving = pts.some((p, i) => Math.abs(p.x - (i === 0 && snap ? snap.left + snap.width / 2 : mx)) > 0.3);\n if (moving) this._frame = raf(loop);\n };\n const kick = () => {\n if (!this._frame) this._frame = raf(loop);\n };\n this.listen(document, 'pointermove', (e: PointerEvent) => {\n if (e.pointerType === 'touch') return;\n mx = e.clientX;\n my = e.clientY;\n this.setAttribute('data-active', '');\n if (mode === 'magnetic') {\n const t = (e.target as Element)?.closest?.(sel);\n snap = t ? t.getBoundingClientRect() : null;\n this.toggleAttribute('data-snapped', !!t);\n } else {\n this.toggleAttribute('data-hover', !!(e.target as Element)?.closest?.(sel));\n }\n kick();\n }, { passive: true });\n this.listen(document, 'pointerdown', () => this.setAttribute('data-down', ''));\n this.listen(document, 'pointerup', () => this.removeAttribute('data-down'));\n this.listen(document.documentElement, 'pointerleave', () => this.removeAttribute('data-active'));\n }\n\n unmount(): void {\n caf(this._frame);\n this._frame = 0;\n this.removeAttribute('data-active');\n }\n },\n { id: 'cursor', text: css }\n );\n}\n","import { prefersReducedMotion, raf, caf, now } from '../base';\nimport { springSamples } from '../physics/spring';\n\n/**\n * `smoothScroll()` — inertial wheel smoothing for the page (or a scroll\n * container): wheel deltas are eased with a lerp each frame. Touch and\n * keyboard scrolling stay native. Returns a function that turns it off.\n * No-op under reduced motion, on touch-only devices and on the server.\n */\nexport interface SmoothScrollOptions {\n /** Scroll container (default: the page). */\n target?: HTMLElement | null;\n /** 0–1, lower = smoother / longer glide (default 0.12). */\n lerp?: number;\n /** Wheel multiplier (default 1). */\n wheelMultiplier?: number;\n}\n\nexport function smoothScroll(options: SmoothScrollOptions = {}): () => void {\n if (typeof window === 'undefined' || prefersReducedMotion()) return () => undefined;\n const el = options.target || null;\n const lerp = Math.min(1, Math.max(0.02, options.lerp ?? 0.12));\n const mult = options.wheelMultiplier ?? 1;\n const get = () => (el ? el.scrollTop : window.scrollY);\n const max = () => (el ? el.scrollHeight - el.clientHeight : document.documentElement.scrollHeight - window.innerHeight);\n const set = (y: number) => (el ? (el.scrollTop = y) : window.scrollTo(0, y));\n let target = get();\n let current = target;\n let id = 0;\n const loop = () => {\n current += (target - current) * lerp;\n if (Math.abs(target - current) < 0.5) current = target;\n set(current);\n id = current === target ? 0 : raf(loop);\n };\n const onWheel = (e: WheelEvent) => {\n if (e.ctrlKey || e.defaultPrevented) return;\n if (!id) target = current = get();\n e.preventDefault();\n const dy = e.deltaMode === 1 ? e.deltaY * 16 : e.deltaMode === 2 ? e.deltaY * (window.innerHeight || 800) : e.deltaY;\n target = Math.max(0, Math.min(max(), target + dy * mult));\n if (!id) id = raf(loop);\n };\n const onScroll = () => {\n if (!id) target = current = get();\n };\n const host: EventTarget = el || window;\n host.addEventListener('wheel', onWheel as EventListener, { passive: false });\n host.addEventListener('scroll', onScroll, { passive: true });\n return () => {\n host.removeEventListener('wheel', onWheel as EventListener);\n host.removeEventListener('scroll', onScroll);\n if (id) caf(id);\n id = 0;\n };\n}\n\n/**\n * Scroll to a y position, element or selector with spring timing (or\n * instantly under reduced motion). Resolves when done.\n */\nexport function scrollToTarget(to: number | Element | string, options: { offset?: number; target?: HTMLElement | null; preset?: string } = {}): Promise<void> {\n if (typeof window === 'undefined') return Promise.resolve();\n const el = options.target || null;\n const start = el ? el.scrollTop : window.scrollY;\n let y = typeof to === 'number' ? to : 0;\n if (typeof to !== 'number') {\n const node = typeof to === 'string' ? document.querySelector(to) : to;\n if (!node) return Promise.resolve();\n const top = node.getBoundingClientRect().top;\n y = start + top - (el ? el.getBoundingClientRect().top : 0);\n }\n y = Math.max(0, y - (options.offset ?? 0));\n const set = (v: number) => (el ? (el.scrollTop = v) : window.scrollTo(0, v));\n if (prefersReducedMotion()) {\n set(y);\n return Promise.resolve();\n }\n const { values, duration } = springSamples(options.preset || 'slow');\n const t0 = now();\n return new Promise((resolve) => {\n const step = () => {\n const p = Math.min(1, (now() - t0) / Math.max(1, duration));\n const v = values[Math.min(values.length - 1, Math.round(p * (values.length - 1)))];\n set(start + (y - start) * v);\n if (p < 1) raf(step);\n else resolve();\n };\n raf(step);\n });\n}\n","import { defineElement, type UsaElement } from '../base';\nimport { scrollToTarget } from './scroll';\nimport css from './fullpage.css?raw';\n\n/**\n * `<usa-fullpage>` — full-screen sections (its element children) that snap\n * one at a time (CSS scroll snap), with keyboard paging (PageUp/PageDown,\n * arrows, Home/End), optional dot navigation and the current section in\n * `aria-current` + `usa:section`.\n * Attributes: `dots` (show the dot nav), `axis` (`y` default, `x`).\n * Methods: `go(i)`, `next()`, `prev()`. Reduced motion: snapping stays,\n * jumps are instant.\n */\nexport interface UsaFullpageElement extends UsaElement {\n readonly index: number;\n go(i: number): void;\n next(): void;\n prev(): void;\n}\n\nexport function defineFullpage(tag = 'usa-fullpage'): CustomElementConstructor | undefined {\n return defineElement(\n tag,\n (Base) =>\n class UsaFullpage extends Base {\n private _i = 0;\n get index(): number {\n return this._i;\n }\n private sections(): HTMLElement[] {\n return (Array.from(this.children) as HTMLElement[]).filter((c) => !c.classList.contains('usa-fullpage-dots'));\n }\n\n mount(): void {\n if (!this.hasAttribute('tabindex')) this.tabIndex = 0;\n const secs = this.sections();\n secs.forEach((s, i) => {\n s.classList.add('usa-fullpage-section');\n s.setAttribute('data-index', String(i));\n });\n let nav: HTMLElement | null = null;\n if (this.flag('dots')) {\n nav = document.createElement('nav');\n nav.className = 'usa-fullpage-dots';\n nav.setAttribute('aria-label', 'Sections');\n secs.forEach((s, i) => {\n const b = document.createElement('button');\n b.type = 'button';\n b.setAttribute('aria-label', s.getAttribute('aria-label') || s.querySelector('h1,h2,h3')?.textContent?.trim() || `Section ${i + 1}`);\n b.addEventListener('click', () => this.go(i));\n nav!.append(b);\n });\n this.append(nav);\n this.onCleanup(() => nav?.remove());\n }\n this.mark(0);\n if (typeof IntersectionObserver !== 'undefined') {\n const io = new IntersectionObserver(\n (entries) => {\n for (const e of entries) if (e.isIntersecting && e.intersectionRatio >= 0.6) this.mark(Number((e.target as HTMLElement).dataset.index));\n },\n { root: this, threshold: [0.6] }\n );\n secs.forEach((s) => io.observe(s));\n this.onCleanup(() => io.disconnect());\n }\n this.listen(this, 'keydown', (e: KeyboardEvent) => {\n const n = this.sections().length;\n const map: Record<string, number> = { PageDown: this._i + 1, ArrowDown: this._i + 1, ' ': this._i + 1, PageUp: this._i - 1, ArrowUp: this._i - 1, Home: 0, End: n - 1 };\n if (this.str('axis') === 'x') Object.assign(map, { ArrowRight: this._i + 1, ArrowLeft: this._i - 1 });\n if (!(e.key in map) || (e.target as Element).closest?.('input, textarea, select')) return;\n e.preventDefault();\n this.go(map[e.key]);\n });\n }\n\n private mark(i: number): void {\n if (i === this._i && this.hasAttribute('data-ready')) return;\n this.setAttribute('data-ready', '');\n this._i = i;\n this.sections().forEach((s, j) => s.toggleAttribute('data-current', j === i));\n this.querySelectorAll('.usa-fullpage-dots button').forEach((b, j) => (j === i ? b.setAttribute('aria-current', 'true') : b.removeAttribute('aria-current')));\n this.emit('section', { index: i });\n }\n\n go(i: number): void {\n const secs = this.sections();\n const t = secs[Math.max(0, Math.min(secs.length - 1, i))];\n if (!t) return;\n if (this.str('axis') === 'x') this.scrollTo({ left: t.offsetLeft, behavior: this.reduced ? 'auto' : 'smooth' });\n else scrollToTarget(t.offsetTop, { target: this, preset: 'stiff' });\n this.mark(secs.indexOf(t));\n }\n next(): void {\n this.go(this._i + 1);\n }\n prev(): void {\n this.go(this._i - 1);\n }\n },\n { id: 'fullpage', text: css }\n );\n}\n","import { defineElement, type UsaElement } from '../base';\nimport css from './loading-bar.css?raw';\n\n/**\n * `<usa-loading-bar>` — a slim top loading bar for route changes and fetches\n * (NProgress-style): `start()` trickles towards 90 %, `done()` completes and\n * fades out, `set(0–1)` for real progress. `loadingBar` drives the first bar\n * on the page (created on demand). `role=\"progressbar\"`, `aria-busy`.\n * Attributes: `color`, `height` (px, 3), `position` (`top` default, `bottom`).\n * Reduced motion: no trickle animation — the bar shows / hides.\n */\nexport interface UsaLoadingBarElement extends UsaElement {\n readonly progress: number;\n start(): void;\n set(p: number): void;\n done(): void;\n}\n\nexport function defineLoadingBar(tag = 'usa-loading-bar'): CustomElementConstructor | undefined {\n return defineElement(\n tag,\n (Base) =>\n class UsaLoadingBar extends Base {\n private _p = 0;\n private _t: ReturnType<typeof setInterval> | undefined;\n private _h: ReturnType<typeof setTimeout> | undefined;\n get progress(): number {\n return this._p;\n }\n mount(): void {\n if (!this.querySelector('.usa-loading-bar-fill')) this.innerHTML = '<span class=\"usa-loading-bar-fill\"></span>';\n this.setAttribute('role', 'progressbar');\n this.setAttribute('aria-label', this.str('label', 'Loading'));\n this.setAttribute('aria-valuemin', '0');\n this.setAttribute('aria-valuemax', '100');\n if (this.str('color')) this.style.setProperty('--usa-loading-color', this.str('color'));\n this.style.setProperty('--usa-loading-h', `${this.num('height', 3)}px`);\n this.paint();\n }\n unmount(): void {\n clearInterval(this._t);\n clearTimeout(this._h);\n }\n private paint(): void {\n this.style.setProperty('--usa-loading', this._p.toFixed(4));\n this.setAttribute('aria-valuenow', String(Math.round(this._p * 100)));\n }\n start(): void {\n clearTimeout(this._h);\n clearInterval(this._t);\n this.setAttribute('data-active', '');\n this.setAttribute('aria-busy', 'true');\n this._p = Math.max(this._p, 0.08);\n this.paint();\n this._t = setInterval(() => {\n this._p += (0.9 - this._p) * (this.reduced ? 0.5 : 0.08);\n this.paint();\n }, 200);\n }\n set(p: number): void {\n this.setAttribute('data-active', '');\n this._p = Math.max(0, Math.min(1, p));\n this.paint();\n }\n done(): void {\n clearInterval(this._t);\n this._p = 1;\n this.paint();\n this.removeAttribute('aria-busy');\n this._h = setTimeout(() => {\n this.removeAttribute('data-active');\n this._h = setTimeout(() => {\n this._p = 0;\n this.paint();\n }, 300);\n }, 250);\n }\n },\n { id: 'loading-bar', text: css }\n );\n}\n\nfunction bar(): UsaLoadingBarElement | null {\n if (typeof document === 'undefined') return null;\n let el = document.querySelector('usa-loading-bar') as UsaLoadingBarElement | null;\n if (!el) {\n defineLoadingBar();\n el = document.createElement('usa-loading-bar') as UsaLoadingBarElement;\n document.body.appendChild(el);\n }\n return typeof el.start === 'function' ? el : null;\n}\n\n/** Drive the page's `<usa-loading-bar>` (created on first use). */\nexport const loadingBar = {\n start: (): void => bar()?.start(),\n set: (p: number): void => bar()?.set(p),\n done: (): void => bar()?.done(),\n /** Run `task` with the bar shown; resolves with its result. */\n async track<T>(task: Promise<T> | (() => Promise<T>)): Promise<T> {\n bar()?.start();\n try {\n return await (typeof task === 'function' ? task() : task);\n } finally {\n bar()?.done();\n }\n },\n};\n","import { defineElement, raf, caf, type UsaElement } from '../base';\nimport { scrollToTarget } from './scroll';\nimport css from './back-to-top.css?raw';\n\n/**\n * `<usa-back-to-top>` — a floating button that appears after `offset` px\n * (300) of scrolling, shows page progress as a ring and springs the page\n * back to the top (then focuses `focus-target`, default `#main` / `body`).\n * Attributes: `offset`, `label` (\"Back to top\"), `focus-target`, `position`\n * (`bottom-right` default, `bottom-left`). Reduced motion: instant jump.\n */\nexport interface UsaBackToTopElement extends UsaElement {\n readonly visible: boolean;\n}\n\nexport function defineBackToTop(tag = 'usa-back-to-top'): CustomElementConstructor | undefined {\n return defineElement(\n tag,\n (Base) =>\n class UsaBackToTop extends Base {\n private _frame = 0;\n get visible(): boolean {\n return this.hasAttribute('data-visible');\n }\n mount(): void {\n if (!this.querySelector('button')) {\n this.innerHTML = `<button type=\"button\" aria-label=\"${this.str('label', 'Back to top')}\"><svg viewBox=\"0 0 36 36\" aria-hidden=\"true\"><circle cx=\"18\" cy=\"18\" r=\"16\" pathLength=\"100\"/><path d=\"M12 20l6-6 6 6\"/></svg></button>`;\n }\n const btn = this.querySelector('button')!;\n const update = () => {\n this._frame = 0;\n const y = window.scrollY || document.documentElement.scrollTop || 0;\n const max = Math.max(1, (document.documentElement.scrollHeight || 0) - (window.innerHeight || 0));\n this.toggleAttribute('data-visible', y > this.num('offset', 300));\n this.style.setProperty('--usa-btt', Math.min(1, y / max).toFixed(4));\n };\n this.listen(window, 'scroll', () => {\n if (!this._frame) this._frame = raf(update);\n }, { passive: true });\n this.listen(btn, 'click', async () => {\n await scrollToTarget(0, { preset: 'slow' });\n const f = document.querySelector<HTMLElement>(this.str('focus-target', '#main')) || document.body;\n if (!f.hasAttribute('tabindex') && f !== document.body) f.tabIndex = -1;\n f.focus?.({ preventScroll: true });\n });\n update();\n }\n unmount(): void {\n caf(this._frame);\n this._frame = 0;\n }\n },\n { id: 'back-to-top', text: css }\n );\n}\n","import { defineElement, raf, caf, type UsaElement } from '../base';\nimport css from './ambient.css?raw';\n\nexport const AMBIENT_EFFECTS = ['particles', 'snow', 'stars', 'noise', 'gradient'] as const;\nexport type AmbientEffect = (typeof AMBIENT_EFFECTS)[number];\n\n/**\n * `<usa-ambient effect=\"particles | snow | stars | noise | gradient\">` — a\n * fixed, page-wide ambient layer behind (or, with `layer=\"front\"`, over)\n * the content, never catching the pointer.\n * - `particles` — slow drifting dots; `snow` — falling flakes with sway;\n * `stars` — twinkling starfield (canvas, paused in hidden tabs, DPR ≤ 2);\n * - `noise` — animated film grain (CSS, SVG turbulence);\n * - `gradient` — a gradient whose hue shifts with the scroll position.\n * Attributes: `effect`, `density` (0.2–3, 1), `color`, `opacity` (0.6),\n * `layer` (`back` default, `front`), `speed` (1). Reduced motion: one\n * static frame (no falling, twinkling or grain flicker).\n */\nexport interface UsaAmbientElement extends UsaElement {}\n\nexport function defineAmbient(tag = 'usa-ambient'): CustomElementConstructor | undefined {\n return defineElement(\n tag,\n (Base) =>\n class UsaAmbient extends Base {\n static get observedAttributes(): string[] {\n return ['effect', 'density', 'color'];\n }\n private _frame = 0;\n\n mount(): void {\n this.setAttribute('aria-hidden', 'true');\n const effect = this.str('effect', 'particles');\n this.style.setProperty('--usa-ambient-opacity', String(this.num('opacity', 0.6)));\n this.replaceChildren();\n if (effect === 'noise') return;\n if (effect === 'gradient') {\n const upd = () => {\n this._frame = 0;\n const max = Math.max(1, document.documentElement.scrollHeight - window.innerHeight);\n this.style.setProperty('--usa-ambient-p', ((window.scrollY || 0) / max).toFixed(4));\n };\n if (!this.reduced) this.listen(window, 'scroll', () => !this._frame && (this._frame = raf(upd)), { passive: true });\n upd();\n return;\n }\n const canvas = document.createElement('canvas');\n this.append(canvas);\n const ctx = canvas.getContext?.('2d');\n if (!ctx) return;\n const dpr = Math.min(2, window.devicePixelRatio || 1);\n let W = 0;\n let H = 0;\n const color = this.str('color', effect === 'snow' ? '#ffffff' : effect === 'stars' ? '#ffffff' : '#a78bfa');\n const speed = this.num('speed', 1);\n const resize = () => {\n W = window.innerWidth || 800;\n H = window.innerHeight || 600;\n canvas.width = W * dpr;\n canvas.height = H * dpr;\n canvas.style.width = `${W}px`;\n canvas.style.height = `${H}px`;\n ctx.setTransform(dpr, 0, 0, dpr, 0, 0);\n };\n resize();\n const base = effect === 'stars' ? 140 : effect === 'snow' ? 90 : 60;\n const n = Math.round(base * Math.max(0.2, Math.min(3, this.num('density', 1))) * Math.min(1.5, (W * H) / (1280 * 800)));\n const dots = Array.from({ length: n }, () => ({\n x: Math.random() * W,\n y: Math.random() * H,\n r: effect === 'stars' ? Math.random() * 1.3 + 0.2 : effect === 'snow' ? Math.random() * 2.6 + 0.8 : Math.random() * 2 + 0.6,\n vx: (Math.random() - 0.5) * 0.25,\n vy: effect === 'snow' ? Math.random() * 0.8 + 0.4 : (Math.random() - 0.5) * 0.25,\n t: Math.random() * Math.PI * 2,\n }));\n ctx.fillStyle = color;\n const draw = (move: boolean) => {\n ctx.clearRect(0, 0, W, H);\n for (const d of dots) {\n if (move) {\n d.t += 0.02 * speed;\n d.x += (d.vx + (effect === 'snow' ? Math.sin(d.t) * 0.3 : 0)) * speed;\n d.y += d.vy * speed;\n if (d.y > H + 5) d.y = -5;\n if (d.y < -5) d.y = H + 5;\n if (d.x > W + 5) d.x = -5;\n if (d.x < -5) d.x = W + 5;\n }\n ctx.globalAlpha = effect === 'stars' ? 0.35 + 0.65 * Math.abs(Math.sin(d.t)) : 0.85;\n ctx.beginPath();\n ctx.arc(d.x, d.y, d.r, 0, Math.PI * 2);\n ctx.fill();\n }\n };\n this.listen(window, 'resize', () => {\n resize();\n ctx.fillStyle = color;\n draw(false);\n });\n if (this.reduced) {\n draw(false);\n return;\n }\n const loop = () => {\n if (!document.hidden) draw(true);\n this._frame = raf(loop);\n };\n this._frame = raf(loop);\n }\n\n unmount(): void {\n caf(this._frame);\n this._frame = 0;\n }\n },\n { id: 'ambient', text: css }\n );\n}\n","import { defineElement, type UsaElement } from '../base';\nimport css from './splash.css?raw';\n\n/**\n * `<usa-splash>` — an app splash / launch screen: shows its content (logo,\n * spinner) over the page, then leaves with `exit` (`fade` default, `scale`,\n * `slide-up`, `circle`) once the page has loaded (or when you call\n * `done()`), but never sooner than `min` ms (600) — no flash.\n * Attributes: `min`, `exit`, `manual` (wait for `done()`), `label`.\n * Events: `usa:done`. The page underneath is `aria-busy` until then.\n * Reduced motion: fades.\n */\nexport interface UsaSplashElement extends UsaElement {\n done(): Promise<void>;\n}\n\nexport function defineSplash(tag = 'usa-splash'): CustomElementConstructor | undefined {\n return defineElement(\n tag,\n (Base) =>\n class UsaSplash extends Base {\n private _t0 = 0;\n private _gone = false;\n mount(): void {\n this._t0 = Date.now();\n this.setAttribute('role', 'status');\n this.setAttribute('aria-label', this.str('label', 'Loading'));\n document.body?.setAttribute('aria-busy', 'true');\n if (this.flag('manual')) return;\n if (document.readyState === 'complete') this.done();\n else this.listen(window, 'load', () => this.done(), { once: true });\n }\n async done(): Promise<void> {\n if (this._gone) return;\n this._gone = true;\n const wait = Math.max(0, this.num('min', 600) - (Date.now() - this._t0));\n if (wait) await new Promise((r) => setTimeout(r, wait));\n const exit = this.reduced ? 'fade' : this.str('exit', 'fade');\n const frames: Record<string, Keyframe[]> = {\n fade: [{ opacity: 1 }, { opacity: 0 }],\n scale: [{ opacity: 1, transform: 'scale(1)' }, { opacity: 0, transform: 'scale(1.15)' }],\n 'slide-up': [{ transform: 'translateY(0)' }, { transform: 'translateY(-100%)' }],\n circle: [{ clipPath: 'circle(150% at 50% 50%)' }, { clipPath: 'circle(0% at 50% 50%)' }],\n };\n const a = this.motion(this, frames[exit] || frames.fade, { duration: this.reduced ? 200 : 550, easing: 'cubic-bezier(0.65, 0, 0.35, 1)', fill: 'forwards' });\n await a?.finished.catch(() => undefined);\n document.body?.removeAttribute('aria-busy');\n this.hidden = true;\n this.emit('done');\n }\n },\n { id: 'splash', text: css }\n );\n}\n","import { defineElement, type UsaElement } from '../base';\nimport css from './auto-skeleton.css?raw';\n\n/**\n * `<usa-auto-skeleton loading>` — automatic skeletons: while `loading` is\n * set, every text block, image, button and input inside is drawn as a\n * shimmering placeholder of its own size — no separate skeleton markup.\n * Remove `loading` (or set `.loading = false`) and the content fades in.\n * `aria-busy` while loading. Opt elements out with `data-no-skeleton`.\n * Reduced motion: static placeholders, no shimmer or fade.\n */\nexport interface UsaAutoSkeletonElement extends UsaElement {\n loading: boolean;\n}\n\nexport function defineAutoSkeleton(tag = 'usa-auto-skeleton'): CustomElementConstructor | undefined {\n return defineElement(\n tag,\n (Base) =>\n class UsaAutoSkeleton extends Base {\n static get observedAttributes(): string[] {\n return ['loading'];\n }\n get loading(): boolean {\n return this.flag('loading');\n }\n set loading(v: boolean) {\n this.setFlag('loading', v);\n }\n mount(): void {\n this.sync(false);\n }\n changed(): void {\n this.sync(true);\n }\n private sync(animate: boolean): void {\n if (this.loading) this.setAttribute('aria-busy', 'true');\n else {\n this.removeAttribute('aria-busy');\n if (animate && !this.reduced) this.motion(this, [{ opacity: 0.4 }, { opacity: 1 }], { duration: 300, easing: 'ease-out' });\n }\n }\n },\n { id: 'auto-skeleton', text: css }\n );\n}\n","import { defineElement, configureComponents, getMotionIntensity, getMotionSensitivity, type MotionIntensity, type UsaElement } from '../base';\nimport css from './motion-switch.css?raw';\n\nconst INTENSITIES: MotionIntensity[] = ['low', 'normal', 'high'];\n/** The switch's levels: Off (motion sensitivity `minimal`) + the three intensities. */\nexport type MotionSwitchLevel = 'off' | MotionIntensity;\nconst LEVELS: MotionSwitchLevel[] = ['off', 'low', 'normal', 'high'];\nconst KEY = 'usa:motion';\n\n/**\n * Set the global motion intensity for every `<usa-*>` component:\n * `'low'`, `'normal'` (default), `'high'`. Sets `--usa-motion` and\n * `data-usa-motion` on `<html>`; with `persist` the choice is remembered\n * (localStorage) and restored by `restoreMotionIntensity()`.\n * 5.0: `'off'` was removed — use `setMotionSensitivity('minimal')`.\n */\nexport function setMotionIntensity(level: MotionIntensity, persist = false): void {\n if (!INTENSITIES.includes(level)) return;\n configureComponents({ motionIntensity: level });\n store(level, persist);\n}\n\nfunction store(level: MotionSwitchLevel, persist: boolean): void {\n if (persist) {\n try {\n localStorage.setItem(KEY, level);\n } catch {\n /* private mode */\n }\n }\n if (typeof document !== 'undefined') document.dispatchEvent(new CustomEvent('usa:motion', { detail: { level } }));\n}\n\n/** Apply a switch level: `'off'` = motion sensitivity `minimal`, otherwise full motion at that intensity. */\nexport function setMotionLevel(level: MotionSwitchLevel, persist = false): void {\n if (!LEVELS.includes(level)) return;\n if (level === 'off') configureComponents({ motionSensitivity: 'minimal' });\n else configureComponents({ motionIntensity: level, ...(getMotionSensitivity() === 'minimal' ? { motionSensitivity: 'full' as const } : {}) });\n store(level, persist);\n}\n\n/** The current switch level. */\nexport function getMotionLevel(): MotionSwitchLevel {\n return getMotionSensitivity() === 'minimal' || getMotionSensitivity() === 'static' ? 'off' : getMotionIntensity();\n}\n\n/** Re-apply a persisted level (call early on page load). Returns the active intensity. */\nexport function restoreMotionIntensity(): MotionIntensity {\n try {\n const v = localStorage.getItem(KEY) as MotionSwitchLevel | null;\n if (v && LEVELS.includes(v)) setMotionLevel(v);\n } catch {\n /* ignore */\n }\n return getMotionIntensity();\n}\n\n/**\n * `<usa-motion-switch>` — a segmented control letting users choose the\n * app's motion intensity (Off · Low · Normal · High), persisted.\n * `role=\"radiogroup\"`; arrow keys move. Attributes: `labels` (comma list),\n * `label` (\"Motion\"). Events: `usa:change` (`{ level }`).\n */\nexport interface UsaMotionSwitchElement extends UsaElement {\n value: MotionSwitchLevel;\n}\n\nexport function defineMotionSwitch(tag = 'usa-motion-switch'): CustomElementConstructor | undefined {\n return defineElement(\n tag,\n (Base) =>\n class UsaMotionSwitch extends Base {\n get value(): MotionSwitchLevel {\n return getMotionLevel();\n }\n set value(v: MotionSwitchLevel) {\n setMotionLevel(v, true);\n this.sync();\n }\n mount(): void {\n restoreMotionIntensity();\n const labels = this.str('labels', 'Off,Low,Normal,High').split(',');\n this.setAttribute('role', 'radiogroup');\n this.setAttribute('aria-label', this.str('label', 'Motion'));\n this.innerHTML = LEVELS.map((l, i) => `<button type=\"button\" role=\"radio\" data-level=\"${l}\">${labels[i] || l}</button><span hidden></span>`.replace('<span hidden></span>', '')).join('') + '<span class=\"usa-motion-thumb\" aria-hidden=\"true\"></span>';\n this.listen(this, 'click', (e: MouseEvent) => {\n const b = (e.target as Element).closest?.('[data-level]') as HTMLElement | null;\n if (b) this.pick(b.dataset.level as MotionSwitchLevel);\n });\n this.listen(this, 'keydown', (e: KeyboardEvent) => {\n const i = LEVELS.indexOf(this.value);\n const n = e.key === 'ArrowRight' || e.key === 'ArrowDown' ? i + 1 : e.key === 'ArrowLeft' || e.key === 'ArrowUp' ? i - 1 : null;\n if (n === null) return;\n e.preventDefault();\n this.pick(LEVELS[(n + LEVELS.length) % LEVELS.length]);\n (this.querySelector('[aria-checked=\"true\"]') as HTMLElement)?.focus();\n });\n this.listen(document, 'usa:motion', () => this.sync());\n this.sync();\n }\n private pick(l: MotionSwitchLevel): void {\n this.value = l;\n this.emit('change', { level: l });\n }\n private sync(): void {\n const v = this.value;\n const i = LEVELS.indexOf(v);\n this.style.setProperty('--usa-motion-i', String(i));\n this.querySelectorAll<HTMLElement>('[data-level]').forEach((b) => {\n const on = b.dataset.level === v;\n b.setAttribute('aria-checked', String(on));\n b.tabIndex = on ? 0 : -1;\n });\n }\n },\n { id: 'motion-switch', text: css }\n );\n}\n","import { prefersReducedMotion, adoptStyles } from '../base';\nimport css from './transitions.css?raw';\n\n/**\n * Page & app-wide transitions (v2.7), built on the View Transitions API\n * (Chromium: Chrome, Edge, Electron, WebView2) with graceful fallbacks.\n *\n * - `pageTransition(update, { effect })` — SPA route changes: `fade`,\n * `slide` (`slide-left` / `slide-right` / `slide-up`), `circle` (reveal\n * from `x`, `y`), `blinds`, `pixel` (stepped dissolve), `zoom`.\n * - `enableMpaTransitions(effect)` — the same effects for multi-page sites\n * (`@view-transition { navigation: auto }`); call it on every page.\n * - `themeTransition(apply, { x, y })` — a circle-reveal theme switch.\n *\n * Without View Transitions (Firefox, older Safari) or under reduced motion\n * the update runs immediately (`fade` falls back to a short cross-fade of\n * `fallback` when given).\n */\nexport const PAGE_EFFECTS = ['fade', 'slide', 'slide-left', 'slide-right', 'slide-up', 'circle', 'blinds', 'pixel', 'zoom'] as const;\nexport type PageEffect = (typeof PAGE_EFFECTS)[number];\n\nexport interface PageTransitionOptions {\n effect?: PageEffect;\n /** Circle origin in client px (default: viewport centre / last pointer). */\n x?: number;\n y?: number;\n /** Duration in ms (default 600). */\n duration?: number;\n /** Element to cross-fade when View Transitions are unavailable. */\n fallback?: Element | null;\n}\n\nlet lastPointer: [number, number] | null = null;\nfunction trackPointer(): void {\n if (typeof document === 'undefined' || (trackPointer as any).done) return;\n (trackPointer as any).done = true;\n document.addEventListener('pointerdown', (e) => (lastPointer = [e.clientX, e.clientY]), { capture: true, passive: true });\n}\n\n/** `true` when `document.startViewTransition` exists. */\nexport const supportsViewTransitions = (): boolean => typeof document !== 'undefined' && typeof (document as any).startViewTransition === 'function';\n\nfunction setVars(o: PageTransitionOptions): void {\n const d = document.documentElement;\n const W = window.innerWidth || 1024;\n const H = window.innerHeight || 768;\n const [x, y] = o.x !== undefined && o.y !== undefined ? [o.x, o.y] : lastPointer || [W / 2, H / 2];\n const r = Math.hypot(Math.max(x, W - x), Math.max(y, H - y));\n d.style.setProperty('--usa-pt-x', `${x}px`);\n d.style.setProperty('--usa-pt-y', `${y}px`);\n d.style.setProperty('--usa-pt-r', `${Math.ceil(r)}px`);\n d.style.setProperty('--usa-pt-duration', `${o.duration ?? 600}ms`);\n}\n\n/** Run `update` (sync or async) as an animated page transition. Resolves when it is done. */\nexport async function pageTransition(update: () => unknown, options: PageTransitionOptions = {}): Promise<void> {\n if (typeof document === 'undefined') {\n await update();\n return;\n }\n adoptStyles('page-transitions', css);\n trackPointer();\n const effect = options.effect || 'fade';\n if (prefersReducedMotion() || !supportsViewTransitions()) {\n await update();\n const f = options.fallback as HTMLElement | null | undefined;\n if (f && typeof f.animate === 'function' && !prefersReducedMotion()) await f.animate([{ opacity: 0 }, { opacity: 1 }], { duration: 200 }).finished.catch(() => undefined);\n return;\n }\n const d = document.documentElement;\n setVars(options);\n d.setAttribute('data-usa-pt', effect);\n try {\n const vt = (document as any).startViewTransition(() => update());\n await vt.finished;\n } finally {\n d.removeAttribute('data-usa-pt');\n }\n}\n\n/** Opt a multi-page site into cross-document view transitions with `effect`. */\nexport function enableMpaTransitions(effect: PageEffect = 'fade', duration = 450): void {\n if (typeof document === 'undefined') return;\n adoptStyles('page-transitions', css);\n adoptStyles('mpa-transitions', prefersReducedMotion() ? '' : '@view-transition{navigation:auto}');\n const d = document.documentElement;\n d.setAttribute('data-usa-pt', effect);\n setVars({ duration });\n}\n\n/**\n * Switch theme with a circle reveal from (`x`, `y`) (default: last pointer).\n * `apply` flips your theme (e.g. toggles a class / `data-theme`).\n */\nexport function themeTransition(apply: () => unknown, options: Omit<PageTransitionOptions, 'effect'> = {}): Promise<void> {\n return pageTransition(apply, { ...options, effect: 'circle', duration: options.duration ?? 650 });\n}\n","/**\n * motionary/components/page — page & app-wide effects (v2.7).\n * Page transitions (`pageTransition()`, `enableMpaTransitions()`,\n * `themeTransition()`), `<usa-cursor>`, `smoothScroll()` / `scrollToTarget()`,\n * `<usa-fullpage>`, `<usa-loading-bar>` + `loadingBar`, `<usa-back-to-top>`,\n * `<usa-ambient>`, `<usa-splash>`, `<usa-auto-skeleton>` and the global motion\n * intensity (`setMotionIntensity()`, `<usa-motion-switch>`).\n */\nimport { defineCursor, type UsaCursorElement } from './cursor';\nimport { defineFullpage, type UsaFullpageElement } from './fullpage';\nimport { defineLoadingBar, type UsaLoadingBarElement } from './loading-bar';\nimport { defineBackToTop, type UsaBackToTopElement } from './back-to-top';\nimport { defineAmbient, type UsaAmbientElement } from './ambient';\nimport { defineSplash, type UsaSplashElement } from './splash';\nimport { defineAutoSkeleton, type UsaAutoSkeletonElement } from './auto-skeleton';\nimport { defineMotionSwitch, type UsaMotionSwitchElement } from './motion-switch';\n\nexport { defineCursor, defineFullpage, defineLoadingBar, defineBackToTop, defineAmbient, defineSplash, defineAutoSkeleton, defineMotionSwitch };\nexport { pageTransition, enableMpaTransitions, themeTransition, supportsViewTransitions, PAGE_EFFECTS } from './transitions';\nexport type { PageEffect, PageTransitionOptions } from './transitions';\nexport { smoothScroll, scrollToTarget } from './scroll';\nexport type { SmoothScrollOptions } from './scroll';\nexport { loadingBar } from './loading-bar';\nexport { CURSOR_MODES } from './cursor';\nexport type { CursorMode } from './cursor';\nexport { AMBIENT_EFFECTS } from './ambient';\nexport type { AmbientEffect } from './ambient';\nexport { setMotionIntensity, restoreMotionIntensity, setMotionLevel, getMotionLevel } from './motion-switch';\nexport type { MotionSwitchLevel } from './motion-switch';\nexport { getMotionIntensity, MOTION_SCALE } from '../base';\nexport type { MotionIntensity } from '../base';\nexport type { UsaCursorElement, UsaFullpageElement, UsaLoadingBarElement, UsaBackToTopElement, UsaAmbientElement, UsaSplashElement, UsaAutoSkeletonElement, UsaMotionSwitchElement };\n\n/** Register every component of this category under its default tag. */\nexport function definePageComponents(): void {\n defineCursor();\n defineFullpage();\n defineLoadingBar();\n defineBackToTop();\n defineAmbient();\n defineSplash();\n defineAutoSkeleton();\n defineMotionSwitch();\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'usa-cursor': UsaCursorElement;\n 'usa-fullpage': UsaFullpageElement;\n 'usa-loading-bar': UsaLoadingBarElement;\n 'usa-back-to-top': UsaBackToTopElement;\n 'usa-ambient': UsaAmbientElement;\n 'usa-splash': UsaSplashElement;\n 'usa-auto-skeleton': UsaAutoSkeletonElement;\n 'usa-motion-switch': UsaMotionSwitchElement;\n }\n}\n"],"names":["css"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"perf.cjs","sources":["../../src/components/perf/index.ts"],"sourcesContent":["/**\n * motionary/components/perf — performance toolkit (4.5).\n *\n * - One shared rAF scheduler for every component loop (`onFrame()`, `schedulerStats()`).\n * - Animation budget: `setAnimationBudget(n)` caps concurrent component\n * animations; extra ones land on their final frame.\n * - `autoDegrade()`: watches frame rate and animation count and steps motion\n * down (`low`, then a tighter budget) while the device struggles, restoring\n * it when frames recover.\n * - On-demand CSS: `loadCategoryStyles()` / `onDemandStyles()` — used by\n * `motionary/components/lite`, the build without inlined CSS.\n */\nimport {\n onFrame,\n schedulerStats,\n activeAnimations,\n setAnimationBudget,\n animationBudget,\n setStyleLoader,\n configureComponents,\n getMotionIntensity,\n type MotionIntensity,\n} from '../base';\nimport { COMPONENT_CATEGORIES, type ComponentCategory } from '../index-tags';\n\nexport { onFrame, schedulerStats, activeAnimations, setAnimationBudget, animationBudget };\n\nexport interface AutoDegradeOptions {\n /** Frame rate below which motion is degraded (default 45). */\n minFps?: number;\n /** Concurrent animations above which motion is degraded (default 40). */\n maxActive?: number;\n /** Sample window in ms (default 1000). */\n sample?: number;\n /** Bad samples in a row before degrading (default 2). */\n patience?: number;\n /** Good samples in a row before restoring (default 3). */\n recovery?: number;\n /** Called on every change. */\n onChange?: (state: DegradeState) => void;\n}\n\nexport interface DegradeState {\n degraded: boolean;\n fps: number;\n active: number;\n reason: '' | 'fps' | 'count';\n}\n\n/**\n * Watch frame rate and animation count; while the device struggles, set\n * motion intensity to `low` and cap concurrent animations at `maxActive / 2`,\n * then restore the previous settings once frames recover. Dispatches\n * `usa:degrade` on `document`. Returns a stop function (restores settings).\n */\nexport function autoDegrade(options: AutoDegradeOptions = {}): () => void {\n const { minFps = 45, maxActive = 40, sample = 1000, patience = 2, recovery = 3, onChange } = options;\n let frames = 0;\n let elapsed = 0;\n let bad = 0;\n let good = 0;\n let prev: { intensity: MotionIntensity; budget: number } | null = null;\n const state: DegradeState = { degraded: false, fps: 60, active: 0, reason: '' };\n const set = (degraded: boolean, reason: DegradeState['reason']) => {\n if (degraded === state.degraded) return;\n state.degraded = degraded;\n state.reason = reason;\n if (degraded) {\n prev = { intensity: getMotionIntensity(), budget: animationBudget() };\n configureComponents({ motionIntensity: 'low' });\n setAnimationBudget(Math.max(4, Math.floor(maxActive / 2)));\n } else if (prev) {\n configureComponents({ motionIntensity: prev.intensity });\n setAnimationBudget(prev.budget);\n prev = null;\n }\n onChange?.({ ...state });\n if (typeof document !== 'undefined') document.dispatchEvent(new CustomEvent('usa:degrade', { detail: { ...state } }));\n };\n const stop = onFrame((_t, dt) => {\n frames++;\n elapsed += Math.min(dt, 250);\n if (elapsed < sample) return;\n state.fps = Math.round((frames * 1000) / elapsed);\n state.active = activeAnimations();\n frames = 0;\n elapsed = 0;\n const reason = state.fps < minFps ? 'fps' : state.active > maxActive ? 'count' : '';\n if (reason) {\n good = 0;\n if (++bad >= patience) set(true, reason);\n } else {\n bad = 0;\n if (++good >= recovery) set(false, '');\n }\n });\n return () => {\n stop();\n set(false, '');\n };\n}\n\nconst TAG_CATEGORY: Record<string, ComponentCategory> = {};\nfor (const [cat, tags] of Object.entries(COMPONENT_CATEGORIES)) for (const t of tags) TAG_CATEGORY[t] = cat as ComponentCategory;\n/** The category of a default `<usa-*>` tag. */\nexport const categoryOf = (tag: string): ComponentCategory | undefined => TAG_CATEGORY[tag];\n\nconst loaded = new Set<string>();\n/**\n * Add `<link rel=\"stylesheet\" href=\"{base}components/{category}.css\">` once.\n * `base` is the URL of the package's `dist/` folder.\n */\nexport function loadCategoryStyles(category: ComponentCategory | 'all', base: string): HTMLLinkElement | null {\n if (typeof document === 'undefined' || loaded.has(category)) return null;\n loaded.add(category);\n const link = document.createElement('link');\n link.rel = 'stylesheet';\n link.href = `${base.replace(/\\/?$/, '/')}${category === 'all' ? 'components.css' : `components/${category}.css`}`;\n link.setAttribute('data-usa-css', category);\n document.head.appendChild(link);\n return link;\n}\n\n/**\n * Load each category's CSS the first time one of its elements connects\n * (custom tags fall back to the full stylesheet). Returns an undo.\n */\nexport function onDemandStyles(base: string): () => void {\n setStyleLoader((tag) => loadCategoryStyles(categoryOf(tag) || 'all', base));\n return () => setStyleLoader(null);\n}\n\n/** Categories whose CSS has been requested so far. */\nexport const loadedStyles = (): string[] => Array.from(loaded);\n"],"names":["getMotionIntensity","animationBudget","configureComponents","setAnimationBudget","onFrame","activeAnimations","COMPONENT_CATEGORIES","base","setStyleLoader"],"mappings":"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
|
|
1
|
+
{"version":3,"file":"perf.cjs","sources":["../../src/components/perf/index.ts"],"sourcesContent":["/**\n * motionary/components/perf — performance toolkit (4.5).\n *\n * - One shared rAF scheduler for every component loop (`onFrame()`, `schedulerStats()`).\n * - Animation budget: `setAnimationBudget(n)` caps concurrent component\n * animations; extra ones land on their final frame.\n * - `autoDegrade()`: watches frame rate and animation count and steps motion\n * down (`low`, then a tighter budget) while the device struggles, restoring\n * it when frames recover.\n * - On-demand CSS: `loadCategoryStyles()` / `onDemandStyles()` — used by\n * `motionary/components/lite`, the build without inlined CSS.\n */\nimport {\n onFrame,\n schedulerStats,\n activeAnimations,\n setAnimationBudget,\n animationBudget,\n setStyleLoader,\n configureComponents,\n getMotionIntensity,\n type MotionIntensity,\n} from '../base';\nimport { COMPONENT_CATEGORIES, type ComponentCategory } from '../index-tags';\n\nexport { onFrame, schedulerStats, activeAnimations, setAnimationBudget, animationBudget };\n\nexport interface AutoDegradeOptions {\n /** Frame rate below which motion is degraded (default 45). */\n minFps?: number;\n /** Concurrent animations above which motion is degraded (default 40). */\n maxActive?: number;\n /** Sample window in ms (default 1000). */\n sample?: number;\n /** Bad samples in a row before degrading (default 2). */\n patience?: number;\n /** Good samples in a row before restoring (default 3). */\n recovery?: number;\n /** Called on every change. */\n onChange?: (state: DegradeState) => void;\n}\n\nexport interface DegradeState {\n degraded: boolean;\n fps: number;\n active: number;\n reason: '' | 'fps' | 'count';\n}\n\n/**\n * Watch frame rate and animation count; while the device struggles, set\n * motion intensity to `low` and cap concurrent animations at `maxActive / 2`,\n * then restore the previous settings once frames recover. Dispatches\n * `usa:degrade` on `document`. Returns a stop function (restores settings).\n */\nexport function autoDegrade(options: AutoDegradeOptions = {}): () => void {\n const { minFps = 45, maxActive = 40, sample = 1000, patience = 2, recovery = 3, onChange } = options;\n let frames = 0;\n let elapsed = 0;\n let bad = 0;\n let good = 0;\n let prev: { intensity: MotionIntensity; budget: number } | null = null;\n const state: DegradeState = { degraded: false, fps: 60, active: 0, reason: '' };\n const set = (degraded: boolean, reason: DegradeState['reason']) => {\n if (degraded === state.degraded) return;\n state.degraded = degraded;\n state.reason = reason;\n if (degraded) {\n prev = { intensity: getMotionIntensity(), budget: animationBudget() };\n configureComponents({ motionIntensity: 'low' });\n setAnimationBudget(Math.max(4, Math.floor(maxActive / 2)));\n } else if (prev) {\n configureComponents({ motionIntensity: prev.intensity });\n setAnimationBudget(prev.budget);\n prev = null;\n }\n onChange?.({ ...state });\n if (typeof document !== 'undefined') document.dispatchEvent(new CustomEvent('usa:degrade', { detail: { ...state } }));\n };\n const stop = onFrame((_t, dt) => {\n frames++;\n elapsed += Math.min(dt, 250);\n if (elapsed < sample) return;\n state.fps = Math.round((frames * 1000) / elapsed);\n state.active = activeAnimations();\n frames = 0;\n elapsed = 0;\n const reason = state.fps < minFps ? 'fps' : state.active > maxActive ? 'count' : '';\n if (reason) {\n good = 0;\n if (++bad >= patience) set(true, reason);\n } else {\n bad = 0;\n if (++good >= recovery) set(false, '');\n }\n });\n return () => {\n stop();\n set(false, '');\n };\n}\n\nconst TAG_CATEGORY: Record<string, ComponentCategory> = {};\nfor (const [cat, tags] of Object.entries(COMPONENT_CATEGORIES)) for (const t of tags) TAG_CATEGORY[t] = cat as ComponentCategory;\n/** The category of a default `<usa-*>` tag. */\nexport const categoryOf = (tag: string): ComponentCategory | undefined => TAG_CATEGORY[tag];\n\nconst loaded = new Set<string>();\n/**\n * Add `<link rel=\"stylesheet\" href=\"{base}components/{category}.css\">` once.\n * `base` is the URL of the package's `dist/` folder.\n */\nexport function loadCategoryStyles(category: ComponentCategory | 'all', base: string): HTMLLinkElement | null {\n if (typeof document === 'undefined' || loaded.has(category)) return null;\n loaded.add(category);\n const link = document.createElement('link');\n link.rel = 'stylesheet';\n link.href = `${base.replace(/\\/?$/, '/')}${category === 'all' ? 'components.css' : `components/${category}.css`}`;\n link.setAttribute('data-usa-css', category);\n document.head.appendChild(link);\n return link;\n}\n\n/**\n * Load each category's CSS the first time one of its elements connects\n * (custom tags fall back to the full stylesheet). Returns an undo.\n */\nexport function onDemandStyles(base: string): () => void {\n setStyleLoader((tag) => loadCategoryStyles(categoryOf(tag) || 'all', base));\n return () => setStyleLoader(null);\n}\n\n/** Categories whose CSS has been requested so far. */\nexport const loadedStyles = (): string[] => Array.from(loaded);\n"],"names":["getMotionIntensity","animationBudget","configureComponents","setAnimationBudget","onFrame","activeAnimations","COMPONENT_CATEGORIES","base","setStyleLoader"],"mappings":"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"}
|
package/dist/components/perf.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import {
|
|
2
|
-
export {
|
|
1
|
+
import { v as onFrame, z as setStyleLoader, q as animationBudget, u as getMotionIntensity, c as configureComponents, x as setAnimationBudget, k as activeAnimations } from '../chunks/base-BTev8qxg.js';
|
|
2
|
+
export { w as schedulerStats } from '../chunks/base-BTev8qxg.js';
|
|
3
3
|
import { C as COMPONENT_CATEGORIES } from '../chunks/index-tags-B-JBecYg.js';
|
|
4
4
|
|
|
5
5
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"perf.js","sources":["../../src/components/perf/index.ts"],"sourcesContent":["/**\n * motionary/components/perf — performance toolkit (4.5).\n *\n * - One shared rAF scheduler for every component loop (`onFrame()`, `schedulerStats()`).\n * - Animation budget: `setAnimationBudget(n)` caps concurrent component\n * animations; extra ones land on their final frame.\n * - `autoDegrade()`: watches frame rate and animation count and steps motion\n * down (`low`, then a tighter budget) while the device struggles, restoring\n * it when frames recover.\n * - On-demand CSS: `loadCategoryStyles()` / `onDemandStyles()` — used by\n * `motionary/components/lite`, the build without inlined CSS.\n */\nimport {\n onFrame,\n schedulerStats,\n activeAnimations,\n setAnimationBudget,\n animationBudget,\n setStyleLoader,\n configureComponents,\n getMotionIntensity,\n type MotionIntensity,\n} from '../base';\nimport { COMPONENT_CATEGORIES, type ComponentCategory } from '../index-tags';\n\nexport { onFrame, schedulerStats, activeAnimations, setAnimationBudget, animationBudget };\n\nexport interface AutoDegradeOptions {\n /** Frame rate below which motion is degraded (default 45). */\n minFps?: number;\n /** Concurrent animations above which motion is degraded (default 40). */\n maxActive?: number;\n /** Sample window in ms (default 1000). */\n sample?: number;\n /** Bad samples in a row before degrading (default 2). */\n patience?: number;\n /** Good samples in a row before restoring (default 3). */\n recovery?: number;\n /** Called on every change. */\n onChange?: (state: DegradeState) => void;\n}\n\nexport interface DegradeState {\n degraded: boolean;\n fps: number;\n active: number;\n reason: '' | 'fps' | 'count';\n}\n\n/**\n * Watch frame rate and animation count; while the device struggles, set\n * motion intensity to `low` and cap concurrent animations at `maxActive / 2`,\n * then restore the previous settings once frames recover. Dispatches\n * `usa:degrade` on `document`. Returns a stop function (restores settings).\n */\nexport function autoDegrade(options: AutoDegradeOptions = {}): () => void {\n const { minFps = 45, maxActive = 40, sample = 1000, patience = 2, recovery = 3, onChange } = options;\n let frames = 0;\n let elapsed = 0;\n let bad = 0;\n let good = 0;\n let prev: { intensity: MotionIntensity; budget: number } | null = null;\n const state: DegradeState = { degraded: false, fps: 60, active: 0, reason: '' };\n const set = (degraded: boolean, reason: DegradeState['reason']) => {\n if (degraded === state.degraded) return;\n state.degraded = degraded;\n state.reason = reason;\n if (degraded) {\n prev = { intensity: getMotionIntensity(), budget: animationBudget() };\n configureComponents({ motionIntensity: 'low' });\n setAnimationBudget(Math.max(4, Math.floor(maxActive / 2)));\n } else if (prev) {\n configureComponents({ motionIntensity: prev.intensity });\n setAnimationBudget(prev.budget);\n prev = null;\n }\n onChange?.({ ...state });\n if (typeof document !== 'undefined') document.dispatchEvent(new CustomEvent('usa:degrade', { detail: { ...state } }));\n };\n const stop = onFrame((_t, dt) => {\n frames++;\n elapsed += Math.min(dt, 250);\n if (elapsed < sample) return;\n state.fps = Math.round((frames * 1000) / elapsed);\n state.active = activeAnimations();\n frames = 0;\n elapsed = 0;\n const reason = state.fps < minFps ? 'fps' : state.active > maxActive ? 'count' : '';\n if (reason) {\n good = 0;\n if (++bad >= patience) set(true, reason);\n } else {\n bad = 0;\n if (++good >= recovery) set(false, '');\n }\n });\n return () => {\n stop();\n set(false, '');\n };\n}\n\nconst TAG_CATEGORY: Record<string, ComponentCategory> = {};\nfor (const [cat, tags] of Object.entries(COMPONENT_CATEGORIES)) for (const t of tags) TAG_CATEGORY[t] = cat as ComponentCategory;\n/** The category of a default `<usa-*>` tag. */\nexport const categoryOf = (tag: string): ComponentCategory | undefined => TAG_CATEGORY[tag];\n\nconst loaded = new Set<string>();\n/**\n * Add `<link rel=\"stylesheet\" href=\"{base}components/{category}.css\">` once.\n * `base` is the URL of the package's `dist/` folder.\n */\nexport function loadCategoryStyles(category: ComponentCategory | 'all', base: string): HTMLLinkElement | null {\n if (typeof document === 'undefined' || loaded.has(category)) return null;\n loaded.add(category);\n const link = document.createElement('link');\n link.rel = 'stylesheet';\n link.href = `${base.replace(/\\/?$/, '/')}${category === 'all' ? 'components.css' : `components/${category}.css`}`;\n link.setAttribute('data-usa-css', category);\n document.head.appendChild(link);\n return link;\n}\n\n/**\n * Load each category's CSS the first time one of its elements connects\n * (custom tags fall back to the full stylesheet). Returns an undo.\n */\nexport function onDemandStyles(base: string): () => void {\n setStyleLoader((tag) => loadCategoryStyles(categoryOf(tag) || 'all', base));\n return () => setStyleLoader(null);\n}\n\n/** Categories whose CSS has been requested so far. */\nexport const loadedStyles = (): string[] => Array.from(loaded);\n"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"perf.js","sources":["../../src/components/perf/index.ts"],"sourcesContent":["/**\n * motionary/components/perf — performance toolkit (4.5).\n *\n * - One shared rAF scheduler for every component loop (`onFrame()`, `schedulerStats()`).\n * - Animation budget: `setAnimationBudget(n)` caps concurrent component\n * animations; extra ones land on their final frame.\n * - `autoDegrade()`: watches frame rate and animation count and steps motion\n * down (`low`, then a tighter budget) while the device struggles, restoring\n * it when frames recover.\n * - On-demand CSS: `loadCategoryStyles()` / `onDemandStyles()` — used by\n * `motionary/components/lite`, the build without inlined CSS.\n */\nimport {\n onFrame,\n schedulerStats,\n activeAnimations,\n setAnimationBudget,\n animationBudget,\n setStyleLoader,\n configureComponents,\n getMotionIntensity,\n type MotionIntensity,\n} from '../base';\nimport { COMPONENT_CATEGORIES, type ComponentCategory } from '../index-tags';\n\nexport { onFrame, schedulerStats, activeAnimations, setAnimationBudget, animationBudget };\n\nexport interface AutoDegradeOptions {\n /** Frame rate below which motion is degraded (default 45). */\n minFps?: number;\n /** Concurrent animations above which motion is degraded (default 40). */\n maxActive?: number;\n /** Sample window in ms (default 1000). */\n sample?: number;\n /** Bad samples in a row before degrading (default 2). */\n patience?: number;\n /** Good samples in a row before restoring (default 3). */\n recovery?: number;\n /** Called on every change. */\n onChange?: (state: DegradeState) => void;\n}\n\nexport interface DegradeState {\n degraded: boolean;\n fps: number;\n active: number;\n reason: '' | 'fps' | 'count';\n}\n\n/**\n * Watch frame rate and animation count; while the device struggles, set\n * motion intensity to `low` and cap concurrent animations at `maxActive / 2`,\n * then restore the previous settings once frames recover. Dispatches\n * `usa:degrade` on `document`. Returns a stop function (restores settings).\n */\nexport function autoDegrade(options: AutoDegradeOptions = {}): () => void {\n const { minFps = 45, maxActive = 40, sample = 1000, patience = 2, recovery = 3, onChange } = options;\n let frames = 0;\n let elapsed = 0;\n let bad = 0;\n let good = 0;\n let prev: { intensity: MotionIntensity; budget: number } | null = null;\n const state: DegradeState = { degraded: false, fps: 60, active: 0, reason: '' };\n const set = (degraded: boolean, reason: DegradeState['reason']) => {\n if (degraded === state.degraded) return;\n state.degraded = degraded;\n state.reason = reason;\n if (degraded) {\n prev = { intensity: getMotionIntensity(), budget: animationBudget() };\n configureComponents({ motionIntensity: 'low' });\n setAnimationBudget(Math.max(4, Math.floor(maxActive / 2)));\n } else if (prev) {\n configureComponents({ motionIntensity: prev.intensity });\n setAnimationBudget(prev.budget);\n prev = null;\n }\n onChange?.({ ...state });\n if (typeof document !== 'undefined') document.dispatchEvent(new CustomEvent('usa:degrade', { detail: { ...state } }));\n };\n const stop = onFrame((_t, dt) => {\n frames++;\n elapsed += Math.min(dt, 250);\n if (elapsed < sample) return;\n state.fps = Math.round((frames * 1000) / elapsed);\n state.active = activeAnimations();\n frames = 0;\n elapsed = 0;\n const reason = state.fps < minFps ? 'fps' : state.active > maxActive ? 'count' : '';\n if (reason) {\n good = 0;\n if (++bad >= patience) set(true, reason);\n } else {\n bad = 0;\n if (++good >= recovery) set(false, '');\n }\n });\n return () => {\n stop();\n set(false, '');\n };\n}\n\nconst TAG_CATEGORY: Record<string, ComponentCategory> = {};\nfor (const [cat, tags] of Object.entries(COMPONENT_CATEGORIES)) for (const t of tags) TAG_CATEGORY[t] = cat as ComponentCategory;\n/** The category of a default `<usa-*>` tag. */\nexport const categoryOf = (tag: string): ComponentCategory | undefined => TAG_CATEGORY[tag];\n\nconst loaded = new Set<string>();\n/**\n * Add `<link rel=\"stylesheet\" href=\"{base}components/{category}.css\">` once.\n * `base` is the URL of the package's `dist/` folder.\n */\nexport function loadCategoryStyles(category: ComponentCategory | 'all', base: string): HTMLLinkElement | null {\n if (typeof document === 'undefined' || loaded.has(category)) return null;\n loaded.add(category);\n const link = document.createElement('link');\n link.rel = 'stylesheet';\n link.href = `${base.replace(/\\/?$/, '/')}${category === 'all' ? 'components.css' : `components/${category}.css`}`;\n link.setAttribute('data-usa-css', category);\n document.head.appendChild(link);\n return link;\n}\n\n/**\n * Load each category's CSS the first time one of its elements connects\n * (custom tags fall back to the full stylesheet). Returns an undo.\n */\nexport function onDemandStyles(base: string): () => void {\n setStyleLoader((tag) => loadCategoryStyles(categoryOf(tag) || 'all', base));\n return () => setStyleLoader(null);\n}\n\n/** Categories whose CSS has been requested so far. */\nexport const loadedStyles = (): string[] => Array.from(loaded);\n"],"names":[],"mappings":"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"}
|