use-scroll-animate 6.1.1 → 6.2.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/CHANGELOG.md +19 -0
- package/dist/chunks/{base-Yno7N2eC.js → base-C_3cAoRz.js} +2 -2
- package/dist/chunks/{base-Yno7N2eC.js.map → base-C_3cAoRz.js.map} +1 -1
- package/dist/chunks/{core-CUGCsMsJ.js → core-VEBw36QK.js} +2 -2
- package/dist/chunks/{core-CUGCsMsJ.js.map → core-VEBw36QK.js.map} +1 -1
- package/dist/chunks/{core-BIOaYdgN.js → core-ps8uvYuN.js} +2 -2
- package/dist/chunks/{core-BIOaYdgN.js.map → core-ps8uvYuN.js.map} +1 -1
- package/dist/chunks/{fx-BqDeFywO.js → fx-Bs6IrV4Q.js} +2 -2
- package/dist/chunks/{fx-BqDeFywO.js.map → fx-Bs6IrV4Q.js.map} +1 -1
- package/dist/chunks/generative-D2YyhaeO.js +336 -0
- package/dist/chunks/generative-D2YyhaeO.js.map +1 -0
- package/dist/chunks/generative-DzIZq-_g.cjs +348 -0
- package/dist/chunks/generative-DzIZq-_g.cjs.map +1 -0
- package/dist/chunks/gpu-Bu7qwugO.js +380 -0
- package/dist/chunks/gpu-Bu7qwugO.js.map +1 -0
- package/dist/chunks/gpu-CenK2l6b.cjs +387 -0
- package/dist/chunks/gpu-CenK2l6b.cjs.map +1 -0
- package/dist/chunks/registry-CKNLQpwd.js +121 -0
- package/dist/chunks/registry-CKNLQpwd.js.map +1 -0
- package/dist/chunks/registry-DehBVRDV.cjs +131 -0
- package/dist/chunks/registry-DehBVRDV.cjs.map +1 -0
- package/dist/chunks/{spring-DfQO5USi.js → spring-CbvHfVtP.js} +2 -2
- package/dist/chunks/{spring-DfQO5USi.js.map → spring-CbvHfVtP.js.map} +1 -1
- package/dist/chunks/{variants-VNscPeTD.js → variants-DRlKVHvu.js} +2 -2
- package/dist/chunks/{variants-VNscPeTD.js.map → variants-DRlKVHvu.js.map} +1 -1
- package/dist/components/a11y.js +2 -2
- package/dist/components/angular.cjs +1 -0
- package/dist/components/angular.cjs.map +1 -1
- package/dist/components/angular.js +7 -6
- package/dist/components/angular.js.map +1 -1
- package/dist/components/background.js +2 -2
- package/dist/components/bridge.js +1 -1
- package/dist/components/cards.js +2 -2
- package/dist/components/click.js +3 -3
- package/dist/components/depth.js +3 -3
- package/dist/components/effects.cjs +71 -403
- package/dist/components/effects.cjs.map +1 -1
- package/dist/components/effects.js +8 -339
- package/dist/components/effects.js.map +1 -1
- package/dist/components/feedback.js +1 -1
- package/dist/components/fx-gpu.cjs +12 -0
- package/dist/components/fx-gpu.cjs.map +1 -0
- package/dist/components/fx-gpu.d.cts +63 -0
- package/dist/components/fx-gpu.d.ts +63 -0
- package/dist/components/fx-gpu.js +5 -0
- package/dist/components/fx-gpu.js.map +1 -0
- package/dist/components/fx.cjs +13 -133
- package/dist/components/fx.cjs.map +1 -1
- package/dist/components/fx.js +6 -125
- package/dist/components/fx.js.map +1 -1
- package/dist/components/fx2.cjs +25 -0
- package/dist/components/fx2.cjs.map +1 -0
- package/dist/components/fx2.d.cts +136 -0
- package/dist/components/fx2.d.ts +136 -0
- package/dist/components/fx2.js +17 -0
- package/dist/components/fx2.js.map +1 -0
- package/dist/components/gesture.js +4 -4
- package/dist/components/interaction.js +1 -1
- package/dist/components/layout.js +1 -1
- package/dist/components/lite.cjs +5 -9
- package/dist/components/lite.cjs.map +1 -1
- package/dist/components/lite.js +5 -9
- package/dist/components/lite.js.map +1 -1
- package/dist/components/packs.js +1 -1
- package/dist/components/page.js +3 -3
- package/dist/components/perf.js +2 -2
- package/dist/components/physics.js +3 -3
- package/dist/components/reveal.js +1 -1
- package/dist/components/solid.cjs +1 -0
- package/dist/components/solid.cjs.map +1 -1
- package/dist/components/solid.js +7 -6
- package/dist/components/solid.js.map +1 -1
- package/dist/components/svelte.cjs +1 -0
- package/dist/components/svelte.cjs.map +1 -1
- package/dist/components/svelte.js +7 -6
- package/dist/components/svelte.js.map +1 -1
- package/dist/components/svg.js +1 -1
- package/dist/components/text.js +2 -2
- package/dist/components/timeline.js +3 -3
- package/dist/components/transitions.js +1 -1
- package/dist/components/ui.js +4 -4
- package/dist/components/vue.cjs +1 -0
- package/dist/components/vue.cjs.map +1 -1
- package/dist/components/vue.js +7 -6
- package/dist/components/vue.js.map +1 -1
- package/dist/components/webgl.js +1 -1
- package/dist/components/widgets.cjs +591 -0
- package/dist/components/widgets.cjs.map +1 -0
- package/dist/components/widgets.d.cts +110 -0
- package/dist/components/widgets.d.ts +110 -0
- package/dist/components/widgets.js +581 -0
- package/dist/components/widgets.js.map +1 -0
- package/dist/components.cjs +10 -9
- package/dist/components.cjs.map +1 -1
- package/dist/components.js +10 -9
- package/dist/components.js.map +1 -1
- package/dist/components.umd.js +2 -2
- package/dist/components.umd.js.map +1 -1
- package/dist/index.js +2 -2
- package/dist/widgets.umd.js +2 -0
- package/dist/widgets.umd.js.map +1 -0
- package/docs/ROADMAP.md +10 -11
- package/docs/components.md +29 -0
- package/package.json +31 -1
package/dist/index.js
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import { b as resolveTargets, h as hasDOM, s as supportsObserver, g as getScrollProgress, d as prefersReducedMotion, c as createScrollAnimate } from './chunks/core-D7cVumUu.js';
|
|
2
2
|
export { e as supportsScrollTimeline } from './chunks/core-D7cVumUu.js';
|
|
3
3
|
export { s as staggerChildren } from './chunks/stagger-DtMKo2SK.js';
|
|
4
|
-
export { T as TIMELINE_PRESETS, r as resolvePosition, s as supportsNativeScrub, t as timeline } from './chunks/core-
|
|
4
|
+
export { T as TIMELINE_PRESETS, r as resolvePosition, s as supportsNativeScrub, t as timeline } from './chunks/core-VEBw36QK.js';
|
|
5
5
|
export { E as EASING_MAP, P as PRESETS, c as registerPresets, a as resolveEasing, r as resolvePreset, b as reversePreset } from './chunks/presets-BYBVJVeP.js';
|
|
6
|
-
import './chunks/base-
|
|
6
|
+
import './chunks/base-C_3cAoRz.js';
|
|
7
7
|
import './components/tokens.js';
|
|
8
8
|
|
|
9
9
|
/**
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
!function(t,e){"object"==typeof exports&&"undefined"!=typeof module?e(exports):"function"==typeof define&&define.amd?define(["exports"],e):e((t="undefined"!=typeof globalThis?globalThis:t||self).UsaWidgets={})}(this,function(t){"use strict";const e="full",s=/rotate|scale|skew|perspective|matrix3d/;const i=new Set;function a(t,e){if(!e||i.has(t)||"undefined"==typeof document)return;i.add(t);try{if("function"==typeof CSSStyleSheet&&"adoptedStyleSheets"in document){const t=new CSSStyleSheet;return t.replaceSync(e),void(document.adoptedStyleSheets=[...document.adoptedStyleSheets,t])}}catch{}const s=document.createElement("style");s.setAttribute("data-usa",t),s.textContent=e,(document.head||document.documentElement).appendChild(s)}let n=null;function o(){if(n)return n;class t extends HTMLElement{constructor(){super(...arguments),this._cleanups=[],this._connected=!1}get reduced(){return"function"==typeof matchMedia&&!!matchMedia("(prefers-reduced-motion: reduce)").matches}connectedCallback(){if(!this._connected){if(this._connected=!0,"undefined"!=typeof document&&"loading"===document.readyState&&!this.nextSibling&&!this.childNodes.length){const t=()=>{this._connected&&this.isConnected&&this.mount()};return document.addEventListener("DOMContentLoaded",t,{once:!0}),void this._cleanups.push(()=>document.removeEventListener("DOMContentLoaded",t))}this.mount()}}disconnectedCallback(){this._connected=!1,this.teardown()}attributeChangedCallback(t,e,s){this._connected&&e!==s&&this.changed(t)}changed(t){this.teardown(),this.mount()}teardown(){this._cleanups.splice(0).reverse().forEach(t=>t()),this.unmount()}mount(){}unmount(){}str(t,e=""){const s=this.getAttribute(t);return null===s?e:s}num(t,e){const s=this.getAttribute(t),i=null===s||""===s.trim()?NaN:Number(s);return Number.isFinite(i)?i:e}flag(t){const e=this.getAttribute(t);return null!==e&&"false"!==e}setFlag(t,e){e?this.setAttribute(t,""):this.removeAttribute(t)}onCleanup(t){this._cleanups.push(t)}listen(t,e,s,i){t.addEventListener(e,s,i),this.onCleanup(()=>t.removeEventListener(e,s,i))}inView(t,e,s=this){if("undefined"==typeof IntersectionObserver)return void t(!0);const i=new IntersectionObserver(e=>{for(const s of e)t(s.isIntersecting,s)},e);i.observe(s),this.onCleanup(()=>i.disconnect())}motion(t,i,a){return function(t,i,a){if("function"!=typeof t.animate||"static"===e)return r(t,i[i.length-1]),null;if(i=function(t,i=e){return"full"!==i&&t.length?"static"===i?[t[t.length-1]]:t.map(t=>{const e={};for(const[a,n]of Object.entries(t))if("offset"===a||"easing"===a||"composite"===a)e[a]=n;else if("minimal"===i)"opacity"===a&&(e[a]=n);else{if("rotate"===a||"scale"===a||"transform"===a&&s.test(String(n)))continue;e[a]=n}return e}):t}(i),u>=d)return r(t,i[i.length-1]),null;const n=t.animate(i,a);if(a.iterations!==1/0){u++;let t=!1;const e=()=>{t||(t=!0,u--)};n?.finished?.then(e,e)}return n}(t,i,a)}emit(t,e){return this.dispatchEvent(new CustomEvent(`usa:${t}`,{detail:e,bubbles:!0,cancelable:!0}))}}return n=t,n}function r(t,e){if(e)for(const[s,i]of Object.entries(e))"offset"!==s&&"easing"!==s&&"composite"!==s&&null!=i&&(t.style[s]=String(i))}function l(t,e,s){if("undefined"==typeof customElements||"undefined"==typeof HTMLElement)return;a("base",c),s&&a(s.id,s.text);const i=customElements.get(t);if(i)return i;const n=e(o());return customElements.define(t,n),n}const c=".usa-sr{position:absolute;width:1px;height:1px;margin:-1px;padding:0;overflow:hidden;clip:rect(0 0 0 0);clip-path:inset(50%);white-space:nowrap;border:0}";let u=0,d=1/0;const h=(t,e,s)=>Math.min(s,Math.max(e,t)),f=(t,e="[data-usa-part]")=>Array.from(t.children).filter(t=>t instanceof HTMLElement&&!t.matches(e));function p(t,e,s={},i=""){const a=document.createElement(t);a.className=e,a.setAttribute("data-usa-part","");for(const[t,e]of Object.entries(s))a.setAttribute(t,e);return i&&(a.innerHTML=i),a}const b=t=>t.querySelectorAll(":scope > [data-usa-part]").forEach(t=>t.remove());let m=0;const g=t=>`${t}-${++m}`;const x=["slide","fade","scale","cards"];function v(t="usa-carousel"){return l(t,t=>class extends t{constructor(){super(...arguments),this._i=0,this._slides=[],this._track=null,this._timer=0,this._hold=!1,this._dots=[]}static get observedAttributes(){return["effect","autoplay","loop","no-controls","no-dots"]}get length(){return this._slides.length}get index(){return this._i}set index(t){this.goTo(t)}get effect(){const t=this.str("effect","slide");return x.includes(t)?t:"slide"}mount(){this.dataset.effect=this.effect,this.toggleAttribute("data-reduced",this.reduced);const t=this.querySelector(":scope > .usa-carousel-viewport");this._slides=f(t?t.firstElementChild:this),b(this);const e=p("div","usa-carousel-viewport",{"aria-live":this.num("autoplay",0)?"off":"polite"}),s=p("div","usa-carousel-track");this._track=s,e.append(s);const i=this._slides.length;if(this._slides.forEach((t,e)=>{t.setAttribute("role","group"),t.setAttribute("aria-roledescription","slide"),t.setAttribute("aria-label",`${e+1} of ${i}`),s.append(t)}),this.prepend(e),this.setAttribute("role","region"),this.setAttribute("aria-roledescription","carousel"),this.setAttribute("aria-label",this.str("label","Carousel")),this.hasAttribute("tabindex")||(this.tabIndex=0),i>1&&!this.flag("no-controls")){const t=p("button","usa-carousel-nav usa-carousel-prev",{type:"button","aria-label":"Previous slide"},"‹"),e=p("button","usa-carousel-nav usa-carousel-next",{type:"button","aria-label":"Next slide"},"›");this.listen(t,"click",()=>this.prev()),this.listen(e,"click",()=>this.next()),this.append(t,e)}if(this._dots=[],i>1&&!this.flag("no-dots")){const t=p("div","usa-carousel-dots",{role:"group","aria-label":"Choose slide"});for(let e=0;e<i;e++){const s=p("button","usa-carousel-dot",{type:"button","aria-label":`Slide ${e+1}`});this.listen(s,"click",()=>this.goTo(e)),this._dots.push(s),t.append(s)}this.append(t)}this._i=h(Math.round(this.num("index",0)),0,Math.max(0,i-1)),this.layout(0),this.listen(this,"keydown",t=>{"ArrowRight"===t.key?(t.preventDefault(),this.next()):"ArrowLeft"===t.key&&(t.preventDefault(),this.prev())}),this.drag(e);const a=this.num("autoplay",0);if(a>0&&i>1&&!this.reduced){let t=!0;this.inView(e=>t=e);const e=t=>()=>this._hold=t;this.listen(this,"pointerenter",e(!0)),this.listen(this,"pointerleave",e(!1)),this.listen(this,"focusin",e(!0)),this.listen(this,"focusout",e(!1)),this._timer=window.setInterval(()=>{!t||this._hold||document.hidden||this.next()},Math.max(1200,a)),this.onCleanup(()=>clearInterval(this._timer))}}drag(t){let e=0,s=0,i=-1;this.listen(t,"pointerdown",t=>{this.length<2||t.target.closest("button,a,input")||(i=t.pointerId,e=t.clientX,s=0,this.setAttribute("data-dragging",""))}),this.listen(window,"pointermove",a=>{a.pointerId===i&&(s=a.clientX-e,this.layout(s/Math.max(1,t.clientWidth)))});const a=e=>{if(e.pointerId!==i)return;i=-1,this.removeAttribute("data-dragging");const a=Math.max(1,t.clientWidth);Math.abs(s)>.18*a?s<0?this.next():this.prev():this.layout(0)};this.listen(window,"pointerup",a),this.listen(window,"pointercancel",a)}layout(t){const e=this.length,s=this._i,i=this.effect;this._track&&(this._track.style.transform="slide"===i?`translateX(${100*(-s+t)}%)`:""),this._slides.forEach((a,n)=>{let o=n-s+t;this.flag("loop")&&e>2&&(o>e/2&&(o-=e),o<-e/2&&(o+=e));const r=n===s;if(a.toggleAttribute("data-active",r),a.setAttribute("aria-hidden",String(!r)),a.inert=!r,"slide"===i)return void(a.style.transform=a.style.opacity=a.style.zIndex=a.style.filter="");const l=Math.abs(o);"fade"===i?(a.style.opacity=String(h(1-l,0,1)),a.style.transform=""):"scale"===i?(a.style.opacity=String(h(1-l,0,1)),a.style.transform=`scale(${1+Math.min(1,l)*(o<0?.12:-.12)})`):(a.style.opacity=l>2.2?"0":String(1-.28*Math.min(l,2)),a.style.transform=`translateX(${58*o}%) translateZ(${140*-l}px) rotateY(${h(38*-o,-60,60)}deg)`,a.style.filter=l>.5?`brightness(${1-.18*Math.min(l,2)})`:""),a.style.zIndex=String(100-Math.round(10*l))}),this._dots.forEach((t,e)=>t.setAttribute("aria-current",String(e===s)))}goTo(t){const e=this.length;if(!e)return;const s=this.flag("loop")?(Math.round(t)%e+e)%e:h(Math.round(t),0,e-1),i=this._i;this._i=s,this.layout(0),s!==i&&this.emit("change",{index:s,from:i})}next(){this.goTo(this._i+1>=this.length&&!this.flag("loop")?0:this._i+1)}prev(){this.goTo(this._i-1<0&&!this.flag("loop")?this.length-1:this._i-1)}},{id:"carousel",text:'usa-carousel{display:block;position:relative;--usa-carousel-dur:520ms;--usa-carousel-ease:cubic-bezier(.22,1,.36,1);overflow:hidden;border-radius:var(--usa-radius,14px);touch-action:pan-y}.usa-carousel-viewport{position:relative;overflow:hidden;height:100%;min-height:inherit}.usa-carousel-track{display:flex;height:100%;transition:transform var(--usa-carousel-dur) var(--usa-carousel-ease);will-change:transform}.usa-carousel-track>*{flex:0 0 100%;min-width:0;box-sizing:border-box}usa-carousel:not([data-effect="slide"]) .usa-carousel-track{display:grid}usa-carousel:not([data-effect="slide"]) .usa-carousel-track>*{grid-area:1/1;transition:opacity var(--usa-carousel-dur) ease,transform var(--usa-carousel-dur) var(--usa-carousel-ease),filter var(--usa-carousel-dur) ease}usa-carousel[data-effect="cards"] .usa-carousel-viewport{perspective:900px}usa-carousel[data-dragging] .usa-carousel-track,usa-carousel[data-dragging] .usa-carousel-track>*{transition:none}.usa-carousel-nav{position:absolute;top:50%;translate:0 -50%;z-index:2;width:36px;height:36px;border-radius:50%;border:0;background:rgba(255,255,255,.85);color:#111;font:600 18px/1 system-ui;cursor:pointer;display:grid;place-items:center;box-shadow:0 4px 14px rgba(0,0,0,.18);transition:transform .2s}.usa-carousel-nav:hover{transform:scale(1.08)}.usa-carousel-nav:focus-visible{outline:2px solid #7c5cff;outline-offset:2px}.usa-carousel-prev{left:10px}.usa-carousel-next{right:10px}.usa-carousel-dots{position:absolute;left:0;right:0;bottom:10px;display:flex;justify-content:center;gap:6px;z-index:2}.usa-carousel-dot{width:8px;height:8px;padding:0;border:0;border-radius:99px;background:rgba(255,255,255,.55);cursor:pointer;transition:width .35s var(--usa-carousel-ease),background .35s}.usa-carousel-dot[aria-current="true"]{width:22px;background:#fff}@media (prefers-reduced-motion:reduce){usa-carousel .usa-carousel-track,usa-carousel .usa-carousel-track>*,.usa-carousel-dot{transition:none!important}}usa-carousel[data-reduced] .usa-carousel-track,usa-carousel[data-reduced] .usa-carousel-track>*{transition:none!important}'})}const y=["pill","underline","glow","gooey"];function w(t="usa-tab-bar"){return l(t,t=>class extends t{constructor(){super(...arguments),this._tabs=[],this._panels=[],this._ink=null,this._i=0}static get observedAttributes(){return["indicator"]}get selected(){return this._i}set selected(t){this.select(t)}mount(){const t=this.str("indicator","pill");this.dataset.indicator=y.includes(t)?t:"pill";let e=this.querySelector(":scope > .usa-tab-bar-list");e||(e=p("div","usa-tab-bar-list"),this.prepend(e)),e.setAttribute("role","tablist"),e.setAttribute("aria-label",this.str("label","Tabs"));const s=f(this);this._panels=s.filter(t=>t.hasAttribute("data-panel"));for(const t of s)!t.hasAttribute("data-panel")&&t.matches("button,[data-tab]")&&e.append(t);if(this._tabs=Array.from(e.children).filter(t=>t instanceof HTMLElement&&!t.classList.contains("usa-tab-bar-ink")),this._ink=e.querySelector(".usa-tab-bar-ink")||p("span","usa-tab-bar-ink",{"aria-hidden":"true"}),e.prepend(this._ink),this._tabs.forEach((t,e)=>{t.setAttribute("role","tab"),"button"!==t.localName||t.hasAttribute("type")||t.setAttribute("type","button"),t.id||(t.id=g("usa-tab"));const s=this._panels[e];s&&(s.id||(s.id=g("usa-tabpanel")),s.classList.add("usa-tab-bar-panel"),s.setAttribute("role","tabpanel"),s.setAttribute("aria-labelledby",t.id),s.tabIndex=0,t.setAttribute("aria-controls",s.id)),this.listen(t,"click",()=>this.select(e))}),this.listen(e,"keydown",t=>{const e=function(t,e,s,i=!1){const a=i?"ArrowUp":"ArrowLeft",n=i?"ArrowDown":"ArrowRight";return t.key===a?(e-1+s)%s:t.key===n?(e+1)%s:"Home"===t.key?0:"End"===t.key?s-1:-1}(t,this._i,this._tabs.length);e<0||(t.preventDefault(),this.select(e),this._tabs[e].focus())}),this._i=Math.min(Math.max(0,Math.round(this.num("selected",0))),Math.max(0,this._tabs.length-1)),this.sync(-1),"function"==typeof ResizeObserver){const t=new ResizeObserver(()=>this.place());t.observe(e),this.onCleanup(()=>t.disconnect())}}rect(t){const e=this._tabs[t];return e?[e.offsetLeft,e.offsetWidth]:[0,0]}place(){if(!this._ink)return;const[t,e]=this.rect(this._i);this._ink.style.transform=`translateX(${t}px)`,this._ink.style.width=`${e}px`}sync(t){if(this._tabs.forEach((t,e)=>{t.setAttribute("aria-selected",String(e===this._i)),t.tabIndex=e===this._i?0:-1}),this._panels.forEach((t,e)=>t.hidden=e!==this._i),this.place(),t<0||t===this._i||!this._ink||this.reduced)return;const[e,s]=this.rect(t),[i,a]=this.rect(this._i),n=i>e,o=n?{transform:`translateX(${e}px)`,width:i+a-e+"px"}:{transform:`translateX(${i}px)`,width:e+s-i+"px"};this.motion(this._ink,[{transform:`translateX(${e}px)`,width:`${s}px`},{...o,offset:.45},{transform:`translateX(${i}px)`,width:`${a}px`}],{duration:480,easing:"cubic-bezier(.22,1,.36,1)"});const r=this._panels[this._i];r&&this.motion(r,[{opacity:0,transform:`translateX(${n?24:-24}px)`},{opacity:1,transform:"none"}],{duration:320,easing:"cubic-bezier(.22,1,.36,1)"})}select(t){const e=Math.min(Math.max(0,Math.round(t)),this._tabs.length-1);if(e===this._i||e<0)return;const s=this._i;this._i=e,this.sync(s),this.emit("change",{index:e,from:s})}},{id:"tab-bar",text:'usa-tab-bar{display:block;--usa-tab-accent:#7c5cff;--usa-tab-ease:cubic-bezier(.22,1,.36,1)}.usa-tab-bar-list{position:relative;display:flex;gap:4px;padding:4px;border-radius:12px;background:rgba(127,127,127,.12);isolation:isolate;overflow-x:auto;scrollbar-width:none}.usa-tab-bar-list::-webkit-scrollbar{display:none}.usa-tab-bar-list>[role="tab"]{position:relative;z-index:1;flex:1 0 auto;border:0;background:none;color:inherit;font:inherit;font-weight:600;padding:8px 14px;border-radius:9px;cursor:pointer;opacity:.7;transition:opacity .25s,color .25s;white-space:nowrap}.usa-tab-bar-list>[role="tab"][aria-selected="true"]{opacity:1}.usa-tab-bar-list>[role="tab"]:focus-visible{outline:2px solid var(--usa-tab-accent);outline-offset:1px}.usa-tab-bar-ink{position:absolute;z-index:0;left:0;top:4px;bottom:4px;width:0;border-radius:9px;background:var(--usa-tab-accent);pointer-events:none}usa-tab-bar[data-indicator="pill"] [aria-selected="true"]{color:#fff}usa-tab-bar[data-indicator="underline"] .usa-tab-bar-list{background:none;border-bottom:1px solid rgba(127,127,127,.25);border-radius:0}usa-tab-bar[data-indicator="underline"] .usa-tab-bar-ink{top:auto;bottom:0;height:3px;border-radius:3px}usa-tab-bar[data-indicator="glow"] .usa-tab-bar-ink{background:transparent;box-shadow:0 0 0 2px var(--usa-tab-accent),0 0 18px var(--usa-tab-accent)}usa-tab-bar[data-indicator="gooey"] .usa-tab-bar-ink{filter:blur(.5px);border-radius:999px}usa-tab-bar[data-indicator="gooey"] [aria-selected="true"]{color:#fff}.usa-tab-bar-panel{padding:14px 2px}.usa-tab-bar-panel[hidden]{display:none}'})}const _={default:{stiffness:170,damping:26,mass:1},gentle:{stiffness:120,damping:14,mass:1},wobbly:{stiffness:180,damping:12,mass:1},stiff:{stiffness:210,damping:20,mass:1},bouncy:{stiffness:300,damping:10,mass:1},slow:{stiffness:280,damping:60,mass:1},molasses:{stiffness:280,damping:120,mass:1}};function M(t,e,s,i,a){const n=s+(-t.stiffness*(e-i)-t.damping*s)/t.mass*a;return[e+n*a,n]}const k=new Map;function A(t,e=60){const s=function(t){const e="string"==typeof t?_[t]||_.default:{..._.default,...t||{}},s=(t,e)=>"number"==typeof t&&Number.isFinite(t)&&t>0?t:e,i="object"==typeof t&&t||{};return{stiffness:s(e.stiffness,170),damping:Math.max(0,Number.isFinite(e.damping)?e.damping:26),mass:s(e.mass,1),velocity:Number.isFinite(i.velocity)?i.velocity:0,precision:s(i.precision,.001)}}(t),i=`${s.stiffness}|${s.damping}|${s.mass}|${s.velocity}|${s.precision}|${e}`,a=k.get(i);if(a)return a;const n=[0];let o=0,r=s.velocity;const l=1e3/e;let c=0,u=l;for(;c<1e4&&([o,r]=M(s,o,r,1,.001),c+=1,!(c>=u&&(n.push(o),u+=l,Math.abs(1-o)<s.precision&&Math.abs(r)<10*s.precision))););n[n.length-1]=1;const d={values:n,duration:Math.round(c)};return k.size>64&&k.clear(),k.set(i,d),d}function S(t,e=48){const{values:s,duration:i}=A(t);return"undefined"!=typeof CSS&&"function"==typeof CSS.supports&&CSS.supports("animation-timing-function","linear(0, 1)")?{easing:E(s,e),duration:i}:{easing:"cubic-bezier(0.34, 1.56, 0.64, 1)",duration:Math.min(i,1200)}}function E(t,e=48){const s=t.length,i=Math.max(1,Math.ceil((s-1)/Math.max(2,e-1))),a=[];for(let e=0;e<s-1;e+=i)a.push(String(Math.round(1e3*t[e])/1e3));return a.push("1"),`linear(${a.join(", ")})`}function C(t="usa-disclosure"){return l(t,t=>class extends t{constructor(){super(...arguments),this._anims=new WeakMap}get items(){return Array.from(this.children).filter(t=>"details"===t.localName)}mount(){this.listen(this,"click",t=>{const e=t.target.closest("summary"),s=e?.parentElement;e&&s&&s.parentElement===this&&(t.preventDefault(),this.set(s,!s.open))})}set(t,e){if(e&&!this.flag("multiple"))for(const e of this.items)e!==t&&e.open&&this.set(e,!1);if(t.open===e&&!this._anims.get(t))return;const s=t.querySelector("summary"),i=s?s.offsetHeight:0,a=t.offsetHeight;this._anims.get(t)?.cancel(),e&&(t.open=!0);const n=e?t.scrollHeight:i,o=S(this.str("spring","gentle")),r=this.reduced?null:this.motion(t,[{height:`${a}px`},{height:`${n}px`}],{duration:Math.min(o.duration,700),easing:o.easing,fill:"forwards"}),l=Array.from(t.children).filter(t=>"summary"!==t.localName);e&&!this.reduced&&l.forEach(t=>this.motion(t,[{opacity:0,transform:"translateY(-6px)"},{opacity:1,transform:"none"}],{duration:300,delay:60,easing:"ease-out"}));const c=()=>{this._anims.delete(t),e||(t.open=!1),r?.cancel()};r?(this._anims.set(t,r),r.finished.then(()=>this._anims.get(t)===r&&c(),()=>{})):c(),this.emit("toggle",{index:this.items.indexOf(t),open:e})}toggle(t,e){const s=this.items[t];s&&this.set(s,e??!s.open)}openAll(){this.items.forEach(t=>t.open=!0)}closeAll(){this.items.forEach(t=>this.set(t,!1))}},{id:"disclosure",text:'usa-disclosure{display:block;--usa-disclosure-accent:#7c5cff}usa-disclosure>details{border-bottom:1px solid rgba(127,127,127,.25);overflow:hidden}usa-disclosure>details>summary{list-style:none;cursor:pointer;display:flex;align-items:center;justify-content:space-between;gap:12px;padding:12px 4px;font-weight:600}usa-disclosure>details>summary::-webkit-details-marker{display:none}usa-disclosure>details>summary::after{content:"";flex:none;width:9px;height:9px;border-right:2px solid currentColor;border-bottom:2px solid currentColor;rotate:45deg;translate:0 -3px;transition:rotate .35s cubic-bezier(.34,1.56,.64,1),translate .35s}usa-disclosure>details[open]>summary::after{rotate:225deg;translate:0 2px}usa-disclosure>details>summary:focus-visible{outline:2px solid var(--usa-disclosure-accent);outline-offset:2px;border-radius:6px}usa-disclosure>details>:not(summary){padding:0 4px 12px}usa-disclosure[variant="cards"]>details{border:1px solid rgba(127,127,127,.25);border-radius:12px;margin-bottom:8px;padding:0 10px;transition:box-shadow .3s,border-color .3s}usa-disclosure[variant="cards"]>details[open]{border-color:var(--usa-disclosure-accent);box-shadow:0 8px 24px rgba(124,92,255,.16)}@media (prefers-reduced-motion:reduce){usa-disclosure>details>summary::after{transition:none}}'})}function $(t="usa-stories"){return l(t,t=>class extends t{constructor(){super(...arguments),this._i=0,this._items=[],this._bars=[],this._fill=null,this._btn=null}static get observedAttributes(){return["duration","loop"]}get index(){return this._i}mount(){b(this),this._items=f(this);const t=p("div","usa-stories-bars",{"aria-hidden":"true"});this._bars=this._items.map(()=>{const e=p("div","usa-stories-bar",{},"<i></i>");return t.append(e),e}),this._btn=p("button","usa-stories-toggle",{type:"button"}),this.listen(this._btn,"click",t=>{t.stopPropagation(),this.hasAttribute("paused")?this.play():this.pause()}),this.append(t,this._btn),this.setAttribute("role","region"),this.setAttribute("aria-roledescription","stories"),this.hasAttribute("aria-label")||this.setAttribute("aria-label","Stories"),this.hasAttribute("tabindex")||(this.tabIndex=0),this.reduced&&this.setAttribute("paused","");let e=!1,s=0;this.listen(this,"pointerdown",t=>{t.target.closest("button,a")||(s=performance.now(),e=!this.hasAttribute("paused"),e&&this._fill?.pause())}),this.listen(this,"pointerup",t=>{if(t.target.closest("button,a")||!s)return;const i=performance.now()-s>350;if(s=0,e&&!this.hasAttribute("paused")&&this._fill?.play(),i)return;const a=this.getBoundingClientRect();t.clientX-a.left<a.width/3?this.prev():this.next()}),this.listen(this,"keydown",t=>{"ArrowRight"===t.key?this.next():"ArrowLeft"===t.key?this.prev():" "===t.key&&(t.preventDefault(),this.hasAttribute("paused")?this.play():this.pause())}),this.onCleanup(()=>this._fill?.cancel()),this.goTo(Math.min(this._i,Math.max(0,this._items.length-1)),!0)}label(){if(this._btn){const t=this.hasAttribute("paused");this._btn.textContent=t?"▶":"❚❚",this._btn.setAttribute("aria-label",t?"Play stories":"Pause stories")}}goTo(t,e=!1){const s=this._items.length;if(!s)return;if(t>=s&&!this.flag("loop"))return this.emit("end"),void this.pause();const i=(t%s+s)%s,a=i!==this._i||e;this._i=i,this._items.forEach((t,e)=>{t.toggleAttribute("data-active",e===i),t.setAttribute("aria-hidden",String(e!==i))}),this._bars.forEach((t,e)=>t.toggleAttribute("data-done",e<i)),this._fill?.cancel();const n=this._bars[i]?.firstElementChild;if(this._fill=n?n.animate?.([{transform:"scaleX(0)"},{transform:"scaleX(1)"}],{duration:Math.max(800,this.num("duration",5e3)),fill:"forwards"})??null:null,this._fill){const t=this._fill;t.onfinish=()=>this._fill===t&&this.goTo(this._i+1),this.hasAttribute("paused")&&t.pause()}this.label(),a&&!e&&this.emit("change",{index:i})}next(){this.goTo(this._i+1)}prev(){this.goTo(Math.max(0,this._i-1))}pause(){this.setAttribute("paused",""),this._fill?.pause(),this.label()}play(){this.removeAttribute("paused"),"finished"===this._fill?.playState?this.goTo(this._i+1>=this._items.length?0:this._i+1):this._fill?.play(),this.label()}},{id:"stories",text:"usa-stories{display:block;position:relative;overflow:hidden;border-radius:var(--usa-radius,16px);background:#111;color:#fff;aspect-ratio:9/14;max-height:520px;user-select:none;-webkit-user-select:none;touch-action:manipulation}usa-stories>:not([data-usa-part]){position:absolute;inset:0;opacity:0;transition:opacity .35s ease,transform .5s cubic-bezier(.22,1,.36,1);transform:scale(1.04);pointer-events:none;box-sizing:border-box}usa-stories>[data-active]:not([data-usa-part]){opacity:1;transform:none;pointer-events:auto}usa-stories>img:not([data-usa-part]){width:100%;height:100%;object-fit:cover}.usa-stories-bars{position:absolute;z-index:3;top:8px;left:8px;right:48px;display:flex;gap:4px}.usa-stories-bar{flex:1;height:3px;border-radius:3px;background:rgba(255,255,255,.35);overflow:hidden}.usa-stories-bar>i{display:block;height:100%;width:100%;background:#fff;transform-origin:left;transform:scaleX(0)}.usa-stories-bar[data-done]>i{transform:scaleX(1)}.usa-stories-toggle{position:absolute;z-index:3;top:2px;right:6px;width:36px;height:30px;border:0;background:none;color:#fff;font:700 14px/1 system-ui;cursor:pointer;border-radius:8px}.usa-stories-toggle:focus-visible{outline:2px solid #fff}@media (prefers-reduced-motion:reduce){usa-stories>*{transition:none!important;transform:none!important}}"})}const T={6.2:{"usa-carousel":v,"usa-tab-bar":w,"usa-disclosure":C,"usa-stories":$}},L=Object.values(T).flatMap(t=>Object.keys(t));function R(t){for(const[e,s]of Object.entries(T))if(!t||t===e)for(const[t,e]of Object.entries(s))e(t)}var I;const z=["enter","exit","attention","click","hover","card","loop","page","background","text","cursor","scroll"],q=Symbol.for("use-scroll-animate.effects"),D=(I=globalThis)[q]||(I[q]=new Map);function O(t,e={}){if(!/^[a-z][a-z0-9-]*$/.test(t.name))throw new Error(`[motionary] invalid effect name "${t.name}"`);if(!z.includes(t.kind))throw new Error(`[motionary] unknown effect kind "${t.kind}"`);if(D.has(t.name)&&!e.override)throw new Error(`[motionary] effect "${t.name}" is already registered`);return D.set(t.name,t),()=>{D.get(t.name)===t&&D.delete(t.name)}}let P=null;function F(t,e,s,i,a,n,o=""){const r=document.createElement("span");r.style.cssText=`position:absolute;left:${t}px;top:${e}px;${s}`,o&&(r.textContent=o),(P?.isConnected||(P=document.createElement("div"),P.setAttribute("aria-hidden","true"),P.setAttribute("data-usa-fx-layer",""),P.style.cssText="position:fixed;inset:0;pointer-events:none;overflow:hidden;z-index:2147483000;contain:strict",document.body.appendChild(P)),P).appendChild(r);const l=i.animate(r,a,{fill:"forwards",...n}),c=()=>r.remove();return l?l.finished.then(c,c):c(),l}const N=["#7c5cff","#ff5c8a","#22d3ee","#facc15","#34d399"],X=(t,e)=>t+Math.random()*(e-t);function B(t,e,s=0){return(Math.sin(1.7*t+s)*Math.cos(1.3*e-.7*s)+.5*Math.sin(.9*(t+e)+.5*s)+.5*Math.cos(.6*t-1.1*e-.3*s))/2}function G(t){const e=/^#?([\da-f]{2})([\da-f]{2})([\da-f]{2})$/i.exec(t.trim());return e?[parseInt(e[1],16),parseInt(e[2],16),parseInt(e[3],16)]:[124,92,255]}function W(t,e,s,i){const a=document.createElement("canvas");a.setAttribute("aria-hidden","true"),a.setAttribute("data-usa-fx-canvas",""),a.style.cssText="position:absolute;inset:0;width:100%;height:100%;pointer-events:none;z-index:-1;border-radius:inherit";const n=[],o=(e,s)=>{n.push([e,t.style[e]]),t.style[e]=s};"static"===getComputedStyle(t).position&&o("position","relative"),o("isolation","isolate"),t.prepend(a);const r=a.getContext("2d");let l=0,c=!0,u=Math.min(1,Math.max(.35,Number(i.quality)||1)),d=0,h=0,f=null;const p=performance.now();let b=p,m=0,g=0;const x=()=>{const e=t.getBoundingClientRect();d=Math.max(1,Math.round(e.width)),h=Math.max(1,Math.round(e.height));const n=Math.min(2,("number"==typeof devicePixelRatio?devicePixelRatio:1)||1)*u;a.width=Math.max(1,Math.round(d*n)),a.height=Math.max(1,Math.round(h*n)),r&&r.setTransform(n,0,0,n,0,0),f=s.init?s.init(d,h,i):{}},v=t=>{if(l=0,!r)return;const e=t-b;b=t,e>28?m++:e<18&&g++,m>20&&u>.35?(u=Math.max(.35,u-.15),m=g=0,x()):g>240&&u<1&&(u=Math.min(1,u+.15),m=g=0,x()),s.draw({ctx:r,w:d,h:h,t:(t-p)/1e3,quality:u,state:f,o:i}),c&&!document.hidden&&(l=requestAnimationFrame(v))},y=()=>{l||!r||e.reduced||(b=performance.now(),l=requestAnimationFrame(v))};x(),r&&s.draw({ctx:r,w:d,h:h,t:0,quality:u,state:f,o:i});const w="function"==typeof IntersectionObserver?new IntersectionObserver(t=>{c=t.some(t=>t.isIntersecting),c&&y()}):null;w?.observe(t);const _="function"==typeof ResizeObserver?new ResizeObserver(()=>{x(),r&&e.reduced&&s.draw({ctx:r,w:d,h:h,t:0,quality:u,state:f,o:i})}):null;_?.observe(t);const M=()=>!document.hidden&&c&&y();return document.addEventListener("visibilitychange",M),y(),()=>{cancelAnimationFrame(l),l=0,w?.disconnect(),_?.disconnect(),document.removeEventListener("visibilitychange",M),a.remove();for(const[e,s]of n)t.style[e]=s}}const j=(t,e,s,i)=>({name:t,kind:"background",description:e,reduced:"run",defaults:{colors:N,background:"#0b0d12",speed:1,quality:1,...s},run:(t,e,s)=>W(t,s,i,e)});function H(t,e,s){const i=Math.max(2,Math.round(e/t.quality)),a=Math.max(1,Math.ceil(t.w/i)),n=Math.max(1,Math.ceil(t.h/i)),o=t.state;if(o.buf&&o.buf.width===a&&o.buf.height===n||(o.buf=document.createElement("canvas"),o.buf.width=a,o.buf.height=n,o.bctx=o.buf.getContext("2d"),o.img=o.bctx?.createImageData(a,n)),!o.bctx||!o.img)return;const r=o.img.data;for(let t=0;t<n;t++)for(let e=0;e<a;e++)s(e*i,t*i,r,4*(t*a+e));o.bctx.putImageData(o.img,0,0),t.ctx.imageSmoothingEnabled=!0,t.ctx.drawImage(o.buf,0,0,t.w,t.h)}j("flow-field","Particles drift along a slowly changing flow field, leaving silky trails.",{count:600,fade:.06},{init:(t,e,s)=>({p:Array.from({length:s.count},()=>[Math.random()*t,Math.random()*e])}),draw:({ctx:t,w:e,h:s,t:i,state:a,o:n,quality:o})=>{t.fillStyle=n.background,t.globalAlpha=0===i?1:n.fade,t.fillRect(0,0,e,s),t.globalAlpha=.8;const r=Math.round(a.p.length*o),l=0===i?40:1;for(let o=0;o<r;o++){const r=a.p[o];t.fillStyle=n.colors[o%n.colors.length];for(let a=0;a<l;a++){const a=B(.004*r[0],.004*r[1],.15*i*n.speed)*Math.PI*2;r[0]+=1.2*Math.cos(a)*n.speed,r[1]+=1.2*Math.sin(a)*n.speed,(r[0]<0||r[0]>e||r[1]<0||r[1]>s)&&(r[0]=Math.random()*e,r[1]=Math.random()*s),t.fillRect(r[0],r[1],1.4,1.4)}}t.globalAlpha=1}}),j("voronoi","Drifting Voronoi cells in the palette, with darker borders.",{seeds:14,cell:6},{init:(t,e,s)=>({s:Array.from({length:s.seeds},(i,a)=>({x:Math.random()*t,y:Math.random()*e,vx:Math.random()-.5,vy:Math.random()-.5,c:G(s.colors[a%s.colors.length])}))}),draw:t=>{const{w:e,h:s,state:i,o:a}=t;for(const t of i.s)t.x+=t.vx*a.speed,t.y+=t.vy*a.speed,(t.x<0||t.x>e)&&(t.vx*=-1),(t.y<0||t.y>s)&&(t.vy*=-1);H(t,a.cell,(t,e,s,a)=>{let n=1/0,o=1/0,r=i.s[0].c;for(const s of i.s){const i=(s.x-t)**2+(s.y-e)**2;i<n?(o=n,n=i,r=s.c):i<o&&(o=i)}const l=Math.sqrt(o)-Math.sqrt(n)<6?.55:1;s[a]=r[0]*l,s[a+1]=r[1]*l,s[a+2]=r[2]*l,s[a+3]=255})}}),j("mesh-gradient","Soft blobs of colour orbit and blend into a living mesh gradient.",{blobs:4,blur:.65},{draw:({ctx:t,w:e,h:s,t:i,o:a})=>{t.fillStyle=a.background,t.fillRect(0,0,e,s);const n=Math.max(e,s)*a.blur;for(let o=0;o<a.blobs;o++){const r=.25*i*a.speed+o*Math.PI*2/a.blobs,l=e/2+Math.cos(r*(1+.13*o))*e*.32,c=s/2+Math.sin(r*(.8+.11*o))*s*.32,[u,d,h]=G(a.colors[o%a.colors.length]),f=t.createRadialGradient(l,c,0,l,c,n);f.addColorStop(0,`rgba(${u},${d},${h},0.7)`),f.addColorStop(1,`rgba(${u},${d},${h},0)`),t.fillStyle=f,t.fillRect(0,0,e,s)}}}),j("starfield","Stars stream toward the viewer (warp speed with `speed: 4`).",{stars:400,color:"#ffffff"},{init:(t,e,s)=>({s:Array.from({length:s.stars},()=>[2*Math.random()-1,2*Math.random()-1,Math.random()])}),draw:({ctx:t,w:e,h:s,t:i,state:a,o:n,quality:o})=>{t.fillStyle=n.background,t.fillRect(0,0,e,s),t.fillStyle=n.color;const r=Math.round(a.s.length*o);for(let o=0;o<r;o++){const r=a.s[o];i>0&&(r[2]-=.004*n.speed),r[2]<=.01&&(r[0]=2*Math.random()-1,r[1]=2*Math.random()-1,r[2]=1);const l=e/2+r[0]/r[2]*e*.5,c=s/2+r[1]/r[2]*s*.5;if(l<0||l>e||c<0||c>s)continue;const u=2.6*(1-r[2]);t.globalAlpha=Math.min(1,1.6*(1-r[2])),t.fillRect(l,c,u,u)}t.globalAlpha=1}}),j("metaballs","Gooey blobs that merge and split (low-resolution field, scaled up).",{balls:6,cell:5,threshold:1},{init:(t,e,s)=>({b:Array.from({length:s.balls},()=>({x:Math.random()*t,y:Math.random()*e,vx:1.6*(Math.random()-.5),vy:1.6*(Math.random()-.5),r:Math.min(t,e)*(.08+.08*Math.random())}))}),draw:t=>{const{w:e,h:s,state:i,o:a}=t;for(const t of i.b)t.x+=t.vx*a.speed,t.y+=t.vy*a.speed,(t.x<0||t.x>e)&&(t.vx*=-1),(t.y<0||t.y>s)&&(t.vy*=-1);const[n,o,r]=G(a.colors[0]),[l,c,u]=G(a.colors[1]||a.colors[0]),[d,h,f]=G(a.background);H(t,a.cell,(t,e,s,p)=>{let b=0;for(const s of i.b)b+=s.r*s.r/((s.x-t)**2+(s.y-e)**2+1);const m=b>=a.threshold,g=Math.min(1,.8*(b-a.threshold));s[p]=m?n+(l-n)*g:d,s[p+1]=m?o+(c-o)*g:h,s[p+2]=m?r+(u-r)*g:f,s[p+3]=255})}}),j("contours","Topographic contour lines over a slowly shifting height field.",{levels:9,cell:4,color:"#7c5cff"},{draw:t=>{const{t:e,o:s}=t,[i,a,n]=G(s.color),[o,r,l]=G(s.background),c=(t,i)=>(B(.006*t,.006*i,.2*e*s.speed)+1)/2,u=Math.max(2,Math.round(s.cell/t.quality));H(t,s.cell,(t,e,d,h)=>{const f=Math.floor(c(t,e)*s.levels),p=f!==Math.floor(c(t+u,e)*s.levels)||f!==Math.floor(c(t,e+u)*s.levels),b=.12+f/s.levels*.18;d[h]=p?i:o+(i-o)*b,d[h+1]=p?a:r+(a-r)*b,d[h+2]=p?n:l+(n-l)*b,d[h+3]=255})}});const U="#version 300 es\nprecision highp float;\nuniform vec2 u_res;uniform float u_t;uniform vec3 u_c0,u_c1,u_c2;uniform vec2 u_ptr;uniform float u_speed,u_scale;\nout vec4 o;\nfloat h(vec2 p){return fract(sin(dot(p,vec2(127.1,311.7)))*43758.5453);}\nfloat n(vec2 p){vec2 i=floor(p),f=fract(p);f=f*f*(3.-2.*f);return mix(mix(h(i),h(i+vec2(1,0)),f.x),mix(h(i+vec2(0,1)),h(i+1.),f.x),f.y);}\nfloat fbm(vec2 p){float v=0.,a=.5;for(int k=0;k<5;k++){v+=a*n(p);p=p*2.03+vec2(1.7,9.2);a*=.5;}return v;}\n";let Y=null;function V(){if(null!==Y)return Y;try{Y="undefined"!=typeof document&&!!document.createElement("canvas").getContext("webgl2")}catch{Y=!1}return Y}function K(t,e,s,i){const a=()=>{t.dataset.usaBackend="canvas";const a=W(t,e,s.fallback,i);return()=>{a(),delete t.dataset.usaBackend}};if("canvas"===i.backend||!V())return a();const n=document.createElement("canvas"),o=n.getContext("webgl2",{alpha:!1,antialias:!1,preserveDrawingBuffer:!1}),r=o&&function(t,e){const s=(e,s)=>{const i=t.createShader(e);return t.shaderSource(i,s),t.compileShader(i),t.getShaderParameter(i,t.COMPILE_STATUS)?i:null},i=s(t.VERTEX_SHADER,"#version 300 es\nin vec2 a;void main(){gl_Position=vec4(a,0.,1.);}"),a=s(t.FRAGMENT_SHADER,e);if(!i||!a)return null;const n=t.createProgram();return t.attachShader(n,i),t.attachShader(n,a),t.bindAttribLocation(n,0,"a"),t.linkProgram(n),t.getProgramParameter(n,t.LINK_STATUS)?n:null}(o,`${U}void main(){vec2 uv=gl_FragCoord.xy/u_res;vec2 p=uv*vec2(u_res.x/u_res.y,1.)*u_scale;float t=u_t*u_speed;${s.body}}`);if(!o||!r)return a();t.dataset.usaBackend="webgl2",n.setAttribute("aria-hidden","true"),n.setAttribute("data-usa-fx-canvas",""),n.style.cssText="position:absolute;inset:0;width:100%;height:100%;pointer-events:none;z-index:-1;border-radius:inherit";const l=[],c=(e,s)=>{l.push([e,t.style[e]]),t.style[e]=s};"static"===getComputedStyle(t).position&&c("position","relative"),c("isolation","isolate"),t.prepend(n),o.useProgram(r);const u=o.createBuffer();o.bindBuffer(o.ARRAY_BUFFER,u),o.bufferData(o.ARRAY_BUFFER,new Float32Array([-1,-1,3,-1,-1,3]),o.STATIC_DRAW),o.enableVertexAttribArray(0),o.vertexAttribPointer(0,2,o.FLOAT,!1,0,0);const d=t=>o.getUniformLocation(r,t),h=i.colors||[];["u_c0","u_c1","u_c2"].forEach((t,e)=>o.uniform3fv(d(t),G(h[e]||h[0]||"#7c5cff").map(t=>t/255))),o.uniform1f(d("u_speed"),Number(i.speed)||1),o.uniform1f(d("u_scale"),Number(i.scale)||3);const f=d("u_res"),p=d("u_t"),b=d("u_ptr");let m=[.5,.5],g=Math.min(1,Math.max(.3,Number(i.quality)||.75)),x=0,v=!0,y=0,w=0;const _=performance.now(),M=()=>{const e=t.getBoundingClientRect(),s=Math.min(2,devicePixelRatio||1)*g;n.width=Math.max(1,Math.round(e.width*s)),n.height=Math.max(1,Math.round(e.height*s)),o.viewport(0,0,n.width,n.height),o.uniform2f(f,n.width,n.height)},k=t=>{o.uniform1f(p,t),o.uniform2f(b,m[0],m[1]),o.drawArrays(o.TRIANGLES,0,3)},A=t=>{x=0,w&&t-w>34&&++y>24&&g>.3&&(g=Math.max(.3,g-.15),y=0,M()),w=t,k((t-_)/1e3),v&&!document.hidden&&(x=requestAnimationFrame(A))},S=()=>{x||e.reduced||(x=requestAnimationFrame(A))};M(),k(e.reduced?7:0);const E=e=>{const s=t.getBoundingClientRect();m=[(e.clientX-s.left)/Math.max(1,s.width),1-(e.clientY-s.top)/Math.max(1,s.height)]};t.addEventListener("pointermove",E);const C="function"==typeof IntersectionObserver?new IntersectionObserver(t=>(v=t.some(t=>t.isIntersecting))&&S()):null;C?.observe(t);const $="function"==typeof ResizeObserver?new ResizeObserver(()=>(M(),e.reduced&&k(7))):null;$?.observe(t);const T=()=>!document.hidden&&v&&S();document.addEventListener("visibilitychange",T);let L=null;const R=t=>{t.preventDefault(),I(),L=a()};n.addEventListener("webglcontextlost",R);const I=()=>{cancelAnimationFrame(x),x=0,C?.disconnect(),$?.disconnect(),t.removeEventListener("pointermove",E),document.removeEventListener("visibilitychange",T),n.removeEventListener("webglcontextlost",R),n.remove();for(const[e,s]of l)t.style[e]=s};return S(),()=>{if(L)return L();I(),o.getExtension("WEBGL_lose_context")?.loseContext(),delete t.dataset.usaBackend}}function Z(t,e=8){return{init:(t,s)=>{const i=document.createElement("canvas");i.width=Math.max(2,Math.ceil(t/e)),i.height=Math.max(2,Math.ceil(s/e));const a=i.getContext("2d");return{c:i,x:a,img:a?.createImageData(i.width,i.height)}},draw:({ctx:e,w:s,h:i,t:a,state:n,o:o})=>{const{c:r,x:l,img:c}=n;if(!l||!c)return;const u=c.data;for(let e=0;e<r.height;e++)for(let s=0;s<r.width;s++){const[i,n,l]=t(s/r.width,1-e/r.height,a*(Number(o.speed)||1),o),c=4*(e*r.width+s);u[c]=i,u[c+1]=n,u[c+2]=l,u[c+3]=255}l.putImageData(c,0,0),e.imageSmoothingEnabled=!0,e.drawImage(r,0,0,s,i)}}}const J=(t,e,s)=>{const i=Math.min(1,Math.max(0,s));return[t[0]+(e[0]-t[0])*i,t[1]+(e[1]-t[1])*i,t[2]+(e[2]-t[2])*i]},Q=(t,e,s)=>{const i=Math.min(1,Math.max(0,(s-t)/(e-t)));return i*i*(3-2*i)},tt=(t,e,s=0)=>.5+.35*B(t,e,s)+.15*B(2.1*t+3,2.1*e-1,1.3*s),et=(t,e,s,i,a={})=>({name:t,kind:"background",description:e,reduced:"run",defaults:{colors:s,speed:1,scale:3,quality:.75,backend:"auto",...a},run:(t,e,s)=>{const a=K(t,s,i,e);return s.onCleanup(a),a}}),st=t=>t.colors.map(G),it=[et("fluid","Domain-warped fluid colors that swirl around the pointer (WebGL2, Canvas 2D fallback).",["#1b1446","#7c5cff","#22d3ee"],{body:"vec2 q=vec2(fbm(p+t*.1),fbm(p+vec2(5.2,1.3)-t*.08));vec2 d=uv-u_ptr;q+=.5*exp(-dot(d,d)*14.)*vec2(sin(t*1.3),cos(t*1.1));float f=fbm(p+3.*q+t*.05);vec3 c=mix(u_c0,u_c1,clamp(f*1.7-.2,0.,1.));c=mix(c,u_c2,clamp(length(q)*1.1-.45,0.,1.));o=vec4(c,1.);",fallback:Z((t,e,s,i)=>{const[a,n,o]=st(i),r=tt(3*t+.1*s,3*e),l=tt(3*t+2*r,3*e+2*r,.3*s);return J(J(a,n,1.7*l-.2),o,1.1*r-.45)})}),et("smoke","Soft smoke rising and curling (WebGL2, Canvas 2D fallback).",["#0f172a","#cbd5e1","#64748b"],{body:"vec2 s=p;s.y-=t*.25;float f=fbm(s+fbm(s*1.5+t*.1));float a=smoothstep(.38,.92,f)*(1.05-uv.y*.55);o=vec4(mix(u_c0,mix(u_c2,u_c1,f),a),1.);",fallback:Z((t,e,s,i)=>{const[a,n,o]=st(i),r=tt(3*t,3*e-.25*s,.2*s);return J(a,J(o,n,r),Q(.38,.92,r)*(1.05-.55*e))})}),et("fire","Licking flames from the bottom edge (WebGL2, Canvas 2D fallback).",["#140404","#e2401b","#fbbf24"],{body:"vec2 s=p*vec2(1.,1.4);s.y-=t*.9;float f=fbm(s*1.6+fbm(s*2.+t*.3));float g=f*(1.3-uv.y)*1.7-.3;vec3 c=mix(u_c0,u_c1,smoothstep(0.,.4,g));c=mix(c,u_c2,smoothstep(.35,.72,g));c=mix(c,vec3(1.,.96,.82),smoothstep(.72,1.05,g));o=vec4(c,1.);",fallback:Z((t,e,s,i)=>{const[a,n,o]=st(i),r=tt(4*t,5*e-.9*s,s)*(1.3-e)*1.7-.3;return J(J(J(a,n,Q(0,.4,r)),o,Q(.35,.72,r)),[255,245,210],Q(.72,1.05,r))},6)}),et("ink","Ink blooming and drifting in water on a paper background (WebGL2, Canvas 2D fallback).",["#f6f1e7","#1e1b4b","#be185d"],{body:"vec2 q=vec2(fbm(p*.8+t*.04),fbm(p*.8+vec2(3.1,7.7)+t*.05));float f=fbm(p*1.2+2.5*q);float b=smoothstep(.48,.74,f+.12*sin(t*.4));o=vec4(mix(u_c0,mix(u_c1,u_c2,clamp(q.x*1.4-.2,0.,1.)),b),1.);",fallback:Z((t,e,s,i)=>{const[a,n,o]=st(i),r=tt(2*t+.04*s,2*e),l=tt(3*t+2.5*r,3*e+2.5*r,.1*s);return J(a,J(n,o,1.4*r-.2),Q(.48,.74,l))})},{scale:2.4}),et("fireflies","Glowing fireflies wandering and blinking at dusk (WebGL2, Canvas 2D fallback).",["#06121f","#facc15","#a3e635"],{body:"vec3 c=u_c0*(.55+.45*uv.y);float ar=u_res.x/u_res.y;for(int i=0;i<28;i++){float fi=float(i);vec2 b=vec2(h(vec2(fi,1.)),h(vec2(fi,2.)));vec2 pos=fract(b+.07*vec2(sin(t*.3+fi),cos(t*.23+fi*1.7)));vec2 d=(uv-pos)*vec2(ar,1.);float k=.5+.5*sin(t*(1.+h(vec2(fi,3.))*2.)+fi*2.1);c+=mix(u_c1,u_c2,h(vec2(fi,4.)))*k*.00055/(dot(d,d)+.0003);}o=vec4(min(c,vec3(1.)),1.);",fallback:{init:(t,e)=>({f:Array.from({length:28},()=>[Math.random(),Math.random(),6*Math.random(),Math.random()])}),draw:({ctx:t,w:e,h:s,t:i,state:a,o:n})=>{t.fillStyle=n.colors[0],t.fillRect(0,0,e,s);for(const[o,r,l,c]of a.f){const a=(o+.07*Math.sin(.3*i+l))%1*e,u=(r+.07*Math.cos(.23*i+l))%1*s,d=.5+.5*Math.sin(2*i+3*l),h=t.createRadialGradient(a,u,0,a,u,14);h.addColorStop(0,c>.5?n.colors[1]:n.colors[2]),h.addColorStop(1,"transparent"),t.globalAlpha=.25+.75*d,t.fillStyle=h,t.fillRect(a-14,u-14,28,28)}t.globalAlpha=1}}})],at=t=>({init:(t,e,s)=>({f:Array.from({length:s.count},()=>({x:Math.random()*t,y:Math.random()*e,r:X(5,11)*(s.size||1),a:X(0,6.3),va:X(-1.5,1.5),vy:X(18,46),ph:X(0,6.3),c:s.colors[Math.floor(Math.random()*s.colors.length)]})),last:0}),draw:({ctx:e,w:s,h:i,t:a,state:n,o:o,quality:r})=>{const l=n.last?Math.min(.05,a-n.last):0;n.last=a,e.clearRect(0,0,s,i);const c=Math.max(4,Math.round(n.f.length*r));for(let r=0;r<c;r++){const c=n.f[r];c.y+=c.vy*l*o.speed,c.x+=(22*Math.sin(1.2*a+c.ph)+(o.wind||0))*l*o.speed,c.a+=c.va*l*o.speed,c.y>i+16&&(c.y=-16,c.x=Math.random()*s),c.x>s+16&&(c.x=-16),c.x<-16&&(c.x=s+16),e.save(),e.translate(c.x,c.y),e.rotate(c.a),e.scale(1,.55+.45*Math.abs(Math.cos(1.7*a+c.ph))),e.fillStyle=c.c,t(e,c),e.restore()}}}),nt=(t,e,s,i)=>({name:t,kind:"background",description:e,reduced:"run",defaults:{speed:1,quality:1,...s},run:(t,e,s)=>{const a=W(t,s,i,e);return s.onCleanup(a),a}});function ot(){!function(t){for(const e of t)D.has(e.name)||O(e)}(it)}it.push(nt("sakura","Cherry-blossom petals drifting down, swaying and flipping (Canvas 2D).",{count:46,colors:["#ffc8dd","#ffafcc","#fde2e4","#f9a8d4"],wind:14},at((t,e)=>{t.beginPath(),t.moveTo(0,-e.r),t.bezierCurveTo(e.r,-e.r,.9*e.r,.6*e.r,0,e.r),t.bezierCurveTo(.9*-e.r,.6*e.r,-e.r,-e.r,0,.55*-e.r),t.fill()})),nt("leaves","Autumn leaves tumbling down in the wind (Canvas 2D).",{count:30,size:1.4,colors:["#ea580c","#d97706","#b45309","#dc2626","#ca8a04"],wind:26},at((t,e)=>{t.beginPath(),t.moveTo(0,-e.r),t.quadraticCurveTo(.9*e.r,.2*-e.r,0,e.r),t.quadraticCurveTo(.9*-e.r,.2*-e.r,0,-e.r),t.fill(),t.strokeStyle="rgba(0,0,0,.25)",t.lineWidth=1,t.beginPath(),t.moveTo(0,.8*-e.r),t.lineTo(0,1.25*e.r),t.stroke()}))),it.push({name:"splash",kind:"click",description:"A water splash from the pointer: a ring plus droplets that arc out and fall with gravity.",defaults:{color:"#38bdf8",count:14},run:(t,e,s)=>{const{x:i,y:a}=function(t,e){const s=e.event,i=t.getBoundingClientRect();return s&&"number"==typeof s.clientX&&(s.clientX||s.clientY)?{x:s.clientX,y:s.clientY}:{x:i.left+i.width/2,y:i.top+i.height/2}}(t,s);if(s.reduced)return F(i-12,a-12,`width:24px;height:24px;border-radius:50%;background:${e.color};opacity:.5`,s,[{opacity:.5},{opacity:0}],{duration:300});const n=[F(i-30,a-30,`width:60px;height:60px;border-radius:50%;border:3px solid ${e.color}`,s,[{transform:"scale(.2)",opacity:1},{transform:"scale(1.6)",opacity:0}],{duration:520,easing:"cubic-bezier(.2,.8,.3,1)"})];for(let t=0;t<e.count;t++){const t=-Math.PI/2+X(-1.15,1.15),o=X(50,110),r=Math.cos(t)*o,l=X(4,9),c=Math.sin(t)*o;n.push(F(i-l/2,a-l/2,`width:${l}px;height:${1.25*l}px;border-radius:50% 50% 50% 50%/60% 60% 40% 40%;background:${e.color}`,s,[{transform:"translate(0,0) scale(1)",opacity:1},{transform:`translate(${.6*r}px,${c}px) scale(1)`,opacity:1,offset:.45,easing:"cubic-bezier(.3,0,.7,1)"},{transform:`translate(${r}px,${c+90}px) scale(.6)`,opacity:0}],{duration:X(650,900),easing:"cubic-bezier(.15,.6,.4,1)"}))}return(t=>Promise.all(t.filter(Boolean).map(t=>t.finished.catch(()=>{}))))(n)}});const rt={gpu:it};function lt(){ot()}R(),lt(),t.CAROUSEL_EFFECTS=x,t.FX2_PACKS=rt,t.GLSL_HEAD=U,t.GPU_FX=it,t.TAB_INDICATORS=y,t.WIDGETS=T,t.WIDGET_TAGS=L,t.defineCarousel=v,t.defineDisclosure=C,t.defineStories=$,t.defineTabBar=w,t.defineWidgets=R,t.fieldFallback=Z,t.registerFx2=lt,t.registerGpuEffects=ot,t.shaderBackground=K,t.supportsWebGL2=V});
|
|
2
|
+
//# sourceMappingURL=widgets.umd.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"widgets.umd.js","sources":["../src/components/base.ts","../src/components/widgets/shared.ts","../src/components/widgets/carousel.ts","../src/components/widgets/tab-bar.ts","../src/components/physics/spring.ts","../src/components/widgets/disclosure.ts","../src/components/widgets/stories.ts","../src/components/widgets/index.ts","../src/components/fx/registry.ts","../src/components/effects/shared.ts","../src/components/effects/generative.ts","../src/components/fx2/gl.ts","../src/components/fx2/gpu.ts","../src/components/fx2/index.ts","../src/components/widgets/auto.ts"],"sourcesContent":["/**\n * motionary/components — shared base for the `<usa-*>` custom elements.\n *\n * Everything here is lazy: nothing touches `window`, `document`,\n * `HTMLElement` or `matchMedia` at import time, so the components can be\n * imported during SSR (Next, Nuxt, Astro…) and in Electron/Tauri preload\n * scripts. Classes are created the first time a `define*()` function runs.\n */\n\nexport interface ComponentsConfig {\n /**\n * Inject each component's CSS when it is defined (default `true`). Uses a\n * constructable stylesheet (`document.adoptedStyleSheets`, which a strict\n * `style-src` CSP does not block) and falls back to a `<style>` tag. Set\n * to `false` when you load `motionary/components.css` yourself.\n */\n injectStyles?: boolean;\n /**\n * `'user'` (default) follows `prefers-reduced-motion`; `'reduce'` always\n * uses the reduced variants (e.g. a kiosk / battery-saver mode). 5.0: the\n * OS setting can no longer be ignored (`'no-preference'` was removed).\n */\n reducedMotion?: 'user' | 'reduce';\n /**\n * Global motion intensity (v2.7): `'low'` (shorter, calmer), `'normal'`\n * (default) or `'high'`. Scales every component animation's duration and\n * sets `--usa-motion` (0.6 / 1 / 1.25) on `<html>` for your own CSS. 5.0:\n * `'off'` was removed — use `motionSensitivity: 'minimal'`.\n */\n motionIntensity?: MotionIntensity;\n /**\n * Motion-sensitivity level (v4.4), finer than reduced motion:\n * `'full'` (default) · `'gentle'` (no spins, zooms, skews or parallax —\n * translations and fades only, safe for vestibular disorders) ·\n * `'minimal'` (fades only; components use their reduced-motion variants) ·\n * `'static'` (no animation: every component shows its static alternative).\n * See `setMotionSensitivity()` in `motionary/components/a11y`.\n */\n motionSensitivity?: MotionSensitivity;\n}\n\nexport type MotionSensitivity = 'full' | 'gentle' | 'minimal' | 'static';\nexport const MOTION_SENSITIVITY_LEVELS: readonly MotionSensitivity[] = ['full', 'gentle', 'minimal', 'static'];\n\nexport type MotionIntensity = 'low' | 'normal' | 'high';\nexport const MOTION_SCALE: Record<MotionIntensity, number> = { low: 0.6, normal: 1, high: 1.25 };\n\nconst config: Required<ComponentsConfig> = { injectStyles: true, reducedMotion: 'user', motionIntensity: 'normal', motionSensitivity: 'full' };\n\n/** Change global component settings (call before `define*()` for `injectStyles`). */\nexport function configureComponents(options: ComponentsConfig): void {\n options = { ...options };\n // 5.0: removed values are ignored (see docs/upgrading-5.md)\n if (options.motionIntensity && !(options.motionIntensity in MOTION_SCALE)) delete options.motionIntensity;\n if (options.reducedMotion && options.reducedMotion !== 'reduce') options.reducedMotion = 'user';\n Object.assign(config, options);\n if (options.motionIntensity && typeof document !== 'undefined') {\n document.documentElement.style.setProperty('--usa-motion', String(MOTION_SCALE[options.motionIntensity] ?? 1));\n document.documentElement.setAttribute('data-usa-motion', options.motionIntensity);\n }\n if (options.motionSensitivity && typeof document !== 'undefined') {\n if (options.motionSensitivity === 'full') document.documentElement.removeAttribute('data-usa-sensitivity');\n else document.documentElement.setAttribute('data-usa-sensitivity', options.motionSensitivity);\n }\n}\n\n/** The current motion-sensitivity level (v4.4). */\nexport function getMotionSensitivity(): MotionSensitivity {\n return config.motionSensitivity;\n}\n\nconst VESTIBULAR = /rotate|scale|skew|perspective|matrix3d/;\n/**\n * Adapt keyframes to the sensitivity level: `gentle` drops transforms that\n * spin, zoom or skew (and 3D), `minimal` keeps opacity only, `static` keeps\n * just the final frame. `full` returns them unchanged.\n */\nexport function adaptKeyframes(frames: Keyframe[], level: MotionSensitivity = config.motionSensitivity): Keyframe[] {\n if (level === 'full' || !frames.length) return frames;\n if (level === 'static') return [frames[frames.length - 1]];\n return frames.map((f) => {\n const out: Keyframe = {};\n for (const [k, v] of Object.entries(f)) {\n if (k === 'offset' || k === 'easing' || k === 'composite') out[k] = v as any;\n else if (level === 'minimal') {\n if (k === 'opacity') out[k] = v as any;\n } else if (k === 'rotate' || k === 'scale' || (k === 'transform' && VESTIBULAR.test(String(v)))) continue;\n else out[k] = v as any;\n }\n return out;\n });\n}\n\nlet quiet = 0;\n/** Run `fn` without 4.9 deprecation warnings (library-internal calls). */\nexport function withoutDeprecations<T>(fn: () => T): T {\n quiet++;\n try {\n return fn();\n } finally {\n quiet--;\n }\n}\n\n/** The current global motion intensity. */\nexport function getMotionIntensity(): MotionIntensity {\n return config.motionIntensity;\n}\n\n/** Duration multiplier for the current intensity (1 when `normal`). */\nexport function motionScale(): number {\n return MOTION_SCALE[config.motionIntensity] ?? 1;\n}\n\nexport const canDefine = (): boolean => typeof customElements !== 'undefined' && typeof HTMLElement !== 'undefined';\n\n/** `true` when animations should be reduced (OS setting or `configureComponents`). */\nexport function prefersReducedMotion(): boolean {\n if (config.motionSensitivity === 'minimal' || config.motionSensitivity === 'static') return true;\n if (config.reducedMotion === 'reduce') return true;\n return typeof matchMedia === 'function' && !!matchMedia('(prefers-reduced-motion: reduce)').matches;\n}\n\nconst injected = new Set<string>();\n\n/** Add a component's stylesheet to the document once. */\nexport function adoptStyles(id: string, css: string): void {\n if (!config.injectStyles || !css || injected.has(id) || typeof document === 'undefined') return;\n injected.add(id);\n try {\n if (typeof CSSStyleSheet === 'function' && 'adoptedStyleSheets' in document) {\n const sheet = new CSSStyleSheet();\n sheet.replaceSync(css);\n document.adoptedStyleSheets = [...document.adoptedStyleSheets, sheet];\n return;\n }\n } catch {\n /* fall through to <style> */\n }\n const style = document.createElement('style');\n style.setAttribute('data-usa', id);\n style.textContent = css;\n (document.head || document.documentElement).appendChild(style);\n}\n\n/** Attach `css` to a shadow root (constructable sheet where supported, else `<style>`). */\nexport function shadowStyles(root: ShadowRoot, css: string): void {\n try {\n if (typeof CSSStyleSheet === 'function' && 'adoptedStyleSheets' in root) {\n const sheet = new CSSStyleSheet();\n sheet.replaceSync(css);\n root.adoptedStyleSheets = [sheet];\n return;\n }\n } catch {\n /* fall through */\n }\n const style = document.createElement('style');\n style.textContent = css;\n root.prepend(style);\n}\n\nexport type Cleanup = () => void;\n\n/**\n * Members shared by every `<usa-*>` element. Attribute helpers, a cleanup\n * bag that is emptied on disconnect, and motion helpers that degrade to the\n * final state without WAAPI or under reduced motion.\n */\nexport interface UsaElement extends HTMLElement {\n /** `true` while reduced motion applies to this element. */\n readonly reduced: boolean;\n}\n\nexport interface UsaBase extends UsaElement {\n mount(): void;\n changed(name: string): void;\n unmount(): void;\n str(name: string, fallback?: string): string;\n num(name: string, fallback: number): number;\n flag(name: string): boolean;\n setFlag(name: string, on: boolean): void;\n onCleanup(fn: Cleanup): void;\n listen<K extends keyof HTMLElementEventMap>(\n target: EventTarget,\n type: K | string,\n fn: (e: any) => void,\n options?: AddEventListenerOptions\n ): void;\n inView(cb: (visible: boolean, entry?: IntersectionObserverEntry) => void, init?: IntersectionObserverInit, target?: Element): void;\n motion(el: Element, keyframes: Keyframe[], options: KeyframeAnimationOptions): Animation | null;\n emit(type: string, detail?: unknown): boolean;\n}\n\ntype BaseCtor = new () => UsaBase;\nlet baseClass: BaseCtor | null = null;\n\n/** The lazily created base class (needs `HTMLElement`). */\nexport function getBase(): BaseCtor {\n if (baseClass) return baseClass;\n class Base extends HTMLElement {\n private _cleanups: Cleanup[] = [];\n private _connected = false;\n\n get reduced(): boolean {\n return prefersReducedMotion();\n }\n\n connectedCallback(): void {\n if (this._connected) return;\n this._connected = true;\n styleLoader?.(this.localName);\n // Upgraded while the parser is still inside us (a <script> in <head>\n // defined the element): children/text are not there yet, so wait.\n if (typeof document !== 'undefined' && document.readyState === 'loading' && !this.nextSibling && !this.childNodes.length) {\n const go = () => {\n if (this._connected && this.isConnected) this.mount();\n };\n document.addEventListener('DOMContentLoaded', go, { once: true });\n this._cleanups.push(() => document.removeEventListener('DOMContentLoaded', go));\n return;\n }\n this.mount();\n }\n\n disconnectedCallback(): void {\n this._connected = false;\n this.teardown();\n }\n\n attributeChangedCallback(_name: string, oldValue: string | null, value: string | null): void {\n if (!this._connected || oldValue === value) return;\n this.changed(_name);\n }\n\n /** Re-mount on attribute change (override for finer updates). */\n changed(_name: string): void {\n this.teardown();\n this.mount();\n }\n\n private teardown(): void {\n this._cleanups.splice(0).reverse().forEach((fn) => fn());\n this.unmount();\n }\n\n mount(): void {}\n unmount(): void {}\n\n str(name: string, fallback = ''): string {\n const v = this.getAttribute(name);\n return v === null ? fallback : v;\n }\n\n num(name: string, fallback: number): number {\n const v = this.getAttribute(name);\n const n = v === null || v.trim() === '' ? NaN : Number(v);\n return Number.isFinite(n) ? n : fallback;\n }\n\n /** Boolean attribute: present and not `\"false\"`. */\n flag(name: string): boolean {\n const v = this.getAttribute(name);\n return v !== null && v !== 'false';\n }\n\n setFlag(name: string, on: boolean): void {\n if (on) this.setAttribute(name, '');\n else this.removeAttribute(name);\n }\n\n onCleanup(fn: Cleanup): void {\n this._cleanups.push(fn);\n }\n\n listen(target: EventTarget, type: string, fn: (e: any) => void, options?: AddEventListenerOptions): void {\n target.addEventListener(type, fn, options);\n this.onCleanup(() => target.removeEventListener(type, fn, options));\n }\n\n /** Calls `cb(true/false)` as the element enters / leaves the viewport. */\n inView(cb: (visible: boolean, entry?: IntersectionObserverEntry) => void, init?: IntersectionObserverInit, target: Element = this): void {\n if (typeof IntersectionObserver === 'undefined') {\n cb(true);\n return;\n }\n const io = new IntersectionObserver((entries) => {\n for (const e of entries) cb(e.isIntersecting, e);\n }, init);\n io.observe(target);\n this.onCleanup(() => io.disconnect());\n }\n\n /** `el.animate()` that returns `null` (and applies the last frame) without WAAPI. */\n motion(el: Element, keyframes: Keyframe[], options: KeyframeAnimationOptions): Animation | null {\n return animateWithMotion(el, keyframes, options);\n }\n\n emit(type: string, detail?: unknown): boolean {\n return this.dispatchEvent(new CustomEvent(`usa:${type}`, { detail, bubbles: true, cancelable: true }));\n }\n }\n baseClass = Base as unknown as BaseCtor;\n return baseClass;\n}\n\n/**\n * `el.animate()` with the library's motion rules (5.0, shared by elements and\n * registered effects): motion sensitivity (keyframes adapted, `static` →\n * final frame), intensity (duration scale) and the animation budget. Returns\n * `null` (final frame applied) when nothing should animate.\n */\nexport function animateWithMotion(el: Element, keyframes: Keyframe[], options: KeyframeAnimationOptions): Animation | null {\n if (typeof (el as HTMLElement).animate !== 'function' || config.motionSensitivity === 'static') {\n applyFrame(el as HTMLElement, keyframes[keyframes.length - 1]);\n return null;\n }\n keyframes = adaptKeyframes(keyframes);\n if (active >= maxActive) {\n applyFrame(el as HTMLElement, keyframes[keyframes.length - 1]);\n return null;\n }\n const k = motionScale();\n if (k !== 1 && k > 0 && typeof options.duration === 'number') options = { ...options, duration: options.duration * k, delay: (options.delay || 0) * k };\n const a = (el as HTMLElement).animate(keyframes, options);\n if (options.iterations !== Infinity) {\n active++;\n let done = false;\n const end = () => {\n if (!done) {\n done = true;\n active--;\n }\n };\n a?.finished?.then(end, end);\n }\n return a;\n}\n\n/** Write a keyframe's properties as inline styles (no-WAAPI fallback). */\nexport function applyFrame(el: HTMLElement, frame?: Keyframe): void {\n if (!frame) return;\n for (const [k, v] of Object.entries(frame)) {\n if (k === 'offset' || k === 'easing' || k === 'composite' || v == null) continue;\n (el.style as any)[k] = String(v);\n }\n}\n\n/**\n * Register `tag` with the class built by `make(Base)`. Returns the\n * constructor, the already registered one, or `undefined` without DOM.\n */\nexport function defineElement(\n tag: string,\n make: (Base: BaseCtor) => CustomElementConstructor,\n css?: { id: string; text: string }\n): CustomElementConstructor | undefined {\n if (!canDefine()) return undefined;\n adoptStyles('base', BASE_CSS);\n if (css) adoptStyles(css.id, css.text);\n const existing = customElements.get(tag);\n if (existing) return existing;\n const ctor = make(getBase());\n customElements.define(tag, ctor);\n return ctor;\n}\n\nconst BASE_CSS = '.usa-sr{position:absolute;width:1px;height:1px;margin:-1px;padding:0;overflow:hidden;clip:rect(0 0 0 0);clip-path:inset(50%);white-space:nowrap;border:0}';\n\n/** A visually hidden copy of `text` for screen readers (the animated copy is `aria-hidden`). */\nexport function srText(text: string): HTMLSpanElement {\n const s = document.createElement('span');\n s.className = 'usa-sr';\n s.textContent = text;\n return s;\n}\n\n// --- shared rAF scheduler (4.5) ----------------------------------------------\n// Every component loop goes through one requestAnimationFrame per frame\n// instead of one per element: callbacks are batched, run in order, and a\n// throwing callback no longer starves the others (the first error is rethrown).\nconst frameQueue = new Map<number, FrameRequestCallback>();\nlet frameSeq = 1;\nlet frameHandle: number | ReturnType<typeof setTimeout> | 0 = 0;\nlet frameVia: unknown = null;\nconst frameStats = { frames: 0, callbacks: 0, peak: 0, last: 0 };\nconst frameListeners = new Set<(t: number, dt: number) => void>();\n\nfunction flushFrame(t: number): void {\n frameHandle = 0;\n const dt = frameStats.last && t > frameStats.last ? t - frameStats.last : 16.7;\n frameStats.last = t;\n frameStats.frames++;\n const cbs = Array.from(frameQueue.values());\n frameQueue.clear();\n frameStats.callbacks += cbs.length;\n frameStats.peak = Math.max(frameStats.peak, cbs.length);\n let error: unknown = null;\n for (const cb of cbs) {\n try {\n cb(t);\n } catch (e) {\n error ??= e;\n }\n }\n frameListeners.forEach((fn) => fn(t, dt));\n if (frameListeners.size) requestFlush();\n if (error) throw error;\n}\n\nfunction requestFlush(): void {\n const native = typeof requestAnimationFrame === 'function' ? requestAnimationFrame : null;\n // A stale handle from a replaced requestAnimationFrame (tests, iframes) is dropped.\n if (frameHandle && frameVia === native) return;\n frameVia = native;\n frameHandle = native ? native(flushFrame) : setTimeout(() => flushFrame(now()), 16);\n}\n\n/** requestAnimationFrame through the shared scheduler (timeout fallback in jsdom / hidden documents). */\nexport const raf = (cb: FrameRequestCallback): number => {\n const id = frameSeq++;\n frameQueue.set(id, cb);\n requestFlush();\n return id;\n};\n/** Monotonic time in ms (rAF callback timestamps differ between environments, so loops use this). */\nexport const now = (): number => (typeof performance !== 'undefined' ? performance.now() : Date.now());\nexport const caf = (id: number): void => {\n frameQueue.delete(id);\n};\n\n/** Run `fn(time, dt)` every frame on the shared scheduler until the returned function is called. */\nexport function onFrame(fn: (t: number, dt: number) => void): () => void {\n frameListeners.add(fn);\n requestFlush();\n return () => frameListeners.delete(fn);\n}\n\n/** Scheduler counters: frames flushed, callbacks run, peak callbacks in one frame, pending now. */\nexport function schedulerStats(): { frames: number; callbacks: number; peak: number; pending: number; loops: number } {\n return { frames: frameStats.frames, callbacks: frameStats.callbacks, peak: frameStats.peak, pending: frameQueue.size, loops: frameListeners.size };\n}\n\n// --- active animation budget (4.5) ---------------------------------------------\nlet active = 0;\nlet maxActive = Infinity;\n/** Number of component animations running right now. */\nexport const activeAnimations = (): number => active;\n/** Cap concurrent component animations; extra ones jump to their final frame (`Infinity` = no cap). */\nexport function setAnimationBudget(max: number): void {\n maxActive = max > 0 ? max : Infinity;\n}\n/** The current cap. */\nexport const animationBudget = (): number => maxActive;\n\n// --- on-demand styles (4.5) -----------------------------------------------------\nlet styleLoader: ((tag: string) => void) | null = null;\n/** Called with each element's tag the first time one connects (used by the `lite` build to load CSS on demand). */\nexport function setStyleLoader(fn: ((tag: string) => void) | null): void {\n styleLoader = fn;\n}\n\nexport const EASE_OUT = 'cubic-bezier(0.22, 1, 0.36, 1)';\nexport const EASE_SPRING = 'cubic-bezier(0.34, 1.56, 0.64, 1)';\n/** Windows Fluent \"decelerate\" / \"point-to-point\" curves. */\nexport const FLUENT_DECELERATE = 'cubic-bezier(0.1, 0.9, 0.2, 1)';\n\nconst warned = new Set<string>();\n/** Log a deprecation once per key (console.warn). */\nexport function deprecate(key: string, message: string): void {\n if (warned.has(key)) return;\n warned.add(key);\n if (typeof console !== 'undefined') console.warn(`[motionary] ${message}`);\n}\n\n/**\n * The `kind` attribute of `<usa-spinner>`, `<usa-check>`, `<usa-dialog>` and\n * `<usa-acrylic>` (3.0: `variant` only selects a style variant).\n */\nexport function kindOf(el: Element, valid: readonly string[] | Record<string, unknown>, fallback: string): string {\n const k = el.getAttribute('kind');\n return k && (Array.isArray(valid) ? valid.includes(k) : k in (valid as object)) ? k : fallback;\n}\n\nexport const clamp = (v: number, min: number, max: number): number => Math.min(max, Math.max(min, v));\n","/** Helpers shared by the 6.x widgets (`motionary/components/widgets`). */\nexport const clampN = (v: number, a: number, b: number): number => Math.min(b, Math.max(a, v));\n\n/** Children of `el` that are elements and not created by the widget itself. */\nexport const ownChildren = (el: Element, skip = '[data-usa-part]'): HTMLElement[] =>\n Array.from(el.children).filter((c): c is HTMLElement => c instanceof HTMLElement && !c.matches(skip));\n\n/** Create a part element (marked so re-mounts can find / skip it). */\nexport function part<K extends keyof HTMLElementTagNameMap>(tag: K, cls: string, attrs: Record<string, string> = {}, html = ''): HTMLElementTagNameMap[K] {\n const n = document.createElement(tag);\n n.className = cls;\n n.setAttribute('data-usa-part', '');\n for (const [k, v] of Object.entries(attrs)) n.setAttribute(k, v);\n if (html) n.innerHTML = html;\n return n;\n}\n\n/** Remove the parts a previous mount created. */\nexport const dropParts = (el: Element): void => el.querySelectorAll(':scope > [data-usa-part]').forEach((n) => n.remove());\n\nlet uid = 0;\n/** A document-unique id with a prefix. */\nexport const nextId = (p: string): string => `${p}-${++uid}`;\n\n/** Roving arrow-key focus over `items` (horizontal or vertical); returns the new index or -1. */\nexport function arrowIndex(e: KeyboardEvent, i: number, n: number, vertical = false): number {\n const prev = vertical ? 'ArrowUp' : 'ArrowLeft';\n const next = vertical ? 'ArrowDown' : 'ArrowRight';\n if (e.key === prev) return (i - 1 + n) % n;\n if (e.key === next) return (i + 1) % n;\n if (e.key === 'Home') return 0;\n if (e.key === 'End') return n - 1;\n return -1;\n}\n","import { defineElement, type UsaElement } from '../base';\nimport { clampN, ownChildren, part, dropParts } from './shared';\nimport css from './carousel.css?raw';\n\n/**\n * `<usa-carousel>` (6.2) — swipeable carousel / slider. Each child is a slide.\n * Attributes: `effect` (`slide` · `fade` · `scale` · `cards` — 3D coverflow),\n * `autoplay` (ms; pauses on hover, focus, when off screen and under reduced\n * motion), `loop`, `index`, `label` (\"Carousel\"), `no-controls`, `no-dots`.\n * Drag / swipe with a pointer, arrow keys when focused. API: `next()`,\n * `prev()`, `goTo(i)`, `index`, `length`. Events: `usa:change` (`{ index, from }`).\n * Reduced motion: slides switch without movement.\n */\nexport interface UsaCarouselElement extends UsaElement {\n index: number;\n readonly length: number;\n next(): void;\n prev(): void;\n goTo(i: number): void;\n}\n\nexport const CAROUSEL_EFFECTS = ['slide', 'fade', 'scale', 'cards'] as const;\n\nexport function defineCarousel(tag = 'usa-carousel'): CustomElementConstructor | undefined {\n return defineElement(\n tag,\n (Base) => {\n class UsaCarousel extends Base {\n static get observedAttributes(): string[] {\n return ['effect', 'autoplay', 'loop', 'no-controls', 'no-dots'];\n }\n private _i = 0;\n private _slides: HTMLElement[] = [];\n private _track: HTMLElement | null = null;\n private _timer = 0;\n private _hold = false;\n private _dots: HTMLButtonElement[] = [];\n\n get length(): number {\n return this._slides.length;\n }\n get index(): number {\n return this._i;\n }\n set index(v: number) {\n this.goTo(v);\n }\n get effect(): string {\n const e = this.str('effect', 'slide');\n return (CAROUSEL_EFFECTS as readonly string[]).includes(e) ? e : 'slide';\n }\n\n mount(): void {\n this.dataset.effect = this.effect; // (not the observed attribute: no re-mount loop)\n this.toggleAttribute('data-reduced', this.reduced);\n const old = this.querySelector<HTMLElement>(':scope > .usa-carousel-viewport');\n this._slides = old ? ownChildren(old.firstElementChild as HTMLElement) : ownChildren(this);\n dropParts(this);\n const vp = part('div', 'usa-carousel-viewport', { 'aria-live': this.num('autoplay', 0) ? 'off' : 'polite' });\n const track = part('div', 'usa-carousel-track');\n this._track = track;\n vp.append(track);\n const n = this._slides.length;\n this._slides.forEach((s, i) => {\n s.setAttribute('role', 'group');\n s.setAttribute('aria-roledescription', 'slide');\n s.setAttribute('aria-label', `${i + 1} of ${n}`);\n track.append(s);\n });\n this.prepend(vp);\n this.setAttribute('role', 'region');\n this.setAttribute('aria-roledescription', 'carousel');\n this.setAttribute('aria-label', this.str('label', 'Carousel'));\n if (!this.hasAttribute('tabindex')) this.tabIndex = 0;\n if (n > 1 && !this.flag('no-controls')) {\n const prev = part('button', 'usa-carousel-nav usa-carousel-prev', { type: 'button', 'aria-label': 'Previous slide' }, '‹');\n const next = part('button', 'usa-carousel-nav usa-carousel-next', { type: 'button', 'aria-label': 'Next slide' }, '›');\n this.listen(prev, 'click', () => this.prev());\n this.listen(next, 'click', () => this.next());\n this.append(prev, next);\n }\n this._dots = [];\n if (n > 1 && !this.flag('no-dots')) {\n const dots = part('div', 'usa-carousel-dots', { role: 'group', 'aria-label': 'Choose slide' });\n for (let i = 0; i < n; i++) {\n const d = part('button', 'usa-carousel-dot', { type: 'button', 'aria-label': `Slide ${i + 1}` });\n this.listen(d, 'click', () => this.goTo(i));\n this._dots.push(d);\n dots.append(d);\n }\n this.append(dots);\n }\n this._i = clampN(Math.round(this.num('index', 0)), 0, Math.max(0, n - 1));\n this.layout(0);\n this.listen(this, 'keydown', (e: KeyboardEvent) => {\n if (e.key === 'ArrowRight') (e.preventDefault(), this.next());\n else if (e.key === 'ArrowLeft') (e.preventDefault(), this.prev());\n });\n this.drag(vp);\n const ms = this.num('autoplay', 0);\n if (ms > 0 && n > 1 && !this.reduced) {\n let visible = true;\n this.inView((v) => (visible = v));\n const pause = (on: boolean) => () => (this._hold = on);\n this.listen(this, 'pointerenter', pause(true));\n this.listen(this, 'pointerleave', pause(false));\n this.listen(this, 'focusin', pause(true));\n this.listen(this, 'focusout', pause(false));\n this._timer = window.setInterval(() => {\n if (visible && !this._hold && !document.hidden) this.next();\n }, Math.max(1200, ms));\n this.onCleanup(() => clearInterval(this._timer));\n }\n }\n\n private drag(vp: HTMLElement): void {\n let x0 = 0;\n let dx = 0;\n let id = -1;\n this.listen(vp, 'pointerdown', (e: PointerEvent) => {\n if (this.length < 2 || (e.target as Element).closest('button,a,input')) return;\n id = e.pointerId;\n x0 = e.clientX;\n dx = 0;\n this.setAttribute('data-dragging', '');\n });\n this.listen(window, 'pointermove', (e: PointerEvent) => {\n if (e.pointerId !== id) return;\n dx = e.clientX - x0;\n this.layout(dx / Math.max(1, vp.clientWidth));\n });\n const end = (e: PointerEvent) => {\n if (e.pointerId !== id) return;\n id = -1;\n this.removeAttribute('data-dragging');\n const w = Math.max(1, vp.clientWidth);\n if (Math.abs(dx) > w * 0.18) dx < 0 ? this.next() : this.prev();\n else this.layout(0);\n };\n this.listen(window, 'pointerup', end);\n this.listen(window, 'pointercancel', end);\n }\n\n /** Position the slides (`drag` = fraction of a slide the pointer moved). */\n private layout(drag: number): void {\n const n = this.length;\n const i = this._i;\n const fx = this.effect;\n if (this._track) this._track.style.transform = fx === 'slide' ? `translateX(${(-i + drag) * 100}%)` : '';\n this._slides.forEach((s, k) => {\n let off = k - i + drag;\n if (this.flag('loop') && n > 2) {\n if (off > n / 2) off -= n;\n if (off < -n / 2) off += n;\n }\n const active = k === i;\n s.toggleAttribute('data-active', active);\n s.setAttribute('aria-hidden', String(!active));\n s.inert = !active;\n if (fx === 'slide') {\n s.style.transform = s.style.opacity = s.style.zIndex = s.style.filter = '';\n return;\n }\n const a = Math.abs(off);\n if (fx === 'fade') {\n s.style.opacity = String(clampN(1 - a, 0, 1));\n s.style.transform = '';\n } else if (fx === 'scale') {\n s.style.opacity = String(clampN(1 - a, 0, 1));\n s.style.transform = `scale(${1 + Math.min(1, a) * (off < 0 ? 0.12 : -0.12)})`;\n } else {\n s.style.opacity = a > 2.2 ? '0' : String(1 - Math.min(a, 2) * 0.28);\n s.style.transform = `translateX(${off * 58}%) translateZ(${-a * 140}px) rotateY(${clampN(-off * 38, -60, 60)}deg)`;\n s.style.filter = a > 0.5 ? `brightness(${1 - Math.min(a, 2) * 0.18})` : '';\n }\n s.style.zIndex = String(100 - Math.round(a * 10));\n });\n this._dots.forEach((d, k) => d.setAttribute('aria-current', String(k === i)));\n }\n\n goTo(to: number): void {\n const n = this.length;\n if (!n) return;\n const t = this.flag('loop') ? ((Math.round(to) % n) + n) % n : clampN(Math.round(to), 0, n - 1);\n const from = this._i;\n this._i = t;\n this.layout(0);\n if (t !== from) this.emit('change', { index: t, from });\n }\n next(): void {\n this.goTo(this._i + 1 >= this.length && !this.flag('loop') ? 0 : this._i + 1);\n }\n prev(): void {\n this.goTo(this._i - 1 < 0 && !this.flag('loop') ? this.length - 1 : this._i - 1);\n }\n }\n return UsaCarousel as unknown as CustomElementConstructor;\n },\n { id: 'carousel', text: css }\n );\n}\n","import { defineElement, type UsaElement } from '../base';\nimport { ownChildren, part, nextId, arrowIndex } from './shared';\nimport css from './tab-bar.css?raw';\n\n/**\n * `<usa-tab-bar>` (6.2) — tabs with an animated indicator that stretches\n * from the old tab to the new one (leading edge first, then the trailing edge\n * catches up). Children: `<button>` tabs, and optional panels marked\n * `data-panel` (in the same order). Attributes: `indicator` (`pill` ·\n * `underline` · `glow` · `gooey`), `selected` (index), `label`. Arrow keys,\n * Home/End. API: `select(i)`, `selected`. Events: `usa:change` (`{ index, from }`).\n * Panels slide in from the side of travel. Reduced motion: no stretch / slide.\n */\nexport interface UsaTabBarElement extends UsaElement {\n selected: number;\n select(i: number): void;\n}\n\nexport const TAB_INDICATORS = ['pill', 'underline', 'glow', 'gooey'] as const;\n\nexport function defineTabBar(tag = 'usa-tab-bar'): CustomElementConstructor | undefined {\n return defineElement(\n tag,\n (Base) => {\n class UsaTabBar extends Base {\n static get observedAttributes(): string[] {\n return ['indicator'];\n }\n private _tabs: HTMLElement[] = [];\n private _panels: HTMLElement[] = [];\n private _ink: HTMLElement | null = null;\n private _i = 0;\n\n get selected(): number {\n return this._i;\n }\n set selected(v: number) {\n this.select(v);\n }\n\n mount(): void {\n const ind = this.str('indicator', 'pill');\n this.dataset.indicator = (TAB_INDICATORS as readonly string[]).includes(ind) ? ind : 'pill';\n let list = this.querySelector<HTMLElement>(':scope > .usa-tab-bar-list');\n if (!list) {\n list = part('div', 'usa-tab-bar-list');\n this.prepend(list);\n }\n list.setAttribute('role', 'tablist');\n list.setAttribute('aria-label', this.str('label', 'Tabs'));\n const kids = ownChildren(this);\n this._panels = kids.filter((k) => k.hasAttribute('data-panel'));\n for (const k of kids) if (!k.hasAttribute('data-panel') && k.matches('button,[data-tab]')) list.append(k);\n this._tabs = Array.from(list.children).filter((c): c is HTMLElement => c instanceof HTMLElement && !c.classList.contains('usa-tab-bar-ink'));\n this._ink = list.querySelector('.usa-tab-bar-ink') || part('span', 'usa-tab-bar-ink', { 'aria-hidden': 'true' });\n list.prepend(this._ink);\n this._tabs.forEach((t, i) => {\n t.setAttribute('role', 'tab');\n if (t.localName === 'button' && !t.hasAttribute('type')) t.setAttribute('type', 'button');\n t.id ||= nextId('usa-tab');\n const p = this._panels[i];\n if (p) {\n p.id ||= nextId('usa-tabpanel');\n p.classList.add('usa-tab-bar-panel');\n p.setAttribute('role', 'tabpanel');\n p.setAttribute('aria-labelledby', t.id);\n p.tabIndex = 0;\n t.setAttribute('aria-controls', p.id);\n }\n this.listen(t, 'click', () => this.select(i));\n });\n this.listen(list, 'keydown', (e: KeyboardEvent) => {\n const n = arrowIndex(e, this._i, this._tabs.length);\n if (n < 0) return;\n e.preventDefault();\n this.select(n);\n this._tabs[n].focus();\n });\n this._i = Math.min(Math.max(0, Math.round(this.num('selected', 0))), Math.max(0, this._tabs.length - 1));\n this.sync(-1);\n if (typeof ResizeObserver === 'function') {\n const ro = new ResizeObserver(() => this.place());\n ro.observe(list);\n this.onCleanup(() => ro.disconnect());\n }\n }\n\n private rect(i: number): [number, number] {\n const t = this._tabs[i];\n return t ? [t.offsetLeft, t.offsetWidth] : [0, 0];\n }\n private place(): void {\n if (!this._ink) return;\n const [x, w] = this.rect(this._i);\n this._ink.style.transform = `translateX(${x}px)`;\n this._ink.style.width = `${w}px`;\n }\n\n private sync(from: number): void {\n this._tabs.forEach((t, k) => {\n t.setAttribute('aria-selected', String(k === this._i));\n t.tabIndex = k === this._i ? 0 : -1;\n });\n this._panels.forEach((p, k) => (p.hidden = k !== this._i));\n this.place();\n if (from < 0 || from === this._i || !this._ink || this.reduced) return;\n // stretchy travel: the leading edge arrives first, the trailing edge follows\n const [x0, w0] = this.rect(from);\n const [x1, w1] = this.rect(this._i);\n const right = x1 > x0;\n const mid = right ? { transform: `translateX(${x0}px)`, width: `${x1 + w1 - x0}px` } : { transform: `translateX(${x1}px)`, width: `${x0 + w0 - x1}px` };\n this.motion(this._ink, [{ transform: `translateX(${x0}px)`, width: `${w0}px` }, { ...mid, offset: 0.45 }, { transform: `translateX(${x1}px)`, width: `${w1}px` }], { duration: 480, easing: 'cubic-bezier(.22,1,.36,1)' });\n const p = this._panels[this._i];\n if (p) this.motion(p, [{ opacity: 0, transform: `translateX(${right ? 24 : -24}px)` }, { opacity: 1, transform: 'none' }], { duration: 320, easing: 'cubic-bezier(.22,1,.36,1)' });\n }\n\n select(i: number): void {\n const n = Math.min(Math.max(0, Math.round(i)), this._tabs.length - 1);\n if (n === this._i || n < 0) return;\n const from = this._i;\n this._i = n;\n this.sync(from);\n this.emit('change', { index: n, from });\n }\n }\n return UsaTabBar as unknown as CustomElementConstructor;\n },\n { id: 'tab-bar', text: css }\n );\n}\n","import { prefersReducedMotion, motionScale, raf, caf, now, applyFrame, EASE_SPRING } from '../base';\n\n/**\n * Spring physics core (v2.3). A damped harmonic oscillator integrated in\n * 1 ms steps: `stiffness` (k, N/m), `damping` (c) and `mass` (m). Used by\n * the `<usa-spring>`, `<usa-draggable>` and `<usa-overscroll>` elements and\n * exported for your own animations:\n *\n * - `springEasing()` turns a spring into a CSS `linear()` easing + duration\n * for WAAPI / CSS (falls back to a cubic-bezier overshoot where `linear()`\n * is unsupported);\n * - `spring(el, keyframes, cfg)` animates with it;\n * - `createSpring()` is an interruptible, velocity-preserving value for\n * gestures (drag, inertia, snap).\n */\nexport interface SpringConfig {\n /** Spring stiffness (default 170). Higher = faster, snappier. */\n stiffness?: number;\n /** Damping / friction (default 26). Lower = more bounces. */\n damping?: number;\n /** Mass (default 1). Higher = slower, heavier. */\n mass?: number;\n /** Initial velocity in progress units per second (default 0). */\n velocity?: number;\n /** Rest threshold (default 0.001). */\n precision?: number;\n}\n\nexport type SpringPreset = 'default' | 'gentle' | 'wobbly' | 'stiff' | 'bouncy' | 'slow' | 'molasses';\n\nexport const SPRING_PRESETS: Record<SpringPreset, Required<Pick<SpringConfig, 'stiffness' | 'damping' | 'mass'>>> = {\n default: { stiffness: 170, damping: 26, mass: 1 },\n gentle: { stiffness: 120, damping: 14, mass: 1 },\n wobbly: { stiffness: 180, damping: 12, mass: 1 },\n stiff: { stiffness: 210, damping: 20, mass: 1 },\n bouncy: { stiffness: 300, damping: 10, mass: 1 },\n slow: { stiffness: 280, damping: 60, mass: 1 },\n molasses: { stiffness: 280, damping: 120, mass: 1 },\n};\n\nexport type SpringInput = SpringPreset | SpringConfig | string | undefined;\n\n/** Resolve a preset name or a partial config to a full config. */\nexport function resolveSpring(input?: SpringInput): Required<SpringConfig> {\n const base = typeof input === 'string' ? SPRING_PRESETS[input as SpringPreset] || SPRING_PRESETS.default : { ...SPRING_PRESETS.default, ...(input || {}) };\n const pos = (v: unknown, d: number) => (typeof v === 'number' && Number.isFinite(v) && v > 0 ? v : d);\n const o = (typeof input === 'object' && input) || {};\n return {\n stiffness: pos(base.stiffness, 170),\n damping: Math.max(0, Number.isFinite(base.damping) ? base.damping : 26),\n mass: pos(base.mass, 1),\n velocity: Number.isFinite(o.velocity) ? (o.velocity as number) : 0,\n precision: pos(o.precision, 0.001),\n };\n}\n\n/** One integration step (semi-implicit Euler) towards `to`. Returns [x, v]. */\nexport function stepSpring(cfg: Required<SpringConfig>, x: number, v: number, to: number, dt: number): [number, number] {\n const a = (-cfg.stiffness * (x - to) - cfg.damping * v) / cfg.mass;\n const nv = v + a * dt;\n return [x + nv * dt, nv];\n}\n\nconst cache = new Map<string, { values: number[]; duration: number }>();\n\n/**\n * Sample the spring from 0 to 1 at `fps` (default 60). `values` may exceed 1\n * (overshoot); `duration` is the time to rest, in ms (max 10 s).\n */\nexport function springSamples(input?: SpringInput, fps = 60): { values: number[]; duration: number } {\n const cfg = resolveSpring(input);\n const key = `${cfg.stiffness}|${cfg.damping}|${cfg.mass}|${cfg.velocity}|${cfg.precision}|${fps}`;\n const hit = cache.get(key);\n if (hit) return hit;\n const values = [0];\n let x = 0;\n let v = cfg.velocity;\n const frame = 1000 / fps;\n let t = 0;\n let next = frame;\n while (t < 10000) {\n [x, v] = stepSpring(cfg, x, v, 1, 0.001);\n t += 1;\n if (t >= next) {\n values.push(x);\n next += frame;\n if (Math.abs(1 - x) < cfg.precision && Math.abs(v) < cfg.precision * 10) break;\n }\n }\n values[values.length - 1] = 1;\n const out = { values, duration: Math.round(t) };\n if (cache.size > 64) cache.clear();\n cache.set(key, out);\n return out;\n}\n\n/** `true` when CSS `linear()` easing is supported. */\nexport function supportsLinearEasing(): boolean {\n return typeof CSS !== 'undefined' && typeof CSS.supports === 'function' && CSS.supports('animation-timing-function', 'linear(0, 1)');\n}\n\n/**\n * The spring as `{ easing, duration }` for `el.animate()` / CSS. `easing` is\n * a `linear(…)` function with at most `points` stops (default 48), or a\n * cubic-bezier overshoot where `linear()` is unsupported.\n */\nexport function springEasing(input?: SpringInput, points = 48): { easing: string; duration: number } {\n const { values, duration } = springSamples(input);\n if (!supportsLinearEasing()) return { easing: EASE_SPRING, duration: Math.min(duration, 1200) };\n return { easing: linearEasing(values, points), duration };\n}\n\n/** Build a CSS `linear()` easing from samples (down-sampled to `points`). */\nexport function linearEasing(values: number[], points = 48): string {\n const n = values.length;\n const step = Math.max(1, Math.ceil((n - 1) / Math.max(2, points - 1)));\n const out: string[] = [];\n for (let i = 0; i < n - 1; i += step) out.push(String(Math.round(values[i] * 1000) / 1000));\n out.push('1');\n return `linear(${out.join(', ')})`;\n}\n\n/**\n * Animate `el` between keyframes with spring timing (WAAPI). Under reduced\n * motion the final frame is applied immediately. Returns the Animation (or\n * `null` without WAAPI / under reduced motion).\n */\nexport function spring(el: Element, keyframes: Keyframe[], input?: SpringInput, options: KeyframeAnimationOptions = {}): Animation | null {\n const target = el as HTMLElement;\n if (prefersReducedMotion() || typeof target.animate !== 'function') {\n applyFrame(target, keyframes[keyframes.length - 1]);\n return null;\n }\n const { easing, duration } = springEasing(input);\n return target.animate(keyframes, { duration: duration * motionScale(), easing, fill: 'both', ...options });\n}\n\n/* ------------------------------------------------------------------ */\n/* Interactive springs */\n/* ------------------------------------------------------------------ */\n\nexport interface SpringValueOptions {\n /** Start value (default 0). */\n value?: number;\n /** Spring config or preset (default `'default'`). */\n spring?: SpringInput;\n /** Called with the value every frame (and on `jump()`). */\n onUpdate?: (value: number, velocity: number) => void;\n /** Called when the value comes to rest at its target. */\n onRest?: (value: number) => void;\n}\n\nexport interface SpringValue {\n readonly value: number;\n /** Units per second. */\n readonly velocity: number;\n readonly target: number;\n readonly animating: boolean;\n /** Animate to `target`, optionally with a new initial velocity (units/s). */\n set(target: number, velocity?: number): void;\n /** Jump to `value` with no animation. */\n jump(value: number): void;\n /** Stop where it is. */\n stop(): void;\n /** Change the spring config. */\n configure(spring: SpringInput): void;\n}\n\n/**\n * An interruptible spring-animated number: call `set()` as often as you like,\n * the motion keeps its velocity (like iOS / Framer springs). Reduced motion\n * jumps straight to the target.\n */\nexport function createSpring(opts: SpringValueOptions = {}): SpringValue {\n let cfg = resolveSpring(opts.spring);\n let x = opts.value ?? 0;\n let v = 0;\n let to = x;\n let id = 0;\n let last = 0;\n let running = false;\n const stop = () => {\n if (running) caf(id);\n running = false;\n };\n const loop = () => {\n const t = now();\n let dt = Math.min(64, Math.max(1, t - last));\n last = t;\n while (dt > 0) {\n const s = Math.min(dt, 4);\n [x, v] = stepSpring(cfg, x, v, to, s / 1000);\n dt -= s;\n }\n const scale = Math.max(1, Math.abs(to) * 0.0005);\n if (Math.abs(to - x) < cfg.precision * scale * 10 && Math.abs(v) < cfg.precision * scale * 100) {\n x = to;\n v = 0;\n running = false;\n opts.onUpdate?.(x, 0);\n opts.onRest?.(x);\n return;\n }\n opts.onUpdate?.(x, v);\n id = raf(loop);\n };\n const api: SpringValue = {\n get value() {\n return x;\n },\n get velocity() {\n return v;\n },\n get target() {\n return to;\n },\n get animating() {\n return running;\n },\n set(target, velocity) {\n to = target;\n if (velocity !== undefined && Number.isFinite(velocity)) v = velocity;\n if (prefersReducedMotion()) {\n api.jump(target);\n opts.onRest?.(target);\n return;\n }\n if (!running) {\n running = true;\n last = now();\n id = raf(loop);\n }\n },\n jump(value) {\n stop();\n x = to = value;\n v = 0;\n opts.onUpdate?.(x, 0);\n },\n stop() {\n stop();\n v = 0;\n to = x;\n },\n configure(input) {\n cfg = resolveSpring(input);\n },\n };\n return api;\n}\n\n/* ------------------------------------------------------------------ */\n/* Inertia + snapping */\n/* ------------------------------------------------------------------ */\n\n/**\n * Where a flick at `velocity` (units/s) comes to rest with exponential\n * decay: `value + velocity · timeConstant` (default 0.325 s, iOS-like).\n */\nexport function projectInertia(value: number, velocity: number, timeConstant = 0.325): number {\n return value + velocity * timeConstant;\n}\n\n/** Snap to a grid (`number`) or the nearest of a list of points. */\nexport function snapTo(value: number, to: number | number[] | null | undefined): number {\n if (Array.isArray(to)) {\n if (!to.length) return value;\n return to.reduce((best, p) => (Math.abs(p - value) < Math.abs(best - value) ? p : best), to[0]);\n }\n if (typeof to === 'number' && to > 0) return Math.round(value / to) * to;\n return value;\n}\n\n/** iOS-style rubber-band resistance: how far content moves when pulled `distance` past an edge. */\nexport function rubberBand(distance: number, dimension: number, constant = 0.55): number {\n if (dimension <= 0) return 0;\n const sign = distance < 0 ? -1 : 1;\n const d = Math.abs(distance);\n return sign * (1 - 1 / ((d * constant) / dimension + 1)) * dimension;\n}\n","import { defineElement, type UsaElement } from '../base';\nimport { springEasing } from '../physics/spring';\nimport css from './disclosure.css?raw';\n\n/**\n * `<usa-disclosure>` (6.2) — accordion 2.0 on native `<details>`: the\n * content springs open / closed (height + fade), the chevron flips with an\n * overshoot. Children: `<details><summary>…</summary>…</details>`.\n * Attributes: `multiple` (allow several open; default: one at a time),\n * `spring` (preset, default `gentle`), `variant=\"cards\"`. API: `openAll()`,\n * `closeAll()`, `toggle(i, force?)`. Events: `usa:toggle` (`{ index, open }`).\n * Native semantics (keyboard, find-in-page) kept. Reduced motion: instant.\n */\nexport interface UsaDisclosureElement extends UsaElement {\n toggle(i: number, force?: boolean): void;\n openAll(): void;\n closeAll(): void;\n}\n\nexport function defineDisclosure(tag = 'usa-disclosure'): CustomElementConstructor | undefined {\n return defineElement(\n tag,\n (Base) => {\n class UsaDisclosure extends Base {\n private _anims = new WeakMap<HTMLDetailsElement, Animation>();\n get items(): HTMLDetailsElement[] {\n return Array.from(this.children).filter((c): c is HTMLDetailsElement => c.localName === 'details');\n }\n mount(): void {\n this.listen(this, 'click', (e: MouseEvent) => {\n const s = (e.target as Element).closest('summary');\n const d = s?.parentElement as HTMLDetailsElement | null;\n if (!s || !d || d.parentElement !== this) return;\n e.preventDefault();\n this.set(d, !d.open);\n });\n }\n private set(d: HTMLDetailsElement, open: boolean): void {\n if (open && !this.flag('multiple')) for (const o of this.items) if (o !== d && o.open) this.set(o, false);\n if (d.open === open && !this._anims.get(d)) return;\n const summary = d.querySelector('summary');\n const closedH = summary ? summary.offsetHeight : 0;\n const startH = d.offsetHeight;\n this._anims.get(d)?.cancel();\n if (open) d.open = true;\n const endH = open ? d.scrollHeight : closedH;\n const sp = springEasing(this.str('spring', 'gentle'));\n const a = this.reduced ? null : this.motion(d, [{ height: `${startH}px` }, { height: `${endH}px` }], { duration: Math.min(sp.duration, 700), easing: sp.easing, fill: 'forwards' });\n const body = Array.from(d.children).filter((c) => c.localName !== 'summary');\n if (open && !this.reduced) body.forEach((b) => this.motion(b, [{ opacity: 0, transform: 'translateY(-6px)' }, { opacity: 1, transform: 'none' }], { duration: 300, delay: 60, easing: 'ease-out' }));\n const done = () => {\n this._anims.delete(d);\n if (!open) d.open = false;\n a?.cancel();\n };\n if (a) {\n this._anims.set(d, a);\n a.finished.then(() => this._anims.get(d) === a && done(), () => undefined);\n } else done();\n this.emit('toggle', { index: this.items.indexOf(d), open });\n }\n toggle(i: number, force?: boolean): void {\n const d = this.items[i];\n if (d) this.set(d, force ?? !d.open);\n }\n openAll(): void {\n this.items.forEach((d) => (d.open = true));\n }\n closeAll(): void {\n this.items.forEach((d) => this.set(d, false));\n }\n }\n return UsaDisclosure as unknown as CustomElementConstructor;\n },\n { id: 'disclosure', text: css }\n );\n}\n","import { defineElement, type UsaElement } from '../base';\nimport { ownChildren, part, dropParts } from './shared';\nimport css from './stories.css?raw';\n\n/**\n * `<usa-stories>` (6.2) — story viewer: segmented progress bars at the top,\n * auto-advance, tap the left / right third to go back / forward, press and\n * hold to pause, a pause button (WCAG 2.2.2). Each child is one story.\n * Attributes: `duration` (ms per story, 5000), `loop`, `paused`.\n * API: `next()`, `prev()`, `goTo(i)`, `pause()`, `play()`, `index`.\n * Events: `usa:change` (`{ index }`), `usa:end`. Reduced motion: no\n * auto-advance (paused until the user navigates), cross-fade only.\n */\nexport interface UsaStoriesElement extends UsaElement {\n readonly index: number;\n next(): void;\n prev(): void;\n goTo(i: number): void;\n pause(): void;\n play(): void;\n}\n\nexport function defineStories(tag = 'usa-stories'): CustomElementConstructor | undefined {\n return defineElement(\n tag,\n (Base) => {\n class UsaStories extends Base {\n static get observedAttributes(): string[] {\n return ['duration', 'loop'];\n }\n private _i = 0;\n private _items: HTMLElement[] = [];\n private _bars: HTMLElement[] = [];\n private _fill: Animation | null = null;\n private _btn: HTMLButtonElement | null = null;\n get index(): number {\n return this._i;\n }\n mount(): void {\n dropParts(this);\n this._items = ownChildren(this);\n const bars = part('div', 'usa-stories-bars', { 'aria-hidden': 'true' });\n this._bars = this._items.map(() => {\n const b = part('div', 'usa-stories-bar', {}, '<i></i>');\n bars.append(b);\n return b;\n });\n this._btn = part('button', 'usa-stories-toggle', { type: 'button' });\n this.listen(this._btn, 'click', (e: Event) => {\n e.stopPropagation();\n this.hasAttribute('paused') ? this.play() : this.pause();\n });\n this.append(bars, this._btn);\n this.setAttribute('role', 'region');\n this.setAttribute('aria-roledescription', 'stories');\n if (!this.hasAttribute('aria-label')) this.setAttribute('aria-label', 'Stories');\n if (!this.hasAttribute('tabindex')) this.tabIndex = 0;\n if (this.reduced) this.setAttribute('paused', '');\n let held = false;\n let downAt = 0;\n this.listen(this, 'pointerdown', (e: PointerEvent) => {\n if ((e.target as Element).closest('button,a')) return;\n downAt = performance.now();\n held = !this.hasAttribute('paused');\n if (held) this._fill?.pause();\n });\n this.listen(this, 'pointerup', (e: PointerEvent) => {\n if ((e.target as Element).closest('button,a') || !downAt) return;\n const long = performance.now() - downAt > 350;\n downAt = 0;\n if (held && !this.hasAttribute('paused')) this._fill?.play();\n if (long) return;\n const r = this.getBoundingClientRect();\n e.clientX - r.left < r.width / 3 ? this.prev() : this.next();\n });\n this.listen(this, 'keydown', (e: KeyboardEvent) => {\n if (e.key === 'ArrowRight') this.next();\n else if (e.key === 'ArrowLeft') this.prev();\n else if (e.key === ' ') (e.preventDefault(), this.hasAttribute('paused') ? this.play() : this.pause());\n });\n this.onCleanup(() => this._fill?.cancel());\n this.goTo(Math.min(this._i, Math.max(0, this._items.length - 1)), true);\n }\n private label(): void {\n if (this._btn) {\n const p = this.hasAttribute('paused');\n this._btn.textContent = p ? '▶' : '❚❚';\n this._btn.setAttribute('aria-label', p ? 'Play stories' : 'Pause stories');\n }\n }\n goTo(i: number, initial = false): void {\n const n = this._items.length;\n if (!n) return;\n if (i >= n && !this.flag('loop')) {\n this.emit('end');\n this.pause();\n return;\n }\n const t = ((i % n) + n) % n;\n const changed = t !== this._i || initial;\n this._i = t;\n this._items.forEach((s, k) => {\n s.toggleAttribute('data-active', k === t);\n s.setAttribute('aria-hidden', String(k !== t));\n });\n this._bars.forEach((b, k) => b.toggleAttribute('data-done', k < t));\n this._fill?.cancel();\n const fillEl = this._bars[t]?.firstElementChild as HTMLElement | undefined;\n this._fill = fillEl ? fillEl.animate?.([{ transform: 'scaleX(0)' }, { transform: 'scaleX(1)' }], { duration: Math.max(800, this.num('duration', 5000)), fill: 'forwards' }) ?? null : null;\n if (this._fill) {\n const a = this._fill;\n a.onfinish = () => this._fill === a && this.goTo(this._i + 1);\n if (this.hasAttribute('paused')) a.pause();\n }\n this.label();\n if (changed && !initial) this.emit('change', { index: t });\n }\n next(): void {\n this.goTo(this._i + 1);\n }\n prev(): void {\n this.goTo(Math.max(0, this._i - 1));\n }\n pause(): void {\n this.setAttribute('paused', '');\n this._fill?.pause();\n this.label();\n }\n play(): void {\n this.removeAttribute('paused');\n if (this._fill?.playState === 'finished') this.goTo(this._i + 1 >= this._items.length ? 0 : this._i + 1);\n else this._fill?.play();\n this.label();\n }\n }\n return UsaStories as unknown as CustomElementConstructor;\n },\n { id: 'stories', text: css }\n );\n}\n","/**\n * motionary/components/widgets — the 6.x animated UI widgets, in their own\n * entry so `motionary/components` and `components/lite` keep their size\n * budgets. Every widget is reduced-motion safe and keyboard accessible.\n *\n * ```ts\n * import { defineWidgets } from 'motionary/components/widgets';\n * defineWidgets(); // or defineCarousel(), defineTabBar(), …\n * ```\n * No build step: `<script src=\"https://unpkg.com/motionary@6/dist/widgets.umd.js\">`\n * (registers every widget and every 6.x effect pack; `window.UsaWidgets`).\n */\nimport { defineCarousel, CAROUSEL_EFFECTS, type UsaCarouselElement } from './carousel';\nimport { defineTabBar, TAB_INDICATORS, type UsaTabBarElement } from './tab-bar';\nimport { defineDisclosure, type UsaDisclosureElement } from './disclosure';\nimport { defineStories, type UsaStoriesElement } from './stories';\n\nexport { defineCarousel, defineTabBar, defineDisclosure, defineStories, CAROUSEL_EFFECTS, TAB_INDICATORS };\nexport type { UsaCarouselElement, UsaTabBarElement, UsaDisclosureElement, UsaStoriesElement };\n\n/** The widgets by release (tag → define function). */\nexport const WIDGETS: Record<string, Record<string, (tag?: string) => CustomElementConstructor | undefined>> = {\n '6.2': { 'usa-carousel': defineCarousel, 'usa-tab-bar': defineTabBar, 'usa-disclosure': defineDisclosure, 'usa-stories': defineStories },\n};\n\n/** Every widget tag, in release order. */\nexport const WIDGET_TAGS: string[] = Object.values(WIDGETS).flatMap((g) => Object.keys(g));\n\n/** Register every widget (or only those of one release, e.g. `'6.2'`) under its default tag. */\nexport function defineWidgets(release?: string): void {\n for (const [v, group] of Object.entries(WIDGETS)) if (!release || release === v) for (const [tag, fn] of Object.entries(group)) fn(tag);\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'usa-carousel': UsaCarouselElement;\n 'usa-tab-bar': UsaTabBarElement;\n 'usa-disclosure': UsaDisclosureElement;\n 'usa-stories': UsaStoriesElement;\n }\n}\n","/**\n * 5.0 — unified plugin-style effect registration. Every effect (built-in or\n * yours) is a plain object registered once and played the same way:\n * `playEffect(el, name)`, `bindEffect(el, name, { trigger })` or\n * `<usa-fx effect=\"name\" trigger=\"click\">`. Effects get a context that\n * already applies reduced motion, motion sensitivity, intensity and the\n * animation budget.\n */\nimport { animateWithMotion, prefersReducedMotion, getMotionSensitivity, type MotionSensitivity, type Cleanup } from '../base';\n\nexport const EFFECT_KINDS = ['enter', 'exit', 'attention', 'click', 'hover', 'card', 'loop', 'page', 'background', 'text', 'cursor', 'scroll'] as const;\nexport type EffectKind = (typeof EFFECT_KINDS)[number];\n\nexport const EFFECT_TRIGGERS = ['click', 'hover', 'enter', 'load', 'loop', 'manual'] as const;\nexport type EffectTrigger = (typeof EFFECT_TRIGGERS)[number];\n\nexport interface EffectContext {\n /** Reduced motion applies (OS setting, `minimal` / `static` sensitivity). */\n readonly reduced: boolean;\n readonly sensitivity: MotionSensitivity;\n /** The triggering event (pointer position for click effects), if any. */\n readonly event?: Event;\n /** `el.animate()` with the library's motion rules (may return `null`). */\n animate(el: Element, keyframes: Keyframe[], options: KeyframeAnimationOptions): Animation | null;\n /** Register teardown for long-running effects (loops, listeners). */\n onCleanup(fn: Cleanup): void;\n}\n\nexport interface EffectDefinition<O extends Record<string, unknown> = Record<string, any>> {\n /** Unique, kebab-case. */\n name: string;\n kind: EffectKind;\n /** One line for docs and the gallery. */\n description?: string;\n /** Option defaults (merged under the caller's options). */\n defaults?: Partial<O>;\n /**\n * Under reduced motion: `'skip'` (do nothing — default for loop, background\n * and cursor effects) or `'run'` (run with `ctx.reduced === true`, the\n * effect degrades itself — default for everything else).\n */\n reduced?: 'skip' | 'run';\n /** Play the effect. Return an Animation / Promise to be awaited, or a cleanup. */\n run(el: HTMLElement, options: O, ctx: EffectContext): void | Cleanup | Animation | null | Promise<unknown>;\n}\n\n// 6.2: one table per page (Symbol.for), shared by every bundle that registers effects —\n// e.g. dist/components.umd.js and dist/widgets.umd.js on the same page.\nconst REG_KEY = Symbol.for('use-scroll-animate.effects');\nconst registry: Map<string, EffectDefinition> = ((globalThis as any)[REG_KEY] ||= new Map<string, EffectDefinition>());\n\n/** Register an effect (throws on a duplicate name unless `override`). Returns an unregister function. */\nexport function registerEffect<O extends Record<string, unknown>>(def: EffectDefinition<O>, opts: { override?: boolean } = {}): () => void {\n if (!/^[a-z][a-z0-9-]*$/.test(def.name)) throw new Error(`[motionary] invalid effect name \"${def.name}\"`);\n if (!EFFECT_KINDS.includes(def.kind)) throw new Error(`[motionary] unknown effect kind \"${def.kind}\"`);\n if (registry.has(def.name) && !opts.override) throw new Error(`[motionary] effect \"${def.name}\" is already registered`);\n registry.set(def.name, def as unknown as EffectDefinition);\n return () => {\n if (registry.get(def.name) === (def as unknown)) registry.delete(def.name);\n };\n}\n\n/** Register several effects at once (already-registered names are skipped). */\nexport function registerEffects(defs: EffectDefinition<any>[]): void {\n for (const d of defs) if (!registry.has(d.name)) registerEffect(d);\n}\n\nexport const getEffect = (name: string): EffectDefinition | undefined => registry.get(name);\nexport const hasEffect = (name: string): boolean => registry.has(name);\n/** Registered effects (optionally of one kind), sorted by name. */\nexport function listEffects(kind?: EffectKind): EffectDefinition[] {\n return Array.from(registry.values())\n .filter((d) => !kind || d.kind === kind)\n .sort((a, b) => a.name.localeCompare(b.name));\n}\n\nconst SKIP_BY_DEFAULT: EffectKind[] = ['loop', 'background', 'cursor'];\n\nfunction context(event?: Event): EffectContext & { cleanups: Cleanup[] } {\n const cleanups: Cleanup[] = [];\n return {\n reduced: prefersReducedMotion(),\n sensitivity: getMotionSensitivity(),\n event,\n animate: animateWithMotion,\n onCleanup: (fn) => cleanups.push(fn),\n cleanups,\n };\n}\n\n/**\n * Play a registered effect once on `el`. Resolves when it finishes (or\n * immediately for fire-and-forget effects). Unknown names reject.\n */\nexport async function playEffect(el: HTMLElement, name: string, options: Record<string, unknown> = {}, event?: Event): Promise<void> {\n const def = registry.get(name);\n if (!def) throw new Error(`[motionary] unknown effect \"${name}\" — registered: ${Array.from(registry.keys()).join(', ')}`);\n const ctx = context(event);\n if (ctx.reduced && (def.reduced ?? (SKIP_BY_DEFAULT.includes(def.kind) ? 'skip' : 'run')) === 'skip') return;\n const out = def.run(el, { ...(def.defaults || {}), ...options }, ctx);\n if (out && typeof (out as Animation).finished?.then === 'function') await (out as Animation).finished.catch(() => undefined);\n else if (out && typeof (out as Promise<unknown>).then === 'function') await out;\n}\n\n/**\n * Bind an effect to a trigger on `el`: `click`, `hover` (pointerenter / focus),\n * `enter` (scrolls into view; `once` by default), `load` (now), `loop`\n * (starts now, cleanup stops it) or `manual` (nothing). Returns an unbind.\n */\nexport function bindEffect(el: HTMLElement, name: string, options: Record<string, unknown> & { trigger?: EffectTrigger; once?: boolean } = {}): Cleanup {\n const { trigger = 'click', once, ...opts } = options;\n const def = registry.get(name);\n if (!def) throw new Error(`[motionary] unknown effect \"${name}\"`);\n const offs: Cleanup[] = [];\n let current: Cleanup | null = null;\n const fire = (e?: Event) => {\n const ctx = context(e);\n if (ctx.reduced && (def.reduced ?? (SKIP_BY_DEFAULT.includes(def.kind) ? 'skip' : 'run')) === 'skip') return;\n // A persistent effect (returns a cleanup) replaces its previous run instead of stacking.\n current?.();\n current = null;\n const out = def.run(el, { ...(def.defaults || {}), ...opts }, ctx);\n const stops = [...ctx.cleanups, ...(typeof out === 'function' ? [out as Cleanup] : [])];\n if (stops.length) current = () => stops.splice(0).forEach((f) => f());\n };\n offs.push(() => {\n current?.();\n current = null;\n });\n const on = (type: string, opt?: AddEventListenerOptions) => {\n el.addEventListener(type, fire, opt);\n offs.push(() => el.removeEventListener(type, fire, opt));\n };\n if (trigger === 'click') on('click', { once: !!once });\n else if (trigger === 'hover') (on('pointerenter'), on('focusin'));\n else if (trigger === 'load' || trigger === 'loop') fire();\n else if (trigger === 'enter' && typeof IntersectionObserver !== 'undefined') {\n const io = new IntersectionObserver((entries) => {\n for (const en of entries)\n if (en.isIntersecting) {\n fire();\n if (once !== false) io.disconnect();\n }\n }, { threshold: 0.15 });\n io.observe(el);\n offs.push(() => io.disconnect());\n }\n return () => offs.splice(0).reverse().forEach((f) => f());\n}\n","/** Helpers shared by the 5.x effect packs. */\nimport type { EffectContext } from '../fx/registry';\n\nlet layer: HTMLElement | null = null;\n/** A fixed, pointer-transparent, aria-hidden layer for transient particles. */\nexport function fxLayer(): HTMLElement {\n if (layer?.isConnected) return layer;\n layer = document.createElement('div');\n layer.setAttribute('aria-hidden', 'true');\n layer.setAttribute('data-usa-fx-layer', '');\n layer.style.cssText = 'position:fixed;inset:0;pointer-events:none;overflow:hidden;z-index:2147483000;contain:strict';\n document.body.appendChild(layer);\n return layer;\n}\n\n/** Client point of the triggering pointer event, or the element's center. */\nexport function origin(el: Element, ctx: EffectContext): { x: number; y: number } {\n const e = ctx.event as PointerEvent | MouseEvent | undefined;\n const r = el.getBoundingClientRect();\n return e && typeof e.clientX === 'number' && (e.clientX || e.clientY) ? { x: e.clientX, y: e.clientY } : { x: r.left + r.width / 2, y: r.top + r.height / 2 };\n}\n\n/** Spawn an absolutely positioned node in the fx layer at (x, y); removed when its animation ends. */\nexport function spawn(x: number, y: number, css: string, ctx: EffectContext, frames: Keyframe[], opts: KeyframeAnimationOptions, text = ''): Animation | null {\n const n = document.createElement('span');\n n.style.cssText = `position:absolute;left:${x}px;top:${y}px;${css}`;\n if (text) n.textContent = text;\n fxLayer().appendChild(n);\n const a = ctx.animate(n, frames, { fill: 'forwards', ...opts });\n const rm = () => n.remove();\n if (a) a.finished.then(rm, rm);\n else rm();\n return a;\n}\n\n/** An overlay child covering `el` (makes `el` a positioning context). Returns it and a remover. */\nexport function overlay(el: HTMLElement, css: string): [HTMLElement, () => void] {\n const o = document.createElement('span');\n o.setAttribute('aria-hidden', 'true');\n o.style.cssText = `position:absolute;inset:0;pointer-events:none;border-radius:inherit;${css}`;\n if (getComputedStyle(el).position === 'static') el.style.position = 'relative';\n el.appendChild(o);\n return [o, () => o.remove()];\n}\n\nexport const PALETTE = ['#7c5cff', '#ff5c8a', '#22d3ee', '#facc15', '#34d399'];\nexport const rand = (a: number, b: number): number => a + Math.random() * (b - a);\n\n/** Wait for all animations (ignoring nulls). */\nexport const all = (anims: (Animation | null)[]): Promise<unknown> => Promise.all(anims.filter(Boolean).map((a) => a!.finished.catch(() => undefined)));\n","/**\n * 5.5 — generative backgrounds on Canvas 2D, registered through\n * `registerEffect()` (kind `background`): `flow-field`, `voronoi`,\n * `mesh-gradient`, `starfield`, `metaballs`, `contours`.\n *\n * Shared runner (`canvasBackground()`): a canvas behind the element's content\n * (`aria-hidden`, pointer-transparent), rendering only while visible\n * (IntersectionObserver) and the tab is shown, with adaptive quality — the\n * render scale drops when frames get slow and recovers when they are fast.\n * Reduced motion: one static frame, no loop.\n */\nimport type { EffectContext, EffectDefinition } from '../fx/registry';\nimport { PALETTE } from './shared';\n\nexport interface GenFrame {\n ctx: CanvasRenderingContext2D;\n /** CSS-pixel size of the canvas. */\n w: number;\n h: number;\n /** Seconds since start (0 for the static reduced-motion frame). */\n t: number;\n /** Render scale 0.35–1 (adaptive quality). */\n quality: number;\n /** Per-effect state, created by `init`. */\n state: any;\n /** Merged options. */\n o: any;\n}\n\nexport interface GenerativeSpec {\n init?: (w: number, h: number, o: any) => any;\n draw: (f: GenFrame) => void;\n}\n\n/** Deterministic smooth pseudo-noise in [-1, 1] (sum of sines — cheap, no tables). */\nexport function noise2(x: number, y: number, t = 0): number {\n return (Math.sin(x * 1.7 + t) * Math.cos(y * 1.3 - t * 0.7) + Math.sin((x + y) * 0.9 + t * 0.5) * 0.5 + Math.cos(x * 0.6 - y * 1.1 - t * 0.3) * 0.5) / 2;\n}\n\n/** Hex `#rrggbb` → [r, g, b]. */\nexport function hexRgb(hex: string): [number, number, number] {\n const m = /^#?([\\da-f]{2})([\\da-f]{2})([\\da-f]{2})$/i.exec(hex.trim());\n return m ? [parseInt(m[1], 16), parseInt(m[2], 16), parseInt(m[3], 16)] : [124, 92, 255];\n}\n\n/**\n * Mount a generative canvas behind `el` and run `spec` on it. Returns the\n * cleanup. Exposed for custom generative effects.\n */\nexport function canvasBackground(el: HTMLElement, fx: EffectContext, spec: GenerativeSpec, o: any): () => void {\n const canvas = document.createElement('canvas');\n canvas.setAttribute('aria-hidden', 'true');\n canvas.setAttribute('data-usa-fx-canvas', '');\n canvas.style.cssText = 'position:absolute;inset:0;width:100%;height:100%;pointer-events:none;z-index:-1;border-radius:inherit';\n const restore: [string, string][] = [];\n const set = (k: 'position' | 'isolation', v: string) => {\n restore.push([k, el.style[k]]);\n el.style[k] = v;\n };\n if (getComputedStyle(el).position === 'static') set('position', 'relative');\n set('isolation', 'isolate');\n el.prepend(canvas);\n const ctx = canvas.getContext('2d');\n let raf = 0;\n let visible = true;\n let quality = Math.min(1, Math.max(0.35, Number(o.quality) || 1));\n let w = 0;\n let h = 0;\n let state: any = null;\n const t0 = performance.now();\n let last = t0;\n let slow = 0;\n let fast = 0;\n const resize = () => {\n const r = el.getBoundingClientRect();\n w = Math.max(1, Math.round(r.width));\n h = Math.max(1, Math.round(r.height));\n const dpr = Math.min(2, (typeof devicePixelRatio === 'number' ? devicePixelRatio : 1) || 1) * quality;\n canvas.width = Math.max(1, Math.round(w * dpr));\n canvas.height = Math.max(1, Math.round(h * dpr));\n if (ctx) ctx.setTransform(dpr, 0, 0, dpr, 0, 0);\n state = spec.init ? spec.init(w, h, o) : {};\n };\n const frame = (now: number) => {\n raf = 0;\n if (!ctx) return;\n const dt = now - last;\n last = now;\n // adaptive quality: sustained slow frames lower the render scale, fast ones raise it\n if (dt > 28) slow++;\n else if (dt < 18) fast++;\n if (slow > 20 && quality > 0.35) {\n quality = Math.max(0.35, quality - 0.15);\n slow = fast = 0;\n resize();\n } else if (fast > 240 && quality < 1) {\n quality = Math.min(1, quality + 0.15);\n slow = fast = 0;\n resize();\n }\n spec.draw({ ctx, w, h, t: (now - t0) / 1000, quality, state, o });\n if (visible && !document.hidden) raf = requestAnimationFrame(frame);\n };\n const start = () => {\n if (!raf && ctx && !fx.reduced) {\n last = performance.now();\n raf = requestAnimationFrame(frame);\n }\n };\n resize();\n if (ctx) spec.draw({ ctx, w, h, t: 0, quality, state, o }); // first / static frame\n const io = typeof IntersectionObserver === 'function' ? new IntersectionObserver((es) => {\n visible = es.some((e) => e.isIntersecting);\n if (visible) start();\n }) : null;\n io?.observe(el);\n const ro = typeof ResizeObserver === 'function' ? new ResizeObserver(() => {\n resize();\n if (ctx && fx.reduced) spec.draw({ ctx, w, h, t: 0, quality, state, o });\n }) : null;\n ro?.observe(el);\n const vis = () => !document.hidden && visible && start();\n document.addEventListener('visibilitychange', vis);\n start();\n return () => {\n cancelAnimationFrame(raf);\n raf = 0;\n io?.disconnect();\n ro?.disconnect();\n document.removeEventListener('visibilitychange', vis);\n canvas.remove();\n for (const [k, v] of restore) el.style[k as 'position'] = v;\n };\n}\n\nconst gen = (name: string, description: string, defaults: Record<string, unknown>, spec: GenerativeSpec): EffectDefinition => ({\n name,\n kind: 'background',\n description,\n reduced: 'run',\n defaults: { colors: PALETTE, background: '#0b0d12', speed: 1, quality: 1, ...defaults },\n run: (el, o: any, ctx) => canvasBackground(el, ctx, spec, o),\n});\n\n/** Low-resolution scalar field → ImageData, drawn scaled up (used by voronoi / metaballs / contours). */\nfunction field(f: GenFrame, cell: number, px: (x: number, y: number, out: Uint8ClampedArray, i: number) => void): void {\n const step = Math.max(2, Math.round(cell / f.quality));\n const cw = Math.max(1, Math.ceil(f.w / step));\n const ch = Math.max(1, Math.ceil(f.h / step));\n const st = f.state;\n if (!st.buf || st.buf.width !== cw || st.buf.height !== ch) {\n st.buf = document.createElement('canvas');\n st.buf.width = cw;\n st.buf.height = ch;\n st.bctx = st.buf.getContext('2d');\n st.img = st.bctx?.createImageData(cw, ch);\n }\n if (!st.bctx || !st.img) return;\n const d = st.img.data as Uint8ClampedArray;\n for (let y = 0; y < ch; y++) for (let x = 0; x < cw; x++) px(x * step, y * step, d, (y * cw + x) * 4);\n st.bctx.putImageData(st.img, 0, 0);\n f.ctx.imageSmoothingEnabled = true;\n f.ctx.drawImage(st.buf, 0, 0, f.w, f.h);\n}\n\nexport const GENERATIVE_FX: EffectDefinition[] = [\n gen('flow-field', 'Particles drift along a slowly changing flow field, leaving silky trails.', { count: 600, fade: 0.06 }, {\n init: (w, h, o) => ({ p: Array.from({ length: o.count }, () => [Math.random() * w, Math.random() * h]) }),\n draw: ({ ctx, w, h, t, state, o, quality }) => {\n ctx.fillStyle = o.background;\n ctx.globalAlpha = t === 0 ? 1 : o.fade;\n ctx.fillRect(0, 0, w, h);\n ctx.globalAlpha = 0.8;\n const n = Math.round(state.p.length * quality);\n const steps = t === 0 ? 40 : 1;\n for (let i = 0; i < n; i++) {\n const q = state.p[i];\n ctx.fillStyle = o.colors[i % o.colors.length];\n for (let s = 0; s < steps; s++) {\n const a = noise2(q[0] * 0.004, q[1] * 0.004, t * 0.15 * o.speed) * Math.PI * 2;\n q[0] += Math.cos(a) * 1.2 * o.speed;\n q[1] += Math.sin(a) * 1.2 * o.speed;\n if (q[0] < 0 || q[0] > w || q[1] < 0 || q[1] > h) (q[0] = Math.random() * w), (q[1] = Math.random() * h);\n ctx.fillRect(q[0], q[1], 1.4, 1.4);\n }\n }\n ctx.globalAlpha = 1;\n },\n }),\n gen('voronoi', 'Drifting Voronoi cells in the palette, with darker borders.', { seeds: 14, cell: 6 }, {\n init: (w, h, o) => ({ s: Array.from({ length: o.seeds }, (_, i) => ({ x: Math.random() * w, y: Math.random() * h, vx: Math.random() - 0.5, vy: Math.random() - 0.5, c: hexRgb(o.colors[i % o.colors.length]) })) }),\n draw: (f) => {\n const { w, h, state, o } = f;\n for (const s of state.s) {\n s.x += s.vx * o.speed;\n s.y += s.vy * o.speed;\n if (s.x < 0 || s.x > w) s.vx *= -1;\n if (s.y < 0 || s.y > h) s.vy *= -1;\n }\n field(f, o.cell, (x, y, d, i) => {\n let b = Infinity;\n let b2 = Infinity;\n let c = state.s[0].c;\n for (const s of state.s) {\n const dd = (s.x - x) ** 2 + (s.y - y) ** 2;\n if (dd < b) (b2 = b), (b = dd), (c = s.c);\n else if (dd < b2) b2 = dd;\n }\n const edge = Math.sqrt(b2) - Math.sqrt(b) < 6 ? 0.55 : 1;\n d[i] = c[0] * edge;\n d[i + 1] = c[1] * edge;\n d[i + 2] = c[2] * edge;\n d[i + 3] = 255;\n });\n },\n }),\n gen('mesh-gradient', 'Soft blobs of colour orbit and blend into a living mesh gradient.', { blobs: 4, blur: 0.65 }, {\n draw: ({ ctx, w, h, t, o }) => {\n ctx.fillStyle = o.background;\n ctx.fillRect(0, 0, w, h);\n const r = Math.max(w, h) * o.blur;\n for (let i = 0; i < o.blobs; i++) {\n const a = t * 0.25 * o.speed + (i * Math.PI * 2) / o.blobs;\n const x = w / 2 + Math.cos(a * (1 + i * 0.13)) * w * 0.32;\n const y = h / 2 + Math.sin(a * (0.8 + i * 0.11)) * h * 0.32;\n const [cr, cg, cb] = hexRgb(o.colors[i % o.colors.length]);\n const g = ctx.createRadialGradient(x, y, 0, x, y, r);\n g.addColorStop(0, `rgba(${cr},${cg},${cb},0.7)`);\n g.addColorStop(1, `rgba(${cr},${cg},${cb},0)`);\n ctx.fillStyle = g;\n ctx.fillRect(0, 0, w, h);\n }\n },\n }),\n gen('starfield', 'Stars stream toward the viewer (warp speed with `speed: 4`).', { stars: 400, color: '#ffffff' }, {\n init: (_w, _h, o) => ({ s: Array.from({ length: o.stars }, () => [Math.random() * 2 - 1, Math.random() * 2 - 1, Math.random()]) }),\n draw: ({ ctx, w, h, t, state, o, quality }) => {\n ctx.fillStyle = o.background;\n ctx.fillRect(0, 0, w, h);\n ctx.fillStyle = o.color;\n const n = Math.round(state.s.length * quality);\n for (let i = 0; i < n; i++) {\n const s = state.s[i];\n if (t > 0) s[2] -= 0.004 * o.speed;\n if (s[2] <= 0.01) (s[0] = Math.random() * 2 - 1), (s[1] = Math.random() * 2 - 1), (s[2] = 1);\n const x = w / 2 + (s[0] / s[2]) * w * 0.5;\n const y = h / 2 + (s[1] / s[2]) * h * 0.5;\n if (x < 0 || x > w || y < 0 || y > h) continue;\n const size = (1 - s[2]) * 2.6;\n ctx.globalAlpha = Math.min(1, (1 - s[2]) * 1.6);\n ctx.fillRect(x, y, size, size);\n }\n ctx.globalAlpha = 1;\n },\n }),\n gen('metaballs', 'Gooey blobs that merge and split (low-resolution field, scaled up).', { balls: 6, cell: 5, threshold: 1 }, {\n init: (w, h, o) => ({ b: Array.from({ length: o.balls }, () => ({ x: Math.random() * w, y: Math.random() * h, vx: (Math.random() - 0.5) * 1.6, vy: (Math.random() - 0.5) * 1.6, r: Math.min(w, h) * (0.08 + Math.random() * 0.08) })) }),\n draw: (f) => {\n const { w, h, state, o } = f;\n for (const b of state.b) {\n b.x += b.vx * o.speed;\n b.y += b.vy * o.speed;\n if (b.x < 0 || b.x > w) b.vx *= -1;\n if (b.y < 0 || b.y > h) b.vy *= -1;\n }\n const [ar, ag, ab] = hexRgb(o.colors[0]);\n const [br, bg, bb] = hexRgb(o.colors[1] || o.colors[0]);\n const [kr, kg, kb] = hexRgb(o.background);\n field(f, o.cell, (x, y, d, i) => {\n let v = 0;\n for (const b of state.b) v += (b.r * b.r) / ((b.x - x) ** 2 + (b.y - y) ** 2 + 1);\n const inside = v >= o.threshold;\n const k = Math.min(1, (v - o.threshold) * 0.8);\n d[i] = inside ? ar + (br - ar) * k : kr;\n d[i + 1] = inside ? ag + (bg - ag) * k : kg;\n d[i + 2] = inside ? ab + (bb - ab) * k : kb;\n d[i + 3] = 255;\n });\n },\n }),\n gen('contours', 'Topographic contour lines over a slowly shifting height field.', { levels: 9, cell: 4, color: '#7c5cff' }, {\n draw: (f) => {\n const { t, o } = f;\n const [lr, lg, lb] = hexRgb(o.color);\n const [kr, kg, kb] = hexRgb(o.background);\n const z = (x: number, y: number) => (noise2(x * 0.006, y * 0.006, t * 0.2 * o.speed) + 1) / 2;\n const step = Math.max(2, Math.round(o.cell / f.quality));\n field(f, o.cell, (x, y, d, i) => {\n const a = Math.floor(z(x, y) * o.levels);\n const line = a !== Math.floor(z(x + step, y) * o.levels) || a !== Math.floor(z(x, y + step) * o.levels);\n const shade = 0.12 + (a / o.levels) * 0.18;\n d[i] = line ? lr : kr + (lr - kr) * shade;\n d[i + 1] = line ? lg : kg + (lg - kg) * shade;\n d[i + 2] = line ? lb : kb + (lb - kb) * shade;\n d[i + 3] = 255;\n });\n },\n }),\n];\n","/**\n * 6.2 — tiny WebGL2 full-screen shader runner with a Canvas 2D fallback, shared\n * by the 6.x GPU effect packs. One canvas behind the element (aria-hidden,\n * pointer-transparent), renders only while visible and the tab is shown,\n * adaptive resolution, pointer uniform, and a static first frame under reduced\n * motion. No WebGL2 (or a lost context / compile error) → the Canvas 2D\n * `fallback` spec runs through `canvasBackground()` instead.\n * `el.dataset.usaBackend` tells which one is active: `webgl2` or `canvas`.\n */\nimport type { EffectContext } from '../fx/registry';\nimport { canvasBackground, hexRgb, noise2, type GenerativeSpec } from '../effects/generative';\n\nexport { hexRgb, noise2 };\n\n/** GLSL shared by every shader: uniforms, hash, value noise, fbm. */\nexport const GLSL_HEAD = `#version 300 es\nprecision highp float;\nuniform vec2 u_res;uniform float u_t;uniform vec3 u_c0,u_c1,u_c2;uniform vec2 u_ptr;uniform float u_speed,u_scale;\nout vec4 o;\nfloat h(vec2 p){return fract(sin(dot(p,vec2(127.1,311.7)))*43758.5453);}\nfloat n(vec2 p){vec2 i=floor(p),f=fract(p);f=f*f*(3.-2.*f);return mix(mix(h(i),h(i+vec2(1,0)),f.x),mix(h(i+vec2(0,1)),h(i+1.),f.x),f.y);}\nfloat fbm(vec2 p){float v=0.,a=.5;for(int k=0;k<5;k++){v+=a*n(p);p=p*2.03+vec2(1.7,9.2);a*=.5;}return v;}\n`;\nconst VERT = `#version 300 es\nin vec2 a;void main(){gl_Position=vec4(a,0.,1.);}`;\n\nexport interface ShaderSpec {\n /** GLSL body of `main()`: `uv` (0–1), `p` (aspect-corrected, scaled), `t` (s × speed) are in scope; write `o`. */\n body: string;\n /** Canvas 2D fallback. */\n fallback: GenerativeSpec;\n}\n\n/** `true` when this browser can create a WebGL2 context (cached). */\nlet gl2: boolean | null = null;\nexport function supportsWebGL2(): boolean {\n if (gl2 !== null) return gl2;\n try {\n gl2 = typeof document !== 'undefined' && !!document.createElement('canvas').getContext('webgl2');\n } catch {\n gl2 = false;\n }\n return gl2;\n}\n\nfunction compile(gl: WebGL2RenderingContext, frag: string): WebGLProgram | null {\n const mk = (type: number, src: string) => {\n const s = gl.createShader(type)!;\n gl.shaderSource(s, src);\n gl.compileShader(s);\n return gl.getShaderParameter(s, gl.COMPILE_STATUS) ? s : null;\n };\n const v = mk(gl.VERTEX_SHADER, VERT);\n const f = mk(gl.FRAGMENT_SHADER, frag);\n if (!v || !f) return null;\n const p = gl.createProgram()!;\n gl.attachShader(p, v);\n gl.attachShader(p, f);\n gl.bindAttribLocation(p, 0, 'a');\n gl.linkProgram(p);\n return gl.getProgramParameter(p, gl.LINK_STATUS) ? p : null;\n}\n\nconst rgb = (c: string): [number, number, number] => hexRgb(c).map((v) => v / 255) as [number, number, number];\n\n/**\n * Mount a shader background behind `el` (options: `colors` [3 hex], `speed`,\n * `scale`, `quality`, `backend` = `'auto' | 'webgl2' | 'canvas'`). Returns the cleanup.\n */\nexport function shaderBackground(el: HTMLElement, fx: EffectContext, spec: ShaderSpec, o: any): () => void {\n const fallback = () => {\n el.dataset.usaBackend = 'canvas';\n const stop = canvasBackground(el, fx, spec.fallback, o);\n return () => {\n stop();\n delete el.dataset.usaBackend;\n };\n };\n if (o.backend === 'canvas' || !supportsWebGL2()) return fallback();\n const canvas = document.createElement('canvas');\n const gl = canvas.getContext('webgl2', { alpha: false, antialias: false, preserveDrawingBuffer: false }) as WebGL2RenderingContext | null;\n const prog = gl && compile(gl, `${GLSL_HEAD}void main(){vec2 uv=gl_FragCoord.xy/u_res;vec2 p=uv*vec2(u_res.x/u_res.y,1.)*u_scale;float t=u_t*u_speed;${spec.body}}`);\n if (!gl || !prog) return fallback();\n el.dataset.usaBackend = 'webgl2';\n canvas.setAttribute('aria-hidden', 'true');\n canvas.setAttribute('data-usa-fx-canvas', '');\n canvas.style.cssText = 'position:absolute;inset:0;width:100%;height:100%;pointer-events:none;z-index:-1;border-radius:inherit';\n const restore: [string, string][] = [];\n const set = (k: 'position' | 'isolation', v: string) => {\n restore.push([k, el.style[k]]);\n el.style[k] = v;\n };\n if (getComputedStyle(el).position === 'static') set('position', 'relative');\n set('isolation', 'isolate');\n el.prepend(canvas);\n gl.useProgram(prog);\n const buf = gl.createBuffer();\n gl.bindBuffer(gl.ARRAY_BUFFER, buf);\n gl.bufferData(gl.ARRAY_BUFFER, new Float32Array([-1, -1, 3, -1, -1, 3]), gl.STATIC_DRAW);\n gl.enableVertexAttribArray(0);\n gl.vertexAttribPointer(0, 2, gl.FLOAT, false, 0, 0);\n const U = (n: string) => gl.getUniformLocation(prog, n);\n const cols: string[] = o.colors || [];\n ['u_c0', 'u_c1', 'u_c2'].forEach((u, i) => gl.uniform3fv(U(u), rgb(cols[i] || cols[0] || '#7c5cff')));\n gl.uniform1f(U('u_speed'), Number(o.speed) || 1);\n gl.uniform1f(U('u_scale'), Number(o.scale) || 3);\n const uRes = U('u_res');\n const uT = U('u_t');\n const uPtr = U('u_ptr');\n let ptr: [number, number] = [0.5, 0.5];\n let quality = Math.min(1, Math.max(0.3, Number(o.quality) || 0.75));\n let raf = 0;\n let visible = true;\n let slow = 0;\n let last = 0;\n const t0 = performance.now();\n const resize = () => {\n const r = el.getBoundingClientRect();\n const dpr = Math.min(2, devicePixelRatio || 1) * quality;\n canvas.width = Math.max(1, Math.round(r.width * dpr));\n canvas.height = Math.max(1, Math.round(r.height * dpr));\n gl.viewport(0, 0, canvas.width, canvas.height);\n gl.uniform2f(uRes, canvas.width, canvas.height);\n };\n const draw = (t: number) => {\n gl.uniform1f(uT, t);\n gl.uniform2f(uPtr, ptr[0], ptr[1]);\n gl.drawArrays(gl.TRIANGLES, 0, 3);\n };\n const frame = (now: number) => {\n raf = 0;\n if (last && now - last > 34 && ++slow > 24 && quality > 0.3) {\n quality = Math.max(0.3, quality - 0.15);\n slow = 0;\n resize();\n }\n last = now;\n draw((now - t0) / 1000);\n if (visible && !document.hidden) raf = requestAnimationFrame(frame);\n };\n const start = () => {\n if (!raf && !fx.reduced) raf = requestAnimationFrame(frame);\n };\n resize();\n draw(fx.reduced ? 7 : 0);\n const move = (e: PointerEvent) => {\n const r = el.getBoundingClientRect();\n ptr = [(e.clientX - r.left) / Math.max(1, r.width), 1 - (e.clientY - r.top) / Math.max(1, r.height)];\n };\n el.addEventListener('pointermove', move);\n const io = typeof IntersectionObserver === 'function' ? new IntersectionObserver((es) => (visible = es.some((e) => e.isIntersecting)) && start()) : null;\n io?.observe(el);\n const ro = typeof ResizeObserver === 'function' ? new ResizeObserver(() => (resize(), fx.reduced && draw(7))) : null;\n ro?.observe(el);\n const vis = () => !document.hidden && visible && start();\n document.addEventListener('visibilitychange', vis);\n let swapped: (() => void) | null = null;\n const lost = (e: Event) => {\n e.preventDefault();\n stop();\n swapped = fallback();\n };\n canvas.addEventListener('webglcontextlost', lost);\n const stop = () => {\n cancelAnimationFrame(raf);\n raf = 0;\n io?.disconnect();\n ro?.disconnect();\n el.removeEventListener('pointermove', move);\n document.removeEventListener('visibilitychange', vis);\n canvas.removeEventListener('webglcontextlost', lost);\n canvas.remove();\n for (const [k, v] of restore) el.style[k as 'position'] = v;\n };\n start();\n return () => {\n if (swapped) return swapped();\n stop();\n gl.getExtension('WEBGL_lose_context')?.loseContext();\n delete el.dataset.usaBackend;\n };\n}\n\n/**\n * Canvas 2D fallback for a scalar field: `color(x, y, t)` (x, y in 0–1)\n * returns `[r, g, b]` (0–255), sampled on a coarse grid and scaled up smoothly.\n */\nexport function fieldFallback(color: (x: number, y: number, t: number, o: any) => [number, number, number], cell = 8): GenerativeSpec {\n return {\n init: (w, h) => {\n const c = document.createElement('canvas');\n c.width = Math.max(2, Math.ceil(w / cell));\n c.height = Math.max(2, Math.ceil(h / cell));\n const x = c.getContext('2d');\n return { c, x, img: x?.createImageData(c.width, c.height) };\n },\n draw: ({ ctx, w, h, t, state, o }) => {\n const { c, x, img } = state;\n if (!x || !img) return;\n const d = img.data;\n for (let j = 0; j < c.height; j++)\n for (let i = 0; i < c.width; i++) {\n const [r, g, b] = color(i / c.width, 1 - j / c.height, t * (Number(o.speed) || 1), o);\n const k = (j * c.width + i) * 4;\n d[k] = r;\n d[k + 1] = g;\n d[k + 2] = b;\n d[k + 3] = 255;\n }\n x.putImageData(img, 0, 0);\n ctx.imageSmoothingEnabled = true;\n ctx.drawImage(c, 0, 0, w, h);\n },\n };\n}\n\n/** Linear blend of two `[r,g,b]` colors. */\nexport const mixRgb = (a: number[], b: number[], k: number): [number, number, number] => {\n const q = Math.min(1, Math.max(0, k));\n return [a[0] + (b[0] - a[0]) * q, a[1] + (b[1] - a[1]) * q, a[2] + (b[2] - a[2]) * q];\n};\n/** Smoothstep. */\nexport const sstep = (a: number, b: number, x: number): number => {\n const t = Math.min(1, Math.max(0, (x - a) / (b - a)));\n return t * t * (3 - 2 * t);\n};\n/** fbm-like noise in 0–1 built on `noise2`. */\nexport const fbm2 = (x: number, y: number, t = 0): number => 0.5 + 0.35 * noise2(x, y, t) + 0.15 * noise2(x * 2.1 + 3, y * 2.1 - 1, t * 1.3);\n","/**\n * 6.2 — GPU effect pack (`motionary/components/fx-gpu`), registered through\n * `registerEffect()`:\n *\n * - WebGL2 shaders with a Canvas 2D fallback (kind `background`): `fluid`\n * (domain-warped fluid that swirls around the pointer), `smoke`, `fire`,\n * `ink` (ink blooming in water), `fireflies`.\n * - Canvas 2D particles (kind `background`): `sakura` (falling cherry\n * petals), `leaves` (tumbling autumn leaves).\n * - `splash` (kind `click`): droplets + a ring burst from the pointer.\n *\n * Every background renders only while visible, lowers its resolution when\n * frames are slow, and draws one static frame under reduced motion.\n */\nimport type { EffectContext, EffectDefinition } from '../fx/registry';\nimport { registerEffects } from '../fx/registry';\nimport { canvasBackground, type GenerativeSpec } from '../effects/generative';\nimport { origin, spawn, rand, all } from '../effects/shared';\nimport { shaderBackground, fieldFallback, hexRgb, mixRgb, sstep, fbm2, type ShaderSpec } from './gl';\n\nconst shader = (name: string, description: string, colors: string[], spec: ShaderSpec, extra: Record<string, unknown> = {}): EffectDefinition => ({\n name,\n kind: 'background',\n description,\n reduced: 'run',\n defaults: { colors, speed: 1, scale: 3, quality: 0.75, backend: 'auto', ...extra },\n run: (el: HTMLElement, o: any, ctx: EffectContext) => {\n const stop = shaderBackground(el, ctx, spec, o);\n ctx.onCleanup(stop);\n return stop;\n },\n});\n\nconst C = (o: any) => (o.colors as string[]).map(hexRgb);\n\nexport const GPU_FX: EffectDefinition[] = [\n shader('fluid', 'Domain-warped fluid colors that swirl around the pointer (WebGL2, Canvas 2D fallback).', ['#1b1446', '#7c5cff', '#22d3ee'], {\n body: 'vec2 q=vec2(fbm(p+t*.1),fbm(p+vec2(5.2,1.3)-t*.08));vec2 d=uv-u_ptr;q+=.5*exp(-dot(d,d)*14.)*vec2(sin(t*1.3),cos(t*1.1));float f=fbm(p+3.*q+t*.05);vec3 c=mix(u_c0,u_c1,clamp(f*1.7-.2,0.,1.));c=mix(c,u_c2,clamp(length(q)*1.1-.45,0.,1.));o=vec4(c,1.);',\n fallback: fieldFallback((x, y, t, o) => {\n const [a, b, c] = C(o);\n const q = fbm2(x * 3 + t * 0.1, y * 3);\n const f = fbm2(x * 3 + q * 2, y * 3 + q * 2, t * 0.3);\n return mixRgb(mixRgb(a, b, f * 1.7 - 0.2), c, q * 1.1 - 0.45);\n }),\n }),\n shader('smoke', 'Soft smoke rising and curling (WebGL2, Canvas 2D fallback).', ['#0f172a', '#cbd5e1', '#64748b'], {\n body: 'vec2 s=p;s.y-=t*.25;float f=fbm(s+fbm(s*1.5+t*.1));float a=smoothstep(.38,.92,f)*(1.05-uv.y*.55);o=vec4(mix(u_c0,mix(u_c2,u_c1,f),a),1.);',\n fallback: fieldFallback((x, y, t, o) => {\n const [bg, sm, ac] = C(o);\n const f = fbm2(x * 3, y * 3 - t * 0.25, t * 0.2);\n return mixRgb(bg, mixRgb(ac, sm, f), sstep(0.38, 0.92, f) * (1.05 - y * 0.55));\n }),\n }),\n shader('fire', 'Licking flames from the bottom edge (WebGL2, Canvas 2D fallback).', ['#140404', '#e2401b', '#fbbf24'], {\n body: 'vec2 s=p*vec2(1.,1.4);s.y-=t*.9;float f=fbm(s*1.6+fbm(s*2.+t*.3));float g=f*(1.3-uv.y)*1.7-.3;vec3 c=mix(u_c0,u_c1,smoothstep(0.,.4,g));c=mix(c,u_c2,smoothstep(.35,.72,g));c=mix(c,vec3(1.,.96,.82),smoothstep(.72,1.05,g));o=vec4(c,1.);',\n fallback: fieldFallback((x, y, t, o) => {\n const [a, b, c] = C(o);\n const g = fbm2(x * 4, y * 5 - t * 0.9, t) * (1.3 - y) * 1.7 - 0.3;\n return mixRgb(mixRgb(mixRgb(a, b, sstep(0, 0.4, g)), c, sstep(0.35, 0.72, g)), [255, 245, 210], sstep(0.72, 1.05, g));\n }, 6),\n }),\n shader('ink', 'Ink blooming and drifting in water on a paper background (WebGL2, Canvas 2D fallback).', ['#f6f1e7', '#1e1b4b', '#be185d'], {\n body: 'vec2 q=vec2(fbm(p*.8+t*.04),fbm(p*.8+vec2(3.1,7.7)+t*.05));float f=fbm(p*1.2+2.5*q);float b=smoothstep(.48,.74,f+.12*sin(t*.4));o=vec4(mix(u_c0,mix(u_c1,u_c2,clamp(q.x*1.4-.2,0.,1.)),b),1.);',\n fallback: fieldFallback((x, y, t, o) => {\n const [bg, i1, i2] = C(o);\n const q = fbm2(x * 2 + t * 0.04, y * 2);\n const f = fbm2(x * 3 + q * 2.5, y * 3 + q * 2.5, t * 0.1);\n return mixRgb(bg, mixRgb(i1, i2, q * 1.4 - 0.2), sstep(0.48, 0.74, f));\n }),\n }, { scale: 2.4 }),\n shader('fireflies', 'Glowing fireflies wandering and blinking at dusk (WebGL2, Canvas 2D fallback).', ['#06121f', '#facc15', '#a3e635'], {\n body: 'vec3 c=u_c0*(.55+.45*uv.y);float ar=u_res.x/u_res.y;for(int i=0;i<28;i++){float fi=float(i);vec2 b=vec2(h(vec2(fi,1.)),h(vec2(fi,2.)));vec2 pos=fract(b+.07*vec2(sin(t*.3+fi),cos(t*.23+fi*1.7)));vec2 d=(uv-pos)*vec2(ar,1.);float k=.5+.5*sin(t*(1.+h(vec2(fi,3.))*2.)+fi*2.1);c+=mix(u_c1,u_c2,h(vec2(fi,4.)))*k*.00055/(dot(d,d)+.0003);}o=vec4(min(c,vec3(1.)),1.);',\n fallback: {\n init: (w, h) => ({ f: Array.from({ length: 28 }, () => [Math.random(), Math.random(), Math.random() * 6, Math.random()]) }),\n draw: ({ ctx, w, h, t, state, o }) => {\n ctx.fillStyle = o.colors[0];\n ctx.fillRect(0, 0, w, h);\n for (const [bx, by, ph, hue] of state.f) {\n const x = ((bx + 0.07 * Math.sin(t * 0.3 + ph)) % 1) * w;\n const y = ((by + 0.07 * Math.cos(t * 0.23 + ph)) % 1) * h;\n const k = 0.5 + 0.5 * Math.sin(t * 2 + ph * 3);\n const g = ctx.createRadialGradient(x, y, 0, x, y, 14);\n g.addColorStop(0, hue > 0.5 ? o.colors[1] : o.colors[2]);\n g.addColorStop(1, 'transparent');\n ctx.globalAlpha = 0.25 + k * 0.75;\n ctx.fillStyle = g;\n ctx.fillRect(x - 14, y - 14, 28, 28);\n }\n ctx.globalAlpha = 1;\n },\n },\n }),\n];\n\ninterface Flake {\n x: number;\n y: number;\n r: number;\n a: number;\n va: number;\n vy: number;\n ph: number;\n c: string;\n}\nconst fall = (draw: (ctx: CanvasRenderingContext2D, f: Flake) => void): GenerativeSpec => ({\n init: (w, h, o) => ({ f: Array.from({ length: o.count }, (): Flake => ({ x: Math.random() * w, y: Math.random() * h, r: rand(5, 11) * (o.size || 1), a: rand(0, 6.3), va: rand(-1.5, 1.5), vy: rand(18, 46), ph: rand(0, 6.3), c: o.colors[Math.floor(Math.random() * o.colors.length)] })), last: 0 }),\n draw: ({ ctx, w, h, t, state, o, quality }) => {\n const dt = state.last ? Math.min(0.05, t - state.last) : 0;\n state.last = t;\n ctx.clearRect(0, 0, w, h);\n const n = Math.max(4, Math.round(state.f.length * quality));\n for (let i = 0; i < n; i++) {\n const f: Flake = state.f[i];\n f.y += f.vy * dt * o.speed;\n f.x += (Math.sin(t * 1.2 + f.ph) * 22 + (o.wind || 0)) * dt * o.speed;\n f.a += f.va * dt * o.speed;\n if (f.y > h + 16) (f.y = -16), (f.x = Math.random() * w);\n if (f.x > w + 16) f.x = -16;\n if (f.x < -16) f.x = w + 16;\n ctx.save();\n ctx.translate(f.x, f.y);\n ctx.rotate(f.a);\n ctx.scale(1, 0.55 + 0.45 * Math.abs(Math.cos(t * 1.7 + f.ph)));\n ctx.fillStyle = f.c;\n draw(ctx, f);\n ctx.restore();\n }\n },\n});\nconst particles = (name: string, description: string, defaults: Record<string, unknown>, spec: GenerativeSpec): EffectDefinition => ({\n name,\n kind: 'background',\n description,\n reduced: 'run',\n defaults: { speed: 1, quality: 1, ...defaults },\n run: (el: HTMLElement, o: any, ctx: EffectContext) => {\n const stop = canvasBackground(el, ctx, spec, o);\n ctx.onCleanup(stop);\n return stop;\n },\n});\n\nGPU_FX.push(\n particles('sakura', 'Cherry-blossom petals drifting down, swaying and flipping (Canvas 2D).', { count: 46, colors: ['#ffc8dd', '#ffafcc', '#fde2e4', '#f9a8d4'], wind: 14 }, fall((ctx, f) => {\n ctx.beginPath();\n ctx.moveTo(0, -f.r);\n ctx.bezierCurveTo(f.r, -f.r, f.r * 0.9, f.r * 0.6, 0, f.r);\n ctx.bezierCurveTo(-f.r * 0.9, f.r * 0.6, -f.r, -f.r, 0, -f.r * 0.55);\n ctx.fill();\n })),\n particles('leaves', 'Autumn leaves tumbling down in the wind (Canvas 2D).', { count: 30, size: 1.4, colors: ['#ea580c', '#d97706', '#b45309', '#dc2626', '#ca8a04'], wind: 26 }, fall((ctx, f) => {\n ctx.beginPath();\n ctx.moveTo(0, -f.r);\n ctx.quadraticCurveTo(f.r * 0.9, -f.r * 0.2, 0, f.r);\n ctx.quadraticCurveTo(-f.r * 0.9, -f.r * 0.2, 0, -f.r);\n ctx.fill();\n ctx.strokeStyle = 'rgba(0,0,0,.25)';\n ctx.lineWidth = 1;\n ctx.beginPath();\n ctx.moveTo(0, -f.r * 0.8);\n ctx.lineTo(0, f.r * 1.25);\n ctx.stroke();\n }))\n);\n\nGPU_FX.push({\n name: 'splash',\n kind: 'click',\n description: 'A water splash from the pointer: a ring plus droplets that arc out and fall with gravity.',\n defaults: { color: '#38bdf8', count: 14 },\n run: (el: HTMLElement, o: any, ctx: EffectContext) => {\n const { x, y } = origin(el, ctx);\n if (ctx.reduced) return spawn(x - 12, y - 12, `width:24px;height:24px;border-radius:50%;background:${o.color};opacity:.5`, ctx, [{ opacity: 0.5 }, { opacity: 0 }], { duration: 300 });\n const anims: (Animation | null)[] = [\n spawn(x - 30, y - 30, `width:60px;height:60px;border-radius:50%;border:3px solid ${o.color}`, ctx, [{ transform: 'scale(.2)', opacity: 1 }, { transform: 'scale(1.6)', opacity: 0 }], { duration: 520, easing: 'cubic-bezier(.2,.8,.3,1)' }),\n ];\n for (let i = 0; i < o.count; i++) {\n const ang = -Math.PI / 2 + rand(-1.15, 1.15);\n const v = rand(50, 110);\n const dx = Math.cos(ang) * v;\n const s = rand(4, 9);\n const peak = Math.sin(ang) * v;\n anims.push(spawn(x - s / 2, y - s / 2, `width:${s}px;height:${s * 1.25}px;border-radius:50% 50% 50% 50%/60% 60% 40% 40%;background:${o.color}`, ctx, [\n { transform: 'translate(0,0) scale(1)', opacity: 1 },\n { transform: `translate(${dx * 0.6}px,${peak}px) scale(1)`, opacity: 1, offset: 0.45, easing: 'cubic-bezier(.3,0,.7,1)' },\n { transform: `translate(${dx}px,${peak + 90}px) scale(.6)`, opacity: 0 },\n ], { duration: rand(650, 900), easing: 'cubic-bezier(.15,.6,.4,1)' }));\n }\n return all(anims);\n },\n});\n\n/** Register the 6.2 GPU pack (idempotent). */\nexport function registerGpuEffects(): void {\n registerEffects(GPU_FX);\n}\n","/**\n * The 6.x effect packs, one entry each (`motionary/components/fx-gpu`, …) so\n * their size budgets stay separate. This module (`registerFx2()`) registers\n * them all — used by dist/widgets.umd.js and the showcase.\n */\nimport type { EffectDefinition } from '../fx/registry';\nimport { GPU_FX, registerGpuEffects } from './gpu';\n\nexport { GPU_FX, registerGpuEffects };\nexport { shaderBackground, supportsWebGL2, fieldFallback, GLSL_HEAD } from './gl';\nexport type { ShaderSpec } from './gl';\n\n/** The 6.x effect packs by name. */\nexport const FX2_PACKS: Record<string, EffectDefinition[]> = {\n gpu: GPU_FX,\n};\n\n/** Register every 6.x pack (idempotent). */\nexport function registerFx2(): void {\n registerGpuEffects();\n}\n","// dist/widgets.umd.js: registers every 6.x widget and every 6.x effect pack on load\n// (load after components.umd.js when you also use <usa-fx>). API: window.UsaWidgets.\nimport { defineWidgets } from './index';\nimport { registerFx2 } from '../fx2/index';\n\ndefineWidgets();\nregisterFx2();\nexport * from './index';\nexport * from '../fx2/index';\n"],"names":["config","VESTIBULAR","injected","Set","adoptStyles","id","css","has","document","add","CSSStyleSheet","sheet","replaceSync","adoptedStyleSheets","style","createElement","setAttribute","textContent","head","documentElement","appendChild","baseClass","getBase","Base","HTMLElement","constructor","this","_cleanups","_connected","reduced","matchMedia","matches","connectedCallback","readyState","nextSibling","childNodes","length","go","isConnected","mount","addEventListener","once","push","removeEventListener","disconnectedCallback","teardown","attributeChangedCallback","_name","oldValue","value","changed","splice","reverse","forEach","fn","unmount","str","name","fallback","v","getAttribute","num","n","trim","NaN","Number","isFinite","flag","setFlag","on","removeAttribute","onCleanup","listen","target","type","options","inView","cb","init","IntersectionObserver","io","entries","e","isIntersecting","observe","disconnect","motion","el","keyframes","animate","applyFrame","frames","level","map","f","out","k","Object","test","String","adaptKeyframes","active","maxActive","a","iterations","Infinity","done","end","finished","then","animateWithMotion","emit","detail","dispatchEvent","CustomEvent","bubbles","cancelable","frame","defineElement","tag","make","customElements","BASE_CSS","text","existing","get","ctor","define","clampN","b","Math","min","max","ownChildren","skip","Array","from","children","filter","c","part","cls","attrs","html","className","innerHTML","dropParts","querySelectorAll","remove","uid","nextId","p","CAROUSEL_EFFECTS","defineCarousel","_i","_slides","_track","_timer","_hold","_dots","observedAttributes","index","goTo","effect","includes","dataset","toggleAttribute","old","querySelector","firstElementChild","vp","track","append","s","i","prepend","hasAttribute","tabIndex","prev","next","dots","role","d","round","layout","key","preventDefault","drag","ms","visible","pause","window","setInterval","hidden","clearInterval","x0","dx","closest","pointerId","clientX","clientWidth","w","abs","fx","transform","off","inert","opacity","zIndex","to","t","TAB_INDICATORS","defineTabBar","_tabs","_panels","_ink","selected","select","ind","indicator","list","kids","classList","contains","localName","vertical","arrowIndex","focus","sync","ResizeObserver","ro","place","rect","offsetLeft","offsetWidth","x","width","w0","x1","w1","right","mid","offset","duration","easing","SPRING_PRESETS","default","stiffness","damping","mass","gentle","wobbly","stiff","bouncy","slow","molasses","stepSpring","cfg","dt","nv","cache","Map","springSamples","input","fps","base","pos","o","velocity","precision","resolveSpring","hit","values","size","clear","set","springEasing","points","CSS","supports","linearEasing","step","ceil","join","defineDisclosure","_anims","WeakMap","items","parentElement","open","summary","closedH","offsetHeight","startH","cancel","endH","scrollHeight","sp","height","fill","body","delay","delete","indexOf","toggle","force","openAll","closeAll","defineStories","_items","_bars","_fill","_btn","bars","stopPropagation","play","held","downAt","performance","now","long","r","getBoundingClientRect","left","label","initial","fillEl","onfinish","playState","WIDGETS","WIDGET_TAGS","flatMap","g","keys","defineWidgets","release","group","EFFECT_KINDS","REG_KEY","Symbol","for","registry","_a","globalThis","registerEffect","def","opts","Error","kind","override","layer","spawn","y","ctx","cssText","rm","PALETTE","rand","random","noise2","sin","cos","hexRgb","hex","m","exec","parseInt","canvasBackground","spec","canvas","restore","getComputedStyle","position","getContext","raf","quality","h","state","t0","last","fast","resize","dpr","devicePixelRatio","setTransform","draw","requestAnimationFrame","start","es","some","vis","cancelAnimationFrame","gen","description","defaults","colors","background","speed","run","field","cell","px","cw","ch","st","buf","bctx","img","createImageData","data","putImageData","imageSmoothingEnabled","drawImage","count","fade","fillStyle","globalAlpha","fillRect","steps","q","PI","seeds","_","vx","vy","b2","dd","edge","sqrt","blobs","blur","cr","cg","createRadialGradient","addColorStop","stars","color","_w","_h","balls","threshold","ar","ag","ab","br","bg","bb","kr","kg","kb","inside","levels","lr","lg","lb","z","floor","line","shade","GLSL_HEAD","gl2","supportsWebGL2","shaderBackground","usaBackend","stop","backend","gl","alpha","antialias","preserveDrawingBuffer","prog","frag","mk","src","createShader","shaderSource","compileShader","getShaderParameter","COMPILE_STATUS","VERTEX_SHADER","FRAGMENT_SHADER","createProgram","attachShader","bindAttribLocation","linkProgram","getProgramParameter","LINK_STATUS","compile","useProgram","createBuffer","bindBuffer","ARRAY_BUFFER","bufferData","Float32Array","STATIC_DRAW","enableVertexAttribArray","vertexAttribPointer","FLOAT","U","getUniformLocation","cols","u","uniform3fv","uniform1f","scale","uRes","uT","uPtr","ptr","viewport","uniform2f","drawArrays","TRIANGLES","move","clientY","top","swapped","lost","getExtension","loseContext","fieldFallback","j","mixRgb","sstep","fbm2","shader","extra","C","GPU_FX","sm","ac","i1","i2","bx","by","ph","hue","fall","va","clearRect","wind","save","translate","rotate","particles","registerGpuEffects","defs","registerEffects","beginPath","moveTo","bezierCurveTo","quadraticCurveTo","strokeStyle","lineWidth","lineTo","stroke","event","origin","anims","ang","peak","Promise","all","Boolean","catch","FX2_PACKS","gpu","registerFx2"],"mappings":"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"}
|
package/docs/ROADMAP.md
CHANGED
|
@@ -1,15 +1,14 @@
|
|
|
1
1
|
# 路线图(6.0 之后)
|
|
2
2
|
|
|
3
|
-
> 6.0.0:移除 5.9 弃用的 API(`burst()` / `confetti()` / `shake()`、`<usa-cursor mode="trail">`),所有效果统一通过注册表(`registerEffect()` / `playEffect()` / `<usa-fx>`)提供。以下为 6.x → 7.0 的规划,每个版本一个 PR(6.1 插入“滚动预设 2.0
|
|
3
|
+
> 6.0.0:移除 5.9 弃用的 API(`burst()` / `confetti()` / `shake()`、`<usa-cursor mode="trail">`),所有效果统一通过注册表(`registerEffect()` / `playEffect()` / `<usa-fx>`)提供。以下为 6.x → 7.0 的规划,每个版本一个 PR(6.1 插入“滚动预设 2.0”后顺延;6.2 起每个版本同时新增 3–6 个动画 UI 组件,天气与交互物理合并为 6.8);6.x 新效果包各自独立入口(`motionary/components/fx-*`),新组件在 `motionary/components/widgets`(`components/lite` 维持 70 KB 预算),全部兼容“减少动态效果”。
|
|
4
4
|
|
|
5
5
|
- **v6.1** ✅ — 滚动预设 2.0(Scroll presets 2.0,已发布):新增 181 个滚动入场预设(总计 214 个),独立入口 `motionary/presets/extended`(导入即注册,UMD `dist/presets-extended.umd.js`),核心包体积不变;预设支持中间关键帧 `frames`,新增 `registerPresets()` / `reversePreset()`;动画商店扩展到 227 个条目、14 个预设分类(含随滚动 `scrub-*` 与错峰 `stagger-*`)。
|
|
6
|
-
- **v6.2** — 粒子与流体 2.0
|
|
7
|
-
- **v6.3** — 文字特效 3.0
|
|
8
|
-
- **v6.4** —
|
|
9
|
-
- **v6.5** — 3D
|
|
10
|
-
- **v6.6** — 形变与 SVG 2.0
|
|
11
|
-
- **v6.7** —
|
|
12
|
-
- **v6.8** —
|
|
13
|
-
- **v6.9** —
|
|
14
|
-
- **
|
|
15
|
-
- **v7.0** — 破坏性清理:移除 6.10 弃用的 API,效果包按需拆分入口,WebGPU 渲染后端(WebGL2 回退),迁移指南与自动迁移脚本,npm `latest`。
|
|
6
|
+
- ✅ **v6.2** — 粒子与流体 2.0 + 组件:GPU 流体、烟雾、火焰、墨滴扩散、萤火虫、樱花与落叶、点击水花(WebGL2,自动降级 Canvas 2D);新组件 轮播 / 滑块、动画指示器标签页、手风琴 2.0、快拍浏览器(独立入口 `motionary/components/widgets`)。
|
|
7
|
+
- **v6.3** — 文字特效 3.0 + 组件:液态文字、霓虹书写、文字粒子聚散、故障字、光标拖影、可变字体呼吸、逐字 3D 翻转;新组件 通知 / Toast 堆叠、模态对话框、抽屉 / 底部面板。
|
|
8
|
+
- **v6.4** — 光影与材质 + 组件:动态光源、玻璃折射、金属拉丝、珠光 / 镭射、体积光、指针实时阴影;新组件 进度条 / 进度环、计数器 / 里程表、骨架屏闪光、评分星。
|
|
9
|
+
- **v6.5** — 3D 场景卡片 + 组件:景深层叠卡、可旋转商品展示、立方体画廊、折纸展开、轨道相机叙事;新组件 时间轴、瀑布流(布局动画)、图片对比滑块。
|
|
10
|
+
- **v6.6** — 形变与 SVG 2.0 + 组件:路径补间、液态 blob 按钮、描边绘制、SVG 滤镜转场、图标变形;新组件 Dock 栏(macOS 放大)、形变下划线导航、汉堡 → 关闭图标、提示 / 气泡。
|
|
11
|
+
- **v6.7** — 转场大全 + 组件:涟漪溶解、碎片爆裂、马赛克翻牌、液体擦除、卷页、镜头推拉(View Transitions 优先,MPA 可用);新组件 步骤条 / 向导、分页、分段控件、开关变体。
|
|
12
|
+
- **v6.8** — 天气与氛围 + 交互物理 2.0 + 组件:玻璃雨滴、积雪、安全闪电、雾、极光、昼夜光照;软体、布料、绳索、磁吸、弹球、重力翻转(Verlet);新组件 看板 / 拖拽排序、滑动卡片、下拉刷新。
|
|
13
|
+
- **v6.9** — 7.0 预备 + 组件:动画编辑器 2.0、效果市场清单格式、7.0 弃用警告、`upgrading-7.md` 与 `usa-codemod-7`;新组件 日期选择器、取色器、文件拖放区动画。
|
|
14
|
+
- **v7.0** — 破坏性清理:移除 6.9 弃用的 API,效果包与组件按需拆分入口,WebGPU 渲染后端(WebGL2 回退),npm `latest`。
|
package/docs/components.md
CHANGED
|
@@ -499,6 +499,35 @@ p.play(); p.seek(500); p.rate = 0.5;
|
|
|
499
499
|
```
|
|
500
500
|
`trigger="scroll"` scrubs the animation with the page. Reduced motion: the final state, no effects. Export JSON from the Playground (`<usa-player> JSON` tab).
|
|
501
501
|
|
|
502
|
+
### v6.2 Widgets: carousel, tab bar, accordion 2.0, stories (`components/widgets`) + GPU pack (`components/fx-gpu`)
|
|
503
|
+
|
|
504
|
+
```html
|
|
505
|
+
<usa-carousel effect="cards" loop autoplay="4000" label="Featured">
|
|
506
|
+
<img src="a.jpg" alt="…"><img src="b.jpg" alt="…"><img src="c.jpg" alt="…">
|
|
507
|
+
</usa-carousel>
|
|
508
|
+
|
|
509
|
+
<usa-tab-bar indicator="pill">
|
|
510
|
+
<button>Overview</button><button>Specs</button>
|
|
511
|
+
<div data-panel>…</div><div data-panel>…</div>
|
|
512
|
+
</usa-tab-bar>
|
|
513
|
+
|
|
514
|
+
<usa-disclosure variant="cards">
|
|
515
|
+
<details><summary>Shipping</summary><p>…</p></details>
|
|
516
|
+
</usa-disclosure>
|
|
517
|
+
|
|
518
|
+
<usa-stories duration="5000" loop><img src="1.jpg" alt="…"><img src="2.jpg" alt="…"></usa-stories>
|
|
519
|
+
|
|
520
|
+
<usa-fx effect="fluid" trigger="load" self class="hero"><h1>Hello</h1></usa-fx>
|
|
521
|
+
```
|
|
522
|
+
```js
|
|
523
|
+
import { defineWidgets } from 'motionary/components/widgets';
|
|
524
|
+
import { defineFx } from 'motionary/components/fx';
|
|
525
|
+
import { registerGpuEffects } from 'motionary/components/fx-gpu';
|
|
526
|
+
defineWidgets(); defineFx(); registerGpuEffects();
|
|
527
|
+
document.querySelector('usa-carousel').next();
|
|
528
|
+
```
|
|
529
|
+
No build: `components.umd.js` + `widgets.umd.js`. GPU effects: `fluid` · `smoke` · `fire` · `ink` · `fireflies` (WebGL2 → Canvas 2D) · `sakura` · `leaves` (Canvas 2D) · `splash` (click). Reduced motion: instant switches, no autoplay, one still frame.
|
|
530
|
+
|
|
502
531
|
## Frameworks
|
|
503
532
|
|
|
504
533
|
Custom elements work in every framework. Register once (e.g. in your entry file), then use the tags.
|