use-scroll-animate 6.2.0 → 6.3.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.
Files changed (90) hide show
  1. package/CHANGELOG.md +14 -0
  2. package/dist/chunks/{base-C_3cAoRz.js → base-DchG4q_S.js} +2 -2
  3. package/dist/chunks/{base-C_3cAoRz.js.map → base-DchG4q_S.js.map} +1 -1
  4. package/dist/chunks/{core-ps8uvYuN.js → core-D2vF8kZb.js} +2 -2
  5. package/dist/chunks/{core-ps8uvYuN.js.map → core-D2vF8kZb.js.map} +1 -1
  6. package/dist/chunks/{core-VEBw36QK.js → core-DVyTlo9Q.js} +2 -2
  7. package/dist/chunks/{core-VEBw36QK.js.map → core-DVyTlo9Q.js.map} +1 -1
  8. package/dist/chunks/{fx-Bs6IrV4Q.js → fx-DUMVKSvg.js} +2 -2
  9. package/dist/chunks/{fx-Bs6IrV4Q.js.map → fx-DUMVKSvg.js.map} +1 -1
  10. package/dist/chunks/{generative-DzIZq-_g.cjs → generative-BHIj-NU0.cjs} +3 -56
  11. package/dist/chunks/generative-BHIj-NU0.cjs.map +1 -0
  12. package/dist/chunks/{generative-D2YyhaeO.js → generative-BRUZaIsX.js} +3 -49
  13. package/dist/chunks/generative-BRUZaIsX.js.map +1 -0
  14. package/dist/chunks/{gpu-CenK2l6b.cjs → gpu-BBRLgEzM.cjs} +13 -12
  15. package/dist/chunks/gpu-BBRLgEzM.cjs.map +1 -0
  16. package/dist/chunks/{gpu-Bu7qwugO.js → gpu-XHWzeNb5.js} +4 -3
  17. package/dist/chunks/gpu-XHWzeNb5.js.map +1 -0
  18. package/dist/chunks/{registry-CKNLQpwd.js → registry-Bu5NrAyA.js} +2 -2
  19. package/dist/chunks/{registry-CKNLQpwd.js.map → registry-Bu5NrAyA.js.map} +1 -1
  20. package/dist/chunks/shared-eweTlzxv.js +50 -0
  21. package/dist/chunks/shared-eweTlzxv.js.map +1 -0
  22. package/dist/chunks/shared-jkgRH-Hx.cjs +58 -0
  23. package/dist/chunks/shared-jkgRH-Hx.cjs.map +1 -0
  24. package/dist/chunks/{spring-CbvHfVtP.js → spring-BhoT09Qb.js} +2 -2
  25. package/dist/chunks/{spring-CbvHfVtP.js.map → spring-BhoT09Qb.js.map} +1 -1
  26. package/dist/chunks/{variants-DRlKVHvu.js → variants-C_hv_s23.js} +2 -2
  27. package/dist/chunks/{variants-DRlKVHvu.js.map → variants-C_hv_s23.js.map} +1 -1
  28. package/dist/components/a11y.js +2 -2
  29. package/dist/components/angular.js +7 -7
  30. package/dist/components/background.js +2 -2
  31. package/dist/components/bridge.js +1 -1
  32. package/dist/components/cards.js +2 -2
  33. package/dist/components/click.js +3 -3
  34. package/dist/components/depth.js +3 -3
  35. package/dist/components/effects.cjs +45 -44
  36. package/dist/components/effects.cjs.map +1 -1
  37. package/dist/components/effects.js +7 -6
  38. package/dist/components/effects.js.map +1 -1
  39. package/dist/components/feedback.js +1 -1
  40. package/dist/components/fx-gpu.cjs +3 -2
  41. package/dist/components/fx-gpu.cjs.map +1 -1
  42. package/dist/components/fx-gpu.js +5 -4
  43. package/dist/components/fx-gpu.js.map +1 -1
  44. package/dist/components/fx-text.cjs +267 -0
  45. package/dist/components/fx-text.cjs.map +1 -0
  46. package/dist/components/fx-text.d.cts +70 -0
  47. package/dist/components/fx-text.d.ts +70 -0
  48. package/dist/components/fx-text.js +263 -0
  49. package/dist/components/fx-text.js.map +1 -0
  50. package/dist/components/fx.js +5 -5
  51. package/dist/components/fx2.cjs +9 -2
  52. package/dist/components/fx2.cjs.map +1 -1
  53. package/dist/components/fx2.d.cts +27 -1
  54. package/dist/components/fx2.d.ts +27 -1
  55. package/dist/components/fx2.js +11 -6
  56. package/dist/components/fx2.js.map +1 -1
  57. package/dist/components/gesture.js +4 -4
  58. package/dist/components/interaction.js +1 -1
  59. package/dist/components/layout.js +1 -1
  60. package/dist/components/packs.js +1 -1
  61. package/dist/components/page.js +3 -3
  62. package/dist/components/perf.js +2 -2
  63. package/dist/components/physics.js +3 -3
  64. package/dist/components/reveal.js +1 -1
  65. package/dist/components/solid.js +7 -7
  66. package/dist/components/svelte.js +7 -7
  67. package/dist/components/svg.js +1 -1
  68. package/dist/components/text.js +2 -2
  69. package/dist/components/timeline.js +3 -3
  70. package/dist/components/transitions.js +1 -1
  71. package/dist/components/ui.js +4 -4
  72. package/dist/components/vue.js +7 -7
  73. package/dist/components/webgl.js +1 -1
  74. package/dist/components/widgets.cjs +591 -8
  75. package/dist/components/widgets.cjs.map +1 -1
  76. package/dist/components/widgets.d.cts +98 -2
  77. package/dist/components/widgets.d.ts +98 -2
  78. package/dist/components/widgets.js +585 -11
  79. package/dist/components/widgets.js.map +1 -1
  80. package/dist/components.js +9 -9
  81. package/dist/index.js +2 -2
  82. package/dist/widgets.umd.js +1 -1
  83. package/dist/widgets.umd.js.map +1 -1
  84. package/docs/ROADMAP.md +1 -1
  85. package/docs/components.md +32 -0
  86. package/package.json +11 -1
  87. package/dist/chunks/generative-D2YyhaeO.js.map +0 -1
  88. package/dist/chunks/generative-DzIZq-_g.cjs.map +0 -1
  89. package/dist/chunks/gpu-Bu7qwugO.js.map +0 -1
  90. package/dist/chunks/gpu-CenK2l6b.cjs.map +0 -1
@@ -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/index.ts","../src/components/fx/registry.ts","../src/components/effects/shared.ts","../src/components/effects/generative.ts","../src/components/fx2/gl.ts","../src/components/fx2/gpu.ts","../src/components/fx2/index.ts","../src/components/widgets/auto.ts"],"sourcesContent":["/**\n * motionary/components — shared base for the `<usa-*>` custom elements.\n *\n * Everything here is lazy: nothing touches `window`, `document`,\n * `HTMLElement` or `matchMedia` at import time, so the components can be\n * imported during SSR (Next, Nuxt, Astro…) and in Electron/Tauri preload\n * scripts. Classes are created the first time a `define*()` function runs.\n */\n\nexport interface ComponentsConfig {\n /**\n * Inject each component's CSS when it is defined (default `true`). Uses a\n * constructable stylesheet (`document.adoptedStyleSheets`, which a strict\n * `style-src` CSP does not block) and falls back to a `<style>` tag. Set\n * to `false` when you load `motionary/components.css` yourself.\n */\n injectStyles?: boolean;\n /**\n * `'user'` (default) follows `prefers-reduced-motion`; `'reduce'` always\n * uses the reduced variants (e.g. a kiosk / battery-saver mode). 5.0: the\n * OS setting can no longer be ignored (`'no-preference'` was removed).\n */\n reducedMotion?: 'user' | 'reduce';\n /**\n * Global motion intensity (v2.7): `'low'` (shorter, calmer), `'normal'`\n * (default) or `'high'`. Scales every component animation's duration and\n * sets `--usa-motion` (0.6 / 1 / 1.25) on `<html>` for your own CSS. 5.0:\n * `'off'` was removed — use `motionSensitivity: 'minimal'`.\n */\n motionIntensity?: MotionIntensity;\n /**\n * Motion-sensitivity level (v4.4), finer than reduced motion:\n * `'full'` (default) · `'gentle'` (no spins, zooms, skews or parallax —\n * translations and fades only, safe for vestibular disorders) ·\n * `'minimal'` (fades only; components use their reduced-motion variants) ·\n * `'static'` (no animation: every component shows its static alternative).\n * See `setMotionSensitivity()` in `motionary/components/a11y`.\n */\n motionSensitivity?: MotionSensitivity;\n}\n\nexport type MotionSensitivity = 'full' | 'gentle' | 'minimal' | 'static';\nexport const MOTION_SENSITIVITY_LEVELS: readonly MotionSensitivity[] = ['full', 'gentle', 'minimal', 'static'];\n\nexport type MotionIntensity = 'low' | 'normal' | 'high';\nexport const MOTION_SCALE: Record<MotionIntensity, number> = { low: 0.6, normal: 1, high: 1.25 };\n\nconst config: Required<ComponentsConfig> = { injectStyles: true, reducedMotion: 'user', motionIntensity: 'normal', motionSensitivity: 'full' };\n\n/** Change global component settings (call before `define*()` for `injectStyles`). */\nexport function configureComponents(options: ComponentsConfig): void {\n options = { ...options };\n // 5.0: removed values are ignored (see docs/upgrading-5.md)\n if (options.motionIntensity && !(options.motionIntensity in MOTION_SCALE)) delete options.motionIntensity;\n if (options.reducedMotion && options.reducedMotion !== 'reduce') options.reducedMotion = 'user';\n Object.assign(config, options);\n if (options.motionIntensity && typeof document !== 'undefined') {\n document.documentElement.style.setProperty('--usa-motion', String(MOTION_SCALE[options.motionIntensity] ?? 1));\n document.documentElement.setAttribute('data-usa-motion', options.motionIntensity);\n }\n if (options.motionSensitivity && typeof document !== 'undefined') {\n if (options.motionSensitivity === 'full') document.documentElement.removeAttribute('data-usa-sensitivity');\n else document.documentElement.setAttribute('data-usa-sensitivity', options.motionSensitivity);\n }\n}\n\n/** The current motion-sensitivity level (v4.4). */\nexport function getMotionSensitivity(): MotionSensitivity {\n return config.motionSensitivity;\n}\n\nconst VESTIBULAR = /rotate|scale|skew|perspective|matrix3d/;\n/**\n * Adapt keyframes to the sensitivity level: `gentle` drops transforms that\n * spin, zoom or skew (and 3D), `minimal` keeps opacity only, `static` keeps\n * just the final frame. `full` returns them unchanged.\n */\nexport function adaptKeyframes(frames: Keyframe[], level: MotionSensitivity = config.motionSensitivity): Keyframe[] {\n if (level === 'full' || !frames.length) return frames;\n if (level === 'static') return [frames[frames.length - 1]];\n return frames.map((f) => {\n const out: Keyframe = {};\n for (const [k, v] of Object.entries(f)) {\n if (k === 'offset' || k === 'easing' || k === 'composite') out[k] = v as any;\n else if (level === 'minimal') {\n if (k === 'opacity') out[k] = v as any;\n } else if (k === 'rotate' || k === 'scale' || (k === 'transform' && VESTIBULAR.test(String(v)))) continue;\n else out[k] = v as any;\n }\n return out;\n });\n}\n\nlet quiet = 0;\n/** Run `fn` without 4.9 deprecation warnings (library-internal calls). */\nexport function withoutDeprecations<T>(fn: () => T): T {\n quiet++;\n try {\n return fn();\n } finally {\n quiet--;\n }\n}\n\n/** The current global motion intensity. */\nexport function getMotionIntensity(): MotionIntensity {\n return config.motionIntensity;\n}\n\n/** Duration multiplier for the current intensity (1 when `normal`). */\nexport function motionScale(): number {\n return MOTION_SCALE[config.motionIntensity] ?? 1;\n}\n\nexport const canDefine = (): boolean => typeof customElements !== 'undefined' && typeof HTMLElement !== 'undefined';\n\n/** `true` when animations should be reduced (OS setting or `configureComponents`). */\nexport function prefersReducedMotion(): boolean {\n if (config.motionSensitivity === 'minimal' || config.motionSensitivity === 'static') return true;\n if (config.reducedMotion === 'reduce') return true;\n return typeof matchMedia === 'function' && !!matchMedia('(prefers-reduced-motion: reduce)').matches;\n}\n\nconst injected = new Set<string>();\n\n/** Add a component's stylesheet to the document once. */\nexport function adoptStyles(id: string, css: string): void {\n if (!config.injectStyles || !css || injected.has(id) || typeof document === 'undefined') return;\n injected.add(id);\n try {\n if (typeof CSSStyleSheet === 'function' && 'adoptedStyleSheets' in document) {\n const sheet = new CSSStyleSheet();\n sheet.replaceSync(css);\n document.adoptedStyleSheets = [...document.adoptedStyleSheets, sheet];\n return;\n }\n } catch {\n /* fall through to <style> */\n }\n const style = document.createElement('style');\n style.setAttribute('data-usa', id);\n style.textContent = css;\n (document.head || document.documentElement).appendChild(style);\n}\n\n/** Attach `css` to a shadow root (constructable sheet where supported, else `<style>`). */\nexport function shadowStyles(root: ShadowRoot, css: string): void {\n try {\n if (typeof CSSStyleSheet === 'function' && 'adoptedStyleSheets' in root) {\n const sheet = new CSSStyleSheet();\n sheet.replaceSync(css);\n root.adoptedStyleSheets = [sheet];\n return;\n }\n } catch {\n /* fall through */\n }\n const style = document.createElement('style');\n style.textContent = css;\n root.prepend(style);\n}\n\nexport type Cleanup = () => void;\n\n/**\n * Members shared by every `<usa-*>` element. Attribute helpers, a cleanup\n * bag that is emptied on disconnect, and motion helpers that degrade to the\n * final state without WAAPI or under reduced motion.\n */\nexport interface UsaElement extends HTMLElement {\n /** `true` while reduced motion applies to this element. */\n readonly reduced: boolean;\n}\n\nexport interface UsaBase extends UsaElement {\n mount(): void;\n changed(name: string): void;\n unmount(): void;\n str(name: string, fallback?: string): string;\n num(name: string, fallback: number): number;\n flag(name: string): boolean;\n setFlag(name: string, on: boolean): void;\n onCleanup(fn: Cleanup): void;\n listen<K extends keyof HTMLElementEventMap>(\n target: EventTarget,\n type: K | string,\n fn: (e: any) => void,\n options?: AddEventListenerOptions\n ): void;\n inView(cb: (visible: boolean, entry?: IntersectionObserverEntry) => void, init?: IntersectionObserverInit, target?: Element): void;\n motion(el: Element, keyframes: Keyframe[], options: KeyframeAnimationOptions): Animation | null;\n emit(type: string, detail?: unknown): boolean;\n}\n\ntype BaseCtor = new () => UsaBase;\nlet baseClass: BaseCtor | null = null;\n\n/** The lazily created base class (needs `HTMLElement`). */\nexport function getBase(): BaseCtor {\n if (baseClass) return baseClass;\n class Base extends HTMLElement {\n private _cleanups: Cleanup[] = [];\n private _connected = false;\n\n get reduced(): boolean {\n return prefersReducedMotion();\n }\n\n connectedCallback(): void {\n if (this._connected) return;\n this._connected = true;\n styleLoader?.(this.localName);\n // Upgraded while the parser is still inside us (a <script> in <head>\n // defined the element): children/text are not there yet, so wait.\n if (typeof document !== 'undefined' && document.readyState === 'loading' && !this.nextSibling && !this.childNodes.length) {\n const go = () => {\n if (this._connected && this.isConnected) this.mount();\n };\n document.addEventListener('DOMContentLoaded', go, { once: true });\n this._cleanups.push(() => document.removeEventListener('DOMContentLoaded', go));\n return;\n }\n this.mount();\n }\n\n disconnectedCallback(): void {\n this._connected = false;\n this.teardown();\n }\n\n attributeChangedCallback(_name: string, oldValue: string | null, value: string | null): void {\n if (!this._connected || oldValue === value) return;\n this.changed(_name);\n }\n\n /** Re-mount on attribute change (override for finer updates). */\n changed(_name: string): void {\n this.teardown();\n this.mount();\n }\n\n private teardown(): void {\n this._cleanups.splice(0).reverse().forEach((fn) => fn());\n this.unmount();\n }\n\n mount(): void {}\n unmount(): void {}\n\n str(name: string, fallback = ''): string {\n const v = this.getAttribute(name);\n return v === null ? fallback : v;\n }\n\n num(name: string, fallback: number): number {\n const v = this.getAttribute(name);\n const n = v === null || v.trim() === '' ? NaN : Number(v);\n return Number.isFinite(n) ? n : fallback;\n }\n\n /** Boolean attribute: present and not `\"false\"`. */\n flag(name: string): boolean {\n const v = this.getAttribute(name);\n return v !== null && v !== 'false';\n }\n\n setFlag(name: string, on: boolean): void {\n if (on) this.setAttribute(name, '');\n else this.removeAttribute(name);\n }\n\n onCleanup(fn: Cleanup): void {\n this._cleanups.push(fn);\n }\n\n listen(target: EventTarget, type: string, fn: (e: any) => void, options?: AddEventListenerOptions): void {\n target.addEventListener(type, fn, options);\n this.onCleanup(() => target.removeEventListener(type, fn, options));\n }\n\n /** Calls `cb(true/false)` as the element enters / leaves the viewport. */\n inView(cb: (visible: boolean, entry?: IntersectionObserverEntry) => void, init?: IntersectionObserverInit, target: Element = this): void {\n if (typeof IntersectionObserver === 'undefined') {\n cb(true);\n return;\n }\n const io = new IntersectionObserver((entries) => {\n for (const e of entries) cb(e.isIntersecting, e);\n }, init);\n io.observe(target);\n this.onCleanup(() => io.disconnect());\n }\n\n /** `el.animate()` that returns `null` (and applies the last frame) without WAAPI. */\n motion(el: Element, keyframes: Keyframe[], options: KeyframeAnimationOptions): Animation | null {\n return animateWithMotion(el, keyframes, options);\n }\n\n emit(type: string, detail?: unknown): boolean {\n return this.dispatchEvent(new CustomEvent(`usa:${type}`, { detail, bubbles: true, cancelable: true }));\n }\n }\n baseClass = Base as unknown as BaseCtor;\n return baseClass;\n}\n\n/**\n * `el.animate()` with the library's motion rules (5.0, shared by elements and\n * registered effects): motion sensitivity (keyframes adapted, `static` →\n * final frame), intensity (duration scale) and the animation budget. Returns\n * `null` (final frame applied) when nothing should animate.\n */\nexport function animateWithMotion(el: Element, keyframes: Keyframe[], options: KeyframeAnimationOptions): Animation | null {\n if (typeof (el as HTMLElement).animate !== 'function' || config.motionSensitivity === 'static') {\n applyFrame(el as HTMLElement, keyframes[keyframes.length - 1]);\n return null;\n }\n keyframes = adaptKeyframes(keyframes);\n if (active >= maxActive) {\n applyFrame(el as HTMLElement, keyframes[keyframes.length - 1]);\n return null;\n }\n const k = motionScale();\n if (k !== 1 && k > 0 && typeof options.duration === 'number') options = { ...options, duration: options.duration * k, delay: (options.delay || 0) * k };\n const a = (el as HTMLElement).animate(keyframes, options);\n if (options.iterations !== Infinity) {\n active++;\n let done = false;\n const end = () => {\n if (!done) {\n done = true;\n active--;\n }\n };\n a?.finished?.then(end, end);\n }\n return a;\n}\n\n/** Write a keyframe's properties as inline styles (no-WAAPI fallback). */\nexport function applyFrame(el: HTMLElement, frame?: Keyframe): void {\n if (!frame) return;\n for (const [k, v] of Object.entries(frame)) {\n if (k === 'offset' || k === 'easing' || k === 'composite' || v == null) continue;\n (el.style as any)[k] = String(v);\n }\n}\n\n/**\n * Register `tag` with the class built by `make(Base)`. Returns the\n * constructor, the already registered one, or `undefined` without DOM.\n */\nexport function defineElement(\n tag: string,\n make: (Base: BaseCtor) => CustomElementConstructor,\n css?: { id: string; text: string }\n): CustomElementConstructor | undefined {\n if (!canDefine()) return undefined;\n adoptStyles('base', BASE_CSS);\n if (css) adoptStyles(css.id, css.text);\n const existing = customElements.get(tag);\n if (existing) return existing;\n const ctor = make(getBase());\n customElements.define(tag, ctor);\n return ctor;\n}\n\nconst BASE_CSS = '.usa-sr{position:absolute;width:1px;height:1px;margin:-1px;padding:0;overflow:hidden;clip:rect(0 0 0 0);clip-path:inset(50%);white-space:nowrap;border:0}';\n\n/** A visually hidden copy of `text` for screen readers (the animated copy is `aria-hidden`). */\nexport function srText(text: string): HTMLSpanElement {\n const s = document.createElement('span');\n s.className = 'usa-sr';\n s.textContent = text;\n return s;\n}\n\n// --- shared rAF scheduler (4.5) ----------------------------------------------\n// Every component loop goes through one requestAnimationFrame per frame\n// instead of one per element: callbacks are batched, run in order, and a\n// throwing callback no longer starves the others (the first error is rethrown).\nconst frameQueue = new Map<number, FrameRequestCallback>();\nlet frameSeq = 1;\nlet frameHandle: number | ReturnType<typeof setTimeout> | 0 = 0;\nlet frameVia: unknown = null;\nconst frameStats = { frames: 0, callbacks: 0, peak: 0, last: 0 };\nconst frameListeners = new Set<(t: number, dt: number) => void>();\n\nfunction flushFrame(t: number): void {\n frameHandle = 0;\n const dt = frameStats.last && t > frameStats.last ? t - frameStats.last : 16.7;\n frameStats.last = t;\n frameStats.frames++;\n const cbs = Array.from(frameQueue.values());\n frameQueue.clear();\n frameStats.callbacks += cbs.length;\n frameStats.peak = Math.max(frameStats.peak, cbs.length);\n let error: unknown = null;\n for (const cb of cbs) {\n try {\n cb(t);\n } catch (e) {\n error ??= e;\n }\n }\n frameListeners.forEach((fn) => fn(t, dt));\n if (frameListeners.size) requestFlush();\n if (error) throw error;\n}\n\nfunction requestFlush(): void {\n const native = typeof requestAnimationFrame === 'function' ? requestAnimationFrame : null;\n // A stale handle from a replaced requestAnimationFrame (tests, iframes) is dropped.\n if (frameHandle && frameVia === native) return;\n frameVia = native;\n frameHandle = native ? native(flushFrame) : setTimeout(() => flushFrame(now()), 16);\n}\n\n/** requestAnimationFrame through the shared scheduler (timeout fallback in jsdom / hidden documents). */\nexport const raf = (cb: FrameRequestCallback): number => {\n const id = frameSeq++;\n frameQueue.set(id, cb);\n requestFlush();\n return id;\n};\n/** Monotonic time in ms (rAF callback timestamps differ between environments, so loops use this). */\nexport const now = (): number => (typeof performance !== 'undefined' ? performance.now() : Date.now());\nexport const caf = (id: number): void => {\n frameQueue.delete(id);\n};\n\n/** Run `fn(time, dt)` every frame on the shared scheduler until the returned function is called. */\nexport function onFrame(fn: (t: number, dt: number) => void): () => void {\n frameListeners.add(fn);\n requestFlush();\n return () => frameListeners.delete(fn);\n}\n\n/** Scheduler counters: frames flushed, callbacks run, peak callbacks in one frame, pending now. */\nexport function schedulerStats(): { frames: number; callbacks: number; peak: number; pending: number; loops: number } {\n return { frames: frameStats.frames, callbacks: frameStats.callbacks, peak: frameStats.peak, pending: frameQueue.size, loops: frameListeners.size };\n}\n\n// --- active animation budget (4.5) ---------------------------------------------\nlet active = 0;\nlet maxActive = Infinity;\n/** Number of component animations running right now. */\nexport const activeAnimations = (): number => active;\n/** Cap concurrent component animations; extra ones jump to their final frame (`Infinity` = no cap). */\nexport function setAnimationBudget(max: number): void {\n maxActive = max > 0 ? max : Infinity;\n}\n/** The current cap. */\nexport const animationBudget = (): number => maxActive;\n\n// --- on-demand styles (4.5) -----------------------------------------------------\nlet styleLoader: ((tag: string) => void) | null = null;\n/** Called with each element's tag the first time one connects (used by the `lite` build to load CSS on demand). */\nexport function setStyleLoader(fn: ((tag: string) => void) | null): void {\n styleLoader = fn;\n}\n\nexport const EASE_OUT = 'cubic-bezier(0.22, 1, 0.36, 1)';\nexport const EASE_SPRING = 'cubic-bezier(0.34, 1.56, 0.64, 1)';\n/** Windows Fluent \"decelerate\" / \"point-to-point\" curves. */\nexport const FLUENT_DECELERATE = 'cubic-bezier(0.1, 0.9, 0.2, 1)';\n\nconst warned = new Set<string>();\n/** Log a deprecation once per key (console.warn). */\nexport function deprecate(key: string, message: string): void {\n if (warned.has(key)) return;\n warned.add(key);\n if (typeof console !== 'undefined') console.warn(`[motionary] ${message}`);\n}\n\n/**\n * The `kind` attribute of `<usa-spinner>`, `<usa-check>`, `<usa-dialog>` and\n * `<usa-acrylic>` (3.0: `variant` only selects a style variant).\n */\nexport function kindOf(el: Element, valid: readonly string[] | Record<string, unknown>, fallback: string): string {\n const k = el.getAttribute('kind');\n return k && (Array.isArray(valid) ? valid.includes(k) : k in (valid as object)) ? k : fallback;\n}\n\nexport const clamp = (v: number, min: number, max: number): number => Math.min(max, Math.max(min, v));\n","/** Helpers shared by the 6.x widgets (`motionary/components/widgets`). */\nexport const clampN = (v: number, a: number, b: number): number => Math.min(b, Math.max(a, v));\n\n/** Children of `el` that are elements and not created by the widget itself. */\nexport const ownChildren = (el: Element, skip = '[data-usa-part]'): HTMLElement[] =>\n Array.from(el.children).filter((c): c is HTMLElement => c instanceof HTMLElement && !c.matches(skip));\n\n/** Create a part element (marked so re-mounts can find / skip it). */\nexport function part<K extends keyof HTMLElementTagNameMap>(tag: K, cls: string, attrs: Record<string, string> = {}, html = ''): HTMLElementTagNameMap[K] {\n const n = document.createElement(tag);\n n.className = cls;\n n.setAttribute('data-usa-part', '');\n for (const [k, v] of Object.entries(attrs)) n.setAttribute(k, v);\n if (html) n.innerHTML = html;\n return n;\n}\n\n/** Remove the parts a previous mount created. */\nexport const dropParts = (el: Element): void => el.querySelectorAll(':scope > [data-usa-part]').forEach((n) => n.remove());\n\nlet uid = 0;\n/** A document-unique id with a prefix. */\nexport const nextId = (p: string): string => `${p}-${++uid}`;\n\n/** Roving arrow-key focus over `items` (horizontal or vertical); returns the new index or -1. */\nexport function arrowIndex(e: KeyboardEvent, i: number, n: number, vertical = false): number {\n const prev = vertical ? 'ArrowUp' : 'ArrowLeft';\n const next = vertical ? 'ArrowDown' : 'ArrowRight';\n if (e.key === prev) return (i - 1 + n) % n;\n if (e.key === next) return (i + 1) % n;\n if (e.key === 'Home') return 0;\n if (e.key === 'End') return n - 1;\n return -1;\n}\n","import { defineElement, type UsaElement } from '../base';\nimport { clampN, ownChildren, part, dropParts } from './shared';\nimport css from './carousel.css?raw';\n\n/**\n * `<usa-carousel>` (6.2) — swipeable carousel / slider. Each child is a slide.\n * Attributes: `effect` (`slide` · `fade` · `scale` · `cards` — 3D coverflow),\n * `autoplay` (ms; pauses on hover, focus, when off screen and under reduced\n * motion), `loop`, `index`, `label` (\"Carousel\"), `no-controls`, `no-dots`.\n * Drag / swipe with a pointer, arrow keys when focused. API: `next()`,\n * `prev()`, `goTo(i)`, `index`, `length`. Events: `usa:change` (`{ index, from }`).\n * Reduced motion: slides switch without movement.\n */\nexport interface UsaCarouselElement extends UsaElement {\n index: number;\n readonly length: number;\n next(): void;\n prev(): void;\n goTo(i: number): void;\n}\n\nexport const CAROUSEL_EFFECTS = ['slide', 'fade', 'scale', 'cards'] as const;\n\nexport function defineCarousel(tag = 'usa-carousel'): CustomElementConstructor | undefined {\n return defineElement(\n tag,\n (Base) => {\n class UsaCarousel extends Base {\n static get observedAttributes(): string[] {\n return ['effect', 'autoplay', 'loop', 'no-controls', 'no-dots'];\n }\n private _i = 0;\n private _slides: HTMLElement[] = [];\n private _track: HTMLElement | null = null;\n private _timer = 0;\n private _hold = false;\n private _dots: HTMLButtonElement[] = [];\n\n get length(): number {\n return this._slides.length;\n }\n get index(): number {\n return this._i;\n }\n set index(v: number) {\n this.goTo(v);\n }\n get effect(): string {\n const e = this.str('effect', 'slide');\n return (CAROUSEL_EFFECTS as readonly string[]).includes(e) ? e : 'slide';\n }\n\n mount(): void {\n this.dataset.effect = this.effect; // (not the observed attribute: no re-mount loop)\n this.toggleAttribute('data-reduced', this.reduced);\n const old = this.querySelector<HTMLElement>(':scope > .usa-carousel-viewport');\n this._slides = old ? ownChildren(old.firstElementChild as HTMLElement) : ownChildren(this);\n dropParts(this);\n const vp = part('div', 'usa-carousel-viewport', { 'aria-live': this.num('autoplay', 0) ? 'off' : 'polite' });\n const track = part('div', 'usa-carousel-track');\n this._track = track;\n vp.append(track);\n const n = this._slides.length;\n this._slides.forEach((s, i) => {\n s.setAttribute('role', 'group');\n s.setAttribute('aria-roledescription', 'slide');\n s.setAttribute('aria-label', `${i + 1} of ${n}`);\n track.append(s);\n });\n this.prepend(vp);\n this.setAttribute('role', 'region');\n this.setAttribute('aria-roledescription', 'carousel');\n this.setAttribute('aria-label', this.str('label', 'Carousel'));\n if (!this.hasAttribute('tabindex')) this.tabIndex = 0;\n if (n > 1 && !this.flag('no-controls')) {\n const prev = part('button', 'usa-carousel-nav usa-carousel-prev', { type: 'button', 'aria-label': 'Previous slide' }, '‹');\n const next = part('button', 'usa-carousel-nav usa-carousel-next', { type: 'button', 'aria-label': 'Next slide' }, '›');\n this.listen(prev, 'click', () => this.prev());\n this.listen(next, 'click', () => this.next());\n this.append(prev, next);\n }\n this._dots = [];\n if (n > 1 && !this.flag('no-dots')) {\n const dots = part('div', 'usa-carousel-dots', { role: 'group', 'aria-label': 'Choose slide' });\n for (let i = 0; i < n; i++) {\n const d = part('button', 'usa-carousel-dot', { type: 'button', 'aria-label': `Slide ${i + 1}` });\n this.listen(d, 'click', () => this.goTo(i));\n this._dots.push(d);\n dots.append(d);\n }\n this.append(dots);\n }\n this._i = clampN(Math.round(this.num('index', 0)), 0, Math.max(0, n - 1));\n this.layout(0);\n this.listen(this, 'keydown', (e: KeyboardEvent) => {\n if (e.key === 'ArrowRight') (e.preventDefault(), this.next());\n else if (e.key === 'ArrowLeft') (e.preventDefault(), this.prev());\n });\n this.drag(vp);\n const ms = this.num('autoplay', 0);\n if (ms > 0 && n > 1 && !this.reduced) {\n let visible = true;\n this.inView((v) => (visible = v));\n const pause = (on: boolean) => () => (this._hold = on);\n this.listen(this, 'pointerenter', pause(true));\n this.listen(this, 'pointerleave', pause(false));\n this.listen(this, 'focusin', pause(true));\n this.listen(this, 'focusout', pause(false));\n this._timer = window.setInterval(() => {\n if (visible && !this._hold && !document.hidden) this.next();\n }, Math.max(1200, ms));\n this.onCleanup(() => clearInterval(this._timer));\n }\n }\n\n private drag(vp: HTMLElement): void {\n let x0 = 0;\n let dx = 0;\n let id = -1;\n this.listen(vp, 'pointerdown', (e: PointerEvent) => {\n if (this.length < 2 || (e.target as Element).closest('button,a,input')) return;\n id = e.pointerId;\n x0 = e.clientX;\n dx = 0;\n this.setAttribute('data-dragging', '');\n });\n this.listen(window, 'pointermove', (e: PointerEvent) => {\n if (e.pointerId !== id) return;\n dx = e.clientX - x0;\n this.layout(dx / Math.max(1, vp.clientWidth));\n });\n const end = (e: PointerEvent) => {\n if (e.pointerId !== id) return;\n id = -1;\n this.removeAttribute('data-dragging');\n const w = Math.max(1, vp.clientWidth);\n if (Math.abs(dx) > w * 0.18) dx < 0 ? this.next() : this.prev();\n else this.layout(0);\n };\n this.listen(window, 'pointerup', end);\n this.listen(window, 'pointercancel', end);\n }\n\n /** Position the slides (`drag` = fraction of a slide the pointer moved). */\n private layout(drag: number): void {\n const n = this.length;\n const i = this._i;\n const fx = this.effect;\n if (this._track) this._track.style.transform = fx === 'slide' ? `translateX(${(-i + drag) * 100}%)` : '';\n this._slides.forEach((s, k) => {\n let off = k - i + drag;\n if (this.flag('loop') && n > 2) {\n if (off > n / 2) off -= n;\n if (off < -n / 2) off += n;\n }\n const active = k === i;\n s.toggleAttribute('data-active', active);\n s.setAttribute('aria-hidden', String(!active));\n s.inert = !active;\n if (fx === 'slide') {\n s.style.transform = s.style.opacity = s.style.zIndex = s.style.filter = '';\n return;\n }\n const a = Math.abs(off);\n if (fx === 'fade') {\n s.style.opacity = String(clampN(1 - a, 0, 1));\n s.style.transform = '';\n } else if (fx === 'scale') {\n s.style.opacity = String(clampN(1 - a, 0, 1));\n s.style.transform = `scale(${1 + Math.min(1, a) * (off < 0 ? 0.12 : -0.12)})`;\n } else {\n s.style.opacity = a > 2.2 ? '0' : String(1 - Math.min(a, 2) * 0.28);\n s.style.transform = `translateX(${off * 58}%) translateZ(${-a * 140}px) rotateY(${clampN(-off * 38, -60, 60)}deg)`;\n s.style.filter = a > 0.5 ? `brightness(${1 - Math.min(a, 2) * 0.18})` : '';\n }\n s.style.zIndex = String(100 - Math.round(a * 10));\n });\n this._dots.forEach((d, k) => d.setAttribute('aria-current', String(k === i)));\n }\n\n goTo(to: number): void {\n const n = this.length;\n if (!n) return;\n const t = this.flag('loop') ? ((Math.round(to) % n) + n) % n : clampN(Math.round(to), 0, n - 1);\n const from = this._i;\n this._i = t;\n this.layout(0);\n if (t !== from) this.emit('change', { index: t, from });\n }\n next(): void {\n this.goTo(this._i + 1 >= this.length && !this.flag('loop') ? 0 : this._i + 1);\n }\n prev(): void {\n this.goTo(this._i - 1 < 0 && !this.flag('loop') ? this.length - 1 : this._i - 1);\n }\n }\n return UsaCarousel as unknown as CustomElementConstructor;\n },\n { id: 'carousel', text: css }\n );\n}\n","import { defineElement, type UsaElement } from '../base';\nimport { ownChildren, part, nextId, arrowIndex } from './shared';\nimport css from './tab-bar.css?raw';\n\n/**\n * `<usa-tab-bar>` (6.2) — tabs with an animated indicator that stretches\n * from the old tab to the new one (leading edge first, then the trailing edge\n * catches up). Children: `<button>` tabs, and optional panels marked\n * `data-panel` (in the same order). Attributes: `indicator` (`pill` ·\n * `underline` · `glow` · `gooey`), `selected` (index), `label`. Arrow keys,\n * Home/End. API: `select(i)`, `selected`. Events: `usa:change` (`{ index, from }`).\n * Panels slide in from the side of travel. Reduced motion: no stretch / slide.\n */\nexport interface UsaTabBarElement extends UsaElement {\n selected: number;\n select(i: number): void;\n}\n\nexport const TAB_INDICATORS = ['pill', 'underline', 'glow', 'gooey'] as const;\n\nexport function defineTabBar(tag = 'usa-tab-bar'): CustomElementConstructor | undefined {\n return defineElement(\n tag,\n (Base) => {\n class UsaTabBar extends Base {\n static get observedAttributes(): string[] {\n return ['indicator'];\n }\n private _tabs: HTMLElement[] = [];\n private _panels: HTMLElement[] = [];\n private _ink: HTMLElement | null = null;\n private _i = 0;\n\n get selected(): number {\n return this._i;\n }\n set selected(v: number) {\n this.select(v);\n }\n\n mount(): void {\n const ind = this.str('indicator', 'pill');\n this.dataset.indicator = (TAB_INDICATORS as readonly string[]).includes(ind) ? ind : 'pill';\n let list = this.querySelector<HTMLElement>(':scope > .usa-tab-bar-list');\n if (!list) {\n list = part('div', 'usa-tab-bar-list');\n this.prepend(list);\n }\n list.setAttribute('role', 'tablist');\n list.setAttribute('aria-label', this.str('label', 'Tabs'));\n const kids = ownChildren(this);\n this._panels = kids.filter((k) => k.hasAttribute('data-panel'));\n for (const k of kids) if (!k.hasAttribute('data-panel') && k.matches('button,[data-tab]')) list.append(k);\n this._tabs = Array.from(list.children).filter((c): c is HTMLElement => c instanceof HTMLElement && !c.classList.contains('usa-tab-bar-ink'));\n this._ink = list.querySelector('.usa-tab-bar-ink') || part('span', 'usa-tab-bar-ink', { 'aria-hidden': 'true' });\n list.prepend(this._ink);\n this._tabs.forEach((t, i) => {\n t.setAttribute('role', 'tab');\n if (t.localName === 'button' && !t.hasAttribute('type')) t.setAttribute('type', 'button');\n t.id ||= nextId('usa-tab');\n const p = this._panels[i];\n if (p) {\n p.id ||= nextId('usa-tabpanel');\n p.classList.add('usa-tab-bar-panel');\n p.setAttribute('role', 'tabpanel');\n p.setAttribute('aria-labelledby', t.id);\n p.tabIndex = 0;\n t.setAttribute('aria-controls', p.id);\n }\n this.listen(t, 'click', () => this.select(i));\n });\n this.listen(list, 'keydown', (e: KeyboardEvent) => {\n const n = arrowIndex(e, this._i, this._tabs.length);\n if (n < 0) return;\n e.preventDefault();\n this.select(n);\n this._tabs[n].focus();\n });\n this._i = Math.min(Math.max(0, Math.round(this.num('selected', 0))), Math.max(0, this._tabs.length - 1));\n this.sync(-1);\n if (typeof ResizeObserver === 'function') {\n const ro = new ResizeObserver(() => this.place());\n ro.observe(list);\n this.onCleanup(() => ro.disconnect());\n }\n }\n\n private rect(i: number): [number, number] {\n const t = this._tabs[i];\n return t ? [t.offsetLeft, t.offsetWidth] : [0, 0];\n }\n private place(): void {\n if (!this._ink) return;\n const [x, w] = this.rect(this._i);\n this._ink.style.transform = `translateX(${x}px)`;\n this._ink.style.width = `${w}px`;\n }\n\n private sync(from: number): void {\n this._tabs.forEach((t, k) => {\n t.setAttribute('aria-selected', String(k === this._i));\n t.tabIndex = k === this._i ? 0 : -1;\n });\n this._panels.forEach((p, k) => (p.hidden = k !== this._i));\n this.place();\n if (from < 0 || from === this._i || !this._ink || this.reduced) return;\n // stretchy travel: the leading edge arrives first, the trailing edge follows\n const [x0, w0] = this.rect(from);\n const [x1, w1] = this.rect(this._i);\n const right = x1 > x0;\n const mid = right ? { transform: `translateX(${x0}px)`, width: `${x1 + w1 - x0}px` } : { transform: `translateX(${x1}px)`, width: `${x0 + w0 - x1}px` };\n this.motion(this._ink, [{ transform: `translateX(${x0}px)`, width: `${w0}px` }, { ...mid, offset: 0.45 }, { transform: `translateX(${x1}px)`, width: `${w1}px` }], { duration: 480, easing: 'cubic-bezier(.22,1,.36,1)' });\n const p = this._panels[this._i];\n if (p) this.motion(p, [{ opacity: 0, transform: `translateX(${right ? 24 : -24}px)` }, { opacity: 1, transform: 'none' }], { duration: 320, easing: 'cubic-bezier(.22,1,.36,1)' });\n }\n\n select(i: number): void {\n const n = Math.min(Math.max(0, Math.round(i)), this._tabs.length - 1);\n if (n === this._i || n < 0) return;\n const from = this._i;\n this._i = n;\n this.sync(from);\n this.emit('change', { index: n, from });\n }\n }\n return UsaTabBar as unknown as CustomElementConstructor;\n },\n { id: 'tab-bar', text: css }\n );\n}\n","import { prefersReducedMotion, motionScale, raf, caf, now, applyFrame, EASE_SPRING } from '../base';\n\n/**\n * Spring physics core (v2.3). A damped harmonic oscillator integrated in\n * 1 ms steps: `stiffness` (k, N/m), `damping` (c) and `mass` (m). Used by\n * the `<usa-spring>`, `<usa-draggable>` and `<usa-overscroll>` elements and\n * exported for your own animations:\n *\n * - `springEasing()` turns a spring into a CSS `linear()` easing + duration\n * for WAAPI / CSS (falls back to a cubic-bezier overshoot where `linear()`\n * is unsupported);\n * - `spring(el, keyframes, cfg)` animates with it;\n * - `createSpring()` is an interruptible, velocity-preserving value for\n * gestures (drag, inertia, snap).\n */\nexport interface SpringConfig {\n /** Spring stiffness (default 170). Higher = faster, snappier. */\n stiffness?: number;\n /** Damping / friction (default 26). Lower = more bounces. */\n damping?: number;\n /** Mass (default 1). Higher = slower, heavier. */\n mass?: number;\n /** Initial velocity in progress units per second (default 0). */\n velocity?: number;\n /** Rest threshold (default 0.001). */\n precision?: number;\n}\n\nexport type SpringPreset = 'default' | 'gentle' | 'wobbly' | 'stiff' | 'bouncy' | 'slow' | 'molasses';\n\nexport const SPRING_PRESETS: Record<SpringPreset, Required<Pick<SpringConfig, 'stiffness' | 'damping' | 'mass'>>> = {\n default: { stiffness: 170, damping: 26, mass: 1 },\n gentle: { stiffness: 120, damping: 14, mass: 1 },\n wobbly: { stiffness: 180, damping: 12, mass: 1 },\n stiff: { stiffness: 210, damping: 20, mass: 1 },\n bouncy: { stiffness: 300, damping: 10, mass: 1 },\n slow: { stiffness: 280, damping: 60, mass: 1 },\n molasses: { stiffness: 280, damping: 120, mass: 1 },\n};\n\nexport type SpringInput = SpringPreset | SpringConfig | string | undefined;\n\n/** Resolve a preset name or a partial config to a full config. */\nexport function resolveSpring(input?: SpringInput): Required<SpringConfig> {\n const base = typeof input === 'string' ? SPRING_PRESETS[input as SpringPreset] || SPRING_PRESETS.default : { ...SPRING_PRESETS.default, ...(input || {}) };\n const pos = (v: unknown, d: number) => (typeof v === 'number' && Number.isFinite(v) && v > 0 ? v : d);\n const o = (typeof input === 'object' && input) || {};\n return {\n stiffness: pos(base.stiffness, 170),\n damping: Math.max(0, Number.isFinite(base.damping) ? base.damping : 26),\n mass: pos(base.mass, 1),\n velocity: Number.isFinite(o.velocity) ? (o.velocity as number) : 0,\n precision: pos(o.precision, 0.001),\n };\n}\n\n/** One integration step (semi-implicit Euler) towards `to`. Returns [x, v]. */\nexport function stepSpring(cfg: Required<SpringConfig>, x: number, v: number, to: number, dt: number): [number, number] {\n const a = (-cfg.stiffness * (x - to) - cfg.damping * v) / cfg.mass;\n const nv = v + a * dt;\n return [x + nv * dt, nv];\n}\n\nconst cache = new Map<string, { values: number[]; duration: number }>();\n\n/**\n * Sample the spring from 0 to 1 at `fps` (default 60). `values` may exceed 1\n * (overshoot); `duration` is the time to rest, in ms (max 10 s).\n */\nexport function springSamples(input?: SpringInput, fps = 60): { values: number[]; duration: number } {\n const cfg = resolveSpring(input);\n const key = `${cfg.stiffness}|${cfg.damping}|${cfg.mass}|${cfg.velocity}|${cfg.precision}|${fps}`;\n const hit = cache.get(key);\n if (hit) return hit;\n const values = [0];\n let x = 0;\n let v = cfg.velocity;\n const frame = 1000 / fps;\n let t = 0;\n let next = frame;\n while (t < 10000) {\n [x, v] = stepSpring(cfg, x, v, 1, 0.001);\n t += 1;\n if (t >= next) {\n values.push(x);\n next += frame;\n if (Math.abs(1 - x) < cfg.precision && Math.abs(v) < cfg.precision * 10) break;\n }\n }\n values[values.length - 1] = 1;\n const out = { values, duration: Math.round(t) };\n if (cache.size > 64) cache.clear();\n cache.set(key, out);\n return out;\n}\n\n/** `true` when CSS `linear()` easing is supported. */\nexport function supportsLinearEasing(): boolean {\n return typeof CSS !== 'undefined' && typeof CSS.supports === 'function' && CSS.supports('animation-timing-function', 'linear(0, 1)');\n}\n\n/**\n * The spring as `{ easing, duration }` for `el.animate()` / CSS. `easing` is\n * a `linear(…)` function with at most `points` stops (default 48), or a\n * cubic-bezier overshoot where `linear()` is unsupported.\n */\nexport function springEasing(input?: SpringInput, points = 48): { easing: string; duration: number } {\n const { values, duration } = springSamples(input);\n if (!supportsLinearEasing()) return { easing: EASE_SPRING, duration: Math.min(duration, 1200) };\n return { easing: linearEasing(values, points), duration };\n}\n\n/** Build a CSS `linear()` easing from samples (down-sampled to `points`). */\nexport function linearEasing(values: number[], points = 48): string {\n const n = values.length;\n const step = Math.max(1, Math.ceil((n - 1) / Math.max(2, points - 1)));\n const out: string[] = [];\n for (let i = 0; i < n - 1; i += step) out.push(String(Math.round(values[i] * 1000) / 1000));\n out.push('1');\n return `linear(${out.join(', ')})`;\n}\n\n/**\n * Animate `el` between keyframes with spring timing (WAAPI). Under reduced\n * motion the final frame is applied immediately. Returns the Animation (or\n * `null` without WAAPI / under reduced motion).\n */\nexport function spring(el: Element, keyframes: Keyframe[], input?: SpringInput, options: KeyframeAnimationOptions = {}): Animation | null {\n const target = el as HTMLElement;\n if (prefersReducedMotion() || typeof target.animate !== 'function') {\n applyFrame(target, keyframes[keyframes.length - 1]);\n return null;\n }\n const { easing, duration } = springEasing(input);\n return target.animate(keyframes, { duration: duration * motionScale(), easing, fill: 'both', ...options });\n}\n\n/* ------------------------------------------------------------------ */\n/* Interactive springs */\n/* ------------------------------------------------------------------ */\n\nexport interface SpringValueOptions {\n /** Start value (default 0). */\n value?: number;\n /** Spring config or preset (default `'default'`). */\n spring?: SpringInput;\n /** Called with the value every frame (and on `jump()`). */\n onUpdate?: (value: number, velocity: number) => void;\n /** Called when the value comes to rest at its target. */\n onRest?: (value: number) => void;\n}\n\nexport interface SpringValue {\n readonly value: number;\n /** Units per second. */\n readonly velocity: number;\n readonly target: number;\n readonly animating: boolean;\n /** Animate to `target`, optionally with a new initial velocity (units/s). */\n set(target: number, velocity?: number): void;\n /** Jump to `value` with no animation. */\n jump(value: number): void;\n /** Stop where it is. */\n stop(): void;\n /** Change the spring config. */\n configure(spring: SpringInput): void;\n}\n\n/**\n * An interruptible spring-animated number: call `set()` as often as you like,\n * the motion keeps its velocity (like iOS / Framer springs). Reduced motion\n * jumps straight to the target.\n */\nexport function createSpring(opts: SpringValueOptions = {}): SpringValue {\n let cfg = resolveSpring(opts.spring);\n let x = opts.value ?? 0;\n let v = 0;\n let to = x;\n let id = 0;\n let last = 0;\n let running = false;\n const stop = () => {\n if (running) caf(id);\n running = false;\n };\n const loop = () => {\n const t = now();\n let dt = Math.min(64, Math.max(1, t - last));\n last = t;\n while (dt > 0) {\n const s = Math.min(dt, 4);\n [x, v] = stepSpring(cfg, x, v, to, s / 1000);\n dt -= s;\n }\n const scale = Math.max(1, Math.abs(to) * 0.0005);\n if (Math.abs(to - x) < cfg.precision * scale * 10 && Math.abs(v) < cfg.precision * scale * 100) {\n x = to;\n v = 0;\n running = false;\n opts.onUpdate?.(x, 0);\n opts.onRest?.(x);\n return;\n }\n opts.onUpdate?.(x, v);\n id = raf(loop);\n };\n const api: SpringValue = {\n get value() {\n return x;\n },\n get velocity() {\n return v;\n },\n get target() {\n return to;\n },\n get animating() {\n return running;\n },\n set(target, velocity) {\n to = target;\n if (velocity !== undefined && Number.isFinite(velocity)) v = velocity;\n if (prefersReducedMotion()) {\n api.jump(target);\n opts.onRest?.(target);\n return;\n }\n if (!running) {\n running = true;\n last = now();\n id = raf(loop);\n }\n },\n jump(value) {\n stop();\n x = to = value;\n v = 0;\n opts.onUpdate?.(x, 0);\n },\n stop() {\n stop();\n v = 0;\n to = x;\n },\n configure(input) {\n cfg = resolveSpring(input);\n },\n };\n return api;\n}\n\n/* ------------------------------------------------------------------ */\n/* Inertia + snapping */\n/* ------------------------------------------------------------------ */\n\n/**\n * Where a flick at `velocity` (units/s) comes to rest with exponential\n * decay: `value + velocity · timeConstant` (default 0.325 s, iOS-like).\n */\nexport function projectInertia(value: number, velocity: number, timeConstant = 0.325): number {\n return value + velocity * timeConstant;\n}\n\n/** Snap to a grid (`number`) or the nearest of a list of points. */\nexport function snapTo(value: number, to: number | number[] | null | undefined): number {\n if (Array.isArray(to)) {\n if (!to.length) return value;\n return to.reduce((best, p) => (Math.abs(p - value) < Math.abs(best - value) ? p : best), to[0]);\n }\n if (typeof to === 'number' && to > 0) return Math.round(value / to) * to;\n return value;\n}\n\n/** iOS-style rubber-band resistance: how far content moves when pulled `distance` past an edge. */\nexport function rubberBand(distance: number, dimension: number, constant = 0.55): number {\n if (dimension <= 0) return 0;\n const sign = distance < 0 ? -1 : 1;\n const d = Math.abs(distance);\n return sign * (1 - 1 / ((d * constant) / dimension + 1)) * dimension;\n}\n","import { defineElement, type UsaElement } from '../base';\nimport { springEasing } from '../physics/spring';\nimport css from './disclosure.css?raw';\n\n/**\n * `<usa-disclosure>` (6.2) — accordion 2.0 on native `<details>`: the\n * content springs open / closed (height + fade), the chevron flips with an\n * overshoot. Children: `<details><summary>…</summary>…</details>`.\n * Attributes: `multiple` (allow several open; default: one at a time),\n * `spring` (preset, default `gentle`), `variant=\"cards\"`. API: `openAll()`,\n * `closeAll()`, `toggle(i, force?)`. Events: `usa:toggle` (`{ index, open }`).\n * Native semantics (keyboard, find-in-page) kept. Reduced motion: instant.\n */\nexport interface UsaDisclosureElement extends UsaElement {\n toggle(i: number, force?: boolean): void;\n openAll(): void;\n closeAll(): void;\n}\n\nexport function defineDisclosure(tag = 'usa-disclosure'): CustomElementConstructor | undefined {\n return defineElement(\n tag,\n (Base) => {\n class UsaDisclosure extends Base {\n private _anims = new WeakMap<HTMLDetailsElement, Animation>();\n get items(): HTMLDetailsElement[] {\n return Array.from(this.children).filter((c): c is HTMLDetailsElement => c.localName === 'details');\n }\n mount(): void {\n this.listen(this, 'click', (e: MouseEvent) => {\n const s = (e.target as Element).closest('summary');\n const d = s?.parentElement as HTMLDetailsElement | null;\n if (!s || !d || d.parentElement !== this) return;\n e.preventDefault();\n this.set(d, !d.open);\n });\n }\n private set(d: HTMLDetailsElement, open: boolean): void {\n if (open && !this.flag('multiple')) for (const o of this.items) if (o !== d && o.open) this.set(o, false);\n if (d.open === open && !this._anims.get(d)) return;\n const summary = d.querySelector('summary');\n const closedH = summary ? summary.offsetHeight : 0;\n const startH = d.offsetHeight;\n this._anims.get(d)?.cancel();\n if (open) d.open = true;\n const endH = open ? d.scrollHeight : closedH;\n const sp = springEasing(this.str('spring', 'gentle'));\n const a = this.reduced ? null : this.motion(d, [{ height: `${startH}px` }, { height: `${endH}px` }], { duration: Math.min(sp.duration, 700), easing: sp.easing, fill: 'forwards' });\n const body = Array.from(d.children).filter((c) => c.localName !== 'summary');\n if (open && !this.reduced) body.forEach((b) => this.motion(b, [{ opacity: 0, transform: 'translateY(-6px)' }, { opacity: 1, transform: 'none' }], { duration: 300, delay: 60, easing: 'ease-out' }));\n const done = () => {\n this._anims.delete(d);\n if (!open) d.open = false;\n a?.cancel();\n };\n if (a) {\n this._anims.set(d, a);\n a.finished.then(() => this._anims.get(d) === a && done(), () => undefined);\n } else done();\n this.emit('toggle', { index: this.items.indexOf(d), open });\n }\n toggle(i: number, force?: boolean): void {\n const d = this.items[i];\n if (d) this.set(d, force ?? !d.open);\n }\n openAll(): void {\n this.items.forEach((d) => (d.open = true));\n }\n closeAll(): void {\n this.items.forEach((d) => this.set(d, false));\n }\n }\n return UsaDisclosure as unknown as CustomElementConstructor;\n },\n { id: 'disclosure', text: css }\n );\n}\n","import { defineElement, type UsaElement } from '../base';\nimport { ownChildren, part, dropParts } from './shared';\nimport css from './stories.css?raw';\n\n/**\n * `<usa-stories>` (6.2) — story viewer: segmented progress bars at the top,\n * auto-advance, tap the left / right third to go back / forward, press and\n * hold to pause, a pause button (WCAG 2.2.2). Each child is one story.\n * Attributes: `duration` (ms per story, 5000), `loop`, `paused`.\n * API: `next()`, `prev()`, `goTo(i)`, `pause()`, `play()`, `index`.\n * Events: `usa:change` (`{ index }`), `usa:end`. Reduced motion: no\n * auto-advance (paused until the user navigates), cross-fade only.\n */\nexport interface UsaStoriesElement extends UsaElement {\n readonly index: number;\n next(): void;\n prev(): void;\n goTo(i: number): void;\n pause(): void;\n play(): void;\n}\n\nexport function defineStories(tag = 'usa-stories'): CustomElementConstructor | undefined {\n return defineElement(\n tag,\n (Base) => {\n class UsaStories extends Base {\n static get observedAttributes(): string[] {\n return ['duration', 'loop'];\n }\n private _i = 0;\n private _items: HTMLElement[] = [];\n private _bars: HTMLElement[] = [];\n private _fill: Animation | null = null;\n private _btn: HTMLButtonElement | null = null;\n get index(): number {\n return this._i;\n }\n mount(): void {\n dropParts(this);\n this._items = ownChildren(this);\n const bars = part('div', 'usa-stories-bars', { 'aria-hidden': 'true' });\n this._bars = this._items.map(() => {\n const b = part('div', 'usa-stories-bar', {}, '<i></i>');\n bars.append(b);\n return b;\n });\n this._btn = part('button', 'usa-stories-toggle', { type: 'button' });\n this.listen(this._btn, 'click', (e: Event) => {\n e.stopPropagation();\n this.hasAttribute('paused') ? this.play() : this.pause();\n });\n this.append(bars, this._btn);\n this.setAttribute('role', 'region');\n this.setAttribute('aria-roledescription', 'stories');\n if (!this.hasAttribute('aria-label')) this.setAttribute('aria-label', 'Stories');\n if (!this.hasAttribute('tabindex')) this.tabIndex = 0;\n if (this.reduced) this.setAttribute('paused', '');\n let held = false;\n let downAt = 0;\n this.listen(this, 'pointerdown', (e: PointerEvent) => {\n if ((e.target as Element).closest('button,a')) return;\n downAt = performance.now();\n held = !this.hasAttribute('paused');\n if (held) this._fill?.pause();\n });\n this.listen(this, 'pointerup', (e: PointerEvent) => {\n if ((e.target as Element).closest('button,a') || !downAt) return;\n const long = performance.now() - downAt > 350;\n downAt = 0;\n if (held && !this.hasAttribute('paused')) this._fill?.play();\n if (long) return;\n const r = this.getBoundingClientRect();\n e.clientX - r.left < r.width / 3 ? this.prev() : this.next();\n });\n this.listen(this, 'keydown', (e: KeyboardEvent) => {\n if (e.key === 'ArrowRight') this.next();\n else if (e.key === 'ArrowLeft') this.prev();\n else if (e.key === ' ') (e.preventDefault(), this.hasAttribute('paused') ? this.play() : this.pause());\n });\n this.onCleanup(() => this._fill?.cancel());\n this.goTo(Math.min(this._i, Math.max(0, this._items.length - 1)), true);\n }\n private label(): void {\n if (this._btn) {\n const p = this.hasAttribute('paused');\n this._btn.textContent = p ? '▶' : '❚❚';\n this._btn.setAttribute('aria-label', p ? 'Play stories' : 'Pause stories');\n }\n }\n goTo(i: number, initial = false): void {\n const n = this._items.length;\n if (!n) return;\n if (i >= n && !this.flag('loop')) {\n this.emit('end');\n this.pause();\n return;\n }\n const t = ((i % n) + n) % n;\n const changed = t !== this._i || initial;\n this._i = t;\n this._items.forEach((s, k) => {\n s.toggleAttribute('data-active', k === t);\n s.setAttribute('aria-hidden', String(k !== t));\n });\n this._bars.forEach((b, k) => b.toggleAttribute('data-done', k < t));\n this._fill?.cancel();\n const fillEl = this._bars[t]?.firstElementChild as HTMLElement | undefined;\n this._fill = fillEl ? fillEl.animate?.([{ transform: 'scaleX(0)' }, { transform: 'scaleX(1)' }], { duration: Math.max(800, this.num('duration', 5000)), fill: 'forwards' }) ?? null : null;\n if (this._fill) {\n const a = this._fill;\n a.onfinish = () => this._fill === a && this.goTo(this._i + 1);\n if (this.hasAttribute('paused')) a.pause();\n }\n this.label();\n if (changed && !initial) this.emit('change', { index: t });\n }\n next(): void {\n this.goTo(this._i + 1);\n }\n prev(): void {\n this.goTo(Math.max(0, this._i - 1));\n }\n pause(): void {\n this.setAttribute('paused', '');\n this._fill?.pause();\n this.label();\n }\n play(): void {\n this.removeAttribute('paused');\n if (this._fill?.playState === 'finished') this.goTo(this._i + 1 >= this._items.length ? 0 : this._i + 1);\n else this._fill?.play();\n this.label();\n }\n }\n return UsaStories as unknown as CustomElementConstructor;\n },\n { id: 'stories', text: css }\n );\n}\n","/**\n * motionary/components/widgets — the 6.x animated UI widgets, in their own\n * entry so `motionary/components` and `components/lite` keep their size\n * budgets. Every widget is reduced-motion safe and keyboard accessible.\n *\n * ```ts\n * import { defineWidgets } from 'motionary/components/widgets';\n * defineWidgets(); // or defineCarousel(), defineTabBar(), …\n * ```\n * No build step: `<script src=\"https://unpkg.com/motionary@6/dist/widgets.umd.js\">`\n * (registers every widget and every 6.x effect pack; `window.UsaWidgets`).\n */\nimport { defineCarousel, CAROUSEL_EFFECTS, type UsaCarouselElement } from './carousel';\nimport { defineTabBar, TAB_INDICATORS, type UsaTabBarElement } from './tab-bar';\nimport { defineDisclosure, type UsaDisclosureElement } from './disclosure';\nimport { defineStories, type UsaStoriesElement } from './stories';\n\nexport { defineCarousel, defineTabBar, defineDisclosure, defineStories, CAROUSEL_EFFECTS, TAB_INDICATORS };\nexport type { UsaCarouselElement, UsaTabBarElement, UsaDisclosureElement, UsaStoriesElement };\n\n/** The widgets by release (tag → define function). */\nexport const WIDGETS: Record<string, Record<string, (tag?: string) => CustomElementConstructor | undefined>> = {\n '6.2': { 'usa-carousel': defineCarousel, 'usa-tab-bar': defineTabBar, 'usa-disclosure': defineDisclosure, 'usa-stories': defineStories },\n};\n\n/** Every widget tag, in release order. */\nexport const WIDGET_TAGS: string[] = Object.values(WIDGETS).flatMap((g) => Object.keys(g));\n\n/** Register every widget (or only those of one release, e.g. `'6.2'`) under its default tag. */\nexport function defineWidgets(release?: string): void {\n for (const [v, group] of Object.entries(WIDGETS)) if (!release || release === v) for (const [tag, fn] of Object.entries(group)) fn(tag);\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'usa-carousel': UsaCarouselElement;\n 'usa-tab-bar': UsaTabBarElement;\n 'usa-disclosure': UsaDisclosureElement;\n 'usa-stories': UsaStoriesElement;\n }\n}\n","/**\n * 5.0 — unified plugin-style effect registration. Every effect (built-in or\n * yours) is a plain object registered once and played the same way:\n * `playEffect(el, name)`, `bindEffect(el, name, { trigger })` or\n * `<usa-fx effect=\"name\" trigger=\"click\">`. Effects get a context that\n * already applies reduced motion, motion sensitivity, intensity and the\n * animation budget.\n */\nimport { animateWithMotion, prefersReducedMotion, getMotionSensitivity, type MotionSensitivity, type Cleanup } from '../base';\n\nexport const EFFECT_KINDS = ['enter', 'exit', 'attention', 'click', 'hover', 'card', 'loop', 'page', 'background', 'text', 'cursor', 'scroll'] as const;\nexport type EffectKind = (typeof EFFECT_KINDS)[number];\n\nexport const EFFECT_TRIGGERS = ['click', 'hover', 'enter', 'load', 'loop', 'manual'] as const;\nexport type EffectTrigger = (typeof EFFECT_TRIGGERS)[number];\n\nexport interface EffectContext {\n /** Reduced motion applies (OS setting, `minimal` / `static` sensitivity). */\n readonly reduced: boolean;\n readonly sensitivity: MotionSensitivity;\n /** The triggering event (pointer position for click effects), if any. */\n readonly event?: Event;\n /** `el.animate()` with the library's motion rules (may return `null`). */\n animate(el: Element, keyframes: Keyframe[], options: KeyframeAnimationOptions): Animation | null;\n /** Register teardown for long-running effects (loops, listeners). */\n onCleanup(fn: Cleanup): void;\n}\n\nexport interface EffectDefinition<O extends Record<string, unknown> = Record<string, any>> {\n /** Unique, kebab-case. */\n name: string;\n kind: EffectKind;\n /** One line for docs and the gallery. */\n description?: string;\n /** Option defaults (merged under the caller's options). */\n defaults?: Partial<O>;\n /**\n * Under reduced motion: `'skip'` (do nothing — default for loop, background\n * and cursor effects) or `'run'` (run with `ctx.reduced === true`, the\n * effect degrades itself — default for everything else).\n */\n reduced?: 'skip' | 'run';\n /** Play the effect. Return an Animation / Promise to be awaited, or a cleanup. */\n run(el: HTMLElement, options: O, ctx: EffectContext): void | Cleanup | Animation | null | Promise<unknown>;\n}\n\n// 6.2: one table per page (Symbol.for), shared by every bundle that registers effects —\n// e.g. dist/components.umd.js and dist/widgets.umd.js on the same page.\nconst REG_KEY = Symbol.for('use-scroll-animate.effects');\nconst registry: Map<string, EffectDefinition> = ((globalThis as any)[REG_KEY] ||= new Map<string, EffectDefinition>());\n\n/** Register an effect (throws on a duplicate name unless `override`). Returns an unregister function. */\nexport function registerEffect<O extends Record<string, unknown>>(def: EffectDefinition<O>, opts: { override?: boolean } = {}): () => void {\n if (!/^[a-z][a-z0-9-]*$/.test(def.name)) throw new Error(`[motionary] invalid effect name \"${def.name}\"`);\n if (!EFFECT_KINDS.includes(def.kind)) throw new Error(`[motionary] unknown effect kind \"${def.kind}\"`);\n if (registry.has(def.name) && !opts.override) throw new Error(`[motionary] effect \"${def.name}\" is already registered`);\n registry.set(def.name, def as unknown as EffectDefinition);\n return () => {\n if (registry.get(def.name) === (def as unknown)) registry.delete(def.name);\n };\n}\n\n/** Register several effects at once (already-registered names are skipped). */\nexport function registerEffects(defs: EffectDefinition<any>[]): void {\n for (const d of defs) if (!registry.has(d.name)) registerEffect(d);\n}\n\nexport const getEffect = (name: string): EffectDefinition | undefined => registry.get(name);\nexport const hasEffect = (name: string): boolean => registry.has(name);\n/** Registered effects (optionally of one kind), sorted by name. */\nexport function listEffects(kind?: EffectKind): EffectDefinition[] {\n return Array.from(registry.values())\n .filter((d) => !kind || d.kind === kind)\n .sort((a, b) => a.name.localeCompare(b.name));\n}\n\nconst SKIP_BY_DEFAULT: EffectKind[] = ['loop', 'background', 'cursor'];\n\nfunction context(event?: Event): EffectContext & { cleanups: Cleanup[] } {\n const cleanups: Cleanup[] = [];\n return {\n reduced: prefersReducedMotion(),\n sensitivity: getMotionSensitivity(),\n event,\n animate: animateWithMotion,\n onCleanup: (fn) => cleanups.push(fn),\n cleanups,\n };\n}\n\n/**\n * Play a registered effect once on `el`. Resolves when it finishes (or\n * immediately for fire-and-forget effects). Unknown names reject.\n */\nexport async function playEffect(el: HTMLElement, name: string, options: Record<string, unknown> = {}, event?: Event): Promise<void> {\n const def = registry.get(name);\n if (!def) throw new Error(`[motionary] unknown effect \"${name}\" — registered: ${Array.from(registry.keys()).join(', ')}`);\n const ctx = context(event);\n if (ctx.reduced && (def.reduced ?? (SKIP_BY_DEFAULT.includes(def.kind) ? 'skip' : 'run')) === 'skip') return;\n const out = def.run(el, { ...(def.defaults || {}), ...options }, ctx);\n if (out && typeof (out as Animation).finished?.then === 'function') await (out as Animation).finished.catch(() => undefined);\n else if (out && typeof (out as Promise<unknown>).then === 'function') await out;\n}\n\n/**\n * Bind an effect to a trigger on `el`: `click`, `hover` (pointerenter / focus),\n * `enter` (scrolls into view; `once` by default), `load` (now), `loop`\n * (starts now, cleanup stops it) or `manual` (nothing). Returns an unbind.\n */\nexport function bindEffect(el: HTMLElement, name: string, options: Record<string, unknown> & { trigger?: EffectTrigger; once?: boolean } = {}): Cleanup {\n const { trigger = 'click', once, ...opts } = options;\n const def = registry.get(name);\n if (!def) throw new Error(`[motionary] unknown effect \"${name}\"`);\n const offs: Cleanup[] = [];\n let current: Cleanup | null = null;\n const fire = (e?: Event) => {\n const ctx = context(e);\n if (ctx.reduced && (def.reduced ?? (SKIP_BY_DEFAULT.includes(def.kind) ? 'skip' : 'run')) === 'skip') return;\n // A persistent effect (returns a cleanup) replaces its previous run instead of stacking.\n current?.();\n current = null;\n const out = def.run(el, { ...(def.defaults || {}), ...opts }, ctx);\n const stops = [...ctx.cleanups, ...(typeof out === 'function' ? [out as Cleanup] : [])];\n if (stops.length) current = () => stops.splice(0).forEach((f) => f());\n };\n offs.push(() => {\n current?.();\n current = null;\n });\n const on = (type: string, opt?: AddEventListenerOptions) => {\n el.addEventListener(type, fire, opt);\n offs.push(() => el.removeEventListener(type, fire, opt));\n };\n if (trigger === 'click') on('click', { once: !!once });\n else if (trigger === 'hover') (on('pointerenter'), on('focusin'));\n else if (trigger === 'load' || trigger === 'loop') fire();\n else if (trigger === 'enter' && typeof IntersectionObserver !== 'undefined') {\n const io = new IntersectionObserver((entries) => {\n for (const en of entries)\n if (en.isIntersecting) {\n fire();\n if (once !== false) io.disconnect();\n }\n }, { threshold: 0.15 });\n io.observe(el);\n offs.push(() => io.disconnect());\n }\n return () => offs.splice(0).reverse().forEach((f) => f());\n}\n","/** Helpers shared by the 5.x effect packs. */\nimport type { EffectContext } from '../fx/registry';\n\nlet layer: HTMLElement | null = null;\n/** A fixed, pointer-transparent, aria-hidden layer for transient particles. */\nexport function fxLayer(): HTMLElement {\n if (layer?.isConnected) return layer;\n layer = document.createElement('div');\n layer.setAttribute('aria-hidden', 'true');\n layer.setAttribute('data-usa-fx-layer', '');\n layer.style.cssText = 'position:fixed;inset:0;pointer-events:none;overflow:hidden;z-index:2147483000;contain:strict';\n document.body.appendChild(layer);\n return layer;\n}\n\n/** Client point of the triggering pointer event, or the element's center. */\nexport function origin(el: Element, ctx: EffectContext): { x: number; y: number } {\n const e = ctx.event as PointerEvent | MouseEvent | undefined;\n const r = el.getBoundingClientRect();\n return e && typeof e.clientX === 'number' && (e.clientX || e.clientY) ? { x: e.clientX, y: e.clientY } : { x: r.left + r.width / 2, y: r.top + r.height / 2 };\n}\n\n/** Spawn an absolutely positioned node in the fx layer at (x, y); removed when its animation ends. */\nexport function spawn(x: number, y: number, css: string, ctx: EffectContext, frames: Keyframe[], opts: KeyframeAnimationOptions, text = ''): Animation | null {\n const n = document.createElement('span');\n n.style.cssText = `position:absolute;left:${x}px;top:${y}px;${css}`;\n if (text) n.textContent = text;\n fxLayer().appendChild(n);\n const a = ctx.animate(n, frames, { fill: 'forwards', ...opts });\n const rm = () => n.remove();\n if (a) a.finished.then(rm, rm);\n else rm();\n return a;\n}\n\n/** An overlay child covering `el` (makes `el` a positioning context). Returns it and a remover. */\nexport function overlay(el: HTMLElement, css: string): [HTMLElement, () => void] {\n const o = document.createElement('span');\n o.setAttribute('aria-hidden', 'true');\n o.style.cssText = `position:absolute;inset:0;pointer-events:none;border-radius:inherit;${css}`;\n if (getComputedStyle(el).position === 'static') el.style.position = 'relative';\n el.appendChild(o);\n return [o, () => o.remove()];\n}\n\nexport const PALETTE = ['#7c5cff', '#ff5c8a', '#22d3ee', '#facc15', '#34d399'];\nexport const rand = (a: number, b: number): number => a + Math.random() * (b - a);\n\n/** Wait for all animations (ignoring nulls). */\nexport const all = (anims: (Animation | null)[]): Promise<unknown> => Promise.all(anims.filter(Boolean).map((a) => a!.finished.catch(() => undefined)));\n","/**\n * 5.5 — generative backgrounds on Canvas 2D, registered through\n * `registerEffect()` (kind `background`): `flow-field`, `voronoi`,\n * `mesh-gradient`, `starfield`, `metaballs`, `contours`.\n *\n * Shared runner (`canvasBackground()`): a canvas behind the element's content\n * (`aria-hidden`, pointer-transparent), rendering only while visible\n * (IntersectionObserver) and the tab is shown, with adaptive quality — the\n * render scale drops when frames get slow and recovers when they are fast.\n * Reduced motion: one static frame, no loop.\n */\nimport type { EffectContext, EffectDefinition } from '../fx/registry';\nimport { PALETTE } from './shared';\n\nexport interface GenFrame {\n ctx: CanvasRenderingContext2D;\n /** CSS-pixel size of the canvas. */\n w: number;\n h: number;\n /** Seconds since start (0 for the static reduced-motion frame). */\n t: number;\n /** Render scale 0.35–1 (adaptive quality). */\n quality: number;\n /** Per-effect state, created by `init`. */\n state: any;\n /** Merged options. */\n o: any;\n}\n\nexport interface GenerativeSpec {\n init?: (w: number, h: number, o: any) => any;\n draw: (f: GenFrame) => void;\n}\n\n/** Deterministic smooth pseudo-noise in [-1, 1] (sum of sines — cheap, no tables). */\nexport function noise2(x: number, y: number, t = 0): number {\n return (Math.sin(x * 1.7 + t) * Math.cos(y * 1.3 - t * 0.7) + Math.sin((x + y) * 0.9 + t * 0.5) * 0.5 + Math.cos(x * 0.6 - y * 1.1 - t * 0.3) * 0.5) / 2;\n}\n\n/** Hex `#rrggbb` → [r, g, b]. */\nexport function hexRgb(hex: string): [number, number, number] {\n const m = /^#?([\\da-f]{2})([\\da-f]{2})([\\da-f]{2})$/i.exec(hex.trim());\n return m ? [parseInt(m[1], 16), parseInt(m[2], 16), parseInt(m[3], 16)] : [124, 92, 255];\n}\n\n/**\n * Mount a generative canvas behind `el` and run `spec` on it. Returns the\n * cleanup. Exposed for custom generative effects.\n */\nexport function canvasBackground(el: HTMLElement, fx: EffectContext, spec: GenerativeSpec, o: any): () => void {\n const canvas = document.createElement('canvas');\n canvas.setAttribute('aria-hidden', 'true');\n canvas.setAttribute('data-usa-fx-canvas', '');\n canvas.style.cssText = 'position:absolute;inset:0;width:100%;height:100%;pointer-events:none;z-index:-1;border-radius:inherit';\n const restore: [string, string][] = [];\n const set = (k: 'position' | 'isolation', v: string) => {\n restore.push([k, el.style[k]]);\n el.style[k] = v;\n };\n if (getComputedStyle(el).position === 'static') set('position', 'relative');\n set('isolation', 'isolate');\n el.prepend(canvas);\n const ctx = canvas.getContext('2d');\n let raf = 0;\n let visible = true;\n let quality = Math.min(1, Math.max(0.35, Number(o.quality) || 1));\n let w = 0;\n let h = 0;\n let state: any = null;\n const t0 = performance.now();\n let last = t0;\n let slow = 0;\n let fast = 0;\n const resize = () => {\n const r = el.getBoundingClientRect();\n w = Math.max(1, Math.round(r.width));\n h = Math.max(1, Math.round(r.height));\n const dpr = Math.min(2, (typeof devicePixelRatio === 'number' ? devicePixelRatio : 1) || 1) * quality;\n canvas.width = Math.max(1, Math.round(w * dpr));\n canvas.height = Math.max(1, Math.round(h * dpr));\n if (ctx) ctx.setTransform(dpr, 0, 0, dpr, 0, 0);\n state = spec.init ? spec.init(w, h, o) : {};\n };\n const frame = (now: number) => {\n raf = 0;\n if (!ctx) return;\n const dt = now - last;\n last = now;\n // adaptive quality: sustained slow frames lower the render scale, fast ones raise it\n if (dt > 28) slow++;\n else if (dt < 18) fast++;\n if (slow > 20 && quality > 0.35) {\n quality = Math.max(0.35, quality - 0.15);\n slow = fast = 0;\n resize();\n } else if (fast > 240 && quality < 1) {\n quality = Math.min(1, quality + 0.15);\n slow = fast = 0;\n resize();\n }\n spec.draw({ ctx, w, h, t: (now - t0) / 1000, quality, state, o });\n if (visible && !document.hidden) raf = requestAnimationFrame(frame);\n };\n const start = () => {\n if (!raf && ctx && !fx.reduced) {\n last = performance.now();\n raf = requestAnimationFrame(frame);\n }\n };\n resize();\n if (ctx) spec.draw({ ctx, w, h, t: 0, quality, state, o }); // first / static frame\n const io = typeof IntersectionObserver === 'function' ? new IntersectionObserver((es) => {\n visible = es.some((e) => e.isIntersecting);\n if (visible) start();\n }) : null;\n io?.observe(el);\n const ro = typeof ResizeObserver === 'function' ? new ResizeObserver(() => {\n resize();\n if (ctx && fx.reduced) spec.draw({ ctx, w, h, t: 0, quality, state, o });\n }) : null;\n ro?.observe(el);\n const vis = () => !document.hidden && visible && start();\n document.addEventListener('visibilitychange', vis);\n start();\n return () => {\n cancelAnimationFrame(raf);\n raf = 0;\n io?.disconnect();\n ro?.disconnect();\n document.removeEventListener('visibilitychange', vis);\n canvas.remove();\n for (const [k, v] of restore) el.style[k as 'position'] = v;\n };\n}\n\nconst gen = (name: string, description: string, defaults: Record<string, unknown>, spec: GenerativeSpec): EffectDefinition => ({\n name,\n kind: 'background',\n description,\n reduced: 'run',\n defaults: { colors: PALETTE, background: '#0b0d12', speed: 1, quality: 1, ...defaults },\n run: (el, o: any, ctx) => canvasBackground(el, ctx, spec, o),\n});\n\n/** Low-resolution scalar field → ImageData, drawn scaled up (used by voronoi / metaballs / contours). */\nfunction field(f: GenFrame, cell: number, px: (x: number, y: number, out: Uint8ClampedArray, i: number) => void): void {\n const step = Math.max(2, Math.round(cell / f.quality));\n const cw = Math.max(1, Math.ceil(f.w / step));\n const ch = Math.max(1, Math.ceil(f.h / step));\n const st = f.state;\n if (!st.buf || st.buf.width !== cw || st.buf.height !== ch) {\n st.buf = document.createElement('canvas');\n st.buf.width = cw;\n st.buf.height = ch;\n st.bctx = st.buf.getContext('2d');\n st.img = st.bctx?.createImageData(cw, ch);\n }\n if (!st.bctx || !st.img) return;\n const d = st.img.data as Uint8ClampedArray;\n for (let y = 0; y < ch; y++) for (let x = 0; x < cw; x++) px(x * step, y * step, d, (y * cw + x) * 4);\n st.bctx.putImageData(st.img, 0, 0);\n f.ctx.imageSmoothingEnabled = true;\n f.ctx.drawImage(st.buf, 0, 0, f.w, f.h);\n}\n\nexport const GENERATIVE_FX: EffectDefinition[] = [\n gen('flow-field', 'Particles drift along a slowly changing flow field, leaving silky trails.', { count: 600, fade: 0.06 }, {\n init: (w, h, o) => ({ p: Array.from({ length: o.count }, () => [Math.random() * w, Math.random() * h]) }),\n draw: ({ ctx, w, h, t, state, o, quality }) => {\n ctx.fillStyle = o.background;\n ctx.globalAlpha = t === 0 ? 1 : o.fade;\n ctx.fillRect(0, 0, w, h);\n ctx.globalAlpha = 0.8;\n const n = Math.round(state.p.length * quality);\n const steps = t === 0 ? 40 : 1;\n for (let i = 0; i < n; i++) {\n const q = state.p[i];\n ctx.fillStyle = o.colors[i % o.colors.length];\n for (let s = 0; s < steps; s++) {\n const a = noise2(q[0] * 0.004, q[1] * 0.004, t * 0.15 * o.speed) * Math.PI * 2;\n q[0] += Math.cos(a) * 1.2 * o.speed;\n q[1] += Math.sin(a) * 1.2 * o.speed;\n if (q[0] < 0 || q[0] > w || q[1] < 0 || q[1] > h) (q[0] = Math.random() * w), (q[1] = Math.random() * h);\n ctx.fillRect(q[0], q[1], 1.4, 1.4);\n }\n }\n ctx.globalAlpha = 1;\n },\n }),\n gen('voronoi', 'Drifting Voronoi cells in the palette, with darker borders.', { seeds: 14, cell: 6 }, {\n init: (w, h, o) => ({ s: Array.from({ length: o.seeds }, (_, i) => ({ x: Math.random() * w, y: Math.random() * h, vx: Math.random() - 0.5, vy: Math.random() - 0.5, c: hexRgb(o.colors[i % o.colors.length]) })) }),\n draw: (f) => {\n const { w, h, state, o } = f;\n for (const s of state.s) {\n s.x += s.vx * o.speed;\n s.y += s.vy * o.speed;\n if (s.x < 0 || s.x > w) s.vx *= -1;\n if (s.y < 0 || s.y > h) s.vy *= -1;\n }\n field(f, o.cell, (x, y, d, i) => {\n let b = Infinity;\n let b2 = Infinity;\n let c = state.s[0].c;\n for (const s of state.s) {\n const dd = (s.x - x) ** 2 + (s.y - y) ** 2;\n if (dd < b) (b2 = b), (b = dd), (c = s.c);\n else if (dd < b2) b2 = dd;\n }\n const edge = Math.sqrt(b2) - Math.sqrt(b) < 6 ? 0.55 : 1;\n d[i] = c[0] * edge;\n d[i + 1] = c[1] * edge;\n d[i + 2] = c[2] * edge;\n d[i + 3] = 255;\n });\n },\n }),\n gen('mesh-gradient', 'Soft blobs of colour orbit and blend into a living mesh gradient.', { blobs: 4, blur: 0.65 }, {\n draw: ({ ctx, w, h, t, o }) => {\n ctx.fillStyle = o.background;\n ctx.fillRect(0, 0, w, h);\n const r = Math.max(w, h) * o.blur;\n for (let i = 0; i < o.blobs; i++) {\n const a = t * 0.25 * o.speed + (i * Math.PI * 2) / o.blobs;\n const x = w / 2 + Math.cos(a * (1 + i * 0.13)) * w * 0.32;\n const y = h / 2 + Math.sin(a * (0.8 + i * 0.11)) * h * 0.32;\n const [cr, cg, cb] = hexRgb(o.colors[i % o.colors.length]);\n const g = ctx.createRadialGradient(x, y, 0, x, y, r);\n g.addColorStop(0, `rgba(${cr},${cg},${cb},0.7)`);\n g.addColorStop(1, `rgba(${cr},${cg},${cb},0)`);\n ctx.fillStyle = g;\n ctx.fillRect(0, 0, w, h);\n }\n },\n }),\n gen('starfield', 'Stars stream toward the viewer (warp speed with `speed: 4`).', { stars: 400, color: '#ffffff' }, {\n init: (_w, _h, o) => ({ s: Array.from({ length: o.stars }, () => [Math.random() * 2 - 1, Math.random() * 2 - 1, Math.random()]) }),\n draw: ({ ctx, w, h, t, state, o, quality }) => {\n ctx.fillStyle = o.background;\n ctx.fillRect(0, 0, w, h);\n ctx.fillStyle = o.color;\n const n = Math.round(state.s.length * quality);\n for (let i = 0; i < n; i++) {\n const s = state.s[i];\n if (t > 0) s[2] -= 0.004 * o.speed;\n if (s[2] <= 0.01) (s[0] = Math.random() * 2 - 1), (s[1] = Math.random() * 2 - 1), (s[2] = 1);\n const x = w / 2 + (s[0] / s[2]) * w * 0.5;\n const y = h / 2 + (s[1] / s[2]) * h * 0.5;\n if (x < 0 || x > w || y < 0 || y > h) continue;\n const size = (1 - s[2]) * 2.6;\n ctx.globalAlpha = Math.min(1, (1 - s[2]) * 1.6);\n ctx.fillRect(x, y, size, size);\n }\n ctx.globalAlpha = 1;\n },\n }),\n gen('metaballs', 'Gooey blobs that merge and split (low-resolution field, scaled up).', { balls: 6, cell: 5, threshold: 1 }, {\n init: (w, h, o) => ({ b: Array.from({ length: o.balls }, () => ({ x: Math.random() * w, y: Math.random() * h, vx: (Math.random() - 0.5) * 1.6, vy: (Math.random() - 0.5) * 1.6, r: Math.min(w, h) * (0.08 + Math.random() * 0.08) })) }),\n draw: (f) => {\n const { w, h, state, o } = f;\n for (const b of state.b) {\n b.x += b.vx * o.speed;\n b.y += b.vy * o.speed;\n if (b.x < 0 || b.x > w) b.vx *= -1;\n if (b.y < 0 || b.y > h) b.vy *= -1;\n }\n const [ar, ag, ab] = hexRgb(o.colors[0]);\n const [br, bg, bb] = hexRgb(o.colors[1] || o.colors[0]);\n const [kr, kg, kb] = hexRgb(o.background);\n field(f, o.cell, (x, y, d, i) => {\n let v = 0;\n for (const b of state.b) v += (b.r * b.r) / ((b.x - x) ** 2 + (b.y - y) ** 2 + 1);\n const inside = v >= o.threshold;\n const k = Math.min(1, (v - o.threshold) * 0.8);\n d[i] = inside ? ar + (br - ar) * k : kr;\n d[i + 1] = inside ? ag + (bg - ag) * k : kg;\n d[i + 2] = inside ? ab + (bb - ab) * k : kb;\n d[i + 3] = 255;\n });\n },\n }),\n gen('contours', 'Topographic contour lines over a slowly shifting height field.', { levels: 9, cell: 4, color: '#7c5cff' }, {\n draw: (f) => {\n const { t, o } = f;\n const [lr, lg, lb] = hexRgb(o.color);\n const [kr, kg, kb] = hexRgb(o.background);\n const z = (x: number, y: number) => (noise2(x * 0.006, y * 0.006, t * 0.2 * o.speed) + 1) / 2;\n const step = Math.max(2, Math.round(o.cell / f.quality));\n field(f, o.cell, (x, y, d, i) => {\n const a = Math.floor(z(x, y) * o.levels);\n const line = a !== Math.floor(z(x + step, y) * o.levels) || a !== Math.floor(z(x, y + step) * o.levels);\n const shade = 0.12 + (a / o.levels) * 0.18;\n d[i] = line ? lr : kr + (lr - kr) * shade;\n d[i + 1] = line ? lg : kg + (lg - kg) * shade;\n d[i + 2] = line ? lb : kb + (lb - kb) * shade;\n d[i + 3] = 255;\n });\n },\n }),\n];\n","/**\n * 6.2 — tiny WebGL2 full-screen shader runner with a Canvas 2D fallback, shared\n * by the 6.x GPU effect packs. One canvas behind the element (aria-hidden,\n * pointer-transparent), renders only while visible and the tab is shown,\n * adaptive resolution, pointer uniform, and a static first frame under reduced\n * motion. No WebGL2 (or a lost context / compile error) → the Canvas 2D\n * `fallback` spec runs through `canvasBackground()` instead.\n * `el.dataset.usaBackend` tells which one is active: `webgl2` or `canvas`.\n */\nimport type { EffectContext } from '../fx/registry';\nimport { canvasBackground, hexRgb, noise2, type GenerativeSpec } from '../effects/generative';\n\nexport { hexRgb, noise2 };\n\n/** GLSL shared by every shader: uniforms, hash, value noise, fbm. */\nexport const GLSL_HEAD = `#version 300 es\nprecision highp float;\nuniform vec2 u_res;uniform float u_t;uniform vec3 u_c0,u_c1,u_c2;uniform vec2 u_ptr;uniform float u_speed,u_scale;\nout vec4 o;\nfloat h(vec2 p){return fract(sin(dot(p,vec2(127.1,311.7)))*43758.5453);}\nfloat n(vec2 p){vec2 i=floor(p),f=fract(p);f=f*f*(3.-2.*f);return mix(mix(h(i),h(i+vec2(1,0)),f.x),mix(h(i+vec2(0,1)),h(i+1.),f.x),f.y);}\nfloat fbm(vec2 p){float v=0.,a=.5;for(int k=0;k<5;k++){v+=a*n(p);p=p*2.03+vec2(1.7,9.2);a*=.5;}return v;}\n`;\nconst VERT = `#version 300 es\nin vec2 a;void main(){gl_Position=vec4(a,0.,1.);}`;\n\nexport interface ShaderSpec {\n /** GLSL body of `main()`: `uv` (0–1), `p` (aspect-corrected, scaled), `t` (s × speed) are in scope; write `o`. */\n body: string;\n /** Canvas 2D fallback. */\n fallback: GenerativeSpec;\n}\n\n/** `true` when this browser can create a WebGL2 context (cached). */\nlet gl2: boolean | null = null;\nexport function supportsWebGL2(): boolean {\n if (gl2 !== null) return gl2;\n try {\n gl2 = typeof document !== 'undefined' && !!document.createElement('canvas').getContext('webgl2');\n } catch {\n gl2 = false;\n }\n return gl2;\n}\n\nfunction compile(gl: WebGL2RenderingContext, frag: string): WebGLProgram | null {\n const mk = (type: number, src: string) => {\n const s = gl.createShader(type)!;\n gl.shaderSource(s, src);\n gl.compileShader(s);\n return gl.getShaderParameter(s, gl.COMPILE_STATUS) ? s : null;\n };\n const v = mk(gl.VERTEX_SHADER, VERT);\n const f = mk(gl.FRAGMENT_SHADER, frag);\n if (!v || !f) return null;\n const p = gl.createProgram()!;\n gl.attachShader(p, v);\n gl.attachShader(p, f);\n gl.bindAttribLocation(p, 0, 'a');\n gl.linkProgram(p);\n return gl.getProgramParameter(p, gl.LINK_STATUS) ? p : null;\n}\n\nconst rgb = (c: string): [number, number, number] => hexRgb(c).map((v) => v / 255) as [number, number, number];\n\n/**\n * Mount a shader background behind `el` (options: `colors` [3 hex], `speed`,\n * `scale`, `quality`, `backend` = `'auto' | 'webgl2' | 'canvas'`). Returns the cleanup.\n */\nexport function shaderBackground(el: HTMLElement, fx: EffectContext, spec: ShaderSpec, o: any): () => void {\n const fallback = () => {\n el.dataset.usaBackend = 'canvas';\n const stop = canvasBackground(el, fx, spec.fallback, o);\n return () => {\n stop();\n delete el.dataset.usaBackend;\n };\n };\n if (o.backend === 'canvas' || !supportsWebGL2()) return fallback();\n const canvas = document.createElement('canvas');\n const gl = canvas.getContext('webgl2', { alpha: false, antialias: false, preserveDrawingBuffer: false }) as WebGL2RenderingContext | null;\n const prog = gl && compile(gl, `${GLSL_HEAD}void main(){vec2 uv=gl_FragCoord.xy/u_res;vec2 p=uv*vec2(u_res.x/u_res.y,1.)*u_scale;float t=u_t*u_speed;${spec.body}}`);\n if (!gl || !prog) return fallback();\n el.dataset.usaBackend = 'webgl2';\n canvas.setAttribute('aria-hidden', 'true');\n canvas.setAttribute('data-usa-fx-canvas', '');\n canvas.style.cssText = 'position:absolute;inset:0;width:100%;height:100%;pointer-events:none;z-index:-1;border-radius:inherit';\n const restore: [string, string][] = [];\n const set = (k: 'position' | 'isolation', v: string) => {\n restore.push([k, el.style[k]]);\n el.style[k] = v;\n };\n if (getComputedStyle(el).position === 'static') set('position', 'relative');\n set('isolation', 'isolate');\n el.prepend(canvas);\n gl.useProgram(prog);\n const buf = gl.createBuffer();\n gl.bindBuffer(gl.ARRAY_BUFFER, buf);\n gl.bufferData(gl.ARRAY_BUFFER, new Float32Array([-1, -1, 3, -1, -1, 3]), gl.STATIC_DRAW);\n gl.enableVertexAttribArray(0);\n gl.vertexAttribPointer(0, 2, gl.FLOAT, false, 0, 0);\n const U = (n: string) => gl.getUniformLocation(prog, n);\n const cols: string[] = o.colors || [];\n ['u_c0', 'u_c1', 'u_c2'].forEach((u, i) => gl.uniform3fv(U(u), rgb(cols[i] || cols[0] || '#7c5cff')));\n gl.uniform1f(U('u_speed'), Number(o.speed) || 1);\n gl.uniform1f(U('u_scale'), Number(o.scale) || 3);\n const uRes = U('u_res');\n const uT = U('u_t');\n const uPtr = U('u_ptr');\n let ptr: [number, number] = [0.5, 0.5];\n let quality = Math.min(1, Math.max(0.3, Number(o.quality) || 0.75));\n let raf = 0;\n let visible = true;\n let slow = 0;\n let last = 0;\n const t0 = performance.now();\n const resize = () => {\n const r = el.getBoundingClientRect();\n const dpr = Math.min(2, devicePixelRatio || 1) * quality;\n canvas.width = Math.max(1, Math.round(r.width * dpr));\n canvas.height = Math.max(1, Math.round(r.height * dpr));\n gl.viewport(0, 0, canvas.width, canvas.height);\n gl.uniform2f(uRes, canvas.width, canvas.height);\n };\n const draw = (t: number) => {\n gl.uniform1f(uT, t);\n gl.uniform2f(uPtr, ptr[0], ptr[1]);\n gl.drawArrays(gl.TRIANGLES, 0, 3);\n };\n const frame = (now: number) => {\n raf = 0;\n if (last && now - last > 34 && ++slow > 24 && quality > 0.3) {\n quality = Math.max(0.3, quality - 0.15);\n slow = 0;\n resize();\n }\n last = now;\n draw((now - t0) / 1000);\n if (visible && !document.hidden) raf = requestAnimationFrame(frame);\n };\n const start = () => {\n if (!raf && !fx.reduced) raf = requestAnimationFrame(frame);\n };\n resize();\n draw(fx.reduced ? 7 : 0);\n const move = (e: PointerEvent) => {\n const r = el.getBoundingClientRect();\n ptr = [(e.clientX - r.left) / Math.max(1, r.width), 1 - (e.clientY - r.top) / Math.max(1, r.height)];\n };\n el.addEventListener('pointermove', move);\n const io = typeof IntersectionObserver === 'function' ? new IntersectionObserver((es) => (visible = es.some((e) => e.isIntersecting)) && start()) : null;\n io?.observe(el);\n const ro = typeof ResizeObserver === 'function' ? new ResizeObserver(() => (resize(), fx.reduced && draw(7))) : null;\n ro?.observe(el);\n const vis = () => !document.hidden && visible && start();\n document.addEventListener('visibilitychange', vis);\n let swapped: (() => void) | null = null;\n const lost = (e: Event) => {\n e.preventDefault();\n stop();\n swapped = fallback();\n };\n canvas.addEventListener('webglcontextlost', lost);\n const stop = () => {\n cancelAnimationFrame(raf);\n raf = 0;\n io?.disconnect();\n ro?.disconnect();\n el.removeEventListener('pointermove', move);\n document.removeEventListener('visibilitychange', vis);\n canvas.removeEventListener('webglcontextlost', lost);\n canvas.remove();\n for (const [k, v] of restore) el.style[k as 'position'] = v;\n };\n start();\n return () => {\n if (swapped) return swapped();\n stop();\n gl.getExtension('WEBGL_lose_context')?.loseContext();\n delete el.dataset.usaBackend;\n };\n}\n\n/**\n * Canvas 2D fallback for a scalar field: `color(x, y, t)` (x, y in 0–1)\n * returns `[r, g, b]` (0–255), sampled on a coarse grid and scaled up smoothly.\n */\nexport function fieldFallback(color: (x: number, y: number, t: number, o: any) => [number, number, number], cell = 8): GenerativeSpec {\n return {\n init: (w, h) => {\n const c = document.createElement('canvas');\n c.width = Math.max(2, Math.ceil(w / cell));\n c.height = Math.max(2, Math.ceil(h / cell));\n const x = c.getContext('2d');\n return { c, x, img: x?.createImageData(c.width, c.height) };\n },\n draw: ({ ctx, w, h, t, state, o }) => {\n const { c, x, img } = state;\n if (!x || !img) return;\n const d = img.data;\n for (let j = 0; j < c.height; j++)\n for (let i = 0; i < c.width; i++) {\n const [r, g, b] = color(i / c.width, 1 - j / c.height, t * (Number(o.speed) || 1), o);\n const k = (j * c.width + i) * 4;\n d[k] = r;\n d[k + 1] = g;\n d[k + 2] = b;\n d[k + 3] = 255;\n }\n x.putImageData(img, 0, 0);\n ctx.imageSmoothingEnabled = true;\n ctx.drawImage(c, 0, 0, w, h);\n },\n };\n}\n\n/** Linear blend of two `[r,g,b]` colors. */\nexport const mixRgb = (a: number[], b: number[], k: number): [number, number, number] => {\n const q = Math.min(1, Math.max(0, k));\n return [a[0] + (b[0] - a[0]) * q, a[1] + (b[1] - a[1]) * q, a[2] + (b[2] - a[2]) * q];\n};\n/** Smoothstep. */\nexport const sstep = (a: number, b: number, x: number): number => {\n const t = Math.min(1, Math.max(0, (x - a) / (b - a)));\n return t * t * (3 - 2 * t);\n};\n/** fbm-like noise in 0–1 built on `noise2`. */\nexport const fbm2 = (x: number, y: number, t = 0): number => 0.5 + 0.35 * noise2(x, y, t) + 0.15 * noise2(x * 2.1 + 3, y * 2.1 - 1, t * 1.3);\n","/**\n * 6.2 — GPU effect pack (`motionary/components/fx-gpu`), registered through\n * `registerEffect()`:\n *\n * - WebGL2 shaders with a Canvas 2D fallback (kind `background`): `fluid`\n * (domain-warped fluid that swirls around the pointer), `smoke`, `fire`,\n * `ink` (ink blooming in water), `fireflies`.\n * - Canvas 2D particles (kind `background`): `sakura` (falling cherry\n * petals), `leaves` (tumbling autumn leaves).\n * - `splash` (kind `click`): droplets + a ring burst from the pointer.\n *\n * Every background renders only while visible, lowers its resolution when\n * frames are slow, and draws one static frame under reduced motion.\n */\nimport type { EffectContext, EffectDefinition } from '../fx/registry';\nimport { registerEffects } from '../fx/registry';\nimport { canvasBackground, type GenerativeSpec } from '../effects/generative';\nimport { origin, spawn, rand, all } from '../effects/shared';\nimport { shaderBackground, fieldFallback, hexRgb, mixRgb, sstep, fbm2, type ShaderSpec } from './gl';\n\nconst shader = (name: string, description: string, colors: string[], spec: ShaderSpec, extra: Record<string, unknown> = {}): EffectDefinition => ({\n name,\n kind: 'background',\n description,\n reduced: 'run',\n defaults: { colors, speed: 1, scale: 3, quality: 0.75, backend: 'auto', ...extra },\n run: (el: HTMLElement, o: any, ctx: EffectContext) => {\n const stop = shaderBackground(el, ctx, spec, o);\n ctx.onCleanup(stop);\n return stop;\n },\n});\n\nconst C = (o: any) => (o.colors as string[]).map(hexRgb);\n\nexport const GPU_FX: EffectDefinition[] = [\n shader('fluid', 'Domain-warped fluid colors that swirl around the pointer (WebGL2, Canvas 2D fallback).', ['#1b1446', '#7c5cff', '#22d3ee'], {\n body: 'vec2 q=vec2(fbm(p+t*.1),fbm(p+vec2(5.2,1.3)-t*.08));vec2 d=uv-u_ptr;q+=.5*exp(-dot(d,d)*14.)*vec2(sin(t*1.3),cos(t*1.1));float f=fbm(p+3.*q+t*.05);vec3 c=mix(u_c0,u_c1,clamp(f*1.7-.2,0.,1.));c=mix(c,u_c2,clamp(length(q)*1.1-.45,0.,1.));o=vec4(c,1.);',\n fallback: fieldFallback((x, y, t, o) => {\n const [a, b, c] = C(o);\n const q = fbm2(x * 3 + t * 0.1, y * 3);\n const f = fbm2(x * 3 + q * 2, y * 3 + q * 2, t * 0.3);\n return mixRgb(mixRgb(a, b, f * 1.7 - 0.2), c, q * 1.1 - 0.45);\n }),\n }),\n shader('smoke', 'Soft smoke rising and curling (WebGL2, Canvas 2D fallback).', ['#0f172a', '#cbd5e1', '#64748b'], {\n body: 'vec2 s=p;s.y-=t*.25;float f=fbm(s+fbm(s*1.5+t*.1));float a=smoothstep(.38,.92,f)*(1.05-uv.y*.55);o=vec4(mix(u_c0,mix(u_c2,u_c1,f),a),1.);',\n fallback: fieldFallback((x, y, t, o) => {\n const [bg, sm, ac] = C(o);\n const f = fbm2(x * 3, y * 3 - t * 0.25, t * 0.2);\n return mixRgb(bg, mixRgb(ac, sm, f), sstep(0.38, 0.92, f) * (1.05 - y * 0.55));\n }),\n }),\n shader('fire', 'Licking flames from the bottom edge (WebGL2, Canvas 2D fallback).', ['#140404', '#e2401b', '#fbbf24'], {\n body: 'vec2 s=p*vec2(1.,1.4);s.y-=t*.9;float f=fbm(s*1.6+fbm(s*2.+t*.3));float g=f*(1.3-uv.y)*1.7-.3;vec3 c=mix(u_c0,u_c1,smoothstep(0.,.4,g));c=mix(c,u_c2,smoothstep(.35,.72,g));c=mix(c,vec3(1.,.96,.82),smoothstep(.72,1.05,g));o=vec4(c,1.);',\n fallback: fieldFallback((x, y, t, o) => {\n const [a, b, c] = C(o);\n const g = fbm2(x * 4, y * 5 - t * 0.9, t) * (1.3 - y) * 1.7 - 0.3;\n return mixRgb(mixRgb(mixRgb(a, b, sstep(0, 0.4, g)), c, sstep(0.35, 0.72, g)), [255, 245, 210], sstep(0.72, 1.05, g));\n }, 6),\n }),\n shader('ink', 'Ink blooming and drifting in water on a paper background (WebGL2, Canvas 2D fallback).', ['#f6f1e7', '#1e1b4b', '#be185d'], {\n body: 'vec2 q=vec2(fbm(p*.8+t*.04),fbm(p*.8+vec2(3.1,7.7)+t*.05));float f=fbm(p*1.2+2.5*q);float b=smoothstep(.48,.74,f+.12*sin(t*.4));o=vec4(mix(u_c0,mix(u_c1,u_c2,clamp(q.x*1.4-.2,0.,1.)),b),1.);',\n fallback: fieldFallback((x, y, t, o) => {\n const [bg, i1, i2] = C(o);\n const q = fbm2(x * 2 + t * 0.04, y * 2);\n const f = fbm2(x * 3 + q * 2.5, y * 3 + q * 2.5, t * 0.1);\n return mixRgb(bg, mixRgb(i1, i2, q * 1.4 - 0.2), sstep(0.48, 0.74, f));\n }),\n }, { scale: 2.4 }),\n shader('fireflies', 'Glowing fireflies wandering and blinking at dusk (WebGL2, Canvas 2D fallback).', ['#06121f', '#facc15', '#a3e635'], {\n body: 'vec3 c=u_c0*(.55+.45*uv.y);float ar=u_res.x/u_res.y;for(int i=0;i<28;i++){float fi=float(i);vec2 b=vec2(h(vec2(fi,1.)),h(vec2(fi,2.)));vec2 pos=fract(b+.07*vec2(sin(t*.3+fi),cos(t*.23+fi*1.7)));vec2 d=(uv-pos)*vec2(ar,1.);float k=.5+.5*sin(t*(1.+h(vec2(fi,3.))*2.)+fi*2.1);c+=mix(u_c1,u_c2,h(vec2(fi,4.)))*k*.00055/(dot(d,d)+.0003);}o=vec4(min(c,vec3(1.)),1.);',\n fallback: {\n init: (w, h) => ({ f: Array.from({ length: 28 }, () => [Math.random(), Math.random(), Math.random() * 6, Math.random()]) }),\n draw: ({ ctx, w, h, t, state, o }) => {\n ctx.fillStyle = o.colors[0];\n ctx.fillRect(0, 0, w, h);\n for (const [bx, by, ph, hue] of state.f) {\n const x = ((bx + 0.07 * Math.sin(t * 0.3 + ph)) % 1) * w;\n const y = ((by + 0.07 * Math.cos(t * 0.23 + ph)) % 1) * h;\n const k = 0.5 + 0.5 * Math.sin(t * 2 + ph * 3);\n const g = ctx.createRadialGradient(x, y, 0, x, y, 14);\n g.addColorStop(0, hue > 0.5 ? o.colors[1] : o.colors[2]);\n g.addColorStop(1, 'transparent');\n ctx.globalAlpha = 0.25 + k * 0.75;\n ctx.fillStyle = g;\n ctx.fillRect(x - 14, y - 14, 28, 28);\n }\n ctx.globalAlpha = 1;\n },\n },\n }),\n];\n\ninterface Flake {\n x: number;\n y: number;\n r: number;\n a: number;\n va: number;\n vy: number;\n ph: number;\n c: string;\n}\nconst fall = (draw: (ctx: CanvasRenderingContext2D, f: Flake) => void): GenerativeSpec => ({\n init: (w, h, o) => ({ f: Array.from({ length: o.count }, (): Flake => ({ x: Math.random() * w, y: Math.random() * h, r: rand(5, 11) * (o.size || 1), a: rand(0, 6.3), va: rand(-1.5, 1.5), vy: rand(18, 46), ph: rand(0, 6.3), c: o.colors[Math.floor(Math.random() * o.colors.length)] })), last: 0 }),\n draw: ({ ctx, w, h, t, state, o, quality }) => {\n const dt = state.last ? Math.min(0.05, t - state.last) : 0;\n state.last = t;\n ctx.clearRect(0, 0, w, h);\n const n = Math.max(4, Math.round(state.f.length * quality));\n for (let i = 0; i < n; i++) {\n const f: Flake = state.f[i];\n f.y += f.vy * dt * o.speed;\n f.x += (Math.sin(t * 1.2 + f.ph) * 22 + (o.wind || 0)) * dt * o.speed;\n f.a += f.va * dt * o.speed;\n if (f.y > h + 16) (f.y = -16), (f.x = Math.random() * w);\n if (f.x > w + 16) f.x = -16;\n if (f.x < -16) f.x = w + 16;\n ctx.save();\n ctx.translate(f.x, f.y);\n ctx.rotate(f.a);\n ctx.scale(1, 0.55 + 0.45 * Math.abs(Math.cos(t * 1.7 + f.ph)));\n ctx.fillStyle = f.c;\n draw(ctx, f);\n ctx.restore();\n }\n },\n});\nconst particles = (name: string, description: string, defaults: Record<string, unknown>, spec: GenerativeSpec): EffectDefinition => ({\n name,\n kind: 'background',\n description,\n reduced: 'run',\n defaults: { speed: 1, quality: 1, ...defaults },\n run: (el: HTMLElement, o: any, ctx: EffectContext) => {\n const stop = canvasBackground(el, ctx, spec, o);\n ctx.onCleanup(stop);\n return stop;\n },\n});\n\nGPU_FX.push(\n particles('sakura', 'Cherry-blossom petals drifting down, swaying and flipping (Canvas 2D).', { count: 46, colors: ['#ffc8dd', '#ffafcc', '#fde2e4', '#f9a8d4'], wind: 14 }, fall((ctx, f) => {\n ctx.beginPath();\n ctx.moveTo(0, -f.r);\n ctx.bezierCurveTo(f.r, -f.r, f.r * 0.9, f.r * 0.6, 0, f.r);\n ctx.bezierCurveTo(-f.r * 0.9, f.r * 0.6, -f.r, -f.r, 0, -f.r * 0.55);\n ctx.fill();\n })),\n particles('leaves', 'Autumn leaves tumbling down in the wind (Canvas 2D).', { count: 30, size: 1.4, colors: ['#ea580c', '#d97706', '#b45309', '#dc2626', '#ca8a04'], wind: 26 }, fall((ctx, f) => {\n ctx.beginPath();\n ctx.moveTo(0, -f.r);\n ctx.quadraticCurveTo(f.r * 0.9, -f.r * 0.2, 0, f.r);\n ctx.quadraticCurveTo(-f.r * 0.9, -f.r * 0.2, 0, -f.r);\n ctx.fill();\n ctx.strokeStyle = 'rgba(0,0,0,.25)';\n ctx.lineWidth = 1;\n ctx.beginPath();\n ctx.moveTo(0, -f.r * 0.8);\n ctx.lineTo(0, f.r * 1.25);\n ctx.stroke();\n }))\n);\n\nGPU_FX.push({\n name: 'splash',\n kind: 'click',\n description: 'A water splash from the pointer: a ring plus droplets that arc out and fall with gravity.',\n defaults: { color: '#38bdf8', count: 14 },\n run: (el: HTMLElement, o: any, ctx: EffectContext) => {\n const { x, y } = origin(el, ctx);\n if (ctx.reduced) return spawn(x - 12, y - 12, `width:24px;height:24px;border-radius:50%;background:${o.color};opacity:.5`, ctx, [{ opacity: 0.5 }, { opacity: 0 }], { duration: 300 });\n const anims: (Animation | null)[] = [\n spawn(x - 30, y - 30, `width:60px;height:60px;border-radius:50%;border:3px solid ${o.color}`, ctx, [{ transform: 'scale(.2)', opacity: 1 }, { transform: 'scale(1.6)', opacity: 0 }], { duration: 520, easing: 'cubic-bezier(.2,.8,.3,1)' }),\n ];\n for (let i = 0; i < o.count; i++) {\n const ang = -Math.PI / 2 + rand(-1.15, 1.15);\n const v = rand(50, 110);\n const dx = Math.cos(ang) * v;\n const s = rand(4, 9);\n const peak = Math.sin(ang) * v;\n anims.push(spawn(x - s / 2, y - s / 2, `width:${s}px;height:${s * 1.25}px;border-radius:50% 50% 50% 50%/60% 60% 40% 40%;background:${o.color}`, ctx, [\n { transform: 'translate(0,0) scale(1)', opacity: 1 },\n { transform: `translate(${dx * 0.6}px,${peak}px) scale(1)`, opacity: 1, offset: 0.45, easing: 'cubic-bezier(.3,0,.7,1)' },\n { transform: `translate(${dx}px,${peak + 90}px) scale(.6)`, opacity: 0 },\n ], { duration: rand(650, 900), easing: 'cubic-bezier(.15,.6,.4,1)' }));\n }\n return all(anims);\n },\n});\n\n/** Register the 6.2 GPU pack (idempotent). */\nexport function registerGpuEffects(): void {\n registerEffects(GPU_FX);\n}\n","/**\n * The 6.x effect packs, one entry each (`motionary/components/fx-gpu`, …) so\n * their size budgets stay separate. This module (`registerFx2()`) registers\n * them all — used by dist/widgets.umd.js and the showcase.\n */\nimport type { EffectDefinition } from '../fx/registry';\nimport { GPU_FX, registerGpuEffects } from './gpu';\n\nexport { GPU_FX, registerGpuEffects };\nexport { shaderBackground, supportsWebGL2, fieldFallback, GLSL_HEAD } from './gl';\nexport type { ShaderSpec } from './gl';\n\n/** The 6.x effect packs by name. */\nexport const FX2_PACKS: Record<string, EffectDefinition[]> = {\n gpu: GPU_FX,\n};\n\n/** Register every 6.x pack (idempotent). */\nexport function registerFx2(): void {\n registerGpuEffects();\n}\n","// dist/widgets.umd.js: registers every 6.x widget and every 6.x effect pack on load\n// (load after components.umd.js when you also use <usa-fx>). API: window.UsaWidgets.\nimport { defineWidgets } from './index';\nimport { registerFx2 } from '../fx2/index';\n\ndefineWidgets();\nregisterFx2();\nexport * from './index';\nexport * from '../fx2/index';\n"],"names":["config","VESTIBULAR","injected","Set","adoptStyles","id","css","has","document","add","CSSStyleSheet","sheet","replaceSync","adoptedStyleSheets","style","createElement","setAttribute","textContent","head","documentElement","appendChild","baseClass","getBase","Base","HTMLElement","constructor","this","_cleanups","_connected","reduced","matchMedia","matches","connectedCallback","readyState","nextSibling","childNodes","length","go","isConnected","mount","addEventListener","once","push","removeEventListener","disconnectedCallback","teardown","attributeChangedCallback","_name","oldValue","value","changed","splice","reverse","forEach","fn","unmount","str","name","fallback","v","getAttribute","num","n","trim","NaN","Number","isFinite","flag","setFlag","on","removeAttribute","onCleanup","listen","target","type","options","inView","cb","init","IntersectionObserver","io","entries","e","isIntersecting","observe","disconnect","motion","el","keyframes","animate","applyFrame","frames","level","map","f","out","k","Object","test","String","adaptKeyframes","active","maxActive","a","iterations","Infinity","done","end","finished","then","animateWithMotion","emit","detail","dispatchEvent","CustomEvent","bubbles","cancelable","frame","defineElement","tag","make","customElements","BASE_CSS","text","existing","get","ctor","define","clampN","b","Math","min","max","ownChildren","skip","Array","from","children","filter","c","part","cls","attrs","html","className","innerHTML","dropParts","querySelectorAll","remove","uid","nextId","p","CAROUSEL_EFFECTS","defineCarousel","_i","_slides","_track","_timer","_hold","_dots","observedAttributes","index","goTo","effect","includes","dataset","toggleAttribute","old","querySelector","firstElementChild","vp","track","append","s","i","prepend","hasAttribute","tabIndex","prev","next","dots","role","d","round","layout","key","preventDefault","drag","ms","visible","pause","window","setInterval","hidden","clearInterval","x0","dx","closest","pointerId","clientX","clientWidth","w","abs","fx","transform","off","inert","opacity","zIndex","to","t","TAB_INDICATORS","defineTabBar","_tabs","_panels","_ink","selected","select","ind","indicator","list","kids","classList","contains","localName","vertical","arrowIndex","focus","sync","ResizeObserver","ro","place","rect","offsetLeft","offsetWidth","x","width","w0","x1","w1","right","mid","offset","duration","easing","SPRING_PRESETS","default","stiffness","damping","mass","gentle","wobbly","stiff","bouncy","slow","molasses","stepSpring","cfg","dt","nv","cache","Map","springSamples","input","fps","base","pos","o","velocity","precision","resolveSpring","hit","values","size","clear","set","springEasing","points","CSS","supports","linearEasing","step","ceil","join","defineDisclosure","_anims","WeakMap","items","parentElement","open","summary","closedH","offsetHeight","startH","cancel","endH","scrollHeight","sp","height","fill","body","delay","delete","indexOf","toggle","force","openAll","closeAll","defineStories","_items","_bars","_fill","_btn","bars","stopPropagation","play","held","downAt","performance","now","long","r","getBoundingClientRect","left","label","initial","fillEl","onfinish","playState","WIDGETS","WIDGET_TAGS","flatMap","g","keys","defineWidgets","release","group","EFFECT_KINDS","REG_KEY","Symbol","for","registry","_a","globalThis","registerEffect","def","opts","Error","kind","override","layer","spawn","y","ctx","cssText","rm","PALETTE","rand","random","noise2","sin","cos","hexRgb","hex","m","exec","parseInt","canvasBackground","spec","canvas","restore","getComputedStyle","position","getContext","raf","quality","h","state","t0","last","fast","resize","dpr","devicePixelRatio","setTransform","draw","requestAnimationFrame","start","es","some","vis","cancelAnimationFrame","gen","description","defaults","colors","background","speed","run","field","cell","px","cw","ch","st","buf","bctx","img","createImageData","data","putImageData","imageSmoothingEnabled","drawImage","count","fade","fillStyle","globalAlpha","fillRect","steps","q","PI","seeds","_","vx","vy","b2","dd","edge","sqrt","blobs","blur","cr","cg","createRadialGradient","addColorStop","stars","color","_w","_h","balls","threshold","ar","ag","ab","br","bg","bb","kr","kg","kb","inside","levels","lr","lg","lb","z","floor","line","shade","GLSL_HEAD","gl2","supportsWebGL2","shaderBackground","usaBackend","stop","backend","gl","alpha","antialias","preserveDrawingBuffer","prog","frag","mk","src","createShader","shaderSource","compileShader","getShaderParameter","COMPILE_STATUS","VERTEX_SHADER","FRAGMENT_SHADER","createProgram","attachShader","bindAttribLocation","linkProgram","getProgramParameter","LINK_STATUS","compile","useProgram","createBuffer","bindBuffer","ARRAY_BUFFER","bufferData","Float32Array","STATIC_DRAW","enableVertexAttribArray","vertexAttribPointer","FLOAT","U","getUniformLocation","cols","u","uniform3fv","uniform1f","scale","uRes","uT","uPtr","ptr","viewport","uniform2f","drawArrays","TRIANGLES","move","clientY","top","swapped","lost","getExtension","loseContext","fieldFallback","j","mixRgb","sstep","fbm2","shader","extra","C","GPU_FX","sm","ac","i1","i2","bx","by","ph","hue","fall","va","clearRect","wind","save","translate","rotate","particles","registerGpuEffects","defs","registerEffects","beginPath","moveTo","bezierCurveTo","quadraticCurveTo","strokeStyle","lineWidth","lineTo","stroke","event","origin","anims","ang","peak","Promise","all","Boolean","catch","FX2_PACKS","gpu","registerFx2"],"mappings":"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"}
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/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/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","/**\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';\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\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};\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 }\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 * 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';\n\nexport { GPU_FX, registerGpuEffects, TEXT3_FX, registerTextEffects3, splitChars };\nexport { shaderBackground, supportsWebGL2, fieldFallback, GLSL_HEAD } from './gl';\nexport type { ShaderSpec } from './gl';\n\n/** The 6.x effect packs by name. */\nexport const FX2_PACKS: Record<string, EffectDefinition[]> = {\n gpu: GPU_FX,\n text: TEXT3_FX,\n};\n\n/** Register every 6.x pack (idempotent). */\nexport function registerFx2(): void {\n registerGpuEffects();\n registerTextEffects3();\n}\n","// dist/widgets.umd.js: registers every 6.x widget and every 6.x effect pack on load\n// (load after components.umd.js when you also use <usa-fx>). API: window.UsaWidgets.\nimport { defineWidgets } from './index';\nimport { registerFx2 } from '../fx2/index';\n\ndefineWidgets();\nregisterFx2();\nexport * from './index';\nexport * from '../fx2/index';\n"],"names":["config","VESTIBULAR","injected","Set","adoptStyles","id","css","has","document","add","CSSStyleSheet","sheet","replaceSync","adoptedStyleSheets","style","createElement","setAttribute","textContent","head","documentElement","appendChild","baseClass","getBase","Base","HTMLElement","constructor","this","_cleanups","_connected","reduced","matchMedia","matches","connectedCallback","readyState","nextSibling","childNodes","length","go","isConnected","mount","addEventListener","once","push","removeEventListener","disconnectedCallback","teardown","attributeChangedCallback","_name","oldValue","value","changed","splice","reverse","forEach","fn","unmount","str","name","fallback","v","getAttribute","num","n","trim","NaN","Number","isFinite","flag","setFlag","on","removeAttribute","onCleanup","listen","target","type","options","inView","cb","init","IntersectionObserver","io","entries","e","isIntersecting","observe","disconnect","motion","el","keyframes","animate","applyFrame","frames","level","map","f","out","k","Object","test","String","adaptKeyframes","active","maxActive","a","iterations","Infinity","done","end","finished","then","animateWithMotion","emit","detail","dispatchEvent","CustomEvent","bubbles","cancelable","frame","defineElement","tag","make","customElements","BASE_CSS","text","existing","get","ctor","define","clampN","b","Math","min","max","ownChildren","skip","Array","from","children","filter","c","part","cls","attrs","html","className","innerHTML","dropParts","querySelectorAll","remove","uid","nextId","p","CAROUSEL_EFFECTS","defineCarousel","_i","_slides","_track","_timer","_hold","_dots","observedAttributes","index","goTo","effect","includes","dataset","toggleAttribute","old","querySelector","firstElementChild","vp","track","append","s","i","prepend","hasAttribute","tabIndex","prev","next","dots","role","d","round","layout","key","preventDefault","drag","ms","visible","pause","window","setInterval","hidden","clearInterval","x0","dx","closest","pointerId","clientX","clientWidth","w","abs","fx","transform","off","inert","opacity","zIndex","to","t","TAB_INDICATORS","defineTabBar","_tabs","_panels","_ink","selected","select","ind","indicator","list","kids","classList","contains","localName","vertical","arrowIndex","focus","sync","ResizeObserver","ro","place","rect","offsetLeft","offsetWidth","x","width","w0","x1","w1","right","mid","offset","duration","easing","SPRING_PRESETS","default","stiffness","damping","mass","gentle","wobbly","stiff","bouncy","slow","molasses","stepSpring","cfg","dt","nv","cache","Map","springSamples","input","fps","base","pos","o","velocity","precision","resolveSpring","hit","values","size","clear","set","springEasing","points","CSS","supports","linearEasing","step","ceil","join","defineDisclosure","_anims","WeakMap","items","parentElement","open","summary","closedH","offsetHeight","startH","cancel","endH","scrollHeight","sp","height","fill","body","delay","delete","indexOf","toggle","force","openAll","closeAll","defineStories","_items","_bars","_fill","_btn","bars","stopPropagation","play","held","downAt","performance","now","long","r","getBoundingClientRect","left","label","initial","fillEl","onfinish","playState","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","WIDGETS","WIDGET_TAGS","flatMap","g","keys","defineWidgets","release","group","EFFECT_KINDS","REG_KEY","Symbol","for","registry","_a","globalThis","registerEffect","def","opts","Error","override","registerEffects","defs","layer","fxLayer","cssText","spawn","ctx","PALETTE","rand","random","all","anims","Boolean","catch","noise2","sin","cos","hexRgb","hex","m","exec","parseInt","canvasBackground","spec","canvas","restore","getComputedStyle","getContext","raf","quality","state","last","fast","resize","dpr","devicePixelRatio","setTransform","draw","requestAnimationFrame","es","some","vis","cancelAnimationFrame","gen","description","defaults","colors","background","speed","run","field","cell","px","cw","ch","st","buf","bctx","img","createImageData","data","putImageData","imageSmoothingEnabled","drawImage","fillStyle","globalAlpha","fillRect","steps","q","PI","seeds","_","vx","vy","b2","dd","edge","sqrt","blobs","blur","cr","cg","createRadialGradient","addColorStop","stars","color","_w","_h","balls","threshold","ar","ag","ab","br","bg","bb","kr","kg","kb","inside","levels","lr","lg","lb","z","floor","line","shade","GLSL_HEAD","gl2","supportsWebGL2","shaderBackground","usaBackend","stop","backend","gl","alpha","antialias","preserveDrawingBuffer","prog","frag","mk","src","createShader","shaderSource","compileShader","getShaderParameter","COMPILE_STATUS","VERTEX_SHADER","FRAGMENT_SHADER","createProgram","attachShader","bindAttribLocation","linkProgram","getProgramParameter","LINK_STATUS","compile","useProgram","createBuffer","bindBuffer","ARRAY_BUFFER","bufferData","Float32Array","STATIC_DRAW","enableVertexAttribArray","vertexAttribPointer","FLOAT","U","getUniformLocation","cols","u","uniform3fv","uniform1f","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","moveTo","bezierCurveTo","quadraticCurveTo","strokeStyle","lineWidth","lineTo","stroke","event","origin","ang","peak","fid","TEXT3_FX","strength","svg","createElementNS","turb","tick","caf","stagger","glow","textShadow","cs","gap","spread","pad","W","H","cs0","font","fontStyle","fontWeight","fontSize","fontFamily","textBaseline","fillText","getImageData","pts","rr","sx","sy","finish","pow","spacing","word","lx","ly","hypot","period","fontVariationSettings","direction","axis","perspective","rot","transformOrigin","backfaceVisibility","registerTextEffects3","FX2_PACKS","gpu","registerFx2"],"mappings":"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"}