motionary 6.7.0 → 6.9.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 +38 -0
- package/bin/usa-codemod-7.mjs +91 -0
- package/dist/chunks/{base-DchG4q_S.js → base-D5MHqeDd.js} +2 -2
- package/dist/chunks/{base-DchG4q_S.js.map → base-D5MHqeDd.js.map} +1 -1
- package/dist/chunks/{core-DVyTlo9Q.js → core-DyJu5r5a.js} +2 -2
- package/dist/chunks/{core-DVyTlo9Q.js.map → core-DyJu5r5a.js.map} +1 -1
- package/dist/chunks/{core-D2vF8kZb.js → core-ZGo4hOEk.js} +2 -2
- package/dist/chunks/{core-D2vF8kZb.js.map → core-ZGo4hOEk.js.map} +1 -1
- package/dist/chunks/{fx-DUMVKSvg.js → fx-DlGRMJ-Z.js} +2 -2
- package/dist/chunks/{fx-DUMVKSvg.js.map → fx-DlGRMJ-Z.js.map} +1 -1
- package/dist/chunks/{gpu-BBRLgEzM.cjs → gpu-C2D4T9Q-.cjs} +9 -2
- package/dist/chunks/gpu-C2D4T9Q-.cjs.map +1 -0
- package/dist/chunks/{gpu-CsP2ZB3x.js → gpu-DPhMkJq6.js} +10 -4
- package/dist/chunks/gpu-DPhMkJq6.js.map +1 -0
- package/dist/chunks/player-DH3TIz-t.js +516 -0
- package/dist/chunks/player-DH3TIz-t.js.map +1 -0
- package/dist/chunks/player-PS6_FzNw.cjs +525 -0
- package/dist/chunks/player-PS6_FzNw.cjs.map +1 -0
- package/dist/chunks/{registry-D23neB4M.js → registry-CTLWeg-J.js} +2 -2
- package/dist/chunks/{registry-D23neB4M.js.map → registry-CTLWeg-J.js.map} +1 -1
- package/dist/chunks/{spring-BhoT09Qb.js → spring-B-9MZOrW.js} +2 -2
- package/dist/chunks/{spring-BhoT09Qb.js.map → spring-B-9MZOrW.js.map} +1 -1
- package/dist/chunks/{variants-C_hv_s23.js → variants-CoZn3k_5.js} +2 -2
- package/dist/chunks/{variants-C_hv_s23.js.map → variants-CoZn3k_5.js.map} +1 -1
- package/dist/components/a11y.js +2 -2
- package/dist/components/angular.js +7 -7
- 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 +13 -522
- package/dist/components/effects.cjs.map +1 -1
- package/dist/components/effects.js +7 -515
- package/dist/components/effects.js.map +1 -1
- package/dist/components/feedback.js +1 -1
- package/dist/components/fx-3d.cjs +8 -2
- package/dist/components/fx-3d.cjs.map +1 -1
- package/dist/components/fx-3d.d.cts +3 -1
- package/dist/components/fx-3d.d.ts +3 -1
- package/dist/components/fx-3d.js +9 -4
- package/dist/components/fx-3d.js.map +1 -1
- package/dist/components/fx-focus.cjs +125 -0
- package/dist/components/fx-focus.cjs.map +1 -0
- package/dist/components/fx-focus.d.cts +65 -0
- package/dist/components/fx-focus.d.ts +65 -0
- package/dist/components/fx-focus.js +122 -0
- package/dist/components/fx-focus.js.map +1 -0
- package/dist/components/fx-gpu.cjs +3 -2
- package/dist/components/fx-gpu.cjs.map +1 -1
- package/dist/components/fx-gpu.d.cts +3 -1
- package/dist/components/fx-gpu.d.ts +3 -1
- package/dist/components/fx-gpu.js +3 -3
- package/dist/components/fx-light.cjs +8 -2
- package/dist/components/fx-light.cjs.map +1 -1
- package/dist/components/fx-light.d.cts +3 -1
- package/dist/components/fx-light.d.ts +3 -1
- package/dist/components/fx-light.js +9 -4
- package/dist/components/fx-light.js.map +1 -1
- package/dist/components/fx-morph.cjs +8 -2
- package/dist/components/fx-morph.cjs.map +1 -1
- package/dist/components/fx-morph.d.cts +3 -1
- package/dist/components/fx-morph.d.ts +3 -1
- package/dist/components/fx-morph.js +9 -4
- package/dist/components/fx-morph.js.map +1 -1
- package/dist/components/fx-physics.cjs +350 -0
- package/dist/components/fx-physics.cjs.map +1 -0
- package/dist/components/fx-physics.d.cts +94 -0
- package/dist/components/fx-physics.d.ts +94 -0
- package/dist/components/fx-physics.js +345 -0
- package/dist/components/fx-physics.js.map +1 -0
- package/dist/components/fx-text.cjs +8 -2
- package/dist/components/fx-text.cjs.map +1 -1
- package/dist/components/fx-text.d.cts +3 -1
- package/dist/components/fx-text.d.ts +3 -1
- package/dist/components/fx-text.js +9 -4
- package/dist/components/fx-text.js.map +1 -1
- package/dist/components/fx-transitions.cjs +8 -2
- package/dist/components/fx-transitions.cjs.map +1 -1
- package/dist/components/fx-transitions.d.cts +3 -1
- package/dist/components/fx-transitions.d.ts +3 -1
- package/dist/components/fx-transitions.js +10 -5
- package/dist/components/fx-transitions.js.map +1 -1
- package/dist/components/fx-weather.cjs +271 -0
- package/dist/components/fx-weather.cjs.map +1 -0
- package/dist/components/fx-weather.d.cts +72 -0
- package/dist/components/fx-weather.d.ts +72 -0
- package/dist/components/fx-weather.js +266 -0
- package/dist/components/fx-weather.js.map +1 -0
- package/dist/components/fx.js +5 -5
- package/dist/components/fx2.cjs +49 -10
- package/dist/components/fx2.cjs.map +1 -1
- package/dist/components/fx2.d.cts +181 -4
- package/dist/components/fx2.d.ts +181 -4
- package/dist/components/fx2.js +42 -22
- package/dist/components/fx2.js.map +1 -1
- package/dist/components/gesture.js +4 -4
- package/dist/components/interaction.cjs +1 -0
- package/dist/components/interaction.cjs.map +1 -1
- package/dist/components/interaction.js +2 -1
- package/dist/components/interaction.js.map +1 -1
- package/dist/components/layout.js +1 -1
- package/dist/components/lite.cjs +2 -0
- package/dist/components/lite.cjs.map +1 -1
- package/dist/components/lite.js +2 -0
- package/dist/components/lite.js.map +1 -1
- package/dist/components/marketplace.cjs +82 -0
- package/dist/components/marketplace.cjs.map +1 -0
- package/dist/components/marketplace.d.cts +108 -0
- package/dist/components/marketplace.d.ts +108 -0
- package/dist/components/marketplace.js +77 -0
- package/dist/components/marketplace.js.map +1 -0
- 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.js +7 -7
- package/dist/components/svelte.js +7 -7
- 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.cjs +1 -0
- package/dist/components/ui.cjs.map +1 -1
- package/dist/components/ui.js +5 -4
- package/dist/components/ui.js.map +1 -1
- package/dist/components/vue.js +7 -7
- package/dist/components/webgl.js +1 -1
- package/dist/components/widgets.cjs +1189 -45
- package/dist/components/widgets.cjs.map +1 -1
- package/dist/components/widgets.d.cts +177 -2
- package/dist/components/widgets.d.ts +177 -2
- package/dist/components/widgets.js +1179 -48
- package/dist/components/widgets.js.map +1 -1
- package/dist/components.js +9 -9
- 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 +1 -1
- package/dist/widgets.umd.js.map +1 -1
- package/docs/ROADMAP.md +2 -2
- package/docs/components.md +55 -0
- package/docs/deprecations.md +4 -0
- package/docs/upgrading-7.md +33 -0
- package/package.json +43 -2
- package/dist/chunks/gpu-BBRLgEzM.cjs.map +0 -1
- package/dist/chunks/gpu-CsP2ZB3x.js.map +0 -1
package/dist/widgets.umd.js.map
CHANGED
|
@@ -1 +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/overlay.ts","../src/components/widgets/toast.ts","../src/components/widgets/menu.ts","../src/components/widgets/meters.ts","../src/components/widgets/skeleton-reveal.ts","../src/components/widgets/star-rating.ts","../src/components/widgets/milestones.ts","../src/components/widgets/masonry-flow.ts","../src/components/widgets/compare.ts","../src/components/widgets/cube-gallery.ts","../src/components/widgets/dock.ts","../src/components/widgets/nav-morph.ts","../src/components/widgets/menu-toggle.ts","../src/components/widgets/tip.ts","../src/components/widgets/stepper.ts","../src/components/widgets/pagination.ts","../src/components/widgets/segmented.ts","../src/components/widgets/switch.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/text3.ts","../src/components/fx2/light.ts","../src/components/fx2/depth3.ts","../src/components/fx2/morph2.ts","../src/components/fx2/transitions2.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","import { defineElement, type UsaElement } from '../base';\nimport { ownChildren, part } from './shared';\nimport css from './overlay.css?raw';\n\n/**\n * `<usa-modal>` and `<usa-sheet>` (6.3) — modal overlays on the native\n * `<dialog>` (top layer, focus trap, Esc, inert page), with animated open\n * and close and a fading, blurred backdrop.\n *\n * - `<usa-modal effect=\"scale | slide-up | flip | origin\">` — `origin`\n * grows the dialog out of the button that opened it.\n * - `<usa-sheet side=\"right | left | bottom | top\">` — a side sheet; a\n * bottom sheet can be dragged down to dismiss (`<div data-handle>` or the\n * built-in grab handle).\n *\n * Attributes: `open` (initial), `label`, `persistent` (backdrop click / Esc\n * don't close). Any element with `data-usa-open=\"<id>\"` opens the overlay\n * with that id; `[data-usa-close]` inside closes it. API: `show(trigger?)`,\n * `close(value?)`, `toggle()`, `opened`. Events: `usa:open`, `usa:close`\n * (`{ value }`). Focus returns to the opener. Reduced motion: no movement,\n * a short fade.\n */\nexport interface UsaOverlayElement extends UsaElement {\n readonly opened: boolean;\n readonly returnValue: string;\n show(trigger?: Element | null): void;\n close(value?: string): Promise<void>;\n toggle(): void;\n}\nexport type UsaModalElement = UsaOverlayElement;\nexport type UsaSheetElement = UsaOverlayElement;\n\nexport const MODAL_EFFECTS = ['scale', 'slide-up', 'flip', 'origin'] as const;\nexport const SHEET_SIDES = ['right', 'left', 'bottom', 'top'] as const;\n\nconst EASE_OUT = 'cubic-bezier(.22,1,.36,1)';\n\n// one delegated listener for [data-usa-open] / [data-usa-toast] triggers anywhere on the page\nlet delegated = false;\nexport function delegateTriggers(): void {\n if (delegated || typeof document === 'undefined') return;\n delegated = true;\n document.addEventListener('click', (e) => {\n const t = (e.target as Element | null)?.closest?.('[data-usa-open]');\n if (!t) return;\n const target = document.getElementById(t.getAttribute('data-usa-open') || '') as (HTMLElement & Partial<UsaOverlayElement>) | null;\n if (target && typeof target.show === 'function') {\n e.preventDefault();\n if (target.opened) void target.close?.();\n else target.show(t);\n }\n });\n}\n\nfunction defineOverlay(tag: string, kind: 'modal' | 'sheet'): CustomElementConstructor | undefined {\n delegateTriggers();\n return defineElement(\n tag,\n (Base) => {\n class UsaOverlay extends Base {\n static get observedAttributes(): string[] {\n return kind === 'modal' ? ['effect'] : ['side'];\n }\n private _dlg: HTMLDialogElement | null = null;\n private _panel: HTMLElement | null = null;\n private _open = false;\n private _ret: Element | null = null;\n private _origin: DOMRect | null = null;\n private _value = '';\n private _closing: Promise<void> | null = null;\n\n get opened(): boolean {\n return this._open;\n }\n get returnValue(): string {\n return this._value;\n }\n\n mount(): void {\n let d = this.querySelector<HTMLDialogElement>(':scope > dialog.usa-ov');\n if (!d) {\n d = part('dialog', `usa-ov usa-${kind}-panel`);\n const body = part('div', 'usa-ov-body');\n body.append(...ownChildren(this));\n d.append(body);\n this.append(d);\n }\n this._dlg = d;\n this._panel = d.querySelector('.usa-ov-body');\n if (kind === 'modal') {\n const ef = this.str('effect', 'scale');\n this.dataset.effect = (MODAL_EFFECTS as readonly string[]).includes(ef) ? ef : 'scale';\n } else {\n const side = this.str('side', 'right');\n this.dataset.side = (SHEET_SIDES as readonly string[]).includes(side) ? side : 'right';\n if (this.dataset.side === 'bottom' && this._panel && !this._panel.querySelector('[data-handle]')) this._panel.prepend(part('div', 'usa-ov-grab', { 'data-handle': '', 'aria-hidden': 'true' }));\n this.drag();\n }\n if (!d.hasAttribute('aria-labelledby')) d.setAttribute('aria-label', this.str('label', kind === 'modal' ? 'Dialog' : 'Panel'));\n this.listen(d, 'cancel', (e: Event) => {\n e.preventDefault();\n if (!this.flag('persistent')) void this.close();\n });\n this.listen(d, 'click', (e: MouseEvent) => {\n const t = e.target as Element;\n const c = t.closest?.('[data-usa-close]');\n if (c) return void this.close(c.getAttribute('data-usa-close') || '');\n if (t === d && !this.flag('persistent')) void this.close(); // the ::backdrop\n });\n if (this.flag('open') && !this._open) this.show();\n }\n\n unmount(): void {\n if (this._open && this._dlg?.open) this._dlg.close?.();\n this._open = false;\n }\n\n private frames(opening: boolean): Keyframe[] {\n const fade: Keyframe[] = [{ opacity: 0 }, { opacity: 1 }];\n if (this.reduced) return opening ? fade : [...fade].reverse();\n let f: Keyframe[];\n if (kind === 'sheet') {\n const s = this.dataset.side;\n const off = s === 'left' ? 'translateX(-100%)' : s === 'bottom' ? 'translateY(100%)' : s === 'top' ? 'translateY(-100%)' : 'translateX(100%)';\n f = [{ transform: off }, { transform: 'none' }];\n } else {\n const e = this.dataset.effect;\n const o = this._origin;\n const r = this._dlg?.getBoundingClientRect();\n if (e === 'origin' && o && r && r.width) {\n const dx = o.left + o.width / 2 - (r.left + r.width / 2);\n const dy = o.top + o.height / 2 - (r.top + r.height / 2);\n f = [{ transform: `translate(${dx}px,${dy}px) scale(${Math.max(0.05, o.width / r.width).toFixed(3)},${Math.max(0.05, o.height / r.height).toFixed(3)})`, opacity: 0, borderRadius: '40px' }, { transform: 'none', opacity: 1 }];\n } else if (e === 'slide-up') f = [{ transform: 'translateY(48px)', opacity: 0 }, { transform: 'none', opacity: 1 }];\n else if (e === 'flip') f = [{ transform: 'perspective(900px) rotateX(-28deg) translateY(30px)', opacity: 0 }, { transform: 'none', opacity: 1 }];\n else f = [{ transform: 'scale(.88)', opacity: 0 }, { transform: 'scale(1.015)', opacity: 1, offset: 0.7 }, { transform: 'none', opacity: 1 }];\n }\n return opening ? f : [f[0], f[f.length - 1]].reverse();\n }\n\n private backdrop(opening: boolean): void {\n if (!this._dlg) return;\n const k: Keyframe[] = [{ opacity: 0 }, { opacity: 1 }];\n try {\n this._dlg.animate?.(opening ? k : k.reverse(), { duration: opening ? 280 : 200, pseudoElement: '::backdrop', fill: 'forwards' } as KeyframeAnimationOptions);\n } catch {\n /* no ::backdrop animation support */\n }\n }\n\n show(trigger?: Element | null): void {\n const d = this._dlg;\n if (!d || this._open) return;\n this._open = true;\n this._ret = trigger || (document.activeElement as Element | null);\n this._origin = trigger ? trigger.getBoundingClientRect() : null;\n if (typeof d.showModal === 'function') {\n try {\n d.showModal();\n } catch {\n d.setAttribute('open', '');\n }\n } else d.setAttribute('open', '');\n this.setAttribute('data-open', '');\n this.backdrop(true);\n this.motion(d, this.frames(true), { duration: this.reduced ? 150 : kind === 'sheet' ? 420 : 460, easing: EASE_OUT });\n const f = d.querySelector<HTMLElement>('[autofocus]') || d.querySelector<HTMLElement>('button,[href],input,select,textarea,[tabindex]:not([tabindex=\"-1\"])');\n f?.focus?.();\n this.emit('open', { trigger: trigger || null });\n }\n\n close(value = ''): Promise<void> {\n const d = this._dlg;\n if (!d || !this._open) return Promise.resolve();\n if (this._closing) return this._closing;\n this._value = value;\n this.backdrop(false);\n const a = this.motion(d, this.frames(false), { duration: this.reduced ? 120 : 260, easing: 'cubic-bezier(.4,0,1,1)', fill: 'forwards' });\n const done = () => {\n this._closing = null;\n this._open = false;\n this.removeAttribute('data-open');\n if (d.open && typeof d.close === 'function') d.close(value);\n else d.removeAttribute('open');\n a?.cancel?.();\n d.style.transform = '';\n (this._ret as HTMLElement | null)?.focus?.();\n this.emit('close', { value });\n };\n this._closing = a ? a.finished.then(done, done) : Promise.resolve().then(done);\n return this._closing;\n }\n\n toggle(): void {\n if (this._open) void this.close();\n else this.show();\n }\n\n // bottom sheet: drag down to dismiss, springs back otherwise\n private drag(): void {\n const p = this._panel;\n const d = this._dlg;\n if (!p || !d || this.dataset.side !== 'bottom') return;\n let y0 = -1;\n let dy = 0;\n let t0 = 0;\n this.listen(p, 'pointerdown', (e: PointerEvent) => {\n if (!(e.target as Element).closest('[data-handle]')) return;\n y0 = e.clientY;\n dy = 0;\n t0 = performance.now();\n (e.target as Element).setPointerCapture?.(e.pointerId);\n });\n this.listen(p, 'pointermove', (e: PointerEvent) => {\n if (y0 < 0) return;\n dy = Math.max(0, e.clientY - y0);\n d.style.transform = `translateY(${dy}px)`;\n });\n const up = () => {\n if (y0 < 0) return;\n y0 = -1;\n const v = dy / Math.max(1, performance.now() - t0);\n if (dy > d.offsetHeight * 0.3 || v > 0.6) void this.close();\n else {\n this.motion(d, [{ transform: `translateY(${dy}px)` }, { transform: 'translateY(-6px)', offset: 0.6 }, { transform: 'none' }], { duration: 380, easing: EASE_OUT });\n d.style.transform = '';\n }\n };\n this.listen(p, 'pointerup', up);\n this.listen(p, 'pointercancel', up);\n }\n }\n return UsaOverlay as unknown as CustomElementConstructor;\n },\n { id: 'overlay', text: css }\n );\n}\n\nexport const defineModal = (tag = 'usa-modal'): CustomElementConstructor | undefined => defineOverlay(tag, 'modal');\nexport const defineSheet = (tag = 'usa-sheet'): CustomElementConstructor | undefined => defineOverlay(tag, 'sheet');\n","import { defineElement, type UsaElement } from '../base';\nimport { part } from './shared';\nimport { delegateTriggers } from './overlay';\nimport css from './toast.css?raw';\n\n/**\n * `<usa-toast-stack>` (6.3) — notifications that pile up into a collapsed\n * stack (newest in front, older ones peeking behind), fan out on hover or\n * focus, auto-dismiss (paused while hovered), and can be swiped away.\n *\n * Attributes: `position` (`bottom-right` · `bottom-left` · `bottom-center` ·\n * `top-right` · `top-left` · `top-center`), `duration` (ms, `0` = sticky),\n * `max` (visible in the stack), `contained` (positioned inside its parent\n * instead of the viewport). API: `show(message | options)` → id,\n * `dismiss(id)`, `clear()`; module helper `stackToast()` uses the first stack on\n * the page (creating one). Any `[data-usa-toast=\"message\"]` element shows a\n * toast on click (`data-usa-toast-type`, `data-usa-target`). Events:\n * `usa:show`, `usa:dismiss` (`{ id, reason }`). Toasts live in a polite live\n * region. Reduced motion: no slide or swipe animation.\n */\nexport interface StackToastOptions {\n message?: string;\n title?: string;\n type?: 'info' | 'success' | 'warning' | 'error';\n /** ms; 0 = stays until dismissed. Defaults to the stack's `duration`. */\n duration?: number;\n /** An action button. */\n action?: { label: string; onClick?: () => void };\n}\nexport interface UsaToastStackElement extends UsaElement {\n show(input: string | StackToastOptions): string;\n dismiss(id: string, reason?: string): void;\n clear(): void;\n readonly count: number;\n}\n\nexport const TOAST_POSITIONS = ['bottom-right', 'bottom-left', 'bottom-center', 'top-right', 'top-left', 'top-center'] as const;\nconst ICONS: Record<string, string> = { info: 'ℹ', success: '✓', warning: '!', error: '✕' };\nlet tid = 0;\n\nexport function defineToastStack(tag = 'usa-toast-stack'): CustomElementConstructor | undefined {\n installToastTriggers();\n return defineElement(\n tag,\n (Base) => {\n class UsaToastStack extends Base {\n static get observedAttributes(): string[] {\n return ['position'];\n }\n private _list: HTMLOListElement | null = null;\n private _timers = new Map<string, { left: number; start: number; h: ReturnType<typeof setTimeout> | 0 }>();\n private _hover = false;\n\n get count(): number {\n return this._list ? this._list.querySelectorAll(':scope > .usa-tstack:not([data-leaving])').length : 0;\n }\n\n mount(): void {\n const pos = this.str('position', 'bottom-right');\n this.dataset.position = (TOAST_POSITIONS as readonly string[]).includes(pos) ? pos : 'bottom-right';\n this.setAttribute('role', 'region');\n if (!this.hasAttribute('aria-label')) this.setAttribute('aria-label', 'Notifications');\n this._list = this.querySelector(':scope > .usa-tstack-list') || part('ol', 'usa-tstack-list', { 'aria-live': 'polite', 'aria-relevant': 'additions' });\n if (!this._list.isConnected) this.append(this._list);\n const expand = (on: boolean) => {\n this._hover = on;\n this.toggleAttribute('data-expanded', on);\n this.layout();\n for (const [id, t] of this._timers) on ? this.pause(id, t) : this.resume(id);\n };\n this.listen(this, 'pointerenter', () => expand(true));\n this.listen(this, 'pointerleave', () => expand(false));\n this.listen(this, 'focusin', () => expand(true));\n this.listen(this, 'focusout', (e: FocusEvent) => !this.contains(e.relatedTarget as Node) && expand(false));\n this.onCleanup(() => this._timers.forEach((t) => t.h && clearTimeout(t.h)));\n }\n\n private pause(_id: string, t: { left: number; start: number; h: ReturnType<typeof setTimeout> | 0 }): void {\n if (!t.h) return;\n clearTimeout(t.h);\n t.h = 0;\n t.left -= Date.now() - t.start;\n }\n private resume(id: string): void {\n const t = this._timers.get(id);\n if (!t || t.h) return;\n t.start = Date.now();\n t.h = setTimeout(() => this.dismiss(id, 'timeout'), Math.max(400, t.left));\n }\n\n show(input: string | StackToastOptions): string {\n const o: StackToastOptions = typeof input === 'string' ? { message: input } : input || {};\n const id = `usa-tstack-${++tid}`;\n const type = o.type && ICONS[o.type] ? o.type : 'info';\n const li = part('li', `usa-tstack usa-tstack-${type}`, { id, role: type === 'error' ? 'alert' : 'status' });\n li.append(part('span', 'usa-tstack-icon', { 'aria-hidden': 'true' }, ICONS[type]));\n const txt = part('div', 'usa-tstack-text');\n if (o.title) txt.append(Object.assign(document.createElement('strong'), { textContent: o.title }));\n if (o.message) txt.append(Object.assign(document.createElement('span'), { textContent: o.message }));\n li.append(txt);\n if (o.action) {\n const b = part('button', 'usa-tstack-action', { type: 'button' });\n b.textContent = o.action.label;\n b.addEventListener('click', () => {\n o.action?.onClick?.();\n this.dismiss(id, 'action');\n });\n li.append(b);\n }\n const x = part('button', 'usa-tstack-close', { type: 'button', 'aria-label': 'Dismiss' }, '×');\n x.addEventListener('click', () => this.dismiss(id, 'close'));\n li.append(x);\n this.swipe(li, id);\n this._list?.prepend(li);\n const top = this.dataset.position?.startsWith('top');\n this.motion(li, this.reduced ? [{ opacity: 0 }, { opacity: 1 }] : [{ opacity: 0, translate: `0 ${top ? -110 : 110}%`, scale: '0.9' }, { opacity: 1, translate: '0 0', scale: '1' }], { duration: this.reduced ? 150 : 420, easing: 'cubic-bezier(.22,1,.36,1)' });\n this.layout();\n const dur = o.duration ?? this.num('duration', 4000);\n if (dur > 0) {\n this._timers.set(id, { left: dur, start: Date.now(), h: 0 });\n if (!this._hover) this.resume(id);\n }\n this.emit('show', { id, ...o });\n return id;\n }\n\n dismiss(id: string, reason = 'api'): void {\n const li = this._list?.querySelector<HTMLElement>(`#${id}`);\n const t = this._timers.get(id);\n if (t?.h) clearTimeout(t.h);\n this._timers.delete(id);\n if (!li || li.hasAttribute('data-leaving')) return;\n li.setAttribute('data-leaving', '');\n const dx = Number(li.dataset.dx || 0);\n const a = this.motion(li, this.reduced ? [{ opacity: 1 }, { opacity: 0 }] : [{ opacity: 1, transform: `translateX(${dx}px)` }, { opacity: 0, transform: `translateX(${dx >= 0 ? 120 : -120}%)` }], { duration: this.reduced ? 120 : 260, easing: 'cubic-bezier(.4,0,1,1)', fill: 'forwards' });\n const rm = () => {\n li.remove();\n this.layout();\n };\n if (a) a.finished.then(rm, rm);\n else rm();\n this.emit('dismiss', { id, reason });\n }\n\n clear(): void {\n this._list?.querySelectorAll<HTMLElement>(':scope > .usa-tstack').forEach((li) => this.dismiss(li.id, 'clear'));\n }\n\n /** Collapsed: newest in front, older ones scaled down peeking behind. Expanded: a list. */\n private layout(): void {\n if (!this._list) return;\n const items = Array.from(this._list.querySelectorAll<HTMLElement>(':scope > .usa-tstack:not([data-leaving])'));\n const max = Math.max(1, this.num('max', 3));\n const dir = this.dataset.position?.startsWith('top') ? 1 : -1;\n let y = 0;\n items.forEach((li, k) => {\n const h = li.offsetHeight || 56;\n const tf = this._hover ? `translateY(${dir * y}px)` : `translateY(${dir * k * 10}px) scale(${(1 - k * 0.05).toFixed(3)})`;\n li.style.transform = tf;\n li.style.zIndex = String(100 - k);\n li.style.opacity = !this._hover && k >= max ? '0' : '';\n li.toggleAttribute('inert', !this._hover && k > 0);\n y += h + 10;\n });\n this._list.style.height = this._hover && items.length ? `${y}px` : '';\n }\n\n private swipe(li: HTMLElement, id: string): void {\n let x0 = NaN;\n li.addEventListener('pointerdown', (e) => {\n if ((e.target as Element).closest('button')) return;\n x0 = e.clientX;\n li.setPointerCapture?.(e.pointerId);\n });\n li.addEventListener('pointermove', (e) => {\n if (Number.isNaN(x0)) return;\n const dx = e.clientX - x0;\n li.dataset.dx = String(dx);\n li.style.translate = `${dx}px 0`;\n li.style.opacity = String(Math.max(0.2, 1 - Math.abs(dx) / 240));\n });\n const up = () => {\n if (Number.isNaN(x0)) return;\n x0 = NaN;\n const dx = Number(li.dataset.dx || 0);\n li.style.translate = '';\n li.style.opacity = '';\n if (Math.abs(dx) > 80) this.dismiss(id, 'swipe');\n else li.dataset.dx = '0';\n };\n li.addEventListener('pointerup', up);\n li.addEventListener('pointercancel', up);\n }\n }\n return UsaToastStack as unknown as CustomElementConstructor;\n },\n { id: 'toast', text: css }\n );\n}\n\n/** Show a toast on the first `<usa-toast-stack>` of the page (one is created when missing). */\nexport function stackToast(input: string | StackToastOptions, stack?: UsaToastStackElement | null): string {\n defineToastStack();\n let s = stack || document.querySelector<UsaToastStackElement>('usa-toast-stack');\n if (!s) {\n s = document.createElement('usa-toast-stack') as UsaToastStackElement;\n document.body.append(s);\n }\n return s.show(input);\n}\n\nlet trig = false;\nfunction installToastTriggers(): void {\n delegateTriggers();\n if (trig || typeof document === 'undefined') return;\n trig = true;\n document.addEventListener('click', (e) => {\n const t = (e.target as Element | null)?.closest?.('[data-usa-toast]');\n if (!t) return;\n const target = t.getAttribute('data-usa-target');\n const s = target ? (document.getElementById(target) as UsaToastStackElement | null) : null;\n stackToast({ message: t.getAttribute('data-usa-toast') || '', title: t.getAttribute('data-usa-toast-title') || undefined, type: (t.getAttribute('data-usa-toast-type') as StackToastOptions['type']) || 'info' }, s);\n });\n}\n","import { defineElement, type UsaElement } from '../base';\nimport { ownChildren, part, nextId } from './shared';\nimport css from './menu.css?raw';\n\n/**\n * `<usa-menu>` (6.3) — a dropdown menu that unfolds from its button: the\n * list scales out of the trigger corner and the items cascade in. The first\n * child is the trigger (or `[data-trigger]`); the other children (`<button>`,\n * `<a>`, `<hr>` separators) become menu items.\n *\n * Attributes: `placement` (`bottom-start` · `bottom-end` · `top-start` ·\n * `top-end`), `effect` (`scale` · `fold` · `slide`). Keyboard: Enter / Space /\n * ArrowDown open, arrows and Home / End move, Esc closes, Tab leaves; outside\n * clicks close. API: `open()`, `close()`, `toggle()`, `opened`. Events:\n * `usa:select` (`{ index, value, item }`), `usa:open`, `usa:close`. Reduced\n * motion: a short fade.\n */\nexport interface UsaMenuElement extends UsaElement {\n readonly opened: boolean;\n open(focus?: 'first' | 'last'): void;\n close(focusTrigger?: boolean): void;\n toggle(): void;\n}\n\nexport const MENU_EFFECTS = ['scale', 'fold', 'slide'] as const;\n\nexport function defineMenu(tag = 'usa-menu'): CustomElementConstructor | undefined {\n return defineElement(\n tag,\n (Base) => {\n class UsaMenu extends Base {\n static get observedAttributes(): string[] {\n return ['placement', 'effect'];\n }\n private _btn: HTMLElement | null = null;\n private _list: HTMLElement | null = null;\n private _items: HTMLElement[] = [];\n private _open = false;\n\n get opened(): boolean {\n return this._open;\n }\n\n mount(): void {\n const kids = ownChildren(this);\n this._btn = kids.find((k) => k.hasAttribute('data-trigger')) || kids[0] || null;\n let list = this.querySelector<HTMLElement>(':scope > .usa-menu-list');\n if (!list) {\n list = part('div', 'usa-menu-list', { role: 'menu' });\n for (const k of kids) if (k !== this._btn) list.append(k);\n this.append(list);\n }\n this._list = list;\n list.id ||= nextId('usa-menu');\n list.hidden = !this._open;\n const pl = this.str('placement', 'bottom-start');\n this.dataset.placement = /^(bottom|top)-(start|end)$/.test(pl) ? pl : 'bottom-start';\n const ef = this.str('effect', 'scale');\n this.dataset.effect = (MENU_EFFECTS as readonly string[]).includes(ef) ? ef : 'scale';\n this._items = Array.from(list.children).filter((c): c is HTMLElement => c instanceof HTMLElement && !c.matches('hr,[role=\"separator\"]'));\n list.querySelectorAll('hr').forEach((h) => h.setAttribute('role', 'separator'));\n this._items.forEach((it, i) => {\n it.setAttribute('role', 'menuitem');\n it.tabIndex = -1;\n if (it.localName === 'button' && !it.hasAttribute('type')) it.setAttribute('type', 'button');\n this.listen(it, 'click', () => {\n this.emit('select', { index: i, value: it.dataset.value || (it.textContent || '').trim(), item: it });\n this.close(true);\n });\n });\n const b = this._btn;\n if (b) {\n b.setAttribute('aria-haspopup', 'menu');\n b.setAttribute('aria-expanded', String(this._open));\n b.setAttribute('aria-controls', list.id);\n if (b.localName === 'button' && !b.hasAttribute('type')) b.setAttribute('type', 'button');\n this.listen(b, 'click', () => this.toggle());\n this.listen(b, 'keydown', (e: KeyboardEvent) => {\n if (e.key === 'ArrowDown' || e.key === 'ArrowUp') {\n e.preventDefault();\n this.open(e.key === 'ArrowUp' ? 'last' : 'first');\n }\n });\n }\n this.listen(list, 'keydown', (e: KeyboardEvent) => {\n const n = this._items.length;\n const i = this._items.indexOf(document.activeElement as HTMLElement);\n let j = -1;\n if (e.key === 'ArrowDown') j = (i + 1) % n;\n else if (e.key === 'ArrowUp') j = (i - 1 + n) % n;\n else if (e.key === 'Home') j = 0;\n else if (e.key === 'End') j = n - 1;\n else if (e.key === 'Escape') {\n e.preventDefault();\n return this.close(true);\n } else if (e.key === 'Tab') return this.close(false);\n if (j >= 0) {\n e.preventDefault();\n this._items[j]?.focus();\n }\n });\n this.listen(document, 'pointerdown', (e: PointerEvent) => {\n if (this._open && !this.contains(e.target as Node)) this.close(false);\n });\n }\n\n open(focus: 'first' | 'last' = 'first'): void {\n const l = this._list;\n if (!l || this._open) return;\n this._open = true;\n l.hidden = false;\n this._btn?.setAttribute('aria-expanded', 'true');\n this.setAttribute('data-open', '');\n const ef = this.dataset.effect;\n if (this.reduced) this.motion(l, [{ opacity: 0 }, { opacity: 1 }], { duration: 120 });\n else {\n const f: Keyframe[] = ef === 'fold' ? [{ transform: 'perspective(600px) rotateX(-70deg)', opacity: 0 }, { transform: 'none', opacity: 1 }] : ef === 'slide' ? [{ transform: 'translateY(-10px)', opacity: 0, clipPath: 'inset(0 0 100% 0 round 12px)' }, { transform: 'none', opacity: 1, clipPath: 'inset(0 0 0 0 round 12px)' }] : [{ transform: 'scale(.6)', opacity: 0 }, { transform: 'scale(1.03)', opacity: 1, offset: 0.7 }, { transform: 'none', opacity: 1 }];\n this.motion(l, f, { duration: 300, easing: 'cubic-bezier(.22,1,.36,1)' });\n this._items.forEach((it, i) => this.motion(it, [{ opacity: 0, transform: 'translateY(-6px)' }, { opacity: 1, transform: 'none' }], { duration: 260, delay: 40 + i * 35, easing: 'cubic-bezier(.22,1,.36,1)', fill: 'backwards' }));\n }\n (focus === 'last' ? this._items[this._items.length - 1] : this._items[0])?.focus();\n this.emit('open');\n }\n\n close(focusTrigger = false): void {\n const l = this._list;\n if (!l || !this._open) return;\n this._open = false;\n this._btn?.setAttribute('aria-expanded', 'false');\n this.removeAttribute('data-open');\n const a = this.motion(l, [{ opacity: 1, transform: 'none' }, { opacity: 0, transform: this.reduced ? 'none' : 'scale(.96)' }], { duration: this.reduced ? 80 : 150, easing: 'ease-in' });\n const hide = () => {\n if (!this._open) l.hidden = true;\n };\n if (a) a.finished.then(hide, hide);\n else hide();\n if (focusTrigger) this._btn?.focus();\n this.emit('close');\n }\n\n toggle(): void {\n if (this._open) this.close(true);\n else this.open();\n }\n }\n return UsaMenu as unknown as CustomElementConstructor;\n },\n { id: 'menu', text: css }\n );\n}\n","import { defineElement, type UsaElement } from '../base';\nimport { clampN, part } from './shared';\nimport css from './meters.css?raw';\n\n/**\n * 6.4 meters: `<usa-progress-ring>` and `<usa-odometer>`.\n *\n * `<usa-progress-ring value=\"64\" max=\"100\">` — a ring, `bar` or `semi`\n * (semicircle gauge) `variant`; the arc eases (with a little overshoot) to\n * each new value while the centre label counts; `gradient=\"#a,#b\"`;\n * no `value` = indeterminate (spinning arc). `role=\"progressbar\"`.\n * Event `usa:complete` when it reaches max.\n *\n * `<usa-odometer value=\"1234\">` — rolling digit wheels: every digit column\n * spins to its new digit (lower digits travel further), columns slide in /\n * out when the length changes; `locale` grouping via Intl.NumberFormat,\n * `decimals`, `prefix` / `suffix`, `duration`. The accessible name is the\n * formatted number.\n *\n * Reduced motion: values switch without animation.\n */\nexport interface UsaProgressRingElement extends UsaElement {\n value: number | null;\n max: number;\n}\nexport interface UsaOdometerElement extends UsaElement {\n value: number;\n readonly text: string;\n}\n\nexport const PROGRESS_VARIANTS = ['ring', 'bar', 'semi'] as const;\nconst NS = 'http://www.w3.org/2000/svg';\n\nexport function defineProgressRing(tag = 'usa-progress-ring'): CustomElementConstructor | undefined {\n return defineElement(\n tag,\n (Base) => {\n class UsaProgressRing extends Base {\n static get observedAttributes(): string[] {\n return ['variant', 'value', 'max', 'gradient'];\n }\n private _shown = 0;\n private _arc: SVGPathElement | SVGCircleElement | HTMLElement | null = null;\n private _label: HTMLElement | null = null;\n private _len = 1;\n private _raf = 0;\n\n get value(): number | null {\n return this.hasAttribute('value') ? this.num('value', 0) : null;\n }\n set value(v: number | null) {\n if (v === null) this.removeAttribute('value');\n else this.setAttribute('value', String(v));\n }\n get max(): number {\n return Math.max(1e-9, this.num('max', 100));\n }\n set max(v: number) {\n this.setAttribute('max', String(v));\n }\n\n changed(name: string): void {\n if (name === 'value' && this._arc) return this.update();\n super.changed(name);\n }\n\n mount(): void {\n const v = this.str('variant', 'ring');\n const variant = (PROGRESS_VARIANTS as readonly string[]).includes(v) ? v : 'ring';\n this.dataset.variant = variant;\n this.setAttribute('role', 'progressbar');\n this.setAttribute('aria-valuemin', '0');\n this.querySelectorAll(':scope > [data-usa-part]').forEach((n) => n.remove());\n const stops = this.str('gradient', '').split(',').map((s) => s.trim()).filter(Boolean);\n const gid = `usa-pr-${Math.random().toString(36).slice(2, 8)}`;\n if (variant === 'bar') {\n const track = part('div', 'usa-pr-track');\n const fill = part('div', 'usa-pr-fill');\n if (stops.length) fill.style.background = `linear-gradient(90deg,${stops.join(',')})`;\n track.append(fill);\n this.append(track);\n this._arc = fill;\n } else {\n const svg = document.createElementNS(NS, 'svg');\n svg.setAttribute('data-usa-part', '');\n svg.setAttribute('aria-hidden', 'true');\n svg.setAttribute('class', 'usa-pr-svg');\n svg.setAttribute('width', '100%');\n svg.setAttribute('height', '100%');\n const semi = variant === 'semi';\n svg.setAttribute('viewBox', semi ? '0 0 100 56' : '0 0 100 100');\n const d = semi ? 'M 8 50 A 42 42 0 0 1 92 50' : 'M 50 8 A 42 42 0 1 1 49.99 8';\n const grad = stops.length ? `<defs><linearGradient id=\"${gid}\" x1=\"0\" y1=\"0\" x2=\"1\" y2=\"1\">${stops.map((c, i) => `<stop offset=\"${stops.length > 1 ? i / (stops.length - 1) : 0}\" stop-color=\"${c}\"/>`).join('')}</linearGradient></defs>` : '';\n svg.innerHTML = `${grad}<path class=\"usa-pr-track\" d=\"${d}\"/><path class=\"usa-pr-arc\" d=\"${d}\"${stops.length ? ` stroke=\"url(#${gid})\"` : ''}/>`;\n this.append(svg);\n this._arc = svg.querySelector('.usa-pr-arc');\n this._len = semi ? Math.PI * 42 : Math.PI * 2 * 42;\n (this._arc as SVGPathElement).style.strokeDasharray = `${this._len}`;\n (this._arc as SVGPathElement).style.strokeDashoffset = `${this._len}`;\n }\n this._label = part('span', 'usa-pr-label', { 'aria-hidden': 'true' });\n if (this.flag('no-label')) this._label.hidden = true;\n this.append(this._label);\n this._shown = 0;\n this.onCleanup(() => {\n if (this._raf && typeof cancelAnimationFrame === 'function') cancelAnimationFrame(this._raf);\n });\n this.update();\n }\n\n private paint(frac: number): void {\n const f = clampN(frac, 0, 1.08);\n if (this._arc instanceof HTMLElement) this._arc.style.transform = `scaleX(${Math.min(1, f)})`;\n else if (this._arc) (this._arc as SVGPathElement).style.strokeDashoffset = `${(this._len * (1 - Math.min(1, f))).toFixed(2)}`;\n }\n\n private update(): void {\n const v = this.value;\n const max = this.max;\n this.setAttribute('aria-valuemax', String(max));\n this.toggleAttribute('data-indeterminate', v === null);\n if (v === null) {\n this.removeAttribute('aria-valuenow');\n if (this._label) this._label.textContent = '';\n this.paint(0.28);\n return;\n }\n const target = clampN(v, 0, max) / max;\n this.setAttribute('aria-valuenow', String(clampN(v, 0, max)));\n const from = this._shown;\n this._shown = target;\n const label = (f: number) => {\n if (this._label) this._label.textContent = `${Math.round(f * 100)}%`;\n };\n if (this._raf && typeof cancelAnimationFrame === 'function') cancelAnimationFrame(this._raf);\n if (this.reduced || typeof requestAnimationFrame !== 'function') {\n this.paint(target);\n label(target);\n } else {\n const t0 = performance.now();\n const dur = this.num('duration', 900);\n const step = (now: number) => {\n const k = Math.min(1, (now - t0) / dur);\n // ease-out-back: a little overshoot, then settle\n const c = 1.4;\n const e = 1 + (c + 1) * Math.pow(k - 1, 3) + c * Math.pow(k - 1, 2);\n const f = from + (target - from) * e;\n this.paint(f);\n label(from + (target - from) * Math.min(1, k * 1.15));\n this._raf = k < 1 ? requestAnimationFrame(step) : 0;\n if (k >= 1) this.paint(target);\n };\n this._raf = requestAnimationFrame(step);\n }\n if (target >= 1 && from < 1) this.emit('complete', { value: v });\n }\n }\n return UsaProgressRing as unknown as CustomElementConstructor;\n },\n { id: 'meters', text: css }\n );\n}\n\nexport function defineOdometer(tag = 'usa-odometer'): CustomElementConstructor | undefined {\n return defineElement(\n tag,\n (Base) => {\n class UsaOdometer extends Base {\n static get observedAttributes(): string[] {\n return ['value', 'locale', 'decimals', 'prefix', 'suffix'];\n }\n private _row: HTMLElement | null = null;\n private _text = '';\n\n get value(): number {\n return this.num('value', 0);\n }\n set value(v: number) {\n this.setAttribute('value', String(v));\n }\n get text(): string {\n return this._text;\n }\n\n changed(name: string): void {\n if (name === 'value' && this._row) return this.render(true);\n super.changed(name);\n }\n\n mount(): void {\n this.querySelectorAll(':scope > [data-usa-part]').forEach((n) => n.remove());\n this._row = part('span', 'usa-odo-row', { 'aria-hidden': 'true' });\n this.append(this._row);\n this.setAttribute('role', 'img');\n this._text = '';\n this.render(false);\n }\n\n private format(): string {\n const d = Math.max(0, Math.min(6, Math.round(this.num('decimals', 0))));\n let s: string;\n try {\n s = new Intl.NumberFormat(this.str('locale', '') || undefined, { minimumFractionDigits: d, maximumFractionDigits: d }).format(this.value);\n } catch {\n s = this.value.toFixed(d);\n }\n return `${this.str('prefix', '')}${s}${this.str('suffix', '')}`;\n }\n\n private column(ch: string): HTMLElement {\n const isDigit = /\\d/.test(ch);\n const col = part('span', isDigit ? 'usa-odo-col' : 'usa-odo-sym');\n if (isDigit) {\n const strip = document.createElement('span');\n strip.className = 'usa-odo-strip';\n strip.textContent = '01234567890123456789'.split('').join('\\n');\n col.append(strip);\n col.dataset.d = ch;\n strip.style.transform = `translateY(${-Number(ch) * 5}%)`;\n } else col.textContent = ch;\n return col;\n }\n\n private render(animate: boolean): void {\n const row = this._row;\n if (!row) return;\n const next = this.format();\n this._text = next;\n this.setAttribute('aria-label', next);\n const anim = animate && !this.reduced;\n const dur = this.num('duration', 1100);\n const chars = next.split('');\n const old = Array.from(row.children) as HTMLElement[];\n const off = chars.length - old.length; // right-aligned: digits keep their place value\n const fresh = new Set<HTMLElement>();\n const cols = chars.map((ch, i) => {\n const o = old[i - off];\n const digit = /\\d/.test(ch);\n if (o && digit && o.dataset.d !== undefined) return o;\n if (o && !digit && o.dataset.d === undefined) {\n o.textContent = ch;\n return o;\n }\n const c = this.column(ch);\n fresh.add(c);\n return c;\n });\n row.replaceChildren(...cols);\n cols.forEach((c, i) => {\n if (fresh.has(c)) {\n if (anim) this.motion(c, [{ opacity: 0, transform: 'translateY(-60%)' }, { opacity: 1, transform: 'none' }], { duration: 420, easing: 'cubic-bezier(.22,1,.36,1)' });\n return;\n }\n if (c.dataset.d === undefined) return;\n const to = Number(chars[i]);\n const from = Number(c.dataset.d);\n c.dataset.d = String(to);\n const strip = c.firstElementChild as HTMLElement;\n strip.style.transform = `translateY(${-to * 5}%)`;\n if (!anim || from === to) return;\n const end = to >= from ? -to * 5 : -(to + 10) * 5; // always roll forward\n const place = cols.length - i;\n this.motion(strip, [{ transform: `translateY(${-from * 5}%)` }, { transform: `translateY(${end}%)` }], { duration: Math.max(400, dur - place * 60), easing: 'cubic-bezier(.2,.9,.25,1.04)' });\n });\n }\n }\n return UsaOdometer as unknown as CustomElementConstructor;\n },\n { id: 'meters', text: css }\n );\n}\n","import { defineElement, type UsaElement } from '../base';\nimport { part } from './shared';\nimport css from './skeleton-reveal.css?raw';\n\n/**\n * `<usa-skeleton-reveal loading>` (6.4) — a skeleton generated from the\n * real content: while `loading`, every text line, image and marked block\n * (`[data-skeleton]`) of the children is measured and covered by a\n * placeholder with one synchronized shimmer (`variant=\"wave | pulse |\n * glow\"`). Remove `loading` (or call `reveal()`) and the placeholders\n * dissolve top-to-bottom while the content fades in from a blur.\n *\n * `aria-busy` follows `loading`. Event `usa:reveal`. Reduced motion: no\n * shimmer, a plain crossfade.\n */\nexport interface UsaSkeletonRevealElement extends UsaElement {\n loading: boolean;\n reveal(): Promise<void>;\n}\n\nexport const SKELETON_VARIANTS = ['wave', 'pulse', 'glow'] as const;\n\nexport function defineSkeletonReveal(tag = 'usa-skeleton-reveal'): CustomElementConstructor | undefined {\n return defineElement(\n tag,\n (Base) => {\n class UsaSkeletonReveal extends Base {\n static get observedAttributes(): string[] {\n return ['loading', 'variant'];\n }\n private _layer: HTMLElement | null = null;\n\n get loading(): boolean {\n return this.flag('loading');\n }\n set loading(v: boolean) {\n this.setFlag('loading', v);\n }\n\n changed(name: string): void {\n if (name === 'loading') {\n if (this.loading) this.build();\n else void this.reveal();\n return;\n }\n super.changed(name);\n }\n\n mount(): void {\n const v = this.str('variant', 'wave');\n this.dataset.variant = (SKELETON_VARIANTS as readonly string[]).includes(v) ? v : 'wave';\n if (this.loading) this.build();\n if (typeof ResizeObserver === 'function') {\n const ro = new ResizeObserver(() => this.loading && this.build());\n ro.observe(this);\n this.onCleanup(() => ro.disconnect());\n }\n this.onCleanup(() => this._layer?.remove());\n }\n\n /** Measure the content and lay placeholders over it. */\n private build(): void {\n this.setAttribute('aria-busy', 'true');\n this.setAttribute('data-loading', '');\n this._layer?.remove();\n const layer = part('div', 'usa-sk-layer', { 'aria-hidden': 'true' });\n const host = this.getBoundingClientRect();\n const boxes: [number, number, number, number, boolean][] = [];\n const add = (r: DOMRect | { left: number; top: number; width: number; height: number }, round = false) => {\n if (r.width < 2 || r.height < 2) return;\n boxes.push([r.left - host.left, r.top - host.top, r.width, r.height, round]);\n };\n const marked = Array.from(this.querySelectorAll<HTMLElement>('[data-skeleton], img, svg, video, canvas, button, input'));\n for (const m of marked) if (!m.closest('.usa-sk-layer')) add(m.getBoundingClientRect(), m.dataset.skeleton === 'circle' || getComputedStyle(m).borderRadius === '50%');\n // text: one bar per rendered line (Range client rects), skipping marked elements\n const walker = document.createTreeWalker(this, NodeFilter.SHOW_TEXT);\n for (let n = walker.nextNode(); n; n = walker.nextNode()) {\n if (!n.textContent?.trim() || (n.parentElement && marked.some((m) => m.contains(n!.parentElement)))) continue;\n const range = document.createRange();\n range.selectNodeContents(n);\n const rects = typeof range.getClientRects === 'function' ? Array.from(range.getClientRects()) : [];\n for (const r of rects) add({ left: r.left, top: r.top + r.height * 0.18, width: r.width, height: r.height * 0.64 });\n }\n for (const [x, y, w, h, round] of boxes) {\n const b = document.createElement('span');\n b.className = 'usa-sk-box';\n b.style.cssText = `left:${x.toFixed(1)}px;top:${y.toFixed(1)}px;width:${w.toFixed(1)}px;height:${h.toFixed(1)}px;${round ? 'border-radius:50%' : ''}`;\n b.style.setProperty('--usa-sk-x', `${(-x).toFixed(1)}px`);\n layer.append(b);\n }\n this.append(layer);\n this._layer = layer;\n }\n\n reveal(): Promise<void> {\n const layer = this._layer;\n this.removeAttribute('aria-busy');\n if (this.hasAttribute('loading')) this.removeAttribute('loading');\n this._layer = null;\n if (!layer) {\n this.removeAttribute('data-loading');\n return Promise.resolve();\n }\n const boxes = Array.from(layer.children) as HTMLElement[];\n const kids = Array.from(this.children).filter((c) => c !== layer) as HTMLElement[];\n this.removeAttribute('data-loading');\n const done: Promise<unknown>[] = [];\n if (this.reduced) {\n const a = this.motion(layer, [{ opacity: 1 }, { opacity: 0 }], { duration: 200, fill: 'forwards' });\n if (a) done.push(a.finished);\n } else {\n const top = Math.min(...boxes.map((b) => parseFloat(b.style.top) || 0), 0);\n for (const b of boxes) {\n const a = this.motion(b, [{ opacity: 1, transform: 'none', filter: 'blur(0)' }, { opacity: 0, transform: 'scale(1.04)', filter: 'blur(6px)' }], { duration: 420, delay: Math.min(500, ((parseFloat(b.style.top) || 0) - top) * 1.2), easing: 'cubic-bezier(.4,0,.2,1)', fill: 'forwards' });\n if (a) done.push(a.finished);\n }\n kids.forEach((k, i) => this.motion(k, [{ opacity: 0, filter: 'blur(8px)', transform: 'translateY(6px)' }, { opacity: 1, filter: 'blur(0)', transform: 'none' }], { duration: 520, delay: 60 + i * 70, easing: 'cubic-bezier(.22,1,.36,1)', fill: 'backwards' }));\n }\n const end = () => {\n layer.remove();\n this.emit('reveal');\n };\n return Promise.all(done).then(end, end);\n }\n }\n return UsaSkeletonReveal as unknown as CustomElementConstructor;\n },\n { id: 'skeleton-reveal', text: css }\n );\n}\n","import { defineElement, type UsaElement } from '../base';\nimport { clampN, part } from './shared';\nimport css from './star-rating.css?raw';\n\n/**\n * `<usa-star-rating value=\"3.5\">` (6.4) — rating stars 2.0: the fill\n * follows the pointer (hover preview, `step=\"0.5\"` half stars), a click\n * pops the chosen star and throws a small sparkle burst, the other stars\n * ripple in sequence. `max`, `step` (`1` · `0.5`), `readonly`, `label`,\n * `icon` (`star` · `heart`). Keyboard: it is a `role=\"slider\"` — arrows,\n * Home / End. Event `usa:change` (`{ value }`). Reduced motion: no pop,\n * burst or ripple.\n */\nexport interface UsaStarRatingElement extends UsaElement {\n value: number;\n}\n\nconst PATHS: Record<string, string> = {\n star: 'M12 2.5l2.9 6.1 6.6.8-4.9 4.6 1.3 6.6L12 17.3l-5.9 3.3 1.3-6.6L2.5 9.4l6.6-.8z',\n heart: 'M12 21s-7.5-4.6-9.6-9.2C.9 8.4 2.9 4.5 6.6 4.5c2.1 0 3.6 1.2 5.4 3.1 1.8-1.9 3.3-3.1 5.4-3.1 3.7 0 5.7 3.9 4.2 7.3C19.5 16.4 12 21 12 21z',\n};\n\nexport function defineStarRating(tag = 'usa-star-rating'): CustomElementConstructor | undefined {\n return defineElement(\n tag,\n (Base) => {\n class UsaStarRating extends Base {\n static get observedAttributes(): string[] {\n return ['max', 'icon', 'readonly', 'step'];\n }\n private _v = 0;\n private _stars: HTMLElement[] = [];\n\n get value(): number {\n return this._v;\n }\n set value(v: number) {\n this.set(v, false);\n }\n\n private get max(): number {\n return Math.max(1, Math.round(this.num('max', 5)));\n }\n private get step(): number {\n return this.num('step', 1) === 0.5 ? 0.5 : 1;\n }\n\n mount(): void {\n this.querySelectorAll(':scope > [data-usa-part]').forEach((n) => n.remove());\n const icon = PATHS[this.str('icon', 'star')] || PATHS.star;\n this._stars = [];\n for (let i = 0; i < this.max; i++) {\n const s = part('span', 'usa-star', { 'aria-hidden': 'true' }, `<svg viewBox=\"0 0 24 24\" width=\"100%\" height=\"100%\"><path class=\"usa-star-bg\" d=\"${icon}\"/></svg><span class=\"usa-star-fg\"><svg viewBox=\"0 0 24 24\" width=\"24\" height=\"24\"><path d=\"${icon}\"/></svg></span>`);\n this._stars.push(s);\n this.append(s);\n }\n const ro = this.flag('readonly');\n this.setAttribute('role', ro ? 'img' : 'slider');\n if (!ro) {\n this.tabIndex = 0;\n this.setAttribute('aria-valuemin', '0');\n this.setAttribute('aria-valuemax', String(this.max));\n }\n if (!this.hasAttribute('aria-label')) this.setAttribute('aria-label', this.str('label', 'Rating'));\n this._v = clampN(this.num('value', 0), 0, this.max);\n this.paint(this._v);\n this.sync();\n if (ro) return;\n const at = (e: PointerEvent) => {\n const r = this._stars[0].getBoundingClientRect();\n const last = this._stars[this._stars.length - 1].getBoundingClientRect();\n const w = last.right - r.left || 1;\n const raw = ((e.clientX - r.left) / w) * this.max;\n return clampN(Math.ceil(raw / this.step) * this.step, this.step, this.max);\n };\n this.listen(this, 'pointermove', (e: PointerEvent) => {\n this.setAttribute('data-preview', '');\n this.paint(at(e));\n });\n this.listen(this, 'pointerleave', () => {\n this.removeAttribute('data-preview');\n this.paint(this._v);\n });\n this.listen(this, 'click', (e: MouseEvent) => this.set(at(e as PointerEvent), true));\n this.listen(this, 'keydown', (e: KeyboardEvent) => {\n const k = e.key;\n let v = this._v;\n if (k === 'ArrowRight' || k === 'ArrowUp') v += this.step;\n else if (k === 'ArrowLeft' || k === 'ArrowDown') v -= this.step;\n else if (k === 'Home') v = 0;\n else if (k === 'End') v = this.max;\n else return;\n e.preventDefault();\n this.set(v, true);\n });\n }\n\n private sync(): void {\n this.setAttribute('aria-valuenow', String(this._v));\n this.setAttribute('aria-valuetext', `${this._v} of ${this.max}`);\n if (this.flag('readonly')) this.setAttribute('aria-label', `${this.str('label', 'Rating')}: ${this._v} of ${this.max}`);\n }\n\n private paint(v: number): void {\n this._stars.forEach((s, i) => s.style.setProperty('--usa-star-fill', `${(clampN(v - i, 0, 1) * 100).toFixed(0)}%`));\n }\n\n private set(v: number, user: boolean): void {\n const nv = clampN(Math.round(v / this.step) * this.step, 0, this.max);\n const changed = nv !== this._v;\n this._v = nv;\n this.paint(nv);\n this.sync();\n if (!user) return;\n const idx = Math.ceil(nv) - 1;\n if (!this.reduced && idx >= 0) {\n const star = this._stars[idx];\n this.motion(star, [{ transform: 'scale(1)' }, { transform: 'scale(1.45) rotate(-12deg)', offset: 0.35 }, { transform: 'scale(.92)', offset: 0.7 }, { transform: 'none' }], { duration: 520, easing: 'cubic-bezier(.3,1.4,.5,1)' });\n this._stars.slice(0, idx).forEach((s, i) => this.motion(s, [{ transform: 'none' }, { transform: 'translateY(-5px)' }, { transform: 'none' }], { duration: 320, delay: i * 45, easing: 'ease-out' }));\n for (let k = 0; k < 8; k++) {\n const sp = part('span', 'usa-star-spark', { 'aria-hidden': 'true' });\n star.append(sp);\n const a = (k / 8) * Math.PI * 2;\n const anim = this.motion(sp, [{ transform: 'translate(-50%,-50%) scale(1)', opacity: 1 }, { transform: `translate(calc(-50% + ${(Math.cos(a) * 22).toFixed(1)}px), calc(-50% + ${(Math.sin(a) * 22).toFixed(1)}px)) scale(.2)`, opacity: 0 }], { duration: 520, easing: 'cubic-bezier(.2,.8,.3,1)', fill: 'forwards' });\n const rm = () => sp.remove();\n if (anim) anim.finished.then(rm, rm);\n else rm();\n }\n }\n if (changed) this.emit('change', { value: nv });\n }\n }\n return UsaStarRating as unknown as CustomElementConstructor;\n },\n { id: 'star-rating', text: css }\n );\n}\n","import { defineElement, type UsaElement } from '../base';\nimport { ownChildren, part } from './shared';\nimport css from './milestones.css?raw';\n\n/**\n * `<usa-milestones>` (6.5) — a scroll-drawn timeline: a progress line grows\n * down the rail as you scroll, and each milestone (a child element, with an\n * optional `data-date`) pops its dot and slides its card in when the line\n * reaches it. Cards alternate sides on wide screens (`layout=\"alternate\"`,\n * default) or sit on one side (`layout=\"left\"`); below 640 px they always\n * stack. Events `usa:reach` (`{ index }`). Reduced motion: everything is\n * shown, the line is full.\n */\nexport interface UsaMilestonesElement extends UsaElement {\n readonly reached: number;\n}\n\nexport function defineMilestones(tag = 'usa-milestones'): CustomElementConstructor | undefined {\n return defineElement(\n tag,\n (Base) => {\n class UsaMilestones extends Base {\n static get observedAttributes(): string[] {\n return ['layout'];\n }\n private _items: HTMLElement[] = [];\n private _fill: HTMLElement | null = null;\n private _reached = -1;\n private _raf = 0;\n\n get reached(): number {\n return this._reached;\n }\n\n mount(): void {\n this.dataset.layout = this.str('layout', 'alternate') === 'left' ? 'left' : 'alternate';\n this.setAttribute('role', this.getAttribute('role') || 'list');\n this.querySelectorAll(':scope > .usa-ms-rail').forEach((n) => n.remove());\n const rail = part('div', 'usa-ms-rail', { 'aria-hidden': 'true' });\n this._fill = part('div', 'usa-ms-fill');\n rail.append(this._fill);\n this.prepend(rail);\n this._items = ownChildren(this, '[data-usa-part],.usa-ms-rail');\n this._items.forEach((it, i) => {\n it.classList.add('usa-ms-item');\n it.setAttribute('role', 'listitem');\n it.dataset.side = this.dataset.layout === 'left' || i % 2 === 0 ? 'right' : 'left';\n if (!it.querySelector(':scope > .usa-ms-dot')) it.prepend(part('span', 'usa-ms-dot', { 'aria-hidden': 'true' }));\n const date = it.dataset.date;\n if (date && !it.querySelector(':scope > .usa-ms-date')) it.querySelector(':scope > .usa-ms-dot')!.after(part('span', 'usa-ms-date', {}, ''));\n const d = it.querySelector<HTMLElement>(':scope > .usa-ms-date');\n if (d && date) d.textContent = date;\n });\n this._reached = -1;\n if (this.reduced) {\n this._fill.style.transform = 'scaleY(1)';\n this._items.forEach((it) => it.setAttribute('data-reached', ''));\n this._reached = this._items.length - 1;\n return;\n }\n const on = () => {\n if (!this._raf) this._raf = typeof requestAnimationFrame === 'function' ? requestAnimationFrame(() => this.update()) : (this.update(), 0);\n };\n this.listen(window, 'scroll', on, { passive: true });\n this.listen(window, 'resize', on);\n this.onCleanup(() => {\n if (this._raf && typeof cancelAnimationFrame === 'function') cancelAnimationFrame(this._raf);\n });\n this.update();\n }\n\n /** Fill the rail up to the viewport's 60 % line and reveal the milestones it passed. */\n update(): void {\n this._raf = 0;\n const r = this.getBoundingClientRect();\n const vh = (typeof window !== 'undefined' && window.innerHeight) || 800;\n const line = vh * 0.6;\n const p = r.height ? Math.min(1, Math.max(0, (line - r.top) / r.height)) : 0;\n if (this._fill) this._fill.style.transform = `scaleY(${p.toFixed(4)})`;\n this._items.forEach((it, i) => {\n if (it.hasAttribute('data-reached')) return;\n const top = it.getBoundingClientRect().top;\n if (top < line || p >= 1) {\n it.setAttribute('data-reached', '');\n const card = Array.from(it.children).filter((c) => !c.matches('.usa-ms-dot,.usa-ms-date')) as HTMLElement[];\n const dot = it.querySelector(':scope > .usa-ms-dot');\n if (dot) this.motion(dot, [{ transform: 'scale(0)' }, { transform: 'scale(1.5)', offset: 0.6 }, { transform: 'scale(1)' }], { duration: 420, easing: 'cubic-bezier(.3,1.4,.5,1)' });\n const dx = it.dataset.side === 'left' ? -28 : 28;\n card.forEach((c, k) => this.motion(c, [{ opacity: 0, transform: `translateX(${dx}px)` }, { opacity: 1, transform: 'none' }], { duration: 520, delay: 80 + k * 60, easing: 'cubic-bezier(.22,1,.36,1)', fill: 'backwards' }));\n if (i > this._reached) this._reached = i;\n this.emit('reach', { index: i });\n }\n });\n }\n }\n return UsaMilestones as unknown as CustomElementConstructor;\n },\n { id: 'milestones', text: css }\n );\n}\n","import { defineElement, type UsaElement } from '../base';\nimport { ownChildren } from './shared';\nimport css from './masonry-flow.css?raw';\n\n/**\n * `<usa-masonry-flow>` (6.5) — a masonry grid whose items glide to their\n * new places (FLIP) whenever the layout changes: resize, items added or\n * removed, `filter()`, `shuffle()`, `sort()`. Columns come from `min`\n * (minimum column width, px) and `gap`. Hidden items scale out, shown ones\n * scale in. Event `usa:layout` (`{ columns }`). Reduced motion: items jump.\n */\nexport interface UsaMasonryFlowElement extends UsaElement {\n readonly columns: number;\n layout(animate?: boolean): void;\n filter(fn: ((el: HTMLElement) => boolean) | string | null): void;\n shuffle(): void;\n sort(compare: (a: HTMLElement, b: HTMLElement) => number): void;\n}\n\nexport function defineMasonryFlow(tag = 'usa-masonry-flow'): CustomElementConstructor | undefined {\n return defineElement(\n tag,\n (Base) => {\n class UsaMasonryFlow extends Base {\n static get observedAttributes(): string[] {\n return ['min', 'gap'];\n }\n private _cols = 1;\n private _pos = new Map<HTMLElement, [number, number]>();\n private _busy = false;\n\n get columns(): number {\n return this._cols;\n }\n\n private items(): HTMLElement[] {\n return ownChildren(this);\n }\n\n mount(): void {\n this.layout(false);\n if (typeof ResizeObserver === 'function') {\n let w = this.clientWidth;\n const ro = new ResizeObserver(() => {\n if (Math.abs(this.clientWidth - w) < 2) return;\n w = this.clientWidth;\n this.layout(true);\n });\n ro.observe(this);\n this.onCleanup(() => ro.disconnect());\n }\n if (typeof MutationObserver === 'function') {\n const mo = new MutationObserver(() => !this._busy && this.layout(true));\n mo.observe(this, { childList: true });\n this.onCleanup(() => mo.disconnect());\n }\n // images change heights when they load\n this.listen(this, 'load', () => this.layout(false), { capture: true } as AddEventListenerOptions);\n }\n\n layout(animate = true): void {\n const gap = Math.max(0, this.num('gap', 12));\n const min = Math.max(60, this.num('min', 160));\n const W = this.clientWidth || 1;\n const cols = Math.max(1, Math.floor((W + gap) / (min + gap)));\n const cw = (W - gap * (cols - 1)) / cols;\n const heights = new Array(cols).fill(0);\n const all = this.items();\n for (const it of all) {\n const hidden = it.hasAttribute('data-hidden');\n it.style.width = `${cw}px`;\n if (hidden) continue;\n const c = heights.indexOf(Math.min(...heights));\n const x = c * (cw + gap);\n const y = heights[c];\n heights[c] += (it.offsetHeight || 0) + gap;\n const old = this._pos.get(it);\n it.style.transform = `translate(${x.toFixed(1)}px,${y.toFixed(1)}px)`;\n if (animate && !this.reduced && old && (old[0] !== x || old[1] !== y)) {\n this.motion(it, [{ transform: `translate(${old[0].toFixed(1)}px,${old[1].toFixed(1)}px)` }, { transform: `translate(${x.toFixed(1)}px,${y.toFixed(1)}px)` }], { duration: 520, easing: 'cubic-bezier(.22,1,.36,1)' });\n } else if (animate && !this.reduced && !old) {\n this.motion(it, [{ opacity: 0, transform: `translate(${x.toFixed(1)}px,${(y + 20).toFixed(1)}px) scale(.9)` }, { opacity: 1, transform: `translate(${x.toFixed(1)}px,${y.toFixed(1)}px)` }], { duration: 420, easing: 'cubic-bezier(.22,1,.36,1)' });\n }\n this._pos.set(it, [x, y]);\n }\n for (const k of Array.from(this._pos.keys())) if (!all.includes(k) || k.hasAttribute('data-hidden')) this._pos.delete(k);\n this.style.height = `${Math.max(0, Math.max(...heights) - gap)}px`;\n const changed = cols !== this._cols;\n this._cols = cols;\n if (changed || animate) this.emit('layout', { columns: cols });\n }\n\n filter(fn: ((el: HTMLElement) => boolean) | string | null): void {\n const test = typeof fn === 'string' ? (el: HTMLElement) => el.matches(fn) : fn || (() => true);\n for (const it of this.items()) {\n const show = test(it);\n const was = !it.hasAttribute('data-hidden');\n if (show === was) continue;\n if (show) it.removeAttribute('data-hidden');\n else if (this.reduced) it.setAttribute('data-hidden', '');\n else {\n const tf = it.style.transform;\n const a = this.motion(it, [{ opacity: 1, transform: tf }, { opacity: 0, transform: `${tf} scale(.6)` }], { duration: 260, easing: 'ease-in' });\n it.setAttribute('data-hidden', '');\n if (a) {\n it.setAttribute('data-leaving', '');\n const rm = () => it.removeAttribute('data-leaving');\n a.finished.then(rm, rm);\n }\n }\n }\n this.layout(true);\n }\n\n private reorder(list: HTMLElement[]): void {\n this._busy = true;\n for (const it of list) this.append(it);\n this._busy = false;\n this.layout(true);\n }\n\n shuffle(): void {\n const list = this.items();\n for (let i = list.length - 1; i > 0; i--) {\n const j = Math.floor(Math.random() * (i + 1));\n [list[i], list[j]] = [list[j], list[i]];\n }\n this.reorder(list);\n }\n\n sort(compare: (a: HTMLElement, b: HTMLElement) => number): void {\n this.reorder(this.items().sort(compare));\n }\n }\n return UsaMasonryFlow as unknown as CustomElementConstructor;\n },\n { id: 'masonry-flow', text: css }\n );\n}\n","import { defineElement, type UsaElement } from '../base';\nimport { clampN, ownChildren, part } from './shared';\nimport css from './compare.css?raw';\n\n/**\n * `<usa-compare>` (6.5) — before / after image compare slider. The first\n * child is \"before\", the second \"after\" (images, videos or any element).\n * Drag the handle (or anywhere with `hover`), click to jump, or use the\n * keyboard (it is a `role=\"slider\"`: arrows, Page Up / Down, Home / End).\n * `position` (0–100, default 50), `orientation=\"horizontal | vertical\"`,\n * `intro` plays a short sweep when it scrolls into view, `labels=\"Before,\n * After\"`. Event `usa:change` (`{ position }`). Reduced motion: no intro\n * sweep or eased jumps.\n */\nexport interface UsaCompareElement extends UsaElement {\n position: number;\n}\n\nexport function defineCompare(tag = 'usa-compare'): CustomElementConstructor | undefined {\n return defineElement(\n tag,\n (Base) => {\n class UsaCompare extends Base {\n static get observedAttributes(): string[] {\n return ['orientation', 'labels'];\n }\n private _p = 50;\n private _after: HTMLElement | null = null;\n private _handle: HTMLElement | null = null;\n\n get position(): number {\n return this._p;\n }\n set position(v: number) {\n this.set(v, false);\n }\n\n private get vertical(): boolean {\n return this.str('orientation', 'horizontal') === 'vertical';\n }\n\n mount(): void {\n this.querySelectorAll(':scope > [data-usa-part]').forEach((n) => n.remove());\n const [before, after] = ownChildren(this);\n this.dataset.orientation = this.vertical ? 'vertical' : 'horizontal';\n before?.classList.add('usa-cmp-before');\n after?.classList.add('usa-cmp-after');\n this._after = after || null;\n const [lb, la] = this.str('labels', '').split(',').map((s) => s.trim());\n if (lb) this.append(Object.assign(part('span', 'usa-cmp-label usa-cmp-label-b', { 'aria-hidden': 'true' }), { textContent: lb }));\n if (la) this.append(Object.assign(part('span', 'usa-cmp-label usa-cmp-label-a', { 'aria-hidden': 'true' }), { textContent: la }));\n const h = part('span', 'usa-cmp-handle', { 'aria-hidden': 'true' }, '<span class=\"usa-cmp-knob\"><svg viewBox=\"0 0 24 24\" width=\"18\" height=\"18\"><path d=\"M9 6l-6 6 6 6M15 6l6 6-6 6\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/></svg></span>');\n this.append(h);\n this._handle = h;\n this.setAttribute('role', 'slider');\n this.tabIndex = 0;\n this.setAttribute('aria-valuemin', '0');\n this.setAttribute('aria-valuemax', '100');\n this.setAttribute('aria-orientation', this.vertical ? 'vertical' : 'horizontal');\n if (!this.hasAttribute('aria-label')) this.setAttribute('aria-label', this.str('label', 'Compare before and after'));\n this.set(this.num('position', 50), false);\n let drag = false;\n const at = (e: PointerEvent) => {\n const r = this.getBoundingClientRect();\n return this.vertical ? ((e.clientY - r.top) / (r.height || 1)) * 100 : ((e.clientX - r.left) / (r.width || 1)) * 100;\n };\n this.listen(this, 'pointerdown', (e: PointerEvent) => {\n drag = true;\n this.setPointerCapture?.(e.pointerId);\n this.set(at(e), true, !(e.target as Element).closest('.usa-cmp-handle'));\n });\n this.listen(this, 'pointermove', (e: PointerEvent) => {\n if (drag || this.flag('hover')) this.set(at(e), true);\n });\n const up = () => (drag = false);\n this.listen(this, 'pointerup', up);\n this.listen(this, 'pointercancel', up);\n this.listen(this, 'keydown', (e: KeyboardEvent) => {\n const map: Record<string, number> = { ArrowLeft: -2, ArrowDown: -2, ArrowRight: 2, ArrowUp: 2, PageDown: -10, PageUp: 10 };\n if (this.vertical) Object.assign(map, { ArrowDown: 2, ArrowUp: -2 });\n if (e.key === 'Home') this.set(0, true);\n else if (e.key === 'End') this.set(100, true);\n else if (e.key in map) this.set(this._p + map[e.key], true);\n else return;\n e.preventDefault();\n });\n if (this.flag('intro') && !this.reduced) {\n let played = false;\n this.inView((v) => {\n if (!v || played) return;\n played = true;\n const end = this._p;\n const t0 = performance.now();\n const step = (now: number) => {\n const k = Math.min(1, (now - t0) / 1400);\n this.paint(end + Math.sin(k * Math.PI * 2) * 22 * (1 - k));\n if (k < 1 && typeof requestAnimationFrame === 'function') requestAnimationFrame(step);\n else this.paint(end);\n };\n if (typeof requestAnimationFrame === 'function') requestAnimationFrame(step);\n }, { threshold: 0.5 });\n }\n }\n\n private paint(p: number): void {\n const v = clampN(p, 0, 100);\n if (this._after) this._after.style.clipPath = this.vertical ? `inset(${v}% 0 0 0)` : `inset(0 0 0 ${v}%)`;\n if (this._handle) this._handle.style[this.vertical ? 'top' : 'left'] = `${v}%`;\n this.style.setProperty('--usa-cmp', `${v}%`);\n }\n\n private set(p: number, user: boolean, ease = false): void {\n const v = Math.round(clampN(p, 0, 100) * 10) / 10;\n const from = this._p;\n this._p = v;\n this.setAttribute('aria-valuenow', String(Math.round(v)));\n this.setAttribute('aria-valuetext', `${Math.round(v)}%`);\n if (ease && !this.reduced && this._after && this._handle) {\n const prop = this.vertical ? 'top' : 'left';\n const clip = (x: number) => (this.vertical ? `inset(${x}% 0 0 0)` : `inset(0 0 0 ${x}%)`);\n this.motion(this._after, [{ clipPath: clip(from) }, { clipPath: clip(v) }], { duration: 320, easing: 'cubic-bezier(.22,1,.36,1)' });\n this.motion(this._handle, [{ [prop]: `${from}%` }, { [prop]: `${v}%` }], { duration: 320, easing: 'cubic-bezier(.22,1,.36,1)' });\n }\n this.paint(v);\n if (user && from !== v) this.emit('change', { position: v });\n }\n }\n return UsaCompare as unknown as CustomElementConstructor;\n },\n { id: 'compare', text: css }\n );\n}\n","import { defineElement, type UsaElement } from '../base';\nimport { ownChildren, part } from './shared';\nimport css from './cube-gallery.css?raw';\n\n/**\n * `<usa-cube-gallery>` (6.5) — a gallery on a turning 3D cube: the current\n * slide and the next one sit on adjacent faces and the cube rotates between\n * them. Swipe / drag, arrow keys, prev / next buttons, `autoplay` (ms;\n * pauses on hover, focus and off screen), `axis=\"y | x\"`. API `next()`,\n * `prev()`, `goTo(i)`, `index`; event `usa:change`. Reduced motion: slides\n * switch with a fade.\n */\nexport interface UsaCubeGalleryElement extends UsaElement {\n readonly index: number;\n next(): void;\n prev(): void;\n goTo(i: number): void;\n}\n\nexport function defineCubeGallery(tag = 'usa-cube-gallery'): CustomElementConstructor | undefined {\n return defineElement(\n tag,\n (Base) => {\n class UsaCubeGallery extends Base {\n static get observedAttributes(): string[] {\n return ['axis', 'autoplay'];\n }\n private _slides: HTMLElement[] = [];\n private _i = 0;\n private _stage: HTMLElement | null = null;\n private _busy = false;\n private _timer: ReturnType<typeof setInterval> | 0 = 0;\n\n get index(): number {\n return this._i;\n }\n\n mount(): void {\n this.querySelectorAll(':scope > [data-usa-part]').forEach((n) => n.remove());\n this._slides = ownChildren(this);\n this.dataset.axis = this.str('axis', 'y') === 'x' ? 'x' : 'y';\n this.setAttribute('role', 'region');\n this.setAttribute('aria-roledescription', 'carousel');\n if (!this.hasAttribute('aria-label')) this.setAttribute('aria-label', this.str('label', 'Gallery'));\n this.tabIndex = 0;\n const stage = part('div', 'usa-cube-stage');\n this._slides.forEach((s, i) => {\n s.classList.add('usa-cube-face');\n s.setAttribute('role', 'group');\n s.setAttribute('aria-roledescription', 'slide');\n s.setAttribute('aria-label', `${i + 1} of ${this._slides.length}`);\n stage.append(s);\n });\n this.append(stage);\n this._stage = stage;\n const prev = part('button', 'usa-cube-btn usa-cube-prev', { type: 'button', 'aria-label': 'Previous slide' }, '‹');\n const next = part('button', 'usa-cube-btn usa-cube-next', { type: 'button', 'aria-label': 'Next slide' }, '›');\n this.append(prev, next);\n this.listen(prev, 'click', () => this.prev());\n this.listen(next, 'click', () => this.next());\n this.listen(this, 'keydown', (e: KeyboardEvent) => {\n if (e.target !== this) return;\n if (e.key === 'ArrowRight' || e.key === 'ArrowDown') this.next();\n else if (e.key === 'ArrowLeft' || e.key === 'ArrowUp') this.prev();\n else return;\n e.preventDefault();\n });\n let x0 = NaN;\n this.listen(stage, 'pointerdown', (e: PointerEvent) => (x0 = this.dataset.axis === 'x' ? e.clientY : e.clientX));\n this.listen(stage, 'pointerup', (e: PointerEvent) => {\n if (Number.isNaN(x0)) return;\n const d = (this.dataset.axis === 'x' ? e.clientY : e.clientX) - x0;\n x0 = NaN;\n if (Math.abs(d) > 40) (d < 0 ? this.next() : this.prev());\n });\n this._i = Math.min(this._i, Math.max(0, this._slides.length - 1));\n this.show();\n const ms = this.num('autoplay', 0);\n if (ms > 0 && !this.reduced) {\n let hold = false;\n let vis = true;\n const pause = (v: boolean) => (hold = v);\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.inView((v) => (vis = v));\n this._timer = setInterval(() => !hold && vis && this.next(), Math.max(1200, ms));\n this.onCleanup(() => this._timer && clearInterval(this._timer));\n }\n }\n\n private show(): void {\n this._slides.forEach((s, k) => {\n const on = k === this._i;\n s.toggleAttribute('data-active', on);\n s.inert = !on;\n s.style.transform = '';\n });\n }\n\n goTo(i: number): void {\n const n = this._slides.length;\n if (!n || this._busy) return;\n const to = ((i % n) + n) % n;\n if (to === this._i) return;\n const from = this._i;\n const dir = (to > from && !(from === 0 && to === n - 1)) || (from === n - 1 && to === 0) ? 1 : -1;\n const a = this._slides[from];\n const b = this._slides[to];\n this._i = to;\n this.emit('change', { index: to, from });\n if (this.reduced || !this._stage) {\n this.show();\n this.motion(b, [{ opacity: 0 }, { opacity: 1 }], { duration: 200 });\n return;\n }\n // b waits on the adjacent face; the stage turns by 90°\n const ax = this.dataset.axis === 'x' ? 'X' : 'Y';\n const half = `${(((ax === 'Y' ? this.offsetWidth : this.offsetHeight) || 280) / 2).toFixed(1)}px`;\n const faceB = ax === 'Y' ? `rotateY(${dir * 90}deg) translateZ(${half})` : `rotateX(${-dir * 90}deg) translateZ(${half})`;\n b.setAttribute('data-active', '');\n b.style.transform = faceB;\n a.style.transform = `translateZ(${half})`;\n this._busy = true;\n const turn = ax === 'Y' ? `rotateY(${-dir * 90}deg)` : `rotateX(${dir * 90}deg)`;\n const anim = this.motion(this._stage, [{ transform: `translateZ(-${half}) rotate${ax}(0deg)` }, { transform: `translateZ(-${half}) ${turn}` }], { duration: 780, easing: 'cubic-bezier(.65,.05,.3,1)' });\n const end = () => {\n this._busy = false;\n this.show();\n };\n if (anim) anim.finished.then(end, end);\n else end();\n }\n\n next(): void {\n this.goTo(this._i + 1);\n }\n prev(): void {\n this.goTo(this._i - 1);\n }\n }\n return UsaCubeGallery as unknown as CustomElementConstructor;\n },\n { id: 'cube-gallery', text: css }\n );\n}\n","import { defineElement, type UsaElement } from '../base';\nimport { ownChildren } from './shared';\nimport css from './dock.css?raw';\n\n/**\n * `<usa-dock>` (6.6) — a macOS-style dock: items magnify with a smooth\n * cosine falloff as the pointer moves along it, neighbours make room, and a\n * click bounces the item (`bounce`). Children are the items (`<a>` /\n * `<button>`, each with an accessible name); `data-label` shows a tooltip\n * label above the hovered item. Attributes: `magnify` (max scale, 1.9),\n * `range` (px of influence, 140), `orientation=\"horizontal | vertical\"`.\n * Keyboard focus magnifies the focused item. Reduced motion: no\n * magnification or bounce (labels still show).\n */\nexport interface UsaDockElement extends UsaElement {\n readonly items: HTMLElement[];\n}\n\nexport function defineDock(tag = 'usa-dock'): CustomElementConstructor | undefined {\n return defineElement(\n tag,\n (Base) => {\n class UsaDock extends Base {\n static get observedAttributes(): string[] {\n return ['orientation', 'magnify', 'range'];\n }\n private _items: HTMLElement[] = [];\n private _raf = 0;\n\n get items(): HTMLElement[] {\n return this._items;\n }\n\n mount(): void {\n this.dataset.orientation = this.str('orientation', 'horizontal') === 'vertical' ? 'vertical' : 'horizontal';\n this.setAttribute('role', this.getAttribute('role') || 'toolbar');\n if (!this.hasAttribute('aria-label')) this.setAttribute('aria-label', this.str('label', 'Dock'));\n this._items = ownChildren(this);\n this._items.forEach((it) => {\n it.classList.add('usa-dock-item');\n if (it.dataset.label && !it.getAttribute('aria-label') && !it.textContent?.trim()) it.setAttribute('aria-label', it.dataset.label);\n this.listen(it, 'click', () => this.bounce(it));\n this.listen(it, 'focus', () => this.magnifyAt(this.center(it)));\n this.listen(it, 'blur', () => this.magnifyAt(null));\n });\n this.listen(this, 'pointermove', (e: PointerEvent) => {\n const v = this.dataset.orientation === 'vertical' ? e.clientY : e.clientX;\n if (!this._raf) this._raf = typeof requestAnimationFrame === 'function' ? requestAnimationFrame(() => ((this._raf = 0), this.magnifyAt(v))) : (this.magnifyAt(v), 0);\n });\n this.listen(this, 'pointerleave', () => this.magnifyAt(null));\n this.onCleanup(() => {\n if (this._raf && typeof cancelAnimationFrame === 'function') cancelAnimationFrame(this._raf);\n });\n }\n\n private center(it: HTMLElement): number {\n const r = it.getBoundingClientRect();\n return this.dataset.orientation === 'vertical' ? r.top + r.height / 2 : r.left + r.width / 2;\n }\n\n /** Scale every item by its distance to `pos` (client px), or reset with `null`. */\n magnifyAt(pos: number | null): void {\n const max = this.num('magnify', 1.9);\n const range = Math.max(20, this.num('range', 140));\n for (const it of this._items) {\n let s = 1;\n if (pos !== null && !this.reduced) {\n const d = Math.abs(this.center(it) - pos);\n if (d < range) s = 1 + (max - 1) * (0.5 + 0.5 * Math.cos((d / range) * Math.PI));\n }\n it.style.setProperty('--usa-dock-s', s.toFixed(3));\n it.toggleAttribute('data-near', s > 1.5 || (pos !== null && this.reduced && Math.abs(this.center(it) - pos) < 24));\n }\n }\n\n bounce(it: HTMLElement): void {\n if (this.reduced || !this.flag('bounce')) return;\n const v = this.dataset.orientation === 'vertical';\n this.motion(it, [{ translate: '0 0' }, { translate: v ? '18px 0' : '0 -22px', offset: 0.3 }, { translate: '0 0', offset: 0.55 }, { translate: v ? '8px 0' : '0 -9px', offset: 0.75 }, { translate: '0 0' }], { duration: 760, easing: 'ease-out' });\n }\n }\n return UsaDock as unknown as CustomElementConstructor;\n },\n { id: 'dock', text: css }\n );\n}\n","import { defineElement, type UsaElement } from '../base';\nimport { ownChildren, part, arrowIndex } from './shared';\nimport css from './nav-morph.css?raw';\n\n/**\n * `<usa-nav-morph>` (6.6) — navigation links with an indicator that morphs\n * between them: it follows the hovered / focused link (stretching from the\n * old one, leading edge first) and settles back on the current page\n * (`aria-current=\"page\"`, `active` index, or a click). `indicator=\"underline |\n * pill | blob | dot\"`. Arrow keys move focus across links. Event\n * `usa:change` (`{ index }`). Reduced motion: the indicator jumps.\n */\nexport interface UsaNavMorphElement extends UsaElement {\n active: number;\n}\n\nexport const NAV_INDICATORS = ['underline', 'pill', 'blob', 'dot'] as const;\n\nexport function defineNavMorph(tag = 'usa-nav-morph'): CustomElementConstructor | undefined {\n return defineElement(\n tag,\n (Base) => {\n class UsaNavMorph extends Base {\n static get observedAttributes(): string[] {\n return ['indicator'];\n }\n private _links: HTMLElement[] = [];\n private _ink: HTMLElement | null = null;\n private _active = 0;\n private _at = -1;\n\n get active(): number {\n return this._active;\n }\n set active(i: number) {\n this.setActive(i, false);\n }\n\n mount(): void {\n const ind = this.str('indicator', 'underline');\n this.dataset.indicator = (NAV_INDICATORS as readonly string[]).includes(ind) ? ind : 'underline';\n if (this.localName !== 'nav' && !this.hasAttribute('role')) this.setAttribute('role', 'navigation');\n if (!this.hasAttribute('aria-label')) this.setAttribute('aria-label', this.str('label', 'Main'));\n this.querySelectorAll(':scope > .usa-nm-ink').forEach((n) => n.remove());\n this._links = ownChildren(this);\n this._ink = part('span', 'usa-nm-ink', { 'aria-hidden': 'true' });\n this.prepend(this._ink);\n const cur = this._links.findIndex((l) => l.getAttribute('aria-current') === 'page');\n this._active = cur >= 0 ? cur : Math.max(0, Math.min(this._links.length - 1, Math.round(this.num('active', 0))));\n this._at = -1;\n this._links.forEach((l, i) => {\n this.listen(l, 'pointerenter', () => this.moveTo(i));\n this.listen(l, 'focus', () => this.moveTo(i));\n this.listen(l, 'click', () => this.setActive(i, true));\n this.listen(l, 'keydown', (e: KeyboardEvent) => {\n const n = arrowIndex(e, i, this._links.length);\n if (n >= 0) {\n e.preventDefault();\n this._links[n].focus();\n }\n });\n });\n this.listen(this, 'pointerleave', () => this.moveTo(this._active));\n this.listen(this, 'focusout', (e: FocusEvent) => !this.contains(e.relatedTarget as Node) && this.moveTo(this._active));\n this.sync();\n this.moveTo(this._active);\n if (typeof ResizeObserver === 'function') {\n const ro = new ResizeObserver(() => this.place(this._at < 0 ? this._active : this._at));\n ro.observe(this);\n this.onCleanup(() => ro.disconnect());\n }\n }\n\n private rect(i: number): [number, number] {\n const l = this._links[i];\n return l ? [l.offsetLeft, l.offsetWidth] : [0, 0];\n }\n\n private place(i: number): void {\n if (!this._ink) return;\n const [x, w] = this.rect(i);\n this._ink.style.transform = `translateX(${x}px)`;\n this._ink.style.width = `${w}px`;\n }\n\n private moveTo(i: number): void {\n const from = this._at;\n this._at = i;\n this.place(i);\n if (from < 0 || from === i || this.reduced || !this._ink) return;\n const [x0, w0] = this.rect(from);\n const [x1, w1] = this.rect(i);\n const mid = x1 > x0 ? { transform: `translateX(${x0}px)`, width: `${x1 + w1 - x0}px` } : { transform: `translateX(${x1}px)`, width: `${x0 + w0 - x1}px` };\n const blob = this.dataset.indicator === 'blob';\n this.motion(this._ink, [\n { transform: `translateX(${x0}px)`, width: `${w0}px` },\n { ...mid, offset: 0.4, ...(blob ? { borderRadius: '40% 60% 55% 45% / 60% 40% 60% 40%' } : {}) },\n { transform: `translateX(${x1}px)`, width: `${w1}px` },\n ], { duration: 420, easing: 'cubic-bezier(.22,1,.36,1)' });\n }\n\n private sync(): void {\n this._links.forEach((l, k) => {\n if (k === this._active) l.setAttribute('aria-current', 'page');\n else if (l.getAttribute('aria-current') === 'page') l.removeAttribute('aria-current');\n });\n }\n\n private setActive(i: number, user: boolean): void {\n const n = Math.max(0, Math.min(this._links.length - 1, Math.round(i)));\n const changed = n !== this._active;\n this._active = n;\n this.sync();\n this.moveTo(n);\n if (changed && user) this.emit('change', { index: n });\n }\n }\n return UsaNavMorph as unknown as CustomElementConstructor;\n },\n { id: 'nav-morph', text: css }\n );\n}\n","import { defineElement, type UsaElement } from '../base';\nimport css from './menu-toggle.css?raw';\n\n/**\n * `<usa-menu-toggle>` (6.6) — the hamburger button that morphs into its\n * \"open\" icon: `variant=\"cross\"` (✕, default), `arrow` (←), `minus` (—) or\n * `plus-x` (+ turning into ✕). It is a real `<button>`-like control\n * (`role=\"button\"`, Space / Enter, `aria-expanded`); `for=\"<id>\"` sets\n * `aria-controls` and toggles the `hidden` attribute (or `.open()` /\n * `.close()` / `.show()`) of that element. `pressed` reflects the state.\n * Event `usa:toggle` (`{ open }`). Reduced motion: the icon switches without\n * the morph.\n */\nexport interface UsaMenuToggleElement extends UsaElement {\n open: boolean;\n toggle(force?: boolean): void;\n}\n\nexport const TOGGLE_VARIANTS = ['cross', 'arrow', 'minus', 'plus-x'] as const;\n\nexport function defineMenuToggle(tag = 'usa-menu-toggle'): CustomElementConstructor | undefined {\n return defineElement(\n tag,\n (Base) => {\n class UsaMenuToggle extends Base {\n static get observedAttributes(): string[] {\n return ['variant'];\n }\n private _open = false;\n\n get open(): boolean {\n return this._open;\n }\n set open(v: boolean) {\n this.toggle(v);\n }\n\n mount(): void {\n const v = this.str('variant', 'cross');\n this.dataset.variant = (TOGGLE_VARIANTS as readonly string[]).includes(v) ? v : 'cross';\n if (!this.querySelector(':scope > .usa-mt-box')) {\n const box = document.createElement('span');\n box.className = 'usa-mt-box';\n box.setAttribute('aria-hidden', 'true');\n box.setAttribute('data-usa-part', '');\n box.innerHTML = '<span class=\"usa-mt-bar\"></span><span class=\"usa-mt-bar\"></span><span class=\"usa-mt-bar\"></span>';\n this.prepend(box);\n }\n this.setAttribute('role', 'button');\n if (!this.hasAttribute('tabindex')) this.tabIndex = 0;\n if (!this.hasAttribute('aria-label') && !this.textContent?.trim()) this.setAttribute('aria-label', this.str('label', 'Menu'));\n const id = this.str('for', '');\n if (id) this.setAttribute('aria-controls', id);\n this._open = this.flag('pressed');\n this.sync(false);\n this.listen(this, 'click', () => this.toggle());\n this.listen(this, 'keydown', (e: KeyboardEvent) => {\n if (e.key === 'Enter' || e.key === ' ') {\n e.preventDefault();\n this.toggle();\n }\n });\n }\n\n private sync(animate: boolean): void {\n this.setAttribute('aria-expanded', String(this._open));\n this.toggleAttribute('data-open', this._open);\n this.toggleAttribute('data-animate', animate && !this.reduced);\n const target = this.str('for', '') ? (document.getElementById(this.str('for', '')) as (HTMLElement & { open?: unknown; show?: () => void; close?: () => void }) | null) : null;\n if (!target || !animate) return;\n if (this._open && typeof target.show === 'function') target.show();\n else if (!this._open && typeof target.close === 'function') target.close();\n else target.hidden = !this._open;\n }\n\n toggle(force?: boolean): void {\n const next = typeof force === 'boolean' ? force : !this._open;\n if (next === this._open) return;\n this._open = next;\n this.toggleAttribute('pressed', next);\n this.sync(true);\n this.emit('toggle', { open: next });\n }\n }\n return UsaMenuToggle as unknown as CustomElementConstructor;\n },\n { id: 'menu-toggle', text: css }\n );\n}\n","import { defineElement, type UsaElement } from '../base';\nimport { part, nextId } from './shared';\nimport css from './tip.css?raw';\n\n/**\n * `<usa-tip>` (6.6) — tooltip / popover 2.0. Wrap the trigger; the tip\n * content is the `text` attribute or a child with `[slot=\"tip\"]` / `[data-tip]`\n * (rich content). It springs out of the trigger with its arrow,\n * auto-flips to stay inside the viewport and shifts along the edge.\n * `placement=\"top | bottom | left | right\"`, `trigger=\"hover | click\"`\n * (`click` = popover: toggles, Esc / outside click close), `delay` (ms).\n * Hover tips also open on keyboard focus and close on Esc (WCAG 1.4.13).\n * Events `usa:open`, `usa:close`. Reduced motion: a short fade.\n */\nexport interface UsaTipElement extends UsaElement {\n readonly opened: boolean;\n show(): void;\n hide(): void;\n}\n\nexport const TIP_PLACEMENTS = ['top', 'bottom', 'left', 'right'] as const;\nconst FLIP: Record<string, string> = { top: 'bottom', bottom: 'top', left: 'right', right: 'left' };\n\nexport function defineTip(tag = 'usa-tip'): CustomElementConstructor | undefined {\n return defineElement(\n tag,\n (Base) => {\n class UsaTip extends Base {\n static get observedAttributes(): string[] {\n return ['text', 'placement', 'trigger'];\n }\n private _bubble: HTMLElement | null = null;\n private _trigger: HTMLElement | null = null;\n private _open = false;\n private _t: ReturnType<typeof setTimeout> | 0 = 0;\n\n get opened(): boolean {\n return this._open;\n }\n\n mount(): void {\n this.querySelectorAll(':scope > .usa-tip-bubble[data-usa-part]').forEach((n) => n.remove());\n const rich = this.querySelector<HTMLElement>(':scope > [slot=\"tip\"], :scope > [data-tip]');\n this._trigger = Array.from(this.children).find((c) => c !== rich && !c.matches('.usa-tip-bubble')) as HTMLElement | null;\n const b = rich || part('span', 'usa-tip-bubble');\n b.classList.add('usa-tip-bubble');\n if (!rich) b.textContent = this.str('text', '');\n b.id ||= nextId('usa-tipb');\n b.hidden = true;\n if (!b.querySelector(':scope > .usa-tip-arrow')) b.append(part('span', 'usa-tip-arrow', { 'aria-hidden': 'true' }));\n if (!b.isConnected) this.append(b);\n this._bubble = b;\n const click = this.str('trigger', 'hover') === 'click';\n b.setAttribute('role', click ? 'dialog' : 'tooltip');\n const t = this._trigger;\n if (t) {\n if (click) {\n t.setAttribute('aria-expanded', 'false');\n t.setAttribute('aria-controls', b.id);\n t.setAttribute('aria-haspopup', 'dialog');\n this.listen(t, 'click', () => (this._open ? this.hide() : this.show()));\n this.listen(document, 'pointerdown', (e: PointerEvent) => this._open && !this.contains(e.target as Node) && this.hide());\n } else {\n t.setAttribute('aria-describedby', b.id);\n const delay = this.num('delay', 120);\n const later = (fn: () => void, ms: number) => {\n if (this._t) clearTimeout(this._t);\n this._t = setTimeout(fn, ms);\n };\n this.listen(this, 'pointerenter', () => later(() => this.show(), delay));\n this.listen(this, 'pointerleave', () => later(() => this.hide(), 80));\n this.listen(t, 'focusin', () => this.show());\n this.listen(t, 'focusout', () => this.hide());\n this.onCleanup(() => this._t && clearTimeout(this._t));\n }\n }\n this.listen(document, 'keydown', (e: KeyboardEvent) => {\n if (e.key === 'Escape' && this._open) {\n this.hide();\n if (click) t?.focus();\n }\n });\n }\n\n private position(): string {\n const b = this._bubble!;\n const t = this._trigger || this;\n const want = (TIP_PLACEMENTS as readonly string[]).includes(this.str('placement', 'top')) ? this.str('placement', 'top') : 'top';\n const tr = t.getBoundingClientRect();\n const br = b.getBoundingClientRect();\n const vw = document.documentElement.clientWidth || window.innerWidth || 1024;\n const vh = window.innerHeight || 768;\n const gap = 10;\n const fits = (p: string) => (p === 'top' ? tr.top - br.height - gap >= 4 : p === 'bottom' ? tr.bottom + br.height + gap <= vh - 4 : p === 'left' ? tr.left - br.width - gap >= 4 : tr.right + br.width + gap <= vw - 4);\n const place = fits(want) || !fits(FLIP[want]) ? want : FLIP[want];\n const host = this.getBoundingClientRect();\n let x: number;\n let y: number;\n if (place === 'top' || place === 'bottom') {\n x = tr.left + tr.width / 2 - br.width / 2;\n y = place === 'top' ? tr.top - br.height - gap : tr.bottom + gap;\n } else {\n x = place === 'left' ? tr.left - br.width - gap : tr.right + gap;\n y = tr.top + tr.height / 2 - br.height / 2;\n }\n const cx = Math.min(Math.max(4, x), Math.max(4, vw - br.width - 4)); // shift inside the viewport\n b.style.left = `${(cx - host.left).toFixed(1)}px`;\n b.style.top = `${(y - host.top).toFixed(1)}px`;\n b.style.setProperty('--usa-tip-shift', `${(x - cx).toFixed(1)}px`);\n b.dataset.placement = place;\n return place;\n }\n\n show(): void {\n const b = this._bubble;\n if (!b || this._open) return;\n this._open = true;\n b.hidden = false;\n const place = this.position();\n this._trigger?.setAttribute('aria-expanded', this._trigger.hasAttribute('aria-expanded') ? 'true' : '');\n if (this._trigger?.getAttribute('aria-expanded') === '') this._trigger.removeAttribute('aria-expanded');\n const off = place === 'top' ? '0 6px' : place === 'bottom' ? '0 -6px' : place === 'left' ? '6px 0' : '-6px 0';\n this.motion(b, this.reduced ? [{ opacity: 0 }, { opacity: 1 }] : [{ opacity: 0, translate: off, scale: '0.6' }, { opacity: 1, translate: '0 0', scale: '1.04', offset: 0.65 }, { opacity: 1, translate: '0 0', scale: '1' }], { duration: this.reduced ? 120 : 340, easing: 'cubic-bezier(.3,1.3,.5,1)' });\n this.emit('open');\n }\n\n hide(): void {\n const b = this._bubble;\n if (!b || !this._open) return;\n this._open = false;\n if (this._trigger?.hasAttribute('aria-expanded')) this._trigger.setAttribute('aria-expanded', 'false');\n const a = this.motion(b, [{ opacity: 1 }, { opacity: 0, scale: this.reduced ? '1' : '0.9' }], { duration: 120, easing: 'ease-in' });\n const done = () => {\n if (!this._open) b.hidden = true;\n };\n if (a) a.finished.then(done, done);\n else done();\n this.emit('close');\n }\n }\n return UsaTip as unknown as CustomElementConstructor;\n },\n { id: 'tip', text: css }\n );\n}\n","import { defineElement, type UsaElement } from '../base';\nimport { ownChildren, clampN } from './shared';\nimport css from './stepper.css?raw';\n\n/**\n * `<usa-stepper>` (6.7) — a step indicator / wizard. Each child is a step\n * (its text is the label). `value` is the current step (0-based); finished\n * steps pop a check mark, the connecting rail fills toward the current step\n * and the current step pulses once. `orientation=\"vertical\"` stacks the\n * steps. `next()` / `prev()` / `value`; event `usa:change` (`{ value }`).\n * The list is an ordered list with `aria-current=\"step\"`. Reduced motion: no\n * pop or pulse, the rail jumps.\n */\nexport interface UsaStepperElement extends UsaElement {\n value: number;\n readonly steps: HTMLElement[];\n next(): void;\n prev(): void;\n}\n\nexport function defineStepper(tag = 'usa-stepper'): CustomElementConstructor | undefined {\n return defineElement(\n tag,\n (Base) => {\n class UsaStepper extends Base {\n static get observedAttributes(): string[] {\n return ['orientation'];\n }\n private _steps: HTMLElement[] = [];\n private _v = 0;\n private _fill: HTMLElement | null = null;\n\n get steps(): HTMLElement[] {\n return this._steps;\n }\n get value(): number {\n return this._v;\n }\n set value(v: number) {\n this.go(v);\n }\n\n mount(): void {\n this.dataset.orientation = this.str('orientation', 'horizontal') === 'vertical' ? 'vertical' : 'horizontal';\n this.setAttribute('role', 'list');\n if (!this.hasAttribute('aria-label')) this.setAttribute('aria-label', this.str('label', 'Progress'));\n this._steps = ownChildren(this);\n if (!this.querySelector(':scope > .usa-st-rail')) {\n const rail = document.createElement('span');\n rail.className = 'usa-st-rail';\n rail.setAttribute('data-usa-part', '');\n rail.setAttribute('aria-hidden', 'true');\n rail.innerHTML = '<span class=\"usa-st-fill\"></span>';\n this.prepend(rail);\n }\n this._fill = this.querySelector('.usa-st-fill');\n this._steps.forEach((s, i) => {\n s.classList.add('usa-st-step');\n s.setAttribute('role', 'listitem');\n s.style.setProperty('--usa-st-i', String(i));\n if (!s.querySelector(':scope > .usa-st-dot')) {\n const d = document.createElement('span');\n d.className = 'usa-st-dot';\n d.setAttribute('aria-hidden', 'true');\n d.setAttribute('data-usa-part', '');\n d.innerHTML = `<span class=\"usa-st-num\">${i + 1}</span><svg class=\"usa-st-check\" viewBox=\"0 0 16 16\"><path d=\"M3 8.5l3.2 3L13 4.8\"/></svg>`;\n s.prepend(d);\n }\n if (s.hasAttribute('data-clickable') || this.flag('clickable')) this.listen(s, 'click', () => this.go(i));\n });\n this._v = clampN(this.num('value', 0) | 0, 0, Math.max(0, this._steps.length - 1));\n this.sync(-1);\n }\n\n private sync(prev: number): void {\n const n = this._steps.length;\n this._steps.forEach((s, i) => {\n s.toggleAttribute('data-done', i < this._v);\n s.toggleAttribute('data-current', i === this._v);\n if (i === this._v) s.setAttribute('aria-current', 'step');\n else s.removeAttribute('aria-current');\n });\n const pct = n > 1 ? (this._v / (n - 1)) * 100 : 0;\n this.style.setProperty('--usa-st-p', pct.toFixed(2) + '%');\n if (prev < 0 || this.reduced) return;\n const cur = this._steps[this._v]?.querySelector('.usa-st-dot');\n if (cur) this.motion(cur, [{ transform: 'scale(1)', boxShadow: '0 0 0 0 rgba(124,92,255,.55)' }, { transform: 'scale(1.18)', offset: 0.35 }, { transform: 'scale(1)', boxShadow: '0 0 0 12px rgba(124,92,255,0)' }], { duration: 620, easing: 'ease-out' });\n if (this._v > prev) {\n const done = this._steps[prev]?.querySelector('.usa-st-check');\n if (done) this.motion(done, [{ strokeDashoffset: 20, transform: 'scale(.4)' }, { strokeDashoffset: 0, transform: 'scale(1)' }], { duration: 420, easing: 'cubic-bezier(.3,1.4,.5,1)' });\n }\n }\n\n go(i: number): void {\n const v = clampN(Math.round(i), 0, Math.max(0, this._steps.length - 1));\n if (v === this._v) return;\n const prev = this._v;\n this._v = v;\n this.setAttribute('value', String(v));\n this.sync(prev);\n this.emit('change', { value: v });\n }\n next(): void {\n this.go(this._v + 1);\n }\n prev(): void {\n this.go(this._v - 1);\n }\n }\n return UsaStepper as unknown as CustomElementConstructor;\n },\n { id: 'stepper', text: css }\n );\n}\n","import { defineElement, type UsaElement } from '../base';\nimport { clampN, dropParts } from './shared';\nimport css from './pagination.css?raw';\n\n/**\n * `<usa-pagination>` (6.7) — page buttons with a sliding \"ink\" that springs\n * to the current page (squashing as it travels) and numbers that slide in\n * from the direction of travel when the window of pages shifts. Attributes\n * `total`, `page` (1-based), `siblings` (pages each side, 1). Prev / next\n * buttons, ellipses, `aria-current=\"page\"`; event `usa:change` (`{ page }`).\n * Reduced motion: the ink jumps and numbers do not slide.\n */\nexport interface UsaPaginationElement extends UsaElement {\n page: number;\n readonly total: number;\n}\n\n/** The visible page list: numbers and `'…'` gaps (1-based). */\nexport function pageWindow(page: number, total: number, siblings = 1): (number | '…')[] {\n const out: (number | '…')[] = [];\n const lo = Math.max(2, page - siblings);\n const hi = Math.min(total - 1, page + siblings);\n out.push(1);\n if (lo > 2) out.push('…');\n for (let p = lo; p <= hi; p++) out.push(p);\n if (hi < total - 1) out.push('…');\n if (total > 1) out.push(total);\n return out;\n}\n\nexport function definePagination(tag = 'usa-pagination'): CustomElementConstructor | undefined {\n return defineElement(\n tag,\n (Base) => {\n class UsaPagination extends Base {\n static get observedAttributes(): string[] {\n return ['total', 'siblings'];\n }\n private _page = 1;\n private _ink: HTMLElement | null = null;\n private _list: HTMLElement | null = null;\n\n get total(): number {\n return Math.max(1, this.num('total', 1) | 0);\n }\n get page(): number {\n return this._page;\n }\n set page(p: number) {\n this.go(p);\n }\n\n mount(): void {\n dropParts(this);\n this.setAttribute('role', 'navigation');\n if (!this.hasAttribute('aria-label')) this.setAttribute('aria-label', this.str('label', 'Pagination'));\n this._page = clampN(this.num('page', 1) | 0, 1, this.total);\n const prev = this.btn('‹', 'Previous page', 'usa-pg-prev');\n const next = this.btn('›', 'Next page', 'usa-pg-next');\n this._list = document.createElement('span');\n this._list.className = 'usa-pg-list';\n this._list.setAttribute('data-usa-part', '');\n this._ink = document.createElement('span');\n this._ink.className = 'usa-pg-ink';\n this._ink.setAttribute('aria-hidden', 'true');\n this._list.appendChild(this._ink);\n this.append(prev, this._list, next);\n this.listen(prev, 'click', () => this.go(this._page - 1));\n this.listen(next, 'click', () => this.go(this._page + 1));\n this.listen(this._list, 'click', (e: Event) => {\n const b = (e.target as HTMLElement).closest?.('[data-page]') as HTMLElement | null;\n if (b) this.go(Number(b.dataset.page));\n });\n this.render(0);\n }\n\n private btn(txt: string, label: string, cls: string): HTMLButtonElement {\n const b = document.createElement('button');\n b.type = 'button';\n b.className = 'usa-pg-btn ' + cls;\n b.textContent = txt;\n b.setAttribute('aria-label', label);\n b.setAttribute('data-usa-part', '');\n return b;\n }\n\n private render(dir: number): void {\n const list = this._list!;\n const old = new Map(Array.from(list.querySelectorAll<HTMLElement>('[data-page]')).map((b) => [b.dataset.page, b]));\n list.querySelectorAll('.usa-pg-btn,.usa-pg-gap').forEach((n) => n.remove());\n for (const p of pageWindow(this._page, this.total, Math.max(0, this.num('siblings', 1) | 0))) {\n if (p === '…') {\n const g = document.createElement('span');\n g.className = 'usa-pg-gap';\n g.textContent = '…';\n g.setAttribute('aria-hidden', 'true');\n list.appendChild(g);\n continue;\n }\n const b = this.btn(String(p), `Page ${p}`, 'usa-pg-num');\n b.dataset.page = String(p);\n if (p === this._page) b.setAttribute('aria-current', 'page');\n list.appendChild(b);\n if (dir && !old.has(String(p)) && !this.reduced) this.motion(b, [{ transform: `translateX(${dir * 14}px)`, opacity: 0 }, { transform: 'none', opacity: 1 }], { duration: 280, easing: 'ease-out' });\n }\n (this.querySelector('.usa-pg-prev') as HTMLButtonElement).disabled = this._page <= 1;\n (this.querySelector('.usa-pg-next') as HTMLButtonElement).disabled = this._page >= this.total;\n this.placeInk(dir !== 0);\n }\n\n private placeInk(animate: boolean): void {\n const cur = this._list?.querySelector<HTMLElement>('[aria-current=\"page\"]');\n const ink = this._ink;\n if (!cur || !ink) return;\n const from = ink.style.transform;\n const to = `translateX(${cur.offsetLeft}px)`;\n ink.style.width = cur.offsetWidth + 'px';\n ink.style.transform = to;\n if (animate && from && from !== to && !this.reduced) this.motion(ink, [{ transform: from }, { transform: `${to} scaleX(1.35) scaleY(.8)`, offset: 0.55 }, { transform: to }], { duration: 420, easing: 'cubic-bezier(.3,1.3,.5,1)' });\n }\n\n go(p: number): void {\n const v = clampN(Math.round(p), 1, this.total);\n if (v === this._page) return;\n const dir = v > this._page ? 1 : -1;\n this._page = v;\n this.setAttribute('page', String(v));\n this.render(dir);\n this.emit('change', { page: v });\n }\n }\n return UsaPagination as unknown as CustomElementConstructor;\n },\n { id: 'pagination', text: css }\n );\n}\n","import { defineElement, type UsaElement } from '../base';\nimport { ownChildren, arrowIndex, clampN } from './shared';\nimport css from './segmented.css?raw';\n\n/**\n * `<usa-segmented>` (6.7) — a segmented control (iOS style): a thumb slides\n * under the chosen segment with a spring and stretches while it travels;\n * the chosen label scales up slightly. Children are the segments (buttons\n * or any element). It is a radio group (`role=\"radiogroup\"`, arrow keys,\n * Home / End, roving tabindex). `value` is the selected index; `usa:change`\n * (`{ value, label }`). `variant=\"ios | pill | outline\"`. Reduced motion:\n * the thumb jumps.\n */\nexport interface UsaSegmentedElement extends UsaElement {\n value: number;\n readonly segments: HTMLElement[];\n}\n\nexport const SEGMENTED_VARIANTS = ['ios', 'pill', 'outline'] as const;\n\nexport function defineSegmented(tag = 'usa-segmented'): CustomElementConstructor | undefined {\n return defineElement(\n tag,\n (Base) => {\n class UsaSegmented extends Base {\n static get observedAttributes(): string[] {\n return ['variant'];\n }\n private _segs: HTMLElement[] = [];\n private _v = 0;\n private _thumb: HTMLElement | null = null;\n\n get segments(): HTMLElement[] {\n return this._segs;\n }\n get value(): number {\n return this._v;\n }\n set value(v: number) {\n this.select(v, false);\n }\n\n mount(): void {\n const v = this.str('variant', 'ios');\n this.dataset.variant = (SEGMENTED_VARIANTS as readonly string[]).includes(v) ? v : 'ios';\n this.setAttribute('role', 'radiogroup');\n if (!this.hasAttribute('aria-label')) this.setAttribute('aria-label', this.str('label', 'Options'));\n this._segs = ownChildren(this);\n if (!this.querySelector(':scope > .usa-seg-thumb')) {\n const t = document.createElement('span');\n t.className = 'usa-seg-thumb';\n t.setAttribute('aria-hidden', 'true');\n t.setAttribute('data-usa-part', '');\n this.prepend(t);\n }\n this._thumb = this.querySelector('.usa-seg-thumb');\n const pre = this._segs.findIndex((s) => s.hasAttribute('selected') || s.getAttribute('aria-checked') === 'true');\n this._v = clampN(pre >= 0 ? pre : this.num('value', 0) | 0, 0, Math.max(0, this._segs.length - 1));\n this._segs.forEach((s, i) => {\n s.classList.add('usa-seg-item');\n s.setAttribute('role', 'radio');\n this.listen(s, 'click', () => this.select(i, true));\n this.listen(s, 'keydown', (e: KeyboardEvent) => {\n const j = arrowIndex(e, i, this._segs.length);\n if (j < 0) return;\n e.preventDefault();\n this.select(j, true);\n this._segs[j].focus();\n });\n });\n this.sync(false);\n if (typeof ResizeObserver === 'function') {\n const ro = new ResizeObserver(() => this.place(false));\n ro.observe(this);\n this.onCleanup(() => ro.disconnect());\n }\n }\n\n private sync(animate: boolean): void {\n this._segs.forEach((s, i) => {\n s.setAttribute('aria-checked', String(i === this._v));\n s.tabIndex = i === this._v ? 0 : -1;\n s.toggleAttribute('data-selected', i === this._v);\n });\n this.place(animate);\n }\n\n private place(animate: boolean): void {\n const s = this._segs[this._v];\n const t = this._thumb;\n if (!s || !t) return;\n const from = { x: t.offsetLeft, w: t.offsetWidth };\n t.style.left = s.offsetLeft + 'px';\n t.style.width = s.offsetWidth + 'px';\n if (!animate || this.reduced || !from.w) return;\n const dx = from.x - s.offsetLeft;\n const sx = from.w / (s.offsetWidth || 1);\n this.motion(t, [{ transform: `translateX(${dx}px) scaleX(${sx})` }, { transform: `translateX(${dx * 0.35}px) scaleX(${Math.max(sx, 1) * 1.18}) scaleY(.88)`, offset: 0.45 }, { transform: 'none' }], { duration: 430, easing: 'cubic-bezier(.3,1.25,.5,1)' });\n }\n\n select(i: number, user: boolean): void {\n const v = clampN(i | 0, 0, Math.max(0, this._segs.length - 1));\n if (v === this._v) return;\n this._v = v;\n this.sync(true);\n if (user) this.emit('change', { value: v, label: this._segs[v]?.textContent?.trim() || '' });\n }\n }\n return UsaSegmented as unknown as CustomElementConstructor;\n },\n { id: 'segmented', text: css }\n );\n}\n","import { defineElement, type UsaElement } from '../base';\nimport css from './switch.css?raw';\n\n/**\n * `<usa-switch>` (6.7) — toggle switch variants: `ios` (the thumb stretches\n * while pressed and slides), `daynight` (sun → moon with stars and\n * clouds), `bounce` (the thumb squashes and bounces at the end) and\n * `liquid` (a gooey fill pours behind the thumb). A real switch:\n * `role=\"switch\"`, `aria-checked`, Space / Enter, `disabled`; `checked`\n * property / attribute; inside a `<form>` with `name` it submits `value`\n * (\"on\") when checked. Event `usa:change` (`{ checked }`). Reduced motion:\n * no squash, bounce or pour — it just switches.\n */\nexport interface UsaSwitchElement extends UsaElement {\n checked: boolean;\n toggle(force?: boolean): void;\n}\n\nexport const SWITCH_VARIANTS = ['ios', 'daynight', 'bounce', 'liquid'] as const;\n\nexport function defineSwitch(tag = 'usa-switch'): CustomElementConstructor | undefined {\n return defineElement(\n tag,\n (Base) => {\n class UsaSwitch extends Base {\n static get observedAttributes(): string[] {\n return ['variant'];\n }\n private _on = false;\n private _input: HTMLInputElement | null = null;\n\n get checked(): boolean {\n return this._on;\n }\n set checked(v: boolean) {\n this.toggle(!!v, false);\n }\n\n mount(): void {\n const v = this.str('variant', 'ios');\n this.dataset.variant = (SWITCH_VARIANTS as readonly string[]).includes(v) ? v : 'ios';\n if (!this.querySelector(':scope > .usa-sw-track')) {\n const t = document.createElement('span');\n t.className = 'usa-sw-track';\n t.setAttribute('aria-hidden', 'true');\n t.setAttribute('data-usa-part', '');\n t.innerHTML = '<span class=\"usa-sw-fill\"></span><span class=\"usa-sw-deco\"></span><span class=\"usa-sw-thumb\"></span>';\n this.prepend(t);\n }\n this.setAttribute('role', 'switch');\n if (!this.hasAttribute('tabindex')) this.tabIndex = 0;\n if (!this.hasAttribute('aria-label') && !this.textContent?.trim()) this.setAttribute('aria-label', this.str('label', 'Toggle'));\n this._on = this.flag('checked');\n if (this.str('name', '') && !this._input) {\n this._input = document.createElement('input');\n this._input.type = 'hidden';\n this._input.setAttribute('data-usa-part', '');\n this.appendChild(this._input);\n }\n this.sync(false);\n const thumb = this.querySelector('.usa-sw-thumb') as HTMLElement;\n this.listen(this, 'pointerdown', () => !this.reduced && this.toggleAttribute('data-press', true));\n this.listen(this, 'pointerup', () => this.removeAttribute('data-press'));\n this.listen(this, 'pointerleave', () => this.removeAttribute('data-press'));\n this.listen(this, 'click', () => this.toggle(undefined, true));\n this.listen(this, 'keydown', (e: KeyboardEvent) => {\n if (e.key === ' ' || e.key === 'Enter') {\n e.preventDefault();\n this.toggle(undefined, true);\n }\n });\n void thumb;\n }\n\n private sync(animate: boolean): void {\n this.setAttribute('aria-checked', String(this._on));\n this.toggleAttribute('data-on', this._on);\n this.toggleAttribute('data-animate', animate && !this.reduced);\n if (this._input) {\n this._input.name = this.str('name', '');\n this._input.value = this.str('value', 'on');\n this._input.disabled = !this._on;\n }\n if (!animate || this.reduced) return;\n const thumb = this.querySelector('.usa-sw-thumb');\n if (thumb && this.dataset.variant === 'bounce') this.motion(thumb, [{ scale: '1 1' }, { scale: '1.35 .7', offset: 0.55 }, { scale: '.9 1.1', offset: 0.75 }, { scale: '1 1' }], { duration: 520, easing: 'ease-out' });\n const fill = this.querySelector('.usa-sw-fill');\n if (fill && this.dataset.variant === 'liquid') this.motion(fill, [{ borderRadius: '50% 50% 40% 60%' }, { borderRadius: '30% 70% 60% 40%', offset: 0.5 }, { borderRadius: '999px' }], { duration: 600, easing: 'ease-out' });\n }\n\n toggle(force?: boolean, user = false): void {\n if (this.flag('disabled') && user) return;\n const next = typeof force === 'boolean' ? force : !this._on;\n if (next === this._on) return;\n this._on = next;\n this.toggleAttribute('checked', next);\n this.sync(user);\n if (user) this.emit('change', { checked: next });\n }\n }\n return UsaSwitch as unknown as CustomElementConstructor;\n },\n { id: 'switch', 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';\nimport { defineToastStack, stackToast, TOAST_POSITIONS, type UsaToastStackElement, type StackToastOptions } from './toast';\nimport { defineModal, defineSheet, MODAL_EFFECTS, SHEET_SIDES, type UsaModalElement, type UsaSheetElement } from './overlay';\nimport { defineMenu, MENU_EFFECTS, type UsaMenuElement } from './menu';\nimport { defineProgressRing, defineOdometer, PROGRESS_VARIANTS, type UsaProgressRingElement, type UsaOdometerElement } from './meters';\nimport { defineSkeletonReveal, SKELETON_VARIANTS, type UsaSkeletonRevealElement } from './skeleton-reveal';\nimport { defineStarRating, type UsaStarRatingElement } from './star-rating';\nimport { defineMilestones, type UsaMilestonesElement } from './milestones';\nimport { defineMasonryFlow, type UsaMasonryFlowElement } from './masonry-flow';\nimport { defineCompare, type UsaCompareElement } from './compare';\nimport { defineCubeGallery, type UsaCubeGalleryElement } from './cube-gallery';\nimport { defineDock, type UsaDockElement } from './dock';\nimport { defineNavMorph, NAV_INDICATORS, type UsaNavMorphElement } from './nav-morph';\nimport { defineMenuToggle, TOGGLE_VARIANTS, type UsaMenuToggleElement } from './menu-toggle';\nimport { defineTip, TIP_PLACEMENTS, type UsaTipElement } from './tip';\nimport { defineStepper, type UsaStepperElement } from './stepper';\nimport { definePagination, pageWindow, type UsaPaginationElement } from './pagination';\nimport { defineSegmented, SEGMENTED_VARIANTS, type UsaSegmentedElement } from './segmented';\nimport { defineSwitch, SWITCH_VARIANTS, type UsaSwitchElement } from './switch';\n\nexport { defineCarousel, defineTabBar, defineDisclosure, defineStories, CAROUSEL_EFFECTS, TAB_INDICATORS };\nexport type { UsaCarouselElement, UsaTabBarElement, UsaDisclosureElement, UsaStoriesElement };\nexport { defineToastStack, stackToast, TOAST_POSITIONS, defineModal, defineSheet, MODAL_EFFECTS, SHEET_SIDES, defineMenu, MENU_EFFECTS };\nexport type { UsaToastStackElement, StackToastOptions, UsaModalElement, UsaSheetElement, UsaMenuElement };\n\nexport { defineProgressRing, defineOdometer, PROGRESS_VARIANTS, defineSkeletonReveal, SKELETON_VARIANTS, defineStarRating };\nexport type { UsaProgressRingElement, UsaOdometerElement, UsaSkeletonRevealElement, UsaStarRatingElement };\n\nexport { defineMilestones, defineMasonryFlow, defineCompare, defineCubeGallery };\nexport type { UsaMilestonesElement, UsaMasonryFlowElement, UsaCompareElement, UsaCubeGalleryElement };\n\nexport { defineDock, defineNavMorph, NAV_INDICATORS, defineMenuToggle, TOGGLE_VARIANTS, defineTip, TIP_PLACEMENTS };\nexport type { UsaDockElement, UsaNavMorphElement, UsaMenuToggleElement, UsaTipElement };\n\nexport { defineStepper, definePagination, pageWindow, defineSegmented, SEGMENTED_VARIANTS, defineSwitch, SWITCH_VARIANTS };\nexport type { UsaStepperElement, UsaPaginationElement, UsaSegmentedElement, UsaSwitchElement };\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 '6.3': { 'usa-toast-stack': defineToastStack, 'usa-modal': defineModal, 'usa-sheet': defineSheet, 'usa-menu': defineMenu },\n '6.4': { 'usa-progress-ring': defineProgressRing, 'usa-odometer': defineOdometer, 'usa-skeleton-reveal': defineSkeletonReveal, 'usa-star-rating': defineStarRating },\n '6.5': { 'usa-milestones': defineMilestones, 'usa-masonry-flow': defineMasonryFlow, 'usa-compare': defineCompare, 'usa-cube-gallery': defineCubeGallery },\n '6.6': { 'usa-dock': defineDock, 'usa-nav-morph': defineNavMorph, 'usa-menu-toggle': defineMenuToggle, 'usa-tip': defineTip },\n '6.7': { 'usa-stepper': defineStepper, 'usa-pagination': definePagination, 'usa-segmented': defineSegmented, 'usa-switch': defineSwitch },\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 'usa-toast-stack': UsaToastStackElement;\n 'usa-modal': UsaModalElement;\n 'usa-sheet': UsaSheetElement;\n 'usa-menu': UsaMenuElement;\n 'usa-progress-ring': UsaProgressRingElement;\n 'usa-odometer': UsaOdometerElement;\n 'usa-skeleton-reveal': UsaSkeletonRevealElement;\n 'usa-star-rating': UsaStarRatingElement;\n 'usa-milestones': UsaMilestonesElement;\n 'usa-masonry-flow': UsaMasonryFlowElement;\n 'usa-compare': UsaCompareElement;\n 'usa-cube-gallery': UsaCubeGalleryElement;\n 'usa-dock': UsaDockElement;\n 'usa-nav-morph': UsaNavMorphElement;\n 'usa-menu-toggle': UsaMenuToggleElement;\n 'usa-tip': UsaTipElement;\n 'usa-stepper': UsaStepperElement;\n 'usa-pagination': UsaPaginationElement;\n 'usa-segmented': UsaSegmentedElement;\n 'usa-switch': UsaSwitchElement;\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 * 6.3 — Text effects 3.0 (`motionary/components/fx-text`), registered through\n * `registerEffect()`:\n *\n * - `liquid-text` (loop) — the text ripples like liquid (animated SVG\n * turbulence + displacement filter).\n * - `neon-write` (text) — letters flicker on one by one like a neon sign\n * being switched on, then keep a soft glow.\n * - `particle-text` (text) — particles fly in from around the element and\n * assemble into the glyphs, then hand over to the real text.\n * - `glitch-text` (text) — RGB-split slices jump sideways for a moment.\n * - `text-trail` (cursor) — the letters of a word fall off the pointer.\n * - `font-breathe` (loop) — a variable-font weight wave breathes through the text.\n * - `flip-chars` (text) — every character flips up in 3D, staggered.\n *\n * Splitting keeps a visually hidden copy for screen readers (the animated\n * characters are `aria-hidden`). Reduced motion: loops and the trail are\n * skipped, one-shot effects show the final state without movement.\n */\nimport type { EffectContext, EffectDefinition } from '../fx/registry';\nimport { registerEffects } from '../fx/registry';\nimport { srText } from '../base';\nimport { fxLayer, spawn, rand, all } from '../effects/shared';\n\n/** Split `el`'s text into `aria-hidden` inline-block characters (idempotent). Returns them. */\nexport function splitChars(el: HTMLElement): HTMLElement[] {\n if (el.dataset.usaChars) return Array.from(el.querySelectorAll<HTMLElement>(':scope > .usa-ch'));\n const text = el.textContent || '';\n el.textContent = '';\n for (const ch of Array.from(text)) {\n const s = document.createElement('span');\n s.className = 'usa-ch';\n s.setAttribute('aria-hidden', 'true');\n s.style.cssText = 'display:inline-block;white-space:pre';\n s.textContent = ch;\n el.appendChild(s);\n }\n el.appendChild(srText(text.trim()));\n el.dataset.usaChars = '1';\n return Array.from(el.querySelectorAll<HTMLElement>(':scope > .usa-ch'));\n}\n\nconst raf = (fn: FrameRequestCallback): number => (typeof requestAnimationFrame === 'function' ? requestAnimationFrame(fn) : 0);\nconst caf = (h: number): void => {\n if (h && typeof cancelAnimationFrame === 'function') cancelAnimationFrame(h);\n};\nlet fid = 0;\n\nexport const TEXT3_FX: EffectDefinition[] = [\n {\n name: 'liquid-text',\n kind: 'loop',\n description: 'The text ripples like liquid: an animated SVG turbulence + displacement filter (`strength`, `speed`).',\n defaults: { strength: 7, speed: 1 },\n run: (el: HTMLElement, o: any) => {\n const id = `usa-liquid-${++fid}`;\n const ns = 'http://www.w3.org/2000/svg';\n const svg = document.createElementNS(ns, 'svg');\n svg.setAttribute('aria-hidden', 'true');\n svg.setAttribute('width', '0');\n svg.setAttribute('height', '0');\n svg.style.cssText = 'position:absolute;width:0;height:0;overflow:hidden';\n svg.innerHTML = `<filter id=\"${id}\" x=\"-10%\" y=\"-20%\" width=\"120%\" height=\"140%\"><feTurbulence type=\"fractalNoise\" baseFrequency=\"0.012 0.06\" numOctaves=\"2\" seed=\"3\" result=\"n\"/><feDisplacementMap in=\"SourceGraphic\" in2=\"n\" scale=\"${Number(o.strength) || 7}\" xChannelSelector=\"R\" yChannelSelector=\"G\"/></filter>`;\n document.body.appendChild(svg);\n const turb = svg.querySelector('feTurbulence');\n const prev = el.style.filter;\n el.style.filter = `url(#${id})`;\n let h = 0;\n const t0 = performance.now();\n const tick = (now: number) => {\n const t = ((now - t0) / 1000) * (Number(o.speed) || 1);\n turb?.setAttribute('baseFrequency', `${(0.012 + 0.004 * Math.sin(t * 1.3)).toFixed(4)} ${(0.06 + 0.02 * Math.cos(t)).toFixed(4)}`);\n h = raf(tick);\n };\n h = raf(tick);\n return () => {\n caf(h);\n el.style.filter = prev;\n svg.remove();\n };\n },\n },\n {\n name: 'neon-write',\n kind: 'text',\n description: 'Letters flicker on one by one like a neon sign being switched on, then keep a soft glow (`color`, `stagger`).',\n defaults: { color: '#ff4fd8', stagger: 70, duration: 520 },\n run: (el: HTMLElement, o: any, ctx: EffectContext) => {\n const glow = `0 0 4px #fff,0 0 10px ${o.color},0 0 22px ${o.color},0 0 42px ${o.color}`;\n el.style.textShadow = glow;\n el.style.color ||= '#fff';\n if (ctx.reduced) return;\n const cs = splitChars(el);\n return all(cs.map((c, i) => ctx.animate(c, [\n { opacity: 0.08, textShadow: 'none' },\n { opacity: 1, textShadow: glow, offset: 0.2 },\n { opacity: 0.2, textShadow: 'none', offset: 0.32 },\n { opacity: 1, textShadow: glow, offset: 0.46 },\n { opacity: 0.55, offset: 0.6 },\n { opacity: 1, textShadow: glow },\n ], { duration: o.duration, delay: i * o.stagger + rand(0, 60), easing: 'steps(6, end)', fill: 'backwards' })));\n },\n },\n {\n name: 'particle-text',\n kind: 'text',\n description: 'Particles fly in from around the element and assemble into the glyphs, then hand over to the real text (`gap` px between samples, `duration`, `colors`).',\n defaults: { gap: 3, duration: 1300, colors: ['#7c5cff', '#22d3ee', '#ff5c8a'], spread: 120 },\n reduced: 'skip',\n run: (el: HTMLElement, o: any) => {\n const cs = splitChars(el);\n const r = el.getBoundingClientRect();\n if (!r.width || !r.height) return;\n const pad = Number(o.spread) || 120;\n const W = Math.ceil(r.width + pad * 2);\n const H = Math.ceil(r.height + pad * 2);\n const canvas = document.createElement('canvas');\n canvas.setAttribute('aria-hidden', 'true');\n canvas.width = W;\n canvas.height = H;\n canvas.style.cssText = `position:absolute;left:${r.left - pad}px;top:${r.top - pad}px;width:${W}px;height:${H}px`;\n const g = canvas.getContext('2d');\n if (!g) return;\n // rasterise each character where the browser laid it out\n const cs0 = getComputedStyle(el);\n g.font = `${cs0.fontStyle} ${cs0.fontWeight} ${cs0.fontSize} ${cs0.fontFamily}`;\n g.textBaseline = 'middle';\n g.fillStyle = '#000';\n for (const c of cs) {\n const b = c.getBoundingClientRect();\n g.fillText(c.textContent || '', b.left - r.left + pad, b.top - r.top + pad + b.height / 2);\n }\n const img = g.getImageData(0, 0, W, H);\n const gap = Math.max(2, Math.round(Number(o.gap) || 3));\n const pts: { x: number; y: number; sx: number; sy: number; c: string; d: number }[] = [];\n for (let y = 0; y < H; y += gap) for (let x = 0; x < W; x += gap) if (img.data[(y * W + x) * 4 + 3] > 128) {\n const a = rand(0, Math.PI * 2);\n const rr = rand(pad * 0.6, pad * 1.4);\n pts.push({ x, y, sx: W / 2 + Math.cos(a) * (W / 2 + rr * 0.3), sy: H / 2 + Math.sin(a) * (H / 2 + rr * 0.3), c: o.colors[pts.length % o.colors.length], d: rand(0, 0.35) });\n }\n fxLayer().appendChild(canvas);\n cs.forEach((c) => (c.style.opacity = '0'));\n const t0 = performance.now();\n const dur = Number(o.duration) || 1300;\n return new Promise<void>((done) => {\n const finish = () => {\n canvas.remove();\n cs.forEach((c) => (c.style.opacity = ''));\n done();\n };\n const tick = (now: number) => {\n const k = (now - t0) / dur;\n g.clearRect(0, 0, W, H);\n for (const p of pts) {\n const e = Math.min(1, Math.max(0, (k - p.d) / (1 - p.d)));\n const q = 1 - Math.pow(1 - e, 3);\n g.globalAlpha = k > 1 ? Math.max(0, 1 - (k - 1) * 4) : 0.25 + 0.75 * q;\n g.fillStyle = p.c;\n g.fillRect(p.sx + (p.x - p.sx) * q, p.sy + (p.y - p.sy) * q, gap - 0.5, gap - 0.5);\n }\n if (k > 1) cs.forEach((c) => (c.style.opacity = String(Math.min(1, (k - 1) * 4))));\n if (k < 1.25) raf(tick);\n else finish();\n };\n if (!raf(tick)) finish();\n });\n },\n },\n {\n name: 'glitch-text',\n kind: 'text',\n description: 'RGB-split slices of the text jump sideways for a moment (`duration`, `colors` of the two channels).',\n defaults: { duration: 650, colors: ['#22d3ee', '#ff3d81'] },\n run: (el: HTMLElement, o: any, ctx: EffectContext) => {\n if (ctx.reduced) return ctx.animate(el, [{ opacity: 1 }, { opacity: 0.6 }, { opacity: 1 }], { duration: 200 });\n if (getComputedStyle(el).position === 'static') el.style.position = 'relative';\n const text = el.textContent || '';\n const steps = 8;\n const mk = (color: string, dir: number) => {\n const s = document.createElement('span');\n s.setAttribute('aria-hidden', 'true');\n s.textContent = text;\n s.style.cssText = `position:absolute;inset:0;color:${color};mix-blend-mode:screen;pointer-events:none;white-space:inherit`;\n el.appendChild(s);\n const frames: Keyframe[] = [];\n for (let i = 0; i <= steps; i++) {\n const top = Math.round(rand(0, 80));\n frames.push({ clipPath: `inset(${top}% 0 ${Math.max(0, 100 - top - rand(8, 30)).toFixed(0)}% 0)`, transform: `translateX(${(dir * rand(2, 9)).toFixed(1)}px)` });\n }\n frames.push({ clipPath: 'inset(50% 0 50% 0)', transform: 'none' });\n const a = ctx.animate(s, frames, { duration: o.duration, easing: `steps(${steps}, end)` });\n const rm = () => s.remove();\n if (a) a.finished.then(rm, rm);\n else rm();\n return a;\n };\n return all([\n mk(o.colors[0], -1),\n mk(o.colors[1], 1),\n ctx.animate(el, [{ transform: 'none' }, { transform: 'translate(-2px,1px) skewX(-4deg)' }, { transform: 'translate(2px,-1px)' }, { transform: 'skewX(3deg)' }, { transform: 'none' }], { duration: o.duration, easing: 'steps(5, end)' }),\n ]);\n },\n },\n {\n name: 'text-trail',\n kind: 'cursor',\n description: 'The letters of a word fall off the pointer as it moves over the element (persistent; `text`, `color`, `spacing` px).',\n defaults: { text: 'MOTIONARY', color: '#7c5cff', spacing: 22, size: 18 },\n run: (el: HTMLElement, o: any, ctx: EffectContext) => {\n const word = Array.from(String(o.text || '✦'));\n let i = 0;\n let lx = -1e4;\n let ly = -1e4;\n const move = (e: PointerEvent) => {\n if (Math.hypot(e.clientX - lx, e.clientY - ly) < o.spacing) return;\n lx = e.clientX;\n ly = e.clientY;\n const ch = word[i++ % word.length];\n spawn(e.clientX - o.size / 2, e.clientY - o.size / 2, `font:800 ${o.size}px/1 system-ui,sans-serif;color:${o.color};text-shadow:0 2px 8px rgba(0,0,0,.25)`, ctx, [\n { transform: 'translateY(0) rotate(0) scale(1)', opacity: 1 },\n { transform: `translateY(${rand(30, 60).toFixed(0)}px) rotate(${rand(-60, 60).toFixed(0)}deg) scale(.6)`, opacity: 0 },\n ], { duration: rand(700, 1000), easing: 'cubic-bezier(.3,.1,.7,1)' }, ch);\n };\n el.addEventListener('pointermove', move);\n return () => el.removeEventListener('pointermove', move);\n },\n },\n {\n name: 'font-breathe',\n kind: 'loop',\n description: 'A variable-font weight wave breathes through the text (`min` / `max` weight, `period` ms, `stagger`). Best with a variable font.',\n defaults: { min: 200, max: 900, period: 2400, stagger: 90 },\n run: (el: HTMLElement, o: any, ctx: EffectContext) => {\n const cs = splitChars(el);\n const anims = cs.map((c, i) => ctx.animate(c, [\n { fontWeight: o.min, fontVariationSettings: `'wght' ${o.min}` },\n { fontWeight: o.max, fontVariationSettings: `'wght' ${o.max}` },\n ], { duration: o.period / 2, delay: i * o.stagger, iterations: Infinity, direction: 'alternate', easing: 'ease-in-out' }));\n return () => anims.forEach((a) => a?.cancel());\n },\n },\n {\n name: 'flip-chars',\n kind: 'text',\n description: 'Every character flips up in 3D around its baseline, staggered (`stagger`, `duration`, `axis` x | y).',\n defaults: { stagger: 45, duration: 700, axis: 'x' },\n run: (el: HTMLElement, o: any, ctx: EffectContext) => {\n const cs = splitChars(el);\n el.style.perspective ||= '600px';\n const rot = o.axis === 'y' ? 'rotateY' : 'rotateX';\n return all(cs.map((c, i) => {\n c.style.transformOrigin = '50% 70% -0.4em';\n c.style.backfaceVisibility = 'hidden';\n return ctx.reduced\n ? ctx.animate(c, [{ opacity: 0 }, { opacity: 1 }], { duration: 200, delay: i * 10, fill: 'backwards' })\n : ctx.animate(c, [{ transform: `${rot}(-100deg)`, opacity: 0 }, { transform: `${rot}(12deg)`, opacity: 1, offset: 0.7 }, { transform: `${rot}(0)`, opacity: 1 }], { duration: o.duration, delay: i * o.stagger, easing: 'cubic-bezier(.2,.8,.3,1)', fill: 'backwards' });\n }));\n },\n },\n];\n\n/** Register the 6.3 text pack (idempotent). */\nexport function registerTextEffects3(): void {\n registerEffects(TEXT3_FX);\n}\n\n","/**\n * 6.4 — Light & materials (`motionary/components/fx-light`), registered\n * through `registerEffect()`. Persistent effects (use `trigger=\"load\"`)\n * that return a cleanup:\n *\n * - `light-follow` (hover) — a soft point light + specular highlight that\n * follows the pointer over the surface.\n * - `refraction` (hover) — a glass lens that bends and magnifies what is\n * behind it as it follows the pointer (backdrop filter, chromatic rim).\n * - `brushed-metal` (card) — fine brushed lines with an anisotropic sheen\n * that turns with the pointer angle.\n * - `pearlescent` (card) — a nacre / holographic film whose hues shift with\n * the pointer position.\n * - `god-rays` (background) — volumetric light shafts from a source point\n * (Canvas 2D, additive).\n * - `pointer-shadow` (hover) — the pointer is the light: the element casts\n * a soft real-time shadow away from it.\n *\n * Reduced motion: surfaces stay lit from a fixed angle (no tracking),\n * `god-rays` draws one still frame.\n */\nimport type { EffectContext, EffectDefinition } from '../fx/registry';\nimport { registerEffects } from '../fx/registry';\nimport { canvasBackground, hexRgb } from '../effects/generative';\nimport { overlay } from '../effects/shared';\n\n/** Track the pointer over `el` as 0–1 coordinates (`fn(x, y, inside)`); starts at (`x0`, `y0`). Returns a remover. */\nexport function trackPointer(el: HTMLElement, ctx: EffectContext, fn: (x: number, y: number, inside: boolean) => void, x0 = 0.3, y0 = 0.25): () => void {\n fn(x0, y0, false);\n if (ctx.reduced) return () => undefined;\n let raf = 0;\n let px = x0;\n let py = y0;\n let inside = false;\n const flush = () => {\n raf = 0;\n fn(px, py, inside);\n };\n const queue = () => {\n if (!raf) raf = typeof requestAnimationFrame === 'function' ? requestAnimationFrame(flush) : (flush(), 0);\n };\n const move = (e: PointerEvent) => {\n const r = el.getBoundingClientRect();\n px = r.width ? Math.min(1, Math.max(0, (e.clientX - r.left) / r.width)) : 0.5;\n py = r.height ? Math.min(1, Math.max(0, (e.clientY - r.top) / r.height)) : 0.5;\n inside = true;\n queue();\n };\n const leave = () => {\n inside = false;\n px = x0;\n py = y0;\n queue();\n };\n el.addEventListener('pointermove', move);\n el.addEventListener('pointerleave', leave);\n return () => {\n if (raf && typeof cancelAnimationFrame === 'function') cancelAnimationFrame(raf);\n el.removeEventListener('pointermove', move);\n el.removeEventListener('pointerleave', leave);\n };\n}\n\nconst rgba = (hex: string, a: number) => {\n const [r, g, b] = hexRgb(hex);\n return `rgba(${r},${g},${b},${a})`;\n};\n\nexport const LIGHT_FX: EffectDefinition[] = [\n {\n name: 'light-follow',\n kind: 'hover',\n reduced: 'run',\n description: 'A soft point light with a specular hot spot follows the pointer over the surface (persistent; `color`, `size` px, `intensity` 0–1).',\n defaults: { color: '#ffffff', size: 260, intensity: 0.55 },\n run: (el: HTMLElement, o: any, ctx: EffectContext) => {\n const [ov, rm] = overlay(el, 'mix-blend-mode:soft-light;transition:opacity .3s;z-index:1');\n const [spec, rm2] = overlay(el, 'mix-blend-mode:screen;z-index:1');\n const stop = trackPointer(el, ctx, (x, y, inside) => {\n const p = `${(x * 100).toFixed(1)}% ${(y * 100).toFixed(1)}%`;\n ov.style.background = `radial-gradient(${o.size}px circle at ${p}, ${rgba(o.color, o.intensity)}, transparent 70%), radial-gradient(${o.size * 2.4}px circle at ${p}, transparent 30%, rgba(0,0,0,${(o.intensity * 0.45).toFixed(2)}))`;\n spec.style.background = `radial-gradient(${Math.round(o.size / 5)}px circle at ${p}, ${rgba(o.color, inside ? o.intensity * 0.7 : o.intensity * 0.35)}, transparent 70%)`;\n el.style.setProperty('--usa-lx', x.toFixed(3));\n el.style.setProperty('--usa-ly', y.toFixed(3));\n });\n return () => {\n stop();\n rm();\n rm2();\n };\n },\n },\n {\n name: 'refraction',\n kind: 'hover',\n reduced: 'run',\n description: 'A glass lens bends and magnifies what is behind it while following the pointer (persistent; `size` px, `blur`, `rim` color). Uses backdrop-filter.',\n defaults: { size: 120, blur: 1.5, zoom: 1.12, rim: '#9be7ff' },\n run: (el: HTMLElement, o: any, ctx: EffectContext) => {\n if (getComputedStyle(el).position === 'static') el.style.position = 'relative';\n const lens = document.createElement('span');\n lens.setAttribute('aria-hidden', 'true');\n const s = Number(o.size) || 120;\n lens.style.cssText = `position:absolute;left:0;top:0;width:${s}px;height:${s}px;border-radius:50%;pointer-events:none;z-index:2;` +\n `-webkit-backdrop-filter:blur(${o.blur}px) saturate(1.6) contrast(1.08) brightness(1.08);backdrop-filter:blur(${o.blur}px) saturate(1.6) contrast(1.08) brightness(1.08);` +\n `box-shadow:inset 0 0 0 1px rgba(255,255,255,.55),inset 6px 8px 14px rgba(255,255,255,.45),inset -8px -10px 18px ${rgba(o.rim, 0.45)},0 10px 30px -8px rgba(0,0,0,.35);` +\n `background:radial-gradient(circle at 32% 28%,rgba(255,255,255,.55),rgba(255,255,255,0) 32%),radial-gradient(circle at 70% 78%,${rgba(o.rim, 0.25)},transparent 45%);transform-origin:50% 50%;will-change:transform;transition:opacity .25s`;\n el.appendChild(lens);\n const stop = trackPointer(el, ctx, (x, y, inside) => {\n const w = el.clientWidth;\n const h = el.clientHeight;\n lens.style.transform = `translate(${(x * w - s / 2).toFixed(1)}px,${(y * h - s / 2).toFixed(1)}px) scale(${inside ? o.zoom : 1})`;\n lens.style.opacity = inside || ctx.reduced ? '1' : '.85';\n }, 0.5, 0.5);\n return () => {\n stop();\n lens.remove();\n };\n },\n },\n {\n name: 'brushed-metal',\n kind: 'card',\n reduced: 'run',\n description: 'Fine brushed-metal lines with an anisotropic sheen that turns with the pointer angle (persistent; `tint`, `lines` px).',\n defaults: { tint: '#cbd5e1', lines: 2 },\n run: (el: HTMLElement, o: any, ctx: EffectContext) => {\n const l = Math.max(1, Number(o.lines) || 2);\n const [grain, rm] = overlay(el, `z-index:0;opacity:.55;mix-blend-mode:overlay;background:repeating-linear-gradient(90deg,rgba(255,255,255,.18) 0 1px,rgba(0,0,0,.12) 1px ${l}px,rgba(255,255,255,.06) ${l}px ${l * 2 + 1}px),linear-gradient(180deg,${rgba(o.tint, 0.9)},${rgba(o.tint, 0.55)})`);\n const [sheen, rm2] = overlay(el, 'z-index:1;mix-blend-mode:soft-light');\n const stop = trackPointer(el, ctx, (x, y) => {\n const ang = Math.atan2(y - 0.5, x - 0.5) * (180 / Math.PI) + 90;\n sheen.style.background = `conic-gradient(from ${ang.toFixed(1)}deg at ${(x * 100).toFixed(1)}% ${(y * 100).toFixed(1)}%, rgba(255,255,255,.75), rgba(0,0,0,.35) 25%, rgba(255,255,255,.6) 50%, rgba(0,0,0,.35) 75%, rgba(255,255,255,.75))`;\n });\n void grain;\n return () => {\n stop();\n rm();\n rm2();\n };\n },\n },\n {\n name: 'pearlescent',\n kind: 'card',\n reduced: 'run',\n description: 'A nacre / holographic film whose hues shift with the pointer position (persistent; `strength` 0–1).',\n defaults: { strength: 0.6 },\n run: (el: HTMLElement, o: any, ctx: EffectContext) => {\n const [film, rm] = overlay(el, `z-index:1;mix-blend-mode:color-dodge;opacity:${o.strength}`);\n const [gloss, rm2] = overlay(el, 'z-index:1;mix-blend-mode:soft-light');\n const stop = trackPointer(el, ctx, (x, y) => {\n const hue = Math.round((x * 0.7 + y * 0.3) * 360);\n film.style.background = `linear-gradient(${Math.round(115 + x * 50)}deg, hsla(${hue},90%,70%,.55), hsla(${hue + 60},90%,75%,.35) 25%, hsla(${hue + 140},85%,70%,.5) 50%, hsla(${hue + 220},90%,75%,.35) 75%, hsla(${hue + 300},90%,70%,.55))`;\n film.style.backgroundSize = '220% 220%';\n film.style.backgroundPosition = `${(x * 100).toFixed(1)}% ${(y * 100).toFixed(1)}%`;\n gloss.style.background = `radial-gradient(80% 60% at ${(x * 100).toFixed(1)}% ${(y * 100).toFixed(1)}%, rgba(255,255,255,.65), transparent 60%)`;\n });\n return () => {\n stop();\n rm();\n rm2();\n };\n },\n },\n {\n name: 'god-rays',\n kind: 'background',\n reduced: 'run',\n description: 'Volumetric light shafts fan out from a source point and slowly sweep (Canvas 2D, additive; `color`, `rays`, `x` / `y` source 0–1).',\n defaults: { color: '#ffe7a3', background: '#0b1020', rays: 14, x: 0.5, y: -0.1, speed: 1, quality: 1 },\n run: (el: HTMLElement, o: any, ctx: EffectContext) => {\n const stop = canvasBackground(el, ctx, {\n init: () => ({ seeds: Array.from({ length: Math.max(3, o.rays | 0) }, (_, i) => ({ a: (i / o.rays) * 1.6 - 0.8 + Math.random() * 0.08, w: 0.03 + Math.random() * 0.06, p: Math.random() * 6.28 })) }),\n draw: ({ ctx: g, w, h, t, state }) => {\n g.globalCompositeOperation = 'source-over';\n g.fillStyle = o.background;\n g.fillRect(0, 0, w, h);\n const sx = o.x * w;\n const sy = o.y * h;\n const len = Math.hypot(w, h) * 1.2;\n const [r, gg, b] = hexRgb(o.color);\n g.globalCompositeOperation = 'lighter';\n for (const s of state.seeds) {\n const a = Math.PI / 2 + s.a + Math.sin(t * 0.25 * o.speed + s.p) * 0.08;\n const alpha = 0.1 + 0.08 * Math.sin(t * 0.8 * o.speed + s.p * 2);\n const grad = g.createLinearGradient(sx, sy, sx + Math.cos(a) * len, sy + Math.sin(a) * len);\n grad.addColorStop(0, `rgba(${r},${gg},${b},${(alpha * 2).toFixed(3)})`);\n grad.addColorStop(1, `rgba(${r},${gg},${b},0)`);\n g.fillStyle = grad;\n g.beginPath();\n g.moveTo(sx, sy);\n g.lineTo(sx + Math.cos(a - s.w) * len, sy + Math.sin(a - s.w) * len);\n g.lineTo(sx + Math.cos(a + s.w) * len, sy + Math.sin(a + s.w) * len);\n g.closePath();\n g.fill();\n }\n const glow = g.createRadialGradient(sx, sy, 0, sx, sy, Math.max(w, h) * 0.45);\n glow.addColorStop(0, `rgba(${r},${gg},${b},.45)`);\n glow.addColorStop(1, `rgba(${r},${gg},${b},0)`);\n g.fillStyle = glow;\n g.fillRect(0, 0, w, h);\n g.globalCompositeOperation = 'source-over';\n },\n }, o);\n ctx.onCleanup(stop);\n return stop;\n },\n },\n {\n name: 'pointer-shadow',\n kind: 'hover',\n reduced: 'run',\n description: 'The pointer is the light: the element casts a soft real-time shadow away from it (persistent; `depth` px, `blur`, `color`).',\n defaults: { depth: 22, blur: 18, color: 'rgba(15,23,42,.38)' },\n run: (el: HTMLElement, o: any, ctx: EffectContext) => {\n const prev = el.style.filter;\n const stop = trackPointer(el, ctx, (x, y, inside) => {\n const dx = (0.5 - x) * 2 * o.depth;\n const dy = (0.5 - y) * 2 * o.depth;\n const k = inside ? 1 : 0.6;\n el.style.filter = `drop-shadow(${(dx * k).toFixed(1)}px ${(dy * k + 4).toFixed(1)}px ${o.blur}px ${o.color})`;\n }, 0.35, 0.2);\n return () => {\n stop();\n el.style.filter = prev;\n };\n },\n },\n];\n\n/** Register the 6.4 light & materials pack (idempotent). */\nexport function registerLightEffects(): void {\n registerEffects(LIGHT_FX);\n}\n","/**\n * 6.5 — 3D scene cards (`motionary/components/fx-3d`), registered through\n * `registerEffect()`:\n *\n * - `depth-stack` (card, persistent) — the children (or `[data-depth]`\n * layers) separate in Z and parallax against each other as the card tilts\n * toward the pointer.\n * - `product-spin` (card, persistent) — a 360° product viewer: drag to turn\n * the element in 3D with inertia, idles with a slow turntable spin.\n * - `card-flip-3d` (click) — a thick card flips to its back face (second\n * child) with an edge that shows its depth.\n * - `origami` (enter) — the element unfolds panel by panel like folded paper.\n * - `orbit-camera` (scroll, persistent) — while the element scrolls through\n * the viewport the camera orbits its 3D children.\n *\n * Reduced motion: no tilt, spin, orbit or fold; the flip swaps faces with a\n * crossfade.\n */\nimport type { EffectContext, EffectDefinition } from '../fx/registry';\nimport { registerEffects } from '../fx/registry';\nimport { all } from '../effects/shared';\nimport { trackPointer } from './light';\n\nconst layers = (el: HTMLElement): HTMLElement[] => {\n const marked = Array.from(el.querySelectorAll<HTMLElement>('[data-depth]'));\n return marked.length ? marked : (Array.from(el.children) as HTMLElement[]);\n};\n\nconst raf = (f: FrameRequestCallback): number => (typeof requestAnimationFrame === 'function' ? requestAnimationFrame(f) : 0);\nconst caf = (h: number): void => {\n if (h && typeof cancelAnimationFrame === 'function') cancelAnimationFrame(h);\n};\n\nexport const DEPTH3_FX: EffectDefinition[] = [\n {\n name: 'depth-stack',\n kind: 'card',\n reduced: 'run',\n description: 'The children (or `[data-depth]` layers) separate in Z and parallax as the card tilts toward the pointer (persistent; `tilt` deg, `depth` px between layers).',\n defaults: { tilt: 14, depth: 28 },\n run: (el: HTMLElement, o: any, ctx: EffectContext) => {\n const prev = [el.style.transform, el.style.transformStyle, el.style.transition];\n el.style.transformStyle = 'preserve-3d';\n el.style.transition = 'transform .25s ease-out';\n const ls = layers(el);\n const saved = ls.map((l) => [l.style.transform, l.style.transition] as const);\n ls.forEach((l) => (l.style.transition = 'transform .3s ease-out'));\n const stop = trackPointer(el, ctx, (x, y, inside) => {\n const rx = (0.5 - y) * 2 * o.tilt;\n const ry = (x - 0.5) * 2 * o.tilt;\n el.style.transform = ctx.reduced ? '' : inside ? `perspective(800px) rotateX(${rx.toFixed(2)}deg) rotateY(${ry.toFixed(2)}deg)` : 'perspective(800px) rotateX(6deg) rotateY(-8deg)';\n ls.forEach((l, i) => {\n const d = ctx.reduced ? 0 : Number(l.dataset.depth || i + 1) * o.depth * (inside ? 1 : 0.5);\n l.style.transform = `translateZ(${d.toFixed(1)}px)`;\n });\n }, 0.5, 0.5);\n return () => {\n stop();\n [el.style.transform, el.style.transformStyle, el.style.transition] = prev;\n ls.forEach((l, i) => ([l.style.transform, l.style.transition] = saved[i]));\n };\n },\n },\n {\n name: 'product-spin',\n kind: 'card',\n description: 'A 360° product viewer: drag to turn the element in 3D with inertia; idles with a slow turntable spin (persistent; `idle` deg/s, `friction`, `tilt`).',\n defaults: { idle: 18, friction: 0.94, tilt: -8 },\n run: (el: HTMLElement, o: any, ctx: EffectContext) => {\n const prev = [el.style.transform, el.style.touchAction, el.style.cursor];\n el.style.touchAction = 'pan-y';\n el.style.cursor = 'grab';\n let a = 0;\n let v = 0;\n let drag = false;\n let lx = 0;\n let h = 0;\n let last = performance.now();\n const paint = () => (el.style.transform = `perspective(900px) rotateX(${o.tilt}deg) rotateY(${a.toFixed(2)}deg)`);\n paint();\n const tick = (now: number) => {\n const dt = Math.min(64, now - last) / 1000;\n last = now;\n if (!drag) {\n v *= o.friction;\n a += v * dt + (Math.abs(v) < 4 ? o.idle * dt : 0);\n }\n paint();\n h = raf(tick);\n };\n h = raf(tick);\n const down = (e: PointerEvent) => {\n drag = true;\n lx = e.clientX;\n v = 0;\n el.style.cursor = 'grabbing';\n el.setPointerCapture?.(e.pointerId);\n };\n const move = (e: PointerEvent) => {\n if (!drag) return;\n const dx = e.clientX - lx;\n lx = e.clientX;\n a += dx * 0.6;\n v = dx * 36;\n };\n const up = () => {\n drag = false;\n el.style.cursor = 'grab';\n };\n el.addEventListener('pointerdown', down);\n el.addEventListener('pointermove', move);\n el.addEventListener('pointerup', up);\n el.addEventListener('pointercancel', up);\n return () => {\n caf(h);\n el.removeEventListener('pointerdown', down);\n el.removeEventListener('pointermove', move);\n el.removeEventListener('pointerup', up);\n el.removeEventListener('pointercancel', up);\n [el.style.transform, el.style.touchAction, el.style.cursor] = prev;\n };\n },\n },\n {\n name: 'card-flip-3d',\n kind: 'click',\n description: 'A thick card flips to its back face (second child) and back, showing its edge (`duration`, `axis` y | x). The faces swap `aria-hidden`.',\n defaults: { duration: 800, axis: 'y', thickness: 6 },\n run: (el: HTMLElement, o: any, ctx: EffectContext) => {\n const [front, back] = Array.from(el.children) as HTMLElement[];\n if (!front || !back) return null;\n const R = o.axis === 'x' ? 'rotateX' : 'rotateY';\n if (!el.dataset.usaFlip) {\n el.dataset.usaFlip = 'front';\n el.style.display = 'grid';\n el.style.transformStyle = 'preserve-3d';\n for (const f of [front, back]) {\n f.style.gridArea = '1 / 1';\n f.style.backfaceVisibility = 'hidden';\n }\n back.setAttribute('aria-hidden', 'true');\n back.style.transform = `${R}(180deg)`;\n }\n const toBack = el.dataset.usaFlip === 'front';\n el.dataset.usaFlip = toBack ? 'back' : 'front';\n front.setAttribute('aria-hidden', String(toBack));\n back.setAttribute('aria-hidden', String(!toBack));\n const from = toBack ? 0 : 180;\n const to = toBack ? 180 : 0;\n el.style.transform = `perspective(1000px) ${R}(${to}deg)`;\n if (ctx.reduced) return ctx.animate(toBack ? back : front, [{ opacity: 0 }, { opacity: 1 }], { duration: 200 });\n return ctx.animate(el, [\n { transform: `perspective(1000px) ${R}(${from}deg) scale(1)` },\n { transform: `perspective(1000px) ${R}(${(from + to) / 2}deg) scale(1.08) translateZ(${o.thickness * 4}px)`, offset: 0.5 },\n { transform: `perspective(1000px) ${R}(${to}deg) scale(1)` },\n ], { duration: o.duration, easing: 'cubic-bezier(.45,.05,.25,1)' });\n },\n },\n {\n name: 'origami',\n kind: 'enter',\n description: 'The element unfolds panel by panel like folded paper (`panels`, `duration` per fold). Uses clipped copies during the fold.',\n defaults: { panels: 4, duration: 420 },\n reduced: 'skip',\n run: (el: HTMLElement, o: any, ctx: EffectContext) => {\n if (el.dataset.usaOrigami) return null;\n el.dataset.usaOrigami = '1';\n const n = Math.max(2, Math.min(8, Math.round(o.panels)));\n if (getComputedStyle(el).position === 'static') el.style.position = 'relative';\n const prevVis = el.style.visibility;\n const wrap = document.createElement('div');\n wrap.setAttribute('aria-hidden', 'true');\n wrap.style.cssText = 'position:absolute;inset:0;pointer-events:none;perspective:900px;visibility:visible';\n const anims: (Animation | null)[] = [];\n for (let i = 0; i < n; i++) {\n const slice = el.cloneNode(true) as HTMLElement;\n slice.removeAttribute('id');\n slice.querySelectorAll('[id]').forEach((x) => x.removeAttribute('id'));\n const top = (i / n) * 100;\n const bottom = 100 - ((i + 1) / n) * 100;\n slice.style.cssText += `;position:absolute;inset:0;margin:0;width:100%;height:100%;box-sizing:border-box;clip-path:inset(${top}% 0 ${bottom}% 0);transform-origin:50% ${top}%;visibility:visible`;\n wrap.appendChild(slice);\n const dir = i % 2 ? 1 : -1;\n anims.push(ctx.animate(slice, [\n { transform: `rotateX(${dir * 92}deg)`, filter: 'brightness(.55)', opacity: 0 },\n { opacity: 1, offset: 0.15 },\n { transform: 'rotateX(0)', filter: 'brightness(1)', opacity: 1 },\n ], { duration: o.duration, delay: i * o.duration * 0.55, easing: 'cubic-bezier(.3,.7,.3,1)', fill: 'backwards' }));\n }\n el.style.visibility = 'hidden';\n el.appendChild(wrap);\n const done = () => {\n wrap.remove();\n el.style.visibility = prevVis;\n delete el.dataset.usaOrigami;\n };\n return all(anims).then(done, done);\n },\n },\n {\n name: 'orbit-camera',\n kind: 'scroll',\n description: 'While the element scrolls through the viewport the camera orbits its 3D children (persistent; `range` deg of orbit, `tilt`, `depth` px between layers).',\n defaults: { range: 70, tilt: 10, depth: 60 },\n run: (el: HTMLElement, o: any, ctx: EffectContext) => {\n const prev = [el.style.transform, el.style.transformStyle];\n const ls = layers(el);\n el.style.transformStyle = 'preserve-3d';\n if (!ctx.reduced) ls.forEach((l, i) => (l.style.transform = `translateZ(${((i - (ls.length - 1) / 2) * o.depth).toFixed(0)}px)`));\n let h = 0;\n const paint = () => {\n h = 0;\n const r = el.getBoundingClientRect();\n const vh = window.innerHeight || 800;\n const p = Math.min(1, Math.max(0, (vh - r.top) / (vh + r.height)));\n el.style.setProperty('--usa-orbit', p.toFixed(3));\n if (!ctx.reduced) el.style.transform = `perspective(1000px) rotateX(${o.tilt}deg) rotateY(${((p - 0.5) * o.range).toFixed(2)}deg)`;\n };\n paint();\n const on = () => {\n if (!h) h = raf(paint);\n };\n if (!ctx.reduced) {\n window.addEventListener('scroll', on, { passive: true });\n window.addEventListener('resize', on);\n }\n return () => {\n caf(h);\n window.removeEventListener('scroll', on);\n window.removeEventListener('resize', on);\n [el.style.transform, el.style.transformStyle] = prev;\n ls.forEach((l) => (l.style.transform = ''));\n };\n },\n },\n];\n\n/** Register the 6.5 3D pack (idempotent). */\nexport function register3dEffects(): void {\n registerEffects(DEPTH3_FX);\n}\n","/**\n * 6.6 — Morph & SVG 2.0 (`motionary/components/fx-morph`), registered\n * through `registerEffect()`:\n *\n * - `path-morph` (loop) — an SVG `<path>` flows between shapes (`paths`, any\n * number of `d` strings): both shapes are resampled to the same number of\n * points, so paths with different commands still morph smoothly.\n * - `blob-button` (hover, persistent) — a liquid blob behind the element\n * wobbles and bulges toward the pointer.\n * - `stroke-draw` (enter) — every stroke in an inline SVG draws itself,\n * staggered, then the fills fade in.\n * - `noise-reveal` (enter) — the element condenses out of SVG turbulence\n * (displacement + blur) — an SVG-filter transition.\n * - `icon-swap` (click) — cycles through the element's child icons with a\n * gooey morph (blur + scale + rotate crossfade).\n *\n * Reduced motion: no loops / wobble; enter effects and swaps fade.\n */\nimport type { EffectContext, EffectDefinition } from '../fx/registry';\nimport { registerEffects } from '../fx/registry';\nimport { all } from '../effects/shared';\n\nconst NS = 'http://www.w3.org/2000/svg';\nconst raf = (f: FrameRequestCallback): number => (typeof requestAnimationFrame === 'function' ? requestAnimationFrame(f) : 0);\nconst caf = (h: number): void => {\n if (h && typeof cancelAnimationFrame === 'function') cancelAnimationFrame(h);\n};\n\n/** Sample `d` into `n` points (needs SVG geometry support; `null` without it). */\nexport function samplePath(d: string, n = 64): [number, number][] | null {\n const p = document.createElementNS(NS, 'path') as SVGPathElement;\n p.setAttribute('d', d);\n const svg = document.createElementNS(NS, 'svg');\n svg.setAttribute('aria-hidden', 'true');\n svg.style.cssText = 'position:absolute;width:0;height:0;overflow:hidden';\n svg.appendChild(p);\n document.body.appendChild(svg);\n try {\n if (typeof p.getTotalLength !== 'function') return null;\n const L = p.getTotalLength();\n if (!L) return null;\n const out: [number, number][] = [];\n for (let i = 0; i < n; i++) {\n const pt = p.getPointAtLength((i / n) * L);\n out.push([pt.x, pt.y]);\n }\n return out;\n } catch {\n return null;\n } finally {\n svg.remove();\n }\n}\n\n/** Points → closed path `d`. */\nexport const pointsToPath = (pts: [number, number][]): string => (pts.length ? `M${pts.map(([x, y]) => `${x.toFixed(2)} ${y.toFixed(2)}`).join('L')}Z` : '');\n\n/** Rotate `b` so its start point is the one closest to `a[0]` (less twisting). */\nfunction align(a: [number, number][], b: [number, number][]): [number, number][] {\n let best = 0;\n let bd = Infinity;\n for (let i = 0; i < b.length; i++) {\n const d = (b[i][0] - a[0][0]) ** 2 + (b[i][1] - a[0][1]) ** 2;\n if (d < bd) {\n bd = d;\n best = i;\n }\n }\n return b.slice(best).concat(b.slice(0, best));\n}\n\nconst ease = (t: number) => (t < 0.5 ? 4 * t * t * t : 1 - Math.pow(-2 * t + 2, 3) / 2);\n\nexport const MORPH2_FX: EffectDefinition[] = [\n {\n name: 'path-morph',\n kind: 'loop',\n description: 'An SVG `<path>` flows between shapes (`paths`: `d` strings; `duration` per shape, `hold` ms). Shapes are resampled, so any two paths morph.',\n defaults: { paths: [] as string[], duration: 1200, hold: 600, points: 72 },\n run: (el: HTMLElement, o: any) => {\n const path = ((el as Element).localName === 'path' ? el : el.querySelector('path')) as unknown as SVGPathElement | null;\n if (!path) return;\n const ds: string[] = [path.getAttribute('d') || '', ...(o.paths || [])].filter(Boolean);\n const shapes = ds.map((d) => samplePath(d, o.points)).filter(Boolean) as [number, number][][];\n if (shapes.length < 2) return;\n for (let i = 1; i < shapes.length; i++) shapes[i] = align(shapes[i - 1], shapes[i]);\n const orig = path.getAttribute('d');\n let i = 0;\n let t0 = performance.now();\n let h = 0;\n const tick = (now: number) => {\n const a = shapes[i % shapes.length];\n const b = shapes[(i + 1) % shapes.length];\n const k = Math.min(1, Math.max(0, (now - t0) / o.duration));\n const e = ease(k);\n path.setAttribute('d', pointsToPath(a.map(([x, y], j) => [x + (b[j][0] - x) * e, y + (b[j][1] - y) * e])));\n if (now - t0 > o.duration + o.hold) {\n i++;\n t0 = now;\n }\n h = raf(tick);\n };\n h = raf(tick);\n return () => {\n caf(h);\n if (orig !== null) path.setAttribute('d', orig);\n };\n },\n },\n {\n name: 'blob-button',\n kind: 'hover',\n reduced: 'run',\n description: 'A liquid blob behind the element wobbles and bulges toward the pointer (persistent; `color`, `wobble` 0–1, `bulge` px).',\n defaults: { color: '#7c5cff', wobble: 0.5, bulge: 10, points: 10 },\n run: (el: HTMLElement, o: any, ctx: EffectContext) => {\n if (getComputedStyle(el).position === 'static') el.style.position = 'relative';\n const prevZ = el.style.isolation;\n el.style.isolation = 'isolate';\n const svg = document.createElementNS(NS, 'svg');\n svg.setAttribute('aria-hidden', 'true');\n svg.setAttribute('width', '100%');\n svg.setAttribute('height', '100%');\n svg.style.cssText = 'position:absolute;inset:-14px;width:calc(100% + 28px);height:calc(100% + 28px);z-index:-1;pointer-events:none;overflow:visible';\n const path = document.createElementNS(NS, 'path');\n path.setAttribute('fill', o.color);\n svg.appendChild(path);\n el.prepend(svg);\n const n = Math.max(6, o.points | 0);\n let px = 0.5;\n let py = 0.5;\n let hover = 0;\n let target = 0;\n let h = 0;\n const t0 = performance.now();\n const draw = (now: number) => {\n const w = el.offsetWidth + 28 || 128;\n const hh = el.offsetHeight + 28 || 72;\n const t = ctx.reduced ? 0 : (now - t0) / 1000;\n hover += (target - hover) * 0.12;\n const pts: [number, number][] = [];\n for (let i = 0; i < n; i++) {\n const a = (i / n) * Math.PI * 2;\n const cx = Math.cos(a);\n const cy = Math.sin(a);\n const toward = Math.max(0, cx * (px - 0.5) * 2 + cy * (py - 0.5) * 2);\n const r = 1 + (ctx.reduced ? 0 : o.wobble * 0.06 * Math.sin(t * 2.2 + i * 1.7)) + (toward * o.bulge * hover) / Math.min(w, hh);\n pts.push([w / 2 + cx * (w / 2 - 12) * r, hh / 2 + cy * (hh / 2 - 12) * r]);\n }\n // smooth closed curve through the points (Catmull-Rom → cubic Bézier)\n let d = `M${pts[0][0].toFixed(1)} ${pts[0][1].toFixed(1)}`;\n for (let i = 0; i < n; i++) {\n const p0 = pts[(i - 1 + n) % n];\n const p1 = pts[i];\n const p2 = pts[(i + 1) % n];\n const p3 = pts[(i + 2) % n];\n d += `C${(p1[0] + (p2[0] - p0[0]) / 6).toFixed(1)} ${(p1[1] + (p2[1] - p0[1]) / 6).toFixed(1)} ${(p2[0] - (p3[0] - p1[0]) / 6).toFixed(1)} ${(p2[1] - (p3[1] - p1[1]) / 6).toFixed(1)} ${p2[0].toFixed(1)} ${p2[1].toFixed(1)}`;\n }\n path.setAttribute('d', d + 'Z');\n h = !ctx.reduced && (target || Math.abs(hover) > 0.01 || o.wobble) ? raf(draw) : 0;\n };\n const kick = () => {\n if (!h) h = raf(draw);\n };\n const move = (e: PointerEvent) => {\n const r = el.getBoundingClientRect();\n px = r.width ? (e.clientX - r.left) / r.width : 0.5;\n py = r.height ? (e.clientY - r.top) / r.height : 0.5;\n target = 1;\n kick();\n };\n const leave = () => {\n target = 0;\n kick();\n };\n draw(t0);\n el.addEventListener('pointermove', move);\n el.addEventListener('pointerleave', leave);\n return () => {\n caf(h);\n el.removeEventListener('pointermove', move);\n el.removeEventListener('pointerleave', leave);\n svg.remove();\n el.style.isolation = prevZ;\n };\n },\n },\n {\n name: 'stroke-draw',\n kind: 'enter',\n description: 'Every stroke of an inline SVG draws itself, staggered, then the fills fade in (`duration`, `stagger`).',\n defaults: { duration: 1200, stagger: 120 },\n run: (el: HTMLElement, o: any, ctx: EffectContext) => {\n const shapes = Array.from(el.querySelectorAll<SVGGeometryElement>('path, line, polyline, polygon, circle, ellipse, rect'));\n return all(shapes.map((s, i) => {\n let L = 0;\n try {\n L = typeof s.getTotalLength === 'function' ? s.getTotalLength() : 0;\n } catch {\n L = 0;\n }\n if (ctx.reduced || !L) return ctx.animate(s, [{ opacity: 0 }, { opacity: 1 }], { duration: 300, delay: i * 40, fill: 'backwards' });\n const fill = getComputedStyle(s).fillOpacity || '1';\n return ctx.animate(s, [\n { strokeDasharray: `${L}`, strokeDashoffset: `${L}`, fillOpacity: 0 },\n { strokeDasharray: `${L}`, strokeDashoffset: '0', fillOpacity: 0, offset: 0.75 },\n { strokeDasharray: `${L}`, strokeDashoffset: '0', fillOpacity: fill },\n ], { duration: o.duration, delay: i * o.stagger, easing: 'ease-in-out', fill: 'backwards' });\n }));\n },\n },\n {\n name: 'noise-reveal',\n kind: 'enter',\n description: 'The element condenses out of SVG turbulence — displacement and blur settle to zero (`duration`, `strength`). An SVG-filter transition.',\n defaults: { duration: 1100, strength: 60 },\n run: (el: HTMLElement, o: any, ctx: EffectContext) => {\n if (ctx.reduced) return ctx.animate(el, [{ opacity: 0 }, { opacity: 1 }], { duration: 300 });\n const id = `usa-noise-${Math.random().toString(36).slice(2, 8)}`;\n const svg = document.createElementNS(NS, 'svg');\n svg.setAttribute('aria-hidden', 'true');\n svg.setAttribute('width', '0');\n svg.setAttribute('height', '0');\n svg.style.cssText = 'position:absolute;width:0;height:0;overflow:hidden';\n svg.innerHTML = `<filter id=\"${id}\" x=\"-20%\" y=\"-20%\" width=\"140%\" height=\"140%\"><feTurbulence type=\"fractalNoise\" baseFrequency=\"0.035\" numOctaves=\"2\" result=\"n\"/><feDisplacementMap in=\"SourceGraphic\" in2=\"n\" scale=\"${o.strength}\" xChannelSelector=\"R\" yChannelSelector=\"G\"/><feGaussianBlur stdDeviation=\"0\"/></filter>`;\n document.body.appendChild(svg);\n const disp = svg.querySelector('feDisplacementMap');\n const blur = svg.querySelector('feGaussianBlur');\n const prev = el.style.filter;\n el.style.filter = `url(#${id})`;\n const fade = ctx.animate(el, [{ opacity: 0 }, { opacity: 1, offset: 0.4 }, { opacity: 1 }], { duration: o.duration, easing: 'ease-out' });\n const t0 = performance.now();\n return new Promise<void>((done) => {\n const end = () => {\n el.style.filter = prev;\n svg.remove();\n done();\n };\n const tick = (now: number) => {\n const k = Math.min(1, (now - t0) / o.duration);\n const e = 1 - Math.pow(1 - k, 3);\n disp?.setAttribute('scale', ((1 - e) * o.strength).toFixed(2));\n blur?.setAttribute('stdDeviation', ((1 - e) * 4).toFixed(2));\n if (k < 1) raf(tick);\n else end();\n };\n if (!raf(tick)) (fade ? fade.finished.then(end, end) : end());\n });\n },\n },\n {\n name: 'icon-swap',\n kind: 'click',\n description: 'Cycles through the element\\'s child icons with a gooey morph — blur, scale and rotate crossfade (`duration`). The visible icon is the only one not `aria-hidden`.',\n defaults: { duration: 420 },\n run: (el: HTMLElement, o: any, ctx: EffectContext) => {\n const icons = Array.from(el.children) as HTMLElement[];\n if (icons.length < 2) return null;\n if (!el.dataset.usaSwap) {\n el.dataset.usaSwap = '0';\n el.style.display = el.style.display || 'inline-grid';\n icons.forEach((ic, i) => {\n ic.style.gridArea = '1 / 1';\n ic.style.opacity = i ? '0' : '1';\n ic.setAttribute('aria-hidden', String(i !== 0));\n });\n }\n const cur = Number(el.dataset.usaSwap) || 0;\n const nxt = (cur + 1) % icons.length;\n el.dataset.usaSwap = String(nxt);\n const a = icons[cur];\n const b = icons[nxt];\n a.setAttribute('aria-hidden', 'true');\n b.setAttribute('aria-hidden', 'false');\n a.style.opacity = '0';\n b.style.opacity = '1';\n if (ctx.reduced) return all([ctx.animate(a, [{ opacity: 1 }, { opacity: 0 }], { duration: 150 }), ctx.animate(b, [{ opacity: 0 }, { opacity: 1 }], { duration: 150 })]);\n return all([\n ctx.animate(a, [{ opacity: 1, transform: 'none', filter: 'blur(0)' }, { opacity: 0, transform: 'scale(.3) rotate(-90deg)', filter: 'blur(6px)' }], { duration: o.duration, easing: 'cubic-bezier(.5,0,.75,0)' }),\n ctx.animate(b, [{ opacity: 0, transform: 'scale(.3) rotate(90deg)', filter: 'blur(6px)' }, { opacity: 1, transform: 'scale(1.15) rotate(-8deg)', filter: 'blur(0)', offset: 0.7 }, { opacity: 1, transform: 'none', filter: 'blur(0)' }], { duration: o.duration * 1.3, easing: 'cubic-bezier(.2,.8,.3,1.2)' }),\n ]);\n },\n },\n];\n\n/** Register the 6.6 morph & SVG pack (idempotent). */\nexport function registerMorphEffects2(): void {\n registerEffects(MORPH2_FX);\n}\n","/**\n * 6.7 — Transitions 2.0 (`motionary/components/fx-transitions`), registered\n * through `registerEffect()` (kind `page`; option `mode: 'in' | 'out'`):\n *\n * - `ripple-dissolve` — a circle with a ripple ring grows from the pointer\n * (or `x` / `y` 0–1) and reveals / hides the element.\n * - `shatter` — the element breaks into shards that fly apart (out) or\n * fly together (in).\n * - `mosaic-flip` — a grid of tiles flips over in a diagonal wave.\n * - `liquid-wipe` — a wavy liquid edge sweeps across.\n * - `page-curl` — the element turns like a page around its left edge.\n * - `camera-dolly` — a dolly zoom: scale + depth blur + fade.\n *\n * `pageTransition(update, effect)` runs a DOM update inside the View\n * Transitions API (when available) and plays the effect on the new snapshot;\n * without the API it runs `update()` and plays the effect on `target`.\n * `crossDocumentTransitions(effect)` opts an MPA into cross-document view\n * transitions (`@view-transition { navigation: auto }`) with the same look.\n * Reduced motion: plain short fades.\n */\nimport type { EffectContext, EffectDefinition } from '../fx/registry';\nimport { registerEffects, getEffect } from '../fx/registry';\nimport { prefersReducedMotion } from '../base';\nimport { all, origin } from '../effects/shared';\n\nconst fade = (el: Element, ctx: EffectContext, out: boolean) => ctx.animate(el, out ? [{ opacity: 1 }, { opacity: 0 }] : [{ opacity: 0 }, { opacity: 1 }], { duration: 200, fill: out ? 'forwards' : 'none' });\nconst isOut = (o: any) => o.mode === 'out';\nconst dir = (frames: Keyframe[], out: boolean) => (out ? [...frames].reverse().map((f) => ({ ...f, offset: undefined as unknown as number })).map(({ offset, ...f }) => f) : frames);\n\n/** Clipped copies of `el` laid over it (the original is hidden meanwhile). */\nfunction pieces(el: HTMLElement, clips: string[]): { parts: HTMLElement[]; done: () => void } {\n if (getComputedStyle(el).position === 'static') el.style.position = 'relative';\n const prevVis = el.style.visibility;\n const wrap = document.createElement('div');\n wrap.setAttribute('aria-hidden', 'true');\n wrap.style.cssText = 'position:absolute;inset:0;pointer-events:none;perspective:900px;visibility:visible;z-index:1';\n const parts = clips.map((c) => {\n const p = el.cloneNode(true) as HTMLElement;\n p.removeAttribute('id');\n p.querySelectorAll('[id]').forEach((x) => x.removeAttribute('id'));\n p.style.cssText += `;position:absolute;inset:0;margin:0;width:100%;height:100%;box-sizing:border-box;clip-path:${c};visibility:visible`;\n wrap.appendChild(p);\n return p;\n });\n el.style.visibility = 'hidden';\n el.appendChild(wrap);\n return {\n parts,\n done: () => {\n wrap.remove();\n el.style.visibility = prevVis;\n },\n };\n}\n\nexport const TRANSITIONS2_FX: EffectDefinition[] = [\n {\n name: 'ripple-dissolve',\n kind: 'page',\n description: 'A circle with a ripple ring grows from the pointer (or `x` / `y` 0–1) and reveals (`mode: \"in\"`) or hides (`\"out\"`) the element.',\n defaults: { mode: 'in', duration: 900, x: 0.5, y: 0.5 },\n run: (el: HTMLElement, o: any, ctx: EffectContext) => {\n const out = isOut(o);\n if (ctx.reduced) return fade(el, ctx, out);\n const r = el.getBoundingClientRect();\n const p = ctx.event ? origin(el, ctx) : { x: r.left + r.width * o.x, y: r.top + r.height * o.y };\n const at = `${(p.x - r.left).toFixed(0)}px ${(p.y - r.top).toFixed(0)}px`;\n const f: Keyframe[] = [\n { clipPath: `circle(0% at ${at})`, filter: 'blur(2px)' },\n { clipPath: `circle(38% at ${at})`, filter: 'blur(0)', offset: 0.45 },\n { clipPath: `circle(150% at ${at})`, filter: 'blur(0)' },\n ];\n return ctx.animate(el, out ? [f[2], f[0]] : f, { duration: o.duration, easing: 'cubic-bezier(.6,.05,.3,1)', fill: out ? 'forwards' : 'none' });\n },\n },\n {\n name: 'shatter',\n kind: 'page',\n description: 'The element breaks into shards that fly apart (`mode: \"out\"`) or fly together (`\"in\"`) (`pieces`, `duration`).',\n defaults: { mode: 'out', duration: 900, pieces: 12 },\n run: (el: HTMLElement, o: any, ctx: EffectContext) => {\n const out = isOut(o);\n if (ctx.reduced) return fade(el, ctx, out);\n const n = Math.max(4, Math.min(24, o.pieces | 0));\n const cols = Math.ceil(Math.sqrt(n / 2));\n const rows = Math.ceil(n / 2 / cols);\n const clips: string[] = [];\n for (let r = 0; r < rows; r++)\n for (let c = 0; c < cols; c++) {\n const x0 = (c / cols) * 100;\n const x1 = ((c + 1) / cols) * 100;\n const y0 = (r / rows) * 100;\n const y1 = ((r + 1) / rows) * 100;\n clips.push(`polygon(${x0}% ${y0}%,${x1}% ${y0}%,${x0}% ${y1}%)`, `polygon(${x1}% ${y0}%,${x1}% ${y1}%,${x0}% ${y1}%)`);\n }\n const { parts, done } = pieces(el, clips);\n const anims = parts.map((p, i) => {\n const a = (i * 2.399) % (Math.PI * 2);\n const d = 80 + (i % 5) * 30;\n const scattered = { transform: `translate(${(Math.cos(a) * d).toFixed(0)}px,${(Math.sin(a) * d + 40).toFixed(0)}px) rotate(${((i % 7) - 3) * 35}deg) rotateX(${(i % 3) * 40}deg)`, opacity: 0 };\n const whole = { transform: 'none', opacity: 1 };\n return ctx.animate(p, out ? [whole, scattered] : [scattered, whole], { duration: o.duration, delay: (i % 6) * 25, easing: out ? 'cubic-bezier(.4,0,.9,.6)' : 'cubic-bezier(.1,.6,.3,1)', fill: 'both' });\n });\n return all(anims).then(() => {\n done();\n if (out) el.style.visibility = 'hidden';\n });\n },\n },\n {\n name: 'mosaic-flip',\n kind: 'page',\n description: 'A grid of tiles flips over in a diagonal wave (`cols`, `rows`, `duration` per tile).',\n defaults: { mode: 'in', cols: 6, rows: 4, duration: 520 },\n run: (el: HTMLElement, o: any, ctx: EffectContext) => {\n const out = isOut(o);\n if (ctx.reduced) return fade(el, ctx, out);\n const C = Math.max(2, Math.min(12, o.cols | 0));\n const R = Math.max(2, Math.min(10, o.rows | 0));\n const clips: string[] = [];\n for (let r = 0; r < R; r++) for (let c = 0; c < C; c++) clips.push(`inset(${((r / R) * 100).toFixed(2)}% ${(100 - ((c + 1) / C) * 100).toFixed(2)}% ${(100 - ((r + 1) / R) * 100).toFixed(2)}% ${((c / C) * 100).toFixed(2)}%)`);\n const { parts, done } = pieces(el, clips);\n const anims = parts.map((p, i) => {\n const r = Math.floor(i / C);\n const c = i % C;\n p.style.transformOrigin = `${((c + 0.5) / C) * 100}% ${((r + 0.5) / R) * 100}%`;\n p.style.backfaceVisibility = 'hidden';\n const f: Keyframe[] = [{ transform: 'rotateY(-90deg)', opacity: 0 }, { transform: 'rotateY(0)', opacity: 1 }];\n return ctx.animate(p, out ? [f[1], f[0]] : f, { duration: o.duration, delay: (r + c) * 45, easing: 'cubic-bezier(.3,.7,.3,1)', fill: 'both' });\n });\n return all(anims).then(() => {\n done();\n if (out) el.style.visibility = 'hidden';\n });\n },\n },\n {\n name: 'liquid-wipe',\n kind: 'page',\n description: 'A wavy liquid edge sweeps across the element (`direction` left | right | up | down, `waves`, `duration`).',\n defaults: { mode: 'in', direction: 'right', waves: 3, duration: 1000 },\n run: (el: HTMLElement, o: any, ctx: EffectContext) => {\n const out = isOut(o);\n if (ctx.reduced) return fade(el, ctx, out);\n const N = 24;\n const shape = (k: number) => {\n const pts: string[] = [];\n const amp = 6 * Math.sin(Math.PI * k);\n for (let i = 0; i <= N; i++) {\n const t = (i / N) * 100;\n const edge = k * 120 - 10 + amp * Math.sin((i / N) * Math.PI * 2 * o.waves + k * 6);\n pts.push(o.direction === 'up' || o.direction === 'down' ? `${t.toFixed(1)}% ${(o.direction === 'down' ? edge : 100 - edge).toFixed(1)}%` : `${(o.direction === 'left' ? 100 - edge : edge).toFixed(1)}% ${t.toFixed(1)}%`);\n }\n const tail = o.direction === 'up' ? ['100% 100%', '0% 100%'] : o.direction === 'down' ? ['100% 0%', '0% 0%'] : o.direction === 'left' ? ['100% 100%', '100% 0%'] : ['0% 100%', '0% 0%'];\n if (o.direction === 'up' || o.direction === 'down') return `polygon(${[...pts, ...tail].join(',')})`;\n return `polygon(${[...pts, ...tail].join(',')})`;\n };\n const frames: Keyframe[] = Array.from({ length: 9 }, (_, i) => ({ clipPath: shape(i / 8) }));\n return ctx.animate(el, out ? frames.reverse() : frames, { duration: o.duration, easing: 'cubic-bezier(.65,.05,.35,1)', fill: out ? 'forwards' : 'none' });\n },\n },\n {\n name: 'page-curl',\n kind: 'page',\n description: 'The element turns like a page around its left edge, with a moving shade (`duration`).',\n defaults: { mode: 'in', duration: 900 },\n run: (el: HTMLElement, o: any, ctx: EffectContext) => {\n const out = isOut(o);\n if (ctx.reduced) return fade(el, ctx, out);\n const prev = el.style.transformOrigin;\n el.style.transformOrigin = '0% 50%';\n const f: Keyframe[] = [\n { transform: 'perspective(1400px) rotateY(-100deg) skewY(-4deg)', filter: 'brightness(.55)', boxShadow: '30px 0 40px rgba(0,0,0,.35)', opacity: 0.4 },\n { transform: 'perspective(1400px) rotateY(-40deg) skewY(-2deg)', filter: 'brightness(.8)', boxShadow: '20px 0 30px rgba(0,0,0,.25)', opacity: 1, offset: 0.5 },\n { transform: 'perspective(1400px) rotateY(0) skewY(0)', filter: 'brightness(1)', boxShadow: '0 0 0 rgba(0,0,0,0)', opacity: 1 },\n ];\n const a = ctx.animate(el, dir(f, out), { duration: o.duration, easing: 'cubic-bezier(.45,.05,.3,1)', fill: out ? 'forwards' : 'none' });\n const reset = () => (el.style.transformOrigin = prev);\n if (a) a.finished.then(reset, reset);\n else reset();\n return a;\n },\n },\n {\n name: 'camera-dolly',\n kind: 'page',\n description: 'A dolly zoom: the element moves in from (or out to) depth with a depth-of-field blur (`scale`, `duration`).',\n defaults: { mode: 'in', duration: 900, scale: 1.35 },\n run: (el: HTMLElement, o: any, ctx: EffectContext) => {\n const out = isOut(o);\n if (ctx.reduced) return fade(el, ctx, out);\n const f: Keyframe[] = [\n { transform: `perspective(900px) translateZ(-260px) scale(${o.scale})`, filter: 'blur(10px)', opacity: 0 },\n { transform: 'perspective(900px) translateZ(0) scale(1)', filter: 'blur(0)', opacity: 1 },\n ];\n return ctx.animate(el, out ? [f[1], { ...f[0], transform: `perspective(900px) translateZ(260px) scale(${(1 / o.scale).toFixed(3)})` }] : f, { duration: o.duration, easing: 'cubic-bezier(.2,.7,.2,1)', fill: out ? 'forwards' : 'none' });\n },\n },\n];\n\n/** CSS keyframes for the `::view-transition-new(root)` snapshot of each effect (cross-document transitions). */\nconst VT_CSS: Record<string, string> = {\n 'ripple-dissolve': 'from{clip-path:circle(0% at 50% 50%)}to{clip-path:circle(150% at 50% 50%)}',\n 'liquid-wipe': 'from{clip-path:inset(0 100% 0 0)}to{clip-path:inset(0 0 0 0)}',\n 'page-curl': 'from{transform:perspective(1400px) rotateY(-100deg);transform-origin:0 50%;filter:brightness(.6)}to{transform:none;transform-origin:0 50%}',\n 'camera-dolly': 'from{transform:scale(1.35);filter:blur(10px);opacity:0}to{transform:none;filter:none;opacity:1}',\n 'mosaic-flip': 'from{transform:perspective(900px) rotateY(-90deg);opacity:0}to{transform:none;opacity:1}',\n shatter: 'from{transform:scale(.85) rotate(-3deg);opacity:0;filter:blur(4px)}to{transform:none;opacity:1;filter:none}',\n};\n\n/**\n * Run `update` (a DOM change) as a transition: inside `document.startViewTransition`\n * when supported (the new snapshot plays `effect`), otherwise `update()` then the\n * effect on `target` (default `document.body`'s first element).\n */\nexport async function pageTransition(update: () => void | Promise<void>, effect = 'ripple-dissolve', options: Record<string, unknown> = {}, target?: HTMLElement): Promise<void> {\n const doc = document as Document & { startViewTransition?: (cb: () => unknown) => { ready: Promise<void>; finished: Promise<void> } };\n const def = getEffect(effect);\n if (typeof doc.startViewTransition === 'function' && !prefersReducedMotion()) {\n const vt = doc.startViewTransition(update);\n await vt.ready.catch(() => undefined);\n const css = VT_CSS[effect];\n if (css) {\n const dur = Number(options.duration) || Number(def?.defaults?.duration) || 800;\n const m = /from\\{([^}]*)\\}to\\{([^}]*)\\}/.exec(css);\n const toObj = (s: string) => Object.fromEntries(s.split(';').filter(Boolean).map((d) => { const i = d.indexOf(':'); return [d.slice(0, i).replace(/-([a-z])/g, (_, c) => c.toUpperCase()), d.slice(i + 1)]; }));\n if (m) document.documentElement.animate([toObj(m[1]), toObj(m[2])], { duration: dur, easing: 'cubic-bezier(.6,.05,.3,1)', pseudoElement: '::view-transition-new(root)' } as KeyframeAnimationOptions);\n }\n await vt.finished.catch(() => undefined);\n return;\n }\n await update();\n const el = target || (document.body.firstElementChild as HTMLElement | null);\n if (el && def) {\n const { playEffect } = await import('../fx/registry');\n await playEffect(el, effect, { ...options, mode: 'in' });\n }\n}\n\n/** Opt a multi-page site into cross-document view transitions with an effect's look. Returns a remover. */\nexport function crossDocumentTransitions(effect = 'ripple-dissolve', duration = 700): () => void {\n const style = document.createElement('style');\n style.setAttribute('data-usa-vt', effect);\n const kf = VT_CSS[effect] || VT_CSS['camera-dolly'];\n style.textContent = `@view-transition{navigation:auto}@keyframes usa-vt-in{${kf}}::view-transition-new(root){animation:usa-vt-in ${duration}ms cubic-bezier(.6,.05,.3,1) both}::view-transition-old(root){animation:none}@media (prefers-reduced-motion:reduce){::view-transition-new(root){animation-duration:1ms}}`;\n document.head.appendChild(style);\n return () => style.remove();\n}\n\n/** Register the 6.7 transitions pack (idempotent). */\nexport function registerTransitionEffects2(): void {\n registerEffects(TRANSITIONS2_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';\nimport { TEXT3_FX, registerTextEffects3, splitChars } from './text3';\nimport { LIGHT_FX, registerLightEffects, trackPointer } from './light';\nimport { DEPTH3_FX, register3dEffects } from './depth3';\nimport { MORPH2_FX, registerMorphEffects2, samplePath, pointsToPath } from './morph2';\nimport { TRANSITIONS2_FX, registerTransitionEffects2, pageTransition, crossDocumentTransitions } from './transitions2';\n\nexport { GPU_FX, registerGpuEffects, TEXT3_FX, registerTextEffects3, splitChars };\nexport { shaderBackground, supportsWebGL2, fieldFallback, GLSL_HEAD } from './gl';\nexport type { ShaderSpec } from './gl';\n\nexport { LIGHT_FX, registerLightEffects, trackPointer };\n\nexport { DEPTH3_FX, register3dEffects };\n\nexport { MORPH2_FX, registerMorphEffects2, samplePath, pointsToPath };\n\nexport { TRANSITIONS2_FX, registerTransitionEffects2, pageTransition, crossDocumentTransitions };\n\n/** The 6.x effect packs by name. */\nexport const FX2_PACKS: Record<string, EffectDefinition[]> = {\n gpu: GPU_FX,\n text: TEXT3_FX,\n light: LIGHT_FX,\n depth: DEPTH3_FX,\n morph: MORPH2_FX,\n transitions: TRANSITIONS2_FX,\n};\n\n/** Register every 6.x pack (idempotent). */\nexport function registerFx2(): void {\n registerGpuEffects();\n registerTextEffects3();\n registerLightEffects();\n register3dEffects();\n registerMorphEffects2();\n registerTransitionEffects2();\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","prefersReducedMotion","matchMedia","matches","injected","Set","adoptStyles","id","css","has","document","add","CSSStyleSheet","sheet","replaceSync","adoptedStyleSheets","style","createElement","setAttribute","textContent","head","documentElement","appendChild","baseClass","animateWithMotion","el","keyframes","options","animate","applyFrame","length","frames","level","map","f","out","k","v","Object","entries","test","String","adaptKeyframes","active","maxActive","a","iterations","Infinity","done","end","finished","then","frame","defineElement","tag","make","customElements","HTMLElement","BASE_CSS","text","existing","get","ctor","Base","constructor","this","_cleanups","_connected","reduced","connectedCallback","readyState","nextSibling","childNodes","go","isConnected","mount","addEventListener","once","push","removeEventListener","disconnectedCallback","teardown","attributeChangedCallback","_name","oldValue","value","changed","splice","reverse","forEach","fn","unmount","str","name","fallback","getAttribute","num","n","trim","NaN","Number","isFinite","flag","setFlag","on","removeAttribute","onCleanup","listen","target","type","inView","cb","init","IntersectionObserver","io","e","isIntersecting","observe","disconnect","motion","emit","detail","dispatchEvent","CustomEvent","bubbles","cancelable","getBase","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","arrowIndex","i","vertical","prev","next","key","CAROUSEL_EFFECTS","defineCarousel","_i","_slides","_track","_timer","_hold","_dots","observedAttributes","index","goTo","effect","includes","dataset","toggleAttribute","old","querySelector","firstElementChild","vp","track","append","s","prepend","hasAttribute","tabIndex","dots","role","d","round","layout","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","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","MODAL_EFFECTS","SHEET_SIDES","EASE_OUT","delegated","delegateTriggers","getElementById","show","opened","close","defineOverlay","kind","_dlg","_panel","_open","_ret","_origin","_value","_closing","returnValue","ef","side","opening","fade","top","toFixed","borderRadius","backdrop","pseudoElement","trigger","activeElement","showModal","Promise","resolve","y0","dy","t0","clientY","setPointerCapture","up","defineModal","defineSheet","TOAST_POSITIONS","ICONS","info","success","warning","error","tid","defineToastStack","trig","stackToast","message","title","undefined","installToastTriggers","_list","_timers","_hover","count","position","expand","resume","relatedTarget","h","clearTimeout","_id","Date","start","setTimeout","dismiss","li","txt","assign","action","onClick","swipe","startsWith","translate","scale","dur","reason","rm","dir","y","tf","isNaN","stack","MENU_EFFECTS","defineMenu","find","pl","placement","it","item","j","l","clipPath","focusTrigger","hide","PROGRESS_VARIANTS","defineProgressRing","_shown","_arc","_label","_len","_raf","update","super","variant","stops","split","Boolean","gid","random","toString","slice","background","svg","createElementNS","semi","grad","PI","strokeDasharray","strokeDashoffset","cancelAnimationFrame","paint","frac","requestAnimationFrame","pow","defineOdometer","_row","_text","render","format","Intl","NumberFormat","minimumFractionDigits","maximumFractionDigits","column","ch","isDigit","col","strip","row","anim","chars","fresh","cols","digit","replaceChildren","SKELETON_VARIANTS","defineSkeletonReveal","_layer","loading","build","reveal","layer","host","boxes","marked","m","skeleton","getComputedStyle","walker","createTreeWalker","NodeFilter","SHOW_TEXT","nextNode","some","range","createRange","selectNodeContents","rects","getClientRects","cssText","setProperty","parseFloat","all","PATHS","star","heart","defineStarRating","_v","_stars","icon","at","raw","user","idx","cos","sin","defineMilestones","_reached","reached","rail","date","after","passive","line","innerHeight","card","dot","defineMasonryFlow","_cols","_pos","_busy","columns","MutationObserver","mo","childList","capture","gap","W","floor","cw","heights","keys","reorder","shuffle","sort","compare","defineCompare","_p","_after","_handle","before","orientation","lb","la","ArrowLeft","ArrowDown","ArrowRight","ArrowUp","PageDown","PageUp","played","threshold","ease","prop","clip","defineCubeGallery","_stage","axis","stage","hold","vis","ax","half","faceB","turn","defineDock","bounce","magnifyAt","center","NAV_INDICATORS","defineNavMorph","_links","_active","_at","setActive","cur","findIndex","moveTo","blob","TOGGLE_VARIANTS","defineMenuToggle","box","TIP_PLACEMENTS","FLIP","bottom","defineTip","_bubble","_trigger","_t","rich","click","later","want","tr","br","vw","innerWidth","vh","fits","cx","defineStepper","_steps","steps","pct","boxShadow","pageWindow","page","total","siblings","lo","hi","definePagination","_page","btn","g","disabled","placeInk","ink","SEGMENTED_VARIANTS","defineSegmented","_segs","_thumb","segments","pre","sx","SWITCH_VARIANTS","defineSwitch","_on","_input","checked","thumb","WIDGETS","WIDGET_TAGS","flatMap","defineWidgets","release","group","EFFECT_KINDS","REG_KEY","Symbol","for","registry","_a","globalThis","registerEffect","def","opts","Error","override","registerEffects","defs","getEffect","SKIP_BY_DEFAULT","async","event","ctx","cleanups","sensitivity","context","run","defaults","catch","fxLayer","origin","spawn","overlay","PALETTE","rand","anims","noise2","hexRgb","hex","exec","parseInt","canvasBackground","spec","canvas","restore","getContext","raf","quality","state","last","fast","resize","dpr","devicePixelRatio","setTransform","draw","es","gen","description","colors","speed","field","cell","px","st","buf","bctx","img","createImageData","data","putImageData","imageSmoothingEnabled","drawImage","fillStyle","globalAlpha","fillRect","q","seeds","_","vx","vy","b2","dd","edge","sqrt","blobs","blur","cr","cg","createRadialGradient","addColorStop","stars","color","_w","_h","balls","ar","ag","ab","bg","bb","kr","kg","kb","inside","levels","lr","lg","z","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","u","uniform3fv","uniform1f","uRes","uT","uPtr","ptr","viewport","uniform2f","drawArrays","TRIANGLES","move","swapped","lost","getExtension","loseContext","fieldFallback","mixRgb","sstep","fbm2","shader","extra","C","GPU_FX","sm","ac","i1","i2","bx","by","ph","hue","fall","va","clearRect","wind","save","rotate","particles","registerGpuEffects","splitChars","usaChars","srText","beginPath","bezierCurveTo","quadraticCurveTo","strokeStyle","lineWidth","lineTo","stroke","ang","peak","fid","TEXT3_FX","strength","turb","tick","caf","stagger","glow","textShadow","cs","spread","pad","H","cs0","font","fontStyle","fontWeight","fontSize","fontFamily","textBaseline","fillText","getImageData","pts","rr","sy","finish","spacing","word","lx","ly","hypot","period","fontVariationSettings","direction","perspective","rot","transformOrigin","backfaceVisibility","registerTextEffects3","trackPointer","py","flush","queue","leave","rgba","LIGHT_FX","intensity","ov","rm2","zoom","rim","lens","clientHeight","tint","lines","grain","sheen","atan2","film","gloss","backgroundSize","backgroundPosition","rays","globalCompositeOperation","len","gg","createLinearGradient","closePath","depth","registerLightEffects","layers","DEPTH3_FX","tilt","transformStyle","transition","ls","saved","rx","ry","idle","friction","touchAction","cursor","down","thickness","front","back","R","usaFlip","display","gridArea","toBack","panels","usaOrigami","prevVis","visibility","wrap","cloneNode","register3dEffects","NS","samplePath","getTotalLength","L","pt","getPointAtLength","pointsToPath","align","best","bd","concat","MORPH2_FX","paths","path","shapes","orig","wobble","bulge","prevZ","isolation","hover","hh","cy","toward","p0","p1","p2","p3","kick","fillOpacity","disp","icons","usaSwap","ic","nxt","registerMorphEffects2","isOut","mode","pieces","clips","parts","TRANSITIONS2_FX","rows","y1","scattered","whole","waves","shape","amp","tail","reset","VT_CSS","shatter","registerTransitionEffects2","FX2_PACKS","gpu","light","morph","transitions","registerFx2","kf","doc","startViewTransition","vt","ready","toObj","fromEntries","replace","toUpperCase","playEffect","registry$1"],"mappings":"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"}
|
|
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/overlay.ts","../src/components/widgets/toast.ts","../src/components/widgets/menu.ts","../src/components/widgets/meters.ts","../src/components/widgets/skeleton-reveal.ts","../src/components/widgets/star-rating.ts","../src/components/widgets/milestones.ts","../src/components/widgets/masonry-flow.ts","../src/components/widgets/compare.ts","../src/components/widgets/cube-gallery.ts","../src/components/widgets/dock.ts","../src/components/widgets/nav-morph.ts","../src/components/widgets/menu-toggle.ts","../src/components/widgets/tip.ts","../src/components/widgets/stepper.ts","../src/components/widgets/pagination.ts","../src/components/widgets/segmented.ts","../src/components/widgets/switch.ts","../src/components/widgets/kanban.ts","../src/components/widgets/swipe-deck.ts","../src/components/widgets/weather-card.ts","../src/components/widgets/pull-cord.ts","../src/components/widgets/date-picker.ts","../src/components/widgets/color-picker.ts","../src/components/widgets/file-drop.ts","../src/components/fx/registry.ts","../src/components/tokens/index.ts","../src/components/timeline/core.ts","../src/components/effects/player.ts","../src/components/widgets/keyframe-editor.ts","../src/components/widgets/index.ts","../src/components/fx2/manifest.ts","../src/components/effects/shared.ts","../src/components/effects/generative.ts","../src/components/fx2/gl.ts","../src/components/fx2/gpu.ts","../src/components/fx2/text3.ts","../src/components/fx2/light.ts","../src/components/fx2/depth3.ts","../src/components/fx2/morph2.ts","../src/components/fx2/transitions2.ts","../src/components/fx2/weather.ts","../src/components/fx2/physics2.ts","../src/components/fx2/focus.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","import { defineElement, type UsaElement } from '../base';\nimport { ownChildren, part } from './shared';\nimport css from './overlay.css?raw';\n\n/**\n * `<usa-modal>` and `<usa-sheet>` (6.3) — modal overlays on the native\n * `<dialog>` (top layer, focus trap, Esc, inert page), with animated open\n * and close and a fading, blurred backdrop.\n *\n * - `<usa-modal effect=\"scale | slide-up | flip | origin\">` — `origin`\n * grows the dialog out of the button that opened it.\n * - `<usa-sheet side=\"right | left | bottom | top\">` — a side sheet; a\n * bottom sheet can be dragged down to dismiss (`<div data-handle>` or the\n * built-in grab handle).\n *\n * Attributes: `open` (initial), `label`, `persistent` (backdrop click / Esc\n * don't close). Any element with `data-usa-open=\"<id>\"` opens the overlay\n * with that id; `[data-usa-close]` inside closes it. API: `show(trigger?)`,\n * `close(value?)`, `toggle()`, `opened`. Events: `usa:open`, `usa:close`\n * (`{ value }`). Focus returns to the opener. Reduced motion: no movement,\n * a short fade.\n */\nexport interface UsaOverlayElement extends UsaElement {\n readonly opened: boolean;\n readonly returnValue: string;\n show(trigger?: Element | null): void;\n close(value?: string): Promise<void>;\n toggle(): void;\n}\nexport type UsaModalElement = UsaOverlayElement;\nexport type UsaSheetElement = UsaOverlayElement;\n\nexport const MODAL_EFFECTS = ['scale', 'slide-up', 'flip', 'origin'] as const;\nexport const SHEET_SIDES = ['right', 'left', 'bottom', 'top'] as const;\n\nconst EASE_OUT = 'cubic-bezier(.22,1,.36,1)';\n\n// one delegated listener for [data-usa-open] / [data-usa-toast] triggers anywhere on the page\nlet delegated = false;\nexport function delegateTriggers(): void {\n if (delegated || typeof document === 'undefined') return;\n delegated = true;\n document.addEventListener('click', (e) => {\n const t = (e.target as Element | null)?.closest?.('[data-usa-open]');\n if (!t) return;\n const target = document.getElementById(t.getAttribute('data-usa-open') || '') as (HTMLElement & Partial<UsaOverlayElement>) | null;\n if (target && typeof target.show === 'function') {\n e.preventDefault();\n if (target.opened) void target.close?.();\n else target.show(t);\n }\n });\n}\n\nfunction defineOverlay(tag: string, kind: 'modal' | 'sheet'): CustomElementConstructor | undefined {\n delegateTriggers();\n return defineElement(\n tag,\n (Base) => {\n class UsaOverlay extends Base {\n static get observedAttributes(): string[] {\n return kind === 'modal' ? ['effect'] : ['side'];\n }\n private _dlg: HTMLDialogElement | null = null;\n private _panel: HTMLElement | null = null;\n private _open = false;\n private _ret: Element | null = null;\n private _origin: DOMRect | null = null;\n private _value = '';\n private _closing: Promise<void> | null = null;\n\n get opened(): boolean {\n return this._open;\n }\n get returnValue(): string {\n return this._value;\n }\n\n mount(): void {\n let d = this.querySelector<HTMLDialogElement>(':scope > dialog.usa-ov');\n if (!d) {\n d = part('dialog', `usa-ov usa-${kind}-panel`);\n const body = part('div', 'usa-ov-body');\n body.append(...ownChildren(this));\n d.append(body);\n this.append(d);\n }\n this._dlg = d;\n this._panel = d.querySelector('.usa-ov-body');\n if (kind === 'modal') {\n const ef = this.str('effect', 'scale');\n this.dataset.effect = (MODAL_EFFECTS as readonly string[]).includes(ef) ? ef : 'scale';\n } else {\n const side = this.str('side', 'right');\n this.dataset.side = (SHEET_SIDES as readonly string[]).includes(side) ? side : 'right';\n if (this.dataset.side === 'bottom' && this._panel && !this._panel.querySelector('[data-handle]')) this._panel.prepend(part('div', 'usa-ov-grab', { 'data-handle': '', 'aria-hidden': 'true' }));\n this.drag();\n }\n if (!d.hasAttribute('aria-labelledby')) d.setAttribute('aria-label', this.str('label', kind === 'modal' ? 'Dialog' : 'Panel'));\n this.listen(d, 'cancel', (e: Event) => {\n e.preventDefault();\n if (!this.flag('persistent')) void this.close();\n });\n this.listen(d, 'click', (e: MouseEvent) => {\n const t = e.target as Element;\n const c = t.closest?.('[data-usa-close]');\n if (c) return void this.close(c.getAttribute('data-usa-close') || '');\n if (t === d && !this.flag('persistent')) void this.close(); // the ::backdrop\n });\n if (this.flag('open') && !this._open) this.show();\n }\n\n unmount(): void {\n if (this._open && this._dlg?.open) this._dlg.close?.();\n this._open = false;\n }\n\n private frames(opening: boolean): Keyframe[] {\n const fade: Keyframe[] = [{ opacity: 0 }, { opacity: 1 }];\n if (this.reduced) return opening ? fade : [...fade].reverse();\n let f: Keyframe[];\n if (kind === 'sheet') {\n const s = this.dataset.side;\n const off = s === 'left' ? 'translateX(-100%)' : s === 'bottom' ? 'translateY(100%)' : s === 'top' ? 'translateY(-100%)' : 'translateX(100%)';\n f = [{ transform: off }, { transform: 'none' }];\n } else {\n const e = this.dataset.effect;\n const o = this._origin;\n const r = this._dlg?.getBoundingClientRect();\n if (e === 'origin' && o && r && r.width) {\n const dx = o.left + o.width / 2 - (r.left + r.width / 2);\n const dy = o.top + o.height / 2 - (r.top + r.height / 2);\n f = [{ transform: `translate(${dx}px,${dy}px) scale(${Math.max(0.05, o.width / r.width).toFixed(3)},${Math.max(0.05, o.height / r.height).toFixed(3)})`, opacity: 0, borderRadius: '40px' }, { transform: 'none', opacity: 1 }];\n } else if (e === 'slide-up') f = [{ transform: 'translateY(48px)', opacity: 0 }, { transform: 'none', opacity: 1 }];\n else if (e === 'flip') f = [{ transform: 'perspective(900px) rotateX(-28deg) translateY(30px)', opacity: 0 }, { transform: 'none', opacity: 1 }];\n else f = [{ transform: 'scale(.88)', opacity: 0 }, { transform: 'scale(1.015)', opacity: 1, offset: 0.7 }, { transform: 'none', opacity: 1 }];\n }\n return opening ? f : [f[0], f[f.length - 1]].reverse();\n }\n\n private backdrop(opening: boolean): void {\n if (!this._dlg) return;\n const k: Keyframe[] = [{ opacity: 0 }, { opacity: 1 }];\n try {\n this._dlg.animate?.(opening ? k : k.reverse(), { duration: opening ? 280 : 200, pseudoElement: '::backdrop', fill: 'forwards' } as KeyframeAnimationOptions);\n } catch {\n /* no ::backdrop animation support */\n }\n }\n\n show(trigger?: Element | null): void {\n const d = this._dlg;\n if (!d || this._open) return;\n this._open = true;\n this._ret = trigger || (document.activeElement as Element | null);\n this._origin = trigger ? trigger.getBoundingClientRect() : null;\n if (typeof d.showModal === 'function') {\n try {\n d.showModal();\n } catch {\n d.setAttribute('open', '');\n }\n } else d.setAttribute('open', '');\n this.setAttribute('data-open', '');\n this.backdrop(true);\n this.motion(d, this.frames(true), { duration: this.reduced ? 150 : kind === 'sheet' ? 420 : 460, easing: EASE_OUT });\n const f = d.querySelector<HTMLElement>('[autofocus]') || d.querySelector<HTMLElement>('button,[href],input,select,textarea,[tabindex]:not([tabindex=\"-1\"])');\n f?.focus?.();\n this.emit('open', { trigger: trigger || null });\n }\n\n close(value = ''): Promise<void> {\n const d = this._dlg;\n if (!d || !this._open) return Promise.resolve();\n if (this._closing) return this._closing;\n this._value = value;\n this.backdrop(false);\n const a = this.motion(d, this.frames(false), { duration: this.reduced ? 120 : 260, easing: 'cubic-bezier(.4,0,1,1)', fill: 'forwards' });\n const done = () => {\n this._closing = null;\n this._open = false;\n this.removeAttribute('data-open');\n if (d.open && typeof d.close === 'function') d.close(value);\n else d.removeAttribute('open');\n a?.cancel?.();\n d.style.transform = '';\n (this._ret as HTMLElement | null)?.focus?.();\n this.emit('close', { value });\n };\n this._closing = a ? a.finished.then(done, done) : Promise.resolve().then(done);\n return this._closing;\n }\n\n toggle(): void {\n if (this._open) void this.close();\n else this.show();\n }\n\n // bottom sheet: drag down to dismiss, springs back otherwise\n private drag(): void {\n const p = this._panel;\n const d = this._dlg;\n if (!p || !d || this.dataset.side !== 'bottom') return;\n let y0 = -1;\n let dy = 0;\n let t0 = 0;\n this.listen(p, 'pointerdown', (e: PointerEvent) => {\n if (!(e.target as Element).closest('[data-handle]')) return;\n y0 = e.clientY;\n dy = 0;\n t0 = performance.now();\n (e.target as Element).setPointerCapture?.(e.pointerId);\n });\n this.listen(p, 'pointermove', (e: PointerEvent) => {\n if (y0 < 0) return;\n dy = Math.max(0, e.clientY - y0);\n d.style.transform = `translateY(${dy}px)`;\n });\n const up = () => {\n if (y0 < 0) return;\n y0 = -1;\n const v = dy / Math.max(1, performance.now() - t0);\n if (dy > d.offsetHeight * 0.3 || v > 0.6) void this.close();\n else {\n this.motion(d, [{ transform: `translateY(${dy}px)` }, { transform: 'translateY(-6px)', offset: 0.6 }, { transform: 'none' }], { duration: 380, easing: EASE_OUT });\n d.style.transform = '';\n }\n };\n this.listen(p, 'pointerup', up);\n this.listen(p, 'pointercancel', up);\n }\n }\n return UsaOverlay as unknown as CustomElementConstructor;\n },\n { id: 'overlay', text: css }\n );\n}\n\nexport const defineModal = (tag = 'usa-modal'): CustomElementConstructor | undefined => defineOverlay(tag, 'modal');\nexport const defineSheet = (tag = 'usa-sheet'): CustomElementConstructor | undefined => defineOverlay(tag, 'sheet');\n","import { defineElement, type UsaElement } from '../base';\nimport { part } from './shared';\nimport { delegateTriggers } from './overlay';\nimport css from './toast.css?raw';\n\n/**\n * `<usa-toast-stack>` (6.3) — notifications that pile up into a collapsed\n * stack (newest in front, older ones peeking behind), fan out on hover or\n * focus, auto-dismiss (paused while hovered), and can be swiped away.\n *\n * Attributes: `position` (`bottom-right` · `bottom-left` · `bottom-center` ·\n * `top-right` · `top-left` · `top-center`), `duration` (ms, `0` = sticky),\n * `max` (visible in the stack), `contained` (positioned inside its parent\n * instead of the viewport). API: `show(message | options)` → id,\n * `dismiss(id)`, `clear()`; module helper `stackToast()` uses the first stack on\n * the page (creating one). Any `[data-usa-toast=\"message\"]` element shows a\n * toast on click (`data-usa-toast-type`, `data-usa-target`). Events:\n * `usa:show`, `usa:dismiss` (`{ id, reason }`). Toasts live in a polite live\n * region. Reduced motion: no slide or swipe animation.\n */\nexport interface StackToastOptions {\n message?: string;\n title?: string;\n type?: 'info' | 'success' | 'warning' | 'error';\n /** ms; 0 = stays until dismissed. Defaults to the stack's `duration`. */\n duration?: number;\n /** An action button. */\n action?: { label: string; onClick?: () => void };\n}\nexport interface UsaToastStackElement extends UsaElement {\n show(input: string | StackToastOptions): string;\n dismiss(id: string, reason?: string): void;\n clear(): void;\n readonly count: number;\n}\n\nexport const TOAST_POSITIONS = ['bottom-right', 'bottom-left', 'bottom-center', 'top-right', 'top-left', 'top-center'] as const;\nconst ICONS: Record<string, string> = { info: 'ℹ', success: '✓', warning: '!', error: '✕' };\nlet tid = 0;\n\nexport function defineToastStack(tag = 'usa-toast-stack'): CustomElementConstructor | undefined {\n installToastTriggers();\n return defineElement(\n tag,\n (Base) => {\n class UsaToastStack extends Base {\n static get observedAttributes(): string[] {\n return ['position'];\n }\n private _list: HTMLOListElement | null = null;\n private _timers = new Map<string, { left: number; start: number; h: ReturnType<typeof setTimeout> | 0 }>();\n private _hover = false;\n\n get count(): number {\n return this._list ? this._list.querySelectorAll(':scope > .usa-tstack:not([data-leaving])').length : 0;\n }\n\n mount(): void {\n const pos = this.str('position', 'bottom-right');\n this.dataset.position = (TOAST_POSITIONS as readonly string[]).includes(pos) ? pos : 'bottom-right';\n this.setAttribute('role', 'region');\n if (!this.hasAttribute('aria-label')) this.setAttribute('aria-label', 'Notifications');\n this._list = this.querySelector(':scope > .usa-tstack-list') || part('ol', 'usa-tstack-list', { 'aria-live': 'polite', 'aria-relevant': 'additions' });\n if (!this._list.isConnected) this.append(this._list);\n const expand = (on: boolean) => {\n this._hover = on;\n this.toggleAttribute('data-expanded', on);\n this.layout();\n for (const [id, t] of this._timers) on ? this.pause(id, t) : this.resume(id);\n };\n this.listen(this, 'pointerenter', () => expand(true));\n this.listen(this, 'pointerleave', () => expand(false));\n this.listen(this, 'focusin', () => expand(true));\n this.listen(this, 'focusout', (e: FocusEvent) => !this.contains(e.relatedTarget as Node) && expand(false));\n this.onCleanup(() => this._timers.forEach((t) => t.h && clearTimeout(t.h)));\n }\n\n private pause(_id: string, t: { left: number; start: number; h: ReturnType<typeof setTimeout> | 0 }): void {\n if (!t.h) return;\n clearTimeout(t.h);\n t.h = 0;\n t.left -= Date.now() - t.start;\n }\n private resume(id: string): void {\n const t = this._timers.get(id);\n if (!t || t.h) return;\n t.start = Date.now();\n t.h = setTimeout(() => this.dismiss(id, 'timeout'), Math.max(400, t.left));\n }\n\n show(input: string | StackToastOptions): string {\n const o: StackToastOptions = typeof input === 'string' ? { message: input } : input || {};\n const id = `usa-tstack-${++tid}`;\n const type = o.type && ICONS[o.type] ? o.type : 'info';\n const li = part('li', `usa-tstack usa-tstack-${type}`, { id, role: type === 'error' ? 'alert' : 'status' });\n li.append(part('span', 'usa-tstack-icon', { 'aria-hidden': 'true' }, ICONS[type]));\n const txt = part('div', 'usa-tstack-text');\n if (o.title) txt.append(Object.assign(document.createElement('strong'), { textContent: o.title }));\n if (o.message) txt.append(Object.assign(document.createElement('span'), { textContent: o.message }));\n li.append(txt);\n if (o.action) {\n const b = part('button', 'usa-tstack-action', { type: 'button' });\n b.textContent = o.action.label;\n b.addEventListener('click', () => {\n o.action?.onClick?.();\n this.dismiss(id, 'action');\n });\n li.append(b);\n }\n const x = part('button', 'usa-tstack-close', { type: 'button', 'aria-label': 'Dismiss' }, '×');\n x.addEventListener('click', () => this.dismiss(id, 'close'));\n li.append(x);\n this.swipe(li, id);\n this._list?.prepend(li);\n const top = this.dataset.position?.startsWith('top');\n this.motion(li, this.reduced ? [{ opacity: 0 }, { opacity: 1 }] : [{ opacity: 0, translate: `0 ${top ? -110 : 110}%`, scale: '0.9' }, { opacity: 1, translate: '0 0', scale: '1' }], { duration: this.reduced ? 150 : 420, easing: 'cubic-bezier(.22,1,.36,1)' });\n this.layout();\n const dur = o.duration ?? this.num('duration', 4000);\n if (dur > 0) {\n this._timers.set(id, { left: dur, start: Date.now(), h: 0 });\n if (!this._hover) this.resume(id);\n }\n this.emit('show', { id, ...o });\n return id;\n }\n\n dismiss(id: string, reason = 'api'): void {\n const li = this._list?.querySelector<HTMLElement>(`#${id}`);\n const t = this._timers.get(id);\n if (t?.h) clearTimeout(t.h);\n this._timers.delete(id);\n if (!li || li.hasAttribute('data-leaving')) return;\n li.setAttribute('data-leaving', '');\n const dx = Number(li.dataset.dx || 0);\n const a = this.motion(li, this.reduced ? [{ opacity: 1 }, { opacity: 0 }] : [{ opacity: 1, transform: `translateX(${dx}px)` }, { opacity: 0, transform: `translateX(${dx >= 0 ? 120 : -120}%)` }], { duration: this.reduced ? 120 : 260, easing: 'cubic-bezier(.4,0,1,1)', fill: 'forwards' });\n const rm = () => {\n li.remove();\n this.layout();\n };\n if (a) a.finished.then(rm, rm);\n else rm();\n this.emit('dismiss', { id, reason });\n }\n\n clear(): void {\n this._list?.querySelectorAll<HTMLElement>(':scope > .usa-tstack').forEach((li) => this.dismiss(li.id, 'clear'));\n }\n\n /** Collapsed: newest in front, older ones scaled down peeking behind. Expanded: a list. */\n private layout(): void {\n if (!this._list) return;\n const items = Array.from(this._list.querySelectorAll<HTMLElement>(':scope > .usa-tstack:not([data-leaving])'));\n const max = Math.max(1, this.num('max', 3));\n const dir = this.dataset.position?.startsWith('top') ? 1 : -1;\n let y = 0;\n items.forEach((li, k) => {\n const h = li.offsetHeight || 56;\n const tf = this._hover ? `translateY(${dir * y}px)` : `translateY(${dir * k * 10}px) scale(${(1 - k * 0.05).toFixed(3)})`;\n li.style.transform = tf;\n li.style.zIndex = String(100 - k);\n li.style.opacity = !this._hover && k >= max ? '0' : '';\n li.toggleAttribute('inert', !this._hover && k > 0);\n y += h + 10;\n });\n this._list.style.height = this._hover && items.length ? `${y}px` : '';\n }\n\n private swipe(li: HTMLElement, id: string): void {\n let x0 = NaN;\n li.addEventListener('pointerdown', (e) => {\n if ((e.target as Element).closest('button')) return;\n x0 = e.clientX;\n li.setPointerCapture?.(e.pointerId);\n });\n li.addEventListener('pointermove', (e) => {\n if (Number.isNaN(x0)) return;\n const dx = e.clientX - x0;\n li.dataset.dx = String(dx);\n li.style.translate = `${dx}px 0`;\n li.style.opacity = String(Math.max(0.2, 1 - Math.abs(dx) / 240));\n });\n const up = () => {\n if (Number.isNaN(x0)) return;\n x0 = NaN;\n const dx = Number(li.dataset.dx || 0);\n li.style.translate = '';\n li.style.opacity = '';\n if (Math.abs(dx) > 80) this.dismiss(id, 'swipe');\n else li.dataset.dx = '0';\n };\n li.addEventListener('pointerup', up);\n li.addEventListener('pointercancel', up);\n }\n }\n return UsaToastStack as unknown as CustomElementConstructor;\n },\n { id: 'toast', text: css }\n );\n}\n\n/** Show a toast on the first `<usa-toast-stack>` of the page (one is created when missing). */\nexport function stackToast(input: string | StackToastOptions, stack?: UsaToastStackElement | null): string {\n defineToastStack();\n let s = stack || document.querySelector<UsaToastStackElement>('usa-toast-stack');\n if (!s) {\n s = document.createElement('usa-toast-stack') as UsaToastStackElement;\n document.body.append(s);\n }\n return s.show(input);\n}\n\nlet trig = false;\nfunction installToastTriggers(): void {\n delegateTriggers();\n if (trig || typeof document === 'undefined') return;\n trig = true;\n document.addEventListener('click', (e) => {\n const t = (e.target as Element | null)?.closest?.('[data-usa-toast]');\n if (!t) return;\n const target = t.getAttribute('data-usa-target');\n const s = target ? (document.getElementById(target) as UsaToastStackElement | null) : null;\n stackToast({ message: t.getAttribute('data-usa-toast') || '', title: t.getAttribute('data-usa-toast-title') || undefined, type: (t.getAttribute('data-usa-toast-type') as StackToastOptions['type']) || 'info' }, s);\n });\n}\n","import { defineElement, type UsaElement } from '../base';\nimport { ownChildren, part, nextId } from './shared';\nimport css from './menu.css?raw';\n\n/**\n * `<usa-menu>` (6.3) — a dropdown menu that unfolds from its button: the\n * list scales out of the trigger corner and the items cascade in. The first\n * child is the trigger (or `[data-trigger]`); the other children (`<button>`,\n * `<a>`, `<hr>` separators) become menu items.\n *\n * Attributes: `placement` (`bottom-start` · `bottom-end` · `top-start` ·\n * `top-end`), `effect` (`scale` · `fold` · `slide`). Keyboard: Enter / Space /\n * ArrowDown open, arrows and Home / End move, Esc closes, Tab leaves; outside\n * clicks close. API: `open()`, `close()`, `toggle()`, `opened`. Events:\n * `usa:select` (`{ index, value, item }`), `usa:open`, `usa:close`. Reduced\n * motion: a short fade.\n */\nexport interface UsaMenuElement extends UsaElement {\n readonly opened: boolean;\n open(focus?: 'first' | 'last'): void;\n close(focusTrigger?: boolean): void;\n toggle(): void;\n}\n\nexport const MENU_EFFECTS = ['scale', 'fold', 'slide'] as const;\n\nexport function defineMenu(tag = 'usa-menu'): CustomElementConstructor | undefined {\n return defineElement(\n tag,\n (Base) => {\n class UsaMenu extends Base {\n static get observedAttributes(): string[] {\n return ['placement', 'effect'];\n }\n private _btn: HTMLElement | null = null;\n private _list: HTMLElement | null = null;\n private _items: HTMLElement[] = [];\n private _open = false;\n\n get opened(): boolean {\n return this._open;\n }\n\n mount(): void {\n const kids = ownChildren(this);\n this._btn = kids.find((k) => k.hasAttribute('data-trigger')) || kids[0] || null;\n let list = this.querySelector<HTMLElement>(':scope > .usa-menu-list');\n if (!list) {\n list = part('div', 'usa-menu-list', { role: 'menu' });\n for (const k of kids) if (k !== this._btn) list.append(k);\n this.append(list);\n }\n this._list = list;\n list.id ||= nextId('usa-menu');\n list.hidden = !this._open;\n const pl = this.str('placement', 'bottom-start');\n this.dataset.placement = /^(bottom|top)-(start|end)$/.test(pl) ? pl : 'bottom-start';\n const ef = this.str('effect', 'scale');\n this.dataset.effect = (MENU_EFFECTS as readonly string[]).includes(ef) ? ef : 'scale';\n this._items = Array.from(list.children).filter((c): c is HTMLElement => c instanceof HTMLElement && !c.matches('hr,[role=\"separator\"]'));\n list.querySelectorAll('hr').forEach((h) => h.setAttribute('role', 'separator'));\n this._items.forEach((it, i) => {\n it.setAttribute('role', 'menuitem');\n it.tabIndex = -1;\n if (it.localName === 'button' && !it.hasAttribute('type')) it.setAttribute('type', 'button');\n this.listen(it, 'click', () => {\n this.emit('select', { index: i, value: it.dataset.value || (it.textContent || '').trim(), item: it });\n this.close(true);\n });\n });\n const b = this._btn;\n if (b) {\n b.setAttribute('aria-haspopup', 'menu');\n b.setAttribute('aria-expanded', String(this._open));\n b.setAttribute('aria-controls', list.id);\n if (b.localName === 'button' && !b.hasAttribute('type')) b.setAttribute('type', 'button');\n this.listen(b, 'click', () => this.toggle());\n this.listen(b, 'keydown', (e: KeyboardEvent) => {\n if (e.key === 'ArrowDown' || e.key === 'ArrowUp') {\n e.preventDefault();\n this.open(e.key === 'ArrowUp' ? 'last' : 'first');\n }\n });\n }\n this.listen(list, 'keydown', (e: KeyboardEvent) => {\n const n = this._items.length;\n const i = this._items.indexOf(document.activeElement as HTMLElement);\n let j = -1;\n if (e.key === 'ArrowDown') j = (i + 1) % n;\n else if (e.key === 'ArrowUp') j = (i - 1 + n) % n;\n else if (e.key === 'Home') j = 0;\n else if (e.key === 'End') j = n - 1;\n else if (e.key === 'Escape') {\n e.preventDefault();\n return this.close(true);\n } else if (e.key === 'Tab') return this.close(false);\n if (j >= 0) {\n e.preventDefault();\n this._items[j]?.focus();\n }\n });\n this.listen(document, 'pointerdown', (e: PointerEvent) => {\n if (this._open && !this.contains(e.target as Node)) this.close(false);\n });\n }\n\n open(focus: 'first' | 'last' = 'first'): void {\n const l = this._list;\n if (!l || this._open) return;\n this._open = true;\n l.hidden = false;\n this._btn?.setAttribute('aria-expanded', 'true');\n this.setAttribute('data-open', '');\n const ef = this.dataset.effect;\n if (this.reduced) this.motion(l, [{ opacity: 0 }, { opacity: 1 }], { duration: 120 });\n else {\n const f: Keyframe[] = ef === 'fold' ? [{ transform: 'perspective(600px) rotateX(-70deg)', opacity: 0 }, { transform: 'none', opacity: 1 }] : ef === 'slide' ? [{ transform: 'translateY(-10px)', opacity: 0, clipPath: 'inset(0 0 100% 0 round 12px)' }, { transform: 'none', opacity: 1, clipPath: 'inset(0 0 0 0 round 12px)' }] : [{ transform: 'scale(.6)', opacity: 0 }, { transform: 'scale(1.03)', opacity: 1, offset: 0.7 }, { transform: 'none', opacity: 1 }];\n this.motion(l, f, { duration: 300, easing: 'cubic-bezier(.22,1,.36,1)' });\n this._items.forEach((it, i) => this.motion(it, [{ opacity: 0, transform: 'translateY(-6px)' }, { opacity: 1, transform: 'none' }], { duration: 260, delay: 40 + i * 35, easing: 'cubic-bezier(.22,1,.36,1)', fill: 'backwards' }));\n }\n (focus === 'last' ? this._items[this._items.length - 1] : this._items[0])?.focus();\n this.emit('open');\n }\n\n close(focusTrigger = false): void {\n const l = this._list;\n if (!l || !this._open) return;\n this._open = false;\n this._btn?.setAttribute('aria-expanded', 'false');\n this.removeAttribute('data-open');\n const a = this.motion(l, [{ opacity: 1, transform: 'none' }, { opacity: 0, transform: this.reduced ? 'none' : 'scale(.96)' }], { duration: this.reduced ? 80 : 150, easing: 'ease-in' });\n const hide = () => {\n if (!this._open) l.hidden = true;\n };\n if (a) a.finished.then(hide, hide);\n else hide();\n if (focusTrigger) this._btn?.focus();\n this.emit('close');\n }\n\n toggle(): void {\n if (this._open) this.close(true);\n else this.open();\n }\n }\n return UsaMenu as unknown as CustomElementConstructor;\n },\n { id: 'menu', text: css }\n );\n}\n","import { defineElement, type UsaElement } from '../base';\nimport { clampN, part } from './shared';\nimport css from './meters.css?raw';\n\n/**\n * 6.4 meters: `<usa-progress-ring>` and `<usa-odometer>`.\n *\n * `<usa-progress-ring value=\"64\" max=\"100\">` — a ring, `bar` or `semi`\n * (semicircle gauge) `variant`; the arc eases (with a little overshoot) to\n * each new value while the centre label counts; `gradient=\"#a,#b\"`;\n * no `value` = indeterminate (spinning arc). `role=\"progressbar\"`.\n * Event `usa:complete` when it reaches max.\n *\n * `<usa-odometer value=\"1234\">` — rolling digit wheels: every digit column\n * spins to its new digit (lower digits travel further), columns slide in /\n * out when the length changes; `locale` grouping via Intl.NumberFormat,\n * `decimals`, `prefix` / `suffix`, `duration`. The accessible name is the\n * formatted number.\n *\n * Reduced motion: values switch without animation.\n */\nexport interface UsaProgressRingElement extends UsaElement {\n value: number | null;\n max: number;\n}\nexport interface UsaOdometerElement extends UsaElement {\n value: number;\n readonly text: string;\n}\n\nexport const PROGRESS_VARIANTS = ['ring', 'bar', 'semi'] as const;\nconst NS = 'http://www.w3.org/2000/svg';\n\nexport function defineProgressRing(tag = 'usa-progress-ring'): CustomElementConstructor | undefined {\n return defineElement(\n tag,\n (Base) => {\n class UsaProgressRing extends Base {\n static get observedAttributes(): string[] {\n return ['variant', 'value', 'max', 'gradient'];\n }\n private _shown = 0;\n private _arc: SVGPathElement | SVGCircleElement | HTMLElement | null = null;\n private _label: HTMLElement | null = null;\n private _len = 1;\n private _raf = 0;\n\n get value(): number | null {\n return this.hasAttribute('value') ? this.num('value', 0) : null;\n }\n set value(v: number | null) {\n if (v === null) this.removeAttribute('value');\n else this.setAttribute('value', String(v));\n }\n get max(): number {\n return Math.max(1e-9, this.num('max', 100));\n }\n set max(v: number) {\n this.setAttribute('max', String(v));\n }\n\n changed(name: string): void {\n if (name === 'value' && this._arc) return this.update();\n super.changed(name);\n }\n\n mount(): void {\n const v = this.str('variant', 'ring');\n const variant = (PROGRESS_VARIANTS as readonly string[]).includes(v) ? v : 'ring';\n this.dataset.variant = variant;\n this.setAttribute('role', 'progressbar');\n this.setAttribute('aria-valuemin', '0');\n this.querySelectorAll(':scope > [data-usa-part]').forEach((n) => n.remove());\n const stops = this.str('gradient', '').split(',').map((s) => s.trim()).filter(Boolean);\n const gid = `usa-pr-${Math.random().toString(36).slice(2, 8)}`;\n if (variant === 'bar') {\n const track = part('div', 'usa-pr-track');\n const fill = part('div', 'usa-pr-fill');\n if (stops.length) fill.style.background = `linear-gradient(90deg,${stops.join(',')})`;\n track.append(fill);\n this.append(track);\n this._arc = fill;\n } else {\n const svg = document.createElementNS(NS, 'svg');\n svg.setAttribute('data-usa-part', '');\n svg.setAttribute('aria-hidden', 'true');\n svg.setAttribute('class', 'usa-pr-svg');\n svg.setAttribute('width', '100%');\n svg.setAttribute('height', '100%');\n const semi = variant === 'semi';\n svg.setAttribute('viewBox', semi ? '0 0 100 56' : '0 0 100 100');\n const d = semi ? 'M 8 50 A 42 42 0 0 1 92 50' : 'M 50 8 A 42 42 0 1 1 49.99 8';\n const grad = stops.length ? `<defs><linearGradient id=\"${gid}\" x1=\"0\" y1=\"0\" x2=\"1\" y2=\"1\">${stops.map((c, i) => `<stop offset=\"${stops.length > 1 ? i / (stops.length - 1) : 0}\" stop-color=\"${c}\"/>`).join('')}</linearGradient></defs>` : '';\n svg.innerHTML = `${grad}<path class=\"usa-pr-track\" d=\"${d}\"/><path class=\"usa-pr-arc\" d=\"${d}\"${stops.length ? ` stroke=\"url(#${gid})\"` : ''}/>`;\n this.append(svg);\n this._arc = svg.querySelector('.usa-pr-arc');\n this._len = semi ? Math.PI * 42 : Math.PI * 2 * 42;\n (this._arc as SVGPathElement).style.strokeDasharray = `${this._len}`;\n (this._arc as SVGPathElement).style.strokeDashoffset = `${this._len}`;\n }\n this._label = part('span', 'usa-pr-label', { 'aria-hidden': 'true' });\n if (this.flag('no-label')) this._label.hidden = true;\n this.append(this._label);\n this._shown = 0;\n this.onCleanup(() => {\n if (this._raf && typeof cancelAnimationFrame === 'function') cancelAnimationFrame(this._raf);\n });\n this.update();\n }\n\n private paint(frac: number): void {\n const f = clampN(frac, 0, 1.08);\n if (this._arc instanceof HTMLElement) this._arc.style.transform = `scaleX(${Math.min(1, f)})`;\n else if (this._arc) (this._arc as SVGPathElement).style.strokeDashoffset = `${(this._len * (1 - Math.min(1, f))).toFixed(2)}`;\n }\n\n private update(): void {\n const v = this.value;\n const max = this.max;\n this.setAttribute('aria-valuemax', String(max));\n this.toggleAttribute('data-indeterminate', v === null);\n if (v === null) {\n this.removeAttribute('aria-valuenow');\n if (this._label) this._label.textContent = '';\n this.paint(0.28);\n return;\n }\n const target = clampN(v, 0, max) / max;\n this.setAttribute('aria-valuenow', String(clampN(v, 0, max)));\n const from = this._shown;\n this._shown = target;\n const label = (f: number) => {\n if (this._label) this._label.textContent = `${Math.round(f * 100)}%`;\n };\n if (this._raf && typeof cancelAnimationFrame === 'function') cancelAnimationFrame(this._raf);\n if (this.reduced || typeof requestAnimationFrame !== 'function') {\n this.paint(target);\n label(target);\n } else {\n const t0 = performance.now();\n const dur = this.num('duration', 900);\n const step = (now: number) => {\n const k = Math.min(1, (now - t0) / dur);\n // ease-out-back: a little overshoot, then settle\n const c = 1.4;\n const e = 1 + (c + 1) * Math.pow(k - 1, 3) + c * Math.pow(k - 1, 2);\n const f = from + (target - from) * e;\n this.paint(f);\n label(from + (target - from) * Math.min(1, k * 1.15));\n this._raf = k < 1 ? requestAnimationFrame(step) : 0;\n if (k >= 1) this.paint(target);\n };\n this._raf = requestAnimationFrame(step);\n }\n if (target >= 1 && from < 1) this.emit('complete', { value: v });\n }\n }\n return UsaProgressRing as unknown as CustomElementConstructor;\n },\n { id: 'meters', text: css }\n );\n}\n\nexport function defineOdometer(tag = 'usa-odometer'): CustomElementConstructor | undefined {\n return defineElement(\n tag,\n (Base) => {\n class UsaOdometer extends Base {\n static get observedAttributes(): string[] {\n return ['value', 'locale', 'decimals', 'prefix', 'suffix'];\n }\n private _row: HTMLElement | null = null;\n private _text = '';\n\n get value(): number {\n return this.num('value', 0);\n }\n set value(v: number) {\n this.setAttribute('value', String(v));\n }\n get text(): string {\n return this._text;\n }\n\n changed(name: string): void {\n if (name === 'value' && this._row) return this.render(true);\n super.changed(name);\n }\n\n mount(): void {\n this.querySelectorAll(':scope > [data-usa-part]').forEach((n) => n.remove());\n this._row = part('span', 'usa-odo-row', { 'aria-hidden': 'true' });\n this.append(this._row);\n this.setAttribute('role', 'img');\n this._text = '';\n this.render(false);\n }\n\n private format(): string {\n const d = Math.max(0, Math.min(6, Math.round(this.num('decimals', 0))));\n let s: string;\n try {\n s = new Intl.NumberFormat(this.str('locale', '') || undefined, { minimumFractionDigits: d, maximumFractionDigits: d }).format(this.value);\n } catch {\n s = this.value.toFixed(d);\n }\n return `${this.str('prefix', '')}${s}${this.str('suffix', '')}`;\n }\n\n private column(ch: string): HTMLElement {\n const isDigit = /\\d/.test(ch);\n const col = part('span', isDigit ? 'usa-odo-col' : 'usa-odo-sym');\n if (isDigit) {\n const strip = document.createElement('span');\n strip.className = 'usa-odo-strip';\n strip.textContent = '01234567890123456789'.split('').join('\\n');\n col.append(strip);\n col.dataset.d = ch;\n strip.style.transform = `translateY(${-Number(ch) * 5}%)`;\n } else col.textContent = ch;\n return col;\n }\n\n private render(animate: boolean): void {\n const row = this._row;\n if (!row) return;\n const next = this.format();\n this._text = next;\n this.setAttribute('aria-label', next);\n const anim = animate && !this.reduced;\n const dur = this.num('duration', 1100);\n const chars = next.split('');\n const old = Array.from(row.children) as HTMLElement[];\n const off = chars.length - old.length; // right-aligned: digits keep their place value\n const fresh = new Set<HTMLElement>();\n const cols = chars.map((ch, i) => {\n const o = old[i - off];\n const digit = /\\d/.test(ch);\n if (o && digit && o.dataset.d !== undefined) return o;\n if (o && !digit && o.dataset.d === undefined) {\n o.textContent = ch;\n return o;\n }\n const c = this.column(ch);\n fresh.add(c);\n return c;\n });\n row.replaceChildren(...cols);\n cols.forEach((c, i) => {\n if (fresh.has(c)) {\n if (anim) this.motion(c, [{ opacity: 0, transform: 'translateY(-60%)' }, { opacity: 1, transform: 'none' }], { duration: 420, easing: 'cubic-bezier(.22,1,.36,1)' });\n return;\n }\n if (c.dataset.d === undefined) return;\n const to = Number(chars[i]);\n const from = Number(c.dataset.d);\n c.dataset.d = String(to);\n const strip = c.firstElementChild as HTMLElement;\n strip.style.transform = `translateY(${-to * 5}%)`;\n if (!anim || from === to) return;\n const end = to >= from ? -to * 5 : -(to + 10) * 5; // always roll forward\n const place = cols.length - i;\n this.motion(strip, [{ transform: `translateY(${-from * 5}%)` }, { transform: `translateY(${end}%)` }], { duration: Math.max(400, dur - place * 60), easing: 'cubic-bezier(.2,.9,.25,1.04)' });\n });\n }\n }\n return UsaOdometer as unknown as CustomElementConstructor;\n },\n { id: 'meters', text: css }\n );\n}\n","import { defineElement, type UsaElement } from '../base';\nimport { part } from './shared';\nimport css from './skeleton-reveal.css?raw';\n\n/**\n * `<usa-skeleton-reveal loading>` (6.4) — a skeleton generated from the\n * real content: while `loading`, every text line, image and marked block\n * (`[data-skeleton]`) of the children is measured and covered by a\n * placeholder with one synchronized shimmer (`variant=\"wave | pulse |\n * glow\"`). Remove `loading` (or call `reveal()`) and the placeholders\n * dissolve top-to-bottom while the content fades in from a blur.\n *\n * `aria-busy` follows `loading`. Event `usa:reveal`. Reduced motion: no\n * shimmer, a plain crossfade.\n */\nexport interface UsaSkeletonRevealElement extends UsaElement {\n loading: boolean;\n reveal(): Promise<void>;\n}\n\nexport const SKELETON_VARIANTS = ['wave', 'pulse', 'glow'] as const;\n\nexport function defineSkeletonReveal(tag = 'usa-skeleton-reveal'): CustomElementConstructor | undefined {\n return defineElement(\n tag,\n (Base) => {\n class UsaSkeletonReveal extends Base {\n static get observedAttributes(): string[] {\n return ['loading', 'variant'];\n }\n private _layer: HTMLElement | null = null;\n\n get loading(): boolean {\n return this.flag('loading');\n }\n set loading(v: boolean) {\n this.setFlag('loading', v);\n }\n\n changed(name: string): void {\n if (name === 'loading') {\n if (this.loading) this.build();\n else void this.reveal();\n return;\n }\n super.changed(name);\n }\n\n mount(): void {\n const v = this.str('variant', 'wave');\n this.dataset.variant = (SKELETON_VARIANTS as readonly string[]).includes(v) ? v : 'wave';\n if (this.loading) this.build();\n if (typeof ResizeObserver === 'function') {\n const ro = new ResizeObserver(() => this.loading && this.build());\n ro.observe(this);\n this.onCleanup(() => ro.disconnect());\n }\n this.onCleanup(() => this._layer?.remove());\n }\n\n /** Measure the content and lay placeholders over it. */\n private build(): void {\n this.setAttribute('aria-busy', 'true');\n this.setAttribute('data-loading', '');\n this._layer?.remove();\n const layer = part('div', 'usa-sk-layer', { 'aria-hidden': 'true' });\n const host = this.getBoundingClientRect();\n const boxes: [number, number, number, number, boolean][] = [];\n const add = (r: DOMRect | { left: number; top: number; width: number; height: number }, round = false) => {\n if (r.width < 2 || r.height < 2) return;\n boxes.push([r.left - host.left, r.top - host.top, r.width, r.height, round]);\n };\n const marked = Array.from(this.querySelectorAll<HTMLElement>('[data-skeleton], img, svg, video, canvas, button, input'));\n for (const m of marked) if (!m.closest('.usa-sk-layer')) add(m.getBoundingClientRect(), m.dataset.skeleton === 'circle' || getComputedStyle(m).borderRadius === '50%');\n // text: one bar per rendered line (Range client rects), skipping marked elements\n const walker = document.createTreeWalker(this, NodeFilter.SHOW_TEXT);\n for (let n = walker.nextNode(); n; n = walker.nextNode()) {\n if (!n.textContent?.trim() || (n.parentElement && marked.some((m) => m.contains(n!.parentElement)))) continue;\n const range = document.createRange();\n range.selectNodeContents(n);\n const rects = typeof range.getClientRects === 'function' ? Array.from(range.getClientRects()) : [];\n for (const r of rects) add({ left: r.left, top: r.top + r.height * 0.18, width: r.width, height: r.height * 0.64 });\n }\n for (const [x, y, w, h, round] of boxes) {\n const b = document.createElement('span');\n b.className = 'usa-sk-box';\n b.style.cssText = `left:${x.toFixed(1)}px;top:${y.toFixed(1)}px;width:${w.toFixed(1)}px;height:${h.toFixed(1)}px;${round ? 'border-radius:50%' : ''}`;\n b.style.setProperty('--usa-sk-x', `${(-x).toFixed(1)}px`);\n layer.append(b);\n }\n this.append(layer);\n this._layer = layer;\n }\n\n reveal(): Promise<void> {\n const layer = this._layer;\n this.removeAttribute('aria-busy');\n if (this.hasAttribute('loading')) this.removeAttribute('loading');\n this._layer = null;\n if (!layer) {\n this.removeAttribute('data-loading');\n return Promise.resolve();\n }\n const boxes = Array.from(layer.children) as HTMLElement[];\n const kids = Array.from(this.children).filter((c) => c !== layer) as HTMLElement[];\n this.removeAttribute('data-loading');\n const done: Promise<unknown>[] = [];\n if (this.reduced) {\n const a = this.motion(layer, [{ opacity: 1 }, { opacity: 0 }], { duration: 200, fill: 'forwards' });\n if (a) done.push(a.finished);\n } else {\n const top = Math.min(...boxes.map((b) => parseFloat(b.style.top) || 0), 0);\n for (const b of boxes) {\n const a = this.motion(b, [{ opacity: 1, transform: 'none', filter: 'blur(0)' }, { opacity: 0, transform: 'scale(1.04)', filter: 'blur(6px)' }], { duration: 420, delay: Math.min(500, ((parseFloat(b.style.top) || 0) - top) * 1.2), easing: 'cubic-bezier(.4,0,.2,1)', fill: 'forwards' });\n if (a) done.push(a.finished);\n }\n kids.forEach((k, i) => this.motion(k, [{ opacity: 0, filter: 'blur(8px)', transform: 'translateY(6px)' }, { opacity: 1, filter: 'blur(0)', transform: 'none' }], { duration: 520, delay: 60 + i * 70, easing: 'cubic-bezier(.22,1,.36,1)', fill: 'backwards' }));\n }\n const end = () => {\n layer.remove();\n this.emit('reveal');\n };\n return Promise.all(done).then(end, end);\n }\n }\n return UsaSkeletonReveal as unknown as CustomElementConstructor;\n },\n { id: 'skeleton-reveal', text: css }\n );\n}\n","import { defineElement, type UsaElement } from '../base';\nimport { clampN, part } from './shared';\nimport css from './star-rating.css?raw';\n\n/**\n * `<usa-star-rating value=\"3.5\">` (6.4) — rating stars 2.0: the fill\n * follows the pointer (hover preview, `step=\"0.5\"` half stars), a click\n * pops the chosen star and throws a small sparkle burst, the other stars\n * ripple in sequence. `max`, `step` (`1` · `0.5`), `readonly`, `label`,\n * `icon` (`star` · `heart`). Keyboard: it is a `role=\"slider\"` — arrows,\n * Home / End. Event `usa:change` (`{ value }`). Reduced motion: no pop,\n * burst or ripple.\n */\nexport interface UsaStarRatingElement extends UsaElement {\n value: number;\n}\n\nconst PATHS: Record<string, string> = {\n star: 'M12 2.5l2.9 6.1 6.6.8-4.9 4.6 1.3 6.6L12 17.3l-5.9 3.3 1.3-6.6L2.5 9.4l6.6-.8z',\n heart: 'M12 21s-7.5-4.6-9.6-9.2C.9 8.4 2.9 4.5 6.6 4.5c2.1 0 3.6 1.2 5.4 3.1 1.8-1.9 3.3-3.1 5.4-3.1 3.7 0 5.7 3.9 4.2 7.3C19.5 16.4 12 21 12 21z',\n};\n\nexport function defineStarRating(tag = 'usa-star-rating'): CustomElementConstructor | undefined {\n return defineElement(\n tag,\n (Base) => {\n class UsaStarRating extends Base {\n static get observedAttributes(): string[] {\n return ['max', 'icon', 'readonly', 'step'];\n }\n private _v = 0;\n private _stars: HTMLElement[] = [];\n\n get value(): number {\n return this._v;\n }\n set value(v: number) {\n this.set(v, false);\n }\n\n private get max(): number {\n return Math.max(1, Math.round(this.num('max', 5)));\n }\n private get step(): number {\n return this.num('step', 1) === 0.5 ? 0.5 : 1;\n }\n\n mount(): void {\n this.querySelectorAll(':scope > [data-usa-part]').forEach((n) => n.remove());\n const icon = PATHS[this.str('icon', 'star')] || PATHS.star;\n this._stars = [];\n for (let i = 0; i < this.max; i++) {\n const s = part('span', 'usa-star', { 'aria-hidden': 'true' }, `<svg viewBox=\"0 0 24 24\" width=\"100%\" height=\"100%\"><path class=\"usa-star-bg\" d=\"${icon}\"/></svg><span class=\"usa-star-fg\"><svg viewBox=\"0 0 24 24\" width=\"24\" height=\"24\"><path d=\"${icon}\"/></svg></span>`);\n this._stars.push(s);\n this.append(s);\n }\n const ro = this.flag('readonly');\n this.setAttribute('role', ro ? 'img' : 'slider');\n if (!ro) {\n this.tabIndex = 0;\n this.setAttribute('aria-valuemin', '0');\n this.setAttribute('aria-valuemax', String(this.max));\n }\n if (!this.hasAttribute('aria-label')) this.setAttribute('aria-label', this.str('label', 'Rating'));\n this._v = clampN(this.num('value', 0), 0, this.max);\n this.paint(this._v);\n this.sync();\n if (ro) return;\n const at = (e: PointerEvent) => {\n const r = this._stars[0].getBoundingClientRect();\n const last = this._stars[this._stars.length - 1].getBoundingClientRect();\n const w = last.right - r.left || 1;\n const raw = ((e.clientX - r.left) / w) * this.max;\n return clampN(Math.ceil(raw / this.step) * this.step, this.step, this.max);\n };\n this.listen(this, 'pointermove', (e: PointerEvent) => {\n this.setAttribute('data-preview', '');\n this.paint(at(e));\n });\n this.listen(this, 'pointerleave', () => {\n this.removeAttribute('data-preview');\n this.paint(this._v);\n });\n this.listen(this, 'click', (e: MouseEvent) => this.set(at(e as PointerEvent), true));\n this.listen(this, 'keydown', (e: KeyboardEvent) => {\n const k = e.key;\n let v = this._v;\n if (k === 'ArrowRight' || k === 'ArrowUp') v += this.step;\n else if (k === 'ArrowLeft' || k === 'ArrowDown') v -= this.step;\n else if (k === 'Home') v = 0;\n else if (k === 'End') v = this.max;\n else return;\n e.preventDefault();\n this.set(v, true);\n });\n }\n\n private sync(): void {\n this.setAttribute('aria-valuenow', String(this._v));\n this.setAttribute('aria-valuetext', `${this._v} of ${this.max}`);\n if (this.flag('readonly')) this.setAttribute('aria-label', `${this.str('label', 'Rating')}: ${this._v} of ${this.max}`);\n }\n\n private paint(v: number): void {\n this._stars.forEach((s, i) => s.style.setProperty('--usa-star-fill', `${(clampN(v - i, 0, 1) * 100).toFixed(0)}%`));\n }\n\n private set(v: number, user: boolean): void {\n const nv = clampN(Math.round(v / this.step) * this.step, 0, this.max);\n const changed = nv !== this._v;\n this._v = nv;\n this.paint(nv);\n this.sync();\n if (!user) return;\n const idx = Math.ceil(nv) - 1;\n if (!this.reduced && idx >= 0) {\n const star = this._stars[idx];\n this.motion(star, [{ transform: 'scale(1)' }, { transform: 'scale(1.45) rotate(-12deg)', offset: 0.35 }, { transform: 'scale(.92)', offset: 0.7 }, { transform: 'none' }], { duration: 520, easing: 'cubic-bezier(.3,1.4,.5,1)' });\n this._stars.slice(0, idx).forEach((s, i) => this.motion(s, [{ transform: 'none' }, { transform: 'translateY(-5px)' }, { transform: 'none' }], { duration: 320, delay: i * 45, easing: 'ease-out' }));\n for (let k = 0; k < 8; k++) {\n const sp = part('span', 'usa-star-spark', { 'aria-hidden': 'true' });\n star.append(sp);\n const a = (k / 8) * Math.PI * 2;\n const anim = this.motion(sp, [{ transform: 'translate(-50%,-50%) scale(1)', opacity: 1 }, { transform: `translate(calc(-50% + ${(Math.cos(a) * 22).toFixed(1)}px), calc(-50% + ${(Math.sin(a) * 22).toFixed(1)}px)) scale(.2)`, opacity: 0 }], { duration: 520, easing: 'cubic-bezier(.2,.8,.3,1)', fill: 'forwards' });\n const rm = () => sp.remove();\n if (anim) anim.finished.then(rm, rm);\n else rm();\n }\n }\n if (changed) this.emit('change', { value: nv });\n }\n }\n return UsaStarRating as unknown as CustomElementConstructor;\n },\n { id: 'star-rating', text: css }\n );\n}\n","import { defineElement, type UsaElement } from '../base';\nimport { ownChildren, part } from './shared';\nimport css from './milestones.css?raw';\n\n/**\n * `<usa-milestones>` (6.5) — a scroll-drawn timeline: a progress line grows\n * down the rail as you scroll, and each milestone (a child element, with an\n * optional `data-date`) pops its dot and slides its card in when the line\n * reaches it. Cards alternate sides on wide screens (`layout=\"alternate\"`,\n * default) or sit on one side (`layout=\"left\"`); below 640 px they always\n * stack. Events `usa:reach` (`{ index }`). Reduced motion: everything is\n * shown, the line is full.\n */\nexport interface UsaMilestonesElement extends UsaElement {\n readonly reached: number;\n}\n\nexport function defineMilestones(tag = 'usa-milestones'): CustomElementConstructor | undefined {\n return defineElement(\n tag,\n (Base) => {\n class UsaMilestones extends Base {\n static get observedAttributes(): string[] {\n return ['layout'];\n }\n private _items: HTMLElement[] = [];\n private _fill: HTMLElement | null = null;\n private _reached = -1;\n private _raf = 0;\n\n get reached(): number {\n return this._reached;\n }\n\n mount(): void {\n this.dataset.layout = this.str('layout', 'alternate') === 'left' ? 'left' : 'alternate';\n this.setAttribute('role', this.getAttribute('role') || 'list');\n this.querySelectorAll(':scope > .usa-ms-rail').forEach((n) => n.remove());\n const rail = part('div', 'usa-ms-rail', { 'aria-hidden': 'true' });\n this._fill = part('div', 'usa-ms-fill');\n rail.append(this._fill);\n this.prepend(rail);\n this._items = ownChildren(this, '[data-usa-part],.usa-ms-rail');\n this._items.forEach((it, i) => {\n it.classList.add('usa-ms-item');\n it.setAttribute('role', 'listitem');\n it.dataset.side = this.dataset.layout === 'left' || i % 2 === 0 ? 'right' : 'left';\n if (!it.querySelector(':scope > .usa-ms-dot')) it.prepend(part('span', 'usa-ms-dot', { 'aria-hidden': 'true' }));\n const date = it.dataset.date;\n if (date && !it.querySelector(':scope > .usa-ms-date')) it.querySelector(':scope > .usa-ms-dot')!.after(part('span', 'usa-ms-date', {}, ''));\n const d = it.querySelector<HTMLElement>(':scope > .usa-ms-date');\n if (d && date) d.textContent = date;\n });\n this._reached = -1;\n if (this.reduced) {\n this._fill.style.transform = 'scaleY(1)';\n this._items.forEach((it) => it.setAttribute('data-reached', ''));\n this._reached = this._items.length - 1;\n return;\n }\n const on = () => {\n if (!this._raf) this._raf = typeof requestAnimationFrame === 'function' ? requestAnimationFrame(() => this.update()) : (this.update(), 0);\n };\n this.listen(window, 'scroll', on, { passive: true });\n this.listen(window, 'resize', on);\n this.onCleanup(() => {\n if (this._raf && typeof cancelAnimationFrame === 'function') cancelAnimationFrame(this._raf);\n });\n this.update();\n }\n\n /** Fill the rail up to the viewport's 60 % line and reveal the milestones it passed. */\n update(): void {\n this._raf = 0;\n const r = this.getBoundingClientRect();\n const vh = (typeof window !== 'undefined' && window.innerHeight) || 800;\n const line = vh * 0.6;\n const p = r.height ? Math.min(1, Math.max(0, (line - r.top) / r.height)) : 0;\n if (this._fill) this._fill.style.transform = `scaleY(${p.toFixed(4)})`;\n this._items.forEach((it, i) => {\n if (it.hasAttribute('data-reached')) return;\n const top = it.getBoundingClientRect().top;\n if (top < line || p >= 1) {\n it.setAttribute('data-reached', '');\n const card = Array.from(it.children).filter((c) => !c.matches('.usa-ms-dot,.usa-ms-date')) as HTMLElement[];\n const dot = it.querySelector(':scope > .usa-ms-dot');\n if (dot) this.motion(dot, [{ transform: 'scale(0)' }, { transform: 'scale(1.5)', offset: 0.6 }, { transform: 'scale(1)' }], { duration: 420, easing: 'cubic-bezier(.3,1.4,.5,1)' });\n const dx = it.dataset.side === 'left' ? -28 : 28;\n card.forEach((c, k) => this.motion(c, [{ opacity: 0, transform: `translateX(${dx}px)` }, { opacity: 1, transform: 'none' }], { duration: 520, delay: 80 + k * 60, easing: 'cubic-bezier(.22,1,.36,1)', fill: 'backwards' }));\n if (i > this._reached) this._reached = i;\n this.emit('reach', { index: i });\n }\n });\n }\n }\n return UsaMilestones as unknown as CustomElementConstructor;\n },\n { id: 'milestones', text: css }\n );\n}\n","import { defineElement, type UsaElement } from '../base';\nimport { ownChildren } from './shared';\nimport css from './masonry-flow.css?raw';\n\n/**\n * `<usa-masonry-flow>` (6.5) — a masonry grid whose items glide to their\n * new places (FLIP) whenever the layout changes: resize, items added or\n * removed, `filter()`, `shuffle()`, `sort()`. Columns come from `min`\n * (minimum column width, px) and `gap`. Hidden items scale out, shown ones\n * scale in. Event `usa:layout` (`{ columns }`). Reduced motion: items jump.\n */\nexport interface UsaMasonryFlowElement extends UsaElement {\n readonly columns: number;\n layout(animate?: boolean): void;\n filter(fn: ((el: HTMLElement) => boolean) | string | null): void;\n shuffle(): void;\n sort(compare: (a: HTMLElement, b: HTMLElement) => number): void;\n}\n\nexport function defineMasonryFlow(tag = 'usa-masonry-flow'): CustomElementConstructor | undefined {\n return defineElement(\n tag,\n (Base) => {\n class UsaMasonryFlow extends Base {\n static get observedAttributes(): string[] {\n return ['min', 'gap'];\n }\n private _cols = 1;\n private _pos = new Map<HTMLElement, [number, number]>();\n private _busy = false;\n\n get columns(): number {\n return this._cols;\n }\n\n private items(): HTMLElement[] {\n return ownChildren(this);\n }\n\n mount(): void {\n this.layout(false);\n if (typeof ResizeObserver === 'function') {\n let w = this.clientWidth;\n const ro = new ResizeObserver(() => {\n if (Math.abs(this.clientWidth - w) < 2) return;\n w = this.clientWidth;\n this.layout(true);\n });\n ro.observe(this);\n this.onCleanup(() => ro.disconnect());\n }\n if (typeof MutationObserver === 'function') {\n const mo = new MutationObserver(() => !this._busy && this.layout(true));\n mo.observe(this, { childList: true });\n this.onCleanup(() => mo.disconnect());\n }\n // images change heights when they load\n this.listen(this, 'load', () => this.layout(false), { capture: true } as AddEventListenerOptions);\n }\n\n layout(animate = true): void {\n const gap = Math.max(0, this.num('gap', 12));\n const min = Math.max(60, this.num('min', 160));\n const W = this.clientWidth || 1;\n const cols = Math.max(1, Math.floor((W + gap) / (min + gap)));\n const cw = (W - gap * (cols - 1)) / cols;\n const heights = new Array(cols).fill(0);\n const all = this.items();\n for (const it of all) {\n const hidden = it.hasAttribute('data-hidden');\n it.style.width = `${cw}px`;\n if (hidden) continue;\n const c = heights.indexOf(Math.min(...heights));\n const x = c * (cw + gap);\n const y = heights[c];\n heights[c] += (it.offsetHeight || 0) + gap;\n const old = this._pos.get(it);\n it.style.transform = `translate(${x.toFixed(1)}px,${y.toFixed(1)}px)`;\n if (animate && !this.reduced && old && (old[0] !== x || old[1] !== y)) {\n this.motion(it, [{ transform: `translate(${old[0].toFixed(1)}px,${old[1].toFixed(1)}px)` }, { transform: `translate(${x.toFixed(1)}px,${y.toFixed(1)}px)` }], { duration: 520, easing: 'cubic-bezier(.22,1,.36,1)' });\n } else if (animate && !this.reduced && !old) {\n this.motion(it, [{ opacity: 0, transform: `translate(${x.toFixed(1)}px,${(y + 20).toFixed(1)}px) scale(.9)` }, { opacity: 1, transform: `translate(${x.toFixed(1)}px,${y.toFixed(1)}px)` }], { duration: 420, easing: 'cubic-bezier(.22,1,.36,1)' });\n }\n this._pos.set(it, [x, y]);\n }\n for (const k of Array.from(this._pos.keys())) if (!all.includes(k) || k.hasAttribute('data-hidden')) this._pos.delete(k);\n this.style.height = `${Math.max(0, Math.max(...heights) - gap)}px`;\n const changed = cols !== this._cols;\n this._cols = cols;\n if (changed || animate) this.emit('layout', { columns: cols });\n }\n\n filter(fn: ((el: HTMLElement) => boolean) | string | null): void {\n const test = typeof fn === 'string' ? (el: HTMLElement) => el.matches(fn) : fn || (() => true);\n for (const it of this.items()) {\n const show = test(it);\n const was = !it.hasAttribute('data-hidden');\n if (show === was) continue;\n if (show) it.removeAttribute('data-hidden');\n else if (this.reduced) it.setAttribute('data-hidden', '');\n else {\n const tf = it.style.transform;\n const a = this.motion(it, [{ opacity: 1, transform: tf }, { opacity: 0, transform: `${tf} scale(.6)` }], { duration: 260, easing: 'ease-in' });\n it.setAttribute('data-hidden', '');\n if (a) {\n it.setAttribute('data-leaving', '');\n const rm = () => it.removeAttribute('data-leaving');\n a.finished.then(rm, rm);\n }\n }\n }\n this.layout(true);\n }\n\n private reorder(list: HTMLElement[]): void {\n this._busy = true;\n for (const it of list) this.append(it);\n this._busy = false;\n this.layout(true);\n }\n\n shuffle(): void {\n const list = this.items();\n for (let i = list.length - 1; i > 0; i--) {\n const j = Math.floor(Math.random() * (i + 1));\n [list[i], list[j]] = [list[j], list[i]];\n }\n this.reorder(list);\n }\n\n sort(compare: (a: HTMLElement, b: HTMLElement) => number): void {\n this.reorder(this.items().sort(compare));\n }\n }\n return UsaMasonryFlow as unknown as CustomElementConstructor;\n },\n { id: 'masonry-flow', text: css }\n );\n}\n","import { defineElement, type UsaElement } from '../base';\nimport { clampN, ownChildren, part } from './shared';\nimport css from './compare.css?raw';\n\n/**\n * `<usa-compare>` (6.5) — before / after image compare slider. The first\n * child is \"before\", the second \"after\" (images, videos or any element).\n * Drag the handle (or anywhere with `hover`), click to jump, or use the\n * keyboard (it is a `role=\"slider\"`: arrows, Page Up / Down, Home / End).\n * `position` (0–100, default 50), `orientation=\"horizontal | vertical\"`,\n * `intro` plays a short sweep when it scrolls into view, `labels=\"Before,\n * After\"`. Event `usa:change` (`{ position }`). Reduced motion: no intro\n * sweep or eased jumps.\n */\nexport interface UsaCompareElement extends UsaElement {\n position: number;\n}\n\nexport function defineCompare(tag = 'usa-compare'): CustomElementConstructor | undefined {\n return defineElement(\n tag,\n (Base) => {\n class UsaCompare extends Base {\n static get observedAttributes(): string[] {\n return ['orientation', 'labels'];\n }\n private _p = 50;\n private _after: HTMLElement | null = null;\n private _handle: HTMLElement | null = null;\n\n get position(): number {\n return this._p;\n }\n set position(v: number) {\n this.set(v, false);\n }\n\n private get vertical(): boolean {\n return this.str('orientation', 'horizontal') === 'vertical';\n }\n\n mount(): void {\n this.querySelectorAll(':scope > [data-usa-part]').forEach((n) => n.remove());\n const [before, after] = ownChildren(this);\n this.dataset.orientation = this.vertical ? 'vertical' : 'horizontal';\n before?.classList.add('usa-cmp-before');\n after?.classList.add('usa-cmp-after');\n this._after = after || null;\n const [lb, la] = this.str('labels', '').split(',').map((s) => s.trim());\n if (lb) this.append(Object.assign(part('span', 'usa-cmp-label usa-cmp-label-b', { 'aria-hidden': 'true' }), { textContent: lb }));\n if (la) this.append(Object.assign(part('span', 'usa-cmp-label usa-cmp-label-a', { 'aria-hidden': 'true' }), { textContent: la }));\n const h = part('span', 'usa-cmp-handle', { 'aria-hidden': 'true' }, '<span class=\"usa-cmp-knob\"><svg viewBox=\"0 0 24 24\" width=\"18\" height=\"18\"><path d=\"M9 6l-6 6 6 6M15 6l6 6-6 6\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/></svg></span>');\n this.append(h);\n this._handle = h;\n this.setAttribute('role', 'slider');\n this.tabIndex = 0;\n this.setAttribute('aria-valuemin', '0');\n this.setAttribute('aria-valuemax', '100');\n this.setAttribute('aria-orientation', this.vertical ? 'vertical' : 'horizontal');\n if (!this.hasAttribute('aria-label')) this.setAttribute('aria-label', this.str('label', 'Compare before and after'));\n this.set(this.num('position', 50), false);\n let drag = false;\n const at = (e: PointerEvent) => {\n const r = this.getBoundingClientRect();\n return this.vertical ? ((e.clientY - r.top) / (r.height || 1)) * 100 : ((e.clientX - r.left) / (r.width || 1)) * 100;\n };\n this.listen(this, 'pointerdown', (e: PointerEvent) => {\n drag = true;\n this.setPointerCapture?.(e.pointerId);\n this.set(at(e), true, !(e.target as Element).closest('.usa-cmp-handle'));\n });\n this.listen(this, 'pointermove', (e: PointerEvent) => {\n if (drag || this.flag('hover')) this.set(at(e), true);\n });\n const up = () => (drag = false);\n this.listen(this, 'pointerup', up);\n this.listen(this, 'pointercancel', up);\n this.listen(this, 'keydown', (e: KeyboardEvent) => {\n const map: Record<string, number> = { ArrowLeft: -2, ArrowDown: -2, ArrowRight: 2, ArrowUp: 2, PageDown: -10, PageUp: 10 };\n if (this.vertical) Object.assign(map, { ArrowDown: 2, ArrowUp: -2 });\n if (e.key === 'Home') this.set(0, true);\n else if (e.key === 'End') this.set(100, true);\n else if (e.key in map) this.set(this._p + map[e.key], true);\n else return;\n e.preventDefault();\n });\n if (this.flag('intro') && !this.reduced) {\n let played = false;\n this.inView((v) => {\n if (!v || played) return;\n played = true;\n const end = this._p;\n const t0 = performance.now();\n const step = (now: number) => {\n const k = Math.min(1, (now - t0) / 1400);\n this.paint(end + Math.sin(k * Math.PI * 2) * 22 * (1 - k));\n if (k < 1 && typeof requestAnimationFrame === 'function') requestAnimationFrame(step);\n else this.paint(end);\n };\n if (typeof requestAnimationFrame === 'function') requestAnimationFrame(step);\n }, { threshold: 0.5 });\n }\n }\n\n private paint(p: number): void {\n const v = clampN(p, 0, 100);\n if (this._after) this._after.style.clipPath = this.vertical ? `inset(${v}% 0 0 0)` : `inset(0 0 0 ${v}%)`;\n if (this._handle) this._handle.style[this.vertical ? 'top' : 'left'] = `${v}%`;\n this.style.setProperty('--usa-cmp', `${v}%`);\n }\n\n private set(p: number, user: boolean, ease = false): void {\n const v = Math.round(clampN(p, 0, 100) * 10) / 10;\n const from = this._p;\n this._p = v;\n this.setAttribute('aria-valuenow', String(Math.round(v)));\n this.setAttribute('aria-valuetext', `${Math.round(v)}%`);\n if (ease && !this.reduced && this._after && this._handle) {\n const prop = this.vertical ? 'top' : 'left';\n const clip = (x: number) => (this.vertical ? `inset(${x}% 0 0 0)` : `inset(0 0 0 ${x}%)`);\n this.motion(this._after, [{ clipPath: clip(from) }, { clipPath: clip(v) }], { duration: 320, easing: 'cubic-bezier(.22,1,.36,1)' });\n this.motion(this._handle, [{ [prop]: `${from}%` }, { [prop]: `${v}%` }], { duration: 320, easing: 'cubic-bezier(.22,1,.36,1)' });\n }\n this.paint(v);\n if (user && from !== v) this.emit('change', { position: v });\n }\n }\n return UsaCompare as unknown as CustomElementConstructor;\n },\n { id: 'compare', text: css }\n );\n}\n","import { defineElement, type UsaElement } from '../base';\nimport { ownChildren, part } from './shared';\nimport css from './cube-gallery.css?raw';\n\n/**\n * `<usa-cube-gallery>` (6.5) — a gallery on a turning 3D cube: the current\n * slide and the next one sit on adjacent faces and the cube rotates between\n * them. Swipe / drag, arrow keys, prev / next buttons, `autoplay` (ms;\n * pauses on hover, focus and off screen), `axis=\"y | x\"`. API `next()`,\n * `prev()`, `goTo(i)`, `index`; event `usa:change`. Reduced motion: slides\n * switch with a fade.\n */\nexport interface UsaCubeGalleryElement extends UsaElement {\n readonly index: number;\n next(): void;\n prev(): void;\n goTo(i: number): void;\n}\n\nexport function defineCubeGallery(tag = 'usa-cube-gallery'): CustomElementConstructor | undefined {\n return defineElement(\n tag,\n (Base) => {\n class UsaCubeGallery extends Base {\n static get observedAttributes(): string[] {\n return ['axis', 'autoplay'];\n }\n private _slides: HTMLElement[] = [];\n private _i = 0;\n private _stage: HTMLElement | null = null;\n private _busy = false;\n private _timer: ReturnType<typeof setInterval> | 0 = 0;\n\n get index(): number {\n return this._i;\n }\n\n mount(): void {\n this.querySelectorAll(':scope > [data-usa-part]').forEach((n) => n.remove());\n this._slides = ownChildren(this);\n this.dataset.axis = this.str('axis', 'y') === 'x' ? 'x' : 'y';\n this.setAttribute('role', 'region');\n this.setAttribute('aria-roledescription', 'carousel');\n if (!this.hasAttribute('aria-label')) this.setAttribute('aria-label', this.str('label', 'Gallery'));\n this.tabIndex = 0;\n const stage = part('div', 'usa-cube-stage');\n this._slides.forEach((s, i) => {\n s.classList.add('usa-cube-face');\n s.setAttribute('role', 'group');\n s.setAttribute('aria-roledescription', 'slide');\n s.setAttribute('aria-label', `${i + 1} of ${this._slides.length}`);\n stage.append(s);\n });\n this.append(stage);\n this._stage = stage;\n const prev = part('button', 'usa-cube-btn usa-cube-prev', { type: 'button', 'aria-label': 'Previous slide' }, '‹');\n const next = part('button', 'usa-cube-btn usa-cube-next', { type: 'button', 'aria-label': 'Next slide' }, '›');\n this.append(prev, next);\n this.listen(prev, 'click', () => this.prev());\n this.listen(next, 'click', () => this.next());\n this.listen(this, 'keydown', (e: KeyboardEvent) => {\n if (e.target !== this) return;\n if (e.key === 'ArrowRight' || e.key === 'ArrowDown') this.next();\n else if (e.key === 'ArrowLeft' || e.key === 'ArrowUp') this.prev();\n else return;\n e.preventDefault();\n });\n let x0 = NaN;\n this.listen(stage, 'pointerdown', (e: PointerEvent) => (x0 = this.dataset.axis === 'x' ? e.clientY : e.clientX));\n this.listen(stage, 'pointerup', (e: PointerEvent) => {\n if (Number.isNaN(x0)) return;\n const d = (this.dataset.axis === 'x' ? e.clientY : e.clientX) - x0;\n x0 = NaN;\n if (Math.abs(d) > 40) (d < 0 ? this.next() : this.prev());\n });\n this._i = Math.min(this._i, Math.max(0, this._slides.length - 1));\n this.show();\n const ms = this.num('autoplay', 0);\n if (ms > 0 && !this.reduced) {\n let hold = false;\n let vis = true;\n const pause = (v: boolean) => (hold = v);\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.inView((v) => (vis = v));\n this._timer = setInterval(() => !hold && vis && this.next(), Math.max(1200, ms));\n this.onCleanup(() => this._timer && clearInterval(this._timer));\n }\n }\n\n private show(): void {\n this._slides.forEach((s, k) => {\n const on = k === this._i;\n s.toggleAttribute('data-active', on);\n s.inert = !on;\n s.style.transform = '';\n });\n }\n\n goTo(i: number): void {\n const n = this._slides.length;\n if (!n || this._busy) return;\n const to = ((i % n) + n) % n;\n if (to === this._i) return;\n const from = this._i;\n const dir = (to > from && !(from === 0 && to === n - 1)) || (from === n - 1 && to === 0) ? 1 : -1;\n const a = this._slides[from];\n const b = this._slides[to];\n this._i = to;\n this.emit('change', { index: to, from });\n if (this.reduced || !this._stage) {\n this.show();\n this.motion(b, [{ opacity: 0 }, { opacity: 1 }], { duration: 200 });\n return;\n }\n // b waits on the adjacent face; the stage turns by 90°\n const ax = this.dataset.axis === 'x' ? 'X' : 'Y';\n const half = `${(((ax === 'Y' ? this.offsetWidth : this.offsetHeight) || 280) / 2).toFixed(1)}px`;\n const faceB = ax === 'Y' ? `rotateY(${dir * 90}deg) translateZ(${half})` : `rotateX(${-dir * 90}deg) translateZ(${half})`;\n b.setAttribute('data-active', '');\n b.style.transform = faceB;\n a.style.transform = `translateZ(${half})`;\n this._busy = true;\n const turn = ax === 'Y' ? `rotateY(${-dir * 90}deg)` : `rotateX(${dir * 90}deg)`;\n const anim = this.motion(this._stage, [{ transform: `translateZ(-${half}) rotate${ax}(0deg)` }, { transform: `translateZ(-${half}) ${turn}` }], { duration: 780, easing: 'cubic-bezier(.65,.05,.3,1)' });\n const end = () => {\n this._busy = false;\n this.show();\n };\n if (anim) anim.finished.then(end, end);\n else end();\n }\n\n next(): void {\n this.goTo(this._i + 1);\n }\n prev(): void {\n this.goTo(this._i - 1);\n }\n }\n return UsaCubeGallery as unknown as CustomElementConstructor;\n },\n { id: 'cube-gallery', text: css }\n );\n}\n","import { defineElement, type UsaElement } from '../base';\nimport { ownChildren } from './shared';\nimport css from './dock.css?raw';\n\n/**\n * `<usa-dock>` (6.6) — a macOS-style dock: items magnify with a smooth\n * cosine falloff as the pointer moves along it, neighbours make room, and a\n * click bounces the item (`bounce`). Children are the items (`<a>` /\n * `<button>`, each with an accessible name); `data-label` shows a tooltip\n * label above the hovered item. Attributes: `magnify` (max scale, 1.9),\n * `range` (px of influence, 140), `orientation=\"horizontal | vertical\"`.\n * Keyboard focus magnifies the focused item. Reduced motion: no\n * magnification or bounce (labels still show).\n */\nexport interface UsaDockElement extends UsaElement {\n readonly items: HTMLElement[];\n}\n\nexport function defineDock(tag = 'usa-dock'): CustomElementConstructor | undefined {\n return defineElement(\n tag,\n (Base) => {\n class UsaDock extends Base {\n static get observedAttributes(): string[] {\n return ['orientation', 'magnify', 'range'];\n }\n private _items: HTMLElement[] = [];\n private _raf = 0;\n\n get items(): HTMLElement[] {\n return this._items;\n }\n\n mount(): void {\n this.dataset.orientation = this.str('orientation', 'horizontal') === 'vertical' ? 'vertical' : 'horizontal';\n this.setAttribute('role', this.getAttribute('role') || 'toolbar');\n if (!this.hasAttribute('aria-label')) this.setAttribute('aria-label', this.str('label', 'Dock'));\n this._items = ownChildren(this);\n this._items.forEach((it) => {\n it.classList.add('usa-dock-item');\n if (it.dataset.label && !it.getAttribute('aria-label') && !it.textContent?.trim()) it.setAttribute('aria-label', it.dataset.label);\n this.listen(it, 'click', () => this.bounce(it));\n this.listen(it, 'focus', () => this.magnifyAt(this.center(it)));\n this.listen(it, 'blur', () => this.magnifyAt(null));\n });\n this.listen(this, 'pointermove', (e: PointerEvent) => {\n const v = this.dataset.orientation === 'vertical' ? e.clientY : e.clientX;\n if (!this._raf) this._raf = typeof requestAnimationFrame === 'function' ? requestAnimationFrame(() => ((this._raf = 0), this.magnifyAt(v))) : (this.magnifyAt(v), 0);\n });\n this.listen(this, 'pointerleave', () => this.magnifyAt(null));\n this.onCleanup(() => {\n if (this._raf && typeof cancelAnimationFrame === 'function') cancelAnimationFrame(this._raf);\n });\n }\n\n private center(it: HTMLElement): number {\n const r = it.getBoundingClientRect();\n return this.dataset.orientation === 'vertical' ? r.top + r.height / 2 : r.left + r.width / 2;\n }\n\n /** Scale every item by its distance to `pos` (client px), or reset with `null`. */\n magnifyAt(pos: number | null): void {\n const max = this.num('magnify', 1.9);\n const range = Math.max(20, this.num('range', 140));\n for (const it of this._items) {\n let s = 1;\n if (pos !== null && !this.reduced) {\n const d = Math.abs(this.center(it) - pos);\n if (d < range) s = 1 + (max - 1) * (0.5 + 0.5 * Math.cos((d / range) * Math.PI));\n }\n it.style.setProperty('--usa-dock-s', s.toFixed(3));\n it.toggleAttribute('data-near', s > 1.5 || (pos !== null && this.reduced && Math.abs(this.center(it) - pos) < 24));\n }\n }\n\n bounce(it: HTMLElement): void {\n if (this.reduced || !this.flag('bounce')) return;\n const v = this.dataset.orientation === 'vertical';\n this.motion(it, [{ translate: '0 0' }, { translate: v ? '18px 0' : '0 -22px', offset: 0.3 }, { translate: '0 0', offset: 0.55 }, { translate: v ? '8px 0' : '0 -9px', offset: 0.75 }, { translate: '0 0' }], { duration: 760, easing: 'ease-out' });\n }\n }\n return UsaDock as unknown as CustomElementConstructor;\n },\n { id: 'dock', text: css }\n );\n}\n","import { defineElement, type UsaElement } from '../base';\nimport { ownChildren, part, arrowIndex } from './shared';\nimport css from './nav-morph.css?raw';\n\n/**\n * `<usa-nav-morph>` (6.6) — navigation links with an indicator that morphs\n * between them: it follows the hovered / focused link (stretching from the\n * old one, leading edge first) and settles back on the current page\n * (`aria-current=\"page\"`, `active` index, or a click). `indicator=\"underline |\n * pill | blob | dot\"`. Arrow keys move focus across links. Event\n * `usa:change` (`{ index }`). Reduced motion: the indicator jumps.\n */\nexport interface UsaNavMorphElement extends UsaElement {\n active: number;\n}\n\nexport const NAV_INDICATORS = ['underline', 'pill', 'blob', 'dot'] as const;\n\nexport function defineNavMorph(tag = 'usa-nav-morph'): CustomElementConstructor | undefined {\n return defineElement(\n tag,\n (Base) => {\n class UsaNavMorph extends Base {\n static get observedAttributes(): string[] {\n return ['indicator'];\n }\n private _links: HTMLElement[] = [];\n private _ink: HTMLElement | null = null;\n private _active = 0;\n private _at = -1;\n\n get active(): number {\n return this._active;\n }\n set active(i: number) {\n this.setActive(i, false);\n }\n\n mount(): void {\n const ind = this.str('indicator', 'underline');\n this.dataset.indicator = (NAV_INDICATORS as readonly string[]).includes(ind) ? ind : 'underline';\n if (this.localName !== 'nav' && !this.hasAttribute('role')) this.setAttribute('role', 'navigation');\n if (!this.hasAttribute('aria-label')) this.setAttribute('aria-label', this.str('label', 'Main'));\n this.querySelectorAll(':scope > .usa-nm-ink').forEach((n) => n.remove());\n this._links = ownChildren(this);\n this._ink = part('span', 'usa-nm-ink', { 'aria-hidden': 'true' });\n this.prepend(this._ink);\n const cur = this._links.findIndex((l) => l.getAttribute('aria-current') === 'page');\n this._active = cur >= 0 ? cur : Math.max(0, Math.min(this._links.length - 1, Math.round(this.num('active', 0))));\n this._at = -1;\n this._links.forEach((l, i) => {\n this.listen(l, 'pointerenter', () => this.moveTo(i));\n this.listen(l, 'focus', () => this.moveTo(i));\n this.listen(l, 'click', () => this.setActive(i, true));\n this.listen(l, 'keydown', (e: KeyboardEvent) => {\n const n = arrowIndex(e, i, this._links.length);\n if (n >= 0) {\n e.preventDefault();\n this._links[n].focus();\n }\n });\n });\n this.listen(this, 'pointerleave', () => this.moveTo(this._active));\n this.listen(this, 'focusout', (e: FocusEvent) => !this.contains(e.relatedTarget as Node) && this.moveTo(this._active));\n this.sync();\n this.moveTo(this._active);\n if (typeof ResizeObserver === 'function') {\n const ro = new ResizeObserver(() => this.place(this._at < 0 ? this._active : this._at));\n ro.observe(this);\n this.onCleanup(() => ro.disconnect());\n }\n }\n\n private rect(i: number): [number, number] {\n const l = this._links[i];\n return l ? [l.offsetLeft, l.offsetWidth] : [0, 0];\n }\n\n private place(i: number): void {\n if (!this._ink) return;\n const [x, w] = this.rect(i);\n this._ink.style.transform = `translateX(${x}px)`;\n this._ink.style.width = `${w}px`;\n }\n\n private moveTo(i: number): void {\n const from = this._at;\n this._at = i;\n this.place(i);\n if (from < 0 || from === i || this.reduced || !this._ink) return;\n const [x0, w0] = this.rect(from);\n const [x1, w1] = this.rect(i);\n const mid = x1 > x0 ? { transform: `translateX(${x0}px)`, width: `${x1 + w1 - x0}px` } : { transform: `translateX(${x1}px)`, width: `${x0 + w0 - x1}px` };\n const blob = this.dataset.indicator === 'blob';\n this.motion(this._ink, [\n { transform: `translateX(${x0}px)`, width: `${w0}px` },\n { ...mid, offset: 0.4, ...(blob ? { borderRadius: '40% 60% 55% 45% / 60% 40% 60% 40%' } : {}) },\n { transform: `translateX(${x1}px)`, width: `${w1}px` },\n ], { duration: 420, easing: 'cubic-bezier(.22,1,.36,1)' });\n }\n\n private sync(): void {\n this._links.forEach((l, k) => {\n if (k === this._active) l.setAttribute('aria-current', 'page');\n else if (l.getAttribute('aria-current') === 'page') l.removeAttribute('aria-current');\n });\n }\n\n private setActive(i: number, user: boolean): void {\n const n = Math.max(0, Math.min(this._links.length - 1, Math.round(i)));\n const changed = n !== this._active;\n this._active = n;\n this.sync();\n this.moveTo(n);\n if (changed && user) this.emit('change', { index: n });\n }\n }\n return UsaNavMorph as unknown as CustomElementConstructor;\n },\n { id: 'nav-morph', text: css }\n );\n}\n","import { defineElement, type UsaElement } from '../base';\nimport css from './menu-toggle.css?raw';\n\n/**\n * `<usa-menu-toggle>` (6.6) — the hamburger button that morphs into its\n * \"open\" icon: `variant=\"cross\"` (✕, default), `arrow` (←), `minus` (—) or\n * `plus-x` (+ turning into ✕). It is a real `<button>`-like control\n * (`role=\"button\"`, Space / Enter, `aria-expanded`); `for=\"<id>\"` sets\n * `aria-controls` and toggles the `hidden` attribute (or `.open()` /\n * `.close()` / `.show()`) of that element. `pressed` reflects the state.\n * Event `usa:toggle` (`{ open }`). Reduced motion: the icon switches without\n * the morph.\n */\nexport interface UsaMenuToggleElement extends UsaElement {\n open: boolean;\n toggle(force?: boolean): void;\n}\n\nexport const TOGGLE_VARIANTS = ['cross', 'arrow', 'minus', 'plus-x'] as const;\n\nexport function defineMenuToggle(tag = 'usa-menu-toggle'): CustomElementConstructor | undefined {\n return defineElement(\n tag,\n (Base) => {\n class UsaMenuToggle extends Base {\n static get observedAttributes(): string[] {\n return ['variant'];\n }\n private _open = false;\n\n get open(): boolean {\n return this._open;\n }\n set open(v: boolean) {\n this.toggle(v);\n }\n\n mount(): void {\n const v = this.str('variant', 'cross');\n this.dataset.variant = (TOGGLE_VARIANTS as readonly string[]).includes(v) ? v : 'cross';\n if (!this.querySelector(':scope > .usa-mt-box')) {\n const box = document.createElement('span');\n box.className = 'usa-mt-box';\n box.setAttribute('aria-hidden', 'true');\n box.setAttribute('data-usa-part', '');\n box.innerHTML = '<span class=\"usa-mt-bar\"></span><span class=\"usa-mt-bar\"></span><span class=\"usa-mt-bar\"></span>';\n this.prepend(box);\n }\n this.setAttribute('role', 'button');\n if (!this.hasAttribute('tabindex')) this.tabIndex = 0;\n if (!this.hasAttribute('aria-label') && !this.textContent?.trim()) this.setAttribute('aria-label', this.str('label', 'Menu'));\n const id = this.str('for', '');\n if (id) this.setAttribute('aria-controls', id);\n this._open = this.flag('pressed');\n this.sync(false);\n this.listen(this, 'click', () => this.toggle());\n this.listen(this, 'keydown', (e: KeyboardEvent) => {\n if (e.key === 'Enter' || e.key === ' ') {\n e.preventDefault();\n this.toggle();\n }\n });\n }\n\n private sync(animate: boolean): void {\n this.setAttribute('aria-expanded', String(this._open));\n this.toggleAttribute('data-open', this._open);\n this.toggleAttribute('data-animate', animate && !this.reduced);\n const target = this.str('for', '') ? (document.getElementById(this.str('for', '')) as (HTMLElement & { open?: unknown; show?: () => void; close?: () => void }) | null) : null;\n if (!target || !animate) return;\n if (this._open && typeof target.show === 'function') target.show();\n else if (!this._open && typeof target.close === 'function') target.close();\n else target.hidden = !this._open;\n }\n\n toggle(force?: boolean): void {\n const next = typeof force === 'boolean' ? force : !this._open;\n if (next === this._open) return;\n this._open = next;\n this.toggleAttribute('pressed', next);\n this.sync(true);\n this.emit('toggle', { open: next });\n }\n }\n return UsaMenuToggle as unknown as CustomElementConstructor;\n },\n { id: 'menu-toggle', text: css }\n );\n}\n","import { defineElement, type UsaElement } from '../base';\nimport { part, nextId } from './shared';\nimport css from './tip.css?raw';\n\n/**\n * `<usa-tip>` (6.6) — tooltip / popover 2.0. Wrap the trigger; the tip\n * content is the `text` attribute or a child with `[slot=\"tip\"]` / `[data-tip]`\n * (rich content). It springs out of the trigger with its arrow,\n * auto-flips to stay inside the viewport and shifts along the edge.\n * `placement=\"top | bottom | left | right\"`, `trigger=\"hover | click\"`\n * (`click` = popover: toggles, Esc / outside click close), `delay` (ms).\n * Hover tips also open on keyboard focus and close on Esc (WCAG 1.4.13).\n * Events `usa:open`, `usa:close`. Reduced motion: a short fade.\n */\nexport interface UsaTipElement extends UsaElement {\n readonly opened: boolean;\n show(): void;\n hide(): void;\n}\n\nexport const TIP_PLACEMENTS = ['top', 'bottom', 'left', 'right'] as const;\nconst FLIP: Record<string, string> = { top: 'bottom', bottom: 'top', left: 'right', right: 'left' };\n\nexport function defineTip(tag = 'usa-tip'): CustomElementConstructor | undefined {\n return defineElement(\n tag,\n (Base) => {\n class UsaTip extends Base {\n static get observedAttributes(): string[] {\n return ['text', 'placement', 'trigger'];\n }\n private _bubble: HTMLElement | null = null;\n private _trigger: HTMLElement | null = null;\n private _open = false;\n private _t: ReturnType<typeof setTimeout> | 0 = 0;\n\n get opened(): boolean {\n return this._open;\n }\n\n mount(): void {\n this.querySelectorAll(':scope > .usa-tip-bubble[data-usa-part]').forEach((n) => n.remove());\n const rich = this.querySelector<HTMLElement>(':scope > [slot=\"tip\"], :scope > [data-tip]');\n this._trigger = Array.from(this.children).find((c) => c !== rich && !c.matches('.usa-tip-bubble')) as HTMLElement | null;\n const b = rich || part('span', 'usa-tip-bubble');\n b.classList.add('usa-tip-bubble');\n if (!rich) b.textContent = this.str('text', '');\n b.id ||= nextId('usa-tipb');\n b.hidden = true;\n if (!b.querySelector(':scope > .usa-tip-arrow')) b.append(part('span', 'usa-tip-arrow', { 'aria-hidden': 'true' }));\n if (!b.isConnected) this.append(b);\n this._bubble = b;\n const click = this.str('trigger', 'hover') === 'click';\n b.setAttribute('role', click ? 'dialog' : 'tooltip');\n const t = this._trigger;\n if (t) {\n if (click) {\n t.setAttribute('aria-expanded', 'false');\n t.setAttribute('aria-controls', b.id);\n t.setAttribute('aria-haspopup', 'dialog');\n this.listen(t, 'click', () => (this._open ? this.hide() : this.show()));\n this.listen(document, 'pointerdown', (e: PointerEvent) => this._open && !this.contains(e.target as Node) && this.hide());\n } else {\n t.setAttribute('aria-describedby', b.id);\n const delay = this.num('delay', 120);\n const later = (fn: () => void, ms: number) => {\n if (this._t) clearTimeout(this._t);\n this._t = setTimeout(fn, ms);\n };\n this.listen(this, 'pointerenter', () => later(() => this.show(), delay));\n this.listen(this, 'pointerleave', () => later(() => this.hide(), 80));\n this.listen(t, 'focusin', () => this.show());\n this.listen(t, 'focusout', () => this.hide());\n this.onCleanup(() => this._t && clearTimeout(this._t));\n }\n }\n this.listen(document, 'keydown', (e: KeyboardEvent) => {\n if (e.key === 'Escape' && this._open) {\n this.hide();\n if (click) t?.focus();\n }\n });\n }\n\n private position(): string {\n const b = this._bubble!;\n const t = this._trigger || this;\n const want = (TIP_PLACEMENTS as readonly string[]).includes(this.str('placement', 'top')) ? this.str('placement', 'top') : 'top';\n const tr = t.getBoundingClientRect();\n const br = b.getBoundingClientRect();\n const vw = document.documentElement.clientWidth || window.innerWidth || 1024;\n const vh = window.innerHeight || 768;\n const gap = 10;\n const fits = (p: string) => (p === 'top' ? tr.top - br.height - gap >= 4 : p === 'bottom' ? tr.bottom + br.height + gap <= vh - 4 : p === 'left' ? tr.left - br.width - gap >= 4 : tr.right + br.width + gap <= vw - 4);\n const place = fits(want) || !fits(FLIP[want]) ? want : FLIP[want];\n const host = this.getBoundingClientRect();\n let x: number;\n let y: number;\n if (place === 'top' || place === 'bottom') {\n x = tr.left + tr.width / 2 - br.width / 2;\n y = place === 'top' ? tr.top - br.height - gap : tr.bottom + gap;\n } else {\n x = place === 'left' ? tr.left - br.width - gap : tr.right + gap;\n y = tr.top + tr.height / 2 - br.height / 2;\n }\n const cx = Math.min(Math.max(4, x), Math.max(4, vw - br.width - 4)); // shift inside the viewport\n b.style.left = `${(cx - host.left).toFixed(1)}px`;\n b.style.top = `${(y - host.top).toFixed(1)}px`;\n b.style.setProperty('--usa-tip-shift', `${(x - cx).toFixed(1)}px`);\n b.dataset.placement = place;\n return place;\n }\n\n show(): void {\n const b = this._bubble;\n if (!b || this._open) return;\n this._open = true;\n b.hidden = false;\n const place = this.position();\n this._trigger?.setAttribute('aria-expanded', this._trigger.hasAttribute('aria-expanded') ? 'true' : '');\n if (this._trigger?.getAttribute('aria-expanded') === '') this._trigger.removeAttribute('aria-expanded');\n const off = place === 'top' ? '0 6px' : place === 'bottom' ? '0 -6px' : place === 'left' ? '6px 0' : '-6px 0';\n this.motion(b, this.reduced ? [{ opacity: 0 }, { opacity: 1 }] : [{ opacity: 0, translate: off, scale: '0.6' }, { opacity: 1, translate: '0 0', scale: '1.04', offset: 0.65 }, { opacity: 1, translate: '0 0', scale: '1' }], { duration: this.reduced ? 120 : 340, easing: 'cubic-bezier(.3,1.3,.5,1)' });\n this.emit('open');\n }\n\n hide(): void {\n const b = this._bubble;\n if (!b || !this._open) return;\n this._open = false;\n if (this._trigger?.hasAttribute('aria-expanded')) this._trigger.setAttribute('aria-expanded', 'false');\n const a = this.motion(b, [{ opacity: 1 }, { opacity: 0, scale: this.reduced ? '1' : '0.9' }], { duration: 120, easing: 'ease-in' });\n const done = () => {\n if (!this._open) b.hidden = true;\n };\n if (a) a.finished.then(done, done);\n else done();\n this.emit('close');\n }\n }\n return UsaTip as unknown as CustomElementConstructor;\n },\n { id: 'tip', text: css }\n );\n}\n","import { defineElement, type UsaElement } from '../base';\nimport { ownChildren, clampN } from './shared';\nimport css from './stepper.css?raw';\n\n/**\n * `<usa-stepper>` (6.7) — a step indicator / wizard. Each child is a step\n * (its text is the label). `value` is the current step (0-based); finished\n * steps pop a check mark, the connecting rail fills toward the current step\n * and the current step pulses once. `orientation=\"vertical\"` stacks the\n * steps. `next()` / `prev()` / `value`; event `usa:change` (`{ value }`).\n * The list is an ordered list with `aria-current=\"step\"`. Reduced motion: no\n * pop or pulse, the rail jumps.\n */\nexport interface UsaStepperElement extends UsaElement {\n value: number;\n readonly steps: HTMLElement[];\n next(): void;\n prev(): void;\n}\n\nexport function defineStepper(tag = 'usa-stepper'): CustomElementConstructor | undefined {\n return defineElement(\n tag,\n (Base) => {\n class UsaStepper extends Base {\n static get observedAttributes(): string[] {\n return ['orientation'];\n }\n private _steps: HTMLElement[] = [];\n private _v = 0;\n private _fill: HTMLElement | null = null;\n\n get steps(): HTMLElement[] {\n return this._steps;\n }\n get value(): number {\n return this._v;\n }\n set value(v: number) {\n this.go(v);\n }\n\n mount(): void {\n this.dataset.orientation = this.str('orientation', 'horizontal') === 'vertical' ? 'vertical' : 'horizontal';\n this.setAttribute('role', 'list');\n if (!this.hasAttribute('aria-label')) this.setAttribute('aria-label', this.str('label', 'Progress'));\n this._steps = ownChildren(this);\n if (!this.querySelector(':scope > .usa-st-rail')) {\n const rail = document.createElement('span');\n rail.className = 'usa-st-rail';\n rail.setAttribute('data-usa-part', '');\n rail.setAttribute('aria-hidden', 'true');\n rail.innerHTML = '<span class=\"usa-st-fill\"></span>';\n this.prepend(rail);\n }\n this._fill = this.querySelector('.usa-st-fill');\n this._steps.forEach((s, i) => {\n s.classList.add('usa-st-step');\n s.setAttribute('role', 'listitem');\n s.style.setProperty('--usa-st-i', String(i));\n if (!s.querySelector(':scope > .usa-st-dot')) {\n const d = document.createElement('span');\n d.className = 'usa-st-dot';\n d.setAttribute('aria-hidden', 'true');\n d.setAttribute('data-usa-part', '');\n d.innerHTML = `<span class=\"usa-st-num\">${i + 1}</span><svg class=\"usa-st-check\" viewBox=\"0 0 16 16\"><path d=\"M3 8.5l3.2 3L13 4.8\"/></svg>`;\n s.prepend(d);\n }\n if (s.hasAttribute('data-clickable') || this.flag('clickable')) this.listen(s, 'click', () => this.go(i));\n });\n this._v = clampN(this.num('value', 0) | 0, 0, Math.max(0, this._steps.length - 1));\n this.sync(-1);\n }\n\n private sync(prev: number): void {\n const n = this._steps.length;\n this._steps.forEach((s, i) => {\n s.toggleAttribute('data-done', i < this._v);\n s.toggleAttribute('data-current', i === this._v);\n if (i === this._v) s.setAttribute('aria-current', 'step');\n else s.removeAttribute('aria-current');\n });\n const pct = n > 1 ? (this._v / (n - 1)) * 100 : 0;\n this.style.setProperty('--usa-st-p', pct.toFixed(2) + '%');\n if (prev < 0 || this.reduced) return;\n const cur = this._steps[this._v]?.querySelector('.usa-st-dot');\n if (cur) this.motion(cur, [{ transform: 'scale(1)', boxShadow: '0 0 0 0 rgba(124,92,255,.55)' }, { transform: 'scale(1.18)', offset: 0.35 }, { transform: 'scale(1)', boxShadow: '0 0 0 12px rgba(124,92,255,0)' }], { duration: 620, easing: 'ease-out' });\n if (this._v > prev) {\n const done = this._steps[prev]?.querySelector('.usa-st-check');\n if (done) this.motion(done, [{ strokeDashoffset: 20, transform: 'scale(.4)' }, { strokeDashoffset: 0, transform: 'scale(1)' }], { duration: 420, easing: 'cubic-bezier(.3,1.4,.5,1)' });\n }\n }\n\n go(i: number): void {\n const v = clampN(Math.round(i), 0, Math.max(0, this._steps.length - 1));\n if (v === this._v) return;\n const prev = this._v;\n this._v = v;\n this.setAttribute('value', String(v));\n this.sync(prev);\n this.emit('change', { value: v });\n }\n next(): void {\n this.go(this._v + 1);\n }\n prev(): void {\n this.go(this._v - 1);\n }\n }\n return UsaStepper as unknown as CustomElementConstructor;\n },\n { id: 'stepper', text: css }\n );\n}\n","import { defineElement, type UsaElement } from '../base';\nimport { clampN, dropParts } from './shared';\nimport css from './pagination.css?raw';\n\n/**\n * `<usa-pagination>` (6.7) — page buttons with a sliding \"ink\" that springs\n * to the current page (squashing as it travels) and numbers that slide in\n * from the direction of travel when the window of pages shifts. Attributes\n * `total`, `page` (1-based), `siblings` (pages each side, 1). Prev / next\n * buttons, ellipses, `aria-current=\"page\"`; event `usa:change` (`{ page }`).\n * Reduced motion: the ink jumps and numbers do not slide.\n */\nexport interface UsaPaginationElement extends UsaElement {\n page: number;\n readonly total: number;\n}\n\n/** The visible page list: numbers and `'…'` gaps (1-based). */\nexport function pageWindow(page: number, total: number, siblings = 1): (number | '…')[] {\n const out: (number | '…')[] = [];\n const lo = Math.max(2, page - siblings);\n const hi = Math.min(total - 1, page + siblings);\n out.push(1);\n if (lo > 2) out.push('…');\n for (let p = lo; p <= hi; p++) out.push(p);\n if (hi < total - 1) out.push('…');\n if (total > 1) out.push(total);\n return out;\n}\n\nexport function definePagination(tag = 'usa-pagination'): CustomElementConstructor | undefined {\n return defineElement(\n tag,\n (Base) => {\n class UsaPagination extends Base {\n static get observedAttributes(): string[] {\n return ['total', 'siblings'];\n }\n private _page = 1;\n private _ink: HTMLElement | null = null;\n private _list: HTMLElement | null = null;\n\n get total(): number {\n return Math.max(1, this.num('total', 1) | 0);\n }\n get page(): number {\n return this._page;\n }\n set page(p: number) {\n this.go(p);\n }\n\n mount(): void {\n dropParts(this);\n this.setAttribute('role', 'navigation');\n if (!this.hasAttribute('aria-label')) this.setAttribute('aria-label', this.str('label', 'Pagination'));\n this._page = clampN(this.num('page', 1) | 0, 1, this.total);\n const prev = this.btn('‹', 'Previous page', 'usa-pg-prev');\n const next = this.btn('›', 'Next page', 'usa-pg-next');\n this._list = document.createElement('span');\n this._list.className = 'usa-pg-list';\n this._list.setAttribute('data-usa-part', '');\n this._ink = document.createElement('span');\n this._ink.className = 'usa-pg-ink';\n this._ink.setAttribute('aria-hidden', 'true');\n this._list.appendChild(this._ink);\n this.append(prev, this._list, next);\n this.listen(prev, 'click', () => this.go(this._page - 1));\n this.listen(next, 'click', () => this.go(this._page + 1));\n this.listen(this._list, 'click', (e: Event) => {\n const b = (e.target as HTMLElement).closest?.('[data-page]') as HTMLElement | null;\n if (b) this.go(Number(b.dataset.page));\n });\n this.render(0);\n }\n\n private btn(txt: string, label: string, cls: string): HTMLButtonElement {\n const b = document.createElement('button');\n b.type = 'button';\n b.className = 'usa-pg-btn ' + cls;\n b.textContent = txt;\n b.setAttribute('aria-label', label);\n b.setAttribute('data-usa-part', '');\n return b;\n }\n\n private render(dir: number): void {\n const list = this._list!;\n const old = new Map(Array.from(list.querySelectorAll<HTMLElement>('[data-page]')).map((b) => [b.dataset.page, b]));\n list.querySelectorAll('.usa-pg-btn,.usa-pg-gap').forEach((n) => n.remove());\n for (const p of pageWindow(this._page, this.total, Math.max(0, this.num('siblings', 1) | 0))) {\n if (p === '…') {\n const g = document.createElement('span');\n g.className = 'usa-pg-gap';\n g.textContent = '…';\n g.setAttribute('aria-hidden', 'true');\n list.appendChild(g);\n continue;\n }\n const b = this.btn(String(p), `Page ${p}`, 'usa-pg-num');\n b.dataset.page = String(p);\n if (p === this._page) b.setAttribute('aria-current', 'page');\n list.appendChild(b);\n if (dir && !old.has(String(p)) && !this.reduced) this.motion(b, [{ transform: `translateX(${dir * 14}px)`, opacity: 0 }, { transform: 'none', opacity: 1 }], { duration: 280, easing: 'ease-out' });\n }\n (this.querySelector('.usa-pg-prev') as HTMLButtonElement).disabled = this._page <= 1;\n (this.querySelector('.usa-pg-next') as HTMLButtonElement).disabled = this._page >= this.total;\n this.placeInk(dir !== 0);\n }\n\n private placeInk(animate: boolean): void {\n const cur = this._list?.querySelector<HTMLElement>('[aria-current=\"page\"]');\n const ink = this._ink;\n if (!cur || !ink) return;\n const from = ink.style.transform;\n const to = `translateX(${cur.offsetLeft}px)`;\n ink.style.width = cur.offsetWidth + 'px';\n ink.style.transform = to;\n if (animate && from && from !== to && !this.reduced) this.motion(ink, [{ transform: from }, { transform: `${to} scaleX(1.35) scaleY(.8)`, offset: 0.55 }, { transform: to }], { duration: 420, easing: 'cubic-bezier(.3,1.3,.5,1)' });\n }\n\n go(p: number): void {\n const v = clampN(Math.round(p), 1, this.total);\n if (v === this._page) return;\n const dir = v > this._page ? 1 : -1;\n this._page = v;\n this.setAttribute('page', String(v));\n this.render(dir);\n this.emit('change', { page: v });\n }\n }\n return UsaPagination as unknown as CustomElementConstructor;\n },\n { id: 'pagination', text: css }\n );\n}\n","import { defineElement, type UsaElement } from '../base';\nimport { ownChildren, arrowIndex, clampN } from './shared';\nimport css from './segmented.css?raw';\n\n/**\n * `<usa-segmented>` (6.7) — a segmented control (iOS style): a thumb slides\n * under the chosen segment with a spring and stretches while it travels;\n * the chosen label scales up slightly. Children are the segments (buttons\n * or any element). It is a radio group (`role=\"radiogroup\"`, arrow keys,\n * Home / End, roving tabindex). `value` is the selected index; `usa:change`\n * (`{ value, label }`). `variant=\"ios | pill | outline\"`. Reduced motion:\n * the thumb jumps.\n */\nexport interface UsaSegmentedElement extends UsaElement {\n value: number;\n readonly segments: HTMLElement[];\n}\n\nexport const SEGMENTED_VARIANTS = ['ios', 'pill', 'outline'] as const;\n\nexport function defineSegmented(tag = 'usa-segmented'): CustomElementConstructor | undefined {\n return defineElement(\n tag,\n (Base) => {\n class UsaSegmented extends Base {\n static get observedAttributes(): string[] {\n return ['variant'];\n }\n private _segs: HTMLElement[] = [];\n private _v = 0;\n private _thumb: HTMLElement | null = null;\n\n get segments(): HTMLElement[] {\n return this._segs;\n }\n get value(): number {\n return this._v;\n }\n set value(v: number) {\n this.select(v, false);\n }\n\n mount(): void {\n const v = this.str('variant', 'ios');\n this.dataset.variant = (SEGMENTED_VARIANTS as readonly string[]).includes(v) ? v : 'ios';\n this.setAttribute('role', 'radiogroup');\n if (!this.hasAttribute('aria-label')) this.setAttribute('aria-label', this.str('label', 'Options'));\n this._segs = ownChildren(this);\n if (!this.querySelector(':scope > .usa-seg-thumb')) {\n const t = document.createElement('span');\n t.className = 'usa-seg-thumb';\n t.setAttribute('aria-hidden', 'true');\n t.setAttribute('data-usa-part', '');\n this.prepend(t);\n }\n this._thumb = this.querySelector('.usa-seg-thumb');\n const pre = this._segs.findIndex((s) => s.hasAttribute('selected') || s.getAttribute('aria-checked') === 'true');\n this._v = clampN(pre >= 0 ? pre : this.num('value', 0) | 0, 0, Math.max(0, this._segs.length - 1));\n this._segs.forEach((s, i) => {\n s.classList.add('usa-seg-item');\n s.setAttribute('role', 'radio');\n this.listen(s, 'click', () => this.select(i, true));\n this.listen(s, 'keydown', (e: KeyboardEvent) => {\n const j = arrowIndex(e, i, this._segs.length);\n if (j < 0) return;\n e.preventDefault();\n this.select(j, true);\n this._segs[j].focus();\n });\n });\n this.sync(false);\n if (typeof ResizeObserver === 'function') {\n const ro = new ResizeObserver(() => this.place(false));\n ro.observe(this);\n this.onCleanup(() => ro.disconnect());\n }\n }\n\n private sync(animate: boolean): void {\n this._segs.forEach((s, i) => {\n s.setAttribute('aria-checked', String(i === this._v));\n s.tabIndex = i === this._v ? 0 : -1;\n s.toggleAttribute('data-selected', i === this._v);\n });\n this.place(animate);\n }\n\n private place(animate: boolean): void {\n const s = this._segs[this._v];\n const t = this._thumb;\n if (!s || !t) return;\n const from = { x: t.offsetLeft, w: t.offsetWidth };\n t.style.left = s.offsetLeft + 'px';\n t.style.width = s.offsetWidth + 'px';\n if (!animate || this.reduced || !from.w) return;\n const dx = from.x - s.offsetLeft;\n const sx = from.w / (s.offsetWidth || 1);\n this.motion(t, [{ transform: `translateX(${dx}px) scaleX(${sx})` }, { transform: `translateX(${dx * 0.35}px) scaleX(${Math.max(sx, 1) * 1.18}) scaleY(.88)`, offset: 0.45 }, { transform: 'none' }], { duration: 430, easing: 'cubic-bezier(.3,1.25,.5,1)' });\n }\n\n select(i: number, user: boolean): void {\n const v = clampN(i | 0, 0, Math.max(0, this._segs.length - 1));\n if (v === this._v) return;\n this._v = v;\n this.sync(true);\n if (user) this.emit('change', { value: v, label: this._segs[v]?.textContent?.trim() || '' });\n }\n }\n return UsaSegmented as unknown as CustomElementConstructor;\n },\n { id: 'segmented', text: css }\n );\n}\n","import { defineElement, type UsaElement } from '../base';\nimport css from './switch.css?raw';\n\n/**\n * `<usa-switch>` (6.7) — toggle switch variants: `ios` (the thumb stretches\n * while pressed and slides), `daynight` (sun → moon with stars and\n * clouds), `bounce` (the thumb squashes and bounces at the end) and\n * `liquid` (a gooey fill pours behind the thumb). A real switch:\n * `role=\"switch\"`, `aria-checked`, Space / Enter, `disabled`; `checked`\n * property / attribute; inside a `<form>` with `name` it submits `value`\n * (\"on\") when checked. Event `usa:change` (`{ checked }`). Reduced motion:\n * no squash, bounce or pour — it just switches.\n */\nexport interface UsaSwitchElement extends UsaElement {\n checked: boolean;\n toggle(force?: boolean): void;\n}\n\nexport const SWITCH_VARIANTS = ['ios', 'daynight', 'bounce', 'liquid'] as const;\n\nexport function defineSwitch(tag = 'usa-switch'): CustomElementConstructor | undefined {\n return defineElement(\n tag,\n (Base) => {\n class UsaSwitch extends Base {\n static get observedAttributes(): string[] {\n return ['variant'];\n }\n private _on = false;\n private _input: HTMLInputElement | null = null;\n\n get checked(): boolean {\n return this._on;\n }\n set checked(v: boolean) {\n this.toggle(!!v, false);\n }\n\n mount(): void {\n const v = this.str('variant', 'ios');\n this.dataset.variant = (SWITCH_VARIANTS as readonly string[]).includes(v) ? v : 'ios';\n if (!this.querySelector(':scope > .usa-sw-track')) {\n const t = document.createElement('span');\n t.className = 'usa-sw-track';\n t.setAttribute('aria-hidden', 'true');\n t.setAttribute('data-usa-part', '');\n t.innerHTML = '<span class=\"usa-sw-fill\"></span><span class=\"usa-sw-deco\"></span><span class=\"usa-sw-thumb\"></span>';\n this.prepend(t);\n }\n this.setAttribute('role', 'switch');\n if (!this.hasAttribute('tabindex')) this.tabIndex = 0;\n if (!this.hasAttribute('aria-label') && !this.textContent?.trim()) this.setAttribute('aria-label', this.str('label', 'Toggle'));\n this._on = this.flag('checked');\n if (this.str('name', '') && !this._input) {\n this._input = document.createElement('input');\n this._input.type = 'hidden';\n this._input.setAttribute('data-usa-part', '');\n this.appendChild(this._input);\n }\n this.sync(false);\n const thumb = this.querySelector('.usa-sw-thumb') as HTMLElement;\n this.listen(this, 'pointerdown', () => !this.reduced && this.toggleAttribute('data-press', true));\n this.listen(this, 'pointerup', () => this.removeAttribute('data-press'));\n this.listen(this, 'pointerleave', () => this.removeAttribute('data-press'));\n this.listen(this, 'click', () => this.toggle(undefined, true));\n this.listen(this, 'keydown', (e: KeyboardEvent) => {\n if (e.key === ' ' || e.key === 'Enter') {\n e.preventDefault();\n this.toggle(undefined, true);\n }\n });\n void thumb;\n }\n\n private sync(animate: boolean): void {\n this.setAttribute('aria-checked', String(this._on));\n this.toggleAttribute('data-on', this._on);\n this.toggleAttribute('data-animate', animate && !this.reduced);\n if (this._input) {\n this._input.name = this.str('name', '');\n this._input.value = this.str('value', 'on');\n this._input.disabled = !this._on;\n }\n if (!animate || this.reduced) return;\n const thumb = this.querySelector('.usa-sw-thumb');\n if (thumb && this.dataset.variant === 'bounce') this.motion(thumb, [{ scale: '1 1' }, { scale: '1.35 .7', offset: 0.55 }, { scale: '.9 1.1', offset: 0.75 }, { scale: '1 1' }], { duration: 520, easing: 'ease-out' });\n const fill = this.querySelector('.usa-sw-fill');\n if (fill && this.dataset.variant === 'liquid') this.motion(fill, [{ borderRadius: '50% 50% 40% 60%' }, { borderRadius: '30% 70% 60% 40%', offset: 0.5 }, { borderRadius: '999px' }], { duration: 600, easing: 'ease-out' });\n }\n\n toggle(force?: boolean, user = false): void {\n if (this.flag('disabled') && user) return;\n const next = typeof force === 'boolean' ? force : !this._on;\n if (next === this._on) return;\n this._on = next;\n this.toggleAttribute('checked', next);\n this.sync(user);\n if (user) this.emit('change', { checked: next });\n }\n }\n return UsaSwitch as unknown as CustomElementConstructor;\n },\n { id: 'switch', text: css }\n );\n}\n","import { defineElement, type UsaElement } from '../base';\nimport { ownChildren } from './shared';\nimport css from './kanban.css?raw';\n\n/**\n * `<usa-kanban>` (6.8) — a kanban board with drag-sort. Children are the\n * columns (any element; a `[data-title]` attribute or its first heading is\n * the title); the column's `[data-card]` children (or `<li>`s) are cards.\n * Drag a card (pointer or touch): it lifts and tilts toward the drag\n * direction, a placeholder opens where it will land, and the other cards\n * glide out of the way (FLIP). Keyboard: Space / Enter picks a card up,\n * arrows move it (← → between columns, ↑ ↓ within), Space drops, Esc cancels;\n * moves are announced politely. Event `usa:move` (`{ card, from, to, index }`).\n * Reduced motion: no tilt or glide.\n */\nexport interface UsaKanbanElement extends UsaElement {\n readonly columns: HTMLElement[];\n cardsOf(col: HTMLElement): HTMLElement[];\n move(card: HTMLElement, to: HTMLElement, index: number): void;\n}\n\nexport function defineKanban(tag = 'usa-kanban'): CustomElementConstructor | undefined {\n return defineElement(\n tag,\n (Base) => {\n class UsaKanban extends Base {\n private _cols: HTMLElement[] = [];\n private _live: HTMLElement | null = null;\n private _held: HTMLElement | null = null;\n\n get columns(): HTMLElement[] {\n return this._cols;\n }\n\n cardsOf(col: HTMLElement): HTMLElement[] {\n return Array.from(col.children).filter((c): c is HTMLElement => c instanceof HTMLElement && (c.hasAttribute('data-card') || c.localName === 'li'));\n }\n\n mount(): void {\n this._cols = ownChildren(this);\n this.setAttribute('role', 'group');\n if (!this.hasAttribute('aria-label')) this.setAttribute('aria-label', this.str('label', 'Board'));\n if (!this.querySelector(':scope > .usa-kb-live')) {\n const l = document.createElement('span');\n l.className = 'usa-kb-live';\n l.setAttribute('data-usa-part', '');\n l.setAttribute('aria-live', 'polite');\n this.appendChild(l);\n }\n this._live = this.querySelector('.usa-kb-live');\n this._cols.forEach((col) => {\n col.classList.add('usa-kb-col');\n col.setAttribute('role', 'list');\n const title = col.dataset.title || col.querySelector('h1,h2,h3,h4,h5,h6')?.textContent?.trim() || '';\n if (title) col.setAttribute('aria-label', title);\n this.cardsOf(col).forEach((c) => this.prepCard(c));\n });\n this.listen(this, 'pointerdown', (e: PointerEvent) => this.drag(e));\n this.listen(this, 'keydown', (e: KeyboardEvent) => this.key(e));\n }\n\n private prepCard(c: HTMLElement): void {\n c.classList.add('usa-kb-card');\n c.setAttribute('role', 'listitem');\n if (!c.hasAttribute('tabindex')) c.tabIndex = 0;\n c.setAttribute('aria-roledescription', 'draggable card');\n }\n\n private say(msg: string): void {\n if (this._live) this._live.textContent = msg;\n }\n\n private colName(col: HTMLElement): string {\n return col.getAttribute('aria-label') || `column ${this._cols.indexOf(col) + 1}`;\n }\n\n /** FLIP: run `change`, then glide every card from its old box. */\n private flip(change: () => void): void {\n const cards = this._cols.flatMap((c) => this.cardsOf(c));\n const before = new Map(cards.map((c) => [c, c.getBoundingClientRect()]));\n change();\n if (this.reduced) return;\n for (const c of cards) {\n const a = before.get(c)!;\n const b = c.getBoundingClientRect();\n const dx = a.left - b.left;\n const dy = a.top - b.top;\n if ((dx || dy) && c !== this._held) this.motion(c, [{ transform: `translate(${dx}px,${dy}px)` }, { transform: 'none' }], { duration: 260, easing: 'cubic-bezier(.2,.8,.2,1)' });\n }\n }\n\n move(card: HTMLElement, to: HTMLElement, index: number): void {\n const from = card.parentElement as HTMLElement;\n const list = this.cardsOf(to).filter((c) => c !== card);\n const i = Math.max(0, Math.min(list.length, index));\n this.flip(() => {\n const ref = list[i] || null;\n if (ref) to.insertBefore(card, ref);\n else to.appendChild(card);\n });\n this.emit('move', { card, from, to, index: i });\n }\n\n private drag(e: PointerEvent): void {\n const card = (e.target as HTMLElement).closest?.('.usa-kb-card') as HTMLElement | null;\n if (!card || !this.contains(card) || e.button > 0) return;\n const r = card.getBoundingClientRect();\n const ox = e.clientX - r.left;\n const oy = e.clientY - r.top;\n let started = false;\n let lastX = e.clientX;\n const ghost = card;\n const ph = document.createElement('div');\n ph.className = 'usa-kb-ph';\n ph.setAttribute('data-usa-part', '');\n const onMove = (ev: PointerEvent) => {\n if (!started) {\n if (Math.hypot(ev.clientX - e.clientX, ev.clientY - e.clientY) < 6) return;\n started = true;\n ph.style.height = r.height + 'px';\n card.parentElement!.insertBefore(ph, card);\n ghost.classList.add('usa-kb-lifted');\n ghost.style.width = r.width + 'px';\n ghost.style.position = 'fixed';\n ghost.style.zIndex = '1000';\n ghost.style.pointerEvents = 'none';\n }\n ev.preventDefault();\n const tilt = this.reduced ? 0 : Math.max(-8, Math.min(8, (ev.clientX - lastX) * 0.8));\n lastX = ev.clientX;\n ghost.style.left = ev.clientX - ox + 'px';\n ghost.style.top = ev.clientY - oy + 'px';\n ghost.style.transform = `rotate(${tilt}deg) scale(${this.reduced ? 1 : 1.04})`;\n const col = this._cols.find((c) => {\n const b = c.getBoundingClientRect();\n return ev.clientX >= b.left && ev.clientX <= b.right;\n });\n if (!col) return;\n const cards = this.cardsOf(col).filter((c) => c !== card);\n const at = cards.find((c) => {\n const b = c.getBoundingClientRect();\n return ev.clientY < b.top + b.height / 2;\n });\n if (ph.parentElement !== col || ph.nextElementSibling !== (at || null)) this.flip(() => (at ? col.insertBefore(ph, at) : col.appendChild(ph)));\n };\n const onUp = () => {\n window.removeEventListener('pointermove', onMove);\n window.removeEventListener('pointerup', onUp);\n window.removeEventListener('pointercancel', onUp);\n if (!started) return;\n const to = ph.parentElement as HTMLElement;\n const index = this.cardsOf(to).filter((c) => c !== card).indexOf(ph.nextElementSibling as HTMLElement);\n const from = card.parentElement as HTMLElement;\n const g = ghost.getBoundingClientRect();\n to.insertBefore(card, ph);\n ph.remove();\n ghost.classList.remove('usa-kb-lifted');\n ghost.style.cssText = '';\n const b = card.getBoundingClientRect();\n if (!this.reduced) this.motion(card, [{ transform: `translate(${g.left - b.left}px,${g.top - b.top}px) rotate(3deg)` }, { transform: 'none' }], { duration: 240, easing: 'cubic-bezier(.2,.9,.3,1.2)' });\n const list = this.cardsOf(to);\n this.emit('move', { card, from, to, index: index < 0 ? list.indexOf(card) : list.indexOf(card) });\n this.say(`Moved to ${this.colName(to)}, position ${list.indexOf(card) + 1}`);\n };\n window.addEventListener('pointermove', onMove, { passive: false });\n window.addEventListener('pointerup', onUp);\n window.addEventListener('pointercancel', onUp);\n }\n\n private key(e: KeyboardEvent): void {\n const card = (e.target as HTMLElement).closest?.('.usa-kb-card') as HTMLElement | null;\n if (!card) return;\n if (e.key === ' ' || e.key === 'Enter') {\n e.preventDefault();\n if (this._held === card) {\n card.removeAttribute('aria-grabbed');\n card.classList.remove('usa-kb-held');\n this._held = null;\n this.say(`Dropped in ${this.colName(card.parentElement as HTMLElement)}`);\n } else {\n this._held = card;\n card.setAttribute('aria-grabbed', 'true');\n card.classList.add('usa-kb-held');\n this.say('Picked up. Use arrow keys to move, Space to drop.');\n }\n return;\n }\n if (e.key === 'Escape' && this._held) {\n this._held.classList.remove('usa-kb-held');\n this._held.removeAttribute('aria-grabbed');\n this._held = null;\n return;\n }\n if (this._held !== card) return;\n const col = card.parentElement as HTMLElement;\n const ci = this._cols.indexOf(col);\n const idx = this.cardsOf(col).indexOf(card);\n let to = col;\n let i = idx;\n if (e.key === 'ArrowLeft' && ci > 0) (to = this._cols[ci - 1]), (i = Math.min(idx, this.cardsOf(to).length));\n else if (e.key === 'ArrowRight' && ci < this._cols.length - 1) (to = this._cols[ci + 1]), (i = Math.min(idx, this.cardsOf(to).length));\n else if (e.key === 'ArrowUp') i = Math.max(0, idx - 1);\n else if (e.key === 'ArrowDown') i = idx + 1;\n else return;\n e.preventDefault();\n this.move(card, to, i);\n card.focus();\n this.say(`${this.colName(to)}, position ${this.cardsOf(to).indexOf(card) + 1}`);\n }\n }\n return UsaKanban as unknown as CustomElementConstructor;\n },\n { id: 'kanban', text: css }\n );\n}\n","import { defineElement, type UsaElement } from '../base';\nimport { ownChildren } from './shared';\nimport css from './swipe-deck.css?raw';\n\n/**\n * `<usa-swipe-deck>` (6.8) — a stack of swipe cards (Tinder style). Drag the\n * top card: it follows the pointer and rotates, \"LIKE\" / \"NOPE\" stamps fade\n * in, and past `threshold` px (or a fast fling) it flies off; otherwise it\n * springs back. The next card scales up from behind. Buttons / keys:\n * `like()`, `nope()`, ← / →, and `undo()` brings the last card back.\n * Event `usa:swipe` (`{ card, dir: 'left' | 'right', index }`) and\n * `usa:empty`. Reduced motion: cards fade instead of flying.\n */\nexport interface UsaSwipeDeckElement extends UsaElement {\n readonly cards: HTMLElement[];\n readonly top: HTMLElement | null;\n like(): void;\n nope(): void;\n undo(): void;\n}\n\nexport function defineSwipeDeck(tag = 'usa-swipe-deck'): CustomElementConstructor | undefined {\n return defineElement(\n tag,\n (Base) => {\n class UsaSwipeDeck extends Base {\n private _cards: HTMLElement[] = [];\n private _gone: HTMLElement[] = [];\n\n get cards(): HTMLElement[] {\n return this._cards.filter((c) => !this._gone.includes(c));\n }\n get top(): HTMLElement | null {\n return this.cards[0] || null;\n }\n\n mount(): void {\n this._cards = ownChildren(this);\n this._gone = [];\n this.setAttribute('role', 'region');\n this.setAttribute('aria-roledescription', 'card deck');\n if (!this.hasAttribute('aria-label')) this.setAttribute('aria-label', this.str('label', 'Cards'));\n if (!this.hasAttribute('tabindex')) this.tabIndex = 0;\n this._cards.forEach((c) => {\n c.classList.add('usa-sd-card');\n if (!c.querySelector(':scope > .usa-sd-stamp')) {\n c.insertAdjacentHTML('beforeend', '<span class=\"usa-sd-stamp usa-sd-like\" data-usa-part aria-hidden=\"true\">LIKE</span><span class=\"usa-sd-stamp usa-sd-nope\" data-usa-part aria-hidden=\"true\">NOPE</span>');\n }\n });\n this.layout();\n this.listen(this, 'pointerdown', (e: PointerEvent) => this.drag(e));\n this.listen(this, 'keydown', (e: KeyboardEvent) => {\n if (e.key === 'ArrowRight') this.like();\n else if (e.key === 'ArrowLeft') this.nope();\n else if (e.key === 'Backspace' || (e.key === 'z' && (e.ctrlKey || e.metaKey))) this.undo();\n else return;\n e.preventDefault();\n });\n }\n\n private layout(): void {\n this.cards.forEach((c, i) => {\n c.style.zIndex = String(100 - i);\n c.style.transform = i ? `translateY(${Math.min(i, 2) * 10}px) scale(${1 - Math.min(i, 2) * 0.05})` : '';\n c.style.opacity = i > 2 ? '0' : '1';\n c.toggleAttribute('data-top', i === 0);\n c.setAttribute('aria-hidden', String(i !== 0));\n });\n this._cards.filter((c) => this._gone.includes(c)).forEach((c) => (c.style.visibility = 'hidden'));\n }\n\n private stamp(c: HTMLElement, dx: number): void {\n const k = Math.min(1, Math.abs(dx) / Math.max(40, this.num('threshold', 110)));\n (c.querySelector('.usa-sd-like') as HTMLElement | null)?.style.setProperty('opacity', dx > 0 ? k.toFixed(2) : '0');\n (c.querySelector('.usa-sd-nope') as HTMLElement | null)?.style.setProperty('opacity', dx < 0 ? k.toFixed(2) : '0');\n }\n\n private fly(dir: 'left' | 'right', dx = 0, dy = 0): void {\n const c = this.top;\n if (!c) return;\n const index = this._cards.indexOf(c);\n this._gone.push(c);\n const sign = dir === 'right' ? 1 : -1;\n const w = this.getBoundingClientRect().width || 300;\n const done = () => {\n c.style.visibility = 'hidden';\n this.stamp(c, 0);\n };\n const a = this.reduced\n ? this.motion(c, [{ opacity: 1 }, { opacity: 0 }], { duration: 200, fill: 'forwards' })\n : this.motion(c, [{ transform: `translate(${dx}px,${dy}px) rotate(${dx * 0.06}deg)` }, { transform: `translate(${sign * w * 1.5}px,${dy + 60}px) rotate(${sign * 30}deg)`, opacity: 0.6 }], { duration: 420, easing: 'cubic-bezier(.3,.6,.4,1)', fill: 'forwards' });\n if (a) a.finished.then(done, done);\n else done();\n this.layout();\n const next = this.top;\n if (next && !this.reduced) this.motion(next, [{ transform: 'translateY(10px) scale(.95)' }, { transform: 'none' }], { duration: 300, easing: 'cubic-bezier(.3,1.3,.5,1)' });\n this.emit('swipe', { card: c, dir, index });\n if (!this.top) this.emit('empty', {});\n }\n\n like(): void {\n this.fly('right');\n }\n nope(): void {\n this.fly('left');\n }\n undo(): void {\n const c = this._gone.pop();\n if (!c) return;\n c.getAnimations?.().forEach((a) => a.cancel());\n c.style.visibility = '';\n this.layout();\n if (!this.reduced) this.motion(c, [{ transform: 'translate(-120%,40px) rotate(-25deg)', opacity: 0 }, { transform: 'none', opacity: 1 }], { duration: 380, easing: 'cubic-bezier(.2,.9,.3,1.1)' });\n }\n\n private drag(e: PointerEvent): void {\n const c = this.top;\n if (!c || !c.contains(e.target as Node) || e.button > 0) return;\n const x0 = e.clientX;\n const y0 = e.clientY;\n const t0 = performance.now();\n let dx = 0;\n let dy = 0;\n c.setPointerCapture?.(e.pointerId);\n c.classList.add('usa-sd-dragging');\n const move = (ev: PointerEvent) => {\n dx = ev.clientX - x0;\n dy = ev.clientY - y0;\n c.style.transform = `translate(${dx}px,${dy}px) rotate(${this.reduced ? 0 : dx * 0.06}deg)`;\n this.stamp(c, dx);\n };\n const up = () => {\n c.removeEventListener('pointermove', move);\n c.removeEventListener('pointerup', up);\n c.removeEventListener('pointercancel', up);\n c.classList.remove('usa-sd-dragging');\n const v = Math.abs(dx) / Math.max(1, performance.now() - t0);\n if (Math.abs(dx) > this.num('threshold', 110) || (v > 0.6 && Math.abs(dx) > 30)) this.fly(dx > 0 ? 'right' : 'left', dx, dy);\n else {\n const from = c.style.transform;\n c.style.transform = '';\n this.stamp(c, 0);\n if (!this.reduced && from) this.motion(c, [{ transform: from }, { transform: 'none' }], { duration: 420, easing: 'cubic-bezier(.3,1.5,.5,1)' });\n }\n };\n c.addEventListener('pointermove', move);\n c.addEventListener('pointerup', up);\n c.addEventListener('pointercancel', up);\n }\n }\n return UsaSwipeDeck as unknown as CustomElementConstructor;\n },\n { id: 'swipe-deck', text: css }\n );\n}\n","import { defineElement, type UsaElement } from '../base';\nimport css from './weather-card.css?raw';\n\n/**\n * `<usa-weather-card>` (6.8) — an animated weather widget. `condition`\n * (`clear | cloudy | rain | snow | storm | fog | night`) picks an animated\n * icon and sky (sun rays turn, clouds drift, rain and snow fall, a gentle —\n * flash-safe — bolt, fog bands, twinkling stars); `temp` counts up to the\n * value, `unit` (°), `place` and `label` fill the text. Changing `condition`\n * cross-fades the scene. Reduced motion: static icon, no count-up. The scene\n * is decorative; the text is the accessible summary (`role=\"group\"` with an\n * `aria-label` like \"Rain, 12°, Lisbon\").\n */\nexport interface UsaWeatherCardElement extends UsaElement {\n condition: string;\n}\n\nexport const WEATHER_CONDITIONS = ['clear', 'cloudy', 'rain', 'snow', 'storm', 'fog', 'night'] as const;\nconst LABEL: Record<string, string> = { clear: 'Clear', cloudy: 'Cloudy', rain: 'Rain', snow: 'Snow', storm: 'Thunderstorm', fog: 'Fog', night: 'Clear night' };\n\nconst icon = (c: string): string => {\n const drops = (cls: string, n: number) => Array.from({ length: n }, (_, i) => `<i class=\"${cls}\" style=\"--i:${i}\"></i>`).join('');\n switch (c) {\n case 'clear':\n return '<span class=\"usa-wc-sun\"></span>';\n case 'night':\n return `<span class=\"usa-wc-moon\"></span>${drops('usa-wc-star', 5)}`;\n case 'cloudy':\n return '<span class=\"usa-wc-cloud usa-wc-c2\"></span><span class=\"usa-wc-cloud\"></span>';\n case 'rain':\n return `<span class=\"usa-wc-cloud\"></span>${drops('usa-wc-drop', 6)}`;\n case 'snow':\n return `<span class=\"usa-wc-cloud\"></span>${drops('usa-wc-flake', 6)}`;\n case 'storm':\n return `<span class=\"usa-wc-cloud usa-wc-dark\"></span><span class=\"usa-wc-bolt\"></span>${drops('usa-wc-drop', 4)}`;\n default:\n return `${drops('usa-wc-fogband', 3)}`;\n }\n};\n\nexport function defineWeatherCard(tag = 'usa-weather-card'): CustomElementConstructor | undefined {\n return defineElement(\n tag,\n (Base) => {\n class UsaWeatherCard extends Base {\n static get observedAttributes(): string[] {\n return ['condition', 'temp', 'place', 'unit', 'label'];\n }\n get condition(): string {\n return this.dataset.condition || 'clear';\n }\n set condition(v: string) {\n this.setAttribute('condition', v);\n }\n\n mount(): void {\n const c = this.str('condition', 'clear');\n const cond = (WEATHER_CONDITIONS as readonly string[]).includes(c) ? c : 'clear';\n const changed = this.dataset.condition && this.dataset.condition !== cond;\n this.dataset.condition = cond;\n const temp = this.num('temp', NaN);\n const unit = this.str('unit', '°');\n const label = this.str('label', LABEL[cond]);\n const place = this.str('place', '');\n this.setAttribute('role', 'group');\n this.setAttribute('aria-label', [label, Number.isFinite(temp) ? `${Math.round(temp)}${unit}` : '', place].filter(Boolean).join(', '));\n this.querySelectorAll(':scope > [data-usa-part]').forEach((n) => n.remove());\n const scene = document.createElement('div');\n scene.className = 'usa-wc-scene';\n scene.setAttribute('aria-hidden', 'true');\n scene.setAttribute('data-usa-part', '');\n scene.innerHTML = `<span class=\"usa-wc-icon\">${icon(cond)}</span>`;\n const text = document.createElement('div');\n text.className = 'usa-wc-text';\n text.setAttribute('data-usa-part', '');\n text.setAttribute('aria-hidden', 'true');\n text.innerHTML = `<b class=\"usa-wc-temp\">${Number.isFinite(temp) ? Math.round(temp) + unit : ''}</b><span class=\"usa-wc-label\"></span><span class=\"usa-wc-place\"></span>`;\n (text.querySelector('.usa-wc-label') as HTMLElement).textContent = label;\n (text.querySelector('.usa-wc-place') as HTMLElement).textContent = place;\n this.prepend(scene, text);\n if (this.reduced) return;\n if (changed) this.motion(scene, [{ opacity: 0, transform: 'scale(.9)' }, { opacity: 1, transform: 'none' }], { duration: 420, easing: 'ease-out' });\n if (Number.isFinite(temp) && typeof requestAnimationFrame === 'function') {\n const el = text.querySelector('.usa-wc-temp') as HTMLElement;\n const t0 = performance.now();\n const from = Math.round(temp) - Math.min(12, Math.abs(Math.round(temp)) + 6);\n let raf = 0;\n const f = (now: number) => {\n const k = Math.min(1, (now - t0) / 900);\n el.textContent = Math.round(from + (Math.round(temp) - from) * (1 - Math.pow(1 - k, 3))) + unit;\n if (k < 1) raf = requestAnimationFrame(f);\n };\n raf = requestAnimationFrame(f);\n this.onCleanup(() => cancelAnimationFrame(raf));\n }\n }\n }\n return UsaWeatherCard as unknown as CustomElementConstructor;\n },\n { id: 'weather-card', text: css }\n );\n}\n","import { defineElement, type UsaElement } from '../base';\nimport css from './pull-cord.css?raw';\n\n/**\n * `<usa-pull-cord>` (6.8) — a lamp pull-cord switch. Drag the handle down\n * (or click / Space / Enter): the cord stretches, and when released past\n * `threshold` px it toggles `on` with a click-bounce; the cord swings back on\n * a damped spring (simulated, drawn as an SVG curve). The lamp shade above\n * glows when on (CSS custom property `--usa-pc-glow`). A real switch:\n * `role=\"switch\"`, `aria-checked`; event `usa:change` (`{ on }`). Reduced\n * motion: no swing — it just toggles.\n */\nexport interface UsaPullCordElement extends UsaElement {\n on: boolean;\n toggle(force?: boolean): void;\n}\n\nexport function definePullCord(tag = 'usa-pull-cord'): CustomElementConstructor | undefined {\n return defineElement(\n tag,\n (Base) => {\n class UsaPullCord extends Base {\n private _on = false;\n private _raf = 0;\n private _x = 0;\n private _y = 0;\n private _vx = 0;\n private _vy = 0;\n\n get on(): boolean {\n return this._on;\n }\n set on(v: boolean) {\n this.toggle(!!v, false);\n }\n\n mount(): void {\n this.querySelectorAll(':scope > [data-usa-part]').forEach((n) => n.remove());\n this.insertAdjacentHTML('afterbegin', '<span class=\"usa-pc-lamp\" data-usa-part aria-hidden=\"true\"></span><svg class=\"usa-pc-svg\" data-usa-part aria-hidden=\"true\" viewBox=\"-40 0 80 150\"><path class=\"usa-pc-cord\" d=\"M0 0 L0 90\"/><circle class=\"usa-pc-knob\" cx=\"0\" cy=\"96\" r=\"7\"/></svg>');\n this.setAttribute('role', 'switch');\n if (!this.hasAttribute('tabindex')) this.tabIndex = 0;\n if (!this.hasAttribute('aria-label')) this.setAttribute('aria-label', this.str('label', 'Light'));\n this._on = this.flag('on');\n this.sync();\n this.draw();\n this.listen(this, 'keydown', (e: KeyboardEvent) => {\n if (e.key === ' ' || e.key === 'Enter') {\n e.preventDefault();\n this.pull();\n }\n });\n this.listen(this, 'pointerdown', (e: PointerEvent) => this.drag(e));\n this.onCleanup(() => this._raf && cancelAnimationFrame(this._raf));\n }\n\n private sync(): void {\n this.setAttribute('aria-checked', String(this._on));\n this.toggleAttribute('data-on', this._on);\n }\n\n private draw(): void {\n const cord = this.querySelector('.usa-pc-cord');\n const knob = this.querySelector('.usa-pc-knob');\n const ex = this._x;\n const ey = 90 + this._y;\n cord?.setAttribute('d', `M0 0 Q${(ex * 0.5).toFixed(1)} ${(ey * 0.55).toFixed(1)} ${ex.toFixed(1)} ${ey.toFixed(1)}`);\n knob?.setAttribute('cx', ex.toFixed(1));\n knob?.setAttribute('cy', (ey + 6).toFixed(1));\n }\n\n /** Damped spring back to rest. */\n private release(): void {\n if (this.reduced || typeof requestAnimationFrame !== 'function') {\n this._x = this._y = 0;\n this.draw();\n return;\n }\n let last = 0;\n const f = (now: number) => {\n const dt = last ? Math.min(0.033, (now - last) / 1000) : 1 / 60;\n last = now;\n this._vx += (-120 * this._x - 3 * this._vx) * dt;\n this._vy += (-260 * this._y - 9 * this._vy) * dt;\n this._x += this._vx * dt;\n this._y += this._vy * dt;\n this.draw();\n if (Math.abs(this._x) + Math.abs(this._y) + Math.abs(this._vx) + Math.abs(this._vy) > 0.05) this._raf = requestAnimationFrame(f);\n else ((this._raf = 0), (this._x = this._y = this._vx = this._vy = 0), this.draw());\n };\n if (!this._raf) this._raf = requestAnimationFrame(f);\n }\n\n /** Pull once (keyboard / click): tug the cord and toggle. */\n pull(): void {\n this._y = 26;\n this._vx = (Math.random() - 0.5) * 60;\n this.draw();\n this.toggle(undefined, true);\n this.release();\n }\n\n private drag(e: PointerEvent): void {\n if (e.button > 0) return;\n const y0 = e.clientY;\n const x0 = e.clientX;\n let moved = false;\n if (this._raf) (cancelAnimationFrame(this._raf), (this._raf = 0));\n const move = (ev: PointerEvent) => {\n moved = moved || Math.abs(ev.clientY - y0) > 4;\n this._y = Math.max(0, Math.min(50, ev.clientY - y0));\n this._x = Math.max(-30, Math.min(30, (ev.clientX - x0) * 0.6));\n this.draw();\n };\n const up = () => {\n window.removeEventListener('pointermove', move);\n window.removeEventListener('pointerup', up);\n window.removeEventListener('pointercancel', up);\n if (!moved) return this.pull();\n if (this._y >= this.num('threshold', 24)) this.toggle(undefined, true);\n this._vy = -this._y * 2;\n this.release();\n };\n window.addEventListener('pointermove', move);\n window.addEventListener('pointerup', up);\n window.addEventListener('pointercancel', up);\n }\n\n toggle(force?: boolean, user = false): void {\n const next = typeof force === 'boolean' ? force : !this._on;\n if (next === this._on) return;\n this._on = next;\n this.toggleAttribute('on', next);\n this.sync();\n const lamp = this.querySelector('.usa-pc-lamp');\n if (user && lamp && !this.reduced) this.motion(lamp, [{ transform: 'translateY(0)' }, { transform: 'translateY(3px)', offset: 0.3 }, { transform: 'translateY(0)' }], { duration: 300, easing: 'ease-out' });\n if (user) this.emit('change', { on: next });\n }\n }\n return UsaPullCord as unknown as CustomElementConstructor;\n },\n { id: 'pull-cord', text: css }\n );\n}\n","import { defineElement, type UsaElement } from '../base';\nimport css from './date-picker.css?raw';\n\n/**\n * `<usa-date-picker>` (6.9) — an inline calendar. Changing month slides the\n * grid in from the direction of travel, the selected day pops inside a\n * spring circle and today has a ring. A real date grid: `role=\"grid\"`,\n * arrows (day / week), PageUp / PageDown (month), Home / End (week start /\n * end), Enter / Space selects; `min` / `max` (ISO `YYYY-MM-DD`) disable days\n * outside the range. `value` (ISO), `first-day` (0 = Sunday, 1 = Monday,\n * default 1), `locale`. Event `usa:change` (`{ value, date }`). Reduced\n * motion: no slide or pop.\n */\nexport interface UsaDatePickerElement extends UsaElement {\n value: string;\n month: string;\n showMonth(delta: number): void;\n}\n\nconst iso = (d: Date): string => `${d.getFullYear()}-${String(d.getMonth() + 1).padStart(2, '0')}-${String(d.getDate()).padStart(2, '0')}`;\n/** Parse `YYYY-MM-DD` as a local date (or null). */\nexport function parseISODate(s: string | null | undefined): Date | null {\n const m = /^(\\d{4})-(\\d{2})-(\\d{2})$/.exec(s || '');\n if (!m) return null;\n const d = new Date(+m[1], +m[2] - 1, +m[3]);\n return d.getMonth() === +m[2] - 1 ? d : null;\n}\n/** The 6×7 day grid of a month (first row starts on `firstDay`). */\nexport function monthGrid(year: number, month: number, firstDay = 1): Date[] {\n const first = new Date(year, month, 1);\n const off = (first.getDay() - firstDay + 7) % 7;\n return Array.from({ length: 42 }, (_, i) => new Date(year, month, 1 - off + i));\n}\n\nexport function defineDatePicker(tag = 'usa-date-picker'): CustomElementConstructor | undefined {\n return defineElement(\n tag,\n (Base) => {\n class UsaDatePicker extends Base {\n static get observedAttributes(): string[] {\n return ['min', 'max', 'first-day', 'locale'];\n }\n private _value: Date | null = null;\n private _view = new Date();\n private _focus = new Date();\n\n get value(): string {\n return this._value ? iso(this._value) : '';\n }\n set value(v: string) {\n const d = parseISODate(v);\n this._value = d;\n if (d) (this._view = new Date(d.getFullYear(), d.getMonth(), 1)), (this._focus = d);\n if (this.isConnected) this.render(0);\n }\n get month(): string {\n return iso(this._view).slice(0, 7);\n }\n\n mount(): void {\n const v = parseISODate(this.getAttribute('value'));\n if (v) (this._value = v), (this._focus = v);\n else this._focus = this._value || new Date();\n this._view = new Date(this._focus.getFullYear(), this._focus.getMonth(), 1);\n this.querySelectorAll(':scope > [data-usa-part]').forEach((n) => n.remove());\n this.insertAdjacentHTML('afterbegin', '<div class=\"usa-dp-head\" data-usa-part><button type=\"button\" class=\"usa-dp-nav\" data-d=\"-1\" aria-label=\"Previous month\">‹</button><span class=\"usa-dp-title\" aria-live=\"polite\"></span><button type=\"button\" class=\"usa-dp-nav\" data-d=\"1\" aria-label=\"Next month\">›</button></div><div class=\"usa-dp-viewport\" data-usa-part><div class=\"usa-dp-grid\" role=\"grid\"></div></div>');\n this.listen(this, 'click', (e: Event) => {\n const t = e.target as HTMLElement;\n const nav = t.closest?.('.usa-dp-nav') as HTMLElement | null;\n if (nav) return this.showMonth(Number(nav.dataset.d));\n const day = t.closest?.('[data-date]') as HTMLElement | null;\n if (day && !day.hasAttribute('aria-disabled')) this.pick(parseISODate(day.dataset.date!)!);\n });\n this.listen(this, 'keydown', (e: KeyboardEvent) => this.key(e));\n this.render(0);\n }\n\n private inRange(d: Date): boolean {\n const lo = parseISODate(this.getAttribute('min'));\n const hi = parseISODate(this.getAttribute('max'));\n return (!lo || d >= lo) && (!hi || d <= hi);\n }\n\n private render(dir: number, focus = false): void {\n const grid = this.querySelector('.usa-dp-grid') as HTMLElement | null;\n if (!grid) return;\n const loc = this.str('locale', '') || undefined;\n const fd = this.num('first-day', 1);\n const title = this.querySelector('.usa-dp-title') as HTMLElement;\n title.textContent = this._view.toLocaleDateString(loc, { month: 'long', year: 'numeric' });\n const days = monthGrid(this._view.getFullYear(), this._view.getMonth(), fd);\n const names = days.slice(0, 7).map((d) => d.toLocaleDateString(loc, { weekday: 'narrow' }));\n const today = iso(new Date());\n const sel = this.value;\n const foc = iso(this._focus);\n let html = `<div role=\"row\" class=\"usa-dp-row usa-dp-dow\">${names.map((n) => `<span role=\"columnheader\">${n}</span>`).join('')}</div>`;\n for (let r = 0; r < 6; r++) {\n html += '<div role=\"row\" class=\"usa-dp-row\">';\n for (const d of days.slice(r * 7, r * 7 + 7)) {\n const k = iso(d);\n const out = d.getMonth() !== this._view.getMonth();\n const dis = !this.inRange(d);\n html += `<span role=\"gridcell\" class=\"usa-dp-day\" data-date=\"${k}\"${out ? ' data-out' : ''}${k === today ? ' data-today' : ''} aria-selected=\"${k === sel}\"${dis ? ' aria-disabled=\"true\"' : ''} tabindex=\"${k === foc ? 0 : -1}\" aria-label=\"${d.toLocaleDateString(loc, { day: 'numeric', month: 'long', year: 'numeric' })}\">${d.getDate()}</span>`;\n }\n html += '</div>';\n }\n grid.innerHTML = html;\n if (focus) (grid.querySelector(`[data-date=\"${foc}\"]`) as HTMLElement | null)?.focus();\n if (dir && !this.reduced) this.motion(grid, [{ transform: `translateX(${dir * 30}%)`, opacity: 0 }, { transform: 'none', opacity: 1 }], { duration: 320, easing: 'cubic-bezier(.2,.8,.2,1)' });\n }\n\n showMonth(delta: number): void {\n this._view = new Date(this._view.getFullYear(), this._view.getMonth() + delta, 1);\n this._focus = new Date(this._view);\n this.render(Math.sign(delta));\n }\n\n private pick(d: Date): void {\n if (!this.inRange(d)) return;\n this._value = d;\n this._focus = d;\n const dir = d.getMonth() !== this._view.getMonth() || d.getFullYear() !== this._view.getFullYear() ? (d > this._view ? 1 : -1) : 0;\n if (dir) this._view = new Date(d.getFullYear(), d.getMonth(), 1);\n this.setAttribute('value', iso(d));\n this.render(dir, true);\n const cell = this.querySelector(`[data-date=\"${iso(d)}\"]`);\n if (cell && !this.reduced) this.motion(cell, [{ transform: 'scale(.6)' }, { transform: 'scale(1.15)', offset: 0.6 }, { transform: 'scale(1)' }], { duration: 380, easing: 'ease-out' });\n this.emit('change', { value: iso(d), date: d });\n }\n\n private key(e: KeyboardEvent): void {\n if (!(e.target as HTMLElement).closest?.('[data-date]')) return;\n const f = new Date(this._focus);\n const step: Record<string, () => void> = {\n ArrowLeft: () => f.setDate(f.getDate() - 1),\n ArrowRight: () => f.setDate(f.getDate() + 1),\n ArrowUp: () => f.setDate(f.getDate() - 7),\n ArrowDown: () => f.setDate(f.getDate() + 7),\n PageUp: () => f.setMonth(f.getMonth() - 1),\n PageDown: () => f.setMonth(f.getMonth() + 1),\n Home: () => f.setDate(f.getDate() - ((f.getDay() - this.num('first-day', 1) + 7) % 7)),\n End: () => f.setDate(f.getDate() + 6 - ((f.getDay() - this.num('first-day', 1) + 7) % 7)),\n };\n if (e.key === 'Enter' || e.key === ' ') {\n e.preventDefault();\n return this.pick(this._focus);\n }\n if (!step[e.key]) return;\n e.preventDefault();\n step[e.key]();\n const dir = f.getMonth() !== this._view.getMonth() ? (f > this._view ? 1 : -1) : 0;\n this._focus = f;\n if (dir) this._view = new Date(f.getFullYear(), f.getMonth(), 1);\n this.render(dir, true);\n }\n }\n return UsaDatePicker as unknown as CustomElementConstructor;\n },\n { id: 'date-picker', text: css }\n );\n}\n","import { defineElement, type UsaElement } from '../base';\nimport { clampN } from './shared';\nimport css from './color-picker.css?raw';\n\n/**\n * `<usa-color-picker>` (6.9) — a colour picker: a saturation / brightness\n * square and a hue strip (both `role=\"slider\"`, arrow keys, Shift = ×10),\n * spring-follow thumbs, a preview chip that morphs to the new colour, and\n * optional `swatches` (comma-separated hex) that pop on pick. `value` is\n * `#rrggbb`. Events `usa:input` while dragging and `usa:change` on release\n * (`{ value }`). Reduced motion: thumbs jump, no pop.\n */\nexport interface UsaColorPickerElement extends UsaElement {\n value: string;\n}\n\n/** HSV (h 0–360, s / v 0–1) → `#rrggbb`. */\nexport function hsvToHex(h: number, s: number, v: number): string {\n const f = (n: number) => {\n const k = (n + h / 60) % 6;\n return Math.round((v - v * s * Math.max(0, Math.min(k, 4 - k, 1))) * 255);\n };\n return '#' + [f(5), f(3), f(1)].map((x) => x.toString(16).padStart(2, '0')).join('');\n}\n/** `#rrggbb` → HSV (or null). */\nexport function hexToHsv(hex: string): [number, number, number] | null {\n const m = /^#?([\\da-f]{2})([\\da-f]{2})([\\da-f]{2})$/i.exec(hex.trim());\n if (!m) return null;\n const [r, g, b] = [m[1], m[2], m[3]].map((x) => parseInt(x, 16) / 255);\n const mx = Math.max(r, g, b);\n const d = mx - Math.min(r, g, b);\n let h = 0;\n if (d) h = mx === r ? ((g - b) / d) % 6 : mx === g ? (b - r) / d + 2 : (r - g) / d + 4;\n return [(h * 60 + 360) % 360, mx ? d / mx : 0, mx];\n}\n\nexport function defineColorPicker(tag = 'usa-color-picker'): CustomElementConstructor | undefined {\n return defineElement(\n tag,\n (Base) => {\n class UsaColorPicker extends Base {\n static get observedAttributes(): string[] {\n return ['swatches'];\n }\n private _h = 260;\n private _s = 0.64;\n private _v = 1;\n\n get value(): string {\n return hsvToHex(this._h, this._s, this._v);\n }\n set value(v: string) {\n const hsv = hexToHsv(v);\n if (!hsv) return;\n [this._h, this._s, this._v] = hsv;\n this.paint(true);\n }\n\n mount(): void {\n const hsv = hexToHsv(this.str('value', '#7c5cff'));\n if (hsv) [this._h, this._s, this._v] = hsv;\n this.querySelectorAll(':scope > [data-usa-part]').forEach((n) => n.remove());\n const sw = this.str('swatches', '').split(',').map((s) => s.trim()).filter((s) => hexToHsv(s));\n this.insertAdjacentHTML('afterbegin', `<div class=\"usa-cp-sv\" data-usa-part role=\"slider\" tabindex=\"0\" aria-label=\"Saturation and brightness\"><span class=\"usa-cp-thumb\"></span></div><div class=\"usa-cp-row\" data-usa-part><span class=\"usa-cp-chip\" aria-hidden=\"true\"></span><div class=\"usa-cp-hue\" role=\"slider\" tabindex=\"0\" aria-label=\"Hue\" aria-valuemin=\"0\" aria-valuemax=\"360\"><span class=\"usa-cp-thumb\"></span></div></div>${sw.length ? `<div class=\"usa-cp-swatches\" data-usa-part>${sw.map((c) => `<button type=\"button\" class=\"usa-cp-sw\" style=\"background:${c}\" data-c=\"${c}\" aria-label=\"${c}\"></button>`).join('')}</div>` : ''}`);\n const sv = this.querySelector('.usa-cp-sv') as HTMLElement;\n const hue = this.querySelector('.usa-cp-hue') as HTMLElement;\n this.drag(sv, (x, y) => ((this._s = x), (this._v = 1 - y)));\n this.drag(hue, (x) => (this._h = x * 360));\n this.listen(sv, 'keydown', (e: KeyboardEvent) => this.keys(e, (d, ax) => (ax ? (this._v = clampN(this._v - d, 0, 1)) : (this._s = clampN(this._s + d, 0, 1)))));\n this.listen(hue, 'keydown', (e: KeyboardEvent) => this.keys(e, (d) => (this._h = (this._h + d * 360 + 360) % 360)));\n this.listen(this, 'click', (e: Event) => {\n const b = (e.target as HTMLElement).closest?.('.usa-cp-sw') as HTMLElement | null;\n if (!b) return;\n this.value = b.dataset.c!;\n if (!this.reduced) this.motion(b, [{ transform: 'scale(1)' }, { transform: 'scale(1.35)', offset: 0.4 }, { transform: 'scale(1)' }], { duration: 360, easing: 'cubic-bezier(.3,1.5,.5,1)' });\n this.emit('change', { value: this.value });\n });\n this.paint(false);\n }\n\n private keys(e: KeyboardEvent, fn: (d: number, vertical: boolean) => void): void {\n const k = e.shiftKey ? 0.1 : 0.01;\n const map: Record<string, [number, boolean]> = { ArrowLeft: [-k, false], ArrowRight: [k, false], ArrowUp: [-k, true], ArrowDown: [k, true] };\n const m = map[e.key];\n if (!m) return;\n e.preventDefault();\n fn(m[0], m[1]);\n this.paint(false);\n this.emit('change', { value: this.value });\n }\n\n private drag(area: HTMLElement, fn: (x: number, y: number) => void): void {\n const at = (e: PointerEvent) => {\n const r = area.getBoundingClientRect();\n fn(clampN((e.clientX - r.left) / (r.width || 1), 0, 1), clampN((e.clientY - r.top) / (r.height || 1), 0, 1));\n this.paint(false);\n this.emit('input', { value: this.value });\n };\n this.listen(area, 'pointerdown', (e: PointerEvent) => {\n area.setPointerCapture?.(e.pointerId);\n area.toggleAttribute('data-drag', true);\n at(e);\n const move = (ev: PointerEvent) => at(ev);\n const up = () => {\n area.removeAttribute('data-drag');\n area.removeEventListener('pointermove', move);\n area.removeEventListener('pointerup', up);\n this.emit('change', { value: this.value });\n };\n area.addEventListener('pointermove', move);\n area.addEventListener('pointerup', up);\n });\n }\n\n private paint(morph: boolean): void {\n const c = this.value;\n this.style.setProperty('--usa-cp-h', String(Math.round(this._h)));\n this.style.setProperty('--usa-cp-color', c);\n this.style.setProperty('--usa-cp-x', (this._s * 100).toFixed(2) + '%');\n this.style.setProperty('--usa-cp-y', ((1 - this._v) * 100).toFixed(2) + '%');\n this.style.setProperty('--usa-cp-hx', ((this._h / 360) * 100).toFixed(2) + '%');\n const sv = this.querySelector('.usa-cp-sv');\n sv?.setAttribute('aria-valuetext', `saturation ${Math.round(this._s * 100)}%, brightness ${Math.round(this._v * 100)}%`);\n const hue = this.querySelector('.usa-cp-hue');\n hue?.setAttribute('aria-valuenow', String(Math.round(this._h)));\n this.setAttribute('value', c);\n const chip = this.querySelector('.usa-cp-chip');\n if (morph && chip && !this.reduced) this.motion(chip, [{ borderRadius: '50%', transform: 'scale(.7) rotate(-20deg)' }, { borderRadius: '30%', transform: 'scale(1.1)', offset: 0.6 }, { borderRadius: '50%', transform: 'none' }], { duration: 420, easing: 'ease-out' });\n }\n }\n return UsaColorPicker as unknown as CustomElementConstructor;\n },\n { id: 'color-picker', text: css }\n );\n}\n","import { defineElement, type UsaElement } from '../base';\nimport css from './file-drop.css?raw';\n\n/**\n * `<usa-file-drop>` (6.9) — a file drop zone. Dragging files over it lights\n * the zone with marching-ants borders and lifts the icon; dropping (or\n * choosing via the built-in file input — click / Enter / Space) flies each\n * file into a list with a progress bar. Progress is yours to report with\n * `setProgress(index, 0–1)`, or `simulate` fakes it for demos; a finished\n * file draws a check. Attributes `accept`, `multiple`, `label`. Event\n * `usa:files` (`{ files }`). Reduced motion: no ants, lift or fly-in.\n */\nexport interface UsaFileDropElement extends UsaElement {\n readonly files: File[];\n setProgress(index: number, value: number): void;\n addFiles(files: ArrayLike<File>): void;\n clear(): void;\n}\n\nconst size = (n: number): string => (n < 1024 ? `${n} B` : n < 1048576 ? `${(n / 1024).toFixed(1)} KB` : `${(n / 1048576).toFixed(1)} MB`);\n\nexport function defineFileDrop(tag = 'usa-file-drop'): CustomElementConstructor | undefined {\n return defineElement(\n tag,\n (Base) => {\n class UsaFileDrop extends Base {\n private _files: File[] = [];\n private _depth = 0;\n\n get files(): File[] {\n return this._files.slice();\n }\n\n mount(): void {\n this.querySelectorAll(':scope > [data-usa-part]').forEach((n) => n.remove());\n const label = this.str('label', 'Drop files here or browse');\n this.insertAdjacentHTML('afterbegin', `<div class=\"usa-fd-zone\" data-usa-part role=\"button\" tabindex=\"0\"><svg class=\"usa-fd-ants\" aria-hidden=\"true\"><rect x=\"1\" y=\"1\" width=\"calc(100% - 2px)\" height=\"calc(100% - 2px)\" rx=\"14\"/></svg><span class=\"usa-fd-icon\" aria-hidden=\"true\">⇪</span><span class=\"usa-fd-label\"></span><input type=\"file\" hidden></div><ul class=\"usa-fd-list\" data-usa-part aria-live=\"polite\"></ul>`);\n const zone = this.querySelector('.usa-fd-zone') as HTMLElement;\n (zone.querySelector('.usa-fd-label') as HTMLElement).textContent = label;\n zone.setAttribute('aria-label', label);\n const input = zone.querySelector('input') as HTMLInputElement;\n if (this.str('accept', '')) input.accept = this.str('accept', '');\n input.multiple = this.flag('multiple');\n this.listen(zone, 'click', (e: Event) => e.target !== input && input.click());\n this.listen(zone, 'keydown', (e: KeyboardEvent) => {\n if (e.key === 'Enter' || e.key === ' ') {\n e.preventDefault();\n input.click();\n }\n });\n this.listen(input, 'change', () => input.files && this.addFiles(input.files));\n this.listen(zone, 'dragenter', (e: DragEvent) => {\n e.preventDefault();\n this._depth++;\n this.toggleAttribute('data-over', true);\n });\n this.listen(zone, 'dragover', (e: DragEvent) => e.preventDefault());\n this.listen(zone, 'dragleave', () => {\n this._depth = Math.max(0, this._depth - 1);\n if (!this._depth) this.removeAttribute('data-over');\n });\n this.listen(zone, 'drop', (e: DragEvent) => {\n e.preventDefault();\n this._depth = 0;\n this.removeAttribute('data-over');\n if (e.dataTransfer?.files?.length) this.addFiles(e.dataTransfer.files);\n });\n }\n\n addFiles(list: ArrayLike<File>): void {\n const ul = this.querySelector('.usa-fd-list') as HTMLElement;\n const files = Array.from(list).slice(0, this.flag('multiple') ? undefined : 1);\n if (!this.flag('multiple')) this.clear();\n const start = this._files.length;\n files.forEach((f, i) => {\n this._files.push(f);\n const li = document.createElement('li');\n li.className = 'usa-fd-item';\n li.innerHTML = '<span class=\"usa-fd-name\"></span><span class=\"usa-fd-size\"></span><span class=\"usa-fd-bar\"><span class=\"usa-fd-fill\"></span></span><svg class=\"usa-fd-check\" viewBox=\"0 0 16 16\" aria-hidden=\"true\"><path d=\"M3 8.5l3.2 3L13 4.8\"/></svg>';\n (li.querySelector('.usa-fd-name') as HTMLElement).textContent = f.name;\n (li.querySelector('.usa-fd-size') as HTMLElement).textContent = size(f.size);\n li.setAttribute('aria-label', `${f.name}, ${size(f.size)}`);\n ul.appendChild(li);\n if (!this.reduced) this.motion(li, [{ transform: 'translateY(-28px) scale(.85)', opacity: 0 }, { transform: 'none', opacity: 1 }], { duration: 380, delay: i * 70, easing: 'cubic-bezier(.2,.9,.3,1.2)', fill: 'backwards' });\n });\n this.emit('files', { files });\n if (this.flag('simulate')) files.forEach((_, i) => this.simulate(start + i));\n }\n\n private simulate(i: number): void {\n let p = 0;\n const tick = () => {\n if (!this.isConnected) return;\n p = Math.min(1, p + 0.12 + Math.random() * 0.15);\n this.setProgress(i, p);\n if (p < 1) setTimeout(tick, 160);\n };\n setTimeout(tick, 200);\n }\n\n setProgress(index: number, value: number): void {\n const li = this.querySelectorAll('.usa-fd-item')[index] as HTMLElement | undefined;\n if (!li) return;\n const v = Math.max(0, Math.min(1, value));\n li.style.setProperty('--usa-fd-p', String(v));\n li.toggleAttribute('data-done', v >= 1);\n li.setAttribute('aria-label', `${this._files[index]?.name || ''}, ${Math.round(v * 100)}%`);\n }\n\n clear(): void {\n this._files = [];\n (this.querySelector('.usa-fd-list') as HTMLElement | null)?.replaceChildren();\n }\n }\n return UsaFileDrop as unknown as CustomElementConstructor;\n },\n { id: 'file-drop', text: css }\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","/**\n * motionary/components/tokens — motion design tokens (4.2).\n *\n * One source of truth for durations, easings and springs: as CSS custom\n * properties (`--usa-duration-fast`, `--usa-easing-emphasized`,\n * `--usa-spring-bouncy-stiffness`…), as W3C Design Tokens JSON, and importable\n * from Figma Tokens (Tokens Studio) or Style Dictionary exports.\n *\n * ```ts\n * import { applyMotionTokens, importMotionTokens, motionToken } from 'motionary/components/tokens';\n * applyMotionTokens(importMotionTokens(await (await fetch('/tokens.json')).json()));\n * el.animate(frames, { duration: motionToken('duration', 'slow'), easing: motionToken('easing', 'emphasized') });\n * ```\n */\n\nexport interface SpringToken {\n stiffness: number;\n damping: number;\n mass: number;\n}\n\nexport interface MotionTokens {\n /** Durations in ms. */\n duration: Record<string, number>;\n /** CSS easing strings. */\n easing: Record<string, string>;\n /** Spring physics parameters. */\n spring: Record<string, SpringToken>;\n}\n\n/** The default motion scale (Material / Fluent-inspired). */\nexport const MOTION_TOKENS: MotionTokens = {\n duration: { instant: 0, fast: 150, normal: 300, slow: 600, slower: 900, slowest: 1400 },\n easing: {\n linear: 'linear',\n standard: 'cubic-bezier(0.2, 0, 0, 1)',\n emphasized: 'cubic-bezier(0.22, 1, 0.36, 1)',\n decelerate: 'cubic-bezier(0, 0, 0, 1)',\n accelerate: 'cubic-bezier(0.3, 0, 1, 1)',\n spring: 'cubic-bezier(0.34, 1.56, 0.64, 1)',\n bounce: 'cubic-bezier(0.68, -0.55, 0.265, 1.55)',\n },\n spring: {\n gentle: { stiffness: 120, damping: 14, mass: 1 },\n snappy: { stiffness: 300, damping: 30, mass: 1 },\n bouncy: { stiffness: 260, damping: 12, mass: 1 },\n wobbly: { stiffness: 180, damping: 8, mass: 1 },\n stiff: { stiffness: 500, damping: 40, mass: 1 },\n },\n};\n\nexport type MotionTokenGroup = keyof MotionTokens;\nexport type DeepPartialTokens = { [K in keyof MotionTokens]?: Partial<MotionTokens[K]> };\n\nlet active: MotionTokens = clone(MOTION_TOKENS);\n\nfunction clone(t: MotionTokens): MotionTokens {\n return { duration: { ...t.duration }, easing: { ...t.easing }, spring: Object.fromEntries(Object.entries(t.spring).map(([k, v]) => [k, { ...v }])) };\n}\n\n/** Merge partial tokens over a base (defaults: the built-in scale). */\nexport function mergeMotionTokens(partial: DeepPartialTokens, base: MotionTokens = MOTION_TOKENS): MotionTokens {\n const out = clone(base);\n Object.assign(out.duration, partial.duration || {});\n Object.assign(out.easing, partial.easing || {});\n for (const [k, v] of Object.entries(partial.spring || {})) out.spring[k] = { ...(out.spring[k] || { stiffness: 170, damping: 26, mass: 1 }), ...v };\n return out;\n}\n\nconst kebab = (s: string) => s.replace(/([a-z0-9])([A-Z])/g, '$1-$2').replace(/[\\s_.]+/g, '-').toLowerCase();\n\n/** The custom-property map: `{ '--usa-duration-fast': '150ms', … }`. */\nexport function motionTokensToVars(tokens: MotionTokens = active, prefix = '--usa'): Record<string, string> {\n const vars: Record<string, string> = {};\n for (const [k, v] of Object.entries(tokens.duration)) vars[`${prefix}-duration-${kebab(k)}`] = `${v}ms`;\n for (const [k, v] of Object.entries(tokens.easing)) vars[`${prefix}-easing-${kebab(k)}`] = v;\n for (const [k, v] of Object.entries(tokens.spring)) {\n vars[`${prefix}-spring-${kebab(k)}-stiffness`] = String(v.stiffness);\n vars[`${prefix}-spring-${kebab(k)}-damping`] = String(v.damping);\n vars[`${prefix}-spring-${kebab(k)}-mass`] = String(v.mass);\n }\n return vars;\n}\n\n/** A stylesheet string: `:root { --usa-duration-fast: 150ms; … }`. */\nexport function motionTokensToCss(tokens: MotionTokens = active, selector = ':root', prefix = '--usa'): string {\n const body = Object.entries(motionTokensToVars(tokens, prefix)).map(([k, v]) => ` ${k}: ${v};`).join('\\n');\n return `${selector} {\\n${body}\\n}\\n`;\n}\n\n/** W3C Design Tokens (DTCG) JSON: `{ motion: { duration: { fast: { $type: 'duration', $value: '150ms' } } } }`. */\nexport function motionTokensToJSON(tokens: MotionTokens = active): Record<string, unknown> {\n const grp = <T>(o: Record<string, T>, f: (v: T) => unknown) => Object.fromEntries(Object.entries(o).map(([k, v]) => [k, f(v)]));\n return {\n motion: {\n duration: grp(tokens.duration, (v) => ({ $type: 'duration', $value: `${v}ms` })),\n easing: grp(tokens.easing, (v) => {\n const m = /^cubic-bezier\\(([^)]+)\\)$/.exec(v);\n return m ? { $type: 'cubicBezier', $value: m[1].split(',').map(Number) } : { $type: 'string', $value: v };\n }),\n spring: grp(tokens.spring, (v) => ({ $type: 'spring', $value: { ...v } })),\n },\n };\n}\n\n/** Parse `150ms`, `0.15s`, `150` → ms. */\nexport function parseDuration(v: unknown): number | undefined {\n if (typeof v === 'number' && isFinite(v)) return v;\n if (typeof v === 'object' && v && 'value' in (v as any) && 'unit' in (v as any)) return parseDuration(`${(v as any).value}${(v as any).unit}`);\n const m = /^\\s*(-?\\d*\\.?\\d+)\\s*(ms|s)?\\s*$/.exec(String(v ?? ''));\n if (!m) return undefined;\n return m[2] === 's' ? Number(m[1]) * 1000 : Number(m[1]);\n}\n\n/** Parse `[x1,y1,x2,y2]`, `'cubic-bezier(…)'`, `'0.2, 0, 0, 1'` or a keyword → CSS easing. */\nexport function parseEasing(v: unknown): string | undefined {\n if (Array.isArray(v) && v.length === 4 && v.every((n) => typeof n === 'number')) return `cubic-bezier(${v.join(', ')})`;\n if (typeof v !== 'string' || !v.trim()) return undefined;\n const s = v.trim();\n if (/^-?\\d*\\.?\\d+(\\s*,\\s*-?\\d*\\.?\\d+){3}$/.test(s)) return `cubic-bezier(${s.split(/\\s*,\\s*/).join(', ')})`;\n return s;\n}\n\nconst isLeaf = (o: any) => o && typeof o === 'object' && ('$value' in o || 'value' in o);\nconst leafValue = (o: any) => ('$value' in o ? o.$value : o.value);\nconst leafType = (o: any) => String(o.$type ?? o.type ?? '').toLowerCase();\n\n/**\n * Import tokens from W3C DTCG JSON, Figma Tokens / Tokens Studio\n * (`{ value, type }`) or Style Dictionary (`{ value }`, nested) — anything\n * under a `duration` / `easing` / `spring` group (any depth, e.g.\n * `motion.duration.fast` or `global.animation.easing.out`), or typed leaves\n * (`duration`, `cubicBezier`, `transition`, `spring`). Unknown values are\n * skipped; the result is merged over the defaults.\n */\nexport function importMotionTokens(json: unknown, base: MotionTokens = MOTION_TOKENS): MotionTokens {\n const partial: Required<DeepPartialTokens> = { duration: {}, easing: {}, spring: {} };\n const walk = (node: any, path: string[]) => {\n if (!node || typeof node !== 'object') return;\n if (isLeaf(node)) {\n const name = path[path.length - 1];\n const type = leafType(node);\n const group = path.slice(0, -1).map((p) => p.toLowerCase());\n const val = leafValue(node);\n const inGroup = (g: string[]) => group.some((p) => g.includes(p));\n if (type === 'duration' || (!type && inGroup(['duration', 'durations'])) || (type !== 'cubicbezier' && inGroup(['duration', 'durations']))) {\n const ms = parseDuration(val);\n if (ms !== undefined) partial.duration[name] = ms;\n } else if (type === 'cubicbezier' || type === 'easing' || inGroup(['easing', 'easings', 'ease'])) {\n const e = parseEasing(val);\n if (e) partial.easing[name] = e;\n } else if (type === 'spring' || inGroup(['spring', 'springs'])) {\n if (val && typeof val === 'object') partial.spring[name] = { stiffness: Number(val.stiffness ?? 170), damping: Number(val.damping ?? 26), mass: Number(val.mass ?? 1) };\n } else if (type === 'transition' && val && typeof val === 'object') {\n const ms = parseDuration(val.duration);\n if (ms !== undefined) partial.duration[name] = ms;\n const e = parseEasing(val.timingFunction);\n if (e) partial.easing[name] = e;\n }\n return;\n }\n for (const [k, v] of Object.entries(node)) if (!k.startsWith('$')) walk(v, [...path, k]);\n };\n walk(json, []);\n return mergeMotionTokens(partial, base);\n}\n\n/** The tokens currently applied (via `applyMotionTokens`), or the defaults. */\nexport function getMotionTokens(): MotionTokens {\n return clone(active);\n}\n\n/**\n * Write tokens as CSS custom properties on `root` (default `<html>`) and make\n * them the active set for `motionToken()`. Returns an undo function.\n */\nexport function applyMotionTokens(tokens: DeepPartialTokens | MotionTokens = MOTION_TOKENS, root?: HTMLElement, prefix = '--usa'): () => void {\n const prev = active;\n active = mergeMotionTokens(tokens as DeepPartialTokens, MOTION_TOKENS);\n const el = root || (typeof document !== 'undefined' ? document.documentElement : null);\n const vars = motionTokensToVars(active, prefix);\n const old: Record<string, string> = {};\n if (el) for (const [k, v] of Object.entries(vars)) ((old[k] = el.style.getPropertyValue(k)), el.style.setProperty(k, v));\n return () => {\n active = prev;\n if (el) for (const [k, v] of Object.entries(old)) v ? el.style.setProperty(k, v) : el.style.removeProperty(k);\n };\n}\n\n/** Look up a token: `motionToken('duration', 'fast')` → `150`; `motionToken('easing', 'emphasized')` → CSS easing. */\nexport function motionToken(group: 'duration', name: string): number;\nexport function motionToken(group: 'easing', name: string): string;\nexport function motionToken(group: 'spring', name: string): SpringToken;\nexport function motionToken(group: MotionTokenGroup, name: string): number | string | SpringToken | undefined {\n const g = active[group] as Record<string, any>;\n return g[name] ?? (MOTION_TOKENS[group] as Record<string, any>)[name];\n}\n\n/** `var(--usa-duration-fast, 150ms)` — a CSS reference with the current value as fallback. */\nexport function motionVar(group: MotionTokenGroup, name: string, prop?: 'stiffness' | 'damping' | 'mass', prefix = '--usa'): string {\n if (group === 'spring') {\n const s = motionToken('spring', name);\n const p = prop || 'stiffness';\n return `var(${prefix}-spring-${kebab(name)}-${p}, ${s ? s[p] : ''})`;\n }\n const v = group === 'duration' ? `${motionToken('duration', name)}ms` : motionToken('easing', name);\n return `var(${prefix}-${group}-${kebab(name)}, ${v})`;\n}\n\n/** Resolve a duration that may be a token name (`'fast'`) or ms. */\nexport function resolveDurationToken(v: number | string | undefined, fallback: number): number {\n if (typeof v === 'number') return v;\n if (typeof v === 'string') return (active.duration[v] ?? parseDuration(v)) ?? fallback;\n return fallback;\n}\n\n/** Resolve an easing that may be a token name (`'emphasized'`) or CSS. */\nexport function resolveEasingToken(v: string | undefined, fallback: string): string {\n if (!v) return fallback;\n return active.easing[v] ?? v;\n}\n","import { prefersReducedMotion, motionScale, applyFrame, raf, caf, now, clamp } from '../base';\nimport { resolveDurationToken, resolveEasingToken } from '../tokens/index';\n\n/**\n * Where a step starts on a timeline:\n * - a number: absolute time in ms\n * - `'>'` (default): when the previous step ends · `'<'`: when it starts\n * - `'+=200'` / `'-=200'`: after / overlapping the previous end\n * - `'<+=100'`: 100ms after the previous step's start\n * - `'intro'` / `'intro+=150'`: at (or relative to) a label\n */\nexport type TimelinePosition = number | string;\n\nexport interface TimelineStepOptions {\n /** Duration in ms or a motion token name (`'fast'`, `'slow'`…; 4.2). Default: timeline default, 600. */\n duration?: number | string;\n /** CSS easing or a motion token name (`'emphasized'`, `'spring'`…; 4.2). Default `cubic-bezier(0.22, 1, 0.36, 1)`. */\n easing?: string;\n /** Start position, see `TimelinePosition`. */\n at?: TimelinePosition;\n /** ms between targets when the selector matches several elements. */\n stagger?: number;\n}\n\nexport interface TimelineOptions {\n /** Defaults for every step. */\n defaults?: Pick<TimelineStepOptions, 'duration' | 'easing' | 'stagger'>;\n /** Playback rate (1 = normal). */\n speed?: number;\n /** Called after `play()` reaches the end (or the start when reversed). */\n onComplete?: () => void;\n /** Called on every frame with progress 0–1. */\n onUpdate?: (progress: number) => void;\n}\n\nexport interface ScrubOptions {\n /** Scroll offset (px) before the source's top reaches the viewport bottom where progress starts (JS engine only). */\n offset?: number;\n /** Smoothing 0–1 (0 = immediate, default 0). Smoothing needs the JS engine. */\n smooth?: number;\n /**\n * 4.1: which progress source drives the timeline.\n * - `'view'` (default): `source` moving through the viewport (CSS `ViewTimeline`, range `cover`).\n * - `'scroll'`: the scroll position of `source` itself (a scroll container; CSS `ScrollTimeline`).\n */\n source?: 'view' | 'scroll';\n /** 4.1: `'auto'` (default) uses the browser's native scroll-driven animations when available, `'js'` forces the fallback. */\n engine?: 'auto' | 'native' | 'js';\n /** 4.1: scroll axis, `'block'` (default) · `'inline'` · `'x'` · `'y'`. */\n axis?: 'block' | 'inline' | 'x' | 'y';\n}\n\n/** The function `scrub()` returns: call it to stop. `native` tells which engine runs it. */\nexport interface ScrubHandle {\n (): void;\n /** `true` when the browser's ScrollTimeline / ViewTimeline drives it (compositor, no JS per frame). */\n readonly native: boolean;\n}\n\n/** 4.1: whether `scrub()` can use native ScrollTimeline / ViewTimeline here. */\nexport function supportsNativeScrub(source: 'view' | 'scroll' = 'view'): boolean {\n const g = globalThis as any;\n return typeof g[source === 'scroll' ? 'ScrollTimeline' : 'ViewTimeline'] === 'function' && typeof g.Element?.prototype?.animate === 'function';\n}\n\nconst handle = (stop: () => void, native: boolean): ScrubHandle => Object.assign(stop, { native }) as ScrubHandle;\n\nexport interface Timeline {\n /** Total length in ms. */\n readonly duration: number;\n /** Label positions in ms. */\n readonly labels: Readonly<Record<string, number>>;\n /** Current playhead in ms. */\n readonly time: number;\n /** Add a step: animate `target` with keyframes or a preset name (`fade-up`, `scale`…). */\n to(target: string | Element | Element[] | NodeList, frames: Keyframe[] | string, options?: TimelineStepOptions): Timeline;\n /** Name a position (default: the current end). */\n label(name: string, at?: TimelinePosition): Timeline;\n /** Run `fn` when the playhead passes `at`. */\n call(fn: () => void, at?: TimelinePosition): Timeline;\n /** Play forwards from the playhead (from 0 when at the end). Resolves at the end. */\n play(from?: TimelinePosition): Promise<void>;\n /** Play backwards to 0. */\n reverse(): Promise<void>;\n pause(): Timeline;\n /** Jump to a time (ms) or label. */\n seek(to: TimelinePosition): Timeline;\n /** Get or set progress 0–1. */\n progress(p?: number): number;\n /**\n * Tie progress to scroll: `source` moving through the viewport (or, with\n * `{ source: 'scroll' }`, a scroll container's own position). Runs on native\n * ScrollTimeline / ViewTimeline when available (and no `smooth`, `offset`,\n * `call()` cues or `onUpdate` need JS), else on a rAF-throttled listener.\n * Returns a stop function with a `native` flag.\n */\n scrub(source: Element, options?: ScrubOptions): ScrubHandle;\n /** Stop and drop every animation (elements keep their last frame). */\n cancel(): void;\n}\n\n/** Keyframe presets usable by name in `to()` and `data-tl`. */\nexport const TIMELINE_PRESETS: Record<string, Keyframe[]> = {\n fade: [{ opacity: 0 }, { opacity: 1 }],\n 'fade-up': [{ opacity: 0, transform: 'translateY(24px)' }, { opacity: 1, transform: 'none' }],\n 'fade-down': [{ opacity: 0, transform: 'translateY(-24px)' }, { opacity: 1, transform: 'none' }],\n 'fade-left': [{ opacity: 0, transform: 'translateX(24px)' }, { opacity: 1, transform: 'none' }],\n 'fade-right': [{ opacity: 0, transform: 'translateX(-24px)' }, { opacity: 1, transform: 'none' }],\n scale: [{ opacity: 0, transform: 'scale(0.85)' }, { opacity: 1, transform: 'none' }],\n blur: [{ opacity: 0, filter: 'blur(12px)' }, { opacity: 1, filter: 'blur(0)' }],\n rotate: [{ opacity: 0, transform: 'rotate(-12deg) scale(0.9)' }, { opacity: 1, transform: 'none' }],\n 'clip-up': [{ clipPath: 'inset(100% 0 0 0)' }, { clipPath: 'inset(0 0 0 0)' }],\n 'clip-right': [{ clipPath: 'inset(0 100% 0 0)' }, { clipPath: 'inset(0 0 0 0)' }],\n};\n\n/** Resolve a position against the previous step and labels (pure). */\nexport function resolvePosition(\n pos: TimelinePosition | undefined,\n end: number,\n prevStart: number,\n labels: Record<string, number> = {}\n): number {\n if (pos === undefined || pos === '' || pos === '>') return end;\n if (typeof pos === 'number') return Math.max(0, pos);\n const s = String(pos).trim();\n if (/^-?\\d+(\\.\\d+)?$/.test(s)) return Math.max(0, Number(s));\n const m = /^(<|>|[A-Za-z_][\\w-]*)?\\s*(?:([+-])=\\s*(\\d+(?:\\.\\d+)?))?$/.exec(s);\n if (!m) return end;\n const base = m[1] === '<' ? prevStart : m[1] === '>' || !m[1] ? end : labels[m[1]] ?? end;\n const delta = m[2] ? (m[2] === '-' ? -1 : 1) * Number(m[3]) : 0;\n return Math.max(0, base + delta);\n}\n\nconst toEls = (t: string | Element | Element[] | NodeList): Element[] =>\n typeof t === 'string' ? (typeof document === 'undefined' ? [] : Array.from(document.querySelectorAll(t))) : t instanceof Element ? [t] : Array.from(t as ArrayLike<Element>);\n\ninterface Step { el: Element; frames: Keyframe[]; start: number; duration: number; easing: string; anim?: Animation | null }\ninterface Cue { fn: () => void; at: number }\n\n/**\n * Choreograph animations on one clock: chain, overlap, label, seek, reverse and\n * scrub them with scroll. Built on WAAPI (paused animations driven by one\n * playhead); without WAAPI or under reduced motion it jumps to the end state.\n *\n * @example\n * const tl = timeline({ defaults: { duration: 500 } })\n * .to('.title', 'fade-up')\n * .label('cards')\n * .to('.card', 'scale', { stagger: 80, at: '-=200' })\n * .to('.cta', [{ opacity: 0 }, { opacity: 1 }], { at: 'cards+=400' });\n * tl.play(); // or tl.scrub(document.querySelector('.hero'))\n */\nexport function timeline(options: TimelineOptions = {}): Timeline {\n const d = { duration: 600, easing: 'cubic-bezier(0.22, 1, 0.36, 1)', stagger: 0, ...options.defaults };\n const steps: Step[] = [];\n const cues: Cue[] = [];\n const labels: Record<string, number> = {};\n let end = 0;\n let prevStart = 0;\n let t = 0;\n let frame = 0;\n let dir = 1;\n let settle: (() => void) | undefined;\n let built = false;\n\n const total = () => Math.max(end, ...cues.map((c) => c.at), 0);\n const build = () => {\n if (built) return;\n built = true;\n for (const s of steps) {\n if (typeof (s.el as HTMLElement).animate !== 'function') { s.anim = null; continue; }\n s.anim = (s.el as HTMLElement).animate(s.frames, { duration: s.duration, delay: s.start, easing: s.easing, fill: 'both' });\n s.anim.pause?.();\n }\n };\n const render = (to: number, from: number) => {\n build();\n t = clamp(to, 0, total());\n for (const s of steps) {\n if (s.anim) s.anim.currentTime = t;\n else applyFrame(s.el as HTMLElement, s.frames[t >= s.start ? s.frames.length - 1 : 0]);\n }\n for (const c of cues) if ((from < c.at && t >= c.at) || (from > c.at && t <= c.at)) c.fn();\n options.onUpdate?.(total() ? t / total() : 1);\n };\n const stop = () => {\n if (frame) caf(frame);\n frame = 0;\n };\n const run = (direction: number): Promise<void> => {\n stop();\n settle?.();\n dir = direction;\n const target = dir > 0 ? total() : 0;\n const k = motionScale();\n if (prefersReducedMotion() || k === 0 || !total()) {\n render(target, t);\n options.onComplete?.();\n return Promise.resolve();\n }\n const rate = (options.speed ?? 1) / k;\n return new Promise<void>((resolve) => {\n settle = () => { settle = undefined; resolve(); };\n let last = now();\n const loop = () => {\n const n = now();\n const next = t + (n - last) * rate * dir;\n last = n;\n render(next, t);\n if ((dir > 0 && t >= target) || (dir < 0 && t <= 0)) {\n frame = 0;\n options.onComplete?.();\n settle?.();\n return;\n }\n frame = raf(loop);\n };\n frame = raf(loop);\n });\n };\n\n const api: Timeline = {\n get duration() { return total(); },\n get labels() { return { ...labels }; },\n get time() { return t; },\n to(target, frames, o = {}) {\n const kf = typeof frames === 'string' ? TIMELINE_PRESETS[frames] || TIMELINE_PRESETS.fade : frames;\n const start = resolvePosition(o.at, end, prevStart, labels);\n const duration = resolveDurationToken(o.duration ?? d.duration, 600);\n const stagger = o.stagger ?? d.stagger;\n let last = start;\n toEls(target).forEach((el, i) => {\n const s = start + i * stagger;\n steps.push({ el, frames: kf, start: s, duration, easing: resolveEasingToken(o.easing ?? d.easing, 'cubic-bezier(0.22, 1, 0.36, 1)') });\n last = Math.max(last, s + duration);\n });\n prevStart = start;\n end = Math.max(end, last);\n built = false;\n steps.forEach((s) => s.anim?.cancel?.());\n return api;\n },\n label(name, at) {\n labels[name] = resolvePosition(at, end, prevStart, labels);\n return api;\n },\n call(fn, at) {\n cues.push({ fn, at: resolvePosition(at, end, prevStart, labels) });\n return api;\n },\n play(from) {\n if (from !== undefined) render(resolvePosition(from, 0, 0, labels), t);\n else if (t >= total()) render(0, -1);\n return run(1);\n },\n reverse() {\n return run(-1);\n },\n pause() {\n stop();\n return api;\n },\n seek(to) {\n stop();\n render(resolvePosition(to, 0, 0, labels), t);\n return api;\n },\n progress(p) {\n if (p !== undefined) api.seek(clamp(p, 0, 1) * total());\n return total() ? t / total() : 0;\n },\n scrub(source, o = {}) {\n stop();\n if (prefersReducedMotion() || typeof window === 'undefined') {\n render(total(), t);\n return handle(() => {}, false);\n }\n const mode = o.source ?? 'view';\n const axis = o.axis ?? 'block';\n const needsJs = !!o.smooth || !!o.offset || cues.length > 0 || !!options.onUpdate || o.engine === 'js';\n if (!needsJs && total() > 0 && supportsNativeScrub(mode) && steps.every((st) => typeof (st.el as HTMLElement).animate === 'function')) {\n // Native: one scroll-driven animation per step, its slice of the\n // timeline mapped onto the scroll range (`cover` for a view timeline).\n const g = globalThis as any;\n const tl = mode === 'scroll' ? new g.ScrollTimeline({ source, axis }) : new g.ViewTimeline({ subject: source, axis });\n const T = total();\n steps.forEach((st) => st.anim?.cancel?.());\n built = false;\n const pct = (ms: number) => `${((ms / T) * 100).toFixed(3)}%`;\n const live = steps.map((st) => {\n const range = mode === 'view' ? { rangeStart: `cover ${pct(st.start)}`, rangeEnd: `cover ${pct(st.start + st.duration)}` } : {};\n const timing: any = { easing: st.easing, fill: 'both', timeline: tl, ...range };\n if (mode === 'scroll') Object.assign(timing, { duration: 'auto', rangeStart: pct(st.start), rangeEnd: pct(st.start + st.duration) });\n return (st.el as HTMLElement).animate(st.frames, timing);\n });\n return handle(() => {\n live.forEach((a) => a.cancel());\n render(t, t);\n }, true);\n }\n let id = 0;\n let cur = t;\n const scroller = mode === 'scroll' ? (source as HTMLElement) : null;\n const progressNow = () => {\n const x = axis === 'x' || axis === 'inline';\n if (scroller) {\n const max = x ? scroller.scrollWidth - scroller.clientWidth : scroller.scrollHeight - scroller.clientHeight;\n return clamp((x ? scroller.scrollLeft : scroller.scrollTop) / (max || 1), 0, 1);\n }\n const r = source.getBoundingClientRect();\n const vh = (x ? window.innerWidth : window.innerHeight) || 1;\n const start = x ? r.left : r.top;\n const size = x ? r.width : r.height;\n return clamp((vh + (o.offset ?? 0) - start) / (vh + size || 1), 0, 1);\n };\n const update = () => {\n id = 0;\n const goal = progressNow() * total();\n const sm = clamp(o.smooth ?? 0, 0, 0.95);\n cur = sm ? cur + (goal - cur) * (1 - sm) : goal;\n render(cur, t);\n if (sm && Math.abs(goal - cur) > 0.5) id = raf(update);\n };\n const onScroll = () => { if (!id) id = raf(update); };\n const target: EventTarget = scroller || window;\n target.addEventListener('scroll', onScroll, { passive: true });\n window.addEventListener('resize', onScroll, { passive: true });\n update();\n return handle(() => {\n target.removeEventListener('scroll', onScroll);\n window.removeEventListener('resize', onScroll);\n if (id) caf(id);\n }, false);\n },\n cancel() {\n stop();\n settle?.();\n steps.forEach((s) => s.anim?.cancel?.());\n built = false;\n },\n };\n return api;\n}\n","/**\n * 5.9 — `<usa-player>`: plays JSON animations.\n *\n * Format `use-scroll-animate/animation` v1:\n *\n * ```json\n * { \"format\": \"use-scroll-animate/animation\", \"version\": 1, \"name\": \"Hero\",\n * \"loop\": false,\n * \"tracks\": [\n * { \"target\": \"h1\", \"start\": 0, \"duration\": 600, \"preset\": \"fade-up\" },\n * { \"target\": \".cta\", \"start\": 500, \"duration\": 500, \"keyframes\": [{ \"opacity\": 0 }, { \"opacity\": 1 }], \"easing\": \"ease-out\" },\n * { \"target\": \".cta\", \"start\": 1100, \"effect\": \"jelly\", \"options\": {} }\n * ] }\n * ```\n *\n * A track animates `target` (a selector inside the player; `:scope` for the\n * player itself) with a timeline preset, its own keyframes, or fires any\n * registered effect at `start`. Playground presets (format\n * `use-scroll-animate/playground`) are accepted too — their tracks map to the\n * player's children in order.\n *\n * Keyframe tracks are WAAPI animations driven by one clock, so the player can\n * play, pause, seek, change rate and be scrubbed by scroll\n * (`trigger=\"scroll\"`). Reduced motion: jumps to the end state, effects skipped.\n */\nimport { playEffect } from '../fx/registry';\nimport { defineElement, prefersReducedMotion, type UsaElement } from '../base';\nimport { TIMELINE_PRESETS } from '../timeline/core';\nimport { storyProgress } from './story';\n\nexport interface AnimationTrack {\n /** Selector inside the player (`:scope` = the player). */\n target?: string;\n /** Start time in ms. */\n start?: number;\n duration?: number;\n /** A timeline preset (`fade-up`, `scale`, `blur`…). */\n preset?: string;\n keyframes?: Keyframe[];\n easing?: string;\n /** A registered effect fired at `start` (instead of keyframes). */\n effect?: string;\n options?: Record<string, unknown>;\n label?: string;\n}\n\nexport interface AnimationJSON {\n format?: string;\n version?: number;\n name?: string;\n loop?: boolean;\n /** Total length; defaults to the end of the last track. */\n duration?: number;\n tracks: AnimationTrack[];\n}\n\nexport const ANIMATION_FORMAT = 'use-scroll-animate/animation';\n\nfunction decodePlayground(state: string): AnimationTrack[] {\n try {\n const b64 = state.replace(/-/g, '+').replace(/_/g, '/');\n const json = decodeURIComponent(escape(atob(b64)));\n const t = (JSON.parse(json).t || []) as [string, number, number, string][];\n return t.map(([preset, start, duration, label], i) => ({ target: `:scope > :nth-child(${i + 1})`, preset, start, duration, label }));\n } catch {\n return [];\n }\n}\n\n/** Validate / normalise an animation (object or JSON text). Throws on anything unusable. */\nexport function normalizeAnimation(input: string | AnimationJSON | Record<string, any>): Required<Pick<AnimationJSON, 'tracks' | 'duration' | 'loop' | 'name'>> {\n const d: any = typeof input === 'string' ? JSON.parse(input) : input;\n if (!d || typeof d !== 'object') throw new Error('[motionary] animation: expected an object');\n let tracks: AnimationTrack[];\n if (d.format === 'use-scroll-animate/playground') tracks = decodePlayground(String(d.state || ''));\n else if (Array.isArray(d.tracks)) tracks = d.tracks;\n else throw new Error('[motionary] animation: missing \"tracks\"');\n if (d.format && d.format !== ANIMATION_FORMAT && d.format !== 'use-scroll-animate/playground') throw new Error(`[motionary] animation: unknown format \"${d.format}\"`);\n if (d.version && d.version > 1 && d.format === ANIMATION_FORMAT) throw new Error(`[motionary] animation: version ${d.version} needs a newer motionary`);\n const out = tracks\n .filter((t) => t && (t.effect || t.preset || Array.isArray(t.keyframes)))\n .map((t) => ({ ...t, target: t.target || ':scope', start: Math.max(0, Number(t.start) || 0), duration: t.effect ? 0 : Math.max(1, Number(t.duration) || 600) }));\n const end = out.reduce((m, t) => Math.max(m, t.start + t.duration), 0);\n return { tracks: out, duration: Math.max(end, Number(d.duration) || 0), loop: !!d.loop, name: String(d.name || 'animation') };\n}\n\nexport interface Player {\n readonly duration: number;\n readonly currentTime: number;\n readonly playing: boolean;\n play(): void;\n pause(): void;\n /** Jump to `ms` (effects between are not replayed). */\n seek(ms: number): void;\n /** Playback rate (default 1). */\n rate: number;\n /** Resolves each time the animation reaches its end (not when looping). */\n readonly finished: Promise<void>;\n destroy(): void;\n}\n\nconst pick = (root: HTMLElement, sel: string): HTMLElement[] => {\n if (sel === ':scope') return [root];\n try {\n return Array.from(root.querySelectorAll<HTMLElement>(sel));\n } catch {\n return [];\n }\n};\n\n/** Bind an animation to `root` and return its controller (paused at 0 unless `autoplay`). */\nexport function createPlayer(root: HTMLElement, animation: string | AnimationJSON, o: { autoplay?: boolean; loop?: boolean; rate?: number; onFinish?: () => void } = {}): Player {\n const a = normalizeAnimation(animation);\n const loop = o.loop ?? a.loop;\n const anims: Animation[] = [];\n const effects: { els: HTMLElement[]; t: AnimationTrack; fired: boolean }[] = [];\n for (const t of a.tracks) {\n const els = pick(root, t.target!);\n if (t.effect) effects.push({ els, t, fired: false });\n else {\n const kf = t.keyframes || TIMELINE_PRESETS[t.preset!] || TIMELINE_PRESETS.fade;\n for (const el of els) {\n if (typeof el.animate !== 'function') continue;\n const an = el.animate(kf, { duration: t.duration, delay: t.start, easing: t.easing || 'cubic-bezier(0.22, 1, 0.36, 1)', fill: 'both' });\n an.pause();\n an.currentTime = 0;\n anims.push(an);\n }\n }\n }\n let time = 0;\n let playing = false;\n let raf = 0;\n let last = 0;\n let resolve!: () => void;\n let finished = new Promise<void>((r) => (resolve = r));\n const set = (ms: number) => {\n time = Math.min(a.duration, Math.max(0, ms));\n for (const an of anims) an.currentTime = time;\n };\n const fireDue = () => {\n if (prefersReducedMotion()) return;\n for (const e of effects)\n if (!e.fired && time >= e.t.start!) {\n e.fired = true;\n for (const el of e.els) playEffect(el, e.t.effect!, e.t.options || {}).catch(() => undefined);\n }\n };\n const done = () => {\n resolve();\n o.onFinish?.();\n finished = new Promise<void>((r) => (resolve = r));\n };\n const frame = (now: number) => {\n raf = 0;\n if (!playing) return;\n set(time + (now - last) * player.rate);\n last = now;\n fireDue();\n if (time >= a.duration) {\n if (loop) {\n effects.forEach((e) => (e.fired = false));\n set(0);\n } else {\n playing = false;\n done();\n return;\n }\n }\n raf = requestAnimationFrame(frame);\n };\n const player: Player = {\n get duration() {\n return a.duration;\n },\n get currentTime() {\n return time;\n },\n get playing() {\n return playing;\n },\n rate: o.rate ?? 1,\n get finished() {\n return finished;\n },\n play() {\n if (prefersReducedMotion()) {\n set(a.duration);\n effects.forEach((e) => (e.fired = true));\n done();\n return;\n }\n if (playing) return;\n if (time >= a.duration) {\n effects.forEach((e) => (e.fired = false));\n set(0);\n }\n playing = true;\n last = performance.now();\n fireDue();\n raf = requestAnimationFrame(frame);\n },\n pause() {\n playing = false;\n cancelAnimationFrame(raf);\n raf = 0;\n },\n seek(ms: number) {\n set(ms);\n effects.forEach((e) => (e.fired = e.t.start! < time));\n },\n destroy() {\n player.pause();\n anims.forEach((an) => an.cancel());\n },\n };\n if (o.autoplay) player.play();\n return player;\n}\n\nexport interface UsaPlayerElement extends UsaElement {\n readonly player: Player | null;\n /** Load an animation (object or JSON text) and restart. */\n load(animation: string | AnimationJSON): void;\n play(): void;\n pause(): void;\n seek(ms: number): void;\n}\n\n/**\n * `<usa-player src=\"hero.json\" | <script type=\"application/json\"> child\n * trigger=\"load | view | scroll | click | manual\" loop rate controls>`.\n * Emits `usa-player-ready` and `usa-player-finish`; sets `data-error` when the\n * animation cannot be loaded.\n */\nexport function definePlayer(tag = 'usa-player'): CustomElementConstructor | undefined {\n return defineElement(\n tag,\n (Base) =>\n class UsaPlayer extends Base {\n static get observedAttributes(): string[] {\n return ['src', 'trigger', 'loop', 'rate'];\n }\n player: Player | null = null;\n private json: string | AnimationJSON | null = null;\n load(animation: string | AnimationJSON): void {\n this.json = animation;\n this.start();\n }\n play(): void {\n this.player?.play();\n }\n pause(): void {\n this.player?.pause();\n }\n seek(ms: number): void {\n this.player?.seek(ms);\n }\n private start(): void {\n this.player?.destroy();\n this.player = null;\n if (!this.json) return;\n try {\n this.player = createPlayer(this, this.json, {\n loop: this.hasAttribute('loop') ? true : undefined,\n rate: this.num('rate', 1),\n onFinish: () => this.dispatchEvent(new CustomEvent('usa-player-finish', { bubbles: true })),\n });\n this.removeAttribute('data-error');\n } catch (err) {\n this.setAttribute('data-error', String((err as Error).message || err));\n return;\n }\n const p = this.player;\n this.dispatchEvent(new CustomEvent('usa-player-ready', { detail: { duration: p.duration }, bubbles: true }));\n const trig = this.str('trigger', 'view');\n if (trig === 'load') p.play();\n else if (trig === 'view') this.inView((v) => v && p.play(), { threshold: 0.25 });\n else if (trig === 'click') this.listen(this, 'click', () => (p.playing ? p.pause() : p.play()));\n else if (trig === 'scroll') {\n let f = 0;\n const upd = () => {\n f = 0;\n p.seek(storyProgress(this) * p.duration);\n };\n const kick = () => void (f ||= requestAnimationFrame(upd));\n this.listen(window, 'scroll', kick, { passive: true });\n this.listen(window, 'resize', kick);\n this.onCleanup(() => cancelAnimationFrame(f));\n upd();\n }\n if (this.flag('controls')) this.mountControls(p);\n }\n private mountControls(p: Player): void {\n const b = document.createElement('button');\n b.type = 'button';\n b.setAttribute('data-player-toggle', '');\n b.textContent = '▶︎ / ❚❚';\n b.setAttribute('aria-label', 'Play / pause animation');\n this.listen(b, 'click', (e: Event) => {\n e.stopPropagation();\n if (p.playing) p.pause();\n else p.play();\n b.setAttribute('aria-pressed', String(p.playing));\n });\n this.append(b);\n this.onCleanup(() => b.remove());\n }\n changed(name: string): void {\n if (name === 'src') this.json = null;\n super.changed(name);\n }\n mount(): void {\n this.onCleanup(() => {\n this.player?.destroy();\n this.player = null;\n });\n const inline = this.querySelector<HTMLScriptElement>('script[type=\"application/json\"]');\n const src = this.str('src');\n if (inline && !this.json) this.json = inline.textContent || '';\n if (src && !this.json) {\n fetch(src)\n .then((r) => (r.ok ? r.text() : Promise.reject(new Error(`HTTP ${r.status}`))))\n .then((t) => this.isConnected && this.load(t))\n .catch((err) => this.setAttribute('data-error', String(err.message || err)));\n return;\n }\n this.start();\n }\n },\n { id: 'usa-player', text: 'usa-player{display:block;position:relative}usa-player>script{display:none}usa-player [data-player-toggle]{position:absolute;right:8px;bottom:8px}' }\n );\n}\n","import { defineElement, type UsaElement } from '../base';\nimport { createPlayer, ANIMATION_FORMAT, type AnimationJSON, type Player } from '../effects/player';\nimport css from './keyframe-editor.css?raw';\n\n/**\n * `<usa-keyframe-editor>` (6.9) — animation editor 2.0: a compact timeline\n * for `<usa-player>` JSON. Each track is a row with a draggable bar (drag to\n * move, drag the right edge to resize; ← / → move by 50 ms, Shift + ← / →\n * resize); a playhead scrubs the preview, ▶ plays it. The preview target is\n * the element with id `for` (its children are the tracks' targets). Set\n * `animation` (object or JSON string, or a `<script type=\"application/json\">`\n * child); read `animation` / `toJSON()` for the edited JSON (format\n * `use-scroll-animate/animation` v1 — playable by `<usa-player>`). Event\n * `usa:change` (`{ animation }`). Reduced motion: the preview jumps to the\n * end state.\n */\nexport interface UsaKeyframeEditorElement extends UsaElement {\n animation: AnimationJSON;\n toJSON(): AnimationJSON;\n play(): void;\n seek(ms: number): void;\n}\n\nconst DEFAULT: AnimationJSON = {\n format: ANIMATION_FORMAT,\n version: 1,\n name: 'Untitled',\n tracks: [\n { target: ':scope > :nth-child(1)', start: 0, duration: 600, preset: 'fade-up', label: 'Title' },\n { target: ':scope > :nth-child(2)', start: 300, duration: 600, preset: 'scale', label: 'Card' },\n { target: ':scope > :nth-child(3)', start: 700, duration: 500, preset: 'fade-up', label: 'Button' },\n ],\n};\n\nexport function defineKeyframeEditor(tag = 'usa-keyframe-editor'): CustomElementConstructor | undefined {\n return defineElement(\n tag,\n (Base) => {\n class UsaKeyframeEditor extends Base {\n private _anim: AnimationJSON = JSON.parse(JSON.stringify(DEFAULT));\n private _player: Player | null = null;\n\n get animation(): AnimationJSON {\n return this.toJSON();\n }\n set animation(v: AnimationJSON | string) {\n try {\n const a = typeof v === 'string' ? JSON.parse(v) : v;\n if (a && Array.isArray(a.tracks)) this._anim = { format: ANIMATION_FORMAT, version: 1, ...JSON.parse(JSON.stringify(a)) };\n } catch {\n return;\n }\n if (this.isConnected) this.render();\n }\n\n toJSON(): AnimationJSON {\n return JSON.parse(JSON.stringify({ ...this._anim, duration: this.total() }));\n }\n\n private total(): number {\n return Math.max(500, ...this._anim.tracks.map((t) => (t.start || 0) + (t.duration || 0)));\n }\n\n mount(): void {\n const src = this.querySelector(':scope > script[type=\"application/json\"]');\n if (src?.textContent) this.animation = src.textContent;\n this.querySelectorAll(':scope > [data-usa-part]').forEach((n) => n.remove());\n this.insertAdjacentHTML('afterbegin', '<div class=\"usa-ke-bar\" data-usa-part><button type=\"button\" class=\"usa-ke-play\" aria-label=\"Play\">▶</button><input class=\"usa-ke-scrub\" type=\"range\" min=\"0\" max=\"1000\" value=\"1000\" aria-label=\"Playhead\"><output class=\"usa-ke-time\">0 ms</output></div><div class=\"usa-ke-tracks\" data-usa-part role=\"list\"></div>');\n this.listen(this.querySelector('.usa-ke-play')!, 'click', () => this.play());\n this.listen(this.querySelector('.usa-ke-scrub')!, 'input', (e: Event) => this.seek((Number((e.target as HTMLInputElement).value) / 1000) * this.total()));\n this.render();\n }\n\n private target(): HTMLElement | null {\n const id = this.str('for', '');\n return id ? document.getElementById(id) : null;\n }\n\n private rebuild(): void {\n this._player?.destroy?.();\n this._player = null;\n const t = this.target();\n if (t) this._player = createPlayer(t, this.toJSON(), { autoplay: false });\n }\n\n private render(): void {\n const box = this.querySelector('.usa-ke-tracks') as HTMLElement | null;\n if (!box) return;\n const total = this.total();\n box.innerHTML = '';\n this._anim.tracks.forEach((t, i) => {\n const row = document.createElement('div');\n row.className = 'usa-ke-row';\n row.setAttribute('role', 'listitem');\n row.innerHTML = `<span class=\"usa-ke-label\"></span><span class=\"usa-ke-lane\"><span class=\"usa-ke-clip\" tabindex=\"0\" role=\"slider\" aria-valuemin=\"0\" aria-valuemax=\"${total}\"><span class=\"usa-ke-grip\" aria-hidden=\"true\"></span></span></span>`;\n (row.querySelector('.usa-ke-label') as HTMLElement).textContent = t.label || t.preset || t.effect || `Track ${i + 1}`;\n const clip = row.querySelector('.usa-ke-clip') as HTMLElement;\n clip.style.left = `${((t.start || 0) / total) * 100}%`;\n clip.style.width = `${Math.max(2, ((t.duration || 300) / total) * 100)}%`;\n clip.setAttribute('aria-valuenow', String(t.start || 0));\n clip.setAttribute('aria-label', `${(row.querySelector('.usa-ke-label') as HTMLElement).textContent}: start ${t.start || 0} ms, ${t.duration || 0} ms`);\n clip.dataset.i = String(i);\n this.wire(clip, i);\n box.appendChild(row);\n });\n this.rebuild();\n }\n\n private update(i: number, start: number, duration: number): void {\n const t = this._anim.tracks[i];\n t.start = Math.max(0, Math.round(start / 10) * 10);\n t.duration = Math.max(50, Math.round(duration / 10) * 10);\n this.render();\n (this.querySelector(`.usa-ke-clip[data-i=\"${i}\"]`) as HTMLElement | null)?.focus();\n this.emit('change', { animation: this.toJSON() });\n }\n\n private wire(clip: HTMLElement, i: number): void {\n clip.addEventListener('keydown', (e: KeyboardEvent) => {\n const t = this._anim.tracks[i];\n const d = e.key === 'ArrowRight' ? 50 : e.key === 'ArrowLeft' ? -50 : 0;\n if (!d) return;\n e.preventDefault();\n if (e.shiftKey) this.update(i, t.start || 0, (t.duration || 300) + d);\n else this.update(i, (t.start || 0) + d, t.duration || 300);\n });\n clip.addEventListener('pointerdown', (e: PointerEvent) => {\n const lane = clip.parentElement as HTMLElement;\n const w = lane.getBoundingClientRect().width || 1;\n const total = this.total();\n const t = this._anim.tracks[i];\n const s0 = t.start || 0;\n const d0 = t.duration || 300;\n const resize = (e.target as HTMLElement).classList.contains('usa-ke-grip');\n const x0 = e.clientX;\n clip.setPointerCapture?.(e.pointerId);\n clip.toggleAttribute('data-drag', true);\n const move = (ev: PointerEvent) => {\n const dms = ((ev.clientX - x0) / w) * total;\n if (resize) clip.style.width = `${(Math.max(50, d0 + dms) / total) * 100}%`;\n else clip.style.left = `${(Math.max(0, s0 + dms) / total) * 100}%`;\n };\n const up = (ev: PointerEvent) => {\n clip.removeEventListener('pointermove', move);\n clip.removeEventListener('pointerup', up);\n clip.removeAttribute('data-drag');\n const dms = ((ev.clientX - x0) / w) * total;\n if (Math.abs(ev.clientX - x0) < 2) return;\n if (resize) this.update(i, s0, d0 + dms);\n else this.update(i, s0 + dms, d0);\n };\n clip.addEventListener('pointermove', move);\n clip.addEventListener('pointerup', up);\n });\n }\n\n seek(ms: number): void {\n const total = this.total();\n const v = Math.max(0, Math.min(total, ms));\n this._player?.seek?.(v);\n const out = this.querySelector('.usa-ke-time');\n if (out) out.textContent = `${Math.round(v)} ms`;\n this.style.setProperty('--usa-ke-head', `${(v / total) * 100}%`);\n }\n\n play(): void {\n if (!this._player) this.rebuild();\n if (this.reduced) return this.seek(this.total());\n this._player?.seek?.(0);\n this._player?.play?.();\n const t0 = performance.now();\n const total = this.total();\n const scrub = this.querySelector('.usa-ke-scrub') as HTMLInputElement | null;\n const f = () => {\n const ms = Math.min(total, performance.now() - t0);\n if (scrub) scrub.value = String(Math.round((ms / total) * 1000));\n this.style.setProperty('--usa-ke-head', `${(ms / total) * 100}%`);\n const out = this.querySelector('.usa-ke-time');\n if (out) out.textContent = `${Math.round(ms)} ms`;\n if (ms < total && this.isConnected) requestAnimationFrame(f);\n };\n if (typeof requestAnimationFrame === 'function') requestAnimationFrame(f);\n }\n }\n return UsaKeyframeEditor as unknown as CustomElementConstructor;\n },\n { id: 'keyframe-editor', 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';\nimport { defineToastStack, stackToast, TOAST_POSITIONS, type UsaToastStackElement, type StackToastOptions } from './toast';\nimport { defineModal, defineSheet, MODAL_EFFECTS, SHEET_SIDES, type UsaModalElement, type UsaSheetElement } from './overlay';\nimport { defineMenu, MENU_EFFECTS, type UsaMenuElement } from './menu';\nimport { defineProgressRing, defineOdometer, PROGRESS_VARIANTS, type UsaProgressRingElement, type UsaOdometerElement } from './meters';\nimport { defineSkeletonReveal, SKELETON_VARIANTS, type UsaSkeletonRevealElement } from './skeleton-reveal';\nimport { defineStarRating, type UsaStarRatingElement } from './star-rating';\nimport { defineMilestones, type UsaMilestonesElement } from './milestones';\nimport { defineMasonryFlow, type UsaMasonryFlowElement } from './masonry-flow';\nimport { defineCompare, type UsaCompareElement } from './compare';\nimport { defineCubeGallery, type UsaCubeGalleryElement } from './cube-gallery';\nimport { defineDock, type UsaDockElement } from './dock';\nimport { defineNavMorph, NAV_INDICATORS, type UsaNavMorphElement } from './nav-morph';\nimport { defineMenuToggle, TOGGLE_VARIANTS, type UsaMenuToggleElement } from './menu-toggle';\nimport { defineTip, TIP_PLACEMENTS, type UsaTipElement } from './tip';\nimport { defineStepper, type UsaStepperElement } from './stepper';\nimport { definePagination, pageWindow, type UsaPaginationElement } from './pagination';\nimport { defineSegmented, SEGMENTED_VARIANTS, type UsaSegmentedElement } from './segmented';\nimport { defineSwitch, SWITCH_VARIANTS, type UsaSwitchElement } from './switch';\nimport { defineKanban, type UsaKanbanElement } from './kanban';\nimport { defineSwipeDeck, type UsaSwipeDeckElement } from './swipe-deck';\nimport { defineWeatherCard, WEATHER_CONDITIONS, type UsaWeatherCardElement } from './weather-card';\nimport { definePullCord, type UsaPullCordElement } from './pull-cord';\nimport { defineDatePicker, monthGrid, parseISODate, type UsaDatePickerElement } from './date-picker';\nimport { defineColorPicker, hsvToHex, hexToHsv, type UsaColorPickerElement } from './color-picker';\nimport { defineFileDrop, type UsaFileDropElement } from './file-drop';\nimport { defineKeyframeEditor, type UsaKeyframeEditorElement } from './keyframe-editor';\n\nexport { defineCarousel, defineTabBar, defineDisclosure, defineStories, CAROUSEL_EFFECTS, TAB_INDICATORS };\nexport type { UsaCarouselElement, UsaTabBarElement, UsaDisclosureElement, UsaStoriesElement };\nexport { defineToastStack, stackToast, TOAST_POSITIONS, defineModal, defineSheet, MODAL_EFFECTS, SHEET_SIDES, defineMenu, MENU_EFFECTS };\nexport type { UsaToastStackElement, StackToastOptions, UsaModalElement, UsaSheetElement, UsaMenuElement };\n\nexport { defineProgressRing, defineOdometer, PROGRESS_VARIANTS, defineSkeletonReveal, SKELETON_VARIANTS, defineStarRating };\nexport type { UsaProgressRingElement, UsaOdometerElement, UsaSkeletonRevealElement, UsaStarRatingElement };\n\nexport { defineMilestones, defineMasonryFlow, defineCompare, defineCubeGallery };\nexport type { UsaMilestonesElement, UsaMasonryFlowElement, UsaCompareElement, UsaCubeGalleryElement };\n\nexport { defineDock, defineNavMorph, NAV_INDICATORS, defineMenuToggle, TOGGLE_VARIANTS, defineTip, TIP_PLACEMENTS };\nexport type { UsaDockElement, UsaNavMorphElement, UsaMenuToggleElement, UsaTipElement };\n\nexport { defineStepper, definePagination, pageWindow, defineSegmented, SEGMENTED_VARIANTS, defineSwitch, SWITCH_VARIANTS };\nexport type { UsaStepperElement, UsaPaginationElement, UsaSegmentedElement, UsaSwitchElement };\n\nexport { defineKanban, defineSwipeDeck, defineWeatherCard, WEATHER_CONDITIONS, definePullCord };\nexport type { UsaKanbanElement, UsaSwipeDeckElement, UsaWeatherCardElement, UsaPullCordElement };\n\nexport { defineDatePicker, monthGrid, parseISODate, defineColorPicker, hsvToHex, hexToHsv, defineFileDrop, defineKeyframeEditor };\nexport type { UsaDatePickerElement, UsaColorPickerElement, UsaFileDropElement, UsaKeyframeEditorElement };\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 '6.3': { 'usa-toast-stack': defineToastStack, 'usa-modal': defineModal, 'usa-sheet': defineSheet, 'usa-menu': defineMenu },\n '6.4': { 'usa-progress-ring': defineProgressRing, 'usa-odometer': defineOdometer, 'usa-skeleton-reveal': defineSkeletonReveal, 'usa-star-rating': defineStarRating },\n '6.5': { 'usa-milestones': defineMilestones, 'usa-masonry-flow': defineMasonryFlow, 'usa-compare': defineCompare, 'usa-cube-gallery': defineCubeGallery },\n '6.6': { 'usa-dock': defineDock, 'usa-nav-morph': defineNavMorph, 'usa-menu-toggle': defineMenuToggle, 'usa-tip': defineTip },\n '6.7': { 'usa-stepper': defineStepper, 'usa-pagination': definePagination, 'usa-segmented': defineSegmented, 'usa-switch': defineSwitch },\n '6.8': { 'usa-kanban': defineKanban, 'usa-swipe-deck': defineSwipeDeck, 'usa-weather-card': defineWeatherCard, 'usa-pull-cord': definePullCord },\n '6.9': { 'usa-date-picker': defineDatePicker, 'usa-color-picker': defineColorPicker, 'usa-file-drop': defineFileDrop, 'usa-keyframe-editor': defineKeyframeEditor },\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 'usa-toast-stack': UsaToastStackElement;\n 'usa-modal': UsaModalElement;\n 'usa-sheet': UsaSheetElement;\n 'usa-menu': UsaMenuElement;\n 'usa-progress-ring': UsaProgressRingElement;\n 'usa-odometer': UsaOdometerElement;\n 'usa-skeleton-reveal': UsaSkeletonRevealElement;\n 'usa-star-rating': UsaStarRatingElement;\n 'usa-milestones': UsaMilestonesElement;\n 'usa-masonry-flow': UsaMasonryFlowElement;\n 'usa-compare': UsaCompareElement;\n 'usa-cube-gallery': UsaCubeGalleryElement;\n 'usa-dock': UsaDockElement;\n 'usa-nav-morph': UsaNavMorphElement;\n 'usa-menu-toggle': UsaMenuToggleElement;\n 'usa-tip': UsaTipElement;\n 'usa-stepper': UsaStepperElement;\n 'usa-pagination': UsaPaginationElement;\n 'usa-segmented': UsaSegmentedElement;\n 'usa-switch': UsaSwitchElement;\n 'usa-kanban': UsaKanbanElement;\n 'usa-swipe-deck': UsaSwipeDeckElement;\n 'usa-weather-card': UsaWeatherCardElement;\n 'usa-pull-cord': UsaPullCordElement;\n 'usa-date-picker': UsaDatePickerElement;\n 'usa-color-picker': UsaColorPickerElement;\n 'usa-file-drop': UsaFileDropElement;\n 'usa-keyframe-editor': UsaKeyframeEditorElement;\n }\n}\n","/**\n * 6.9 — effect marketplace manifest (`motionary/components/marketplace`).\n *\n * A third-party effect pack is an ES module that exports its effects (an\n * `EffectDefinition[]` as `effects` or `default`) plus a JSON manifest:\n *\n * ```json\n * { \"format\": \"motionary/effect-pack\", \"version\": 1,\n * \"name\": \"@acme/motion-snow\", \"packVersion\": \"1.2.0\",\n * \"description\": \"Snow and frost effects\", \"license\": \"MIT\",\n * \"author\": \"Acme\", \"entry\": \"./dist/index.js\", \"requires\": \">=6.9\",\n * \"effects\": [{ \"name\": \"frost\", \"kind\": \"background\", \"description\": \"…\",\n * \"defaults\": { \"speed\": 1 } }] }\n * ```\n *\n * `packManifest()` writes one from your effects, `validateManifest()` checks\n * one (format, semver, unique kebab-case names, known kinds, effects match\n * the module), and `loadEffectPack()` imports a pack (URL or module),\n * validates it and registers its effects — refusing names that already\n * exist unless `override`.\n */\nimport type { EffectDefinition } from '../fx/registry';\nimport { EFFECT_KINDS, registerEffect, hasEffect } from '../fx/registry';\n\nexport const EFFECT_PACK_FORMAT = 'motionary/effect-pack';\n\nexport interface EffectPackManifest {\n format: typeof EFFECT_PACK_FORMAT;\n version: 1;\n name: string;\n packVersion: string;\n description?: string;\n license?: string;\n author?: string;\n homepage?: string;\n entry?: string;\n requires?: string;\n keywords?: string[];\n effects: { name: string; kind: string; description?: string; defaults?: Record<string, unknown> }[];\n}\n\nconst SEMVER = /^\\d+\\.\\d+\\.\\d+(?:-[\\w.]+)?$/;\nconst PKG = /^(?:@[a-z0-9-~][a-z0-9-._~]*\\/)?[a-z0-9-~][a-z0-9-._~]*$/;\n\n/** Build a manifest from an effect pack. */\nexport function packManifest(name: string, packVersion: string, effects: EffectDefinition[], extra: Partial<Omit<EffectPackManifest, 'format' | 'version' | 'name' | 'packVersion' | 'effects'>> = {}): EffectPackManifest {\n return {\n format: EFFECT_PACK_FORMAT,\n version: 1,\n name,\n packVersion,\n ...extra,\n effects: effects.map((e) => ({ name: e.name, kind: e.kind, ...(e.description ? { description: e.description } : {}), ...(e.defaults ? { defaults: JSON.parse(JSON.stringify(e.defaults)) } : {}) })),\n };\n}\n\n/** Check a manifest (and optionally the module's effects against it). */\nexport function validateManifest(m: unknown, effects?: EffectDefinition[]): { ok: boolean; errors: string[] } {\n const errors: string[] = [];\n const x = m as Partial<EffectPackManifest> | null;\n if (!x || typeof x !== 'object') return { ok: false, errors: ['manifest must be an object'] };\n if (x.format !== EFFECT_PACK_FORMAT) errors.push(`format must be \"${EFFECT_PACK_FORMAT}\"`);\n if (x.version !== 1) errors.push('version must be 1');\n if (!x.name || !PKG.test(x.name)) errors.push('name must be an npm package name');\n if (!x.packVersion || !SEMVER.test(x.packVersion)) errors.push('packVersion must be semver (x.y.z)');\n if (!Array.isArray(x.effects) || !x.effects.length) errors.push('effects must be a non-empty array');\n const seen = new Set<string>();\n for (const e of x.effects || []) {\n if (!e || !/^[a-z][a-z0-9-]*$/.test(e.name || '')) errors.push(`invalid effect name \"${e?.name}\"`);\n else if (seen.has(e.name)) errors.push(`duplicate effect \"${e.name}\"`);\n else seen.add(e.name);\n if (!e || !(EFFECT_KINDS as readonly string[]).includes(e.kind)) errors.push(`effect \"${e?.name}\": unknown kind \"${e?.kind}\"`);\n }\n if (effects) {\n const names = new Set(effects.map((e) => e.name));\n for (const n of seen) if (!names.has(n)) errors.push(`effect \"${n}\" is in the manifest but not exported`);\n for (const n of names) if (!seen.has(n)) errors.push(`effect \"${n}\" is exported but missing from the manifest`);\n }\n return { ok: !errors.length, errors };\n}\n\n/**\n * Import an effect pack (a URL / specifier, or an already imported module\n * with `effects` / `default` and `manifest`), validate and register it.\n * Returns the registered effect names.\n */\nexport async function loadEffectPack(src: string | { effects?: EffectDefinition[]; default?: EffectDefinition[]; manifest?: EffectPackManifest }, opts: { manifest?: EffectPackManifest; override?: boolean } = {}): Promise<string[]> {\n const mod: any = typeof src === 'string' ? await import(/* @vite-ignore */ src) : src;\n const effects: EffectDefinition[] = mod.effects || mod.default || [];\n const manifest = opts.manifest || mod.manifest;\n const v = validateManifest(manifest, effects);\n if (!v.ok) throw new Error(`[motionary] invalid effect pack: ${v.errors.join('; ')}`);\n const clash = effects.filter((e) => hasEffect(e.name));\n if (clash.length && !opts.override) throw new Error(`[motionary] effect pack \"${manifest.name}\" would replace ${clash.map((e) => e.name).join(', ')} (pass { override: true })`);\n for (const e of effects) registerEffect(e, { override: !!opts.override });\n return effects.map((e) => e.name);\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 { deprecate } from '../base';\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 registerGpuPack(): void {\n registerEffects(GPU_FX);\n}\n\n/** @deprecated since 6.9 — use `registerGpuPack()` (removed in 7.0; `npx usa-codemod-7`). */\nexport function registerGpuEffects(): void {\n deprecate('registerGpuEffects', 'registerGpuEffects() is deprecated since 6.9 and removed in 7.0 — use registerGpuPack() (npx usa-codemod-7).');\n registerGpuPack();\n}\n","/**\n * 6.3 — Text effects 3.0 (`motionary/components/fx-text`), registered through\n * `registerEffect()`:\n *\n * - `liquid-text` (loop) — the text ripples like liquid (animated SVG\n * turbulence + displacement filter).\n * - `neon-write` (text) — letters flicker on one by one like a neon sign\n * being switched on, then keep a soft glow.\n * - `particle-text` (text) — particles fly in from around the element and\n * assemble into the glyphs, then hand over to the real text.\n * - `glitch-text` (text) — RGB-split slices jump sideways for a moment.\n * - `text-trail` (cursor) — the letters of a word fall off the pointer.\n * - `font-breathe` (loop) — a variable-font weight wave breathes through the text.\n * - `flip-chars` (text) — every character flips up in 3D, staggered.\n *\n * Splitting keeps a visually hidden copy for screen readers (the animated\n * characters are `aria-hidden`). Reduced motion: loops and the trail are\n * skipped, one-shot effects show the final state without movement.\n */\nimport type { EffectContext, EffectDefinition } from '../fx/registry';\nimport { deprecate } from '../base';\nimport { registerEffects } from '../fx/registry';\nimport { srText } from '../base';\nimport { fxLayer, spawn, rand, all } from '../effects/shared';\n\n/** Split `el`'s text into `aria-hidden` inline-block characters (idempotent). Returns them. */\nexport function splitChars(el: HTMLElement): HTMLElement[] {\n if (el.dataset.usaChars) return Array.from(el.querySelectorAll<HTMLElement>(':scope > .usa-ch'));\n const text = el.textContent || '';\n el.textContent = '';\n for (const ch of Array.from(text)) {\n const s = document.createElement('span');\n s.className = 'usa-ch';\n s.setAttribute('aria-hidden', 'true');\n s.style.cssText = 'display:inline-block;white-space:pre';\n s.textContent = ch;\n el.appendChild(s);\n }\n el.appendChild(srText(text.trim()));\n el.dataset.usaChars = '1';\n return Array.from(el.querySelectorAll<HTMLElement>(':scope > .usa-ch'));\n}\n\nconst raf = (fn: FrameRequestCallback): number => (typeof requestAnimationFrame === 'function' ? requestAnimationFrame(fn) : 0);\nconst caf = (h: number): void => {\n if (h && typeof cancelAnimationFrame === 'function') cancelAnimationFrame(h);\n};\nlet fid = 0;\n\nexport const TEXT3_FX: EffectDefinition[] = [\n {\n name: 'liquid-text',\n kind: 'loop',\n description: 'The text ripples like liquid: an animated SVG turbulence + displacement filter (`strength`, `speed`).',\n defaults: { strength: 7, speed: 1 },\n run: (el: HTMLElement, o: any) => {\n const id = `usa-liquid-${++fid}`;\n const ns = 'http://www.w3.org/2000/svg';\n const svg = document.createElementNS(ns, 'svg');\n svg.setAttribute('aria-hidden', 'true');\n svg.setAttribute('width', '0');\n svg.setAttribute('height', '0');\n svg.style.cssText = 'position:absolute;width:0;height:0;overflow:hidden';\n svg.innerHTML = `<filter id=\"${id}\" x=\"-10%\" y=\"-20%\" width=\"120%\" height=\"140%\"><feTurbulence type=\"fractalNoise\" baseFrequency=\"0.012 0.06\" numOctaves=\"2\" seed=\"3\" result=\"n\"/><feDisplacementMap in=\"SourceGraphic\" in2=\"n\" scale=\"${Number(o.strength) || 7}\" xChannelSelector=\"R\" yChannelSelector=\"G\"/></filter>`;\n document.body.appendChild(svg);\n const turb = svg.querySelector('feTurbulence');\n const prev = el.style.filter;\n el.style.filter = `url(#${id})`;\n let h = 0;\n const t0 = performance.now();\n const tick = (now: number) => {\n const t = ((now - t0) / 1000) * (Number(o.speed) || 1);\n turb?.setAttribute('baseFrequency', `${(0.012 + 0.004 * Math.sin(t * 1.3)).toFixed(4)} ${(0.06 + 0.02 * Math.cos(t)).toFixed(4)}`);\n h = raf(tick);\n };\n h = raf(tick);\n return () => {\n caf(h);\n el.style.filter = prev;\n svg.remove();\n };\n },\n },\n {\n name: 'neon-write',\n kind: 'text',\n description: 'Letters flicker on one by one like a neon sign being switched on, then keep a soft glow (`color`, `stagger`).',\n defaults: { color: '#ff4fd8', stagger: 70, duration: 520 },\n run: (el: HTMLElement, o: any, ctx: EffectContext) => {\n const glow = `0 0 4px #fff,0 0 10px ${o.color},0 0 22px ${o.color},0 0 42px ${o.color}`;\n el.style.textShadow = glow;\n el.style.color ||= '#fff';\n if (ctx.reduced) return;\n const cs = splitChars(el);\n return all(cs.map((c, i) => ctx.animate(c, [\n { opacity: 0.08, textShadow: 'none' },\n { opacity: 1, textShadow: glow, offset: 0.2 },\n { opacity: 0.2, textShadow: 'none', offset: 0.32 },\n { opacity: 1, textShadow: glow, offset: 0.46 },\n { opacity: 0.55, offset: 0.6 },\n { opacity: 1, textShadow: glow },\n ], { duration: o.duration, delay: i * o.stagger + rand(0, 60), easing: 'steps(6, end)', fill: 'backwards' })));\n },\n },\n {\n name: 'particle-text',\n kind: 'text',\n description: 'Particles fly in from around the element and assemble into the glyphs, then hand over to the real text (`gap` px between samples, `duration`, `colors`).',\n defaults: { gap: 3, duration: 1300, colors: ['#7c5cff', '#22d3ee', '#ff5c8a'], spread: 120 },\n reduced: 'skip',\n run: (el: HTMLElement, o: any) => {\n const cs = splitChars(el);\n const r = el.getBoundingClientRect();\n if (!r.width || !r.height) return;\n const pad = Number(o.spread) || 120;\n const W = Math.ceil(r.width + pad * 2);\n const H = Math.ceil(r.height + pad * 2);\n const canvas = document.createElement('canvas');\n canvas.setAttribute('aria-hidden', 'true');\n canvas.width = W;\n canvas.height = H;\n canvas.style.cssText = `position:absolute;left:${r.left - pad}px;top:${r.top - pad}px;width:${W}px;height:${H}px`;\n const g = canvas.getContext('2d');\n if (!g) return;\n // rasterise each character where the browser laid it out\n const cs0 = getComputedStyle(el);\n g.font = `${cs0.fontStyle} ${cs0.fontWeight} ${cs0.fontSize} ${cs0.fontFamily}`;\n g.textBaseline = 'middle';\n g.fillStyle = '#000';\n for (const c of cs) {\n const b = c.getBoundingClientRect();\n g.fillText(c.textContent || '', b.left - r.left + pad, b.top - r.top + pad + b.height / 2);\n }\n const img = g.getImageData(0, 0, W, H);\n const gap = Math.max(2, Math.round(Number(o.gap) || 3));\n const pts: { x: number; y: number; sx: number; sy: number; c: string; d: number }[] = [];\n for (let y = 0; y < H; y += gap) for (let x = 0; x < W; x += gap) if (img.data[(y * W + x) * 4 + 3] > 128) {\n const a = rand(0, Math.PI * 2);\n const rr = rand(pad * 0.6, pad * 1.4);\n pts.push({ x, y, sx: W / 2 + Math.cos(a) * (W / 2 + rr * 0.3), sy: H / 2 + Math.sin(a) * (H / 2 + rr * 0.3), c: o.colors[pts.length % o.colors.length], d: rand(0, 0.35) });\n }\n fxLayer().appendChild(canvas);\n cs.forEach((c) => (c.style.opacity = '0'));\n const t0 = performance.now();\n const dur = Number(o.duration) || 1300;\n return new Promise<void>((done) => {\n const finish = () => {\n canvas.remove();\n cs.forEach((c) => (c.style.opacity = ''));\n done();\n };\n const tick = (now: number) => {\n const k = (now - t0) / dur;\n g.clearRect(0, 0, W, H);\n for (const p of pts) {\n const e = Math.min(1, Math.max(0, (k - p.d) / (1 - p.d)));\n const q = 1 - Math.pow(1 - e, 3);\n g.globalAlpha = k > 1 ? Math.max(0, 1 - (k - 1) * 4) : 0.25 + 0.75 * q;\n g.fillStyle = p.c;\n g.fillRect(p.sx + (p.x - p.sx) * q, p.sy + (p.y - p.sy) * q, gap - 0.5, gap - 0.5);\n }\n if (k > 1) cs.forEach((c) => (c.style.opacity = String(Math.min(1, (k - 1) * 4))));\n if (k < 1.25) raf(tick);\n else finish();\n };\n if (!raf(tick)) finish();\n });\n },\n },\n {\n name: 'glitch-text',\n kind: 'text',\n description: 'RGB-split slices of the text jump sideways for a moment (`duration`, `colors` of the two channels).',\n defaults: { duration: 650, colors: ['#22d3ee', '#ff3d81'] },\n run: (el: HTMLElement, o: any, ctx: EffectContext) => {\n if (ctx.reduced) return ctx.animate(el, [{ opacity: 1 }, { opacity: 0.6 }, { opacity: 1 }], { duration: 200 });\n if (getComputedStyle(el).position === 'static') el.style.position = 'relative';\n const text = el.textContent || '';\n const steps = 8;\n const mk = (color: string, dir: number) => {\n const s = document.createElement('span');\n s.setAttribute('aria-hidden', 'true');\n s.textContent = text;\n s.style.cssText = `position:absolute;inset:0;color:${color};mix-blend-mode:screen;pointer-events:none;white-space:inherit`;\n el.appendChild(s);\n const frames: Keyframe[] = [];\n for (let i = 0; i <= steps; i++) {\n const top = Math.round(rand(0, 80));\n frames.push({ clipPath: `inset(${top}% 0 ${Math.max(0, 100 - top - rand(8, 30)).toFixed(0)}% 0)`, transform: `translateX(${(dir * rand(2, 9)).toFixed(1)}px)` });\n }\n frames.push({ clipPath: 'inset(50% 0 50% 0)', transform: 'none' });\n const a = ctx.animate(s, frames, { duration: o.duration, easing: `steps(${steps}, end)` });\n const rm = () => s.remove();\n if (a) a.finished.then(rm, rm);\n else rm();\n return a;\n };\n return all([\n mk(o.colors[0], -1),\n mk(o.colors[1], 1),\n ctx.animate(el, [{ transform: 'none' }, { transform: 'translate(-2px,1px) skewX(-4deg)' }, { transform: 'translate(2px,-1px)' }, { transform: 'skewX(3deg)' }, { transform: 'none' }], { duration: o.duration, easing: 'steps(5, end)' }),\n ]);\n },\n },\n {\n name: 'text-trail',\n kind: 'cursor',\n description: 'The letters of a word fall off the pointer as it moves over the element (persistent; `text`, `color`, `spacing` px).',\n defaults: { text: 'MOTIONARY', color: '#7c5cff', spacing: 22, size: 18 },\n run: (el: HTMLElement, o: any, ctx: EffectContext) => {\n const word = Array.from(String(o.text || '✦'));\n let i = 0;\n let lx = -1e4;\n let ly = -1e4;\n const move = (e: PointerEvent) => {\n if (Math.hypot(e.clientX - lx, e.clientY - ly) < o.spacing) return;\n lx = e.clientX;\n ly = e.clientY;\n const ch = word[i++ % word.length];\n spawn(e.clientX - o.size / 2, e.clientY - o.size / 2, `font:800 ${o.size}px/1 system-ui,sans-serif;color:${o.color};text-shadow:0 2px 8px rgba(0,0,0,.25)`, ctx, [\n { transform: 'translateY(0) rotate(0) scale(1)', opacity: 1 },\n { transform: `translateY(${rand(30, 60).toFixed(0)}px) rotate(${rand(-60, 60).toFixed(0)}deg) scale(.6)`, opacity: 0 },\n ], { duration: rand(700, 1000), easing: 'cubic-bezier(.3,.1,.7,1)' }, ch);\n };\n el.addEventListener('pointermove', move);\n return () => el.removeEventListener('pointermove', move);\n },\n },\n {\n name: 'font-breathe',\n kind: 'loop',\n description: 'A variable-font weight wave breathes through the text (`min` / `max` weight, `period` ms, `stagger`). Best with a variable font.',\n defaults: { min: 200, max: 900, period: 2400, stagger: 90 },\n run: (el: HTMLElement, o: any, ctx: EffectContext) => {\n const cs = splitChars(el);\n const anims = cs.map((c, i) => ctx.animate(c, [\n { fontWeight: o.min, fontVariationSettings: `'wght' ${o.min}` },\n { fontWeight: o.max, fontVariationSettings: `'wght' ${o.max}` },\n ], { duration: o.period / 2, delay: i * o.stagger, iterations: Infinity, direction: 'alternate', easing: 'ease-in-out' }));\n return () => anims.forEach((a) => a?.cancel());\n },\n },\n {\n name: 'flip-chars',\n kind: 'text',\n description: 'Every character flips up in 3D around its baseline, staggered (`stagger`, `duration`, `axis` x | y).',\n defaults: { stagger: 45, duration: 700, axis: 'x' },\n run: (el: HTMLElement, o: any, ctx: EffectContext) => {\n const cs = splitChars(el);\n el.style.perspective ||= '600px';\n const rot = o.axis === 'y' ? 'rotateY' : 'rotateX';\n return all(cs.map((c, i) => {\n c.style.transformOrigin = '50% 70% -0.4em';\n c.style.backfaceVisibility = 'hidden';\n return ctx.reduced\n ? ctx.animate(c, [{ opacity: 0 }, { opacity: 1 }], { duration: 200, delay: i * 10, fill: 'backwards' })\n : ctx.animate(c, [{ transform: `${rot}(-100deg)`, opacity: 0 }, { transform: `${rot}(12deg)`, opacity: 1, offset: 0.7 }, { transform: `${rot}(0)`, opacity: 1 }], { duration: o.duration, delay: i * o.stagger, easing: 'cubic-bezier(.2,.8,.3,1)', fill: 'backwards' });\n }));\n },\n },\n];\n\n/** Register the 6.3 text pack (idempotent). */\nexport function registerTextPack(): void {\n registerEffects(TEXT3_FX);\n}\n\n\n/** @deprecated since 6.9 — use `registerTextPack()` (removed in 7.0; `npx usa-codemod-7`). */\nexport function registerTextEffects3(): void {\n deprecate('registerTextEffects3', 'registerTextEffects3() is deprecated since 6.9 and removed in 7.0 — use registerTextPack() (npx usa-codemod-7).');\n registerTextPack();\n}\n","/**\n * 6.4 — Light & materials (`motionary/components/fx-light`), registered\n * through `registerEffect()`. Persistent effects (use `trigger=\"load\"`)\n * that return a cleanup:\n *\n * - `light-follow` (hover) — a soft point light + specular highlight that\n * follows the pointer over the surface.\n * - `refraction` (hover) — a glass lens that bends and magnifies what is\n * behind it as it follows the pointer (backdrop filter, chromatic rim).\n * - `brushed-metal` (card) — fine brushed lines with an anisotropic sheen\n * that turns with the pointer angle.\n * - `pearlescent` (card) — a nacre / holographic film whose hues shift with\n * the pointer position.\n * - `god-rays` (background) — volumetric light shafts from a source point\n * (Canvas 2D, additive).\n * - `pointer-shadow` (hover) — the pointer is the light: the element casts\n * a soft real-time shadow away from it.\n *\n * Reduced motion: surfaces stay lit from a fixed angle (no tracking),\n * `god-rays` draws one still frame.\n */\nimport type { EffectContext, EffectDefinition } from '../fx/registry';\nimport { deprecate } from '../base';\nimport { registerEffects } from '../fx/registry';\nimport { canvasBackground, hexRgb } from '../effects/generative';\nimport { overlay } from '../effects/shared';\n\n/** Track the pointer over `el` as 0–1 coordinates (`fn(x, y, inside)`); starts at (`x0`, `y0`). Returns a remover. */\nexport function trackPointer(el: HTMLElement, ctx: EffectContext, fn: (x: number, y: number, inside: boolean) => void, x0 = 0.3, y0 = 0.25): () => void {\n fn(x0, y0, false);\n if (ctx.reduced) return () => undefined;\n let raf = 0;\n let px = x0;\n let py = y0;\n let inside = false;\n const flush = () => {\n raf = 0;\n fn(px, py, inside);\n };\n const queue = () => {\n if (!raf) raf = typeof requestAnimationFrame === 'function' ? requestAnimationFrame(flush) : (flush(), 0);\n };\n const move = (e: PointerEvent) => {\n const r = el.getBoundingClientRect();\n px = r.width ? Math.min(1, Math.max(0, (e.clientX - r.left) / r.width)) : 0.5;\n py = r.height ? Math.min(1, Math.max(0, (e.clientY - r.top) / r.height)) : 0.5;\n inside = true;\n queue();\n };\n const leave = () => {\n inside = false;\n px = x0;\n py = y0;\n queue();\n };\n el.addEventListener('pointermove', move);\n el.addEventListener('pointerleave', leave);\n return () => {\n if (raf && typeof cancelAnimationFrame === 'function') cancelAnimationFrame(raf);\n el.removeEventListener('pointermove', move);\n el.removeEventListener('pointerleave', leave);\n };\n}\n\nconst rgba = (hex: string, a: number) => {\n const [r, g, b] = hexRgb(hex);\n return `rgba(${r},${g},${b},${a})`;\n};\n\nexport const LIGHT_FX: EffectDefinition[] = [\n {\n name: 'light-follow',\n kind: 'hover',\n reduced: 'run',\n description: 'A soft point light with a specular hot spot follows the pointer over the surface (persistent; `color`, `size` px, `intensity` 0–1).',\n defaults: { color: '#ffffff', size: 260, intensity: 0.55 },\n run: (el: HTMLElement, o: any, ctx: EffectContext) => {\n const [ov, rm] = overlay(el, 'mix-blend-mode:soft-light;transition:opacity .3s;z-index:1');\n const [spec, rm2] = overlay(el, 'mix-blend-mode:screen;z-index:1');\n const stop = trackPointer(el, ctx, (x, y, inside) => {\n const p = `${(x * 100).toFixed(1)}% ${(y * 100).toFixed(1)}%`;\n ov.style.background = `radial-gradient(${o.size}px circle at ${p}, ${rgba(o.color, o.intensity)}, transparent 70%), radial-gradient(${o.size * 2.4}px circle at ${p}, transparent 30%, rgba(0,0,0,${(o.intensity * 0.45).toFixed(2)}))`;\n spec.style.background = `radial-gradient(${Math.round(o.size / 5)}px circle at ${p}, ${rgba(o.color, inside ? o.intensity * 0.7 : o.intensity * 0.35)}, transparent 70%)`;\n el.style.setProperty('--usa-lx', x.toFixed(3));\n el.style.setProperty('--usa-ly', y.toFixed(3));\n });\n return () => {\n stop();\n rm();\n rm2();\n };\n },\n },\n {\n name: 'refraction',\n kind: 'hover',\n reduced: 'run',\n description: 'A glass lens bends and magnifies what is behind it while following the pointer (persistent; `size` px, `blur`, `rim` color). Uses backdrop-filter.',\n defaults: { size: 120, blur: 1.5, zoom: 1.12, rim: '#9be7ff' },\n run: (el: HTMLElement, o: any, ctx: EffectContext) => {\n if (getComputedStyle(el).position === 'static') el.style.position = 'relative';\n const lens = document.createElement('span');\n lens.setAttribute('aria-hidden', 'true');\n const s = Number(o.size) || 120;\n lens.style.cssText = `position:absolute;left:0;top:0;width:${s}px;height:${s}px;border-radius:50%;pointer-events:none;z-index:2;` +\n `-webkit-backdrop-filter:blur(${o.blur}px) saturate(1.6) contrast(1.08) brightness(1.08);backdrop-filter:blur(${o.blur}px) saturate(1.6) contrast(1.08) brightness(1.08);` +\n `box-shadow:inset 0 0 0 1px rgba(255,255,255,.55),inset 6px 8px 14px rgba(255,255,255,.45),inset -8px -10px 18px ${rgba(o.rim, 0.45)},0 10px 30px -8px rgba(0,0,0,.35);` +\n `background:radial-gradient(circle at 32% 28%,rgba(255,255,255,.55),rgba(255,255,255,0) 32%),radial-gradient(circle at 70% 78%,${rgba(o.rim, 0.25)},transparent 45%);transform-origin:50% 50%;will-change:transform;transition:opacity .25s`;\n el.appendChild(lens);\n const stop = trackPointer(el, ctx, (x, y, inside) => {\n const w = el.clientWidth;\n const h = el.clientHeight;\n lens.style.transform = `translate(${(x * w - s / 2).toFixed(1)}px,${(y * h - s / 2).toFixed(1)}px) scale(${inside ? o.zoom : 1})`;\n lens.style.opacity = inside || ctx.reduced ? '1' : '.85';\n }, 0.5, 0.5);\n return () => {\n stop();\n lens.remove();\n };\n },\n },\n {\n name: 'brushed-metal',\n kind: 'card',\n reduced: 'run',\n description: 'Fine brushed-metal lines with an anisotropic sheen that turns with the pointer angle (persistent; `tint`, `lines` px).',\n defaults: { tint: '#cbd5e1', lines: 2 },\n run: (el: HTMLElement, o: any, ctx: EffectContext) => {\n const l = Math.max(1, Number(o.lines) || 2);\n const [grain, rm] = overlay(el, `z-index:0;opacity:.55;mix-blend-mode:overlay;background:repeating-linear-gradient(90deg,rgba(255,255,255,.18) 0 1px,rgba(0,0,0,.12) 1px ${l}px,rgba(255,255,255,.06) ${l}px ${l * 2 + 1}px),linear-gradient(180deg,${rgba(o.tint, 0.9)},${rgba(o.tint, 0.55)})`);\n const [sheen, rm2] = overlay(el, 'z-index:1;mix-blend-mode:soft-light');\n const stop = trackPointer(el, ctx, (x, y) => {\n const ang = Math.atan2(y - 0.5, x - 0.5) * (180 / Math.PI) + 90;\n sheen.style.background = `conic-gradient(from ${ang.toFixed(1)}deg at ${(x * 100).toFixed(1)}% ${(y * 100).toFixed(1)}%, rgba(255,255,255,.75), rgba(0,0,0,.35) 25%, rgba(255,255,255,.6) 50%, rgba(0,0,0,.35) 75%, rgba(255,255,255,.75))`;\n });\n void grain;\n return () => {\n stop();\n rm();\n rm2();\n };\n },\n },\n {\n name: 'pearlescent',\n kind: 'card',\n reduced: 'run',\n description: 'A nacre / holographic film whose hues shift with the pointer position (persistent; `strength` 0–1).',\n defaults: { strength: 0.6 },\n run: (el: HTMLElement, o: any, ctx: EffectContext) => {\n const [film, rm] = overlay(el, `z-index:1;mix-blend-mode:color-dodge;opacity:${o.strength}`);\n const [gloss, rm2] = overlay(el, 'z-index:1;mix-blend-mode:soft-light');\n const stop = trackPointer(el, ctx, (x, y) => {\n const hue = Math.round((x * 0.7 + y * 0.3) * 360);\n film.style.background = `linear-gradient(${Math.round(115 + x * 50)}deg, hsla(${hue},90%,70%,.55), hsla(${hue + 60},90%,75%,.35) 25%, hsla(${hue + 140},85%,70%,.5) 50%, hsla(${hue + 220},90%,75%,.35) 75%, hsla(${hue + 300},90%,70%,.55))`;\n film.style.backgroundSize = '220% 220%';\n film.style.backgroundPosition = `${(x * 100).toFixed(1)}% ${(y * 100).toFixed(1)}%`;\n gloss.style.background = `radial-gradient(80% 60% at ${(x * 100).toFixed(1)}% ${(y * 100).toFixed(1)}%, rgba(255,255,255,.65), transparent 60%)`;\n });\n return () => {\n stop();\n rm();\n rm2();\n };\n },\n },\n {\n name: 'god-rays',\n kind: 'background',\n reduced: 'run',\n description: 'Volumetric light shafts fan out from a source point and slowly sweep (Canvas 2D, additive; `color`, `rays`, `x` / `y` source 0–1).',\n defaults: { color: '#ffe7a3', background: '#0b1020', rays: 14, x: 0.5, y: -0.1, speed: 1, quality: 1 },\n run: (el: HTMLElement, o: any, ctx: EffectContext) => {\n const stop = canvasBackground(el, ctx, {\n init: () => ({ seeds: Array.from({ length: Math.max(3, o.rays | 0) }, (_, i) => ({ a: (i / o.rays) * 1.6 - 0.8 + Math.random() * 0.08, w: 0.03 + Math.random() * 0.06, p: Math.random() * 6.28 })) }),\n draw: ({ ctx: g, w, h, t, state }) => {\n g.globalCompositeOperation = 'source-over';\n g.fillStyle = o.background;\n g.fillRect(0, 0, w, h);\n const sx = o.x * w;\n const sy = o.y * h;\n const len = Math.hypot(w, h) * 1.2;\n const [r, gg, b] = hexRgb(o.color);\n g.globalCompositeOperation = 'lighter';\n for (const s of state.seeds) {\n const a = Math.PI / 2 + s.a + Math.sin(t * 0.25 * o.speed + s.p) * 0.08;\n const alpha = 0.1 + 0.08 * Math.sin(t * 0.8 * o.speed + s.p * 2);\n const grad = g.createLinearGradient(sx, sy, sx + Math.cos(a) * len, sy + Math.sin(a) * len);\n grad.addColorStop(0, `rgba(${r},${gg},${b},${(alpha * 2).toFixed(3)})`);\n grad.addColorStop(1, `rgba(${r},${gg},${b},0)`);\n g.fillStyle = grad;\n g.beginPath();\n g.moveTo(sx, sy);\n g.lineTo(sx + Math.cos(a - s.w) * len, sy + Math.sin(a - s.w) * len);\n g.lineTo(sx + Math.cos(a + s.w) * len, sy + Math.sin(a + s.w) * len);\n g.closePath();\n g.fill();\n }\n const glow = g.createRadialGradient(sx, sy, 0, sx, sy, Math.max(w, h) * 0.45);\n glow.addColorStop(0, `rgba(${r},${gg},${b},.45)`);\n glow.addColorStop(1, `rgba(${r},${gg},${b},0)`);\n g.fillStyle = glow;\n g.fillRect(0, 0, w, h);\n g.globalCompositeOperation = 'source-over';\n },\n }, o);\n ctx.onCleanup(stop);\n return stop;\n },\n },\n {\n name: 'pointer-shadow',\n kind: 'hover',\n reduced: 'run',\n description: 'The pointer is the light: the element casts a soft real-time shadow away from it (persistent; `depth` px, `blur`, `color`).',\n defaults: { depth: 22, blur: 18, color: 'rgba(15,23,42,.38)' },\n run: (el: HTMLElement, o: any, ctx: EffectContext) => {\n const prev = el.style.filter;\n const stop = trackPointer(el, ctx, (x, y, inside) => {\n const dx = (0.5 - x) * 2 * o.depth;\n const dy = (0.5 - y) * 2 * o.depth;\n const k = inside ? 1 : 0.6;\n el.style.filter = `drop-shadow(${(dx * k).toFixed(1)}px ${(dy * k + 4).toFixed(1)}px ${o.blur}px ${o.color})`;\n }, 0.35, 0.2);\n return () => {\n stop();\n el.style.filter = prev;\n };\n },\n },\n];\n\n/** Register the 6.4 light & materials pack (idempotent). */\nexport function registerLightPack(): void {\n registerEffects(LIGHT_FX);\n}\n\n/** @deprecated since 6.9 — use `registerLightPack()` (removed in 7.0; `npx usa-codemod-7`). */\nexport function registerLightEffects(): void {\n deprecate('registerLightEffects', 'registerLightEffects() is deprecated since 6.9 and removed in 7.0 — use registerLightPack() (npx usa-codemod-7).');\n registerLightPack();\n}\n","/**\n * 6.5 — 3D scene cards (`motionary/components/fx-3d`), registered through\n * `registerEffect()`:\n *\n * - `depth-stack` (card, persistent) — the children (or `[data-depth]`\n * layers) separate in Z and parallax against each other as the card tilts\n * toward the pointer.\n * - `product-spin` (card, persistent) — a 360° product viewer: drag to turn\n * the element in 3D with inertia, idles with a slow turntable spin.\n * - `card-flip-3d` (click) — a thick card flips to its back face (second\n * child) with an edge that shows its depth.\n * - `origami` (enter) — the element unfolds panel by panel like folded paper.\n * - `orbit-camera` (scroll, persistent) — while the element scrolls through\n * the viewport the camera orbits its 3D children.\n *\n * Reduced motion: no tilt, spin, orbit or fold; the flip swaps faces with a\n * crossfade.\n */\nimport type { EffectContext, EffectDefinition } from '../fx/registry';\nimport { deprecate } from '../base';\nimport { registerEffects } from '../fx/registry';\nimport { all } from '../effects/shared';\nimport { trackPointer } from './light';\n\nconst layers = (el: HTMLElement): HTMLElement[] => {\n const marked = Array.from(el.querySelectorAll<HTMLElement>('[data-depth]'));\n return marked.length ? marked : (Array.from(el.children) as HTMLElement[]);\n};\n\nconst raf = (f: FrameRequestCallback): number => (typeof requestAnimationFrame === 'function' ? requestAnimationFrame(f) : 0);\nconst caf = (h: number): void => {\n if (h && typeof cancelAnimationFrame === 'function') cancelAnimationFrame(h);\n};\n\nexport const DEPTH3_FX: EffectDefinition[] = [\n {\n name: 'depth-stack',\n kind: 'card',\n reduced: 'run',\n description: 'The children (or `[data-depth]` layers) separate in Z and parallax as the card tilts toward the pointer (persistent; `tilt` deg, `depth` px between layers).',\n defaults: { tilt: 14, depth: 28 },\n run: (el: HTMLElement, o: any, ctx: EffectContext) => {\n const prev = [el.style.transform, el.style.transformStyle, el.style.transition];\n el.style.transformStyle = 'preserve-3d';\n el.style.transition = 'transform .25s ease-out';\n const ls = layers(el);\n const saved = ls.map((l) => [l.style.transform, l.style.transition] as const);\n ls.forEach((l) => (l.style.transition = 'transform .3s ease-out'));\n const stop = trackPointer(el, ctx, (x, y, inside) => {\n const rx = (0.5 - y) * 2 * o.tilt;\n const ry = (x - 0.5) * 2 * o.tilt;\n el.style.transform = ctx.reduced ? '' : inside ? `perspective(800px) rotateX(${rx.toFixed(2)}deg) rotateY(${ry.toFixed(2)}deg)` : 'perspective(800px) rotateX(6deg) rotateY(-8deg)';\n ls.forEach((l, i) => {\n const d = ctx.reduced ? 0 : Number(l.dataset.depth || i + 1) * o.depth * (inside ? 1 : 0.5);\n l.style.transform = `translateZ(${d.toFixed(1)}px)`;\n });\n }, 0.5, 0.5);\n return () => {\n stop();\n [el.style.transform, el.style.transformStyle, el.style.transition] = prev;\n ls.forEach((l, i) => ([l.style.transform, l.style.transition] = saved[i]));\n };\n },\n },\n {\n name: 'product-spin',\n kind: 'card',\n description: 'A 360° product viewer: drag to turn the element in 3D with inertia; idles with a slow turntable spin (persistent; `idle` deg/s, `friction`, `tilt`).',\n defaults: { idle: 18, friction: 0.94, tilt: -8 },\n run: (el: HTMLElement, o: any, ctx: EffectContext) => {\n const prev = [el.style.transform, el.style.touchAction, el.style.cursor];\n el.style.touchAction = 'pan-y';\n el.style.cursor = 'grab';\n let a = 0;\n let v = 0;\n let drag = false;\n let lx = 0;\n let h = 0;\n let last = performance.now();\n const paint = () => (el.style.transform = `perspective(900px) rotateX(${o.tilt}deg) rotateY(${a.toFixed(2)}deg)`);\n paint();\n const tick = (now: number) => {\n const dt = Math.min(64, now - last) / 1000;\n last = now;\n if (!drag) {\n v *= o.friction;\n a += v * dt + (Math.abs(v) < 4 ? o.idle * dt : 0);\n }\n paint();\n h = raf(tick);\n };\n h = raf(tick);\n const down = (e: PointerEvent) => {\n drag = true;\n lx = e.clientX;\n v = 0;\n el.style.cursor = 'grabbing';\n el.setPointerCapture?.(e.pointerId);\n };\n const move = (e: PointerEvent) => {\n if (!drag) return;\n const dx = e.clientX - lx;\n lx = e.clientX;\n a += dx * 0.6;\n v = dx * 36;\n };\n const up = () => {\n drag = false;\n el.style.cursor = 'grab';\n };\n el.addEventListener('pointerdown', down);\n el.addEventListener('pointermove', move);\n el.addEventListener('pointerup', up);\n el.addEventListener('pointercancel', up);\n return () => {\n caf(h);\n el.removeEventListener('pointerdown', down);\n el.removeEventListener('pointermove', move);\n el.removeEventListener('pointerup', up);\n el.removeEventListener('pointercancel', up);\n [el.style.transform, el.style.touchAction, el.style.cursor] = prev;\n };\n },\n },\n {\n name: 'card-flip-3d',\n kind: 'click',\n description: 'A thick card flips to its back face (second child) and back, showing its edge (`duration`, `axis` y | x). The faces swap `aria-hidden`.',\n defaults: { duration: 800, axis: 'y', thickness: 6 },\n run: (el: HTMLElement, o: any, ctx: EffectContext) => {\n const [front, back] = Array.from(el.children) as HTMLElement[];\n if (!front || !back) return null;\n const R = o.axis === 'x' ? 'rotateX' : 'rotateY';\n if (!el.dataset.usaFlip) {\n el.dataset.usaFlip = 'front';\n el.style.display = 'grid';\n el.style.transformStyle = 'preserve-3d';\n for (const f of [front, back]) {\n f.style.gridArea = '1 / 1';\n f.style.backfaceVisibility = 'hidden';\n }\n back.setAttribute('aria-hidden', 'true');\n back.style.transform = `${R}(180deg)`;\n }\n const toBack = el.dataset.usaFlip === 'front';\n el.dataset.usaFlip = toBack ? 'back' : 'front';\n front.setAttribute('aria-hidden', String(toBack));\n back.setAttribute('aria-hidden', String(!toBack));\n const from = toBack ? 0 : 180;\n const to = toBack ? 180 : 0;\n el.style.transform = `perspective(1000px) ${R}(${to}deg)`;\n if (ctx.reduced) return ctx.animate(toBack ? back : front, [{ opacity: 0 }, { opacity: 1 }], { duration: 200 });\n return ctx.animate(el, [\n { transform: `perspective(1000px) ${R}(${from}deg) scale(1)` },\n { transform: `perspective(1000px) ${R}(${(from + to) / 2}deg) scale(1.08) translateZ(${o.thickness * 4}px)`, offset: 0.5 },\n { transform: `perspective(1000px) ${R}(${to}deg) scale(1)` },\n ], { duration: o.duration, easing: 'cubic-bezier(.45,.05,.25,1)' });\n },\n },\n {\n name: 'origami',\n kind: 'enter',\n description: 'The element unfolds panel by panel like folded paper (`panels`, `duration` per fold). Uses clipped copies during the fold.',\n defaults: { panels: 4, duration: 420 },\n reduced: 'skip',\n run: (el: HTMLElement, o: any, ctx: EffectContext) => {\n if (el.dataset.usaOrigami) return null;\n el.dataset.usaOrigami = '1';\n const n = Math.max(2, Math.min(8, Math.round(o.panels)));\n if (getComputedStyle(el).position === 'static') el.style.position = 'relative';\n const prevVis = el.style.visibility;\n const wrap = document.createElement('div');\n wrap.setAttribute('aria-hidden', 'true');\n wrap.style.cssText = 'position:absolute;inset:0;pointer-events:none;perspective:900px;visibility:visible';\n const anims: (Animation | null)[] = [];\n for (let i = 0; i < n; i++) {\n const slice = el.cloneNode(true) as HTMLElement;\n slice.removeAttribute('id');\n slice.querySelectorAll('[id]').forEach((x) => x.removeAttribute('id'));\n const top = (i / n) * 100;\n const bottom = 100 - ((i + 1) / n) * 100;\n slice.style.cssText += `;position:absolute;inset:0;margin:0;width:100%;height:100%;box-sizing:border-box;clip-path:inset(${top}% 0 ${bottom}% 0);transform-origin:50% ${top}%;visibility:visible`;\n wrap.appendChild(slice);\n const dir = i % 2 ? 1 : -1;\n anims.push(ctx.animate(slice, [\n { transform: `rotateX(${dir * 92}deg)`, filter: 'brightness(.55)', opacity: 0 },\n { opacity: 1, offset: 0.15 },\n { transform: 'rotateX(0)', filter: 'brightness(1)', opacity: 1 },\n ], { duration: o.duration, delay: i * o.duration * 0.55, easing: 'cubic-bezier(.3,.7,.3,1)', fill: 'backwards' }));\n }\n el.style.visibility = 'hidden';\n el.appendChild(wrap);\n const done = () => {\n wrap.remove();\n el.style.visibility = prevVis;\n delete el.dataset.usaOrigami;\n };\n return all(anims).then(done, done);\n },\n },\n {\n name: 'orbit-camera',\n kind: 'scroll',\n description: 'While the element scrolls through the viewport the camera orbits its 3D children (persistent; `range` deg of orbit, `tilt`, `depth` px between layers).',\n defaults: { range: 70, tilt: 10, depth: 60 },\n run: (el: HTMLElement, o: any, ctx: EffectContext) => {\n const prev = [el.style.transform, el.style.transformStyle];\n const ls = layers(el);\n el.style.transformStyle = 'preserve-3d';\n if (!ctx.reduced) ls.forEach((l, i) => (l.style.transform = `translateZ(${((i - (ls.length - 1) / 2) * o.depth).toFixed(0)}px)`));\n let h = 0;\n const paint = () => {\n h = 0;\n const r = el.getBoundingClientRect();\n const vh = window.innerHeight || 800;\n const p = Math.min(1, Math.max(0, (vh - r.top) / (vh + r.height)));\n el.style.setProperty('--usa-orbit', p.toFixed(3));\n if (!ctx.reduced) el.style.transform = `perspective(1000px) rotateX(${o.tilt}deg) rotateY(${((p - 0.5) * o.range).toFixed(2)}deg)`;\n };\n paint();\n const on = () => {\n if (!h) h = raf(paint);\n };\n if (!ctx.reduced) {\n window.addEventListener('scroll', on, { passive: true });\n window.addEventListener('resize', on);\n }\n return () => {\n caf(h);\n window.removeEventListener('scroll', on);\n window.removeEventListener('resize', on);\n [el.style.transform, el.style.transformStyle] = prev;\n ls.forEach((l) => (l.style.transform = ''));\n };\n },\n },\n];\n\n/** Register the 6.5 3D pack (idempotent). */\nexport function register3dPack(): void {\n registerEffects(DEPTH3_FX);\n}\n\n/** @deprecated since 6.9 — use `register3dPack()` (removed in 7.0; `npx usa-codemod-7`). */\nexport function register3dEffects(): void {\n deprecate('register3dEffects', 'register3dEffects() is deprecated since 6.9 and removed in 7.0 — use register3dPack() (npx usa-codemod-7).');\n register3dPack();\n}\n","/**\n * 6.6 — Morph & SVG 2.0 (`motionary/components/fx-morph`), registered\n * through `registerEffect()`:\n *\n * - `path-morph` (loop) — an SVG `<path>` flows between shapes (`paths`, any\n * number of `d` strings): both shapes are resampled to the same number of\n * points, so paths with different commands still morph smoothly.\n * - `blob-button` (hover, persistent) — a liquid blob behind the element\n * wobbles and bulges toward the pointer.\n * - `stroke-draw` (enter) — every stroke in an inline SVG draws itself,\n * staggered, then the fills fade in.\n * - `noise-reveal` (enter) — the element condenses out of SVG turbulence\n * (displacement + blur) — an SVG-filter transition.\n * - `icon-swap` (click) — cycles through the element's child icons with a\n * gooey morph (blur + scale + rotate crossfade).\n *\n * Reduced motion: no loops / wobble; enter effects and swaps fade.\n */\nimport type { EffectContext, EffectDefinition } from '../fx/registry';\nimport { deprecate } from '../base';\nimport { registerEffects } from '../fx/registry';\nimport { all } from '../effects/shared';\n\nconst NS = 'http://www.w3.org/2000/svg';\nconst raf = (f: FrameRequestCallback): number => (typeof requestAnimationFrame === 'function' ? requestAnimationFrame(f) : 0);\nconst caf = (h: number): void => {\n if (h && typeof cancelAnimationFrame === 'function') cancelAnimationFrame(h);\n};\n\n/** Sample `d` into `n` points (needs SVG geometry support; `null` without it). */\nexport function samplePath(d: string, n = 64): [number, number][] | null {\n const p = document.createElementNS(NS, 'path') as SVGPathElement;\n p.setAttribute('d', d);\n const svg = document.createElementNS(NS, 'svg');\n svg.setAttribute('aria-hidden', 'true');\n svg.style.cssText = 'position:absolute;width:0;height:0;overflow:hidden';\n svg.appendChild(p);\n document.body.appendChild(svg);\n try {\n if (typeof p.getTotalLength !== 'function') return null;\n const L = p.getTotalLength();\n if (!L) return null;\n const out: [number, number][] = [];\n for (let i = 0; i < n; i++) {\n const pt = p.getPointAtLength((i / n) * L);\n out.push([pt.x, pt.y]);\n }\n return out;\n } catch {\n return null;\n } finally {\n svg.remove();\n }\n}\n\n/** Points → closed path `d`. */\nexport const pointsToPath = (pts: [number, number][]): string => (pts.length ? `M${pts.map(([x, y]) => `${x.toFixed(2)} ${y.toFixed(2)}`).join('L')}Z` : '');\n\n/** Rotate `b` so its start point is the one closest to `a[0]` (less twisting). */\nfunction align(a: [number, number][], b: [number, number][]): [number, number][] {\n let best = 0;\n let bd = Infinity;\n for (let i = 0; i < b.length; i++) {\n const d = (b[i][0] - a[0][0]) ** 2 + (b[i][1] - a[0][1]) ** 2;\n if (d < bd) {\n bd = d;\n best = i;\n }\n }\n return b.slice(best).concat(b.slice(0, best));\n}\n\nconst ease = (t: number) => (t < 0.5 ? 4 * t * t * t : 1 - Math.pow(-2 * t + 2, 3) / 2);\n\nexport const MORPH2_FX: EffectDefinition[] = [\n {\n name: 'path-morph',\n kind: 'loop',\n description: 'An SVG `<path>` flows between shapes (`paths`: `d` strings; `duration` per shape, `hold` ms). Shapes are resampled, so any two paths morph.',\n defaults: { paths: [] as string[], duration: 1200, hold: 600, points: 72 },\n run: (el: HTMLElement, o: any) => {\n const path = ((el as Element).localName === 'path' ? el : el.querySelector('path')) as unknown as SVGPathElement | null;\n if (!path) return;\n const ds: string[] = [path.getAttribute('d') || '', ...(o.paths || [])].filter(Boolean);\n const shapes = ds.map((d) => samplePath(d, o.points)).filter(Boolean) as [number, number][][];\n if (shapes.length < 2) return;\n for (let i = 1; i < shapes.length; i++) shapes[i] = align(shapes[i - 1], shapes[i]);\n const orig = path.getAttribute('d');\n let i = 0;\n let t0 = performance.now();\n let h = 0;\n const tick = (now: number) => {\n const a = shapes[i % shapes.length];\n const b = shapes[(i + 1) % shapes.length];\n const k = Math.min(1, Math.max(0, (now - t0) / o.duration));\n const e = ease(k);\n path.setAttribute('d', pointsToPath(a.map(([x, y], j) => [x + (b[j][0] - x) * e, y + (b[j][1] - y) * e])));\n if (now - t0 > o.duration + o.hold) {\n i++;\n t0 = now;\n }\n h = raf(tick);\n };\n h = raf(tick);\n return () => {\n caf(h);\n if (orig !== null) path.setAttribute('d', orig);\n };\n },\n },\n {\n name: 'blob-button',\n kind: 'hover',\n reduced: 'run',\n description: 'A liquid blob behind the element wobbles and bulges toward the pointer (persistent; `color`, `wobble` 0–1, `bulge` px).',\n defaults: { color: '#7c5cff', wobble: 0.5, bulge: 10, points: 10 },\n run: (el: HTMLElement, o: any, ctx: EffectContext) => {\n if (getComputedStyle(el).position === 'static') el.style.position = 'relative';\n const prevZ = el.style.isolation;\n el.style.isolation = 'isolate';\n const svg = document.createElementNS(NS, 'svg');\n svg.setAttribute('aria-hidden', 'true');\n svg.setAttribute('width', '100%');\n svg.setAttribute('height', '100%');\n svg.style.cssText = 'position:absolute;inset:-14px;width:calc(100% + 28px);height:calc(100% + 28px);z-index:-1;pointer-events:none;overflow:visible';\n const path = document.createElementNS(NS, 'path');\n path.setAttribute('fill', o.color);\n svg.appendChild(path);\n el.prepend(svg);\n const n = Math.max(6, o.points | 0);\n let px = 0.5;\n let py = 0.5;\n let hover = 0;\n let target = 0;\n let h = 0;\n const t0 = performance.now();\n const draw = (now: number) => {\n const w = el.offsetWidth + 28 || 128;\n const hh = el.offsetHeight + 28 || 72;\n const t = ctx.reduced ? 0 : (now - t0) / 1000;\n hover += (target - hover) * 0.12;\n const pts: [number, number][] = [];\n for (let i = 0; i < n; i++) {\n const a = (i / n) * Math.PI * 2;\n const cx = Math.cos(a);\n const cy = Math.sin(a);\n const toward = Math.max(0, cx * (px - 0.5) * 2 + cy * (py - 0.5) * 2);\n const r = 1 + (ctx.reduced ? 0 : o.wobble * 0.06 * Math.sin(t * 2.2 + i * 1.7)) + (toward * o.bulge * hover) / Math.min(w, hh);\n pts.push([w / 2 + cx * (w / 2 - 12) * r, hh / 2 + cy * (hh / 2 - 12) * r]);\n }\n // smooth closed curve through the points (Catmull-Rom → cubic Bézier)\n let d = `M${pts[0][0].toFixed(1)} ${pts[0][1].toFixed(1)}`;\n for (let i = 0; i < n; i++) {\n const p0 = pts[(i - 1 + n) % n];\n const p1 = pts[i];\n const p2 = pts[(i + 1) % n];\n const p3 = pts[(i + 2) % n];\n d += `C${(p1[0] + (p2[0] - p0[0]) / 6).toFixed(1)} ${(p1[1] + (p2[1] - p0[1]) / 6).toFixed(1)} ${(p2[0] - (p3[0] - p1[0]) / 6).toFixed(1)} ${(p2[1] - (p3[1] - p1[1]) / 6).toFixed(1)} ${p2[0].toFixed(1)} ${p2[1].toFixed(1)}`;\n }\n path.setAttribute('d', d + 'Z');\n h = !ctx.reduced && (target || Math.abs(hover) > 0.01 || o.wobble) ? raf(draw) : 0;\n };\n const kick = () => {\n if (!h) h = raf(draw);\n };\n const move = (e: PointerEvent) => {\n const r = el.getBoundingClientRect();\n px = r.width ? (e.clientX - r.left) / r.width : 0.5;\n py = r.height ? (e.clientY - r.top) / r.height : 0.5;\n target = 1;\n kick();\n };\n const leave = () => {\n target = 0;\n kick();\n };\n draw(t0);\n el.addEventListener('pointermove', move);\n el.addEventListener('pointerleave', leave);\n return () => {\n caf(h);\n el.removeEventListener('pointermove', move);\n el.removeEventListener('pointerleave', leave);\n svg.remove();\n el.style.isolation = prevZ;\n };\n },\n },\n {\n name: 'stroke-draw',\n kind: 'enter',\n description: 'Every stroke of an inline SVG draws itself, staggered, then the fills fade in (`duration`, `stagger`).',\n defaults: { duration: 1200, stagger: 120 },\n run: (el: HTMLElement, o: any, ctx: EffectContext) => {\n const shapes = Array.from(el.querySelectorAll<SVGGeometryElement>('path, line, polyline, polygon, circle, ellipse, rect'));\n return all(shapes.map((s, i) => {\n let L = 0;\n try {\n L = typeof s.getTotalLength === 'function' ? s.getTotalLength() : 0;\n } catch {\n L = 0;\n }\n if (ctx.reduced || !L) return ctx.animate(s, [{ opacity: 0 }, { opacity: 1 }], { duration: 300, delay: i * 40, fill: 'backwards' });\n const fill = getComputedStyle(s).fillOpacity || '1';\n return ctx.animate(s, [\n { strokeDasharray: `${L}`, strokeDashoffset: `${L}`, fillOpacity: 0 },\n { strokeDasharray: `${L}`, strokeDashoffset: '0', fillOpacity: 0, offset: 0.75 },\n { strokeDasharray: `${L}`, strokeDashoffset: '0', fillOpacity: fill },\n ], { duration: o.duration, delay: i * o.stagger, easing: 'ease-in-out', fill: 'backwards' });\n }));\n },\n },\n {\n name: 'noise-reveal',\n kind: 'enter',\n description: 'The element condenses out of SVG turbulence — displacement and blur settle to zero (`duration`, `strength`). An SVG-filter transition.',\n defaults: { duration: 1100, strength: 60 },\n run: (el: HTMLElement, o: any, ctx: EffectContext) => {\n if (ctx.reduced) return ctx.animate(el, [{ opacity: 0 }, { opacity: 1 }], { duration: 300 });\n const id = `usa-noise-${Math.random().toString(36).slice(2, 8)}`;\n const svg = document.createElementNS(NS, 'svg');\n svg.setAttribute('aria-hidden', 'true');\n svg.setAttribute('width', '0');\n svg.setAttribute('height', '0');\n svg.style.cssText = 'position:absolute;width:0;height:0;overflow:hidden';\n svg.innerHTML = `<filter id=\"${id}\" x=\"-20%\" y=\"-20%\" width=\"140%\" height=\"140%\"><feTurbulence type=\"fractalNoise\" baseFrequency=\"0.035\" numOctaves=\"2\" result=\"n\"/><feDisplacementMap in=\"SourceGraphic\" in2=\"n\" scale=\"${o.strength}\" xChannelSelector=\"R\" yChannelSelector=\"G\"/><feGaussianBlur stdDeviation=\"0\"/></filter>`;\n document.body.appendChild(svg);\n const disp = svg.querySelector('feDisplacementMap');\n const blur = svg.querySelector('feGaussianBlur');\n const prev = el.style.filter;\n el.style.filter = `url(#${id})`;\n const fade = ctx.animate(el, [{ opacity: 0 }, { opacity: 1, offset: 0.4 }, { opacity: 1 }], { duration: o.duration, easing: 'ease-out' });\n const t0 = performance.now();\n return new Promise<void>((done) => {\n const end = () => {\n el.style.filter = prev;\n svg.remove();\n done();\n };\n const tick = (now: number) => {\n const k = Math.min(1, (now - t0) / o.duration);\n const e = 1 - Math.pow(1 - k, 3);\n disp?.setAttribute('scale', ((1 - e) * o.strength).toFixed(2));\n blur?.setAttribute('stdDeviation', ((1 - e) * 4).toFixed(2));\n if (k < 1) raf(tick);\n else end();\n };\n if (!raf(tick)) (fade ? fade.finished.then(end, end) : end());\n });\n },\n },\n {\n name: 'icon-swap',\n kind: 'click',\n description: 'Cycles through the element\\'s child icons with a gooey morph — blur, scale and rotate crossfade (`duration`). The visible icon is the only one not `aria-hidden`.',\n defaults: { duration: 420 },\n run: (el: HTMLElement, o: any, ctx: EffectContext) => {\n const icons = Array.from(el.children) as HTMLElement[];\n if (icons.length < 2) return null;\n if (!el.dataset.usaSwap) {\n el.dataset.usaSwap = '0';\n el.style.display = el.style.display || 'inline-grid';\n icons.forEach((ic, i) => {\n ic.style.gridArea = '1 / 1';\n ic.style.opacity = i ? '0' : '1';\n ic.setAttribute('aria-hidden', String(i !== 0));\n });\n }\n const cur = Number(el.dataset.usaSwap) || 0;\n const nxt = (cur + 1) % icons.length;\n el.dataset.usaSwap = String(nxt);\n const a = icons[cur];\n const b = icons[nxt];\n a.setAttribute('aria-hidden', 'true');\n b.setAttribute('aria-hidden', 'false');\n a.style.opacity = '0';\n b.style.opacity = '1';\n if (ctx.reduced) return all([ctx.animate(a, [{ opacity: 1 }, { opacity: 0 }], { duration: 150 }), ctx.animate(b, [{ opacity: 0 }, { opacity: 1 }], { duration: 150 })]);\n return all([\n ctx.animate(a, [{ opacity: 1, transform: 'none', filter: 'blur(0)' }, { opacity: 0, transform: 'scale(.3) rotate(-90deg)', filter: 'blur(6px)' }], { duration: o.duration, easing: 'cubic-bezier(.5,0,.75,0)' }),\n ctx.animate(b, [{ opacity: 0, transform: 'scale(.3) rotate(90deg)', filter: 'blur(6px)' }, { opacity: 1, transform: 'scale(1.15) rotate(-8deg)', filter: 'blur(0)', offset: 0.7 }, { opacity: 1, transform: 'none', filter: 'blur(0)' }], { duration: o.duration * 1.3, easing: 'cubic-bezier(.2,.8,.3,1.2)' }),\n ]);\n },\n },\n];\n\n/** Register the 6.6 morph & SVG pack (idempotent). */\nexport function registerMorphPack(): void {\n registerEffects(MORPH2_FX);\n}\n\n/** @deprecated since 6.9 — use `registerMorphPack()` (removed in 7.0; `npx usa-codemod-7`). */\nexport function registerMorphEffects2(): void {\n deprecate('registerMorphEffects2', 'registerMorphEffects2() is deprecated since 6.9 and removed in 7.0 — use registerMorphPack() (npx usa-codemod-7).');\n registerMorphPack();\n}\n","/**\n * 6.7 — Transitions 2.0 (`motionary/components/fx-transitions`), registered\n * through `registerEffect()` (kind `page`; option `mode: 'in' | 'out'`):\n *\n * - `ripple-dissolve` — a circle with a ripple ring grows from the pointer\n * (or `x` / `y` 0–1) and reveals / hides the element.\n * - `shatter` — the element breaks into shards that fly apart (out) or\n * fly together (in).\n * - `mosaic-flip` — a grid of tiles flips over in a diagonal wave.\n * - `liquid-wipe` — a wavy liquid edge sweeps across.\n * - `page-curl` — the element turns like a page around its left edge.\n * - `camera-dolly` — a dolly zoom: scale + depth blur + fade.\n *\n * `pageTransition(update, effect)` runs a DOM update inside the View\n * Transitions API (when available) and plays the effect on the new snapshot;\n * without the API it runs `update()` and plays the effect on `target`.\n * `crossDocumentTransitions(effect)` opts an MPA into cross-document view\n * transitions (`@view-transition { navigation: auto }`) with the same look.\n * Reduced motion: plain short fades.\n */\nimport type { EffectContext, EffectDefinition } from '../fx/registry';\nimport { deprecate } from '../base';\nimport { registerEffects, getEffect } from '../fx/registry';\nimport { prefersReducedMotion } from '../base';\nimport { all, origin } from '../effects/shared';\n\nconst fade = (el: Element, ctx: EffectContext, out: boolean) => ctx.animate(el, out ? [{ opacity: 1 }, { opacity: 0 }] : [{ opacity: 0 }, { opacity: 1 }], { duration: 200, fill: out ? 'forwards' : 'none' });\nconst isOut = (o: any) => o.mode === 'out';\nconst dir = (frames: Keyframe[], out: boolean) => (out ? [...frames].reverse().map((f) => ({ ...f, offset: undefined as unknown as number })).map(({ offset, ...f }) => f) : frames);\n\n/** Clipped copies of `el` laid over it (the original is hidden meanwhile). */\nfunction pieces(el: HTMLElement, clips: string[]): { parts: HTMLElement[]; done: () => void } {\n if (getComputedStyle(el).position === 'static') el.style.position = 'relative';\n const prevVis = el.style.visibility;\n const wrap = document.createElement('div');\n wrap.setAttribute('aria-hidden', 'true');\n wrap.style.cssText = 'position:absolute;inset:0;pointer-events:none;perspective:900px;visibility:visible;z-index:1';\n const parts = clips.map((c) => {\n const p = el.cloneNode(true) as HTMLElement;\n p.removeAttribute('id');\n p.querySelectorAll('[id]').forEach((x) => x.removeAttribute('id'));\n p.style.cssText += `;position:absolute;inset:0;margin:0;width:100%;height:100%;box-sizing:border-box;clip-path:${c};visibility:visible`;\n wrap.appendChild(p);\n return p;\n });\n el.style.visibility = 'hidden';\n el.appendChild(wrap);\n return {\n parts,\n done: () => {\n wrap.remove();\n el.style.visibility = prevVis;\n },\n };\n}\n\nexport const TRANSITIONS2_FX: EffectDefinition[] = [\n {\n name: 'ripple-dissolve',\n kind: 'page',\n description: 'A circle with a ripple ring grows from the pointer (or `x` / `y` 0–1) and reveals (`mode: \"in\"`) or hides (`\"out\"`) the element.',\n defaults: { mode: 'in', duration: 900, x: 0.5, y: 0.5 },\n run: (el: HTMLElement, o: any, ctx: EffectContext) => {\n const out = isOut(o);\n if (ctx.reduced) return fade(el, ctx, out);\n const r = el.getBoundingClientRect();\n const p = ctx.event ? origin(el, ctx) : { x: r.left + r.width * o.x, y: r.top + r.height * o.y };\n const at = `${(p.x - r.left).toFixed(0)}px ${(p.y - r.top).toFixed(0)}px`;\n const f: Keyframe[] = [\n { clipPath: `circle(0% at ${at})`, filter: 'blur(2px)' },\n { clipPath: `circle(38% at ${at})`, filter: 'blur(0)', offset: 0.45 },\n { clipPath: `circle(150% at ${at})`, filter: 'blur(0)' },\n ];\n return ctx.animate(el, out ? [f[2], f[0]] : f, { duration: o.duration, easing: 'cubic-bezier(.6,.05,.3,1)', fill: out ? 'forwards' : 'none' });\n },\n },\n {\n name: 'shatter',\n kind: 'page',\n description: 'The element breaks into shards that fly apart (`mode: \"out\"`) or fly together (`\"in\"`) (`pieces`, `duration`).',\n defaults: { mode: 'out', duration: 900, pieces: 12 },\n run: (el: HTMLElement, o: any, ctx: EffectContext) => {\n const out = isOut(o);\n if (ctx.reduced) return fade(el, ctx, out);\n const n = Math.max(4, Math.min(24, o.pieces | 0));\n const cols = Math.ceil(Math.sqrt(n / 2));\n const rows = Math.ceil(n / 2 / cols);\n const clips: string[] = [];\n for (let r = 0; r < rows; r++)\n for (let c = 0; c < cols; c++) {\n const x0 = (c / cols) * 100;\n const x1 = ((c + 1) / cols) * 100;\n const y0 = (r / rows) * 100;\n const y1 = ((r + 1) / rows) * 100;\n clips.push(`polygon(${x0}% ${y0}%,${x1}% ${y0}%,${x0}% ${y1}%)`, `polygon(${x1}% ${y0}%,${x1}% ${y1}%,${x0}% ${y1}%)`);\n }\n const { parts, done } = pieces(el, clips);\n const anims = parts.map((p, i) => {\n const a = (i * 2.399) % (Math.PI * 2);\n const d = 80 + (i % 5) * 30;\n const scattered = { transform: `translate(${(Math.cos(a) * d).toFixed(0)}px,${(Math.sin(a) * d + 40).toFixed(0)}px) rotate(${((i % 7) - 3) * 35}deg) rotateX(${(i % 3) * 40}deg)`, opacity: 0 };\n const whole = { transform: 'none', opacity: 1 };\n return ctx.animate(p, out ? [whole, scattered] : [scattered, whole], { duration: o.duration, delay: (i % 6) * 25, easing: out ? 'cubic-bezier(.4,0,.9,.6)' : 'cubic-bezier(.1,.6,.3,1)', fill: 'both' });\n });\n return all(anims).then(() => {\n done();\n if (out) el.style.visibility = 'hidden';\n });\n },\n },\n {\n name: 'mosaic-flip',\n kind: 'page',\n description: 'A grid of tiles flips over in a diagonal wave (`cols`, `rows`, `duration` per tile).',\n defaults: { mode: 'in', cols: 6, rows: 4, duration: 520 },\n run: (el: HTMLElement, o: any, ctx: EffectContext) => {\n const out = isOut(o);\n if (ctx.reduced) return fade(el, ctx, out);\n const C = Math.max(2, Math.min(12, o.cols | 0));\n const R = Math.max(2, Math.min(10, o.rows | 0));\n const clips: string[] = [];\n for (let r = 0; r < R; r++) for (let c = 0; c < C; c++) clips.push(`inset(${((r / R) * 100).toFixed(2)}% ${(100 - ((c + 1) / C) * 100).toFixed(2)}% ${(100 - ((r + 1) / R) * 100).toFixed(2)}% ${((c / C) * 100).toFixed(2)}%)`);\n const { parts, done } = pieces(el, clips);\n const anims = parts.map((p, i) => {\n const r = Math.floor(i / C);\n const c = i % C;\n p.style.transformOrigin = `${((c + 0.5) / C) * 100}% ${((r + 0.5) / R) * 100}%`;\n p.style.backfaceVisibility = 'hidden';\n const f: Keyframe[] = [{ transform: 'rotateY(-90deg)', opacity: 0 }, { transform: 'rotateY(0)', opacity: 1 }];\n return ctx.animate(p, out ? [f[1], f[0]] : f, { duration: o.duration, delay: (r + c) * 45, easing: 'cubic-bezier(.3,.7,.3,1)', fill: 'both' });\n });\n return all(anims).then(() => {\n done();\n if (out) el.style.visibility = 'hidden';\n });\n },\n },\n {\n name: 'liquid-wipe',\n kind: 'page',\n description: 'A wavy liquid edge sweeps across the element (`direction` left | right | up | down, `waves`, `duration`).',\n defaults: { mode: 'in', direction: 'right', waves: 3, duration: 1000 },\n run: (el: HTMLElement, o: any, ctx: EffectContext) => {\n const out = isOut(o);\n if (ctx.reduced) return fade(el, ctx, out);\n const N = 24;\n const shape = (k: number) => {\n const pts: string[] = [];\n const amp = 6 * Math.sin(Math.PI * k);\n for (let i = 0; i <= N; i++) {\n const t = (i / N) * 100;\n const edge = k * 120 - 10 + amp * Math.sin((i / N) * Math.PI * 2 * o.waves + k * 6);\n pts.push(o.direction === 'up' || o.direction === 'down' ? `${t.toFixed(1)}% ${(o.direction === 'down' ? edge : 100 - edge).toFixed(1)}%` : `${(o.direction === 'left' ? 100 - edge : edge).toFixed(1)}% ${t.toFixed(1)}%`);\n }\n const tail = o.direction === 'up' ? ['100% 100%', '0% 100%'] : o.direction === 'down' ? ['100% 0%', '0% 0%'] : o.direction === 'left' ? ['100% 100%', '100% 0%'] : ['0% 100%', '0% 0%'];\n if (o.direction === 'up' || o.direction === 'down') return `polygon(${[...pts, ...tail].join(',')})`;\n return `polygon(${[...pts, ...tail].join(',')})`;\n };\n const frames: Keyframe[] = Array.from({ length: 9 }, (_, i) => ({ clipPath: shape(i / 8) }));\n return ctx.animate(el, out ? frames.reverse() : frames, { duration: o.duration, easing: 'cubic-bezier(.65,.05,.35,1)', fill: out ? 'forwards' : 'none' });\n },\n },\n {\n name: 'page-curl',\n kind: 'page',\n description: 'The element turns like a page around its left edge, with a moving shade (`duration`).',\n defaults: { mode: 'in', duration: 900 },\n run: (el: HTMLElement, o: any, ctx: EffectContext) => {\n const out = isOut(o);\n if (ctx.reduced) return fade(el, ctx, out);\n const prev = el.style.transformOrigin;\n el.style.transformOrigin = '0% 50%';\n const f: Keyframe[] = [\n { transform: 'perspective(1400px) rotateY(-100deg) skewY(-4deg)', filter: 'brightness(.55)', boxShadow: '30px 0 40px rgba(0,0,0,.35)', opacity: 0.4 },\n { transform: 'perspective(1400px) rotateY(-40deg) skewY(-2deg)', filter: 'brightness(.8)', boxShadow: '20px 0 30px rgba(0,0,0,.25)', opacity: 1, offset: 0.5 },\n { transform: 'perspective(1400px) rotateY(0) skewY(0)', filter: 'brightness(1)', boxShadow: '0 0 0 rgba(0,0,0,0)', opacity: 1 },\n ];\n const a = ctx.animate(el, dir(f, out), { duration: o.duration, easing: 'cubic-bezier(.45,.05,.3,1)', fill: out ? 'forwards' : 'none' });\n const reset = () => (el.style.transformOrigin = prev);\n if (a) a.finished.then(reset, reset);\n else reset();\n return a;\n },\n },\n {\n name: 'camera-dolly',\n kind: 'page',\n description: 'A dolly zoom: the element moves in from (or out to) depth with a depth-of-field blur (`scale`, `duration`).',\n defaults: { mode: 'in', duration: 900, scale: 1.35 },\n run: (el: HTMLElement, o: any, ctx: EffectContext) => {\n const out = isOut(o);\n if (ctx.reduced) return fade(el, ctx, out);\n const f: Keyframe[] = [\n { transform: `perspective(900px) translateZ(-260px) scale(${o.scale})`, filter: 'blur(10px)', opacity: 0 },\n { transform: 'perspective(900px) translateZ(0) scale(1)', filter: 'blur(0)', opacity: 1 },\n ];\n return ctx.animate(el, out ? [f[1], { ...f[0], transform: `perspective(900px) translateZ(260px) scale(${(1 / o.scale).toFixed(3)})` }] : f, { duration: o.duration, easing: 'cubic-bezier(.2,.7,.2,1)', fill: out ? 'forwards' : 'none' });\n },\n },\n];\n\n/** CSS keyframes for the `::view-transition-new(root)` snapshot of each effect (cross-document transitions). */\nconst VT_CSS: Record<string, string> = {\n 'ripple-dissolve': 'from{clip-path:circle(0% at 50% 50%)}to{clip-path:circle(150% at 50% 50%)}',\n 'liquid-wipe': 'from{clip-path:inset(0 100% 0 0)}to{clip-path:inset(0 0 0 0)}',\n 'page-curl': 'from{transform:perspective(1400px) rotateY(-100deg);transform-origin:0 50%;filter:brightness(.6)}to{transform:none;transform-origin:0 50%}',\n 'camera-dolly': 'from{transform:scale(1.35);filter:blur(10px);opacity:0}to{transform:none;filter:none;opacity:1}',\n 'mosaic-flip': 'from{transform:perspective(900px) rotateY(-90deg);opacity:0}to{transform:none;opacity:1}',\n shatter: 'from{transform:scale(.85) rotate(-3deg);opacity:0;filter:blur(4px)}to{transform:none;opacity:1;filter:none}',\n};\n\n/**\n * Run `update` (a DOM change) as a transition: inside `document.startViewTransition`\n * when supported (the new snapshot plays `effect`), otherwise `update()` then the\n * effect on `target` (default `document.body`'s first element).\n */\nexport async function pageTransition(update: () => void | Promise<void>, effect = 'ripple-dissolve', options: Record<string, unknown> = {}, target?: HTMLElement): Promise<void> {\n const doc = document as Document & { startViewTransition?: (cb: () => unknown) => { ready: Promise<void>; finished: Promise<void> } };\n const def = getEffect(effect);\n if (typeof doc.startViewTransition === 'function' && !prefersReducedMotion()) {\n const vt = doc.startViewTransition(update);\n await vt.ready.catch(() => undefined);\n const css = VT_CSS[effect];\n if (css) {\n const dur = Number(options.duration) || Number(def?.defaults?.duration) || 800;\n const m = /from\\{([^}]*)\\}to\\{([^}]*)\\}/.exec(css);\n const toObj = (s: string) => Object.fromEntries(s.split(';').filter(Boolean).map((d) => { const i = d.indexOf(':'); return [d.slice(0, i).replace(/-([a-z])/g, (_, c) => c.toUpperCase()), d.slice(i + 1)]; }));\n if (m) document.documentElement.animate([toObj(m[1]), toObj(m[2])], { duration: dur, easing: 'cubic-bezier(.6,.05,.3,1)', pseudoElement: '::view-transition-new(root)' } as KeyframeAnimationOptions);\n }\n await vt.finished.catch(() => undefined);\n return;\n }\n await update();\n const el = target || (document.body.firstElementChild as HTMLElement | null);\n if (el && def) {\n const { playEffect } = await import('../fx/registry');\n await playEffect(el, effect, { ...options, mode: 'in' });\n }\n}\n\n/** Opt a multi-page site into cross-document view transitions with an effect's look. Returns a remover. */\nexport function crossDocumentTransitions(effect = 'ripple-dissolve', duration = 700): () => void {\n const style = document.createElement('style');\n style.setAttribute('data-usa-vt', effect);\n const kf = VT_CSS[effect] || VT_CSS['camera-dolly'];\n style.textContent = `@view-transition{navigation:auto}@keyframes usa-vt-in{${kf}}::view-transition-new(root){animation:usa-vt-in ${duration}ms cubic-bezier(.6,.05,.3,1) both}::view-transition-old(root){animation:none}@media (prefers-reduced-motion:reduce){::view-transition-new(root){animation-duration:1ms}}`;\n document.head.appendChild(style);\n return () => style.remove();\n}\n\n/** Register the 6.7 transitions pack (idempotent). */\nexport function registerTransitionsPack(): void {\n registerEffects(TRANSITIONS2_FX);\n}\n\n/** @deprecated since 6.9 — use `registerTransitionsPack()` (removed in 7.0; `npx usa-codemod-7`). */\nexport function registerTransitionEffects2(): void {\n deprecate('registerTransitionEffects2', 'registerTransitionEffects2() is deprecated since 6.9 and removed in 7.0 — use registerTransitionsPack() (npx usa-codemod-7).');\n registerTransitionsPack();\n}\n","/**\n * 6.8 — Weather & ambience (`motionary/components/fx-weather`), registered\n * through `registerEffect()` (kind `background`, Canvas 2D):\n *\n * - `rain-glass` — droplets sit on a window pane, grow, and run down leaving\n * trails.\n * - `snowfall` — flakes drift down and pile up along the bottom edge.\n * - `lightning` — a safe storm: branching bolts at most once per `interval`\n * (≥ 2.5 s, far below the WCAG 2.3.1 limit of 3 flashes / s), the sky glow\n * is capped at 22 % brightness and there is no flash at all under reduced\n * motion.\n * - `fog` — soft layered fog banks drifting at different speeds.\n * - `aurora-veil` — curtains of northern lights waving over a night sky.\n * - `day-cycle` — the sky moves through dawn, day, dusk and night with the sun\n * and moon on an arc (`cycle` seconds, or a fixed `hour` 0–24).\n *\n * Every effect renders only while visible, adapts its quality and draws one\n * static frame under reduced motion.\n */\nimport type { EffectContext, EffectDefinition } from '../fx/registry';\nimport { deprecate } from '../base';\nimport { registerEffects } from '../fx/registry';\nimport { canvasBackground, type GenerativeSpec } from '../effects/generative';\nimport { rand } from '../effects/shared';\n\nconst bg = (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\nconst step = (state: any, t: number): number => {\n const dt = state.last ? Math.min(0.05, t - state.last) : 0;\n state.last = t;\n return dt;\n};\n\n/** Mix two `[r,g,b]` colours. */\nconst mix = (a: number[], b: number[], k: number): string => `rgb(${a.map((v, i) => Math.round(v + (b[i] - v) * k)).join(',')})`;\n\n/** Sky colours (top, bottom) for an hour 0–24. */\nexport function skyAt(hour: number): [string, string] {\n const keys: [number, number[], number[]][] = [\n [0, [8, 10, 30], [22, 26, 60]],\n [5, [30, 27, 75], [250, 140, 110]],\n [7, [90, 160, 230], [255, 210, 160]],\n [12, [40, 130, 230], [170, 215, 255]],\n [17, [70, 120, 200], [255, 190, 130]],\n [19, [60, 40, 110], [250, 110, 90]],\n [21, [12, 14, 40], [40, 36, 90]],\n [24, [8, 10, 30], [22, 26, 60]],\n ];\n const h = ((hour % 24) + 24) % 24;\n let i = 0;\n while (i < keys.length - 2 && keys[i + 1][0] <= h) i++;\n const [h0, t0, b0] = keys[i];\n const [h1, t1, b1] = keys[i + 1];\n const k = (h - h0) / (h1 - h0 || 1);\n return [mix(t0, t1, k), mix(b0, b1, k)];\n}\n\nexport const WEATHER_FX: EffectDefinition[] = [\n bg('rain-glass', 'Droplets on a window pane grow and run down, leaving trails (Canvas 2D).', { count: 70, tint: 'rgba(200,225,255,.55)' }, {\n init: (w, h, o) => ({ d: Array.from({ length: o.count }, () => ({ x: Math.random() * w, y: Math.random() * h, r: rand(1, 3.2), v: 0, trail: [] as number[][] })) }),\n draw: ({ ctx, w, h, t, state, o }) => {\n const dt = step(state, t) * o.speed;\n ctx.clearRect(0, 0, w, h);\n ctx.fillStyle = 'rgba(30,50,80,.12)';\n ctx.fillRect(0, 0, w, h);\n for (const d of state.d) {\n if (d.r > 2.6 && Math.random() < dt * 0.6) d.v = rand(40, 110);\n if (d.v) {\n d.y += d.v * dt;\n d.x += Math.sin(d.y * 0.05) * 0.3;\n d.trail.push([d.x, d.y]);\n if (d.trail.length > 18) d.trail.shift();\n if (d.y > h + 6) Object.assign(d, { y: -4, x: Math.random() * w, r: rand(1, 2.4), v: 0, trail: [] });\n } else d.r = Math.min(3.4, d.r + dt * 0.25);\n if (d.trail.length > 1) {\n ctx.strokeStyle = 'rgba(220,235,255,.25)';\n ctx.lineWidth = d.r * 0.7;\n ctx.beginPath();\n d.trail.forEach(([x, y]: number[], i: number) => (i ? ctx.lineTo(x, y) : ctx.moveTo(x, y)));\n ctx.stroke();\n }\n const g = ctx.createRadialGradient(d.x - d.r * 0.3, d.y - d.r * 0.4, 0, d.x, d.y, d.r * 1.4);\n g.addColorStop(0, 'rgba(255,255,255,.9)');\n g.addColorStop(1, o.tint);\n ctx.fillStyle = g;\n ctx.beginPath();\n ctx.ellipse(d.x, d.y, d.r, d.r * 1.15, 0, 0, Math.PI * 2);\n ctx.fill();\n }\n },\n }),\n bg('snowfall', 'Snowflakes drift down and pile up along the bottom edge (Canvas 2D).', { count: 90, pile: 18, color: '#ffffff' }, {\n init: (w, h, o) => ({ f: Array.from({ length: o.count }, () => ({ x: Math.random() * w, y: Math.random() * h, r: rand(1, 3.4), ph: rand(0, 6.3) })), pile: new Float32Array(Math.max(2, Math.ceil(w / 6))) }),\n draw: ({ ctx, w, h, t, state, o, quality }) => {\n const dt = step(state, t) * o.speed;\n ctx.clearRect(0, 0, w, h);\n ctx.fillStyle = o.color;\n const n = Math.max(8, Math.round(state.f.length * quality));\n for (let i = 0; i < n; i++) {\n const f = state.f[i];\n f.y += (14 + f.r * 9) * dt;\n f.x += Math.sin(t * 0.8 + f.ph) * 12 * dt;\n const col = Math.min(state.pile.length - 1, Math.max(0, Math.floor(f.x / 6)));\n if (f.y > h - state.pile[col]) {\n state.pile[col] = Math.min(o.pile, state.pile[col] + f.r * 0.12);\n f.y = -5;\n f.x = Math.random() * w;\n }\n ctx.globalAlpha = 0.55 + f.r / 8;\n ctx.beginPath();\n ctx.arc(f.x, f.y, f.r, 0, Math.PI * 2);\n ctx.fill();\n }\n ctx.globalAlpha = 0.95;\n ctx.beginPath();\n ctx.moveTo(0, h);\n for (let c = 0; c < state.pile.length; c++) ctx.lineTo(c * 6 + 3, h - state.pile[c] - Math.sin(c * 0.7) * Math.min(2, state.pile[c] * 0.2));\n ctx.lineTo(w, h);\n ctx.fill();\n ctx.globalAlpha = 1;\n },\n }),\n bg('lightning', 'A safe storm: branching bolts at most once per `interval` (≥ 2.5 s), sky glow capped at 22 %, no flash under reduced motion (Canvas 2D).', { interval: 4, glow: 0.22, color: '#c7d2fe' }, {\n init: () => ({ next: 1.2, bolt: null as number[][][] | null, age: 0 }),\n draw: ({ ctx, w, h, t, state, o }) => {\n const dt = step(state, t);\n ctx.clearRect(0, 0, w, h);\n const sky = ctx.createLinearGradient(0, 0, 0, h);\n sky.addColorStop(0, '#0b1020');\n sky.addColorStop(1, '#1e293b');\n ctx.fillStyle = sky;\n ctx.fillRect(0, 0, w, h);\n if (t === 0) return;\n const every = Math.max(2.5, Number(o.interval) || 4);\n if (t > state.next) {\n state.next = t + every + Math.random() * every * 0.5;\n const segs: number[][][] = [];\n const branch = (x: number, y: number, len: number, depth: number) => {\n let cx = x;\n let cy = y;\n const path: number[][] = [[cx, cy]];\n while (cy < y + len && cy < h) {\n cx += rand(-14, 14);\n cy += rand(8, 18);\n path.push([cx, cy]);\n if (depth < 2 && Math.random() < 0.12) branch(cx, cy, len * 0.4, depth + 1);\n }\n segs.push(path);\n };\n branch(rand(w * 0.2, w * 0.8), 0, h * 0.85, 0);\n state.bolt = segs;\n state.age = 0;\n }\n if (state.bolt) {\n state.age += dt;\n const a = Math.max(0, 1 - state.age / 0.45);\n ctx.fillStyle = `rgba(200,210,255,${(Math.min(0.22, Number(o.glow) || 0.22) * a).toFixed(3)})`;\n ctx.fillRect(0, 0, w, h);\n ctx.strokeStyle = o.color;\n ctx.shadowColor = o.color;\n ctx.shadowBlur = 12;\n ctx.globalAlpha = a;\n state.bolt.forEach((p: number[][], i: number) => {\n ctx.lineWidth = i === state.bolt.length - 1 ? 2.4 : 1;\n ctx.beginPath();\n p.forEach(([x, y], j) => (j ? ctx.lineTo(x, y) : ctx.moveTo(x, y)));\n ctx.stroke();\n });\n ctx.globalAlpha = 1;\n ctx.shadowBlur = 0;\n if (a <= 0) state.bolt = null;\n }\n },\n }),\n bg('fog', 'Soft layered fog banks drifting at different speeds (Canvas 2D).', { banks: 9, color: '226,232,240', density: 0.35 }, {\n init: (w, h, o) => ({ b: Array.from({ length: o.banks }, (_, i) => ({ x: Math.random() * w, y: h * (0.35 + (i / o.banks) * 0.65), r: rand(0.35, 0.7) * Math.max(w, h), v: rand(6, 22) * (i % 2 ? 1 : -1) })) }),\n draw: ({ ctx, w, h, t, state, o }) => {\n const dt = step(state, t) * o.speed;\n ctx.clearRect(0, 0, w, h);\n for (const b of state.b) {\n b.x += b.v * dt;\n if (b.x > w + b.r) b.x = -b.r;\n if (b.x < -b.r) b.x = w + b.r;\n const g = ctx.createRadialGradient(b.x, b.y, 0, b.x, b.y, b.r);\n g.addColorStop(0, `rgba(${o.color},${o.density})`);\n g.addColorStop(1, `rgba(${o.color},0)`);\n ctx.fillStyle = g;\n ctx.fillRect(0, 0, w, h);\n }\n },\n }),\n bg('aurora-veil', 'Curtains of northern lights waving over a starry night sky (Canvas 2D).', { colors: ['#22d3ee', '#a3e635', '#c084fc'], stars: 60 }, {\n init: (w, h, o) => ({ s: Array.from({ length: o.stars }, () => [Math.random() * w, Math.random() * h * 0.7, Math.random()]) }),\n draw: ({ ctx, w, h, t, state, o }) => {\n const sky = ctx.createLinearGradient(0, 0, 0, h);\n sky.addColorStop(0, '#020617');\n sky.addColorStop(1, '#0f172a');\n ctx.fillStyle = sky;\n ctx.fillRect(0, 0, w, h);\n for (const [x, y, k] of state.s) {\n ctx.fillStyle = `rgba(255,255,255,${(0.3 + 0.5 * Math.abs(Math.sin(t * 1.5 + k * 9))).toFixed(2)})`;\n ctx.fillRect(x, y, 1.4, 1.4);\n }\n ctx.globalCompositeOperation = 'lighter';\n (o.colors as string[]).forEach((c, i) => {\n const base = h * (0.25 + i * 0.12);\n for (let x = 0; x < w; x += 4) {\n const y = base + Math.sin(x * 0.012 + t * (0.5 + i * 0.2) + i) * h * 0.08 + Math.sin(x * 0.03 - t * 0.7) * h * 0.03;\n const len = h * (0.22 + 0.12 * Math.sin(x * 0.02 + t + i));\n const g = ctx.createLinearGradient(0, y - len, 0, y);\n g.addColorStop(0, 'rgba(0,0,0,0)');\n g.addColorStop(1, c);\n ctx.globalAlpha = 0.16;\n ctx.fillStyle = g;\n ctx.fillRect(x, y - len, 4, len);\n }\n });\n ctx.globalAlpha = 1;\n ctx.globalCompositeOperation = 'source-over';\n },\n }),\n bg('day-cycle', 'The sky moves through dawn, day, dusk and night with the sun and moon on an arc (`cycle` seconds or a fixed `hour`) (Canvas 2D).', { cycle: 24, hour: null }, {\n draw: ({ ctx, w, h, t, o }) => {\n const hour = typeof o.hour === 'number' ? o.hour : (8 + (t / Math.max(4, Number(o.cycle) || 24)) * 24) % 24;\n const [top, bot] = skyAt(hour);\n const g = ctx.createLinearGradient(0, 0, 0, h);\n g.addColorStop(0, top);\n g.addColorStop(1, bot);\n ctx.fillStyle = g;\n ctx.fillRect(0, 0, w, h);\n const body = (k: number, color: string, r: number) => {\n if (k < 0 || k > 1) return;\n const x = w * k;\n const y = h * 0.9 - Math.sin(k * Math.PI) * h * 0.75;\n ctx.fillStyle = color;\n ctx.shadowColor = color;\n ctx.shadowBlur = 24;\n ctx.beginPath();\n ctx.arc(x, y, r, 0, Math.PI * 2);\n ctx.fill();\n ctx.shadowBlur = 0;\n };\n body((hour - 6) / 12, '#fde047', Math.min(w, h) * 0.07);\n body(((hour + 6) % 24) / 12, '#e2e8f0', Math.min(w, h) * 0.05);\n ctx.fillStyle = 'rgba(15,23,42,.55)';\n ctx.beginPath();\n ctx.moveTo(0, h);\n for (let x = 0; x <= w; x += 8) ctx.lineTo(x, h * 0.88 - Math.sin(x * 0.015) * h * 0.05 - Math.sin(x * 0.041) * h * 0.02);\n ctx.lineTo(w, h);\n ctx.fill();\n },\n }),\n];\n\n/** Register the 6.8 weather & ambience pack (idempotent). */\nexport function registerWeatherPack(): void {\n registerEffects(WEATHER_FX);\n}\n\n/** @deprecated since 6.9 — use `registerWeatherPack()` (removed in 7.0; `npx usa-codemod-7`). */\nexport function registerWeatherEffects(): void {\n deprecate('registerWeatherEffects', 'registerWeatherEffects() is deprecated since 6.9 and removed in 7.0 — use registerWeatherPack() (npx usa-codemod-7).');\n registerWeatherPack();\n}\n","/**\n * 6.8 — Interactive physics 2.0 (`motionary/components/fx-physics`) on a tiny\n * Verlet integrator (`VerletWorld`), registered through `registerEffect()`:\n *\n * - `soft-body` (kind `hover`) — the element wobbles like jelly: pointer\n * motion pushes a damped spring that squashes and skews it.\n * - `magnet` (kind `hover`) — the element's children are pulled toward the\n * pointer on springs and settle back when it leaves.\n * - `cloth` (kind `background`) — a cloth hangs from the top edge and ripples\n * when the pointer moves through it.\n * - `rope` (kind `background`) — a rope with a weight swings from the top;\n * the pointer pushes it.\n * - `pinball` (kind `background`) — balls fall through round bumpers that\n * light up on a hit; click to drop another ball.\n *\n * Canvas effects render only while visible; reduced motion draws one static\n * frame and the hover effects do nothing.\n */\nimport type { EffectContext, EffectDefinition } from '../fx/registry';\nimport { deprecate } from '../base';\nimport { registerEffects } from '../fx/registry';\nimport { canvasBackground, type GenerativeSpec } from '../effects/generative';\n\nexport interface VerletPoint {\n x: number;\n y: number;\n px: number;\n py: number;\n pinned: boolean;\n}\n\n/** A minimal Verlet world: points, distance sticks, gravity, damping. */\nexport class VerletWorld {\n points: VerletPoint[] = [];\n sticks: [number, number, number][] = [];\n constructor(public gravity = 900, public damping = 0.99, public iterations = 4) {}\n add(x: number, y: number, pinned = false): number {\n this.points.push({ x, y, px: x, py: y, pinned });\n return this.points.length - 1;\n }\n link(a: number, b: number, len?: number): void {\n const p = this.points[a];\n const q = this.points[b];\n this.sticks.push([a, b, len ?? Math.hypot(p.x - q.x, p.y - q.y)]);\n }\n step(dt: number, bounds?: { w: number; h: number }): void {\n const g = this.gravity * dt * dt;\n for (const p of this.points) {\n if (p.pinned) continue;\n const vx = (p.x - p.px) * this.damping;\n const vy = (p.y - p.py) * this.damping;\n p.px = p.x;\n p.py = p.y;\n p.x += vx;\n p.y += vy + g;\n }\n for (let k = 0; k < this.iterations; k++) {\n for (const [a, b, len] of this.sticks) {\n const p = this.points[a];\n const q = this.points[b];\n const dx = q.x - p.x;\n const dy = q.y - p.y;\n const d = Math.hypot(dx, dy) || 1e-6;\n const diff = (d - len) / d / (p.pinned || q.pinned ? 1 : 2);\n if (!p.pinned) (p.x += dx * diff), (p.y += dy * diff);\n if (!q.pinned) (q.x -= dx * diff), (q.y -= dy * diff);\n }\n if (bounds) for (const p of this.points) (p.x = Math.min(bounds.w, Math.max(0, p.x))), (p.y = Math.min(bounds.h, Math.max(0, p.y)));\n }\n }\n /** Push points within `r` px of (x, y) by (dx, dy). */\n push(x: number, y: number, dx: number, dy: number, r = 40): void {\n for (const p of this.points) if (!p.pinned && Math.hypot(p.x - x, p.y - y) < r) (p.x += dx), (p.y += dy);\n }\n}\n\nconst bg = (name: string, description: string, defaults: Record<string, unknown>, spec: (el: HTMLElement) => 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(el), o);\n ctx.onCleanup(stop);\n return stop;\n },\n});\n\n/** Pointer position relative to `el` plus the movement since the last read. */\nfunction pointer(el: HTMLElement) {\n const s = { x: -999, y: -999, dx: 0, dy: 0, down: false, clicks: 0 };\n const move = (e: PointerEvent) => {\n const r = el.getBoundingClientRect();\n const x = e.clientX - r.left;\n const y = e.clientY - r.top;\n if (s.x > -999) (s.dx += x - s.x), (s.dy += y - s.y);\n s.x = x;\n s.y = y;\n };\n const click = () => s.clicks++;\n const leave = () => (s.x = s.y = -999);\n el.addEventListener('pointermove', move);\n el.addEventListener('pointerdown', click);\n el.addEventListener('pointerleave', leave);\n return { s, off: () => (el.removeEventListener('pointermove', move), el.removeEventListener('pointerdown', click), el.removeEventListener('pointerleave', leave)) };\n}\n\nconst tick = (state: any, t: number) => {\n const dt = state.last ? Math.min(1 / 30, t - state.last) : 1 / 60;\n state.last = t;\n return dt;\n};\n\nexport const PHYSICS2_FX: EffectDefinition[] = [\n {\n name: 'soft-body',\n kind: 'hover',\n description: 'The element wobbles like jelly: pointer motion pushes a damped spring that squashes and skews it (`stiffness`, `damping`, `amount`).',\n defaults: { stiffness: 220, damping: 9, amount: 1 },\n reduced: 'skip',\n run: (el: HTMLElement, o: any, ctx: EffectContext) => {\n let vx = 0;\n let x = 0;\n let vy = 0;\n let y = 0;\n let raf = 0;\n let lx = NaN;\n let ly = NaN;\n let last = 0;\n const prev = el.style.transform;\n const loop = (now: number) => {\n const dt = last ? Math.min(0.033, (now - last) / 1000) : 1 / 60;\n last = now;\n vx += (-o.stiffness * x - o.damping * vx) * dt;\n vy += (-o.stiffness * y - o.damping * vy) * dt;\n x += vx * dt;\n y += vy * dt;\n const a = o.amount;\n el.style.transform = `skew(${(x * 0.6 * a).toFixed(2)}deg,${(y * 0.25 * a).toFixed(2)}deg) scale(${(1 + y * 0.004 * a).toFixed(4)},${(1 - y * 0.004 * a).toFixed(4)})`;\n if (Math.abs(x) + Math.abs(vx) + Math.abs(y) + Math.abs(vy) > 0.02) raf = requestAnimationFrame(loop);\n else ((raf = 0), (last = 0), (el.style.transform = prev));\n };\n const move = (e: PointerEvent) => {\n if (!Number.isNaN(lx)) (vx += Math.max(-60, Math.min(60, (e.clientX - lx) * 4))), (vy += Math.max(-60, Math.min(60, (e.clientY - ly) * 4)));\n lx = e.clientX;\n ly = e.clientY;\n if (!raf && typeof requestAnimationFrame === 'function') raf = requestAnimationFrame(loop);\n };\n const leave = () => (lx = ly = NaN);\n el.addEventListener('pointermove', move);\n el.addEventListener('pointerleave', leave);\n const stop = () => {\n el.removeEventListener('pointermove', move);\n el.removeEventListener('pointerleave', leave);\n if (raf) cancelAnimationFrame(raf);\n el.style.transform = prev;\n };\n ctx.onCleanup(stop);\n return stop;\n },\n },\n {\n name: 'magnet',\n kind: 'hover',\n description: \"The element's children are pulled toward the pointer on springs and settle back when it leaves (`strength`, `radius`).\",\n defaults: { strength: 0.35, radius: 160 },\n reduced: 'skip',\n run: (el: HTMLElement, o: any, ctx: EffectContext) => {\n const kids = Array.from(el.children) as HTMLElement[];\n const prev = kids.map((k) => k.style.transform);\n kids.forEach((k) => (k.style.transition = 'transform .45s cubic-bezier(.3,1.5,.5,1)'));\n const move = (e: PointerEvent) => {\n for (const k of kids) {\n const r = k.getBoundingClientRect();\n const dx = e.clientX - (r.left + r.width / 2);\n const dy = e.clientY - (r.top + r.height / 2);\n const d = Math.hypot(dx, dy);\n const f = d < o.radius ? o.strength * (1 - d / o.radius) : 0;\n k.style.transform = `translate(${(dx * f).toFixed(1)}px,${(dy * f).toFixed(1)}px)`;\n }\n };\n const leave = () => kids.forEach((k, i) => (k.style.transform = prev[i]));\n el.addEventListener('pointermove', move);\n el.addEventListener('pointerleave', leave);\n const stop = () => {\n el.removeEventListener('pointermove', move);\n el.removeEventListener('pointerleave', leave);\n kids.forEach((k, i) => ((k.style.transform = prev[i]), (k.style.transition = '')));\n };\n ctx.onCleanup(stop);\n return stop;\n },\n },\n bg('cloth', 'A cloth hangs from the top edge and ripples when the pointer moves through it (Verlet, Canvas 2D).', { cols: 16, rows: 10, color: '#7c5cff' }, (el) => {\n const p = pointer(el);\n return {\n init: (w, h, o) => {\n const world = new VerletWorld(600, 0.985, 3);\n const sx = (w * 0.86) / (o.cols - 1);\n const sy = (h * 0.75) / (o.rows - 1);\n for (let r = 0; r < o.rows; r++) for (let c = 0; c < o.cols; c++) world.add(w * 0.07 + c * sx, 6 + r * sy, r === 0 && c % 3 === 0);\n for (let r = 0; r < o.rows; r++)\n for (let c = 0; c < o.cols; c++) {\n const i = r * o.cols + c;\n if (c) world.link(i - 1, i);\n if (r) world.link(i - o.cols, i);\n }\n return { world, off: p.off };\n },\n draw: ({ ctx, w, h, t, state, o }) => {\n const dt = tick(state, t);\n const world: VerletWorld = state.world;\n if (t > 0) {\n if (p.s.x > -999) world.push(p.s.x, p.s.y, p.s.dx * 0.6, p.s.dy * 0.6, 50);\n p.s.dx = p.s.dy = 0;\n world.step(dt * o.speed, { w, h });\n }\n ctx.clearRect(0, 0, w, h);\n for (let r = 0; r < o.rows - 1; r++)\n for (let c = 0; c < o.cols - 1; c++) {\n const i = r * o.cols + c;\n const a = world.points[i];\n const b = world.points[i + 1];\n const d = world.points[i + o.cols + 1];\n const e = world.points[i + o.cols];\n const shade = 0.55 + 0.45 * Math.max(0, Math.min(1, (b.x - a.x) / ((w * 0.86) / (o.cols - 1))));\n ctx.globalAlpha = shade;\n ctx.fillStyle = (r + c) % 2 ? o.color : '#22d3ee';\n ctx.beginPath();\n ctx.moveTo(a.x, a.y);\n ctx.lineTo(b.x, b.y);\n ctx.lineTo(d.x, d.y);\n ctx.lineTo(e.x, e.y);\n ctx.fill();\n }\n ctx.globalAlpha = 1;\n },\n };\n }),\n bg('rope', 'A rope with a weight swings from the top; the pointer pushes it (Verlet, Canvas 2D).', { links: 14, color: '#f59e0b' }, (el) => {\n const p = pointer(el);\n return {\n init: (w, h, o) => {\n const world = new VerletWorld(900, 0.995, 6);\n const len = (h * 0.7) / o.links;\n for (let i = 0; i <= o.links; i++) world.add(w / 2 + i * len * 0.6, 4 + i * len * 0.8, i === 0);\n for (let i = 1; i <= o.links; i++) world.link(i - 1, i, len);\n return { world, off: p.off };\n },\n draw: ({ ctx, w, h, t, state, o }) => {\n const dt = tick(state, t);\n const world: VerletWorld = state.world;\n if (t > 0) {\n if (p.s.x > -999) world.push(p.s.x, p.s.y, p.s.dx, p.s.dy, 36);\n p.s.dx = p.s.dy = 0;\n world.step(dt * o.speed, { w, h });\n }\n ctx.clearRect(0, 0, w, h);\n ctx.strokeStyle = o.color;\n ctx.lineWidth = 3;\n ctx.lineCap = 'round';\n ctx.beginPath();\n world.points.forEach((q, i) => (i ? ctx.lineTo(q.x, q.y) : ctx.moveTo(q.x, q.y)));\n ctx.stroke();\n const end = world.points[world.points.length - 1];\n ctx.fillStyle = o.color;\n ctx.beginPath();\n ctx.arc(end.x, end.y, 11, 0, Math.PI * 2);\n ctx.fill();\n },\n };\n }),\n bg('pinball', 'Balls fall through round bumpers that light up on a hit; click to drop another ball (Canvas 2D).', { balls: 5, bumpers: 7, colors: ['#f43f5e', '#f59e0b', '#22d3ee', '#a3e635'] }, (el) => {\n const p = pointer(el);\n return {\n init: (w, h, o) => {\n const ball = () => ({ x: w * (0.3 + Math.random() * 0.4), y: -10 - Math.random() * h * 0.5, vx: (Math.random() - 0.5) * 80, vy: 0 });\n const bumpers = Array.from({ length: o.bumpers }, (_, i) => ({ x: w * (0.15 + ((i * 0.37) % 0.7)), y: h * (0.25 + ((i * 0.53) % 0.6)), r: Math.min(w, h) * 0.06, hit: 0 }));\n return { balls: Array.from({ length: o.balls }, ball), bumpers, ball, clicks: 0, off: p.off };\n },\n draw: ({ ctx, w, h, t, state, o }) => {\n const dt = tick(state, t) * o.speed;\n if (p.s.clicks !== state.clicks) {\n state.clicks = p.s.clicks;\n const b = state.ball();\n if (p.s.x > -999) b.x = p.s.x;\n b.y = 0;\n state.balls.push(b);\n if (state.balls.length > 24) state.balls.shift();\n }\n ctx.clearRect(0, 0, w, h);\n for (const bu of state.bumpers) {\n bu.hit = Math.max(0, bu.hit - dt * 2.5);\n ctx.fillStyle = `rgba(124,92,255,${0.35 + bu.hit * 0.65})`;\n ctx.shadowColor = '#a78bfa';\n ctx.shadowBlur = bu.hit * 20;\n ctx.beginPath();\n ctx.arc(bu.x, bu.y, bu.r * (1 + bu.hit * 0.15), 0, Math.PI * 2);\n ctx.fill();\n }\n ctx.shadowBlur = 0;\n state.balls.forEach((b: any, i: number) => {\n if (t > 0) {\n b.vy += 600 * dt;\n b.x += b.vx * dt;\n b.y += b.vy * dt;\n for (const bu of state.bumpers) {\n const dx = b.x - bu.x;\n const dy = b.y - bu.y;\n const d = Math.hypot(dx, dy);\n if (d < bu.r + 6 && d > 0) {\n const nx = dx / d;\n const ny = dy / d;\n const dot = b.vx * nx + b.vy * ny;\n b.vx = (b.vx - 2 * dot * nx) * 0.92;\n b.vy = (b.vy - 2 * dot * ny) * 0.92;\n b.x = bu.x + nx * (bu.r + 6);\n b.y = bu.y + ny * (bu.r + 6);\n bu.hit = 1;\n }\n }\n if (b.x < 6 || b.x > w - 6) (b.vx *= -0.8), (b.x = Math.min(w - 6, Math.max(6, b.x)));\n if (b.y > h + 12) Object.assign(b, state.ball());\n }\n ctx.fillStyle = o.colors[i % o.colors.length];\n ctx.beginPath();\n ctx.arc(b.x, b.y, 6, 0, Math.PI * 2);\n ctx.fill();\n });\n },\n };\n }),\n];\n\n/** Register the 6.8 physics 2.0 pack (idempotent). */\nexport function registerPhysicsPack(): void {\n registerEffects(PHYSICS2_FX);\n}\n\n/** @deprecated since 6.9 — use `registerPhysicsPack()` (removed in 7.0; `npx usa-codemod-7`). */\nexport function registerPhysicsEffects2(): void {\n deprecate('registerPhysicsEffects2', 'registerPhysicsEffects2() is deprecated since 6.9 and removed in 7.0 — use registerPhysicsPack() (npx usa-codemod-7).');\n registerPhysicsPack();\n}\n","/**\n * 6.9 — Focus & feedback (`motionary/components/fx-focus`), registered\n * through `registerEffect()`:\n *\n * - `focus-draw` (kind `attention`) — a rounded ring draws itself around the\n * element, then fades (great on `focus`).\n * - `marching-ants` (kind `loop`) — a dashed selection border that marches\n * (drop targets, selections).\n * - `success-check` (kind `click`) — a check mark draws over the element on a\n * soft green disc, then fades away.\n * - `highlight-sweep` (kind `attention`) — a highlighter stroke sweeps\n * behind the element's text.\n *\n * Overlays are SVG / spans marked `aria-hidden` and removed when done.\n * Reduced motion: a plain fade of the final state (marching-ants is static).\n */\nimport type { EffectContext, EffectDefinition } from '../fx/registry';\nimport { registerEffects } from '../fx/registry';\n\nconst NS = 'http://www.w3.org/2000/svg';\n\nfunction overlay(el: HTMLElement, z = 1): HTMLSpanElement {\n if (getComputedStyle(el).position === 'static') el.style.position = 'relative';\n const o = document.createElement('span');\n o.setAttribute('aria-hidden', 'true');\n o.setAttribute('data-usa-fx-layer', '');\n o.style.cssText = `position:absolute;inset:0;pointer-events:none;z-index:${z};border-radius:inherit`;\n el.appendChild(o);\n return o;\n}\n\nfunction ring(el: HTMLElement, pad: number, color: string, width: number, dash = ''): { o: HTMLSpanElement; rect: SVGRectElement; len: number } {\n const o = overlay(el, 2);\n o.style.inset = `-${pad}px`;\n const r = el.getBoundingClientRect();\n const w = Math.max(1, r.width + pad * 2);\n const h = Math.max(1, r.height + pad * 2);\n const svg = document.createElementNS(NS, 'svg');\n svg.setAttribute('width', '100%');\n svg.setAttribute('height', '100%');\n svg.setAttribute('viewBox', `0 0 ${w} ${h}`);\n svg.style.overflow = 'visible';\n const rect = document.createElementNS(NS, 'rect');\n const rad = Math.min(16, h / 2);\n for (const [k, v] of Object.entries({ x: width / 2, y: width / 2, width: w - width, height: h - width, rx: rad, fill: 'none', stroke: color, 'stroke-width': width, 'stroke-linecap': 'round' })) rect.setAttribute(k, String(v));\n if (dash) rect.setAttribute('stroke-dasharray', dash);\n svg.appendChild(rect);\n o.appendChild(svg);\n return { o, rect, len: 2 * (w + h) };\n}\n\nconst after = (a: Animation | null, fn: () => void) => (a ? a.finished.then(fn, fn) : fn());\n\nexport const FOCUS_FX: EffectDefinition[] = [\n {\n name: 'focus-draw',\n kind: 'attention',\n description: 'A rounded ring draws itself around the element, then fades (`color`, `width`, `pad`, `duration`).',\n defaults: { color: '#7c5cff', width: 2.5, pad: 4, duration: 700 },\n run: (el: HTMLElement, o: any, ctx: EffectContext) => {\n const { o: layer, rect, len } = ring(el, o.pad, o.color, o.width);\n const done = () => layer.remove();\n if (ctx.reduced) {\n const a = ctx.animate(layer, [{ opacity: 1 }, { opacity: 0 }], { duration: 600 });\n after(a, done);\n return a;\n }\n rect.setAttribute('stroke-dasharray', String(len));\n const a = ctx.animate(rect, [{ strokeDashoffset: len }, { strokeDashoffset: 0, offset: 0.6 }, { strokeDashoffset: 0 }], { duration: o.duration, easing: 'cubic-bezier(.6,.05,.3,1)' });\n const f = ctx.animate(layer, [{ opacity: 1 }, { opacity: 1, offset: 0.7 }, { opacity: 0 }], { duration: o.duration + 500 });\n after(f, done);\n return a;\n },\n },\n {\n name: 'marching-ants',\n kind: 'loop',\n description: 'A dashed selection border that marches around the element (`color`, `width`, `pad`, `speed`).',\n defaults: { color: '#7c5cff', width: 2, pad: 3, speed: 1 },\n reduced: 'run',\n run: (el: HTMLElement, o: any, ctx: EffectContext) => {\n const { o: layer, rect } = ring(el, o.pad, o.color, o.width, '7 5');\n if (!ctx.reduced) ctx.animate(rect, [{ strokeDashoffset: 0 }, { strokeDashoffset: -24 }], { duration: 700 / Math.max(0.1, o.speed), iterations: Infinity });\n const stop = () => layer.remove();\n ctx.onCleanup(stop);\n return stop;\n },\n },\n {\n name: 'success-check',\n kind: 'click',\n description: 'A check mark draws over the element on a soft green disc, then fades away (`color`, `duration`).',\n defaults: { color: '#22c55e', duration: 1100 },\n run: (el: HTMLElement, o: any, ctx: EffectContext) => {\n const layer = overlay(el, 3);\n layer.style.display = 'grid';\n layer.style.placeItems = 'center';\n layer.innerHTML = `<svg viewBox=\"0 0 52 52\" width=\"52\" height=\"52\"><circle cx=\"26\" cy=\"26\" r=\"24\" fill=\"${o.color}\" opacity=\".18\"/><path d=\"M15 27l7 7 15-16\" fill=\"none\" stroke=\"${o.color}\" stroke-width=\"4.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-dasharray=\"36\" stroke-dashoffset=\"36\"/></svg>`;\n const svg = layer.firstElementChild as SVGElement;\n const path = layer.querySelector('path')!;\n const done = () => layer.remove();\n if (ctx.reduced) {\n path.setAttribute('stroke-dashoffset', '0');\n const a = ctx.animate(layer, [{ opacity: 1 }, { opacity: 1, offset: 0.7 }, { opacity: 0 }], { duration: o.duration });\n after(a, done);\n return a;\n }\n ctx.animate(svg, [{ transform: 'scale(.4)', opacity: 0 }, { transform: 'scale(1.1)', opacity: 1, offset: 0.35 }, { transform: 'scale(1)', opacity: 1 }], { duration: 420, easing: 'ease-out' });\n ctx.animate(path, [{ strokeDashoffset: 36 }, { strokeDashoffset: 36, offset: 0.25 }, { strokeDashoffset: 0 }], { duration: 600, easing: 'ease-out', fill: 'forwards' });\n const f = ctx.animate(layer, [{ opacity: 1 }, { opacity: 1, offset: 0.75 }, { opacity: 0 }], { duration: o.duration });\n after(f, done);\n return f;\n },\n },\n {\n name: 'highlight-sweep',\n kind: 'attention',\n description: \"A highlighter stroke sweeps behind the element's text and stays (`color`, `duration`, `keep`).\",\n defaults: { color: 'rgba(250,204,21,.55)', duration: 700, keep: true },\n run: (el: HTMLElement, o: any, ctx: EffectContext) => {\n const layer = overlay(el, -1);\n el.style.isolation = 'isolate';\n layer.style.cssText += `;inset:15% -4px 5% -4px;background:${o.color};border-radius:4px;transform-origin:0 50%`;\n const a = ctx.reduced ? ctx.animate(layer, [{ opacity: 0 }, { opacity: 1 }], { duration: 300 }) : ctx.animate(layer, [{ transform: 'scaleX(0) skewX(-12deg)' }, { transform: 'scaleX(1) skewX(-6deg)' }], { duration: o.duration, easing: 'cubic-bezier(.6,.05,.3,1)', fill: 'forwards' });\n if (!o.keep) after(a, () => layer.remove());\n ctx.onCleanup(() => layer.remove());\n return a;\n },\n },\n];\n\n/** Register the 6.9 focus & feedback pack (idempotent). */\nexport function registerFocusPack(): void {\n registerEffects(FOCUS_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 { deprecate } from '../base';\nexport { EFFECT_PACK_FORMAT, packManifest, validateManifest, loadEffectPack } from './manifest';\nexport type { EffectPackManifest } from './manifest';\nimport { GPU_FX, registerGpuPack, registerGpuEffects } from './gpu';\nimport { TEXT3_FX, registerTextPack, registerTextEffects3, splitChars } from './text3';\nimport { LIGHT_FX, registerLightPack, registerLightEffects, trackPointer } from './light';\nimport { DEPTH3_FX, register3dPack, register3dEffects } from './depth3';\nimport { MORPH2_FX, registerMorphPack, registerMorphEffects2, samplePath, pointsToPath } from './morph2';\nimport { TRANSITIONS2_FX, registerTransitionsPack, registerTransitionEffects2, pageTransition, crossDocumentTransitions } from './transitions2';\nimport { WEATHER_FX, registerWeatherPack, registerWeatherEffects, skyAt } from './weather';\nimport { PHYSICS2_FX, registerPhysicsPack, registerPhysicsEffects2, VerletWorld } from './physics2';\nimport { FOCUS_FX, registerFocusPack } from './focus';\n\nexport { GPU_FX, registerGpuPack, registerGpuEffects, TEXT3_FX, registerTextPack, registerTextEffects3, splitChars };\nexport { shaderBackground, supportsWebGL2, fieldFallback, GLSL_HEAD } from './gl';\nexport type { ShaderSpec } from './gl';\n\nexport { LIGHT_FX, registerLightPack, registerLightEffects, trackPointer };\n\nexport { DEPTH3_FX, register3dPack, register3dEffects };\n\nexport { MORPH2_FX, registerMorphPack, registerMorphEffects2, samplePath, pointsToPath };\n\nexport { TRANSITIONS2_FX, registerTransitionsPack, registerTransitionEffects2, pageTransition, crossDocumentTransitions };\n\nexport { WEATHER_FX, registerWeatherPack, registerWeatherEffects, skyAt };\n\nexport { PHYSICS2_FX, registerPhysicsPack, registerPhysicsEffects2, VerletWorld };\n\nexport { FOCUS_FX, registerFocusPack };\n\n/** The 6.x effect packs by name. */\nexport const EFFECT_PACKS: Record<string, EffectDefinition[]> = {\n gpu: GPU_FX,\n text: TEXT3_FX,\n light: LIGHT_FX,\n depth: DEPTH3_FX,\n morph: MORPH2_FX,\n transitions: TRANSITIONS2_FX,\n weather: WEATHER_FX,\n physics: PHYSICS2_FX,\n focus: FOCUS_FX,\n};\n\n/** Register every 6.x effect pack (idempotent). */\nexport function registerEffectPacks(): void {\n registerGpuPack();\n registerTextPack();\n registerLightPack();\n register3dPack();\n registerMorphPack();\n registerTransitionsPack();\n registerWeatherPack();\n registerPhysicsPack();\n registerFocusPack();\n}\n\n/** @deprecated since 6.9 — `EFFECT_PACKS` (removed in 7.0). */\nexport const FX2_PACKS = EFFECT_PACKS;\n\n/** @deprecated since 6.9 — use `registerEffectPacks()` (removed in 7.0; `npx usa-codemod-7`). */\nexport function registerFx2(): void {\n deprecate('registerFx2', 'registerFx2() is deprecated since 6.9 and removed in 7.0 — use registerEffectPacks() (npx usa-codemod-7).');\n registerEffectPacks();\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 { registerEffectPacks } from '../fx2/index';\n\ndefineWidgets();\nregisterEffectPacks();\nexport * from './index';\nexport * from '../fx2/index';\n"],"names":["config","VESTIBULAR","prefersReducedMotion","matchMedia","matches","injected","Set","adoptStyles","id","css","has","document","add","CSSStyleSheet","sheet","replaceSync","adoptedStyleSheets","style","createElement","setAttribute","textContent","head","documentElement","appendChild","baseClass","animateWithMotion","el","keyframes","options","animate","applyFrame","length","frames","level","map","f","out","k","v","Object","entries","test","String","adaptKeyframes","active","maxActive","a","iterations","Infinity","done","end","finished","then","frame","defineElement","tag","make","customElements","HTMLElement","BASE_CSS","text","existing","get","ctor","Base","constructor","this","_cleanups","_connected","reduced","connectedCallback","readyState","nextSibling","childNodes","go","isConnected","mount","addEventListener","once","push","removeEventListener","disconnectedCallback","teardown","attributeChangedCallback","_name","oldValue","value","changed","splice","reverse","forEach","fn","unmount","str","name","fallback","getAttribute","num","n","trim","NaN","Number","isFinite","flag","setFlag","on","removeAttribute","onCleanup","listen","target","type","inView","cb","init","IntersectionObserver","io","e","isIntersecting","observe","disconnect","motion","emit","detail","dispatchEvent","CustomEvent","bubbles","cancelable","getBase","define","warned","deprecate","key","message","console","warn","clampN","b","Math","min","max","ownChildren","skip","Array","from","children","filter","c","part","cls","attrs","html","className","innerHTML","dropParts","querySelectorAll","remove","uid","nextId","p","arrowIndex","i","vertical","prev","next","CAROUSEL_EFFECTS","defineCarousel","_i","_slides","_track","_timer","_hold","_dots","observedAttributes","index","goTo","effect","includes","dataset","toggleAttribute","old","querySelector","firstElementChild","vp","track","append","s","prepend","hasAttribute","tabIndex","dots","role","d","round","layout","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","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","MODAL_EFFECTS","SHEET_SIDES","EASE_OUT","delegated","delegateTriggers","getElementById","show","opened","close","defineOverlay","kind","_dlg","_panel","_open","_ret","_origin","_value","_closing","returnValue","ef","side","opening","fade","top","toFixed","borderRadius","backdrop","pseudoElement","trigger","activeElement","showModal","Promise","resolve","y0","dy","t0","clientY","setPointerCapture","up","defineModal","defineSheet","TOAST_POSITIONS","ICONS","info","success","warning","error","tid","defineToastStack","trig","stackToast","title","undefined","installToastTriggers","_list","_timers","_hover","count","position","expand","resume","relatedTarget","h","clearTimeout","_id","Date","start","setTimeout","dismiss","li","txt","assign","action","onClick","swipe","startsWith","translate","scale","dur","reason","rm","dir","y","tf","isNaN","stack","MENU_EFFECTS","defineMenu","find","pl","placement","it","item","j","l","clipPath","focusTrigger","hide","PROGRESS_VARIANTS","defineProgressRing","_shown","_arc","_label","_len","_raf","update","super","variant","stops","split","Boolean","gid","random","toString","slice","background","svg","createElementNS","semi","grad","PI","strokeDasharray","strokeDashoffset","cancelAnimationFrame","paint","frac","requestAnimationFrame","pow","defineOdometer","_row","_text","render","format","Intl","NumberFormat","minimumFractionDigits","maximumFractionDigits","column","ch","isDigit","col","strip","row","anim","chars","fresh","cols","digit","replaceChildren","SKELETON_VARIANTS","defineSkeletonReveal","_layer","loading","build","reveal","layer","host","boxes","marked","m","skeleton","getComputedStyle","walker","createTreeWalker","NodeFilter","SHOW_TEXT","nextNode","some","range","createRange","selectNodeContents","rects","getClientRects","cssText","setProperty","parseFloat","all","PATHS","star","heart","defineStarRating","_v","_stars","icon","at","raw","user","idx","cos","sin","defineMilestones","_reached","reached","rail","date","after","passive","line","innerHeight","card","dot","defineMasonryFlow","_cols","_pos","_busy","columns","MutationObserver","mo","childList","capture","gap","W","floor","cw","heights","keys","reorder","shuffle","sort","compare","defineCompare","_p","_after","_handle","before","orientation","lb","la","ArrowLeft","ArrowDown","ArrowRight","ArrowUp","PageDown","PageUp","played","threshold","ease","prop","clip","defineCubeGallery","_stage","axis","stage","hold","vis","ax","half","faceB","turn","defineDock","bounce","magnifyAt","center","NAV_INDICATORS","defineNavMorph","_links","_active","_at","setActive","cur","findIndex","moveTo","blob","TOGGLE_VARIANTS","defineMenuToggle","box","TIP_PLACEMENTS","FLIP","bottom","defineTip","_bubble","_trigger","_t","rich","click","later","want","tr","br","vw","innerWidth","vh","fits","cx","defineStepper","_steps","steps","pct","boxShadow","pageWindow","page","total","siblings","lo","hi","definePagination","_page","btn","g","disabled","placeInk","ink","SEGMENTED_VARIANTS","defineSegmented","_segs","_thumb","segments","pre","sx","SWITCH_VARIANTS","defineSwitch","_on","_input","checked","thumb","defineKanban","_live","_held","cardsOf","prepCard","say","msg","colName","flip","change","cards","flatMap","move","ref","insertBefore","button","ox","oy","started","lastX","ghost","ph","onMove","ev","hypot","pointerEvents","tilt","nextElementSibling","onUp","ci","defineSwipeDeck","_cards","_gone","insertAdjacentHTML","like","nope","ctrlKey","metaKey","undo","visibility","stamp","fly","sign","pop","getAnimations","WEATHER_CONDITIONS","LABEL","cloudy","rain","snow","storm","fog","night","defineWeatherCard","condition","cond","temp","unit","scene","drops","_","raf","definePullCord","_x","_y","_vx","_vy","draw","pull","cord","knob","ex","ey","release","last","moved","lamp","iso","getFullYear","getMonth","padStart","getDate","parseISODate","exec","monthGrid","year","month","firstDay","getDay","defineDatePicker","_view","_focus","nav","showMonth","day","pick","inRange","grid","loc","fd","toLocaleDateString","days","names","weekday","today","sel","foc","delta","cell","setDate","setMonth","Home","End","hsvToHex","hexToHsv","hex","parseInt","mx","defineColorPicker","_h","_s","hsv","sw","sv","hue","shiftKey","area","morph","chip","defineFileDrop","_files","_depth","files","zone","accept","multiple","addFiles","dataTransfer","ul","simulate","tick","setProgress","EFFECT_KINDS","REG_KEY","Symbol","for","registry","_a","globalThis","registerEffect","def","opts","Error","override","registerEffects","defs","getEffect","hasEffect","SKIP_BY_DEFAULT","async","playEffect","event","ctx","cleanups","sensitivity","context","run","defaults","catch","instant","fast","normal","slower","slowest","linear","standard","emphasized","decelerate","accelerate","spring","snappy","fromEntries","TIMELINE_PRESETS","blur","rotate","ANIMATION_FORMAT","normalizeAnimation","JSON","parse","tracks","state","b64","replace","json","decodeURIComponent","escape","atob","preset","decodePlayground","isArray","version","reduce","loop","root","DEFAULT","defineKeyframeEditor","_anim","stringify","_player","animation","toJSON","src","seek","rebuild","destroy","anims","effects","els","fired","kf","an","currentTime","time","playing","fireDue","onFinish","player","rate","autoplay","createPlayer","wire","s0","d0","resize","dms","scrub","WIDGETS","WIDGET_TAGS","defineWidgets","group","EFFECT_PACK_FORMAT","SEMVER","PKG","validateManifest","errors","ok","packVersion","seen","fxLayer","origin","spawn","overlay","PALETTE","rand","noise2","hexRgb","canvasBackground","spec","canvas","restore","getContext","quality","dpr","devicePixelRatio","setTransform","es","gen","description","colors","speed","field","px","st","buf","bctx","img","createImageData","data","putImageData","imageSmoothingEnabled","drawImage","fillStyle","globalAlpha","fillRect","q","seeds","vx","vy","b2","dd","edge","sqrt","blobs","cr","cg","createRadialGradient","addColorStop","stars","color","_w","balls","ar","ag","ab","bg","bb","kr","kg","kb","inside","levels","lr","lg","z","shade","GLSL_HEAD","gl2","supportsWebGL2","shaderBackground","usaBackend","stop","backend","gl","alpha","antialias","preserveDrawingBuffer","prog","frag","mk","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","u","uniform3fv","uniform1f","uRes","uT","uPtr","ptr","viewport","uniform2f","drawArrays","TRIANGLES","swapped","lost","getExtension","loseContext","fieldFallback","mixRgb","sstep","fbm2","shader","extra","C","GPU_FX","sm","ac","i1","i2","bx","by","fall","va","clearRect","wind","save","particles","registerGpuPack","splitChars","usaChars","srText","beginPath","bezierCurveTo","quadraticCurveTo","strokeStyle","lineWidth","lineTo","stroke","ang","peak","fid","TEXT3_FX","strength","turb","caf","stagger","glow","textShadow","cs","spread","pad","H","cs0","font","fontStyle","fontWeight","fontSize","fontFamily","textBaseline","fillText","getImageData","pts","rr","sy","finish","spacing","word","lx","ly","period","fontVariationSettings","direction","perspective","rot","transformOrigin","backfaceVisibility","registerTextPack","trackPointer","py","flush","queue","leave","rgba","LIGHT_FX","intensity","ov","rm2","zoom","rim","lens","clientHeight","tint","lines","grain","sheen","atan2","film","gloss","backgroundSize","backgroundPosition","rays","globalCompositeOperation","len","gg","createLinearGradient","closePath","depth","registerLightPack","layers","DEPTH3_FX","transformStyle","transition","ls","saved","rx","ry","idle","friction","touchAction","cursor","down","thickness","front","back","R","usaFlip","display","gridArea","toBack","panels","usaOrigami","prevVis","wrap","cloneNode","register3dPack","NS","samplePath","getTotalLength","L","pt","getPointAtLength","pointsToPath","align","best","bd","concat","MORPH2_FX","paths","path","shapes","orig","wobble","bulge","prevZ","isolation","hover","hh","cy","toward","p0","p1","p2","p3","kick","fillOpacity","disp","icons","usaSwap","ic","nxt","registerMorphPack","isOut","mode","pieces","clips","parts","TRANSITIONS2_FX","rows","y1","scattered","whole","waves","shape","amp","tail","reset","VT_CSS","shatter","registerTransitionsPack","mix","skyAt","hour","h0","b0","h1","t1","b1","WEATHER_FX","trail","shift","ellipse","pile","arc","interval","bolt","age","sky","every","segs","branch","shadowColor","shadowBlur","banks","density","cycle","bot","registerWeatherPack","VerletWorld","gravity","sticks","pinned","link","bounds","diff","pointer","clicks","PHYSICS2_FX","amount","radius","world","links","lineCap","bumpers","ball","bu","nx","ny","registerPhysicsPack","ring","dash","inset","overflow","rad","FOCUS_FX","placeItems","keep","registerFocusPack","EFFECT_PACKS","gpu","light","transitions","weather","physics","registerEffectPacks","FX2_PACKS","mod","import","manifest","clash","doc","startViewTransition","vt","ready","toObj","toUpperCase","registry$1"],"mappings":"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"}
|