use-scroll-animate 4.0.0 → 4.1.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 +26 -0
  2. package/dist/chunks/{base-ZARFccur.js → base-BPG5zvex.js} +2 -2
  3. package/dist/chunks/{base-ZARFccur.js.map → base-BPG5zvex.js.map} +1 -1
  4. package/dist/chunks/{core-DXqZm5Il.cjs → core-CLu8ZrC-.cjs} +52 -10
  5. package/dist/chunks/core-CLu8ZrC-.cjs.map +1 -0
  6. package/dist/chunks/{core-Co-6AL0h.js → core-QTFk4kgO.js} +53 -12
  7. package/dist/chunks/core-QTFk4kgO.js.map +1 -0
  8. package/dist/chunks/{core-DKY-fVzR.js → core-eXX8rB_b.js} +2 -2
  9. package/dist/chunks/{core-DKY-fVzR.js.map → core-eXX8rB_b.js.map} +1 -1
  10. package/dist/chunks/{spring-E2ickYNI.js → spring-BziPsW3r.js} +2 -2
  11. package/dist/chunks/{spring-E2ickYNI.js.map → spring-BziPsW3r.js.map} +1 -1
  12. package/dist/chunks/{variants-DvnxvRCM.js → variants-BVYMcxRv.js} +2 -2
  13. package/dist/chunks/{variants-DvnxvRCM.js.map → variants-BVYMcxRv.js.map} +1 -1
  14. package/dist/components/angular.cjs +1 -1
  15. package/dist/components/angular.d.cts +29 -5
  16. package/dist/components/angular.d.ts +29 -5
  17. package/dist/components/angular.js +5 -5
  18. package/dist/components/background.js +3 -3
  19. package/dist/components/cards.js +3 -3
  20. package/dist/components/click.js +3 -3
  21. package/dist/components/depth.js +4 -4
  22. package/dist/components/feedback.js +2 -2
  23. package/dist/components/gesture.js +5 -5
  24. package/dist/components/interaction.js +2 -2
  25. package/dist/components/layout.js +2 -2
  26. package/dist/components/packs.js +2 -2
  27. package/dist/components/page.js +3 -3
  28. package/dist/components/physics.js +4 -4
  29. package/dist/components/reveal.js +2 -2
  30. package/dist/components/solid.cjs +20 -5
  31. package/dist/components/solid.cjs.map +1 -1
  32. package/dist/components/solid.d.cts +33 -23
  33. package/dist/components/solid.d.ts +33 -23
  34. package/dist/components/solid.js +24 -9
  35. package/dist/components/solid.js.map +1 -1
  36. package/dist/components/svelte.cjs +1 -1
  37. package/dist/components/svelte.d.cts +29 -5
  38. package/dist/components/svelte.d.ts +29 -5
  39. package/dist/components/svelte.js +5 -5
  40. package/dist/components/svg.cjs +16 -10
  41. package/dist/components/svg.cjs.map +1 -1
  42. package/dist/components/svg.css +1 -1
  43. package/dist/components/svg.js +18 -12
  44. package/dist/components/svg.js.map +1 -1
  45. package/dist/components/text.cjs +1 -1
  46. package/dist/components/text.css +1 -1
  47. package/dist/components/text.js +3 -3
  48. package/dist/components/timeline.cjs +25 -5
  49. package/dist/components/timeline.cjs.map +1 -1
  50. package/dist/components/timeline.d.cts +33 -7
  51. package/dist/components/timeline.d.ts +33 -7
  52. package/dist/components/timeline.js +27 -8
  53. package/dist/components/timeline.js.map +1 -1
  54. package/dist/components/transitions.js +2 -2
  55. package/dist/components/ui.js +5 -5
  56. package/dist/components/vue.cjs +1 -1
  57. package/dist/components/vue.d.cts +29 -5
  58. package/dist/components/vue.d.ts +29 -5
  59. package/dist/components/vue.js +5 -5
  60. package/dist/components/webgl.cjs +10 -0
  61. package/dist/components/webgl.cjs.map +1 -1
  62. package/dist/components/webgl.js +12 -2
  63. package/dist/components/webgl.js.map +1 -1
  64. package/dist/components.cjs +2 -1
  65. package/dist/components.cjs.map +1 -1
  66. package/dist/components.css +2 -2
  67. package/dist/components.d.cts +34 -8
  68. package/dist/components.d.ts +34 -8
  69. package/dist/components.js +7 -7
  70. package/dist/components.umd.js +2 -2
  71. package/dist/components.umd.js.map +1 -1
  72. package/dist/index.cjs +2 -1
  73. package/dist/index.cjs.map +1 -1
  74. package/dist/index.d.cts +30 -6
  75. package/dist/index.d.ts +30 -6
  76. package/dist/index.js +2 -2
  77. package/dist/index.js.map +1 -1
  78. package/dist/index.umd.js +2 -2
  79. package/dist/index.umd.js.map +1 -1
  80. package/dist/solid.cjs +38 -8
  81. package/dist/solid.cjs.map +1 -1
  82. package/dist/solid.d.cts +6 -1
  83. package/dist/solid.d.ts +6 -1
  84. package/dist/solid.js +39 -9
  85. package/dist/solid.js.map +1 -1
  86. package/docs/API.md +3 -1
  87. package/docs/ROADMAP.md +1 -1
  88. package/package.json +1 -1
  89. package/dist/chunks/core-Co-6AL0h.js.map +0 -1
  90. package/dist/chunks/core-DXqZm5Il.cjs.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"components.umd.js","sources":["../src/components/base.ts","../src/components/reveal/effects.ts","../src/components/reveal/reveal.ts","../src/components/reveal/stagger.ts","../src/components/reveal/scroll-progress.ts","../src/components/reveal/scrolly.ts","../src/components/reveal/index.ts","../src/components/text/typewriter.ts","../src/components/text/split-text.ts","../src/components/text/scramble.ts","../src/components/text/counter.ts","../src/components/text/shimmer-text.ts","../src/components/text/text-rotate.ts","../src/components/text/text-fx.ts","../src/components/text/index.ts","../src/components/interaction/ripple.ts","../src/components/interaction/magnetic.ts","../src/components/interaction/tilt.ts","../src/components/interaction/spotlight.ts","../src/components/interaction/press.ts","../src/components/interaction/toggle.ts","../src/components/interaction/index.ts","../src/components/feedback/spinner.ts","../src/components/feedback/skeleton.ts","../src/components/feedback/progress.ts","../src/components/feedback/toast.ts","../src/components/feedback/check.ts","../src/components/feedback/index.ts","../src/components/background/aurora.ts","../src/components/background/particles.ts","../src/components/background/grain.ts","../src/components/background/marquee.ts","../src/components/background/acrylic.ts","../src/components/background/bg-fx.ts","../src/components/ui/variants.ts","../src/components/background/index.ts","../src/components/transitions/dialog.ts","../src/components/transitions/accordion.ts","../src/components/transitions/view-switch.ts","../src/components/transitions/helpers.ts","../src/components/transitions/index.ts","../src/components/physics/spring.ts","../src/components/physics/spring-effect.ts","../src/components/physics/draggable.ts","../src/components/physics/overscroll.ts","../src/components/physics/index.ts","../src/components/cards/card.ts","../src/components/cards/card-stack.ts","../src/components/cards/sticky-stack.ts","../src/components/cards/carousel-3d.ts","../src/components/cards/index.ts","../src/components/click/fx.ts","../src/components/click/click.ts","../src/components/click/button.ts","../src/components/click/icon-morph.ts","../src/components/click/like.ts","../src/components/click/hold.ts","../src/components/click/double-tap.ts","../src/components/click/checkbox.ts","../src/components/click/index.ts","../src/components/ui/position.ts","../src/components/ui/tabs.ts","../src/components/ui/sheet.ts","../src/components/ui/pull-refresh.ts","../src/components/ui/fab.ts","../src/components/ui/navbar.ts","../src/components/ui/slider.ts","../src/components/ui/rating.ts","../src/components/ui/tooltip.ts","../src/components/ui/popover.ts","../src/components/ui/badge.ts","../src/components/ui/avatar-stack.ts","../src/components/ui/index.ts","../src/components/page/cursor.ts","../src/components/page/scroll.ts","../src/components/page/fullpage.ts","../src/components/page/loading-bar.ts","../src/components/page/back-to-top.ts","../src/components/page/ambient.ts","../src/components/page/splash.ts","../src/components/page/auto-skeleton.ts","../src/components/page/motion-switch.ts","../src/components/page/transitions.ts","../src/components/page/index.ts","../src/components/timeline/core.ts","../src/components/timeline/timeline-el.ts","../src/components/timeline/index.ts","../src/components/gesture/core.ts","../src/components/gesture/swipeable.ts","../src/components/gesture/pinch-zoom.ts","../src/components/gesture/index.ts","../src/components/svg/core.ts","../src/components/svg/draw.ts","../src/components/svg/morph.ts","../src/components/svg/mask-reveal.ts","../src/components/svg/anim-icon.ts","../src/components/svg/index.ts","../src/components/webgl/gl.ts","../src/components/webgl/elements.ts","../src/components/webgl/index.ts","../src/components/depth/cube.ts","../src/components/depth/core.ts","../src/components/depth/depth-el.ts","../src/components/depth/index.ts","../src/components/layout/core.ts","../src/components/layout/elements.ts","../src/components/layout/index.ts","../src/components/packs/core.ts","../src/components/packs/pack-el.ts","../src/components/packs/index.ts","../src/components/index-tags.ts","../src/components/index.ts","../src/components/auto.ts","../src/components/background/fluent.ts"],"sourcesContent":["/**\n * use-scroll-animate/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 `use-scroll-animate/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);\n * `'no-preference'` ignores the OS setting (only for demos — respect your users).\n */\n reducedMotion?: 'user' | 'reduce' | 'no-preference';\n /**\n * Global motion intensity (v2.7): `'off'` (same as reduced motion),\n * `'low'` (shorter, calmer), `'normal'` (default) or `'high'`. Scales every\n * component animation's duration and sets `--usa-motion` (0 / 0.6 / 1 /\n * 1.25) on `<html>` for your own CSS. See `setMotionIntensity()`.\n */\n motionIntensity?: MotionIntensity;\n}\n\nexport type MotionIntensity = 'off' | 'low' | 'normal' | 'high';\nexport const MOTION_SCALE: Record<MotionIntensity, number> = { off: 0, low: 0.6, normal: 1, high: 1.25 };\n\nconst config: Required<ComponentsConfig> = { injectStyles: true, reducedMotion: 'user', motionIntensity: 'normal' };\n\n/** Change global component settings (call before `define*()` for `injectStyles`). */\nexport function configureComponents(options: ComponentsConfig): void {\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}\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.motionIntensity === 'off') return true;\n if (config.reducedMotion !== 'user') return config.reducedMotion === 'reduce';\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 // 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 if (typeof (el as HTMLElement).animate !== 'function') {\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 return (el as HTMLElement).animate(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/** 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/** requestAnimationFrame with a timeout fallback (jsdom / hidden documents). */\nexport const raf = (cb: FrameRequestCallback): number =>\n typeof requestAnimationFrame === 'function' ? requestAnimationFrame(cb) : (setTimeout(() => cb(Date.now()), 16) as unknown as number);\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 if (typeof cancelAnimationFrame === 'function') cancelAnimationFrame(id);\n else clearTimeout(id);\n};\n\n/** Spring-ish easing used across the components. */\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(`[use-scroll-animate] ${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","/** Entrance effects shared by `<usa-reveal>` and `<usa-stagger>` (transform / opacity / filter only). */\n\nexport const REVEAL_EFFECTS = [\n 'fade',\n 'fade-up',\n 'fade-down',\n 'fade-left',\n 'fade-right',\n 'zoom-in',\n 'zoom-out',\n 'blur',\n 'blur-up',\n 'flip-up',\n 'flip-left',\n 'rise',\n] as const;\n\nexport type RevealEffect = (typeof REVEAL_EFFECTS)[number];\n\n/** The \"from\" keyframe of an effect; the \"to\" keyframe is the element's natural state. */\nexport function revealFrom(effect: string, distance = 32): Keyframe {\n const d = `${distance}px`;\n switch (effect) {\n case 'fade':\n return { opacity: 0 };\n case 'fade-down':\n return { opacity: 0, transform: `translate3d(0,-${d},0)` };\n case 'fade-left':\n return { opacity: 0, transform: `translate3d(-${d},0,0)` };\n case 'fade-right':\n return { opacity: 0, transform: `translate3d(${d},0,0)` };\n case 'zoom-in':\n return { opacity: 0, transform: 'scale(0.86)' };\n case 'zoom-out':\n return { opacity: 0, transform: 'scale(1.14)' };\n case 'blur':\n return { opacity: 0, filter: 'blur(12px)' };\n case 'blur-up':\n return { opacity: 0, filter: 'blur(10px)', transform: `translate3d(0,${d},0)` };\n case 'flip-up':\n return { opacity: 0, transform: 'perspective(800px) rotateX(-55deg)', transformOrigin: '50% 100%' };\n case 'flip-left':\n return { opacity: 0, transform: 'perspective(800px) rotateY(55deg)', transformOrigin: '0% 50%' };\n case 'rise':\n return { opacity: 0, transform: `translate3d(0,${distance * 1.5}px,0) scale(0.96)` };\n case 'fade-up':\n default:\n return { opacity: 0, transform: `translate3d(0,${d},0)` };\n }\n}\n\n/** Keyframes from the effect to the natural state. */\nexport function revealKeyframes(effect: string, distance?: number): Keyframe[] {\n const from = revealFrom(effect, distance);\n const to: Keyframe = {};\n for (const k of Object.keys(from)) {\n if (k === 'opacity') to.opacity = 1;\n else if (k === 'transform') to.transform = 'none';\n else if (k === 'filter') to.filter = 'none';\n else if (k === 'transformOrigin') to.transformOrigin = from.transformOrigin;\n }\n return [from, to];\n}\n","import { defineElement, EASE_OUT, type UsaElement } from '../base';\nimport { revealKeyframes, type RevealEffect } from './effects';\nimport css from './reveal.css?raw';\n\n/**\n * `<usa-reveal>` — reveals its content when it scrolls into view.\n *\n * Attributes: `effect` (see {@link RevealEffect}, default `fade-up`),\n * `duration` (ms, 700), `delay` (ms, 0), `distance` (px, 32), `easing`,\n * `threshold` (0–1, 0.15), `root-margin`, `repeat` (hide again when it\n * leaves, replay on re-entry). Events: `usa:enter`, `usa:leave`, `usa:complete`.\n */\nexport interface UsaRevealElement extends UsaElement {\n effect: RevealEffect | string;\n /** Play the entrance now (also called automatically on enter). */\n reveal(): Promise<void>;\n /** Hide again so the next `reveal()` replays the entrance. */\n reset(): void;\n readonly revealed: boolean;\n}\n\nexport function defineReveal(tag = 'usa-reveal'): CustomElementConstructor | undefined {\n return defineElement(\n tag,\n (Base) =>\n class UsaReveal extends Base {\n static get observedAttributes(): string[] {\n return ['effect', 'distance', 'repeat', 'threshold', 'root-margin'];\n }\n\n private _anim: Animation | null = null;\n\n get effect(): string {\n return this.str('effect', 'fade-up');\n }\n set effect(v: string) {\n this.setAttribute('effect', v);\n }\n get revealed(): boolean {\n return this.getAttribute('data-state') !== 'hidden';\n }\n\n mount(): void {\n if (this.reduced) {\n this.setAttribute('data-state', 'shown');\n return;\n }\n if (this.getAttribute('data-state') !== 'shown') this.setAttribute('data-state', 'hidden');\n this.inView(\n (visible) => {\n if (visible) {\n this.emit('enter');\n if (!this.revealed) this.reveal();\n } else {\n this.emit('leave');\n if (this.flag('repeat') && this.revealed) this.reset();\n }\n },\n { threshold: this.num('threshold', 0.15), rootMargin: this.str('root-margin', '0px') }\n );\n }\n\n unmount(): void {\n this._anim?.cancel();\n this._anim = null;\n }\n\n reveal(): Promise<void> {\n this._anim?.cancel();\n this.setAttribute('data-state', 'shown');\n if (this.reduced) return Promise.resolve();\n const a = this.motion(this, revealKeyframes(this.effect, this.num('distance', 32)), {\n duration: this.num('duration', 700),\n delay: this.num('delay', 0),\n easing: this.str('easing', EASE_OUT),\n fill: 'backwards',\n });\n this._anim = a;\n return new Promise((resolve) => {\n const done = () => {\n if (this._anim === a) this._anim = null;\n this.emit('complete');\n resolve();\n };\n if (!a) done();\n else a.onfinish = done;\n });\n }\n\n reset(): void {\n this._anim?.cancel();\n this._anim = null;\n if (!this.reduced) this.setAttribute('data-state', 'hidden');\n }\n },\n { id: 'reveal', text: css }\n );\n}\n","import { defineElement, EASE_OUT, type UsaElement } from '../base';\nimport { revealKeyframes } from './effects';\nimport css from './reveal.css?raw';\n\n/**\n * `<usa-stagger>` — reveals its direct children one after another when the\n * list scrolls into view.\n *\n * Attributes: `effect` (default `fade-up`), `interval` (ms between children,\n * 70), `duration` (600), `delay` (0), `distance` (24), `easing`,\n * `threshold` (0.1), `repeat`. Events: `usa:enter`, `usa:complete`.\n */\nexport interface UsaStaggerElement extends UsaElement {\n reveal(): Promise<void>;\n reset(): void;\n}\n\nexport function defineStagger(tag = 'usa-stagger'): CustomElementConstructor | undefined {\n return defineElement(\n tag,\n (Base) =>\n class UsaStagger extends Base {\n static get observedAttributes(): string[] {\n return ['effect', 'repeat', 'threshold'];\n }\n\n private _anims: Animation[] = [];\n\n mount(): void {\n if (this.reduced) {\n this.setAttribute('data-state', 'shown');\n return;\n }\n if (this.getAttribute('data-state') !== 'shown') this.setAttribute('data-state', 'hidden');\n this.inView(\n (visible) => {\n if (visible && this.getAttribute('data-state') === 'hidden') {\n this.emit('enter');\n this.reveal();\n } else if (!visible && this.flag('repeat')) this.reset();\n },\n { threshold: this.num('threshold', 0.1) }\n );\n }\n\n unmount(): void {\n this.cancel();\n }\n\n private cancel(): void {\n this._anims.splice(0).forEach((a) => a.cancel());\n }\n\n reveal(): Promise<void> {\n this.cancel();\n this.setAttribute('data-state', 'shown');\n const kids = Array.from(this.children) as HTMLElement[];\n if (this.reduced || !kids.length) return Promise.resolve();\n const frames = revealKeyframes(this.str('effect', 'fade-up'), this.num('distance', 24));\n const interval = this.num('interval', 70);\n const base = this.num('delay', 0);\n const duration = this.num('duration', 600);\n const easing = this.str('easing', EASE_OUT);\n const anims = kids\n .map((kid, i) => this.motion(kid, frames, { duration, easing, delay: base + i * interval, fill: 'backwards' }))\n .filter((a): a is Animation => !!a);\n this._anims = anims;\n const last = anims[anims.length - 1];\n return new Promise((resolve) => {\n const done = () => {\n this.emit('complete');\n resolve();\n };\n if (!last) done();\n else last.onfinish = done;\n });\n }\n\n reset(): void {\n this.cancel();\n if (!this.reduced) this.setAttribute('data-state', 'hidden');\n }\n },\n { id: 'reveal', text: css }\n );\n}\n","import { defineElement, raf, caf, clamp, type UsaElement } from '../base';\nimport css from './scroll-progress.css?raw';\n\n/**\n * `<usa-scroll-progress>` — a reading-progress bar.\n *\n * Attributes: `target` (CSS selector of an article to track; default the\n * whole page), `position` (`top` | `bottom` | `inline`, default `top`),\n * `label` (accessible name, default \"Reading progress\"). Style with\n * `--usa-progress-color`, `--usa-progress-height`, `--usa-progress-track`.\n * Exposes the progress (0–1) as `--usa-progress` on the element and as the\n * `progress` property. Event: `usa:progress` (`detail.progress`).\n *\n * Writes only `transform: scaleX()` (compositor-friendly); reads layout\n * once per animation frame, and only while scrolling.\n */\nexport interface UsaScrollProgressElement extends UsaElement {\n readonly progress: number;\n /** Re-measure (e.g. after content loaded). */\n update(): void;\n}\n\n/** Progress (0–1) of `target` scrolling through the viewport, or of the page. */\nexport function readScrollProgress(target?: Element | null): number {\n if (typeof window === 'undefined') return 0;\n const vh = window.innerHeight || document.documentElement.clientHeight;\n if (target) {\n const r = target.getBoundingClientRect();\n const total = r.height - vh;\n return total <= 0 ? (r.top <= 0 ? 1 : 0) : clamp(-r.top / total, 0, 1);\n }\n const doc = document.documentElement;\n const max = doc.scrollHeight - vh;\n return max <= 0 ? 0 : clamp((window.scrollY || doc.scrollTop) / max, 0, 1);\n}\n\nexport function defineScrollProgress(tag = 'usa-scroll-progress'): CustomElementConstructor | undefined {\n return defineElement(\n tag,\n (Base) =>\n class UsaScrollProgress extends Base {\n static get observedAttributes(): string[] {\n return ['target', 'label'];\n }\n\n private _bar: HTMLElement | null = null;\n private _p = -1;\n private _frame = 0;\n\n get progress(): number {\n return Math.max(0, this._p);\n }\n\n mount(): void {\n if (!this._bar) {\n this._bar = document.createElement('span');\n this._bar.className = 'usa-progress-fill';\n this.replaceChildren(this._bar);\n }\n this.setAttribute('role', 'progressbar');\n this.setAttribute('aria-valuemin', '0');\n this.setAttribute('aria-valuemax', '100');\n if (!this.hasAttribute('aria-label')) this.setAttribute('aria-label', this.str('label', 'Reading progress'));\n const schedule = () => {\n if (!this._frame) this._frame = raf(() => ((this._frame = 0), this.update()));\n };\n this.listen(window, 'scroll', schedule, { passive: true });\n this.listen(window, 'resize', schedule, { passive: true });\n this.update();\n }\n\n unmount(): void {\n caf(this._frame);\n this._frame = 0;\n }\n\n update(): void {\n const sel = this.getAttribute('target');\n const target = sel ? document.querySelector(sel) : null;\n const p = readScrollProgress(target);\n if (Math.abs(p - this._p) < 0.0005) return;\n this._p = p;\n if (this._bar) this._bar.style.transform = `scaleX(${p})`;\n this.style.setProperty('--usa-progress', String(p));\n const pct = String(Math.round(p * 100));\n if (this.getAttribute('aria-valuenow') !== pct) this.setAttribute('aria-valuenow', pct);\n this.emit('progress', { progress: p });\n }\n },\n { id: 'scroll-progress', text: css }\n );\n}\n","import { defineElement, clamp, type UsaElement } from '../base';\nimport css from './scrolly.css?raw';\n\n/**\n * `<usa-scrolly>` — sticky scrollytelling. A child marked `data-sticky`\n * stays pinned while the `[data-step]` children scroll past; the step that\n * crosses the trigger line becomes active.\n *\n * Attributes: `offset` (trigger line as a fraction of the viewport height,\n * default 0.5), `active` (reflected index of the active step). The active\n * step gets `data-active`; the host gets `--usa-step` and `data-step-name`\n * (the step's `data-step` value). Event: `usa:step` (`detail.index`,\n * `detail.step`, `detail.name`).\n */\nexport interface UsaScrollyElement extends UsaElement {\n readonly active: number;\n readonly steps: HTMLElement[];\n}\n\nexport function defineScrolly(tag = 'usa-scrolly'): CustomElementConstructor | undefined {\n return defineElement(\n tag,\n (Base) =>\n class UsaScrolly extends Base {\n static get observedAttributes(): string[] {\n return ['offset'];\n }\n\n private _active = -1;\n\n get active(): number {\n return this._active;\n }\n get steps(): HTMLElement[] {\n return Array.from(this.querySelectorAll<HTMLElement>('[data-step]'));\n }\n\n mount(): void {\n const steps = this.steps;\n if (!steps.length) return;\n const offset = clamp(this.num('offset', 0.5), 0, 1);\n // A thin trigger band `offset` down the viewport\n const top = Math.min(99, Math.round(offset * 100));\n const rootMargin = `-${top}% 0px -${Math.max(0, 99 - top)}% 0px`;\n if (typeof IntersectionObserver === 'undefined') {\n this.activate(0);\n return;\n }\n const io = new IntersectionObserver(\n (entries) => {\n for (const e of entries) if (e.isIntersecting) this.activate(steps.indexOf(e.target as HTMLElement));\n },\n { rootMargin }\n );\n steps.forEach((s) => io.observe(s));\n this.onCleanup(() => io.disconnect());\n if (this._active < 0) this.activate(0, true);\n }\n\n activate(index: number, silent = false): void {\n const steps = this.steps;\n if (index < 0 || index >= steps.length || index === this._active) return;\n this._active = index;\n steps.forEach((s, i) => s.toggleAttribute('data-active', i === index));\n const step = steps[index];\n this.setAttribute('active', String(index));\n this.style.setProperty('--usa-step', String(index));\n this.setAttribute('data-step-name', step.dataset.step || String(index));\n if (!silent) this.emit('step', { index, step, name: step.dataset.step || '' });\n }\n },\n { id: 'scrolly', text: css }\n );\n}\n","/**\n * use-scroll-animate/components/reveal — entrance & scroll reveal components.\n * `<usa-reveal>`, `<usa-stagger>`, `<usa-scroll-progress>`, `<usa-scrolly>`.\n */\nimport { defineReveal, type UsaRevealElement } from './reveal';\nimport { defineStagger, type UsaStaggerElement } from './stagger';\nimport { defineScrollProgress, type UsaScrollProgressElement } from './scroll-progress';\nimport { defineScrolly, type UsaScrollyElement } from './scrolly';\n\nexport { defineReveal, defineStagger, defineScrollProgress, defineScrolly };\nexport { readScrollProgress } from './scroll-progress';\nexport { REVEAL_EFFECTS, revealKeyframes } from './effects';\nexport type { RevealEffect } from './effects';\nexport type { UsaRevealElement, UsaStaggerElement, UsaScrollProgressElement, UsaScrollyElement };\nexport { configureComponents, prefersReducedMotion } from '../base';\nexport type { ComponentsConfig, UsaElement } from '../base';\n\n/** Register every component of this category under its default tag. */\nexport function defineRevealComponents(): void {\n defineReveal();\n defineStagger();\n defineScrollProgress();\n defineScrolly();\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'usa-reveal': UsaRevealElement;\n 'usa-stagger': UsaStaggerElement;\n 'usa-scroll-progress': UsaScrollProgressElement;\n 'usa-scrolly': UsaScrollyElement;\n }\n}\n","import { defineElement, srText, type UsaElement } from '../base';\nimport css from './typewriter.css?raw';\n\n/**\n * `<usa-typewriter>` — types text character by character, optionally cycling\n * through several phrases (typing, pausing, deleting).\n *\n * Attributes: `text` (default: the element's text), `words` (phrases\n * separated by `|`, overrides `text`), `speed` (ms per character, 55),\n * `delete-speed` (ms, 30), `pause` (ms before deleting, 1400), `delay`\n * (ms, 0), `loop`, `cursor=\"false\"` to hide the caret, `start`\n * (`view` | `load` | `manual`, default `view`). The full text is exposed to\n * assistive tech via `aria-label`. Event: `usa:complete` (one pass done).\n * Reduced motion: the text appears at once.\n */\nexport interface UsaTypewriterElement extends UsaElement {\n /** Phrases being typed. */\n readonly phrases: string[];\n start(): void;\n stop(): void;\n restart(): void;\n}\n\nexport function defineTypewriter(tag = 'usa-typewriter'): CustomElementConstructor | undefined {\n return defineElement(\n tag,\n (Base) =>\n class UsaTypewriter extends Base {\n static get observedAttributes(): string[] {\n return ['text', 'words'];\n }\n\n private _source: string | null = null;\n private _out: HTMLElement | null = null;\n private _timer: ReturnType<typeof setTimeout> | 0 = 0;\n private _running = false;\n\n get phrases(): string[] {\n const words = this.getAttribute('words');\n if (words) return words.split('|').map((w) => w.trim()).filter(Boolean);\n return [this.getAttribute('text') ?? this._source ?? ''];\n }\n\n mount(): void {\n if (this._source === null) this._source = (this.textContent || '').trim();\n const phrases = this.phrases;\n const sr = srText(phrases.join(', '));\n this._out = document.createElement('span');\n this._out.className = 'usa-tw-text';\n this._out.setAttribute('aria-hidden', 'true');\n const caret = document.createElement('span');\n caret.className = 'usa-tw-caret';\n caret.setAttribute('aria-hidden', 'true');\n this.replaceChildren(sr, this._out, caret);\n this.toggleAttribute('data-no-cursor', this.getAttribute('cursor') === 'false');\n if (this.reduced) {\n this._out.textContent = phrases[0] || '';\n return;\n }\n const start = this.str('start', 'view');\n if (start === 'load') this.start();\n else if (start === 'view') {\n this.inView((visible) => {\n if (visible && !this._running && !this._out?.textContent) this.start();\n });\n }\n }\n\n unmount(): void {\n this.stop();\n }\n\n stop(): void {\n clearTimeout(this._timer as ReturnType<typeof setTimeout>);\n this._timer = 0;\n this._running = false;\n this.removeAttribute('data-typing');\n }\n\n restart(): void {\n this.stop();\n if (this._out) this._out.textContent = '';\n this.start();\n }\n\n start(): void {\n if (this._running || !this._out) return;\n const out = this._out;\n const phrases = this.phrases;\n if (this.reduced) {\n out.textContent = phrases[0] || '';\n return;\n }\n this._running = true;\n const speed = this.num('speed', 55);\n const del = this.num('delete-speed', 30);\n const pause = this.num('pause', 1400);\n const loop = this.flag('loop') || phrases.length > 1;\n let p = 0;\n let i = 0;\n let deleting = false;\n const tick = () => {\n const word = phrases[p] || '';\n if (!deleting) {\n i++;\n out.textContent = word.slice(0, i);\n this.setAttribute('data-typing', '');\n if (i >= word.length) {\n this.removeAttribute('data-typing');\n const last = p === phrases.length - 1;\n if (last) this.emit('complete');\n if (!loop && last) {\n this._running = false;\n return;\n }\n deleting = true;\n this._timer = setTimeout(tick, pause);\n return;\n }\n this._timer = setTimeout(tick, speed * (0.6 + Math.random() * 0.8));\n } else {\n i--;\n out.textContent = word.slice(0, Math.max(0, i));\n if (i <= 0) {\n deleting = false;\n p = (p + 1) % phrases.length;\n this._timer = setTimeout(tick, speed * 4);\n return;\n }\n this._timer = setTimeout(tick, del);\n }\n };\n this._timer = setTimeout(tick, this.num('delay', 0));\n }\n },\n { id: 'typewriter', text: css }\n );\n}\n","import { defineElement, srText, type UsaElement } from '../base';\nimport css from './split-text.css?raw';\n\n/**\n * `<usa-split-text>` — splits its text into words or characters and reveals\n * them in a cascade (pure CSS animation per unit, transform / opacity /\n * filter only). Words never break across lines.\n *\n * Attributes: `by` (`chars` | `words`, default `chars`), `effect`\n * (`rise` | `fade` | `blur` | `flip` | `pop`, default `rise`), `stagger`\n * (ms between units, 28 for chars / 70 for words), `duration` (ms, 620),\n * `delay` (ms, 0), `trigger` (`view` | `load` | `manual`, default `view`),\n * `repeat`. The original text stays readable via `aria-label`.\n * Event: `usa:complete`.\n */\nexport interface UsaSplitTextElement extends UsaElement {\n readonly units: HTMLElement[];\n play(): void;\n reset(): void;\n}\n\nexport function defineSplitText(tag = 'usa-split-text'): CustomElementConstructor | undefined {\n return defineElement(\n tag,\n (Base) =>\n class UsaSplitText extends Base {\n static get observedAttributes(): string[] {\n return ['by', 'text'];\n }\n\n private _source: string | null = null;\n private _timer: ReturnType<typeof setTimeout> | 0 = 0;\n\n get units(): HTMLElement[] {\n return Array.from(this.querySelectorAll<HTMLElement>('.usa-split-unit'));\n }\n\n mount(): void {\n if (this._source === null) this._source = this.getAttribute('text') ?? (this.textContent || '').replace(/\\s+/g, ' ').trim();\n const text = this.getAttribute('text') ?? this._source;\n const byWords = this.str('by', 'chars') === 'words';\n const frag = document.createDocumentFragment();\n frag.append(srText(text));\n let i = 0;\n text.split(' ').forEach((word, w) => {\n if (w > 0) frag.append(' ');\n const wordEl = document.createElement('span');\n wordEl.className = 'usa-split-word';\n wordEl.setAttribute('aria-hidden', 'true');\n const parts = byWords ? [word] : Array.from(word);\n for (const part of parts) {\n const u = document.createElement('span');\n u.className = 'usa-split-unit';\n u.textContent = part;\n u.style.setProperty('--i', String(i++));\n wordEl.append(u);\n }\n frag.append(wordEl);\n });\n this.replaceChildren(frag);\n this.style.setProperty('--usa-split-stagger', `${this.num('stagger', byWords ? 70 : 28)}ms`);\n this.style.setProperty('--usa-split-duration', `${this.num('duration', 620)}ms`);\n this.style.setProperty('--usa-split-delay', `${this.num('delay', 0)}ms`);\n this.style.setProperty('--usa-split-count', String(i));\n if (this.reduced) {\n this.setAttribute('data-state', 'shown');\n return;\n }\n this.setAttribute('data-state', 'hidden');\n const trigger = this.str('trigger', 'view');\n if (trigger === 'load') this.play();\n else if (trigger === 'view') {\n this.inView((visible) => {\n if (visible && this.getAttribute('data-state') === 'hidden') this.play();\n else if (!visible && this.flag('repeat')) this.reset();\n }, { threshold: 0.2 });\n }\n }\n\n unmount(): void {\n clearTimeout(this._timer as ReturnType<typeof setTimeout>);\n }\n\n play(): void {\n clearTimeout(this._timer as ReturnType<typeof setTimeout>);\n if (this.reduced) {\n this.setAttribute('data-state', 'shown');\n return;\n }\n // Restart the CSS animations\n this.setAttribute('data-state', 'hidden');\n void this.offsetWidth;\n this.setAttribute('data-state', 'play');\n const n = this.units.length;\n const total = this.num('delay', 0) + this.num('duration', 620) + Math.max(0, n - 1) * this.num('stagger', this.str('by') === 'words' ? 70 : 28);\n this._timer = setTimeout(() => {\n this.setAttribute('data-state', 'shown');\n this.emit('complete');\n }, total);\n }\n\n reset(): void {\n clearTimeout(this._timer as ReturnType<typeof setTimeout>);\n this.setAttribute('data-state', this.reduced ? 'shown' : 'hidden');\n }\n },\n { id: 'split-text', text: css }\n );\n}\n","import { defineElement, srText, raf, caf, now, type UsaElement } from '../base';\n\nconst GLYPHS = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789#%&*+=<>/\\\\?!';\n\n/**\n * `<usa-scramble>` — \"decodes\" text out of random glyphs, left to right.\n *\n * Attributes: `text` (default: the element's text), `duration` (ms, 900),\n * `chars` (glyph set), `trigger` (`view` | `hover` | `load` | `manual`,\n * default `view`). Spaces and punctuation stay in place. Uses a monospace-\n * friendly fixed width per glyph only if you style it so; the element sets\n * nothing that causes reflow beyond its own text. Event: `usa:complete`.\n * Reduced motion: shows the final text.\n */\nexport interface UsaScrambleElement extends UsaElement {\n play(): Promise<void>;\n}\n\n/** One frame of the scramble: the first `progress` share is resolved. */\nexport function scrambleFrame(text: string, progress: number, glyphs = GLYPHS, rnd: () => number = Math.random): string {\n const done = Math.floor(text.length * progress);\n let out = '';\n for (let i = 0; i < text.length; i++) {\n const ch = text[i];\n out += i < done || /\\s|[.,:;!?'\"()\\-–—]/.test(ch) ? ch : glyphs[Math.floor(rnd() * glyphs.length)];\n }\n return out;\n}\n\nexport function defineScramble(tag = 'usa-scramble'): CustomElementConstructor | undefined {\n return defineElement(\n tag,\n (Base) =>\n class UsaScramble extends Base {\n static get observedAttributes(): string[] {\n return ['text'];\n }\n\n private _source: string | null = null;\n private _out: HTMLElement | null = null;\n private _frame = 0;\n\n private get text(): string {\n return this.getAttribute('text') ?? this._source ?? '';\n }\n\n mount(): void {\n if (this._source === null) this._source = (this.textContent || '').trim();\n this._out = document.createElement('span');\n this._out.setAttribute('aria-hidden', 'true');\n this._out.textContent = this.text;\n this.replaceChildren(srText(this.text), this._out);\n if (this.reduced) return;\n const trigger = this.str('trigger', 'view');\n if (trigger === 'load') this.play();\n else if (trigger === 'hover') {\n this.listen(this, 'pointerenter', () => this.play());\n this.listen(this, 'focusin', () => this.play());\n } else if (trigger === 'view') {\n let played = false;\n this.inView((v) => {\n if (v && !played) {\n played = true;\n this.play();\n }\n });\n }\n }\n\n unmount(): void {\n caf(this._frame);\n this._frame = 0;\n }\n\n play(): Promise<void> {\n caf(this._frame);\n const out = this._out;\n const text = this.text;\n if (!out || this.reduced) {\n if (out) out.textContent = text;\n return Promise.resolve();\n }\n const duration = this.num('duration', 900);\n const glyphs = this.str('chars', GLYPHS) || GLYPHS;\n const t0 = now();\n let last = -1;\n return new Promise((resolve) => {\n const step = () => {\n const p = Math.min(1, Math.max(0, now() - t0) / duration);\n // ~30 fps glyph churn is plenty and halves DOM writes\n const bucket = Math.floor(p * duration / 33);\n if (bucket !== last || p === 1) {\n last = bucket;\n out.textContent = p === 1 ? text : scrambleFrame(text, p, glyphs);\n }\n if (p < 1) this._frame = raf(step);\n else {\n this._frame = 0;\n this.emit('complete');\n resolve();\n }\n };\n this._frame = raf(step);\n });\n }\n },\n undefined\n );\n}\n","import { defineElement, raf, caf, now, type UsaElement } from '../base';\nimport css from './counter.css?raw';\n\n/**\n * `<usa-counter>` — counts up (or down) to a number when it scrolls into view.\n *\n * Attributes: `to` (target, required), `from` (0), `duration` (ms, 1600),\n * `decimals` (0), `locale` (default: the document language), `prefix`,\n * `suffix`, `grouping=\"false\"` (no thousands separators), `start`\n * (`view` | `load` | `manual`). Setting the `value` property animates from\n * the current value — handy for live dashboards. Uses tabular digits so\n * the width does not jump. Event: `usa:complete`. Reduced motion: jumps.\n */\nexport interface UsaCounterElement extends UsaElement {\n /** Current target; setting it animates to the new number. */\n value: number;\n /** Animate to `to` (default: the `to` attribute). */\n play(to?: number): Promise<void>;\n format(n: number): string;\n}\n\n/** easeOutExpo */\nexport const easeOutExpo = (t: number): number => (t >= 1 ? 1 : 1 - Math.pow(2, -10 * t));\n\nexport function defineCounter(tag = 'usa-counter'): CustomElementConstructor | undefined {\n return defineElement(\n tag,\n (Base) =>\n class UsaCounter extends Base {\n static get observedAttributes(): string[] {\n return ['to', 'decimals', 'locale', 'prefix', 'suffix', 'grouping'];\n }\n\n private _current = NaN;\n private _target = NaN;\n private _frame = 0;\n private _fmt: Intl.NumberFormat | null = null;\n\n get value(): number {\n return Number.isNaN(this._target) ? this.num('to', 0) : this._target;\n }\n set value(v: number) {\n this.play(Number(v));\n }\n\n format(n: number): string {\n if (!this._fmt) {\n const d = Math.max(0, Math.min(20, this.num('decimals', 0)));\n const locale = this.getAttribute('locale') || (typeof document !== 'undefined' && document.documentElement.lang) || undefined;\n try {\n this._fmt = new Intl.NumberFormat(locale, { minimumFractionDigits: d, maximumFractionDigits: d, useGrouping: this.getAttribute('grouping') !== 'false' });\n } catch {\n this._fmt = new Intl.NumberFormat(undefined, { minimumFractionDigits: d, maximumFractionDigits: d });\n }\n }\n return `${this.str('prefix')}${this._fmt.format(n)}${this.str('suffix')}`;\n }\n\n private render(n: number): void {\n this._current = n;\n this.textContent = this.format(n);\n }\n\n changed(name: string): void {\n this._fmt = null;\n if (name === 'to') this.play();\n else this.render(Number.isNaN(this._current) ? this.num('from', 0) : this._current);\n }\n\n mount(): void {\n this._fmt = null;\n const to = this.num('to', 0);\n if (this.reduced) {\n this._target = to;\n this.render(to);\n return;\n }\n if (Number.isNaN(this._current)) this.render(this.num('from', 0));\n const start = this.str('start', 'view');\n if (start === 'load') this.play();\n else if (start === 'view') {\n let done = false;\n this.inView((v) => {\n if (v && !done) {\n done = true;\n this.play();\n }\n }, { threshold: 0.4 });\n }\n }\n\n unmount(): void {\n caf(this._frame);\n this._frame = 0;\n }\n\n play(to = this.num('to', 0)): Promise<void> {\n caf(this._frame);\n this._target = to;\n const from = Number.isNaN(this._current) ? this.num('from', 0) : this._current;\n if (this.reduced || from === to || !this.isConnected) {\n this.render(to);\n this.emit('complete', { value: to });\n return Promise.resolve();\n }\n const duration = this.num('duration', 1600);\n const t0 = now();\n return new Promise((resolve) => {\n const step = () => {\n const t = Math.min(1, Math.max(0, now() - t0) / duration);\n this.render(from + (to - from) * easeOutExpo(t));\n if (t < 1) this._frame = raf(step);\n else {\n this._frame = 0;\n this.render(to);\n this.emit('complete', { value: to });\n resolve();\n }\n };\n this._frame = raf(step);\n });\n }\n },\n { id: 'counter', text: css }\n );\n}\n","import { defineElement, type UsaElement } from '../base';\nimport css from './shimmer-text.css?raw';\n\n/**\n * `<usa-shimmer-text>` — a light sweep across gradient-filled text (CSS\n * only; the element just maps attributes to custom properties).\n *\n * Attributes: `duration` (ms, 2600), `color` (base text colour), `shine`\n * (highlight colour), `angle` (deg, 110). Or style `--usa-shimmer-*`\n * directly. Reduced motion: static gradient text.\n */\nexport type UsaShimmerTextElement = UsaElement;\n\nexport function defineShimmerText(tag = 'usa-shimmer-text'): CustomElementConstructor | undefined {\n return defineElement(\n tag,\n (Base) =>\n class UsaShimmerText extends Base {\n static get observedAttributes(): string[] {\n return ['duration', 'color', 'shine', 'angle'];\n }\n\n mount(): void {\n const set = (attr: string, prop: string, unit = '') => {\n const v = this.getAttribute(attr);\n if (v !== null) this.style.setProperty(prop, v + unit);\n else this.style.removeProperty(prop);\n };\n set('duration', '--usa-shimmer-duration', 'ms');\n set('color', '--usa-shimmer-color');\n set('shine', '--usa-shimmer-shine');\n set('angle', '--usa-shimmer-angle', 'deg');\n }\n },\n { id: 'shimmer-text', text: css }\n );\n}\n","import { defineElement, srText, EASE_SPRING, EASE_OUT, type UsaElement } from '../base';\nimport css from './text-rotate.css?raw';\n\n/**\n * `<usa-text-rotate>` — cycles through words in place (\"Build *fast* /\n * *small* / *typed* apps\"). All words share one grid cell, so the width is\n * that of the longest word and nothing around it reflows.\n *\n * Attributes: `words` (separated by `|`, default: the element's text split\n * on `|`), `interval` (ms, 2200), `effect` (`slide` | `fade` | `flip` |\n * `blur`, default `slide`), `paused`. Pauses while off-screen and on hover\n * is not needed. Event: `usa:change` (`detail.index`, `detail.word`).\n * Reduced motion: words still change, without movement (fade only).\n */\nexport interface UsaTextRotateElement extends UsaElement {\n readonly index: number;\n next(): void;\n}\n\nexport function defineTextRotate(tag = 'usa-text-rotate'): CustomElementConstructor | undefined {\n return defineElement(\n tag,\n (Base) =>\n class UsaTextRotate extends Base {\n static get observedAttributes(): string[] {\n return ['words', 'interval', 'paused'];\n }\n\n private _source: string | null = null;\n private _index = 0;\n private _timer: ReturnType<typeof setInterval> | 0 = 0;\n private _visible = true;\n\n get index(): number {\n return this._index;\n }\n\n private get words(): string[] {\n return (this.getAttribute('words') ?? this._source ?? '').split('|').map((w) => w.trim()).filter(Boolean);\n }\n\n mount(): void {\n if (this._source === null) this._source = (this.textContent || '').trim();\n const words = this.words;\n this.replaceChildren(\n srText(words.join(', ')),\n ...words.map((w, i) => {\n const s = document.createElement('span');\n s.className = 'usa-rotate-word';\n s.textContent = w;\n s.setAttribute('aria-hidden', 'true');\n if (i !== this._index) s.setAttribute('data-hidden', '');\n return s;\n })\n );\n if (this._index >= words.length) this._index = 0;\n if (words.length < 2) return;\n this.inView((v) => (this._visible = v));\n if (!this.flag('paused')) {\n this._timer = setInterval(() => {\n if (this._visible && !(typeof document !== 'undefined' && document.hidden)) this.next();\n }, Math.max(400, this.num('interval', 2200)));\n }\n }\n\n unmount(): void {\n clearInterval(this._timer as ReturnType<typeof setInterval>);\n this._timer = 0;\n }\n\n next(): void {\n const els = Array.from(this.querySelectorAll<HTMLElement>('.usa-rotate-word'));\n if (els.length < 2) return;\n const prev = els[this._index];\n this._index = (this._index + 1) % els.length;\n const cur = els[this._index];\n prev.setAttribute('data-hidden', '');\n cur.removeAttribute('data-hidden');\n const effect = this.reduced ? 'fade' : this.str('effect', 'slide');\n const [inFrom, outTo] =\n effect === 'fade'\n ? [{ opacity: 0 }, { opacity: 0 }]\n : effect === 'flip'\n ? [{ opacity: 0, transform: 'perspective(400px) rotateX(-90deg)' }, { opacity: 0, transform: 'perspective(400px) rotateX(90deg)' }]\n : effect === 'blur'\n ? [{ opacity: 0, filter: 'blur(8px)' }, { opacity: 0, filter: 'blur(8px)' }]\n : [{ opacity: 0, transform: 'translateY(0.8em)' }, { opacity: 0, transform: 'translateY(-0.8em)' }];\n const neutral = { opacity: 1, transform: 'none', filter: 'none' };\n const pick = (f: Keyframe) => Object.fromEntries(Object.keys(f).map((k) => [k, (neutral as any)[k]]));\n this.motion(prev, [{ ...pick(outTo) }, outTo], { duration: 380, easing: EASE_OUT });\n this.motion(cur, [inFrom, pick(inFrom)], { duration: 520, easing: effect === 'slide' ? EASE_SPRING : EASE_OUT });\n this.emit('change', { index: this._index, word: cur.textContent });\n }\n },\n { id: 'text-rotate', text: css }\n );\n}\n","import { defineElement, srText, raf, caf, clamp, type UsaElement } from '../base';\nimport css from './text-fx.css?raw';\n\n/** Split `text` into per-character spans (words never break). The animated copy is aria-hidden. */\nfunction splitChars(host: HTMLElement, text: string): HTMLElement[] {\n const vis = document.createElement('span');\n vis.setAttribute('aria-hidden', 'true');\n const chars: HTMLElement[] = [];\n text.split(/(\\s+)/).forEach((w) => {\n if (/^\\s+$/.test(w)) {\n vis.append(document.createTextNode(w));\n return;\n }\n const word = document.createElement('span');\n word.className = 'usa-word';\n for (const c of Array.from(w)) {\n const s = document.createElement('span');\n s.className = 'usa-char';\n s.textContent = c;\n s.style.setProperty('--i', String(chars.length));\n word.append(s);\n chars.push(s);\n }\n vis.append(word);\n });\n host.replaceChildren(srText(text), vis);\n return chars;\n}\n\nconst textOf = (el: HTMLElement): string => (el.getAttribute('text') ?? el.dataset.usaText ?? (el.dataset.usaText = (el.textContent || '').trim()));\n\n/**\n * `<usa-wave-text>` — letters bob in a travelling wave.\n * Attributes: `amplitude` (em, 0.25), `speed` (s per cycle, 1.6), `stagger`\n * (s between letters, 0.06). Reduced motion: still text.\n */\nexport interface UsaWaveTextElement extends UsaElement {}\nexport function defineWaveText(tag = 'usa-wave-text'): CustomElementConstructor | undefined {\n return defineElement(tag, (Base) => class extends Base {\n static get observedAttributes(): string[] { return ['text']; }\n mount(): void {\n splitChars(this, textOf(this));\n this.style.setProperty('--usa-wave-a', `${this.num('amplitude', 0.25)}em`);\n this.style.setProperty('--usa-wave-s', `${this.num('speed', 1.6)}s`);\n this.style.setProperty('--usa-wave-d', `${this.num('stagger', 0.06)}s`);\n }\n }, { id: 'text-fx', text: css });\n}\n\n/**\n * `<usa-glitch>` — an RGB-split glitch on its text (`trigger=\"always\"`\n * default, or `hover`). Attributes: `intensity` (px, 3), `trigger`.\n * Reduced motion: no animation (plain text).\n */\nexport interface UsaGlitchElement extends UsaElement {}\nexport function defineGlitch(tag = 'usa-glitch'): CustomElementConstructor | undefined {\n return defineElement(tag, (Base) => class extends Base {\n static get observedAttributes(): string[] { return ['text', 'intensity']; }\n mount(): void {\n const t = textOf(this);\n this.setAttribute('data-text', t);\n this.style.setProperty('--usa-glitch-i', `${this.num('intensity', 3)}px`);\n if (!this.firstChild) this.textContent = t;\n }\n }, { id: 'text-fx', text: css });\n}\n\n/**\n * `<usa-gradient-text>` — text filled with a flowing multi-colour gradient.\n * Attributes: `colors` (comma list), `speed` (s, 6), `angle` (deg, 90).\n * Reduced motion: a static gradient.\n */\nexport interface UsaGradientTextElement extends UsaElement {}\nexport function defineGradientText(tag = 'usa-gradient-text'): CustomElementConstructor | undefined {\n return defineElement(tag, (Base) => class extends Base {\n static get observedAttributes(): string[] { return ['colors', 'speed', 'angle']; }\n mount(): void {\n const c = this.str('colors', '#7c5cff,#22d3ee,#f472b6,#facc15').split(',').map((s) => s.trim());\n this.style.setProperty('--usa-grad', `linear-gradient(${this.num('angle', 90)}deg, ${[...c, c[0]].join(', ')})`);\n this.style.setProperty('--usa-grad-s', `${this.num('speed', 6)}s`);\n }\n }, { id: 'text-fx', text: css });\n}\n\n/**\n * `<usa-handwriting>` — the text draws itself stroke by stroke (SVG text\n * outline), then fills in, when it scrolls into view.\n * Attributes: `text`, `duration` (ms, 2400), `stroke` (colour), `size` (px,\n * 64), `font` (family; a script font looks best). Events: `usa:complete`.\n * Reduced motion: the filled text appears at once.\n */\nexport interface UsaHandwritingElement extends UsaElement {\n play(): void;\n}\nexport function defineHandwriting(tag = 'usa-handwriting'): CustomElementConstructor | undefined {\n return defineElement(tag, (Base) => class extends Base {\n static get observedAttributes(): string[] { return ['text', 'size', 'font']; }\n mount(): void {\n const t = textOf(this);\n const size = this.num('size', 64);\n const w = Math.ceil(t.length * size * 0.62) + 8;\n this.replaceChildren(srText(t));\n this.insertAdjacentHTML('beforeend', `<svg aria-hidden=\"true\" viewBox=\"0 0 ${w} ${Math.ceil(size * 1.3)}\" width=\"${w}\" height=\"${Math.ceil(size * 1.3)}\"><text x=\"4\" y=\"${Math.round(size)}\" font-size=\"${size}\"></text></svg>`);\n const text = this.querySelector('text')!;\n text.textContent = t;\n if (this.str('font')) text.setAttribute('font-family', this.str('font'));\n if (this.str('stroke')) this.style.setProperty('--usa-hw-stroke', this.str('stroke'));\n this.style.setProperty('--usa-hw-d', `${this.num('duration', 2400)}ms`);\n if (this.reduced) {\n this.setAttribute('data-state', 'done');\n return;\n }\n this.inView((v) => v && this.play(), { threshold: 0.3 });\n }\n play(): void {\n this.removeAttribute('data-state');\n void this.offsetWidth;\n this.setAttribute('data-state', 'drawing');\n setTimeout(() => {\n this.setAttribute('data-state', 'done');\n this.emit('complete');\n }, this.reduced ? 0 : this.num('duration', 2400));\n }\n }, { id: 'text-fx', text: css });\n}\n\n/**\n * `<usa-scroll-highlight>` — reading highlight: words light up one by one\n * as the paragraph scrolls through the viewport (`mode=\"words\"`, default),\n * or a highlighter marker sweeps behind the text on enter (`mode=\"marker\"`).\n * Attributes: `mode`, `color` (marker), `dim` (opacity of unread words,\n * 0.2). Reduced motion: fully highlighted text.\n */\nexport interface UsaScrollHighlightElement extends UsaElement {\n readonly progress: number;\n}\nexport function defineScrollHighlight(tag = 'usa-scroll-highlight'): CustomElementConstructor | undefined {\n return defineElement(tag, (Base) => class extends Base {\n static get observedAttributes(): string[] { return ['mode', 'text']; }\n private _f = 0;\n private _p = 0;\n get progress(): number { return this._p; }\n mount(): void {\n const mode = this.str('mode', 'words');\n if (this.str('color')) this.style.setProperty('--usa-hl-color', this.str('color'));\n this.style.setProperty('--usa-hl-dim', String(this.num('dim', 0.2)));\n if (mode === 'marker') {\n if (this.reduced) this.setAttribute('data-lit', '');\n else this.inView((v) => v && this.setAttribute('data-lit', ''), { threshold: 0.6 });\n return;\n }\n const t = textOf(this);\n const vis = document.createElement('span');\n vis.setAttribute('aria-hidden', 'true');\n const words = t.split(/\\s+/).filter(Boolean).map((w) => {\n const s = document.createElement('span');\n s.className = 'usa-hl-word';\n s.textContent = w;\n vis.append(s, ' ');\n return s;\n });\n this.replaceChildren(srText(t), vis);\n if (this.reduced) {\n words.forEach((w) => w.setAttribute('data-on', ''));\n return;\n }\n const update = () => {\n this._f = 0;\n const r = this.getBoundingClientRect();\n const H = window.innerHeight || 800;\n this._p = clamp((H * 0.85 - r.top) / (r.height + H * 0.35), 0, 1);\n const lit = Math.round(this._p * words.length);\n words.forEach((w, i) => w.toggleAttribute('data-on', i < lit));\n };\n const on = () => !this._f && (this._f = raf(update));\n let active = false;\n this.inView((v) => {\n if (v === active) return;\n active = v;\n if (v) window.addEventListener('scroll', on, { passive: true });\n else window.removeEventListener('scroll', on);\n on();\n });\n this.onCleanup(() => window.removeEventListener('scroll', on));\n }\n unmount(): void {\n caf(this._f);\n this._f = 0;\n }\n }, { id: 'text-fx', text: css });\n}\n","/**\n * use-scroll-animate/components/text — text effects.\n * `<usa-typewriter>`, `<usa-split-text>`, `<usa-scramble>`, `<usa-counter>`,\n * `<usa-shimmer-text>`, `<usa-text-rotate>`.\n */\nimport { defineTypewriter, type UsaTypewriterElement } from './typewriter';\nimport { defineSplitText, type UsaSplitTextElement } from './split-text';\nimport { defineScramble, type UsaScrambleElement } from './scramble';\nimport { defineCounter, type UsaCounterElement } from './counter';\nimport { defineShimmerText, type UsaShimmerTextElement } from './shimmer-text';\nimport { defineTextRotate, type UsaTextRotateElement } from './text-rotate';\n\nimport { defineWaveText, defineGlitch, defineGradientText, defineHandwriting, defineScrollHighlight } from './text-fx';\nimport type { UsaWaveTextElement, UsaGlitchElement, UsaGradientTextElement, UsaHandwritingElement, UsaScrollHighlightElement } from './text-fx';\nexport { defineTypewriter, defineSplitText, defineScramble, defineCounter, defineShimmerText, defineTextRotate };\nexport { scrambleFrame } from './scramble';\nexport { easeOutExpo } from './counter';\nexport type { UsaTypewriterElement, UsaSplitTextElement, UsaScrambleElement, UsaCounterElement, UsaShimmerTextElement, UsaTextRotateElement };\nexport { defineWaveText, defineGlitch, defineGradientText, defineHandwriting, defineScrollHighlight };\nexport type { UsaWaveTextElement, UsaGlitchElement, UsaGradientTextElement, UsaHandwritingElement, UsaScrollHighlightElement };\nexport { configureComponents, prefersReducedMotion } from '../base';\nexport type { ComponentsConfig, UsaElement } from '../base';\n\n/** Register every component of this category under its default tag. */\nexport function defineTextComponents(): void {\n defineTypewriter();\n defineSplitText();\n defineScramble();\n defineCounter();\n defineShimmerText();\n defineTextRotate();\n defineWaveText();\n defineGlitch();\n defineGradientText();\n defineHandwriting();\n defineScrollHighlight();\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'usa-wave-text': UsaWaveTextElement;\n 'usa-glitch': UsaGlitchElement;\n 'usa-gradient-text': UsaGradientTextElement;\n 'usa-handwriting': UsaHandwritingElement;\n 'usa-scroll-highlight': UsaScrollHighlightElement;\n 'usa-typewriter': UsaTypewriterElement;\n 'usa-split-text': UsaSplitTextElement;\n 'usa-scramble': UsaScrambleElement;\n 'usa-counter': UsaCounterElement;\n 'usa-shimmer-text': UsaShimmerTextElement;\n 'usa-text-rotate': UsaTextRotateElement;\n }\n}\n","import { defineElement, EASE_OUT, type UsaElement } from '../base';\nimport css from './ripple.css?raw';\n\n/**\n * `<usa-ripple>` — an ink ripple from the pointer (or the centre, for\n * keyboard presses) on whatever it wraps: buttons, list items, cards.\n *\n * Attributes: `color` (default `currentColor`), `opacity` (0.22),\n * `duration` (ms, 550), `centered`, `disabled`. Clips its content to its\n * own border radius. Reduced motion: a brief highlight instead of the wave.\n */\nexport interface UsaRippleElement extends UsaElement {\n /** Spawn a ripple at client coordinates (default: centre). */\n ripple(x?: number, y?: number): void;\n}\n\nexport function defineRipple(tag = 'usa-ripple'): CustomElementConstructor | undefined {\n return defineElement(\n tag,\n (Base) =>\n class UsaRipple extends Base {\n static get observedAttributes(): string[] {\n return [];\n }\n\n mount(): void {\n this.listen(this, 'pointerdown', (e: PointerEvent) => {\n if (e.button !== 0 && e.pointerType === 'mouse') return;\n this.ripple(e.clientX, e.clientY);\n });\n this.listen(this, 'keydown', (e: KeyboardEvent) => {\n if ((e.key === 'Enter' || e.key === ' ') && !e.repeat) this.ripple();\n });\n }\n\n ripple(x?: number, y?: number): void {\n if (this.flag('disabled')) return;\n const r = this.getBoundingClientRect();\n const centered = this.flag('centered') || x === undefined || y === undefined;\n const cx = centered ? r.width / 2 : (x as number) - r.left;\n const cy = centered ? r.height / 2 : (y as number) - r.top;\n const radius = Math.hypot(Math.max(cx, r.width - cx), Math.max(cy, r.height - cy));\n const wave = document.createElement('span');\n wave.className = 'usa-ripple-wave';\n wave.setAttribute('aria-hidden', 'true');\n const size = radius * 2;\n wave.style.cssText = `width:${size}px;height:${size}px;left:${cx - radius}px;top:${cy - radius}px;background:${this.str('color', 'currentColor')}`;\n this.append(wave);\n const opacity = this.num('opacity', 0.22);\n const duration = this.num('duration', 550);\n const frames = this.reduced\n ? [{ opacity }, { opacity: 0 }]\n : [\n { transform: 'scale(0)', opacity },\n { transform: 'scale(1)', opacity, offset: 0.7 },\n { transform: 'scale(1)', opacity: 0 },\n ];\n const a = this.motion(wave, frames, { duration: this.reduced ? 300 : duration, easing: EASE_OUT, fill: 'forwards' });\n if (a) a.onfinish = () => wave.remove();\n else setTimeout(() => wave.remove(), 0);\n }\n },\n { id: 'ripple', text: css }\n );\n}\n","import { defineElement, raf, caf, type UsaElement } from '../base';\nimport css from './magnetic.css?raw';\n\n/**\n * `<usa-magnetic>` — its content leans toward the pointer when the pointer\n * comes near, and springs back when it leaves (great for CTAs and icons).\n *\n * Attributes: `strength` (0–1 share of the pointer offset, 0.35), `radius`\n * (px of attraction beyond the element's edge, 60), `disabled`. Only on\n * devices with a fine pointer that hovers; off under reduced motion.\n * Writes one `transform` per frame through `--usa-mx` / `--usa-my`.\n */\nexport type UsaMagneticElement = UsaElement;\n\nexport function defineMagnetic(tag = 'usa-magnetic'): CustomElementConstructor | undefined {\n return defineElement(\n tag,\n (Base) =>\n class UsaMagnetic extends Base {\n static get observedAttributes(): string[] {\n return ['strength', 'radius', 'disabled'];\n }\n\n private _frame = 0;\n\n mount(): void {\n if (this.reduced || this.flag('disabled')) return;\n if (typeof matchMedia === 'function' && !matchMedia('(hover: hover) and (pointer: fine)').matches) return;\n const strength = this.num('strength', 0.35);\n const radius = this.num('radius', 60);\n let x = 0;\n let y = 0;\n let active = false;\n const apply = () => {\n this._frame = 0;\n const r = this.getBoundingClientRect();\n const dx = x - (r.left + r.width / 2);\n const dy = y - (r.top + r.height / 2);\n const near = Math.abs(dx) < r.width / 2 + radius && Math.abs(dy) < r.height / 2 + radius;\n if (near) {\n active = true;\n this.setAttribute('data-active', '');\n this.style.setProperty('--usa-mx', `${(dx * strength).toFixed(2)}px`);\n this.style.setProperty('--usa-my', `${(dy * strength).toFixed(2)}px`);\n } else if (active) this.release();\n };\n this.listen(\n document,\n 'pointermove',\n (e: PointerEvent) => {\n if (e.pointerType !== 'mouse' && e.pointerType !== 'pen') return;\n x = e.clientX;\n y = e.clientY;\n if (!this._frame) this._frame = raf(apply);\n },\n { passive: true }\n );\n this.listen(document, 'pointerleave', () => this.release());\n this.listen(window, 'blur', () => this.release());\n }\n\n private release(): void {\n this.removeAttribute('data-active');\n this.style.removeProperty('--usa-mx');\n this.style.removeProperty('--usa-my');\n }\n\n unmount(): void {\n caf(this._frame);\n this._frame = 0;\n this.release();\n }\n },\n { id: 'magnetic', text: css }\n );\n}\n","import { defineElement, raf, caf, clamp, type UsaElement } from '../base';\nimport css from './tilt.css?raw';\n\n/**\n * `<usa-tilt>` — a 3D card that tilts toward the pointer, with an optional\n * glare highlight that follows it.\n *\n * Attributes: `max` (deg, 10), `scale` (1.03 while hovered), `perspective`\n * (px, 900), `glare` (add the light reflection), `reverse` (tilt away),\n * `disabled`. Off under reduced motion. Exposes `--usa-tilt-x` /\n * `--usa-tilt-y` (−1…1) for parallax layers inside the card.\n */\nexport type UsaTiltElement = UsaElement;\n\nexport function defineTilt(tag = 'usa-tilt'): CustomElementConstructor | undefined {\n return defineElement(\n tag,\n (Base) =>\n class UsaTilt extends Base {\n static get observedAttributes(): string[] {\n return ['max', 'scale', 'perspective', 'glare', 'reverse', 'disabled'];\n }\n\n private _frame = 0;\n private _glare: HTMLElement | null = null;\n\n mount(): void {\n if (this.flag('glare') && !this._glare) {\n this._glare = document.createElement('span');\n this._glare.className = 'usa-tilt-glare';\n this._glare.setAttribute('aria-hidden', 'true');\n this.append(this._glare);\n } else if (!this.flag('glare') && this._glare) {\n this._glare.remove();\n this._glare = null;\n }\n if (this.reduced || this.flag('disabled')) return;\n const max = this.num('max', 10) * (this.flag('reverse') ? -1 : 1);\n const scale = this.num('scale', 1.03);\n const persp = this.num('perspective', 900);\n let px = 0.5;\n let py = 0.5;\n let rect: DOMRect | null = null;\n const apply = () => {\n this._frame = 0;\n const nx = clamp(px * 2 - 1, -1, 1);\n const ny = clamp(py * 2 - 1, -1, 1);\n this.style.transform = `perspective(${persp}px) rotateX(${(-ny * max).toFixed(2)}deg) rotateY(${(nx * max).toFixed(2)}deg) scale(${scale})`;\n this.style.setProperty('--usa-tilt-x', nx.toFixed(3));\n this.style.setProperty('--usa-tilt-y', ny.toFixed(3));\n this.style.setProperty('--usa-glare-x', `${(px * 100).toFixed(1)}%`);\n this.style.setProperty('--usa-glare-y', `${(py * 100).toFixed(1)}%`);\n };\n this.listen(this, 'pointerenter', (e: PointerEvent) => {\n if (e.pointerType === 'touch') return;\n rect = this.getBoundingClientRect();\n this.setAttribute('data-active', '');\n });\n this.listen(this, 'pointermove', (e: PointerEvent) => {\n if (e.pointerType === 'touch') return;\n rect = rect || this.getBoundingClientRect();\n px = (e.clientX - rect.left) / (rect.width || 1);\n py = (e.clientY - rect.top) / (rect.height || 1);\n if (!this._frame) this._frame = raf(apply);\n });\n this.listen(this, 'pointerleave', () => this.reset());\n }\n\n private reset(): void {\n caf(this._frame);\n this._frame = 0;\n this.removeAttribute('data-active');\n this.style.transform = '';\n this.style.setProperty('--usa-tilt-x', '0');\n this.style.setProperty('--usa-tilt-y', '0');\n }\n\n unmount(): void {\n this.reset();\n }\n },\n { id: 'tilt', text: css }\n );\n}\n","import { defineElement, raf, caf, type UsaElement } from '../base';\nimport css from './spotlight.css?raw';\n\n/**\n * `<usa-spotlight>` — the Windows Fluent \"Reveal highlight\": a soft light\n * follows the pointer across a group of items, lighting up their borders\n * (even of neighbours) and the background of the hovered one. Put buttons,\n * tiles or menu items inside; each direct child is an item (or mark items\n * with `data-spotlight` to pick them yourself).\n *\n * Attributes: `size` (px, radius of the light, 160), `color` (default a\n * translucent white), `border` (px width of the lit border, 1),\n * `no-fill` (only light the borders). Not a motion effect, so it stays on\n * under reduced motion; off on touch-only devices.\n */\nexport type UsaSpotlightElement = UsaElement;\n\nexport function defineSpotlight(tag = 'usa-spotlight'): CustomElementConstructor | undefined {\n return defineElement(\n tag,\n (Base) =>\n class UsaSpotlight extends Base {\n static get observedAttributes(): string[] {\n return ['size', 'color', 'border'];\n }\n\n private _frame = 0;\n\n private items(): HTMLElement[] {\n const marked = Array.from(this.querySelectorAll<HTMLElement>('[data-spotlight]'));\n const items = marked.length ? marked : (Array.from(this.children) as HTMLElement[]);\n items.forEach((el) => el.classList.add('usa-spotlight-item'));\n return items;\n }\n\n mount(): void {\n const size = this.getAttribute('size');\n if (size) this.style.setProperty('--usa-spot-size', `${Number(size)}px`);\n const color = this.getAttribute('color');\n if (color) this.style.setProperty('--usa-spot-color', color);\n const border = this.getAttribute('border');\n if (border) this.style.setProperty('--usa-spot-border', `${Number(border)}px`);\n let items = this.items();\n let x = 0;\n let y = 0;\n const apply = () => {\n this._frame = 0;\n // All reads, then all writes\n const rects = items.map((el) => el.getBoundingClientRect());\n rects.forEach((r, i) => {\n items[i].style.setProperty('--usa-spot-x', `${(x - r.left).toFixed(1)}px`);\n items[i].style.setProperty('--usa-spot-y', `${(y - r.top).toFixed(1)}px`);\n });\n };\n this.listen(this, 'pointerenter', (e: PointerEvent) => {\n if (e.pointerType === 'touch') return;\n items = this.items();\n this.setAttribute('data-lit', '');\n });\n this.listen(this, 'pointermove', (e: PointerEvent) => {\n if (e.pointerType === 'touch') return;\n x = e.clientX;\n y = e.clientY;\n if (!this.hasAttribute('data-lit')) this.setAttribute('data-lit', '');\n if (!this._frame) this._frame = raf(apply);\n });\n this.listen(this, 'pointerleave', () => this.removeAttribute('data-lit'));\n }\n\n unmount(): void {\n caf(this._frame);\n this._frame = 0;\n this.removeAttribute('data-lit');\n }\n },\n { id: 'spotlight', text: css }\n );\n}\n","import { defineElement, EASE_SPRING, type UsaElement } from '../base';\nimport css from './press.css?raw';\n\n/**\n * `<usa-press>` — tactile press feedback: content dips while pressed and\n * springs back on release (the Fluent \"pointer down\" scale), or bounces once\n * on click with `bounce`.\n *\n * Attributes: `scale` (pressed scale, 0.95), `bounce` (overshoot on\n * release), `disabled`. Works with mouse, touch, pen and Space/Enter.\n * Reduced motion: a subtle dim instead of scaling.\n */\nexport interface UsaPressElement extends UsaElement {\n readonly pressed: boolean;\n}\n\nexport function definePress(tag = 'usa-press'): CustomElementConstructor | undefined {\n return defineElement(\n tag,\n (Base) =>\n class UsaPress extends Base {\n static get observedAttributes(): string[] {\n return ['disabled'];\n }\n\n private _anim: Animation | null = null;\n private _down = false;\n\n get pressed(): boolean {\n return this._down;\n }\n\n private frame(down: boolean): Keyframe {\n if (this.reduced) return { opacity: down ? 0.7 : 1 };\n return { transform: down ? `scale(${this.num('scale', 0.95)})` : 'scale(1)' };\n }\n\n private down(): void {\n if (this._down || this.flag('disabled')) return;\n this._down = true;\n this.setAttribute('data-pressed', '');\n const from = this.currentFrame();\n this._anim?.cancel();\n this._anim = this.motion(this, [from, this.frame(true)], { duration: 120, easing: 'cubic-bezier(0.3, 0, 0.7, 1)', fill: 'forwards' });\n }\n\n private up(): void {\n if (!this._down) return;\n this._down = false;\n this.removeAttribute('data-pressed');\n const from = this.currentFrame();\n this._anim?.cancel();\n const frames: Keyframe[] =\n this.flag('bounce') && !this.reduced\n ? [from, { transform: 'scale(1.06)', offset: 0.45 }, { transform: 'scale(0.99)', offset: 0.75 }, this.frame(false)]\n : [from, this.frame(false)];\n const a = this.motion(this, frames, { duration: this.flag('bounce') ? 480 : 320, easing: EASE_SPRING });\n this._anim = a;\n if (a) a.onfinish = () => this._anim === a && (this._anim = null);\n }\n\n private currentFrame(): Keyframe {\n if (typeof getComputedStyle !== 'function') return this.frame(false);\n const cs = getComputedStyle(this);\n return this.reduced ? { opacity: cs.opacity || '1' } : { transform: cs.transform && cs.transform !== 'none' ? cs.transform : 'scale(1)' };\n }\n\n mount(): void {\n this.listen(this, 'pointerdown', (e: PointerEvent) => {\n if (e.pointerType === 'mouse' && e.button !== 0) return;\n this.down();\n });\n for (const t of ['pointerup', 'pointerleave', 'pointercancel', 'blur']) this.listen(this, t, () => this.up());\n this.listen(this, 'keydown', (e: KeyboardEvent) => (e.key === ' ' || e.key === 'Enter') && !e.repeat && this.down());\n this.listen(this, 'keyup', (e: KeyboardEvent) => (e.key === ' ' || e.key === 'Enter') && this.up());\n }\n\n unmount(): void {\n this._anim?.cancel();\n this._anim = null;\n this._down = false;\n }\n },\n { id: 'press', text: css }\n );\n}\n","import { defineElement, type UsaElement } from '../base';\nimport css from './toggle.css?raw';\n\n/**\n * `<usa-toggle>` — an accessible switch whose knob stretches while pressed\n * and glides across (the Windows 11 / iOS toggle). `role=\"switch\"`,\n * keyboard (Space / Enter), and form-associated where `ElementInternals`\n * exists (submits `value`, default `\"on\"`, under `name` when checked).\n *\n * Attributes: `checked`, `disabled`, `name`, `value`, `label`\n * (accessible name if there is no `aria-label` / `<label>`). Events:\n * `change` and `usa:change` (`detail.checked`). Reduced motion: no glide.\n */\nexport interface UsaToggleElement extends UsaElement {\n checked: boolean;\n disabled: boolean;\n toggle(force?: boolean): void;\n}\n\nexport function defineToggle(tag = 'usa-toggle'): CustomElementConstructor | undefined {\n return defineElement(\n tag,\n (Base) =>\n class UsaToggle extends Base {\n static formAssociated = true;\n static get observedAttributes(): string[] {\n return ['checked', 'disabled', 'label'];\n }\n\n private _internals: ElementInternals | null = null;\n\n constructor() {\n super();\n try {\n this._internals = typeof (this as any).attachInternals === 'function' ? (this as any).attachInternals() : null;\n } catch {\n this._internals = null;\n }\n }\n\n get checked(): boolean {\n return this.hasAttribute('checked');\n }\n set checked(v: boolean) {\n this.toggleAttribute('checked', !!v);\n }\n get disabled(): boolean {\n return this.hasAttribute('disabled');\n }\n set disabled(v: boolean) {\n this.toggleAttribute('disabled', !!v);\n }\n\n changed(): void {\n this.sync();\n }\n\n private sync(): void {\n this.setAttribute('aria-checked', String(this.checked));\n this.setAttribute('aria-disabled', String(this.disabled));\n this.tabIndex = this.disabled ? -1 : 0;\n const label = this.getAttribute('label');\n if (label && !this.hasAttribute('aria-label')) this.setAttribute('aria-label', label);\n this._internals?.setFormValue?.(this.checked ? this.str('value', 'on') : null);\n }\n\n mount(): void {\n if (!this.querySelector(':scope > .usa-toggle-track')) {\n const track = document.createElement('span');\n track.className = 'usa-toggle-track';\n track.setAttribute('aria-hidden', 'true');\n const knob = document.createElement('span');\n knob.className = 'usa-toggle-knob';\n track.append(knob);\n this.prepend(track);\n }\n this.setAttribute('role', 'switch');\n this.sync();\n this.listen(this, 'click', () => this.toggle());\n this.listen(this, 'keydown', (e: KeyboardEvent) => {\n if (e.key === ' ' || e.key === 'Enter') {\n e.preventDefault();\n if (!e.repeat) this.toggle();\n }\n });\n this.listen(this, 'pointerdown', () => !this.disabled && this.setAttribute('data-pressed', ''));\n for (const t of ['pointerup', 'pointerleave', 'pointercancel']) this.listen(this, t, () => this.removeAttribute('data-pressed'));\n }\n\n toggle(force?: boolean): void {\n if (this.disabled) return;\n const next = force === undefined ? !this.checked : force;\n if (next === this.checked) return;\n this.checked = next;\n this.sync();\n this.dispatchEvent(new Event('change', { bubbles: true }));\n this.emit('change', { checked: next });\n }\n },\n { id: 'toggle', text: css }\n );\n}\n","/**\n * use-scroll-animate/components/interaction — micro-interactions.\n * `<usa-ripple>`, `<usa-magnetic>`, `<usa-tilt>`, `<usa-spotlight>`,\n * `<usa-press>`, `<usa-toggle>`.\n */\nimport { defineRipple, type UsaRippleElement } from './ripple';\nimport { defineMagnetic, type UsaMagneticElement } from './magnetic';\nimport { defineTilt, type UsaTiltElement } from './tilt';\nimport { defineSpotlight, type UsaSpotlightElement } from './spotlight';\nimport { definePress, type UsaPressElement } from './press';\nimport { defineToggle, type UsaToggleElement } from './toggle';\n\nexport { defineRipple, defineMagnetic, defineTilt, defineSpotlight, definePress, defineToggle };\nexport type { UsaRippleElement, UsaMagneticElement, UsaTiltElement, UsaSpotlightElement, UsaPressElement, UsaToggleElement };\nexport { configureComponents, prefersReducedMotion } from '../base';\nexport type { ComponentsConfig, UsaElement } from '../base';\n\n/** Register every component of this category under its default tag. */\nexport function defineInteractionComponents(): void {\n defineRipple();\n defineMagnetic();\n defineTilt();\n defineSpotlight();\n definePress();\n defineToggle();\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'usa-ripple': UsaRippleElement;\n 'usa-magnetic': UsaMagneticElement;\n 'usa-tilt': UsaTiltElement;\n 'usa-spotlight': UsaSpotlightElement;\n 'usa-press': UsaPressElement;\n 'usa-toggle': UsaToggleElement;\n }\n}\n","import { kindOf, defineElement, type UsaElement } from '../base';\nimport css from './spinner.css?raw';\n\nexport const SPINNER_VARIANTS = ['fluent', 'windows', 'ring', 'dots', 'pulse', 'bars'] as const;\nexport type SpinnerVariant = (typeof SPINNER_VARIANTS)[number];\n\n/**\n * `<usa-spinner>` — indeterminate loading indicators, pure CSS animations\n * of `transform` / `opacity` (plus an SVG stroke for `fluent`).\n *\n * Kinds (`kind`): `fluent` (default — the WinUI / Windows 11\n * ProgressRing arc), `windows` (the Windows 10 boot \"orbiting dots\"),\n * `ring` (classic border spinner), `dots` (three bouncing dots / typing\n * indicator), `pulse` (expanding ripple), `bars` (equalizer).\n * Attributes: `size` (px, 32), `label` (accessible name, \"Loading\"),\n * `paused`. Colour follows `color` / `--usa-spinner-color`.\n * `role=\"progressbar\"` without a value (indeterminate). Reduced motion:\n * a slow opacity pulse instead of movement.\n */\nexport interface UsaSpinnerElement extends UsaElement {\n /** Spinner kind (`kind` attribute). */\n kind: SpinnerVariant;\n}\n\nfunction markup(variant: string): string {\n switch (variant) {\n case 'windows':\n return '<i></i><i></i><i></i><i></i><i></i>';\n case 'dots':\n return '<i></i><i></i><i></i>';\n case 'bars':\n return '<i></i><i></i><i></i><i></i>';\n case 'pulse':\n return '<i></i><i></i>';\n case 'ring':\n return '<i></i>';\n default:\n return '<svg viewBox=\"0 0 16 16\" aria-hidden=\"true\"><circle cx=\"8\" cy=\"8\" r=\"7\" pathLength=\"100\"/></svg>';\n }\n}\n\nexport function defineSpinner(tag = 'usa-spinner'): CustomElementConstructor | undefined {\n return defineElement(\n tag,\n (Base) =>\n class UsaSpinner extends Base {\n static get observedAttributes(): string[] {\n return ['kind', 'size', 'label'];\n }\n\n /** The spinner kind (`kind` attribute). */\n get kind(): SpinnerVariant {\n return kindOf(this, SPINNER_VARIANTS, 'fluent') as SpinnerVariant;\n }\n set kind(v: SpinnerVariant) {\n this.setAttribute('kind', v);\n }\n\n\n mount(): void {\n const variant = this.kind;\n if (this.getAttribute('data-kind') !== variant) {\n this.innerHTML = markup(variant);\n this.setAttribute('data-kind', variant);\n }\n const size = this.getAttribute('size');\n if (size) this.style.setProperty('--usa-spinner-size', `${Number(size)}px`);\n else this.style.removeProperty('--usa-spinner-size');\n this.setAttribute('role', 'progressbar');\n if (!this.hasAttribute('aria-label') || this.hasAttribute('label')) this.setAttribute('aria-label', this.str('label', 'Loading'));\n }\n },\n { id: 'spinner', text: css }\n );\n}\n","import { defineElement, EASE_OUT, type UsaElement } from '../base';\nimport css from './skeleton.css?raw';\n\n/**\n * `<usa-skeleton>` — shimmering placeholders while content loads. With\n * `loading`, it shows `lines` bars (or one block of `width` × `height`,\n * or a `circle`) and hides its children; remove `loading` and the real\n * content fades in.\n *\n * Attributes: `loading`, `lines` (3), `width`, `height` (CSS lengths),\n * `circle`, `radius`, `avatar` (circle + lines, like a list row).\n * `aria-busy` follows `loading`. Reduced motion: no shimmer sweep.\n */\nexport interface UsaSkeletonElement extends UsaElement {\n loading: boolean;\n}\n\nexport function defineSkeleton(tag = 'usa-skeleton'): CustomElementConstructor | undefined {\n return defineElement(\n tag,\n (Base) =>\n class UsaSkeleton extends Base {\n static get observedAttributes(): string[] {\n return ['loading', 'lines', 'width', 'height', 'circle', 'avatar', 'radius'];\n }\n\n private _ph: HTMLElement | null = null;\n\n get loading(): boolean {\n return this.hasAttribute('loading');\n }\n set loading(v: boolean) {\n this.toggleAttribute('loading', !!v);\n }\n\n changed(name: string): void {\n if (name === 'loading') this.sync(true);\n else {\n this._ph?.remove();\n this._ph = null;\n this.sync(false);\n }\n }\n\n mount(): void {\n this.sync(false);\n }\n\n private build(): HTMLElement {\n const ph = document.createElement('div');\n ph.className = 'usa-skeleton-ph';\n ph.setAttribute('aria-hidden', 'true');\n const bone = (cls = '') => {\n const b = document.createElement('span');\n b.className = `usa-bone ${cls}`.trim();\n return b;\n };\n const radius = this.getAttribute('radius');\n if (radius) this.style.setProperty('--usa-skeleton-radius', radius);\n if (this.flag('circle') || this.hasAttribute('width') || this.hasAttribute('height')) {\n const b = bone(this.flag('circle') ? 'usa-bone-circle' : 'usa-bone-block');\n b.style.width = this.str('width', this.flag('circle') ? this.str('height', '48px') : '100%');\n b.style.height = this.str('height', this.flag('circle') ? b.style.width : '120px');\n ph.append(b);\n } else {\n if (this.flag('avatar')) ph.append(bone('usa-bone-circle usa-bone-avatar'));\n const col = document.createElement('div');\n col.className = 'usa-bone-lines';\n const n = Math.max(1, Math.min(20, this.num('lines', 3)));\n for (let i = 0; i < n; i++) col.append(bone(i === n - 1 && n > 1 ? 'usa-bone-last' : ''));\n ph.append(col);\n }\n return ph;\n }\n\n private sync(animate: boolean): void {\n const loading = this.loading;\n this.setAttribute('aria-busy', String(loading));\n if (loading) {\n if (!this._ph) {\n this._ph = this.build();\n this.prepend(this._ph);\n }\n return;\n }\n if (this._ph) {\n this._ph.remove();\n this._ph = null;\n }\n if (animate && !this.reduced) {\n for (const kid of Array.from(this.children)) {\n this.motion(kid, [{ opacity: 0, transform: 'translateY(4px)' }, { opacity: 1, transform: 'none' }], { duration: 360, easing: EASE_OUT });\n }\n }\n this.emit('loaded');\n }\n },\n { id: 'skeleton', text: css }\n );\n}\n","import { defineElement, clamp, type UsaElement } from '../base';\nimport css from './progress.css?raw';\n\n/**\n * `<usa-progress>` — a linear progress bar. Determinate (`value` / `max`)\n * bars glide between values with `transform: scaleX()`; without a value,\n * or with `indeterminate`, it shows the Windows Fluent indeterminate\n * animation (two sliding segments).\n *\n * Attributes: `value`, `max` (100), `indeterminate`, `state`\n * (`paused` | `error` — the WinUI states), `label` (accessible name).\n * `role=\"progressbar\"` with `aria-valuenow` when determinate.\n * Reduced motion: no glide; indeterminate becomes a gentle pulse.\n */\nexport interface UsaProgressElement extends UsaElement {\n value: number | null;\n max: number;\n /** 0–1, or `null` when indeterminate. */\n readonly ratio: number | null;\n}\n\nexport function defineProgress(tag = 'usa-progress'): CustomElementConstructor | undefined {\n return defineElement(\n tag,\n (Base) =>\n class UsaProgress extends Base {\n static get observedAttributes(): string[] {\n return ['value', 'max', 'indeterminate', 'label'];\n }\n\n private _fill: HTMLElement | null = null;\n\n get value(): number | null {\n const v = this.getAttribute('value');\n return v === null || v === '' || Number.isNaN(Number(v)) ? null : Number(v);\n }\n set value(v: number | null) {\n if (v === null || v === undefined) this.removeAttribute('value');\n else this.setAttribute('value', String(v));\n }\n get max(): number {\n const m = this.num('max', 100);\n return m > 0 ? m : 100;\n }\n set max(v: number) {\n this.setAttribute('max', String(v));\n }\n get ratio(): number | null {\n const v = this.value;\n return this.hasAttribute('indeterminate') || v === null ? null : clamp(v / this.max, 0, 1);\n }\n\n changed(): void {\n this.sync();\n }\n\n mount(): void {\n if (!this._fill) {\n this.innerHTML = '<span class=\"usa-progress-bar\"></span><span class=\"usa-progress-bar usa-progress-bar2\"></span>';\n this._fill = this.firstElementChild as HTMLElement;\n }\n this.setAttribute('role', 'progressbar');\n this.sync();\n }\n\n private sync(): void {\n const ratio = this.ratio;\n const label = this.getAttribute('label');\n if (label) this.setAttribute('aria-label', label);\n this.toggleAttribute('data-indeterminate', ratio === null);\n if (ratio === null) {\n this.removeAttribute('aria-valuenow');\n if (this._fill) this._fill.style.transform = '';\n return;\n }\n this.setAttribute('aria-valuemin', '0');\n this.setAttribute('aria-valuemax', String(this.max));\n this.setAttribute('aria-valuenow', String(this.value));\n if (this._fill) this._fill.style.transform = `scaleX(${ratio})`;\n if (ratio === 1) this.emit('complete');\n }\n },\n { id: 'progress', text: css }\n );\n}\n","import { defineElement, EASE_OUT, FLUENT_DECELERATE, type UsaElement } from '../base';\nimport css from './toast.css?raw';\n\nexport type ToastType = 'info' | 'success' | 'warning' | 'error';\n\nexport interface ToastOptions {\n /** ms before it hides itself; `0` keeps it until closed (default 4000). */\n duration?: number;\n type?: ToastType;\n /** Optional action button. */\n action?: { label: string; onClick: () => void };\n /** Show a close button (default `true`). */\n dismissible?: boolean;\n /** The toaster to use (default: the first `<usa-toaster>`, created if missing). */\n toaster?: UsaToasterElement | string;\n}\n\nexport interface ToastHandle {\n element: HTMLElement;\n close(): Promise<void>;\n}\n\n/**\n * `<usa-toaster>` — the region toasts slide into (`role=\"region\"`, each\n * toast `role=\"status\"`, errors `role=\"alert\"`). Toasts pause their timer\n * while hovered or focused, and the stack re-flows with a FLIP animation.\n *\n * Attributes: `position` (`bottom-right` default, `bottom-left`,\n * `bottom-center`, `top-right`, `top-left`, `top-center`), `max` (visible\n * toasts, 4), `label` (region name, \"Notifications\").\n * Reduced motion: toasts fade instead of sliding.\n */\nexport interface UsaToasterElement extends UsaElement {\n show(message: string, options?: ToastOptions): ToastHandle;\n clear(): void;\n}\n\nconst ICONS: Record<ToastType, string> = {\n info: '<path d=\"M12 8h.01M11 12h1v5h1\"/>',\n success: '<path d=\"m8 12.5 3 3 5-6\"/>',\n warning: '<path d=\"M12 8v5M12 16.5h.01\"/>',\n error: '<path d=\"m9 9 6 6M15 9l-6 6\"/>',\n};\n\nexport function defineToaster(tag = 'usa-toaster'): CustomElementConstructor | undefined {\n return defineElement(\n tag,\n (Base) =>\n class UsaToaster extends Base {\n static get observedAttributes(): string[] {\n return ['label'];\n }\n\n mount(): void {\n this.setAttribute('role', 'region');\n this.setAttribute('aria-label', this.str('label', 'Notifications'));\n }\n\n private flip(mutate: () => void): void {\n const kids = Array.from(this.children) as HTMLElement[];\n const before = new Map(kids.map((k) => [k, k.getBoundingClientRect().top]));\n mutate();\n if (this.reduced) return;\n for (const k of Array.from(this.children) as HTMLElement[]) {\n const top = before.get(k);\n if (top === undefined || k.hasAttribute('data-leaving')) continue;\n const dy = top - k.getBoundingClientRect().top;\n if (Math.abs(dy) > 0.5) this.motion(k, [{ transform: `translateY(${dy}px)` }, { transform: 'none' }], { duration: 320, easing: EASE_OUT, composite: 'add' } as KeyframeAnimationOptions);\n }\n }\n\n private enterFrames(): Keyframe[] {\n if (this.reduced) return [{ opacity: 0 }, { opacity: 1 }];\n const pos = this.str('position', 'bottom-right');\n const x = pos.endsWith('right') ? '110%' : pos.endsWith('left') ? '-110%' : '0';\n const y = pos.endsWith('center') ? (pos.startsWith('top') ? '-120%' : '120%') : '0';\n return [{ opacity: 0, transform: `translate(${x}, ${y}) scale(0.96)` }, { opacity: 1, transform: 'none' }];\n }\n\n show(message: string, options: ToastOptions = {}): ToastHandle {\n const type = options.type || 'info';\n const el = document.createElement('div');\n el.className = 'usa-toast';\n el.setAttribute('data-type', type);\n el.setAttribute('role', type === 'error' ? 'alert' : 'status');\n el.innerHTML = `<svg class=\"usa-toast-icon\" viewBox=\"0 0 24 24\" aria-hidden=\"true\"><circle cx=\"12\" cy=\"12\" r=\"9\"/>${ICONS[type] || ICONS.info}</svg><div class=\"usa-toast-msg\"></div>`;\n (el.querySelector('.usa-toast-msg') as HTMLElement).textContent = message;\n let closed: Promise<void> | null = null;\n let timer: ReturnType<typeof setTimeout> | 0 = 0;\n const close = (): Promise<void> => {\n if (closed) return closed;\n clearTimeout(timer as ReturnType<typeof setTimeout>);\n el.setAttribute('data-leaving', '');\n const frames = this.enterFrames().reverse();\n const a = el.isConnected ? this.motion(el, frames, { duration: 220, easing: 'cubic-bezier(0.7, 0, 0.84, 0)', fill: 'forwards' }) : null;\n closed = new Promise<void>((resolve) => {\n const done = () => {\n this.flip(() => el.remove());\n resolve();\n };\n if (a) a.onfinish = done;\n else done();\n });\n return closed;\n };\n if (options.action) {\n const btn = document.createElement('button');\n btn.type = 'button';\n btn.className = 'usa-toast-action';\n btn.textContent = options.action.label;\n btn.addEventListener('click', () => {\n options.action!.onClick();\n close();\n });\n el.append(btn);\n }\n if (options.dismissible !== false) {\n const x = document.createElement('button');\n x.type = 'button';\n x.className = 'usa-toast-close';\n x.setAttribute('aria-label', 'Close');\n x.innerHTML = '<svg viewBox=\"0 0 24 24\" aria-hidden=\"true\"><path d=\"m7 7 10 10M17 7 7 17\"/></svg>';\n x.addEventListener('click', () => close());\n el.append(x);\n }\n const duration = options.duration ?? 4000;\n const arm = () => {\n clearTimeout(timer as ReturnType<typeof setTimeout>);\n if (duration > 0) timer = setTimeout(close, duration);\n };\n const hold = () => clearTimeout(timer as ReturnType<typeof setTimeout>);\n el.addEventListener('pointerenter', hold);\n el.addEventListener('pointerleave', arm);\n el.addEventListener('focusin', hold);\n el.addEventListener('focusout', arm);\n const top = this.str('position', 'bottom-right').startsWith('top');\n this.flip(() => (top ? this.prepend(el) : this.append(el)));\n this.motion(el, this.enterFrames(), { duration: 420, easing: FLUENT_DECELERATE });\n arm();\n const live = Array.from(this.querySelectorAll<HTMLElement>('.usa-toast:not([data-leaving])'));\n const max = Math.max(1, this.num('max', 4));\n const extra = live.length - max;\n if (extra > 0) (top ? live.slice(-extra) : live.slice(0, extra)).forEach((t) => (t as any)._close?.());\n (el as any)._close = close;\n this.emit('toast', { element: el, message, type });\n return { element: el, close };\n }\n\n clear(): void {\n this.querySelectorAll<HTMLElement>('.usa-toast').forEach((t) => (t as any)._close?.());\n }\n },\n { id: 'toast', text: css }\n );\n}\n\n/**\n * Show a toast. Defines `<usa-toaster>` and adds one to `<body>` if the\n * page has none. Returns a handle with `close()`. No-op on the server.\n *\n * ```js\n * toast('Saved', { type: 'success' });\n * ```\n */\nexport function toast(message: string, options: ToastOptions = {}): ToastHandle | null {\n if (typeof document === 'undefined' || !defineToaster()) return null;\n let host: UsaToasterElement | null =\n typeof options.toaster === 'string' ? document.querySelector(options.toaster) : options.toaster || document.querySelector('usa-toaster');\n if (!host) {\n host = document.createElement('usa-toaster') as UsaToasterElement;\n document.body.append(host);\n }\n return host.show(message, options);\n}\n","import { kindOf, defineElement, EASE_OUT, EASE_SPRING, type UsaElement } from '../base';\nimport css from './check.css?raw';\n\n/**\n * `<usa-check>` — an animated result icon: the circle draws itself, then the\n * check mark (or cross / exclamation) strokes in with a little pop.\n *\n * Attributes: `kind` (`success` default, `error`, `warning`), `size`\n * (px, 56), `start` (`view` default | `load` | `manual`), `label`\n * (accessible name, e.g. \"Payment complete\"; the icon is decorative\n * without it). Event: `usa:complete`. Reduced motion: drawn instantly.\n */\nexport interface UsaCheckElement extends UsaElement {\n play(): Promise<void>;\n reset(): void;\n}\n\nconst PATHS: Record<string, string> = {\n success: 'M15 27 l7 7 l14 -15',\n error: 'M18 18 L34 34 M34 18 L18 34',\n warning: 'M26 15 V30 M26 37 V37.5',\n};\n\nexport function defineCheck(tag = 'usa-check'): CustomElementConstructor | undefined {\n return defineElement(\n tag,\n (Base) =>\n class UsaCheck extends Base {\n static get observedAttributes(): string[] {\n return ['kind', 'size', 'label'];\n }\n\n private _anims: Animation[] = [];\n\n mount(): void {\n const variant = kindOf(this, PATHS, 'success');\n this.innerHTML = `<svg viewBox=\"0 0 52 52\" aria-hidden=\"true\"><circle class=\"usa-check-circle\" cx=\"26\" cy=\"26\" r=\"23\" pathLength=\"1\"/><path class=\"usa-check-mark\" d=\"${PATHS[variant]}\" pathLength=\"1\"/></svg>`;\n this.setAttribute('data-kind', variant);\n const size = this.getAttribute('size');\n if (size) this.style.setProperty('--usa-check-size', `${Number(size)}px`);\n const label = this.getAttribute('label');\n if (label) {\n this.setAttribute('role', 'img');\n this.setAttribute('aria-label', label);\n }\n if (this.reduced) {\n this.setAttribute('data-state', 'done');\n return;\n }\n this.setAttribute('data-state', 'idle');\n const start = this.str('start', 'view');\n if (start === 'load') this.play();\n else if (start === 'view') {\n let done = false;\n this.inView((v) => v && !done && ((done = true), this.play()), { threshold: 0.5 });\n }\n }\n\n unmount(): void {\n this._anims.splice(0).forEach((a) => a.cancel());\n }\n\n reset(): void {\n this._anims.splice(0).forEach((a) => a.cancel());\n this.setAttribute('data-state', this.reduced ? 'done' : 'idle');\n }\n\n play(): Promise<void> {\n this.reset();\n this.setAttribute('data-state', 'done');\n const circle = this.querySelector('.usa-check-circle');\n const mark = this.querySelector('.usa-check-mark');\n const svg = this.querySelector('svg');\n if (this.reduced || !circle || !mark || !svg) {\n this.emit('complete');\n return Promise.resolve();\n }\n const draw = [{ strokeDashoffset: 1 }, { strokeDashoffset: 0 }];\n const anims = [\n this.motion(circle, draw, { duration: 520, easing: EASE_OUT, fill: 'backwards' }),\n this.motion(mark, draw, { duration: 340, delay: 420, easing: EASE_OUT, fill: 'backwards' }),\n this.motion(svg, [{ transform: 'scale(1)' }, { transform: 'scale(1.12)' }, { transform: 'scale(1)' }], { duration: 420, delay: 640, easing: EASE_SPRING }),\n ].filter((a): a is Animation => !!a);\n this._anims = anims;\n return new Promise((resolve) => {\n const last = anims[anims.length - 1];\n const done = () => {\n this.emit('complete');\n resolve();\n };\n if (last) last.onfinish = done;\n else done();\n });\n }\n },\n { id: 'check', text: css }\n );\n}\n","/**\n * use-scroll-animate/components/feedback — loading & feedback.\n * `<usa-spinner>`, `<usa-skeleton>`, `<usa-progress>`, `<usa-toaster>` +\n * `toast()`, `<usa-check>`.\n */\nimport { defineSpinner, type UsaSpinnerElement } from './spinner';\nimport { defineSkeleton, type UsaSkeletonElement } from './skeleton';\nimport { defineProgress, type UsaProgressElement } from './progress';\nimport { defineToaster, type UsaToasterElement } from './toast';\nimport { defineCheck, type UsaCheckElement } from './check';\n\nexport { defineSpinner, defineSkeleton, defineProgress, defineToaster, defineCheck };\nexport { toast } from './toast';\nexport { SPINNER_VARIANTS } from './spinner';\nexport type { SpinnerVariant } from './spinner';\nexport type { ToastOptions, ToastHandle, ToastType } from './toast';\nexport type { UsaSpinnerElement, UsaSkeletonElement, UsaProgressElement, UsaToasterElement, UsaCheckElement };\nexport { configureComponents, prefersReducedMotion } from '../base';\nexport type { ComponentsConfig, UsaElement } from '../base';\n\n/** Register every component of this category under its default tag. */\nexport function defineFeedbackComponents(): void {\n defineSpinner();\n defineSkeleton();\n defineProgress();\n defineToaster();\n defineCheck();\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'usa-spinner': UsaSpinnerElement;\n 'usa-skeleton': UsaSkeletonElement;\n 'usa-progress': UsaProgressElement;\n 'usa-toaster': UsaToasterElement;\n 'usa-check': UsaCheckElement;\n }\n}\n","import { defineElement, type UsaElement } from '../base';\nimport css from './aurora.css?raw';\n\n/**\n * `<usa-aurora>` — a slow, drifting aurora / gradient-mesh backdrop behind\n * its content. Soft radial gradients moved with `transform` only (no\n * animated blur), paused while off-screen.\n *\n * Attributes: `colors` (comma-separated, default violet / cyan / pink),\n * `speed` (multiplier, 1), `intensity` (0–1 opacity, 0.7), `paused`.\n * Reduced motion: a still gradient.\n */\nexport type UsaAuroraElement = UsaElement;\n\nexport function defineAurora(tag = 'usa-aurora'): CustomElementConstructor | undefined {\n return defineElement(\n tag,\n (Base) =>\n class UsaAurora extends Base {\n static get observedAttributes(): string[] {\n return ['colors', 'speed', 'intensity'];\n }\n\n private _layer: HTMLElement | null = null;\n\n mount(): void {\n if (!this._layer) {\n this._layer = document.createElement('div');\n this._layer.className = 'usa-aurora-layer';\n this._layer.setAttribute('aria-hidden', 'true');\n this._layer.innerHTML = '<i></i><i></i><i></i><i></i>';\n this.prepend(this._layer);\n }\n const colors = this.str('colors', '#7c5cff,#22d3ee,#f472b6,#34d399').split(',').map((c) => c.trim()).filter(Boolean);\n Array.from(this._layer.children).forEach((blob, i) => {\n (blob as HTMLElement).style.setProperty('--c', colors[i % colors.length]);\n });\n const speed = this.num('speed', 1);\n this.style.setProperty('--usa-aurora-speed', `${(18 / Math.max(0.05, speed)).toFixed(2)}s`);\n this.style.setProperty('--usa-aurora-opacity', String(this.num('intensity', 0.7)));\n this.inView((v) => this.toggleAttribute('data-offscreen', !v));\n }\n },\n { id: 'aurora', text: css }\n );\n}\n","import { defineElement, raf, caf, type UsaElement } from '../base';\nimport css from './particles.css?raw';\n\n/**\n * `<usa-particles>` — a canvas of drifting particles, optionally linked by\n * lines when close (a \"constellation\"), that drift away from the pointer.\n * Fills its own box (place it as a background with\n * `position: absolute; inset: 0`, or give it a height).\n *\n * Attributes: `count` (60; scaled down on small boxes), `color`\n * (default `currentColor`), `size` (max radius px, 2.2), `speed` (0.35),\n * `links` (max link distance px, 110; `0` disables), `interactive`,\n * `paused`. Renders only while visible and the tab is shown, at device\n * pixel ratio ≤ 2. Reduced motion: one still frame.\n */\nexport interface UsaParticlesElement extends UsaElement {\n /** Re-seed the particles. */\n reset(): void;\n}\n\ninterface P {\n x: number;\n y: number;\n vx: number;\n vy: number;\n r: number;\n}\n\nexport function defineParticles(tag = 'usa-particles'): CustomElementConstructor | undefined {\n return defineElement(\n tag,\n (Base) =>\n class UsaParticles extends Base {\n static get observedAttributes(): string[] {\n return ['count', 'color', 'size', 'speed', 'links', 'interactive', 'paused'];\n }\n\n private _canvas: HTMLCanvasElement | null = null;\n private _ctx: CanvasRenderingContext2D | null = null;\n private _ps: P[] = [];\n private _frame = 0;\n private _w = 0;\n private _h = 0;\n private _visible = false;\n private _mx = -1e4;\n private _color = '#888';\n private _my = -1e4;\n\n mount(): void {\n if (!this._canvas) {\n this._canvas = document.createElement('canvas');\n this._canvas.setAttribute('aria-hidden', 'true');\n this.prepend(this._canvas);\n }\n this._ctx = this._canvas.getContext?.('2d') ?? null;\n if (!this._ctx) return;\n this.resize();\n if (typeof ResizeObserver !== 'undefined') {\n const ro = new ResizeObserver(() => {\n this.resize();\n if (!this._frame) this.draw();\n });\n ro.observe(this);\n this.onCleanup(() => ro.disconnect());\n }\n this.inView((v) => {\n this._visible = v;\n this.loop();\n });\n this.listen(document, 'visibilitychange', () => this.loop());\n if (this.flag('interactive')) {\n this.listen(window, 'pointermove', (e: PointerEvent) => {\n const r = this.getBoundingClientRect();\n this._mx = e.clientX - r.left;\n this._my = e.clientY - r.top;\n }, { passive: true });\n }\n this.draw();\n }\n\n unmount(): void {\n caf(this._frame);\n this._frame = 0;\n }\n\n reset(): void {\n this._ps = [];\n this.resize();\n this.draw();\n }\n\n private resize(): void {\n const c = this._canvas;\n if (!c || !this._ctx) return;\n const w = this.clientWidth || 300;\n const h = this.clientHeight || 150;\n const dpr = Math.min(2, (typeof devicePixelRatio === 'number' && devicePixelRatio) || 1);\n c.width = Math.round(w * dpr);\n c.height = Math.round(h * dpr);\n this._ctx.setTransform(dpr, 0, 0, dpr, 0, 0);\n this._w = w;\n this._h = h;\n this._color = this.getAttribute('color') || (typeof getComputedStyle === 'function' ? getComputedStyle(this).color : '') || '#888';\n const want = Math.round(Math.min(1, (w * h) / (900 * 500)) * Math.max(1, this.num('count', 60))) || 1;\n const speed = this.num('speed', 0.35);\n const size = this.num('size', 2.2);\n while (this._ps.length < want) {\n const a = Math.random() * Math.PI * 2;\n const s = speed * (0.3 + Math.random() * 0.7);\n this._ps.push({ x: Math.random() * w, y: Math.random() * h, vx: Math.cos(a) * s, vy: Math.sin(a) * s, r: 0.6 + Math.random() * (size - 0.6) });\n }\n this._ps.length = want;\n }\n\n private loop(): void {\n const run = this._visible && !this.reduced && !this.flag('paused') && !(typeof document !== 'undefined' && document.hidden);\n if (run && !this._frame) {\n const tick = () => {\n this.step();\n this.draw();\n this._frame = raf(tick);\n };\n this._frame = raf(tick);\n } else if (!run && this._frame) {\n caf(this._frame);\n this._frame = 0;\n }\n }\n\n private step(): void {\n const { _w: w, _h: h } = this;\n for (const p of this._ps) {\n const dx = p.x - this._mx;\n const dy = p.y - this._my;\n const d2 = dx * dx + dy * dy;\n if (d2 < 8100 && d2 > 0.01) {\n const f = (1 - Math.sqrt(d2) / 90) * 0.6;\n p.x += (dx / Math.sqrt(d2)) * f;\n p.y += (dy / Math.sqrt(d2)) * f;\n }\n p.x += p.vx;\n p.y += p.vy;\n if (p.x < -5) p.x = w + 5;\n else if (p.x > w + 5) p.x = -5;\n if (p.y < -5) p.y = h + 5;\n else if (p.y > h + 5) p.y = -5;\n }\n }\n\n private draw(): void {\n const ctx = this._ctx;\n if (!ctx) return;\n const color = this._color;\n ctx.clearRect(0, 0, this._w, this._h);\n ctx.fillStyle = color;\n ctx.strokeStyle = color;\n const ps = this._ps;\n const link = this.num('links', 110);\n if (link > 0) {\n const l2 = link * link;\n ctx.lineWidth = 0.6;\n for (let i = 0; i < ps.length; i++) {\n for (let j = i + 1; j < ps.length; j++) {\n const dx = ps[i].x - ps[j].x;\n const dy = ps[i].y - ps[j].y;\n const d2 = dx * dx + dy * dy;\n if (d2 < l2) {\n ctx.globalAlpha = (1 - d2 / l2) * 0.35;\n ctx.beginPath();\n ctx.moveTo(ps[i].x, ps[i].y);\n ctx.lineTo(ps[j].x, ps[j].y);\n ctx.stroke();\n }\n }\n }\n }\n ctx.globalAlpha = 0.85;\n for (const p of ps) {\n ctx.beginPath();\n ctx.arc(p.x, p.y, p.r, 0, Math.PI * 2);\n ctx.fill();\n }\n ctx.globalAlpha = 1;\n }\n },\n { id: 'particles', text: css }\n );\n}\n","import { defineElement, type UsaElement } from '../base';\nimport css from './grain.css?raw';\n\n/**\n * `<usa-grain>` — a film-grain / noise overlay on top of its content\n * (SVG `feTurbulence` texture, no images to ship). With `animated`, the\n * grain jitters like film (stepped `transform`, ~12 fps).\n *\n * Attributes: `opacity` (0.12), `animated`, `blend` (`mix-blend-mode`,\n * default `overlay`), `scale` (texture size px, 180). Never intercepts\n * pointer events. Reduced motion: static grain.\n */\nexport type UsaGrainElement = UsaElement;\n\nconst noise = (freq: number) =>\n `url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='256' height='256'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='${freq}' numOctaves='3' stitchTiles='stitch'/%3E%3CfeColorMatrix values='0 0 0 0 0.5 0 0 0 0 0.5 0 0 0 0 0.5 0 0 0 1.6 -0.3'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23n)'/%3E%3C/svg%3E\")`;\n\nexport function defineGrain(tag = 'usa-grain'): CustomElementConstructor | undefined {\n return defineElement(\n tag,\n (Base) =>\n class UsaGrain extends Base {\n static get observedAttributes(): string[] {\n return ['opacity', 'blend', 'scale'];\n }\n\n private _layer: HTMLElement | null = null;\n\n mount(): void {\n if (!this._layer) {\n this._layer = document.createElement('div');\n this._layer.className = 'usa-grain-layer';\n this._layer.setAttribute('aria-hidden', 'true');\n this.append(this._layer);\n }\n const s = this._layer.style;\n s.backgroundImage = noise(0.8);\n s.backgroundSize = `${this.num('scale', 180)}px`;\n s.opacity = String(this.num('opacity', 0.12));\n s.mixBlendMode = this.str('blend', 'overlay');\n }\n },\n { id: 'grain', text: css }\n );\n}\n","import { defineElement, type UsaElement } from '../base';\nimport css from './marquee.css?raw';\n\n/**\n * `<usa-marquee>` — an infinite, seamless ticker of its children (logos,\n * testimonials, tags). The content is cloned (clones are `aria-hidden` and\n * `inert`) and the track slides with one WAAPI `transform` animation whose\n * duration follows the measured width, so the speed is constant.\n *\n * Attributes: `speed` (px/s, 50), `direction` (`left` default | `right` |\n * `up` | `down`), `gap` (px, 32), `pause-on-hover`, `fade` (soft edges),\n * `paused`. Pauses off-screen. Reduced motion: no movement; the row\n * becomes scrollable instead.\n */\nexport interface UsaMarqueeElement extends UsaElement {\n pause(): void;\n resume(): void;\n}\n\nexport function defineMarquee(tag = 'usa-marquee'): CustomElementConstructor | undefined {\n return defineElement(\n tag,\n (Base) =>\n class UsaMarquee extends Base {\n static get observedAttributes(): string[] {\n return ['speed', 'direction', 'gap', 'paused'];\n }\n\n private _track: HTMLElement | null = null;\n private _anim: Animation | null = null;\n private _hover = false;\n private _visible = true;\n private _size = 0;\n\n private get vertical(): boolean {\n const d = this.str('direction', 'left');\n return d === 'up' || d === 'down';\n }\n\n mount(): void {\n if (!this._track) {\n const track = document.createElement('div');\n track.className = 'usa-marquee-track';\n const group = document.createElement('div');\n group.className = 'usa-marquee-group';\n group.append(...Array.from(this.childNodes));\n track.append(group);\n this.append(track);\n this._track = track;\n }\n this.toggleAttribute('data-vertical', this.vertical);\n this.style.setProperty('--usa-marquee-gap', `${this.num('gap', 32)}px`);\n if (this.reduced) {\n this.setAttribute('data-static', '');\n this.syncClones(1);\n return;\n }\n this.removeAttribute('data-static');\n this.build();\n if (typeof ResizeObserver !== 'undefined') {\n const ro = new ResizeObserver(() => this.build());\n ro.observe(this._track.firstElementChild as Element);\n this.onCleanup(() => ro.disconnect());\n }\n this.inView((v) => {\n this._visible = v;\n this.sync();\n });\n this.listen(this, 'pointerenter', () => ((this._hover = true), this.sync()));\n this.listen(this, 'pointerleave', () => ((this._hover = false), this.sync()));\n this.listen(this, 'focusin', () => ((this._hover = true), this.sync()));\n this.listen(this, 'focusout', () => ((this._hover = false), this.sync()));\n }\n\n unmount(): void {\n this._anim?.cancel();\n this._anim = null;\n this._size = 0;\n }\n\n private syncClones(n: number): void {\n const track = this._track!;\n const group = track.firstElementChild as HTMLElement;\n while (track.children.length > n) track.lastElementChild!.remove();\n while (track.children.length < n) {\n const clone = group.cloneNode(true) as HTMLElement;\n clone.setAttribute('aria-hidden', 'true');\n clone.setAttribute('inert', '');\n track.append(clone);\n }\n }\n\n private build(): void {\n const track = this._track!;\n const group = track.firstElementChild as HTMLElement;\n const vertical = this.vertical;\n const gap = this.num('gap', 32);\n const measured = vertical ? group.offsetHeight : group.offsetWidth;\n if (!measured) return; // not laid out yet: the ResizeObserver calls back\n const size = measured + gap;\n if (this._anim && this._size === size) return;\n this._size = size;\n const box = (vertical ? this.clientHeight : this.clientWidth) || size;\n // Enough copies to cover the box twice\n this.syncClones(Math.min(50, Math.max(2, Math.ceil(box / size) + 1)));\n const progress = this._anim?.effect?.getComputedTiming().progress ?? 0;\n this._anim?.cancel();\n const axis = vertical ? 'Y' : 'X';\n const reverse = ['right', 'down'].includes(this.str('direction', 'left'));\n const frames = [{ transform: `translate${axis}(0)` }, { transform: `translate${axis}(${-size}px)` }];\n this._anim = this.motion(track, reverse ? frames.reverse() : frames, {\n duration: (Math.max(1, size) / Math.max(1, this.num('speed', 50))) * 1000,\n iterations: Infinity,\n });\n if (this._anim && progress) this._anim.currentTime = progress * Number(this._anim.effect?.getTiming().duration || 0);\n this.sync();\n }\n\n private sync(): void {\n const a = this._anim;\n if (!a) return;\n const stop = this.flag('paused') || !this._visible || (this._hover && this.flag('pause-on-hover'));\n if (stop && a.playState === 'running') a.pause();\n else if (!stop && a.playState === 'paused') a.play();\n }\n\n pause(): void {\n this.setAttribute('paused', '');\n }\n resume(): void {\n this.removeAttribute('paused');\n }\n\n changed(name: string): void {\n if (name === 'paused') this.sync();\n else super.changed(name);\n }\n },\n { id: 'marquee', text: css }\n );\n}\n","import { defineElement, type UsaElement } from '../base';\nimport css from './acrylic.css?raw';\n\n/**\n * `<usa-acrylic>` — Windows Fluent materials for the web: `acrylic`\n * (frosted glass: backdrop blur + saturation + tint + subtle noise) and\n * `mica` (an opaque, wallpaper-tinted base for app backgrounds; on the web it\n * tints from `--usa-mica-source`, a gradient you control). Optional\n * `shimmer` adds a light sweep when it appears or on hover.\n *\n * Attributes: `kind` (`acrylic` default | `mica`), `tint` (colour),\n * `tint-opacity` (0–1, 0.55), `blur` (px, 30), `shimmer`\n * (`hover` | `load` | `none`, default `none`). Falls back to a solid tint\n * without `backdrop-filter` and under `prefers-reduced-transparency` or\n * forced colours, like Windows does when transparency effects are off.\n */\nexport type UsaAcrylicElement = UsaElement;\n\nexport function defineAcrylic(tag = 'usa-acrylic'): CustomElementConstructor | undefined {\n return defineElement(\n tag,\n (Base) =>\n class UsaAcrylic extends Base {\n static get observedAttributes(): string[] {\n return ['tint', 'tint-opacity', 'blur', 'shimmer'];\n }\n\n mount(): void {\n const tint = this.getAttribute('tint');\n if (tint) this.style.setProperty('--usa-acrylic-tint', tint);\n else this.style.removeProperty('--usa-acrylic-tint');\n this.style.setProperty('--usa-acrylic-opacity', `${Math.round(this.num('tint-opacity', 0.55) * 100)}%`);\n this.style.setProperty('--usa-acrylic-blur', `${this.num('blur', 30)}px`);\n if (this.str('shimmer') === 'load' && !this.reduced) {\n this.removeAttribute('data-shine');\n void this.offsetWidth;\n this.setAttribute('data-shine', '');\n }\n }\n },\n { id: 'acrylic', text: css }\n );\n}\n","import { defineElement, raf, caf, type UsaElement } from '../base';\nimport css from './bg-fx.css?raw';\n\n/** Shared canvas setup: DPR ≤ 2, resize with the host, run only while visible & tab shown. */\nfunction canvasLoop(host: any, draw: (ctx: CanvasRenderingContext2D, w: number, h: number, t: number) => void, still: boolean): void {\n const c = document.createElement('canvas');\n c.className = 'usa-bg-canvas';\n c.setAttribute('aria-hidden', 'true');\n host.prepend(c);\n host.onCleanup(() => c.remove());\n const ctx = c.getContext?.('2d') as CanvasRenderingContext2D | null;\n if (!ctx) return;\n const dpr = Math.min(2, (typeof window !== 'undefined' && window.devicePixelRatio) || 1);\n let w = 0;\n let h = 0;\n const size = () => {\n const r = host.getBoundingClientRect();\n w = Math.max(1, r.width || 300);\n h = Math.max(1, r.height || 150);\n c.width = w * dpr;\n c.height = h * dpr;\n ctx.setTransform(dpr, 0, 0, dpr, 0, 0);\n };\n size();\n const ro = typeof ResizeObserver !== 'undefined' ? new ResizeObserver(size) : null;\n ro?.observe(host);\n host.onCleanup(() => ro?.disconnect());\n let id = 0;\n let on = false;\n const loop = (t: number) => {\n if (!document.hidden) draw(ctx, w, h, t);\n id = raf(loop);\n };\n if (still) {\n draw(ctx, w, h, 0);\n return;\n }\n host.inView((v: boolean) => {\n if (v && !on) {\n on = true;\n id = raf(loop);\n } else if (!v && on) {\n on = false;\n caf(id);\n }\n });\n host.onCleanup(() => caf(id));\n}\n\n/**\n * `<usa-grid-glow>` — a line grid behind its content that lights up around\n * the pointer. Attributes: `size` (cell px, 32), `color`, `radius` (px, 220).\n * Reduced motion: the grid stays, a soft static glow in the centre.\n */\nexport interface UsaGridGlowElement extends UsaElement {}\nexport function defineGridGlow(tag = 'usa-grid-glow'): CustomElementConstructor | undefined {\n return defineElement(tag, (Base) => class extends Base {\n mount(): void {\n this.style.setProperty('--usa-grid', `${this.num('size', 32)}px`);\n this.style.setProperty('--usa-grid-r', `${this.num('radius', 220)}px`);\n if (this.str('color')) this.style.setProperty('--usa-grid-color', this.str('color'));\n if (this.reduced) return;\n let f = 0;\n let x = 0;\n let y = 0;\n this.listen(this, 'pointermove', (e: PointerEvent) => {\n const r = this.getBoundingClientRect();\n x = e.clientX - r.left;\n y = e.clientY - r.top;\n if (!f) f = raf(() => {\n f = 0;\n this.style.setProperty('--usa-grid-x', `${x}px`);\n this.style.setProperty('--usa-grid-y', `${y}px`);\n });\n });\n this.onCleanup(() => caf(f));\n }\n }, { id: 'bg-fx', text: css });\n}\n\n/**\n * `<usa-blobs>` — soft, slowly morphing colour blobs (fluid gradient\n * backdrop). Attributes: `colors` (comma list), `speed` (1), `blur` (px, 60).\n * Reduced motion: still blobs.\n */\nexport interface UsaBlobsElement extends UsaElement {}\nexport function defineBlobs(tag = 'usa-blobs'): CustomElementConstructor | undefined {\n return defineElement(tag, (Base) => class extends Base {\n mount(): void {\n this.querySelector(':scope > .usa-blobs-layer')?.remove();\n const colors = this.str('colors', '#7c5cff,#22d3ee,#f472b6,#34d399').split(',');\n const layer = document.createElement('div');\n layer.className = 'usa-blobs-layer';\n layer.setAttribute('aria-hidden', 'true');\n layer.innerHTML = colors.map((c, i) => `<i style=\"--c:${c.trim()};--i:${i}\"></i>`).join('');\n this.prepend(layer);\n this.style.setProperty('--usa-blobs-speed', String(this.num('speed', 1)));\n this.style.setProperty('--usa-blobs-blur', `${this.num('blur', 60)}px`);\n }\n }, { id: 'bg-fx', text: css });\n}\n\n/**\n * `<usa-water-ripple>` — interactive water ripples on a canvas over its\n * content (pointer moves and taps disturb the surface). Low-resolution height\n * map, paused off-screen. Attributes: `damping` (0.96), `strength` (1),\n * `color` (highlight). Reduced motion: nothing is drawn.\n */\nexport interface UsaWaterRippleElement extends UsaElement {\n drop(x: number, y: number, strength?: number): void;\n}\nexport function defineWaterRipple(tag = 'usa-water-ripple'): CustomElementConstructor | undefined {\n return defineElement(tag, (Base) => class extends Base {\n private _drop: ((x: number, y: number, s?: number) => void) | null = null;\n drop(x: number, y: number, s = 1): void {\n this._drop?.(x, y, s);\n }\n mount(): void {\n if (this.reduced) return;\n const S = 4;\n let cols = 0;\n let rows = 0;\n let a = new Float32Array(0);\n let b = new Float32Array(0);\n const damp = this.num('damping', 0.96);\n const color = this.str('color', '255,255,255');\n this._drop = (x, y, s = 1) => {\n const cx = Math.floor(x / S);\n const cy = Math.floor(y / S);\n if (cx < 1 || cy < 1 || cx >= cols - 1 || cy >= rows - 1) return;\n a[cy * cols + cx] += 256 * s * this.num('strength', 1);\n };\n canvasLoop(this, (ctx, w, h) => {\n const nc = Math.ceil(w / S);\n const nr = Math.ceil(h / S);\n if (nc !== cols || nr !== rows) {\n cols = nc;\n rows = nr;\n a = new Float32Array(cols * rows);\n b = new Float32Array(cols * rows);\n }\n ctx.clearRect(0, 0, w, h);\n for (let y = 1; y < rows - 1; y++) {\n for (let x = 1; x < cols - 1; x++) {\n const i = y * cols + x;\n const v = ((a[i - 1] + a[i + 1] + a[i - cols] + a[i + cols]) / 2 - b[i]) * damp;\n b[i] = v;\n if (v > 2 || v < -2) {\n ctx.fillStyle = `rgba(${color},${Math.min(0.5, Math.abs(v) / 300).toFixed(3)})`;\n ctx.fillRect(x * S, y * S, S, S);\n }\n }\n }\n const t = a;\n a = b;\n b = t;\n }, false);\n this.listen(this, 'pointermove', (e: PointerEvent) => {\n const r = this.getBoundingClientRect();\n this.drop(e.clientX - r.left, e.clientY - r.top, 0.35);\n });\n this.listen(this, 'pointerdown', (e: PointerEvent) => {\n const r = this.getBoundingClientRect();\n this.drop(e.clientX - r.left, e.clientY - r.top, 1.5);\n });\n }\n }, { id: 'bg-fx', text: css });\n}\n\n/**\n * `<usa-dot-network>` — a grid of dots that swell and link up with lines\n * around the pointer (a living network backdrop). Attributes: `gap` (px,\n * 28), `color`, `radius` (px of influence, 140). Reduced motion: a static\n * dot grid.\n */\nexport interface UsaDotNetworkElement extends UsaElement {}\nexport function defineDotNetwork(tag = 'usa-dot-network'): CustomElementConstructor | undefined {\n return defineElement(tag, (Base) => class extends Base {\n mount(): void {\n const gap = Math.max(8, this.num('gap', 28));\n const R = this.num('radius', 140);\n const color = this.str('color', '124,92,255');\n let px = -1e4;\n let py = -1e4;\n this.listen(this, 'pointermove', (e: PointerEvent) => {\n const r = this.getBoundingClientRect();\n px = e.clientX - r.left;\n py = e.clientY - r.top;\n });\n this.listen(this, 'pointerleave', () => (px = py = -1e4));\n canvasLoop(this, (ctx, w, h) => {\n ctx.clearRect(0, 0, w, h);\n const near: [number, number, number][] = [];\n for (let y = gap / 2; y < h; y += gap) {\n for (let x = gap / 2; x < w; x += gap) {\n const d = Math.hypot(x - px, y - py);\n const k = d < R ? 1 - d / R : 0;\n const ox = k ? ((x - px) / (d || 1)) * k * 8 : 0;\n const oy = k ? ((y - py) / (d || 1)) * k * 8 : 0;\n ctx.fillStyle = `rgba(${color},${(0.25 + k * 0.75).toFixed(3)})`;\n ctx.beginPath();\n ctx.arc(x + ox, y + oy, 1.2 + k * 2.2, 0, Math.PI * 2);\n ctx.fill();\n if (k > 0.2) near.push([x + ox, y + oy, k]);\n }\n }\n ctx.lineWidth = 1;\n for (const [x, y, k] of near) {\n ctx.strokeStyle = `rgba(${color},${(k * 0.5).toFixed(3)})`;\n ctx.beginPath();\n ctx.moveTo(x, y);\n ctx.lineTo(px, py);\n ctx.stroke();\n }\n }, this.reduced);\n }\n }, { id: 'bg-fx', text: css });\n}\n","import { adoptStyles } from '../base';\nimport css from './variants.css?raw';\n\n/**\n * Style variants (v2.6): `variant=\"minimal | neon | glass | brutalist |\n * fluent | material\"` on any `<usa-*>` element — or on any ancestor as\n * `data-usa-variant`, or page-wide with `setVariant()` — sets the shared\n * design tokens every component reads:\n *\n * `--usa-accent`, `--usa-accent-text`, `--usa-surface`, `--usa-text`,\n * `--usa-radius`, `--usa-border`, `--usa-shadow`, `--usa-blur`, `--usa-font`.\n *\n * (`<usa-spinner>`, `<usa-check>` and `<usa-dialog>` already use `variant`\n * for their kind; the token names never clash with those values except\n * `fluent`, which means the same thing there.)\n */\nexport const VARIANTS = ['minimal', 'neon', 'glass', 'brutalist', 'fluent', 'material'] as const;\nexport type Variant = (typeof VARIANTS)[number];\n\n/** Inject the variant token sheet (done automatically by every `ui` component). */\nexport function adoptVariants(): void {\n adoptStyles('variants', css);\n}\n\n/** Apply a variant to the whole page (or `root`); `null` removes it. */\nexport function setVariant(variant: Variant | null, root: Element | null = typeof document !== 'undefined' ? document.documentElement : null): void {\n if (!root) return;\n adoptVariants();\n if (variant) root.setAttribute('data-usa-variant', variant);\n else root.removeAttribute('data-usa-variant');\n}\n","/**\n * use-scroll-animate/components/background — backgrounds & decoration.\n * `<usa-aurora>`, `<usa-particles>`, `<usa-grain>`, `<usa-marquee>`,\n * `<usa-acrylic>`.\n */\nimport { defineAurora, type UsaAuroraElement } from './aurora';\nimport { defineParticles, type UsaParticlesElement } from './particles';\nimport { defineGrain, type UsaGrainElement } from './grain';\nimport { defineMarquee, type UsaMarqueeElement } from './marquee';\nimport { defineAcrylic, type UsaAcrylicElement } from './acrylic';\n\nimport { defineGridGlow, defineBlobs, defineWaterRipple, defineDotNetwork } from './bg-fx';\nimport type { UsaGridGlowElement, UsaBlobsElement, UsaWaterRippleElement, UsaDotNetworkElement } from './bg-fx';\nexport { defineAurora, defineParticles, defineGrain, defineMarquee, defineAcrylic };\nexport type { UsaAuroraElement, UsaParticlesElement, UsaGrainElement, UsaMarqueeElement, UsaAcrylicElement };\nexport { defineGridGlow, defineBlobs, defineWaterRipple, defineDotNetwork };\nexport type { UsaGridGlowElement, UsaBlobsElement, UsaWaterRippleElement, UsaDotNetworkElement };\nexport { fluentPreset } from './fluent';\nexport type { FluentPresetOptions } from './fluent';\nexport { configureComponents, prefersReducedMotion } from '../base';\nexport type { ComponentsConfig, UsaElement } from '../base';\n\n/** Register every component of this category under its default tag. */\nexport function defineBackgroundComponents(): void {\n defineAurora();\n defineParticles();\n defineGrain();\n defineMarquee();\n defineAcrylic();\n defineGridGlow();\n defineBlobs();\n defineWaterRipple();\n defineDotNetwork();\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'usa-grid-glow': UsaGridGlowElement;\n 'usa-blobs': UsaBlobsElement;\n 'usa-water-ripple': UsaWaterRippleElement;\n 'usa-dot-network': UsaDotNetworkElement;\n 'usa-aurora': UsaAuroraElement;\n 'usa-particles': UsaParticlesElement;\n 'usa-grain': UsaGrainElement;\n 'usa-marquee': UsaMarqueeElement;\n 'usa-acrylic': UsaAcrylicElement;\n }\n}\n","import { kindOf, defineElement, shadowStyles, EASE_OUT, FLUENT_DECELERATE, type UsaElement } from '../base';\nimport shadowCss from './dialog.shadow.css?raw';\nimport css from './dialog.css?raw';\n\nexport type DialogVariant = 'modal' | 'drawer-start' | 'drawer-end' | 'drawer-bottom' | 'sheet';\n\n/**\n * `<usa-dialog>` — an animated modal or drawer built on the native\n * `<dialog>` (top layer, focus trapping, inert page, Esc to close). Its\n * children are slotted into the panel (they stay in the light DOM, so\n * React / Vue / Svelte keep owning them). Style with `::part(panel)`,\n * `::part(backdrop)` and the `--usa-dialog-*` custom properties.\n *\n * Attributes: `open` (reflects; set/remove to open/close), `kind`\n * (`modal` default — Fluent scale + fade; `drawer-start` / `drawer-end`\n * slide from the side, `drawer-bottom` / `sheet` from below), `label`\n * (accessible name), `no-backdrop-close`, `no-esc`. Elements inside\n * with `data-close` close it. Events: `usa:open`, `usa:close` (cancelable\n * `usa:beforeclose`). Reduced motion: fade only.\n */\nexport interface UsaDialogElement extends UsaElement {\n open: boolean;\n show(): Promise<void>;\n close(returnValue?: string): Promise<void>;\n readonly dialog: HTMLDialogElement | null;\n returnValue: string;\n}\n\nconst FROM: Record<string, string> = {\n modal: 'scale(0.94)',\n 'drawer-start': 'translateX(-100%)',\n 'drawer-end': 'translateX(100%)',\n 'drawer-bottom': 'translateY(100%)',\n sheet: 'translateY(40px)',\n};\n\nexport function defineDialog(tag = 'usa-dialog'): CustomElementConstructor | undefined {\n return defineElement(\n tag,\n (Base) =>\n class UsaDialog extends Base {\n static get observedAttributes(): string[] {\n return ['open', 'kind', 'label'];\n }\n\n private _dialog: HTMLDialogElement | null = null;\n private _panel: HTMLElement | null = null;\n private _backdrop: HTMLElement | null = null;\n private _busy: Promise<void> | null = null;\n private _syncing = false;\n returnValue = '';\n\n get dialog(): HTMLDialogElement | null {\n return this._dialog;\n }\n get open(): boolean {\n return this.hasAttribute('open');\n }\n set open(v: boolean) {\n this.toggleAttribute('open', !!v);\n }\n\n private get kind(): string {\n return kindOf(this, FROM, 'modal');\n }\n\n changed(name: string): void {\n if (name === 'open') {\n if (this._syncing) return;\n if (this.open) this.show();\n else this.close();\n } else this.syncAttrs();\n }\n\n private syncAttrs(): void {\n if (!this._dialog) return;\n this._dialog.setAttribute('data-kind', this.kind);\n this._dialog.setAttribute('aria-modal', 'true');\n const label = this.getAttribute('label');\n if (label) this._dialog.setAttribute('aria-label', label);\n }\n\n mount(): void {\n if (!this._dialog) {\n const root = this.shadowRoot || this.attachShadow({ mode: 'open' });\n root.innerHTML = '<dialog part=\"dialog\"><div part=\"backdrop\" aria-hidden=\"true\"></div><div part=\"panel\"><slot></slot></div></dialog>';\n shadowStyles(root, shadowCss);\n this._dialog = root.querySelector('dialog');\n this._backdrop = root.querySelector('[part=backdrop]');\n this._panel = root.querySelector('[part=panel]');\n }\n this.syncAttrs();\n const dlg = this._dialog!;\n this.listen(dlg, 'cancel', (e: Event) => {\n e.preventDefault();\n if (!this.flag('no-esc')) this.close('cancel');\n });\n this.listen(this._backdrop!, 'click', () => !this.flag('no-backdrop-close') && this.close('backdrop'));\n this.listen(this, 'click', (e: Event) => {\n const t = (e.target as Element).closest?.('[data-close]');\n if (t && this.contains(t)) this.close((t as HTMLElement).getAttribute('data-close') || 'close');\n });\n if (this.open && !dlg.open) this.show();\n }\n\n unmount(): void {\n if (this._dialog?.open) this._dialog.close();\n }\n\n private setOpenAttr(on: boolean): void {\n this._syncing = true;\n this.toggleAttribute('open', on);\n this._syncing = false;\n }\n\n async show(): Promise<void> {\n await this._busy;\n const dlg = this._dialog;\n if (!dlg) {\n this.setOpenAttr(true); // opens on connect\n return;\n }\n if (dlg.open) return;\n this.setOpenAttr(true);\n try {\n if (typeof dlg.showModal === 'function') dlg.showModal();\n else dlg.setAttribute('open', '');\n } catch {\n dlg.setAttribute('open', '');\n }\n this.emit('open');\n if (this.reduced) {\n await this.animate2([{ opacity: 0 }, { opacity: 1 }], [{ opacity: 0 }, { opacity: 1 }], 160, EASE_OUT);\n return;\n }\n await this.animate2(\n [{ opacity: 0, transform: FROM[this.kind] }, { opacity: 1, transform: 'none' }],\n [{ opacity: 0 }, { opacity: 1 }],\n this.kind === 'modal' ? 260 : 360,\n FLUENT_DECELERATE\n );\n }\n\n async close(returnValue = ''): Promise<void> {\n await this._busy;\n const dlg = this._dialog;\n if (!dlg || !dlg.open) {\n this.setOpenAttr(false);\n return;\n }\n if (!this.emit('beforeclose', { returnValue })) {\n this.setOpenAttr(true);\n return;\n }\n this.returnValue = returnValue;\n this._busy = (async () => {\n const panelTo = this.reduced ? { opacity: 0 } : { opacity: 0, transform: FROM[this.kind] };\n const panelFrom = this.reduced ? { opacity: 1 } : { opacity: 1, transform: 'none' };\n await this.animate2([panelFrom, panelTo], [{ opacity: 1 }, { opacity: 0 }], this.reduced ? 120 : 200, 'cubic-bezier(0.7, 0, 0.84, 0)', 'forwards');\n try {\n if (typeof dlg.close === 'function') dlg.close(returnValue);\n else dlg.removeAttribute('open');\n } catch {\n dlg.removeAttribute('open');\n }\n dlg.removeAttribute('open');\n this._panel?.getAnimations?.().forEach((a) => a.cancel());\n this._backdrop?.getAnimations?.().forEach((a) => a.cancel());\n this.setOpenAttr(false);\n this.emit('close', { returnValue });\n })();\n await this._busy;\n this._busy = null;\n }\n\n private animate2(panel: Keyframe[], backdrop: Keyframe[], duration: number, easing: string, fill: FillMode = 'none'): Promise<void> {\n const a = this._panel ? this.motion(this._panel, panel, { duration, easing, fill }) : null;\n const b = this._backdrop ? this.motion(this._backdrop, backdrop, { duration, easing: 'linear', fill }) : null;\n return Promise.all([a?.finished, b?.finished].map((p) => p?.catch(() => undefined))).then(() => undefined);\n }\n },\n { id: 'dialog', text: css }\n );\n}\n","import { defineElement, EASE_OUT, type UsaElement } from '../base';\nimport css from './accordion.css?raw';\n\n/**\n * `<usa-accordion>` — smooth expand / collapse for the native `<details>`\n * elements inside it (keeps their semantics, keyboard support and\n * find-in-page, and adds no wrapper elements, so framework-rendered content\n * is left alone). Only one stays open unless `multiple` is set.\n *\n * Attributes: `multiple`, `duration` (ms, 300). Event: `usa:toggle`\n * (`detail.details`, `detail.open`). Reduced motion: instant.\n * Heights are measured once per toggle and animated on the `<details>`.\n */\nexport interface UsaAccordionElement extends UsaElement {\n readonly items: HTMLDetailsElement[];\n toggleItem(details: HTMLDetailsElement, open?: boolean): Promise<void>;\n}\n\nexport function defineAccordion(tag = 'usa-accordion'): CustomElementConstructor | undefined {\n return defineElement(\n tag,\n (Base) =>\n class UsaAccordion extends Base {\n static get observedAttributes(): string[] {\n return [];\n }\n\n private _running = new WeakMap<HTMLDetailsElement, Animation>();\n\n get items(): HTMLDetailsElement[] {\n return Array.from(this.children).filter((c): c is HTMLDetailsElement => c.tagName === 'DETAILS');\n }\n\n mount(): void {\n this.listen(this, 'click', (e: MouseEvent) => {\n const summary = (e.target as Element).closest?.('summary');\n const d = summary?.parentElement;\n if (!summary || !d || d.tagName !== 'DETAILS' || d.parentElement !== this) return;\n e.preventDefault();\n this.toggleItem(d as HTMLDetailsElement);\n });\n }\n\n /** Height of `d` when closed: its summary plus its own padding and border. */\n private closedHeight(d: HTMLDetailsElement): number {\n const summary = d.querySelector(':scope > summary');\n const cs = typeof getComputedStyle === 'function' ? getComputedStyle(d) : null;\n const extra = cs\n ? ['paddingTop', 'paddingBottom', 'borderTopWidth', 'borderBottomWidth'].reduce((n, k) => n + (parseFloat((cs as any)[k]) || 0), 0)\n : 0;\n return (summary ? summary.getBoundingClientRect().height : 0) + extra;\n }\n\n async toggleItem(d: HTMLDetailsElement, open = !d.open || d.hasAttribute('data-closing')): Promise<void> {\n if (open && !this.flag('multiple')) this.items.forEach((o) => o !== d && o.open && this.toggleItem(o, false));\n this._running.get(d)?.cancel();\n this._running.delete(d);\n const duration = this.reduced ? 0 : this.num('duration', 300);\n const startH = d.getBoundingClientRect().height;\n if (open) {\n d.removeAttribute('data-closing');\n d.open = true;\n }\n this.emit('toggle', { details: d, open });\n if (!duration || typeof d.animate !== 'function') {\n if (!open) d.open = false;\n return;\n }\n const endH = open ? d.getBoundingClientRect().height : this.closedHeight(d);\n if (!open) d.setAttribute('data-closing', '');\n d.style.overflow = 'hidden';\n const a = d.animate([{ height: `${startH}px` }, { height: `${endH}px` }], { duration, easing: EASE_OUT });\n this._running.set(d, a);\n await a.finished.catch(() => undefined);\n if (this._running.get(d) !== a) return;\n this._running.delete(d);\n d.style.overflow = '';\n if (!open) {\n d.open = false;\n d.removeAttribute('data-closing');\n }\n }\n },\n { id: 'accordion', text: css }\n );\n}\n","import { defineElement, EASE_OUT, FLUENT_DECELERATE, type UsaElement } from '../base';\nimport css from './view-switch.css?raw';\n\n/**\n * `<usa-view-switch>` — shows one of its children at a time (tabs, wizard\n * steps, app pages) and animates between them. Children are views; name\n * them with `data-view`, or address them by index.\n *\n * Attributes: `active` (view name or index, default the first),\n * `effect` (`fade` | `slide` (default, direction-aware — Fluent \"page\n * transition\") | `scale` | `drill`), `duration` (ms, 320). Inactive views\n * get `hidden` + `inert`. Event: `usa:change` (`detail.view`,\n * `detail.index`). Reduced motion: a quick fade.\n */\nexport interface UsaViewSwitchElement extends UsaElement {\n active: string;\n readonly views: HTMLElement[];\n show(view: string | number): Promise<void>;\n}\n\nexport function defineViewSwitch(tag = 'usa-view-switch'): CustomElementConstructor | undefined {\n return defineElement(\n tag,\n (Base) =>\n class UsaViewSwitch extends Base {\n static get observedAttributes(): string[] {\n return ['active'];\n }\n\n private _index = -1;\n private _anims: Animation[] = [];\n\n get views(): HTMLElement[] {\n return Array.from(this.children) as HTMLElement[];\n }\n get active(): string {\n return this.str('active', '0');\n }\n set active(v: string) {\n this.setAttribute('active', String(v));\n }\n\n private indexOf(v: string | number): number {\n const views = this.views;\n const byName = views.findIndex((el) => el.dataset.view === String(v));\n if (byName >= 0) return byName;\n const n = Number(v);\n return Number.isInteger(n) && n >= 0 && n < views.length ? n : -1;\n }\n\n changed(): void {\n this.show(this.active);\n }\n\n mount(): void {\n const i = Math.max(0, this.indexOf(this.active));\n this._index = i;\n this.views.forEach((v, j) => this.setVisible(v, j === i));\n }\n\n private setVisible(v: HTMLElement, on: boolean): void {\n v.hidden = !on;\n v.toggleAttribute('inert', !on);\n v.toggleAttribute('data-active', on);\n }\n\n async show(view: string | number): Promise<void> {\n const next = this.indexOf(view);\n const prev = this._index;\n if (next < 0 || next === prev) return;\n const views = this.views;\n const from = views[prev];\n const to = views[next];\n this._index = next;\n const name = to.dataset.view ?? String(next);\n if (this.active !== name && this.active !== String(next)) this.setAttribute('active', name);\n this._anims.splice(0).forEach((a) => a.finish());\n this.setVisible(to, true);\n this.emit('change', { view: to, index: next, name });\n if (!from) return;\n const duration = this.num('duration', 320);\n const effect = this.reduced ? 'fade' : this.str('effect', 'slide');\n const dir = next > prev ? 1 : -1;\n let outF: Keyframe;\n let inF: Keyframe;\n switch (effect) {\n case 'fade':\n outF = { opacity: 0 };\n inF = { opacity: 0 };\n break;\n case 'scale':\n outF = { opacity: 0, transform: 'scale(0.96)' };\n inF = { opacity: 0, transform: 'scale(1.04)' };\n break;\n case 'drill':\n outF = { opacity: 0, transform: `scale(${dir > 0 ? 1.06 : 0.94})` };\n inF = { opacity: 0, transform: `scale(${dir > 0 ? 0.94 : 1.06})` };\n break;\n default:\n outF = { opacity: 0, transform: `translateX(${-dir * 32}px)` };\n inF = { opacity: 0, transform: `translateX(${dir * 48}px)` };\n }\n const neutral = (f: Keyframe): Keyframe => ('transform' in f ? { opacity: 1, transform: 'none' } : { opacity: 1 });\n // Outgoing view stays stacked in the same grid cell while it leaves\n from.setAttribute('data-leaving', '');\n const a = this.motion(from, [neutral(outF), outF], { duration: duration * 0.6, easing: EASE_OUT, fill: 'forwards' });\n const b = this.motion(to, [inF, neutral(inF)], { duration, delay: duration * 0.15, easing: FLUENT_DECELERATE, fill: 'backwards' });\n this._anims = [a, b].filter((x): x is Animation => !!x);\n await Promise.all(this._anims.map((x) => x.finished.catch(() => undefined)));\n from.removeAttribute('data-leaving');\n if (this._index !== prev) this.setVisible(from, false);\n a?.cancel();\n }\n },\n { id: 'view-switch', text: css }\n );\n}\n","import { prefersReducedMotion, EASE_OUT, FLUENT_DECELERATE } from '../base';\n\nexport interface ViewTransitionOptions {\n /**\n * Element to cross-fade when the View Transitions API is missing (default:\n * none — the update is applied without animation).\n */\n fallback?: HTMLElement | null;\n /** Fallback fade duration in ms (default 180 out + 220 in). */\n duration?: number;\n /** View transition types (`document.startViewTransition({ types })`, where supported). */\n types?: string[];\n}\n\n/**\n * Run `update()` (which changes the DOM) inside a view transition:\n * `document.startViewTransition()` where available (Chrome/Edge 111+, so\n * Electron, WebView2 and Tauri on Windows), otherwise a short cross-fade of\n * `options.fallback`. Instant under reduced motion. Resolves when finished.\n *\n * Give elements a `view-transition-name` in CSS for shared-element morphs.\n */\nexport async function viewTransition(update: () => void | Promise<void>, options: ViewTransitionOptions = {}): Promise<void> {\n const doc: any = typeof document !== 'undefined' ? document : null;\n if (!doc || prefersReducedMotion()) {\n await update();\n return;\n }\n if (typeof doc.startViewTransition === 'function') {\n let vt: any;\n try {\n vt = options.types ? doc.startViewTransition({ update, types: options.types }) : doc.startViewTransition(update);\n } catch {\n vt = doc.startViewTransition(update);\n }\n await vt.finished.catch(() => undefined);\n return;\n }\n const el = options.fallback;\n const d = options.duration ?? 200;\n if (!el || typeof el.animate !== 'function') {\n await update();\n return;\n }\n await el.animate([{ opacity: 1 }, { opacity: 0 }], { duration: d * 0.8, easing: 'ease-in', fill: 'forwards' }).finished.catch(() => undefined);\n await update();\n const a = el.animate([{ opacity: 0, transform: 'translateY(6px)' }, { opacity: 1, transform: 'none' }], { duration: d * 1.1, easing: EASE_OUT });\n // remove the forwards fill of the fade-out\n el.getAnimations?.().forEach((x) => x !== a && x.cancel());\n await a.finished.catch(() => undefined);\n}\n\nexport interface FlipOptions {\n duration?: number;\n easing?: string;\n /** Fade/scale in elements that did not exist before (default true). */\n animateEnter?: boolean;\n}\n\ntype Targets = Element | Iterable<Element> | ArrayLike<Element>;\nconst list = (t: Targets): HTMLElement[] =>\n (t instanceof Element ? Array.from(t.children) : Array.from(t as ArrayLike<Element>)) as HTMLElement[];\n\n/**\n * FLIP animation for layout changes (list reorder, filter, grid resize):\n * measures `targets` (an element's children, or a list), runs `mutate()`,\n * then animates each element from its old position to its new one with\n * transforms only. Elements added by `mutate()` fade in.\n *\n * ```js\n * await flip(list, () => list.append(...shuffled));\n * ```\n */\nexport async function flip(targets: Targets, mutate: () => void | Promise<void>, options: FlipOptions = {}): Promise<void> {\n const before = new Map(list(targets).map((el) => [el, el.getBoundingClientRect()]));\n await mutate();\n if (prefersReducedMotion()) return;\n const after = list(targets);\n const duration = options.duration ?? 420;\n const easing = options.easing ?? FLUENT_DECELERATE;\n const anims: Animation[] = [];\n // Read all, then write all\n const rects = after.map((el) => el.getBoundingClientRect());\n after.forEach((el, i) => {\n if (typeof el.animate !== 'function') return;\n const first = before.get(el);\n const last = rects[i];\n if (!first) {\n if (options.animateEnter !== false) anims.push(el.animate([{ opacity: 0, transform: 'scale(0.9)' }, { opacity: 1, transform: 'none' }], { duration, easing }));\n return;\n }\n const dx = first.left - last.left;\n const dy = first.top - last.top;\n const sx = last.width ? first.width / last.width : 1;\n const sy = last.height ? first.height / last.height : 1;\n if (Math.abs(dx) < 0.5 && Math.abs(dy) < 0.5 && Math.abs(sx - 1) < 0.01 && Math.abs(sy - 1) < 0.01) return;\n anims.push(\n el.animate(\n [{ transformOrigin: '0 0', transform: `translate(${dx}px, ${dy}px) scale(${sx}, ${sy})` }, { transformOrigin: '0 0', transform: 'none' }],\n { duration, easing }\n )\n );\n });\n await Promise.all(anims.map((a) => a.finished.catch(() => undefined)));\n}\n","/**\n * use-scroll-animate/components/transitions — view & layout transitions.\n * `<usa-dialog>`, `<usa-accordion>`, `<usa-view-switch>`\n * and the `viewTransition()` and `flip()` helpers (4.0: `<usa-flip-list>` → `<usa-auto-animate>`,\n * `connectedAnimation()` → `sharedTransition()`, both in `components/layout`).\n */\nimport { defineDialog, type UsaDialogElement } from './dialog';\nimport { defineAccordion, type UsaAccordionElement } from './accordion';\nimport { defineViewSwitch, type UsaViewSwitchElement } from './view-switch';\n\nexport { defineDialog, defineAccordion, defineViewSwitch };\nexport { viewTransition, flip } from './helpers';\nexport type { ViewTransitionOptions, FlipOptions } from './helpers';\nexport type { DialogVariant } from './dialog';\nexport type { UsaDialogElement, UsaAccordionElement, UsaViewSwitchElement };\nexport { configureComponents, prefersReducedMotion } from '../base';\nexport type { ComponentsConfig, UsaElement } from '../base';\n\n/** Register every component of this category under its default tag. */\nexport function defineTransitionComponents(): void {\n defineDialog();\n defineAccordion();\n defineViewSwitch();\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'usa-dialog': UsaDialogElement;\n 'usa-accordion': UsaAccordionElement;\n 'usa-view-switch': UsaViewSwitchElement;\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, type SpringInput } from './spring';\nimport css from './spring-effect.css?raw';\n\nexport const SPRING_EFFECTS = ['bounce-in', 'pop', 'drop', 'jelly', 'rubber-band'] as const;\nexport type SpringEffect = (typeof SPRING_EFFECTS)[number];\n\n/** Entrance effects start hidden; attention effects (jelly, rubber-band) play on visible content. */\nconst ENTRANCE = new Set<string>(['bounce-in', 'pop', 'drop']);\n\n/** Keyframes of a spring effect (entrances use spring timing, attention effects fixed frames). */\nexport function springEffectKeyframes(effect: string, reduced = false): Keyframe[] {\n if (reduced) return ENTRANCE.has(effect) ? [{ opacity: 0 }, { opacity: 1 }] : [{ opacity: 1 }, { opacity: 1 }];\n switch (effect) {\n case 'pop':\n return [{ opacity: 0, transform: 'scale(0.5)' }, { opacity: 1, transform: 'scale(1)' }];\n case 'drop':\n return [{ opacity: 0, transform: 'translate3d(0, -120%, 0)' }, { opacity: 1, transform: 'translate3d(0, 0, 0)' }];\n case 'jelly':\n return [\n { transform: 'scale3d(1, 1, 1)' },\n { transform: 'scale3d(1.25, 0.75, 1)', offset: 0.3 },\n { transform: 'scale3d(0.75, 1.25, 1)', offset: 0.4 },\n { transform: 'scale3d(1.15, 0.85, 1)', offset: 0.5 },\n { transform: 'scale3d(0.95, 1.05, 1)', offset: 0.65 },\n { transform: 'scale3d(1.05, 0.95, 1)', offset: 0.75 },\n { transform: 'scale3d(1, 1, 1)' },\n ];\n case 'rubber-band':\n return [\n { transform: 'scale3d(1, 1, 1)' },\n { transform: 'scale3d(1.3, 0.7, 1)', offset: 0.3 },\n { transform: 'scale3d(0.8, 1.2, 1)', offset: 0.45 },\n { transform: 'scale3d(1.1, 0.9, 1)', offset: 0.6 },\n { transform: 'scale3d(0.97, 1.03, 1)', offset: 0.8 },\n { transform: 'scale3d(1, 1, 1)' },\n ];\n default:\n return [{ opacity: 0, transform: 'scale(0.3)' }, { opacity: 1, transform: 'scale(1)' }];\n }\n}\n\nconst DEFAULT_PRESET: Record<string, string> = { 'bounce-in': 'bouncy', pop: 'wobbly', drop: 'bouncy' };\n\n/**\n * `<usa-spring>` — spring / bounce effects on its content.\n *\n * Attributes: `effect` (`bounce-in` default, `pop`, `drop`, `jelly`,\n * `rubber-band`), `trigger` (`view` default, `hover`, `click`, `manual`),\n * `preset` (`gentle`, `wobbly`, `stiff`, `bouncy`, …) or `stiffness` /\n * `damping` / `mass`, `delay` (ms), `duration` (ms, attention effects; 900),\n * `repeat` (replay every time it re-enters the view), `block`.\n * Events: `usa:complete`. Reduced motion: entrances fade, attention effects do nothing.\n */\nexport interface UsaSpringElement extends UsaElement {\n effect: string;\n play(): Promise<void>;\n reset(): void;\n}\n\nexport function defineSpring(tag = 'usa-spring'): CustomElementConstructor | undefined {\n return defineElement(\n tag,\n (Base) =>\n class UsaSpring extends Base {\n static get observedAttributes(): string[] {\n return ['effect', 'trigger', 'repeat'];\n }\n\n private _anim: Animation | null = null;\n\n get effect(): string {\n return this.str('effect', 'bounce-in');\n }\n set effect(v: string) {\n this.setAttribute('effect', v);\n }\n\n private config(): SpringInput {\n if (this.hasAttribute('stiffness') || this.hasAttribute('damping') || this.hasAttribute('mass'))\n return { stiffness: this.num('stiffness', 170), damping: this.num('damping', 26), mass: this.num('mass', 1) };\n return this.str('preset', DEFAULT_PRESET[this.effect] || 'wobbly');\n }\n\n mount(): void {\n const trigger = this.str('trigger', 'view');\n const entrance = ENTRANCE.has(this.effect);\n if (trigger === 'view') {\n if (entrance) this.setAttribute('data-state', 'hidden');\n this.inView((visible) => {\n if (visible) this.play();\n else if (this.flag('repeat') && entrance) this.reset();\n }, { threshold: 0.15 });\n } else {\n if (trigger === 'hover') this.listen(this, 'pointerenter', () => this.play());\n if (trigger === 'click') {\n this.listen(this, 'click', () => this.play());\n this.listen(this, 'keydown', (e: KeyboardEvent) => (e.key === 'Enter' || e.key === ' ') && !e.repeat && this.play());\n }\n }\n }\n\n unmount(): void {\n this._anim?.cancel();\n this._anim = null;\n }\n\n reset(): void {\n this._anim?.cancel();\n this._anim = null;\n if (ENTRANCE.has(this.effect)) this.setAttribute('data-state', 'hidden');\n }\n\n async play(): Promise<void> {\n const effect = this.effect;\n const reduced = this.reduced;\n this._anim?.cancel();\n this.setAttribute('data-state', 'playing');\n const frames = springEffectKeyframes(effect, reduced);\n const timing: KeyframeAnimationOptions = ENTRANCE.has(effect) && !reduced\n ? springEasing(this.config())\n : { duration: reduced ? 250 : this.num('duration', 900), easing: 'ease-out' };\n const a = this.motion(this, frames, { ...timing, delay: this.num('delay', 0), fill: 'backwards' });\n this._anim = a;\n if (a) {\n try {\n await a.finished;\n } catch {\n return;\n }\n if (this._anim !== a) return;\n }\n this._anim = null;\n this.setAttribute('data-state', 'done');\n this.emit('complete', { effect });\n }\n },\n { id: 'spring', text: css }\n );\n}\n","import { defineElement, clamp, type UsaElement } from '../base';\nimport { createSpring, projectInertia, snapTo, rubberBand, type SpringValue } from './spring';\nimport css from './draggable.css?raw';\n\n/**\n * `<usa-draggable>` — drag its content with the pointer (mouse, touch, pen)\n * or the arrow keys; physics on release.\n *\n * Attributes: `axis` (`both` default, `x`, `y`), `spring-back` (return to\n * the origin with a spring), `inertia` (keep gliding after a flick),\n * `snap` (grid size like `80`, or points like `0,120,240`), `bounds`\n * (`parent` = stay inside the parent box, rubber-banding past its edges),\n * `preset` (spring, default `wobbly`), `step` (arrow-key step, px, 16),\n * `disabled`. Methods: `moveTo(x, y, animate?)`, `reset()`. Events:\n * `usa:drag-start`, `usa:drag-end` (`{ x, y, vx, vy }`), `usa:settle`.\n * Reduced motion: positions change instantly (no spring or inertia).\n */\nexport interface UsaDraggableElement extends UsaElement {\n readonly x: number;\n readonly y: number;\n readonly dragging: boolean;\n moveTo(x: number, y: number, animate?: boolean): void;\n reset(): void;\n}\n\nconst parseSnap = (s: string): number | number[] | null => {\n if (!s.trim()) return null;\n const parts = s.split(',').map((p) => Number(p.trim())).filter((n) => Number.isFinite(n));\n if (!parts.length) return null;\n return s.includes(',') ? parts : parts[0];\n};\n\nexport function defineDraggable(tag = 'usa-draggable'): CustomElementConstructor | undefined {\n return defineElement(\n tag,\n (Base) =>\n class UsaDraggable extends Base {\n static get observedAttributes(): string[] {\n return ['axis', 'disabled', 'preset'];\n }\n\n private _x = 0;\n private _y = 0;\n private _sx!: SpringValue;\n private _sy!: SpringValue;\n private _drag: { id: number; px: number; py: number; ox: number; oy: number; samples: [number, number, number][] } | null = null;\n\n get x(): number {\n return this._x;\n }\n get y(): number {\n return this._y;\n }\n get dragging(): boolean {\n return !!this._drag;\n }\n\n private render(): void {\n this.style.transform = `translate3d(${this._x}px, ${this._y}px, 0)`;\n this.style.setProperty('--usa-drag-x', `${this._x}px`);\n this.style.setProperty('--usa-drag-y', `${this._y}px`);\n }\n\n private axis(): string {\n return this.str('axis', 'both');\n }\n\n /** Bounds relative to the origin, from the parent box. */\n private limits(): { minX: number; maxX: number; minY: number; maxY: number } | null {\n if (this.str('bounds') !== 'parent' || !this.parentElement) return null;\n const p = this.parentElement.getBoundingClientRect();\n const r = this.getBoundingClientRect();\n const ox = r.left - this._x;\n const oy = r.top - this._y;\n return { minX: p.left - ox, maxX: p.right - ox - r.width, minY: p.top - oy, maxY: p.bottom - oy - r.height };\n }\n\n mount(): void {\n let settled = 0;\n const rest = () => {\n if (++settled >= 2) {\n settled = 0;\n this.removeAttribute('data-moving');\n this.emit('settle', { x: this._x, y: this._y });\n }\n };\n const spring = this.str('preset', 'wobbly');\n this._sx = createSpring({ value: this._x, spring, onUpdate: (v) => ((this._x = v), this.render()), onRest: rest });\n this._sy = createSpring({ value: this._y, spring, onUpdate: (v) => ((this._y = v), this.render()), onRest: rest });\n if (!this.hasAttribute('tabindex')) this.tabIndex = 0;\n this.setAttribute('aria-roledescription', 'draggable');\n this.listen(this, 'pointerdown', (e: PointerEvent) => this.start(e));\n this.listen(this, 'pointermove', (e: PointerEvent) => this.move(e));\n this.listen(this, 'pointerup', (e: PointerEvent) => this.end(e));\n this.listen(this, 'pointercancel', (e: PointerEvent) => this.end(e));\n this.listen(this, 'keydown', (e: KeyboardEvent) => this.key(e));\n this.render();\n }\n\n unmount(): void {\n this._sx?.stop();\n this._sy?.stop();\n this._drag = null;\n }\n\n private start(e: PointerEvent): void {\n if (this.flag('disabled') || (e.pointerType === 'mouse' && e.button !== 0)) return;\n this._sx.stop();\n this._sy.stop();\n this._drag = { id: e.pointerId, px: e.clientX, py: e.clientY, ox: this._x, oy: this._y, samples: [[e.clientX, e.clientY, typeof e.timeStamp === 'number' ? e.timeStamp : Date.now()]] };\n try {\n this.setPointerCapture?.(e.pointerId);\n } catch {\n /* synthetic events */\n }\n this.setAttribute('data-dragging', '');\n this.emit('drag-start', { x: this._x, y: this._y });\n }\n\n private move(e: PointerEvent): void {\n const d = this._drag;\n if (!d || e.pointerId !== d.id) return;\n const axis = this.axis();\n let x = axis === 'y' ? d.ox : d.ox + e.clientX - d.px;\n let y = axis === 'x' ? d.oy : d.oy + e.clientY - d.py;\n const b = this.limits();\n if (b) {\n const band = (v: number, lo: number, hi: number, dim: number) => (v < lo ? lo + rubberBand(v - lo, dim) : v > hi ? hi + rubberBand(v - hi, dim) : v);\n x = band(x, b.minX, b.maxX, 200);\n y = band(y, b.minY, b.maxY, 200);\n }\n this._x = x;\n this._y = y;\n d.samples.push([e.clientX, e.clientY, typeof e.timeStamp === 'number' ? e.timeStamp : Date.now()]);\n if (d.samples.length > 6) d.samples.shift();\n this.render();\n this.emit('drag', { x, y });\n }\n\n private velocity(): [number, number] {\n const s = this._drag?.samples || [];\n if (s.length < 2) return [0, 0];\n const a = s[0];\n const b = s[s.length - 1];\n const dt = (b[2] - a[2]) / 1000;\n if (dt <= 0 || dt > 0.3) return [0, 0];\n return [(b[0] - a[0]) / dt, (b[1] - a[1]) / dt];\n }\n\n private end(e: PointerEvent): void {\n const d = this._drag;\n if (!d || e.pointerId !== d.id) return;\n let [vx, vy] = this.velocity();\n const axis = this.axis();\n if (axis === 'y') vx = 0;\n if (axis === 'x') vy = 0;\n this._drag = null;\n this.removeAttribute('data-dragging');\n let tx = this._x;\n let ty = this._y;\n if (this.flag('spring-back')) {\n tx = 0;\n ty = 0;\n } else {\n if (this.flag('inertia') && !this.reduced) {\n tx = projectInertia(tx, vx);\n ty = projectInertia(ty, vy);\n }\n [tx, ty] = this.constrain(tx, ty);\n }\n this.emit('drag-end', { x: tx, y: ty, vx, vy });\n this.go(tx, ty, vx, vy);\n }\n\n private constrain(x: number, y: number): [number, number] {\n const snap = parseSnap(this.str('snap'));\n let tx = snapTo(x, snap);\n let ty = snapTo(y, snap);\n const b = this.limits();\n if (b) {\n tx = clamp(tx, b.minX, Math.max(b.minX, b.maxX));\n ty = clamp(ty, b.minY, Math.max(b.minY, b.maxY));\n }\n const axis = this.axis();\n return [axis === 'y' ? 0 : tx, axis === 'x' ? 0 : ty];\n }\n\n private go(x: number, y: number, vx = 0, vy = 0): void {\n this.setAttribute('data-moving', '');\n this._sx.set(x, vx);\n this._sy.set(y, vy);\n }\n\n private key(e: KeyboardEvent): void {\n if (this.flag('disabled')) return;\n const step = this.num('step', 16);\n const snap = parseSnap(this.str('snap'));\n const s = typeof snap === 'number' ? snap : step;\n const map: Record<string, [number, number]> = { ArrowLeft: [-s, 0], ArrowRight: [s, 0], ArrowUp: [0, -s], ArrowDown: [0, s] };\n if (e.key === 'Home' || e.key === 'Escape') {\n e.preventDefault();\n this.reset();\n return;\n }\n const m = map[e.key];\n if (!m) return;\n e.preventDefault();\n const [tx, ty] = this.flag('spring-back') ? [this._sx.target + m[0], this._sy.target + m[1]] : this.constrain(this._sx.target + m[0], this._sy.target + m[1]);\n this.go(tx, ty);\n }\n\n moveTo(x: number, y: number, animate = true): void {\n if (!animate) {\n this._sx.jump(x);\n this._sy.jump(y);\n return;\n }\n this.go(x, y);\n }\n\n reset(): void {\n this.go(0, 0);\n }\n },\n { id: 'draggable', text: css }\n );\n}\n","import { defineElement, type UsaElement } from '../base';\nimport { createSpring, rubberBand, type SpringValue } from './spring';\nimport css from './overscroll.css?raw';\n\n/**\n * `<usa-overscroll>` — an elastic scroll container: pulling past the top or\n * bottom (touch, trackpad or wheel) stretches the content with iOS-style\n * rubber-band resistance and it springs back on release.\n *\n * Attributes: `axis` (`y` default, `x`), `max` (largest stretch in px, 120),\n * `preset` (spring, default `default`), `disabled`. CSS variable\n * `--usa-overscroll` holds the current offset. Reduced motion: no stretch\n * (a plain scroll container with `overscroll-behavior: contain`).\n */\nexport interface UsaOverscrollElement extends UsaElement {\n /** Current stretch in px (negative = pulled past the end). */\n readonly offset: number;\n}\n\nexport function defineOverscroll(tag = 'usa-overscroll'): CustomElementConstructor | undefined {\n return defineElement(\n tag,\n (Base) =>\n class UsaOverscroll extends Base {\n static get observedAttributes(): string[] {\n return ['axis', 'disabled'];\n }\n\n private _off = 0;\n private _spring!: SpringValue;\n\n get offset(): number {\n return this._off;\n }\n\n private set(v: number): void {\n this._off = v;\n this.style.setProperty('--usa-overscroll', `${v}px`);\n this.toggleAttribute('data-stretched', Math.abs(v) > 0.5);\n }\n\n private edge(delta: number): boolean {\n const x = this.str('axis', 'y') === 'x';\n const pos = x ? this.scrollLeft : this.scrollTop;\n const max = (x ? this.scrollWidth - this.clientWidth : this.scrollHeight - this.clientHeight) - 1;\n return (delta < 0 && pos <= 0) || (delta > 0 && pos >= max);\n }\n\n private stretch(raw: number): void {\n const max = this.num('max', 120);\n this.set(Math.max(-max, Math.min(max, rubberBand(raw, max * 2.5))));\n }\n\n mount(): void {\n this._spring = createSpring({ spring: this.str('preset', 'default'), onUpdate: (v) => this.set(v) });\n const x = this.str('axis', 'y') === 'x';\n const off = () => this.flag('disabled') || this.reduced;\n // Wheel / trackpad: accumulate past the edge, spring back when it stops.\n let pull = 0;\n let timer: ReturnType<typeof setTimeout> | undefined;\n this.listen(this, 'wheel', (e: WheelEvent) => {\n const d = x ? e.deltaX || e.deltaY : e.deltaY;\n if (off() || !d || !this.edge(d)) return;\n this._spring.stop();\n pull -= d;\n this.stretch(pull);\n clearTimeout(timer);\n timer = setTimeout(() => {\n pull = 0;\n this._spring.jump(this._off);\n this._spring.set(0);\n }, 140);\n }, { passive: true });\n this.onCleanup(() => clearTimeout(timer));\n // Touch: rubber-band while the finger pulls past the edge.\n let start = 0;\n let active = false;\n this.listen(this, 'touchstart', (e: TouchEvent) => {\n if (off()) return;\n const t = e.touches[0];\n start = x ? t.clientX : t.clientY;\n active = false;\n this._spring.stop();\n }, { passive: true });\n this.listen(this, 'touchmove', (e: TouchEvent) => {\n if (off()) return;\n const t = e.touches[0];\n const dist = (x ? t.clientX : t.clientY) - start;\n if (!active && dist !== 0 && this.edge(-dist)) active = true;\n if (!active) return;\n if (e.cancelable) e.preventDefault();\n this.stretch(dist);\n }, { passive: false });\n const release = () => {\n if (!active) return;\n active = false;\n this._spring.jump(this._off);\n this._spring.set(0);\n };\n this.listen(this, 'touchend', release);\n this.listen(this, 'touchcancel', release);\n }\n\n unmount(): void {\n this._spring?.stop();\n this.set(0);\n }\n },\n { id: 'overscroll', text: css }\n );\n}\n","/**\n * use-scroll-animate/components/physics — spring & bounce physics (v2.3).\n * `<usa-spring>` (bounce-in, pop, drop, jelly, rubber-band), `<usa-draggable>`\n * (spring-back, inertia, snap) and `<usa-overscroll>` (elastic edges), plus\n * the spring core: `spring()`, `springEasing()`, `createSpring()`,\n * `SPRING_PRESETS`, `projectInertia()`, `snapTo()`, `rubberBand()`.\n */\nimport { defineSpring, type UsaSpringElement } from './spring-effect';\nimport { defineDraggable, type UsaDraggableElement } from './draggable';\nimport { defineOverscroll, type UsaOverscrollElement } from './overscroll';\n\nexport { defineSpring, defineDraggable, defineOverscroll };\nexport { SPRING_EFFECTS, springEffectKeyframes } from './spring-effect';\nexport type { SpringEffect } from './spring-effect';\nexport {\n SPRING_PRESETS,\n resolveSpring,\n stepSpring,\n springSamples,\n springEasing,\n linearEasing,\n supportsLinearEasing,\n spring,\n createSpring,\n projectInertia,\n snapTo,\n rubberBand,\n} from './spring';\nexport type { SpringConfig, SpringPreset, SpringInput, SpringValue, SpringValueOptions } from './spring';\nexport type { UsaSpringElement, UsaDraggableElement, UsaOverscrollElement };\nexport { configureComponents, prefersReducedMotion } from '../base';\nexport type { ComponentsConfig, UsaElement } from '../base';\n\n/** Register every component of this category under its default tag. */\nexport function definePhysicsComponents(): void {\n defineSpring();\n defineDraggable();\n defineOverscroll();\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'usa-spring': UsaSpringElement;\n 'usa-draggable': UsaDraggableElement;\n 'usa-overscroll': UsaOverscrollElement;\n }\n}\n","import { defineElement, raf, caf, clamp, EASE_OUT, type UsaElement } from '../base';\nimport { springEasing } from '../physics/spring';\nimport css from './card.css?raw';\n\nexport const CARD_EFFECTS = ['flip', 'holo', 'glass', 'border-glow', 'conic-border', 'lift', 'spotlight', 'sheen', 'parallax-layers', 'expand'] as const;\nexport type CardEffect = (typeof CARD_EFFECTS)[number];\n\n/** Effects that follow the pointer (they share one rAF-throttled tracker). */\nconst TRACKING = new Set(['holo', 'border-glow', 'spotlight', 'parallax-layers', 'lift']);\n\n/**\n * `<usa-card>` — card effects, combinable: `effect=\"lift sheen\"`.\n *\n * - `flip` — front/back (`[data-front]` / `[data-back]` children) flip on\n * hover or `trigger=\"click\"`, `axis=\"y\"` (default, horizontal flip) or `x`.\n * - `holo` — holographic foil that shifts with the pointer.\n * - `glass` — frosted glass surface (backdrop blur).\n * - `border-glow` — a glow on the border that follows the pointer.\n * - `conic-border` — a rotating conic-gradient border.\n * - `lift` — rises with a deeper shadow and a slight pointer tilt.\n * - `spotlight` — a soft light that follows the pointer.\n * - `sheen` — a light sweep across the card on hover / focus.\n * - `parallax-layers` — children with `data-depth=\"0.2…1\"` move at different depths.\n * - `expand` — click to grow into a full detail view (`[data-detail]`\n * content is shown), FLIP + spring; Esc, `[data-close]` or the backdrop closes.\n *\n * Attributes: `effect`, `axis`, `trigger`, `depth` (parallax px, 16),\n * `color` (glow / spotlight colour), `flipped`, `expanded`, `disabled`.\n * CSS variables: `--usa-card-x/-y` (pointer %, 0–100), `--usa-card-nx/-ny` (−1…1).\n * Methods: `flip(force?)`, `expand()`, `collapse()`. Events: `usa:flip`,\n * `usa:expand`, `usa:collapse`. Reduced motion: no tilt / parallax / sweep;\n * flips and expansions cross-fade.\n */\nexport interface UsaCardElement extends UsaElement {\n readonly effects: string[];\n flipped: boolean;\n readonly expanded: boolean;\n flip(force?: boolean): void;\n expand(): Promise<void>;\n collapse(): Promise<void>;\n}\n\nexport function defineCard(tag = 'usa-card'): CustomElementConstructor | undefined {\n return defineElement(\n tag,\n (Base) =>\n class UsaCard extends Base {\n static get observedAttributes(): string[] {\n return ['effect', 'trigger', 'disabled'];\n }\n\n private _frame = 0;\n private _spacer: HTMLElement | null = null;\n private _backdrop: HTMLElement | null = null;\n private _busy = false;\n\n get effects(): string[] {\n return this.str('effect', 'lift').split(/[\\s,]+/).filter(Boolean);\n }\n private has(e: string): boolean {\n return this.effects.includes(e);\n }\n get flipped(): boolean {\n return this.flag('flipped');\n }\n set flipped(v: boolean) {\n this.setFlag('flipped', v);\n }\n get expanded(): boolean {\n return this.flag('expanded');\n }\n\n mount(): void {\n if (this.flag('disabled')) return;\n const color = this.str('color');\n if (color) this.style.setProperty('--usa-card-glow', color);\n if (this.has('sheen') && !this.querySelector(':scope > .usa-card-sheen')) this.append(deco('usa-card-sheen'));\n if (this.has('holo') && !this.querySelector(':scope > .usa-card-holo')) this.append(deco('usa-card-holo'));\n if (this.has('flip')) {\n const click = this.str('trigger', 'hover') === 'click';\n if (click) {\n if (!this.hasAttribute('tabindex')) this.tabIndex = 0;\n this.setAttribute('role', this.getAttribute('role') || 'button');\n this.setAttribute('aria-pressed', String(this.flipped));\n this.listen(this, 'click', (e: MouseEvent) => !interactive(e.target, this) && this.flip());\n this.listen(this, 'keydown', (e: KeyboardEvent) => {\n if ((e.key === 'Enter' || e.key === ' ') && e.target === this) {\n e.preventDefault();\n this.flip();\n }\n });\n }\n this.setBackHidden();\n }\n if (this.has('expand')) {\n if (!this.hasAttribute('tabindex')) this.tabIndex = 0;\n this.setAttribute('aria-expanded', String(this.expanded));\n this.listen(this, 'click', (e: MouseEvent) => {\n const t = e.target as Element;\n if (t.closest?.('[data-close]')) {\n e.stopPropagation();\n this.collapse();\n } else if (!this.expanded && !interactive(t, this)) this.expand();\n });\n this.listen(this, 'keydown', (e: KeyboardEvent) => {\n if (e.key === 'Escape' && this.expanded) this.collapse();\n else if ((e.key === 'Enter' || e.key === ' ') && e.target === this && !this.expanded) {\n e.preventDefault();\n this.expand();\n }\n });\n }\n if (!this.effects.some((e) => TRACKING.has(e)) || this.reduced) return;\n let rect: DOMRect | null = null;\n let px = 0.5;\n let py = 0.5;\n const apply = () => {\n this._frame = 0;\n const nx = clamp(px * 2 - 1, -1, 1);\n const ny = clamp(py * 2 - 1, -1, 1);\n this.style.setProperty('--usa-card-x', `${(px * 100).toFixed(1)}%`);\n this.style.setProperty('--usa-card-y', `${(py * 100).toFixed(1)}%`);\n this.style.setProperty('--usa-card-nx', nx.toFixed(3));\n this.style.setProperty('--usa-card-ny', ny.toFixed(3));\n if (this.has('parallax-layers')) {\n const depth = this.num('depth', 16);\n this.querySelectorAll<HTMLElement>('[data-depth]').forEach((l) => {\n const d = Number(l.dataset.depth) || 0.5;\n l.style.transform = `translate3d(${(nx * depth * d).toFixed(1)}px, ${(ny * depth * d).toFixed(1)}px, 0)`;\n });\n }\n };\n this.listen(this, 'pointerenter', () => {\n rect = this.getBoundingClientRect();\n this.setAttribute('data-hover', '');\n });\n this.listen(this, 'pointermove', (e: PointerEvent) => {\n if (this.expanded) return;\n rect = rect || this.getBoundingClientRect();\n px = (e.clientX - rect.left) / (rect.width || 1);\n py = (e.clientY - rect.top) / (rect.height || 1);\n if (!this._frame) this._frame = raf(apply);\n });\n this.listen(this, 'pointerleave', () => {\n rect = null;\n px = py = 0.5;\n this.removeAttribute('data-hover');\n if (!this._frame) this._frame = raf(apply);\n });\n }\n\n unmount(): void {\n caf(this._frame);\n this._frame = 0;\n if (this.expanded) this.finishCollapse();\n }\n\n private setBackHidden(): void {\n const front = this.querySelector<HTMLElement>(':scope > [data-front]');\n const back = this.querySelector<HTMLElement>(':scope > [data-back]');\n front?.setAttribute('aria-hidden', String(this.flipped));\n back?.setAttribute('aria-hidden', String(!this.flipped));\n }\n\n flip(force?: boolean): void {\n const next = force === undefined ? !this.flipped : force;\n if (next === this.flipped) return;\n this.flipped = next;\n if (this.hasAttribute('aria-pressed')) this.setAttribute('aria-pressed', String(next));\n this.setBackHidden();\n this.emit('flip', { flipped: next });\n }\n\n async expand(): Promise<void> {\n if (this.expanded || this._busy) return;\n this._busy = true;\n const first = this.getBoundingClientRect();\n const spacer = document.createElement('div');\n spacer.className = 'usa-card-spacer';\n spacer.style.cssText = `width:${first.width}px;height:${first.height}px`;\n spacer.setAttribute('aria-hidden', 'true');\n this.before(spacer);\n this._spacer = spacer;\n const backdrop = document.createElement('div');\n backdrop.className = 'usa-card-backdrop';\n backdrop.addEventListener('click', () => this.collapse());\n this.before(backdrop);\n this._backdrop = backdrop;\n this.setFlag('expanded', true);\n this.setAttribute('aria-expanded', 'true');\n this.emit('expand');\n const last = this.getBoundingClientRect();\n await this.flipFrom(first, last);\n this.motion(backdrop, [{ opacity: 0 }, { opacity: 1 }], { duration: 250, easing: 'ease-out' });\n this.focus({ preventScroll: true });\n this._busy = false;\n }\n\n async collapse(): Promise<void> {\n if (!this.expanded || this._busy) return;\n this._busy = true;\n const first = this.getBoundingClientRect();\n const b = this._backdrop;\n if (b) this.motion(b, [{ opacity: 1 }, { opacity: 0 }], { duration: 200, easing: 'ease-in', fill: 'forwards' });\n this.finishCollapse();\n this.emit('collapse');\n const last = this.getBoundingClientRect();\n await this.flipFrom(first, last);\n this._busy = false;\n }\n\n private finishCollapse(): void {\n this.setFlag('expanded', false);\n this.setAttribute('aria-expanded', 'false');\n this._spacer?.remove();\n this._backdrop?.remove();\n this._spacer = this._backdrop = null;\n }\n\n private async flipFrom(first: DOMRect, last: DOMRect): Promise<void> {\n if (this.reduced) {\n const a = this.motion(this, [{ opacity: 0.4 }, { opacity: 1 }], { duration: 200 });\n await a?.finished.catch(() => undefined);\n return;\n }\n const sx = first.width / (last.width || 1);\n const sy = first.height / (last.height || 1);\n const dx = first.left - last.left;\n const dy = first.top - last.top;\n const { easing, duration } = springEasing('stiff');\n const a = this.motion(\n this,\n [{ transformOrigin: '0 0', transform: `translate(${dx}px, ${dy}px) scale(${sx}, ${sy})` }, { transformOrigin: '0 0', transform: 'none' }],\n { duration: Math.min(duration, 900), easing: easing || EASE_OUT }\n );\n await a?.finished.catch(() => undefined);\n }\n },\n { id: 'card', text: css }\n );\n}\n\nfunction deco(cls: string): HTMLSpanElement {\n const s = document.createElement('span');\n s.className = cls;\n s.setAttribute('aria-hidden', 'true');\n return s;\n}\n\n/** Clicks on links, buttons and form fields inside the card keep their own behaviour. */\nfunction interactive(t: EventTarget | null, host: Element): boolean {\n const el = (t as Element)?.closest?.('a, button, input, select, textarea, label, [contenteditable]');\n return !!el && el !== host && host.contains(el);\n}\n","import { defineElement, type UsaElement } from '../base';\nimport { createSpring, type SpringValue } from '../physics/spring';\nimport css from './card-stack.css?raw';\n\n/**\n * `<usa-card-stack>` — a deck of cards (its element children). The top card\n * can be swiped away left or right (pointer, touch or arrow keys); the rest\n * fan out behind it and move up with a spring.\n *\n * Attributes: `threshold` (px to dismiss, 90), `visible` (cards fanned\n * behind, 3), `offset` (px between cards, 10), `loop` (swiped cards go back\n * to the bottom), `disabled`. Methods: `swipe(direction)`, `top`. Events:\n * `usa:swipe` (`{ direction: 'left' | 'right', card }`), `usa:empty`.\n * Reduced motion: cards are removed instantly, no rotation.\n */\nexport interface UsaCardStackElement extends UsaElement {\n readonly top: HTMLElement | null;\n swipe(direction: 'left' | 'right'): Promise<void>;\n}\n\nexport function defineCardStack(tag = 'usa-card-stack'): CustomElementConstructor | undefined {\n return defineElement(\n tag,\n (Base) =>\n class UsaCardStack extends Base {\n static get observedAttributes(): string[] {\n return ['visible', 'offset', 'disabled'];\n }\n\n private _x!: SpringValue;\n private _drag: { id: number; x0: number; t0: number } | null = null;\n private _busy = false;\n\n get top(): HTMLElement | null {\n return this.cards()[0] || null;\n }\n\n private cards(): HTMLElement[] {\n return Array.from(this.children).filter((c) => !(c as HTMLElement).hasAttribute('data-gone')) as HTMLElement[];\n }\n\n private layout(dragX = 0): void {\n const visible = this.num('visible', 3);\n const off = this.num('offset', 10);\n const reduced = this.reduced;\n this.cards().forEach((c, i) => {\n c.style.zIndex = String(100 - i);\n c.toggleAttribute('data-top', i === 0);\n c.setAttribute('aria-hidden', String(i !== 0));\n if (i === 0) {\n const rot = reduced ? 0 : dragX / 18;\n c.style.transform = `translate3d(${dragX}px, 0, 0) rotate(${rot.toFixed(2)}deg)`;\n c.style.opacity = '1';\n } else {\n const k = Math.min(i, visible);\n const pull = Math.min(1, Math.abs(dragX) / this.num('threshold', 90));\n const kk = Math.max(0, k - pull);\n c.style.transform = `translate3d(0, ${(kk * off).toFixed(1)}px, 0) scale(${(1 - kk * 0.05).toFixed(3)})`;\n c.style.opacity = i > visible ? '0' : '1';\n }\n });\n }\n\n mount(): void {\n if (!this.hasAttribute('tabindex')) this.tabIndex = 0;\n if (!this.hasAttribute('role')) this.setAttribute('role', 'group');\n this.setAttribute('aria-roledescription', 'card stack');\n this._x = createSpring({ spring: 'wobbly', onUpdate: (v) => this.layout(v) });\n this.layout();\n this.listen(this, 'pointerdown', (e: PointerEvent) => {\n if (this.flag('disabled') || this._busy || !this.top || !this.top.contains(e.target as Node)) return;\n this._x.stop();\n this._drag = { id: e.pointerId, x0: e.clientX - this._x.value, t0: e.timeStamp };\n try {\n this.setPointerCapture?.(e.pointerId);\n } catch {\n /* synthetic */\n }\n this.setAttribute('data-dragging', '');\n });\n this.listen(this, 'pointermove', (e: PointerEvent) => {\n if (!this._drag || e.pointerId !== this._drag.id) return;\n this._x.jump(e.clientX - this._drag.x0);\n });\n const up = (e: PointerEvent) => {\n if (!this._drag || e.pointerId !== this._drag.id) return;\n this._drag = null;\n this.removeAttribute('data-dragging');\n const x = this._x.value;\n if (Math.abs(x) >= this.num('threshold', 90)) this.swipe(x > 0 ? 'right' : 'left');\n else this._x.set(0);\n };\n this.listen(this, 'pointerup', up);\n this.listen(this, 'pointercancel', up);\n this.listen(this, 'keydown', (e: KeyboardEvent) => {\n if (e.key === 'ArrowLeft' || e.key === 'ArrowRight') {\n e.preventDefault();\n this.swipe(e.key === 'ArrowLeft' ? 'left' : 'right');\n }\n });\n const mo = typeof MutationObserver !== 'undefined' ? new MutationObserver(() => this.layout(this._x.value)) : null;\n mo?.observe(this, { childList: true });\n this.onCleanup(() => mo?.disconnect());\n }\n\n unmount(): void {\n this._x?.stop();\n }\n\n async swipe(direction: 'left' | 'right'): Promise<void> {\n const card = this.top;\n if (!card || this._busy || this.flag('disabled')) return;\n this._busy = true;\n this._x.stop();\n const from = this._x.value;\n const to = (direction === 'left' ? -1 : 1) * Math.max(320, (this.getBoundingClientRect().width || 300) * 1.4);\n card.setAttribute('data-gone', '');\n this._x.jump(0);\n this.layout(0);\n const a = this.reduced\n ? null\n : this.motion(card, [{ transform: `translate3d(${from}px,0,0) rotate(${from / 18}deg)`, opacity: 1 }, { transform: `translate3d(${to}px,0,0) rotate(${to / 14}deg)`, opacity: 0 }], {\n duration: 380,\n easing: 'cubic-bezier(0.3, 0.7, 0.4, 1)',\n fill: 'forwards',\n });\n await a?.finished.catch(() => undefined);\n a?.cancel();\n card.removeAttribute('data-gone');\n if (this.flag('loop')) this.append(card);\n else card.remove();\n this.layout(0);\n this._busy = false;\n this.emit('swipe', { direction, card });\n if (!this.top) this.emit('empty');\n }\n },\n { id: 'card-stack', text: css }\n );\n}\n","import { defineElement, raf, caf, clamp, type UsaElement } from '../base';\nimport css from './sticky-stack.css?raw';\n\n/**\n * `<usa-sticky-stack>` — cards (element children) stick to the top while\n * scrolling and the ones underneath scale down and dim as the next card\n * slides over them, like a deck building up.\n *\n * Attributes: `top` (px from the viewport top, 80), `gap` (px each card\n * peeks below the previous, 16), `scale` (how much a covered card shrinks,\n * 0.06). Reduced motion: cards still stack (sticky) but do not scale.\n */\nexport interface UsaStickyStackElement extends UsaElement {\n update(): void;\n}\n\nexport function defineStickyStack(tag = 'usa-sticky-stack'): CustomElementConstructor | undefined {\n return defineElement(\n tag,\n (Base) =>\n class UsaStickyStack extends Base {\n static get observedAttributes(): string[] {\n return ['top', 'gap', 'scale'];\n }\n\n private _frame = 0;\n\n mount(): void {\n const top = this.num('top', 80);\n const gap = this.num('gap', 16);\n const cards = Array.from(this.children) as HTMLElement[];\n cards.forEach((c, i) => {\n c.style.top = `${top + i * gap}px`;\n c.style.zIndex = String(i + 1);\n });\n if (this.reduced) return;\n const schedule = () => {\n if (!this._frame) this._frame = raf(() => this.update());\n };\n let active = false;\n this.inView((v) => {\n if (v && !active) {\n active = true;\n window.addEventListener('scroll', schedule, { passive: true });\n window.addEventListener('resize', schedule, { passive: true });\n schedule();\n } else if (!v && active) {\n active = false;\n window.removeEventListener('scroll', schedule);\n window.removeEventListener('resize', schedule);\n }\n });\n this.onCleanup(() => {\n window.removeEventListener('scroll', schedule);\n window.removeEventListener('resize', schedule);\n });\n }\n\n unmount(): void {\n caf(this._frame);\n this._frame = 0;\n }\n\n update(): void {\n this._frame = 0;\n const cards = Array.from(this.children) as HTMLElement[];\n const rects = cards.map((c) => c.getBoundingClientRect());\n const shrink = this.num('scale', 0.06);\n cards.forEach((c, i) => {\n let covered = 0;\n for (let j = i + 1; j < cards.length; j++) {\n const h = rects[i].height || 1;\n covered += clamp((rects[i].bottom - rects[j].top) / h, 0, 1);\n }\n const s = 1 - Math.min(3, covered) * shrink;\n c.style.transform = covered > 0.001 ? `scale(${s.toFixed(4)})` : '';\n c.style.filter = covered > 0.001 ? `brightness(${(1 - Math.min(0.35, covered * 0.12)).toFixed(3)})` : '';\n });\n }\n },\n { id: 'sticky-stack', text: css }\n );\n}\n","import { defineElement, type UsaElement } from '../base';\nimport { createSpring, type SpringValue } from '../physics/spring';\nimport css from './carousel-3d.css?raw';\n\n/**\n * `<usa-carousel-3d>` — its element children on a 3D ring. Rotate with the\n * arrow keys, a drag/swipe, the wheel (shift) or `next()` / `prev()`; the\n * front item is `aria-current`. Spring-driven rotation.\n *\n * Attributes: `radius` (px, auto from item width), `autoplay` (ms between\n * steps, pauses on hover/focus), `perspective` (px, 1200), `index`.\n * Events: `usa:change` (`{ index }`). Reduced motion: a flat, instant\n * switch (only the current item is shown, others dimmed).\n */\nexport interface UsaCarousel3dElement extends UsaElement {\n index: number;\n next(): void;\n prev(): void;\n goTo(i: number): void;\n}\n\nexport function defineCarousel3d(tag = 'usa-carousel-3d'): CustomElementConstructor | undefined {\n return defineElement(\n tag,\n (Base) =>\n class UsaCarousel3d extends Base {\n static get observedAttributes(): string[] {\n return ['radius', 'perspective', 'autoplay'];\n }\n\n private _angle!: SpringValue;\n private _i = 0;\n\n get index(): number {\n return this._i;\n }\n set index(v: number) {\n this.goTo(v);\n }\n\n private items(): HTMLElement[] {\n return Array.from(this.children) as HTMLElement[];\n }\n\n private render(angle: number): void {\n const items = this.items();\n const n = items.length || 1;\n const step = 360 / n;\n const w = items[0]?.offsetWidth || 200;\n const r = this.num('radius', Math.round(w / 2 / Math.tan(Math.PI / n)) + 24);\n const reduced = this.reduced;\n items.forEach((it, i) => {\n const norm = ((((i * step - angle) % 360) + 540) % 360) - 180;\n it.style.transform = reduced ? '' : `rotateY(${norm.toFixed(2)}deg) translateZ(${r}px)`;\n it.style.opacity = reduced ? (i === this._i ? '1' : '0') : String(Math.max(0.25, 1 - Math.abs(norm) / 200));\n });\n }\n\n mount(): void {\n this.style.setProperty('--usa-c3d-perspective', `${this.num('perspective', 1200)}px`);\n if (!this.hasAttribute('tabindex')) this.tabIndex = 0;\n this.setAttribute('role', 'region');\n this.setAttribute('aria-roledescription', 'carousel');\n this._i = Math.max(0, Math.min(this.items().length - 1, this.num('index', 0)));\n const step = () => 360 / (this.items().length || 1);\n this._angle = createSpring({ value: this._i * step(), spring: 'gentle', onUpdate: (v) => this.render(v) });\n this.render(this._angle.value);\n this.mark();\n this.listen(this, 'keydown', (e: KeyboardEvent) => {\n if (e.key === 'ArrowRight') this.next();\n else if (e.key === 'ArrowLeft') this.prev();\n else return;\n e.preventDefault();\n });\n let x0: number | null = null;\n this.listen(this, 'pointerdown', (e: PointerEvent) => (x0 = e.clientX));\n this.listen(this, 'pointerup', (e: PointerEvent) => {\n if (x0 === null) return;\n const dx = e.clientX - x0;\n x0 = null;\n if (Math.abs(dx) > 40) dx < 0 ? this.next() : this.prev();\n });\n this.listen(this, 'click', (e: MouseEvent) => {\n const it = this.items().find((c) => c.contains(e.target as Node));\n if (it) {\n const i = this.items().indexOf(it);\n if (i !== this._i) this.goTo(i);\n }\n });\n const every = this.num('autoplay', 0);\n if (every > 0 && !this.reduced) {\n let paused = false;\n const pause = () => (paused = true);\n const resume = () => (paused = false);\n this.listen(this, 'pointerenter', pause);\n this.listen(this, 'pointerleave', resume);\n this.listen(this, 'focusin', pause);\n this.listen(this, 'focusout', resume);\n const t = setInterval(() => !paused && !document.hidden && this.next(), every);\n this.onCleanup(() => clearInterval(t));\n }\n }\n\n unmount(): void {\n this._angle?.stop();\n }\n\n private mark(): void {\n this.items().forEach((it, i) => {\n if (i === this._i) it.setAttribute('aria-current', 'true');\n else it.removeAttribute('aria-current');\n });\n }\n\n goTo(i: number): void {\n const n = this.items().length;\n if (!n || !this._angle) return;\n const step = 360 / n;\n // shortest rotation from the current target\n const cur = this._angle.target;\n const curIdx = Math.round(cur / step);\n let delta = (((i - curIdx) % n) + n) % n;\n if (delta > n / 2) delta -= n;\n this._i = ((i % n) + n) % n;\n this._angle.set((curIdx + delta) * step);\n if (this.reduced) this.render(this._angle.value);\n this.mark();\n this.emit('change', { index: this._i });\n }\n\n next(): void {\n this.goTo(this._i + 1);\n }\n\n prev(): void {\n this.goTo(this._i - 1);\n }\n },\n { id: 'carousel-3d', text: css }\n );\n}\n","/**\n * use-scroll-animate/components/cards — card effects (v2.4).\n * `<usa-card effect=\"flip | holo | glass | border-glow | conic-border | lift |\n * spotlight | sheen | parallax-layers | expand\">` (combinable),\n * `<usa-card-stack>` (swipeable deck), `<usa-sticky-stack>` (stacking on\n * scroll) and `<usa-carousel-3d>`.\n */\nimport { defineCard, type UsaCardElement } from './card';\nimport { defineCardStack, type UsaCardStackElement } from './card-stack';\nimport { defineStickyStack, type UsaStickyStackElement } from './sticky-stack';\nimport { defineCarousel3d, type UsaCarousel3dElement } from './carousel-3d';\n\nexport { defineCard, defineCardStack, defineStickyStack, defineCarousel3d };\nexport { CARD_EFFECTS } from './card';\nexport type { CardEffect } from './card';\nexport type { UsaCardElement, UsaCardStackElement, UsaStickyStackElement, UsaCarousel3dElement };\nexport { configureComponents, prefersReducedMotion } from '../base';\nexport type { ComponentsConfig, UsaElement } from '../base';\n\n/** Register every component of this category under its default tag. */\nexport function defineCardComponents(): void {\n defineCard();\n defineCardStack();\n defineStickyStack();\n defineCarousel3d();\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'usa-card': UsaCardElement;\n 'usa-card-stack': UsaCardStackElement;\n 'usa-sticky-stack': UsaStickyStackElement;\n 'usa-carousel-3d': UsaCarousel3dElement;\n }\n}\n","import { prefersReducedMotion, applyFrame } from '../base';\n\n/**\n * Click-effect helpers (v2.5): `burst()`, `confetti()`, `shake()`, `haptic()`.\n * Particles live in one fixed, pointer-transparent layer and are removed when\n * their animation ends. Under reduced motion particles are skipped and\n * `shake()` only flashes an outline.\n */\n\nlet layer: HTMLElement | null = null;\nfunction fxLayer(): HTMLElement {\n if (layer && layer.isConnected) return layer;\n layer = document.createElement('div');\n layer.className = 'usa-fx-layer';\n layer.setAttribute('aria-hidden', 'true');\n layer.style.cssText = 'position:fixed;inset:0;pointer-events:none;z-index:2147483000;overflow:hidden;contain:strict';\n document.body.appendChild(layer);\n return layer;\n}\n\nexport interface BurstOptions {\n /** Number of particles (default 12). */\n count?: number;\n /** Colours to pick from (default: accent palette). */\n colors?: string[];\n /** Travel distance in px (default 48). */\n distance?: number;\n /** Particle size in px (default 6). */\n size?: number;\n /** `circle` (default), `square`, `star`, `heart` or any text / emoji. */\n shape?: 'circle' | 'square' | 'star' | 'heart' | string;\n /** Duration in ms (default 600). */\n duration?: number;\n}\n\nconst PALETTE = ['#7c5cff', '#22d3ee', '#f472b6', '#facc15', '#34d399', '#fb923c'];\nconst GLYPH: Record<string, string> = { star: '★', heart: '♥' };\n\nfunction particle(x: number, y: number, size: number, color: string, shape: string): HTMLElement {\n const p = document.createElement('span');\n const glyph = GLYPH[shape] || (shape !== 'circle' && shape !== 'square' ? shape : '');\n p.style.cssText = `position:absolute;left:${x}px;top:${y}px;width:${size}px;height:${size}px;margin:${-size / 2}px 0 0 ${-size / 2}px;will-change:transform,opacity;` +\n (glyph ? `font-size:${size * 2}px;line-height:${size}px;text-align:center;color:${color}` : `background:${color};border-radius:${shape === 'square' ? '2px' : '50%'}`);\n if (glyph) p.textContent = glyph;\n fxLayer().appendChild(p);\n return p;\n}\n\nconst done = (a: Animation | null, el: Element) => {\n if (a) a.onfinish = () => el.remove();\n else el.remove();\n};\n\n/** Particles radiating from client point (x, y). Returns the number spawned. */\nexport function burst(x: number, y: number, options: BurstOptions = {}): number {\n if (typeof document === 'undefined' || prefersReducedMotion()) return 0;\n const { count = 12, colors = PALETTE, distance = 48, size = 6, shape = 'circle', duration = 600 } = options;\n for (let i = 0; i < count; i++) {\n const angle = (i / count) * Math.PI * 2 + Math.random() * 0.4;\n const d = distance * (0.7 + Math.random() * 0.5);\n const p = particle(x, y, size, colors[i % colors.length], shape);\n const a = typeof p.animate === 'function'\n ? p.animate(\n [\n { transform: 'translate(0,0) scale(1)', opacity: 1 },\n { transform: `translate(${Math.cos(angle) * d}px, ${Math.sin(angle) * d}px) scale(0.2)`, opacity: 0 },\n ],\n { duration: duration * (0.8 + Math.random() * 0.4), easing: 'cubic-bezier(0.22, 1, 0.36, 1)', fill: 'forwards' }\n )\n : null;\n done(a, p);\n }\n return count;\n}\n\nexport interface ConfettiOptions {\n /** Origin in client px (default: centre-bottom third of the viewport). */\n x?: number;\n y?: number;\n /** Pieces (default 80). */\n count?: number;\n /** Spread angle in degrees (default 70). */\n spread?: number;\n /** Launch speed multiplier (default 1). */\n velocity?: number;\n colors?: string[];\n /** Duration in ms (default 1600). */\n duration?: number;\n}\n\n/** A confetti cannon (paper pieces with gravity, drift and spin). */\nexport function confetti(options: ConfettiOptions = {}): number {\n if (typeof document === 'undefined' || prefersReducedMotion()) return 0;\n const W = window.innerWidth || 800;\n const H = window.innerHeight || 600;\n const { x = W / 2, y = H * 0.66, count = 80, spread = 70, velocity = 1, colors = PALETTE, duration = 1600 } = options;\n for (let i = 0; i < count; i++) {\n const angle = ((-90 + (Math.random() - 0.5) * spread) * Math.PI) / 180;\n const speed = (260 + Math.random() * 320) * velocity;\n const vx = Math.cos(angle) * speed;\n const vy = Math.sin(angle) * speed;\n const p = particle(x, y, 6 + Math.random() * 5, colors[i % colors.length], Math.random() > 0.5 ? 'square' : 'circle');\n p.style.height = `${4 + Math.random() * 3}px`;\n const frames: Keyframe[] = [];\n const steps = 8;\n const T = duration / 1000;\n const spin = (Math.random() - 0.5) * 1440;\n for (let s = 0; s <= steps; s++) {\n const t = (s / steps) * T;\n const g = 900;\n frames.push({\n transform: `translate(${(vx * t * 0.8).toFixed(1)}px, ${(vy * t + 0.5 * g * t * t).toFixed(1)}px) rotate(${((spin * s) / steps).toFixed(0)}deg) rotateX(${s * 120}deg)`,\n opacity: s === steps ? 0 : 1,\n });\n }\n const a = typeof p.animate === 'function' ? p.animate(frames, { duration: duration * (0.85 + Math.random() * 0.3), easing: 'linear', fill: 'forwards' }) : null;\n done(a, p);\n }\n return count;\n}\n\n/** Horizontal error shake (`intensity` px, default 8). Reduced motion: a red outline flash. */\nexport function shake(el: Element, intensity = 8, duration = 480): Animation | null {\n const t = el as HTMLElement;\n if (typeof t.animate !== 'function') return null;\n if (prefersReducedMotion()) return t.animate([{ outline: '2px solid #e5484d' }, { outline: '2px solid transparent' }], { duration: 600 });\n const k = intensity;\n return t.animate(\n [0, -k, k, -k * 0.75, k * 0.75, -k * 0.4, k * 0.4, 0].map((v) => ({ transform: `translateX(${v}px)` })),\n { duration, easing: 'ease-in-out' }\n );\n}\n\n/** `navigator.vibrate()` where supported (Android Chrome, some WebViews). Returns whether it ran. */\nexport function haptic(pattern: number | number[] = 10): boolean {\n try {\n return typeof navigator !== 'undefined' && typeof navigator.vibrate === 'function' ? navigator.vibrate(pattern) : false;\n } catch {\n return false;\n }\n}\n\nexport { applyFrame };\n","import { defineElement, EASE_OUT, type UsaElement } from '../base';\nimport { springEasing } from '../physics/spring';\nimport { burst, confetti, shake, haptic } from './fx';\nimport css from './click.css?raw';\n\nexport const CLICK_EFFECTS = ['ripple', 'burst', 'confetti', 'squish', 'press-spring', 'shake'] as const;\nexport type ClickEffect = (typeof CLICK_EFFECTS)[number];\n\n/**\n * `<usa-click>` — click / tap effects on whatever it wraps (combinable:\n * `effect=\"press-spring burst\"`).\n *\n * - `ripple` — an ink wave from the pointer (enhanced: `color`, soft edge);\n * - `burst` — particles radiating from the pointer (`shape`: circle, square, star, heart, emoji);\n * - `confetti` — a confetti cannon from the click point;\n * - `squish` — squash on press, stretch on release (spring);\n * - `press-spring` — dips while pressed, springs back with overshoot;\n * - `shake` — horizontal error shake; plays on `invalid` events from a form\n * inside, on `shake()`, or on click when `trigger=\"click\"`.\n *\n * Attributes: `effect`, `color`, `shape`, `count`, `haptic` (vibrate ms,\n * where supported), `disabled`. Keyboard (Space/Enter) triggers the effects\n * from the centre. Reduced motion: no particles or movement; press dims.\n */\nexport interface UsaClickElement extends UsaElement {\n readonly effects: string[];\n play(x?: number, y?: number): void;\n shake(): void;\n}\n\nexport function defineClick(tag = 'usa-click'): CustomElementConstructor | undefined {\n return defineElement(\n tag,\n (Base) =>\n class UsaClick extends Base {\n static get observedAttributes(): string[] {\n return ['effect', 'disabled'];\n }\n\n private _press: Animation | null = null;\n\n get effects(): string[] {\n return this.str('effect', 'ripple').split(/[\\s,]+/).filter(Boolean);\n }\n\n mount(): void {\n this.listen(this, 'pointerdown', (e: PointerEvent) => {\n if (this.flag('disabled') || (e.pointerType === 'mouse' && e.button !== 0)) return;\n this.down();\n if (this.effects.includes('ripple')) this.ripple(e.clientX, e.clientY);\n });\n const up = () => this.up();\n this.listen(this, 'pointerup', up);\n this.listen(this, 'pointerleave', up);\n this.listen(this, 'pointercancel', up);\n this.listen(this, 'click', (e: MouseEvent) => {\n if (this.flag('disabled')) return;\n const kb = e.detail === 0;\n const r = this.getBoundingClientRect();\n const x = kb ? r.left + r.width / 2 : e.clientX;\n const y = kb ? r.top + r.height / 2 : e.clientY;\n if (kb && this.effects.includes('ripple')) this.ripple(x, y);\n this.play(x, y);\n if (this.effects.includes('shake') && this.str('trigger') === 'click') this.shake();\n });\n this.listen(this, 'keydown', (e: KeyboardEvent) => {\n if ((e.key === 'Enter' || e.key === ' ') && !e.repeat) this.down();\n });\n this.listen(this, 'keyup', up);\n if (this.effects.includes('shake')) this.listen(this, 'invalid', () => this.shake(), { capture: true });\n }\n\n /** Particles + haptics at client (x, y) (default: centre). */\n play(x?: number, y?: number): void {\n if (x === undefined || y === undefined) {\n const r = this.getBoundingClientRect();\n x = r.left + r.width / 2;\n y = r.top + r.height / 2;\n }\n const fx = this.effects;\n const colors = this.str('color') ? this.str('color').split(',') : undefined;\n if (fx.includes('burst')) burst(x, y, { count: this.num('count', 12), shape: this.str('shape', 'circle'), colors });\n if (fx.includes('confetti')) confetti({ x, y, count: this.num('count', 60), colors, spread: 90, velocity: 0.8 });\n if (this.hasAttribute('haptic')) haptic(this.num('haptic', 10));\n this.emit('click-effect', { x, y, effects: fx });\n }\n\n shake(): void {\n shake(this);\n if (this.hasAttribute('haptic')) haptic([30, 40, 30]);\n }\n\n private ripple(x: number, y: number): void {\n if (this.reduced) return;\n const r = this.getBoundingClientRect();\n const cx = x - r.left;\n const cy = y - r.top;\n const radius = Math.hypot(Math.max(cx, r.width - cx), Math.max(cy, r.height - cy));\n const wave = document.createElement('span');\n wave.className = 'usa-click-wave';\n wave.setAttribute('aria-hidden', 'true');\n wave.style.cssText = `width:${radius * 2}px;height:${radius * 2}px;left:${cx - radius}px;top:${cy - radius}px;--usa-wave:${this.str('color', 'currentColor').split(',')[0]}`;\n this.append(wave);\n const a = this.motion(wave, [{ transform: 'scale(0)', opacity: 0.35 }, { transform: 'scale(1)', opacity: 0.25, offset: 0.6 }, { transform: 'scale(1.05)', opacity: 0 }], {\n duration: 650,\n easing: EASE_OUT,\n fill: 'forwards',\n });\n if (a) a.onfinish = () => wave.remove();\n else wave.remove();\n }\n\n private down(): void {\n if (this.hasAttribute('data-pressed')) return;\n const fx = this.effects;\n if (!fx.includes('squish') && !fx.includes('press-spring')) return;\n this.setAttribute('data-pressed', '');\n this._press?.cancel();\n const to = this.reduced ? { opacity: 0.75 } : fx.includes('squish') ? { transform: 'scale(1.08, 0.86)' } : { transform: 'scale(0.94)' };\n const from: Keyframe = this.reduced ? { opacity: 1 } : { transform: 'none' };\n this._press = this.motion(this, [from, to], {\n duration: 110,\n easing: 'ease-out',\n fill: 'forwards',\n });\n }\n\n private up(): void {\n if (!this.hasAttribute('data-pressed')) return;\n this.removeAttribute('data-pressed');\n const fx = this.effects;\n this._press?.cancel();\n if (this.reduced) {\n this._press = this.motion(this, [{ opacity: 0.75 }, { opacity: 1 }], { duration: 150 });\n return;\n }\n const from = fx.includes('squish') ? 'scale(1.08, 0.86)' : 'scale(0.94)';\n const frames: Keyframe[] = fx.includes('squish')\n ? [{ transform: from }, { transform: 'scale(0.92, 1.1)', offset: 0.3 }, { transform: 'scale(1.03, 0.97)', offset: 0.6 }, { transform: 'none' }]\n : [{ transform: from }, { transform: 'none' }];\n this._press = this.motion(this, frames, fx.includes('squish') ? { duration: 520, easing: 'ease-out' } : springEasing('bouncy'));\n }\n },\n { id: 'click', text: css }\n );\n}\n","import { defineElement, clamp, type UsaElement } from '../base';\nimport { springEasing } from '../physics/spring';\nimport { shake, haptic } from './fx';\nimport css from './button.css?raw';\n\nexport const BUTTON_DEFORMS = ['squash', 'wobble', 'gooey', 'dent'] as const;\nexport type ButtonDeform = (typeof BUTTON_DEFORMS)[number];\nexport type ButtonShape = 'pill' | 'circle' | 'icon';\nexport type ButtonState = 'idle' | 'loading' | 'success' | 'error';\n\nlet gooInjected = false;\nfunction injectGoo(): void {\n if (gooInjected || typeof document === 'undefined') return;\n gooInjected = true;\n const svg = document.createElementNS('http://www.w3.org/2000/svg', 'svg');\n svg.setAttribute('aria-hidden', 'true');\n svg.setAttribute('width', '0');\n svg.setAttribute('height', '0');\n svg.style.position = 'absolute';\n svg.innerHTML = '<filter id=\"usa-goo\"><feGaussianBlur in=\"SourceGraphic\" stdDeviation=\"6\" result=\"b\"/><feColorMatrix in=\"b\" values=\"1 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 22 -9\" result=\"g\"/><feComposite in=\"SourceGraphic\" in2=\"g\" operator=\"atop\"/></filter>';\n document.body.appendChild(svg);\n}\n\n/**\n * `<usa-button>` — **button click deformation** (按钮点击形变) around a\n * native `<button>` (or `<a>`) child — or the element itself becomes a button.\n *\n * `deform` (combinable, e.g. `deform=\"squash wobble\"`):\n * - `squash` — squash on press, stretch-and-settle on release (spring);\n * - `wobble` — elastic border-radius wobble after a click;\n * - `gooey` — liquid blob: droplets squeeze out from the press point and\n * merge back (SVG goo filter);\n * - `dent` — the surface dents toward the pressed point (3D tilt + inner shade).\n *\n * `shape=\"pill | circle | icon\"` morphs the outline with a spring (label =\n * `[data-label]`, icon = `[data-icon]` children); `morphTo(shape)`.\n *\n * `morph=\"submit\"` — click → `loading` (shrinks to a circle with a spinner,\n * `aria-busy`), then `success` (check) or `error` (shake + cross), and back\n * to `idle` after `reset` ms (1800). Drive it with `state=\"…\"` / `.state`, or\n * call `event.detail.done(ok)` from a `usa:submit` listener.\n *\n * Attributes: `deform`, `shape`, `morph`, `state`, `reset`, `haptic`,\n * `disabled`. Events: `usa:submit`, `usa:state`. Reduced motion: no\n * deformation; shape and state changes are instant; status still announced.\n */\nexport interface UsaButtonElement extends UsaElement {\n readonly target: HTMLElement;\n shape: ButtonShape;\n state: ButtonState;\n morphTo(shape: ButtonShape): Promise<void>;\n}\n\nexport function defineButton(tag = 'usa-button'): CustomElementConstructor | undefined {\n return defineElement(\n tag,\n (Base) =>\n class UsaButton extends Base {\n static get observedAttributes(): string[] {\n return ['deform', 'state', 'shape', 'disabled'];\n }\n\n private _press: Animation | null = null;\n private _timer: ReturnType<typeof setTimeout> | undefined;\n private _status: HTMLElement | null = null;\n private _shapeBefore: ButtonShape | null = null;\n\n get target(): HTMLElement {\n return (this.querySelector(':scope > button, :scope > a, :scope > [role=\"button\"]') as HTMLElement) || this;\n }\n private deforms(): string[] {\n return this.str('deform').split(/[\\s,]+/).filter(Boolean);\n }\n get shape(): ButtonShape {\n return (this.str('shape', 'pill') as ButtonShape) || 'pill';\n }\n set shape(v: ButtonShape) {\n this.morphTo(v);\n }\n get state(): ButtonState {\n return (this.str('state', 'idle') as ButtonState) || 'idle';\n }\n set state(v: ButtonState) {\n this.setAttribute('state', v);\n }\n\n mount(): void {\n const t = this.target;\n if (t === this) {\n this.setAttribute('role', 'button');\n if (!this.hasAttribute('tabindex')) this.tabIndex = 0;\n }\n t.classList.add('usa-button-face');\n if (this.str('morph') === 'submit' && !t.querySelector('.usa-button-status')) {\n const s = document.createElement('span');\n s.className = 'usa-button-status';\n s.setAttribute('aria-hidden', 'true');\n s.innerHTML =\n '<svg class=\"usa-button-spin\" viewBox=\"0 0 24 24\"><circle cx=\"12\" cy=\"12\" r=\"9\" pathLength=\"100\"/></svg>' +\n '<svg class=\"usa-button-ok\" viewBox=\"0 0 24 24\"><path d=\"M5 12.5l4.2 4.2L19 7\" pathLength=\"1\"/></svg>' +\n '<svg class=\"usa-button-err\" viewBox=\"0 0 24 24\"><path d=\"M7 7l10 10M17 7L7 17\" pathLength=\"1\"/></svg>';\n t.append(s);\n const live = document.createElement('span');\n live.className = 'usa-sr';\n live.setAttribute('role', 'status');\n this.append(live);\n this._status = live;\n }\n if (this.deforms().includes('gooey')) injectGoo();\n this.applyState();\n this.listen(t, 'pointerdown', (e: PointerEvent) => {\n if (this.isOff() || (e.pointerType === 'mouse' && e.button !== 0)) return;\n this.down(e.clientX, e.clientY);\n });\n for (const ev of ['pointerup', 'pointerleave', 'pointercancel']) this.listen(t, ev, () => this.up());\n this.listen(t, 'keydown', (e: KeyboardEvent) => (e.key === 'Enter' || e.key === ' ') && !e.repeat && this.down());\n this.listen(t, 'keyup', () => this.up());\n this.listen(t, 'click', (e: MouseEvent) => {\n if (this.isOff()) {\n if (this.state === 'loading') e.preventDefault();\n return;\n }\n if (this.deforms().includes('wobble')) this.wobble();\n if (this.hasAttribute('haptic')) haptic(this.num('haptic', 10));\n if (this.str('morph') === 'submit' && this.state === 'idle') this.submit();\n });\n if (t === this)\n this.listen(this, 'keydown', (e: KeyboardEvent) => {\n if ((e.key === 'Enter' || e.key === ' ') && !e.repeat) {\n e.preventDefault();\n this.click();\n }\n });\n }\n\n unmount(): void {\n clearTimeout(this._timer);\n this._press?.cancel();\n }\n\n changed(name: string): void {\n if (name === 'state') this.applyState();\n else if (name === 'shape') this.target.setAttribute('data-shape', this.shape);\n else {\n super.changed(name);\n }\n }\n\n private isOff(): boolean {\n return this.flag('disabled') || this.state === 'loading';\n }\n\n /* ------------------------------------------------ press deformations */\n private down(x?: number, y?: number): void {\n if (this.reduced || this.hasAttribute('data-pressed')) return;\n const d = this.deforms();\n if (!d.length) return;\n this.setAttribute('data-pressed', '');\n const t = this.target;\n const r = t.getBoundingClientRect();\n const px = x === undefined ? 0.5 : clamp((x - r.left) / (r.width || 1), 0, 1);\n const py = y === undefined ? 0.5 : clamp((y - r.top) / (r.height || 1), 0, 1);\n t.style.setProperty('--usa-dent-x', `${(px * 100).toFixed(1)}%`);\n t.style.setProperty('--usa-dent-y', `${(py * 100).toFixed(1)}%`);\n const parts: string[] = [];\n if (d.includes('dent')) parts.push(`perspective(600px) rotateX(${((0.5 - py) * -14).toFixed(2)}deg) rotateY(${((px - 0.5) * 14).toFixed(2)}deg) scale(0.97)`);\n if (d.includes('squash')) parts.push('scale(1.12, 0.84)');\n if (d.includes('gooey')) {\n parts.push('scale(0.96)');\n this.goo(px, py);\n }\n if (!parts.length) return;\n this._press?.cancel();\n this._press = this.motion(t, [{ transform: 'none' }, { transform: parts.join(' ') }], { duration: 110, easing: 'ease-out', fill: 'forwards' });\n }\n\n private up(): void {\n if (!this.hasAttribute('data-pressed')) return;\n this.removeAttribute('data-pressed');\n const t = this.target;\n const a = this._press;\n const from = (a?.effect as KeyframeEffect | null)?.getKeyframes?.().slice(-1)[0]?.transform as string | undefined;\n a?.cancel();\n if (!from) return;\n this._press = this.motion(t, [{ transform: from }, { transform: 'none' }], { ...springEasing(this.deforms().includes('squash') ? 'bouncy' : 'wobbly') });\n }\n\n private wobble(): void {\n if (this.reduced) return;\n const t = this.target;\n const r = getComputedStyle(t).borderRadius || '12px';\n this.motion(\n t,\n [\n { borderRadius: r },\n { borderRadius: '42% 58% 50% 50% / 60% 45% 55% 40%', offset: 0.2 },\n { borderRadius: '58% 42% 45% 55% / 40% 60% 40% 60%', offset: 0.45 },\n { borderRadius: '48% 52% 52% 48% / 52% 48% 52% 48%', offset: 0.7 },\n { borderRadius: r },\n ],\n { duration: 700, easing: 'ease-out' }\n );\n }\n\n private goo(px: number, py: number): void {\n const t = this.target;\n const layer = document.createElement('span');\n layer.className = 'usa-button-goo';\n layer.setAttribute('aria-hidden', 'true');\n layer.style.setProperty('--usa-goo-bg', getComputedStyle(t).backgroundColor || 'currentColor');\n const drops: HTMLElement[] = [];\n for (let i = 0; i < 4; i++) {\n const d = document.createElement('i');\n d.style.left = `${(px * 100).toFixed(1)}%`;\n d.style.top = `${(py * 100).toFixed(1)}%`;\n layer.append(d);\n drops.push(d);\n }\n this.prepend(layer);\n let left = drops.length;\n drops.forEach((d, i) => {\n const ang = (i / drops.length) * Math.PI * 2 + 0.6;\n const dist = 26 + (i % 2) * 12;\n const a = this.motion(\n d,\n [\n { transform: 'translate(-50%, -50%) scale(0.4)' },\n { transform: `translate(calc(-50% + ${(Math.cos(ang) * dist).toFixed(1)}px), calc(-50% + ${(Math.sin(ang) * dist).toFixed(1)}px)) scale(1)`, offset: 0.45 },\n { transform: 'translate(-50%, -50%) scale(0.2)' },\n ],\n { duration: 700, easing: 'cubic-bezier(0.34, 1.3, 0.64, 1)', fill: 'forwards' }\n );\n const end = () => --left === 0 && layer.remove();\n if (a) a.onfinish = end;\n else end();\n });\n }\n\n /* ------------------------------------------------ shape morph */\n async morphTo(shape: ButtonShape): Promise<void> {\n const t = this.target;\n const before = t.getBoundingClientRect();\n this.setAttribute('shape', shape);\n t.setAttribute('data-shape', shape);\n if (this.reduced) return;\n const after = t.getBoundingClientRect();\n if (!before.width || !after.width || Math.abs(before.width - after.width) < 0.5) return;\n const a = this.motion(t, [{ width: `${before.width}px` }, { width: `${after.width}px` }], springEasing('stiff'));\n await a?.finished.catch(() => undefined);\n }\n\n /* ------------------------------------------------ submit morph */\n private submit(): void {\n let settled = false;\n const done = (ok = true) => {\n if (settled) return;\n settled = true;\n this.state = ok ? 'success' : 'error';\n };\n this.state = 'loading';\n this.emit('submit', { done });\n }\n\n private applyState(): void {\n if (this.str('morph') !== 'submit') return;\n const t = this.target;\n const s = this.state;\n clearTimeout(this._timer);\n t.setAttribute('data-state', s);\n if (s === 'loading') {\n if (this._shapeBefore === null) this._shapeBefore = this.shape;\n t.setAttribute('aria-busy', 'true');\n this.morphTo('circle');\n } else {\n t.removeAttribute('aria-busy');\n }\n if (s === 'error') {\n shake(t);\n if (this.hasAttribute('haptic')) haptic([30, 40, 30]);\n }\n if (s === 'success' && !this.reduced) {\n const ok = t.querySelector('.usa-button-ok');\n if (ok) this.motion(ok, [{ transform: 'scale(0.4)' }, { transform: 'scale(1)' }], springEasing('bouncy'));\n }\n if (this._status) this._status.textContent = s === 'loading' ? 'Loading…' : s === 'success' ? 'Done' : s === 'error' ? 'Failed' : '';\n if (s === 'success' || s === 'error') {\n this._timer = setTimeout(() => {\n this.state = 'idle';\n }, this.num('reset', 1800));\n }\n if (s === 'idle' && this._shapeBefore !== null) {\n const back = this._shapeBefore;\n this._shapeBefore = null;\n this.morphTo(back);\n }\n this.emit('state', { state: s });\n }\n },\n { id: 'button', text: css }\n );\n}\n","import { defineElement, type UsaElement } from '../base';\nimport { createSpring, type SpringValue } from '../physics/spring';\nimport css from './icon-morph.css?raw';\n\ntype Pt = [number, number];\ntype Quad = [Pt, Pt, Pt, Pt];\nconst C: Quad = [[12, 12], [12, 12], [12, 12], [12, 12]];\n\n/**\n * Morphable icons: every icon is three quads (four points each) on a 24×24\n * grid, so any icon can morph into any other by interpolating points.\n */\nexport const MORPH_ICONS: Record<string, [Quad, Quad, Quad]> = {\n play: [[[7, 5], [12.5, 8.25], [12.5, 15.75], [7, 19]], [[12.5, 8.25], [19, 12], [19, 12], [12.5, 15.75]], C],\n pause: [[[6, 5], [10, 5], [10, 19], [6, 19]], [[14, 5], [18, 5], [18, 19], [14, 19]], C],\n menu: [[[4, 6], [20, 6], [20, 8], [4, 8]], [[4, 11], [20, 11], [20, 13], [4, 13]], [[4, 16], [20, 16], [20, 18], [4, 18]]],\n close: [[[5.2, 6.6], [6.6, 5.2], [18.8, 17.4], [17.4, 18.8]], C, [[17.4, 5.2], [18.8, 6.6], [6.6, 18.8], [5.2, 17.4]]],\n plus: [[[11, 4], [13, 4], [13, 20], [11, 20]], [[4, 11], [20, 11], [20, 13], [4, 13]], C],\n minus: [[[4, 11], [20, 11], [20, 13], [4, 13]], [[4, 11], [20, 11], [20, 13], [4, 13]], C],\n check: [[[4.3, 12.7], [5.7, 11.3], [10.4, 16], [9, 17.4]], [[9, 17.4], [7.6, 16], [18.3, 5.3], [19.7, 6.7]], C],\n 'arrow-right': [[[4, 11], [17, 11], [17, 13], [4, 13]], [[12.6, 6.4], [14, 5], [21, 12], [19.6, 13.4]], [[19.6, 10.6], [21, 12], [14, 19], [12.6, 17.6]]],\n};\n\n/** SVG path data for an icon, or for the interpolation `t` (0–1) between two. */\nexport function morphPath(from: string, to: string = from, t = 0): string {\n const a = MORPH_ICONS[from] || MORPH_ICONS.menu;\n const b = MORPH_ICONS[to] || a;\n return a\n .map((q, i) => {\n const pts = q.map((p, j) => {\n const r = b[i][j];\n return `${(p[0] + (r[0] - p[0]) * t).toFixed(2)} ${(p[1] + (r[1] - p[1]) * t).toFixed(2)}`;\n });\n return `M${pts.join('L')}Z`;\n })\n .join('');\n}\n\n/**\n * `<usa-icon-morph>` — an icon that morphs between shapes with a spring:\n * play ↔ pause, menu ↔ close, plus ↔ minus, check, arrow-right…\n *\n * Attributes: `icons` (comma list, cycled; default `play,pause`), `index`\n * (current, 0), `size` (px, 24), `toggle` (makes it a button that cycles\n * on click / Enter / Space), `labels` (comma list of accessible names per\n * icon, e.g. `Play,Pause`), `preset` (spring, `wobbly`). Methods:\n * `next()`, `show(nameOrIndex)`. Events: `usa:change` (`{ index, icon }`).\n * Inside a `<usa-button>` or `<button>` it is decorative. Reduced motion:\n * the icon switches instantly.\n */\nexport interface UsaIconMorphElement extends UsaElement {\n index: number;\n readonly icon: string;\n next(): void;\n show(icon: string | number): void;\n}\n\nexport function defineIconMorph(tag = 'usa-icon-morph'): CustomElementConstructor | undefined {\n return defineElement(\n tag,\n (Base) =>\n class UsaIconMorph extends Base {\n static get observedAttributes(): string[] {\n return ['icons', 'size', 'toggle'];\n }\n\n private _i = 0;\n private _from = 'play';\n private _to = 'play';\n private _t!: SpringValue;\n\n private list(): string[] {\n return this.str('icons', 'play,pause').split(',').map((s) => s.trim()).filter((s) => MORPH_ICONS[s]);\n }\n get index(): number {\n return this._i;\n }\n set index(v: number) {\n this.show(v);\n }\n get icon(): string {\n return this.list()[this._i] || 'play';\n }\n\n private draw(t: number): void {\n this.querySelector('path')?.setAttribute('d', morphPath(this._from, this._to, t));\n }\n\n mount(): void {\n const size = this.num('size', 24);\n this.innerHTML = `<svg viewBox=\"0 0 24 24\" width=\"${size}\" height=\"${size}\" aria-hidden=\"true\" focusable=\"false\"><path/></svg>`;\n this._i = Math.max(0, Math.min(this.list().length - 1, this.num('index', 0)));\n this._from = this._to = this.icon;\n this._t = createSpring({ value: 1, spring: this.str('preset', 'wobbly'), onUpdate: (v) => this.draw(v) });\n this.draw(1);\n if (this.flag('toggle')) {\n this.setAttribute('role', 'button');\n if (!this.hasAttribute('tabindex')) this.tabIndex = 0;\n this.listen(this, 'click', () => this.next());\n this.listen(this, 'keydown', (e: KeyboardEvent) => {\n if ((e.key === 'Enter' || e.key === ' ') && !e.repeat) {\n e.preventDefault();\n this.next();\n }\n });\n }\n this.label();\n }\n\n unmount(): void {\n this._t?.stop();\n }\n\n private label(): void {\n const labels = this.str('labels').split(',').map((s) => s.trim());\n const l = labels[this._i];\n if (l) this.setAttribute('aria-label', l);\n if (!this.flag('toggle') && !l) this.setAttribute('aria-hidden', 'true');\n }\n\n show(icon: string | number): void {\n const list = this.list();\n const i = typeof icon === 'number' ? ((icon % list.length) + list.length) % list.length : list.indexOf(icon);\n if (i < 0 || !this._t) return;\n const name = list[i];\n // morph from wherever we are now (interruptible)\n const cur = this._t.value;\n this._from = cur >= 0.5 ? this._to : this._from;\n this._to = name;\n this._i = i;\n this._t.jump(0);\n this._t.set(1);\n this.label();\n this.emit('change', { index: i, icon: name });\n }\n\n next(): void {\n this.show(this._i + 1);\n }\n },\n { id: 'icon-morph', text: css }\n );\n}\n","import { defineElement, type UsaElement } from '../base';\nimport { springEasing } from '../physics/spring';\nimport { burst, haptic } from './fx';\nimport css from './like.css?raw';\n\nconst HEART = 'M12 21s-7.5-4.6-9.6-9.2C.9 8.4 3 4.5 6.7 4.5c2.1 0 3.6 1.2 5.3 3.2 1.7-2 3.2-3.2 5.3-3.2 3.7 0 5.8 3.9 4.3 7.3C19.5 16.4 12 21 12 21z';\n\n/**\n * `<usa-like>` — a like / favourite toggle: the heart pops with a spring and\n * bursts into particles when liked. `role=\"button\"` + `aria-pressed`.\n *\n * Attributes: `liked`, `count` (shown next to the heart, updated ±1),\n * `label` (accessible name, default \"Like\"), `color`, `size` (px, 24),\n * `haptic`, `disabled`. Events: `change`, `usa:change` (`{ liked, count }`).\n * Reduced motion: colour change only.\n */\nexport interface UsaLikeElement extends UsaElement {\n liked: boolean;\n count: number | null;\n toggle(force?: boolean): void;\n}\n\nexport function defineLike(tag = 'usa-like'): CustomElementConstructor | undefined {\n return defineElement(\n tag,\n (Base) =>\n class UsaLike extends Base {\n static get observedAttributes(): string[] {\n return ['liked', 'count', 'label', 'disabled'];\n }\n\n get liked(): boolean {\n return this.flag('liked');\n }\n set liked(v: boolean) {\n this.setFlag('liked', v);\n }\n get count(): number | null {\n return this.hasAttribute('count') ? this.num('count', 0) : null;\n }\n set count(v: number | null) {\n if (v === null) this.removeAttribute('count');\n else this.setAttribute('count', String(v));\n }\n\n mount(): void {\n if (!this.querySelector(':scope > .usa-like-heart')) {\n const size = this.num('size', 24);\n this.insertAdjacentHTML('afterbegin', `<svg class=\"usa-like-heart\" viewBox=\"0 0 24 24\" width=\"${size}\" height=\"${size}\" aria-hidden=\"true\"><path d=\"${HEART}\"/></svg><span class=\"usa-like-count\" aria-hidden=\"true\"></span>`);\n }\n if (this.str('color')) this.style.setProperty('--usa-like-color', this.str('color'));\n this.setAttribute('role', 'button');\n if (!this.hasAttribute('tabindex')) this.tabIndex = 0;\n this.sync();\n this.listen(this, 'click', () => this.toggle());\n this.listen(this, 'keydown', (e: KeyboardEvent) => {\n if ((e.key === 'Enter' || e.key === ' ') && !e.repeat) {\n e.preventDefault();\n this.toggle();\n }\n });\n }\n\n changed(): void {\n this.sync();\n }\n\n private sync(): void {\n const c = this.count;\n const label = this.str('label', 'Like');\n this.setAttribute('aria-pressed', String(this.liked));\n this.setAttribute('aria-label', c === null ? label : `${label} (${c})`);\n this.toggleAttribute('aria-disabled', this.flag('disabled'));\n const out = this.querySelector('.usa-like-count');\n if (out) out.textContent = c === null ? '' : new Intl.NumberFormat().format(c);\n }\n\n toggle(force?: boolean): void {\n if (this.flag('disabled')) return;\n const next = force === undefined ? !this.liked : force;\n if (next === this.liked) return;\n this.liked = next;\n if (this.count !== null) this.count = Math.max(0, this.count + (next ? 1 : -1));\n this.sync();\n const heart = this.querySelector('.usa-like-heart');\n if (next && heart && !this.reduced) {\n this.motion(heart, [{ transform: 'scale(0.4)' }, { transform: 'scale(1)' }], springEasing('bouncy'));\n const r = heart.getBoundingClientRect();\n burst(r.left + r.width / 2, r.top + r.height / 2, { count: 10, distance: 28, size: 5, colors: [getComputedStyle(this).getPropertyValue('--usa-like-color').trim() || '#f43f5e', '#fb923c', '#facc15'] });\n }\n if (this.hasAttribute('haptic')) haptic(this.num('haptic', 12));\n this.dispatchEvent(new Event('change', { bubbles: true }));\n this.emit('change', { liked: next, count: this.count });\n }\n },\n { id: 'like', text: css }\n );\n}\n","import { defineElement, raf, caf, now, type UsaElement } from '../base';\nimport { haptic } from './fx';\nimport css from './hold.css?raw';\n\n/**\n * `<usa-hold>` — hold-to-confirm: press and hold (pointer, Space or Enter)\n * while a progress ring fills; releasing early rewinds it. Good for\n * destructive actions.\n *\n * Attributes: `duration` (ms, 1200), `label` (accessible name), `color`,\n * `disabled`. CSS variable `--usa-hold` (0–1). Events: `usa:progress`,\n * `usa:confirm`, `usa:cancel`. Reduced motion: same timing, the ring fills\n * without the scale pulse.\n */\nexport interface UsaHoldElement extends UsaElement {\n readonly progress: number;\n cancel(): void;\n}\n\nexport function defineHold(tag = 'usa-hold'): CustomElementConstructor | undefined {\n return defineElement(\n tag,\n (Base) =>\n class UsaHold extends Base {\n static get observedAttributes(): string[] {\n return ['duration', 'disabled'];\n }\n\n private _p = 0;\n private _frame = 0;\n private _holding = false;\n\n get progress(): number {\n return this._p;\n }\n\n private set(p: number): void {\n this._p = p;\n this.style.setProperty('--usa-hold', p.toFixed(4));\n const c = this.querySelector<SVGCircleElement>('.usa-hold-ring circle:last-child');\n if (c) c.style.strokeDashoffset = String(100 - p * 100);\n }\n\n mount(): void {\n if (!this.querySelector(':scope > .usa-hold-ring')) {\n this.insertAdjacentHTML('beforeend', '<svg class=\"usa-hold-ring\" viewBox=\"0 0 36 36\" aria-hidden=\"true\"><circle cx=\"18\" cy=\"18\" r=\"15.9\" pathLength=\"100\"/><circle cx=\"18\" cy=\"18\" r=\"15.9\" pathLength=\"100\"/></svg>');\n }\n if (this.str('color')) this.style.setProperty('--usa-hold-color', this.str('color'));\n this.setAttribute('role', 'button');\n if (!this.hasAttribute('tabindex')) this.tabIndex = 0;\n if (this.str('label')) this.setAttribute('aria-label', this.str('label'));\n this.setAttribute('aria-description', 'Press and hold to confirm');\n this.set(0);\n this.listen(this, 'pointerdown', (e: PointerEvent) => (e.pointerType !== 'mouse' || e.button === 0) && this.start());\n for (const t of ['pointerup', 'pointerleave', 'pointercancel']) this.listen(this, t, () => this.stop());\n this.listen(this, 'keydown', (e: KeyboardEvent) => {\n if (e.key === 'Enter' || e.key === ' ') {\n e.preventDefault();\n if (!e.repeat) this.start();\n }\n });\n this.listen(this, 'keyup', (e: KeyboardEvent) => (e.key === 'Enter' || e.key === ' ') && this.stop());\n this.listen(this, 'contextmenu', (e: Event) => this._holding && e.preventDefault());\n }\n\n unmount(): void {\n caf(this._frame);\n this._holding = false;\n }\n\n private start(): void {\n if (this.flag('disabled') || this._holding) return;\n this._holding = true;\n this.setAttribute('data-holding', '');\n const dur = Math.max(100, this.num('duration', 1200));\n let last = now();\n const tick = () => {\n const t = now();\n const p = Math.min(1, this._p + (t - last) / dur);\n last = t;\n this.set(p);\n this.emit('progress', { progress: p });\n if (p >= 1) {\n this._holding = false;\n this.removeAttribute('data-holding');\n this.setAttribute('data-done', '');\n if (this.hasAttribute('haptic')) haptic(20);\n this.emit('confirm');\n setTimeout(() => {\n this.removeAttribute('data-done');\n this.rewind();\n }, 700);\n return;\n }\n this._frame = raf(tick);\n };\n this._frame = raf(tick);\n }\n\n private stop(): void {\n if (!this._holding) return;\n this._holding = false;\n caf(this._frame);\n this.removeAttribute('data-holding');\n if (this._p < 1) {\n this.emit('cancel', { progress: this._p });\n this.rewind();\n }\n }\n\n private rewind(): void {\n let last = now();\n const back = () => {\n if (this._holding) return;\n const t = now();\n const p = Math.max(0, this._p - (t - last) / 250);\n last = t;\n this.set(p);\n if (p > 0) this._frame = raf(back);\n };\n this._frame = raf(back);\n }\n\n cancel(): void {\n this.stop();\n }\n },\n { id: 'hold', text: css }\n );\n}\n","import { defineElement, type UsaElement } from '../base';\nimport { burst, haptic } from './fx';\nimport css from './double-tap.css?raw';\n\n/**\n * `<usa-double-tap>` — detects a double tap / double click on its content\n * (photos, posts) and pops a heart (or `icon`) at the tap point.\n *\n * Attributes: `icon` (text / emoji, default ♥), `color`, `delay` (max ms\n * between taps, 300), `haptic`, `disabled`. Events: `usa:double-tap`\n * (`{ x, y }`, element-relative). Keyboard users: press `L` while focused.\n * Reduced motion: the icon fades in and out without scaling or particles.\n */\nexport interface UsaDoubleTapElement extends UsaElement {\n pop(x?: number, y?: number): void;\n}\n\nexport function defineDoubleTap(tag = 'usa-double-tap'): CustomElementConstructor | undefined {\n return defineElement(\n tag,\n (Base) =>\n class UsaDoubleTap extends Base {\n mount(): void {\n let last = 0;\n let lx = 0;\n let ly = 0;\n this.listen(this, 'pointerup', (e: PointerEvent) => {\n if (this.flag('disabled')) return;\n const t = e.timeStamp || Date.now();\n if (t - last < this.num('delay', 300) && Math.hypot(e.clientX - lx, e.clientY - ly) < 40) {\n last = 0;\n this.pop(e.clientX, e.clientY);\n } else {\n last = t;\n lx = e.clientX;\n ly = e.clientY;\n }\n });\n this.listen(this, 'dblclick', (e: MouseEvent) => e.preventDefault());\n this.listen(this, 'keydown', (e: KeyboardEvent) => e.key.toLowerCase() === 'l' && !e.repeat && this.pop());\n }\n\n pop(x?: number, y?: number): void {\n const r = this.getBoundingClientRect();\n if (x === undefined || y === undefined) {\n x = r.left + r.width / 2;\n y = r.top + r.height / 2;\n }\n const icon = document.createElement('span');\n icon.className = 'usa-double-tap-icon';\n icon.setAttribute('aria-hidden', 'true');\n icon.textContent = this.str('icon', '♥');\n icon.style.left = `${x - r.left}px`;\n icon.style.top = `${y - r.top}px`;\n if (this.str('color')) icon.style.color = this.str('color');\n this.append(icon);\n const frames: Keyframe[] = this.reduced\n ? [{ opacity: 0 }, { opacity: 1, offset: 0.3 }, { opacity: 0 }]\n : [\n { opacity: 0, transform: 'translate(-50%, -50%) scale(0.2) rotate(-15deg)' },\n { opacity: 1, transform: 'translate(-50%, -50%) scale(1.15) rotate(5deg)', offset: 0.3 },\n { opacity: 1, transform: 'translate(-50%, -50%) scale(1) rotate(0deg)', offset: 0.6 },\n { opacity: 0, transform: 'translate(-50%, -110%) scale(0.9)' },\n ];\n const a = this.motion(icon, frames, { duration: 900, easing: 'ease-out', fill: 'forwards' });\n if (a) a.onfinish = () => icon.remove();\n else icon.remove();\n burst(x, y, { count: 8, distance: 40, size: 5, colors: [this.str('color', '#f43f5e'), '#fb923c', '#facc15'] });\n if (this.hasAttribute('haptic')) haptic(15);\n this.emit('double-tap', { x: x - r.left, y: y - r.top });\n }\n },\n { id: 'double-tap', text: css }\n );\n}\n","import { defineElement, type UsaElement } from '../base';\nimport { springEasing } from '../physics/spring';\nimport css from './checkbox.css?raw';\n\n/**\n * `<usa-checkbox>` — an animated, form-associated checkbox: the box springs\n * and the check mark draws itself. `role=\"checkbox\"` + `aria-checked`\n * (`mixed` with `indeterminate`).\n *\n * Attributes: `checked`, `indeterminate`, `disabled`, `name`, `value`\n * (`on`), `label`, `shape` (`square` default, `circle`). Events: `change`,\n * `usa:change` (`{ checked }`). Reduced motion: no spring or drawing.\n */\nexport interface UsaCheckboxElement extends UsaElement {\n checked: boolean;\n indeterminate: boolean;\n toggle(force?: boolean): void;\n}\n\nexport function defineCheckbox(tag = 'usa-checkbox'): CustomElementConstructor | undefined {\n return defineElement(\n tag,\n (Base) => {\n class UsaCheckbox extends Base {\n static formAssociated = true;\n static get observedAttributes(): string[] {\n return ['checked', 'indeterminate', 'disabled', 'label'];\n }\n\n private _internals: ElementInternals | null = null;\n\n constructor() {\n super();\n try {\n this._internals = (this as any).attachInternals?.() ?? null;\n } catch {\n this._internals = null;\n }\n }\n\n get checked(): boolean {\n return this.flag('checked');\n }\n set checked(v: boolean) {\n this.setFlag('checked', v);\n }\n get indeterminate(): boolean {\n return this.flag('indeterminate');\n }\n set indeterminate(v: boolean) {\n this.setFlag('indeterminate', v);\n }\n\n mount(): void {\n if (!this.querySelector(':scope > .usa-checkbox-box')) {\n this.insertAdjacentHTML(\n 'afterbegin',\n '<span class=\"usa-checkbox-box\" aria-hidden=\"true\"><svg viewBox=\"0 0 24 24\"><path class=\"usa-checkbox-check\" d=\"M5 12.5l4.2 4.2L19 7\" pathLength=\"1\"/><path class=\"usa-checkbox-dash\" d=\"M6 12h12\" pathLength=\"1\"/></svg></span>'\n );\n }\n this.setAttribute('role', 'checkbox');\n if (!this.hasAttribute('tabindex')) this.tabIndex = 0;\n this.sync();\n this.listen(this, 'click', () => this.toggle());\n this.listen(this, 'keydown', (e: KeyboardEvent) => {\n if (e.key === ' ' && !e.repeat) {\n e.preventDefault();\n this.toggle();\n }\n });\n }\n\n changed(): void {\n this.sync();\n }\n\n private sync(): void {\n this.setAttribute('aria-checked', this.indeterminate ? 'mixed' : String(this.checked));\n if (this.str('label')) this.setAttribute('aria-label', this.str('label'));\n this.toggleAttribute('aria-disabled', this.flag('disabled'));\n this._internals?.setFormValue?.(this.checked ? this.str('value', 'on') : null);\n }\n\n toggle(force?: boolean): void {\n if (this.flag('disabled')) return;\n const next = force === undefined ? !this.checked || this.indeterminate : force;\n this.indeterminate = false;\n this.checked = next;\n this.sync();\n const box = this.querySelector('.usa-checkbox-box');\n if (box && !this.reduced) this.motion(box, [{ transform: 'scale(0.75)' }, { transform: 'scale(1)' }], springEasing('bouncy'));\n this.dispatchEvent(new Event('change', { bubbles: true }));\n this.emit('change', { checked: next });\n }\n }\n return UsaCheckbox as unknown as CustomElementConstructor;\n },\n { id: 'checkbox', text: css }\n );\n}\n","/**\n * use-scroll-animate/components/click — click & tap effects (v2.5).\n * `<usa-click>` (ripple, burst, confetti, squish, press-spring, shake),\n * `<usa-button>` (button click deformation: squash, wobble, gooey, dent;\n * shape morph; submit → loading → success), `<usa-icon-morph>`,\n * `<usa-like>`, `<usa-hold>`, `<usa-double-tap>`, `<usa-checkbox>`, plus\n * `burst()`, `confetti()`, `shake()` and `haptic()`.\n */\nimport { defineClick, type UsaClickElement } from './click';\nimport { defineButton, type UsaButtonElement } from './button';\nimport { defineIconMorph, type UsaIconMorphElement } from './icon-morph';\nimport { defineLike, type UsaLikeElement } from './like';\nimport { defineHold, type UsaHoldElement } from './hold';\nimport { defineDoubleTap, type UsaDoubleTapElement } from './double-tap';\nimport { defineCheckbox, type UsaCheckboxElement } from './checkbox';\n\nexport { defineClick, defineButton, defineIconMorph, defineLike, defineHold, defineDoubleTap, defineCheckbox };\nexport { CLICK_EFFECTS } from './click';\nexport type { ClickEffect } from './click';\nexport { BUTTON_DEFORMS } from './button';\nexport type { ButtonDeform, ButtonShape, ButtonState } from './button';\nexport { MORPH_ICONS, morphPath } from './icon-morph';\nexport { burst, confetti, shake, haptic } from './fx';\nexport type { BurstOptions, ConfettiOptions } from './fx';\nexport type { UsaClickElement, UsaButtonElement, UsaIconMorphElement, UsaLikeElement, UsaHoldElement, UsaDoubleTapElement, UsaCheckboxElement };\nexport { configureComponents, prefersReducedMotion } from '../base';\nexport type { ComponentsConfig, UsaElement } from '../base';\n\n/** Register every component of this category under its default tag. */\nexport function defineClickComponents(): void {\n defineClick();\n defineButton();\n defineIconMorph();\n defineLike();\n defineHold();\n defineDoubleTap();\n defineCheckbox();\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'usa-click': UsaClickElement;\n 'usa-button': UsaButtonElement;\n 'usa-icon-morph': UsaIconMorphElement;\n 'usa-like': UsaLikeElement;\n 'usa-hold': UsaHoldElement;\n 'usa-double-tap': UsaDoubleTapElement;\n 'usa-checkbox': UsaCheckboxElement;\n }\n}\n","export type Placement = 'top' | 'bottom' | 'left' | 'right';\n\n/** Position a fixed `floating` element next to `anchor`, flipping when it would leave the viewport. */\nexport function place(floating: HTMLElement, anchor: Element, placement: Placement = 'top', gap = 8): Placement {\n const a = anchor.getBoundingClientRect();\n const f = floating.getBoundingClientRect();\n const W = window.innerWidth || 1024;\n const H = window.innerHeight || 768;\n const fits: Record<Placement, boolean> = {\n top: a.top - f.height - gap >= 0,\n bottom: a.bottom + f.height + gap <= H,\n left: a.left - f.width - gap >= 0,\n right: a.right + f.width + gap <= W,\n };\n const opposite: Record<Placement, Placement> = { top: 'bottom', bottom: 'top', left: 'right', right: 'left' };\n const p = fits[placement] || !fits[opposite[placement]] ? placement : opposite[placement];\n let x = 0;\n let y = 0;\n if (p === 'top' || p === 'bottom') {\n x = Math.min(Math.max(4, a.left + a.width / 2 - f.width / 2), W - f.width - 4);\n y = p === 'top' ? a.top - f.height - gap : a.bottom + gap;\n } else {\n y = Math.min(Math.max(4, a.top + a.height / 2 - f.height / 2), H - f.height - 4);\n x = p === 'left' ? a.left - f.width - gap : a.right + gap;\n }\n floating.style.left = `${Math.round(x)}px`;\n floating.style.top = `${Math.round(y)}px`;\n floating.setAttribute('data-placement', p);\n return p;\n}\n\nlet uid = 0;\nexport const nextId = (prefix: string): string => `${prefix}-${++uid}`;\n","import { defineElement, type UsaElement } from '../base';\nimport { springEasing } from '../physics/spring';\nimport { adoptVariants } from './variants';\nimport { nextId } from './position';\nimport css from './tabs.css?raw';\n\n/**\n * `<usa-tabs>` — accessible tabs with a sliding (spring) indicator.\n * Tabs: `[data-tab]` children (buttons); panels: `[data-panel]` children, in\n * the same order. Arrow keys / Home / End move between tabs (roving tabindex).\n *\n * Attributes: `selected` (index, 0), `indicator` (`line` default, `pill`),\n * `variant`. Events: `usa:change` (`{ index }`). Panels fade/slide in;\n * reduced motion: the indicator jumps and panels switch instantly.\n */\nexport interface UsaTabsElement extends UsaElement {\n selected: number;\n select(i: number, focus?: boolean): void;\n}\n\nexport function defineTabs(tag = 'usa-tabs'): CustomElementConstructor | undefined {\n adoptVariants();\n return defineElement(\n tag,\n (Base) =>\n class UsaTabs extends Base {\n static get observedAttributes(): string[] {\n return ['indicator'];\n }\n\n private _i = 0;\n private _bar: HTMLElement | null = null;\n\n get selected(): number {\n return this._i;\n }\n set selected(v: number) {\n this.select(v);\n }\n\n private tabs(): HTMLElement[] {\n return Array.from(this.querySelectorAll<HTMLElement>('[data-tab]')).filter((t) => t.closest(this.localName) === this);\n }\n private panels(): HTMLElement[] {\n return Array.from(this.querySelectorAll<HTMLElement>('[data-panel]')).filter((t) => t.closest(this.localName) === this);\n }\n\n mount(): void {\n const tabs = this.tabs();\n const panels = this.panels();\n const list = tabs[0]?.parentElement;\n if (!list) return;\n list.setAttribute('role', 'tablist');\n list.classList.add('usa-tabs-list');\n if (!list.querySelector(':scope > .usa-tabs-indicator')) {\n this._bar = document.createElement('span');\n this._bar.className = 'usa-tabs-indicator';\n this._bar.setAttribute('aria-hidden', 'true');\n list.append(this._bar);\n } else this._bar = list.querySelector(':scope > .usa-tabs-indicator');\n tabs.forEach((t, i) => {\n t.id ||= nextId('usa-tab');\n t.setAttribute('role', 'tab');\n const p = panels[i];\n if (p) {\n p.id ||= nextId('usa-panel');\n p.setAttribute('role', 'tabpanel');\n p.setAttribute('aria-labelledby', t.id);\n t.setAttribute('aria-controls', p.id);\n if (!p.hasAttribute('tabindex')) p.tabIndex = 0;\n }\n this.listen(t, 'click', () => this.select(i));\n });\n this.listen(list, 'keydown', (e: KeyboardEvent) => {\n const n = tabs.length;\n const map: Record<string, number> = { ArrowRight: this._i + 1, ArrowDown: this._i + 1, ArrowLeft: this._i - 1, ArrowUp: this._i - 1, Home: 0, End: n - 1 };\n if (!(e.key in map)) return;\n e.preventDefault();\n this.select((map[e.key] + n) % n, true);\n });\n const ro = typeof ResizeObserver !== 'undefined' ? new ResizeObserver(() => this.moveBar(false)) : null;\n ro?.observe(list);\n this.onCleanup(() => ro?.disconnect());\n this.select(Math.max(0, Math.min(tabs.length - 1, this.num('selected', 0))), false, true);\n }\n\n private moveBar(animate: boolean): void {\n const t = this.tabs()[this._i];\n const bar = this._bar;\n if (!t || !bar) return;\n const from = bar.style.transform;\n const fromW = bar.style.width;\n bar.style.width = `${t.offsetWidth}px`;\n bar.style.transform = `translateX(${t.offsetLeft}px)`;\n if (animate && from && !this.reduced) this.motion(bar, [{ transform: from, width: fromW }, { transform: bar.style.transform, width: bar.style.width }], springEasing('stiff'));\n }\n\n select(i: number, focus = false, initial = false): void {\n const tabs = this.tabs();\n const panels = this.panels();\n if (!tabs[i]) return;\n const prev = this._i;\n this._i = i;\n this.setAttribute('selected', String(i));\n tabs.forEach((t, j) => {\n t.setAttribute('aria-selected', String(j === i));\n t.tabIndex = j === i ? 0 : -1;\n });\n panels.forEach((p, j) => (p.hidden = j !== i));\n if (focus) tabs[i].focus();\n this.moveBar(!initial);\n if (initial || prev === i) return;\n const p = panels[i];\n if (p && !this.reduced) this.motion(p, [{ opacity: 0, transform: `translateX(${i > prev ? 16 : -16}px)` }, { opacity: 1, transform: 'none' }], { duration: 280, easing: 'cubic-bezier(0.22, 1, 0.36, 1)' });\n this.emit('change', { index: i });\n }\n },\n { id: 'tabs', text: css }\n );\n}\n","import { defineElement, clamp, type UsaElement } from '../base';\nimport { createSpring, projectInertia, snapTo, rubberBand, type SpringValue } from '../physics/spring';\nimport { adoptVariants } from './variants';\nimport css from './sheet.css?raw';\n\n/** Shared machinery of `<usa-drawer>` and `<usa-bottom-sheet>`: backdrop, focus, Esc, drag-to-dismiss. */\nfunction makePanel(Base: any, kind: 'drawer' | 'sheet') {\n return class UsaPanel extends Base {\n static get observedAttributes(): string[] {\n return ['open', 'side'];\n }\n\n _pos!: SpringValue;\n _backdrop: HTMLElement | null = null;\n _return: Element | null = null;\n _drag: { id: number; start: number; origin: number; t: number; last: number; lt: number } | null = null;\n\n get open(): boolean {\n return this.flag('open');\n }\n set open(v: boolean) {\n this.setFlag('open', v);\n }\n\n /** Main axis size of the panel (px). */\n size(): number {\n const r = this.getBoundingClientRect();\n return (kind === 'sheet' || this.vertical() ? r.height : r.width) || (kind === 'sheet' ? window.innerHeight * 0.9 : 320);\n }\n vertical(): boolean {\n return kind === 'sheet' || this.str('side') === 'top' || this.str('side') === 'bottom';\n }\n /** +1 when hiding moves the panel in the positive axis direction. */\n dir(): number {\n const side = kind === 'sheet' ? 'bottom' : this.str('side', 'left');\n return side === 'left' || side === 'top' ? -1 : 1;\n }\n /** Offsets (px from fully open) the panel may rest at; the largest closes it. */\n stops(): number[] {\n return [0];\n }\n render(v: number): void {\n const axis = this.vertical() ? 'Y' : 'X';\n this.style.transform = `translate${axis}(${(v * this.dir()).toFixed(1)}px)`;\n if (this._backdrop) this._backdrop.style.opacity = String(clamp(1 - v / (this.size() || 1), 0, 1));\n }\n\n mount(): void {\n this.setAttribute('role', 'dialog');\n if (this.str('label')) this.setAttribute('aria-label', this.str('label'));\n if (!this.hasAttribute('tabindex')) this.tabIndex = -1;\n this.classList.add('usa-surface');\n this._pos = createSpring({ value: this.size() * 2, spring: 'stiff', onUpdate: (v) => this.render(v), onRest: (v) => v >= this.size() - 1 && !this.open && this.afterClose() });\n if (this.open) this.show(false);\n else {\n this.hidden = true;\n this._pos.jump(this.size() * 1.2);\n }\n this.listen(document, 'keydown', (e: KeyboardEvent) => e.key === 'Escape' && this.open && this.close());\n this.listen(this, 'click', (e: MouseEvent) => (e.target as Element).closest?.('[data-close]') && this.close());\n this.listen(this, 'pointerdown', (e: PointerEvent) => this.dragStart(e));\n this.listen(this, 'pointermove', (e: PointerEvent) => this.dragMove(e));\n this.listen(this, 'pointerup', (e: PointerEvent) => this.dragEnd(e));\n this.listen(this, 'pointercancel', (e: PointerEvent) => this.dragEnd(e));\n }\n\n unmount(): void {\n this._pos?.stop();\n this._backdrop?.remove();\n this._backdrop = null;\n }\n\n changed(name: string): void {\n if (name !== 'open') return super.changed(name);\n if (this.open && this.hidden) this.show(true);\n else if (!this.open && !this.hidden) this.hide();\n }\n\n show(animate = true): void {\n this._return = document.activeElement;\n this.hidden = false;\n this.setAttribute('aria-modal', 'true');\n if (!this._backdrop) {\n this._backdrop = document.createElement('div');\n this._backdrop.className = 'usa-panel-backdrop';\n this._backdrop.addEventListener('click', () => this.close());\n this.before(this._backdrop);\n }\n const target = this.stops()[this.initialStop()];\n if (!animate) this._pos.jump(target);\n else {\n this._pos.jump(this.size());\n this._pos.set(target);\n }\n this.setFlag('open', true);\n this.focus({ preventScroll: true });\n this.emit('open');\n }\n\n initialStop(): number {\n return 0;\n }\n\n hide(): void {\n this._pos.set(this.size() * 1.05);\n this.emit('close');\n }\n\n afterClose(): void {\n this.hidden = true;\n this._backdrop?.remove();\n this._backdrop = null;\n if (this._return instanceof HTMLElement) this._return.focus({ preventScroll: true });\n }\n\n close(): void {\n this.setFlag('open', false);\n }\n\n dragStart(e: PointerEvent): void {\n const handle = kind === 'sheet' ? (e.target as Element).closest?.('[data-handle], .usa-sheet-handle') || (this.scrollTop <= 0 ? this : null) : this;\n if (!handle || (e.target as Element).closest?.('input, textarea, select, button, a, [data-no-drag]')) return;\n const p = this.vertical() ? e.clientY : e.clientX;\n this._pos.stop();\n this._drag = { id: e.pointerId, start: p, origin: this._pos.value, t: e.timeStamp, last: p, lt: e.timeStamp };\n }\n dragMove(e: PointerEvent): void {\n const d = this._drag;\n if (!d || e.pointerId !== d.id) return;\n const p = this.vertical() ? e.clientY : e.clientX;\n let v = d.origin + (p - d.start) * this.dir();\n if (v < 0) v = rubberBand(v, 200);\n d.lt = d.t;\n d.t = e.timeStamp;\n d.last = p;\n this._pos.jump(v);\n }\n dragEnd(e: PointerEvent): void {\n const d = this._drag;\n if (!d || e.pointerId !== d.id) return;\n this._drag = null;\n const moved = this._pos.value - d.origin;\n const dt = Math.max(16, d.t - d.lt) / 1000;\n const vel = Math.abs(moved) > 4 ? (moved / Math.max(dt, (e.timeStamp - (d.lt || 0)) / 1000 || 0.1)) * 0.2 : 0;\n const projected = projectInertia(this._pos.value, clamp(vel, -3000, 3000));\n const stops = [...this.stops(), this.size()];\n const to = snapTo(projected, stops);\n if (to >= this.size() - 1) this.close();\n else this._pos.set(to);\n this.emit('snap', { offset: to });\n }\n };\n}\n\n/**\n * `<usa-drawer>` — a side panel that slides in with a spring and can be\n * dragged / swiped closed. Modal: backdrop, Esc, focus returns on close.\n * Attributes: `open`, `side` (`left` default, `right`, `top`, `bottom`),\n * `label`, `variant`. Events: `usa:open`, `usa:close`. `[data-close]` closes.\n * Reduced motion: opens and closes instantly.\n */\nexport interface UsaDrawerElement extends UsaElement {\n open: boolean;\n show(): void;\n close(): void;\n}\n\n/**\n * `<usa-bottom-sheet>` — a draggable bottom sheet with snap points\n * (`snap=\"0.3,0.6,0.92\"`, fractions of the viewport height; default\n * `0.5,0.92`; `start` = index of the snap it opens at, default 0), inertia and drag-down-to-dismiss. `[data-handle]` (or the\n * built-in grabber) drags it. Attributes: `open`, `snap`, `start` (initial\n * snap index), `label`, `variant`. Events: `usa:open`, `usa:close`, `usa:snap`.\n */\nexport interface UsaBottomSheetElement extends UsaDrawerElement {}\n\nexport function defineDrawer(tag = 'usa-drawer'): CustomElementConstructor | undefined {\n adoptVariants();\n return defineElement(tag, (Base) => makePanel(Base, 'drawer') as unknown as CustomElementConstructor, { id: 'sheet', text: css });\n}\n\nexport function defineBottomSheet(tag = 'usa-bottom-sheet'): CustomElementConstructor | undefined {\n adoptVariants();\n return defineElement(\n tag,\n (Base) => {\n const Panel = makePanel(Base, 'sheet');\n return class UsaBottomSheet extends Panel {\n static get observedAttributes(): string[] {\n return ['open', 'snap'];\n }\n mount(): void {\n if (!this.querySelector(':scope > .usa-sheet-handle')) {\n const h = document.createElement('div');\n h.className = 'usa-sheet-handle';\n h.setAttribute('aria-hidden', 'true');\n this.prepend(h);\n }\n super.mount();\n }\n size(): number {\n return (window.innerHeight || 800) * Math.max(...this.fractions());\n }\n fractions(): number[] {\n const f = this.str('snap', '0.5,0.92').split(',').map(Number).filter((n: number) => n > 0 && n <= 1);\n return f.length ? f : [0.5, 0.92];\n }\n stops(): number[] {\n const full = this.size();\n const H = window.innerHeight || 800;\n return this.fractions().map((f: number) => Math.max(0, full - f * H)).sort((a: number, b: number) => a - b);\n }\n initialStop(): number {\n const f = this.fractions();\n const pick = f[clamp(this.num('start', 0), 0, f.length - 1)];\n const target = Math.max(0, this.size() - pick * (window.innerHeight || 800));\n const s = this.stops();\n return Math.max(0, s.indexOf(target));\n }\n render(v: number): void {\n this.style.height = `${this.size()}px`;\n super.render(v);\n }\n } as unknown as CustomElementConstructor;\n },\n { id: 'sheet', text: css }\n );\n}\n","import { defineElement, type UsaElement } from '../base';\nimport { createSpring, rubberBand, type SpringValue } from '../physics/spring';\nimport { adoptVariants } from './variants';\nimport css from './pull-refresh.css?raw';\n\n/**\n * `<usa-pull-refresh>` — pull-to-refresh for a scroll container (itself):\n * pull down at the top (touch / pointer) and a spinner stretches in; past\n * `threshold` (px, 70) releasing fires `usa:refresh` — call\n * `event.detail.done()` (or return a promise to `onrefresh`) to finish.\n * Also exposes `refresh()` for a keyboard / button path.\n * Attributes: `threshold`, `disabled`, `label` (status text, \"Refreshing\").\n * Reduced motion: no stretch; the spinner simply appears while refreshing.\n */\nexport interface UsaPullRefreshElement extends UsaElement {\n readonly refreshing: boolean;\n refresh(): Promise<void>;\n}\n\nexport function definePullRefresh(tag = 'usa-pull-refresh'): CustomElementConstructor | undefined {\n adoptVariants();\n return defineElement(\n tag,\n (Base) =>\n class UsaPullRefresh extends Base {\n private _y!: SpringValue;\n private _busy = false;\n private _ind: HTMLElement | null = null;\n private _live: HTMLElement | null = null;\n\n get refreshing(): boolean {\n return this._busy;\n }\n\n private draw(v: number): void {\n const th = this.num('threshold', 70);\n this.style.setProperty('--usa-pull', `${v.toFixed(1)}px`);\n this.style.setProperty('--usa-pull-p', Math.min(1, v / th).toFixed(3));\n this.toggleAttribute('data-armed', v >= th && !this._busy);\n }\n\n mount(): void {\n if (!this.querySelector(':scope > .usa-pull-indicator')) {\n this._ind = document.createElement('div');\n this._ind.className = 'usa-pull-indicator';\n this._ind.setAttribute('aria-hidden', 'true');\n this._ind.innerHTML = '<svg viewBox=\"0 0 24 24\"><circle cx=\"12\" cy=\"12\" r=\"9\" pathLength=\"100\"/></svg>';\n this.prepend(this._ind);\n this._live = document.createElement('span');\n this._live.className = 'usa-sr';\n this._live.setAttribute('role', 'status');\n this.append(this._live);\n }\n this._y = createSpring({ spring: 'stiff', onUpdate: (v) => this.draw(v) });\n let start: number | null = null;\n let id = -1;\n this.listen(this, 'pointerdown', (e: PointerEvent) => {\n if (this.flag('disabled') || this._busy || this.scrollTop > 0) return;\n start = e.clientY;\n id = e.pointerId;\n });\n this.listen(this, 'pointermove', (e: PointerEvent) => {\n if (start === null || e.pointerId !== id) return;\n const d = e.clientY - start;\n if (d <= 0) return;\n this._y.jump(this.reduced ? 0 : rubberBand(d, 220));\n if (this.reduced && d > this.num('threshold', 70)) this.setAttribute('data-armed', '');\n });\n const end = (e: PointerEvent) => {\n if (start === null || e.pointerId !== id) return;\n const d = e.clientY - start;\n start = null;\n const armed = this.hasAttribute('data-armed') || (!this.reduced && this._y.value >= this.num('threshold', 70)) || (this.reduced && d > this.num('threshold', 70));\n if (armed) this.refresh();\n else this._y.set(0);\n };\n this.listen(this, 'pointerup', end);\n this.listen(this, 'pointercancel', end);\n }\n\n unmount(): void {\n this._y?.stop();\n }\n\n refresh(): Promise<void> {\n if (this._busy) return Promise.resolve();\n this._busy = true;\n this.removeAttribute('data-armed');\n this.setAttribute('data-refreshing', '');\n this.setAttribute('aria-busy', 'true');\n if (this._live) this._live.textContent = this.str('label', 'Refreshing');\n this._y.set(this.reduced ? 0 : this.num('threshold', 70) * 0.8);\n return new Promise((resolve) => {\n let finished = false;\n const done = () => {\n if (finished) return;\n finished = true;\n this._busy = false;\n this.removeAttribute('data-refreshing');\n this.removeAttribute('aria-busy');\n if (this._live) this._live.textContent = '';\n this._y.set(0);\n resolve();\n };\n const ev = new CustomEvent('usa:refresh', { detail: { done }, bubbles: true, cancelable: true });\n this.dispatchEvent(ev);\n const fn = (this as any).onrefresh;\n if (typeof fn === 'function') Promise.resolve(fn(ev)).then(done, done);\n });\n }\n },\n { id: 'pull-refresh', text: css }\n );\n}\n","import { defineElement, type UsaElement } from '../base';\nimport { springEasing } from '../physics/spring';\nimport { adoptVariants } from './variants';\nimport css from './fab.css?raw';\n\n/**\n * `<usa-fab>` — floating action button with a speed dial. The first element\n * child is the main button; the others are actions that fan out with a\n * staggered spring when it opens (`direction=\"up\"` default, `down`, `left`,\n * `right`, `radial`). Esc / outside click closes; `aria-expanded` on the\n * main button; actions are hidden from AT while closed.\n * Attributes: `open`, `direction`, `position` (`bottom-right` default, `bottom-left`,\n * `inline`), `gap` (px, 56), `variant`. Events: `usa:toggle` (`{ open }`).\n * Reduced motion: actions appear without travel.\n */\nexport interface UsaFabElement extends UsaElement {\n open: boolean;\n toggle(force?: boolean): void;\n}\n\nexport function defineFab(tag = 'usa-fab'): CustomElementConstructor | undefined {\n adoptVariants();\n return defineElement(\n tag,\n (Base) =>\n class UsaFab extends Base {\n static get observedAttributes(): string[] {\n return ['direction', 'gap'];\n }\n get open(): boolean {\n return this.flag('open');\n }\n set open(v: boolean) {\n this.toggle(v);\n }\n\n private parts(): [HTMLElement | null, HTMLElement[]] {\n const kids = Array.from(this.children) as HTMLElement[];\n return [kids[0] || null, kids.slice(1)];\n }\n\n private offset(i: number, n: number): [number, number] {\n const g = this.num('gap', 56) * (i + 1);\n switch (this.str('direction', 'up')) {\n case 'down':\n return [0, g];\n case 'left':\n return [-g, 0];\n case 'right':\n return [g, 0];\n case 'radial': {\n const a = Math.PI + (n > 1 ? (i / (n - 1)) * (Math.PI / 2) : Math.PI / 4);\n const r = this.num('gap', 56) * 1.6;\n return [Math.cos(a) * r, Math.sin(a) * r];\n }\n default:\n return [0, -g];\n }\n }\n\n mount(): void {\n const [main, actions] = this.parts();\n if (!main) return;\n main.classList.add('usa-fab-main');\n main.setAttribute('aria-haspopup', 'true');\n actions.forEach((a) => a.classList.add('usa-fab-action'));\n this.apply(false);\n this.listen(main, 'click', () => this.toggle());\n this.listen(document, 'keydown', (e: KeyboardEvent) => {\n if (e.key === 'Escape' && this.open) {\n this.toggle(false);\n main.focus();\n }\n });\n this.listen(document, 'pointerdown', (e: PointerEvent) => this.open && !this.contains(e.target as Node) && this.toggle(false));\n this.listen(this, 'click', (e: MouseEvent) => {\n const a = (e.target as Element).closest?.('.usa-fab-action');\n if (a && this.contains(a)) this.toggle(false);\n });\n }\n\n private apply(animate: boolean): void {\n const [main, actions] = this.parts();\n if (!main) return;\n const open = this.open;\n main.setAttribute('aria-expanded', String(open));\n actions.forEach((a, i) => {\n const [x, y] = this.offset(i, actions.length);\n a.toggleAttribute('inert', !open);\n a.setAttribute('aria-hidden', String(!open));\n const to = open ? `translate(${x.toFixed(1)}px, ${y.toFixed(1)}px) scale(1)` : 'translate(0, 0) scale(0.4)';\n const from = a.style.transform || 'translate(0, 0) scale(0.4)';\n a.style.transform = this.reduced ? (open ? `translate(${x.toFixed(1)}px, ${y.toFixed(1)}px)` : 'translate(0, 0)') : to;\n a.style.opacity = open ? '1' : '0';\n if (animate && !this.reduced) {\n const t = springEasing(open ? 'wobbly' : 'stiff');\n this.motion(a, [{ transform: from, opacity: open ? 0 : 1 }, { transform: to, opacity: open ? 1 : 0 }], { ...t, delay: (open ? i : actions.length - 1 - i) * 35 });\n }\n });\n }\n\n toggle(force?: boolean): void {\n const next = force === undefined ? !this.open : force;\n if (next === this.open) return;\n this.setFlag('open', next);\n this.apply(true);\n this.emit('toggle', { open: next });\n }\n },\n { id: 'fab', text: css }\n );\n}\n","import { defineElement, raf, caf, type UsaElement } from '../base';\nimport { adoptVariants } from './variants';\nimport css from './navbar.css?raw';\n\n/**\n * `<usa-navbar>` — an app bar that hides while you scroll down and returns\n * as soon as you scroll up (or reach the top); `shrink` makes it compact\n * once scrolled. Focus inside always reveals it.\n * Attributes: `threshold` (px of scroll before hiding, 64), `shrink`,\n * `target` (selector of a scroll container instead of the page), `variant`.\n * State attributes: `data-hidden`, `data-scrolled`. Events: `usa:hide`, `usa:show`.\n * Reduced motion: hides/shows without sliding (instant).\n */\nexport interface UsaNavbarElement extends UsaElement {\n readonly hiddenByScroll: boolean;\n show(): void;\n}\n\nexport function defineNavbar(tag = 'usa-navbar'): CustomElementConstructor | undefined {\n adoptVariants();\n return defineElement(\n tag,\n (Base) =>\n class UsaNavbar extends Base {\n private _frame = 0;\n private _last = 0;\n\n get hiddenByScroll(): boolean {\n return this.hasAttribute('data-hidden');\n }\n\n mount(): void {\n const sel = this.str('target');\n const scroller: HTMLElement | Window = (sel && (document.querySelector(sel) as HTMLElement)) || window;\n const pos = () => (scroller === window ? window.scrollY || document.documentElement.scrollTop : (scroller as HTMLElement).scrollTop);\n this._last = pos();\n const update = () => {\n this._frame = 0;\n const y = pos();\n const dy = y - this._last;\n this._last = y;\n this.toggleAttribute('data-scrolled', y > 4);\n if (y <= this.num('threshold', 64) || dy < -2) this.show();\n else if (dy > 2 && !this.contains(document.activeElement)) this.hide();\n };\n const on = () => {\n if (!this._frame) this._frame = raf(update);\n };\n this.listen(scroller, 'scroll', on, { passive: true });\n this.listen(this, 'focusin', () => this.show());\n update();\n }\n\n unmount(): void {\n caf(this._frame);\n this._frame = 0;\n }\n\n private hide(): void {\n if (this.hiddenByScroll) return;\n this.setAttribute('data-hidden', '');\n this.emit('hide');\n }\n\n show(): void {\n if (!this.hiddenByScroll) return;\n this.removeAttribute('data-hidden');\n this.emit('show');\n }\n },\n { id: 'navbar', text: css }\n );\n}\n","import { defineElement, clamp, type UsaElement } from '../base';\nimport { createSpring, type SpringValue } from '../physics/spring';\nimport { adoptVariants } from './variants';\nimport css from './slider.css?raw';\n\n/**\n * `<usa-slider>` — a form-associated range slider (`role=\"slider\"`). The\n * thumb follows with a spring, grows while dragged and shows a value bubble.\n * Keyboard: arrows (step), PageUp/PageDown (10 steps), Home/End.\n * Attributes: `value`, `min` (0), `max` (100), `step` (1), `name`, `label`,\n * `bubble` (show the value while dragging), `disabled`, `variant`.\n * Events: `input` + `usa:input` while moving, `change` + `usa:change` on release.\n * Reduced motion: the thumb jumps (no spring).\n */\nexport interface UsaSliderElement extends UsaElement {\n value: number;\n}\n\nexport function defineSlider(tag = 'usa-slider'): CustomElementConstructor | undefined {\n adoptVariants();\n return defineElement(\n tag,\n (Base) => {\n class UsaSlider extends Base {\n static formAssociated = true;\n static get observedAttributes(): string[] {\n return ['min', 'max', 'disabled', 'label'];\n }\n private _internals: ElementInternals | null = null;\n private _v = 0;\n private _pos!: SpringValue;\n private _id = -1;\n\n constructor() {\n super();\n try {\n this._internals = (this as any).attachInternals?.() ?? null;\n } catch {\n this._internals = null;\n }\n }\n\n private range(): [number, number, number] {\n const min = this.num('min', 0);\n const max = Math.max(min + 1e-9, this.num('max', 100));\n return [min, max, Math.max(1e-9, this.num('step', 1))];\n }\n get value(): number {\n return this._v;\n }\n set value(v: number) {\n this.setValue(v, false);\n }\n\n private fraction(v = this._v): number {\n const [min, max] = this.range();\n return (v - min) / (max - min);\n }\n\n private setValue(v: number, user: boolean, animate = true): void {\n const [min, max, step] = this.range();\n const q = clamp(Math.round((v - min) / step) * step + min, min, max);\n const val = Number(q.toFixed(10));\n const changed = val !== this._v;\n this._v = val;\n this.setAttribute('aria-valuenow', String(val));\n this.setAttribute('aria-valuetext', String(val));\n this._internals?.setFormValue?.(String(val));\n const bubble = this.querySelector('.usa-slider-bubble');\n if (bubble) bubble.textContent = String(val);\n if (animate) this._pos?.set(this.fraction());\n else this._pos?.jump(this.fraction());\n if (changed && user) {\n this.dispatchEvent(new Event('input', { bubbles: true }));\n this.emit('input', { value: val });\n }\n }\n\n mount(): void {\n if (!this.querySelector(':scope > .usa-slider-track')) {\n this.innerHTML = '<span class=\"usa-slider-track\"><span class=\"usa-slider-fill\"></span></span><span class=\"usa-slider-thumb\"><span class=\"usa-slider-bubble\"></span></span>';\n }\n this.setAttribute('role', 'slider');\n if (!this.hasAttribute('tabindex')) this.tabIndex = 0;\n const [min, max] = this.range();\n this.setAttribute('aria-valuemin', String(min));\n this.setAttribute('aria-valuemax', String(max));\n if (this.str('label')) this.setAttribute('aria-label', this.str('label'));\n this.toggleAttribute('aria-disabled', this.flag('disabled'));\n this._pos = createSpring({ spring: 'stiff', onUpdate: (f) => this.style.setProperty('--usa-slider', clamp(f, 0, 1).toFixed(4)) });\n this.setValue(this.num('value', min), false, false);\n const fromPointer = (e: PointerEvent) => {\n const r = this.getBoundingClientRect();\n return min + clamp((e.clientX - r.left) / (r.width || 1), 0, 1) * (max - min);\n };\n this.listen(this, 'pointerdown', (e: PointerEvent) => {\n if (this.flag('disabled')) return;\n this._id = e.pointerId;\n try {\n this.setPointerCapture?.(e.pointerId);\n } catch {\n /* synthetic */\n }\n this.setAttribute('data-dragging', '');\n this.setValue(fromPointer(e), true);\n });\n this.listen(this, 'pointermove', (e: PointerEvent) => e.pointerId === this._id && this.setValue(fromPointer(e), true));\n const end = (e: PointerEvent) => {\n if (e.pointerId !== this._id) return;\n this._id = -1;\n this.removeAttribute('data-dragging');\n this.commit();\n };\n this.listen(this, 'pointerup', end);\n this.listen(this, 'pointercancel', end);\n this.listen(this, 'keydown', (e: KeyboardEvent) => {\n if (this.flag('disabled')) return;\n const [mn, mx, st] = this.range();\n const map: Record<string, number> = { ArrowRight: this._v + st, ArrowUp: this._v + st, ArrowLeft: this._v - st, ArrowDown: this._v - st, PageUp: this._v + st * 10, PageDown: this._v - st * 10, Home: mn, End: mx };\n if (!(e.key in map)) return;\n e.preventDefault();\n this.setValue(map[e.key], true);\n this.commit();\n });\n }\n\n unmount(): void {\n this._pos?.stop();\n }\n\n private commit(): void {\n this.dispatchEvent(new Event('change', { bubbles: true }));\n this.emit('change', { value: this._v });\n }\n }\n return UsaSlider as unknown as CustomElementConstructor;\n },\n { id: 'slider', text: css }\n );\n}\n","import { defineElement, clamp, type UsaElement } from '../base';\nimport { springEasing } from '../physics/spring';\nimport { adoptVariants } from './variants';\nimport css from './rating.css?raw';\n\n/**\n * `<usa-rating>` — star rating with hover preview and a springy pop when a\n * value is chosen. `role=\"slider\"` (arrow keys, Home/End, number keys).\n * Attributes: `value` (0), `max` (5), `icon` (★), `readonly`, `label`\n * (\"Rating\"), `name` (form value), `variant`. Events: `change`, `usa:change` (`{ value }`).\n * Reduced motion: no pop.\n */\nexport interface UsaRatingElement extends UsaElement {\n value: number;\n}\n\nexport function defineRating(tag = 'usa-rating'): CustomElementConstructor | undefined {\n adoptVariants();\n return defineElement(\n tag,\n (Base) => {\n class UsaRating extends Base {\n static formAssociated = true;\n static get observedAttributes(): string[] {\n return ['max', 'icon', 'readonly'];\n }\n private _internals: ElementInternals | null = null;\n constructor() {\n super();\n try {\n this._internals = (this as any).attachInternals?.() ?? null;\n } catch {\n this._internals = null;\n }\n }\n get value(): number {\n return clamp(this.num('value', 0), 0, this.num('max', 5));\n }\n set value(v: number) {\n this.setAttribute('value', String(clamp(Math.round(v), 0, this.num('max', 5))));\n this.sync();\n }\n\n mount(): void {\n const max = this.num('max', 5);\n this.innerHTML = Array.from({ length: max }, (_, i) => `<span class=\"usa-rating-star\" data-i=\"${i + 1}\" aria-hidden=\"true\">${this.str('icon', '★')}</span>`).join('');\n this.setAttribute('role', 'slider');\n this.setAttribute('aria-valuemin', '0');\n this.setAttribute('aria-valuemax', String(max));\n this.setAttribute('aria-label', this.str('label', 'Rating'));\n if (this.flag('readonly')) this.setAttribute('aria-readonly', 'true');\n else if (!this.hasAttribute('tabindex')) this.tabIndex = 0;\n this.sync();\n if (this.flag('readonly')) return;\n this.listen(this, 'pointerover', (e: PointerEvent) => {\n const s = (e.target as Element).closest?.('[data-i]') as HTMLElement | null;\n if (s) this.preview(Number(s.dataset.i));\n });\n this.listen(this, 'pointerleave', () => this.preview(0));\n this.listen(this, 'click', (e: MouseEvent) => {\n const s = (e.target as Element).closest?.('[data-i]') as HTMLElement | null;\n if (s) this.choose(Number(s.dataset.i) === this.value ? 0 : Number(s.dataset.i));\n });\n this.listen(this, 'keydown', (e: KeyboardEvent) => {\n const v = this.value;\n const map: Record<string, number> = { ArrowRight: v + 1, ArrowUp: v + 1, ArrowLeft: v - 1, ArrowDown: v - 1, Home: 0, End: max };\n const n = /^[0-9]$/.test(e.key) ? Number(e.key) : map[e.key];\n if (n === undefined) return;\n e.preventDefault();\n this.choose(clamp(n, 0, max));\n });\n }\n\n private preview(n: number): void {\n this.querySelectorAll<HTMLElement>('[data-i]').forEach((s) => s.toggleAttribute('data-preview', n > 0 && Number(s.dataset.i) <= n));\n this.toggleAttribute('data-previewing', n > 0);\n }\n\n private sync(): void {\n const v = this.value;\n this.setAttribute('aria-valuenow', String(v));\n this.setAttribute('aria-valuetext', `${v} of ${this.num('max', 5)}`);\n this._internals?.setFormValue?.(String(v));\n this.querySelectorAll<HTMLElement>('[data-i]').forEach((s) => s.toggleAttribute('data-on', Number(s.dataset.i) <= v));\n }\n\n private choose(n: number): void {\n if (n === this.value) return;\n this.value = n;\n const star = this.querySelector(`[data-i=\"${n}\"]`);\n if (star && !this.reduced) this.motion(star, [{ transform: 'scale(0.5) rotate(-20deg)' }, { transform: 'scale(1) rotate(0)' }], springEasing('bouncy'));\n this.dispatchEvent(new Event('change', { bubbles: true }));\n this.emit('change', { value: n });\n }\n }\n return UsaRating as unknown as CustomElementConstructor;\n },\n { id: 'rating', text: css }\n );\n}\n","import { defineElement, type UsaElement } from '../base';\nimport { springEasing } from '../physics/spring';\nimport { adoptVariants } from './variants';\nimport { place, nextId, type Placement } from './position';\nimport css from './tooltip.css?raw';\n\n/**\n * `<usa-tooltip text=\"…\">` — a tooltip for the element it wraps, shown on\n * hover (after `delay` ms, 300) and on keyboard focus, hidden on Esc / blur.\n * It springs in from its placement side and flips to stay on screen; the\n * trigger gets `aria-describedby`.\n * Attributes: `text`, `placement` (`top` default, `bottom`, `left`, `right`),\n * `delay`, `variant`. Reduced motion: fades only.\n */\nexport interface UsaTooltipElement extends UsaElement {\n show(): void;\n hide(): void;\n}\n\nexport function defineTooltip(tag = 'usa-tooltip'): CustomElementConstructor | undefined {\n adoptVariants();\n return defineElement(\n tag,\n (Base) =>\n class UsaTooltip extends Base {\n static get observedAttributes(): string[] {\n return ['text'];\n }\n private _tip: HTMLElement | null = null;\n private _t: ReturnType<typeof setTimeout> | undefined;\n\n mount(): void {\n const trigger = (this.firstElementChild as HTMLElement) || this;\n const tip = document.createElement('span');\n tip.className = 'usa-tooltip-bubble usa-surface';\n tip.setAttribute('role', 'tooltip');\n tip.id = nextId('usa-tip');\n tip.textContent = this.str('text');\n tip.hidden = true;\n this.append(tip);\n this._tip = tip;\n trigger.setAttribute('aria-describedby', tip.id);\n const later = () => {\n clearTimeout(this._t);\n this._t = setTimeout(() => this.show(), this.num('delay', 300));\n };\n this.listen(this, 'pointerenter', later);\n this.listen(this, 'pointerleave', () => this.hide());\n this.listen(this, 'focusin', () => this.show());\n this.listen(this, 'focusout', () => this.hide());\n this.listen(document, 'keydown', (e: KeyboardEvent) => e.key === 'Escape' && this.hide());\n this.onCleanup(() => {\n clearTimeout(this._t);\n tip.remove();\n trigger.removeAttribute('aria-describedby');\n });\n }\n\n show(): void {\n const tip = this._tip;\n if (!tip || !tip.hidden || !this.str('text')) return;\n clearTimeout(this._t);\n tip.hidden = false;\n const p = place(tip, (this.firstElementChild as HTMLElement) || this, this.str('placement', 'top') as Placement);\n const d = { top: [0, 6], bottom: [0, -6], left: [6, 0], right: [-6, 0] }[p];\n this.motion(tip, this.reduced ? [{ opacity: 0 }, { opacity: 1 }] : [{ opacity: 0, transform: `translate(${d[0]}px, ${d[1]}px) scale(0.85)` }, { opacity: 1, transform: 'none' }], this.reduced ? { duration: 120 } : springEasing('stiff'));\n }\n\n hide(): void {\n clearTimeout(this._t);\n if (this._tip) this._tip.hidden = true;\n }\n },\n { id: 'tooltip', text: css }\n );\n}\n","import { defineElement, type UsaElement } from '../base';\nimport { springEasing } from '../physics/spring';\nimport { adoptVariants } from './variants';\nimport { place, nextId, type Placement } from './position';\nimport css from './popover.css?raw';\n\n/**\n * `<usa-popover>` — a click-to-open popover: the first element child is the\n * trigger, `[data-popover]` is the content. Springs open from the trigger,\n * flips to stay on screen; Esc or an outside click closes and focus returns\n * to the trigger. `aria-expanded` / `aria-controls` on the trigger.\n * Attributes: `open`, `placement` (`bottom` default), `variant`. Events:\n * `usa:open`, `usa:close`. Reduced motion: fades only.\n */\nexport interface UsaPopoverElement extends UsaElement {\n open: boolean;\n toggle(force?: boolean): void;\n}\n\nexport function definePopover(tag = 'usa-popover'): CustomElementConstructor | undefined {\n adoptVariants();\n return defineElement(\n tag,\n (Base) =>\n class UsaPopover extends Base {\n get open(): boolean {\n return this.flag('open');\n }\n set open(v: boolean) {\n this.toggle(v);\n }\n private parts(): [HTMLElement | null, HTMLElement | null] {\n return [this.firstElementChild as HTMLElement | null, this.querySelector<HTMLElement>(':scope > [data-popover]')];\n }\n\n mount(): void {\n const [trigger, panel] = this.parts();\n if (!trigger || !panel || trigger === panel) return;\n panel.id ||= nextId('usa-pop');\n panel.classList.add('usa-surface', 'usa-popover-panel');\n if (!panel.hasAttribute('role')) panel.setAttribute('role', 'dialog');\n panel.tabIndex = -1;\n trigger.setAttribute('aria-controls', panel.id);\n trigger.setAttribute('aria-haspopup', 'dialog');\n this.render(false);\n this.listen(trigger, 'click', () => this.toggle());\n this.listen(document, 'keydown', (e: KeyboardEvent) => {\n if (e.key === 'Escape' && this.open) {\n this.toggle(false);\n trigger.focus();\n }\n });\n this.listen(document, 'pointerdown', (e: PointerEvent) => this.open && !this.contains(e.target as Node) && this.toggle(false));\n this.listen(window, 'resize', () => this.open && place(panel, trigger, this.str('placement', 'bottom') as Placement));\n }\n\n private render(animate: boolean): void {\n const [trigger, panel] = this.parts();\n if (!trigger || !panel) return;\n trigger.setAttribute('aria-expanded', String(this.open));\n panel.hidden = !this.open;\n if (!this.open) return;\n const p = place(panel, trigger, this.str('placement', 'bottom') as Placement);\n if (!animate) return;\n const origin = { top: '50% 100%', bottom: '50% 0', left: '100% 50%', right: '0 50%' }[p];\n panel.style.transformOrigin = origin;\n this.motion(panel, this.reduced ? [{ opacity: 0 }, { opacity: 1 }] : [{ opacity: 0, transform: 'scale(0.9)' }, { opacity: 1, transform: 'none' }], this.reduced ? { duration: 120 } : springEasing('wobbly'));\n panel.focus({ preventScroll: true });\n }\n\n toggle(force?: boolean): void {\n const next = force === undefined ? !this.open : force;\n if (next === this.open) return;\n this.setFlag('open', next);\n this.render(true);\n this.emit(next ? 'open' : 'close');\n }\n },\n { id: 'popover', text: css }\n );\n}\n","import { defineElement, type UsaElement } from '../base';\nimport { springEasing } from '../physics/spring';\nimport { adoptVariants } from './variants';\nimport css from './badge.css?raw';\n\n/**\n * `<usa-badge>` — a count / dot badge on whatever it wraps; bumps with a\n * spring whenever the value changes and pulses with `pulse`.\n * Attributes: `value` (number or text; 0 / empty hides it unless\n * `show-zero`), `max` (99 → \"99+\"), `dot`, `pulse`, `label` (accessible\n * text, default \"{n} new\"), `variant`. Reduced motion: no bump or pulse.\n */\nexport interface UsaBadgeElement extends UsaElement {\n value: string;\n}\n\nexport function defineBadge(tag = 'usa-badge'): CustomElementConstructor | undefined {\n adoptVariants();\n return defineElement(\n tag,\n (Base) =>\n class UsaBadge extends Base {\n static get observedAttributes(): string[] {\n return ['value', 'max', 'dot', 'label'];\n }\n private _el: HTMLElement | null = null;\n get value(): string {\n return this.str('value');\n }\n set value(v: string) {\n this.setAttribute('value', String(v));\n }\n\n mount(): void {\n if (!this._el || !this._el.isConnected) {\n this._el = document.createElement('span');\n this._el.className = 'usa-badge-count';\n this.append(this._el);\n }\n this.sync(false);\n }\n\n changed(name: string): void {\n this.sync(name === 'value');\n }\n\n private sync(bump: boolean): void {\n const el = this._el;\n if (!el) return;\n const raw = this.value;\n const n = Number(raw);\n const max = this.num('max', 99);\n const text = this.flag('dot') ? '' : raw !== '' && Number.isFinite(n) && n > max ? `${max}+` : raw;\n const empty = !this.flag('dot') && (raw === '' || (raw === '0' && !this.flag('show-zero')));\n el.textContent = text;\n el.hidden = empty;\n this.toggleAttribute('data-dot', this.flag('dot'));\n const label = this.str('label', raw ? `${raw} new` : 'New');\n el.setAttribute('aria-label', label.replace('{n}', raw));\n el.setAttribute('role', 'status');\n if (bump && !empty && !this.reduced) this.motion(el, [{ transform: 'scale(0.4)' }, { transform: 'scale(1)' }], springEasing('bouncy'));\n }\n },\n { id: 'badge', text: css }\n );\n}\n","import { defineElement, type UsaElement } from '../base';\nimport { adoptVariants } from './variants';\nimport css from './avatar-stack.css?raw';\n\n/**\n * `<usa-avatar-stack>` — overlapping avatars (its children: `<img>` or any\n * element) that spread apart with a spring on hover / focus; extra ones\n * collapse into a \"+N\" chip.\n * Attributes: `max` (visible avatars, 5), `size` (px, 36), `overlap` (0–1,\n * 0.35), `label` (group name), `variant`. Reduced motion: no spreading.\n */\nexport interface UsaAvatarStackElement extends UsaElement {}\n\nexport function defineAvatarStack(tag = 'usa-avatar-stack'): CustomElementConstructor | undefined {\n adoptVariants();\n return defineElement(\n tag,\n (Base) =>\n class UsaAvatarStack extends Base {\n static get observedAttributes(): string[] {\n return ['max', 'size', 'overlap'];\n }\n mount(): void {\n this.querySelector(':scope > .usa-avatar-more')?.remove();\n const kids = Array.from(this.children) as HTMLElement[];\n const max = Math.max(1, this.num('max', 5));\n this.style.setProperty('--usa-avatar-size', `${this.num('size', 36)}px`);\n this.style.setProperty('--usa-avatar-overlap', String(this.num('overlap', 0.35)));\n this.setAttribute('role', 'group');\n this.setAttribute('aria-label', this.str('label', `${kids.length} people`));\n kids.forEach((k, i) => {\n k.classList.add('usa-avatar');\n k.hidden = i >= max;\n k.style.setProperty('--i', String(i));\n k.style.zIndex = String(kids.length - i);\n });\n if (kids.length > max) {\n const more = document.createElement('span');\n more.className = 'usa-avatar usa-avatar-more';\n more.textContent = `+${kids.length - max}`;\n more.style.setProperty('--i', String(max));\n more.setAttribute('aria-label', `and ${kids.length - max} more`);\n this.append(more);\n }\n }\n },\n { id: 'avatar-stack', text: css }\n );\n}\n","/**\n * use-scroll-animate/components/ui — animated UI components + style variants (v2.6).\n * `<usa-tabs>`, `<usa-drawer>`, `<usa-bottom-sheet>`, `<usa-pull-refresh>`,\n * `<usa-fab>`, `<usa-navbar>`, `<usa-slider>`, `<usa-rating>`,\n * `<usa-tooltip>`, `<usa-popover>`, `<usa-badge>`, `<usa-avatar-stack>`,\n * and `variant=\"minimal | neon | glass | brutalist | fluent | material\"`\n * design tokens (`setVariant()`, `VARIANTS`).\n */\nimport { defineTabs, type UsaTabsElement } from './tabs';\nimport { defineDrawer, defineBottomSheet, type UsaDrawerElement, type UsaBottomSheetElement } from './sheet';\nimport { definePullRefresh, type UsaPullRefreshElement } from './pull-refresh';\nimport { defineFab, type UsaFabElement } from './fab';\nimport { defineNavbar, type UsaNavbarElement } from './navbar';\nimport { defineSlider, type UsaSliderElement } from './slider';\nimport { defineRating, type UsaRatingElement } from './rating';\nimport { defineTooltip, type UsaTooltipElement } from './tooltip';\nimport { definePopover, type UsaPopoverElement } from './popover';\nimport { defineBadge, type UsaBadgeElement } from './badge';\nimport { defineAvatarStack, type UsaAvatarStackElement } from './avatar-stack';\n\nexport { defineTabs, defineDrawer, defineBottomSheet, definePullRefresh, defineFab, defineNavbar, defineSlider, defineRating, defineTooltip, definePopover, defineBadge, defineAvatarStack };\nexport { VARIANTS, setVariant, adoptVariants } from './variants';\nexport type { Variant } from './variants';\nexport type { Placement } from './position';\nexport type {\n UsaTabsElement,\n UsaDrawerElement,\n UsaBottomSheetElement,\n UsaPullRefreshElement,\n UsaFabElement,\n UsaNavbarElement,\n UsaSliderElement,\n UsaRatingElement,\n UsaTooltipElement,\n UsaPopoverElement,\n UsaBadgeElement,\n UsaAvatarStackElement,\n};\nexport { configureComponents, prefersReducedMotion } from '../base';\nexport type { ComponentsConfig, UsaElement } from '../base';\n\n/** Register every component of this category under its default tag. */\nexport function defineUiComponents(): void {\n defineTabs();\n defineDrawer();\n defineBottomSheet();\n definePullRefresh();\n defineFab();\n defineNavbar();\n defineSlider();\n defineRating();\n defineTooltip();\n definePopover();\n defineBadge();\n defineAvatarStack();\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'usa-tabs': UsaTabsElement;\n 'usa-drawer': UsaDrawerElement;\n 'usa-bottom-sheet': UsaBottomSheetElement;\n 'usa-pull-refresh': UsaPullRefreshElement;\n 'usa-fab': UsaFabElement;\n 'usa-navbar': UsaNavbarElement;\n 'usa-slider': UsaSliderElement;\n 'usa-rating': UsaRatingElement;\n 'usa-tooltip': UsaTooltipElement;\n 'usa-popover': UsaPopoverElement;\n 'usa-badge': UsaBadgeElement;\n 'usa-avatar-stack': UsaAvatarStackElement;\n }\n}\n","import { defineElement, raf, caf, type UsaElement } from '../base';\nimport css from './cursor.css?raw';\n\nexport const CURSOR_MODES = ['dot', 'trail', 'magnetic', 'glow'] as const;\nexport type CursorMode = (typeof CURSOR_MODES)[number];\n\n/**\n * `<usa-cursor mode=\"dot | trail | magnetic | glow\">` — a custom cursor for\n * the page (place it once, e.g. at the end of `<body>`).\n * - `dot` — a ring that follows with spring lag around the real pointer;\n * - `trail` — a comet tail of dots;\n * - `magnetic` — the ring snaps onto and wraps hovered targets (`a`,\n * `button`, `[data-cursor]`);\n * - `glow` — a large soft light following the pointer (great on dark UIs).\n * Attributes: `mode`, `color`, `size` (px, 28), `hide-native` (hide the\n * system cursor), `targets` (selector, magnetic). Only for fine pointers\n * (mouse / pen); never on touch. Reduced motion: not rendered.\n */\nexport interface UsaCursorElement extends UsaElement {\n readonly active: boolean;\n}\n\nexport function defineCursor(tag = 'usa-cursor'): CustomElementConstructor | undefined {\n return defineElement(\n tag,\n (Base) =>\n class UsaCursor extends Base {\n static get observedAttributes(): string[] {\n return ['mode', 'size', 'color', 'hide-native'];\n }\n private _frame = 0;\n get active(): boolean {\n return this.hasAttribute('data-active');\n }\n\n mount(): void {\n this.setAttribute('aria-hidden', 'true');\n const fine = typeof matchMedia !== 'function' || matchMedia('(pointer: fine)').matches || matchMedia('(hover: hover)').matches;\n if (this.reduced || !fine) return;\n const mode = this.str('mode', 'dot');\n const n = mode === 'trail' ? 8 : 1;\n this.innerHTML = Array.from({ length: n }, (_, i) => `<span class=\"usa-cursor-${mode === 'glow' ? 'glow' : 'ring'}\" style=\"--i:${i}\"></span>`).join('') + (mode === 'glow' ? '' : '<span class=\"usa-cursor-dot\"></span>');\n if (this.str('color')) this.style.setProperty('--usa-cursor-color', this.str('color'));\n this.style.setProperty('--usa-cursor-size', `${this.num('size', 28)}px`);\n if (this.flag('hide-native')) document.documentElement.classList.add('usa-cursor-none');\n this.onCleanup(() => document.documentElement.classList.remove('usa-cursor-none'));\n const parts = Array.from(this.querySelectorAll<HTMLElement>('.usa-cursor-ring, .usa-cursor-glow'));\n const dot = this.querySelector<HTMLElement>('.usa-cursor-dot');\n const pts = parts.map(() => ({ x: -100, y: -100 }));\n let mx = -100;\n let my = -100;\n let snap: DOMRect | null = null;\n const sel = this.str('targets', 'a, button, [role=\"button\"], [data-cursor], input, select, textarea, label');\n const loop = () => {\n this._frame = 0;\n let tx = mx;\n let ty = my;\n pts.forEach((p, i) => {\n const k = mode === 'trail' ? 0.35 - i * 0.03 : mode === 'glow' ? 0.12 : 0.22;\n const goalX = snap && i === 0 ? snap.left + snap.width / 2 : tx;\n const goalY = snap && i === 0 ? snap.top + snap.height / 2 : ty;\n p.x += (goalX - p.x) * k;\n p.y += (goalY - p.y) * k;\n parts[i].style.transform = `translate3d(${p.x.toFixed(1)}px, ${p.y.toFixed(1)}px, 0)`;\n tx = p.x;\n ty = p.y;\n });\n if (snap && parts[0]) {\n parts[0].style.width = `${snap.width + 12}px`;\n parts[0].style.height = `${snap.height + 12}px`;\n } else if (parts[0]) {\n parts[0].style.width = parts[0].style.height = '';\n }\n if (dot) dot.style.transform = `translate3d(${mx}px, ${my}px, 0)`;\n const moving = pts.some((p, i) => Math.abs(p.x - (i === 0 && snap ? snap.left + snap.width / 2 : mx)) > 0.3);\n if (moving) this._frame = raf(loop);\n };\n const kick = () => {\n if (!this._frame) this._frame = raf(loop);\n };\n this.listen(document, 'pointermove', (e: PointerEvent) => {\n if (e.pointerType === 'touch') return;\n mx = e.clientX;\n my = e.clientY;\n this.setAttribute('data-active', '');\n if (mode === 'magnetic') {\n const t = (e.target as Element)?.closest?.(sel);\n snap = t ? t.getBoundingClientRect() : null;\n this.toggleAttribute('data-snapped', !!t);\n } else {\n this.toggleAttribute('data-hover', !!(e.target as Element)?.closest?.(sel));\n }\n kick();\n }, { passive: true });\n this.listen(document, 'pointerdown', () => this.setAttribute('data-down', ''));\n this.listen(document, 'pointerup', () => this.removeAttribute('data-down'));\n this.listen(document.documentElement, 'pointerleave', () => this.removeAttribute('data-active'));\n }\n\n unmount(): void {\n caf(this._frame);\n this._frame = 0;\n this.removeAttribute('data-active');\n }\n },\n { id: 'cursor', text: css }\n );\n}\n","import { prefersReducedMotion, raf, caf, now } from '../base';\nimport { springSamples } from '../physics/spring';\n\n/**\n * `smoothScroll()` — inertial wheel smoothing for the page (or a scroll\n * container): wheel deltas are eased with a lerp each frame. Touch and\n * keyboard scrolling stay native. Returns a function that turns it off.\n * No-op under reduced motion, on touch-only devices and on the server.\n */\nexport interface SmoothScrollOptions {\n /** Scroll container (default: the page). */\n target?: HTMLElement | null;\n /** 0–1, lower = smoother / longer glide (default 0.12). */\n lerp?: number;\n /** Wheel multiplier (default 1). */\n wheelMultiplier?: number;\n}\n\nexport function smoothScroll(options: SmoothScrollOptions = {}): () => void {\n if (typeof window === 'undefined' || prefersReducedMotion()) return () => undefined;\n const el = options.target || null;\n const lerp = Math.min(1, Math.max(0.02, options.lerp ?? 0.12));\n const mult = options.wheelMultiplier ?? 1;\n const get = () => (el ? el.scrollTop : window.scrollY);\n const max = () => (el ? el.scrollHeight - el.clientHeight : document.documentElement.scrollHeight - window.innerHeight);\n const set = (y: number) => (el ? (el.scrollTop = y) : window.scrollTo(0, y));\n let target = get();\n let current = target;\n let id = 0;\n const loop = () => {\n current += (target - current) * lerp;\n if (Math.abs(target - current) < 0.5) current = target;\n set(current);\n id = current === target ? 0 : raf(loop);\n };\n const onWheel = (e: WheelEvent) => {\n if (e.ctrlKey || e.defaultPrevented) return;\n if (!id) target = current = get();\n e.preventDefault();\n const dy = e.deltaMode === 1 ? e.deltaY * 16 : e.deltaMode === 2 ? e.deltaY * (window.innerHeight || 800) : e.deltaY;\n target = Math.max(0, Math.min(max(), target + dy * mult));\n if (!id) id = raf(loop);\n };\n const onScroll = () => {\n if (!id) target = current = get();\n };\n const host: EventTarget = el || window;\n host.addEventListener('wheel', onWheel as EventListener, { passive: false });\n host.addEventListener('scroll', onScroll, { passive: true });\n return () => {\n host.removeEventListener('wheel', onWheel as EventListener);\n host.removeEventListener('scroll', onScroll);\n if (id) caf(id);\n id = 0;\n };\n}\n\n/**\n * Scroll to a y position, element or selector with spring timing (or\n * instantly under reduced motion). Resolves when done.\n */\nexport function scrollToTarget(to: number | Element | string, options: { offset?: number; target?: HTMLElement | null; preset?: string } = {}): Promise<void> {\n if (typeof window === 'undefined') return Promise.resolve();\n const el = options.target || null;\n const start = el ? el.scrollTop : window.scrollY;\n let y = typeof to === 'number' ? to : 0;\n if (typeof to !== 'number') {\n const node = typeof to === 'string' ? document.querySelector(to) : to;\n if (!node) return Promise.resolve();\n const top = node.getBoundingClientRect().top;\n y = start + top - (el ? el.getBoundingClientRect().top : 0);\n }\n y = Math.max(0, y - (options.offset ?? 0));\n const set = (v: number) => (el ? (el.scrollTop = v) : window.scrollTo(0, v));\n if (prefersReducedMotion()) {\n set(y);\n return Promise.resolve();\n }\n const { values, duration } = springSamples(options.preset || 'slow');\n const t0 = now();\n return new Promise((resolve) => {\n const step = () => {\n const p = Math.min(1, (now() - t0) / Math.max(1, duration));\n const v = values[Math.min(values.length - 1, Math.round(p * (values.length - 1)))];\n set(start + (y - start) * v);\n if (p < 1) raf(step);\n else resolve();\n };\n raf(step);\n });\n}\n","import { defineElement, type UsaElement } from '../base';\nimport { scrollToTarget } from './scroll';\nimport css from './fullpage.css?raw';\n\n/**\n * `<usa-fullpage>` — full-screen sections (its element children) that snap\n * one at a time (CSS scroll snap), with keyboard paging (PageUp/PageDown,\n * arrows, Home/End), optional dot navigation and the current section in\n * `aria-current` + `usa:section`.\n * Attributes: `dots` (show the dot nav), `axis` (`y` default, `x`).\n * Methods: `go(i)`, `next()`, `prev()`. Reduced motion: snapping stays,\n * jumps are instant.\n */\nexport interface UsaFullpageElement extends UsaElement {\n readonly index: number;\n go(i: number): void;\n next(): void;\n prev(): void;\n}\n\nexport function defineFullpage(tag = 'usa-fullpage'): CustomElementConstructor | undefined {\n return defineElement(\n tag,\n (Base) =>\n class UsaFullpage extends Base {\n private _i = 0;\n get index(): number {\n return this._i;\n }\n private sections(): HTMLElement[] {\n return (Array.from(this.children) as HTMLElement[]).filter((c) => !c.classList.contains('usa-fullpage-dots'));\n }\n\n mount(): void {\n if (!this.hasAttribute('tabindex')) this.tabIndex = 0;\n const secs = this.sections();\n secs.forEach((s, i) => {\n s.classList.add('usa-fullpage-section');\n s.setAttribute('data-index', String(i));\n });\n let nav: HTMLElement | null = null;\n if (this.flag('dots')) {\n nav = document.createElement('nav');\n nav.className = 'usa-fullpage-dots';\n nav.setAttribute('aria-label', 'Sections');\n secs.forEach((s, i) => {\n const b = document.createElement('button');\n b.type = 'button';\n b.setAttribute('aria-label', s.getAttribute('aria-label') || s.querySelector('h1,h2,h3')?.textContent?.trim() || `Section ${i + 1}`);\n b.addEventListener('click', () => this.go(i));\n nav!.append(b);\n });\n this.append(nav);\n this.onCleanup(() => nav?.remove());\n }\n this.mark(0);\n if (typeof IntersectionObserver !== 'undefined') {\n const io = new IntersectionObserver(\n (entries) => {\n for (const e of entries) if (e.isIntersecting && e.intersectionRatio >= 0.6) this.mark(Number((e.target as HTMLElement).dataset.index));\n },\n { root: this, threshold: [0.6] }\n );\n secs.forEach((s) => io.observe(s));\n this.onCleanup(() => io.disconnect());\n }\n this.listen(this, 'keydown', (e: KeyboardEvent) => {\n const n = this.sections().length;\n const map: Record<string, number> = { PageDown: this._i + 1, ArrowDown: this._i + 1, ' ': this._i + 1, PageUp: this._i - 1, ArrowUp: this._i - 1, Home: 0, End: n - 1 };\n if (this.str('axis') === 'x') Object.assign(map, { ArrowRight: this._i + 1, ArrowLeft: this._i - 1 });\n if (!(e.key in map) || (e.target as Element).closest?.('input, textarea, select')) return;\n e.preventDefault();\n this.go(map[e.key]);\n });\n }\n\n private mark(i: number): void {\n if (i === this._i && this.hasAttribute('data-ready')) return;\n this.setAttribute('data-ready', '');\n this._i = i;\n this.sections().forEach((s, j) => s.toggleAttribute('data-current', j === i));\n this.querySelectorAll('.usa-fullpage-dots button').forEach((b, j) => (j === i ? b.setAttribute('aria-current', 'true') : b.removeAttribute('aria-current')));\n this.emit('section', { index: i });\n }\n\n go(i: number): void {\n const secs = this.sections();\n const t = secs[Math.max(0, Math.min(secs.length - 1, i))];\n if (!t) return;\n if (this.str('axis') === 'x') this.scrollTo({ left: t.offsetLeft, behavior: this.reduced ? 'auto' : 'smooth' });\n else scrollToTarget(t.offsetTop, { target: this, preset: 'stiff' });\n this.mark(secs.indexOf(t));\n }\n next(): void {\n this.go(this._i + 1);\n }\n prev(): void {\n this.go(this._i - 1);\n }\n },\n { id: 'fullpage', text: css }\n );\n}\n","import { defineElement, type UsaElement } from '../base';\nimport css from './loading-bar.css?raw';\n\n/**\n * `<usa-loading-bar>` — a slim top loading bar for route changes and fetches\n * (NProgress-style): `start()` trickles towards 90 %, `done()` completes and\n * fades out, `set(0–1)` for real progress. `loadingBar` drives the first bar\n * on the page (created on demand). `role=\"progressbar\"`, `aria-busy`.\n * Attributes: `color`, `height` (px, 3), `position` (`top` default, `bottom`).\n * Reduced motion: no trickle animation — the bar shows / hides.\n */\nexport interface UsaLoadingBarElement extends UsaElement {\n readonly progress: number;\n start(): void;\n set(p: number): void;\n done(): void;\n}\n\nexport function defineLoadingBar(tag = 'usa-loading-bar'): CustomElementConstructor | undefined {\n return defineElement(\n tag,\n (Base) =>\n class UsaLoadingBar extends Base {\n private _p = 0;\n private _t: ReturnType<typeof setInterval> | undefined;\n private _h: ReturnType<typeof setTimeout> | undefined;\n get progress(): number {\n return this._p;\n }\n mount(): void {\n if (!this.querySelector('.usa-loading-bar-fill')) this.innerHTML = '<span class=\"usa-loading-bar-fill\"></span>';\n this.setAttribute('role', 'progressbar');\n this.setAttribute('aria-label', this.str('label', 'Loading'));\n this.setAttribute('aria-valuemin', '0');\n this.setAttribute('aria-valuemax', '100');\n if (this.str('color')) this.style.setProperty('--usa-loading-color', this.str('color'));\n this.style.setProperty('--usa-loading-h', `${this.num('height', 3)}px`);\n this.paint();\n }\n unmount(): void {\n clearInterval(this._t);\n clearTimeout(this._h);\n }\n private paint(): void {\n this.style.setProperty('--usa-loading', this._p.toFixed(4));\n this.setAttribute('aria-valuenow', String(Math.round(this._p * 100)));\n }\n start(): void {\n clearTimeout(this._h);\n clearInterval(this._t);\n this.setAttribute('data-active', '');\n this.setAttribute('aria-busy', 'true');\n this._p = Math.max(this._p, 0.08);\n this.paint();\n this._t = setInterval(() => {\n this._p += (0.9 - this._p) * (this.reduced ? 0.5 : 0.08);\n this.paint();\n }, 200);\n }\n set(p: number): void {\n this.setAttribute('data-active', '');\n this._p = Math.max(0, Math.min(1, p));\n this.paint();\n }\n done(): void {\n clearInterval(this._t);\n this._p = 1;\n this.paint();\n this.removeAttribute('aria-busy');\n this._h = setTimeout(() => {\n this.removeAttribute('data-active');\n this._h = setTimeout(() => {\n this._p = 0;\n this.paint();\n }, 300);\n }, 250);\n }\n },\n { id: 'loading-bar', text: css }\n );\n}\n\nfunction bar(): UsaLoadingBarElement | null {\n if (typeof document === 'undefined') return null;\n let el = document.querySelector('usa-loading-bar') as UsaLoadingBarElement | null;\n if (!el) {\n defineLoadingBar();\n el = document.createElement('usa-loading-bar') as UsaLoadingBarElement;\n document.body.appendChild(el);\n }\n return typeof el.start === 'function' ? el : null;\n}\n\n/** Drive the page's `<usa-loading-bar>` (created on first use). */\nexport const loadingBar = {\n start: (): void => bar()?.start(),\n set: (p: number): void => bar()?.set(p),\n done: (): void => bar()?.done(),\n /** Run `task` with the bar shown; resolves with its result. */\n async track<T>(task: Promise<T> | (() => Promise<T>)): Promise<T> {\n bar()?.start();\n try {\n return await (typeof task === 'function' ? task() : task);\n } finally {\n bar()?.done();\n }\n },\n};\n","import { defineElement, raf, caf, type UsaElement } from '../base';\nimport { scrollToTarget } from './scroll';\nimport css from './back-to-top.css?raw';\n\n/**\n * `<usa-back-to-top>` — a floating button that appears after `offset` px\n * (300) of scrolling, shows page progress as a ring and springs the page\n * back to the top (then focuses `focus-target`, default `#main` / `body`).\n * Attributes: `offset`, `label` (\"Back to top\"), `focus-target`, `position`\n * (`bottom-right` default, `bottom-left`). Reduced motion: instant jump.\n */\nexport interface UsaBackToTopElement extends UsaElement {\n readonly visible: boolean;\n}\n\nexport function defineBackToTop(tag = 'usa-back-to-top'): CustomElementConstructor | undefined {\n return defineElement(\n tag,\n (Base) =>\n class UsaBackToTop extends Base {\n private _frame = 0;\n get visible(): boolean {\n return this.hasAttribute('data-visible');\n }\n mount(): void {\n if (!this.querySelector('button')) {\n this.innerHTML = `<button type=\"button\" aria-label=\"${this.str('label', 'Back to top')}\"><svg viewBox=\"0 0 36 36\" aria-hidden=\"true\"><circle cx=\"18\" cy=\"18\" r=\"16\" pathLength=\"100\"/><path d=\"M12 20l6-6 6 6\"/></svg></button>`;\n }\n const btn = this.querySelector('button')!;\n const update = () => {\n this._frame = 0;\n const y = window.scrollY || document.documentElement.scrollTop || 0;\n const max = Math.max(1, (document.documentElement.scrollHeight || 0) - (window.innerHeight || 0));\n this.toggleAttribute('data-visible', y > this.num('offset', 300));\n this.style.setProperty('--usa-btt', Math.min(1, y / max).toFixed(4));\n };\n this.listen(window, 'scroll', () => {\n if (!this._frame) this._frame = raf(update);\n }, { passive: true });\n this.listen(btn, 'click', async () => {\n await scrollToTarget(0, { preset: 'slow' });\n const f = document.querySelector<HTMLElement>(this.str('focus-target', '#main')) || document.body;\n if (!f.hasAttribute('tabindex') && f !== document.body) f.tabIndex = -1;\n f.focus?.({ preventScroll: true });\n });\n update();\n }\n unmount(): void {\n caf(this._frame);\n this._frame = 0;\n }\n },\n { id: 'back-to-top', text: css }\n );\n}\n","import { defineElement, raf, caf, type UsaElement } from '../base';\nimport css from './ambient.css?raw';\n\nexport const AMBIENT_EFFECTS = ['particles', 'snow', 'stars', 'noise', 'gradient'] as const;\nexport type AmbientEffect = (typeof AMBIENT_EFFECTS)[number];\n\n/**\n * `<usa-ambient effect=\"particles | snow | stars | noise | gradient\">` — a\n * fixed, page-wide ambient layer behind (or, with `layer=\"front\"`, over)\n * the content, never catching the pointer.\n * - `particles` — slow drifting dots; `snow` — falling flakes with sway;\n * `stars` — twinkling starfield (canvas, paused in hidden tabs, DPR ≤ 2);\n * - `noise` — animated film grain (CSS, SVG turbulence);\n * - `gradient` — a gradient whose hue shifts with the scroll position.\n * Attributes: `effect`, `density` (0.2–3, 1), `color`, `opacity` (0.6),\n * `layer` (`back` default, `front`), `speed` (1). Reduced motion: one\n * static frame (no falling, twinkling or grain flicker).\n */\nexport interface UsaAmbientElement extends UsaElement {}\n\nexport function defineAmbient(tag = 'usa-ambient'): CustomElementConstructor | undefined {\n return defineElement(\n tag,\n (Base) =>\n class UsaAmbient extends Base {\n static get observedAttributes(): string[] {\n return ['effect', 'density', 'color'];\n }\n private _frame = 0;\n\n mount(): void {\n this.setAttribute('aria-hidden', 'true');\n const effect = this.str('effect', 'particles');\n this.style.setProperty('--usa-ambient-opacity', String(this.num('opacity', 0.6)));\n this.replaceChildren();\n if (effect === 'noise') return;\n if (effect === 'gradient') {\n const upd = () => {\n this._frame = 0;\n const max = Math.max(1, document.documentElement.scrollHeight - window.innerHeight);\n this.style.setProperty('--usa-ambient-p', ((window.scrollY || 0) / max).toFixed(4));\n };\n if (!this.reduced) this.listen(window, 'scroll', () => !this._frame && (this._frame = raf(upd)), { passive: true });\n upd();\n return;\n }\n const canvas = document.createElement('canvas');\n this.append(canvas);\n const ctx = canvas.getContext?.('2d');\n if (!ctx) return;\n const dpr = Math.min(2, window.devicePixelRatio || 1);\n let W = 0;\n let H = 0;\n const color = this.str('color', effect === 'snow' ? '#ffffff' : effect === 'stars' ? '#ffffff' : '#a78bfa');\n const speed = this.num('speed', 1);\n const resize = () => {\n W = window.innerWidth || 800;\n H = window.innerHeight || 600;\n canvas.width = W * dpr;\n canvas.height = H * dpr;\n canvas.style.width = `${W}px`;\n canvas.style.height = `${H}px`;\n ctx.setTransform(dpr, 0, 0, dpr, 0, 0);\n };\n resize();\n const base = effect === 'stars' ? 140 : effect === 'snow' ? 90 : 60;\n const n = Math.round(base * Math.max(0.2, Math.min(3, this.num('density', 1))) * Math.min(1.5, (W * H) / (1280 * 800)));\n const dots = Array.from({ length: n }, () => ({\n x: Math.random() * W,\n y: Math.random() * H,\n r: effect === 'stars' ? Math.random() * 1.3 + 0.2 : effect === 'snow' ? Math.random() * 2.6 + 0.8 : Math.random() * 2 + 0.6,\n vx: (Math.random() - 0.5) * 0.25,\n vy: effect === 'snow' ? Math.random() * 0.8 + 0.4 : (Math.random() - 0.5) * 0.25,\n t: Math.random() * Math.PI * 2,\n }));\n ctx.fillStyle = color;\n const draw = (move: boolean) => {\n ctx.clearRect(0, 0, W, H);\n for (const d of dots) {\n if (move) {\n d.t += 0.02 * speed;\n d.x += (d.vx + (effect === 'snow' ? Math.sin(d.t) * 0.3 : 0)) * speed;\n d.y += d.vy * speed;\n if (d.y > H + 5) d.y = -5;\n if (d.y < -5) d.y = H + 5;\n if (d.x > W + 5) d.x = -5;\n if (d.x < -5) d.x = W + 5;\n }\n ctx.globalAlpha = effect === 'stars' ? 0.35 + 0.65 * Math.abs(Math.sin(d.t)) : 0.85;\n ctx.beginPath();\n ctx.arc(d.x, d.y, d.r, 0, Math.PI * 2);\n ctx.fill();\n }\n };\n this.listen(window, 'resize', () => {\n resize();\n ctx.fillStyle = color;\n draw(false);\n });\n if (this.reduced) {\n draw(false);\n return;\n }\n const loop = () => {\n if (!document.hidden) draw(true);\n this._frame = raf(loop);\n };\n this._frame = raf(loop);\n }\n\n unmount(): void {\n caf(this._frame);\n this._frame = 0;\n }\n },\n { id: 'ambient', text: css }\n );\n}\n","import { defineElement, type UsaElement } from '../base';\nimport css from './splash.css?raw';\n\n/**\n * `<usa-splash>` — an app splash / launch screen: shows its content (logo,\n * spinner) over the page, then leaves with `exit` (`fade` default, `scale`,\n * `slide-up`, `circle`) once the page has loaded (or when you call\n * `done()`), but never sooner than `min` ms (600) — no flash.\n * Attributes: `min`, `exit`, `manual` (wait for `done()`), `label`.\n * Events: `usa:done`. The page underneath is `aria-busy` until then.\n * Reduced motion: fades.\n */\nexport interface UsaSplashElement extends UsaElement {\n done(): Promise<void>;\n}\n\nexport function defineSplash(tag = 'usa-splash'): CustomElementConstructor | undefined {\n return defineElement(\n tag,\n (Base) =>\n class UsaSplash extends Base {\n private _t0 = 0;\n private _gone = false;\n mount(): void {\n this._t0 = Date.now();\n this.setAttribute('role', 'status');\n this.setAttribute('aria-label', this.str('label', 'Loading'));\n document.body?.setAttribute('aria-busy', 'true');\n if (this.flag('manual')) return;\n if (document.readyState === 'complete') this.done();\n else this.listen(window, 'load', () => this.done(), { once: true });\n }\n async done(): Promise<void> {\n if (this._gone) return;\n this._gone = true;\n const wait = Math.max(0, this.num('min', 600) - (Date.now() - this._t0));\n if (wait) await new Promise((r) => setTimeout(r, wait));\n const exit = this.reduced ? 'fade' : this.str('exit', 'fade');\n const frames: Record<string, Keyframe[]> = {\n fade: [{ opacity: 1 }, { opacity: 0 }],\n scale: [{ opacity: 1, transform: 'scale(1)' }, { opacity: 0, transform: 'scale(1.15)' }],\n 'slide-up': [{ transform: 'translateY(0)' }, { transform: 'translateY(-100%)' }],\n circle: [{ clipPath: 'circle(150% at 50% 50%)' }, { clipPath: 'circle(0% at 50% 50%)' }],\n };\n const a = this.motion(this, frames[exit] || frames.fade, { duration: this.reduced ? 200 : 550, easing: 'cubic-bezier(0.65, 0, 0.35, 1)', fill: 'forwards' });\n await a?.finished.catch(() => undefined);\n document.body?.removeAttribute('aria-busy');\n this.hidden = true;\n this.emit('done');\n }\n },\n { id: 'splash', text: css }\n );\n}\n","import { defineElement, type UsaElement } from '../base';\nimport css from './auto-skeleton.css?raw';\n\n/**\n * `<usa-auto-skeleton loading>` — automatic skeletons: while `loading` is\n * set, every text block, image, button and input inside is drawn as a\n * shimmering placeholder of its own size — no separate skeleton markup.\n * Remove `loading` (or set `.loading = false`) and the content fades in.\n * `aria-busy` while loading. Opt elements out with `data-no-skeleton`.\n * Reduced motion: static placeholders, no shimmer or fade.\n */\nexport interface UsaAutoSkeletonElement extends UsaElement {\n loading: boolean;\n}\n\nexport function defineAutoSkeleton(tag = 'usa-auto-skeleton'): CustomElementConstructor | undefined {\n return defineElement(\n tag,\n (Base) =>\n class UsaAutoSkeleton extends Base {\n static get observedAttributes(): string[] {\n return ['loading'];\n }\n get loading(): boolean {\n return this.flag('loading');\n }\n set loading(v: boolean) {\n this.setFlag('loading', v);\n }\n mount(): void {\n this.sync(false);\n }\n changed(): void {\n this.sync(true);\n }\n private sync(animate: boolean): void {\n if (this.loading) this.setAttribute('aria-busy', 'true');\n else {\n this.removeAttribute('aria-busy');\n if (animate && !this.reduced) this.motion(this, [{ opacity: 0.4 }, { opacity: 1 }], { duration: 300, easing: 'ease-out' });\n }\n }\n },\n { id: 'auto-skeleton', text: css }\n );\n}\n","import { defineElement, configureComponents, getMotionIntensity, type MotionIntensity, type UsaElement } from '../base';\nimport css from './motion-switch.css?raw';\n\nconst LEVELS: MotionIntensity[] = ['off', 'low', 'normal', 'high'];\nconst KEY = 'usa:motion';\n\n/**\n * Set the global motion intensity for every `<usa-*>` component:\n * `'off'` (like reduced motion), `'low'`, `'normal'` (default), `'high'`.\n * Sets `--usa-motion` and `data-usa-motion` on `<html>`; with `persist`\n * the choice is remembered (localStorage) and restored by `restoreMotionIntensity()`.\n */\nexport function setMotionIntensity(level: MotionIntensity, persist = false): void {\n if (!LEVELS.includes(level)) return;\n configureComponents({ motionIntensity: level });\n if (persist) {\n try {\n localStorage.setItem(KEY, level);\n } catch {\n /* private mode */\n }\n }\n if (typeof document !== 'undefined') document.dispatchEvent(new CustomEvent('usa:motion', { detail: { level } }));\n}\n\n/** Re-apply a persisted intensity (call early on page load). Returns it. */\nexport function restoreMotionIntensity(): MotionIntensity {\n try {\n const v = localStorage.getItem(KEY) as MotionIntensity | null;\n if (v && LEVELS.includes(v)) setMotionIntensity(v);\n } catch {\n /* ignore */\n }\n return getMotionIntensity();\n}\n\n/**\n * `<usa-motion-switch>` — a segmented control letting users choose the\n * app's motion intensity (Off · Low · Normal · High), persisted.\n * `role=\"radiogroup\"`; arrow keys move. Attributes: `labels` (comma list),\n * `label` (\"Motion\"). Events: `usa:change` (`{ level }`).\n */\nexport interface UsaMotionSwitchElement extends UsaElement {\n value: MotionIntensity;\n}\n\nexport function defineMotionSwitch(tag = 'usa-motion-switch'): CustomElementConstructor | undefined {\n return defineElement(\n tag,\n (Base) =>\n class UsaMotionSwitch extends Base {\n get value(): MotionIntensity {\n return getMotionIntensity();\n }\n set value(v: MotionIntensity) {\n setMotionIntensity(v, true);\n this.sync();\n }\n mount(): void {\n restoreMotionIntensity();\n const labels = this.str('labels', 'Off,Low,Normal,High').split(',');\n this.setAttribute('role', 'radiogroup');\n this.setAttribute('aria-label', this.str('label', 'Motion'));\n this.innerHTML = LEVELS.map((l, i) => `<button type=\"button\" role=\"radio\" data-level=\"${l}\">${labels[i] || l}</button><span hidden></span>`.replace('<span hidden></span>', '')).join('') + '<span class=\"usa-motion-thumb\" aria-hidden=\"true\"></span>';\n this.listen(this, 'click', (e: MouseEvent) => {\n const b = (e.target as Element).closest?.('[data-level]') as HTMLElement | null;\n if (b) this.pick(b.dataset.level as MotionIntensity);\n });\n this.listen(this, 'keydown', (e: KeyboardEvent) => {\n const i = LEVELS.indexOf(this.value);\n const n = e.key === 'ArrowRight' || e.key === 'ArrowDown' ? i + 1 : e.key === 'ArrowLeft' || e.key === 'ArrowUp' ? i - 1 : null;\n if (n === null) return;\n e.preventDefault();\n this.pick(LEVELS[(n + LEVELS.length) % LEVELS.length]);\n (this.querySelector('[aria-checked=\"true\"]') as HTMLElement)?.focus();\n });\n this.listen(document, 'usa:motion', () => this.sync());\n this.sync();\n }\n private pick(l: MotionIntensity): void {\n this.value = l;\n this.emit('change', { level: l });\n }\n private sync(): void {\n const v = this.value;\n const i = LEVELS.indexOf(v);\n this.style.setProperty('--usa-motion-i', String(i));\n this.querySelectorAll<HTMLElement>('[data-level]').forEach((b) => {\n const on = b.dataset.level === v;\n b.setAttribute('aria-checked', String(on));\n b.tabIndex = on ? 0 : -1;\n });\n }\n },\n { id: 'motion-switch', text: css }\n );\n}\n","import { prefersReducedMotion, adoptStyles } from '../base';\nimport css from './transitions.css?raw';\n\n/**\n * Page & app-wide transitions (v2.7), built on the View Transitions API\n * (Chromium: Chrome, Edge, Electron, WebView2) with graceful fallbacks.\n *\n * - `pageTransition(update, { effect })` — SPA route changes: `fade`,\n * `slide` (`slide-left` / `slide-right` / `slide-up`), `circle` (reveal\n * from `x`, `y`), `blinds`, `pixel` (stepped dissolve), `zoom`.\n * - `enableMpaTransitions(effect)` — the same effects for multi-page sites\n * (`@view-transition { navigation: auto }`); call it on every page.\n * - `themeTransition(apply, { x, y })` — a circle-reveal theme switch.\n *\n * Without View Transitions (Firefox, older Safari) or under reduced motion\n * the update runs immediately (`fade` falls back to a short cross-fade of\n * `fallback` when given).\n */\nexport const PAGE_EFFECTS = ['fade', 'slide', 'slide-left', 'slide-right', 'slide-up', 'circle', 'blinds', 'pixel', 'zoom'] as const;\nexport type PageEffect = (typeof PAGE_EFFECTS)[number];\n\nexport interface PageTransitionOptions {\n effect?: PageEffect;\n /** Circle origin in client px (default: viewport centre / last pointer). */\n x?: number;\n y?: number;\n /** Duration in ms (default 600). */\n duration?: number;\n /** Element to cross-fade when View Transitions are unavailable. */\n fallback?: Element | null;\n}\n\nlet lastPointer: [number, number] | null = null;\nfunction trackPointer(): void {\n if (typeof document === 'undefined' || (trackPointer as any).done) return;\n (trackPointer as any).done = true;\n document.addEventListener('pointerdown', (e) => (lastPointer = [e.clientX, e.clientY]), { capture: true, passive: true });\n}\n\n/** `true` when `document.startViewTransition` exists. */\nexport const supportsViewTransitions = (): boolean => typeof document !== 'undefined' && typeof (document as any).startViewTransition === 'function';\n\nfunction setVars(o: PageTransitionOptions): void {\n const d = document.documentElement;\n const W = window.innerWidth || 1024;\n const H = window.innerHeight || 768;\n const [x, y] = o.x !== undefined && o.y !== undefined ? [o.x, o.y] : lastPointer || [W / 2, H / 2];\n const r = Math.hypot(Math.max(x, W - x), Math.max(y, H - y));\n d.style.setProperty('--usa-pt-x', `${x}px`);\n d.style.setProperty('--usa-pt-y', `${y}px`);\n d.style.setProperty('--usa-pt-r', `${Math.ceil(r)}px`);\n d.style.setProperty('--usa-pt-duration', `${o.duration ?? 600}ms`);\n}\n\n/** Run `update` (sync or async) as an animated page transition. Resolves when it is done. */\nexport async function pageTransition(update: () => unknown, options: PageTransitionOptions = {}): Promise<void> {\n if (typeof document === 'undefined') {\n await update();\n return;\n }\n adoptStyles('page-transitions', css);\n trackPointer();\n const effect = options.effect || 'fade';\n if (prefersReducedMotion() || !supportsViewTransitions()) {\n await update();\n const f = options.fallback as HTMLElement | null | undefined;\n if (f && typeof f.animate === 'function' && !prefersReducedMotion()) await f.animate([{ opacity: 0 }, { opacity: 1 }], { duration: 200 }).finished.catch(() => undefined);\n return;\n }\n const d = document.documentElement;\n setVars(options);\n d.setAttribute('data-usa-pt', effect);\n try {\n const vt = (document as any).startViewTransition(() => update());\n await vt.finished;\n } finally {\n d.removeAttribute('data-usa-pt');\n }\n}\n\n/** Opt a multi-page site into cross-document view transitions with `effect`. */\nexport function enableMpaTransitions(effect: PageEffect = 'fade', duration = 450): void {\n if (typeof document === 'undefined') return;\n adoptStyles('page-transitions', css);\n adoptStyles('mpa-transitions', prefersReducedMotion() ? '' : '@view-transition{navigation:auto}');\n const d = document.documentElement;\n d.setAttribute('data-usa-pt', effect);\n setVars({ duration });\n}\n\n/**\n * Switch theme with a circle reveal from (`x`, `y`) (default: last pointer).\n * `apply` flips your theme (e.g. toggles a class / `data-theme`).\n */\nexport function themeTransition(apply: () => unknown, options: Omit<PageTransitionOptions, 'effect'> = {}): Promise<void> {\n return pageTransition(apply, { ...options, effect: 'circle', duration: options.duration ?? 650 });\n}\n","/**\n * use-scroll-animate/components/page — page & app-wide effects (v2.7).\n * Page transitions (`pageTransition()`, `enableMpaTransitions()`,\n * `themeTransition()`), `<usa-cursor>`, `smoothScroll()` / `scrollToTarget()`,\n * `<usa-fullpage>`, `<usa-loading-bar>` + `loadingBar`, `<usa-back-to-top>`,\n * `<usa-ambient>`, `<usa-splash>`, `<usa-auto-skeleton>` and the global motion\n * intensity (`setMotionIntensity()`, `<usa-motion-switch>`).\n */\nimport { defineCursor, type UsaCursorElement } from './cursor';\nimport { defineFullpage, type UsaFullpageElement } from './fullpage';\nimport { defineLoadingBar, type UsaLoadingBarElement } from './loading-bar';\nimport { defineBackToTop, type UsaBackToTopElement } from './back-to-top';\nimport { defineAmbient, type UsaAmbientElement } from './ambient';\nimport { defineSplash, type UsaSplashElement } from './splash';\nimport { defineAutoSkeleton, type UsaAutoSkeletonElement } from './auto-skeleton';\nimport { defineMotionSwitch, type UsaMotionSwitchElement } from './motion-switch';\n\nexport { defineCursor, defineFullpage, defineLoadingBar, defineBackToTop, defineAmbient, defineSplash, defineAutoSkeleton, defineMotionSwitch };\nexport { pageTransition, enableMpaTransitions, themeTransition, supportsViewTransitions, PAGE_EFFECTS } from './transitions';\nexport type { PageEffect, PageTransitionOptions } from './transitions';\nexport { smoothScroll, scrollToTarget } from './scroll';\nexport type { SmoothScrollOptions } from './scroll';\nexport { loadingBar } from './loading-bar';\nexport { CURSOR_MODES } from './cursor';\nexport type { CursorMode } from './cursor';\nexport { AMBIENT_EFFECTS } from './ambient';\nexport type { AmbientEffect } from './ambient';\nexport { setMotionIntensity, restoreMotionIntensity } from './motion-switch';\nexport { getMotionIntensity, MOTION_SCALE } from '../base';\nexport type { MotionIntensity } from '../base';\nexport type { UsaCursorElement, UsaFullpageElement, UsaLoadingBarElement, UsaBackToTopElement, UsaAmbientElement, UsaSplashElement, UsaAutoSkeletonElement, UsaMotionSwitchElement };\nexport { configureComponents, prefersReducedMotion } from '../base';\nexport type { ComponentsConfig, UsaElement } from '../base';\n\n/** Register every component of this category under its default tag. */\nexport function definePageComponents(): void {\n defineCursor();\n defineFullpage();\n defineLoadingBar();\n defineBackToTop();\n defineAmbient();\n defineSplash();\n defineAutoSkeleton();\n defineMotionSwitch();\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'usa-cursor': UsaCursorElement;\n 'usa-fullpage': UsaFullpageElement;\n 'usa-loading-bar': UsaLoadingBarElement;\n 'usa-back-to-top': UsaBackToTopElement;\n 'usa-ambient': UsaAmbientElement;\n 'usa-splash': UsaSplashElement;\n 'usa-auto-skeleton': UsaAutoSkeletonElement;\n 'usa-motion-switch': UsaMotionSwitchElement;\n }\n}\n","import { prefersReducedMotion, motionScale, applyFrame, raf, caf, now, clamp } from '../base';\n\n/**\n * Where a step starts on a timeline:\n * - a number: absolute time in ms\n * - `'>'` (default): when the previous step ends · `'<'`: when it starts\n * - `'+=200'` / `'-=200'`: after / overlapping the previous end\n * - `'<+=100'`: 100ms after the previous step's start\n * - `'intro'` / `'intro+=150'`: at (or relative to) a label\n */\nexport type TimelinePosition = number | string;\n\nexport interface TimelineStepOptions {\n /** Duration in ms (default: timeline default, 600). */\n duration?: number;\n /** CSS easing (default `cubic-bezier(0.22, 1, 0.36, 1)`). */\n easing?: string;\n /** Start position, see `TimelinePosition`. */\n at?: TimelinePosition;\n /** ms between targets when the selector matches several elements. */\n stagger?: number;\n}\n\nexport interface TimelineOptions {\n /** Defaults for every step. */\n defaults?: Pick<TimelineStepOptions, 'duration' | 'easing' | 'stagger'>;\n /** Playback rate (1 = normal). */\n speed?: number;\n /** Called after `play()` reaches the end (or the start when reversed). */\n onComplete?: () => void;\n /** Called on every frame with progress 0–1. */\n onUpdate?: (progress: number) => void;\n}\n\nexport interface ScrubOptions {\n /** Scroll offset (px) before the source's top reaches the viewport bottom where progress starts. */\n offset?: number;\n /** Smoothing 0–1 (0 = immediate, default 0). */\n smooth?: number;\n}\n\nexport interface Timeline {\n /** Total length in ms. */\n readonly duration: number;\n /** Label positions in ms. */\n readonly labels: Readonly<Record<string, number>>;\n /** Current playhead in ms. */\n readonly time: number;\n /** Add a step: animate `target` with keyframes or a preset name (`fade-up`, `scale`…). */\n to(target: string | Element | Element[] | NodeList, frames: Keyframe[] | string, options?: TimelineStepOptions): Timeline;\n /** Name a position (default: the current end). */\n label(name: string, at?: TimelinePosition): Timeline;\n /** Run `fn` when the playhead passes `at`. */\n call(fn: () => void, at?: TimelinePosition): Timeline;\n /** Play forwards from the playhead (from 0 when at the end). Resolves at the end. */\n play(from?: TimelinePosition): Promise<void>;\n /** Play backwards to 0. */\n reverse(): Promise<void>;\n pause(): Timeline;\n /** Jump to a time (ms) or label. */\n seek(to: TimelinePosition): Timeline;\n /** Get or set progress 0–1. */\n progress(p?: number): number;\n /** Tie progress to the scroll position of `source` (it moves through the viewport). Returns a stop function. */\n scrub(source: Element, options?: ScrubOptions): () => void;\n /** Stop and drop every animation (elements keep their last frame). */\n cancel(): void;\n}\n\n/** Keyframe presets usable by name in `to()` and `data-tl`. */\nexport const TIMELINE_PRESETS: Record<string, Keyframe[]> = {\n fade: [{ opacity: 0 }, { opacity: 1 }],\n 'fade-up': [{ opacity: 0, transform: 'translateY(24px)' }, { opacity: 1, transform: 'none' }],\n 'fade-down': [{ opacity: 0, transform: 'translateY(-24px)' }, { opacity: 1, transform: 'none' }],\n 'fade-left': [{ opacity: 0, transform: 'translateX(24px)' }, { opacity: 1, transform: 'none' }],\n 'fade-right': [{ opacity: 0, transform: 'translateX(-24px)' }, { opacity: 1, transform: 'none' }],\n scale: [{ opacity: 0, transform: 'scale(0.85)' }, { opacity: 1, transform: 'none' }],\n blur: [{ opacity: 0, filter: 'blur(12px)' }, { opacity: 1, filter: 'blur(0)' }],\n rotate: [{ opacity: 0, transform: 'rotate(-12deg) scale(0.9)' }, { opacity: 1, transform: 'none' }],\n 'clip-up': [{ clipPath: 'inset(100% 0 0 0)' }, { clipPath: 'inset(0 0 0 0)' }],\n 'clip-right': [{ clipPath: 'inset(0 100% 0 0)' }, { clipPath: 'inset(0 0 0 0)' }],\n};\n\n/** Resolve a position against the previous step and labels (pure). */\nexport function resolvePosition(\n pos: TimelinePosition | undefined,\n end: number,\n prevStart: number,\n labels: Record<string, number> = {}\n): number {\n if (pos === undefined || pos === '' || pos === '>') return end;\n if (typeof pos === 'number') return Math.max(0, pos);\n const s = String(pos).trim();\n if (/^-?\\d+(\\.\\d+)?$/.test(s)) return Math.max(0, Number(s));\n const m = /^(<|>|[A-Za-z_][\\w-]*)?\\s*(?:([+-])=\\s*(\\d+(?:\\.\\d+)?))?$/.exec(s);\n if (!m) return end;\n const base = m[1] === '<' ? prevStart : m[1] === '>' || !m[1] ? end : labels[m[1]] ?? end;\n const delta = m[2] ? (m[2] === '-' ? -1 : 1) * Number(m[3]) : 0;\n return Math.max(0, base + delta);\n}\n\nconst toEls = (t: string | Element | Element[] | NodeList): Element[] =>\n typeof t === 'string' ? (typeof document === 'undefined' ? [] : Array.from(document.querySelectorAll(t))) : t instanceof Element ? [t] : Array.from(t as ArrayLike<Element>);\n\ninterface Step { el: Element; frames: Keyframe[]; start: number; duration: number; easing: string; anim?: Animation | null }\ninterface Cue { fn: () => void; at: number }\n\n/**\n * Choreograph animations on one clock: chain, overlap, label, seek, reverse and\n * scrub them with scroll. Built on WAAPI (paused animations driven by one\n * playhead); without WAAPI or under reduced motion it jumps to the end state.\n *\n * @example\n * const tl = timeline({ defaults: { duration: 500 } })\n * .to('.title', 'fade-up')\n * .label('cards')\n * .to('.card', 'scale', { stagger: 80, at: '-=200' })\n * .to('.cta', [{ opacity: 0 }, { opacity: 1 }], { at: 'cards+=400' });\n * tl.play(); // or tl.scrub(document.querySelector('.hero'))\n */\nexport function timeline(options: TimelineOptions = {}): Timeline {\n const d = { duration: 600, easing: 'cubic-bezier(0.22, 1, 0.36, 1)', stagger: 0, ...options.defaults };\n const steps: Step[] = [];\n const cues: Cue[] = [];\n const labels: Record<string, number> = {};\n let end = 0;\n let prevStart = 0;\n let t = 0;\n let frame = 0;\n let dir = 1;\n let settle: (() => void) | undefined;\n let built = false;\n\n const total = () => Math.max(end, ...cues.map((c) => c.at), 0);\n const build = () => {\n if (built) return;\n built = true;\n for (const s of steps) {\n if (typeof (s.el as HTMLElement).animate !== 'function') { s.anim = null; continue; }\n s.anim = (s.el as HTMLElement).animate(s.frames, { duration: s.duration, delay: s.start, easing: s.easing, fill: 'both' });\n s.anim.pause?.();\n }\n };\n const render = (to: number, from: number) => {\n build();\n t = clamp(to, 0, total());\n for (const s of steps) {\n if (s.anim) s.anim.currentTime = t;\n else applyFrame(s.el as HTMLElement, s.frames[t >= s.start ? s.frames.length - 1 : 0]);\n }\n for (const c of cues) if ((from < c.at && t >= c.at) || (from > c.at && t <= c.at)) c.fn();\n options.onUpdate?.(total() ? t / total() : 1);\n };\n const stop = () => {\n if (frame) caf(frame);\n frame = 0;\n };\n const run = (direction: number): Promise<void> => {\n stop();\n settle?.();\n dir = direction;\n const target = dir > 0 ? total() : 0;\n const k = motionScale();\n if (prefersReducedMotion() || k === 0 || !total()) {\n render(target, t);\n options.onComplete?.();\n return Promise.resolve();\n }\n const rate = (options.speed ?? 1) / k;\n return new Promise<void>((resolve) => {\n settle = () => { settle = undefined; resolve(); };\n let last = now();\n const loop = () => {\n const n = now();\n const next = t + (n - last) * rate * dir;\n last = n;\n render(next, t);\n if ((dir > 0 && t >= target) || (dir < 0 && t <= 0)) {\n frame = 0;\n options.onComplete?.();\n settle?.();\n return;\n }\n frame = raf(loop);\n };\n frame = raf(loop);\n });\n };\n\n const api: Timeline = {\n get duration() { return total(); },\n get labels() { return { ...labels }; },\n get time() { return t; },\n to(target, frames, o = {}) {\n const kf = typeof frames === 'string' ? TIMELINE_PRESETS[frames] || TIMELINE_PRESETS.fade : frames;\n const start = resolvePosition(o.at, end, prevStart, labels);\n const duration = o.duration ?? d.duration;\n const stagger = o.stagger ?? d.stagger;\n let last = start;\n toEls(target).forEach((el, i) => {\n const s = start + i * stagger;\n steps.push({ el, frames: kf, start: s, duration, easing: o.easing ?? d.easing });\n last = Math.max(last, s + duration);\n });\n prevStart = start;\n end = Math.max(end, last);\n built = false;\n steps.forEach((s) => s.anim?.cancel?.());\n return api;\n },\n label(name, at) {\n labels[name] = resolvePosition(at, end, prevStart, labels);\n return api;\n },\n call(fn, at) {\n cues.push({ fn, at: resolvePosition(at, end, prevStart, labels) });\n return api;\n },\n play(from) {\n if (from !== undefined) render(resolvePosition(from, 0, 0, labels), t);\n else if (t >= total()) render(0, -1);\n return run(1);\n },\n reverse() {\n return run(-1);\n },\n pause() {\n stop();\n return api;\n },\n seek(to) {\n stop();\n render(resolvePosition(to, 0, 0, labels), t);\n return api;\n },\n progress(p) {\n if (p !== undefined) api.seek(clamp(p, 0, 1) * total());\n return total() ? t / total() : 0;\n },\n scrub(source, o = {}) {\n stop();\n if (prefersReducedMotion() || typeof window === 'undefined') {\n render(total(), t);\n return () => {};\n }\n let id = 0;\n let cur = t;\n const update = () => {\n id = 0;\n const r = source.getBoundingClientRect();\n const vh = window.innerHeight || 1;\n const p = clamp((vh + (o.offset ?? 0) - r.top) / (vh + r.height || 1), 0, 1);\n const goal = p * total();\n const sm = clamp(o.smooth ?? 0, 0, 0.95);\n cur = sm ? cur + (goal - cur) * (1 - sm) : goal;\n render(cur, t);\n if (sm && Math.abs(goal - cur) > 0.5) id = raf(update);\n };\n const onScroll = () => { if (!id) id = raf(update); };\n window.addEventListener('scroll', onScroll, { passive: true });\n window.addEventListener('resize', onScroll, { passive: true });\n update();\n return () => {\n window.removeEventListener('scroll', onScroll);\n window.removeEventListener('resize', onScroll);\n if (id) caf(id);\n };\n },\n cancel() {\n stop();\n settle?.();\n steps.forEach((s) => s.anim?.cancel?.());\n built = false;\n },\n };\n return api;\n}\n","import { defineElement, type UsaElement } from '../base';\nimport { timeline, TIMELINE_PRESETS, type Timeline } from './core';\nimport css from './timeline.css?raw';\n\n/**\n * `<usa-timeline>` — declarative choreography. Every descendant with\n * `data-tl=\"<preset>\"` becomes a step, in document order; `data-at`\n * (`'-=200'`, `'<'`, `'label+=100'`, ms), `data-duration` and `data-label`\n * fine-tune it.\n *\n * Attributes: `trigger` (`view` default · `click` · `manual`), `scrub`\n * (progress follows scroll instead of playing), `overlap` (ms each step\n * overlaps the previous, default 0), `duration` (600), `stagger` (ms),\n * `repeat` (replay every time it enters the viewport). Methods: `play()`,\n * `reverse()`, `seek(t)`; property `timeline`. Event `usa:complete`.\n * Reduced motion: steps appear in their final state.\n */\nexport interface UsaTimelineElement extends UsaElement {\n readonly timeline: Timeline | null;\n play(): Promise<void>;\n reverse(): Promise<void>;\n seek(to: number | string): void;\n}\n\nexport function defineTimeline(tag = 'usa-timeline'): CustomElementConstructor | undefined {\n return defineElement(\n tag,\n (Base) =>\n class UsaTimeline extends Base {\n static get observedAttributes(): string[] {\n return ['scrub', 'trigger', 'overlap'];\n }\n private _tl: Timeline | null = null;\n\n get timeline(): Timeline | null {\n return this._tl;\n }\n\n play(): Promise<void> {\n return this._tl ? this._tl.play(0).then(() => void this.emit('complete')) : Promise.resolve();\n }\n\n reverse(): Promise<void> {\n return this._tl ? this._tl.reverse() : Promise.resolve();\n }\n\n seek(to: number | string): void {\n this._tl?.seek(to);\n }\n\n mount(): void {\n const overlap = this.num('overlap', 0);\n const tl = (this._tl = timeline({ defaults: { duration: this.num('duration', 600), stagger: this.num('stagger', 0) } }));\n this.querySelectorAll<HTMLElement>('[data-tl]').forEach((el, i) => {\n if (el.dataset.label) tl.label(el.dataset.label);\n const name = el.dataset.tl || 'fade';\n tl.to(el, TIMELINE_PRESETS[name] ? name : 'fade', {\n at: el.dataset.at ?? (i && overlap ? `-=${overlap}` : undefined),\n duration: el.dataset.duration ? Number(el.dataset.duration) : undefined,\n });\n });\n this.onCleanup(() => tl.cancel());\n if (this.reduced) {\n tl.seek(tl.duration);\n return;\n }\n if (this.flag('scrub')) {\n this.onCleanup(tl.scrub(this, { smooth: 0.2 }));\n return;\n }\n tl.seek(0);\n const trigger = this.str('trigger', 'view');\n if (trigger === 'click') this.listen(this, 'click', () => void this.play());\n else if (trigger === 'view') {\n let played = false;\n this.inView((v) => {\n if (v && (!played || this.flag('repeat'))) {\n played = true;\n void this.play();\n } else if (!v && this.flag('repeat')) tl.seek(0);\n }, { threshold: 0.2 });\n }\n }\n\n unmount(): void {\n this._tl = null;\n }\n },\n { id: 'timeline', text: css }\n );\n}\n","/**\n * use-scroll-animate/components/timeline — choreography (v3.1).\n * `timeline()` chains, overlaps, labels, seeks, reverses and scroll-scrubs\n * WAAPI animations on one playhead; `<usa-timeline>` builds one from\n * `data-tl` children.\n */\nimport { defineTimeline, type UsaTimelineElement } from './timeline-el';\n\nexport { defineTimeline };\nexport { timeline, resolvePosition, TIMELINE_PRESETS } from './core';\nexport type { Timeline, TimelineOptions, TimelineStepOptions, TimelinePosition, ScrubOptions } from './core';\nexport type { UsaTimelineElement };\nexport { configureComponents, prefersReducedMotion } from '../base';\nexport type { ComponentsConfig, UsaElement } from '../base';\n\n/** Register every component of this category under its default tag. */\nexport function defineTimelineComponents(): void {\n defineTimeline();\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'usa-timeline': UsaTimelineElement;\n }\n}\n","import { clamp } from '../base';\n\nexport interface PanState {\n /** Offset from the gesture start (px). */\n dx: number;\n dy: number;\n /** Velocity (px/s). */\n vx: number;\n vy: number;\n first: boolean;\n last: boolean;\n event: Event;\n}\nexport type SwipeDirection = 'left' | 'right' | 'up' | 'down';\nexport interface SwipeState { direction: SwipeDirection; velocity: number; dx: number; dy: number }\nexport interface PinchState { scale: number; /** Midpoint of the two pointers (client px). */ x: number; y: number; first: boolean; last: boolean }\nexport interface PressState { x: number; y: number }\n\nexport interface GestureHandlers {\n onPan?: (s: PanState) => void;\n onSwipe?: (s: SwipeState) => void;\n onPinch?: (s: PinchState) => void;\n onLongPress?: (s: PressState) => void;\n onTap?: (s: PressState) => void;\n onDoubleTap?: (s: PressState) => void;\n}\n\nexport interface GestureOptions {\n /** Restrict panning to an axis. */\n axis?: 'x' | 'y';\n /** Movement (px) before a pan starts (default 4). */\n threshold?: number;\n /** Minimum distance (px, default 40) and speed (px/s, default 300) for a swipe. */\n swipeDistance?: number;\n swipeVelocity?: number;\n /** Long-press delay (ms, default 500). */\n longPress?: number;\n /** Ctrl/⌘ + wheel (trackpad pinch) counts as pinch (default true). */\n wheelPinch?: boolean;\n}\n\n/** The swipe a pointer release represents, or `null` (pure). */\nexport function swipeDirection(dx: number, dy: number, vx: number, vy: number, o: { distance?: number; velocity?: number; axis?: 'x' | 'y' } = {}): SwipeState | null {\n const dist = o.distance ?? 40;\n const vel = o.velocity ?? 300;\n const horiz = o.axis === 'x' || (o.axis !== 'y' && Math.abs(dx) >= Math.abs(dy));\n const d = horiz ? dx : dy;\n const v = horiz ? vx : vy;\n if (Math.abs(d) < dist && Math.abs(v) < vel * 2) return null;\n if (Math.abs(v) < vel && Math.abs(d) < dist * 3) return null;\n const direction: SwipeDirection = horiz ? (d > 0 ? 'right' : 'left') : d > 0 ? 'down' : 'up';\n return { direction, velocity: Math.abs(v), dx, dy };\n}\n\n/** Scale between two pointer distances, clamped to [min, max] (pure). */\nexport function pinchScale(startDistance: number, distance: number, base = 1, min = 0.5, max = 4): number {\n if (!startDistance) return base;\n return clamp(base * (distance / startDistance), min, max);\n}\n\ntype P = { x: number; y: number };\nconst pid = (e: any): number => (typeof e.pointerId === 'number' ? e.pointerId : 1);\n\n/**\n * One recognizer for pan, swipe, pinch (two pointers or Ctrl + wheel),\n * long-press, tap and double-tap, with velocities ready to hand to a spring\n * (`createSpring().set(target, velocity)`). Works with mouse, touch and pen\n * through Pointer Events. Returns a cleanup function.\n *\n * @example\n * const x = createSpring({ onUpdate: (v) => (card.style.translate = `${v}px`) });\n * gesture(card, {\n * onPan: ({ dx, last, vx }) => (last ? x.set(0, vx) : x.jump(dx)),\n * onSwipe: ({ direction }) => dismiss(direction),\n * }, { axis: 'x' });\n */\nexport function gesture(el: HTMLElement, h: GestureHandlers, o: GestureOptions = {}): () => void {\n const pts = new Map<number, P>();\n let start: P = { x: 0, y: 0 };\n let last: P & { t: number } = { x: 0, y: 0, t: 0 };\n let vx = 0;\n let vy = 0;\n let panning = false;\n let pinch: { d0: number; first: boolean } | null = null;\n let pinchScaleNow = 1;\n let press: ReturnType<typeof setTimeout> | undefined;\n let pressed = false;\n let lastTap = -1e9;\n const th = o.threshold ?? 4;\n const dist = () => {\n const [a, b] = [...pts.values()];\n return Math.hypot(a.x - b.x, a.y - b.y);\n };\n const mid = () => {\n const [a, b] = [...pts.values()];\n return { x: (a.x + b.x) / 2, y: (a.y + b.y) / 2 };\n };\n const t = (e: Event) => (e.timeStamp || Date.now());\n\n const down = (e: PointerEvent) => {\n pts.set(pid(e), { x: e.clientX, y: e.clientY });\n try { el.setPointerCapture?.(pid(e)); } catch { /* jsdom / synthetic */ }\n if (pts.size === 2 && h.onPinch) {\n clearTimeout(press);\n if (panning) h.onPan?.({ dx: last.x - start.x, dy: last.y - start.y, vx: 0, vy: 0, first: false, last: true, event: e });\n panning = false;\n pinch = { d0: dist(), first: true };\n return;\n }\n if (pts.size > 1) return;\n start = { x: e.clientX, y: e.clientY };\n last = { ...start, t: t(e) };\n vx = vy = 0;\n pressed = false;\n if (h.onLongPress) press = setTimeout(() => { pressed = true; h.onLongPress?.({ x: start.x, y: start.y }); }, o.longPress ?? 500);\n };\n const move = (e: PointerEvent) => {\n if (!pts.has(pid(e))) return;\n pts.set(pid(e), { x: e.clientX, y: e.clientY });\n if (pinch && pts.size >= 2) {\n const m = mid();\n pinchScaleNow = pinchScale(pinch.d0, dist(), 1, 0.05, 20);\n h.onPinch?.({ scale: pinchScaleNow, x: m.x, y: m.y, first: pinch.first, last: false });\n pinch.first = false;\n return;\n }\n const dx = e.clientX - start.x;\n const dy = e.clientY - start.y;\n const dt = Math.max(1, t(e) - last.t) / 1000;\n vx = (e.clientX - last.x) / dt;\n vy = (e.clientY - last.y) / dt;\n last = { x: e.clientX, y: e.clientY, t: t(e) };\n if (!panning) {\n const off = o.axis === 'x' ? Math.abs(dx) : o.axis === 'y' ? Math.abs(dy) : Math.hypot(dx, dy);\n if (off < th) return;\n clearTimeout(press);\n if (o.axis && Math.abs(o.axis === 'x' ? dy : dx) > off) { pts.delete(pid(e)); return; } // wrong axis: let the page scroll\n panning = true;\n h.onPan?.({ dx: o.axis === 'y' ? 0 : dx, dy: o.axis === 'x' ? 0 : dy, vx, vy, first: true, last: false, event: e });\n return;\n }\n if (e.cancelable) e.preventDefault();\n h.onPan?.({ dx: o.axis === 'y' ? 0 : dx, dy: o.axis === 'x' ? 0 : dy, vx, vy, first: false, last: false, event: e });\n };\n const up = (e: PointerEvent) => {\n if (!pts.has(pid(e))) return;\n pts.delete(pid(e));\n clearTimeout(press);\n if (pinch) {\n if (pts.size < 2) {\n h.onPinch?.({ scale: pinchScaleNow, ...start, first: false, last: true });\n pinch = null;\n pts.clear();\n }\n return;\n }\n const dx = e.clientX - start.x;\n const dy = e.clientY - start.y;\n if (panning) {\n panning = false;\n if (t(e) - last.t > 80) vx = vy = 0; // paused before release\n h.onPan?.({ dx: o.axis === 'y' ? 0 : dx, dy: o.axis === 'x' ? 0 : dy, vx, vy, first: false, last: true, event: e });\n const s = swipeDirection(dx, dy, vx, vy, { distance: o.swipeDistance, velocity: o.swipeVelocity, axis: o.axis });\n if (s) h.onSwipe?.(s);\n return;\n }\n if (pressed || e.type === 'pointercancel') return;\n const p = { x: e.clientX, y: e.clientY };\n const n = t(e);\n if (h.onDoubleTap && n - lastTap < 300) { lastTap = -1e9; h.onDoubleTap(p); return; }\n lastTap = n;\n h.onTap?.(p);\n };\n const wheel = (e: WheelEvent) => {\n if (!h.onPinch || o.wheelPinch === false || !e.ctrlKey) return;\n e.preventDefault();\n const s = Math.exp(-e.deltaY / 100);\n h.onPinch({ scale: s, x: e.clientX, y: e.clientY, first: true, last: true });\n };\n const opts: AddEventListenerOptions = { passive: false };\n el.addEventListener('pointerdown', down as EventListener);\n el.addEventListener('pointermove', move as EventListener, opts);\n el.addEventListener('pointerup', up as EventListener);\n el.addEventListener('pointercancel', up as EventListener);\n el.addEventListener('wheel', wheel as EventListener, opts);\n if (o.axis && !el.style.touchAction) el.style.touchAction = o.axis === 'x' ? 'pan-y' : 'pan-x';\n else if (!o.axis && !el.style.touchAction && (h.onPan || h.onPinch)) el.style.touchAction = 'none';\n return () => {\n clearTimeout(press);\n el.removeEventListener('pointerdown', down as EventListener);\n el.removeEventListener('pointermove', move as EventListener, opts);\n el.removeEventListener('pointerup', up as EventListener);\n el.removeEventListener('pointercancel', up as EventListener);\n el.removeEventListener('wheel', wheel as EventListener, opts);\n };\n}\n","import { defineElement, type UsaElement } from '../base';\nimport { createSpring, type SpringValue } from '../physics/spring';\nimport { gesture, type SwipeDirection } from './core';\nimport css from './gesture.css?raw';\n\n/**\n * `<usa-swipeable>` — swipe-to-dismiss / swipe actions. The content follows\n * the finger (rubber-banded past `distance`), flies out on a swipe or a drag\n * past `distance`, otherwise springs home with the release velocity.\n *\n * Attributes: `axis` (`x` default · `y`), `distance` (px, 120), `preset`\n * (spring), `dismiss` (remove the element after flying out), `disabled`.\n * Keyboard: Delete/Backspace dismisses, ←/→ swipe. Events `usa:swipe`\n * (`{ direction }`, cancelable), `usa:dismiss`. Methods `swipe(dir)`, `reset()`.\n * Reduced motion: no follow / fly-out animation, events still fire.\n */\nexport interface UsaSwipeableElement extends UsaElement {\n swipe(direction: SwipeDirection): void;\n reset(): void;\n readonly offset: number;\n}\n\nexport function defineSwipeable(tag = 'usa-swipeable'): CustomElementConstructor | undefined {\n return defineElement(\n tag,\n (Base) =>\n class UsaSwipeable extends Base {\n static get observedAttributes(): string[] {\n return ['axis', 'disabled'];\n }\n private _s!: SpringValue;\n private _off = 0;\n\n get offset(): number {\n return this._off;\n }\n\n private put(v: number): void {\n this._off = v;\n this.style.setProperty('--usa-swipe', `${v}px`);\n this.style.setProperty('--usa-swipe-p', String(Math.min(1, Math.abs(v) / this.num('distance', 120))));\n }\n\n swipe(direction: SwipeDirection): void {\n if (!this.emit('swipe', { direction })) return this.reset();\n const sign = direction === 'left' || direction === 'up' ? -1 : 1;\n const far = sign * ((this.str('axis', 'x') === 'y' ? this.offsetHeight : this.offsetWidth) + 80 || 600);\n const done = () => {\n this.emit('dismiss', { direction });\n if (this.flag('dismiss')) this.remove();\n };\n if (this.reduced) {\n this.put(0);\n return done();\n }\n this.setAttribute('data-gone', '');\n this._s = createSpring({ spring: 'stiff', value: this._off, onUpdate: (v) => this.put(v), onRest: done });\n this._s.set(far, sign * 1500);\n }\n\n reset(): void {\n this.removeAttribute('data-gone');\n if (this.reduced) return this.put(0);\n this._s.set(0);\n }\n\n mount(): void {\n this._s = createSpring({ spring: this.str('preset', 'default'), onUpdate: (v) => this.put(v) });\n if (!this.hasAttribute('tabindex')) this.tabIndex = 0;\n const y = this.str('axis', 'x') === 'y';\n const max = () => this.num('distance', 120);\n this.onCleanup(\n gesture(this, {\n onPan: ({ dx, dy, vx, vy, last }) => {\n if (this.flag('disabled')) return;\n const d = y ? dy : dx;\n if (!last) {\n this._s.stop();\n if (!this.reduced) this.put(Math.abs(d) > max() ? Math.sign(d) * (max() + (Math.abs(d) - max()) * 0.35) : d);\n return;\n }\n if (Math.abs(d) > max()) this.swipe(y ? (d > 0 ? 'down' : 'up') : d > 0 ? 'right' : 'left');\n else if (!this.hasAttribute('data-gone')) {\n if (this.reduced) this.put(0);\n else this._s.set(0, y ? vy : vx);\n }\n },\n onSwipe: ({ direction }) => {\n if (this.flag('disabled') || this.hasAttribute('data-gone')) return;\n if (y === (direction === 'up' || direction === 'down')) this.swipe(direction);\n },\n }, { axis: y ? 'y' : 'x' })\n );\n this.listen(this, 'keydown', (e: KeyboardEvent) => {\n if (this.flag('disabled')) return;\n const map: Record<string, SwipeDirection> = y ? { ArrowUp: 'up', ArrowDown: 'down' } : { ArrowLeft: 'left', ArrowRight: 'right' };\n if (e.key === 'Delete' || e.key === 'Backspace') this.swipe(y ? 'up' : 'left');\n else if (map[e.key]) this.swipe(map[e.key]);\n else return;\n e.preventDefault();\n });\n }\n\n unmount(): void {\n this._s?.stop();\n }\n },\n { id: 'gesture', text: css }\n );\n}\n","import { defineElement, clamp, type UsaElement } from '../base';\nimport { createSpring, type SpringValue } from '../physics/spring';\nimport { gesture } from './core';\nimport css from './gesture.css?raw';\n\n/**\n * `<usa-pinch-zoom>` — pinch (two fingers or Ctrl/⌘ + wheel / trackpad\n * pinch) to zoom its content, pan while zoomed, double-tap to toggle zoom;\n * scale and position spring back inside the bounds on release.\n *\n * Attributes: `min` (1), `max` (4), `double-tap` (zoom level, 2), `preset`.\n * Keyboard: `+` / `-` / `0`. Property `scale`, method `zoomTo(scale)`.\n * Event `usa:zoom` (`{ scale }`). Reduced motion: zoom changes instantly.\n */\nexport interface UsaPinchZoomElement extends UsaElement {\n readonly scale: number;\n zoomTo(scale: number): void;\n}\n\nexport function definePinchZoom(tag = 'usa-pinch-zoom'): CustomElementConstructor | undefined {\n return defineElement(\n tag,\n (Base) =>\n class UsaPinchZoom extends Base {\n private _k!: SpringValue;\n private _x!: SpringValue;\n private _y!: SpringValue;\n private _v = { k: 1, x: 0, y: 0 };\n\n get scale(): number {\n return this._v.k;\n }\n\n private paint(): void {\n const { k, x, y } = this._v;\n this.style.setProperty('--usa-zoom', String(k));\n this.style.setProperty('--usa-zoom-x', `${x}px`);\n this.style.setProperty('--usa-zoom-y', `${y}px`);\n this.toggleAttribute('data-zoomed', k > 1.01);\n }\n\n private bound(k: number, x: number, y: number) {\n const w = (this.clientWidth * (k - 1)) / 2;\n const h = (this.clientHeight * (k - 1)) / 2;\n return { x: clamp(x, -w, w), y: clamp(y, -h, h) };\n }\n\n zoomTo(scale: number): void {\n const k = clamp(scale, this.num('min', 1), this.num('max', 4));\n const b = this.bound(k, this._v.x, this._v.y);\n if (this.reduced) {\n this._v = { k, ...b };\n this.paint();\n } else {\n this._k.set(k);\n this._x.set(b.x);\n this._y.set(b.y);\n }\n this.emit('zoom', { scale: k });\n }\n\n mount(): void {\n const preset = this.str('preset', 'gentle');\n this._k = createSpring({ spring: preset, value: this._v.k, onUpdate: (v) => ((this._v.k = v), this.paint()) });\n this._x = createSpring({ spring: preset, value: this._v.x, onUpdate: (v) => ((this._v.x = v), this.paint()) });\n this._y = createSpring({ spring: preset, value: this._v.y, onUpdate: (v) => ((this._v.y = v), this.paint()) });\n if (!this.hasAttribute('tabindex')) this.tabIndex = 0;\n let base = 1;\n let ox = 0;\n let oy = 0;\n this.onCleanup(\n gesture(this, {\n onPinch: ({ scale, first, last }) => {\n if (first) base = this._v.k;\n const k = clamp(base * scale, this.num('min', 1) * 0.7, this.num('max', 4) * 1.3);\n if (last) return this.zoomTo(k);\n this._k.jump(k);\n },\n onPan: ({ dx, dy, vx, vy, first, last }) => {\n if (this._v.k <= 1.01) return;\n if (first) ((ox = this._v.x), (oy = this._v.y));\n if (!last) {\n this._x.jump(ox + dx);\n this._y.jump(oy + dy);\n return;\n }\n const b = this.bound(this._v.k, ox + dx + vx * 0.15, oy + dy + vy * 0.15);\n this._x.set(b.x, vx);\n this._y.set(b.y, vy);\n },\n onDoubleTap: () => this.zoomTo(this._v.k > 1.01 ? 1 : this.num('double-tap', 2)),\n })\n );\n this.listen(this, 'keydown', (e: KeyboardEvent) => {\n if (e.key === '+' || e.key === '=') this.zoomTo(this._v.k * 1.25);\n else if (e.key === '-') this.zoomTo(this._v.k / 1.25);\n else if (e.key === '0') this.zoomTo(1);\n else return;\n e.preventDefault();\n });\n this.paint();\n }\n\n unmount(): void {\n [this._k, this._x, this._y].forEach((s) => s?.stop());\n }\n },\n { id: 'gesture', text: css }\n );\n}\n","/**\n * use-scroll-animate/components/gesture — unified gestures (v3.2).\n * `gesture()` recognises pan, swipe, pinch, long-press, tap and double-tap\n * with release velocities for springs; `<usa-swipeable>` (swipe-to-dismiss)\n * and `<usa-pinch-zoom>` are built on it.\n */\nimport { defineSwipeable, type UsaSwipeableElement } from './swipeable';\nimport { definePinchZoom, type UsaPinchZoomElement } from './pinch-zoom';\n\nexport { defineSwipeable, definePinchZoom };\nexport { gesture, swipeDirection, pinchScale } from './core';\nexport type { GestureHandlers, GestureOptions, PanState, SwipeState, SwipeDirection, PinchState, PressState } from './core';\nexport type { UsaSwipeableElement, UsaPinchZoomElement };\nexport { configureComponents, prefersReducedMotion } from '../base';\nexport type { ComponentsConfig, UsaElement } from '../base';\n\n/** Register every component of this category under its default tag. */\nexport function defineGestureComponents(): void {\n defineSwipeable();\n definePinchZoom();\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'usa-swipeable': UsaSwipeableElement;\n 'usa-pinch-zoom': UsaPinchZoomElement;\n }\n}\n","import { prefersReducedMotion, motionScale, raf, caf, now, clamp } from '../base';\n\nconst NUM = /-?(?:\\d+\\.?\\d*|\\.\\d+)(?:e[-+]?\\d+)?/gi;\n\n/** `true` when two path strings share the same commands (so their numbers can be interpolated). */\nexport function pathsCompatible(a: string, b: string): boolean {\n return a.replace(NUM, '#').replace(/[\\s,]+/g, ' ').trim() === b.replace(NUM, '#').replace(/[\\s,]+/g, ' ').trim();\n}\n\n/**\n * Path data between `a` and `b` at `t` (0–1). Paths with the same command\n * structure morph number-by-number; others switch at the midpoint.\n */\nexport function interpolatePath(a: string, b: string, t: number): string {\n if (t <= 0) return a;\n if (t >= 1) return b;\n if (!pathsCompatible(a, b)) return t < 0.5 ? a : b;\n const nb = b.match(NUM) || [];\n let i = 0;\n return a.replace(NUM, (n) => {\n const v = Number(n) + (Number(nb[i++]) - Number(n)) * t;\n return String(Math.round(v * 1000) / 1000);\n });\n}\n\nconst ease = (t: number) => 1 - Math.pow(1 - t, 3);\n\nexport interface MorphOptions {\n duration?: number;\n easing?: (t: number) => number;\n}\n\n/** Animate a `<path>`'s `d` to `to`. Resolves when done; instant under reduced motion. */\nexport function morphTo(path: SVGPathElement | Element, to: string, o: MorphOptions = {}): Promise<void> {\n const from = path.getAttribute('d') || to;\n const dur = (o.duration ?? 500) * motionScale();\n const prev = (path as any).__usaMorph as number | undefined;\n if (prev) caf(prev);\n if (prefersReducedMotion() || dur <= 0 || from === to) {\n path.setAttribute('d', to);\n return Promise.resolve();\n }\n const fn = o.easing || ease;\n const t0 = now();\n return new Promise((resolve) => {\n const step = () => {\n const t = clamp((now() - t0) / dur, 0, 1);\n path.setAttribute('d', interpolatePath(from, to, fn(t)));\n if (t < 1) (path as any).__usaMorph = raf(step);\n else {\n (path as any).__usaMorph = 0;\n resolve();\n }\n };\n (path as any).__usaMorph = raf(step);\n });\n}\n\nconst DRAWABLE = 'path, line, polyline, polygon, circle, ellipse, rect';\n\n/**\n * Prepare every stroke in `root` for line drawing (normalised `pathLength=1`,\n * so no `getTotalLength()` is needed) and return a function that sets\n * progress 0–1, optionally staggered between shapes.\n */\nexport function drawLines(root: Element, o: { stagger?: number } = {}): (progress: number) => void {\n const shapes = Array.from(root.querySelectorAll(DRAWABLE)) as SVGElement[];\n shapes.forEach((s) => {\n s.setAttribute('pathLength', '1');\n s.style.strokeDasharray = '1 1';\n });\n const st = clamp(o.stagger ?? 0, 0, 0.9);\n return (p: number) => {\n const n = shapes.length;\n shapes.forEach((s, i) => {\n const start = n > 1 ? (i / (n - 1)) * st : 0;\n const local = clamp((p - start) / (1 - st || 1), 0, 1);\n s.style.strokeDashoffset = String(1 - local);\n });\n };\n}\n","import { defineElement, raf, caf, now, clamp, motionScale, type UsaElement } from '../base';\nimport { drawLines } from './core';\nimport css from './svg.css?raw';\n\n/**\n * `<usa-draw>` — line drawing: every stroke of the SVG inside draws itself.\n * Attributes: `trigger` (`view` default · `hover` · `click` · `scrub`),\n * `duration` (1600), `stagger` (0–0.9 share of the timeline, 0.2), `fill`\n * (fade the fill in after drawing), `repeat`. Method `play()`, property\n * `progress`, event `usa:complete`. Reduced motion: drawn immediately.\n */\nexport interface UsaDrawElement extends UsaElement {\n play(): void;\n progress: number;\n}\n\nexport function defineDraw(tag = 'usa-draw'): CustomElementConstructor | undefined {\n return defineElement(\n tag,\n (Base) =>\n class UsaDraw extends Base {\n private _set: (p: number) => void = () => {};\n private _p = 0;\n private _id = 0;\n\n get progress(): number {\n return this._p;\n }\n set progress(p: number) {\n this._p = clamp(p, 0, 1);\n this._set(this._p);\n this.toggleAttribute('data-drawn', this._p >= 1);\n }\n\n play(): void {\n caf(this._id);\n if (this.reduced) {\n this.progress = 1;\n return void this.emit('complete');\n }\n const dur = this.num('duration', 1600) * motionScale();\n const t0 = now();\n this.progress = 0;\n const step = () => {\n this.progress = (now() - t0) / dur;\n if (this._p < 1) this._id = raf(step);\n else this.emit('complete');\n };\n this._id = raf(step);\n }\n\n mount(): void {\n this._set = drawLines(this, { stagger: this.num('stagger', 0.2) });\n const trigger = this.str('trigger', 'view');\n if (this.reduced) {\n this.progress = 1;\n return;\n }\n this.progress = 0;\n if (trigger === 'scrub') {\n const update = () => {\n const r = this.getBoundingClientRect();\n const vh = window.innerHeight || 1;\n this.progress = (vh - r.top) / (vh * 0.6 + r.height * 0.4 || 1);\n };\n this.listen(window, 'scroll', update, { passive: true });\n update();\n } else if (trigger === 'hover') this.listen(this, 'pointerenter', () => this.play());\n else if (trigger === 'click') this.listen(this, 'click', () => this.play());\n else {\n let done = false;\n this.inView((v) => {\n if (v && (!done || this.flag('repeat'))) {\n done = true;\n this.play();\n } else if (!v && this.flag('repeat')) this.progress = 0;\n }, { threshold: 0.3 });\n }\n this.onCleanup(() => caf(this._id));\n }\n },\n { id: 'svg', text: css }\n );\n}\n","import { defineElement, type UsaElement } from '../base';\nimport { morphTo } from './core';\nimport css from './svg.css?raw';\n\n/**\n * `<usa-morph>` — morphs an SVG path through a list of shapes.\n * Put a `<svg><path></path></svg>` inside (one is created otherwise) and set\n * `paths=\"M… | M… | M…\"` (same command structure morphs smoothly, others\n * switch at the midpoint). Attributes: `trigger` (`click` default · `hover`\n * · `auto` · `view`), `interval` (ms for auto, 2000), `duration` (600).\n * Property `index`, method `next()`, event `usa:change`.\n * Reduced motion: shapes switch without animating; `auto` does not cycle.\n */\nexport interface UsaMorphElement extends UsaElement {\n readonly index: number;\n next(): Promise<void>;\n}\n\nexport function defineMorph(tag = 'usa-morph'): CustomElementConstructor | undefined {\n return defineElement(\n tag,\n (Base) =>\n class UsaMorph extends Base {\n static get observedAttributes(): string[] {\n return ['paths', 'trigger'];\n }\n private _i = 0;\n private _path: SVGPathElement | null = null;\n\n get index(): number {\n return this._i;\n }\n\n private list(): string[] {\n return this.str('paths').split('|').map((s) => s.trim()).filter(Boolean);\n }\n\n next(): Promise<void> {\n const l = this.list();\n if (!this._path || l.length < 2) return Promise.resolve();\n this._i = (this._i + 1) % l.length;\n this.emit('change', { index: this._i });\n return morphTo(this._path, l[this._i], { duration: this.num('duration', 600) });\n }\n\n mount(): void {\n let path = this.querySelector('path');\n if (!path) {\n this.innerHTML = '<svg viewBox=\"0 0 100 100\" aria-hidden=\"true\"><path></path></svg>';\n path = this.querySelector('path');\n }\n this._path = path as SVGPathElement;\n const l = this.list();\n if (l[0]) this._path.setAttribute('d', l[this._i % l.length]);\n const t = this.str('trigger', 'click');\n if (t === 'hover') {\n this.listen(this, 'pointerenter', () => void this.next());\n this.listen(this, 'pointerleave', () => void this.next());\n } else if (t === 'auto' || t === 'view') {\n let timer: ReturnType<typeof setInterval> | undefined;\n this.inView((v) => {\n clearInterval(timer);\n if (!v || this.reduced) return;\n if (t === 'view') return void this.next();\n timer = setInterval(() => void this.next(), this.num('interval', 2000));\n });\n this.onCleanup(() => clearInterval(timer));\n } else {\n if (!this.hasAttribute('tabindex')) this.tabIndex = 0;\n if (!this.hasAttribute('role')) this.setAttribute('role', 'button');\n this.listen(this, 'click', () => void this.next());\n this.listen(this, 'keydown', (e: KeyboardEvent) => {\n if (e.key === 'Enter' || e.key === ' ') {\n e.preventDefault();\n void this.next();\n }\n });\n }\n }\n },\n { id: 'svg', text: css }\n );\n}\n","import { defineElement, EASE_OUT, type UsaElement } from '../base';\nimport css from './svg.css?raw';\n\n/** Clip-path start / end frames for each reveal shape. */\nexport const MASK_SHAPES: Record<string, [string, string]> = {\n circle: ['circle(0% at 50% 50%)', 'circle(75% at 50% 50%)'],\n diamond: ['polygon(50% 50%, 50% 50%, 50% 50%, 50% 50%)', 'polygon(50% -50%, 150% 50%, 50% 150%, -50% 50%)'],\n wipe: ['inset(0 100% 0 0)', 'inset(0 0% 0 0)'],\n 'wipe-up': ['inset(100% 0 0 0)', 'inset(0% 0 0 0)'],\n iris: ['inset(50% 50% 50% 50% round 50%)', 'inset(0% 0% 0% 0% round 0%)'],\n star: [\n 'polygon(50% 50%, 50% 50%, 50% 50%, 50% 50%, 50% 50%, 50% 50%, 50% 50%, 50% 50%, 50% 50%, 50% 50%)',\n 'polygon(50% -60%, 80% 20%, 160% 30%, 95% 85%, 115% 170%, 50% 125%, -15% 170%, 5% 85%, -60% 30%, 20% 20%)',\n ],\n};\n\n/**\n * `<usa-mask-reveal>` — reveals its content through a growing mask shape.\n * Attributes: `shape` (`circle` default · `diamond` · `wipe` · `wipe-up` ·\n * `iris` · `star`), `duration` (900), `delay`, `trigger` (`view` · `hover`\n * · `click`), `repeat`, `at` (`x% y%` origin for circle). Event\n * `usa:complete`. Reduced motion: content is shown without the mask.\n */\nexport interface UsaMaskRevealElement extends UsaElement {\n reveal(): Promise<void>;\n}\n\nexport function defineMaskReveal(tag = 'usa-mask-reveal'): CustomElementConstructor | undefined {\n return defineElement(\n tag,\n (Base) =>\n class UsaMaskReveal extends Base {\n private frames(): [string, string] {\n const s = MASK_SHAPES[this.str('shape', 'circle')] || MASK_SHAPES.circle;\n const at = this.str('at');\n return at && s[0].startsWith('circle') ? [s[0].replace('50% 50%', at), s[1].replace('50% 50%', at)] : s;\n }\n\n reveal(): Promise<void> {\n const [a, b] = this.frames();\n this.setAttribute('data-state', 'revealing');\n const anim = this.motion(this, [{ clipPath: a }, { clipPath: b }], { duration: this.num('duration', 900), delay: this.num('delay', 0), easing: EASE_OUT, fill: 'forwards' });\n const done = () => {\n this.setAttribute('data-state', 'visible');\n this.emit('complete');\n };\n if (!anim) return Promise.resolve(done());\n return anim.finished.then(done, () => {});\n }\n\n mount(): void {\n if (this.reduced) {\n this.setAttribute('data-state', 'visible');\n return;\n }\n this.setAttribute('data-state', 'hidden');\n this.style.clipPath = this.frames()[0];\n this.onCleanup(() => (this.style.clipPath = ''));\n const t = this.str('trigger', 'view');\n if (t === 'hover') this.listen(this, 'pointerenter', () => void this.reveal());\n else if (t === 'click') this.listen(this, 'click', () => void this.reveal());\n else {\n let done = false;\n this.inView((v) => {\n if (v && (!done || this.flag('repeat'))) {\n done = true;\n void this.reveal();\n } else if (!v && this.flag('repeat')) {\n this.getAnimations?.().forEach((x) => x.cancel());\n this.style.clipPath = this.frames()[0];\n this.setAttribute('data-state', 'hidden');\n }\n }, { threshold: 0.25 });\n }\n }\n },\n { id: 'svg', text: css }\n );\n}\n","import { defineElement, type UsaElement } from '../base';\nimport css from './svg.css?raw';\n\ntype Icon = { d: string; frames: Keyframe[]; duration: number; origin?: string };\n\n/** Built-in animated icons (24×24 strokes) and the motion each one plays. */\nexport const ANIM_ICONS: Record<string, Icon> = {\n bell: { d: 'M6 16V11a6 6 0 0 1 12 0v5l2 2H4l2-2M10 20a2 2 0 0 0 4 0', duration: 800, origin: '50% 10%', frames: [{ rotate: '0deg' }, { rotate: '18deg' }, { rotate: '-14deg' }, { rotate: '9deg' }, { rotate: '-5deg' }, { rotate: '0deg' }] },\n heart: { d: 'M12 20s-7-4.4-7-10a4 4 0 0 1 7-2.6A4 4 0 0 1 19 10c0 5.6-7 10-7 10z', duration: 600, frames: [{ scale: 1 }, { scale: 1.3 }, { scale: 0.92 }, { scale: 1.12 }, { scale: 1 }] },\n check: { d: 'M4 12.5l5 5L20 6.5', duration: 600, frames: [{ strokeDashoffset: 1 }, { strokeDashoffset: 0 }] },\n arrow: { d: 'M4 12h15M13 6l6 6-6 6', duration: 600, frames: [{ translate: '0 0' }, { translate: '5px 0' }, { translate: '0 0' }] },\n star: { d: 'M12 3l2.7 5.6 6.1.9-4.4 4.3 1 6.1L12 17l-5.4 2.9 1-6.1-4.4-4.3 6.1-.9z', duration: 700, frames: [{ rotate: '0deg', scale: 1 }, { rotate: '72deg', scale: 1.2 }, { rotate: '144deg', scale: 1 }] },\n gear: { d: 'M12 8a4 4 0 1 0 0 8 4 4 0 0 0 0-8zM12 2v3M12 19v3M2 12h3M19 12h3M4.9 4.9l2.1 2.1M17 17l2.1 2.1M4.9 19.1L7 17M17 7l2.1-2.1', duration: 900, frames: [{ rotate: '0deg' }, { rotate: '180deg' }] },\n search: { d: 'M10.5 4a6.5 6.5 0 1 0 0 13 6.5 6.5 0 0 0 0-13zM15.5 15.5L20 20', duration: 700, frames: [{ rotate: '0deg' }, { rotate: '-15deg' }, { rotate: '10deg' }, { rotate: '0deg' }] },\n download: { d: 'M12 4v11M7 10l5 5 5-5M5 20h14', duration: 700, frames: [{ translate: '0 0' }, { translate: '0 3px' }, { translate: '0 0' }] },\n};\n\n/**\n * `<usa-anim-icon name=\"bell\">` — an animated stroke icon that plays its\n * motion on `trigger` (`hover` default · `click` · `view` · `loop`).\n * Attributes: `name` (see `ANIM_ICONS`), `size` (24), `label` (accessible\n * name; decorative when absent). Method `play()`. Reduced motion: static.\n */\nexport interface UsaAnimIconElement extends UsaElement {\n play(): void;\n}\n\nexport function defineAnimIcon(tag = 'usa-anim-icon'): CustomElementConstructor | undefined {\n return defineElement(\n tag,\n (Base) =>\n class UsaAnimIcon extends Base {\n static get observedAttributes(): string[] {\n return ['name', 'size', 'label'];\n }\n private icon(): Icon {\n return ANIM_ICONS[this.str('name', 'heart')] || ANIM_ICONS.heart;\n }\n\n play(): void {\n if (this.reduced) return;\n const svg = this.querySelector('svg');\n const i = this.icon();\n const target = i.frames[0].strokeDashoffset !== undefined ? this.querySelector('path') : svg;\n if (target) this.motion(target, i.frames, { duration: i.duration, easing: 'ease-in-out', iterations: this.str('trigger') === 'loop' ? Infinity : 1 });\n }\n\n mount(): void {\n const i = this.icon();\n const size = this.num('size', 24);\n const label = this.str('label');\n this.innerHTML = `<svg viewBox=\"0 0 24 24\" width=\"${size}\" height=\"${size}\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" style=\"transform-origin:${i.origin || '50% 50%'}\"${label ? ` role=\"img\" aria-label=\"${label.replace(/\"/g, '&quot;')}\"` : ' aria-hidden=\"true\"'}><path d=\"${i.d}\"${i.frames[0].strokeDashoffset !== undefined ? ' pathLength=\"1\" stroke-dasharray=\"1\"' : ''}></path></svg>`;\n const t = this.str('trigger', 'hover');\n if (t === 'click') this.listen(this, 'click', () => this.play());\n else if (t === 'view' || t === 'loop') this.inView((v) => v && this.play(), { threshold: 0.5 });\n else {\n this.listen(this, 'pointerenter', () => this.play());\n this.listen(this, 'focusin', () => this.play());\n }\n }\n },\n { id: 'svg', text: css }\n );\n}\n","/**\n * use-scroll-animate/components/svg — SVG animation (v3.3).\n * `<usa-draw>` (line drawing), `<usa-morph>` (path morph), `<usa-mask-reveal>`\n * (mask / clip-path reveals) and `<usa-anim-icon>` (animated icons), plus\n * `interpolatePath()`, `morphTo()`, `drawLines()`.\n */\nimport { defineDraw, type UsaDrawElement } from './draw';\nimport { defineMorph, type UsaMorphElement } from './morph';\nimport { defineMaskReveal, type UsaMaskRevealElement } from './mask-reveal';\nimport { defineAnimIcon, type UsaAnimIconElement } from './anim-icon';\n\nexport { defineDraw, defineMorph, defineMaskReveal, defineAnimIcon };\nexport { interpolatePath, pathsCompatible, morphTo, drawLines } from './core';\nexport type { MorphOptions } from './core';\nexport { MASK_SHAPES } from './mask-reveal';\nexport { ANIM_ICONS } from './anim-icon';\nexport type { UsaDrawElement, UsaMorphElement, UsaMaskRevealElement, UsaAnimIconElement };\nexport { configureComponents, prefersReducedMotion } from '../base';\nexport type { ComponentsConfig, UsaElement } from '../base';\n\n/** Register every component of this category under its default tag. */\nexport function defineSvgComponents(): void {\n defineDraw();\n defineMorph();\n defineMaskReveal();\n defineAnimIcon();\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'usa-draw': UsaDrawElement;\n 'usa-morph': UsaMorphElement;\n 'usa-mask-reveal': UsaMaskRevealElement;\n 'usa-anim-icon': UsaAnimIconElement;\n }\n}\n","/** Minimal WebGL runner: one full-canvas quad, one fragment shader, optional image texture. */\n\nexport const VERTEX = 'attribute vec2 p;varying vec2 v_uv;void main(){v_uv=p*.5+.5;gl_Position=vec4(p,0.,1.);}';\nconst HEAD = 'precision mediump float;varying vec2 v_uv;uniform float u_time;uniform vec2 u_resolution;uniform vec2 u_mouse;uniform float u_hover;uniform sampler2D u_tex;uniform vec4 u_ripples[4];\\n';\n\n/** Built-in fragment shaders (bodies; uniforms `u_time`, `u_resolution`, `u_mouse` 0–1, `u_hover` 0–1, `u_tex`, `u_ripples[4]` = x, y, age, strength). */\nexport const SHADERS: Record<string, string> = {\n gradient: 'void main(){vec2 u=v_uv;float t=u_time*.15;vec3 a=vec3(.39,.4,.95),b=vec3(.93,.29,.6),c=vec3(.13,.83,.93);float k=.5+.5*sin(u.x*3.+t*2.)*cos(u.y*2.-t);vec3 col=mix(mix(a,b,u.x+.2*sin(t)),c,k*.6);gl_FragColor=vec4(col,1.);}',\n plasma: 'void main(){vec2 u=v_uv*4.;float t=u_time*.6;float v=sin(u.x+t)+sin(u.y+t*.7)+sin(u.x+u.y+t*.5)+sin(length(u-2.+vec2(sin(t),cos(t)))*2.);vec3 col=.5+.5*cos(v+vec3(0.,2.,4.));gl_FragColor=vec4(col,1.);}',\n waves: 'void main(){vec2 u=v_uv;float t=u_time*.4;float w=0.;for(int i=0;i<4;i++){float f=float(i)+1.;w+=sin(u.x*6.*f+t*f)*.08/f;}float l=smoothstep(.0,.02,abs(u.y-.5-w));vec3 col=mix(vec3(.2,.5,1.),vec3(.04,.06,.15),l)+vec3(.1,.0,.2)*u.y;gl_FragColor=vec4(col,1.);}',\n aurora: 'void main(){vec2 u=v_uv;float t=u_time*.2;float b=0.;for(int i=0;i<3;i++){float f=float(i);b+=.4/abs((u.y-.6+.15*sin(u.x*3.+t+f*1.7))*(8.+f*4.));}vec3 col=vec3(.02,.03,.08)+b*mix(vec3(.1,.9,.6),vec3(.6,.3,1.),u.x)*.35;gl_FragColor=vec4(col,1.);}',\n distort: 'void main(){vec2 u=v_uv;vec2 d=u-u_mouse;float r=length(d);float k=u_hover*.08*exp(-r*r*18.);u-=normalize(d+1e-4)*k;float s=u_hover*.006;vec3 col=vec3(texture2D(u_tex,u+vec2(s,0.)).r,texture2D(u_tex,u).g,texture2D(u_tex,u-vec2(s,0.)).b);gl_FragColor=vec4(col,1.);}',\n liquid: 'void main(){vec2 u=v_uv;vec2 o=vec2(0.);for(int i=0;i<4;i++){vec4 r=u_ripples[i];if(r.w>0.){float d=distance(u,r.xy);float w=sin(d*60.-r.z*12.)*exp(-d*6.)*exp(-r.z*1.6)*r.w*.02;o+=normalize(u-r.xy+1e-4)*w;}}o+=vec2(sin(u.y*10.+u_time),cos(u.x*10.+u_time))*.002*u_hover;gl_FragColor=texture2D(u_tex,u+o);}',\n};\n\n/** Full fragment source for a preset or custom body (adds the shared header). */\nexport function fragmentSource(body: string): string {\n const src = SHADERS[body] || body;\n return /precision\\s+\\w+\\s+float/.test(src) ? src : HEAD + src;\n}\n\n/** `true` when the browser can create a WebGL context (cached). */\nlet support: boolean | undefined;\nexport function supportsWebGL(): boolean {\n if (support !== undefined) return support;\n try {\n const c = typeof document !== 'undefined' ? document.createElement('canvas') : null;\n support = !!(c && (c.getContext('webgl') || c.getContext('experimental-webgl')));\n } catch {\n support = false;\n }\n return support;\n}\n\nexport interface GLQuad {\n /** Draw a frame with these uniform values. */\n render(u: { time?: number; mouse?: [number, number]; hover?: number; ripples?: number[] }): void;\n /** Resize the drawing buffer to the canvas' CSS size × DPR (≤ 2). */\n resize(): void;\n /** Upload an image as `u_tex`. */\n texture(img: TexImageSource): void;\n dispose(): void;\n}\n\n/** Compile `frag` on a full-canvas quad, or `null` when WebGL / compilation is unavailable. */\nexport function glQuad(canvas: HTMLCanvasElement, frag: string): GLQuad | null {\n let gl: WebGLRenderingContext | null = null;\n try {\n gl = (canvas.getContext('webgl', { premultipliedAlpha: false, antialias: false }) || canvas.getContext('experimental-webgl')) as WebGLRenderingContext | null;\n } catch {\n gl = null;\n }\n if (!gl) return null;\n const g = gl;\n const sh = (type: number, src: string) => {\n const s = g.createShader(type)!;\n g.shaderSource(s, src);\n g.compileShader(s);\n return g.getShaderParameter(s, g.COMPILE_STATUS) ? s : null;\n };\n const vs = sh(g.VERTEX_SHADER, VERTEX);\n const fs = sh(g.FRAGMENT_SHADER, fragmentSource(frag));\n if (!vs || !fs) return null;\n const prog = g.createProgram()!;\n g.attachShader(prog, vs);\n g.attachShader(prog, fs);\n g.linkProgram(prog);\n if (!g.getProgramParameter(prog, g.LINK_STATUS)) return null;\n g.useProgram(prog);\n const buf = g.createBuffer();\n g.bindBuffer(g.ARRAY_BUFFER, buf);\n g.bufferData(g.ARRAY_BUFFER, new Float32Array([-1, -1, 1, -1, -1, 1, -1, 1, 1, -1, 1, 1]), g.STATIC_DRAW);\n const loc = g.getAttribLocation(prog, 'p');\n g.enableVertexAttribArray(loc);\n g.vertexAttribPointer(loc, 2, g.FLOAT, false, 0, 0);\n const U = (n: string) => g.getUniformLocation(prog, n);\n const uT = U('u_time'), uR = U('u_resolution'), uM = U('u_mouse'), uH = U('u_hover'), uRp = U('u_ripples');\n let tex: WebGLTexture | null = null;\n const quad: GLQuad = {\n resize() {\n const dpr = Math.min(2, (typeof devicePixelRatio === 'number' && devicePixelRatio) || 1);\n const w = Math.max(1, Math.round((canvas.clientWidth || 300) * dpr));\n const h = Math.max(1, Math.round((canvas.clientHeight || 150) * dpr));\n if (canvas.width !== w || canvas.height !== h) ((canvas.width = w), (canvas.height = h));\n g.viewport(0, 0, w, h);\n },\n texture(img) {\n tex = tex || g.createTexture();\n g.bindTexture(g.TEXTURE_2D, tex);\n g.pixelStorei(g.UNPACK_FLIP_Y_WEBGL, true);\n g.texParameteri(g.TEXTURE_2D, g.TEXTURE_WRAP_S, g.CLAMP_TO_EDGE);\n g.texParameteri(g.TEXTURE_2D, g.TEXTURE_WRAP_T, g.CLAMP_TO_EDGE);\n g.texParameteri(g.TEXTURE_2D, g.TEXTURE_MIN_FILTER, g.LINEAR);\n g.texImage2D(g.TEXTURE_2D, 0, g.RGBA, g.RGBA, g.UNSIGNED_BYTE, img);\n },\n render(u) {\n g.uniform1f(uT, u.time ?? 0);\n g.uniform2f(uR, canvas.width, canvas.height);\n g.uniform2f(uM, ...(u.mouse ?? [0.5, 0.5]));\n g.uniform1f(uH, u.hover ?? 0);\n if (uRp) g.uniform4fv(uRp, new Float32Array((u.ripples ?? []).concat(Array(16).fill(0)).slice(0, 16)));\n g.drawArrays(g.TRIANGLES, 0, 6);\n },\n dispose() {\n g.deleteProgram(prog);\n g.deleteBuffer(buf);\n if (tex) g.deleteTexture(tex);\n g.getExtension('WEBGL_lose_context')?.loseContext();\n },\n };\n quad.resize();\n return quad;\n}\n","import { defineElement, raf, caf, now, clamp, type UsaElement, getBase } from '../base';\n\ntype BaseCtor = ReturnType<typeof getBase>;\nimport { glQuad, type GLQuad } from './gl';\nimport css from './webgl.css?raw';\n\n/**\n * Shared shell for the WebGL elements: a canvas over (or behind) the\n * content that renders only while visible and the tab is shown, a DPR cap\n * of 2, and a graceful fallback (`data-fallback`) when WebGL, the shader\n * or the image (CORS) is unavailable — the original content / CSS stays.\n */\nexport interface UsaGLElement extends UsaElement {\n /** `true` once WebGL rendering is active (otherwise the CSS fallback shows). */\n readonly active: boolean;\n}\n\ntype Kind = 'shader' | 'distort' | 'liquid';\n\nfunction make(kind: Kind) {\n return (Base: BaseCtor): CustomElementConstructor =>\n class extends Base {\n static get observedAttributes(): string[] {\n return kind === 'shader' ? ['preset', 'speed'] : ['src'];\n }\n private _q: GLQuad | null = null;\n private _c: HTMLCanvasElement | null = null;\n private _id = 0;\n private _mouse: [number, number] = [0.5, 0.5];\n private _hover = 0;\n private _hoverTo = 0;\n private _ripples: { x: number; y: number; t: number }[] = [];\n\n get active(): boolean {\n return !!this._q;\n }\n\n private fallback(reason: string): void {\n this.setAttribute('data-fallback', reason);\n this._c?.remove();\n this._c = null;\n this._q?.dispose();\n this._q = null;\n }\n\n private frame(): void {\n const q = this._q;\n if (!q) return;\n this._hover += (this._hoverTo - this._hover) * 0.12;\n const t = now();\n this._ripples = this._ripples.filter((r) => t - r.t < 2500);\n q.render({\n time: (t / 1000) * this.num('speed', 1),\n mouse: this._mouse,\n hover: this._hover,\n ripples: this._ripples.flatMap((r) => [r.x, r.y, (t - r.t) / 1000, this.num('strength', 1)]),\n });\n }\n\n mount(): void {\n this.removeAttribute('data-fallback');\n const custom = this.querySelector('script[type=\"x-shader/x-fragment\"]');\n const frag = kind === 'shader' ? custom?.textContent || this.str('preset', 'gradient') : kind;\n const img = kind === 'shader' ? null : (this.querySelector('img') as HTMLImageElement | null);\n if (kind !== 'shader' && !img) return this.fallback('no-image');\n const c = (this._c = document.createElement('canvas'));\n c.setAttribute('aria-hidden', 'true');\n c.className = 'usa-gl';\n this.prepend(c);\n const q = (this._q = glQuad(c, frag));\n if (!q) return this.fallback('webgl');\n this.onCleanup(() => this.fallback('off'));\n const start = () => {\n if (!img) return true;\n try {\n q.texture(img);\n return true;\n } catch {\n this.fallback('image');\n return false;\n }\n };\n const draw = () => {\n q.resize();\n this.frame();\n };\n if (img && !(img.complete && img.naturalWidth)) {\n if (!img.crossOrigin && /^https?:/.test(img.src) && !img.src.startsWith(location.origin)) img.crossOrigin = 'anonymous';\n this.listen(img, 'load', () => start() && draw());\n this.listen(img, 'error', () => this.fallback('image'));\n } else if (!start()) return;\n this.setAttribute('data-active', '');\n this.onCleanup(() => this.removeAttribute('data-active'));\n draw();\n if (kind !== 'shader') {\n const pos = (e: PointerEvent) => {\n const r = this.getBoundingClientRect();\n this._mouse = [clamp((e.clientX - r.left) / (r.width || 1), 0, 1), clamp(1 - (e.clientY - r.top) / (r.height || 1), 0, 1)];\n };\n this.listen(this, 'pointermove', pos);\n this.listen(this, 'pointerenter', (e: PointerEvent) => (pos(e), (this._hoverTo = 1)));\n this.listen(this, 'pointerleave', () => (this._hoverTo = 0));\n if (kind === 'liquid')\n this.listen(this, 'pointerdown', (e: PointerEvent) => {\n pos(e);\n this._ripples = [...this._ripples.slice(-3), { x: this._mouse[0], y: this._mouse[1], t: now() }];\n });\n }\n if (this.reduced) return; // one static frame, no loop\n let visible = false;\n const loop = () => {\n this.frame();\n this._id = raf(loop);\n };\n const sync = () => {\n caf(this._id);\n this._id = 0;\n if (visible && !document.hidden) this._id = raf(loop);\n };\n this.inView((v: boolean) => ((visible = v), sync()));\n this.listen(document, 'visibilitychange', sync);\n this.listen(window, 'resize', () => q.resize(), { passive: true });\n this.onCleanup(() => caf(this._id));\n }\n };\n}\n\n/**\n * `<usa-shader>` — GPU shader background behind its content. `preset`\n * (`gradient` · `plasma` · `waves` · `aurora`) or your own fragment shader in\n * `<script type=\"x-shader/x-fragment\">` (uniforms `u_time`, `u_resolution`,\n * `u_mouse`, `v_uv`); `speed`. Without WebGL: the element's CSS background.\n */\nexport function defineShader(tag = 'usa-shader'): CustomElementConstructor | undefined {\n return defineElement(tag, make('shader'), { id: 'webgl', text: css });\n}\n\n/**\n * `<usa-distort>` — hover distortion + RGB split on the `<img>` inside,\n * following the pointer. Without WebGL / CORS: a gentle CSS zoom.\n */\nexport function defineDistort(tag = 'usa-distort'): CustomElementConstructor | undefined {\n return defineElement(tag, make('distort'), { id: 'webgl', text: css });\n}\n\n/**\n * `<usa-liquid>` — liquid image: clicks / taps send ripples through the\n * `<img>` inside, hover adds a gentle wobble; `strength`. Fallback: plain image.\n */\nexport function defineLiquid(tag = 'usa-liquid'): CustomElementConstructor | undefined {\n return defineElement(tag, make('liquid'), { id: 'webgl', text: css });\n}\n","/**\n * use-scroll-animate/components/webgl — lightweight canvas / WebGL (v3.4).\n * `<usa-shader>` (shader backgrounds), `<usa-distort>` (hover image\n * distortion), `<usa-liquid>` (ripple images) on a tiny single-quad runner\n * (`glQuad()`), with graceful fallbacks when WebGL is unavailable.\n */\nimport { defineShader, defineDistort, defineLiquid, type UsaGLElement } from './elements';\n\nexport { defineShader, defineDistort, defineLiquid };\nexport { glQuad, supportsWebGL, fragmentSource, SHADERS } from './gl';\nexport type { GLQuad } from './gl';\nexport type { UsaGLElement };\nexport { configureComponents, prefersReducedMotion } from '../base';\nexport type { ComponentsConfig, UsaElement } from '../base';\n\n/** Register every component of this category under its default tag. */\nexport function defineWebglComponents(): void {\n defineShader();\n defineDistort();\n defineLiquid();\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'usa-shader': UsaGLElement;\n 'usa-distort': UsaGLElement;\n 'usa-liquid': UsaGLElement;\n }\n}\n","import { defineElement, type UsaElement } from '../base';\nimport { createSpring, type SpringValue } from '../physics/spring';\nimport { gesture } from '../gesture/core';\nimport css from './depth.css?raw';\n\nconst FACES = ['front', 'right', 'back', 'left', 'top', 'bottom'] as const;\n/** Rotation (deg) that brings each face to the front. */\nconst ROT: Record<string, [number, number]> = { front: [0, 0], right: [0, -90], back: [0, -180], left: [0, 90], top: [-90, 0], bottom: [90, 0] };\n\n/**\n * `<usa-cube>` — a CSS 3D cube whose up-to-six element children are its faces\n * (front, right, back, left, top, bottom). Rotate with drag / swipe, arrow\n * keys, `autoplay` (ms) or `show(face | index)`; spring-driven.\n * Attributes: `size` (px, 200), `autoplay`, `perspective` (900).\n * `usa:change` (`{ index, face }`). Reduced motion: instant face switch.\n */\nexport interface UsaCubeElement extends UsaElement {\n readonly index: number;\n show(face: number | string): void;\n next(): void;\n prev(): void;\n}\n\nexport function defineCube(tag = 'usa-cube'): CustomElementConstructor | undefined {\n return defineElement(\n tag,\n (Base) =>\n class UsaCube extends Base {\n static get observedAttributes(): string[] {\n return ['size', 'autoplay'];\n }\n private _i = 0;\n private _rx!: SpringValue;\n private _ry!: SpringValue;\n private _base: [number, number] = [0, 0];\n\n get index(): number {\n return this._i;\n }\n\n private faces(): HTMLElement[] {\n return Array.from(this.children).filter((c) => c instanceof HTMLElement && !c.hasAttribute('slot')).slice(0, 6) as HTMLElement[];\n }\n\n private paint(): void {\n this.style.setProperty('--usa-cube-rx', `${this._rx.value}deg`);\n this.style.setProperty('--usa-cube-ry', `${this._ry.value}deg`);\n }\n\n show(face: number | string): void {\n const n = this.faces().length || 1;\n const i = typeof face === 'number' ? ((face % n) + n) % n : Math.max(0, FACES.indexOf(face as any));\n this._i = i;\n const [rx, ry] = ROT[FACES[i]];\n // take the shortest way round on Y\n const cur = this._ry.target;\n const ty = ry + Math.round((cur - ry) / 360) * 360;\n this._base = [rx, ty];\n if (this.reduced) {\n this._rx.jump(rx);\n this._ry.jump(ty);\n } else {\n this._rx.set(rx);\n this._ry.set(ty);\n }\n this.faces().forEach((f, j) => f.setAttribute('aria-hidden', String(j !== i)));\n this.emit('change', { index: i, face: FACES[i] });\n }\n\n next(): void {\n this.show(this._i + 1);\n }\n\n prev(): void {\n this.show(this._i - 1);\n }\n\n mount(): void {\n this.style.setProperty('--usa-cube-size', `${this.num('size', 200)}px`);\n this.style.setProperty('--usa-cube-perspective', `${this.num('perspective', 900)}px`);\n this.faces().forEach((f, j) => f.setAttribute('data-face', FACES[j]));\n if (!this.hasAttribute('tabindex')) this.tabIndex = 0;\n if (!this.hasAttribute('role')) this.setAttribute('role', 'region');\n if (!this.hasAttribute('aria-roledescription')) this.setAttribute('aria-roledescription', 'cube');\n this._rx = createSpring({ spring: 'gentle', onUpdate: () => this.paint() });\n this._ry = createSpring({ spring: 'gentle', onUpdate: () => this.paint() });\n this.show(this._i);\n this.paint();\n this.onCleanup(\n gesture(this, {\n onPan: ({ dx, dy, last }) => {\n if (this.reduced) return;\n if (!last) {\n this._ry.jump(this._base[1] + dx * 0.5);\n this._rx.jump(this._base[0] - dy * 0.5);\n return;\n }\n if (Math.abs(dx) > 40 && Math.abs(dx) >= Math.abs(dy)) return dx < 0 ? this.next() : this.prev();\n if (Math.abs(dy) > 40 && this.faces().length > 4) return this.show(dy < 0 ? 'bottom' : 'top');\n this.show(this._i);\n },\n })\n );\n this.listen(this, 'keydown', (e: KeyboardEvent) => {\n const k: Record<string, () => void> = { ArrowRight: () => this.next(), ArrowLeft: () => this.prev(), ArrowUp: () => this.show('bottom'), ArrowDown: () => this.show('top'), Home: () => this.show(0) };\n if (!k[e.key] || ((e.key === 'ArrowUp' || e.key === 'ArrowDown') && this.faces().length < 6)) return;\n e.preventDefault();\n k[e.key]();\n });\n const ms = this.num('autoplay', 0);\n if (ms > 0 && !this.reduced) {\n let paused = false;\n const id = setInterval(() => !paused && this.show((this._i + 1) % Math.min(4, this.faces().length || 1)), ms);\n this.listen(this, 'pointerenter', () => (paused = true));\n this.listen(this, 'pointerleave', () => (paused = false));\n this.listen(this, 'focusin', () => (paused = true));\n this.listen(this, 'focusout', () => (paused = false));\n this.onCleanup(() => clearInterval(id));\n }\n }\n\n unmount(): void {\n this._rx?.stop();\n this._ry?.stop();\n }\n },\n { id: 'depth', text: css }\n );\n}\n","import { clamp } from '../base';\n\nexport interface TiltReading {\n /** Left/right tilt, -1…1. */\n x: number;\n /** Front/back tilt, -1…1. */\n y: number;\n}\n\n/** Map a DeviceOrientation reading (beta/gamma degrees) to -1…1 tilt around a resting pose (pure). */\nexport function orientationToTilt(beta: number | null, gamma: number | null, range = 30, rest = 45): TiltReading {\n return {\n x: clamp((gamma ?? 0) / range, -1, 1),\n y: clamp(((beta ?? rest) - rest) / range, -1, 1),\n };\n}\n\n/** `true` when DeviceOrientation events exist. */\nexport const supportsOrientation = (): boolean => typeof window !== 'undefined' && 'DeviceOrientationEvent' in window;\n\n/**\n * Ask for motion-sensor permission where required (iOS 13+; must run inside\n * a user gesture). Resolves `true` when tilt events can be used.\n */\nexport async function requestOrientationPermission(): Promise<boolean> {\n if (!supportsOrientation()) return false;\n const D = (window as any).DeviceOrientationEvent;\n if (typeof D.requestPermission !== 'function') return true;\n try {\n return (await D.requestPermission()) === 'granted';\n } catch {\n return false;\n }\n}\n\n/**\n * Listen to device tilt (smoothed); falls back to nothing on desktops.\n * Returns a stop function.\n */\nexport function deviceTilt(cb: (t: TiltReading) => void, o: { range?: number; smooth?: number } = {}): () => void {\n if (!supportsOrientation()) return () => {};\n let cur: TiltReading = { x: 0, y: 0 };\n const k = 1 - clamp(o.smooth ?? 0.2, 0, 0.95);\n const on = (e: DeviceOrientationEvent) => {\n const t = orientationToTilt(e.beta, e.gamma, o.range ?? 30);\n cur = { x: cur.x + (t.x - cur.x) * k, y: cur.y + (t.y - cur.y) * k };\n cb(cur);\n };\n window.addEventListener('deviceorientation', on);\n return () => window.removeEventListener('deviceorientation', on);\n}\n","import { defineElement, raf, caf, clamp, type UsaElement } from '../base';\nimport { deviceTilt, requestOrientationPermission, supportsOrientation } from './core';\nimport css from './depth.css?raw';\n\n/**\n * `<usa-depth>` — depth parallax: children with `data-depth` (-1…1, 0 = the\n * screen plane) move and scale by depth as the pointer moves, the device\n * tilts (`orientation`) or the page scrolls (`scroll`).\n * Attributes: `source` (`pointer` default · `orientation` · `scroll` ·\n * space-separated mix), `strength` (px at depth 1, 40), `rotate` (max tilt\n * of the whole scene in deg, 0). `requestPermission()` for iOS motion.\n * Reduced motion: layers stay flat.\n */\nexport interface UsaDepthElement extends UsaElement {\n /** Current -1…1 input. */\n readonly tilt: { x: number; y: number };\n requestPermission(): Promise<boolean>;\n}\n\nexport function defineDepth(tag = 'usa-depth'): CustomElementConstructor | undefined {\n return defineElement(\n tag,\n (Base) =>\n class UsaDepth extends Base {\n static get observedAttributes(): string[] {\n return ['source', 'strength', 'rotate'];\n }\n private _t = { x: 0, y: 0 };\n private _id = 0;\n\n get tilt(): { x: number; y: number } {\n return { ...this._t };\n }\n\n requestPermission(): Promise<boolean> {\n return requestOrientationPermission().then((ok) => {\n if (ok) {\n this.changed('source');\n }\n return ok;\n });\n }\n\n private apply(): void {\n this._id = 0;\n const s = this.num('strength', 40);\n const r = this.num('rotate', 0);\n const { x, y } = this._t;\n this.style.setProperty('--usa-depth-x', x.toFixed(4));\n this.style.setProperty('--usa-depth-y', y.toFixed(4));\n if (r) this.style.setProperty('--usa-depth-rot', `rotateX(${(-y * r).toFixed(2)}deg) rotateY(${(x * r).toFixed(2)}deg)`);\n this.querySelectorAll<HTMLElement>('[data-depth]').forEach((el) => {\n const d = clamp(Number(el.dataset.depth) || 0, -1, 1);\n el.style.transform = `translate3d(${(x * d * s).toFixed(2)}px, ${(y * d * s).toFixed(2)}px, 0) scale(${(1 + d * 0.04).toFixed(4)})`;\n });\n }\n\n private set(x: number, y: number): void {\n this._t = { x: clamp(x, -1, 1), y: clamp(y, -1, 1) };\n if (!this._id) this._id = raf(() => this.apply());\n }\n\n mount(): void {\n if (this.reduced) return;\n const src = this.str('source', 'pointer').split(/\\s+/);\n if (src.includes('pointer')) {\n this.listen(this, 'pointermove', (e: PointerEvent) => {\n const r = this.getBoundingClientRect();\n this.set(((e.clientX - r.left) / (r.width || 1)) * 2 - 1, ((e.clientY - r.top) / (r.height || 1)) * 2 - 1);\n });\n this.listen(this, 'pointerleave', () => this.set(0, 0));\n }\n if (src.includes('orientation') && supportsOrientation()) this.onCleanup(deviceTilt((t) => this.set(t.x, t.y)));\n if (src.includes('scroll')) {\n const on = () => {\n const r = this.getBoundingClientRect();\n const vh = window.innerHeight || 1;\n this.set(this._t.x, clamp(((r.top + r.height / 2) / vh) * 2 - 1, -1, 1));\n };\n this.listen(window, 'scroll', on, { passive: true });\n on();\n }\n this.onCleanup(() => {\n caf(this._id);\n this._id = 0;\n });\n }\n\n unmount(): void {\n this._t = { x: 0, y: 0 };\n this.querySelectorAll<HTMLElement>('[data-depth]').forEach((el) => (el.style.transform = ''));\n }\n },\n { id: 'depth', text: css }\n );\n}\n","/**\n * use-scroll-animate/components/depth — 3D (v3.5).\n * `<usa-cube>` (CSS 3D cube), `<usa-depth>` (layered depth parallax driven by\n * pointer, device orientation or scroll) and `deviceTilt()`. The 3D ring\n * carousel is `<usa-carousel-3d>` in `components/cards`.\n */\nimport { defineCube, type UsaCubeElement } from './cube';\nimport { defineDepth, type UsaDepthElement } from './depth-el';\n\nexport { defineCube, defineDepth };\nexport { deviceTilt, orientationToTilt, requestOrientationPermission, supportsOrientation } from './core';\nexport type { TiltReading } from './core';\nexport type { UsaCubeElement, UsaDepthElement };\nexport { configureComponents, prefersReducedMotion } from '../base';\nexport type { ComponentsConfig, UsaElement } from '../base';\n\n/** Register every component of this category under its default tag. */\nexport function defineDepthComponents(): void {\n defineCube();\n defineDepth();\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'usa-cube': UsaCubeElement;\n 'usa-depth': UsaDepthElement;\n }\n}\n","import { prefersReducedMotion, motionScale, EASE_OUT } from '../base';\n\ntype Box = { left: number; top: number; width: number; height: number };\n\n/** FLIP keyframes from a previous box to the current one (pure). */\nexport function flipFrames(from: Box, to: Box, scale = true): Keyframe[] {\n const dx = from.left - to.left;\n const dy = from.top - to.top;\n const sx = scale && to.width ? from.width / to.width : 1;\n const sy = scale && to.height ? from.height / to.height : 1;\n return [\n { transformOrigin: '0 0', transform: `translate(${dx}px, ${dy}px) scale(${sx}, ${sy})` },\n { transformOrigin: '0 0', transform: 'none' },\n ];\n}\n\nexport interface AutoAnimateOptions {\n duration?: number;\n easing?: string;\n /** Also animate size changes (default true). */\n scale?: boolean;\n}\n\n/**\n * Auto-animate a container: children that are added fade / scale in, removed\n * ones fade out in place, and moved ones (re-sort, filter, reflow, resize)\n * glide to their new spot — no extra code at the call site. Returns\n * `{ disable, enable, stop }`. Reduced motion: changes apply instantly.\n *\n * @example\n * const ctl = autoAnimate(document.querySelector('ul'));\n * list.append(item); // animates\n */\nexport function autoAnimate(parent: HTMLElement, o: AutoAnimateOptions = {}): { enable(): void; disable(): void; stop(): void } {\n let on = true;\n const boxes = new WeakMap<Element, Box>();\n const rel = (el: Element): Box => {\n const r = el.getBoundingClientRect();\n const p = parent.getBoundingClientRect();\n return { left: r.left - p.left, top: r.top - p.top, width: r.width, height: r.height };\n };\n const snap = () => Array.from(parent.children).forEach((c) => boxes.set(c, rel(c)));\n const dur = () => (o.duration ?? 300) * motionScale();\n const timing = (): KeyframeAnimationOptions => ({ duration: dur(), easing: o.easing ?? EASE_OUT });\n const animate = (el: Element, frames: Keyframe[], t = timing()) => (typeof (el as HTMLElement).animate === 'function' ? (el as HTMLElement).animate(frames, t) : null);\n\n const mo =\n typeof MutationObserver === 'function'\n ? new MutationObserver((records) => {\n if (!on || prefersReducedMotion() || dur() <= 0) return snap();\n const added = new Set<Element>();\n for (const r of records) {\n r.addedNodes.forEach((n) => n instanceof Element && n.parentElement === parent && added.add(n));\n r.removedNodes.forEach((n) => {\n if (!(n instanceof HTMLElement) || n.isConnected) return;\n const b = boxes.get(n);\n if (!b) return;\n // put a ghost back at its old place and fade it out\n n.style.position = 'absolute';\n n.style.left = `${b.left}px`;\n n.style.top = `${b.top}px`;\n n.style.width = `${b.width}px`;\n n.style.height = `${b.height}px`;\n n.style.margin = '0';\n n.style.pointerEvents = 'none';\n if (getComputedStyle(parent).position === 'static') parent.style.position = 'relative';\n parent.appendChild(n);\n (n as any).__usaGhost = true;\n const a = animate(n, [{ opacity: 1, transform: 'none' }, { opacity: 0, transform: 'scale(0.96)' }]);\n const drop = () => {\n n.remove();\n for (const k of ['position', 'left', 'top', 'width', 'height', 'margin', 'pointerEvents'] as const) n.style[k] = '';\n };\n if (a) a.finished.then(drop, drop);\n else drop();\n });\n }\n Array.from(parent.children).forEach((c) => {\n if ((c as any).__usaGhost) return;\n if (added.has(c)) return void animate(c, [{ opacity: 0, transform: 'scale(0.96)' }, { opacity: 1, transform: 'none' }]);\n const prev = boxes.get(c);\n if (!prev) return;\n const now = rel(c);\n if (Math.abs(prev.left - now.left) + Math.abs(prev.top - now.top) + Math.abs(prev.width - now.width) + Math.abs(prev.height - now.height) < 1) return;\n animate(c, flipFrames(prev, now, o.scale !== false));\n });\n snap();\n })\n : null;\n mo?.observe(parent, { childList: true });\n const ro = typeof ResizeObserver === 'function' ? new ResizeObserver(() => snap()) : null;\n ro?.observe(parent);\n snap();\n // capture boxes right before any change in the same task (events, timers)\n const capture = () => snap();\n parent.addEventListener('pointerdown', capture, true);\n return {\n enable: () => ((on = true), snap()),\n disable: () => (on = false),\n stop: () => {\n mo?.disconnect();\n ro?.disconnect();\n parent.removeEventListener('pointerdown', capture, true);\n },\n };\n}\n\n/** Masonry placement: shortest-column-first positions for item heights (pure). */\nexport function masonryLayout(heights: number[], columns: number, columnWidth: number, gap: number): { x: number; y: number }[] & { height?: number } {\n const cols = Array(Math.max(1, columns)).fill(0);\n const out = heights.map((h) => {\n const c = cols.indexOf(Math.min(...cols));\n const pos = { x: c * (columnWidth + gap), y: cols[c] };\n cols[c] += h + gap;\n return pos;\n }) as { x: number; y: number }[] & { height?: number };\n out.height = Math.max(0, Math.max(...cols) - gap);\n return out;\n}\n\nexport interface SharedOptions {\n duration?: number;\n easing?: string;\n}\n\n/**\n * Shared-element transition between two states of the page: every element\n * with `data-shared=\"id\"` before `update()` flies to the element with the\n * same id afterwards (size and position), the rest cross-fades. Uses the\n * View Transitions API when present (with `view-transition-name` per id),\n * otherwise a FLIP fallback. Reduced motion: just runs `update()`.\n */\nexport async function sharedTransition(update: () => void | Promise<void>, root: ParentNode = document, o: SharedOptions = {}): Promise<void> {\n if (prefersReducedMotion() || typeof document === 'undefined') return void (await update());\n const collect = () => new Map(Array.from(root.querySelectorAll<HTMLElement>('[data-shared]')).map((el) => [el.dataset.shared!, el]));\n const doc = document as any;\n if (typeof doc.startViewTransition === 'function') {\n const named = (m: Map<string, HTMLElement>) => m.forEach((el, id) => (el.style.viewTransitionName = `usa-${id.replace(/[^\\w-]/g, '_')}`));\n const clear = (m: Map<string, HTMLElement>) => m.forEach((el) => (el.style.viewTransitionName = ''));\n const before = collect();\n named(before);\n let after = new Map<string, HTMLElement>();\n const vt = doc.startViewTransition(async () => {\n clear(before);\n await update();\n after = collect();\n named(after);\n });\n await vt.finished.catch(() => undefined);\n clear(after);\n return;\n }\n const before = new Map(Array.from(collect()).map(([id, el]) => [id, el.getBoundingClientRect()]));\n await update();\n const anims: Promise<unknown>[] = [];\n collect().forEach((el, id) => {\n const a = before.get(id);\n if (!a || typeof el.animate !== 'function') return;\n const b = el.getBoundingClientRect();\n if (!b.width || !b.height) return;\n anims.push(el.animate(flipFrames(a, b), { duration: (o.duration ?? 450) * motionScale(), easing: o.easing ?? EASE_OUT }).finished.catch(() => undefined));\n });\n await Promise.all(anims);\n}\n","import { defineElement, type UsaElement } from '../base';\nimport { autoAnimate, masonryLayout } from './core';\nimport css from './layout.css?raw';\n\n/**\n * `<usa-auto-animate>` — wraps `autoAnimate()`: any change to its children\n * (add, remove, re-order, filter, size) animates. Attributes `duration`\n * (300), `no-scale`. Works for lists and CSS grids alike.\n */\nexport interface UsaAutoAnimateElement extends UsaElement {\n enable(): void;\n disable(): void;\n}\n\nexport function defineAutoAnimate(tag = 'usa-auto-animate'): CustomElementConstructor | undefined {\n return defineElement(\n tag,\n (Base) =>\n class UsaAutoAnimate extends Base {\n private _c: ReturnType<typeof autoAnimate> | null = null;\n enable(): void {\n this._c?.enable();\n }\n disable(): void {\n this._c?.disable();\n }\n mount(): void {\n const c = (this._c = autoAnimate(this, { duration: this.num('duration', 300), scale: !this.flag('no-scale') }));\n this.onCleanup(() => c.stop());\n }\n },\n { id: 'layout', text: css }\n );\n}\n\n/**\n * `<usa-masonry>` — a masonry (Pinterest-style) grid: children are placed in\n * the shortest column and glide to new spots when the width, the items or\n * their sizes change. Attributes `columns` (fixed count) or `min` (min\n * column width px, 220), `gap` (16). Without JS layout support it is a\n * plain CSS multi-column flow. Reduced motion: no glide.\n */\nexport interface UsaMasonryElement extends UsaElement {\n layout(): void;\n}\n\nexport function defineMasonry(tag = 'usa-masonry'): CustomElementConstructor | undefined {\n return defineElement(\n tag,\n (Base) =>\n class UsaMasonry extends Base {\n static get observedAttributes(): string[] {\n return ['columns', 'min', 'gap'];\n }\n changed(): void {\n this.layout();\n }\n layout(): void {\n const items = Array.from(this.children).filter((c) => !(c as any).__usaGhost) as HTMLElement[];\n const w = this.clientWidth;\n if (!w) return;\n const gap = this.num('gap', 16);\n const cols = this.num('columns', 0) || Math.max(1, Math.floor((w + gap) / (this.num('min', 220) + gap)));\n const cw = (w - gap * (cols - 1)) / cols;\n items.forEach((el) => (el.style.width = `${cw}px`));\n const pos = masonryLayout(items.map((el) => el.offsetHeight), cols, cw, gap);\n items.forEach((el, i) => (el.style.transform = `translate(${pos[i].x}px, ${pos[i].y}px)`));\n this.style.height = `${pos.height}px`;\n this.style.setProperty('--usa-masonry-cols', String(cols));\n }\n mount(): void {\n this.setAttribute('data-js', '');\n this.onCleanup(() => this.removeAttribute('data-js'));\n let id = 0;\n const queue = () => {\n if (id) return;\n id = requestAnimationFrame(() => {\n id = 0;\n this.layout();\n });\n };\n if (typeof ResizeObserver === 'function') {\n const ro = new ResizeObserver(queue);\n ro.observe(this);\n Array.from(this.children).forEach((c) => ro.observe(c));\n const mo = new MutationObserver((recs) => {\n recs.forEach((r) => r.addedNodes.forEach((n) => n instanceof Element && ro.observe(n)));\n queue();\n });\n mo.observe(this, { childList: true });\n this.onCleanup(() => (ro.disconnect(), mo.disconnect()));\n }\n this.listen(this, 'load', queue, { capture: true });\n this.layout();\n }\n unmount(): void {\n this.style.height = '';\n Array.from(this.children).forEach((c) => ((c as HTMLElement).style.transform = '', (c as HTMLElement).style.width = ''));\n }\n },\n { id: 'layout', text: css }\n );\n}\n","/**\n * use-scroll-animate/components/layout — layout animation (v3.6).\n * `autoAnimate()` / `<usa-auto-animate>` (list & grid reflow),\n * `<usa-masonry>`, and `sharedTransition()` for shared-element transitions\n * (View Transitions API with a FLIP fallback).\n */\nimport { defineAutoAnimate, defineMasonry, type UsaAutoAnimateElement, type UsaMasonryElement } from './elements';\n\nexport { defineAutoAnimate, defineMasonry };\nexport { autoAnimate, masonryLayout, sharedTransition, flipFrames } from './core';\nexport type { AutoAnimateOptions, SharedOptions } from './core';\nexport type { UsaAutoAnimateElement, UsaMasonryElement };\nexport { configureComponents, prefersReducedMotion } from '../base';\nexport type { ComponentsConfig, UsaElement } from '../base';\n\n/** Register every component of this category under its default tag. */\nexport function defineLayoutComponents(): void {\n defineAutoAnimate();\n defineMasonry();\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'usa-auto-animate': UsaAutoAnimateElement;\n 'usa-masonry': UsaMasonryElement;\n }\n}\n","import { prefersReducedMotion, motionScale, EASE_OUT, EASE_SPRING, raf, now, clamp } from '../base';\n\ntype Cleanup = () => void;\n/** A pack primitive: wire one element, return a cleanup. */\ntype Effect = (el: HTMLElement, ctx: PackContext) => Cleanup | void;\n\nexport interface PackContext {\n root: HTMLElement;\n /** Index of the element among those with the same role (for staggering). */\n index: number;\n reduced: boolean;\n}\n\nconst anim = (el: Element, frames: Keyframe[], o: KeyframeAnimationOptions): Animation | null => {\n if (typeof (el as HTMLElement).animate !== 'function') return null;\n const k = motionScale();\n return (el as HTMLElement).animate(frames, { ...o, duration: ((o.duration as number) ?? 400) * k, delay: (o.delay ?? 0) * k });\n};\nconst on = (el: EventTarget, type: string, fn: (e: any) => void): Cleanup => {\n el.addEventListener(type, fn);\n return () => el.removeEventListener(type, fn);\n};\nconst io = (el: Element, cb: () => void): Cleanup => {\n if (typeof IntersectionObserver === 'undefined') return void cb() as unknown as Cleanup;\n const o = new IntersectionObserver((es) => es.some((e) => e.isIntersecting) && (o.disconnect(), cb()), { threshold: 0.15 });\n o.observe(el);\n return () => o.disconnect();\n};\n\n/** Count `el`'s number up from 0 when it enters the view (keeps prefix / suffix / decimals). */\nexport function countUp(el: HTMLElement, duration = 1200): Cleanup {\n const text = el.textContent || '';\n const m = /(-?[\\d,]*\\.?\\d+)/.exec(text);\n if (!m || prefersReducedMotion()) return () => {};\n const target = Number(m[1].replace(/,/g, ''));\n const dec = (m[1].split('.')[1] || '').length;\n const fmt = (v: number) => text.replace(m[1], v.toLocaleString('en-US', { minimumFractionDigits: dec, maximumFractionDigits: dec }));\n el.setAttribute('aria-label', text.trim());\n el.textContent = fmt(0);\n let stop = false;\n const off = io(el, () => {\n const t0 = now();\n const d = duration * motionScale() || 1;\n const step = () => {\n if (stop) return;\n const p = clamp((now() - t0) / d, 0, 1);\n el.textContent = fmt(target * (1 - Math.pow(1 - p, 3)));\n if (p < 1) raf(step);\n };\n raf(step);\n });\n return () => {\n stop = true;\n off();\n el.textContent = text;\n };\n}\n\n/**\n * Fly a copy of `from` (e.g. a product image) into `to` (the cart icon) along\n * an arc, then bump the target. Resolves when it lands. Instant under\n * reduced motion (only the bump's state change, no flight).\n */\nexport async function flyToCart(from: Element, to: Element, o: { duration?: number } = {}): Promise<void> {\n if (prefersReducedMotion() || typeof document === 'undefined') return;\n const a = from.getBoundingClientRect();\n const b = to.getBoundingClientRect();\n const ghost = from.cloneNode(true) as HTMLElement;\n ghost.setAttribute('aria-hidden', 'true');\n Object.assign(ghost.style, { position: 'fixed', left: `${a.left}px`, top: `${a.top}px`, width: `${a.width}px`, height: `${a.height}px`, margin: '0', zIndex: '2147483000', pointerEvents: 'none' });\n document.body.appendChild(ghost);\n const dx = b.left + b.width / 2 - (a.left + a.width / 2);\n const dy = b.top + b.height / 2 - (a.top + a.height / 2);\n const f = anim(ghost, [\n { transform: 'translate(0, 0) scale(1)', opacity: 1 },\n { transform: `translate(${dx * 0.5}px, ${dy * 0.5 - 80}px) scale(0.6)`, opacity: 0.9, offset: 0.5 },\n { transform: `translate(${dx}px, ${dy}px) scale(0.15)`, opacity: 0.4 },\n ], { duration: o.duration ?? 700, easing: 'cubic-bezier(0.5, 0, 0.5, 1)' });\n await f?.finished.catch(() => undefined);\n ghost.remove();\n anim(to, [{ transform: 'scale(1)' }, { transform: 'scale(1.3)' }, { transform: 'scale(1)' }], { duration: 380, easing: EASE_SPRING });\n}\n\nconst PRIMITIVES: Record<string, Effect> = {\n reveal: (el, c) => {\n if (c.reduced) return;\n el.style.opacity = '0';\n const off = io(el, () => {\n el.style.opacity = '';\n anim(el, [{ opacity: 0, transform: 'translateY(24px)' }, { opacity: 1, transform: 'none' }], { duration: 600, delay: Math.min(c.index, 8) * 70, easing: EASE_OUT, fill: 'backwards' });\n });\n return () => (off(), (el.style.opacity = ''));\n },\n lift: (el, c) => {\n if (c.reduced) return;\n const a = on(el, 'pointerenter', () => anim(el, [{ transform: 'none' }, { transform: 'translateY(-6px) scale(1.02)' }], { duration: 220, easing: EASE_OUT, fill: 'forwards' }));\n const b = on(el, 'pointerleave', () => anim(el, [{ transform: 'translateY(-6px) scale(1.02)' }, { transform: 'none' }], { duration: 260, easing: EASE_OUT, fill: 'forwards' }));\n return () => (a(), b());\n },\n press: (el, c) => (c.reduced ? undefined : on(el, 'pointerdown', () => anim(el, [{ transform: 'scale(1)' }, { transform: 'scale(0.94)' }, { transform: 'scale(1)' }], { duration: 260, easing: EASE_SPRING }))),\n 'count-up': (el) => countUp(el),\n pulse: (el, c) => {\n if (c.reduced) return;\n const a = anim(el, [{ boxShadow: '0 0 0 0 rgba(124, 92, 255, 0.55)' }, { boxShadow: '0 0 0 14px rgba(124, 92, 255, 0)' }], { duration: 1600, iterations: Infinity });\n return () => a?.cancel();\n },\n float: (el, c) => {\n if (c.reduced) return;\n const a = anim(el, [{ transform: 'translateY(0)' }, { transform: 'translateY(-8px)' }, { transform: 'translateY(0)' }], { duration: 3000, delay: c.index * 300, iterations: Infinity, easing: 'ease-in-out' });\n return () => a?.cancel();\n },\n shake: (el, c) => (c.reduced ? undefined : on(el, 'click', () => anim(el, [0, -8, 8, -6, 6, -3, 0].map((x) => ({ transform: `translateX(${x}px)` })), { duration: 420 }))),\n bump: (el, c) => (c.reduced ? undefined : on(el, 'usa:bump', () => anim(el, [{ transform: 'scale(1)' }, { transform: 'scale(1.25)' }, { transform: 'scale(1)' }], { duration: 360, easing: EASE_SPRING }))),\n 'fly-to-cart': (el, c) =>\n on(el, 'click', () => {\n const cart = c.root.querySelector('[data-role=\"cart\"]') || document.querySelector('[data-role=\"cart\"]');\n const item = el.closest('[data-role=\"product\"]')?.querySelector('img, [data-role=\"thumb\"]') || el;\n if (cart) void flyToCart(item, cart).then(() => cart.dispatchEvent(new CustomEvent('usa:added', { bubbles: true })));\n }),\n};\n\n/** The five effect packs: `data-role` → primitives. */\nexport const PACKS: Record<string, Record<string, string[]>> = {\n ecommerce: { product: ['reveal', 'lift'], 'add-to-cart': ['press', 'fly-to-cart'], cart: ['bump'], price: ['count-up'], badge: ['pulse'] },\n portfolio: { project: ['reveal', 'lift'], heading: ['reveal'], stat: ['count-up'], contact: ['press', 'pulse'] },\n dashboard: { card: ['reveal'], stat: ['count-up'], alert: ['pulse'], action: ['press'] },\n game: { button: ['press'], score: ['count-up', 'bump'], item: ['float'], hit: ['shake'], reward: ['pulse'] },\n landing: { hero: ['reveal'], feature: ['reveal', 'lift'], cta: ['press', 'pulse'], logo: ['float'], stat: ['count-up'] },\n};\n\nexport type PackName = keyof typeof PACKS;\n\n/**\n * Apply an effect pack to `root`: every descendant with a `data-role` the\n * pack knows gets its effects (staggered by index). Returns an undo function.\n * Reduced motion: only non-motion behaviour (e.g. the cart event) remains.\n *\n * @example\n * applyPack('ecommerce', document.querySelector('main'));\n * // <article data-role=\"product\">… <button data-role=\"add-to-cart\"> … <a data-role=\"cart\">\n */\nexport function applyPack(name: PackName | string, root: HTMLElement | Document = document): Cleanup {\n const pack = PACKS[name];\n if (!pack || typeof document === 'undefined') return () => {};\n const r = (root as Document).documentElement ? (root as Document).body : (root as HTMLElement);\n const reduced = prefersReducedMotion();\n const cleanups: Cleanup[] = [];\n for (const [role, fx] of Object.entries(pack)) {\n r.querySelectorAll<HTMLElement>(`[data-role=\"${role}\"]`).forEach((el, index) => {\n for (const f of fx) {\n const c = PRIMITIVES[f]?.(el, { root: r, index, reduced });\n if (c) cleanups.push(c);\n }\n });\n }\n return () => cleanups.splice(0).forEach((c) => c());\n}\n\n/** Primitive names a pack uses (for docs / tooling). */\nexport const PACK_PRIMITIVES = Object.keys(PRIMITIVES);\n","import { defineElement, type UsaElement } from '../base';\nimport { applyPack, PACKS } from './core';\n\n/**\n * `<usa-pack name=\"ecommerce\">` — applies an effect pack (`ecommerce` ·\n * `portfolio` · `dashboard` · `game` · `landing`) to its subtree:\n * descendants opt in with `data-role` (see `PACKS`). Re-applies when\n * `name` changes; undone on disconnect.\n */\nexport interface UsaPackElement extends UsaElement {\n readonly roles: string[];\n}\n\nexport function definePack(tag = 'usa-pack'): CustomElementConstructor | undefined {\n return defineElement(tag, (Base) =>\n class UsaPack extends Base {\n static get observedAttributes(): string[] {\n return ['name'];\n }\n get roles(): string[] {\n return Object.keys(PACKS[this.str('name', 'landing')] || {});\n }\n mount(): void {\n this.style.display ||= 'block';\n this.onCleanup(applyPack(this.str('name', 'landing'), this));\n }\n }\n );\n}\n","/**\n * use-scroll-animate/components/packs — effect packs (v3.9).\n * Ready-made motion for e-commerce, portfolio, dashboard, game UI and\n * landing pages: mark elements with `data-role` and apply a pack with\n * `<usa-pack name=\"…\">` or `applyPack(name, root)`. Includes `flyToCart()`\n * and `countUp()`.\n */\nimport { definePack, type UsaPackElement } from './pack-el';\n\nexport { definePack };\nexport { applyPack, flyToCart, countUp, PACKS, PACK_PRIMITIVES } from './core';\nexport type { PackName, PackContext } from './core';\nexport type { UsaPackElement };\nexport { configureComponents, prefersReducedMotion } from '../base';\nexport type { ComponentsConfig, UsaElement } from '../base';\n\n/** Register every component of this category under its default tag. */\nexport function definePacksComponents(): void {\n definePack();\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'usa-pack': UsaPackElement;\n }\n}\n","// The component categories and their default tags (no imports: safe for lazy loaders).\n/** The component categories and their default tags. */\nexport const COMPONENT_CATEGORIES = {\n reveal: ['usa-reveal', 'usa-stagger', 'usa-scroll-progress', 'usa-scrolly'],\n text: ['usa-typewriter', 'usa-split-text', 'usa-scramble', 'usa-counter', 'usa-shimmer-text', 'usa-text-rotate', 'usa-wave-text', 'usa-glitch', 'usa-gradient-text', 'usa-handwriting', 'usa-scroll-highlight'],\n interaction: ['usa-ripple', 'usa-magnetic', 'usa-tilt', 'usa-spotlight', 'usa-press', 'usa-toggle'],\n feedback: ['usa-spinner', 'usa-skeleton', 'usa-progress', 'usa-toaster', 'usa-check'],\n background: ['usa-aurora', 'usa-particles', 'usa-grain', 'usa-marquee', 'usa-acrylic', 'usa-grid-glow', 'usa-blobs', 'usa-water-ripple', 'usa-dot-network'],\n transitions: ['usa-dialog', 'usa-accordion', 'usa-view-switch'],\n physics: ['usa-spring', 'usa-draggable', 'usa-overscroll'],\n cards: ['usa-card', 'usa-card-stack', 'usa-sticky-stack', 'usa-carousel-3d'],\n click: ['usa-click', 'usa-button', 'usa-icon-morph', 'usa-like', 'usa-hold', 'usa-double-tap', 'usa-checkbox'],\n ui: ['usa-tabs', 'usa-drawer', 'usa-bottom-sheet', 'usa-pull-refresh', 'usa-fab', 'usa-navbar', 'usa-slider', 'usa-rating', 'usa-tooltip', 'usa-popover', 'usa-badge', 'usa-avatar-stack'],\n page: ['usa-cursor', 'usa-fullpage', 'usa-loading-bar', 'usa-back-to-top', 'usa-ambient', 'usa-splash', 'usa-auto-skeleton', 'usa-motion-switch'],\n timeline: ['usa-timeline'],\n gesture: ['usa-swipeable', 'usa-pinch-zoom'],\n svg: ['usa-draw', 'usa-morph', 'usa-mask-reveal', 'usa-anim-icon'],\n webgl: ['usa-shader', 'usa-distort', 'usa-liquid'],\n depth: ['usa-cube', 'usa-depth'],\n layout: ['usa-auto-animate', 'usa-masonry'],\n packs: ['usa-pack'],\n} as const;\n\nexport type ComponentCategory = keyof typeof COMPONENT_CATEGORIES;\n","/**\n * use-scroll-animate/components\n *\n * Framework-agnostic, dependency-free animated UI components built on\n * Custom Elements + CSS + the Web Animations API. They run in any browser\n * and in Windows desktop apps that render with a web view: Electron, Tauri\n * (WebView2), WinUI 3 / WPF / WinForms with WebView2, and installed PWAs.\n *\n * ```js\n * import { defineComponents } from 'use-scroll-animate/components';\n * defineComponents(); // registers every <usa-*> element\n * // or only what you use (tree-shakable):\n * import { defineTypewriter } from 'use-scroll-animate/components/text';\n * ```\n *\n * Importing has no side effects and is SSR-safe; nothing is registered\n * until a `define*()` function runs in a browser.\n *\n * @license MIT\n */\nimport { defineRevealComponents } from './reveal/index';\nimport { defineTextComponents } from './text/index';\nimport { defineInteractionComponents } from './interaction/index';\nimport { defineFeedbackComponents } from './feedback/index';\nimport { defineBackgroundComponents } from './background/index';\nimport { defineTransitionComponents } from './transitions/index';\nimport { definePhysicsComponents } from './physics/index';\nimport { defineCardComponents } from './cards/index';\nimport { defineClickComponents } from './click/index';\nimport { defineUiComponents } from './ui/index';\nimport { definePageComponents } from './page/index';\nimport { defineTimelineComponents } from './timeline/index';\nimport { defineGestureComponents } from './gesture/index';\nimport { defineSvgComponents } from './svg/index';\nimport { defineWebglComponents } from './webgl/index';\nimport { defineDepthComponents } from './depth/index';\nimport { defineLayoutComponents } from './layout/index';\nimport { definePacksComponents } from './packs/index';\nimport { adoptVariants } from './ui/variants';\nimport { canDefine } from './base';\n\nexport * from './reveal/index';\nexport * from './text/index';\nexport * from './interaction/index';\nexport * from './feedback/index';\nexport * from './background/index';\nexport * from './transitions/index';\nexport * from './physics/index';\nexport * from './cards/index';\nexport * from './click/index';\nexport * from './ui/index';\nexport * from './page/index';\nexport * from './timeline/index';\nexport * from './gesture/index';\nexport * from './svg/index';\nexport * from './webgl/index';\nexport * from './depth/index';\nexport * from './layout/index';\nexport * from './packs/index';\n\nexport { COMPONENT_CATEGORIES } from './index-tags';\nexport type { ComponentCategory } from './index-tags';\nimport { COMPONENT_CATEGORIES, type ComponentCategory } from './index-tags';\n\nconst BY_CATEGORY: Record<ComponentCategory, () => void> = {\n reveal: defineRevealComponents,\n text: defineTextComponents,\n interaction: defineInteractionComponents,\n feedback: defineFeedbackComponents,\n background: defineBackgroundComponents,\n transitions: defineTransitionComponents,\n physics: definePhysicsComponents,\n cards: defineCardComponents,\n click: defineClickComponents,\n ui: defineUiComponents,\n page: definePageComponents,\n timeline: defineTimelineComponents,\n gesture: defineGestureComponents,\n svg: defineSvgComponents,\n webgl: defineWebglComponents,\n depth: defineDepthComponents,\n layout: defineLayoutComponents,\n packs: definePacksComponents,\n};\n\n/**\n * Register every `<usa-*>` component (or only the given categories).\n * Safe to call more than once and on the server (no-op without DOM).\n */\nexport function defineComponents(categories?: ComponentCategory[]): void {\n if (canDefine()) adoptVariants();\n (categories || (Object.keys(BY_CATEGORY) as ComponentCategory[])).forEach((c) => BY_CATEGORY[c]?.());\n}\n","// IIFE/UMD build (dist/components.umd.js): registers every <usa-*> element\n// as soon as the script loads. Exposes the full API as `window.UsaComponents`.\nimport { defineComponents } from './index';\n\ndefineComponents();\nexport * from './index';\n","import { adoptStyles, raf, caf, prefersReducedMotion } from '../base';\nimport { setVariant } from '../ui/variants';\nimport css from './fluent.css?raw';\n\nexport interface FluentPresetOptions {\n /** Root to apply to (default `document.documentElement`). */\n root?: HTMLElement;\n /** Reveal highlight on interactive elements (default `true`). */\n reveal?: boolean;\n /** Reveal targets (default buttons, links, `[data-fluent-reveal]`). */\n selector?: string;\n /** Mica-style tinted window background on `<body>` (default `true`). */\n mica?: boolean;\n}\n\n/**\n * Windows 11 **Fluent preset** (v2.8): applies the `fluent` variant\n * (Segoe UI Variable, Windows accent, 8 px radii), a Mica-style tinted\n * window background, Acrylic on `.usa-acrylic` / `[data-acrylic]`, and\n * Reveal highlight (a light following the pointer on borders and\n * backgrounds of interactive elements). Ideal for WebView2 / Electron /\n * Tauri apps on Windows. Returns a function that removes it.\n * Respects reduced motion / transparency (no Reveal tracking; solid materials).\n */\nexport function fluentPreset(options: FluentPresetOptions = {}): () => void {\n if (typeof document === 'undefined') return () => undefined;\n const root = options.root || document.documentElement;\n adoptStyles('fluent-preset', css);\n setVariant('fluent', root);\n root.classList.add('usa-fluent');\n if (options.mica !== false) root.classList.add('usa-fluent-mica');\n const sel = options.selector || 'button, [role=\"button\"], a.usa-fluent-item, [data-fluent-reveal], .usa-fluent-item';\n let frame = 0;\n let last: HTMLElement | null = null;\n let ev: PointerEvent | null = null;\n const apply = () => {\n frame = 0;\n if (!ev) return;\n const t = (ev.target as Element)?.closest?.(sel) as HTMLElement | null;\n if (last && last !== t) last.removeAttribute('data-reveal');\n last = t;\n if (!t) return;\n const r = t.getBoundingClientRect();\n t.style.setProperty('--usa-reveal-x', `${ev.clientX - r.left}px`);\n t.style.setProperty('--usa-reveal-y', `${ev.clientY - r.top}px`);\n t.setAttribute('data-reveal', '');\n };\n const move = (e: PointerEvent) => {\n if (e.pointerType === 'touch') return;\n ev = e;\n if (!frame) frame = raf(apply);\n };\n const reveal = options.reveal !== false && !prefersReducedMotion();\n if (reveal) document.addEventListener('pointermove', move, { passive: true });\n return () => {\n document.removeEventListener('pointermove', move);\n caf(frame);\n last?.removeAttribute('data-reveal');\n root.classList.remove('usa-fluent', 'usa-fluent-mica');\n setVariant(null, root);\n };\n}\n"],"names":["MOTION_SCALE","off","low","normal","high","config","injectStyles","reducedMotion","motionIntensity","configureComponents","options","Object","assign","document","documentElement","style","setProperty","String","setAttribute","getMotionIntensity","motionScale","canDefine","customElements","HTMLElement","prefersReducedMotion","matchMedia","matches","injected","Set","adoptStyles","id","css","has","add","CSSStyleSheet","sheet","replaceSync","adoptedStyleSheets","createElement","textContent","head","appendChild","baseClass","applyFrame","el","frame","k","v","entries","defineElement","tag","make","BASE_CSS","text","existing","get","ctor","Base","constructor","this","_cleanups","_connected","reduced","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","getAttribute","num","n","trim","NaN","Number","isFinite","flag","setFlag","on","removeAttribute","onCleanup","listen","target","type","inView","cb","init","IntersectionObserver","io","e","isIntersecting","observe","disconnect","motion","keyframes","animate","duration","delay","emit","detail","dispatchEvent","CustomEvent","bubbles","cancelable","getBase","define","srText","s","className","raf","requestAnimationFrame","setTimeout","Date","now","performance","caf","cancelAnimationFrame","clearTimeout","EASE_OUT","EASE_SPRING","FLUENT_DECELERATE","kindOf","valid","Array","isArray","includes","clamp","min","max","Math","revealKeyframes","effect","distance","from","d","opacity","transform","filter","transformOrigin","revealFrom","to","keys","defineReveal","_anim","observedAttributes","revealed","visible","reveal","reset","threshold","rootMargin","cancel","Promise","resolve","a","easing","fill","done","onfinish","defineStagger","_anims","kids","children","frames","interval","base","anims","map","kid","i","last","readScrollProgress","window","vh","innerHeight","clientHeight","r","getBoundingClientRect","total","height","top","doc","scrollHeight","scrollY","scrollTop","defineScrollProgress","_bar","_p","_frame","progress","replaceChildren","hasAttribute","schedule","update","passive","sel","p","querySelector","abs","pct","round","defineScrolly","_active","active","steps","querySelectorAll","offset","activate","indexOf","index","silent","toggleAttribute","step","dataset","defineRevealComponents","defineTypewriter","_source","_out","_timer","_running","phrases","words","split","w","Boolean","sr","join","caret","start","stop","restart","out","speed","del","pause","loop","deleting","tick","word","slice","random","defineSplitText","units","replace","byWords","frag","createDocumentFragment","append","wordEl","parts","part","u","trigger","play","offsetWidth","GLYPHS","scrambleFrame","glyphs","rnd","floor","ch","test","defineScramble","played","t0","bucket","undefined","easeOutExpo","t","pow","defineCounter","_current","_target","_fmt","isNaN","format","locale","lang","Intl","NumberFormat","minimumFractionDigits","maximumFractionDigits","useGrouping","render","defineShimmerText","set","attr","prop","unit","removeProperty","defineTextRotate","_index","_visible","setInterval","hidden","next","clearInterval","els","prev","cur","inFrom","outTo","neutral","pick","f","fromEntries","textOf","usaText","defineWaveText","host","vis","chars","createTextNode","c","splitChars","defineGlitch","firstChild","defineGradientText","defineHandwriting","size","ceil","insertAdjacentHTML","defineScrollHighlight","_f","mode","H","lit","defineTextComponents","defineRipple","button","pointerType","ripple","clientX","clientY","key","repeat","x","y","centered","cx","width","left","cy","radius","hypot","wave","cssText","remove","defineMagnetic","strength","apply","dx","dy","toFixed","release","defineTilt","_glare","scale","persp","px","py","rect","nx","ny","defineSpotlight","items","marked","classList","color","border","definePress","_down","pressed","down","currentFrame","up","getComputedStyle","cs","defineToggle","_a","super","_internals","attachInternals","checked","disabled","sync","tabIndex","label","setFormValue","track","knob","prepend","toggle","preventDefault","force","Event","formAssociated","defineInteractionComponents","SPINNER_VARIANTS","defineSpinner","kind","variant","innerHTML","markup","defineSkeleton","_ph","loading","build","ph","bone","cls","b","col","defineProgress","_fill","m","ratio","firstElementChild","ICONS","info","success","warning","error","defineToaster","flip","mutate","before","Map","composite","enterFrames","pos","endsWith","startsWith","show","message","closed","timer","close","action","btn","onClick","dismissible","arm","hold","live","extra","_close","element","clear","PATHS","defineCheck","circle","mark","svg","draw","strokeDashoffset","defineFeedbackComponents","defineAurora","_layer","colors","blob","defineParticles","_canvas","_ctx","_ps","_w","_h","_mx","_color","_my","getContext","resize","ResizeObserver","ro","clientWidth","h","dpr","devicePixelRatio","setTransform","want","PI","vx","cos","vy","sin","run","d2","sqrt","ctx","clearRect","fillStyle","strokeStyle","ps","link","l2","lineWidth","j","globalAlpha","beginPath","moveTo","lineTo","stroke","arc","defineGrain","backgroundImage","backgroundSize","mixBlendMode","defineMarquee","_track","_hover","_size","vertical","group","syncClones","lastElementChild","clone","cloneNode","gap","measured","offsetHeight","box","getComputedTiming","axis","iterations","Infinity","currentTime","getTiming","playState","resume","defineAcrylic","tint","canvasLoop","still","defineGridGlow","defineBlobs","layer","defineWaterRipple","_drop","drop","cols","rows","Float32Array","damp","nc","nr","fillRect","defineDotNetwork","R","near","ox","oy","adoptVariants","setVariant","root","defineBackgroundComponents","FROM","modal","defineDialog","_dialog","_panel","_backdrop","_busy","_syncing","returnValue","dialog","open","syncAttrs","shadowRoot","attachShadow","shadowStyles","dlg","closest","contains","setOpenAttr","showModal","animate2","panelTo","panelFrom","getAnimations","panel","backdrop","all","finished","catch","then","defineAccordion","WeakMap","tagName","summary","parentElement","toggleItem","closedHeight","reduce","parseFloat","o","delete","startH","details","endH","overflow","defineViewSwitch","views","byName","findIndex","view","isInteger","setVisible","finish","dir","outF","inF","list","Element","defineTransitionComponents","SPRING_PRESETS","default","stiffness","damping","mass","gentle","wobbly","stiff","bouncy","slow","molasses","resolveSpring","input","velocity","precision","stepSpring","cfg","dt","nv","cache","springSamples","fps","hit","values","supportsLinearEasing","CSS","supports","springEasing","points","linearEasing","createSpring","opts","spring","running","onUpdate","onRest","api","animating","jump","configure","projectInertia","timeConstant","snapTo","best","rubberBand","dimension","constant","ENTRANCE","springEffectKeyframes","DEFAULT_PRESET","pop","defineSpring","entrance","timing","parseSnap","defineDraggable","_x","_y","_drag","dragging","limits","minX","maxX","right","minY","maxY","bottom","settled","rest","_sx","_sy","move","end","pointerId","samples","timeStamp","setPointerCapture","band","lo","hi","dim","shift","tx","ty","constrain","snap","ArrowLeft","ArrowRight","ArrowUp","ArrowDown","defineOverscroll","_off","edge","delta","scrollLeft","scrollWidth","stretch","raw","_spring","pull","deltaX","deltaY","touches","dist","definePhysicsComponents","TRACKING","defineCard","_spacer","effects","flipped","expanded","deco","interactive","setBackHidden","stopPropagation","collapse","expand","some","depth","l","finishCollapse","front","back","first","spacer","flipFrom","focus","preventScroll","sx","sy","defineCardStack","cards","layout","dragX","zIndex","rot","kk","x0","swipe","mo","MutationObserver","childList","direction","card","defineStickyStack","rects","shrink","covered","defineCarousel3d","_i","goTo","angle","tan","it","norm","_angle","find","every","paused","curIdx","defineCardComponents","PALETTE","GLYPH","star","heart","particle","shape","glyph","body","burst","count","confetti","W","innerWidth","spread","T","spin","g","shake","intensity","outline","haptic","pattern","navigator","vibrate","defineClick","_press","kb","capture","fx","gooInjected","defineButton","_status","_shapeBefore","deforms","morphTo","state","createElementNS","position","injectGoo","applyState","isOff","ev","wobble","submit","click","goo","getKeyframes","borderRadius","backgroundColor","drops","ang","after","ok","C","MORPH_ICONS","menu","plus","minus","check","morphPath","q","defineIconMorph","_from","_to","icon","_t","defineLike","liked","getPropertyValue","defineHold","_holding","dur","rewind","defineDoubleTap","lx","ly","toLowerCase","defineCheckbox","UsaCheckbox","indeterminate","defineClickComponents","place","floating","anchor","placement","fits","opposite","uid","nextId","prefix","defineTabs","selected","select","tabs","localName","panels","Home","End","moveBar","bar","fromW","offsetLeft","initial","makePanel","_return","side","stops","_pos","afterClose","dragStart","dragMove","dragEnd","hide","activeElement","initialStop","origin","lt","moved","vel","defineDrawer","defineBottomSheet","Panel","fractions","full","sort","definePullRefresh","_ind","_live","refreshing","th","refresh","onrefresh","defineFab","main","actions","defineNavbar","_last","hiddenByScroll","scroller","defineSlider","UsaSlider","_v","_id","range","setValue","fraction","user","val","bubble","fromPointer","commit","mn","mx","st","PageUp","PageDown","defineRating","UsaRating","_","preview","choose","defineTooltip","_tip","tip","definePopover","defineBadge","_el","bump","empty","defineAvatarStack","more","defineUiComponents","defineCursor","fine","dot","pts","my","goalX","goalY","kick","scrollToTarget","node","scrollTo","preset","defineFullpage","sections","secs","nav","intersectionRatio","behavior","offsetTop","defineLoadingBar","paint","loadingBar","task","defineBackToTop","async","defineAmbient","upd","canvas","dots","defineSplash","_t0","_gone","wait","exit","fade","clipPath","defineAutoSkeleton","LEVELS","KEY","setMotionIntensity","level","persist","localStorage","setItem","restoreMotionIntensity","getItem","defineMotionSwitch","labels","lastPointer","trackPointer","supportsViewTransitions","startViewTransition","setVars","pageTransition","vt","definePageComponents","TIMELINE_PRESETS","blur","rotate","resolvePosition","prevStart","exec","timeline","stagger","defaults","cues","settle","built","at","anim","onComplete","rate","time","kf","toEls","call","seek","scrub","source","goal","sm","smooth","onScroll","defineTimeline","_tl","overlap","tl","defineTimelineComponents","swipeDirection","horiz","pinchScale","startDistance","pid","gesture","press","panning","pinch","pinchScaleNow","lastTap","onPinch","onPan","event","d0","onLongPress","longPress","mid","swipeDistance","swipeVelocity","onSwipe","onDoubleTap","onTap","wheel","wheelPinch","ctrlKey","exp","touchAction","defineSwipeable","put","sign","far","_s","definePinchZoom","bound","zoomTo","_k","defineGestureComponents","NUM","pathsCompatible","interpolatePath","nb","match","ease","path","__usaMorph","drawLines","shapes","strokeDasharray","local","defineDraw","_set","defineMorph","_path","MASK_SHAPES","diamond","wipe","iris","defineMaskReveal","ANIM_ICONS","bell","arrow","translate","gear","search","download","defineAnimIcon","defineSvgComponents","SHADERS","gradient","plasma","waves","aurora","distort","liquid","fragmentSource","src","support","glQuad","gl","premultipliedAlpha","antialias","sh","createShader","shaderSource","compileShader","getShaderParameter","COMPILE_STATUS","vs","VERTEX_SHADER","fs","FRAGMENT_SHADER","prog","createProgram","attachShader","linkProgram","getProgramParameter","LINK_STATUS","useProgram","buf","createBuffer","bindBuffer","ARRAY_BUFFER","bufferData","STATIC_DRAW","loc","getAttribLocation","enableVertexAttribArray","vertexAttribPointer","FLOAT","U","getUniformLocation","uT","uR","uM","uH","uRp","tex","quad","viewport","texture","img","createTexture","bindTexture","TEXTURE_2D","pixelStorei","UNPACK_FLIP_Y_WEBGL","texParameteri","TEXTURE_WRAP_S","CLAMP_TO_EDGE","TEXTURE_WRAP_T","TEXTURE_MIN_FILTER","LINEAR","texImage2D","RGBA","UNSIGNED_BYTE","uniform1f","uniform2f","mouse","hover","uniform4fv","ripples","concat","drawArrays","TRIANGLES","dispose","deleteProgram","deleteBuffer","deleteTexture","getExtension","loseContext","_q","_c","_mouse","_hoverTo","_ripples","reason","flatMap","custom","complete","naturalWidth","crossOrigin","location","defineShader","defineDistort","defineLiquid","defineWebglComponents","FACES","ROT","defineCube","_base","faces","_rx","_ry","face","rx","ry","ms","orientationToTilt","beta","gamma","supportsOrientation","requestOrientationPermission","D","DeviceOrientationEvent","requestPermission","deviceTilt","defineDepth","tilt","defineDepthComponents","flipFrames","autoAnimate","parent","boxes","rel","records","added","addedNodes","removedNodes","margin","pointerEvents","__usaGhost","enable","disable","masonryLayout","heights","columns","columnWidth","defineAutoAnimate","defineMasonry","cw","queue","recs","defineLayoutComponents","es","countUp","dec","fmt","toLocaleString","flyToCart","ghost","PRIMITIVES","lift","pulse","boxShadow","float","cart","item","PACKS","ecommerce","product","price","badge","portfolio","project","heading","stat","contact","dashboard","alert","game","score","reward","landing","hero","feature","cta","logo","applyPack","pack","cleanups","role","PACK_PRIMITIVES","definePack","roles","display","definePacksComponents","BY_CATEGORY","interaction","feedback","background","transitions","physics","ui","page","webgl","packs","defineComponents","categories","targets","animateEnter","mica","selector","collect","shared","named","viewTransitionName","lerp","mult","wheelMultiplier","current","onWheel","defaultPrevented","deltaMode","toaster","types"],"mappings":"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"}
1
+ {"version":3,"file":"components.umd.js","sources":["../src/components/base.ts","../src/components/reveal/effects.ts","../src/components/reveal/reveal.ts","../src/components/reveal/stagger.ts","../src/components/reveal/scroll-progress.ts","../src/components/reveal/scrolly.ts","../src/components/reveal/index.ts","../src/components/text/typewriter.ts","../src/components/text/split-text.ts","../src/components/text/scramble.ts","../src/components/text/counter.ts","../src/components/text/shimmer-text.ts","../src/components/text/text-rotate.ts","../src/components/text/text-fx.ts","../src/components/text/index.ts","../src/components/interaction/ripple.ts","../src/components/interaction/magnetic.ts","../src/components/interaction/tilt.ts","../src/components/interaction/spotlight.ts","../src/components/interaction/press.ts","../src/components/interaction/toggle.ts","../src/components/interaction/index.ts","../src/components/feedback/spinner.ts","../src/components/feedback/skeleton.ts","../src/components/feedback/progress.ts","../src/components/feedback/toast.ts","../src/components/feedback/check.ts","../src/components/feedback/index.ts","../src/components/background/aurora.ts","../src/components/background/particles.ts","../src/components/background/grain.ts","../src/components/background/marquee.ts","../src/components/background/acrylic.ts","../src/components/background/bg-fx.ts","../src/components/ui/variants.ts","../src/components/background/index.ts","../src/components/transitions/dialog.ts","../src/components/transitions/accordion.ts","../src/components/transitions/view-switch.ts","../src/components/transitions/helpers.ts","../src/components/transitions/index.ts","../src/components/physics/spring.ts","../src/components/physics/spring-effect.ts","../src/components/physics/draggable.ts","../src/components/physics/overscroll.ts","../src/components/physics/index.ts","../src/components/cards/card.ts","../src/components/cards/card-stack.ts","../src/components/cards/sticky-stack.ts","../src/components/cards/carousel-3d.ts","../src/components/cards/index.ts","../src/components/click/fx.ts","../src/components/click/click.ts","../src/components/click/button.ts","../src/components/click/icon-morph.ts","../src/components/click/like.ts","../src/components/click/hold.ts","../src/components/click/double-tap.ts","../src/components/click/checkbox.ts","../src/components/click/index.ts","../src/components/ui/position.ts","../src/components/ui/tabs.ts","../src/components/ui/sheet.ts","../src/components/ui/pull-refresh.ts","../src/components/ui/fab.ts","../src/components/ui/navbar.ts","../src/components/ui/slider.ts","../src/components/ui/rating.ts","../src/components/ui/tooltip.ts","../src/components/ui/popover.ts","../src/components/ui/badge.ts","../src/components/ui/avatar-stack.ts","../src/components/ui/index.ts","../src/components/page/cursor.ts","../src/components/page/scroll.ts","../src/components/page/fullpage.ts","../src/components/page/loading-bar.ts","../src/components/page/back-to-top.ts","../src/components/page/ambient.ts","../src/components/page/splash.ts","../src/components/page/auto-skeleton.ts","../src/components/page/motion-switch.ts","../src/components/page/transitions.ts","../src/components/page/index.ts","../src/components/timeline/core.ts","../src/components/timeline/timeline-el.ts","../src/components/timeline/index.ts","../src/components/gesture/core.ts","../src/components/gesture/swipeable.ts","../src/components/gesture/pinch-zoom.ts","../src/components/gesture/index.ts","../src/components/svg/core.ts","../src/components/svg/draw.ts","../src/components/svg/morph.ts","../src/components/svg/mask-reveal.ts","../src/components/svg/anim-icon.ts","../src/components/svg/index.ts","../src/components/webgl/gl.ts","../src/components/webgl/elements.ts","../src/components/webgl/index.ts","../src/components/depth/cube.ts","../src/components/depth/core.ts","../src/components/depth/depth-el.ts","../src/components/depth/index.ts","../src/components/layout/core.ts","../src/components/layout/elements.ts","../src/components/layout/index.ts","../src/components/packs/core.ts","../src/components/packs/pack-el.ts","../src/components/packs/index.ts","../src/components/index-tags.ts","../src/components/index.ts","../src/components/auto.ts","../src/components/background/fluent.ts"],"sourcesContent":["/**\n * use-scroll-animate/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 `use-scroll-animate/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);\n * `'no-preference'` ignores the OS setting (only for demos — respect your users).\n */\n reducedMotion?: 'user' | 'reduce' | 'no-preference';\n /**\n * Global motion intensity (v2.7): `'off'` (same as reduced motion),\n * `'low'` (shorter, calmer), `'normal'` (default) or `'high'`. Scales every\n * component animation's duration and sets `--usa-motion` (0 / 0.6 / 1 /\n * 1.25) on `<html>` for your own CSS. See `setMotionIntensity()`.\n */\n motionIntensity?: MotionIntensity;\n}\n\nexport type MotionIntensity = 'off' | 'low' | 'normal' | 'high';\nexport const MOTION_SCALE: Record<MotionIntensity, number> = { off: 0, low: 0.6, normal: 1, high: 1.25 };\n\nconst config: Required<ComponentsConfig> = { injectStyles: true, reducedMotion: 'user', motionIntensity: 'normal' };\n\n/** Change global component settings (call before `define*()` for `injectStyles`). */\nexport function configureComponents(options: ComponentsConfig): void {\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}\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.motionIntensity === 'off') return true;\n if (config.reducedMotion !== 'user') return config.reducedMotion === 'reduce';\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 // 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 if (typeof (el as HTMLElement).animate !== 'function') {\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 return (el as HTMLElement).animate(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/** 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/** requestAnimationFrame with a timeout fallback (jsdom / hidden documents). */\nexport const raf = (cb: FrameRequestCallback): number =>\n typeof requestAnimationFrame === 'function' ? requestAnimationFrame(cb) : (setTimeout(() => cb(Date.now()), 16) as unknown as number);\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 if (typeof cancelAnimationFrame === 'function') cancelAnimationFrame(id);\n else clearTimeout(id);\n};\n\n/** Spring-ish easing used across the components. */\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(`[use-scroll-animate] ${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","/** Entrance effects shared by `<usa-reveal>` and `<usa-stagger>` (transform / opacity / filter only). */\n\nexport const REVEAL_EFFECTS = [\n 'fade',\n 'fade-up',\n 'fade-down',\n 'fade-left',\n 'fade-right',\n 'zoom-in',\n 'zoom-out',\n 'blur',\n 'blur-up',\n 'flip-up',\n 'flip-left',\n 'rise',\n] as const;\n\nexport type RevealEffect = (typeof REVEAL_EFFECTS)[number];\n\n/** The \"from\" keyframe of an effect; the \"to\" keyframe is the element's natural state. */\nexport function revealFrom(effect: string, distance = 32): Keyframe {\n const d = `${distance}px`;\n switch (effect) {\n case 'fade':\n return { opacity: 0 };\n case 'fade-down':\n return { opacity: 0, transform: `translate3d(0,-${d},0)` };\n case 'fade-left':\n return { opacity: 0, transform: `translate3d(-${d},0,0)` };\n case 'fade-right':\n return { opacity: 0, transform: `translate3d(${d},0,0)` };\n case 'zoom-in':\n return { opacity: 0, transform: 'scale(0.86)' };\n case 'zoom-out':\n return { opacity: 0, transform: 'scale(1.14)' };\n case 'blur':\n return { opacity: 0, filter: 'blur(12px)' };\n case 'blur-up':\n return { opacity: 0, filter: 'blur(10px)', transform: `translate3d(0,${d},0)` };\n case 'flip-up':\n return { opacity: 0, transform: 'perspective(800px) rotateX(-55deg)', transformOrigin: '50% 100%' };\n case 'flip-left':\n return { opacity: 0, transform: 'perspective(800px) rotateY(55deg)', transformOrigin: '0% 50%' };\n case 'rise':\n return { opacity: 0, transform: `translate3d(0,${distance * 1.5}px,0) scale(0.96)` };\n case 'fade-up':\n default:\n return { opacity: 0, transform: `translate3d(0,${d},0)` };\n }\n}\n\n/** Keyframes from the effect to the natural state. */\nexport function revealKeyframes(effect: string, distance?: number): Keyframe[] {\n const from = revealFrom(effect, distance);\n const to: Keyframe = {};\n for (const k of Object.keys(from)) {\n if (k === 'opacity') to.opacity = 1;\n else if (k === 'transform') to.transform = 'none';\n else if (k === 'filter') to.filter = 'none';\n else if (k === 'transformOrigin') to.transformOrigin = from.transformOrigin;\n }\n return [from, to];\n}\n","import { defineElement, EASE_OUT, type UsaElement } from '../base';\nimport { revealKeyframes, type RevealEffect } from './effects';\nimport css from './reveal.css?raw';\n\n/**\n * `<usa-reveal>` — reveals its content when it scrolls into view.\n *\n * Attributes: `effect` (see {@link RevealEffect}, default `fade-up`),\n * `duration` (ms, 700), `delay` (ms, 0), `distance` (px, 32), `easing`,\n * `threshold` (0–1, 0.15), `root-margin`, `repeat` (hide again when it\n * leaves, replay on re-entry). Events: `usa:enter`, `usa:leave`, `usa:complete`.\n */\nexport interface UsaRevealElement extends UsaElement {\n effect: RevealEffect | string;\n /** Play the entrance now (also called automatically on enter). */\n reveal(): Promise<void>;\n /** Hide again so the next `reveal()` replays the entrance. */\n reset(): void;\n readonly revealed: boolean;\n}\n\nexport function defineReveal(tag = 'usa-reveal'): CustomElementConstructor | undefined {\n return defineElement(\n tag,\n (Base) =>\n class UsaReveal extends Base {\n static get observedAttributes(): string[] {\n return ['effect', 'distance', 'repeat', 'threshold', 'root-margin'];\n }\n\n private _anim: Animation | null = null;\n\n get effect(): string {\n return this.str('effect', 'fade-up');\n }\n set effect(v: string) {\n this.setAttribute('effect', v);\n }\n get revealed(): boolean {\n return this.getAttribute('data-state') !== 'hidden';\n }\n\n mount(): void {\n if (this.reduced) {\n this.setAttribute('data-state', 'shown');\n return;\n }\n if (this.getAttribute('data-state') !== 'shown') this.setAttribute('data-state', 'hidden');\n this.inView(\n (visible) => {\n if (visible) {\n this.emit('enter');\n if (!this.revealed) this.reveal();\n } else {\n this.emit('leave');\n if (this.flag('repeat') && this.revealed) this.reset();\n }\n },\n { threshold: this.num('threshold', 0.15), rootMargin: this.str('root-margin', '0px') }\n );\n }\n\n unmount(): void {\n this._anim?.cancel();\n this._anim = null;\n }\n\n reveal(): Promise<void> {\n this._anim?.cancel();\n this.setAttribute('data-state', 'shown');\n if (this.reduced) return Promise.resolve();\n const a = this.motion(this, revealKeyframes(this.effect, this.num('distance', 32)), {\n duration: this.num('duration', 700),\n delay: this.num('delay', 0),\n easing: this.str('easing', EASE_OUT),\n fill: 'backwards',\n });\n this._anim = a;\n return new Promise((resolve) => {\n const done = () => {\n if (this._anim === a) this._anim = null;\n this.emit('complete');\n resolve();\n };\n if (!a) done();\n else a.onfinish = done;\n });\n }\n\n reset(): void {\n this._anim?.cancel();\n this._anim = null;\n if (!this.reduced) this.setAttribute('data-state', 'hidden');\n }\n },\n { id: 'reveal', text: css }\n );\n}\n","import { defineElement, EASE_OUT, type UsaElement } from '../base';\nimport { revealKeyframes } from './effects';\nimport css from './reveal.css?raw';\n\n/**\n * `<usa-stagger>` — reveals its direct children one after another when the\n * list scrolls into view.\n *\n * Attributes: `effect` (default `fade-up`), `interval` (ms between children,\n * 70), `duration` (600), `delay` (0), `distance` (24), `easing`,\n * `threshold` (0.1), `repeat`. Events: `usa:enter`, `usa:complete`.\n */\nexport interface UsaStaggerElement extends UsaElement {\n reveal(): Promise<void>;\n reset(): void;\n}\n\nexport function defineStagger(tag = 'usa-stagger'): CustomElementConstructor | undefined {\n return defineElement(\n tag,\n (Base) =>\n class UsaStagger extends Base {\n static get observedAttributes(): string[] {\n return ['effect', 'repeat', 'threshold'];\n }\n\n private _anims: Animation[] = [];\n\n mount(): void {\n if (this.reduced) {\n this.setAttribute('data-state', 'shown');\n return;\n }\n if (this.getAttribute('data-state') !== 'shown') this.setAttribute('data-state', 'hidden');\n this.inView(\n (visible) => {\n if (visible && this.getAttribute('data-state') === 'hidden') {\n this.emit('enter');\n this.reveal();\n } else if (!visible && this.flag('repeat')) this.reset();\n },\n { threshold: this.num('threshold', 0.1) }\n );\n }\n\n unmount(): void {\n this.cancel();\n }\n\n private cancel(): void {\n this._anims.splice(0).forEach((a) => a.cancel());\n }\n\n reveal(): Promise<void> {\n this.cancel();\n this.setAttribute('data-state', 'shown');\n const kids = Array.from(this.children) as HTMLElement[];\n if (this.reduced || !kids.length) return Promise.resolve();\n const frames = revealKeyframes(this.str('effect', 'fade-up'), this.num('distance', 24));\n const interval = this.num('interval', 70);\n const base = this.num('delay', 0);\n const duration = this.num('duration', 600);\n const easing = this.str('easing', EASE_OUT);\n const anims = kids\n .map((kid, i) => this.motion(kid, frames, { duration, easing, delay: base + i * interval, fill: 'backwards' }))\n .filter((a): a is Animation => !!a);\n this._anims = anims;\n const last = anims[anims.length - 1];\n return new Promise((resolve) => {\n const done = () => {\n this.emit('complete');\n resolve();\n };\n if (!last) done();\n else last.onfinish = done;\n });\n }\n\n reset(): void {\n this.cancel();\n if (!this.reduced) this.setAttribute('data-state', 'hidden');\n }\n },\n { id: 'reveal', text: css }\n );\n}\n","import { defineElement, raf, caf, clamp, type UsaElement } from '../base';\nimport css from './scroll-progress.css?raw';\n\n/**\n * `<usa-scroll-progress>` — a reading-progress bar.\n *\n * Attributes: `target` (CSS selector of an article to track; default the\n * whole page), `position` (`top` | `bottom` | `inline`, default `top`),\n * `label` (accessible name, default \"Reading progress\"). Style with\n * `--usa-progress-color`, `--usa-progress-height`, `--usa-progress-track`.\n * Exposes the progress (0–1) as `--usa-progress` on the element and as the\n * `progress` property. Event: `usa:progress` (`detail.progress`).\n *\n * Writes only `transform: scaleX()` (compositor-friendly); reads layout\n * once per animation frame, and only while scrolling.\n */\nexport interface UsaScrollProgressElement extends UsaElement {\n readonly progress: number;\n /** Re-measure (e.g. after content loaded). */\n update(): void;\n}\n\n/** Progress (0–1) of `target` scrolling through the viewport, or of the page. */\nexport function readScrollProgress(target?: Element | null): number {\n if (typeof window === 'undefined') return 0;\n const vh = window.innerHeight || document.documentElement.clientHeight;\n if (target) {\n const r = target.getBoundingClientRect();\n const total = r.height - vh;\n return total <= 0 ? (r.top <= 0 ? 1 : 0) : clamp(-r.top / total, 0, 1);\n }\n const doc = document.documentElement;\n const max = doc.scrollHeight - vh;\n return max <= 0 ? 0 : clamp((window.scrollY || doc.scrollTop) / max, 0, 1);\n}\n\nexport function defineScrollProgress(tag = 'usa-scroll-progress'): CustomElementConstructor | undefined {\n return defineElement(\n tag,\n (Base) =>\n class UsaScrollProgress extends Base {\n static get observedAttributes(): string[] {\n return ['target', 'label'];\n }\n\n private _bar: HTMLElement | null = null;\n private _p = -1;\n private _frame = 0;\n\n get progress(): number {\n return Math.max(0, this._p);\n }\n\n mount(): void {\n if (!this._bar) {\n this._bar = document.createElement('span');\n this._bar.className = 'usa-progress-fill';\n this.replaceChildren(this._bar);\n }\n this.setAttribute('role', 'progressbar');\n this.setAttribute('aria-valuemin', '0');\n this.setAttribute('aria-valuemax', '100');\n if (!this.hasAttribute('aria-label')) this.setAttribute('aria-label', this.str('label', 'Reading progress'));\n const schedule = () => {\n if (!this._frame) this._frame = raf(() => ((this._frame = 0), this.update()));\n };\n this.listen(window, 'scroll', schedule, { passive: true });\n this.listen(window, 'resize', schedule, { passive: true });\n this.update();\n }\n\n unmount(): void {\n caf(this._frame);\n this._frame = 0;\n }\n\n update(): void {\n const sel = this.getAttribute('target');\n const target = sel ? document.querySelector(sel) : null;\n const p = readScrollProgress(target);\n if (Math.abs(p - this._p) < 0.0005) return;\n this._p = p;\n if (this._bar) this._bar.style.transform = `scaleX(${p})`;\n this.style.setProperty('--usa-progress', String(p));\n const pct = String(Math.round(p * 100));\n if (this.getAttribute('aria-valuenow') !== pct) this.setAttribute('aria-valuenow', pct);\n this.emit('progress', { progress: p });\n }\n },\n { id: 'scroll-progress', text: css }\n );\n}\n","import { defineElement, clamp, type UsaElement } from '../base';\nimport css from './scrolly.css?raw';\n\n/**\n * `<usa-scrolly>` — sticky scrollytelling. A child marked `data-sticky`\n * stays pinned while the `[data-step]` children scroll past; the step that\n * crosses the trigger line becomes active.\n *\n * Attributes: `offset` (trigger line as a fraction of the viewport height,\n * default 0.5), `active` (reflected index of the active step). The active\n * step gets `data-active`; the host gets `--usa-step` and `data-step-name`\n * (the step's `data-step` value). Event: `usa:step` (`detail.index`,\n * `detail.step`, `detail.name`).\n */\nexport interface UsaScrollyElement extends UsaElement {\n readonly active: number;\n readonly steps: HTMLElement[];\n}\n\nexport function defineScrolly(tag = 'usa-scrolly'): CustomElementConstructor | undefined {\n return defineElement(\n tag,\n (Base) =>\n class UsaScrolly extends Base {\n static get observedAttributes(): string[] {\n return ['offset'];\n }\n\n private _active = -1;\n\n get active(): number {\n return this._active;\n }\n get steps(): HTMLElement[] {\n return Array.from(this.querySelectorAll<HTMLElement>('[data-step]'));\n }\n\n mount(): void {\n const steps = this.steps;\n if (!steps.length) return;\n const offset = clamp(this.num('offset', 0.5), 0, 1);\n // A thin trigger band `offset` down the viewport\n const top = Math.min(99, Math.round(offset * 100));\n const rootMargin = `-${top}% 0px -${Math.max(0, 99 - top)}% 0px`;\n if (typeof IntersectionObserver === 'undefined') {\n this.activate(0);\n return;\n }\n const io = new IntersectionObserver(\n (entries) => {\n for (const e of entries) if (e.isIntersecting) this.activate(steps.indexOf(e.target as HTMLElement));\n },\n { rootMargin }\n );\n steps.forEach((s) => io.observe(s));\n this.onCleanup(() => io.disconnect());\n if (this._active < 0) this.activate(0, true);\n }\n\n activate(index: number, silent = false): void {\n const steps = this.steps;\n if (index < 0 || index >= steps.length || index === this._active) return;\n this._active = index;\n steps.forEach((s, i) => s.toggleAttribute('data-active', i === index));\n const step = steps[index];\n this.setAttribute('active', String(index));\n this.style.setProperty('--usa-step', String(index));\n this.setAttribute('data-step-name', step.dataset.step || String(index));\n if (!silent) this.emit('step', { index, step, name: step.dataset.step || '' });\n }\n },\n { id: 'scrolly', text: css }\n );\n}\n","/**\n * use-scroll-animate/components/reveal — entrance & scroll reveal components.\n * `<usa-reveal>`, `<usa-stagger>`, `<usa-scroll-progress>`, `<usa-scrolly>`.\n */\nimport { defineReveal, type UsaRevealElement } from './reveal';\nimport { defineStagger, type UsaStaggerElement } from './stagger';\nimport { defineScrollProgress, type UsaScrollProgressElement } from './scroll-progress';\nimport { defineScrolly, type UsaScrollyElement } from './scrolly';\n\nexport { defineReveal, defineStagger, defineScrollProgress, defineScrolly };\nexport { readScrollProgress } from './scroll-progress';\nexport { REVEAL_EFFECTS, revealKeyframes } from './effects';\nexport type { RevealEffect } from './effects';\nexport type { UsaRevealElement, UsaStaggerElement, UsaScrollProgressElement, UsaScrollyElement };\nexport { configureComponents, prefersReducedMotion } from '../base';\nexport type { ComponentsConfig, UsaElement } from '../base';\n\n/** Register every component of this category under its default tag. */\nexport function defineRevealComponents(): void {\n defineReveal();\n defineStagger();\n defineScrollProgress();\n defineScrolly();\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'usa-reveal': UsaRevealElement;\n 'usa-stagger': UsaStaggerElement;\n 'usa-scroll-progress': UsaScrollProgressElement;\n 'usa-scrolly': UsaScrollyElement;\n }\n}\n","import { defineElement, srText, type UsaElement } from '../base';\nimport css from './typewriter.css?raw';\n\n/**\n * `<usa-typewriter>` — types text character by character, optionally cycling\n * through several phrases (typing, pausing, deleting).\n *\n * Attributes: `text` (default: the element's text), `words` (phrases\n * separated by `|`, overrides `text`), `speed` (ms per character, 55),\n * `delete-speed` (ms, 30), `pause` (ms before deleting, 1400), `delay`\n * (ms, 0), `loop`, `cursor=\"false\"` to hide the caret, `start`\n * (`view` | `load` | `manual`, default `view`). The full text is exposed to\n * assistive tech via `aria-label`. Event: `usa:complete` (one pass done).\n * Reduced motion: the text appears at once.\n */\nexport interface UsaTypewriterElement extends UsaElement {\n /** Phrases being typed. */\n readonly phrases: string[];\n start(): void;\n stop(): void;\n restart(): void;\n}\n\nexport function defineTypewriter(tag = 'usa-typewriter'): CustomElementConstructor | undefined {\n return defineElement(\n tag,\n (Base) =>\n class UsaTypewriter extends Base {\n static get observedAttributes(): string[] {\n return ['text', 'words'];\n }\n\n private _source: string | null = null;\n private _out: HTMLElement | null = null;\n private _timer: ReturnType<typeof setTimeout> | 0 = 0;\n private _running = false;\n\n get phrases(): string[] {\n const words = this.getAttribute('words');\n if (words) return words.split('|').map((w) => w.trim()).filter(Boolean);\n return [this.getAttribute('text') ?? this._source ?? ''];\n }\n\n mount(): void {\n if (this._source === null) this._source = (this.textContent || '').trim();\n const phrases = this.phrases;\n const sr = srText(phrases.join(', '));\n this._out = document.createElement('span');\n this._out.className = 'usa-tw-text';\n this._out.setAttribute('aria-hidden', 'true');\n const caret = document.createElement('span');\n caret.className = 'usa-tw-caret';\n caret.setAttribute('aria-hidden', 'true');\n this.replaceChildren(sr, this._out, caret);\n this.toggleAttribute('data-no-cursor', this.getAttribute('cursor') === 'false');\n if (this.reduced) {\n this._out.textContent = phrases[0] || '';\n return;\n }\n const start = this.str('start', 'view');\n if (start === 'load') this.start();\n else if (start === 'view') {\n this.inView((visible) => {\n if (visible && !this._running && !this._out?.textContent) this.start();\n });\n }\n }\n\n unmount(): void {\n this.stop();\n }\n\n stop(): void {\n clearTimeout(this._timer as ReturnType<typeof setTimeout>);\n this._timer = 0;\n this._running = false;\n this.removeAttribute('data-typing');\n }\n\n restart(): void {\n this.stop();\n if (this._out) this._out.textContent = '';\n this.start();\n }\n\n start(): void {\n if (this._running || !this._out) return;\n const out = this._out;\n const phrases = this.phrases;\n if (this.reduced) {\n out.textContent = phrases[0] || '';\n return;\n }\n this._running = true;\n const speed = this.num('speed', 55);\n const del = this.num('delete-speed', 30);\n const pause = this.num('pause', 1400);\n const loop = this.flag('loop') || phrases.length > 1;\n let p = 0;\n let i = 0;\n let deleting = false;\n const tick = () => {\n const word = phrases[p] || '';\n if (!deleting) {\n i++;\n out.textContent = word.slice(0, i);\n this.setAttribute('data-typing', '');\n if (i >= word.length) {\n this.removeAttribute('data-typing');\n const last = p === phrases.length - 1;\n if (last) this.emit('complete');\n if (!loop && last) {\n this._running = false;\n return;\n }\n deleting = true;\n this._timer = setTimeout(tick, pause);\n return;\n }\n this._timer = setTimeout(tick, speed * (0.6 + Math.random() * 0.8));\n } else {\n i--;\n out.textContent = word.slice(0, Math.max(0, i));\n if (i <= 0) {\n deleting = false;\n p = (p + 1) % phrases.length;\n this._timer = setTimeout(tick, speed * 4);\n return;\n }\n this._timer = setTimeout(tick, del);\n }\n };\n this._timer = setTimeout(tick, this.num('delay', 0));\n }\n },\n { id: 'typewriter', text: css }\n );\n}\n","import { defineElement, srText, type UsaElement } from '../base';\nimport css from './split-text.css?raw';\n\n/**\n * `<usa-split-text>` — splits its text into words or characters and reveals\n * them in a cascade (pure CSS animation per unit, transform / opacity /\n * filter only). Words never break across lines.\n *\n * Attributes: `by` (`chars` | `words`, default `chars`), `effect`\n * (`rise` | `fade` | `blur` | `flip` | `pop`, default `rise`), `stagger`\n * (ms between units, 28 for chars / 70 for words), `duration` (ms, 620),\n * `delay` (ms, 0), `trigger` (`view` | `load` | `manual`, default `view`),\n * `repeat`. The original text stays readable via `aria-label`.\n * Event: `usa:complete`.\n */\nexport interface UsaSplitTextElement extends UsaElement {\n readonly units: HTMLElement[];\n play(): void;\n reset(): void;\n}\n\nexport function defineSplitText(tag = 'usa-split-text'): CustomElementConstructor | undefined {\n return defineElement(\n tag,\n (Base) =>\n class UsaSplitText extends Base {\n static get observedAttributes(): string[] {\n return ['by', 'text'];\n }\n\n private _source: string | null = null;\n private _timer: ReturnType<typeof setTimeout> | 0 = 0;\n\n get units(): HTMLElement[] {\n return Array.from(this.querySelectorAll<HTMLElement>('.usa-split-unit'));\n }\n\n mount(): void {\n if (this._source === null) this._source = this.getAttribute('text') ?? (this.textContent || '').replace(/\\s+/g, ' ').trim();\n const text = this.getAttribute('text') ?? this._source;\n const byWords = this.str('by', 'chars') === 'words';\n const frag = document.createDocumentFragment();\n frag.append(srText(text));\n let i = 0;\n text.split(' ').forEach((word, w) => {\n if (w > 0) frag.append(' ');\n const wordEl = document.createElement('span');\n wordEl.className = 'usa-split-word';\n wordEl.setAttribute('aria-hidden', 'true');\n const parts = byWords ? [word] : Array.from(word);\n for (const part of parts) {\n const u = document.createElement('span');\n u.className = 'usa-split-unit';\n u.textContent = part;\n u.style.setProperty('--i', String(i++));\n wordEl.append(u);\n }\n frag.append(wordEl);\n });\n this.replaceChildren(frag);\n this.style.setProperty('--usa-split-stagger', `${this.num('stagger', byWords ? 70 : 28)}ms`);\n this.style.setProperty('--usa-split-duration', `${this.num('duration', 620)}ms`);\n this.style.setProperty('--usa-split-delay', `${this.num('delay', 0)}ms`);\n this.style.setProperty('--usa-split-count', String(i));\n if (this.reduced) {\n this.setAttribute('data-state', 'shown');\n return;\n }\n this.setAttribute('data-state', 'hidden');\n const trigger = this.str('trigger', 'view');\n if (trigger === 'load') this.play();\n else if (trigger === 'view') {\n this.inView((visible) => {\n if (visible && this.getAttribute('data-state') === 'hidden') this.play();\n else if (!visible && this.flag('repeat')) this.reset();\n }, { threshold: 0.2 });\n }\n }\n\n unmount(): void {\n clearTimeout(this._timer as ReturnType<typeof setTimeout>);\n }\n\n play(): void {\n clearTimeout(this._timer as ReturnType<typeof setTimeout>);\n if (this.reduced) {\n this.setAttribute('data-state', 'shown');\n return;\n }\n // Restart the CSS animations\n this.setAttribute('data-state', 'hidden');\n void this.offsetWidth;\n this.setAttribute('data-state', 'play');\n const n = this.units.length;\n const total = this.num('delay', 0) + this.num('duration', 620) + Math.max(0, n - 1) * this.num('stagger', this.str('by') === 'words' ? 70 : 28);\n this._timer = setTimeout(() => {\n this.setAttribute('data-state', 'shown');\n this.emit('complete');\n }, total);\n }\n\n reset(): void {\n clearTimeout(this._timer as ReturnType<typeof setTimeout>);\n this.setAttribute('data-state', this.reduced ? 'shown' : 'hidden');\n }\n },\n { id: 'split-text', text: css }\n );\n}\n","import { defineElement, srText, raf, caf, now, type UsaElement } from '../base';\n\nconst GLYPHS = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789#%&*+=<>/\\\\?!';\n\n/**\n * `<usa-scramble>` — \"decodes\" text out of random glyphs, left to right.\n *\n * Attributes: `text` (default: the element's text), `duration` (ms, 900),\n * `chars` (glyph set), `trigger` (`view` | `hover` | `load` | `manual`,\n * default `view`). Spaces and punctuation stay in place. Uses a monospace-\n * friendly fixed width per glyph only if you style it so; the element sets\n * nothing that causes reflow beyond its own text. Event: `usa:complete`.\n * Reduced motion: shows the final text.\n */\nexport interface UsaScrambleElement extends UsaElement {\n play(): Promise<void>;\n}\n\n/** One frame of the scramble: the first `progress` share is resolved. */\nexport function scrambleFrame(text: string, progress: number, glyphs = GLYPHS, rnd: () => number = Math.random): string {\n const done = Math.floor(text.length * progress);\n let out = '';\n for (let i = 0; i < text.length; i++) {\n const ch = text[i];\n out += i < done || /\\s|[.,:;!?'\"()\\-–—]/.test(ch) ? ch : glyphs[Math.floor(rnd() * glyphs.length)];\n }\n return out;\n}\n\nexport function defineScramble(tag = 'usa-scramble'): CustomElementConstructor | undefined {\n return defineElement(\n tag,\n (Base) =>\n class UsaScramble extends Base {\n static get observedAttributes(): string[] {\n return ['text'];\n }\n\n private _source: string | null = null;\n private _out: HTMLElement | null = null;\n private _frame = 0;\n\n private get text(): string {\n return this.getAttribute('text') ?? this._source ?? '';\n }\n\n mount(): void {\n if (this._source === null) this._source = (this.textContent || '').trim();\n this._out = document.createElement('span');\n this._out.setAttribute('aria-hidden', 'true');\n this._out.textContent = this.text;\n this.replaceChildren(srText(this.text), this._out);\n if (this.reduced) return;\n const trigger = this.str('trigger', 'view');\n if (trigger === 'load') this.play();\n else if (trigger === 'hover') {\n this.listen(this, 'pointerenter', () => this.play());\n this.listen(this, 'focusin', () => this.play());\n } else if (trigger === 'view') {\n let played = false;\n this.inView((v) => {\n if (v && !played) {\n played = true;\n this.play();\n }\n });\n }\n }\n\n unmount(): void {\n caf(this._frame);\n this._frame = 0;\n }\n\n play(): Promise<void> {\n caf(this._frame);\n const out = this._out;\n const text = this.text;\n if (!out || this.reduced) {\n if (out) out.textContent = text;\n return Promise.resolve();\n }\n const duration = this.num('duration', 900);\n const glyphs = this.str('chars', GLYPHS) || GLYPHS;\n const t0 = now();\n let last = -1;\n return new Promise((resolve) => {\n const step = () => {\n const p = Math.min(1, Math.max(0, now() - t0) / duration);\n // ~30 fps glyph churn is plenty and halves DOM writes\n const bucket = Math.floor(p * duration / 33);\n if (bucket !== last || p === 1) {\n last = bucket;\n out.textContent = p === 1 ? text : scrambleFrame(text, p, glyphs);\n }\n if (p < 1) this._frame = raf(step);\n else {\n this._frame = 0;\n this.emit('complete');\n resolve();\n }\n };\n this._frame = raf(step);\n });\n }\n },\n undefined\n );\n}\n","import { defineElement, raf, caf, now, type UsaElement } from '../base';\nimport css from './counter.css?raw';\n\n/**\n * `<usa-counter>` — counts up (or down) to a number when it scrolls into view.\n *\n * Attributes: `to` (target, required), `from` (0), `duration` (ms, 1600),\n * `decimals` (0), `locale` (default: the document language), `prefix`,\n * `suffix`, `grouping=\"false\"` (no thousands separators), `start`\n * (`view` | `load` | `manual`). Setting the `value` property animates from\n * the current value — handy for live dashboards. Uses tabular digits so\n * the width does not jump. Event: `usa:complete`. Reduced motion: jumps.\n */\nexport interface UsaCounterElement extends UsaElement {\n /** Current target; setting it animates to the new number. */\n value: number;\n /** Animate to `to` (default: the `to` attribute). */\n play(to?: number): Promise<void>;\n format(n: number): string;\n}\n\n/** easeOutExpo */\nexport const easeOutExpo = (t: number): number => (t >= 1 ? 1 : 1 - Math.pow(2, -10 * t));\n\nexport function defineCounter(tag = 'usa-counter'): CustomElementConstructor | undefined {\n return defineElement(\n tag,\n (Base) =>\n class UsaCounter extends Base {\n static get observedAttributes(): string[] {\n return ['to', 'decimals', 'locale', 'prefix', 'suffix', 'grouping'];\n }\n\n private _current = NaN;\n private _target = NaN;\n private _frame = 0;\n private _fmt: Intl.NumberFormat | null = null;\n\n get value(): number {\n return Number.isNaN(this._target) ? this.num('to', 0) : this._target;\n }\n set value(v: number) {\n this.play(Number(v));\n }\n\n format(n: number): string {\n if (!this._fmt) {\n const d = Math.max(0, Math.min(20, this.num('decimals', 0)));\n const locale = this.getAttribute('locale') || (typeof document !== 'undefined' && document.documentElement.lang) || undefined;\n try {\n this._fmt = new Intl.NumberFormat(locale, { minimumFractionDigits: d, maximumFractionDigits: d, useGrouping: this.getAttribute('grouping') !== 'false' });\n } catch {\n this._fmt = new Intl.NumberFormat(undefined, { minimumFractionDigits: d, maximumFractionDigits: d });\n }\n }\n return `${this.str('prefix')}${this._fmt.format(n)}${this.str('suffix')}`;\n }\n\n private render(n: number): void {\n this._current = n;\n this.textContent = this.format(n);\n }\n\n changed(name: string): void {\n this._fmt = null;\n if (name === 'to') this.play();\n else this.render(Number.isNaN(this._current) ? this.num('from', 0) : this._current);\n }\n\n mount(): void {\n this._fmt = null;\n const to = this.num('to', 0);\n if (this.reduced) {\n this._target = to;\n this.render(to);\n return;\n }\n if (Number.isNaN(this._current)) this.render(this.num('from', 0));\n const start = this.str('start', 'view');\n if (start === 'load') this.play();\n else if (start === 'view') {\n let done = false;\n this.inView((v) => {\n if (v && !done) {\n done = true;\n this.play();\n }\n }, { threshold: 0.4 });\n }\n }\n\n unmount(): void {\n caf(this._frame);\n this._frame = 0;\n }\n\n play(to = this.num('to', 0)): Promise<void> {\n caf(this._frame);\n this._target = to;\n const from = Number.isNaN(this._current) ? this.num('from', 0) : this._current;\n if (this.reduced || from === to || !this.isConnected) {\n this.render(to);\n this.emit('complete', { value: to });\n return Promise.resolve();\n }\n const duration = this.num('duration', 1600);\n const t0 = now();\n return new Promise((resolve) => {\n const step = () => {\n const t = Math.min(1, Math.max(0, now() - t0) / duration);\n this.render(from + (to - from) * easeOutExpo(t));\n if (t < 1) this._frame = raf(step);\n else {\n this._frame = 0;\n this.render(to);\n this.emit('complete', { value: to });\n resolve();\n }\n };\n this._frame = raf(step);\n });\n }\n },\n { id: 'counter', text: css }\n );\n}\n","import { defineElement, type UsaElement } from '../base';\nimport css from './shimmer-text.css?raw';\n\n/**\n * `<usa-shimmer-text>` — a light sweep across gradient-filled text (CSS\n * only; the element just maps attributes to custom properties).\n *\n * Attributes: `duration` (ms, 2600), `color` (base text colour), `shine`\n * (highlight colour), `angle` (deg, 110). Or style `--usa-shimmer-*`\n * directly. Reduced motion: static gradient text.\n */\nexport type UsaShimmerTextElement = UsaElement;\n\nexport function defineShimmerText(tag = 'usa-shimmer-text'): CustomElementConstructor | undefined {\n return defineElement(\n tag,\n (Base) =>\n class UsaShimmerText extends Base {\n static get observedAttributes(): string[] {\n return ['duration', 'color', 'shine', 'angle'];\n }\n\n mount(): void {\n const set = (attr: string, prop: string, unit = '') => {\n const v = this.getAttribute(attr);\n if (v !== null) this.style.setProperty(prop, v + unit);\n else this.style.removeProperty(prop);\n };\n set('duration', '--usa-shimmer-duration', 'ms');\n set('color', '--usa-shimmer-color');\n set('shine', '--usa-shimmer-shine');\n set('angle', '--usa-shimmer-angle', 'deg');\n }\n },\n { id: 'shimmer-text', text: css }\n );\n}\n","import { defineElement, srText, EASE_SPRING, EASE_OUT, type UsaElement } from '../base';\nimport css from './text-rotate.css?raw';\n\n/**\n * `<usa-text-rotate>` — cycles through words in place (\"Build *fast* /\n * *small* / *typed* apps\"). All words share one grid cell, so the width is\n * that of the longest word and nothing around it reflows.\n *\n * Attributes: `words` (separated by `|`, default: the element's text split\n * on `|`), `interval` (ms, 2200), `effect` (`slide` | `fade` | `flip` |\n * `blur`, default `slide`), `paused`. Pauses while off-screen and on hover\n * is not needed. Event: `usa:change` (`detail.index`, `detail.word`).\n * Reduced motion: words still change, without movement (fade only).\n */\nexport interface UsaTextRotateElement extends UsaElement {\n readonly index: number;\n next(): void;\n}\n\nexport function defineTextRotate(tag = 'usa-text-rotate'): CustomElementConstructor | undefined {\n return defineElement(\n tag,\n (Base) =>\n class UsaTextRotate extends Base {\n static get observedAttributes(): string[] {\n return ['words', 'interval', 'paused'];\n }\n\n private _source: string | null = null;\n private _index = 0;\n private _timer: ReturnType<typeof setInterval> | 0 = 0;\n private _visible = true;\n\n get index(): number {\n return this._index;\n }\n\n private get words(): string[] {\n return (this.getAttribute('words') ?? this._source ?? '').split('|').map((w) => w.trim()).filter(Boolean);\n }\n\n mount(): void {\n if (this._source === null) this._source = (this.textContent || '').trim();\n const words = this.words;\n this.replaceChildren(\n srText(words.join(', ')),\n ...words.map((w, i) => {\n const s = document.createElement('span');\n s.className = 'usa-rotate-word';\n s.textContent = w;\n s.setAttribute('aria-hidden', 'true');\n if (i !== this._index) s.setAttribute('data-hidden', '');\n return s;\n })\n );\n if (this._index >= words.length) this._index = 0;\n if (words.length < 2) return;\n this.inView((v) => (this._visible = v));\n if (!this.flag('paused')) {\n this._timer = setInterval(() => {\n if (this._visible && !(typeof document !== 'undefined' && document.hidden)) this.next();\n }, Math.max(400, this.num('interval', 2200)));\n }\n }\n\n unmount(): void {\n clearInterval(this._timer as ReturnType<typeof setInterval>);\n this._timer = 0;\n }\n\n next(): void {\n const els = Array.from(this.querySelectorAll<HTMLElement>('.usa-rotate-word'));\n if (els.length < 2) return;\n const prev = els[this._index];\n this._index = (this._index + 1) % els.length;\n const cur = els[this._index];\n prev.setAttribute('data-hidden', '');\n cur.removeAttribute('data-hidden');\n const effect = this.reduced ? 'fade' : this.str('effect', 'slide');\n const [inFrom, outTo] =\n effect === 'fade'\n ? [{ opacity: 0 }, { opacity: 0 }]\n : effect === 'flip'\n ? [{ opacity: 0, transform: 'perspective(400px) rotateX(-90deg)' }, { opacity: 0, transform: 'perspective(400px) rotateX(90deg)' }]\n : effect === 'blur'\n ? [{ opacity: 0, filter: 'blur(8px)' }, { opacity: 0, filter: 'blur(8px)' }]\n : [{ opacity: 0, transform: 'translateY(0.8em)' }, { opacity: 0, transform: 'translateY(-0.8em)' }];\n const neutral = { opacity: 1, transform: 'none', filter: 'none' };\n const pick = (f: Keyframe) => Object.fromEntries(Object.keys(f).map((k) => [k, (neutral as any)[k]]));\n this.motion(prev, [{ ...pick(outTo) }, outTo], { duration: 380, easing: EASE_OUT });\n this.motion(cur, [inFrom, pick(inFrom)], { duration: 520, easing: effect === 'slide' ? EASE_SPRING : EASE_OUT });\n this.emit('change', { index: this._index, word: cur.textContent });\n }\n },\n { id: 'text-rotate', text: css }\n );\n}\n","import { defineElement, srText, raf, caf, clamp, type UsaElement } from '../base';\nimport css from './text-fx.css?raw';\n\n/** Split `text` into per-character spans (words never break). The animated copy is aria-hidden. */\nfunction splitChars(host: HTMLElement, text: string): HTMLElement[] {\n const vis = document.createElement('span');\n vis.setAttribute('aria-hidden', 'true');\n const chars: HTMLElement[] = [];\n text.split(/(\\s+)/).forEach((w) => {\n if (/^\\s+$/.test(w)) {\n vis.append(document.createTextNode(w));\n return;\n }\n const word = document.createElement('span');\n word.className = 'usa-word';\n for (const c of Array.from(w)) {\n const s = document.createElement('span');\n s.className = 'usa-char';\n s.textContent = c;\n s.style.setProperty('--i', String(chars.length));\n word.append(s);\n chars.push(s);\n }\n vis.append(word);\n });\n host.replaceChildren(srText(text), vis);\n return chars;\n}\n\nconst textOf = (el: HTMLElement): string => (el.getAttribute('text') ?? el.dataset.usaText ?? (el.dataset.usaText = (el.textContent || '').trim()));\n\n/**\n * `<usa-wave-text>` — letters bob in a travelling wave.\n * Attributes: `amplitude` (em, 0.25), `speed` (s per cycle, 1.6), `stagger`\n * (s between letters, 0.06). Reduced motion: still text.\n */\nexport interface UsaWaveTextElement extends UsaElement {}\nexport function defineWaveText(tag = 'usa-wave-text'): CustomElementConstructor | undefined {\n return defineElement(tag, (Base) => class extends Base {\n static get observedAttributes(): string[] { return ['text']; }\n mount(): void {\n splitChars(this, textOf(this));\n this.style.setProperty('--usa-wave-a', `${this.num('amplitude', 0.25)}em`);\n this.style.setProperty('--usa-wave-s', `${this.num('speed', 1.6)}s`);\n this.style.setProperty('--usa-wave-d', `${this.num('stagger', 0.06)}s`);\n }\n }, { id: 'text-fx', text: css });\n}\n\n/**\n * `<usa-glitch>` — an RGB-split glitch on its text (`trigger=\"always\"`\n * default, or `hover`). Attributes: `intensity` (px, 3), `trigger`.\n * Reduced motion: no animation (plain text).\n */\nexport interface UsaGlitchElement extends UsaElement {}\nexport function defineGlitch(tag = 'usa-glitch'): CustomElementConstructor | undefined {\n return defineElement(tag, (Base) => class extends Base {\n static get observedAttributes(): string[] { return ['text', 'intensity']; }\n mount(): void {\n const t = textOf(this);\n this.setAttribute('data-text', t);\n this.style.setProperty('--usa-glitch-i', `${this.num('intensity', 3)}px`);\n if (!this.firstChild) this.textContent = t;\n }\n }, { id: 'text-fx', text: css });\n}\n\n/**\n * `<usa-gradient-text>` — text filled with a flowing multi-colour gradient.\n * Attributes: `colors` (comma list), `speed` (s, 6), `angle` (deg, 90).\n * Reduced motion: a static gradient.\n */\nexport interface UsaGradientTextElement extends UsaElement {}\nexport function defineGradientText(tag = 'usa-gradient-text'): CustomElementConstructor | undefined {\n return defineElement(tag, (Base) => class extends Base {\n static get observedAttributes(): string[] { return ['colors', 'speed', 'angle']; }\n mount(): void {\n const c = this.str('colors', '#7c5cff,#22d3ee,#f472b6,#facc15').split(',').map((s) => s.trim());\n this.style.setProperty('--usa-grad', `linear-gradient(${this.num('angle', 90)}deg, ${[...c, c[0]].join(', ')})`);\n this.style.setProperty('--usa-grad-s', `${this.num('speed', 6)}s`);\n }\n }, { id: 'text-fx', text: css });\n}\n\n/**\n * `<usa-handwriting>` — the text draws itself stroke by stroke (SVG text\n * outline), then fills in, when it scrolls into view.\n * Attributes: `text`, `duration` (ms, 2400), `stroke` (colour), `size` (px,\n * 64), `font` (family; a script font looks best). Events: `usa:complete`.\n * Reduced motion: the filled text appears at once.\n */\nexport interface UsaHandwritingElement extends UsaElement {\n play(): void;\n}\nexport function defineHandwriting(tag = 'usa-handwriting'): CustomElementConstructor | undefined {\n return defineElement(tag, (Base) => class extends Base {\n static get observedAttributes(): string[] { return ['text', 'size', 'font']; }\n mount(): void {\n const t = textOf(this);\n const size = this.num('size', 64);\n const w = Math.ceil(t.length * size * 0.62) + 8;\n this.replaceChildren(srText(t));\n this.insertAdjacentHTML('beforeend', `<svg aria-hidden=\"true\" viewBox=\"0 0 ${w} ${Math.ceil(size * 1.3)}\" width=\"${w}\" height=\"${Math.ceil(size * 1.3)}\"><text x=\"4\" y=\"${Math.round(size)}\" font-size=\"${size}\"></text></svg>`);\n const text = this.querySelector('text')!;\n text.textContent = t;\n if (this.str('font')) text.setAttribute('font-family', this.str('font'));\n if (this.str('stroke')) this.style.setProperty('--usa-hw-stroke', this.str('stroke'));\n this.style.setProperty('--usa-hw-d', `${this.num('duration', 2400)}ms`);\n if (this.reduced) {\n this.setAttribute('data-state', 'done');\n return;\n }\n this.inView((v) => v && this.play(), { threshold: 0.3 });\n }\n play(): void {\n this.removeAttribute('data-state');\n void this.offsetWidth;\n this.setAttribute('data-state', 'drawing');\n setTimeout(() => {\n this.setAttribute('data-state', 'done');\n this.emit('complete');\n }, this.reduced ? 0 : this.num('duration', 2400));\n }\n }, { id: 'text-fx', text: css });\n}\n\n/**\n * `<usa-scroll-highlight>` — reading highlight: words light up one by one\n * as the paragraph scrolls through the viewport (`mode=\"words\"`, default),\n * or a highlighter marker sweeps behind the text on enter (`mode=\"marker\"`).\n * Attributes: `mode`, `color` (marker), `dim` (opacity of unread words,\n * 0.2). Reduced motion: fully highlighted text.\n */\nexport interface UsaScrollHighlightElement extends UsaElement {\n readonly progress: number;\n}\nexport function defineScrollHighlight(tag = 'usa-scroll-highlight'): CustomElementConstructor | undefined {\n return defineElement(tag, (Base) => class extends Base {\n static get observedAttributes(): string[] { return ['mode', 'text']; }\n private _f = 0;\n private _p = 0;\n get progress(): number { return this._p; }\n mount(): void {\n const mode = this.str('mode', 'words');\n if (this.str('color')) this.style.setProperty('--usa-hl-color', this.str('color'));\n this.style.setProperty('--usa-hl-dim', String(this.num('dim', 0.2)));\n if (mode === 'marker') {\n if (this.reduced) this.setAttribute('data-lit', '');\n else this.inView((v) => v && this.setAttribute('data-lit', ''), { threshold: 0.6 });\n return;\n }\n const t = textOf(this);\n const vis = document.createElement('span');\n vis.setAttribute('aria-hidden', 'true');\n const words = t.split(/\\s+/).filter(Boolean).map((w) => {\n const s = document.createElement('span');\n s.className = 'usa-hl-word';\n s.textContent = w;\n vis.append(s, ' ');\n return s;\n });\n this.replaceChildren(srText(t), vis);\n if (this.reduced) {\n words.forEach((w) => w.setAttribute('data-on', ''));\n return;\n }\n const update = () => {\n this._f = 0;\n const r = this.getBoundingClientRect();\n const H = window.innerHeight || 800;\n this._p = clamp((H * 0.85 - r.top) / (r.height + H * 0.35), 0, 1);\n const lit = Math.round(this._p * words.length);\n words.forEach((w, i) => w.toggleAttribute('data-on', i < lit));\n };\n const on = () => !this._f && (this._f = raf(update));\n let active = false;\n this.inView((v) => {\n if (v === active) return;\n active = v;\n if (v) window.addEventListener('scroll', on, { passive: true });\n else window.removeEventListener('scroll', on);\n on();\n });\n this.onCleanup(() => window.removeEventListener('scroll', on));\n }\n unmount(): void {\n caf(this._f);\n this._f = 0;\n }\n }, { id: 'text-fx', text: css });\n}\n","/**\n * use-scroll-animate/components/text — text effects.\n * `<usa-typewriter>`, `<usa-split-text>`, `<usa-scramble>`, `<usa-counter>`,\n * `<usa-shimmer-text>`, `<usa-text-rotate>`.\n */\nimport { defineTypewriter, type UsaTypewriterElement } from './typewriter';\nimport { defineSplitText, type UsaSplitTextElement } from './split-text';\nimport { defineScramble, type UsaScrambleElement } from './scramble';\nimport { defineCounter, type UsaCounterElement } from './counter';\nimport { defineShimmerText, type UsaShimmerTextElement } from './shimmer-text';\nimport { defineTextRotate, type UsaTextRotateElement } from './text-rotate';\n\nimport { defineWaveText, defineGlitch, defineGradientText, defineHandwriting, defineScrollHighlight } from './text-fx';\nimport type { UsaWaveTextElement, UsaGlitchElement, UsaGradientTextElement, UsaHandwritingElement, UsaScrollHighlightElement } from './text-fx';\nexport { defineTypewriter, defineSplitText, defineScramble, defineCounter, defineShimmerText, defineTextRotate };\nexport { scrambleFrame } from './scramble';\nexport { easeOutExpo } from './counter';\nexport type { UsaTypewriterElement, UsaSplitTextElement, UsaScrambleElement, UsaCounterElement, UsaShimmerTextElement, UsaTextRotateElement };\nexport { defineWaveText, defineGlitch, defineGradientText, defineHandwriting, defineScrollHighlight };\nexport type { UsaWaveTextElement, UsaGlitchElement, UsaGradientTextElement, UsaHandwritingElement, UsaScrollHighlightElement };\nexport { configureComponents, prefersReducedMotion } from '../base';\nexport type { ComponentsConfig, UsaElement } from '../base';\n\n/** Register every component of this category under its default tag. */\nexport function defineTextComponents(): void {\n defineTypewriter();\n defineSplitText();\n defineScramble();\n defineCounter();\n defineShimmerText();\n defineTextRotate();\n defineWaveText();\n defineGlitch();\n defineGradientText();\n defineHandwriting();\n defineScrollHighlight();\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'usa-wave-text': UsaWaveTextElement;\n 'usa-glitch': UsaGlitchElement;\n 'usa-gradient-text': UsaGradientTextElement;\n 'usa-handwriting': UsaHandwritingElement;\n 'usa-scroll-highlight': UsaScrollHighlightElement;\n 'usa-typewriter': UsaTypewriterElement;\n 'usa-split-text': UsaSplitTextElement;\n 'usa-scramble': UsaScrambleElement;\n 'usa-counter': UsaCounterElement;\n 'usa-shimmer-text': UsaShimmerTextElement;\n 'usa-text-rotate': UsaTextRotateElement;\n }\n}\n","import { defineElement, EASE_OUT, type UsaElement } from '../base';\nimport css from './ripple.css?raw';\n\n/**\n * `<usa-ripple>` — an ink ripple from the pointer (or the centre, for\n * keyboard presses) on whatever it wraps: buttons, list items, cards.\n *\n * Attributes: `color` (default `currentColor`), `opacity` (0.22),\n * `duration` (ms, 550), `centered`, `disabled`. Clips its content to its\n * own border radius. Reduced motion: a brief highlight instead of the wave.\n */\nexport interface UsaRippleElement extends UsaElement {\n /** Spawn a ripple at client coordinates (default: centre). */\n ripple(x?: number, y?: number): void;\n}\n\nexport function defineRipple(tag = 'usa-ripple'): CustomElementConstructor | undefined {\n return defineElement(\n tag,\n (Base) =>\n class UsaRipple extends Base {\n static get observedAttributes(): string[] {\n return [];\n }\n\n mount(): void {\n this.listen(this, 'pointerdown', (e: PointerEvent) => {\n if (e.button !== 0 && e.pointerType === 'mouse') return;\n this.ripple(e.clientX, e.clientY);\n });\n this.listen(this, 'keydown', (e: KeyboardEvent) => {\n if ((e.key === 'Enter' || e.key === ' ') && !e.repeat) this.ripple();\n });\n }\n\n ripple(x?: number, y?: number): void {\n if (this.flag('disabled')) return;\n const r = this.getBoundingClientRect();\n const centered = this.flag('centered') || x === undefined || y === undefined;\n const cx = centered ? r.width / 2 : (x as number) - r.left;\n const cy = centered ? r.height / 2 : (y as number) - r.top;\n const radius = Math.hypot(Math.max(cx, r.width - cx), Math.max(cy, r.height - cy));\n const wave = document.createElement('span');\n wave.className = 'usa-ripple-wave';\n wave.setAttribute('aria-hidden', 'true');\n const size = radius * 2;\n wave.style.cssText = `width:${size}px;height:${size}px;left:${cx - radius}px;top:${cy - radius}px;background:${this.str('color', 'currentColor')}`;\n this.append(wave);\n const opacity = this.num('opacity', 0.22);\n const duration = this.num('duration', 550);\n const frames = this.reduced\n ? [{ opacity }, { opacity: 0 }]\n : [\n { transform: 'scale(0)', opacity },\n { transform: 'scale(1)', opacity, offset: 0.7 },\n { transform: 'scale(1)', opacity: 0 },\n ];\n const a = this.motion(wave, frames, { duration: this.reduced ? 300 : duration, easing: EASE_OUT, fill: 'forwards' });\n if (a) a.onfinish = () => wave.remove();\n else setTimeout(() => wave.remove(), 0);\n }\n },\n { id: 'ripple', text: css }\n );\n}\n","import { defineElement, raf, caf, type UsaElement } from '../base';\nimport css from './magnetic.css?raw';\n\n/**\n * `<usa-magnetic>` — its content leans toward the pointer when the pointer\n * comes near, and springs back when it leaves (great for CTAs and icons).\n *\n * Attributes: `strength` (0–1 share of the pointer offset, 0.35), `radius`\n * (px of attraction beyond the element's edge, 60), `disabled`. Only on\n * devices with a fine pointer that hovers; off under reduced motion.\n * Writes one `transform` per frame through `--usa-mx` / `--usa-my`.\n */\nexport type UsaMagneticElement = UsaElement;\n\nexport function defineMagnetic(tag = 'usa-magnetic'): CustomElementConstructor | undefined {\n return defineElement(\n tag,\n (Base) =>\n class UsaMagnetic extends Base {\n static get observedAttributes(): string[] {\n return ['strength', 'radius', 'disabled'];\n }\n\n private _frame = 0;\n\n mount(): void {\n if (this.reduced || this.flag('disabled')) return;\n if (typeof matchMedia === 'function' && !matchMedia('(hover: hover) and (pointer: fine)').matches) return;\n const strength = this.num('strength', 0.35);\n const radius = this.num('radius', 60);\n let x = 0;\n let y = 0;\n let active = false;\n const apply = () => {\n this._frame = 0;\n const r = this.getBoundingClientRect();\n const dx = x - (r.left + r.width / 2);\n const dy = y - (r.top + r.height / 2);\n const near = Math.abs(dx) < r.width / 2 + radius && Math.abs(dy) < r.height / 2 + radius;\n if (near) {\n active = true;\n this.setAttribute('data-active', '');\n this.style.setProperty('--usa-mx', `${(dx * strength).toFixed(2)}px`);\n this.style.setProperty('--usa-my', `${(dy * strength).toFixed(2)}px`);\n } else if (active) this.release();\n };\n this.listen(\n document,\n 'pointermove',\n (e: PointerEvent) => {\n if (e.pointerType !== 'mouse' && e.pointerType !== 'pen') return;\n x = e.clientX;\n y = e.clientY;\n if (!this._frame) this._frame = raf(apply);\n },\n { passive: true }\n );\n this.listen(document, 'pointerleave', () => this.release());\n this.listen(window, 'blur', () => this.release());\n }\n\n private release(): void {\n this.removeAttribute('data-active');\n this.style.removeProperty('--usa-mx');\n this.style.removeProperty('--usa-my');\n }\n\n unmount(): void {\n caf(this._frame);\n this._frame = 0;\n this.release();\n }\n },\n { id: 'magnetic', text: css }\n );\n}\n","import { defineElement, raf, caf, clamp, type UsaElement } from '../base';\nimport css from './tilt.css?raw';\n\n/**\n * `<usa-tilt>` — a 3D card that tilts toward the pointer, with an optional\n * glare highlight that follows it.\n *\n * Attributes: `max` (deg, 10), `scale` (1.03 while hovered), `perspective`\n * (px, 900), `glare` (add the light reflection), `reverse` (tilt away),\n * `disabled`. Off under reduced motion. Exposes `--usa-tilt-x` /\n * `--usa-tilt-y` (−1…1) for parallax layers inside the card.\n */\nexport type UsaTiltElement = UsaElement;\n\nexport function defineTilt(tag = 'usa-tilt'): CustomElementConstructor | undefined {\n return defineElement(\n tag,\n (Base) =>\n class UsaTilt extends Base {\n static get observedAttributes(): string[] {\n return ['max', 'scale', 'perspective', 'glare', 'reverse', 'disabled'];\n }\n\n private _frame = 0;\n private _glare: HTMLElement | null = null;\n\n mount(): void {\n if (this.flag('glare') && !this._glare) {\n this._glare = document.createElement('span');\n this._glare.className = 'usa-tilt-glare';\n this._glare.setAttribute('aria-hidden', 'true');\n this.append(this._glare);\n } else if (!this.flag('glare') && this._glare) {\n this._glare.remove();\n this._glare = null;\n }\n if (this.reduced || this.flag('disabled')) return;\n const max = this.num('max', 10) * (this.flag('reverse') ? -1 : 1);\n const scale = this.num('scale', 1.03);\n const persp = this.num('perspective', 900);\n let px = 0.5;\n let py = 0.5;\n let rect: DOMRect | null = null;\n const apply = () => {\n this._frame = 0;\n const nx = clamp(px * 2 - 1, -1, 1);\n const ny = clamp(py * 2 - 1, -1, 1);\n this.style.transform = `perspective(${persp}px) rotateX(${(-ny * max).toFixed(2)}deg) rotateY(${(nx * max).toFixed(2)}deg) scale(${scale})`;\n this.style.setProperty('--usa-tilt-x', nx.toFixed(3));\n this.style.setProperty('--usa-tilt-y', ny.toFixed(3));\n this.style.setProperty('--usa-glare-x', `${(px * 100).toFixed(1)}%`);\n this.style.setProperty('--usa-glare-y', `${(py * 100).toFixed(1)}%`);\n };\n this.listen(this, 'pointerenter', (e: PointerEvent) => {\n if (e.pointerType === 'touch') return;\n rect = this.getBoundingClientRect();\n this.setAttribute('data-active', '');\n });\n this.listen(this, 'pointermove', (e: PointerEvent) => {\n if (e.pointerType === 'touch') return;\n rect = rect || this.getBoundingClientRect();\n px = (e.clientX - rect.left) / (rect.width || 1);\n py = (e.clientY - rect.top) / (rect.height || 1);\n if (!this._frame) this._frame = raf(apply);\n });\n this.listen(this, 'pointerleave', () => this.reset());\n }\n\n private reset(): void {\n caf(this._frame);\n this._frame = 0;\n this.removeAttribute('data-active');\n this.style.transform = '';\n this.style.setProperty('--usa-tilt-x', '0');\n this.style.setProperty('--usa-tilt-y', '0');\n }\n\n unmount(): void {\n this.reset();\n }\n },\n { id: 'tilt', text: css }\n );\n}\n","import { defineElement, raf, caf, type UsaElement } from '../base';\nimport css from './spotlight.css?raw';\n\n/**\n * `<usa-spotlight>` — the Windows Fluent \"Reveal highlight\": a soft light\n * follows the pointer across a group of items, lighting up their borders\n * (even of neighbours) and the background of the hovered one. Put buttons,\n * tiles or menu items inside; each direct child is an item (or mark items\n * with `data-spotlight` to pick them yourself).\n *\n * Attributes: `size` (px, radius of the light, 160), `color` (default a\n * translucent white), `border` (px width of the lit border, 1),\n * `no-fill` (only light the borders). Not a motion effect, so it stays on\n * under reduced motion; off on touch-only devices.\n */\nexport type UsaSpotlightElement = UsaElement;\n\nexport function defineSpotlight(tag = 'usa-spotlight'): CustomElementConstructor | undefined {\n return defineElement(\n tag,\n (Base) =>\n class UsaSpotlight extends Base {\n static get observedAttributes(): string[] {\n return ['size', 'color', 'border'];\n }\n\n private _frame = 0;\n\n private items(): HTMLElement[] {\n const marked = Array.from(this.querySelectorAll<HTMLElement>('[data-spotlight]'));\n const items = marked.length ? marked : (Array.from(this.children) as HTMLElement[]);\n items.forEach((el) => el.classList.add('usa-spotlight-item'));\n return items;\n }\n\n mount(): void {\n const size = this.getAttribute('size');\n if (size) this.style.setProperty('--usa-spot-size', `${Number(size)}px`);\n const color = this.getAttribute('color');\n if (color) this.style.setProperty('--usa-spot-color', color);\n const border = this.getAttribute('border');\n if (border) this.style.setProperty('--usa-spot-border', `${Number(border)}px`);\n let items = this.items();\n let x = 0;\n let y = 0;\n const apply = () => {\n this._frame = 0;\n // All reads, then all writes\n const rects = items.map((el) => el.getBoundingClientRect());\n rects.forEach((r, i) => {\n items[i].style.setProperty('--usa-spot-x', `${(x - r.left).toFixed(1)}px`);\n items[i].style.setProperty('--usa-spot-y', `${(y - r.top).toFixed(1)}px`);\n });\n };\n this.listen(this, 'pointerenter', (e: PointerEvent) => {\n if (e.pointerType === 'touch') return;\n items = this.items();\n this.setAttribute('data-lit', '');\n });\n this.listen(this, 'pointermove', (e: PointerEvent) => {\n if (e.pointerType === 'touch') return;\n x = e.clientX;\n y = e.clientY;\n if (!this.hasAttribute('data-lit')) this.setAttribute('data-lit', '');\n if (!this._frame) this._frame = raf(apply);\n });\n this.listen(this, 'pointerleave', () => this.removeAttribute('data-lit'));\n }\n\n unmount(): void {\n caf(this._frame);\n this._frame = 0;\n this.removeAttribute('data-lit');\n }\n },\n { id: 'spotlight', text: css }\n );\n}\n","import { defineElement, EASE_SPRING, type UsaElement } from '../base';\nimport css from './press.css?raw';\n\n/**\n * `<usa-press>` — tactile press feedback: content dips while pressed and\n * springs back on release (the Fluent \"pointer down\" scale), or bounces once\n * on click with `bounce`.\n *\n * Attributes: `scale` (pressed scale, 0.95), `bounce` (overshoot on\n * release), `disabled`. Works with mouse, touch, pen and Space/Enter.\n * Reduced motion: a subtle dim instead of scaling.\n */\nexport interface UsaPressElement extends UsaElement {\n readonly pressed: boolean;\n}\n\nexport function definePress(tag = 'usa-press'): CustomElementConstructor | undefined {\n return defineElement(\n tag,\n (Base) =>\n class UsaPress extends Base {\n static get observedAttributes(): string[] {\n return ['disabled'];\n }\n\n private _anim: Animation | null = null;\n private _down = false;\n\n get pressed(): boolean {\n return this._down;\n }\n\n private frame(down: boolean): Keyframe {\n if (this.reduced) return { opacity: down ? 0.7 : 1 };\n return { transform: down ? `scale(${this.num('scale', 0.95)})` : 'scale(1)' };\n }\n\n private down(): void {\n if (this._down || this.flag('disabled')) return;\n this._down = true;\n this.setAttribute('data-pressed', '');\n const from = this.currentFrame();\n this._anim?.cancel();\n this._anim = this.motion(this, [from, this.frame(true)], { duration: 120, easing: 'cubic-bezier(0.3, 0, 0.7, 1)', fill: 'forwards' });\n }\n\n private up(): void {\n if (!this._down) return;\n this._down = false;\n this.removeAttribute('data-pressed');\n const from = this.currentFrame();\n this._anim?.cancel();\n const frames: Keyframe[] =\n this.flag('bounce') && !this.reduced\n ? [from, { transform: 'scale(1.06)', offset: 0.45 }, { transform: 'scale(0.99)', offset: 0.75 }, this.frame(false)]\n : [from, this.frame(false)];\n const a = this.motion(this, frames, { duration: this.flag('bounce') ? 480 : 320, easing: EASE_SPRING });\n this._anim = a;\n if (a) a.onfinish = () => this._anim === a && (this._anim = null);\n }\n\n private currentFrame(): Keyframe {\n if (typeof getComputedStyle !== 'function') return this.frame(false);\n const cs = getComputedStyle(this);\n return this.reduced ? { opacity: cs.opacity || '1' } : { transform: cs.transform && cs.transform !== 'none' ? cs.transform : 'scale(1)' };\n }\n\n mount(): void {\n this.listen(this, 'pointerdown', (e: PointerEvent) => {\n if (e.pointerType === 'mouse' && e.button !== 0) return;\n this.down();\n });\n for (const t of ['pointerup', 'pointerleave', 'pointercancel', 'blur']) this.listen(this, t, () => this.up());\n this.listen(this, 'keydown', (e: KeyboardEvent) => (e.key === ' ' || e.key === 'Enter') && !e.repeat && this.down());\n this.listen(this, 'keyup', (e: KeyboardEvent) => (e.key === ' ' || e.key === 'Enter') && this.up());\n }\n\n unmount(): void {\n this._anim?.cancel();\n this._anim = null;\n this._down = false;\n }\n },\n { id: 'press', text: css }\n );\n}\n","import { defineElement, type UsaElement } from '../base';\nimport css from './toggle.css?raw';\n\n/**\n * `<usa-toggle>` — an accessible switch whose knob stretches while pressed\n * and glides across (the Windows 11 / iOS toggle). `role=\"switch\"`,\n * keyboard (Space / Enter), and form-associated where `ElementInternals`\n * exists (submits `value`, default `\"on\"`, under `name` when checked).\n *\n * Attributes: `checked`, `disabled`, `name`, `value`, `label`\n * (accessible name if there is no `aria-label` / `<label>`). Events:\n * `change` and `usa:change` (`detail.checked`). Reduced motion: no glide.\n */\nexport interface UsaToggleElement extends UsaElement {\n checked: boolean;\n disabled: boolean;\n toggle(force?: boolean): void;\n}\n\nexport function defineToggle(tag = 'usa-toggle'): CustomElementConstructor | undefined {\n return defineElement(\n tag,\n (Base) =>\n class UsaToggle extends Base {\n static formAssociated = true;\n static get observedAttributes(): string[] {\n return ['checked', 'disabled', 'label'];\n }\n\n private _internals: ElementInternals | null = null;\n\n constructor() {\n super();\n try {\n this._internals = typeof (this as any).attachInternals === 'function' ? (this as any).attachInternals() : null;\n } catch {\n this._internals = null;\n }\n }\n\n get checked(): boolean {\n return this.hasAttribute('checked');\n }\n set checked(v: boolean) {\n this.toggleAttribute('checked', !!v);\n }\n get disabled(): boolean {\n return this.hasAttribute('disabled');\n }\n set disabled(v: boolean) {\n this.toggleAttribute('disabled', !!v);\n }\n\n changed(): void {\n this.sync();\n }\n\n private sync(): void {\n this.setAttribute('aria-checked', String(this.checked));\n this.setAttribute('aria-disabled', String(this.disabled));\n this.tabIndex = this.disabled ? -1 : 0;\n const label = this.getAttribute('label');\n if (label && !this.hasAttribute('aria-label')) this.setAttribute('aria-label', label);\n this._internals?.setFormValue?.(this.checked ? this.str('value', 'on') : null);\n }\n\n mount(): void {\n if (!this.querySelector(':scope > .usa-toggle-track')) {\n const track = document.createElement('span');\n track.className = 'usa-toggle-track';\n track.setAttribute('aria-hidden', 'true');\n const knob = document.createElement('span');\n knob.className = 'usa-toggle-knob';\n track.append(knob);\n this.prepend(track);\n }\n this.setAttribute('role', 'switch');\n this.sync();\n this.listen(this, 'click', () => this.toggle());\n this.listen(this, 'keydown', (e: KeyboardEvent) => {\n if (e.key === ' ' || e.key === 'Enter') {\n e.preventDefault();\n if (!e.repeat) this.toggle();\n }\n });\n this.listen(this, 'pointerdown', () => !this.disabled && this.setAttribute('data-pressed', ''));\n for (const t of ['pointerup', 'pointerleave', 'pointercancel']) this.listen(this, t, () => this.removeAttribute('data-pressed'));\n }\n\n toggle(force?: boolean): void {\n if (this.disabled) return;\n const next = force === undefined ? !this.checked : force;\n if (next === this.checked) return;\n this.checked = next;\n this.sync();\n this.dispatchEvent(new Event('change', { bubbles: true }));\n this.emit('change', { checked: next });\n }\n },\n { id: 'toggle', text: css }\n );\n}\n","/**\n * use-scroll-animate/components/interaction — micro-interactions.\n * `<usa-ripple>`, `<usa-magnetic>`, `<usa-tilt>`, `<usa-spotlight>`,\n * `<usa-press>`, `<usa-toggle>`.\n */\nimport { defineRipple, type UsaRippleElement } from './ripple';\nimport { defineMagnetic, type UsaMagneticElement } from './magnetic';\nimport { defineTilt, type UsaTiltElement } from './tilt';\nimport { defineSpotlight, type UsaSpotlightElement } from './spotlight';\nimport { definePress, type UsaPressElement } from './press';\nimport { defineToggle, type UsaToggleElement } from './toggle';\n\nexport { defineRipple, defineMagnetic, defineTilt, defineSpotlight, definePress, defineToggle };\nexport type { UsaRippleElement, UsaMagneticElement, UsaTiltElement, UsaSpotlightElement, UsaPressElement, UsaToggleElement };\nexport { configureComponents, prefersReducedMotion } from '../base';\nexport type { ComponentsConfig, UsaElement } from '../base';\n\n/** Register every component of this category under its default tag. */\nexport function defineInteractionComponents(): void {\n defineRipple();\n defineMagnetic();\n defineTilt();\n defineSpotlight();\n definePress();\n defineToggle();\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'usa-ripple': UsaRippleElement;\n 'usa-magnetic': UsaMagneticElement;\n 'usa-tilt': UsaTiltElement;\n 'usa-spotlight': UsaSpotlightElement;\n 'usa-press': UsaPressElement;\n 'usa-toggle': UsaToggleElement;\n }\n}\n","import { kindOf, defineElement, type UsaElement } from '../base';\nimport css from './spinner.css?raw';\n\nexport const SPINNER_VARIANTS = ['fluent', 'windows', 'ring', 'dots', 'pulse', 'bars'] as const;\nexport type SpinnerVariant = (typeof SPINNER_VARIANTS)[number];\n\n/**\n * `<usa-spinner>` — indeterminate loading indicators, pure CSS animations\n * of `transform` / `opacity` (plus an SVG stroke for `fluent`).\n *\n * Kinds (`kind`): `fluent` (default — the WinUI / Windows 11\n * ProgressRing arc), `windows` (the Windows 10 boot \"orbiting dots\"),\n * `ring` (classic border spinner), `dots` (three bouncing dots / typing\n * indicator), `pulse` (expanding ripple), `bars` (equalizer).\n * Attributes: `size` (px, 32), `label` (accessible name, \"Loading\"),\n * `paused`. Colour follows `color` / `--usa-spinner-color`.\n * `role=\"progressbar\"` without a value (indeterminate). Reduced motion:\n * a slow opacity pulse instead of movement.\n */\nexport interface UsaSpinnerElement extends UsaElement {\n /** Spinner kind (`kind` attribute). */\n kind: SpinnerVariant;\n}\n\nfunction markup(variant: string): string {\n switch (variant) {\n case 'windows':\n return '<i></i><i></i><i></i><i></i><i></i>';\n case 'dots':\n return '<i></i><i></i><i></i>';\n case 'bars':\n return '<i></i><i></i><i></i><i></i>';\n case 'pulse':\n return '<i></i><i></i>';\n case 'ring':\n return '<i></i>';\n default:\n return '<svg viewBox=\"0 0 16 16\" aria-hidden=\"true\"><circle cx=\"8\" cy=\"8\" r=\"7\" pathLength=\"100\"/></svg>';\n }\n}\n\nexport function defineSpinner(tag = 'usa-spinner'): CustomElementConstructor | undefined {\n return defineElement(\n tag,\n (Base) =>\n class UsaSpinner extends Base {\n static get observedAttributes(): string[] {\n return ['kind', 'size', 'label'];\n }\n\n /** The spinner kind (`kind` attribute). */\n get kind(): SpinnerVariant {\n return kindOf(this, SPINNER_VARIANTS, 'fluent') as SpinnerVariant;\n }\n set kind(v: SpinnerVariant) {\n this.setAttribute('kind', v);\n }\n\n\n mount(): void {\n const variant = this.kind;\n if (this.getAttribute('data-kind') !== variant) {\n this.innerHTML = markup(variant);\n this.setAttribute('data-kind', variant);\n }\n const size = this.getAttribute('size');\n if (size) this.style.setProperty('--usa-spinner-size', `${Number(size)}px`);\n else this.style.removeProperty('--usa-spinner-size');\n this.setAttribute('role', 'progressbar');\n if (!this.hasAttribute('aria-label') || this.hasAttribute('label')) this.setAttribute('aria-label', this.str('label', 'Loading'));\n }\n },\n { id: 'spinner', text: css }\n );\n}\n","import { defineElement, EASE_OUT, type UsaElement } from '../base';\nimport css from './skeleton.css?raw';\n\n/**\n * `<usa-skeleton>` — shimmering placeholders while content loads. With\n * `loading`, it shows `lines` bars (or one block of `width` × `height`,\n * or a `circle`) and hides its children; remove `loading` and the real\n * content fades in.\n *\n * Attributes: `loading`, `lines` (3), `width`, `height` (CSS lengths),\n * `circle`, `radius`, `avatar` (circle + lines, like a list row).\n * `aria-busy` follows `loading`. Reduced motion: no shimmer sweep.\n */\nexport interface UsaSkeletonElement extends UsaElement {\n loading: boolean;\n}\n\nexport function defineSkeleton(tag = 'usa-skeleton'): CustomElementConstructor | undefined {\n return defineElement(\n tag,\n (Base) =>\n class UsaSkeleton extends Base {\n static get observedAttributes(): string[] {\n return ['loading', 'lines', 'width', 'height', 'circle', 'avatar', 'radius'];\n }\n\n private _ph: HTMLElement | null = null;\n\n get loading(): boolean {\n return this.hasAttribute('loading');\n }\n set loading(v: boolean) {\n this.toggleAttribute('loading', !!v);\n }\n\n changed(name: string): void {\n if (name === 'loading') this.sync(true);\n else {\n this._ph?.remove();\n this._ph = null;\n this.sync(false);\n }\n }\n\n mount(): void {\n this.sync(false);\n }\n\n private build(): HTMLElement {\n const ph = document.createElement('div');\n ph.className = 'usa-skeleton-ph';\n ph.setAttribute('aria-hidden', 'true');\n const bone = (cls = '') => {\n const b = document.createElement('span');\n b.className = `usa-bone ${cls}`.trim();\n return b;\n };\n const radius = this.getAttribute('radius');\n if (radius) this.style.setProperty('--usa-skeleton-radius', radius);\n if (this.flag('circle') || this.hasAttribute('width') || this.hasAttribute('height')) {\n const b = bone(this.flag('circle') ? 'usa-bone-circle' : 'usa-bone-block');\n b.style.width = this.str('width', this.flag('circle') ? this.str('height', '48px') : '100%');\n b.style.height = this.str('height', this.flag('circle') ? b.style.width : '120px');\n ph.append(b);\n } else {\n if (this.flag('avatar')) ph.append(bone('usa-bone-circle usa-bone-avatar'));\n const col = document.createElement('div');\n col.className = 'usa-bone-lines';\n const n = Math.max(1, Math.min(20, this.num('lines', 3)));\n for (let i = 0; i < n; i++) col.append(bone(i === n - 1 && n > 1 ? 'usa-bone-last' : ''));\n ph.append(col);\n }\n return ph;\n }\n\n private sync(animate: boolean): void {\n const loading = this.loading;\n this.setAttribute('aria-busy', String(loading));\n if (loading) {\n if (!this._ph) {\n this._ph = this.build();\n this.prepend(this._ph);\n }\n return;\n }\n if (this._ph) {\n this._ph.remove();\n this._ph = null;\n }\n if (animate && !this.reduced) {\n for (const kid of Array.from(this.children)) {\n this.motion(kid, [{ opacity: 0, transform: 'translateY(4px)' }, { opacity: 1, transform: 'none' }], { duration: 360, easing: EASE_OUT });\n }\n }\n this.emit('loaded');\n }\n },\n { id: 'skeleton', text: css }\n );\n}\n","import { defineElement, clamp, type UsaElement } from '../base';\nimport css from './progress.css?raw';\n\n/**\n * `<usa-progress>` — a linear progress bar. Determinate (`value` / `max`)\n * bars glide between values with `transform: scaleX()`; without a value,\n * or with `indeterminate`, it shows the Windows Fluent indeterminate\n * animation (two sliding segments).\n *\n * Attributes: `value`, `max` (100), `indeterminate`, `state`\n * (`paused` | `error` — the WinUI states), `label` (accessible name).\n * `role=\"progressbar\"` with `aria-valuenow` when determinate.\n * Reduced motion: no glide; indeterminate becomes a gentle pulse.\n */\nexport interface UsaProgressElement extends UsaElement {\n value: number | null;\n max: number;\n /** 0–1, or `null` when indeterminate. */\n readonly ratio: number | null;\n}\n\nexport function defineProgress(tag = 'usa-progress'): CustomElementConstructor | undefined {\n return defineElement(\n tag,\n (Base) =>\n class UsaProgress extends Base {\n static get observedAttributes(): string[] {\n return ['value', 'max', 'indeterminate', 'label'];\n }\n\n private _fill: HTMLElement | null = null;\n\n get value(): number | null {\n const v = this.getAttribute('value');\n return v === null || v === '' || Number.isNaN(Number(v)) ? null : Number(v);\n }\n set value(v: number | null) {\n if (v === null || v === undefined) this.removeAttribute('value');\n else this.setAttribute('value', String(v));\n }\n get max(): number {\n const m = this.num('max', 100);\n return m > 0 ? m : 100;\n }\n set max(v: number) {\n this.setAttribute('max', String(v));\n }\n get ratio(): number | null {\n const v = this.value;\n return this.hasAttribute('indeterminate') || v === null ? null : clamp(v / this.max, 0, 1);\n }\n\n changed(): void {\n this.sync();\n }\n\n mount(): void {\n if (!this._fill) {\n this.innerHTML = '<span class=\"usa-progress-bar\"></span><span class=\"usa-progress-bar usa-progress-bar2\"></span>';\n this._fill = this.firstElementChild as HTMLElement;\n }\n this.setAttribute('role', 'progressbar');\n this.sync();\n }\n\n private sync(): void {\n const ratio = this.ratio;\n const label = this.getAttribute('label');\n if (label) this.setAttribute('aria-label', label);\n this.toggleAttribute('data-indeterminate', ratio === null);\n if (ratio === null) {\n this.removeAttribute('aria-valuenow');\n if (this._fill) this._fill.style.transform = '';\n return;\n }\n this.setAttribute('aria-valuemin', '0');\n this.setAttribute('aria-valuemax', String(this.max));\n this.setAttribute('aria-valuenow', String(this.value));\n if (this._fill) this._fill.style.transform = `scaleX(${ratio})`;\n if (ratio === 1) this.emit('complete');\n }\n },\n { id: 'progress', text: css }\n );\n}\n","import { defineElement, EASE_OUT, FLUENT_DECELERATE, type UsaElement } from '../base';\nimport css from './toast.css?raw';\n\nexport type ToastType = 'info' | 'success' | 'warning' | 'error';\n\nexport interface ToastOptions {\n /** ms before it hides itself; `0` keeps it until closed (default 4000). */\n duration?: number;\n type?: ToastType;\n /** Optional action button. */\n action?: { label: string; onClick: () => void };\n /** Show a close button (default `true`). */\n dismissible?: boolean;\n /** The toaster to use (default: the first `<usa-toaster>`, created if missing). */\n toaster?: UsaToasterElement | string;\n}\n\nexport interface ToastHandle {\n element: HTMLElement;\n close(): Promise<void>;\n}\n\n/**\n * `<usa-toaster>` — the region toasts slide into (`role=\"region\"`, each\n * toast `role=\"status\"`, errors `role=\"alert\"`). Toasts pause their timer\n * while hovered or focused, and the stack re-flows with a FLIP animation.\n *\n * Attributes: `position` (`bottom-right` default, `bottom-left`,\n * `bottom-center`, `top-right`, `top-left`, `top-center`), `max` (visible\n * toasts, 4), `label` (region name, \"Notifications\").\n * Reduced motion: toasts fade instead of sliding.\n */\nexport interface UsaToasterElement extends UsaElement {\n show(message: string, options?: ToastOptions): ToastHandle;\n clear(): void;\n}\n\nconst ICONS: Record<ToastType, string> = {\n info: '<path d=\"M12 8h.01M11 12h1v5h1\"/>',\n success: '<path d=\"m8 12.5 3 3 5-6\"/>',\n warning: '<path d=\"M12 8v5M12 16.5h.01\"/>',\n error: '<path d=\"m9 9 6 6M15 9l-6 6\"/>',\n};\n\nexport function defineToaster(tag = 'usa-toaster'): CustomElementConstructor | undefined {\n return defineElement(\n tag,\n (Base) =>\n class UsaToaster extends Base {\n static get observedAttributes(): string[] {\n return ['label'];\n }\n\n mount(): void {\n this.setAttribute('role', 'region');\n this.setAttribute('aria-label', this.str('label', 'Notifications'));\n }\n\n private flip(mutate: () => void): void {\n const kids = Array.from(this.children) as HTMLElement[];\n const before = new Map(kids.map((k) => [k, k.getBoundingClientRect().top]));\n mutate();\n if (this.reduced) return;\n for (const k of Array.from(this.children) as HTMLElement[]) {\n const top = before.get(k);\n if (top === undefined || k.hasAttribute('data-leaving')) continue;\n const dy = top - k.getBoundingClientRect().top;\n if (Math.abs(dy) > 0.5) this.motion(k, [{ transform: `translateY(${dy}px)` }, { transform: 'none' }], { duration: 320, easing: EASE_OUT, composite: 'add' } as KeyframeAnimationOptions);\n }\n }\n\n private enterFrames(): Keyframe[] {\n if (this.reduced) return [{ opacity: 0 }, { opacity: 1 }];\n const pos = this.str('position', 'bottom-right');\n const x = pos.endsWith('right') ? '110%' : pos.endsWith('left') ? '-110%' : '0';\n const y = pos.endsWith('center') ? (pos.startsWith('top') ? '-120%' : '120%') : '0';\n return [{ opacity: 0, transform: `translate(${x}, ${y}) scale(0.96)` }, { opacity: 1, transform: 'none' }];\n }\n\n show(message: string, options: ToastOptions = {}): ToastHandle {\n const type = options.type || 'info';\n const el = document.createElement('div');\n el.className = 'usa-toast';\n el.setAttribute('data-type', type);\n el.setAttribute('role', type === 'error' ? 'alert' : 'status');\n el.innerHTML = `<svg class=\"usa-toast-icon\" viewBox=\"0 0 24 24\" aria-hidden=\"true\"><circle cx=\"12\" cy=\"12\" r=\"9\"/>${ICONS[type] || ICONS.info}</svg><div class=\"usa-toast-msg\"></div>`;\n (el.querySelector('.usa-toast-msg') as HTMLElement).textContent = message;\n let closed: Promise<void> | null = null;\n let timer: ReturnType<typeof setTimeout> | 0 = 0;\n const close = (): Promise<void> => {\n if (closed) return closed;\n clearTimeout(timer as ReturnType<typeof setTimeout>);\n el.setAttribute('data-leaving', '');\n const frames = this.enterFrames().reverse();\n const a = el.isConnected ? this.motion(el, frames, { duration: 220, easing: 'cubic-bezier(0.7, 0, 0.84, 0)', fill: 'forwards' }) : null;\n closed = new Promise<void>((resolve) => {\n const done = () => {\n this.flip(() => el.remove());\n resolve();\n };\n if (a) a.onfinish = done;\n else done();\n });\n return closed;\n };\n if (options.action) {\n const btn = document.createElement('button');\n btn.type = 'button';\n btn.className = 'usa-toast-action';\n btn.textContent = options.action.label;\n btn.addEventListener('click', () => {\n options.action!.onClick();\n close();\n });\n el.append(btn);\n }\n if (options.dismissible !== false) {\n const x = document.createElement('button');\n x.type = 'button';\n x.className = 'usa-toast-close';\n x.setAttribute('aria-label', 'Close');\n x.innerHTML = '<svg viewBox=\"0 0 24 24\" aria-hidden=\"true\"><path d=\"m7 7 10 10M17 7 7 17\"/></svg>';\n x.addEventListener('click', () => close());\n el.append(x);\n }\n const duration = options.duration ?? 4000;\n const arm = () => {\n clearTimeout(timer as ReturnType<typeof setTimeout>);\n if (duration > 0) timer = setTimeout(close, duration);\n };\n const hold = () => clearTimeout(timer as ReturnType<typeof setTimeout>);\n el.addEventListener('pointerenter', hold);\n el.addEventListener('pointerleave', arm);\n el.addEventListener('focusin', hold);\n el.addEventListener('focusout', arm);\n const top = this.str('position', 'bottom-right').startsWith('top');\n this.flip(() => (top ? this.prepend(el) : this.append(el)));\n this.motion(el, this.enterFrames(), { duration: 420, easing: FLUENT_DECELERATE });\n arm();\n const live = Array.from(this.querySelectorAll<HTMLElement>('.usa-toast:not([data-leaving])'));\n const max = Math.max(1, this.num('max', 4));\n const extra = live.length - max;\n if (extra > 0) (top ? live.slice(-extra) : live.slice(0, extra)).forEach((t) => (t as any)._close?.());\n (el as any)._close = close;\n this.emit('toast', { element: el, message, type });\n return { element: el, close };\n }\n\n clear(): void {\n this.querySelectorAll<HTMLElement>('.usa-toast').forEach((t) => (t as any)._close?.());\n }\n },\n { id: 'toast', text: css }\n );\n}\n\n/**\n * Show a toast. Defines `<usa-toaster>` and adds one to `<body>` if the\n * page has none. Returns a handle with `close()`. No-op on the server.\n *\n * ```js\n * toast('Saved', { type: 'success' });\n * ```\n */\nexport function toast(message: string, options: ToastOptions = {}): ToastHandle | null {\n if (typeof document === 'undefined' || !defineToaster()) return null;\n let host: UsaToasterElement | null =\n typeof options.toaster === 'string' ? document.querySelector(options.toaster) : options.toaster || document.querySelector('usa-toaster');\n if (!host) {\n host = document.createElement('usa-toaster') as UsaToasterElement;\n document.body.append(host);\n }\n return host.show(message, options);\n}\n","import { kindOf, defineElement, EASE_OUT, EASE_SPRING, type UsaElement } from '../base';\nimport css from './check.css?raw';\n\n/**\n * `<usa-check>` — an animated result icon: the circle draws itself, then the\n * check mark (or cross / exclamation) strokes in with a little pop.\n *\n * Attributes: `kind` (`success` default, `error`, `warning`), `size`\n * (px, 56), `start` (`view` default | `load` | `manual`), `label`\n * (accessible name, e.g. \"Payment complete\"; the icon is decorative\n * without it). Event: `usa:complete`. Reduced motion: drawn instantly.\n */\nexport interface UsaCheckElement extends UsaElement {\n play(): Promise<void>;\n reset(): void;\n}\n\nconst PATHS: Record<string, string> = {\n success: 'M15 27 l7 7 l14 -15',\n error: 'M18 18 L34 34 M34 18 L18 34',\n warning: 'M26 15 V30 M26 37 V37.5',\n};\n\nexport function defineCheck(tag = 'usa-check'): CustomElementConstructor | undefined {\n return defineElement(\n tag,\n (Base) =>\n class UsaCheck extends Base {\n static get observedAttributes(): string[] {\n return ['kind', 'size', 'label'];\n }\n\n private _anims: Animation[] = [];\n\n mount(): void {\n const variant = kindOf(this, PATHS, 'success');\n this.innerHTML = `<svg viewBox=\"0 0 52 52\" aria-hidden=\"true\"><circle class=\"usa-check-circle\" cx=\"26\" cy=\"26\" r=\"23\" pathLength=\"1\"/><path class=\"usa-check-mark\" d=\"${PATHS[variant]}\" pathLength=\"1\"/></svg>`;\n this.setAttribute('data-kind', variant);\n const size = this.getAttribute('size');\n if (size) this.style.setProperty('--usa-check-size', `${Number(size)}px`);\n const label = this.getAttribute('label');\n if (label) {\n this.setAttribute('role', 'img');\n this.setAttribute('aria-label', label);\n }\n if (this.reduced) {\n this.setAttribute('data-state', 'done');\n return;\n }\n this.setAttribute('data-state', 'idle');\n const start = this.str('start', 'view');\n if (start === 'load') this.play();\n else if (start === 'view') {\n let done = false;\n this.inView((v) => v && !done && ((done = true), this.play()), { threshold: 0.5 });\n }\n }\n\n unmount(): void {\n this._anims.splice(0).forEach((a) => a.cancel());\n }\n\n reset(): void {\n this._anims.splice(0).forEach((a) => a.cancel());\n this.setAttribute('data-state', this.reduced ? 'done' : 'idle');\n }\n\n play(): Promise<void> {\n this.reset();\n this.setAttribute('data-state', 'done');\n const circle = this.querySelector('.usa-check-circle');\n const mark = this.querySelector('.usa-check-mark');\n const svg = this.querySelector('svg');\n if (this.reduced || !circle || !mark || !svg) {\n this.emit('complete');\n return Promise.resolve();\n }\n const draw = [{ strokeDashoffset: 1 }, { strokeDashoffset: 0 }];\n const anims = [\n this.motion(circle, draw, { duration: 520, easing: EASE_OUT, fill: 'backwards' }),\n this.motion(mark, draw, { duration: 340, delay: 420, easing: EASE_OUT, fill: 'backwards' }),\n this.motion(svg, [{ transform: 'scale(1)' }, { transform: 'scale(1.12)' }, { transform: 'scale(1)' }], { duration: 420, delay: 640, easing: EASE_SPRING }),\n ].filter((a): a is Animation => !!a);\n this._anims = anims;\n return new Promise((resolve) => {\n const last = anims[anims.length - 1];\n const done = () => {\n this.emit('complete');\n resolve();\n };\n if (last) last.onfinish = done;\n else done();\n });\n }\n },\n { id: 'check', text: css }\n );\n}\n","/**\n * use-scroll-animate/components/feedback — loading & feedback.\n * `<usa-spinner>`, `<usa-skeleton>`, `<usa-progress>`, `<usa-toaster>` +\n * `toast()`, `<usa-check>`.\n */\nimport { defineSpinner, type UsaSpinnerElement } from './spinner';\nimport { defineSkeleton, type UsaSkeletonElement } from './skeleton';\nimport { defineProgress, type UsaProgressElement } from './progress';\nimport { defineToaster, type UsaToasterElement } from './toast';\nimport { defineCheck, type UsaCheckElement } from './check';\n\nexport { defineSpinner, defineSkeleton, defineProgress, defineToaster, defineCheck };\nexport { toast } from './toast';\nexport { SPINNER_VARIANTS } from './spinner';\nexport type { SpinnerVariant } from './spinner';\nexport type { ToastOptions, ToastHandle, ToastType } from './toast';\nexport type { UsaSpinnerElement, UsaSkeletonElement, UsaProgressElement, UsaToasterElement, UsaCheckElement };\nexport { configureComponents, prefersReducedMotion } from '../base';\nexport type { ComponentsConfig, UsaElement } from '../base';\n\n/** Register every component of this category under its default tag. */\nexport function defineFeedbackComponents(): void {\n defineSpinner();\n defineSkeleton();\n defineProgress();\n defineToaster();\n defineCheck();\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'usa-spinner': UsaSpinnerElement;\n 'usa-skeleton': UsaSkeletonElement;\n 'usa-progress': UsaProgressElement;\n 'usa-toaster': UsaToasterElement;\n 'usa-check': UsaCheckElement;\n }\n}\n","import { defineElement, type UsaElement } from '../base';\nimport css from './aurora.css?raw';\n\n/**\n * `<usa-aurora>` — a slow, drifting aurora / gradient-mesh backdrop behind\n * its content. Soft radial gradients moved with `transform` only (no\n * animated blur), paused while off-screen.\n *\n * Attributes: `colors` (comma-separated, default violet / cyan / pink),\n * `speed` (multiplier, 1), `intensity` (0–1 opacity, 0.7), `paused`.\n * Reduced motion: a still gradient.\n */\nexport type UsaAuroraElement = UsaElement;\n\nexport function defineAurora(tag = 'usa-aurora'): CustomElementConstructor | undefined {\n return defineElement(\n tag,\n (Base) =>\n class UsaAurora extends Base {\n static get observedAttributes(): string[] {\n return ['colors', 'speed', 'intensity'];\n }\n\n private _layer: HTMLElement | null = null;\n\n mount(): void {\n if (!this._layer) {\n this._layer = document.createElement('div');\n this._layer.className = 'usa-aurora-layer';\n this._layer.setAttribute('aria-hidden', 'true');\n this._layer.innerHTML = '<i></i><i></i><i></i><i></i>';\n this.prepend(this._layer);\n }\n const colors = this.str('colors', '#7c5cff,#22d3ee,#f472b6,#34d399').split(',').map((c) => c.trim()).filter(Boolean);\n Array.from(this._layer.children).forEach((blob, i) => {\n (blob as HTMLElement).style.setProperty('--c', colors[i % colors.length]);\n });\n const speed = this.num('speed', 1);\n this.style.setProperty('--usa-aurora-speed', `${(18 / Math.max(0.05, speed)).toFixed(2)}s`);\n this.style.setProperty('--usa-aurora-opacity', String(this.num('intensity', 0.7)));\n this.inView((v) => this.toggleAttribute('data-offscreen', !v));\n }\n },\n { id: 'aurora', text: css }\n );\n}\n","import { defineElement, raf, caf, type UsaElement } from '../base';\nimport css from './particles.css?raw';\n\n/**\n * `<usa-particles>` — a canvas of drifting particles, optionally linked by\n * lines when close (a \"constellation\"), that drift away from the pointer.\n * Fills its own box (place it as a background with\n * `position: absolute; inset: 0`, or give it a height).\n *\n * Attributes: `count` (60; scaled down on small boxes), `color`\n * (default `currentColor`), `size` (max radius px, 2.2), `speed` (0.35),\n * `links` (max link distance px, 110; `0` disables), `interactive`,\n * `paused`. Renders only while visible and the tab is shown, at device\n * pixel ratio ≤ 2. Reduced motion: one still frame.\n */\nexport interface UsaParticlesElement extends UsaElement {\n /** Re-seed the particles. */\n reset(): void;\n}\n\ninterface P {\n x: number;\n y: number;\n vx: number;\n vy: number;\n r: number;\n}\n\nexport function defineParticles(tag = 'usa-particles'): CustomElementConstructor | undefined {\n return defineElement(\n tag,\n (Base) =>\n class UsaParticles extends Base {\n static get observedAttributes(): string[] {\n return ['count', 'color', 'size', 'speed', 'links', 'interactive', 'paused'];\n }\n\n private _canvas: HTMLCanvasElement | null = null;\n private _ctx: CanvasRenderingContext2D | null = null;\n private _ps: P[] = [];\n private _frame = 0;\n private _w = 0;\n private _h = 0;\n private _visible = false;\n private _mx = -1e4;\n private _color = '#888';\n private _my = -1e4;\n\n mount(): void {\n if (!this._canvas) {\n this._canvas = document.createElement('canvas');\n this._canvas.setAttribute('aria-hidden', 'true');\n this.prepend(this._canvas);\n }\n this._ctx = this._canvas.getContext?.('2d') ?? null;\n if (!this._ctx) return;\n this.resize();\n if (typeof ResizeObserver !== 'undefined') {\n const ro = new ResizeObserver(() => {\n this.resize();\n if (!this._frame) this.draw();\n });\n ro.observe(this);\n this.onCleanup(() => ro.disconnect());\n }\n this.inView((v) => {\n this._visible = v;\n this.loop();\n });\n this.listen(document, 'visibilitychange', () => this.loop());\n if (this.flag('interactive')) {\n this.listen(window, 'pointermove', (e: PointerEvent) => {\n const r = this.getBoundingClientRect();\n this._mx = e.clientX - r.left;\n this._my = e.clientY - r.top;\n }, { passive: true });\n }\n this.draw();\n }\n\n unmount(): void {\n caf(this._frame);\n this._frame = 0;\n }\n\n reset(): void {\n this._ps = [];\n this.resize();\n this.draw();\n }\n\n private resize(): void {\n const c = this._canvas;\n if (!c || !this._ctx) return;\n const w = this.clientWidth || 300;\n const h = this.clientHeight || 150;\n const dpr = Math.min(2, (typeof devicePixelRatio === 'number' && devicePixelRatio) || 1);\n c.width = Math.round(w * dpr);\n c.height = Math.round(h * dpr);\n this._ctx.setTransform(dpr, 0, 0, dpr, 0, 0);\n this._w = w;\n this._h = h;\n this._color = this.getAttribute('color') || (typeof getComputedStyle === 'function' ? getComputedStyle(this).color : '') || '#888';\n const want = Math.round(Math.min(1, (w * h) / (900 * 500)) * Math.max(1, this.num('count', 60))) || 1;\n const speed = this.num('speed', 0.35);\n const size = this.num('size', 2.2);\n while (this._ps.length < want) {\n const a = Math.random() * Math.PI * 2;\n const s = speed * (0.3 + Math.random() * 0.7);\n this._ps.push({ x: Math.random() * w, y: Math.random() * h, vx: Math.cos(a) * s, vy: Math.sin(a) * s, r: 0.6 + Math.random() * (size - 0.6) });\n }\n this._ps.length = want;\n }\n\n private loop(): void {\n const run = this._visible && !this.reduced && !this.flag('paused') && !(typeof document !== 'undefined' && document.hidden);\n if (run && !this._frame) {\n const tick = () => {\n this.step();\n this.draw();\n this._frame = raf(tick);\n };\n this._frame = raf(tick);\n } else if (!run && this._frame) {\n caf(this._frame);\n this._frame = 0;\n }\n }\n\n private step(): void {\n const { _w: w, _h: h } = this;\n for (const p of this._ps) {\n const dx = p.x - this._mx;\n const dy = p.y - this._my;\n const d2 = dx * dx + dy * dy;\n if (d2 < 8100 && d2 > 0.01) {\n const f = (1 - Math.sqrt(d2) / 90) * 0.6;\n p.x += (dx / Math.sqrt(d2)) * f;\n p.y += (dy / Math.sqrt(d2)) * f;\n }\n p.x += p.vx;\n p.y += p.vy;\n if (p.x < -5) p.x = w + 5;\n else if (p.x > w + 5) p.x = -5;\n if (p.y < -5) p.y = h + 5;\n else if (p.y > h + 5) p.y = -5;\n }\n }\n\n private draw(): void {\n const ctx = this._ctx;\n if (!ctx) return;\n const color = this._color;\n ctx.clearRect(0, 0, this._w, this._h);\n ctx.fillStyle = color;\n ctx.strokeStyle = color;\n const ps = this._ps;\n const link = this.num('links', 110);\n if (link > 0) {\n const l2 = link * link;\n ctx.lineWidth = 0.6;\n for (let i = 0; i < ps.length; i++) {\n for (let j = i + 1; j < ps.length; j++) {\n const dx = ps[i].x - ps[j].x;\n const dy = ps[i].y - ps[j].y;\n const d2 = dx * dx + dy * dy;\n if (d2 < l2) {\n ctx.globalAlpha = (1 - d2 / l2) * 0.35;\n ctx.beginPath();\n ctx.moveTo(ps[i].x, ps[i].y);\n ctx.lineTo(ps[j].x, ps[j].y);\n ctx.stroke();\n }\n }\n }\n }\n ctx.globalAlpha = 0.85;\n for (const p of ps) {\n ctx.beginPath();\n ctx.arc(p.x, p.y, p.r, 0, Math.PI * 2);\n ctx.fill();\n }\n ctx.globalAlpha = 1;\n }\n },\n { id: 'particles', text: css }\n );\n}\n","import { defineElement, type UsaElement } from '../base';\nimport css from './grain.css?raw';\n\n/**\n * `<usa-grain>` — a film-grain / noise overlay on top of its content\n * (SVG `feTurbulence` texture, no images to ship). With `animated`, the\n * grain jitters like film (stepped `transform`, ~12 fps).\n *\n * Attributes: `opacity` (0.12), `animated`, `blend` (`mix-blend-mode`,\n * default `overlay`), `scale` (texture size px, 180). Never intercepts\n * pointer events. Reduced motion: static grain.\n */\nexport type UsaGrainElement = UsaElement;\n\nconst noise = (freq: number) =>\n `url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='256' height='256'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='${freq}' numOctaves='3' stitchTiles='stitch'/%3E%3CfeColorMatrix values='0 0 0 0 0.5 0 0 0 0 0.5 0 0 0 0 0.5 0 0 0 1.6 -0.3'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23n)'/%3E%3C/svg%3E\")`;\n\nexport function defineGrain(tag = 'usa-grain'): CustomElementConstructor | undefined {\n return defineElement(\n tag,\n (Base) =>\n class UsaGrain extends Base {\n static get observedAttributes(): string[] {\n return ['opacity', 'blend', 'scale'];\n }\n\n private _layer: HTMLElement | null = null;\n\n mount(): void {\n if (!this._layer) {\n this._layer = document.createElement('div');\n this._layer.className = 'usa-grain-layer';\n this._layer.setAttribute('aria-hidden', 'true');\n this.append(this._layer);\n }\n const s = this._layer.style;\n s.backgroundImage = noise(0.8);\n s.backgroundSize = `${this.num('scale', 180)}px`;\n s.opacity = String(this.num('opacity', 0.12));\n s.mixBlendMode = this.str('blend', 'overlay');\n }\n },\n { id: 'grain', text: css }\n );\n}\n","import { defineElement, type UsaElement } from '../base';\nimport css from './marquee.css?raw';\n\n/**\n * `<usa-marquee>` — an infinite, seamless ticker of its children (logos,\n * testimonials, tags). The content is cloned (clones are `aria-hidden` and\n * `inert`) and the track slides with one WAAPI `transform` animation whose\n * duration follows the measured width, so the speed is constant.\n *\n * Attributes: `speed` (px/s, 50), `direction` (`left` default | `right` |\n * `up` | `down`), `gap` (px, 32), `pause-on-hover`, `fade` (soft edges),\n * `paused`. Pauses off-screen. Reduced motion: no movement; the row\n * becomes scrollable instead.\n */\nexport interface UsaMarqueeElement extends UsaElement {\n pause(): void;\n resume(): void;\n}\n\nexport function defineMarquee(tag = 'usa-marquee'): CustomElementConstructor | undefined {\n return defineElement(\n tag,\n (Base) =>\n class UsaMarquee extends Base {\n static get observedAttributes(): string[] {\n return ['speed', 'direction', 'gap', 'paused'];\n }\n\n private _track: HTMLElement | null = null;\n private _anim: Animation | null = null;\n private _hover = false;\n private _visible = true;\n private _size = 0;\n\n private get vertical(): boolean {\n const d = this.str('direction', 'left');\n return d === 'up' || d === 'down';\n }\n\n mount(): void {\n if (!this._track) {\n const track = document.createElement('div');\n track.className = 'usa-marquee-track';\n const group = document.createElement('div');\n group.className = 'usa-marquee-group';\n group.append(...Array.from(this.childNodes));\n track.append(group);\n this.append(track);\n this._track = track;\n }\n this.toggleAttribute('data-vertical', this.vertical);\n this.style.setProperty('--usa-marquee-gap', `${this.num('gap', 32)}px`);\n if (this.reduced) {\n this.setAttribute('data-static', '');\n this.syncClones(1);\n return;\n }\n this.removeAttribute('data-static');\n this.build();\n if (typeof ResizeObserver !== 'undefined') {\n const ro = new ResizeObserver(() => this.build());\n ro.observe(this._track.firstElementChild as Element);\n this.onCleanup(() => ro.disconnect());\n }\n this.inView((v) => {\n this._visible = v;\n this.sync();\n });\n this.listen(this, 'pointerenter', () => ((this._hover = true), this.sync()));\n this.listen(this, 'pointerleave', () => ((this._hover = false), this.sync()));\n this.listen(this, 'focusin', () => ((this._hover = true), this.sync()));\n this.listen(this, 'focusout', () => ((this._hover = false), this.sync()));\n }\n\n unmount(): void {\n this._anim?.cancel();\n this._anim = null;\n this._size = 0;\n }\n\n private syncClones(n: number): void {\n const track = this._track!;\n const group = track.firstElementChild as HTMLElement;\n while (track.children.length > n) track.lastElementChild!.remove();\n while (track.children.length < n) {\n const clone = group.cloneNode(true) as HTMLElement;\n clone.setAttribute('aria-hidden', 'true');\n clone.setAttribute('inert', '');\n track.append(clone);\n }\n }\n\n private build(): void {\n const track = this._track!;\n const group = track.firstElementChild as HTMLElement;\n const vertical = this.vertical;\n const gap = this.num('gap', 32);\n const measured = vertical ? group.offsetHeight : group.offsetWidth;\n if (!measured) return; // not laid out yet: the ResizeObserver calls back\n const size = measured + gap;\n if (this._anim && this._size === size) return;\n this._size = size;\n const box = (vertical ? this.clientHeight : this.clientWidth) || size;\n // Enough copies to cover the box twice\n this.syncClones(Math.min(50, Math.max(2, Math.ceil(box / size) + 1)));\n const progress = this._anim?.effect?.getComputedTiming().progress ?? 0;\n this._anim?.cancel();\n const axis = vertical ? 'Y' : 'X';\n const reverse = ['right', 'down'].includes(this.str('direction', 'left'));\n const frames = [{ transform: `translate${axis}(0)` }, { transform: `translate${axis}(${-size}px)` }];\n this._anim = this.motion(track, reverse ? frames.reverse() : frames, {\n duration: (Math.max(1, size) / Math.max(1, this.num('speed', 50))) * 1000,\n iterations: Infinity,\n });\n if (this._anim && progress) this._anim.currentTime = progress * Number(this._anim.effect?.getTiming().duration || 0);\n this.sync();\n }\n\n private sync(): void {\n const a = this._anim;\n if (!a) return;\n const stop = this.flag('paused') || !this._visible || (this._hover && this.flag('pause-on-hover'));\n if (stop && a.playState === 'running') a.pause();\n else if (!stop && a.playState === 'paused') a.play();\n }\n\n pause(): void {\n this.setAttribute('paused', '');\n }\n resume(): void {\n this.removeAttribute('paused');\n }\n\n changed(name: string): void {\n if (name === 'paused') this.sync();\n else super.changed(name);\n }\n },\n { id: 'marquee', text: css }\n );\n}\n","import { defineElement, type UsaElement } from '../base';\nimport css from './acrylic.css?raw';\n\n/**\n * `<usa-acrylic>` — Windows Fluent materials for the web: `acrylic`\n * (frosted glass: backdrop blur + saturation + tint + subtle noise) and\n * `mica` (an opaque, wallpaper-tinted base for app backgrounds; on the web it\n * tints from `--usa-mica-source`, a gradient you control). Optional\n * `shimmer` adds a light sweep when it appears or on hover.\n *\n * Attributes: `kind` (`acrylic` default | `mica`), `tint` (colour),\n * `tint-opacity` (0–1, 0.55), `blur` (px, 30), `shimmer`\n * (`hover` | `load` | `none`, default `none`). Falls back to a solid tint\n * without `backdrop-filter` and under `prefers-reduced-transparency` or\n * forced colours, like Windows does when transparency effects are off.\n */\nexport type UsaAcrylicElement = UsaElement;\n\nexport function defineAcrylic(tag = 'usa-acrylic'): CustomElementConstructor | undefined {\n return defineElement(\n tag,\n (Base) =>\n class UsaAcrylic extends Base {\n static get observedAttributes(): string[] {\n return ['tint', 'tint-opacity', 'blur', 'shimmer'];\n }\n\n mount(): void {\n const tint = this.getAttribute('tint');\n if (tint) this.style.setProperty('--usa-acrylic-tint', tint);\n else this.style.removeProperty('--usa-acrylic-tint');\n this.style.setProperty('--usa-acrylic-opacity', `${Math.round(this.num('tint-opacity', 0.55) * 100)}%`);\n this.style.setProperty('--usa-acrylic-blur', `${this.num('blur', 30)}px`);\n if (this.str('shimmer') === 'load' && !this.reduced) {\n this.removeAttribute('data-shine');\n void this.offsetWidth;\n this.setAttribute('data-shine', '');\n }\n }\n },\n { id: 'acrylic', text: css }\n );\n}\n","import { defineElement, raf, caf, type UsaElement } from '../base';\nimport css from './bg-fx.css?raw';\n\n/** Shared canvas setup: DPR ≤ 2, resize with the host, run only while visible & tab shown. */\nfunction canvasLoop(host: any, draw: (ctx: CanvasRenderingContext2D, w: number, h: number, t: number) => void, still: boolean): void {\n const c = document.createElement('canvas');\n c.className = 'usa-bg-canvas';\n c.setAttribute('aria-hidden', 'true');\n host.prepend(c);\n host.onCleanup(() => c.remove());\n const ctx = c.getContext?.('2d') as CanvasRenderingContext2D | null;\n if (!ctx) return;\n const dpr = Math.min(2, (typeof window !== 'undefined' && window.devicePixelRatio) || 1);\n let w = 0;\n let h = 0;\n const size = () => {\n const r = host.getBoundingClientRect();\n w = Math.max(1, r.width || 300);\n h = Math.max(1, r.height || 150);\n c.width = w * dpr;\n c.height = h * dpr;\n ctx.setTransform(dpr, 0, 0, dpr, 0, 0);\n };\n size();\n const ro = typeof ResizeObserver !== 'undefined' ? new ResizeObserver(size) : null;\n ro?.observe(host);\n host.onCleanup(() => ro?.disconnect());\n let id = 0;\n let on = false;\n const loop = (t: number) => {\n if (!document.hidden) draw(ctx, w, h, t);\n id = raf(loop);\n };\n if (still) {\n draw(ctx, w, h, 0);\n return;\n }\n host.inView((v: boolean) => {\n if (v && !on) {\n on = true;\n id = raf(loop);\n } else if (!v && on) {\n on = false;\n caf(id);\n }\n });\n host.onCleanup(() => caf(id));\n}\n\n/**\n * `<usa-grid-glow>` — a line grid behind its content that lights up around\n * the pointer. Attributes: `size` (cell px, 32), `color`, `radius` (px, 220).\n * Reduced motion: the grid stays, a soft static glow in the centre.\n */\nexport interface UsaGridGlowElement extends UsaElement {}\nexport function defineGridGlow(tag = 'usa-grid-glow'): CustomElementConstructor | undefined {\n return defineElement(tag, (Base) => class extends Base {\n mount(): void {\n this.style.setProperty('--usa-grid', `${this.num('size', 32)}px`);\n this.style.setProperty('--usa-grid-r', `${this.num('radius', 220)}px`);\n if (this.str('color')) this.style.setProperty('--usa-grid-color', this.str('color'));\n if (this.reduced) return;\n let f = 0;\n let x = 0;\n let y = 0;\n this.listen(this, 'pointermove', (e: PointerEvent) => {\n const r = this.getBoundingClientRect();\n x = e.clientX - r.left;\n y = e.clientY - r.top;\n if (!f) f = raf(() => {\n f = 0;\n this.style.setProperty('--usa-grid-x', `${x}px`);\n this.style.setProperty('--usa-grid-y', `${y}px`);\n });\n });\n this.onCleanup(() => caf(f));\n }\n }, { id: 'bg-fx', text: css });\n}\n\n/**\n * `<usa-blobs>` — soft, slowly morphing colour blobs (fluid gradient\n * backdrop). Attributes: `colors` (comma list), `speed` (1), `blur` (px, 60).\n * Reduced motion: still blobs.\n */\nexport interface UsaBlobsElement extends UsaElement {}\nexport function defineBlobs(tag = 'usa-blobs'): CustomElementConstructor | undefined {\n return defineElement(tag, (Base) => class extends Base {\n mount(): void {\n this.querySelector(':scope > .usa-blobs-layer')?.remove();\n const colors = this.str('colors', '#7c5cff,#22d3ee,#f472b6,#34d399').split(',');\n const layer = document.createElement('div');\n layer.className = 'usa-blobs-layer';\n layer.setAttribute('aria-hidden', 'true');\n layer.innerHTML = colors.map((c, i) => `<i style=\"--c:${c.trim()};--i:${i}\"></i>`).join('');\n this.prepend(layer);\n this.style.setProperty('--usa-blobs-speed', String(this.num('speed', 1)));\n this.style.setProperty('--usa-blobs-blur', `${this.num('blur', 60)}px`);\n }\n }, { id: 'bg-fx', text: css });\n}\n\n/**\n * `<usa-water-ripple>` — interactive water ripples on a canvas over its\n * content (pointer moves and taps disturb the surface). Low-resolution height\n * map, paused off-screen. Attributes: `damping` (0.96), `strength` (1),\n * `color` (highlight). Reduced motion: nothing is drawn.\n */\nexport interface UsaWaterRippleElement extends UsaElement {\n drop(x: number, y: number, strength?: number): void;\n}\nexport function defineWaterRipple(tag = 'usa-water-ripple'): CustomElementConstructor | undefined {\n return defineElement(tag, (Base) => class extends Base {\n private _drop: ((x: number, y: number, s?: number) => void) | null = null;\n drop(x: number, y: number, s = 1): void {\n this._drop?.(x, y, s);\n }\n mount(): void {\n if (this.reduced) return;\n const S = 4;\n let cols = 0;\n let rows = 0;\n let a = new Float32Array(0);\n let b = new Float32Array(0);\n const damp = this.num('damping', 0.96);\n const color = this.str('color', '255,255,255');\n this._drop = (x, y, s = 1) => {\n const cx = Math.floor(x / S);\n const cy = Math.floor(y / S);\n if (cx < 1 || cy < 1 || cx >= cols - 1 || cy >= rows - 1) return;\n a[cy * cols + cx] += 256 * s * this.num('strength', 1);\n };\n canvasLoop(this, (ctx, w, h) => {\n const nc = Math.ceil(w / S);\n const nr = Math.ceil(h / S);\n if (nc !== cols || nr !== rows) {\n cols = nc;\n rows = nr;\n a = new Float32Array(cols * rows);\n b = new Float32Array(cols * rows);\n }\n ctx.clearRect(0, 0, w, h);\n for (let y = 1; y < rows - 1; y++) {\n for (let x = 1; x < cols - 1; x++) {\n const i = y * cols + x;\n const v = ((a[i - 1] + a[i + 1] + a[i - cols] + a[i + cols]) / 2 - b[i]) * damp;\n b[i] = v;\n if (v > 2 || v < -2) {\n ctx.fillStyle = `rgba(${color},${Math.min(0.5, Math.abs(v) / 300).toFixed(3)})`;\n ctx.fillRect(x * S, y * S, S, S);\n }\n }\n }\n const t = a;\n a = b;\n b = t;\n }, false);\n this.listen(this, 'pointermove', (e: PointerEvent) => {\n const r = this.getBoundingClientRect();\n this.drop(e.clientX - r.left, e.clientY - r.top, 0.35);\n });\n this.listen(this, 'pointerdown', (e: PointerEvent) => {\n const r = this.getBoundingClientRect();\n this.drop(e.clientX - r.left, e.clientY - r.top, 1.5);\n });\n }\n }, { id: 'bg-fx', text: css });\n}\n\n/**\n * `<usa-dot-network>` — a grid of dots that swell and link up with lines\n * around the pointer (a living network backdrop). Attributes: `gap` (px,\n * 28), `color`, `radius` (px of influence, 140). Reduced motion: a static\n * dot grid.\n */\nexport interface UsaDotNetworkElement extends UsaElement {}\nexport function defineDotNetwork(tag = 'usa-dot-network'): CustomElementConstructor | undefined {\n return defineElement(tag, (Base) => class extends Base {\n mount(): void {\n const gap = Math.max(8, this.num('gap', 28));\n const R = this.num('radius', 140);\n const color = this.str('color', '124,92,255');\n let px = -1e4;\n let py = -1e4;\n this.listen(this, 'pointermove', (e: PointerEvent) => {\n const r = this.getBoundingClientRect();\n px = e.clientX - r.left;\n py = e.clientY - r.top;\n });\n this.listen(this, 'pointerleave', () => (px = py = -1e4));\n canvasLoop(this, (ctx, w, h) => {\n ctx.clearRect(0, 0, w, h);\n const near: [number, number, number][] = [];\n for (let y = gap / 2; y < h; y += gap) {\n for (let x = gap / 2; x < w; x += gap) {\n const d = Math.hypot(x - px, y - py);\n const k = d < R ? 1 - d / R : 0;\n const ox = k ? ((x - px) / (d || 1)) * k * 8 : 0;\n const oy = k ? ((y - py) / (d || 1)) * k * 8 : 0;\n ctx.fillStyle = `rgba(${color},${(0.25 + k * 0.75).toFixed(3)})`;\n ctx.beginPath();\n ctx.arc(x + ox, y + oy, 1.2 + k * 2.2, 0, Math.PI * 2);\n ctx.fill();\n if (k > 0.2) near.push([x + ox, y + oy, k]);\n }\n }\n ctx.lineWidth = 1;\n for (const [x, y, k] of near) {\n ctx.strokeStyle = `rgba(${color},${(k * 0.5).toFixed(3)})`;\n ctx.beginPath();\n ctx.moveTo(x, y);\n ctx.lineTo(px, py);\n ctx.stroke();\n }\n }, this.reduced);\n }\n }, { id: 'bg-fx', text: css });\n}\n","import { adoptStyles } from '../base';\nimport css from './variants.css?raw';\n\n/**\n * Style variants (v2.6): `variant=\"minimal | neon | glass | brutalist |\n * fluent | material\"` on any `<usa-*>` element — or on any ancestor as\n * `data-usa-variant`, or page-wide with `setVariant()` — sets the shared\n * design tokens every component reads:\n *\n * `--usa-accent`, `--usa-accent-text`, `--usa-surface`, `--usa-text`,\n * `--usa-radius`, `--usa-border`, `--usa-shadow`, `--usa-blur`, `--usa-font`.\n *\n * (`<usa-spinner>`, `<usa-check>` and `<usa-dialog>` already use `variant`\n * for their kind; the token names never clash with those values except\n * `fluent`, which means the same thing there.)\n */\nexport const VARIANTS = ['minimal', 'neon', 'glass', 'brutalist', 'fluent', 'material'] as const;\nexport type Variant = (typeof VARIANTS)[number];\n\n/** Inject the variant token sheet (done automatically by every `ui` component). */\nexport function adoptVariants(): void {\n adoptStyles('variants', css);\n}\n\n/** Apply a variant to the whole page (or `root`); `null` removes it. */\nexport function setVariant(variant: Variant | null, root: Element | null = typeof document !== 'undefined' ? document.documentElement : null): void {\n if (!root) return;\n adoptVariants();\n if (variant) root.setAttribute('data-usa-variant', variant);\n else root.removeAttribute('data-usa-variant');\n}\n","/**\n * use-scroll-animate/components/background — backgrounds & decoration.\n * `<usa-aurora>`, `<usa-particles>`, `<usa-grain>`, `<usa-marquee>`,\n * `<usa-acrylic>`.\n */\nimport { defineAurora, type UsaAuroraElement } from './aurora';\nimport { defineParticles, type UsaParticlesElement } from './particles';\nimport { defineGrain, type UsaGrainElement } from './grain';\nimport { defineMarquee, type UsaMarqueeElement } from './marquee';\nimport { defineAcrylic, type UsaAcrylicElement } from './acrylic';\n\nimport { defineGridGlow, defineBlobs, defineWaterRipple, defineDotNetwork } from './bg-fx';\nimport type { UsaGridGlowElement, UsaBlobsElement, UsaWaterRippleElement, UsaDotNetworkElement } from './bg-fx';\nexport { defineAurora, defineParticles, defineGrain, defineMarquee, defineAcrylic };\nexport type { UsaAuroraElement, UsaParticlesElement, UsaGrainElement, UsaMarqueeElement, UsaAcrylicElement };\nexport { defineGridGlow, defineBlobs, defineWaterRipple, defineDotNetwork };\nexport type { UsaGridGlowElement, UsaBlobsElement, UsaWaterRippleElement, UsaDotNetworkElement };\nexport { fluentPreset } from './fluent';\nexport type { FluentPresetOptions } from './fluent';\nexport { configureComponents, prefersReducedMotion } from '../base';\nexport type { ComponentsConfig, UsaElement } from '../base';\n\n/** Register every component of this category under its default tag. */\nexport function defineBackgroundComponents(): void {\n defineAurora();\n defineParticles();\n defineGrain();\n defineMarquee();\n defineAcrylic();\n defineGridGlow();\n defineBlobs();\n defineWaterRipple();\n defineDotNetwork();\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'usa-grid-glow': UsaGridGlowElement;\n 'usa-blobs': UsaBlobsElement;\n 'usa-water-ripple': UsaWaterRippleElement;\n 'usa-dot-network': UsaDotNetworkElement;\n 'usa-aurora': UsaAuroraElement;\n 'usa-particles': UsaParticlesElement;\n 'usa-grain': UsaGrainElement;\n 'usa-marquee': UsaMarqueeElement;\n 'usa-acrylic': UsaAcrylicElement;\n }\n}\n","import { kindOf, defineElement, shadowStyles, EASE_OUT, FLUENT_DECELERATE, type UsaElement } from '../base';\nimport shadowCss from './dialog.shadow.css?raw';\nimport css from './dialog.css?raw';\n\nexport type DialogVariant = 'modal' | 'drawer-start' | 'drawer-end' | 'drawer-bottom' | 'sheet';\n\n/**\n * `<usa-dialog>` — an animated modal or drawer built on the native\n * `<dialog>` (top layer, focus trapping, inert page, Esc to close). Its\n * children are slotted into the panel (they stay in the light DOM, so\n * React / Vue / Svelte keep owning them). Style with `::part(panel)`,\n * `::part(backdrop)` and the `--usa-dialog-*` custom properties.\n *\n * Attributes: `open` (reflects; set/remove to open/close), `kind`\n * (`modal` default — Fluent scale + fade; `drawer-start` / `drawer-end`\n * slide from the side, `drawer-bottom` / `sheet` from below), `label`\n * (accessible name), `no-backdrop-close`, `no-esc`. Elements inside\n * with `data-close` close it. Events: `usa:open`, `usa:close` (cancelable\n * `usa:beforeclose`). Reduced motion: fade only.\n */\nexport interface UsaDialogElement extends UsaElement {\n open: boolean;\n show(): Promise<void>;\n close(returnValue?: string): Promise<void>;\n readonly dialog: HTMLDialogElement | null;\n returnValue: string;\n}\n\nconst FROM: Record<string, string> = {\n modal: 'scale(0.94)',\n 'drawer-start': 'translateX(-100%)',\n 'drawer-end': 'translateX(100%)',\n 'drawer-bottom': 'translateY(100%)',\n sheet: 'translateY(40px)',\n};\n\nexport function defineDialog(tag = 'usa-dialog'): CustomElementConstructor | undefined {\n return defineElement(\n tag,\n (Base) =>\n class UsaDialog extends Base {\n static get observedAttributes(): string[] {\n return ['open', 'kind', 'label'];\n }\n\n private _dialog: HTMLDialogElement | null = null;\n private _panel: HTMLElement | null = null;\n private _backdrop: HTMLElement | null = null;\n private _busy: Promise<void> | null = null;\n private _syncing = false;\n returnValue = '';\n\n get dialog(): HTMLDialogElement | null {\n return this._dialog;\n }\n get open(): boolean {\n return this.hasAttribute('open');\n }\n set open(v: boolean) {\n this.toggleAttribute('open', !!v);\n }\n\n private get kind(): string {\n return kindOf(this, FROM, 'modal');\n }\n\n changed(name: string): void {\n if (name === 'open') {\n if (this._syncing) return;\n if (this.open) this.show();\n else this.close();\n } else this.syncAttrs();\n }\n\n private syncAttrs(): void {\n if (!this._dialog) return;\n this._dialog.setAttribute('data-kind', this.kind);\n this._dialog.setAttribute('aria-modal', 'true');\n const label = this.getAttribute('label');\n if (label) this._dialog.setAttribute('aria-label', label);\n }\n\n mount(): void {\n if (!this._dialog) {\n const root = this.shadowRoot || this.attachShadow({ mode: 'open' });\n root.innerHTML = '<dialog part=\"dialog\"><div part=\"backdrop\" aria-hidden=\"true\"></div><div part=\"panel\"><slot></slot></div></dialog>';\n shadowStyles(root, shadowCss);\n this._dialog = root.querySelector('dialog');\n this._backdrop = root.querySelector('[part=backdrop]');\n this._panel = root.querySelector('[part=panel]');\n }\n this.syncAttrs();\n const dlg = this._dialog!;\n this.listen(dlg, 'cancel', (e: Event) => {\n e.preventDefault();\n if (!this.flag('no-esc')) this.close('cancel');\n });\n this.listen(this._backdrop!, 'click', () => !this.flag('no-backdrop-close') && this.close('backdrop'));\n this.listen(this, 'click', (e: Event) => {\n const t = (e.target as Element).closest?.('[data-close]');\n if (t && this.contains(t)) this.close((t as HTMLElement).getAttribute('data-close') || 'close');\n });\n if (this.open && !dlg.open) this.show();\n }\n\n unmount(): void {\n if (this._dialog?.open) this._dialog.close();\n }\n\n private setOpenAttr(on: boolean): void {\n this._syncing = true;\n this.toggleAttribute('open', on);\n this._syncing = false;\n }\n\n async show(): Promise<void> {\n await this._busy;\n const dlg = this._dialog;\n if (!dlg) {\n this.setOpenAttr(true); // opens on connect\n return;\n }\n if (dlg.open) return;\n this.setOpenAttr(true);\n try {\n if (typeof dlg.showModal === 'function') dlg.showModal();\n else dlg.setAttribute('open', '');\n } catch {\n dlg.setAttribute('open', '');\n }\n this.emit('open');\n if (this.reduced) {\n await this.animate2([{ opacity: 0 }, { opacity: 1 }], [{ opacity: 0 }, { opacity: 1 }], 160, EASE_OUT);\n return;\n }\n await this.animate2(\n [{ opacity: 0, transform: FROM[this.kind] }, { opacity: 1, transform: 'none' }],\n [{ opacity: 0 }, { opacity: 1 }],\n this.kind === 'modal' ? 260 : 360,\n FLUENT_DECELERATE\n );\n }\n\n async close(returnValue = ''): Promise<void> {\n await this._busy;\n const dlg = this._dialog;\n if (!dlg || !dlg.open) {\n this.setOpenAttr(false);\n return;\n }\n if (!this.emit('beforeclose', { returnValue })) {\n this.setOpenAttr(true);\n return;\n }\n this.returnValue = returnValue;\n this._busy = (async () => {\n const panelTo = this.reduced ? { opacity: 0 } : { opacity: 0, transform: FROM[this.kind] };\n const panelFrom = this.reduced ? { opacity: 1 } : { opacity: 1, transform: 'none' };\n await this.animate2([panelFrom, panelTo], [{ opacity: 1 }, { opacity: 0 }], this.reduced ? 120 : 200, 'cubic-bezier(0.7, 0, 0.84, 0)', 'forwards');\n try {\n if (typeof dlg.close === 'function') dlg.close(returnValue);\n else dlg.removeAttribute('open');\n } catch {\n dlg.removeAttribute('open');\n }\n dlg.removeAttribute('open');\n this._panel?.getAnimations?.().forEach((a) => a.cancel());\n this._backdrop?.getAnimations?.().forEach((a) => a.cancel());\n this.setOpenAttr(false);\n this.emit('close', { returnValue });\n })();\n await this._busy;\n this._busy = null;\n }\n\n private animate2(panel: Keyframe[], backdrop: Keyframe[], duration: number, easing: string, fill: FillMode = 'none'): Promise<void> {\n const a = this._panel ? this.motion(this._panel, panel, { duration, easing, fill }) : null;\n const b = this._backdrop ? this.motion(this._backdrop, backdrop, { duration, easing: 'linear', fill }) : null;\n return Promise.all([a?.finished, b?.finished].map((p) => p?.catch(() => undefined))).then(() => undefined);\n }\n },\n { id: 'dialog', text: css }\n );\n}\n","import { defineElement, EASE_OUT, type UsaElement } from '../base';\nimport css from './accordion.css?raw';\n\n/**\n * `<usa-accordion>` — smooth expand / collapse for the native `<details>`\n * elements inside it (keeps their semantics, keyboard support and\n * find-in-page, and adds no wrapper elements, so framework-rendered content\n * is left alone). Only one stays open unless `multiple` is set.\n *\n * Attributes: `multiple`, `duration` (ms, 300). Event: `usa:toggle`\n * (`detail.details`, `detail.open`). Reduced motion: instant.\n * Heights are measured once per toggle and animated on the `<details>`.\n */\nexport interface UsaAccordionElement extends UsaElement {\n readonly items: HTMLDetailsElement[];\n toggleItem(details: HTMLDetailsElement, open?: boolean): Promise<void>;\n}\n\nexport function defineAccordion(tag = 'usa-accordion'): CustomElementConstructor | undefined {\n return defineElement(\n tag,\n (Base) =>\n class UsaAccordion extends Base {\n static get observedAttributes(): string[] {\n return [];\n }\n\n private _running = new WeakMap<HTMLDetailsElement, Animation>();\n\n get items(): HTMLDetailsElement[] {\n return Array.from(this.children).filter((c): c is HTMLDetailsElement => c.tagName === 'DETAILS');\n }\n\n mount(): void {\n this.listen(this, 'click', (e: MouseEvent) => {\n const summary = (e.target as Element).closest?.('summary');\n const d = summary?.parentElement;\n if (!summary || !d || d.tagName !== 'DETAILS' || d.parentElement !== this) return;\n e.preventDefault();\n this.toggleItem(d as HTMLDetailsElement);\n });\n }\n\n /** Height of `d` when closed: its summary plus its own padding and border. */\n private closedHeight(d: HTMLDetailsElement): number {\n const summary = d.querySelector(':scope > summary');\n const cs = typeof getComputedStyle === 'function' ? getComputedStyle(d) : null;\n const extra = cs\n ? ['paddingTop', 'paddingBottom', 'borderTopWidth', 'borderBottomWidth'].reduce((n, k) => n + (parseFloat((cs as any)[k]) || 0), 0)\n : 0;\n return (summary ? summary.getBoundingClientRect().height : 0) + extra;\n }\n\n async toggleItem(d: HTMLDetailsElement, open = !d.open || d.hasAttribute('data-closing')): Promise<void> {\n if (open && !this.flag('multiple')) this.items.forEach((o) => o !== d && o.open && this.toggleItem(o, false));\n this._running.get(d)?.cancel();\n this._running.delete(d);\n const duration = this.reduced ? 0 : this.num('duration', 300);\n const startH = d.getBoundingClientRect().height;\n if (open) {\n d.removeAttribute('data-closing');\n d.open = true;\n }\n this.emit('toggle', { details: d, open });\n if (!duration || typeof d.animate !== 'function') {\n if (!open) d.open = false;\n return;\n }\n const endH = open ? d.getBoundingClientRect().height : this.closedHeight(d);\n if (!open) d.setAttribute('data-closing', '');\n d.style.overflow = 'hidden';\n const a = d.animate([{ height: `${startH}px` }, { height: `${endH}px` }], { duration, easing: EASE_OUT });\n this._running.set(d, a);\n await a.finished.catch(() => undefined);\n if (this._running.get(d) !== a) return;\n this._running.delete(d);\n d.style.overflow = '';\n if (!open) {\n d.open = false;\n d.removeAttribute('data-closing');\n }\n }\n },\n { id: 'accordion', text: css }\n );\n}\n","import { defineElement, EASE_OUT, FLUENT_DECELERATE, type UsaElement } from '../base';\nimport css from './view-switch.css?raw';\n\n/**\n * `<usa-view-switch>` — shows one of its children at a time (tabs, wizard\n * steps, app pages) and animates between them. Children are views; name\n * them with `data-view`, or address them by index.\n *\n * Attributes: `active` (view name or index, default the first),\n * `effect` (`fade` | `slide` (default, direction-aware — Fluent \"page\n * transition\") | `scale` | `drill`), `duration` (ms, 320). Inactive views\n * get `hidden` + `inert`. Event: `usa:change` (`detail.view`,\n * `detail.index`). Reduced motion: a quick fade.\n */\nexport interface UsaViewSwitchElement extends UsaElement {\n active: string;\n readonly views: HTMLElement[];\n show(view: string | number): Promise<void>;\n}\n\nexport function defineViewSwitch(tag = 'usa-view-switch'): CustomElementConstructor | undefined {\n return defineElement(\n tag,\n (Base) =>\n class UsaViewSwitch extends Base {\n static get observedAttributes(): string[] {\n return ['active'];\n }\n\n private _index = -1;\n private _anims: Animation[] = [];\n\n get views(): HTMLElement[] {\n return Array.from(this.children) as HTMLElement[];\n }\n get active(): string {\n return this.str('active', '0');\n }\n set active(v: string) {\n this.setAttribute('active', String(v));\n }\n\n private indexOf(v: string | number): number {\n const views = this.views;\n const byName = views.findIndex((el) => el.dataset.view === String(v));\n if (byName >= 0) return byName;\n const n = Number(v);\n return Number.isInteger(n) && n >= 0 && n < views.length ? n : -1;\n }\n\n changed(): void {\n this.show(this.active);\n }\n\n mount(): void {\n const i = Math.max(0, this.indexOf(this.active));\n this._index = i;\n this.views.forEach((v, j) => this.setVisible(v, j === i));\n }\n\n private setVisible(v: HTMLElement, on: boolean): void {\n v.hidden = !on;\n v.toggleAttribute('inert', !on);\n v.toggleAttribute('data-active', on);\n }\n\n async show(view: string | number): Promise<void> {\n const next = this.indexOf(view);\n const prev = this._index;\n if (next < 0 || next === prev) return;\n const views = this.views;\n const from = views[prev];\n const to = views[next];\n this._index = next;\n const name = to.dataset.view ?? String(next);\n if (this.active !== name && this.active !== String(next)) this.setAttribute('active', name);\n this._anims.splice(0).forEach((a) => a.finish());\n this.setVisible(to, true);\n this.emit('change', { view: to, index: next, name });\n if (!from) return;\n const duration = this.num('duration', 320);\n const effect = this.reduced ? 'fade' : this.str('effect', 'slide');\n const dir = next > prev ? 1 : -1;\n let outF: Keyframe;\n let inF: Keyframe;\n switch (effect) {\n case 'fade':\n outF = { opacity: 0 };\n inF = { opacity: 0 };\n break;\n case 'scale':\n outF = { opacity: 0, transform: 'scale(0.96)' };\n inF = { opacity: 0, transform: 'scale(1.04)' };\n break;\n case 'drill':\n outF = { opacity: 0, transform: `scale(${dir > 0 ? 1.06 : 0.94})` };\n inF = { opacity: 0, transform: `scale(${dir > 0 ? 0.94 : 1.06})` };\n break;\n default:\n outF = { opacity: 0, transform: `translateX(${-dir * 32}px)` };\n inF = { opacity: 0, transform: `translateX(${dir * 48}px)` };\n }\n const neutral = (f: Keyframe): Keyframe => ('transform' in f ? { opacity: 1, transform: 'none' } : { opacity: 1 });\n // Outgoing view stays stacked in the same grid cell while it leaves\n from.setAttribute('data-leaving', '');\n const a = this.motion(from, [neutral(outF), outF], { duration: duration * 0.6, easing: EASE_OUT, fill: 'forwards' });\n const b = this.motion(to, [inF, neutral(inF)], { duration, delay: duration * 0.15, easing: FLUENT_DECELERATE, fill: 'backwards' });\n this._anims = [a, b].filter((x): x is Animation => !!x);\n await Promise.all(this._anims.map((x) => x.finished.catch(() => undefined)));\n from.removeAttribute('data-leaving');\n if (this._index !== prev) this.setVisible(from, false);\n a?.cancel();\n }\n },\n { id: 'view-switch', text: css }\n );\n}\n","import { prefersReducedMotion, EASE_OUT, FLUENT_DECELERATE } from '../base';\n\nexport interface ViewTransitionOptions {\n /**\n * Element to cross-fade when the View Transitions API is missing (default:\n * none — the update is applied without animation).\n */\n fallback?: HTMLElement | null;\n /** Fallback fade duration in ms (default 180 out + 220 in). */\n duration?: number;\n /** View transition types (`document.startViewTransition({ types })`, where supported). */\n types?: string[];\n}\n\n/**\n * Run `update()` (which changes the DOM) inside a view transition:\n * `document.startViewTransition()` where available (Chrome/Edge 111+, so\n * Electron, WebView2 and Tauri on Windows), otherwise a short cross-fade of\n * `options.fallback`. Instant under reduced motion. Resolves when finished.\n *\n * Give elements a `view-transition-name` in CSS for shared-element morphs.\n */\nexport async function viewTransition(update: () => void | Promise<void>, options: ViewTransitionOptions = {}): Promise<void> {\n const doc: any = typeof document !== 'undefined' ? document : null;\n if (!doc || prefersReducedMotion()) {\n await update();\n return;\n }\n if (typeof doc.startViewTransition === 'function') {\n let vt: any;\n try {\n vt = options.types ? doc.startViewTransition({ update, types: options.types }) : doc.startViewTransition(update);\n } catch {\n vt = doc.startViewTransition(update);\n }\n await vt.finished.catch(() => undefined);\n return;\n }\n const el = options.fallback;\n const d = options.duration ?? 200;\n if (!el || typeof el.animate !== 'function') {\n await update();\n return;\n }\n await el.animate([{ opacity: 1 }, { opacity: 0 }], { duration: d * 0.8, easing: 'ease-in', fill: 'forwards' }).finished.catch(() => undefined);\n await update();\n const a = el.animate([{ opacity: 0, transform: 'translateY(6px)' }, { opacity: 1, transform: 'none' }], { duration: d * 1.1, easing: EASE_OUT });\n // remove the forwards fill of the fade-out\n el.getAnimations?.().forEach((x) => x !== a && x.cancel());\n await a.finished.catch(() => undefined);\n}\n\nexport interface FlipOptions {\n duration?: number;\n easing?: string;\n /** Fade/scale in elements that did not exist before (default true). */\n animateEnter?: boolean;\n}\n\ntype Targets = Element | Iterable<Element> | ArrayLike<Element>;\nconst list = (t: Targets): HTMLElement[] =>\n (t instanceof Element ? Array.from(t.children) : Array.from(t as ArrayLike<Element>)) as HTMLElement[];\n\n/**\n * FLIP animation for layout changes (list reorder, filter, grid resize):\n * measures `targets` (an element's children, or a list), runs `mutate()`,\n * then animates each element from its old position to its new one with\n * transforms only. Elements added by `mutate()` fade in.\n *\n * ```js\n * await flip(list, () => list.append(...shuffled));\n * ```\n */\nexport async function flip(targets: Targets, mutate: () => void | Promise<void>, options: FlipOptions = {}): Promise<void> {\n const before = new Map(list(targets).map((el) => [el, el.getBoundingClientRect()]));\n await mutate();\n if (prefersReducedMotion()) return;\n const after = list(targets);\n const duration = options.duration ?? 420;\n const easing = options.easing ?? FLUENT_DECELERATE;\n const anims: Animation[] = [];\n // Read all, then write all\n const rects = after.map((el) => el.getBoundingClientRect());\n after.forEach((el, i) => {\n if (typeof el.animate !== 'function') return;\n const first = before.get(el);\n const last = rects[i];\n if (!first) {\n if (options.animateEnter !== false) anims.push(el.animate([{ opacity: 0, transform: 'scale(0.9)' }, { opacity: 1, transform: 'none' }], { duration, easing }));\n return;\n }\n const dx = first.left - last.left;\n const dy = first.top - last.top;\n const sx = last.width ? first.width / last.width : 1;\n const sy = last.height ? first.height / last.height : 1;\n if (Math.abs(dx) < 0.5 && Math.abs(dy) < 0.5 && Math.abs(sx - 1) < 0.01 && Math.abs(sy - 1) < 0.01) return;\n anims.push(\n el.animate(\n [{ transformOrigin: '0 0', transform: `translate(${dx}px, ${dy}px) scale(${sx}, ${sy})` }, { transformOrigin: '0 0', transform: 'none' }],\n { duration, easing }\n )\n );\n });\n await Promise.all(anims.map((a) => a.finished.catch(() => undefined)));\n}\n","/**\n * use-scroll-animate/components/transitions — view & layout transitions.\n * `<usa-dialog>`, `<usa-accordion>`, `<usa-view-switch>`\n * and the `viewTransition()` and `flip()` helpers (4.0: `<usa-flip-list>` → `<usa-auto-animate>`,\n * `connectedAnimation()` → `sharedTransition()`, both in `components/layout`).\n */\nimport { defineDialog, type UsaDialogElement } from './dialog';\nimport { defineAccordion, type UsaAccordionElement } from './accordion';\nimport { defineViewSwitch, type UsaViewSwitchElement } from './view-switch';\n\nexport { defineDialog, defineAccordion, defineViewSwitch };\nexport { viewTransition, flip } from './helpers';\nexport type { ViewTransitionOptions, FlipOptions } from './helpers';\nexport type { DialogVariant } from './dialog';\nexport type { UsaDialogElement, UsaAccordionElement, UsaViewSwitchElement };\nexport { configureComponents, prefersReducedMotion } from '../base';\nexport type { ComponentsConfig, UsaElement } from '../base';\n\n/** Register every component of this category under its default tag. */\nexport function defineTransitionComponents(): void {\n defineDialog();\n defineAccordion();\n defineViewSwitch();\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'usa-dialog': UsaDialogElement;\n 'usa-accordion': UsaAccordionElement;\n 'usa-view-switch': UsaViewSwitchElement;\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, type SpringInput } from './spring';\nimport css from './spring-effect.css?raw';\n\nexport const SPRING_EFFECTS = ['bounce-in', 'pop', 'drop', 'jelly', 'rubber-band'] as const;\nexport type SpringEffect = (typeof SPRING_EFFECTS)[number];\n\n/** Entrance effects start hidden; attention effects (jelly, rubber-band) play on visible content. */\nconst ENTRANCE = new Set<string>(['bounce-in', 'pop', 'drop']);\n\n/** Keyframes of a spring effect (entrances use spring timing, attention effects fixed frames). */\nexport function springEffectKeyframes(effect: string, reduced = false): Keyframe[] {\n if (reduced) return ENTRANCE.has(effect) ? [{ opacity: 0 }, { opacity: 1 }] : [{ opacity: 1 }, { opacity: 1 }];\n switch (effect) {\n case 'pop':\n return [{ opacity: 0, transform: 'scale(0.5)' }, { opacity: 1, transform: 'scale(1)' }];\n case 'drop':\n return [{ opacity: 0, transform: 'translate3d(0, -120%, 0)' }, { opacity: 1, transform: 'translate3d(0, 0, 0)' }];\n case 'jelly':\n return [\n { transform: 'scale3d(1, 1, 1)' },\n { transform: 'scale3d(1.25, 0.75, 1)', offset: 0.3 },\n { transform: 'scale3d(0.75, 1.25, 1)', offset: 0.4 },\n { transform: 'scale3d(1.15, 0.85, 1)', offset: 0.5 },\n { transform: 'scale3d(0.95, 1.05, 1)', offset: 0.65 },\n { transform: 'scale3d(1.05, 0.95, 1)', offset: 0.75 },\n { transform: 'scale3d(1, 1, 1)' },\n ];\n case 'rubber-band':\n return [\n { transform: 'scale3d(1, 1, 1)' },\n { transform: 'scale3d(1.3, 0.7, 1)', offset: 0.3 },\n { transform: 'scale3d(0.8, 1.2, 1)', offset: 0.45 },\n { transform: 'scale3d(1.1, 0.9, 1)', offset: 0.6 },\n { transform: 'scale3d(0.97, 1.03, 1)', offset: 0.8 },\n { transform: 'scale3d(1, 1, 1)' },\n ];\n default:\n return [{ opacity: 0, transform: 'scale(0.3)' }, { opacity: 1, transform: 'scale(1)' }];\n }\n}\n\nconst DEFAULT_PRESET: Record<string, string> = { 'bounce-in': 'bouncy', pop: 'wobbly', drop: 'bouncy' };\n\n/**\n * `<usa-spring>` — spring / bounce effects on its content.\n *\n * Attributes: `effect` (`bounce-in` default, `pop`, `drop`, `jelly`,\n * `rubber-band`), `trigger` (`view` default, `hover`, `click`, `manual`),\n * `preset` (`gentle`, `wobbly`, `stiff`, `bouncy`, …) or `stiffness` /\n * `damping` / `mass`, `delay` (ms), `duration` (ms, attention effects; 900),\n * `repeat` (replay every time it re-enters the view), `block`.\n * Events: `usa:complete`. Reduced motion: entrances fade, attention effects do nothing.\n */\nexport interface UsaSpringElement extends UsaElement {\n effect: string;\n play(): Promise<void>;\n reset(): void;\n}\n\nexport function defineSpring(tag = 'usa-spring'): CustomElementConstructor | undefined {\n return defineElement(\n tag,\n (Base) =>\n class UsaSpring extends Base {\n static get observedAttributes(): string[] {\n return ['effect', 'trigger', 'repeat'];\n }\n\n private _anim: Animation | null = null;\n\n get effect(): string {\n return this.str('effect', 'bounce-in');\n }\n set effect(v: string) {\n this.setAttribute('effect', v);\n }\n\n private config(): SpringInput {\n if (this.hasAttribute('stiffness') || this.hasAttribute('damping') || this.hasAttribute('mass'))\n return { stiffness: this.num('stiffness', 170), damping: this.num('damping', 26), mass: this.num('mass', 1) };\n return this.str('preset', DEFAULT_PRESET[this.effect] || 'wobbly');\n }\n\n mount(): void {\n const trigger = this.str('trigger', 'view');\n const entrance = ENTRANCE.has(this.effect);\n if (trigger === 'view') {\n if (entrance) this.setAttribute('data-state', 'hidden');\n this.inView((visible) => {\n if (visible) this.play();\n else if (this.flag('repeat') && entrance) this.reset();\n }, { threshold: 0.15 });\n } else {\n if (trigger === 'hover') this.listen(this, 'pointerenter', () => this.play());\n if (trigger === 'click') {\n this.listen(this, 'click', () => this.play());\n this.listen(this, 'keydown', (e: KeyboardEvent) => (e.key === 'Enter' || e.key === ' ') && !e.repeat && this.play());\n }\n }\n }\n\n unmount(): void {\n this._anim?.cancel();\n this._anim = null;\n }\n\n reset(): void {\n this._anim?.cancel();\n this._anim = null;\n if (ENTRANCE.has(this.effect)) this.setAttribute('data-state', 'hidden');\n }\n\n async play(): Promise<void> {\n const effect = this.effect;\n const reduced = this.reduced;\n this._anim?.cancel();\n this.setAttribute('data-state', 'playing');\n const frames = springEffectKeyframes(effect, reduced);\n const timing: KeyframeAnimationOptions = ENTRANCE.has(effect) && !reduced\n ? springEasing(this.config())\n : { duration: reduced ? 250 : this.num('duration', 900), easing: 'ease-out' };\n const a = this.motion(this, frames, { ...timing, delay: this.num('delay', 0), fill: 'backwards' });\n this._anim = a;\n if (a) {\n try {\n await a.finished;\n } catch {\n return;\n }\n if (this._anim !== a) return;\n }\n this._anim = null;\n this.setAttribute('data-state', 'done');\n this.emit('complete', { effect });\n }\n },\n { id: 'spring', text: css }\n );\n}\n","import { defineElement, clamp, type UsaElement } from '../base';\nimport { createSpring, projectInertia, snapTo, rubberBand, type SpringValue } from './spring';\nimport css from './draggable.css?raw';\n\n/**\n * `<usa-draggable>` — drag its content with the pointer (mouse, touch, pen)\n * or the arrow keys; physics on release.\n *\n * Attributes: `axis` (`both` default, `x`, `y`), `spring-back` (return to\n * the origin with a spring), `inertia` (keep gliding after a flick),\n * `snap` (grid size like `80`, or points like `0,120,240`), `bounds`\n * (`parent` = stay inside the parent box, rubber-banding past its edges),\n * `preset` (spring, default `wobbly`), `step` (arrow-key step, px, 16),\n * `disabled`. Methods: `moveTo(x, y, animate?)`, `reset()`. Events:\n * `usa:drag-start`, `usa:drag-end` (`{ x, y, vx, vy }`), `usa:settle`.\n * Reduced motion: positions change instantly (no spring or inertia).\n */\nexport interface UsaDraggableElement extends UsaElement {\n readonly x: number;\n readonly y: number;\n readonly dragging: boolean;\n moveTo(x: number, y: number, animate?: boolean): void;\n reset(): void;\n}\n\nconst parseSnap = (s: string): number | number[] | null => {\n if (!s.trim()) return null;\n const parts = s.split(',').map((p) => Number(p.trim())).filter((n) => Number.isFinite(n));\n if (!parts.length) return null;\n return s.includes(',') ? parts : parts[0];\n};\n\nexport function defineDraggable(tag = 'usa-draggable'): CustomElementConstructor | undefined {\n return defineElement(\n tag,\n (Base) =>\n class UsaDraggable extends Base {\n static get observedAttributes(): string[] {\n return ['axis', 'disabled', 'preset'];\n }\n\n private _x = 0;\n private _y = 0;\n private _sx!: SpringValue;\n private _sy!: SpringValue;\n private _drag: { id: number; px: number; py: number; ox: number; oy: number; samples: [number, number, number][] } | null = null;\n\n get x(): number {\n return this._x;\n }\n get y(): number {\n return this._y;\n }\n get dragging(): boolean {\n return !!this._drag;\n }\n\n private render(): void {\n this.style.transform = `translate3d(${this._x}px, ${this._y}px, 0)`;\n this.style.setProperty('--usa-drag-x', `${this._x}px`);\n this.style.setProperty('--usa-drag-y', `${this._y}px`);\n }\n\n private axis(): string {\n return this.str('axis', 'both');\n }\n\n /** Bounds relative to the origin, from the parent box. */\n private limits(): { minX: number; maxX: number; minY: number; maxY: number } | null {\n if (this.str('bounds') !== 'parent' || !this.parentElement) return null;\n const p = this.parentElement.getBoundingClientRect();\n const r = this.getBoundingClientRect();\n const ox = r.left - this._x;\n const oy = r.top - this._y;\n return { minX: p.left - ox, maxX: p.right - ox - r.width, minY: p.top - oy, maxY: p.bottom - oy - r.height };\n }\n\n mount(): void {\n let settled = 0;\n const rest = () => {\n if (++settled >= 2) {\n settled = 0;\n this.removeAttribute('data-moving');\n this.emit('settle', { x: this._x, y: this._y });\n }\n };\n const spring = this.str('preset', 'wobbly');\n this._sx = createSpring({ value: this._x, spring, onUpdate: (v) => ((this._x = v), this.render()), onRest: rest });\n this._sy = createSpring({ value: this._y, spring, onUpdate: (v) => ((this._y = v), this.render()), onRest: rest });\n if (!this.hasAttribute('tabindex')) this.tabIndex = 0;\n this.setAttribute('aria-roledescription', 'draggable');\n this.listen(this, 'pointerdown', (e: PointerEvent) => this.start(e));\n this.listen(this, 'pointermove', (e: PointerEvent) => this.move(e));\n this.listen(this, 'pointerup', (e: PointerEvent) => this.end(e));\n this.listen(this, 'pointercancel', (e: PointerEvent) => this.end(e));\n this.listen(this, 'keydown', (e: KeyboardEvent) => this.key(e));\n this.render();\n }\n\n unmount(): void {\n this._sx?.stop();\n this._sy?.stop();\n this._drag = null;\n }\n\n private start(e: PointerEvent): void {\n if (this.flag('disabled') || (e.pointerType === 'mouse' && e.button !== 0)) return;\n this._sx.stop();\n this._sy.stop();\n this._drag = { id: e.pointerId, px: e.clientX, py: e.clientY, ox: this._x, oy: this._y, samples: [[e.clientX, e.clientY, typeof e.timeStamp === 'number' ? e.timeStamp : Date.now()]] };\n try {\n this.setPointerCapture?.(e.pointerId);\n } catch {\n /* synthetic events */\n }\n this.setAttribute('data-dragging', '');\n this.emit('drag-start', { x: this._x, y: this._y });\n }\n\n private move(e: PointerEvent): void {\n const d = this._drag;\n if (!d || e.pointerId !== d.id) return;\n const axis = this.axis();\n let x = axis === 'y' ? d.ox : d.ox + e.clientX - d.px;\n let y = axis === 'x' ? d.oy : d.oy + e.clientY - d.py;\n const b = this.limits();\n if (b) {\n const band = (v: number, lo: number, hi: number, dim: number) => (v < lo ? lo + rubberBand(v - lo, dim) : v > hi ? hi + rubberBand(v - hi, dim) : v);\n x = band(x, b.minX, b.maxX, 200);\n y = band(y, b.minY, b.maxY, 200);\n }\n this._x = x;\n this._y = y;\n d.samples.push([e.clientX, e.clientY, typeof e.timeStamp === 'number' ? e.timeStamp : Date.now()]);\n if (d.samples.length > 6) d.samples.shift();\n this.render();\n this.emit('drag', { x, y });\n }\n\n private velocity(): [number, number] {\n const s = this._drag?.samples || [];\n if (s.length < 2) return [0, 0];\n const a = s[0];\n const b = s[s.length - 1];\n const dt = (b[2] - a[2]) / 1000;\n if (dt <= 0 || dt > 0.3) return [0, 0];\n return [(b[0] - a[0]) / dt, (b[1] - a[1]) / dt];\n }\n\n private end(e: PointerEvent): void {\n const d = this._drag;\n if (!d || e.pointerId !== d.id) return;\n let [vx, vy] = this.velocity();\n const axis = this.axis();\n if (axis === 'y') vx = 0;\n if (axis === 'x') vy = 0;\n this._drag = null;\n this.removeAttribute('data-dragging');\n let tx = this._x;\n let ty = this._y;\n if (this.flag('spring-back')) {\n tx = 0;\n ty = 0;\n } else {\n if (this.flag('inertia') && !this.reduced) {\n tx = projectInertia(tx, vx);\n ty = projectInertia(ty, vy);\n }\n [tx, ty] = this.constrain(tx, ty);\n }\n this.emit('drag-end', { x: tx, y: ty, vx, vy });\n this.go(tx, ty, vx, vy);\n }\n\n private constrain(x: number, y: number): [number, number] {\n const snap = parseSnap(this.str('snap'));\n let tx = snapTo(x, snap);\n let ty = snapTo(y, snap);\n const b = this.limits();\n if (b) {\n tx = clamp(tx, b.minX, Math.max(b.minX, b.maxX));\n ty = clamp(ty, b.minY, Math.max(b.minY, b.maxY));\n }\n const axis = this.axis();\n return [axis === 'y' ? 0 : tx, axis === 'x' ? 0 : ty];\n }\n\n private go(x: number, y: number, vx = 0, vy = 0): void {\n this.setAttribute('data-moving', '');\n this._sx.set(x, vx);\n this._sy.set(y, vy);\n }\n\n private key(e: KeyboardEvent): void {\n if (this.flag('disabled')) return;\n const step = this.num('step', 16);\n const snap = parseSnap(this.str('snap'));\n const s = typeof snap === 'number' ? snap : step;\n const map: Record<string, [number, number]> = { ArrowLeft: [-s, 0], ArrowRight: [s, 0], ArrowUp: [0, -s], ArrowDown: [0, s] };\n if (e.key === 'Home' || e.key === 'Escape') {\n e.preventDefault();\n this.reset();\n return;\n }\n const m = map[e.key];\n if (!m) return;\n e.preventDefault();\n const [tx, ty] = this.flag('spring-back') ? [this._sx.target + m[0], this._sy.target + m[1]] : this.constrain(this._sx.target + m[0], this._sy.target + m[1]);\n this.go(tx, ty);\n }\n\n moveTo(x: number, y: number, animate = true): void {\n if (!animate) {\n this._sx.jump(x);\n this._sy.jump(y);\n return;\n }\n this.go(x, y);\n }\n\n reset(): void {\n this.go(0, 0);\n }\n },\n { id: 'draggable', text: css }\n );\n}\n","import { defineElement, type UsaElement } from '../base';\nimport { createSpring, rubberBand, type SpringValue } from './spring';\nimport css from './overscroll.css?raw';\n\n/**\n * `<usa-overscroll>` — an elastic scroll container: pulling past the top or\n * bottom (touch, trackpad or wheel) stretches the content with iOS-style\n * rubber-band resistance and it springs back on release.\n *\n * Attributes: `axis` (`y` default, `x`), `max` (largest stretch in px, 120),\n * `preset` (spring, default `default`), `disabled`. CSS variable\n * `--usa-overscroll` holds the current offset. Reduced motion: no stretch\n * (a plain scroll container with `overscroll-behavior: contain`).\n */\nexport interface UsaOverscrollElement extends UsaElement {\n /** Current stretch in px (negative = pulled past the end). */\n readonly offset: number;\n}\n\nexport function defineOverscroll(tag = 'usa-overscroll'): CustomElementConstructor | undefined {\n return defineElement(\n tag,\n (Base) =>\n class UsaOverscroll extends Base {\n static get observedAttributes(): string[] {\n return ['axis', 'disabled'];\n }\n\n private _off = 0;\n private _spring!: SpringValue;\n\n get offset(): number {\n return this._off;\n }\n\n private set(v: number): void {\n this._off = v;\n this.style.setProperty('--usa-overscroll', `${v}px`);\n this.toggleAttribute('data-stretched', Math.abs(v) > 0.5);\n }\n\n private edge(delta: number): boolean {\n const x = this.str('axis', 'y') === 'x';\n const pos = x ? this.scrollLeft : this.scrollTop;\n const max = (x ? this.scrollWidth - this.clientWidth : this.scrollHeight - this.clientHeight) - 1;\n return (delta < 0 && pos <= 0) || (delta > 0 && pos >= max);\n }\n\n private stretch(raw: number): void {\n const max = this.num('max', 120);\n this.set(Math.max(-max, Math.min(max, rubberBand(raw, max * 2.5))));\n }\n\n mount(): void {\n this._spring = createSpring({ spring: this.str('preset', 'default'), onUpdate: (v) => this.set(v) });\n const x = this.str('axis', 'y') === 'x';\n const off = () => this.flag('disabled') || this.reduced;\n // Wheel / trackpad: accumulate past the edge, spring back when it stops.\n let pull = 0;\n let timer: ReturnType<typeof setTimeout> | undefined;\n this.listen(this, 'wheel', (e: WheelEvent) => {\n const d = x ? e.deltaX || e.deltaY : e.deltaY;\n if (off() || !d || !this.edge(d)) return;\n this._spring.stop();\n pull -= d;\n this.stretch(pull);\n clearTimeout(timer);\n timer = setTimeout(() => {\n pull = 0;\n this._spring.jump(this._off);\n this._spring.set(0);\n }, 140);\n }, { passive: true });\n this.onCleanup(() => clearTimeout(timer));\n // Touch: rubber-band while the finger pulls past the edge.\n let start = 0;\n let active = false;\n this.listen(this, 'touchstart', (e: TouchEvent) => {\n if (off()) return;\n const t = e.touches[0];\n start = x ? t.clientX : t.clientY;\n active = false;\n this._spring.stop();\n }, { passive: true });\n this.listen(this, 'touchmove', (e: TouchEvent) => {\n if (off()) return;\n const t = e.touches[0];\n const dist = (x ? t.clientX : t.clientY) - start;\n if (!active && dist !== 0 && this.edge(-dist)) active = true;\n if (!active) return;\n if (e.cancelable) e.preventDefault();\n this.stretch(dist);\n }, { passive: false });\n const release = () => {\n if (!active) return;\n active = false;\n this._spring.jump(this._off);\n this._spring.set(0);\n };\n this.listen(this, 'touchend', release);\n this.listen(this, 'touchcancel', release);\n }\n\n unmount(): void {\n this._spring?.stop();\n this.set(0);\n }\n },\n { id: 'overscroll', text: css }\n );\n}\n","/**\n * use-scroll-animate/components/physics — spring & bounce physics (v2.3).\n * `<usa-spring>` (bounce-in, pop, drop, jelly, rubber-band), `<usa-draggable>`\n * (spring-back, inertia, snap) and `<usa-overscroll>` (elastic edges), plus\n * the spring core: `spring()`, `springEasing()`, `createSpring()`,\n * `SPRING_PRESETS`, `projectInertia()`, `snapTo()`, `rubberBand()`.\n */\nimport { defineSpring, type UsaSpringElement } from './spring-effect';\nimport { defineDraggable, type UsaDraggableElement } from './draggable';\nimport { defineOverscroll, type UsaOverscrollElement } from './overscroll';\n\nexport { defineSpring, defineDraggable, defineOverscroll };\nexport { SPRING_EFFECTS, springEffectKeyframes } from './spring-effect';\nexport type { SpringEffect } from './spring-effect';\nexport {\n SPRING_PRESETS,\n resolveSpring,\n stepSpring,\n springSamples,\n springEasing,\n linearEasing,\n supportsLinearEasing,\n spring,\n createSpring,\n projectInertia,\n snapTo,\n rubberBand,\n} from './spring';\nexport type { SpringConfig, SpringPreset, SpringInput, SpringValue, SpringValueOptions } from './spring';\nexport type { UsaSpringElement, UsaDraggableElement, UsaOverscrollElement };\nexport { configureComponents, prefersReducedMotion } from '../base';\nexport type { ComponentsConfig, UsaElement } from '../base';\n\n/** Register every component of this category under its default tag. */\nexport function definePhysicsComponents(): void {\n defineSpring();\n defineDraggable();\n defineOverscroll();\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'usa-spring': UsaSpringElement;\n 'usa-draggable': UsaDraggableElement;\n 'usa-overscroll': UsaOverscrollElement;\n }\n}\n","import { defineElement, raf, caf, clamp, EASE_OUT, type UsaElement } from '../base';\nimport { springEasing } from '../physics/spring';\nimport css from './card.css?raw';\n\nexport const CARD_EFFECTS = ['flip', 'holo', 'glass', 'border-glow', 'conic-border', 'lift', 'spotlight', 'sheen', 'parallax-layers', 'expand'] as const;\nexport type CardEffect = (typeof CARD_EFFECTS)[number];\n\n/** Effects that follow the pointer (they share one rAF-throttled tracker). */\nconst TRACKING = new Set(['holo', 'border-glow', 'spotlight', 'parallax-layers', 'lift']);\n\n/**\n * `<usa-card>` — card effects, combinable: `effect=\"lift sheen\"`.\n *\n * - `flip` — front/back (`[data-front]` / `[data-back]` children) flip on\n * hover or `trigger=\"click\"`, `axis=\"y\"` (default, horizontal flip) or `x`.\n * - `holo` — holographic foil that shifts with the pointer.\n * - `glass` — frosted glass surface (backdrop blur).\n * - `border-glow` — a glow on the border that follows the pointer.\n * - `conic-border` — a rotating conic-gradient border.\n * - `lift` — rises with a deeper shadow and a slight pointer tilt.\n * - `spotlight` — a soft light that follows the pointer.\n * - `sheen` — a light sweep across the card on hover / focus.\n * - `parallax-layers` — children with `data-depth=\"0.2…1\"` move at different depths.\n * - `expand` — click to grow into a full detail view (`[data-detail]`\n * content is shown), FLIP + spring; Esc, `[data-close]` or the backdrop closes.\n *\n * Attributes: `effect`, `axis`, `trigger`, `depth` (parallax px, 16),\n * `color` (glow / spotlight colour), `flipped`, `expanded`, `disabled`.\n * CSS variables: `--usa-card-x/-y` (pointer %, 0–100), `--usa-card-nx/-ny` (−1…1).\n * Methods: `flip(force?)`, `expand()`, `collapse()`. Events: `usa:flip`,\n * `usa:expand`, `usa:collapse`. Reduced motion: no tilt / parallax / sweep;\n * flips and expansions cross-fade.\n */\nexport interface UsaCardElement extends UsaElement {\n readonly effects: string[];\n flipped: boolean;\n readonly expanded: boolean;\n flip(force?: boolean): void;\n expand(): Promise<void>;\n collapse(): Promise<void>;\n}\n\nexport function defineCard(tag = 'usa-card'): CustomElementConstructor | undefined {\n return defineElement(\n tag,\n (Base) =>\n class UsaCard extends Base {\n static get observedAttributes(): string[] {\n return ['effect', 'trigger', 'disabled'];\n }\n\n private _frame = 0;\n private _spacer: HTMLElement | null = null;\n private _backdrop: HTMLElement | null = null;\n private _busy = false;\n\n get effects(): string[] {\n return this.str('effect', 'lift').split(/[\\s,]+/).filter(Boolean);\n }\n private has(e: string): boolean {\n return this.effects.includes(e);\n }\n get flipped(): boolean {\n return this.flag('flipped');\n }\n set flipped(v: boolean) {\n this.setFlag('flipped', v);\n }\n get expanded(): boolean {\n return this.flag('expanded');\n }\n\n mount(): void {\n if (this.flag('disabled')) return;\n const color = this.str('color');\n if (color) this.style.setProperty('--usa-card-glow', color);\n if (this.has('sheen') && !this.querySelector(':scope > .usa-card-sheen')) this.append(deco('usa-card-sheen'));\n if (this.has('holo') && !this.querySelector(':scope > .usa-card-holo')) this.append(deco('usa-card-holo'));\n if (this.has('flip')) {\n const click = this.str('trigger', 'hover') === 'click';\n if (click) {\n if (!this.hasAttribute('tabindex')) this.tabIndex = 0;\n this.setAttribute('role', this.getAttribute('role') || 'button');\n this.setAttribute('aria-pressed', String(this.flipped));\n this.listen(this, 'click', (e: MouseEvent) => !interactive(e.target, this) && this.flip());\n this.listen(this, 'keydown', (e: KeyboardEvent) => {\n if ((e.key === 'Enter' || e.key === ' ') && e.target === this) {\n e.preventDefault();\n this.flip();\n }\n });\n }\n this.setBackHidden();\n }\n if (this.has('expand')) {\n if (!this.hasAttribute('tabindex')) this.tabIndex = 0;\n this.setAttribute('aria-expanded', String(this.expanded));\n this.listen(this, 'click', (e: MouseEvent) => {\n const t = e.target as Element;\n if (t.closest?.('[data-close]')) {\n e.stopPropagation();\n this.collapse();\n } else if (!this.expanded && !interactive(t, this)) this.expand();\n });\n this.listen(this, 'keydown', (e: KeyboardEvent) => {\n if (e.key === 'Escape' && this.expanded) this.collapse();\n else if ((e.key === 'Enter' || e.key === ' ') && e.target === this && !this.expanded) {\n e.preventDefault();\n this.expand();\n }\n });\n }\n if (!this.effects.some((e) => TRACKING.has(e)) || this.reduced) return;\n let rect: DOMRect | null = null;\n let px = 0.5;\n let py = 0.5;\n const apply = () => {\n this._frame = 0;\n const nx = clamp(px * 2 - 1, -1, 1);\n const ny = clamp(py * 2 - 1, -1, 1);\n this.style.setProperty('--usa-card-x', `${(px * 100).toFixed(1)}%`);\n this.style.setProperty('--usa-card-y', `${(py * 100).toFixed(1)}%`);\n this.style.setProperty('--usa-card-nx', nx.toFixed(3));\n this.style.setProperty('--usa-card-ny', ny.toFixed(3));\n if (this.has('parallax-layers')) {\n const depth = this.num('depth', 16);\n this.querySelectorAll<HTMLElement>('[data-depth]').forEach((l) => {\n const d = Number(l.dataset.depth) || 0.5;\n l.style.transform = `translate3d(${(nx * depth * d).toFixed(1)}px, ${(ny * depth * d).toFixed(1)}px, 0)`;\n });\n }\n };\n this.listen(this, 'pointerenter', () => {\n rect = this.getBoundingClientRect();\n this.setAttribute('data-hover', '');\n });\n this.listen(this, 'pointermove', (e: PointerEvent) => {\n if (this.expanded) return;\n rect = rect || this.getBoundingClientRect();\n px = (e.clientX - rect.left) / (rect.width || 1);\n py = (e.clientY - rect.top) / (rect.height || 1);\n if (!this._frame) this._frame = raf(apply);\n });\n this.listen(this, 'pointerleave', () => {\n rect = null;\n px = py = 0.5;\n this.removeAttribute('data-hover');\n if (!this._frame) this._frame = raf(apply);\n });\n }\n\n unmount(): void {\n caf(this._frame);\n this._frame = 0;\n if (this.expanded) this.finishCollapse();\n }\n\n private setBackHidden(): void {\n const front = this.querySelector<HTMLElement>(':scope > [data-front]');\n const back = this.querySelector<HTMLElement>(':scope > [data-back]');\n front?.setAttribute('aria-hidden', String(this.flipped));\n back?.setAttribute('aria-hidden', String(!this.flipped));\n }\n\n flip(force?: boolean): void {\n const next = force === undefined ? !this.flipped : force;\n if (next === this.flipped) return;\n this.flipped = next;\n if (this.hasAttribute('aria-pressed')) this.setAttribute('aria-pressed', String(next));\n this.setBackHidden();\n this.emit('flip', { flipped: next });\n }\n\n async expand(): Promise<void> {\n if (this.expanded || this._busy) return;\n this._busy = true;\n const first = this.getBoundingClientRect();\n const spacer = document.createElement('div');\n spacer.className = 'usa-card-spacer';\n spacer.style.cssText = `width:${first.width}px;height:${first.height}px`;\n spacer.setAttribute('aria-hidden', 'true');\n this.before(spacer);\n this._spacer = spacer;\n const backdrop = document.createElement('div');\n backdrop.className = 'usa-card-backdrop';\n backdrop.addEventListener('click', () => this.collapse());\n this.before(backdrop);\n this._backdrop = backdrop;\n this.setFlag('expanded', true);\n this.setAttribute('aria-expanded', 'true');\n this.emit('expand');\n const last = this.getBoundingClientRect();\n await this.flipFrom(first, last);\n this.motion(backdrop, [{ opacity: 0 }, { opacity: 1 }], { duration: 250, easing: 'ease-out' });\n this.focus({ preventScroll: true });\n this._busy = false;\n }\n\n async collapse(): Promise<void> {\n if (!this.expanded || this._busy) return;\n this._busy = true;\n const first = this.getBoundingClientRect();\n const b = this._backdrop;\n if (b) this.motion(b, [{ opacity: 1 }, { opacity: 0 }], { duration: 200, easing: 'ease-in', fill: 'forwards' });\n this.finishCollapse();\n this.emit('collapse');\n const last = this.getBoundingClientRect();\n await this.flipFrom(first, last);\n this._busy = false;\n }\n\n private finishCollapse(): void {\n this.setFlag('expanded', false);\n this.setAttribute('aria-expanded', 'false');\n this._spacer?.remove();\n this._backdrop?.remove();\n this._spacer = this._backdrop = null;\n }\n\n private async flipFrom(first: DOMRect, last: DOMRect): Promise<void> {\n if (this.reduced) {\n const a = this.motion(this, [{ opacity: 0.4 }, { opacity: 1 }], { duration: 200 });\n await a?.finished.catch(() => undefined);\n return;\n }\n const sx = first.width / (last.width || 1);\n const sy = first.height / (last.height || 1);\n const dx = first.left - last.left;\n const dy = first.top - last.top;\n const { easing, duration } = springEasing('stiff');\n const a = this.motion(\n this,\n [{ transformOrigin: '0 0', transform: `translate(${dx}px, ${dy}px) scale(${sx}, ${sy})` }, { transformOrigin: '0 0', transform: 'none' }],\n { duration: Math.min(duration, 900), easing: easing || EASE_OUT }\n );\n await a?.finished.catch(() => undefined);\n }\n },\n { id: 'card', text: css }\n );\n}\n\nfunction deco(cls: string): HTMLSpanElement {\n const s = document.createElement('span');\n s.className = cls;\n s.setAttribute('aria-hidden', 'true');\n return s;\n}\n\n/** Clicks on links, buttons and form fields inside the card keep their own behaviour. */\nfunction interactive(t: EventTarget | null, host: Element): boolean {\n const el = (t as Element)?.closest?.('a, button, input, select, textarea, label, [contenteditable]');\n return !!el && el !== host && host.contains(el);\n}\n","import { defineElement, type UsaElement } from '../base';\nimport { createSpring, type SpringValue } from '../physics/spring';\nimport css from './card-stack.css?raw';\n\n/**\n * `<usa-card-stack>` — a deck of cards (its element children). The top card\n * can be swiped away left or right (pointer, touch or arrow keys); the rest\n * fan out behind it and move up with a spring.\n *\n * Attributes: `threshold` (px to dismiss, 90), `visible` (cards fanned\n * behind, 3), `offset` (px between cards, 10), `loop` (swiped cards go back\n * to the bottom), `disabled`. Methods: `swipe(direction)`, `top`. Events:\n * `usa:swipe` (`{ direction: 'left' | 'right', card }`), `usa:empty`.\n * Reduced motion: cards are removed instantly, no rotation.\n */\nexport interface UsaCardStackElement extends UsaElement {\n readonly top: HTMLElement | null;\n swipe(direction: 'left' | 'right'): Promise<void>;\n}\n\nexport function defineCardStack(tag = 'usa-card-stack'): CustomElementConstructor | undefined {\n return defineElement(\n tag,\n (Base) =>\n class UsaCardStack extends Base {\n static get observedAttributes(): string[] {\n return ['visible', 'offset', 'disabled'];\n }\n\n private _x!: SpringValue;\n private _drag: { id: number; x0: number; t0: number } | null = null;\n private _busy = false;\n\n get top(): HTMLElement | null {\n return this.cards()[0] || null;\n }\n\n private cards(): HTMLElement[] {\n return Array.from(this.children).filter((c) => !(c as HTMLElement).hasAttribute('data-gone')) as HTMLElement[];\n }\n\n private layout(dragX = 0): void {\n const visible = this.num('visible', 3);\n const off = this.num('offset', 10);\n const reduced = this.reduced;\n this.cards().forEach((c, i) => {\n c.style.zIndex = String(100 - i);\n c.toggleAttribute('data-top', i === 0);\n c.setAttribute('aria-hidden', String(i !== 0));\n if (i === 0) {\n const rot = reduced ? 0 : dragX / 18;\n c.style.transform = `translate3d(${dragX}px, 0, 0) rotate(${rot.toFixed(2)}deg)`;\n c.style.opacity = '1';\n } else {\n const k = Math.min(i, visible);\n const pull = Math.min(1, Math.abs(dragX) / this.num('threshold', 90));\n const kk = Math.max(0, k - pull);\n c.style.transform = `translate3d(0, ${(kk * off).toFixed(1)}px, 0) scale(${(1 - kk * 0.05).toFixed(3)})`;\n c.style.opacity = i > visible ? '0' : '1';\n }\n });\n }\n\n mount(): void {\n if (!this.hasAttribute('tabindex')) this.tabIndex = 0;\n if (!this.hasAttribute('role')) this.setAttribute('role', 'group');\n this.setAttribute('aria-roledescription', 'card stack');\n this._x = createSpring({ spring: 'wobbly', onUpdate: (v) => this.layout(v) });\n this.layout();\n this.listen(this, 'pointerdown', (e: PointerEvent) => {\n if (this.flag('disabled') || this._busy || !this.top || !this.top.contains(e.target as Node)) return;\n this._x.stop();\n this._drag = { id: e.pointerId, x0: e.clientX - this._x.value, t0: e.timeStamp };\n try {\n this.setPointerCapture?.(e.pointerId);\n } catch {\n /* synthetic */\n }\n this.setAttribute('data-dragging', '');\n });\n this.listen(this, 'pointermove', (e: PointerEvent) => {\n if (!this._drag || e.pointerId !== this._drag.id) return;\n this._x.jump(e.clientX - this._drag.x0);\n });\n const up = (e: PointerEvent) => {\n if (!this._drag || e.pointerId !== this._drag.id) return;\n this._drag = null;\n this.removeAttribute('data-dragging');\n const x = this._x.value;\n if (Math.abs(x) >= this.num('threshold', 90)) this.swipe(x > 0 ? 'right' : 'left');\n else this._x.set(0);\n };\n this.listen(this, 'pointerup', up);\n this.listen(this, 'pointercancel', up);\n this.listen(this, 'keydown', (e: KeyboardEvent) => {\n if (e.key === 'ArrowLeft' || e.key === 'ArrowRight') {\n e.preventDefault();\n this.swipe(e.key === 'ArrowLeft' ? 'left' : 'right');\n }\n });\n const mo = typeof MutationObserver !== 'undefined' ? new MutationObserver(() => this.layout(this._x.value)) : null;\n mo?.observe(this, { childList: true });\n this.onCleanup(() => mo?.disconnect());\n }\n\n unmount(): void {\n this._x?.stop();\n }\n\n async swipe(direction: 'left' | 'right'): Promise<void> {\n const card = this.top;\n if (!card || this._busy || this.flag('disabled')) return;\n this._busy = true;\n this._x.stop();\n const from = this._x.value;\n const to = (direction === 'left' ? -1 : 1) * Math.max(320, (this.getBoundingClientRect().width || 300) * 1.4);\n card.setAttribute('data-gone', '');\n this._x.jump(0);\n this.layout(0);\n const a = this.reduced\n ? null\n : this.motion(card, [{ transform: `translate3d(${from}px,0,0) rotate(${from / 18}deg)`, opacity: 1 }, { transform: `translate3d(${to}px,0,0) rotate(${to / 14}deg)`, opacity: 0 }], {\n duration: 380,\n easing: 'cubic-bezier(0.3, 0.7, 0.4, 1)',\n fill: 'forwards',\n });\n await a?.finished.catch(() => undefined);\n a?.cancel();\n card.removeAttribute('data-gone');\n if (this.flag('loop')) this.append(card);\n else card.remove();\n this.layout(0);\n this._busy = false;\n this.emit('swipe', { direction, card });\n if (!this.top) this.emit('empty');\n }\n },\n { id: 'card-stack', text: css }\n );\n}\n","import { defineElement, raf, caf, clamp, type UsaElement } from '../base';\nimport css from './sticky-stack.css?raw';\n\n/**\n * `<usa-sticky-stack>` — cards (element children) stick to the top while\n * scrolling and the ones underneath scale down and dim as the next card\n * slides over them, like a deck building up.\n *\n * Attributes: `top` (px from the viewport top, 80), `gap` (px each card\n * peeks below the previous, 16), `scale` (how much a covered card shrinks,\n * 0.06). Reduced motion: cards still stack (sticky) but do not scale.\n */\nexport interface UsaStickyStackElement extends UsaElement {\n update(): void;\n}\n\nexport function defineStickyStack(tag = 'usa-sticky-stack'): CustomElementConstructor | undefined {\n return defineElement(\n tag,\n (Base) =>\n class UsaStickyStack extends Base {\n static get observedAttributes(): string[] {\n return ['top', 'gap', 'scale'];\n }\n\n private _frame = 0;\n\n mount(): void {\n const top = this.num('top', 80);\n const gap = this.num('gap', 16);\n const cards = Array.from(this.children) as HTMLElement[];\n cards.forEach((c, i) => {\n c.style.top = `${top + i * gap}px`;\n c.style.zIndex = String(i + 1);\n });\n if (this.reduced) return;\n const schedule = () => {\n if (!this._frame) this._frame = raf(() => this.update());\n };\n let active = false;\n this.inView((v) => {\n if (v && !active) {\n active = true;\n window.addEventListener('scroll', schedule, { passive: true });\n window.addEventListener('resize', schedule, { passive: true });\n schedule();\n } else if (!v && active) {\n active = false;\n window.removeEventListener('scroll', schedule);\n window.removeEventListener('resize', schedule);\n }\n });\n this.onCleanup(() => {\n window.removeEventListener('scroll', schedule);\n window.removeEventListener('resize', schedule);\n });\n }\n\n unmount(): void {\n caf(this._frame);\n this._frame = 0;\n }\n\n update(): void {\n this._frame = 0;\n const cards = Array.from(this.children) as HTMLElement[];\n const rects = cards.map((c) => c.getBoundingClientRect());\n const shrink = this.num('scale', 0.06);\n cards.forEach((c, i) => {\n let covered = 0;\n for (let j = i + 1; j < cards.length; j++) {\n const h = rects[i].height || 1;\n covered += clamp((rects[i].bottom - rects[j].top) / h, 0, 1);\n }\n const s = 1 - Math.min(3, covered) * shrink;\n c.style.transform = covered > 0.001 ? `scale(${s.toFixed(4)})` : '';\n c.style.filter = covered > 0.001 ? `brightness(${(1 - Math.min(0.35, covered * 0.12)).toFixed(3)})` : '';\n });\n }\n },\n { id: 'sticky-stack', text: css }\n );\n}\n","import { defineElement, type UsaElement } from '../base';\nimport { createSpring, type SpringValue } from '../physics/spring';\nimport css from './carousel-3d.css?raw';\n\n/**\n * `<usa-carousel-3d>` — its element children on a 3D ring. Rotate with the\n * arrow keys, a drag/swipe, the wheel (shift) or `next()` / `prev()`; the\n * front item is `aria-current`. Spring-driven rotation.\n *\n * Attributes: `radius` (px, auto from item width), `autoplay` (ms between\n * steps, pauses on hover/focus), `perspective` (px, 1200), `index`.\n * Events: `usa:change` (`{ index }`). Reduced motion: a flat, instant\n * switch (only the current item is shown, others dimmed).\n */\nexport interface UsaCarousel3dElement extends UsaElement {\n index: number;\n next(): void;\n prev(): void;\n goTo(i: number): void;\n}\n\nexport function defineCarousel3d(tag = 'usa-carousel-3d'): CustomElementConstructor | undefined {\n return defineElement(\n tag,\n (Base) =>\n class UsaCarousel3d extends Base {\n static get observedAttributes(): string[] {\n return ['radius', 'perspective', 'autoplay'];\n }\n\n private _angle!: SpringValue;\n private _i = 0;\n\n get index(): number {\n return this._i;\n }\n set index(v: number) {\n this.goTo(v);\n }\n\n private items(): HTMLElement[] {\n return Array.from(this.children) as HTMLElement[];\n }\n\n private render(angle: number): void {\n const items = this.items();\n const n = items.length || 1;\n const step = 360 / n;\n const w = items[0]?.offsetWidth || 200;\n const r = this.num('radius', Math.round(w / 2 / Math.tan(Math.PI / n)) + 24);\n const reduced = this.reduced;\n items.forEach((it, i) => {\n const norm = ((((i * step - angle) % 360) + 540) % 360) - 180;\n it.style.transform = reduced ? '' : `rotateY(${norm.toFixed(2)}deg) translateZ(${r}px)`;\n it.style.opacity = reduced ? (i === this._i ? '1' : '0') : String(Math.max(0.25, 1 - Math.abs(norm) / 200));\n });\n }\n\n mount(): void {\n this.style.setProperty('--usa-c3d-perspective', `${this.num('perspective', 1200)}px`);\n if (!this.hasAttribute('tabindex')) this.tabIndex = 0;\n this.setAttribute('role', 'region');\n this.setAttribute('aria-roledescription', 'carousel');\n this._i = Math.max(0, Math.min(this.items().length - 1, this.num('index', 0)));\n const step = () => 360 / (this.items().length || 1);\n this._angle = createSpring({ value: this._i * step(), spring: 'gentle', onUpdate: (v) => this.render(v) });\n this.render(this._angle.value);\n this.mark();\n this.listen(this, 'keydown', (e: KeyboardEvent) => {\n if (e.key === 'ArrowRight') this.next();\n else if (e.key === 'ArrowLeft') this.prev();\n else return;\n e.preventDefault();\n });\n let x0: number | null = null;\n this.listen(this, 'pointerdown', (e: PointerEvent) => (x0 = e.clientX));\n this.listen(this, 'pointerup', (e: PointerEvent) => {\n if (x0 === null) return;\n const dx = e.clientX - x0;\n x0 = null;\n if (Math.abs(dx) > 40) dx < 0 ? this.next() : this.prev();\n });\n this.listen(this, 'click', (e: MouseEvent) => {\n const it = this.items().find((c) => c.contains(e.target as Node));\n if (it) {\n const i = this.items().indexOf(it);\n if (i !== this._i) this.goTo(i);\n }\n });\n const every = this.num('autoplay', 0);\n if (every > 0 && !this.reduced) {\n let paused = false;\n const pause = () => (paused = true);\n const resume = () => (paused = false);\n this.listen(this, 'pointerenter', pause);\n this.listen(this, 'pointerleave', resume);\n this.listen(this, 'focusin', pause);\n this.listen(this, 'focusout', resume);\n const t = setInterval(() => !paused && !document.hidden && this.next(), every);\n this.onCleanup(() => clearInterval(t));\n }\n }\n\n unmount(): void {\n this._angle?.stop();\n }\n\n private mark(): void {\n this.items().forEach((it, i) => {\n if (i === this._i) it.setAttribute('aria-current', 'true');\n else it.removeAttribute('aria-current');\n });\n }\n\n goTo(i: number): void {\n const n = this.items().length;\n if (!n || !this._angle) return;\n const step = 360 / n;\n // shortest rotation from the current target\n const cur = this._angle.target;\n const curIdx = Math.round(cur / step);\n let delta = (((i - curIdx) % n) + n) % n;\n if (delta > n / 2) delta -= n;\n this._i = ((i % n) + n) % n;\n this._angle.set((curIdx + delta) * step);\n if (this.reduced) this.render(this._angle.value);\n this.mark();\n this.emit('change', { index: this._i });\n }\n\n next(): void {\n this.goTo(this._i + 1);\n }\n\n prev(): void {\n this.goTo(this._i - 1);\n }\n },\n { id: 'carousel-3d', text: css }\n );\n}\n","/**\n * use-scroll-animate/components/cards — card effects (v2.4).\n * `<usa-card effect=\"flip | holo | glass | border-glow | conic-border | lift |\n * spotlight | sheen | parallax-layers | expand\">` (combinable),\n * `<usa-card-stack>` (swipeable deck), `<usa-sticky-stack>` (stacking on\n * scroll) and `<usa-carousel-3d>`.\n */\nimport { defineCard, type UsaCardElement } from './card';\nimport { defineCardStack, type UsaCardStackElement } from './card-stack';\nimport { defineStickyStack, type UsaStickyStackElement } from './sticky-stack';\nimport { defineCarousel3d, type UsaCarousel3dElement } from './carousel-3d';\n\nexport { defineCard, defineCardStack, defineStickyStack, defineCarousel3d };\nexport { CARD_EFFECTS } from './card';\nexport type { CardEffect } from './card';\nexport type { UsaCardElement, UsaCardStackElement, UsaStickyStackElement, UsaCarousel3dElement };\nexport { configureComponents, prefersReducedMotion } from '../base';\nexport type { ComponentsConfig, UsaElement } from '../base';\n\n/** Register every component of this category under its default tag. */\nexport function defineCardComponents(): void {\n defineCard();\n defineCardStack();\n defineStickyStack();\n defineCarousel3d();\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'usa-card': UsaCardElement;\n 'usa-card-stack': UsaCardStackElement;\n 'usa-sticky-stack': UsaStickyStackElement;\n 'usa-carousel-3d': UsaCarousel3dElement;\n }\n}\n","import { prefersReducedMotion, applyFrame } from '../base';\n\n/**\n * Click-effect helpers (v2.5): `burst()`, `confetti()`, `shake()`, `haptic()`.\n * Particles live in one fixed, pointer-transparent layer and are removed when\n * their animation ends. Under reduced motion particles are skipped and\n * `shake()` only flashes an outline.\n */\n\nlet layer: HTMLElement | null = null;\nfunction fxLayer(): HTMLElement {\n if (layer && layer.isConnected) return layer;\n layer = document.createElement('div');\n layer.className = 'usa-fx-layer';\n layer.setAttribute('aria-hidden', 'true');\n layer.style.cssText = 'position:fixed;inset:0;pointer-events:none;z-index:2147483000;overflow:hidden;contain:strict';\n document.body.appendChild(layer);\n return layer;\n}\n\nexport interface BurstOptions {\n /** Number of particles (default 12). */\n count?: number;\n /** Colours to pick from (default: accent palette). */\n colors?: string[];\n /** Travel distance in px (default 48). */\n distance?: number;\n /** Particle size in px (default 6). */\n size?: number;\n /** `circle` (default), `square`, `star`, `heart` or any text / emoji. */\n shape?: 'circle' | 'square' | 'star' | 'heart' | string;\n /** Duration in ms (default 600). */\n duration?: number;\n}\n\nconst PALETTE = ['#7c5cff', '#22d3ee', '#f472b6', '#facc15', '#34d399', '#fb923c'];\nconst GLYPH: Record<string, string> = { star: '★', heart: '♥' };\n\nfunction particle(x: number, y: number, size: number, color: string, shape: string): HTMLElement {\n const p = document.createElement('span');\n const glyph = GLYPH[shape] || (shape !== 'circle' && shape !== 'square' ? shape : '');\n p.style.cssText = `position:absolute;left:${x}px;top:${y}px;width:${size}px;height:${size}px;margin:${-size / 2}px 0 0 ${-size / 2}px;will-change:transform,opacity;` +\n (glyph ? `font-size:${size * 2}px;line-height:${size}px;text-align:center;color:${color}` : `background:${color};border-radius:${shape === 'square' ? '2px' : '50%'}`);\n if (glyph) p.textContent = glyph;\n fxLayer().appendChild(p);\n return p;\n}\n\nconst done = (a: Animation | null, el: Element) => {\n if (a) a.onfinish = () => el.remove();\n else el.remove();\n};\n\n/** Particles radiating from client point (x, y). Returns the number spawned. */\nexport function burst(x: number, y: number, options: BurstOptions = {}): number {\n if (typeof document === 'undefined' || prefersReducedMotion()) return 0;\n const { count = 12, colors = PALETTE, distance = 48, size = 6, shape = 'circle', duration = 600 } = options;\n for (let i = 0; i < count; i++) {\n const angle = (i / count) * Math.PI * 2 + Math.random() * 0.4;\n const d = distance * (0.7 + Math.random() * 0.5);\n const p = particle(x, y, size, colors[i % colors.length], shape);\n const a = typeof p.animate === 'function'\n ? p.animate(\n [\n { transform: 'translate(0,0) scale(1)', opacity: 1 },\n { transform: `translate(${Math.cos(angle) * d}px, ${Math.sin(angle) * d}px) scale(0.2)`, opacity: 0 },\n ],\n { duration: duration * (0.8 + Math.random() * 0.4), easing: 'cubic-bezier(0.22, 1, 0.36, 1)', fill: 'forwards' }\n )\n : null;\n done(a, p);\n }\n return count;\n}\n\nexport interface ConfettiOptions {\n /** Origin in client px (default: centre-bottom third of the viewport). */\n x?: number;\n y?: number;\n /** Pieces (default 80). */\n count?: number;\n /** Spread angle in degrees (default 70). */\n spread?: number;\n /** Launch speed multiplier (default 1). */\n velocity?: number;\n colors?: string[];\n /** Duration in ms (default 1600). */\n duration?: number;\n}\n\n/** A confetti cannon (paper pieces with gravity, drift and spin). */\nexport function confetti(options: ConfettiOptions = {}): number {\n if (typeof document === 'undefined' || prefersReducedMotion()) return 0;\n const W = window.innerWidth || 800;\n const H = window.innerHeight || 600;\n const { x = W / 2, y = H * 0.66, count = 80, spread = 70, velocity = 1, colors = PALETTE, duration = 1600 } = options;\n for (let i = 0; i < count; i++) {\n const angle = ((-90 + (Math.random() - 0.5) * spread) * Math.PI) / 180;\n const speed = (260 + Math.random() * 320) * velocity;\n const vx = Math.cos(angle) * speed;\n const vy = Math.sin(angle) * speed;\n const p = particle(x, y, 6 + Math.random() * 5, colors[i % colors.length], Math.random() > 0.5 ? 'square' : 'circle');\n p.style.height = `${4 + Math.random() * 3}px`;\n const frames: Keyframe[] = [];\n const steps = 8;\n const T = duration / 1000;\n const spin = (Math.random() - 0.5) * 1440;\n for (let s = 0; s <= steps; s++) {\n const t = (s / steps) * T;\n const g = 900;\n frames.push({\n transform: `translate(${(vx * t * 0.8).toFixed(1)}px, ${(vy * t + 0.5 * g * t * t).toFixed(1)}px) rotate(${((spin * s) / steps).toFixed(0)}deg) rotateX(${s * 120}deg)`,\n opacity: s === steps ? 0 : 1,\n });\n }\n const a = typeof p.animate === 'function' ? p.animate(frames, { duration: duration * (0.85 + Math.random() * 0.3), easing: 'linear', fill: 'forwards' }) : null;\n done(a, p);\n }\n return count;\n}\n\n/** Horizontal error shake (`intensity` px, default 8). Reduced motion: a red outline flash. */\nexport function shake(el: Element, intensity = 8, duration = 480): Animation | null {\n const t = el as HTMLElement;\n if (typeof t.animate !== 'function') return null;\n if (prefersReducedMotion()) return t.animate([{ outline: '2px solid #e5484d' }, { outline: '2px solid transparent' }], { duration: 600 });\n const k = intensity;\n return t.animate(\n [0, -k, k, -k * 0.75, k * 0.75, -k * 0.4, k * 0.4, 0].map((v) => ({ transform: `translateX(${v}px)` })),\n { duration, easing: 'ease-in-out' }\n );\n}\n\n/** `navigator.vibrate()` where supported (Android Chrome, some WebViews). Returns whether it ran. */\nexport function haptic(pattern: number | number[] = 10): boolean {\n try {\n return typeof navigator !== 'undefined' && typeof navigator.vibrate === 'function' ? navigator.vibrate(pattern) : false;\n } catch {\n return false;\n }\n}\n\nexport { applyFrame };\n","import { defineElement, EASE_OUT, type UsaElement } from '../base';\nimport { springEasing } from '../physics/spring';\nimport { burst, confetti, shake, haptic } from './fx';\nimport css from './click.css?raw';\n\nexport const CLICK_EFFECTS = ['ripple', 'burst', 'confetti', 'squish', 'press-spring', 'shake'] as const;\nexport type ClickEffect = (typeof CLICK_EFFECTS)[number];\n\n/**\n * `<usa-click>` — click / tap effects on whatever it wraps (combinable:\n * `effect=\"press-spring burst\"`).\n *\n * - `ripple` — an ink wave from the pointer (enhanced: `color`, soft edge);\n * - `burst` — particles radiating from the pointer (`shape`: circle, square, star, heart, emoji);\n * - `confetti` — a confetti cannon from the click point;\n * - `squish` — squash on press, stretch on release (spring);\n * - `press-spring` — dips while pressed, springs back with overshoot;\n * - `shake` — horizontal error shake; plays on `invalid` events from a form\n * inside, on `shake()`, or on click when `trigger=\"click\"`.\n *\n * Attributes: `effect`, `color`, `shape`, `count`, `haptic` (vibrate ms,\n * where supported), `disabled`. Keyboard (Space/Enter) triggers the effects\n * from the centre. Reduced motion: no particles or movement; press dims.\n */\nexport interface UsaClickElement extends UsaElement {\n readonly effects: string[];\n play(x?: number, y?: number): void;\n shake(): void;\n}\n\nexport function defineClick(tag = 'usa-click'): CustomElementConstructor | undefined {\n return defineElement(\n tag,\n (Base) =>\n class UsaClick extends Base {\n static get observedAttributes(): string[] {\n return ['effect', 'disabled'];\n }\n\n private _press: Animation | null = null;\n\n get effects(): string[] {\n return this.str('effect', 'ripple').split(/[\\s,]+/).filter(Boolean);\n }\n\n mount(): void {\n this.listen(this, 'pointerdown', (e: PointerEvent) => {\n if (this.flag('disabled') || (e.pointerType === 'mouse' && e.button !== 0)) return;\n this.down();\n if (this.effects.includes('ripple')) this.ripple(e.clientX, e.clientY);\n });\n const up = () => this.up();\n this.listen(this, 'pointerup', up);\n this.listen(this, 'pointerleave', up);\n this.listen(this, 'pointercancel', up);\n this.listen(this, 'click', (e: MouseEvent) => {\n if (this.flag('disabled')) return;\n const kb = e.detail === 0;\n const r = this.getBoundingClientRect();\n const x = kb ? r.left + r.width / 2 : e.clientX;\n const y = kb ? r.top + r.height / 2 : e.clientY;\n if (kb && this.effects.includes('ripple')) this.ripple(x, y);\n this.play(x, y);\n if (this.effects.includes('shake') && this.str('trigger') === 'click') this.shake();\n });\n this.listen(this, 'keydown', (e: KeyboardEvent) => {\n if ((e.key === 'Enter' || e.key === ' ') && !e.repeat) this.down();\n });\n this.listen(this, 'keyup', up);\n if (this.effects.includes('shake')) this.listen(this, 'invalid', () => this.shake(), { capture: true });\n }\n\n /** Particles + haptics at client (x, y) (default: centre). */\n play(x?: number, y?: number): void {\n if (x === undefined || y === undefined) {\n const r = this.getBoundingClientRect();\n x = r.left + r.width / 2;\n y = r.top + r.height / 2;\n }\n const fx = this.effects;\n const colors = this.str('color') ? this.str('color').split(',') : undefined;\n if (fx.includes('burst')) burst(x, y, { count: this.num('count', 12), shape: this.str('shape', 'circle'), colors });\n if (fx.includes('confetti')) confetti({ x, y, count: this.num('count', 60), colors, spread: 90, velocity: 0.8 });\n if (this.hasAttribute('haptic')) haptic(this.num('haptic', 10));\n this.emit('click-effect', { x, y, effects: fx });\n }\n\n shake(): void {\n shake(this);\n if (this.hasAttribute('haptic')) haptic([30, 40, 30]);\n }\n\n private ripple(x: number, y: number): void {\n if (this.reduced) return;\n const r = this.getBoundingClientRect();\n const cx = x - r.left;\n const cy = y - r.top;\n const radius = Math.hypot(Math.max(cx, r.width - cx), Math.max(cy, r.height - cy));\n const wave = document.createElement('span');\n wave.className = 'usa-click-wave';\n wave.setAttribute('aria-hidden', 'true');\n wave.style.cssText = `width:${radius * 2}px;height:${radius * 2}px;left:${cx - radius}px;top:${cy - radius}px;--usa-wave:${this.str('color', 'currentColor').split(',')[0]}`;\n this.append(wave);\n const a = this.motion(wave, [{ transform: 'scale(0)', opacity: 0.35 }, { transform: 'scale(1)', opacity: 0.25, offset: 0.6 }, { transform: 'scale(1.05)', opacity: 0 }], {\n duration: 650,\n easing: EASE_OUT,\n fill: 'forwards',\n });\n if (a) a.onfinish = () => wave.remove();\n else wave.remove();\n }\n\n private down(): void {\n if (this.hasAttribute('data-pressed')) return;\n const fx = this.effects;\n if (!fx.includes('squish') && !fx.includes('press-spring')) return;\n this.setAttribute('data-pressed', '');\n this._press?.cancel();\n const to = this.reduced ? { opacity: 0.75 } : fx.includes('squish') ? { transform: 'scale(1.08, 0.86)' } : { transform: 'scale(0.94)' };\n const from: Keyframe = this.reduced ? { opacity: 1 } : { transform: 'none' };\n this._press = this.motion(this, [from, to], {\n duration: 110,\n easing: 'ease-out',\n fill: 'forwards',\n });\n }\n\n private up(): void {\n if (!this.hasAttribute('data-pressed')) return;\n this.removeAttribute('data-pressed');\n const fx = this.effects;\n this._press?.cancel();\n if (this.reduced) {\n this._press = this.motion(this, [{ opacity: 0.75 }, { opacity: 1 }], { duration: 150 });\n return;\n }\n const from = fx.includes('squish') ? 'scale(1.08, 0.86)' : 'scale(0.94)';\n const frames: Keyframe[] = fx.includes('squish')\n ? [{ transform: from }, { transform: 'scale(0.92, 1.1)', offset: 0.3 }, { transform: 'scale(1.03, 0.97)', offset: 0.6 }, { transform: 'none' }]\n : [{ transform: from }, { transform: 'none' }];\n this._press = this.motion(this, frames, fx.includes('squish') ? { duration: 520, easing: 'ease-out' } : springEasing('bouncy'));\n }\n },\n { id: 'click', text: css }\n );\n}\n","import { defineElement, clamp, type UsaElement } from '../base';\nimport { springEasing } from '../physics/spring';\nimport { shake, haptic } from './fx';\nimport css from './button.css?raw';\n\nexport const BUTTON_DEFORMS = ['squash', 'wobble', 'gooey', 'dent'] as const;\nexport type ButtonDeform = (typeof BUTTON_DEFORMS)[number];\nexport type ButtonShape = 'pill' | 'circle' | 'icon';\nexport type ButtonState = 'idle' | 'loading' | 'success' | 'error';\n\nlet gooInjected = false;\nfunction injectGoo(): void {\n if (gooInjected || typeof document === 'undefined') return;\n gooInjected = true;\n const svg = document.createElementNS('http://www.w3.org/2000/svg', 'svg');\n svg.setAttribute('aria-hidden', 'true');\n svg.setAttribute('width', '0');\n svg.setAttribute('height', '0');\n svg.style.position = 'absolute';\n svg.innerHTML = '<filter id=\"usa-goo\"><feGaussianBlur in=\"SourceGraphic\" stdDeviation=\"6\" result=\"b\"/><feColorMatrix in=\"b\" values=\"1 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 22 -9\" result=\"g\"/><feComposite in=\"SourceGraphic\" in2=\"g\" operator=\"atop\"/></filter>';\n document.body.appendChild(svg);\n}\n\n/**\n * `<usa-button>` — **button click deformation** (按钮点击形变) around a\n * native `<button>` (or `<a>`) child — or the element itself becomes a button.\n *\n * `deform` (combinable, e.g. `deform=\"squash wobble\"`):\n * - `squash` — squash on press, stretch-and-settle on release (spring);\n * - `wobble` — elastic border-radius wobble after a click;\n * - `gooey` — liquid blob: droplets squeeze out from the press point and\n * merge back (SVG goo filter);\n * - `dent` — the surface dents toward the pressed point (3D tilt + inner shade).\n *\n * `shape=\"pill | circle | icon\"` morphs the outline with a spring (label =\n * `[data-label]`, icon = `[data-icon]` children); `morphTo(shape)`.\n *\n * `morph=\"submit\"` — click → `loading` (shrinks to a circle with a spinner,\n * `aria-busy`), then `success` (check) or `error` (shake + cross), and back\n * to `idle` after `reset` ms (1800). Drive it with `state=\"…\"` / `.state`, or\n * call `event.detail.done(ok)` from a `usa:submit` listener.\n *\n * Attributes: `deform`, `shape`, `morph`, `state`, `reset`, `haptic`,\n * `disabled`. Events: `usa:submit`, `usa:state`. Reduced motion: no\n * deformation; shape and state changes are instant; status still announced.\n */\nexport interface UsaButtonElement extends UsaElement {\n readonly target: HTMLElement;\n shape: ButtonShape;\n state: ButtonState;\n morphTo(shape: ButtonShape): Promise<void>;\n}\n\nexport function defineButton(tag = 'usa-button'): CustomElementConstructor | undefined {\n return defineElement(\n tag,\n (Base) =>\n class UsaButton extends Base {\n static get observedAttributes(): string[] {\n return ['deform', 'state', 'shape', 'disabled'];\n }\n\n private _press: Animation | null = null;\n private _timer: ReturnType<typeof setTimeout> | undefined;\n private _status: HTMLElement | null = null;\n private _shapeBefore: ButtonShape | null = null;\n\n get target(): HTMLElement {\n return (this.querySelector(':scope > button, :scope > a, :scope > [role=\"button\"]') as HTMLElement) || this;\n }\n private deforms(): string[] {\n return this.str('deform').split(/[\\s,]+/).filter(Boolean);\n }\n get shape(): ButtonShape {\n return (this.str('shape', 'pill') as ButtonShape) || 'pill';\n }\n set shape(v: ButtonShape) {\n this.morphTo(v);\n }\n get state(): ButtonState {\n return (this.str('state', 'idle') as ButtonState) || 'idle';\n }\n set state(v: ButtonState) {\n this.setAttribute('state', v);\n }\n\n mount(): void {\n const t = this.target;\n if (t === this) {\n this.setAttribute('role', 'button');\n if (!this.hasAttribute('tabindex')) this.tabIndex = 0;\n }\n t.classList.add('usa-button-face');\n if (this.str('morph') === 'submit' && !t.querySelector('.usa-button-status')) {\n const s = document.createElement('span');\n s.className = 'usa-button-status';\n s.setAttribute('aria-hidden', 'true');\n s.innerHTML =\n '<svg class=\"usa-button-spin\" viewBox=\"0 0 24 24\"><circle cx=\"12\" cy=\"12\" r=\"9\" pathLength=\"100\"/></svg>' +\n '<svg class=\"usa-button-ok\" viewBox=\"0 0 24 24\"><path d=\"M5 12.5l4.2 4.2L19 7\" pathLength=\"1\"/></svg>' +\n '<svg class=\"usa-button-err\" viewBox=\"0 0 24 24\"><path d=\"M7 7l10 10M17 7L7 17\" pathLength=\"1\"/></svg>';\n t.append(s);\n const live = document.createElement('span');\n live.className = 'usa-sr';\n live.setAttribute('role', 'status');\n this.append(live);\n this._status = live;\n }\n if (this.deforms().includes('gooey')) injectGoo();\n this.applyState();\n this.listen(t, 'pointerdown', (e: PointerEvent) => {\n if (this.isOff() || (e.pointerType === 'mouse' && e.button !== 0)) return;\n this.down(e.clientX, e.clientY);\n });\n for (const ev of ['pointerup', 'pointerleave', 'pointercancel']) this.listen(t, ev, () => this.up());\n this.listen(t, 'keydown', (e: KeyboardEvent) => (e.key === 'Enter' || e.key === ' ') && !e.repeat && this.down());\n this.listen(t, 'keyup', () => this.up());\n this.listen(t, 'click', (e: MouseEvent) => {\n if (this.isOff()) {\n if (this.state === 'loading') e.preventDefault();\n return;\n }\n if (this.deforms().includes('wobble')) this.wobble();\n if (this.hasAttribute('haptic')) haptic(this.num('haptic', 10));\n if (this.str('morph') === 'submit' && this.state === 'idle') this.submit();\n });\n if (t === this)\n this.listen(this, 'keydown', (e: KeyboardEvent) => {\n if ((e.key === 'Enter' || e.key === ' ') && !e.repeat) {\n e.preventDefault();\n this.click();\n }\n });\n }\n\n unmount(): void {\n clearTimeout(this._timer);\n this._press?.cancel();\n }\n\n changed(name: string): void {\n if (name === 'state') this.applyState();\n else if (name === 'shape') this.target.setAttribute('data-shape', this.shape);\n else {\n super.changed(name);\n }\n }\n\n private isOff(): boolean {\n return this.flag('disabled') || this.state === 'loading';\n }\n\n /* ------------------------------------------------ press deformations */\n private down(x?: number, y?: number): void {\n if (this.reduced || this.hasAttribute('data-pressed')) return;\n const d = this.deforms();\n if (!d.length) return;\n this.setAttribute('data-pressed', '');\n const t = this.target;\n const r = t.getBoundingClientRect();\n const px = x === undefined ? 0.5 : clamp((x - r.left) / (r.width || 1), 0, 1);\n const py = y === undefined ? 0.5 : clamp((y - r.top) / (r.height || 1), 0, 1);\n t.style.setProperty('--usa-dent-x', `${(px * 100).toFixed(1)}%`);\n t.style.setProperty('--usa-dent-y', `${(py * 100).toFixed(1)}%`);\n const parts: string[] = [];\n if (d.includes('dent')) parts.push(`perspective(600px) rotateX(${((0.5 - py) * -14).toFixed(2)}deg) rotateY(${((px - 0.5) * 14).toFixed(2)}deg) scale(0.97)`);\n if (d.includes('squash')) parts.push('scale(1.12, 0.84)');\n if (d.includes('gooey')) {\n parts.push('scale(0.96)');\n this.goo(px, py);\n }\n if (!parts.length) return;\n this._press?.cancel();\n this._press = this.motion(t, [{ transform: 'none' }, { transform: parts.join(' ') }], { duration: 110, easing: 'ease-out', fill: 'forwards' });\n }\n\n private up(): void {\n if (!this.hasAttribute('data-pressed')) return;\n this.removeAttribute('data-pressed');\n const t = this.target;\n const a = this._press;\n const from = (a?.effect as KeyframeEffect | null)?.getKeyframes?.().slice(-1)[0]?.transform as string | undefined;\n a?.cancel();\n if (!from) return;\n this._press = this.motion(t, [{ transform: from }, { transform: 'none' }], { ...springEasing(this.deforms().includes('squash') ? 'bouncy' : 'wobbly') });\n }\n\n private wobble(): void {\n if (this.reduced) return;\n const t = this.target;\n const r = getComputedStyle(t).borderRadius || '12px';\n this.motion(\n t,\n [\n { borderRadius: r },\n { borderRadius: '42% 58% 50% 50% / 60% 45% 55% 40%', offset: 0.2 },\n { borderRadius: '58% 42% 45% 55% / 40% 60% 40% 60%', offset: 0.45 },\n { borderRadius: '48% 52% 52% 48% / 52% 48% 52% 48%', offset: 0.7 },\n { borderRadius: r },\n ],\n { duration: 700, easing: 'ease-out' }\n );\n }\n\n private goo(px: number, py: number): void {\n const t = this.target;\n const layer = document.createElement('span');\n layer.className = 'usa-button-goo';\n layer.setAttribute('aria-hidden', 'true');\n layer.style.setProperty('--usa-goo-bg', getComputedStyle(t).backgroundColor || 'currentColor');\n const drops: HTMLElement[] = [];\n for (let i = 0; i < 4; i++) {\n const d = document.createElement('i');\n d.style.left = `${(px * 100).toFixed(1)}%`;\n d.style.top = `${(py * 100).toFixed(1)}%`;\n layer.append(d);\n drops.push(d);\n }\n this.prepend(layer);\n let left = drops.length;\n drops.forEach((d, i) => {\n const ang = (i / drops.length) * Math.PI * 2 + 0.6;\n const dist = 26 + (i % 2) * 12;\n const a = this.motion(\n d,\n [\n { transform: 'translate(-50%, -50%) scale(0.4)' },\n { transform: `translate(calc(-50% + ${(Math.cos(ang) * dist).toFixed(1)}px), calc(-50% + ${(Math.sin(ang) * dist).toFixed(1)}px)) scale(1)`, offset: 0.45 },\n { transform: 'translate(-50%, -50%) scale(0.2)' },\n ],\n { duration: 700, easing: 'cubic-bezier(0.34, 1.3, 0.64, 1)', fill: 'forwards' }\n );\n const end = () => --left === 0 && layer.remove();\n if (a) a.onfinish = end;\n else end();\n });\n }\n\n /* ------------------------------------------------ shape morph */\n async morphTo(shape: ButtonShape): Promise<void> {\n const t = this.target;\n const before = t.getBoundingClientRect();\n this.setAttribute('shape', shape);\n t.setAttribute('data-shape', shape);\n if (this.reduced) return;\n const after = t.getBoundingClientRect();\n if (!before.width || !after.width || Math.abs(before.width - after.width) < 0.5) return;\n const a = this.motion(t, [{ width: `${before.width}px` }, { width: `${after.width}px` }], springEasing('stiff'));\n await a?.finished.catch(() => undefined);\n }\n\n /* ------------------------------------------------ submit morph */\n private submit(): void {\n let settled = false;\n const done = (ok = true) => {\n if (settled) return;\n settled = true;\n this.state = ok ? 'success' : 'error';\n };\n this.state = 'loading';\n this.emit('submit', { done });\n }\n\n private applyState(): void {\n if (this.str('morph') !== 'submit') return;\n const t = this.target;\n const s = this.state;\n clearTimeout(this._timer);\n t.setAttribute('data-state', s);\n if (s === 'loading') {\n if (this._shapeBefore === null) this._shapeBefore = this.shape;\n t.setAttribute('aria-busy', 'true');\n this.morphTo('circle');\n } else {\n t.removeAttribute('aria-busy');\n }\n if (s === 'error') {\n shake(t);\n if (this.hasAttribute('haptic')) haptic([30, 40, 30]);\n }\n if (s === 'success' && !this.reduced) {\n const ok = t.querySelector('.usa-button-ok');\n if (ok) this.motion(ok, [{ transform: 'scale(0.4)' }, { transform: 'scale(1)' }], springEasing('bouncy'));\n }\n if (this._status) this._status.textContent = s === 'loading' ? 'Loading…' : s === 'success' ? 'Done' : s === 'error' ? 'Failed' : '';\n if (s === 'success' || s === 'error') {\n this._timer = setTimeout(() => {\n this.state = 'idle';\n }, this.num('reset', 1800));\n }\n if (s === 'idle' && this._shapeBefore !== null) {\n const back = this._shapeBefore;\n this._shapeBefore = null;\n this.morphTo(back);\n }\n this.emit('state', { state: s });\n }\n },\n { id: 'button', text: css }\n );\n}\n","import { defineElement, type UsaElement } from '../base';\nimport { createSpring, type SpringValue } from '../physics/spring';\nimport css from './icon-morph.css?raw';\n\ntype Pt = [number, number];\ntype Quad = [Pt, Pt, Pt, Pt];\nconst C: Quad = [[12, 12], [12, 12], [12, 12], [12, 12]];\n\n/**\n * Morphable icons: every icon is three quads (four points each) on a 24×24\n * grid, so any icon can morph into any other by interpolating points.\n */\nexport const MORPH_ICONS: Record<string, [Quad, Quad, Quad]> = {\n play: [[[7, 5], [12.5, 8.25], [12.5, 15.75], [7, 19]], [[12.5, 8.25], [19, 12], [19, 12], [12.5, 15.75]], C],\n pause: [[[6, 5], [10, 5], [10, 19], [6, 19]], [[14, 5], [18, 5], [18, 19], [14, 19]], C],\n menu: [[[4, 6], [20, 6], [20, 8], [4, 8]], [[4, 11], [20, 11], [20, 13], [4, 13]], [[4, 16], [20, 16], [20, 18], [4, 18]]],\n close: [[[5.2, 6.6], [6.6, 5.2], [18.8, 17.4], [17.4, 18.8]], C, [[17.4, 5.2], [18.8, 6.6], [6.6, 18.8], [5.2, 17.4]]],\n plus: [[[11, 4], [13, 4], [13, 20], [11, 20]], [[4, 11], [20, 11], [20, 13], [4, 13]], C],\n minus: [[[4, 11], [20, 11], [20, 13], [4, 13]], [[4, 11], [20, 11], [20, 13], [4, 13]], C],\n check: [[[4.3, 12.7], [5.7, 11.3], [10.4, 16], [9, 17.4]], [[9, 17.4], [7.6, 16], [18.3, 5.3], [19.7, 6.7]], C],\n 'arrow-right': [[[4, 11], [17, 11], [17, 13], [4, 13]], [[12.6, 6.4], [14, 5], [21, 12], [19.6, 13.4]], [[19.6, 10.6], [21, 12], [14, 19], [12.6, 17.6]]],\n};\n\n/** SVG path data for an icon, or for the interpolation `t` (0–1) between two. */\nexport function morphPath(from: string, to: string = from, t = 0): string {\n const a = MORPH_ICONS[from] || MORPH_ICONS.menu;\n const b = MORPH_ICONS[to] || a;\n return a\n .map((q, i) => {\n const pts = q.map((p, j) => {\n const r = b[i][j];\n return `${(p[0] + (r[0] - p[0]) * t).toFixed(2)} ${(p[1] + (r[1] - p[1]) * t).toFixed(2)}`;\n });\n return `M${pts.join('L')}Z`;\n })\n .join('');\n}\n\n/**\n * `<usa-icon-morph>` — an icon that morphs between shapes with a spring:\n * play ↔ pause, menu ↔ close, plus ↔ minus, check, arrow-right…\n *\n * Attributes: `icons` (comma list, cycled; default `play,pause`), `index`\n * (current, 0), `size` (px, 24), `toggle` (makes it a button that cycles\n * on click / Enter / Space), `labels` (comma list of accessible names per\n * icon, e.g. `Play,Pause`), `preset` (spring, `wobbly`). Methods:\n * `next()`, `show(nameOrIndex)`. Events: `usa:change` (`{ index, icon }`).\n * Inside a `<usa-button>` or `<button>` it is decorative. Reduced motion:\n * the icon switches instantly.\n */\nexport interface UsaIconMorphElement extends UsaElement {\n index: number;\n readonly icon: string;\n next(): void;\n show(icon: string | number): void;\n}\n\nexport function defineIconMorph(tag = 'usa-icon-morph'): CustomElementConstructor | undefined {\n return defineElement(\n tag,\n (Base) =>\n class UsaIconMorph extends Base {\n static get observedAttributes(): string[] {\n return ['icons', 'size', 'toggle'];\n }\n\n private _i = 0;\n private _from = 'play';\n private _to = 'play';\n private _t!: SpringValue;\n\n private list(): string[] {\n return this.str('icons', 'play,pause').split(',').map((s) => s.trim()).filter((s) => MORPH_ICONS[s]);\n }\n get index(): number {\n return this._i;\n }\n set index(v: number) {\n this.show(v);\n }\n get icon(): string {\n return this.list()[this._i] || 'play';\n }\n\n private draw(t: number): void {\n this.querySelector('path')?.setAttribute('d', morphPath(this._from, this._to, t));\n }\n\n mount(): void {\n const size = this.num('size', 24);\n this.innerHTML = `<svg viewBox=\"0 0 24 24\" width=\"${size}\" height=\"${size}\" aria-hidden=\"true\" focusable=\"false\"><path/></svg>`;\n this._i = Math.max(0, Math.min(this.list().length - 1, this.num('index', 0)));\n this._from = this._to = this.icon;\n this._t = createSpring({ value: 1, spring: this.str('preset', 'wobbly'), onUpdate: (v) => this.draw(v) });\n this.draw(1);\n if (this.flag('toggle')) {\n this.setAttribute('role', 'button');\n if (!this.hasAttribute('tabindex')) this.tabIndex = 0;\n this.listen(this, 'click', () => this.next());\n this.listen(this, 'keydown', (e: KeyboardEvent) => {\n if ((e.key === 'Enter' || e.key === ' ') && !e.repeat) {\n e.preventDefault();\n this.next();\n }\n });\n }\n this.label();\n }\n\n unmount(): void {\n this._t?.stop();\n }\n\n private label(): void {\n const labels = this.str('labels').split(',').map((s) => s.trim());\n const l = labels[this._i];\n if (l) this.setAttribute('aria-label', l);\n if (!this.flag('toggle') && !l) this.setAttribute('aria-hidden', 'true');\n }\n\n show(icon: string | number): void {\n const list = this.list();\n const i = typeof icon === 'number' ? ((icon % list.length) + list.length) % list.length : list.indexOf(icon);\n if (i < 0 || !this._t) return;\n const name = list[i];\n // morph from wherever we are now (interruptible)\n const cur = this._t.value;\n this._from = cur >= 0.5 ? this._to : this._from;\n this._to = name;\n this._i = i;\n this._t.jump(0);\n this._t.set(1);\n this.label();\n this.emit('change', { index: i, icon: name });\n }\n\n next(): void {\n this.show(this._i + 1);\n }\n },\n { id: 'icon-morph', text: css }\n );\n}\n","import { defineElement, type UsaElement } from '../base';\nimport { springEasing } from '../physics/spring';\nimport { burst, haptic } from './fx';\nimport css from './like.css?raw';\n\nconst HEART = 'M12 21s-7.5-4.6-9.6-9.2C.9 8.4 3 4.5 6.7 4.5c2.1 0 3.6 1.2 5.3 3.2 1.7-2 3.2-3.2 5.3-3.2 3.7 0 5.8 3.9 4.3 7.3C19.5 16.4 12 21 12 21z';\n\n/**\n * `<usa-like>` — a like / favourite toggle: the heart pops with a spring and\n * bursts into particles when liked. `role=\"button\"` + `aria-pressed`.\n *\n * Attributes: `liked`, `count` (shown next to the heart, updated ±1),\n * `label` (accessible name, default \"Like\"), `color`, `size` (px, 24),\n * `haptic`, `disabled`. Events: `change`, `usa:change` (`{ liked, count }`).\n * Reduced motion: colour change only.\n */\nexport interface UsaLikeElement extends UsaElement {\n liked: boolean;\n count: number | null;\n toggle(force?: boolean): void;\n}\n\nexport function defineLike(tag = 'usa-like'): CustomElementConstructor | undefined {\n return defineElement(\n tag,\n (Base) =>\n class UsaLike extends Base {\n static get observedAttributes(): string[] {\n return ['liked', 'count', 'label', 'disabled'];\n }\n\n get liked(): boolean {\n return this.flag('liked');\n }\n set liked(v: boolean) {\n this.setFlag('liked', v);\n }\n get count(): number | null {\n return this.hasAttribute('count') ? this.num('count', 0) : null;\n }\n set count(v: number | null) {\n if (v === null) this.removeAttribute('count');\n else this.setAttribute('count', String(v));\n }\n\n mount(): void {\n if (!this.querySelector(':scope > .usa-like-heart')) {\n const size = this.num('size', 24);\n this.insertAdjacentHTML('afterbegin', `<svg class=\"usa-like-heart\" viewBox=\"0 0 24 24\" width=\"${size}\" height=\"${size}\" aria-hidden=\"true\"><path d=\"${HEART}\"/></svg><span class=\"usa-like-count\" aria-hidden=\"true\"></span>`);\n }\n if (this.str('color')) this.style.setProperty('--usa-like-color', this.str('color'));\n this.setAttribute('role', 'button');\n if (!this.hasAttribute('tabindex')) this.tabIndex = 0;\n this.sync();\n this.listen(this, 'click', () => this.toggle());\n this.listen(this, 'keydown', (e: KeyboardEvent) => {\n if ((e.key === 'Enter' || e.key === ' ') && !e.repeat) {\n e.preventDefault();\n this.toggle();\n }\n });\n }\n\n changed(): void {\n this.sync();\n }\n\n private sync(): void {\n const c = this.count;\n const label = this.str('label', 'Like');\n this.setAttribute('aria-pressed', String(this.liked));\n this.setAttribute('aria-label', c === null ? label : `${label} (${c})`);\n this.toggleAttribute('aria-disabled', this.flag('disabled'));\n const out = this.querySelector('.usa-like-count');\n if (out) out.textContent = c === null ? '' : new Intl.NumberFormat().format(c);\n }\n\n toggle(force?: boolean): void {\n if (this.flag('disabled')) return;\n const next = force === undefined ? !this.liked : force;\n if (next === this.liked) return;\n this.liked = next;\n if (this.count !== null) this.count = Math.max(0, this.count + (next ? 1 : -1));\n this.sync();\n const heart = this.querySelector('.usa-like-heart');\n if (next && heart && !this.reduced) {\n this.motion(heart, [{ transform: 'scale(0.4)' }, { transform: 'scale(1)' }], springEasing('bouncy'));\n const r = heart.getBoundingClientRect();\n burst(r.left + r.width / 2, r.top + r.height / 2, { count: 10, distance: 28, size: 5, colors: [getComputedStyle(this).getPropertyValue('--usa-like-color').trim() || '#f43f5e', '#fb923c', '#facc15'] });\n }\n if (this.hasAttribute('haptic')) haptic(this.num('haptic', 12));\n this.dispatchEvent(new Event('change', { bubbles: true }));\n this.emit('change', { liked: next, count: this.count });\n }\n },\n { id: 'like', text: css }\n );\n}\n","import { defineElement, raf, caf, now, type UsaElement } from '../base';\nimport { haptic } from './fx';\nimport css from './hold.css?raw';\n\n/**\n * `<usa-hold>` — hold-to-confirm: press and hold (pointer, Space or Enter)\n * while a progress ring fills; releasing early rewinds it. Good for\n * destructive actions.\n *\n * Attributes: `duration` (ms, 1200), `label` (accessible name), `color`,\n * `disabled`. CSS variable `--usa-hold` (0–1). Events: `usa:progress`,\n * `usa:confirm`, `usa:cancel`. Reduced motion: same timing, the ring fills\n * without the scale pulse.\n */\nexport interface UsaHoldElement extends UsaElement {\n readonly progress: number;\n cancel(): void;\n}\n\nexport function defineHold(tag = 'usa-hold'): CustomElementConstructor | undefined {\n return defineElement(\n tag,\n (Base) =>\n class UsaHold extends Base {\n static get observedAttributes(): string[] {\n return ['duration', 'disabled'];\n }\n\n private _p = 0;\n private _frame = 0;\n private _holding = false;\n\n get progress(): number {\n return this._p;\n }\n\n private set(p: number): void {\n this._p = p;\n this.style.setProperty('--usa-hold', p.toFixed(4));\n const c = this.querySelector<SVGCircleElement>('.usa-hold-ring circle:last-child');\n if (c) c.style.strokeDashoffset = String(100 - p * 100);\n }\n\n mount(): void {\n if (!this.querySelector(':scope > .usa-hold-ring')) {\n this.insertAdjacentHTML('beforeend', '<svg class=\"usa-hold-ring\" viewBox=\"0 0 36 36\" aria-hidden=\"true\"><circle cx=\"18\" cy=\"18\" r=\"15.9\" pathLength=\"100\"/><circle cx=\"18\" cy=\"18\" r=\"15.9\" pathLength=\"100\"/></svg>');\n }\n if (this.str('color')) this.style.setProperty('--usa-hold-color', this.str('color'));\n this.setAttribute('role', 'button');\n if (!this.hasAttribute('tabindex')) this.tabIndex = 0;\n if (this.str('label')) this.setAttribute('aria-label', this.str('label'));\n this.setAttribute('aria-description', 'Press and hold to confirm');\n this.set(0);\n this.listen(this, 'pointerdown', (e: PointerEvent) => (e.pointerType !== 'mouse' || e.button === 0) && this.start());\n for (const t of ['pointerup', 'pointerleave', 'pointercancel']) this.listen(this, t, () => this.stop());\n this.listen(this, 'keydown', (e: KeyboardEvent) => {\n if (e.key === 'Enter' || e.key === ' ') {\n e.preventDefault();\n if (!e.repeat) this.start();\n }\n });\n this.listen(this, 'keyup', (e: KeyboardEvent) => (e.key === 'Enter' || e.key === ' ') && this.stop());\n this.listen(this, 'contextmenu', (e: Event) => this._holding && e.preventDefault());\n }\n\n unmount(): void {\n caf(this._frame);\n this._holding = false;\n }\n\n private start(): void {\n if (this.flag('disabled') || this._holding) return;\n this._holding = true;\n this.setAttribute('data-holding', '');\n const dur = Math.max(100, this.num('duration', 1200));\n let last = now();\n const tick = () => {\n const t = now();\n const p = Math.min(1, this._p + (t - last) / dur);\n last = t;\n this.set(p);\n this.emit('progress', { progress: p });\n if (p >= 1) {\n this._holding = false;\n this.removeAttribute('data-holding');\n this.setAttribute('data-done', '');\n if (this.hasAttribute('haptic')) haptic(20);\n this.emit('confirm');\n setTimeout(() => {\n this.removeAttribute('data-done');\n this.rewind();\n }, 700);\n return;\n }\n this._frame = raf(tick);\n };\n this._frame = raf(tick);\n }\n\n private stop(): void {\n if (!this._holding) return;\n this._holding = false;\n caf(this._frame);\n this.removeAttribute('data-holding');\n if (this._p < 1) {\n this.emit('cancel', { progress: this._p });\n this.rewind();\n }\n }\n\n private rewind(): void {\n let last = now();\n const back = () => {\n if (this._holding) return;\n const t = now();\n const p = Math.max(0, this._p - (t - last) / 250);\n last = t;\n this.set(p);\n if (p > 0) this._frame = raf(back);\n };\n this._frame = raf(back);\n }\n\n cancel(): void {\n this.stop();\n }\n },\n { id: 'hold', text: css }\n );\n}\n","import { defineElement, type UsaElement } from '../base';\nimport { burst, haptic } from './fx';\nimport css from './double-tap.css?raw';\n\n/**\n * `<usa-double-tap>` — detects a double tap / double click on its content\n * (photos, posts) and pops a heart (or `icon`) at the tap point.\n *\n * Attributes: `icon` (text / emoji, default ♥), `color`, `delay` (max ms\n * between taps, 300), `haptic`, `disabled`. Events: `usa:double-tap`\n * (`{ x, y }`, element-relative). Keyboard users: press `L` while focused.\n * Reduced motion: the icon fades in and out without scaling or particles.\n */\nexport interface UsaDoubleTapElement extends UsaElement {\n pop(x?: number, y?: number): void;\n}\n\nexport function defineDoubleTap(tag = 'usa-double-tap'): CustomElementConstructor | undefined {\n return defineElement(\n tag,\n (Base) =>\n class UsaDoubleTap extends Base {\n mount(): void {\n let last = 0;\n let lx = 0;\n let ly = 0;\n this.listen(this, 'pointerup', (e: PointerEvent) => {\n if (this.flag('disabled')) return;\n const t = e.timeStamp || Date.now();\n if (t - last < this.num('delay', 300) && Math.hypot(e.clientX - lx, e.clientY - ly) < 40) {\n last = 0;\n this.pop(e.clientX, e.clientY);\n } else {\n last = t;\n lx = e.clientX;\n ly = e.clientY;\n }\n });\n this.listen(this, 'dblclick', (e: MouseEvent) => e.preventDefault());\n this.listen(this, 'keydown', (e: KeyboardEvent) => e.key.toLowerCase() === 'l' && !e.repeat && this.pop());\n }\n\n pop(x?: number, y?: number): void {\n const r = this.getBoundingClientRect();\n if (x === undefined || y === undefined) {\n x = r.left + r.width / 2;\n y = r.top + r.height / 2;\n }\n const icon = document.createElement('span');\n icon.className = 'usa-double-tap-icon';\n icon.setAttribute('aria-hidden', 'true');\n icon.textContent = this.str('icon', '♥');\n icon.style.left = `${x - r.left}px`;\n icon.style.top = `${y - r.top}px`;\n if (this.str('color')) icon.style.color = this.str('color');\n this.append(icon);\n const frames: Keyframe[] = this.reduced\n ? [{ opacity: 0 }, { opacity: 1, offset: 0.3 }, { opacity: 0 }]\n : [\n { opacity: 0, transform: 'translate(-50%, -50%) scale(0.2) rotate(-15deg)' },\n { opacity: 1, transform: 'translate(-50%, -50%) scale(1.15) rotate(5deg)', offset: 0.3 },\n { opacity: 1, transform: 'translate(-50%, -50%) scale(1) rotate(0deg)', offset: 0.6 },\n { opacity: 0, transform: 'translate(-50%, -110%) scale(0.9)' },\n ];\n const a = this.motion(icon, frames, { duration: 900, easing: 'ease-out', fill: 'forwards' });\n if (a) a.onfinish = () => icon.remove();\n else icon.remove();\n burst(x, y, { count: 8, distance: 40, size: 5, colors: [this.str('color', '#f43f5e'), '#fb923c', '#facc15'] });\n if (this.hasAttribute('haptic')) haptic(15);\n this.emit('double-tap', { x: x - r.left, y: y - r.top });\n }\n },\n { id: 'double-tap', text: css }\n );\n}\n","import { defineElement, type UsaElement } from '../base';\nimport { springEasing } from '../physics/spring';\nimport css from './checkbox.css?raw';\n\n/**\n * `<usa-checkbox>` — an animated, form-associated checkbox: the box springs\n * and the check mark draws itself. `role=\"checkbox\"` + `aria-checked`\n * (`mixed` with `indeterminate`).\n *\n * Attributes: `checked`, `indeterminate`, `disabled`, `name`, `value`\n * (`on`), `label`, `shape` (`square` default, `circle`). Events: `change`,\n * `usa:change` (`{ checked }`). Reduced motion: no spring or drawing.\n */\nexport interface UsaCheckboxElement extends UsaElement {\n checked: boolean;\n indeterminate: boolean;\n toggle(force?: boolean): void;\n}\n\nexport function defineCheckbox(tag = 'usa-checkbox'): CustomElementConstructor | undefined {\n return defineElement(\n tag,\n (Base) => {\n class UsaCheckbox extends Base {\n static formAssociated = true;\n static get observedAttributes(): string[] {\n return ['checked', 'indeterminate', 'disabled', 'label'];\n }\n\n private _internals: ElementInternals | null = null;\n\n constructor() {\n super();\n try {\n this._internals = (this as any).attachInternals?.() ?? null;\n } catch {\n this._internals = null;\n }\n }\n\n get checked(): boolean {\n return this.flag('checked');\n }\n set checked(v: boolean) {\n this.setFlag('checked', v);\n }\n get indeterminate(): boolean {\n return this.flag('indeterminate');\n }\n set indeterminate(v: boolean) {\n this.setFlag('indeterminate', v);\n }\n\n mount(): void {\n if (!this.querySelector(':scope > .usa-checkbox-box')) {\n this.insertAdjacentHTML(\n 'afterbegin',\n '<span class=\"usa-checkbox-box\" aria-hidden=\"true\"><svg viewBox=\"0 0 24 24\"><path class=\"usa-checkbox-check\" d=\"M5 12.5l4.2 4.2L19 7\" pathLength=\"1\"/><path class=\"usa-checkbox-dash\" d=\"M6 12h12\" pathLength=\"1\"/></svg></span>'\n );\n }\n this.setAttribute('role', 'checkbox');\n if (!this.hasAttribute('tabindex')) this.tabIndex = 0;\n this.sync();\n this.listen(this, 'click', () => this.toggle());\n this.listen(this, 'keydown', (e: KeyboardEvent) => {\n if (e.key === ' ' && !e.repeat) {\n e.preventDefault();\n this.toggle();\n }\n });\n }\n\n changed(): void {\n this.sync();\n }\n\n private sync(): void {\n this.setAttribute('aria-checked', this.indeterminate ? 'mixed' : String(this.checked));\n if (this.str('label')) this.setAttribute('aria-label', this.str('label'));\n this.toggleAttribute('aria-disabled', this.flag('disabled'));\n this._internals?.setFormValue?.(this.checked ? this.str('value', 'on') : null);\n }\n\n toggle(force?: boolean): void {\n if (this.flag('disabled')) return;\n const next = force === undefined ? !this.checked || this.indeterminate : force;\n this.indeterminate = false;\n this.checked = next;\n this.sync();\n const box = this.querySelector('.usa-checkbox-box');\n if (box && !this.reduced) this.motion(box, [{ transform: 'scale(0.75)' }, { transform: 'scale(1)' }], springEasing('bouncy'));\n this.dispatchEvent(new Event('change', { bubbles: true }));\n this.emit('change', { checked: next });\n }\n }\n return UsaCheckbox as unknown as CustomElementConstructor;\n },\n { id: 'checkbox', text: css }\n );\n}\n","/**\n * use-scroll-animate/components/click — click & tap effects (v2.5).\n * `<usa-click>` (ripple, burst, confetti, squish, press-spring, shake),\n * `<usa-button>` (button click deformation: squash, wobble, gooey, dent;\n * shape morph; submit → loading → success), `<usa-icon-morph>`,\n * `<usa-like>`, `<usa-hold>`, `<usa-double-tap>`, `<usa-checkbox>`, plus\n * `burst()`, `confetti()`, `shake()` and `haptic()`.\n */\nimport { defineClick, type UsaClickElement } from './click';\nimport { defineButton, type UsaButtonElement } from './button';\nimport { defineIconMorph, type UsaIconMorphElement } from './icon-morph';\nimport { defineLike, type UsaLikeElement } from './like';\nimport { defineHold, type UsaHoldElement } from './hold';\nimport { defineDoubleTap, type UsaDoubleTapElement } from './double-tap';\nimport { defineCheckbox, type UsaCheckboxElement } from './checkbox';\n\nexport { defineClick, defineButton, defineIconMorph, defineLike, defineHold, defineDoubleTap, defineCheckbox };\nexport { CLICK_EFFECTS } from './click';\nexport type { ClickEffect } from './click';\nexport { BUTTON_DEFORMS } from './button';\nexport type { ButtonDeform, ButtonShape, ButtonState } from './button';\nexport { MORPH_ICONS, morphPath } from './icon-morph';\nexport { burst, confetti, shake, haptic } from './fx';\nexport type { BurstOptions, ConfettiOptions } from './fx';\nexport type { UsaClickElement, UsaButtonElement, UsaIconMorphElement, UsaLikeElement, UsaHoldElement, UsaDoubleTapElement, UsaCheckboxElement };\nexport { configureComponents, prefersReducedMotion } from '../base';\nexport type { ComponentsConfig, UsaElement } from '../base';\n\n/** Register every component of this category under its default tag. */\nexport function defineClickComponents(): void {\n defineClick();\n defineButton();\n defineIconMorph();\n defineLike();\n defineHold();\n defineDoubleTap();\n defineCheckbox();\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'usa-click': UsaClickElement;\n 'usa-button': UsaButtonElement;\n 'usa-icon-morph': UsaIconMorphElement;\n 'usa-like': UsaLikeElement;\n 'usa-hold': UsaHoldElement;\n 'usa-double-tap': UsaDoubleTapElement;\n 'usa-checkbox': UsaCheckboxElement;\n }\n}\n","export type Placement = 'top' | 'bottom' | 'left' | 'right';\n\n/** Position a fixed `floating` element next to `anchor`, flipping when it would leave the viewport. */\nexport function place(floating: HTMLElement, anchor: Element, placement: Placement = 'top', gap = 8): Placement {\n const a = anchor.getBoundingClientRect();\n const f = floating.getBoundingClientRect();\n const W = window.innerWidth || 1024;\n const H = window.innerHeight || 768;\n const fits: Record<Placement, boolean> = {\n top: a.top - f.height - gap >= 0,\n bottom: a.bottom + f.height + gap <= H,\n left: a.left - f.width - gap >= 0,\n right: a.right + f.width + gap <= W,\n };\n const opposite: Record<Placement, Placement> = { top: 'bottom', bottom: 'top', left: 'right', right: 'left' };\n const p = fits[placement] || !fits[opposite[placement]] ? placement : opposite[placement];\n let x = 0;\n let y = 0;\n if (p === 'top' || p === 'bottom') {\n x = Math.min(Math.max(4, a.left + a.width / 2 - f.width / 2), W - f.width - 4);\n y = p === 'top' ? a.top - f.height - gap : a.bottom + gap;\n } else {\n y = Math.min(Math.max(4, a.top + a.height / 2 - f.height / 2), H - f.height - 4);\n x = p === 'left' ? a.left - f.width - gap : a.right + gap;\n }\n floating.style.left = `${Math.round(x)}px`;\n floating.style.top = `${Math.round(y)}px`;\n floating.setAttribute('data-placement', p);\n return p;\n}\n\nlet uid = 0;\nexport const nextId = (prefix: string): string => `${prefix}-${++uid}`;\n","import { defineElement, type UsaElement } from '../base';\nimport { springEasing } from '../physics/spring';\nimport { adoptVariants } from './variants';\nimport { nextId } from './position';\nimport css from './tabs.css?raw';\n\n/**\n * `<usa-tabs>` — accessible tabs with a sliding (spring) indicator.\n * Tabs: `[data-tab]` children (buttons); panels: `[data-panel]` children, in\n * the same order. Arrow keys / Home / End move between tabs (roving tabindex).\n *\n * Attributes: `selected` (index, 0), `indicator` (`line` default, `pill`),\n * `variant`. Events: `usa:change` (`{ index }`). Panels fade/slide in;\n * reduced motion: the indicator jumps and panels switch instantly.\n */\nexport interface UsaTabsElement extends UsaElement {\n selected: number;\n select(i: number, focus?: boolean): void;\n}\n\nexport function defineTabs(tag = 'usa-tabs'): CustomElementConstructor | undefined {\n adoptVariants();\n return defineElement(\n tag,\n (Base) =>\n class UsaTabs extends Base {\n static get observedAttributes(): string[] {\n return ['indicator'];\n }\n\n private _i = 0;\n private _bar: HTMLElement | null = null;\n\n get selected(): number {\n return this._i;\n }\n set selected(v: number) {\n this.select(v);\n }\n\n private tabs(): HTMLElement[] {\n return Array.from(this.querySelectorAll<HTMLElement>('[data-tab]')).filter((t) => t.closest(this.localName) === this);\n }\n private panels(): HTMLElement[] {\n return Array.from(this.querySelectorAll<HTMLElement>('[data-panel]')).filter((t) => t.closest(this.localName) === this);\n }\n\n mount(): void {\n const tabs = this.tabs();\n const panels = this.panels();\n const list = tabs[0]?.parentElement;\n if (!list) return;\n list.setAttribute('role', 'tablist');\n list.classList.add('usa-tabs-list');\n if (!list.querySelector(':scope > .usa-tabs-indicator')) {\n this._bar = document.createElement('span');\n this._bar.className = 'usa-tabs-indicator';\n this._bar.setAttribute('aria-hidden', 'true');\n list.append(this._bar);\n } else this._bar = list.querySelector(':scope > .usa-tabs-indicator');\n tabs.forEach((t, i) => {\n t.id ||= nextId('usa-tab');\n t.setAttribute('role', 'tab');\n const p = panels[i];\n if (p) {\n p.id ||= nextId('usa-panel');\n p.setAttribute('role', 'tabpanel');\n p.setAttribute('aria-labelledby', t.id);\n t.setAttribute('aria-controls', p.id);\n if (!p.hasAttribute('tabindex')) p.tabIndex = 0;\n }\n this.listen(t, 'click', () => this.select(i));\n });\n this.listen(list, 'keydown', (e: KeyboardEvent) => {\n const n = tabs.length;\n const map: Record<string, number> = { ArrowRight: this._i + 1, ArrowDown: this._i + 1, ArrowLeft: this._i - 1, ArrowUp: this._i - 1, Home: 0, End: n - 1 };\n if (!(e.key in map)) return;\n e.preventDefault();\n this.select((map[e.key] + n) % n, true);\n });\n const ro = typeof ResizeObserver !== 'undefined' ? new ResizeObserver(() => this.moveBar(false)) : null;\n ro?.observe(list);\n this.onCleanup(() => ro?.disconnect());\n this.select(Math.max(0, Math.min(tabs.length - 1, this.num('selected', 0))), false, true);\n }\n\n private moveBar(animate: boolean): void {\n const t = this.tabs()[this._i];\n const bar = this._bar;\n if (!t || !bar) return;\n const from = bar.style.transform;\n const fromW = bar.style.width;\n bar.style.width = `${t.offsetWidth}px`;\n bar.style.transform = `translateX(${t.offsetLeft}px)`;\n if (animate && from && !this.reduced) this.motion(bar, [{ transform: from, width: fromW }, { transform: bar.style.transform, width: bar.style.width }], springEasing('stiff'));\n }\n\n select(i: number, focus = false, initial = false): void {\n const tabs = this.tabs();\n const panels = this.panels();\n if (!tabs[i]) return;\n const prev = this._i;\n this._i = i;\n this.setAttribute('selected', String(i));\n tabs.forEach((t, j) => {\n t.setAttribute('aria-selected', String(j === i));\n t.tabIndex = j === i ? 0 : -1;\n });\n panels.forEach((p, j) => (p.hidden = j !== i));\n if (focus) tabs[i].focus();\n this.moveBar(!initial);\n if (initial || prev === i) return;\n const p = panels[i];\n if (p && !this.reduced) this.motion(p, [{ opacity: 0, transform: `translateX(${i > prev ? 16 : -16}px)` }, { opacity: 1, transform: 'none' }], { duration: 280, easing: 'cubic-bezier(0.22, 1, 0.36, 1)' });\n this.emit('change', { index: i });\n }\n },\n { id: 'tabs', text: css }\n );\n}\n","import { defineElement, clamp, type UsaElement } from '../base';\nimport { createSpring, projectInertia, snapTo, rubberBand, type SpringValue } from '../physics/spring';\nimport { adoptVariants } from './variants';\nimport css from './sheet.css?raw';\n\n/** Shared machinery of `<usa-drawer>` and `<usa-bottom-sheet>`: backdrop, focus, Esc, drag-to-dismiss. */\nfunction makePanel(Base: any, kind: 'drawer' | 'sheet') {\n return class UsaPanel extends Base {\n static get observedAttributes(): string[] {\n return ['open', 'side'];\n }\n\n _pos!: SpringValue;\n _backdrop: HTMLElement | null = null;\n _return: Element | null = null;\n _drag: { id: number; start: number; origin: number; t: number; last: number; lt: number } | null = null;\n\n get open(): boolean {\n return this.flag('open');\n }\n set open(v: boolean) {\n this.setFlag('open', v);\n }\n\n /** Main axis size of the panel (px). */\n size(): number {\n const r = this.getBoundingClientRect();\n return (kind === 'sheet' || this.vertical() ? r.height : r.width) || (kind === 'sheet' ? window.innerHeight * 0.9 : 320);\n }\n vertical(): boolean {\n return kind === 'sheet' || this.str('side') === 'top' || this.str('side') === 'bottom';\n }\n /** +1 when hiding moves the panel in the positive axis direction. */\n dir(): number {\n const side = kind === 'sheet' ? 'bottom' : this.str('side', 'left');\n return side === 'left' || side === 'top' ? -1 : 1;\n }\n /** Offsets (px from fully open) the panel may rest at; the largest closes it. */\n stops(): number[] {\n return [0];\n }\n render(v: number): void {\n const axis = this.vertical() ? 'Y' : 'X';\n this.style.transform = `translate${axis}(${(v * this.dir()).toFixed(1)}px)`;\n if (this._backdrop) this._backdrop.style.opacity = String(clamp(1 - v / (this.size() || 1), 0, 1));\n }\n\n mount(): void {\n this.setAttribute('role', 'dialog');\n if (this.str('label')) this.setAttribute('aria-label', this.str('label'));\n if (!this.hasAttribute('tabindex')) this.tabIndex = -1;\n this.classList.add('usa-surface');\n this._pos = createSpring({ value: this.size() * 2, spring: 'stiff', onUpdate: (v) => this.render(v), onRest: (v) => v >= this.size() - 1 && !this.open && this.afterClose() });\n if (this.open) this.show(false);\n else {\n this.hidden = true;\n this._pos.jump(this.size() * 1.2);\n }\n this.listen(document, 'keydown', (e: KeyboardEvent) => e.key === 'Escape' && this.open && this.close());\n this.listen(this, 'click', (e: MouseEvent) => (e.target as Element).closest?.('[data-close]') && this.close());\n this.listen(this, 'pointerdown', (e: PointerEvent) => this.dragStart(e));\n this.listen(this, 'pointermove', (e: PointerEvent) => this.dragMove(e));\n this.listen(this, 'pointerup', (e: PointerEvent) => this.dragEnd(e));\n this.listen(this, 'pointercancel', (e: PointerEvent) => this.dragEnd(e));\n }\n\n unmount(): void {\n this._pos?.stop();\n this._backdrop?.remove();\n this._backdrop = null;\n }\n\n changed(name: string): void {\n if (name !== 'open') return super.changed(name);\n if (this.open && this.hidden) this.show(true);\n else if (!this.open && !this.hidden) this.hide();\n }\n\n show(animate = true): void {\n this._return = document.activeElement;\n this.hidden = false;\n this.setAttribute('aria-modal', 'true');\n if (!this._backdrop) {\n this._backdrop = document.createElement('div');\n this._backdrop.className = 'usa-panel-backdrop';\n this._backdrop.addEventListener('click', () => this.close());\n this.before(this._backdrop);\n }\n const target = this.stops()[this.initialStop()];\n if (!animate) this._pos.jump(target);\n else {\n this._pos.jump(this.size());\n this._pos.set(target);\n }\n this.setFlag('open', true);\n this.focus({ preventScroll: true });\n this.emit('open');\n }\n\n initialStop(): number {\n return 0;\n }\n\n hide(): void {\n this._pos.set(this.size() * 1.05);\n this.emit('close');\n }\n\n afterClose(): void {\n this.hidden = true;\n this._backdrop?.remove();\n this._backdrop = null;\n if (this._return instanceof HTMLElement) this._return.focus({ preventScroll: true });\n }\n\n close(): void {\n this.setFlag('open', false);\n }\n\n dragStart(e: PointerEvent): void {\n const handle = kind === 'sheet' ? (e.target as Element).closest?.('[data-handle], .usa-sheet-handle') || (this.scrollTop <= 0 ? this : null) : this;\n if (!handle || (e.target as Element).closest?.('input, textarea, select, button, a, [data-no-drag]')) return;\n const p = this.vertical() ? e.clientY : e.clientX;\n this._pos.stop();\n this._drag = { id: e.pointerId, start: p, origin: this._pos.value, t: e.timeStamp, last: p, lt: e.timeStamp };\n }\n dragMove(e: PointerEvent): void {\n const d = this._drag;\n if (!d || e.pointerId !== d.id) return;\n const p = this.vertical() ? e.clientY : e.clientX;\n let v = d.origin + (p - d.start) * this.dir();\n if (v < 0) v = rubberBand(v, 200);\n d.lt = d.t;\n d.t = e.timeStamp;\n d.last = p;\n this._pos.jump(v);\n }\n dragEnd(e: PointerEvent): void {\n const d = this._drag;\n if (!d || e.pointerId !== d.id) return;\n this._drag = null;\n const moved = this._pos.value - d.origin;\n const dt = Math.max(16, d.t - d.lt) / 1000;\n const vel = Math.abs(moved) > 4 ? (moved / Math.max(dt, (e.timeStamp - (d.lt || 0)) / 1000 || 0.1)) * 0.2 : 0;\n const projected = projectInertia(this._pos.value, clamp(vel, -3000, 3000));\n const stops = [...this.stops(), this.size()];\n const to = snapTo(projected, stops);\n if (to >= this.size() - 1) this.close();\n else this._pos.set(to);\n this.emit('snap', { offset: to });\n }\n };\n}\n\n/**\n * `<usa-drawer>` — a side panel that slides in with a spring and can be\n * dragged / swiped closed. Modal: backdrop, Esc, focus returns on close.\n * Attributes: `open`, `side` (`left` default, `right`, `top`, `bottom`),\n * `label`, `variant`. Events: `usa:open`, `usa:close`. `[data-close]` closes.\n * Reduced motion: opens and closes instantly.\n */\nexport interface UsaDrawerElement extends UsaElement {\n open: boolean;\n show(): void;\n close(): void;\n}\n\n/**\n * `<usa-bottom-sheet>` — a draggable bottom sheet with snap points\n * (`snap=\"0.3,0.6,0.92\"`, fractions of the viewport height; default\n * `0.5,0.92`; `start` = index of the snap it opens at, default 0), inertia and drag-down-to-dismiss. `[data-handle]` (or the\n * built-in grabber) drags it. Attributes: `open`, `snap`, `start` (initial\n * snap index), `label`, `variant`. Events: `usa:open`, `usa:close`, `usa:snap`.\n */\nexport interface UsaBottomSheetElement extends UsaDrawerElement {}\n\nexport function defineDrawer(tag = 'usa-drawer'): CustomElementConstructor | undefined {\n adoptVariants();\n return defineElement(tag, (Base) => makePanel(Base, 'drawer') as unknown as CustomElementConstructor, { id: 'sheet', text: css });\n}\n\nexport function defineBottomSheet(tag = 'usa-bottom-sheet'): CustomElementConstructor | undefined {\n adoptVariants();\n return defineElement(\n tag,\n (Base) => {\n const Panel = makePanel(Base, 'sheet');\n return class UsaBottomSheet extends Panel {\n static get observedAttributes(): string[] {\n return ['open', 'snap'];\n }\n mount(): void {\n if (!this.querySelector(':scope > .usa-sheet-handle')) {\n const h = document.createElement('div');\n h.className = 'usa-sheet-handle';\n h.setAttribute('aria-hidden', 'true');\n this.prepend(h);\n }\n super.mount();\n }\n size(): number {\n return (window.innerHeight || 800) * Math.max(...this.fractions());\n }\n fractions(): number[] {\n const f = this.str('snap', '0.5,0.92').split(',').map(Number).filter((n: number) => n > 0 && n <= 1);\n return f.length ? f : [0.5, 0.92];\n }\n stops(): number[] {\n const full = this.size();\n const H = window.innerHeight || 800;\n return this.fractions().map((f: number) => Math.max(0, full - f * H)).sort((a: number, b: number) => a - b);\n }\n initialStop(): number {\n const f = this.fractions();\n const pick = f[clamp(this.num('start', 0), 0, f.length - 1)];\n const target = Math.max(0, this.size() - pick * (window.innerHeight || 800));\n const s = this.stops();\n return Math.max(0, s.indexOf(target));\n }\n render(v: number): void {\n this.style.height = `${this.size()}px`;\n super.render(v);\n }\n } as unknown as CustomElementConstructor;\n },\n { id: 'sheet', text: css }\n );\n}\n","import { defineElement, type UsaElement } from '../base';\nimport { createSpring, rubberBand, type SpringValue } from '../physics/spring';\nimport { adoptVariants } from './variants';\nimport css from './pull-refresh.css?raw';\n\n/**\n * `<usa-pull-refresh>` — pull-to-refresh for a scroll container (itself):\n * pull down at the top (touch / pointer) and a spinner stretches in; past\n * `threshold` (px, 70) releasing fires `usa:refresh` — call\n * `event.detail.done()` (or return a promise to `onrefresh`) to finish.\n * Also exposes `refresh()` for a keyboard / button path.\n * Attributes: `threshold`, `disabled`, `label` (status text, \"Refreshing\").\n * Reduced motion: no stretch; the spinner simply appears while refreshing.\n */\nexport interface UsaPullRefreshElement extends UsaElement {\n readonly refreshing: boolean;\n refresh(): Promise<void>;\n}\n\nexport function definePullRefresh(tag = 'usa-pull-refresh'): CustomElementConstructor | undefined {\n adoptVariants();\n return defineElement(\n tag,\n (Base) =>\n class UsaPullRefresh extends Base {\n private _y!: SpringValue;\n private _busy = false;\n private _ind: HTMLElement | null = null;\n private _live: HTMLElement | null = null;\n\n get refreshing(): boolean {\n return this._busy;\n }\n\n private draw(v: number): void {\n const th = this.num('threshold', 70);\n this.style.setProperty('--usa-pull', `${v.toFixed(1)}px`);\n this.style.setProperty('--usa-pull-p', Math.min(1, v / th).toFixed(3));\n this.toggleAttribute('data-armed', v >= th && !this._busy);\n }\n\n mount(): void {\n if (!this.querySelector(':scope > .usa-pull-indicator')) {\n this._ind = document.createElement('div');\n this._ind.className = 'usa-pull-indicator';\n this._ind.setAttribute('aria-hidden', 'true');\n this._ind.innerHTML = '<svg viewBox=\"0 0 24 24\"><circle cx=\"12\" cy=\"12\" r=\"9\" pathLength=\"100\"/></svg>';\n this.prepend(this._ind);\n this._live = document.createElement('span');\n this._live.className = 'usa-sr';\n this._live.setAttribute('role', 'status');\n this.append(this._live);\n }\n this._y = createSpring({ spring: 'stiff', onUpdate: (v) => this.draw(v) });\n let start: number | null = null;\n let id = -1;\n this.listen(this, 'pointerdown', (e: PointerEvent) => {\n if (this.flag('disabled') || this._busy || this.scrollTop > 0) return;\n start = e.clientY;\n id = e.pointerId;\n });\n this.listen(this, 'pointermove', (e: PointerEvent) => {\n if (start === null || e.pointerId !== id) return;\n const d = e.clientY - start;\n if (d <= 0) return;\n this._y.jump(this.reduced ? 0 : rubberBand(d, 220));\n if (this.reduced && d > this.num('threshold', 70)) this.setAttribute('data-armed', '');\n });\n const end = (e: PointerEvent) => {\n if (start === null || e.pointerId !== id) return;\n const d = e.clientY - start;\n start = null;\n const armed = this.hasAttribute('data-armed') || (!this.reduced && this._y.value >= this.num('threshold', 70)) || (this.reduced && d > this.num('threshold', 70));\n if (armed) this.refresh();\n else this._y.set(0);\n };\n this.listen(this, 'pointerup', end);\n this.listen(this, 'pointercancel', end);\n }\n\n unmount(): void {\n this._y?.stop();\n }\n\n refresh(): Promise<void> {\n if (this._busy) return Promise.resolve();\n this._busy = true;\n this.removeAttribute('data-armed');\n this.setAttribute('data-refreshing', '');\n this.setAttribute('aria-busy', 'true');\n if (this._live) this._live.textContent = this.str('label', 'Refreshing');\n this._y.set(this.reduced ? 0 : this.num('threshold', 70) * 0.8);\n return new Promise((resolve) => {\n let finished = false;\n const done = () => {\n if (finished) return;\n finished = true;\n this._busy = false;\n this.removeAttribute('data-refreshing');\n this.removeAttribute('aria-busy');\n if (this._live) this._live.textContent = '';\n this._y.set(0);\n resolve();\n };\n const ev = new CustomEvent('usa:refresh', { detail: { done }, bubbles: true, cancelable: true });\n this.dispatchEvent(ev);\n const fn = (this as any).onrefresh;\n if (typeof fn === 'function') Promise.resolve(fn(ev)).then(done, done);\n });\n }\n },\n { id: 'pull-refresh', text: css }\n );\n}\n","import { defineElement, type UsaElement } from '../base';\nimport { springEasing } from '../physics/spring';\nimport { adoptVariants } from './variants';\nimport css from './fab.css?raw';\n\n/**\n * `<usa-fab>` — floating action button with a speed dial. The first element\n * child is the main button; the others are actions that fan out with a\n * staggered spring when it opens (`direction=\"up\"` default, `down`, `left`,\n * `right`, `radial`). Esc / outside click closes; `aria-expanded` on the\n * main button; actions are hidden from AT while closed.\n * Attributes: `open`, `direction`, `position` (`bottom-right` default, `bottom-left`,\n * `inline`), `gap` (px, 56), `variant`. Events: `usa:toggle` (`{ open }`).\n * Reduced motion: actions appear without travel.\n */\nexport interface UsaFabElement extends UsaElement {\n open: boolean;\n toggle(force?: boolean): void;\n}\n\nexport function defineFab(tag = 'usa-fab'): CustomElementConstructor | undefined {\n adoptVariants();\n return defineElement(\n tag,\n (Base) =>\n class UsaFab extends Base {\n static get observedAttributes(): string[] {\n return ['direction', 'gap'];\n }\n get open(): boolean {\n return this.flag('open');\n }\n set open(v: boolean) {\n this.toggle(v);\n }\n\n private parts(): [HTMLElement | null, HTMLElement[]] {\n const kids = Array.from(this.children) as HTMLElement[];\n return [kids[0] || null, kids.slice(1)];\n }\n\n private offset(i: number, n: number): [number, number] {\n const g = this.num('gap', 56) * (i + 1);\n switch (this.str('direction', 'up')) {\n case 'down':\n return [0, g];\n case 'left':\n return [-g, 0];\n case 'right':\n return [g, 0];\n case 'radial': {\n const a = Math.PI + (n > 1 ? (i / (n - 1)) * (Math.PI / 2) : Math.PI / 4);\n const r = this.num('gap', 56) * 1.6;\n return [Math.cos(a) * r, Math.sin(a) * r];\n }\n default:\n return [0, -g];\n }\n }\n\n mount(): void {\n const [main, actions] = this.parts();\n if (!main) return;\n main.classList.add('usa-fab-main');\n main.setAttribute('aria-haspopup', 'true');\n actions.forEach((a) => a.classList.add('usa-fab-action'));\n this.apply(false);\n this.listen(main, 'click', () => this.toggle());\n this.listen(document, 'keydown', (e: KeyboardEvent) => {\n if (e.key === 'Escape' && this.open) {\n this.toggle(false);\n main.focus();\n }\n });\n this.listen(document, 'pointerdown', (e: PointerEvent) => this.open && !this.contains(e.target as Node) && this.toggle(false));\n this.listen(this, 'click', (e: MouseEvent) => {\n const a = (e.target as Element).closest?.('.usa-fab-action');\n if (a && this.contains(a)) this.toggle(false);\n });\n }\n\n private apply(animate: boolean): void {\n const [main, actions] = this.parts();\n if (!main) return;\n const open = this.open;\n main.setAttribute('aria-expanded', String(open));\n actions.forEach((a, i) => {\n const [x, y] = this.offset(i, actions.length);\n a.toggleAttribute('inert', !open);\n a.setAttribute('aria-hidden', String(!open));\n const to = open ? `translate(${x.toFixed(1)}px, ${y.toFixed(1)}px) scale(1)` : 'translate(0, 0) scale(0.4)';\n const from = a.style.transform || 'translate(0, 0) scale(0.4)';\n a.style.transform = this.reduced ? (open ? `translate(${x.toFixed(1)}px, ${y.toFixed(1)}px)` : 'translate(0, 0)') : to;\n a.style.opacity = open ? '1' : '0';\n if (animate && !this.reduced) {\n const t = springEasing(open ? 'wobbly' : 'stiff');\n this.motion(a, [{ transform: from, opacity: open ? 0 : 1 }, { transform: to, opacity: open ? 1 : 0 }], { ...t, delay: (open ? i : actions.length - 1 - i) * 35 });\n }\n });\n }\n\n toggle(force?: boolean): void {\n const next = force === undefined ? !this.open : force;\n if (next === this.open) return;\n this.setFlag('open', next);\n this.apply(true);\n this.emit('toggle', { open: next });\n }\n },\n { id: 'fab', text: css }\n );\n}\n","import { defineElement, raf, caf, type UsaElement } from '../base';\nimport { adoptVariants } from './variants';\nimport css from './navbar.css?raw';\n\n/**\n * `<usa-navbar>` — an app bar that hides while you scroll down and returns\n * as soon as you scroll up (or reach the top); `shrink` makes it compact\n * once scrolled. Focus inside always reveals it.\n * Attributes: `threshold` (px of scroll before hiding, 64), `shrink`,\n * `target` (selector of a scroll container instead of the page), `variant`.\n * State attributes: `data-hidden`, `data-scrolled`. Events: `usa:hide`, `usa:show`.\n * Reduced motion: hides/shows without sliding (instant).\n */\nexport interface UsaNavbarElement extends UsaElement {\n readonly hiddenByScroll: boolean;\n show(): void;\n}\n\nexport function defineNavbar(tag = 'usa-navbar'): CustomElementConstructor | undefined {\n adoptVariants();\n return defineElement(\n tag,\n (Base) =>\n class UsaNavbar extends Base {\n private _frame = 0;\n private _last = 0;\n\n get hiddenByScroll(): boolean {\n return this.hasAttribute('data-hidden');\n }\n\n mount(): void {\n const sel = this.str('target');\n const scroller: HTMLElement | Window = (sel && (document.querySelector(sel) as HTMLElement)) || window;\n const pos = () => (scroller === window ? window.scrollY || document.documentElement.scrollTop : (scroller as HTMLElement).scrollTop);\n this._last = pos();\n const update = () => {\n this._frame = 0;\n const y = pos();\n const dy = y - this._last;\n this._last = y;\n this.toggleAttribute('data-scrolled', y > 4);\n if (y <= this.num('threshold', 64) || dy < -2) this.show();\n else if (dy > 2 && !this.contains(document.activeElement)) this.hide();\n };\n const on = () => {\n if (!this._frame) this._frame = raf(update);\n };\n this.listen(scroller, 'scroll', on, { passive: true });\n this.listen(this, 'focusin', () => this.show());\n update();\n }\n\n unmount(): void {\n caf(this._frame);\n this._frame = 0;\n }\n\n private hide(): void {\n if (this.hiddenByScroll) return;\n this.setAttribute('data-hidden', '');\n this.emit('hide');\n }\n\n show(): void {\n if (!this.hiddenByScroll) return;\n this.removeAttribute('data-hidden');\n this.emit('show');\n }\n },\n { id: 'navbar', text: css }\n );\n}\n","import { defineElement, clamp, type UsaElement } from '../base';\nimport { createSpring, type SpringValue } from '../physics/spring';\nimport { adoptVariants } from './variants';\nimport css from './slider.css?raw';\n\n/**\n * `<usa-slider>` — a form-associated range slider (`role=\"slider\"`). The\n * thumb follows with a spring, grows while dragged and shows a value bubble.\n * Keyboard: arrows (step), PageUp/PageDown (10 steps), Home/End.\n * Attributes: `value`, `min` (0), `max` (100), `step` (1), `name`, `label`,\n * `bubble` (show the value while dragging), `disabled`, `variant`.\n * Events: `input` + `usa:input` while moving, `change` + `usa:change` on release.\n * Reduced motion: the thumb jumps (no spring).\n */\nexport interface UsaSliderElement extends UsaElement {\n value: number;\n}\n\nexport function defineSlider(tag = 'usa-slider'): CustomElementConstructor | undefined {\n adoptVariants();\n return defineElement(\n tag,\n (Base) => {\n class UsaSlider extends Base {\n static formAssociated = true;\n static get observedAttributes(): string[] {\n return ['min', 'max', 'disabled', 'label'];\n }\n private _internals: ElementInternals | null = null;\n private _v = 0;\n private _pos!: SpringValue;\n private _id = -1;\n\n constructor() {\n super();\n try {\n this._internals = (this as any).attachInternals?.() ?? null;\n } catch {\n this._internals = null;\n }\n }\n\n private range(): [number, number, number] {\n const min = this.num('min', 0);\n const max = Math.max(min + 1e-9, this.num('max', 100));\n return [min, max, Math.max(1e-9, this.num('step', 1))];\n }\n get value(): number {\n return this._v;\n }\n set value(v: number) {\n this.setValue(v, false);\n }\n\n private fraction(v = this._v): number {\n const [min, max] = this.range();\n return (v - min) / (max - min);\n }\n\n private setValue(v: number, user: boolean, animate = true): void {\n const [min, max, step] = this.range();\n const q = clamp(Math.round((v - min) / step) * step + min, min, max);\n const val = Number(q.toFixed(10));\n const changed = val !== this._v;\n this._v = val;\n this.setAttribute('aria-valuenow', String(val));\n this.setAttribute('aria-valuetext', String(val));\n this._internals?.setFormValue?.(String(val));\n const bubble = this.querySelector('.usa-slider-bubble');\n if (bubble) bubble.textContent = String(val);\n if (animate) this._pos?.set(this.fraction());\n else this._pos?.jump(this.fraction());\n if (changed && user) {\n this.dispatchEvent(new Event('input', { bubbles: true }));\n this.emit('input', { value: val });\n }\n }\n\n mount(): void {\n if (!this.querySelector(':scope > .usa-slider-track')) {\n this.innerHTML = '<span class=\"usa-slider-track\"><span class=\"usa-slider-fill\"></span></span><span class=\"usa-slider-thumb\"><span class=\"usa-slider-bubble\"></span></span>';\n }\n this.setAttribute('role', 'slider');\n if (!this.hasAttribute('tabindex')) this.tabIndex = 0;\n const [min, max] = this.range();\n this.setAttribute('aria-valuemin', String(min));\n this.setAttribute('aria-valuemax', String(max));\n if (this.str('label')) this.setAttribute('aria-label', this.str('label'));\n this.toggleAttribute('aria-disabled', this.flag('disabled'));\n this._pos = createSpring({ spring: 'stiff', onUpdate: (f) => this.style.setProperty('--usa-slider', clamp(f, 0, 1).toFixed(4)) });\n this.setValue(this.num('value', min), false, false);\n const fromPointer = (e: PointerEvent) => {\n const r = this.getBoundingClientRect();\n return min + clamp((e.clientX - r.left) / (r.width || 1), 0, 1) * (max - min);\n };\n this.listen(this, 'pointerdown', (e: PointerEvent) => {\n if (this.flag('disabled')) return;\n this._id = e.pointerId;\n try {\n this.setPointerCapture?.(e.pointerId);\n } catch {\n /* synthetic */\n }\n this.setAttribute('data-dragging', '');\n this.setValue(fromPointer(e), true);\n });\n this.listen(this, 'pointermove', (e: PointerEvent) => e.pointerId === this._id && this.setValue(fromPointer(e), true));\n const end = (e: PointerEvent) => {\n if (e.pointerId !== this._id) return;\n this._id = -1;\n this.removeAttribute('data-dragging');\n this.commit();\n };\n this.listen(this, 'pointerup', end);\n this.listen(this, 'pointercancel', end);\n this.listen(this, 'keydown', (e: KeyboardEvent) => {\n if (this.flag('disabled')) return;\n const [mn, mx, st] = this.range();\n const map: Record<string, number> = { ArrowRight: this._v + st, ArrowUp: this._v + st, ArrowLeft: this._v - st, ArrowDown: this._v - st, PageUp: this._v + st * 10, PageDown: this._v - st * 10, Home: mn, End: mx };\n if (!(e.key in map)) return;\n e.preventDefault();\n this.setValue(map[e.key], true);\n this.commit();\n });\n }\n\n unmount(): void {\n this._pos?.stop();\n }\n\n private commit(): void {\n this.dispatchEvent(new Event('change', { bubbles: true }));\n this.emit('change', { value: this._v });\n }\n }\n return UsaSlider as unknown as CustomElementConstructor;\n },\n { id: 'slider', text: css }\n );\n}\n","import { defineElement, clamp, type UsaElement } from '../base';\nimport { springEasing } from '../physics/spring';\nimport { adoptVariants } from './variants';\nimport css from './rating.css?raw';\n\n/**\n * `<usa-rating>` — star rating with hover preview and a springy pop when a\n * value is chosen. `role=\"slider\"` (arrow keys, Home/End, number keys).\n * Attributes: `value` (0), `max` (5), `icon` (★), `readonly`, `label`\n * (\"Rating\"), `name` (form value), `variant`. Events: `change`, `usa:change` (`{ value }`).\n * Reduced motion: no pop.\n */\nexport interface UsaRatingElement extends UsaElement {\n value: number;\n}\n\nexport function defineRating(tag = 'usa-rating'): CustomElementConstructor | undefined {\n adoptVariants();\n return defineElement(\n tag,\n (Base) => {\n class UsaRating extends Base {\n static formAssociated = true;\n static get observedAttributes(): string[] {\n return ['max', 'icon', 'readonly'];\n }\n private _internals: ElementInternals | null = null;\n constructor() {\n super();\n try {\n this._internals = (this as any).attachInternals?.() ?? null;\n } catch {\n this._internals = null;\n }\n }\n get value(): number {\n return clamp(this.num('value', 0), 0, this.num('max', 5));\n }\n set value(v: number) {\n this.setAttribute('value', String(clamp(Math.round(v), 0, this.num('max', 5))));\n this.sync();\n }\n\n mount(): void {\n const max = this.num('max', 5);\n this.innerHTML = Array.from({ length: max }, (_, i) => `<span class=\"usa-rating-star\" data-i=\"${i + 1}\" aria-hidden=\"true\">${this.str('icon', '★')}</span>`).join('');\n this.setAttribute('role', 'slider');\n this.setAttribute('aria-valuemin', '0');\n this.setAttribute('aria-valuemax', String(max));\n this.setAttribute('aria-label', this.str('label', 'Rating'));\n if (this.flag('readonly')) this.setAttribute('aria-readonly', 'true');\n else if (!this.hasAttribute('tabindex')) this.tabIndex = 0;\n this.sync();\n if (this.flag('readonly')) return;\n this.listen(this, 'pointerover', (e: PointerEvent) => {\n const s = (e.target as Element).closest?.('[data-i]') as HTMLElement | null;\n if (s) this.preview(Number(s.dataset.i));\n });\n this.listen(this, 'pointerleave', () => this.preview(0));\n this.listen(this, 'click', (e: MouseEvent) => {\n const s = (e.target as Element).closest?.('[data-i]') as HTMLElement | null;\n if (s) this.choose(Number(s.dataset.i) === this.value ? 0 : Number(s.dataset.i));\n });\n this.listen(this, 'keydown', (e: KeyboardEvent) => {\n const v = this.value;\n const map: Record<string, number> = { ArrowRight: v + 1, ArrowUp: v + 1, ArrowLeft: v - 1, ArrowDown: v - 1, Home: 0, End: max };\n const n = /^[0-9]$/.test(e.key) ? Number(e.key) : map[e.key];\n if (n === undefined) return;\n e.preventDefault();\n this.choose(clamp(n, 0, max));\n });\n }\n\n private preview(n: number): void {\n this.querySelectorAll<HTMLElement>('[data-i]').forEach((s) => s.toggleAttribute('data-preview', n > 0 && Number(s.dataset.i) <= n));\n this.toggleAttribute('data-previewing', n > 0);\n }\n\n private sync(): void {\n const v = this.value;\n this.setAttribute('aria-valuenow', String(v));\n this.setAttribute('aria-valuetext', `${v} of ${this.num('max', 5)}`);\n this._internals?.setFormValue?.(String(v));\n this.querySelectorAll<HTMLElement>('[data-i]').forEach((s) => s.toggleAttribute('data-on', Number(s.dataset.i) <= v));\n }\n\n private choose(n: number): void {\n if (n === this.value) return;\n this.value = n;\n const star = this.querySelector(`[data-i=\"${n}\"]`);\n if (star && !this.reduced) this.motion(star, [{ transform: 'scale(0.5) rotate(-20deg)' }, { transform: 'scale(1) rotate(0)' }], springEasing('bouncy'));\n this.dispatchEvent(new Event('change', { bubbles: true }));\n this.emit('change', { value: n });\n }\n }\n return UsaRating as unknown as CustomElementConstructor;\n },\n { id: 'rating', text: css }\n );\n}\n","import { defineElement, type UsaElement } from '../base';\nimport { springEasing } from '../physics/spring';\nimport { adoptVariants } from './variants';\nimport { place, nextId, type Placement } from './position';\nimport css from './tooltip.css?raw';\n\n/**\n * `<usa-tooltip text=\"…\">` — a tooltip for the element it wraps, shown on\n * hover (after `delay` ms, 300) and on keyboard focus, hidden on Esc / blur.\n * It springs in from its placement side and flips to stay on screen; the\n * trigger gets `aria-describedby`.\n * Attributes: `text`, `placement` (`top` default, `bottom`, `left`, `right`),\n * `delay`, `variant`. Reduced motion: fades only.\n */\nexport interface UsaTooltipElement extends UsaElement {\n show(): void;\n hide(): void;\n}\n\nexport function defineTooltip(tag = 'usa-tooltip'): CustomElementConstructor | undefined {\n adoptVariants();\n return defineElement(\n tag,\n (Base) =>\n class UsaTooltip extends Base {\n static get observedAttributes(): string[] {\n return ['text'];\n }\n private _tip: HTMLElement | null = null;\n private _t: ReturnType<typeof setTimeout> | undefined;\n\n mount(): void {\n const trigger = (this.firstElementChild as HTMLElement) || this;\n const tip = document.createElement('span');\n tip.className = 'usa-tooltip-bubble usa-surface';\n tip.setAttribute('role', 'tooltip');\n tip.id = nextId('usa-tip');\n tip.textContent = this.str('text');\n tip.hidden = true;\n this.append(tip);\n this._tip = tip;\n trigger.setAttribute('aria-describedby', tip.id);\n const later = () => {\n clearTimeout(this._t);\n this._t = setTimeout(() => this.show(), this.num('delay', 300));\n };\n this.listen(this, 'pointerenter', later);\n this.listen(this, 'pointerleave', () => this.hide());\n this.listen(this, 'focusin', () => this.show());\n this.listen(this, 'focusout', () => this.hide());\n this.listen(document, 'keydown', (e: KeyboardEvent) => e.key === 'Escape' && this.hide());\n this.onCleanup(() => {\n clearTimeout(this._t);\n tip.remove();\n trigger.removeAttribute('aria-describedby');\n });\n }\n\n show(): void {\n const tip = this._tip;\n if (!tip || !tip.hidden || !this.str('text')) return;\n clearTimeout(this._t);\n tip.hidden = false;\n const p = place(tip, (this.firstElementChild as HTMLElement) || this, this.str('placement', 'top') as Placement);\n const d = { top: [0, 6], bottom: [0, -6], left: [6, 0], right: [-6, 0] }[p];\n this.motion(tip, this.reduced ? [{ opacity: 0 }, { opacity: 1 }] : [{ opacity: 0, transform: `translate(${d[0]}px, ${d[1]}px) scale(0.85)` }, { opacity: 1, transform: 'none' }], this.reduced ? { duration: 120 } : springEasing('stiff'));\n }\n\n hide(): void {\n clearTimeout(this._t);\n if (this._tip) this._tip.hidden = true;\n }\n },\n { id: 'tooltip', text: css }\n );\n}\n","import { defineElement, type UsaElement } from '../base';\nimport { springEasing } from '../physics/spring';\nimport { adoptVariants } from './variants';\nimport { place, nextId, type Placement } from './position';\nimport css from './popover.css?raw';\n\n/**\n * `<usa-popover>` — a click-to-open popover: the first element child is the\n * trigger, `[data-popover]` is the content. Springs open from the trigger,\n * flips to stay on screen; Esc or an outside click closes and focus returns\n * to the trigger. `aria-expanded` / `aria-controls` on the trigger.\n * Attributes: `open`, `placement` (`bottom` default), `variant`. Events:\n * `usa:open`, `usa:close`. Reduced motion: fades only.\n */\nexport interface UsaPopoverElement extends UsaElement {\n open: boolean;\n toggle(force?: boolean): void;\n}\n\nexport function definePopover(tag = 'usa-popover'): CustomElementConstructor | undefined {\n adoptVariants();\n return defineElement(\n tag,\n (Base) =>\n class UsaPopover extends Base {\n get open(): boolean {\n return this.flag('open');\n }\n set open(v: boolean) {\n this.toggle(v);\n }\n private parts(): [HTMLElement | null, HTMLElement | null] {\n return [this.firstElementChild as HTMLElement | null, this.querySelector<HTMLElement>(':scope > [data-popover]')];\n }\n\n mount(): void {\n const [trigger, panel] = this.parts();\n if (!trigger || !panel || trigger === panel) return;\n panel.id ||= nextId('usa-pop');\n panel.classList.add('usa-surface', 'usa-popover-panel');\n if (!panel.hasAttribute('role')) panel.setAttribute('role', 'dialog');\n panel.tabIndex = -1;\n trigger.setAttribute('aria-controls', panel.id);\n trigger.setAttribute('aria-haspopup', 'dialog');\n this.render(false);\n this.listen(trigger, 'click', () => this.toggle());\n this.listen(document, 'keydown', (e: KeyboardEvent) => {\n if (e.key === 'Escape' && this.open) {\n this.toggle(false);\n trigger.focus();\n }\n });\n this.listen(document, 'pointerdown', (e: PointerEvent) => this.open && !this.contains(e.target as Node) && this.toggle(false));\n this.listen(window, 'resize', () => this.open && place(panel, trigger, this.str('placement', 'bottom') as Placement));\n }\n\n private render(animate: boolean): void {\n const [trigger, panel] = this.parts();\n if (!trigger || !panel) return;\n trigger.setAttribute('aria-expanded', String(this.open));\n panel.hidden = !this.open;\n if (!this.open) return;\n const p = place(panel, trigger, this.str('placement', 'bottom') as Placement);\n if (!animate) return;\n const origin = { top: '50% 100%', bottom: '50% 0', left: '100% 50%', right: '0 50%' }[p];\n panel.style.transformOrigin = origin;\n this.motion(panel, this.reduced ? [{ opacity: 0 }, { opacity: 1 }] : [{ opacity: 0, transform: 'scale(0.9)' }, { opacity: 1, transform: 'none' }], this.reduced ? { duration: 120 } : springEasing('wobbly'));\n panel.focus({ preventScroll: true });\n }\n\n toggle(force?: boolean): void {\n const next = force === undefined ? !this.open : force;\n if (next === this.open) return;\n this.setFlag('open', next);\n this.render(true);\n this.emit(next ? 'open' : 'close');\n }\n },\n { id: 'popover', text: css }\n );\n}\n","import { defineElement, type UsaElement } from '../base';\nimport { springEasing } from '../physics/spring';\nimport { adoptVariants } from './variants';\nimport css from './badge.css?raw';\n\n/**\n * `<usa-badge>` — a count / dot badge on whatever it wraps; bumps with a\n * spring whenever the value changes and pulses with `pulse`.\n * Attributes: `value` (number or text; 0 / empty hides it unless\n * `show-zero`), `max` (99 → \"99+\"), `dot`, `pulse`, `label` (accessible\n * text, default \"{n} new\"), `variant`. Reduced motion: no bump or pulse.\n */\nexport interface UsaBadgeElement extends UsaElement {\n value: string;\n}\n\nexport function defineBadge(tag = 'usa-badge'): CustomElementConstructor | undefined {\n adoptVariants();\n return defineElement(\n tag,\n (Base) =>\n class UsaBadge extends Base {\n static get observedAttributes(): string[] {\n return ['value', 'max', 'dot', 'label'];\n }\n private _el: HTMLElement | null = null;\n get value(): string {\n return this.str('value');\n }\n set value(v: string) {\n this.setAttribute('value', String(v));\n }\n\n mount(): void {\n if (!this._el || !this._el.isConnected) {\n this._el = document.createElement('span');\n this._el.className = 'usa-badge-count';\n this.append(this._el);\n }\n this.sync(false);\n }\n\n changed(name: string): void {\n this.sync(name === 'value');\n }\n\n private sync(bump: boolean): void {\n const el = this._el;\n if (!el) return;\n const raw = this.value;\n const n = Number(raw);\n const max = this.num('max', 99);\n const text = this.flag('dot') ? '' : raw !== '' && Number.isFinite(n) && n > max ? `${max}+` : raw;\n const empty = !this.flag('dot') && (raw === '' || (raw === '0' && !this.flag('show-zero')));\n el.textContent = text;\n el.hidden = empty;\n this.toggleAttribute('data-dot', this.flag('dot'));\n const label = this.str('label', raw ? `${raw} new` : 'New');\n el.setAttribute('aria-label', label.replace('{n}', raw));\n el.setAttribute('role', 'status');\n if (bump && !empty && !this.reduced) this.motion(el, [{ transform: 'scale(0.4)' }, { transform: 'scale(1)' }], springEasing('bouncy'));\n }\n },\n { id: 'badge', text: css }\n );\n}\n","import { defineElement, type UsaElement } from '../base';\nimport { adoptVariants } from './variants';\nimport css from './avatar-stack.css?raw';\n\n/**\n * `<usa-avatar-stack>` — overlapping avatars (its children: `<img>` or any\n * element) that spread apart with a spring on hover / focus; extra ones\n * collapse into a \"+N\" chip.\n * Attributes: `max` (visible avatars, 5), `size` (px, 36), `overlap` (0–1,\n * 0.35), `label` (group name), `variant`. Reduced motion: no spreading.\n */\nexport interface UsaAvatarStackElement extends UsaElement {}\n\nexport function defineAvatarStack(tag = 'usa-avatar-stack'): CustomElementConstructor | undefined {\n adoptVariants();\n return defineElement(\n tag,\n (Base) =>\n class UsaAvatarStack extends Base {\n static get observedAttributes(): string[] {\n return ['max', 'size', 'overlap'];\n }\n mount(): void {\n this.querySelector(':scope > .usa-avatar-more')?.remove();\n const kids = Array.from(this.children) as HTMLElement[];\n const max = Math.max(1, this.num('max', 5));\n this.style.setProperty('--usa-avatar-size', `${this.num('size', 36)}px`);\n this.style.setProperty('--usa-avatar-overlap', String(this.num('overlap', 0.35)));\n this.setAttribute('role', 'group');\n this.setAttribute('aria-label', this.str('label', `${kids.length} people`));\n kids.forEach((k, i) => {\n k.classList.add('usa-avatar');\n k.hidden = i >= max;\n k.style.setProperty('--i', String(i));\n k.style.zIndex = String(kids.length - i);\n });\n if (kids.length > max) {\n const more = document.createElement('span');\n more.className = 'usa-avatar usa-avatar-more';\n more.textContent = `+${kids.length - max}`;\n more.style.setProperty('--i', String(max));\n more.setAttribute('aria-label', `and ${kids.length - max} more`);\n this.append(more);\n }\n }\n },\n { id: 'avatar-stack', text: css }\n );\n}\n","/**\n * use-scroll-animate/components/ui — animated UI components + style variants (v2.6).\n * `<usa-tabs>`, `<usa-drawer>`, `<usa-bottom-sheet>`, `<usa-pull-refresh>`,\n * `<usa-fab>`, `<usa-navbar>`, `<usa-slider>`, `<usa-rating>`,\n * `<usa-tooltip>`, `<usa-popover>`, `<usa-badge>`, `<usa-avatar-stack>`,\n * and `variant=\"minimal | neon | glass | brutalist | fluent | material\"`\n * design tokens (`setVariant()`, `VARIANTS`).\n */\nimport { defineTabs, type UsaTabsElement } from './tabs';\nimport { defineDrawer, defineBottomSheet, type UsaDrawerElement, type UsaBottomSheetElement } from './sheet';\nimport { definePullRefresh, type UsaPullRefreshElement } from './pull-refresh';\nimport { defineFab, type UsaFabElement } from './fab';\nimport { defineNavbar, type UsaNavbarElement } from './navbar';\nimport { defineSlider, type UsaSliderElement } from './slider';\nimport { defineRating, type UsaRatingElement } from './rating';\nimport { defineTooltip, type UsaTooltipElement } from './tooltip';\nimport { definePopover, type UsaPopoverElement } from './popover';\nimport { defineBadge, type UsaBadgeElement } from './badge';\nimport { defineAvatarStack, type UsaAvatarStackElement } from './avatar-stack';\n\nexport { defineTabs, defineDrawer, defineBottomSheet, definePullRefresh, defineFab, defineNavbar, defineSlider, defineRating, defineTooltip, definePopover, defineBadge, defineAvatarStack };\nexport { VARIANTS, setVariant, adoptVariants } from './variants';\nexport type { Variant } from './variants';\nexport type { Placement } from './position';\nexport type {\n UsaTabsElement,\n UsaDrawerElement,\n UsaBottomSheetElement,\n UsaPullRefreshElement,\n UsaFabElement,\n UsaNavbarElement,\n UsaSliderElement,\n UsaRatingElement,\n UsaTooltipElement,\n UsaPopoverElement,\n UsaBadgeElement,\n UsaAvatarStackElement,\n};\nexport { configureComponents, prefersReducedMotion } from '../base';\nexport type { ComponentsConfig, UsaElement } from '../base';\n\n/** Register every component of this category under its default tag. */\nexport function defineUiComponents(): void {\n defineTabs();\n defineDrawer();\n defineBottomSheet();\n definePullRefresh();\n defineFab();\n defineNavbar();\n defineSlider();\n defineRating();\n defineTooltip();\n definePopover();\n defineBadge();\n defineAvatarStack();\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'usa-tabs': UsaTabsElement;\n 'usa-drawer': UsaDrawerElement;\n 'usa-bottom-sheet': UsaBottomSheetElement;\n 'usa-pull-refresh': UsaPullRefreshElement;\n 'usa-fab': UsaFabElement;\n 'usa-navbar': UsaNavbarElement;\n 'usa-slider': UsaSliderElement;\n 'usa-rating': UsaRatingElement;\n 'usa-tooltip': UsaTooltipElement;\n 'usa-popover': UsaPopoverElement;\n 'usa-badge': UsaBadgeElement;\n 'usa-avatar-stack': UsaAvatarStackElement;\n }\n}\n","import { defineElement, raf, caf, type UsaElement } from '../base';\nimport css from './cursor.css?raw';\n\nexport const CURSOR_MODES = ['dot', 'trail', 'magnetic', 'glow'] as const;\nexport type CursorMode = (typeof CURSOR_MODES)[number];\n\n/**\n * `<usa-cursor mode=\"dot | trail | magnetic | glow\">` — a custom cursor for\n * the page (place it once, e.g. at the end of `<body>`).\n * - `dot` — a ring that follows with spring lag around the real pointer;\n * - `trail` — a comet tail of dots;\n * - `magnetic` — the ring snaps onto and wraps hovered targets (`a`,\n * `button`, `[data-cursor]`);\n * - `glow` — a large soft light following the pointer (great on dark UIs).\n * Attributes: `mode`, `color`, `size` (px, 28), `hide-native` (hide the\n * system cursor), `targets` (selector, magnetic). Only for fine pointers\n * (mouse / pen); never on touch. Reduced motion: not rendered.\n */\nexport interface UsaCursorElement extends UsaElement {\n readonly active: boolean;\n}\n\nexport function defineCursor(tag = 'usa-cursor'): CustomElementConstructor | undefined {\n return defineElement(\n tag,\n (Base) =>\n class UsaCursor extends Base {\n static get observedAttributes(): string[] {\n return ['mode', 'size', 'color', 'hide-native'];\n }\n private _frame = 0;\n get active(): boolean {\n return this.hasAttribute('data-active');\n }\n\n mount(): void {\n this.setAttribute('aria-hidden', 'true');\n const fine = typeof matchMedia !== 'function' || matchMedia('(pointer: fine)').matches || matchMedia('(hover: hover)').matches;\n if (this.reduced || !fine) return;\n const mode = this.str('mode', 'dot');\n const n = mode === 'trail' ? 8 : 1;\n this.innerHTML = Array.from({ length: n }, (_, i) => `<span class=\"usa-cursor-${mode === 'glow' ? 'glow' : 'ring'}\" style=\"--i:${i}\"></span>`).join('') + (mode === 'glow' ? '' : '<span class=\"usa-cursor-dot\"></span>');\n if (this.str('color')) this.style.setProperty('--usa-cursor-color', this.str('color'));\n this.style.setProperty('--usa-cursor-size', `${this.num('size', 28)}px`);\n if (this.flag('hide-native')) document.documentElement.classList.add('usa-cursor-none');\n this.onCleanup(() => document.documentElement.classList.remove('usa-cursor-none'));\n const parts = Array.from(this.querySelectorAll<HTMLElement>('.usa-cursor-ring, .usa-cursor-glow'));\n const dot = this.querySelector<HTMLElement>('.usa-cursor-dot');\n const pts = parts.map(() => ({ x: -100, y: -100 }));\n let mx = -100;\n let my = -100;\n let snap: DOMRect | null = null;\n const sel = this.str('targets', 'a, button, [role=\"button\"], [data-cursor], input, select, textarea, label');\n const loop = () => {\n this._frame = 0;\n let tx = mx;\n let ty = my;\n pts.forEach((p, i) => {\n const k = mode === 'trail' ? 0.35 - i * 0.03 : mode === 'glow' ? 0.12 : 0.22;\n const goalX = snap && i === 0 ? snap.left + snap.width / 2 : tx;\n const goalY = snap && i === 0 ? snap.top + snap.height / 2 : ty;\n p.x += (goalX - p.x) * k;\n p.y += (goalY - p.y) * k;\n parts[i].style.transform = `translate3d(${p.x.toFixed(1)}px, ${p.y.toFixed(1)}px, 0)`;\n tx = p.x;\n ty = p.y;\n });\n if (snap && parts[0]) {\n parts[0].style.width = `${snap.width + 12}px`;\n parts[0].style.height = `${snap.height + 12}px`;\n } else if (parts[0]) {\n parts[0].style.width = parts[0].style.height = '';\n }\n if (dot) dot.style.transform = `translate3d(${mx}px, ${my}px, 0)`;\n const moving = pts.some((p, i) => Math.abs(p.x - (i === 0 && snap ? snap.left + snap.width / 2 : mx)) > 0.3);\n if (moving) this._frame = raf(loop);\n };\n const kick = () => {\n if (!this._frame) this._frame = raf(loop);\n };\n this.listen(document, 'pointermove', (e: PointerEvent) => {\n if (e.pointerType === 'touch') return;\n mx = e.clientX;\n my = e.clientY;\n this.setAttribute('data-active', '');\n if (mode === 'magnetic') {\n const t = (e.target as Element)?.closest?.(sel);\n snap = t ? t.getBoundingClientRect() : null;\n this.toggleAttribute('data-snapped', !!t);\n } else {\n this.toggleAttribute('data-hover', !!(e.target as Element)?.closest?.(sel));\n }\n kick();\n }, { passive: true });\n this.listen(document, 'pointerdown', () => this.setAttribute('data-down', ''));\n this.listen(document, 'pointerup', () => this.removeAttribute('data-down'));\n this.listen(document.documentElement, 'pointerleave', () => this.removeAttribute('data-active'));\n }\n\n unmount(): void {\n caf(this._frame);\n this._frame = 0;\n this.removeAttribute('data-active');\n }\n },\n { id: 'cursor', text: css }\n );\n}\n","import { prefersReducedMotion, raf, caf, now } from '../base';\nimport { springSamples } from '../physics/spring';\n\n/**\n * `smoothScroll()` — inertial wheel smoothing for the page (or a scroll\n * container): wheel deltas are eased with a lerp each frame. Touch and\n * keyboard scrolling stay native. Returns a function that turns it off.\n * No-op under reduced motion, on touch-only devices and on the server.\n */\nexport interface SmoothScrollOptions {\n /** Scroll container (default: the page). */\n target?: HTMLElement | null;\n /** 0–1, lower = smoother / longer glide (default 0.12). */\n lerp?: number;\n /** Wheel multiplier (default 1). */\n wheelMultiplier?: number;\n}\n\nexport function smoothScroll(options: SmoothScrollOptions = {}): () => void {\n if (typeof window === 'undefined' || prefersReducedMotion()) return () => undefined;\n const el = options.target || null;\n const lerp = Math.min(1, Math.max(0.02, options.lerp ?? 0.12));\n const mult = options.wheelMultiplier ?? 1;\n const get = () => (el ? el.scrollTop : window.scrollY);\n const max = () => (el ? el.scrollHeight - el.clientHeight : document.documentElement.scrollHeight - window.innerHeight);\n const set = (y: number) => (el ? (el.scrollTop = y) : window.scrollTo(0, y));\n let target = get();\n let current = target;\n let id = 0;\n const loop = () => {\n current += (target - current) * lerp;\n if (Math.abs(target - current) < 0.5) current = target;\n set(current);\n id = current === target ? 0 : raf(loop);\n };\n const onWheel = (e: WheelEvent) => {\n if (e.ctrlKey || e.defaultPrevented) return;\n if (!id) target = current = get();\n e.preventDefault();\n const dy = e.deltaMode === 1 ? e.deltaY * 16 : e.deltaMode === 2 ? e.deltaY * (window.innerHeight || 800) : e.deltaY;\n target = Math.max(0, Math.min(max(), target + dy * mult));\n if (!id) id = raf(loop);\n };\n const onScroll = () => {\n if (!id) target = current = get();\n };\n const host: EventTarget = el || window;\n host.addEventListener('wheel', onWheel as EventListener, { passive: false });\n host.addEventListener('scroll', onScroll, { passive: true });\n return () => {\n host.removeEventListener('wheel', onWheel as EventListener);\n host.removeEventListener('scroll', onScroll);\n if (id) caf(id);\n id = 0;\n };\n}\n\n/**\n * Scroll to a y position, element or selector with spring timing (or\n * instantly under reduced motion). Resolves when done.\n */\nexport function scrollToTarget(to: number | Element | string, options: { offset?: number; target?: HTMLElement | null; preset?: string } = {}): Promise<void> {\n if (typeof window === 'undefined') return Promise.resolve();\n const el = options.target || null;\n const start = el ? el.scrollTop : window.scrollY;\n let y = typeof to === 'number' ? to : 0;\n if (typeof to !== 'number') {\n const node = typeof to === 'string' ? document.querySelector(to) : to;\n if (!node) return Promise.resolve();\n const top = node.getBoundingClientRect().top;\n y = start + top - (el ? el.getBoundingClientRect().top : 0);\n }\n y = Math.max(0, y - (options.offset ?? 0));\n const set = (v: number) => (el ? (el.scrollTop = v) : window.scrollTo(0, v));\n if (prefersReducedMotion()) {\n set(y);\n return Promise.resolve();\n }\n const { values, duration } = springSamples(options.preset || 'slow');\n const t0 = now();\n return new Promise((resolve) => {\n const step = () => {\n const p = Math.min(1, (now() - t0) / Math.max(1, duration));\n const v = values[Math.min(values.length - 1, Math.round(p * (values.length - 1)))];\n set(start + (y - start) * v);\n if (p < 1) raf(step);\n else resolve();\n };\n raf(step);\n });\n}\n","import { defineElement, type UsaElement } from '../base';\nimport { scrollToTarget } from './scroll';\nimport css from './fullpage.css?raw';\n\n/**\n * `<usa-fullpage>` — full-screen sections (its element children) that snap\n * one at a time (CSS scroll snap), with keyboard paging (PageUp/PageDown,\n * arrows, Home/End), optional dot navigation and the current section in\n * `aria-current` + `usa:section`.\n * Attributes: `dots` (show the dot nav), `axis` (`y` default, `x`).\n * Methods: `go(i)`, `next()`, `prev()`. Reduced motion: snapping stays,\n * jumps are instant.\n */\nexport interface UsaFullpageElement extends UsaElement {\n readonly index: number;\n go(i: number): void;\n next(): void;\n prev(): void;\n}\n\nexport function defineFullpage(tag = 'usa-fullpage'): CustomElementConstructor | undefined {\n return defineElement(\n tag,\n (Base) =>\n class UsaFullpage extends Base {\n private _i = 0;\n get index(): number {\n return this._i;\n }\n private sections(): HTMLElement[] {\n return (Array.from(this.children) as HTMLElement[]).filter((c) => !c.classList.contains('usa-fullpage-dots'));\n }\n\n mount(): void {\n if (!this.hasAttribute('tabindex')) this.tabIndex = 0;\n const secs = this.sections();\n secs.forEach((s, i) => {\n s.classList.add('usa-fullpage-section');\n s.setAttribute('data-index', String(i));\n });\n let nav: HTMLElement | null = null;\n if (this.flag('dots')) {\n nav = document.createElement('nav');\n nav.className = 'usa-fullpage-dots';\n nav.setAttribute('aria-label', 'Sections');\n secs.forEach((s, i) => {\n const b = document.createElement('button');\n b.type = 'button';\n b.setAttribute('aria-label', s.getAttribute('aria-label') || s.querySelector('h1,h2,h3')?.textContent?.trim() || `Section ${i + 1}`);\n b.addEventListener('click', () => this.go(i));\n nav!.append(b);\n });\n this.append(nav);\n this.onCleanup(() => nav?.remove());\n }\n this.mark(0);\n if (typeof IntersectionObserver !== 'undefined') {\n const io = new IntersectionObserver(\n (entries) => {\n for (const e of entries) if (e.isIntersecting && e.intersectionRatio >= 0.6) this.mark(Number((e.target as HTMLElement).dataset.index));\n },\n { root: this, threshold: [0.6] }\n );\n secs.forEach((s) => io.observe(s));\n this.onCleanup(() => io.disconnect());\n }\n this.listen(this, 'keydown', (e: KeyboardEvent) => {\n const n = this.sections().length;\n const map: Record<string, number> = { PageDown: this._i + 1, ArrowDown: this._i + 1, ' ': this._i + 1, PageUp: this._i - 1, ArrowUp: this._i - 1, Home: 0, End: n - 1 };\n if (this.str('axis') === 'x') Object.assign(map, { ArrowRight: this._i + 1, ArrowLeft: this._i - 1 });\n if (!(e.key in map) || (e.target as Element).closest?.('input, textarea, select')) return;\n e.preventDefault();\n this.go(map[e.key]);\n });\n }\n\n private mark(i: number): void {\n if (i === this._i && this.hasAttribute('data-ready')) return;\n this.setAttribute('data-ready', '');\n this._i = i;\n this.sections().forEach((s, j) => s.toggleAttribute('data-current', j === i));\n this.querySelectorAll('.usa-fullpage-dots button').forEach((b, j) => (j === i ? b.setAttribute('aria-current', 'true') : b.removeAttribute('aria-current')));\n this.emit('section', { index: i });\n }\n\n go(i: number): void {\n const secs = this.sections();\n const t = secs[Math.max(0, Math.min(secs.length - 1, i))];\n if (!t) return;\n if (this.str('axis') === 'x') this.scrollTo({ left: t.offsetLeft, behavior: this.reduced ? 'auto' : 'smooth' });\n else scrollToTarget(t.offsetTop, { target: this, preset: 'stiff' });\n this.mark(secs.indexOf(t));\n }\n next(): void {\n this.go(this._i + 1);\n }\n prev(): void {\n this.go(this._i - 1);\n }\n },\n { id: 'fullpage', text: css }\n );\n}\n","import { defineElement, type UsaElement } from '../base';\nimport css from './loading-bar.css?raw';\n\n/**\n * `<usa-loading-bar>` — a slim top loading bar for route changes and fetches\n * (NProgress-style): `start()` trickles towards 90 %, `done()` completes and\n * fades out, `set(0–1)` for real progress. `loadingBar` drives the first bar\n * on the page (created on demand). `role=\"progressbar\"`, `aria-busy`.\n * Attributes: `color`, `height` (px, 3), `position` (`top` default, `bottom`).\n * Reduced motion: no trickle animation — the bar shows / hides.\n */\nexport interface UsaLoadingBarElement extends UsaElement {\n readonly progress: number;\n start(): void;\n set(p: number): void;\n done(): void;\n}\n\nexport function defineLoadingBar(tag = 'usa-loading-bar'): CustomElementConstructor | undefined {\n return defineElement(\n tag,\n (Base) =>\n class UsaLoadingBar extends Base {\n private _p = 0;\n private _t: ReturnType<typeof setInterval> | undefined;\n private _h: ReturnType<typeof setTimeout> | undefined;\n get progress(): number {\n return this._p;\n }\n mount(): void {\n if (!this.querySelector('.usa-loading-bar-fill')) this.innerHTML = '<span class=\"usa-loading-bar-fill\"></span>';\n this.setAttribute('role', 'progressbar');\n this.setAttribute('aria-label', this.str('label', 'Loading'));\n this.setAttribute('aria-valuemin', '0');\n this.setAttribute('aria-valuemax', '100');\n if (this.str('color')) this.style.setProperty('--usa-loading-color', this.str('color'));\n this.style.setProperty('--usa-loading-h', `${this.num('height', 3)}px`);\n this.paint();\n }\n unmount(): void {\n clearInterval(this._t);\n clearTimeout(this._h);\n }\n private paint(): void {\n this.style.setProperty('--usa-loading', this._p.toFixed(4));\n this.setAttribute('aria-valuenow', String(Math.round(this._p * 100)));\n }\n start(): void {\n clearTimeout(this._h);\n clearInterval(this._t);\n this.setAttribute('data-active', '');\n this.setAttribute('aria-busy', 'true');\n this._p = Math.max(this._p, 0.08);\n this.paint();\n this._t = setInterval(() => {\n this._p += (0.9 - this._p) * (this.reduced ? 0.5 : 0.08);\n this.paint();\n }, 200);\n }\n set(p: number): void {\n this.setAttribute('data-active', '');\n this._p = Math.max(0, Math.min(1, p));\n this.paint();\n }\n done(): void {\n clearInterval(this._t);\n this._p = 1;\n this.paint();\n this.removeAttribute('aria-busy');\n this._h = setTimeout(() => {\n this.removeAttribute('data-active');\n this._h = setTimeout(() => {\n this._p = 0;\n this.paint();\n }, 300);\n }, 250);\n }\n },\n { id: 'loading-bar', text: css }\n );\n}\n\nfunction bar(): UsaLoadingBarElement | null {\n if (typeof document === 'undefined') return null;\n let el = document.querySelector('usa-loading-bar') as UsaLoadingBarElement | null;\n if (!el) {\n defineLoadingBar();\n el = document.createElement('usa-loading-bar') as UsaLoadingBarElement;\n document.body.appendChild(el);\n }\n return typeof el.start === 'function' ? el : null;\n}\n\n/** Drive the page's `<usa-loading-bar>` (created on first use). */\nexport const loadingBar = {\n start: (): void => bar()?.start(),\n set: (p: number): void => bar()?.set(p),\n done: (): void => bar()?.done(),\n /** Run `task` with the bar shown; resolves with its result. */\n async track<T>(task: Promise<T> | (() => Promise<T>)): Promise<T> {\n bar()?.start();\n try {\n return await (typeof task === 'function' ? task() : task);\n } finally {\n bar()?.done();\n }\n },\n};\n","import { defineElement, raf, caf, type UsaElement } from '../base';\nimport { scrollToTarget } from './scroll';\nimport css from './back-to-top.css?raw';\n\n/**\n * `<usa-back-to-top>` — a floating button that appears after `offset` px\n * (300) of scrolling, shows page progress as a ring and springs the page\n * back to the top (then focuses `focus-target`, default `#main` / `body`).\n * Attributes: `offset`, `label` (\"Back to top\"), `focus-target`, `position`\n * (`bottom-right` default, `bottom-left`). Reduced motion: instant jump.\n */\nexport interface UsaBackToTopElement extends UsaElement {\n readonly visible: boolean;\n}\n\nexport function defineBackToTop(tag = 'usa-back-to-top'): CustomElementConstructor | undefined {\n return defineElement(\n tag,\n (Base) =>\n class UsaBackToTop extends Base {\n private _frame = 0;\n get visible(): boolean {\n return this.hasAttribute('data-visible');\n }\n mount(): void {\n if (!this.querySelector('button')) {\n this.innerHTML = `<button type=\"button\" aria-label=\"${this.str('label', 'Back to top')}\"><svg viewBox=\"0 0 36 36\" aria-hidden=\"true\"><circle cx=\"18\" cy=\"18\" r=\"16\" pathLength=\"100\"/><path d=\"M12 20l6-6 6 6\"/></svg></button>`;\n }\n const btn = this.querySelector('button')!;\n const update = () => {\n this._frame = 0;\n const y = window.scrollY || document.documentElement.scrollTop || 0;\n const max = Math.max(1, (document.documentElement.scrollHeight || 0) - (window.innerHeight || 0));\n this.toggleAttribute('data-visible', y > this.num('offset', 300));\n this.style.setProperty('--usa-btt', Math.min(1, y / max).toFixed(4));\n };\n this.listen(window, 'scroll', () => {\n if (!this._frame) this._frame = raf(update);\n }, { passive: true });\n this.listen(btn, 'click', async () => {\n await scrollToTarget(0, { preset: 'slow' });\n const f = document.querySelector<HTMLElement>(this.str('focus-target', '#main')) || document.body;\n if (!f.hasAttribute('tabindex') && f !== document.body) f.tabIndex = -1;\n f.focus?.({ preventScroll: true });\n });\n update();\n }\n unmount(): void {\n caf(this._frame);\n this._frame = 0;\n }\n },\n { id: 'back-to-top', text: css }\n );\n}\n","import { defineElement, raf, caf, type UsaElement } from '../base';\nimport css from './ambient.css?raw';\n\nexport const AMBIENT_EFFECTS = ['particles', 'snow', 'stars', 'noise', 'gradient'] as const;\nexport type AmbientEffect = (typeof AMBIENT_EFFECTS)[number];\n\n/**\n * `<usa-ambient effect=\"particles | snow | stars | noise | gradient\">` — a\n * fixed, page-wide ambient layer behind (or, with `layer=\"front\"`, over)\n * the content, never catching the pointer.\n * - `particles` — slow drifting dots; `snow` — falling flakes with sway;\n * `stars` — twinkling starfield (canvas, paused in hidden tabs, DPR ≤ 2);\n * - `noise` — animated film grain (CSS, SVG turbulence);\n * - `gradient` — a gradient whose hue shifts with the scroll position.\n * Attributes: `effect`, `density` (0.2–3, 1), `color`, `opacity` (0.6),\n * `layer` (`back` default, `front`), `speed` (1). Reduced motion: one\n * static frame (no falling, twinkling or grain flicker).\n */\nexport interface UsaAmbientElement extends UsaElement {}\n\nexport function defineAmbient(tag = 'usa-ambient'): CustomElementConstructor | undefined {\n return defineElement(\n tag,\n (Base) =>\n class UsaAmbient extends Base {\n static get observedAttributes(): string[] {\n return ['effect', 'density', 'color'];\n }\n private _frame = 0;\n\n mount(): void {\n this.setAttribute('aria-hidden', 'true');\n const effect = this.str('effect', 'particles');\n this.style.setProperty('--usa-ambient-opacity', String(this.num('opacity', 0.6)));\n this.replaceChildren();\n if (effect === 'noise') return;\n if (effect === 'gradient') {\n const upd = () => {\n this._frame = 0;\n const max = Math.max(1, document.documentElement.scrollHeight - window.innerHeight);\n this.style.setProperty('--usa-ambient-p', ((window.scrollY || 0) / max).toFixed(4));\n };\n if (!this.reduced) this.listen(window, 'scroll', () => !this._frame && (this._frame = raf(upd)), { passive: true });\n upd();\n return;\n }\n const canvas = document.createElement('canvas');\n this.append(canvas);\n const ctx = canvas.getContext?.('2d');\n if (!ctx) return;\n const dpr = Math.min(2, window.devicePixelRatio || 1);\n let W = 0;\n let H = 0;\n const color = this.str('color', effect === 'snow' ? '#ffffff' : effect === 'stars' ? '#ffffff' : '#a78bfa');\n const speed = this.num('speed', 1);\n const resize = () => {\n W = window.innerWidth || 800;\n H = window.innerHeight || 600;\n canvas.width = W * dpr;\n canvas.height = H * dpr;\n canvas.style.width = `${W}px`;\n canvas.style.height = `${H}px`;\n ctx.setTransform(dpr, 0, 0, dpr, 0, 0);\n };\n resize();\n const base = effect === 'stars' ? 140 : effect === 'snow' ? 90 : 60;\n const n = Math.round(base * Math.max(0.2, Math.min(3, this.num('density', 1))) * Math.min(1.5, (W * H) / (1280 * 800)));\n const dots = Array.from({ length: n }, () => ({\n x: Math.random() * W,\n y: Math.random() * H,\n r: effect === 'stars' ? Math.random() * 1.3 + 0.2 : effect === 'snow' ? Math.random() * 2.6 + 0.8 : Math.random() * 2 + 0.6,\n vx: (Math.random() - 0.5) * 0.25,\n vy: effect === 'snow' ? Math.random() * 0.8 + 0.4 : (Math.random() - 0.5) * 0.25,\n t: Math.random() * Math.PI * 2,\n }));\n ctx.fillStyle = color;\n const draw = (move: boolean) => {\n ctx.clearRect(0, 0, W, H);\n for (const d of dots) {\n if (move) {\n d.t += 0.02 * speed;\n d.x += (d.vx + (effect === 'snow' ? Math.sin(d.t) * 0.3 : 0)) * speed;\n d.y += d.vy * speed;\n if (d.y > H + 5) d.y = -5;\n if (d.y < -5) d.y = H + 5;\n if (d.x > W + 5) d.x = -5;\n if (d.x < -5) d.x = W + 5;\n }\n ctx.globalAlpha = effect === 'stars' ? 0.35 + 0.65 * Math.abs(Math.sin(d.t)) : 0.85;\n ctx.beginPath();\n ctx.arc(d.x, d.y, d.r, 0, Math.PI * 2);\n ctx.fill();\n }\n };\n this.listen(window, 'resize', () => {\n resize();\n ctx.fillStyle = color;\n draw(false);\n });\n if (this.reduced) {\n draw(false);\n return;\n }\n const loop = () => {\n if (!document.hidden) draw(true);\n this._frame = raf(loop);\n };\n this._frame = raf(loop);\n }\n\n unmount(): void {\n caf(this._frame);\n this._frame = 0;\n }\n },\n { id: 'ambient', text: css }\n );\n}\n","import { defineElement, type UsaElement } from '../base';\nimport css from './splash.css?raw';\n\n/**\n * `<usa-splash>` — an app splash / launch screen: shows its content (logo,\n * spinner) over the page, then leaves with `exit` (`fade` default, `scale`,\n * `slide-up`, `circle`) once the page has loaded (or when you call\n * `done()`), but never sooner than `min` ms (600) — no flash.\n * Attributes: `min`, `exit`, `manual` (wait for `done()`), `label`.\n * Events: `usa:done`. The page underneath is `aria-busy` until then.\n * Reduced motion: fades.\n */\nexport interface UsaSplashElement extends UsaElement {\n done(): Promise<void>;\n}\n\nexport function defineSplash(tag = 'usa-splash'): CustomElementConstructor | undefined {\n return defineElement(\n tag,\n (Base) =>\n class UsaSplash extends Base {\n private _t0 = 0;\n private _gone = false;\n mount(): void {\n this._t0 = Date.now();\n this.setAttribute('role', 'status');\n this.setAttribute('aria-label', this.str('label', 'Loading'));\n document.body?.setAttribute('aria-busy', 'true');\n if (this.flag('manual')) return;\n if (document.readyState === 'complete') this.done();\n else this.listen(window, 'load', () => this.done(), { once: true });\n }\n async done(): Promise<void> {\n if (this._gone) return;\n this._gone = true;\n const wait = Math.max(0, this.num('min', 600) - (Date.now() - this._t0));\n if (wait) await new Promise((r) => setTimeout(r, wait));\n const exit = this.reduced ? 'fade' : this.str('exit', 'fade');\n const frames: Record<string, Keyframe[]> = {\n fade: [{ opacity: 1 }, { opacity: 0 }],\n scale: [{ opacity: 1, transform: 'scale(1)' }, { opacity: 0, transform: 'scale(1.15)' }],\n 'slide-up': [{ transform: 'translateY(0)' }, { transform: 'translateY(-100%)' }],\n circle: [{ clipPath: 'circle(150% at 50% 50%)' }, { clipPath: 'circle(0% at 50% 50%)' }],\n };\n const a = this.motion(this, frames[exit] || frames.fade, { duration: this.reduced ? 200 : 550, easing: 'cubic-bezier(0.65, 0, 0.35, 1)', fill: 'forwards' });\n await a?.finished.catch(() => undefined);\n document.body?.removeAttribute('aria-busy');\n this.hidden = true;\n this.emit('done');\n }\n },\n { id: 'splash', text: css }\n );\n}\n","import { defineElement, type UsaElement } from '../base';\nimport css from './auto-skeleton.css?raw';\n\n/**\n * `<usa-auto-skeleton loading>` — automatic skeletons: while `loading` is\n * set, every text block, image, button and input inside is drawn as a\n * shimmering placeholder of its own size — no separate skeleton markup.\n * Remove `loading` (or set `.loading = false`) and the content fades in.\n * `aria-busy` while loading. Opt elements out with `data-no-skeleton`.\n * Reduced motion: static placeholders, no shimmer or fade.\n */\nexport interface UsaAutoSkeletonElement extends UsaElement {\n loading: boolean;\n}\n\nexport function defineAutoSkeleton(tag = 'usa-auto-skeleton'): CustomElementConstructor | undefined {\n return defineElement(\n tag,\n (Base) =>\n class UsaAutoSkeleton extends Base {\n static get observedAttributes(): string[] {\n return ['loading'];\n }\n get loading(): boolean {\n return this.flag('loading');\n }\n set loading(v: boolean) {\n this.setFlag('loading', v);\n }\n mount(): void {\n this.sync(false);\n }\n changed(): void {\n this.sync(true);\n }\n private sync(animate: boolean): void {\n if (this.loading) this.setAttribute('aria-busy', 'true');\n else {\n this.removeAttribute('aria-busy');\n if (animate && !this.reduced) this.motion(this, [{ opacity: 0.4 }, { opacity: 1 }], { duration: 300, easing: 'ease-out' });\n }\n }\n },\n { id: 'auto-skeleton', text: css }\n );\n}\n","import { defineElement, configureComponents, getMotionIntensity, type MotionIntensity, type UsaElement } from '../base';\nimport css from './motion-switch.css?raw';\n\nconst LEVELS: MotionIntensity[] = ['off', 'low', 'normal', 'high'];\nconst KEY = 'usa:motion';\n\n/**\n * Set the global motion intensity for every `<usa-*>` component:\n * `'off'` (like reduced motion), `'low'`, `'normal'` (default), `'high'`.\n * Sets `--usa-motion` and `data-usa-motion` on `<html>`; with `persist`\n * the choice is remembered (localStorage) and restored by `restoreMotionIntensity()`.\n */\nexport function setMotionIntensity(level: MotionIntensity, persist = false): void {\n if (!LEVELS.includes(level)) return;\n configureComponents({ motionIntensity: level });\n if (persist) {\n try {\n localStorage.setItem(KEY, level);\n } catch {\n /* private mode */\n }\n }\n if (typeof document !== 'undefined') document.dispatchEvent(new CustomEvent('usa:motion', { detail: { level } }));\n}\n\n/** Re-apply a persisted intensity (call early on page load). Returns it. */\nexport function restoreMotionIntensity(): MotionIntensity {\n try {\n const v = localStorage.getItem(KEY) as MotionIntensity | null;\n if (v && LEVELS.includes(v)) setMotionIntensity(v);\n } catch {\n /* ignore */\n }\n return getMotionIntensity();\n}\n\n/**\n * `<usa-motion-switch>` — a segmented control letting users choose the\n * app's motion intensity (Off · Low · Normal · High), persisted.\n * `role=\"radiogroup\"`; arrow keys move. Attributes: `labels` (comma list),\n * `label` (\"Motion\"). Events: `usa:change` (`{ level }`).\n */\nexport interface UsaMotionSwitchElement extends UsaElement {\n value: MotionIntensity;\n}\n\nexport function defineMotionSwitch(tag = 'usa-motion-switch'): CustomElementConstructor | undefined {\n return defineElement(\n tag,\n (Base) =>\n class UsaMotionSwitch extends Base {\n get value(): MotionIntensity {\n return getMotionIntensity();\n }\n set value(v: MotionIntensity) {\n setMotionIntensity(v, true);\n this.sync();\n }\n mount(): void {\n restoreMotionIntensity();\n const labels = this.str('labels', 'Off,Low,Normal,High').split(',');\n this.setAttribute('role', 'radiogroup');\n this.setAttribute('aria-label', this.str('label', 'Motion'));\n this.innerHTML = LEVELS.map((l, i) => `<button type=\"button\" role=\"radio\" data-level=\"${l}\">${labels[i] || l}</button><span hidden></span>`.replace('<span hidden></span>', '')).join('') + '<span class=\"usa-motion-thumb\" aria-hidden=\"true\"></span>';\n this.listen(this, 'click', (e: MouseEvent) => {\n const b = (e.target as Element).closest?.('[data-level]') as HTMLElement | null;\n if (b) this.pick(b.dataset.level as MotionIntensity);\n });\n this.listen(this, 'keydown', (e: KeyboardEvent) => {\n const i = LEVELS.indexOf(this.value);\n const n = e.key === 'ArrowRight' || e.key === 'ArrowDown' ? i + 1 : e.key === 'ArrowLeft' || e.key === 'ArrowUp' ? i - 1 : null;\n if (n === null) return;\n e.preventDefault();\n this.pick(LEVELS[(n + LEVELS.length) % LEVELS.length]);\n (this.querySelector('[aria-checked=\"true\"]') as HTMLElement)?.focus();\n });\n this.listen(document, 'usa:motion', () => this.sync());\n this.sync();\n }\n private pick(l: MotionIntensity): void {\n this.value = l;\n this.emit('change', { level: l });\n }\n private sync(): void {\n const v = this.value;\n const i = LEVELS.indexOf(v);\n this.style.setProperty('--usa-motion-i', String(i));\n this.querySelectorAll<HTMLElement>('[data-level]').forEach((b) => {\n const on = b.dataset.level === v;\n b.setAttribute('aria-checked', String(on));\n b.tabIndex = on ? 0 : -1;\n });\n }\n },\n { id: 'motion-switch', text: css }\n );\n}\n","import { prefersReducedMotion, adoptStyles } from '../base';\nimport css from './transitions.css?raw';\n\n/**\n * Page & app-wide transitions (v2.7), built on the View Transitions API\n * (Chromium: Chrome, Edge, Electron, WebView2) with graceful fallbacks.\n *\n * - `pageTransition(update, { effect })` — SPA route changes: `fade`,\n * `slide` (`slide-left` / `slide-right` / `slide-up`), `circle` (reveal\n * from `x`, `y`), `blinds`, `pixel` (stepped dissolve), `zoom`.\n * - `enableMpaTransitions(effect)` — the same effects for multi-page sites\n * (`@view-transition { navigation: auto }`); call it on every page.\n * - `themeTransition(apply, { x, y })` — a circle-reveal theme switch.\n *\n * Without View Transitions (Firefox, older Safari) or under reduced motion\n * the update runs immediately (`fade` falls back to a short cross-fade of\n * `fallback` when given).\n */\nexport const PAGE_EFFECTS = ['fade', 'slide', 'slide-left', 'slide-right', 'slide-up', 'circle', 'blinds', 'pixel', 'zoom'] as const;\nexport type PageEffect = (typeof PAGE_EFFECTS)[number];\n\nexport interface PageTransitionOptions {\n effect?: PageEffect;\n /** Circle origin in client px (default: viewport centre / last pointer). */\n x?: number;\n y?: number;\n /** Duration in ms (default 600). */\n duration?: number;\n /** Element to cross-fade when View Transitions are unavailable. */\n fallback?: Element | null;\n}\n\nlet lastPointer: [number, number] | null = null;\nfunction trackPointer(): void {\n if (typeof document === 'undefined' || (trackPointer as any).done) return;\n (trackPointer as any).done = true;\n document.addEventListener('pointerdown', (e) => (lastPointer = [e.clientX, e.clientY]), { capture: true, passive: true });\n}\n\n/** `true` when `document.startViewTransition` exists. */\nexport const supportsViewTransitions = (): boolean => typeof document !== 'undefined' && typeof (document as any).startViewTransition === 'function';\n\nfunction setVars(o: PageTransitionOptions): void {\n const d = document.documentElement;\n const W = window.innerWidth || 1024;\n const H = window.innerHeight || 768;\n const [x, y] = o.x !== undefined && o.y !== undefined ? [o.x, o.y] : lastPointer || [W / 2, H / 2];\n const r = Math.hypot(Math.max(x, W - x), Math.max(y, H - y));\n d.style.setProperty('--usa-pt-x', `${x}px`);\n d.style.setProperty('--usa-pt-y', `${y}px`);\n d.style.setProperty('--usa-pt-r', `${Math.ceil(r)}px`);\n d.style.setProperty('--usa-pt-duration', `${o.duration ?? 600}ms`);\n}\n\n/** Run `update` (sync or async) as an animated page transition. Resolves when it is done. */\nexport async function pageTransition(update: () => unknown, options: PageTransitionOptions = {}): Promise<void> {\n if (typeof document === 'undefined') {\n await update();\n return;\n }\n adoptStyles('page-transitions', css);\n trackPointer();\n const effect = options.effect || 'fade';\n if (prefersReducedMotion() || !supportsViewTransitions()) {\n await update();\n const f = options.fallback as HTMLElement | null | undefined;\n if (f && typeof f.animate === 'function' && !prefersReducedMotion()) await f.animate([{ opacity: 0 }, { opacity: 1 }], { duration: 200 }).finished.catch(() => undefined);\n return;\n }\n const d = document.documentElement;\n setVars(options);\n d.setAttribute('data-usa-pt', effect);\n try {\n const vt = (document as any).startViewTransition(() => update());\n await vt.finished;\n } finally {\n d.removeAttribute('data-usa-pt');\n }\n}\n\n/** Opt a multi-page site into cross-document view transitions with `effect`. */\nexport function enableMpaTransitions(effect: PageEffect = 'fade', duration = 450): void {\n if (typeof document === 'undefined') return;\n adoptStyles('page-transitions', css);\n adoptStyles('mpa-transitions', prefersReducedMotion() ? '' : '@view-transition{navigation:auto}');\n const d = document.documentElement;\n d.setAttribute('data-usa-pt', effect);\n setVars({ duration });\n}\n\n/**\n * Switch theme with a circle reveal from (`x`, `y`) (default: last pointer).\n * `apply` flips your theme (e.g. toggles a class / `data-theme`).\n */\nexport function themeTransition(apply: () => unknown, options: Omit<PageTransitionOptions, 'effect'> = {}): Promise<void> {\n return pageTransition(apply, { ...options, effect: 'circle', duration: options.duration ?? 650 });\n}\n","/**\n * use-scroll-animate/components/page — page & app-wide effects (v2.7).\n * Page transitions (`pageTransition()`, `enableMpaTransitions()`,\n * `themeTransition()`), `<usa-cursor>`, `smoothScroll()` / `scrollToTarget()`,\n * `<usa-fullpage>`, `<usa-loading-bar>` + `loadingBar`, `<usa-back-to-top>`,\n * `<usa-ambient>`, `<usa-splash>`, `<usa-auto-skeleton>` and the global motion\n * intensity (`setMotionIntensity()`, `<usa-motion-switch>`).\n */\nimport { defineCursor, type UsaCursorElement } from './cursor';\nimport { defineFullpage, type UsaFullpageElement } from './fullpage';\nimport { defineLoadingBar, type UsaLoadingBarElement } from './loading-bar';\nimport { defineBackToTop, type UsaBackToTopElement } from './back-to-top';\nimport { defineAmbient, type UsaAmbientElement } from './ambient';\nimport { defineSplash, type UsaSplashElement } from './splash';\nimport { defineAutoSkeleton, type UsaAutoSkeletonElement } from './auto-skeleton';\nimport { defineMotionSwitch, type UsaMotionSwitchElement } from './motion-switch';\n\nexport { defineCursor, defineFullpage, defineLoadingBar, defineBackToTop, defineAmbient, defineSplash, defineAutoSkeleton, defineMotionSwitch };\nexport { pageTransition, enableMpaTransitions, themeTransition, supportsViewTransitions, PAGE_EFFECTS } from './transitions';\nexport type { PageEffect, PageTransitionOptions } from './transitions';\nexport { smoothScroll, scrollToTarget } from './scroll';\nexport type { SmoothScrollOptions } from './scroll';\nexport { loadingBar } from './loading-bar';\nexport { CURSOR_MODES } from './cursor';\nexport type { CursorMode } from './cursor';\nexport { AMBIENT_EFFECTS } from './ambient';\nexport type { AmbientEffect } from './ambient';\nexport { setMotionIntensity, restoreMotionIntensity } from './motion-switch';\nexport { getMotionIntensity, MOTION_SCALE } from '../base';\nexport type { MotionIntensity } from '../base';\nexport type { UsaCursorElement, UsaFullpageElement, UsaLoadingBarElement, UsaBackToTopElement, UsaAmbientElement, UsaSplashElement, UsaAutoSkeletonElement, UsaMotionSwitchElement };\nexport { configureComponents, prefersReducedMotion } from '../base';\nexport type { ComponentsConfig, UsaElement } from '../base';\n\n/** Register every component of this category under its default tag. */\nexport function definePageComponents(): void {\n defineCursor();\n defineFullpage();\n defineLoadingBar();\n defineBackToTop();\n defineAmbient();\n defineSplash();\n defineAutoSkeleton();\n defineMotionSwitch();\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'usa-cursor': UsaCursorElement;\n 'usa-fullpage': UsaFullpageElement;\n 'usa-loading-bar': UsaLoadingBarElement;\n 'usa-back-to-top': UsaBackToTopElement;\n 'usa-ambient': UsaAmbientElement;\n 'usa-splash': UsaSplashElement;\n 'usa-auto-skeleton': UsaAutoSkeletonElement;\n 'usa-motion-switch': UsaMotionSwitchElement;\n }\n}\n","import { prefersReducedMotion, motionScale, applyFrame, raf, caf, now, clamp } from '../base';\n\n/**\n * Where a step starts on a timeline:\n * - a number: absolute time in ms\n * - `'>'` (default): when the previous step ends · `'<'`: when it starts\n * - `'+=200'` / `'-=200'`: after / overlapping the previous end\n * - `'<+=100'`: 100ms after the previous step's start\n * - `'intro'` / `'intro+=150'`: at (or relative to) a label\n */\nexport type TimelinePosition = number | string;\n\nexport interface TimelineStepOptions {\n /** Duration in ms (default: timeline default, 600). */\n duration?: number;\n /** CSS easing (default `cubic-bezier(0.22, 1, 0.36, 1)`). */\n easing?: string;\n /** Start position, see `TimelinePosition`. */\n at?: TimelinePosition;\n /** ms between targets when the selector matches several elements. */\n stagger?: number;\n}\n\nexport interface TimelineOptions {\n /** Defaults for every step. */\n defaults?: Pick<TimelineStepOptions, 'duration' | 'easing' | 'stagger'>;\n /** Playback rate (1 = normal). */\n speed?: number;\n /** Called after `play()` reaches the end (or the start when reversed). */\n onComplete?: () => void;\n /** Called on every frame with progress 0–1. */\n onUpdate?: (progress: number) => void;\n}\n\nexport interface ScrubOptions {\n /** Scroll offset (px) before the source's top reaches the viewport bottom where progress starts (JS engine only). */\n offset?: number;\n /** Smoothing 0–1 (0 = immediate, default 0). Smoothing needs the JS engine. */\n smooth?: number;\n /**\n * 4.1: which progress source drives the timeline.\n * - `'view'` (default): `source` moving through the viewport (CSS `ViewTimeline`, range `cover`).\n * - `'scroll'`: the scroll position of `source` itself (a scroll container; CSS `ScrollTimeline`).\n */\n source?: 'view' | 'scroll';\n /** 4.1: `'auto'` (default) uses the browser's native scroll-driven animations when available, `'js'` forces the fallback. */\n engine?: 'auto' | 'native' | 'js';\n /** 4.1: scroll axis, `'block'` (default) · `'inline'` · `'x'` · `'y'`. */\n axis?: 'block' | 'inline' | 'x' | 'y';\n}\n\n/** The function `scrub()` returns: call it to stop. `native` tells which engine runs it. */\nexport interface ScrubHandle {\n (): void;\n /** `true` when the browser's ScrollTimeline / ViewTimeline drives it (compositor, no JS per frame). */\n readonly native: boolean;\n}\n\n/** 4.1: whether `scrub()` can use native ScrollTimeline / ViewTimeline here. */\nexport function supportsNativeScrub(source: 'view' | 'scroll' = 'view'): boolean {\n const g = globalThis as any;\n return typeof g[source === 'scroll' ? 'ScrollTimeline' : 'ViewTimeline'] === 'function' && typeof g.Element?.prototype?.animate === 'function';\n}\n\nconst handle = (stop: () => void, native: boolean): ScrubHandle => Object.assign(stop, { native }) as ScrubHandle;\n\nexport interface Timeline {\n /** Total length in ms. */\n readonly duration: number;\n /** Label positions in ms. */\n readonly labels: Readonly<Record<string, number>>;\n /** Current playhead in ms. */\n readonly time: number;\n /** Add a step: animate `target` with keyframes or a preset name (`fade-up`, `scale`…). */\n to(target: string | Element | Element[] | NodeList, frames: Keyframe[] | string, options?: TimelineStepOptions): Timeline;\n /** Name a position (default: the current end). */\n label(name: string, at?: TimelinePosition): Timeline;\n /** Run `fn` when the playhead passes `at`. */\n call(fn: () => void, at?: TimelinePosition): Timeline;\n /** Play forwards from the playhead (from 0 when at the end). Resolves at the end. */\n play(from?: TimelinePosition): Promise<void>;\n /** Play backwards to 0. */\n reverse(): Promise<void>;\n pause(): Timeline;\n /** Jump to a time (ms) or label. */\n seek(to: TimelinePosition): Timeline;\n /** Get or set progress 0–1. */\n progress(p?: number): number;\n /**\n * Tie progress to scroll: `source` moving through the viewport (or, with\n * `{ source: 'scroll' }`, a scroll container's own position). Runs on native\n * ScrollTimeline / ViewTimeline when available (and no `smooth`, `offset`,\n * `call()` cues or `onUpdate` need JS), else on a rAF-throttled listener.\n * Returns a stop function with a `native` flag.\n */\n scrub(source: Element, options?: ScrubOptions): ScrubHandle;\n /** Stop and drop every animation (elements keep their last frame). */\n cancel(): void;\n}\n\n/** Keyframe presets usable by name in `to()` and `data-tl`. */\nexport const TIMELINE_PRESETS: Record<string, Keyframe[]> = {\n fade: [{ opacity: 0 }, { opacity: 1 }],\n 'fade-up': [{ opacity: 0, transform: 'translateY(24px)' }, { opacity: 1, transform: 'none' }],\n 'fade-down': [{ opacity: 0, transform: 'translateY(-24px)' }, { opacity: 1, transform: 'none' }],\n 'fade-left': [{ opacity: 0, transform: 'translateX(24px)' }, { opacity: 1, transform: 'none' }],\n 'fade-right': [{ opacity: 0, transform: 'translateX(-24px)' }, { opacity: 1, transform: 'none' }],\n scale: [{ opacity: 0, transform: 'scale(0.85)' }, { opacity: 1, transform: 'none' }],\n blur: [{ opacity: 0, filter: 'blur(12px)' }, { opacity: 1, filter: 'blur(0)' }],\n rotate: [{ opacity: 0, transform: 'rotate(-12deg) scale(0.9)' }, { opacity: 1, transform: 'none' }],\n 'clip-up': [{ clipPath: 'inset(100% 0 0 0)' }, { clipPath: 'inset(0 0 0 0)' }],\n 'clip-right': [{ clipPath: 'inset(0 100% 0 0)' }, { clipPath: 'inset(0 0 0 0)' }],\n};\n\n/** Resolve a position against the previous step and labels (pure). */\nexport function resolvePosition(\n pos: TimelinePosition | undefined,\n end: number,\n prevStart: number,\n labels: Record<string, number> = {}\n): number {\n if (pos === undefined || pos === '' || pos === '>') return end;\n if (typeof pos === 'number') return Math.max(0, pos);\n const s = String(pos).trim();\n if (/^-?\\d+(\\.\\d+)?$/.test(s)) return Math.max(0, Number(s));\n const m = /^(<|>|[A-Za-z_][\\w-]*)?\\s*(?:([+-])=\\s*(\\d+(?:\\.\\d+)?))?$/.exec(s);\n if (!m) return end;\n const base = m[1] === '<' ? prevStart : m[1] === '>' || !m[1] ? end : labels[m[1]] ?? end;\n const delta = m[2] ? (m[2] === '-' ? -1 : 1) * Number(m[3]) : 0;\n return Math.max(0, base + delta);\n}\n\nconst toEls = (t: string | Element | Element[] | NodeList): Element[] =>\n typeof t === 'string' ? (typeof document === 'undefined' ? [] : Array.from(document.querySelectorAll(t))) : t instanceof Element ? [t] : Array.from(t as ArrayLike<Element>);\n\ninterface Step { el: Element; frames: Keyframe[]; start: number; duration: number; easing: string; anim?: Animation | null }\ninterface Cue { fn: () => void; at: number }\n\n/**\n * Choreograph animations on one clock: chain, overlap, label, seek, reverse and\n * scrub them with scroll. Built on WAAPI (paused animations driven by one\n * playhead); without WAAPI or under reduced motion it jumps to the end state.\n *\n * @example\n * const tl = timeline({ defaults: { duration: 500 } })\n * .to('.title', 'fade-up')\n * .label('cards')\n * .to('.card', 'scale', { stagger: 80, at: '-=200' })\n * .to('.cta', [{ opacity: 0 }, { opacity: 1 }], { at: 'cards+=400' });\n * tl.play(); // or tl.scrub(document.querySelector('.hero'))\n */\nexport function timeline(options: TimelineOptions = {}): Timeline {\n const d = { duration: 600, easing: 'cubic-bezier(0.22, 1, 0.36, 1)', stagger: 0, ...options.defaults };\n const steps: Step[] = [];\n const cues: Cue[] = [];\n const labels: Record<string, number> = {};\n let end = 0;\n let prevStart = 0;\n let t = 0;\n let frame = 0;\n let dir = 1;\n let settle: (() => void) | undefined;\n let built = false;\n\n const total = () => Math.max(end, ...cues.map((c) => c.at), 0);\n const build = () => {\n if (built) return;\n built = true;\n for (const s of steps) {\n if (typeof (s.el as HTMLElement).animate !== 'function') { s.anim = null; continue; }\n s.anim = (s.el as HTMLElement).animate(s.frames, { duration: s.duration, delay: s.start, easing: s.easing, fill: 'both' });\n s.anim.pause?.();\n }\n };\n const render = (to: number, from: number) => {\n build();\n t = clamp(to, 0, total());\n for (const s of steps) {\n if (s.anim) s.anim.currentTime = t;\n else applyFrame(s.el as HTMLElement, s.frames[t >= s.start ? s.frames.length - 1 : 0]);\n }\n for (const c of cues) if ((from < c.at && t >= c.at) || (from > c.at && t <= c.at)) c.fn();\n options.onUpdate?.(total() ? t / total() : 1);\n };\n const stop = () => {\n if (frame) caf(frame);\n frame = 0;\n };\n const run = (direction: number): Promise<void> => {\n stop();\n settle?.();\n dir = direction;\n const target = dir > 0 ? total() : 0;\n const k = motionScale();\n if (prefersReducedMotion() || k === 0 || !total()) {\n render(target, t);\n options.onComplete?.();\n return Promise.resolve();\n }\n const rate = (options.speed ?? 1) / k;\n return new Promise<void>((resolve) => {\n settle = () => { settle = undefined; resolve(); };\n let last = now();\n const loop = () => {\n const n = now();\n const next = t + (n - last) * rate * dir;\n last = n;\n render(next, t);\n if ((dir > 0 && t >= target) || (dir < 0 && t <= 0)) {\n frame = 0;\n options.onComplete?.();\n settle?.();\n return;\n }\n frame = raf(loop);\n };\n frame = raf(loop);\n });\n };\n\n const api: Timeline = {\n get duration() { return total(); },\n get labels() { return { ...labels }; },\n get time() { return t; },\n to(target, frames, o = {}) {\n const kf = typeof frames === 'string' ? TIMELINE_PRESETS[frames] || TIMELINE_PRESETS.fade : frames;\n const start = resolvePosition(o.at, end, prevStart, labels);\n const duration = o.duration ?? d.duration;\n const stagger = o.stagger ?? d.stagger;\n let last = start;\n toEls(target).forEach((el, i) => {\n const s = start + i * stagger;\n steps.push({ el, frames: kf, start: s, duration, easing: o.easing ?? d.easing });\n last = Math.max(last, s + duration);\n });\n prevStart = start;\n end = Math.max(end, last);\n built = false;\n steps.forEach((s) => s.anim?.cancel?.());\n return api;\n },\n label(name, at) {\n labels[name] = resolvePosition(at, end, prevStart, labels);\n return api;\n },\n call(fn, at) {\n cues.push({ fn, at: resolvePosition(at, end, prevStart, labels) });\n return api;\n },\n play(from) {\n if (from !== undefined) render(resolvePosition(from, 0, 0, labels), t);\n else if (t >= total()) render(0, -1);\n return run(1);\n },\n reverse() {\n return run(-1);\n },\n pause() {\n stop();\n return api;\n },\n seek(to) {\n stop();\n render(resolvePosition(to, 0, 0, labels), t);\n return api;\n },\n progress(p) {\n if (p !== undefined) api.seek(clamp(p, 0, 1) * total());\n return total() ? t / total() : 0;\n },\n scrub(source, o = {}) {\n stop();\n if (prefersReducedMotion() || typeof window === 'undefined') {\n render(total(), t);\n return handle(() => {}, false);\n }\n const mode = o.source ?? 'view';\n const axis = o.axis ?? 'block';\n const needsJs = !!o.smooth || !!o.offset || cues.length > 0 || !!options.onUpdate || o.engine === 'js';\n if (!needsJs && total() > 0 && supportsNativeScrub(mode) && steps.every((st) => typeof (st.el as HTMLElement).animate === 'function')) {\n // Native: one scroll-driven animation per step, its slice of the\n // timeline mapped onto the scroll range (`cover` for a view timeline).\n const g = globalThis as any;\n const tl = mode === 'scroll' ? new g.ScrollTimeline({ source, axis }) : new g.ViewTimeline({ subject: source, axis });\n const T = total();\n steps.forEach((st) => st.anim?.cancel?.());\n built = false;\n const pct = (ms: number) => `${((ms / T) * 100).toFixed(3)}%`;\n const live = steps.map((st) => {\n const range = mode === 'view' ? { rangeStart: `cover ${pct(st.start)}`, rangeEnd: `cover ${pct(st.start + st.duration)}` } : {};\n const timing: any = { easing: st.easing, fill: 'both', timeline: tl, ...range };\n if (mode === 'scroll') Object.assign(timing, { duration: 'auto', rangeStart: pct(st.start), rangeEnd: pct(st.start + st.duration) });\n return (st.el as HTMLElement).animate(st.frames, timing);\n });\n return handle(() => {\n live.forEach((a) => a.cancel());\n render(t, t);\n }, true);\n }\n let id = 0;\n let cur = t;\n const scroller = mode === 'scroll' ? (source as HTMLElement) : null;\n const progressNow = () => {\n const x = axis === 'x' || axis === 'inline';\n if (scroller) {\n const max = x ? scroller.scrollWidth - scroller.clientWidth : scroller.scrollHeight - scroller.clientHeight;\n return clamp((x ? scroller.scrollLeft : scroller.scrollTop) / (max || 1), 0, 1);\n }\n const r = source.getBoundingClientRect();\n const vh = (x ? window.innerWidth : window.innerHeight) || 1;\n const start = x ? r.left : r.top;\n const size = x ? r.width : r.height;\n return clamp((vh + (o.offset ?? 0) - start) / (vh + size || 1), 0, 1);\n };\n const update = () => {\n id = 0;\n const goal = progressNow() * total();\n const sm = clamp(o.smooth ?? 0, 0, 0.95);\n cur = sm ? cur + (goal - cur) * (1 - sm) : goal;\n render(cur, t);\n if (sm && Math.abs(goal - cur) > 0.5) id = raf(update);\n };\n const onScroll = () => { if (!id) id = raf(update); };\n const target: EventTarget = scroller || window;\n target.addEventListener('scroll', onScroll, { passive: true });\n window.addEventListener('resize', onScroll, { passive: true });\n update();\n return handle(() => {\n target.removeEventListener('scroll', onScroll);\n window.removeEventListener('resize', onScroll);\n if (id) caf(id);\n }, false);\n },\n cancel() {\n stop();\n settle?.();\n steps.forEach((s) => s.anim?.cancel?.());\n built = false;\n },\n };\n return api;\n}\n","import { defineElement, type UsaElement } from '../base';\nimport { timeline, TIMELINE_PRESETS, type Timeline } from './core';\nimport css from './timeline.css?raw';\n\n/**\n * `<usa-timeline>` — declarative choreography. Every descendant with\n * `data-tl=\"<preset>\"` becomes a step, in document order; `data-at`\n * (`'-=200'`, `'<'`, `'label+=100'`, ms), `data-duration` and `data-label`\n * fine-tune it.\n *\n * Attributes: `trigger` (`view` default · `click` · `manual`), `scrub`\n * (progress follows scroll instead of playing), `overlap` (ms each step\n * overlaps the previous, default 0), `duration` (600), `stagger` (ms),\n * `repeat` (replay every time it enters the viewport). 4.1: `scrub` runs on native\n * ScrollTimeline / ViewTimeline when supported (`data-native` is set); `scrub=\"js\"`,\n * `scrub=\"scroll\"` and `smooth` tune it. Methods: `play()`,\n * `reverse()`, `seek(t)`; property `timeline`. Event `usa:complete`.\n * Reduced motion: steps appear in their final state.\n */\nexport interface UsaTimelineElement extends UsaElement {\n readonly timeline: Timeline | null;\n play(): Promise<void>;\n reverse(): Promise<void>;\n seek(to: number | string): void;\n}\n\nexport function defineTimeline(tag = 'usa-timeline'): CustomElementConstructor | undefined {\n return defineElement(\n tag,\n (Base) =>\n class UsaTimeline extends Base {\n static get observedAttributes(): string[] {\n return ['scrub', 'trigger', 'overlap'];\n }\n private _tl: Timeline | null = null;\n\n get timeline(): Timeline | null {\n return this._tl;\n }\n\n play(): Promise<void> {\n return this._tl ? this._tl.play(0).then(() => void this.emit('complete')) : Promise.resolve();\n }\n\n reverse(): Promise<void> {\n return this._tl ? this._tl.reverse() : Promise.resolve();\n }\n\n seek(to: number | string): void {\n this._tl?.seek(to);\n }\n\n mount(): void {\n const overlap = this.num('overlap', 0);\n const tl = (this._tl = timeline({ defaults: { duration: this.num('duration', 600), stagger: this.num('stagger', 0) } }));\n this.querySelectorAll<HTMLElement>('[data-tl]').forEach((el, i) => {\n if (el.dataset.label) tl.label(el.dataset.label);\n const name = el.dataset.tl || 'fade';\n tl.to(el, TIMELINE_PRESETS[name] ? name : 'fade', {\n at: el.dataset.at ?? (i && overlap ? `-=${overlap}` : undefined),\n duration: el.dataset.duration ? Number(el.dataset.duration) : undefined,\n });\n });\n this.onCleanup(() => tl.cancel());\n if (this.reduced) {\n tl.seek(tl.duration);\n return;\n }\n if (this.flag('scrub')) {\n // 4.1: native ScrollTimeline / ViewTimeline when available; `smooth`\n // (0–0.95) or `scrub=\"js\"` opt into the JS engine, `scrub=\"scroll\"`\n // follows this element's own scroll position.\n const v = this.str('scrub');\n const stop = tl.scrub(this, { smooth: this.num('smooth', 0), engine: v === 'js' ? 'js' : 'auto', source: v === 'scroll' ? 'scroll' : 'view' });\n this.toggleAttribute('data-native', stop.native);\n this.onCleanup(stop);\n return;\n }\n const trigger = this.str('trigger', 'view');\n if (trigger === 'click') {\n // 4.0.1: show the finished composition until the first click\n // (it used to sit invisible at t=0); Enter / Space replay it too.\n tl.seek(tl.duration);\n this.listen(this, 'click', () => void this.play());\n this.listen(this, 'keydown', (e: KeyboardEvent) => {\n if (e.target === this && (e.key === 'Enter' || e.key === ' ')) {\n e.preventDefault();\n void this.play();\n }\n });\n if (!this.hasAttribute('tabindex')) this.tabIndex = 0;\n return;\n }\n tl.seek(0);\n if (trigger === 'view') {\n let played = false;\n this.inView((v) => {\n if (v && (!played || this.flag('repeat'))) {\n played = true;\n void this.play();\n } else if (!v && this.flag('repeat')) tl.seek(0);\n }, { threshold: 0.2 });\n }\n }\n\n unmount(): void {\n this._tl = null;\n }\n },\n { id: 'timeline', text: css }\n );\n}\n","/**\n * use-scroll-animate/components/timeline — choreography (v3.1).\n * `timeline()` chains, overlaps, labels, seeks, reverses and scroll-scrubs\n * WAAPI animations on one playhead; `<usa-timeline>` builds one from\n * `data-tl` children.\n */\nimport { defineTimeline, type UsaTimelineElement } from './timeline-el';\n\nexport { defineTimeline };\nexport { timeline, resolvePosition, TIMELINE_PRESETS, supportsNativeScrub } from './core';\nexport type { Timeline, TimelineOptions, TimelineStepOptions, TimelinePosition, ScrubOptions, ScrubHandle } from './core';\nexport type { UsaTimelineElement };\nexport { configureComponents, prefersReducedMotion } from '../base';\nexport type { ComponentsConfig, UsaElement } from '../base';\n\n/** Register every component of this category under its default tag. */\nexport function defineTimelineComponents(): void {\n defineTimeline();\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'usa-timeline': UsaTimelineElement;\n }\n}\n","import { clamp } from '../base';\n\nexport interface PanState {\n /** Offset from the gesture start (px). */\n dx: number;\n dy: number;\n /** Velocity (px/s). */\n vx: number;\n vy: number;\n first: boolean;\n last: boolean;\n event: Event;\n}\nexport type SwipeDirection = 'left' | 'right' | 'up' | 'down';\nexport interface SwipeState { direction: SwipeDirection; velocity: number; dx: number; dy: number }\nexport interface PinchState { scale: number; /** Midpoint of the two pointers (client px). */ x: number; y: number; first: boolean; last: boolean }\nexport interface PressState { x: number; y: number }\n\nexport interface GestureHandlers {\n onPan?: (s: PanState) => void;\n onSwipe?: (s: SwipeState) => void;\n onPinch?: (s: PinchState) => void;\n onLongPress?: (s: PressState) => void;\n onTap?: (s: PressState) => void;\n onDoubleTap?: (s: PressState) => void;\n}\n\nexport interface GestureOptions {\n /** Restrict panning to an axis. */\n axis?: 'x' | 'y';\n /** Movement (px) before a pan starts (default 4). */\n threshold?: number;\n /** Minimum distance (px, default 40) and speed (px/s, default 300) for a swipe. */\n swipeDistance?: number;\n swipeVelocity?: number;\n /** Long-press delay (ms, default 500). */\n longPress?: number;\n /** Ctrl/⌘ + wheel (trackpad pinch) counts as pinch (default true). */\n wheelPinch?: boolean;\n}\n\n/** The swipe a pointer release represents, or `null` (pure). */\nexport function swipeDirection(dx: number, dy: number, vx: number, vy: number, o: { distance?: number; velocity?: number; axis?: 'x' | 'y' } = {}): SwipeState | null {\n const dist = o.distance ?? 40;\n const vel = o.velocity ?? 300;\n const horiz = o.axis === 'x' || (o.axis !== 'y' && Math.abs(dx) >= Math.abs(dy));\n const d = horiz ? dx : dy;\n const v = horiz ? vx : vy;\n if (Math.abs(d) < dist && Math.abs(v) < vel * 2) return null;\n if (Math.abs(v) < vel && Math.abs(d) < dist * 3) return null;\n const direction: SwipeDirection = horiz ? (d > 0 ? 'right' : 'left') : d > 0 ? 'down' : 'up';\n return { direction, velocity: Math.abs(v), dx, dy };\n}\n\n/** Scale between two pointer distances, clamped to [min, max] (pure). */\nexport function pinchScale(startDistance: number, distance: number, base = 1, min = 0.5, max = 4): number {\n if (!startDistance) return base;\n return clamp(base * (distance / startDistance), min, max);\n}\n\ntype P = { x: number; y: number };\nconst pid = (e: any): number => (typeof e.pointerId === 'number' ? e.pointerId : 1);\n\n/**\n * One recognizer for pan, swipe, pinch (two pointers or Ctrl + wheel),\n * long-press, tap and double-tap, with velocities ready to hand to a spring\n * (`createSpring().set(target, velocity)`). Works with mouse, touch and pen\n * through Pointer Events. Returns a cleanup function.\n *\n * @example\n * const x = createSpring({ onUpdate: (v) => (card.style.translate = `${v}px`) });\n * gesture(card, {\n * onPan: ({ dx, last, vx }) => (last ? x.set(0, vx) : x.jump(dx)),\n * onSwipe: ({ direction }) => dismiss(direction),\n * }, { axis: 'x' });\n */\nexport function gesture(el: HTMLElement, h: GestureHandlers, o: GestureOptions = {}): () => void {\n const pts = new Map<number, P>();\n let start: P = { x: 0, y: 0 };\n let last: P & { t: number } = { x: 0, y: 0, t: 0 };\n let vx = 0;\n let vy = 0;\n let panning = false;\n let pinch: { d0: number; first: boolean } | null = null;\n let pinchScaleNow = 1;\n let press: ReturnType<typeof setTimeout> | undefined;\n let pressed = false;\n let lastTap = -1e9;\n const th = o.threshold ?? 4;\n const dist = () => {\n const [a, b] = [...pts.values()];\n return Math.hypot(a.x - b.x, a.y - b.y);\n };\n const mid = () => {\n const [a, b] = [...pts.values()];\n return { x: (a.x + b.x) / 2, y: (a.y + b.y) / 2 };\n };\n const t = (e: Event) => (e.timeStamp || Date.now());\n\n const down = (e: PointerEvent) => {\n pts.set(pid(e), { x: e.clientX, y: e.clientY });\n try { el.setPointerCapture?.(pid(e)); } catch { /* jsdom / synthetic */ }\n if (pts.size === 2 && h.onPinch) {\n clearTimeout(press);\n if (panning) h.onPan?.({ dx: last.x - start.x, dy: last.y - start.y, vx: 0, vy: 0, first: false, last: true, event: e });\n panning = false;\n pinch = { d0: dist(), first: true };\n return;\n }\n if (pts.size > 1) return;\n start = { x: e.clientX, y: e.clientY };\n last = { ...start, t: t(e) };\n vx = vy = 0;\n pressed = false;\n if (h.onLongPress) press = setTimeout(() => { pressed = true; h.onLongPress?.({ x: start.x, y: start.y }); }, o.longPress ?? 500);\n };\n const move = (e: PointerEvent) => {\n if (!pts.has(pid(e))) return;\n pts.set(pid(e), { x: e.clientX, y: e.clientY });\n if (pinch && pts.size >= 2) {\n const m = mid();\n pinchScaleNow = pinchScale(pinch.d0, dist(), 1, 0.05, 20);\n h.onPinch?.({ scale: pinchScaleNow, x: m.x, y: m.y, first: pinch.first, last: false });\n pinch.first = false;\n return;\n }\n const dx = e.clientX - start.x;\n const dy = e.clientY - start.y;\n const dt = Math.max(1, t(e) - last.t) / 1000;\n vx = (e.clientX - last.x) / dt;\n vy = (e.clientY - last.y) / dt;\n last = { x: e.clientX, y: e.clientY, t: t(e) };\n if (!panning) {\n const off = o.axis === 'x' ? Math.abs(dx) : o.axis === 'y' ? Math.abs(dy) : Math.hypot(dx, dy);\n if (off < th) return;\n clearTimeout(press);\n if (o.axis && Math.abs(o.axis === 'x' ? dy : dx) > off) { pts.delete(pid(e)); return; } // wrong axis: let the page scroll\n panning = true;\n h.onPan?.({ dx: o.axis === 'y' ? 0 : dx, dy: o.axis === 'x' ? 0 : dy, vx, vy, first: true, last: false, event: e });\n return;\n }\n if (e.cancelable) e.preventDefault();\n h.onPan?.({ dx: o.axis === 'y' ? 0 : dx, dy: o.axis === 'x' ? 0 : dy, vx, vy, first: false, last: false, event: e });\n };\n const up = (e: PointerEvent) => {\n if (!pts.has(pid(e))) return;\n pts.delete(pid(e));\n clearTimeout(press);\n if (pinch) {\n if (pts.size < 2) {\n h.onPinch?.({ scale: pinchScaleNow, ...start, first: false, last: true });\n pinch = null;\n pts.clear();\n }\n return;\n }\n const dx = e.clientX - start.x;\n const dy = e.clientY - start.y;\n if (panning) {\n panning = false;\n if (t(e) - last.t > 80) vx = vy = 0; // paused before release\n h.onPan?.({ dx: o.axis === 'y' ? 0 : dx, dy: o.axis === 'x' ? 0 : dy, vx, vy, first: false, last: true, event: e });\n const s = swipeDirection(dx, dy, vx, vy, { distance: o.swipeDistance, velocity: o.swipeVelocity, axis: o.axis });\n if (s) h.onSwipe?.(s);\n return;\n }\n if (pressed || e.type === 'pointercancel') return;\n const p = { x: e.clientX, y: e.clientY };\n const n = t(e);\n if (h.onDoubleTap && n - lastTap < 300) { lastTap = -1e9; h.onDoubleTap(p); return; }\n lastTap = n;\n h.onTap?.(p);\n };\n const wheel = (e: WheelEvent) => {\n if (!h.onPinch || o.wheelPinch === false || !e.ctrlKey) return;\n e.preventDefault();\n const s = Math.exp(-e.deltaY / 100);\n h.onPinch({ scale: s, x: e.clientX, y: e.clientY, first: true, last: true });\n };\n const opts: AddEventListenerOptions = { passive: false };\n el.addEventListener('pointerdown', down as EventListener);\n el.addEventListener('pointermove', move as EventListener, opts);\n el.addEventListener('pointerup', up as EventListener);\n el.addEventListener('pointercancel', up as EventListener);\n el.addEventListener('wheel', wheel as EventListener, opts);\n if (o.axis && !el.style.touchAction) el.style.touchAction = o.axis === 'x' ? 'pan-y' : 'pan-x';\n else if (!o.axis && !el.style.touchAction && (h.onPan || h.onPinch)) el.style.touchAction = 'none';\n return () => {\n clearTimeout(press);\n el.removeEventListener('pointerdown', down as EventListener);\n el.removeEventListener('pointermove', move as EventListener, opts);\n el.removeEventListener('pointerup', up as EventListener);\n el.removeEventListener('pointercancel', up as EventListener);\n el.removeEventListener('wheel', wheel as EventListener, opts);\n };\n}\n","import { defineElement, type UsaElement } from '../base';\nimport { createSpring, type SpringValue } from '../physics/spring';\nimport { gesture, type SwipeDirection } from './core';\nimport css from './gesture.css?raw';\n\n/**\n * `<usa-swipeable>` — swipe-to-dismiss / swipe actions. The content follows\n * the finger (rubber-banded past `distance`), flies out on a swipe or a drag\n * past `distance`, otherwise springs home with the release velocity.\n *\n * Attributes: `axis` (`x` default · `y`), `distance` (px, 120), `preset`\n * (spring), `dismiss` (remove the element after flying out), `disabled`.\n * Keyboard: Delete/Backspace dismisses, ←/→ swipe. Events `usa:swipe`\n * (`{ direction }`, cancelable), `usa:dismiss`. Methods `swipe(dir)`, `reset()`.\n * Reduced motion: no follow / fly-out animation, events still fire.\n */\nexport interface UsaSwipeableElement extends UsaElement {\n swipe(direction: SwipeDirection): void;\n reset(): void;\n readonly offset: number;\n}\n\nexport function defineSwipeable(tag = 'usa-swipeable'): CustomElementConstructor | undefined {\n return defineElement(\n tag,\n (Base) =>\n class UsaSwipeable extends Base {\n static get observedAttributes(): string[] {\n return ['axis', 'disabled'];\n }\n private _s!: SpringValue;\n private _off = 0;\n\n get offset(): number {\n return this._off;\n }\n\n private put(v: number): void {\n this._off = v;\n this.style.setProperty('--usa-swipe', `${v}px`);\n this.style.setProperty('--usa-swipe-p', String(Math.min(1, Math.abs(v) / this.num('distance', 120))));\n }\n\n swipe(direction: SwipeDirection): void {\n if (!this.emit('swipe', { direction })) return this.reset();\n const sign = direction === 'left' || direction === 'up' ? -1 : 1;\n const far = sign * ((this.str('axis', 'x') === 'y' ? this.offsetHeight : this.offsetWidth) + 80 || 600);\n const done = () => {\n this.emit('dismiss', { direction });\n if (this.flag('dismiss')) this.remove();\n };\n if (this.reduced) {\n this.put(0);\n return done();\n }\n this.setAttribute('data-gone', '');\n this._s = createSpring({ spring: 'stiff', value: this._off, onUpdate: (v) => this.put(v), onRest: done });\n this._s.set(far, sign * 1500);\n }\n\n reset(): void {\n this.removeAttribute('data-gone');\n if (this.reduced) return this.put(0);\n this._s.set(0);\n }\n\n mount(): void {\n this._s = createSpring({ spring: this.str('preset', 'default'), onUpdate: (v) => this.put(v) });\n if (!this.hasAttribute('tabindex')) this.tabIndex = 0;\n const y = this.str('axis', 'x') === 'y';\n const max = () => this.num('distance', 120);\n this.onCleanup(\n gesture(this, {\n onPan: ({ dx, dy, vx, vy, last }) => {\n if (this.flag('disabled')) return;\n const d = y ? dy : dx;\n if (!last) {\n this._s.stop();\n if (!this.reduced) this.put(Math.abs(d) > max() ? Math.sign(d) * (max() + (Math.abs(d) - max()) * 0.35) : d);\n return;\n }\n if (Math.abs(d) > max()) this.swipe(y ? (d > 0 ? 'down' : 'up') : d > 0 ? 'right' : 'left');\n else if (!this.hasAttribute('data-gone')) {\n if (this.reduced) this.put(0);\n else this._s.set(0, y ? vy : vx);\n }\n },\n onSwipe: ({ direction }) => {\n if (this.flag('disabled') || this.hasAttribute('data-gone')) return;\n if (y === (direction === 'up' || direction === 'down')) this.swipe(direction);\n },\n }, { axis: y ? 'y' : 'x' })\n );\n this.listen(this, 'keydown', (e: KeyboardEvent) => {\n if (this.flag('disabled')) return;\n const map: Record<string, SwipeDirection> = y ? { ArrowUp: 'up', ArrowDown: 'down' } : { ArrowLeft: 'left', ArrowRight: 'right' };\n if (e.key === 'Delete' || e.key === 'Backspace') this.swipe(y ? 'up' : 'left');\n else if (map[e.key]) this.swipe(map[e.key]);\n else return;\n e.preventDefault();\n });\n }\n\n unmount(): void {\n this._s?.stop();\n }\n },\n { id: 'gesture', text: css }\n );\n}\n","import { defineElement, clamp, type UsaElement } from '../base';\nimport { createSpring, type SpringValue } from '../physics/spring';\nimport { gesture } from './core';\nimport css from './gesture.css?raw';\n\n/**\n * `<usa-pinch-zoom>` — pinch (two fingers or Ctrl/⌘ + wheel / trackpad\n * pinch) to zoom its content, pan while zoomed, double-tap to toggle zoom;\n * scale and position spring back inside the bounds on release.\n *\n * Attributes: `min` (1), `max` (4), `double-tap` (zoom level, 2), `preset`.\n * Keyboard: `+` / `-` / `0`. Property `scale`, method `zoomTo(scale)`.\n * Event `usa:zoom` (`{ scale }`). Reduced motion: zoom changes instantly.\n */\nexport interface UsaPinchZoomElement extends UsaElement {\n readonly scale: number;\n zoomTo(scale: number): void;\n}\n\nexport function definePinchZoom(tag = 'usa-pinch-zoom'): CustomElementConstructor | undefined {\n return defineElement(\n tag,\n (Base) =>\n class UsaPinchZoom extends Base {\n private _k!: SpringValue;\n private _x!: SpringValue;\n private _y!: SpringValue;\n private _v = { k: 1, x: 0, y: 0 };\n\n get scale(): number {\n return this._v.k;\n }\n\n private paint(): void {\n const { k, x, y } = this._v;\n this.style.setProperty('--usa-zoom', String(k));\n this.style.setProperty('--usa-zoom-x', `${x}px`);\n this.style.setProperty('--usa-zoom-y', `${y}px`);\n this.toggleAttribute('data-zoomed', k > 1.01);\n }\n\n private bound(k: number, x: number, y: number) {\n const w = (this.clientWidth * (k - 1)) / 2;\n const h = (this.clientHeight * (k - 1)) / 2;\n return { x: clamp(x, -w, w), y: clamp(y, -h, h) };\n }\n\n zoomTo(scale: number): void {\n const k = clamp(scale, this.num('min', 1), this.num('max', 4));\n const b = this.bound(k, this._v.x, this._v.y);\n if (this.reduced) {\n this._v = { k, ...b };\n this.paint();\n } else {\n this._k.set(k);\n this._x.set(b.x);\n this._y.set(b.y);\n }\n this.emit('zoom', { scale: k });\n }\n\n mount(): void {\n const preset = this.str('preset', 'gentle');\n this._k = createSpring({ spring: preset, value: this._v.k, onUpdate: (v) => ((this._v.k = v), this.paint()) });\n this._x = createSpring({ spring: preset, value: this._v.x, onUpdate: (v) => ((this._v.x = v), this.paint()) });\n this._y = createSpring({ spring: preset, value: this._v.y, onUpdate: (v) => ((this._v.y = v), this.paint()) });\n if (!this.hasAttribute('tabindex')) this.tabIndex = 0;\n let base = 1;\n let ox = 0;\n let oy = 0;\n this.onCleanup(\n gesture(this, {\n onPinch: ({ scale, first, last }) => {\n if (first) base = this._v.k;\n const k = clamp(base * scale, this.num('min', 1) * 0.7, this.num('max', 4) * 1.3);\n if (last) return this.zoomTo(k);\n this._k.jump(k);\n },\n onPan: ({ dx, dy, vx, vy, first, last }) => {\n if (this._v.k <= 1.01) return;\n if (first) ((ox = this._v.x), (oy = this._v.y));\n if (!last) {\n this._x.jump(ox + dx);\n this._y.jump(oy + dy);\n return;\n }\n const b = this.bound(this._v.k, ox + dx + vx * 0.15, oy + dy + vy * 0.15);\n this._x.set(b.x, vx);\n this._y.set(b.y, vy);\n },\n onDoubleTap: () => this.zoomTo(this._v.k > 1.01 ? 1 : this.num('double-tap', 2)),\n })\n );\n this.listen(this, 'keydown', (e: KeyboardEvent) => {\n if (e.key === '+' || e.key === '=') this.zoomTo(this._v.k * 1.25);\n else if (e.key === '-') this.zoomTo(this._v.k / 1.25);\n else if (e.key === '0') this.zoomTo(1);\n else return;\n e.preventDefault();\n });\n this.paint();\n }\n\n unmount(): void {\n [this._k, this._x, this._y].forEach((s) => s?.stop());\n }\n },\n { id: 'gesture', text: css }\n );\n}\n","/**\n * use-scroll-animate/components/gesture — unified gestures (v3.2).\n * `gesture()` recognises pan, swipe, pinch, long-press, tap and double-tap\n * with release velocities for springs; `<usa-swipeable>` (swipe-to-dismiss)\n * and `<usa-pinch-zoom>` are built on it.\n */\nimport { defineSwipeable, type UsaSwipeableElement } from './swipeable';\nimport { definePinchZoom, type UsaPinchZoomElement } from './pinch-zoom';\n\nexport { defineSwipeable, definePinchZoom };\nexport { gesture, swipeDirection, pinchScale } from './core';\nexport type { GestureHandlers, GestureOptions, PanState, SwipeState, SwipeDirection, PinchState, PressState } from './core';\nexport type { UsaSwipeableElement, UsaPinchZoomElement };\nexport { configureComponents, prefersReducedMotion } from '../base';\nexport type { ComponentsConfig, UsaElement } from '../base';\n\n/** Register every component of this category under its default tag. */\nexport function defineGestureComponents(): void {\n defineSwipeable();\n definePinchZoom();\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'usa-swipeable': UsaSwipeableElement;\n 'usa-pinch-zoom': UsaPinchZoomElement;\n }\n}\n","import { prefersReducedMotion, motionScale, raf, caf, now, clamp } from '../base';\n\nconst NUM = /-?(?:\\d+\\.?\\d*|\\.\\d+)(?:e[-+]?\\d+)?/gi;\n\n/** `true` when two path strings share the same commands (so their numbers can be interpolated). */\nexport function pathsCompatible(a: string, b: string): boolean {\n return a.replace(NUM, '#').replace(/[\\s,]+/g, ' ').trim() === b.replace(NUM, '#').replace(/[\\s,]+/g, ' ').trim();\n}\n\n/**\n * Path data between `a` and `b` at `t` (0–1). Paths with the same command\n * structure morph number-by-number; others switch at the midpoint.\n */\nexport function interpolatePath(a: string, b: string, t: number): string {\n if (t <= 0) return a;\n if (t >= 1) return b;\n if (!pathsCompatible(a, b)) return t < 0.5 ? a : b;\n const nb = b.match(NUM) || [];\n let i = 0;\n return a.replace(NUM, (n) => {\n const v = Number(n) + (Number(nb[i++]) - Number(n)) * t;\n return String(Math.round(v * 1000) / 1000);\n });\n}\n\nconst ease = (t: number) => 1 - Math.pow(1 - t, 3);\n\nexport interface MorphOptions {\n duration?: number;\n easing?: (t: number) => number;\n}\n\n/** Animate a `<path>`'s `d` to `to`. Resolves when done; instant under reduced motion. */\nexport function morphTo(path: SVGPathElement | Element, to: string, o: MorphOptions = {}): Promise<void> {\n const from = path.getAttribute('d') || to;\n const dur = (o.duration ?? 500) * motionScale();\n const prev = (path as any).__usaMorph as number | undefined;\n if (prev) caf(prev);\n if (prefersReducedMotion() || dur <= 0 || from === to) {\n path.setAttribute('d', to);\n return Promise.resolve();\n }\n const fn = o.easing || ease;\n const t0 = now();\n return new Promise((resolve) => {\n const step = () => {\n const t = clamp((now() - t0) / dur, 0, 1);\n path.setAttribute('d', interpolatePath(from, to, fn(t)));\n if (t < 1) (path as any).__usaMorph = raf(step);\n else {\n (path as any).__usaMorph = 0;\n resolve();\n }\n };\n (path as any).__usaMorph = raf(step);\n });\n}\n\nconst DRAWABLE = 'path, line, polyline, polygon, circle, ellipse, rect';\n\n/**\n * Prepare every stroke in `root` for line drawing (normalised `pathLength=1`,\n * so no `getTotalLength()` is needed) and return a function that sets\n * progress 0–1, optionally staggered between shapes.\n */\nexport function drawLines(root: Element, o: { stagger?: number } = {}): (progress: number) => void {\n const shapes = Array.from(root.querySelectorAll(DRAWABLE)) as SVGElement[];\n shapes.forEach((s) => {\n s.setAttribute('pathLength', '1');\n s.style.strokeDasharray = '1 1';\n });\n const st = clamp(o.stagger ?? 0, 0, 0.9);\n return (p: number) => {\n const n = shapes.length;\n shapes.forEach((s, i) => {\n const start = n > 1 ? (i / (n - 1)) * st : 0;\n const local = clamp((p - start) / (1 - st || 1), 0, 1);\n s.style.strokeDashoffset = String(1 - local);\n });\n };\n}\n","import { defineElement, raf, caf, now, clamp, motionScale, type UsaElement } from '../base';\nimport { drawLines } from './core';\nimport css from './svg.css?raw';\n\n/**\n * `<usa-draw>` — line drawing: every stroke of the SVG inside draws itself.\n * Attributes: `trigger` (`view` default · `hover` · `click` · `scrub`),\n * `duration` (1600), `stagger` (0–0.9 share of the timeline, 0.2), `fill`\n * (fade the fill in after drawing), `repeat`. Method `play()`, property\n * `progress`, event `usa:complete`. Reduced motion: drawn immediately.\n */\nexport interface UsaDrawElement extends UsaElement {\n play(): void;\n progress: number;\n}\n\nexport function defineDraw(tag = 'usa-draw'): CustomElementConstructor | undefined {\n return defineElement(\n tag,\n (Base) =>\n class UsaDraw extends Base {\n private _set: (p: number) => void = () => {};\n private _p = 0;\n private _id = 0;\n\n get progress(): number {\n return this._p;\n }\n set progress(p: number) {\n this._p = clamp(p, 0, 1);\n this._set(this._p);\n this.toggleAttribute('data-drawn', this._p >= 1);\n }\n\n play(): void {\n caf(this._id);\n if (this.reduced) {\n this.progress = 1;\n return void this.emit('complete');\n }\n const dur = this.num('duration', 1600) * motionScale();\n const t0 = now();\n this.progress = 0;\n const step = () => {\n this.progress = (now() - t0) / dur;\n if (this._p < 1) this._id = raf(step);\n else this.emit('complete');\n };\n this._id = raf(step);\n }\n\n mount(): void {\n this._set = drawLines(this, { stagger: this.num('stagger', 0.2) });\n const trigger = this.str('trigger', 'view');\n if (this.reduced) {\n this.progress = 1;\n return;\n }\n this.progress = 0;\n if (trigger === 'scrub') {\n const update = () => {\n const r = this.getBoundingClientRect();\n const vh = window.innerHeight || 1;\n this.progress = (vh - r.top) / (vh * 0.6 + r.height * 0.4 || 1);\n };\n this.listen(window, 'scroll', update, { passive: true });\n update();\n } else if (trigger === 'hover') this.listen(this, 'pointerenter', () => this.play());\n else if (trigger === 'click') this.listen(this, 'click', () => this.play());\n else {\n let done = false;\n this.inView((v) => {\n if (v && (!done || this.flag('repeat'))) {\n done = true;\n this.play();\n } else if (!v && this.flag('repeat')) this.progress = 0;\n }, { threshold: 0.3 });\n }\n this.onCleanup(() => caf(this._id));\n }\n },\n { id: 'svg', text: css }\n );\n}\n","import { defineElement, type UsaElement } from '../base';\nimport { morphTo } from './core';\nimport css from './svg.css?raw';\n\n/**\n * `<usa-morph>` — morphs an SVG path through a list of shapes.\n * Put a `<svg><path></path></svg>` inside (one is created otherwise) and set\n * `paths=\"M… | M… | M…\"` (same command structure morphs smoothly, others\n * switch at the midpoint). Attributes: `trigger` (`click` default · `hover`\n * · `auto` · `view`), `interval` (ms for auto, 2000), `duration` (600).\n * Property `index`, method `next()`, event `usa:change`.\n * Reduced motion: shapes switch without animating; `auto` does not cycle.\n */\nexport interface UsaMorphElement extends UsaElement {\n readonly index: number;\n next(): Promise<void>;\n}\n\nexport function defineMorph(tag = 'usa-morph'): CustomElementConstructor | undefined {\n return defineElement(\n tag,\n (Base) =>\n class UsaMorph extends Base {\n static get observedAttributes(): string[] {\n return ['paths', 'trigger'];\n }\n private _i = 0;\n private _path: SVGPathElement | null = null;\n\n get index(): number {\n return this._i;\n }\n\n private list(): string[] {\n return this.str('paths').split('|').map((s) => s.trim()).filter(Boolean);\n }\n\n next(): Promise<void> {\n const l = this.list();\n if (!this._path || l.length < 2) return Promise.resolve();\n this._i = (this._i + 1) % l.length;\n this.emit('change', { index: this._i });\n return morphTo(this._path, l[this._i], { duration: this.num('duration', 600) });\n }\n\n mount(): void {\n let path = this.querySelector('path');\n if (!path) {\n this.innerHTML = '<svg viewBox=\"0 0 100 100\" aria-hidden=\"true\"><path></path></svg>';\n path = this.querySelector('path');\n }\n this._path = path as SVGPathElement;\n const l = this.list();\n if (l[0]) this._path.setAttribute('d', l[this._i % l.length]);\n const t = this.str('trigger', 'click');\n if (t === 'hover') {\n this.listen(this, 'pointerenter', () => void this.next());\n this.listen(this, 'pointerleave', () => void this.next());\n } else if (t === 'auto' || t === 'view') {\n let timer: ReturnType<typeof setInterval> | undefined;\n this.inView((v) => {\n clearInterval(timer);\n if (!v || this.reduced) return;\n if (t === 'view') return void this.next();\n timer = setInterval(() => void this.next(), this.num('interval', 2000));\n });\n this.onCleanup(() => clearInterval(timer));\n } else {\n if (!this.hasAttribute('tabindex')) this.tabIndex = 0;\n if (!this.hasAttribute('role')) this.setAttribute('role', 'button');\n this.listen(this, 'click', () => void this.next());\n this.listen(this, 'keydown', (e: KeyboardEvent) => {\n if (e.key === 'Enter' || e.key === ' ') {\n e.preventDefault();\n void this.next();\n }\n });\n }\n }\n },\n { id: 'svg', text: css }\n );\n}\n","import { defineElement, EASE_OUT, type UsaElement } from '../base';\nimport css from './svg.css?raw';\n\n/** Clip-path start / end frames for each reveal shape. */\nexport const MASK_SHAPES: Record<string, [string, string]> = {\n circle: ['circle(0% at 50% 50%)', 'circle(75% at 50% 50%)'],\n diamond: ['polygon(50% 50%, 50% 50%, 50% 50%, 50% 50%)', 'polygon(50% -50%, 150% 50%, 50% 150%, -50% 50%)'],\n wipe: ['inset(0 100% 0 0)', 'inset(0 0% 0 0)'],\n 'wipe-up': ['inset(100% 0 0 0)', 'inset(0% 0 0 0)'],\n iris: ['inset(50% 50% 50% 50% round 50%)', 'inset(0% 0% 0% 0% round 0%)'],\n star: [\n 'polygon(50% 50%, 50% 50%, 50% 50%, 50% 50%, 50% 50%, 50% 50%, 50% 50%, 50% 50%, 50% 50%, 50% 50%)',\n 'polygon(50% -60%, 80% 20%, 160% 30%, 95% 85%, 115% 170%, 50% 125%, -15% 170%, 5% 85%, -60% 30%, 20% 20%)',\n ],\n};\n\n/**\n * `<usa-mask-reveal>` — reveals its content through a growing mask shape.\n * Attributes: `shape` (`circle` default · `diamond` · `wipe` · `wipe-up` ·\n * `iris` · `star`), `duration` (900), `delay`, `trigger` (`view` · `hover`\n * · `click`), `repeat`, `at` (`x% y%` origin for circle). Event\n * `usa:complete`. Reduced motion: content is shown without the mask.\n */\nexport interface UsaMaskRevealElement extends UsaElement {\n reveal(): Promise<void>;\n}\n\nexport function defineMaskReveal(tag = 'usa-mask-reveal'): CustomElementConstructor | undefined {\n return defineElement(\n tag,\n (Base) =>\n class UsaMaskReveal extends Base {\n private frames(): [string, string] {\n const s = MASK_SHAPES[this.str('shape', 'circle')] || MASK_SHAPES.circle;\n const at = this.str('at');\n return at && s[0].startsWith('circle') ? [s[0].replace('50% 50%', at), s[1].replace('50% 50%', at)] : s;\n }\n\n reveal(): Promise<void> {\n const [a, b] = this.frames();\n this.setAttribute('data-state', 'revealing');\n // fill 'both' keeps the closed mask applied during `delay`\n const anim = this.motion(this, [{ clipPath: a }, { clipPath: b }], { duration: this.num('duration', 900), delay: this.num('delay', 0), easing: EASE_OUT, fill: 'both' });\n this.style.opacity = '';\n const done = () => {\n this.setAttribute('data-state', 'visible');\n this.emit('complete');\n };\n if (!anim) return Promise.resolve(done());\n return anim.finished.then(done, () => {});\n }\n\n mount(): void {\n if (this.reduced) {\n this.setAttribute('data-state', 'visible');\n return;\n }\n // 4.0.1: hide with opacity, not the closed clip-path — Chromium's\n // IntersectionObserver honours the target's own clip-path, so a fully\n // clipped element never reports as intersecting and never revealed.\n const hide = () => {\n this.getAnimations?.().forEach((x) => x.cancel());\n this.style.opacity = '0';\n this.setAttribute('data-state', 'hidden');\n };\n hide();\n this.onCleanup(() => ((this.style.opacity = ''), (this.style.clipPath = '')));\n const t = this.str('trigger', 'view');\n if (t === 'hover') this.listen(this, 'pointerenter', () => void this.reveal());\n else if (t === 'click') this.listen(this, 'click', () => void this.reveal());\n else {\n let done = false;\n this.inView((v) => {\n if (v && (!done || this.flag('repeat'))) {\n done = true;\n void this.reveal();\n } else if (!v && this.flag('repeat')) hide();\n }, { threshold: 0.25 });\n }\n }\n },\n { id: 'svg', text: css }\n );\n}\n","import { defineElement, type UsaElement } from '../base';\nimport css from './svg.css?raw';\n\ntype Icon = { d: string; frames: Keyframe[]; duration: number; origin?: string };\n\n/** Built-in animated icons (24×24 strokes) and the motion each one plays. */\nexport const ANIM_ICONS: Record<string, Icon> = {\n bell: { d: 'M6 16V11a6 6 0 0 1 12 0v5l2 2H4l2-2M10 20a2 2 0 0 0 4 0', duration: 800, origin: '50% 10%', frames: [{ rotate: '0deg' }, { rotate: '18deg' }, { rotate: '-14deg' }, { rotate: '9deg' }, { rotate: '-5deg' }, { rotate: '0deg' }] },\n heart: { d: 'M12 20s-7-4.4-7-10a4 4 0 0 1 7-2.6A4 4 0 0 1 19 10c0 5.6-7 10-7 10z', duration: 600, frames: [{ scale: 1 }, { scale: 1.3 }, { scale: 0.92 }, { scale: 1.12 }, { scale: 1 }] },\n check: { d: 'M4 12.5l5 5L20 6.5', duration: 600, frames: [{ strokeDashoffset: 1 }, { strokeDashoffset: 0 }] },\n arrow: { d: 'M4 12h15M13 6l6 6-6 6', duration: 600, frames: [{ translate: '0 0' }, { translate: '5px 0' }, { translate: '0 0' }] },\n star: { d: 'M12 3l2.7 5.6 6.1.9-4.4 4.3 1 6.1L12 17l-5.4 2.9 1-6.1-4.4-4.3 6.1-.9z', duration: 700, frames: [{ rotate: '0deg', scale: 1 }, { rotate: '72deg', scale: 1.2 }, { rotate: '144deg', scale: 1 }] },\n gear: { d: 'M12 8a4 4 0 1 0 0 8 4 4 0 0 0 0-8zM12 2v3M12 19v3M2 12h3M19 12h3M4.9 4.9l2.1 2.1M17 17l2.1 2.1M4.9 19.1L7 17M17 7l2.1-2.1', duration: 900, frames: [{ rotate: '0deg' }, { rotate: '180deg' }] },\n search: { d: 'M10.5 4a6.5 6.5 0 1 0 0 13 6.5 6.5 0 0 0 0-13zM15.5 15.5L20 20', duration: 700, frames: [{ rotate: '0deg' }, { rotate: '-15deg' }, { rotate: '10deg' }, { rotate: '0deg' }] },\n download: { d: 'M12 4v11M7 10l5 5 5-5M5 20h14', duration: 700, frames: [{ translate: '0 0' }, { translate: '0 3px' }, { translate: '0 0' }] },\n};\n\n/**\n * `<usa-anim-icon name=\"bell\">` — an animated stroke icon that plays its\n * motion on `trigger` (`hover` default · `click` · `view` · `loop`).\n * Attributes: `name` (see `ANIM_ICONS`), `size` (24), `label` (accessible\n * name; decorative when absent). Method `play()`. Reduced motion: static.\n */\nexport interface UsaAnimIconElement extends UsaElement {\n play(): void;\n}\n\nexport function defineAnimIcon(tag = 'usa-anim-icon'): CustomElementConstructor | undefined {\n return defineElement(\n tag,\n (Base) =>\n class UsaAnimIcon extends Base {\n static get observedAttributes(): string[] {\n return ['name', 'size', 'label'];\n }\n private icon(): Icon {\n return ANIM_ICONS[this.str('name', 'heart')] || ANIM_ICONS.heart;\n }\n\n play(): void {\n if (this.reduced) return;\n const svg = this.querySelector('svg');\n const i = this.icon();\n const target = i.frames[0].strokeDashoffset !== undefined ? this.querySelector('path') : svg;\n if (target) this.motion(target, i.frames, { duration: i.duration, easing: 'ease-in-out', iterations: this.str('trigger') === 'loop' ? Infinity : 1 });\n }\n\n mount(): void {\n const i = this.icon();\n const size = this.num('size', 24);\n const label = this.str('label');\n this.innerHTML = `<svg viewBox=\"0 0 24 24\" width=\"${size}\" height=\"${size}\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" style=\"transform-origin:${i.origin || '50% 50%'}\"${label ? ` role=\"img\" aria-label=\"${label.replace(/\"/g, '&quot;')}\"` : ' aria-hidden=\"true\"'}><path d=\"${i.d}\"${i.frames[0].strokeDashoffset !== undefined ? ' pathLength=\"1\" stroke-dasharray=\"1\"' : ''}></path></svg>`;\n const t = this.str('trigger', 'hover');\n if (t === 'click') this.listen(this, 'click', () => this.play());\n else if (t === 'view' || t === 'loop') this.inView((v) => v && this.play(), { threshold: 0.5 });\n else {\n this.listen(this, 'pointerenter', () => this.play());\n this.listen(this, 'focusin', () => this.play());\n }\n }\n },\n { id: 'svg', text: css }\n );\n}\n","/**\n * use-scroll-animate/components/svg — SVG animation (v3.3).\n * `<usa-draw>` (line drawing), `<usa-morph>` (path morph), `<usa-mask-reveal>`\n * (mask / clip-path reveals) and `<usa-anim-icon>` (animated icons), plus\n * `interpolatePath()`, `morphTo()`, `drawLines()`.\n */\nimport { defineDraw, type UsaDrawElement } from './draw';\nimport { defineMorph, type UsaMorphElement } from './morph';\nimport { defineMaskReveal, type UsaMaskRevealElement } from './mask-reveal';\nimport { defineAnimIcon, type UsaAnimIconElement } from './anim-icon';\n\nexport { defineDraw, defineMorph, defineMaskReveal, defineAnimIcon };\nexport { interpolatePath, pathsCompatible, morphTo, drawLines } from './core';\nexport type { MorphOptions } from './core';\nexport { MASK_SHAPES } from './mask-reveal';\nexport { ANIM_ICONS } from './anim-icon';\nexport type { UsaDrawElement, UsaMorphElement, UsaMaskRevealElement, UsaAnimIconElement };\nexport { configureComponents, prefersReducedMotion } from '../base';\nexport type { ComponentsConfig, UsaElement } from '../base';\n\n/** Register every component of this category under its default tag. */\nexport function defineSvgComponents(): void {\n defineDraw();\n defineMorph();\n defineMaskReveal();\n defineAnimIcon();\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'usa-draw': UsaDrawElement;\n 'usa-morph': UsaMorphElement;\n 'usa-mask-reveal': UsaMaskRevealElement;\n 'usa-anim-icon': UsaAnimIconElement;\n }\n}\n","/** Minimal WebGL runner: one full-canvas quad, one fragment shader, optional image texture. */\n\nexport const VERTEX = 'attribute vec2 p;varying vec2 v_uv;void main(){v_uv=p*.5+.5;gl_Position=vec4(p,0.,1.);}';\nconst HEAD = 'precision mediump float;varying vec2 v_uv;uniform float u_time;uniform vec2 u_resolution;uniform vec2 u_mouse;uniform float u_hover;uniform sampler2D u_tex;uniform vec4 u_ripples[4];\\n';\n\n/** Built-in fragment shaders (bodies; uniforms `u_time`, `u_resolution`, `u_mouse` 0–1, `u_hover` 0–1, `u_tex`, `u_ripples[4]` = x, y, age, strength). */\nexport const SHADERS: Record<string, string> = {\n gradient: 'void main(){vec2 u=v_uv;float t=u_time*.15;vec3 a=vec3(.39,.4,.95),b=vec3(.93,.29,.6),c=vec3(.13,.83,.93);float k=.5+.5*sin(u.x*3.+t*2.)*cos(u.y*2.-t);vec3 col=mix(mix(a,b,u.x+.2*sin(t)),c,k*.6);gl_FragColor=vec4(col,1.);}',\n plasma: 'void main(){vec2 u=v_uv*4.;float t=u_time*.6;float v=sin(u.x+t)+sin(u.y+t*.7)+sin(u.x+u.y+t*.5)+sin(length(u-2.+vec2(sin(t),cos(t)))*2.);vec3 col=.5+.5*cos(v+vec3(0.,2.,4.));gl_FragColor=vec4(col,1.);}',\n waves: 'void main(){vec2 u=v_uv;float t=u_time*.4;float w=0.;for(int i=0;i<4;i++){float f=float(i)+1.;w+=sin(u.x*6.*f+t*f)*.08/f;}float l=smoothstep(.0,.02,abs(u.y-.5-w));vec3 col=mix(vec3(.2,.5,1.),vec3(.04,.06,.15),l)+vec3(.1,.0,.2)*u.y;gl_FragColor=vec4(col,1.);}',\n aurora: 'void main(){vec2 u=v_uv;float t=u_time*.2;float b=0.;for(int i=0;i<3;i++){float f=float(i);b+=.4/abs((u.y-.6+.15*sin(u.x*3.+t+f*1.7))*(8.+f*4.));}vec3 col=vec3(.02,.03,.08)+b*mix(vec3(.1,.9,.6),vec3(.6,.3,1.),u.x)*.35;gl_FragColor=vec4(col,1.);}',\n distort: 'void main(){vec2 u=v_uv;vec2 d=u-u_mouse;float r=length(d);float k=u_hover*.08*exp(-r*r*18.);u-=normalize(d+1e-4)*k;float s=u_hover*.006;vec3 col=vec3(texture2D(u_tex,u+vec2(s,0.)).r,texture2D(u_tex,u).g,texture2D(u_tex,u-vec2(s,0.)).b);gl_FragColor=vec4(col,1.);}',\n liquid: 'void main(){vec2 u=v_uv;vec2 o=vec2(0.);for(int i=0;i<4;i++){vec4 r=u_ripples[i];if(r.w>0.){float d=distance(u,r.xy);float w=sin(d*60.-r.z*12.)*exp(-d*6.)*exp(-r.z*1.6)*r.w*.02;o+=normalize(u-r.xy+1e-4)*w;}}o+=vec2(sin(u.y*10.+u_time),cos(u.x*10.+u_time))*.002*u_hover;gl_FragColor=texture2D(u_tex,u+o);}',\n};\n\n/** Full fragment source for a preset or custom body (adds the shared header). */\nexport function fragmentSource(body: string): string {\n const src = SHADERS[body] || body;\n return /precision\\s+\\w+\\s+float/.test(src) ? src : HEAD + src;\n}\n\n/** `true` when the browser can create a WebGL context (cached). */\nlet support: boolean | undefined;\nexport function supportsWebGL(): boolean {\n if (support !== undefined) return support;\n try {\n const c = typeof document !== 'undefined' ? document.createElement('canvas') : null;\n support = !!(c && (c.getContext('webgl') || c.getContext('experimental-webgl')));\n } catch {\n support = false;\n }\n return support;\n}\n\nexport interface GLQuad {\n /** Draw a frame with these uniform values. */\n render(u: { time?: number; mouse?: [number, number]; hover?: number; ripples?: number[] }): void;\n /** Resize the drawing buffer to the canvas' CSS size × DPR (≤ 2). */\n resize(): void;\n /** Upload an image as `u_tex`. */\n texture(img: TexImageSource): void;\n dispose(): void;\n}\n\n/** Compile `frag` on a full-canvas quad, or `null` when WebGL / compilation is unavailable. */\nexport function glQuad(canvas: HTMLCanvasElement, frag: string): GLQuad | null {\n let gl: WebGLRenderingContext | null = null;\n try {\n gl = (canvas.getContext('webgl', { premultipliedAlpha: false, antialias: false }) || canvas.getContext('experimental-webgl')) as WebGLRenderingContext | null;\n } catch {\n gl = null;\n }\n if (!gl) return null;\n const g = gl;\n const sh = (type: number, src: string) => {\n const s = g.createShader(type)!;\n g.shaderSource(s, src);\n g.compileShader(s);\n return g.getShaderParameter(s, g.COMPILE_STATUS) ? s : null;\n };\n const vs = sh(g.VERTEX_SHADER, VERTEX);\n const fs = sh(g.FRAGMENT_SHADER, fragmentSource(frag));\n if (!vs || !fs) return null;\n const prog = g.createProgram()!;\n g.attachShader(prog, vs);\n g.attachShader(prog, fs);\n g.linkProgram(prog);\n if (!g.getProgramParameter(prog, g.LINK_STATUS)) return null;\n g.useProgram(prog);\n const buf = g.createBuffer();\n g.bindBuffer(g.ARRAY_BUFFER, buf);\n g.bufferData(g.ARRAY_BUFFER, new Float32Array([-1, -1, 1, -1, -1, 1, -1, 1, 1, -1, 1, 1]), g.STATIC_DRAW);\n const loc = g.getAttribLocation(prog, 'p');\n g.enableVertexAttribArray(loc);\n g.vertexAttribPointer(loc, 2, g.FLOAT, false, 0, 0);\n const U = (n: string) => g.getUniformLocation(prog, n);\n const uT = U('u_time'), uR = U('u_resolution'), uM = U('u_mouse'), uH = U('u_hover'), uRp = U('u_ripples');\n let tex: WebGLTexture | null = null;\n const quad: GLQuad = {\n resize() {\n const dpr = Math.min(2, (typeof devicePixelRatio === 'number' && devicePixelRatio) || 1);\n const w = Math.max(1, Math.round((canvas.clientWidth || 300) * dpr));\n const h = Math.max(1, Math.round((canvas.clientHeight || 150) * dpr));\n if (canvas.width !== w || canvas.height !== h) ((canvas.width = w), (canvas.height = h));\n g.viewport(0, 0, w, h);\n },\n texture(img) {\n tex = tex || g.createTexture();\n g.bindTexture(g.TEXTURE_2D, tex);\n g.pixelStorei(g.UNPACK_FLIP_Y_WEBGL, true);\n g.texParameteri(g.TEXTURE_2D, g.TEXTURE_WRAP_S, g.CLAMP_TO_EDGE);\n g.texParameteri(g.TEXTURE_2D, g.TEXTURE_WRAP_T, g.CLAMP_TO_EDGE);\n g.texParameteri(g.TEXTURE_2D, g.TEXTURE_MIN_FILTER, g.LINEAR);\n g.texImage2D(g.TEXTURE_2D, 0, g.RGBA, g.RGBA, g.UNSIGNED_BYTE, img);\n },\n render(u) {\n g.uniform1f(uT, u.time ?? 0);\n g.uniform2f(uR, canvas.width, canvas.height);\n g.uniform2f(uM, ...(u.mouse ?? [0.5, 0.5]));\n g.uniform1f(uH, u.hover ?? 0);\n if (uRp) g.uniform4fv(uRp, new Float32Array((u.ripples ?? []).concat(Array(16).fill(0)).slice(0, 16)));\n g.drawArrays(g.TRIANGLES, 0, 6);\n },\n dispose() {\n g.deleteProgram(prog);\n g.deleteBuffer(buf);\n if (tex) g.deleteTexture(tex);\n g.getExtension('WEBGL_lose_context')?.loseContext();\n },\n };\n quad.resize();\n return quad;\n}\n","import { defineElement, raf, caf, now, clamp, type UsaElement, getBase } from '../base';\n\ntype BaseCtor = ReturnType<typeof getBase>;\nimport { glQuad, type GLQuad } from './gl';\nimport css from './webgl.css?raw';\n\n/**\n * Shared shell for the WebGL elements: a canvas over (or behind) the\n * content that renders only while visible and the tab is shown, a DPR cap\n * of 2, and a graceful fallback (`data-fallback`) when WebGL, the shader\n * or the image (CORS) is unavailable — the original content / CSS stays.\n */\nexport interface UsaGLElement extends UsaElement {\n /** `true` once WebGL rendering is active (otherwise the CSS fallback shows). */\n readonly active: boolean;\n}\n\ntype Kind = 'shader' | 'distort' | 'liquid';\n\nfunction make(kind: Kind) {\n return (Base: BaseCtor): CustomElementConstructor =>\n class extends Base {\n static get observedAttributes(): string[] {\n return kind === 'shader' ? ['preset', 'speed'] : ['src'];\n }\n private _q: GLQuad | null = null;\n private _c: HTMLCanvasElement | null = null;\n private _id = 0;\n private _mouse: [number, number] = [0.5, 0.5];\n private _hover = 0;\n private _hoverTo = 0;\n private _ripples: { x: number; y: number; t: number }[] = [];\n\n get active(): boolean {\n return !!this._q;\n }\n\n private fallback(reason: string): void {\n this.setAttribute('data-fallback', reason);\n this._c?.remove();\n this._c = null;\n this._q?.dispose();\n this._q = null;\n }\n\n private frame(): void {\n const q = this._q;\n if (!q) return;\n this._hover += (this._hoverTo - this._hover) * 0.12;\n const t = now();\n this._ripples = this._ripples.filter((r) => t - r.t < 2500);\n q.render({\n time: (t / 1000) * this.num('speed', 1),\n mouse: this._mouse,\n hover: this._hover,\n ripples: this._ripples.flatMap((r) => [r.x, r.y, (t - r.t) / 1000, this.num('strength', 1)]),\n });\n }\n\n mount(): void {\n this.removeAttribute('data-fallback');\n const custom = this.querySelector('script[type=\"x-shader/x-fragment\"]');\n const frag = kind === 'shader' ? custom?.textContent || this.str('preset', 'gradient') : kind;\n const img = kind === 'shader' ? null : (this.querySelector('img') as HTMLImageElement | null);\n if (kind !== 'shader' && !img) return this.fallback('no-image');\n const c = (this._c = document.createElement('canvas'));\n c.setAttribute('aria-hidden', 'true');\n c.className = 'usa-gl';\n this.prepend(c);\n const q = (this._q = glQuad(c, frag));\n if (!q) return this.fallback('webgl');\n this.onCleanup(() => this.fallback('off'));\n const start = () => {\n if (!img) return true;\n try {\n q.texture(img);\n return true;\n } catch {\n this.fallback('image');\n return false;\n }\n };\n const draw = () => {\n q.resize();\n this.frame();\n };\n if (img && !(img.complete && img.naturalWidth)) {\n if (!img.crossOrigin && /^https?:/.test(img.src) && !img.src.startsWith(location.origin)) img.crossOrigin = 'anonymous';\n this.listen(img, 'load', () => start() && draw());\n this.listen(img, 'error', () => this.fallback('image'));\n } else if (!start()) return;\n this.setAttribute('data-active', '');\n this.onCleanup(() => this.removeAttribute('data-active'));\n draw();\n if (kind !== 'shader') {\n const pos = (e: PointerEvent) => {\n const r = this.getBoundingClientRect();\n this._mouse = [clamp((e.clientX - r.left) / (r.width || 1), 0, 1), clamp(1 - (e.clientY - r.top) / (r.height || 1), 0, 1)];\n };\n this.listen(this, 'pointermove', pos);\n this.listen(this, 'pointerenter', (e: PointerEvent) => (pos(e), (this._hoverTo = 1)));\n this.listen(this, 'pointerleave', () => (this._hoverTo = 0));\n if (kind === 'liquid')\n this.listen(this, 'pointerdown', (e: PointerEvent) => {\n pos(e);\n this._ripples = [...this._ripples.slice(-3), { x: this._mouse[0], y: this._mouse[1], t: now() }];\n });\n }\n // 4.0.1: also follow the element's own size (grid reflow, card expand…)\n if (typeof ResizeObserver !== 'undefined') {\n const ro = new ResizeObserver(() => {\n q.resize();\n if (!this._id) this.frame();\n });\n ro.observe(this);\n this.onCleanup(() => ro.disconnect());\n }\n if (this.reduced) return; // one static frame, no loop\n let visible = false;\n const loop = () => {\n this.frame();\n this._id = raf(loop);\n };\n const sync = () => {\n caf(this._id);\n this._id = 0;\n if (visible && !document.hidden) this._id = raf(loop);\n };\n this.inView((v: boolean) => ((visible = v), sync()));\n this.listen(document, 'visibilitychange', sync);\n this.listen(window, 'resize', () => q.resize(), { passive: true });\n this.onCleanup(() => caf(this._id));\n }\n };\n}\n\n/**\n * `<usa-shader>` — GPU shader background behind its content. `preset`\n * (`gradient` · `plasma` · `waves` · `aurora`) or your own fragment shader in\n * `<script type=\"x-shader/x-fragment\">` (uniforms `u_time`, `u_resolution`,\n * `u_mouse`, `v_uv`); `speed`. Without WebGL: the element's CSS background.\n */\nexport function defineShader(tag = 'usa-shader'): CustomElementConstructor | undefined {\n return defineElement(tag, make('shader'), { id: 'webgl', text: css });\n}\n\n/**\n * `<usa-distort>` — hover distortion + RGB split on the `<img>` inside,\n * following the pointer. Without WebGL / CORS: a gentle CSS zoom.\n */\nexport function defineDistort(tag = 'usa-distort'): CustomElementConstructor | undefined {\n return defineElement(tag, make('distort'), { id: 'webgl', text: css });\n}\n\n/**\n * `<usa-liquid>` — liquid image: clicks / taps send ripples through the\n * `<img>` inside, hover adds a gentle wobble; `strength`. Fallback: plain image.\n */\nexport function defineLiquid(tag = 'usa-liquid'): CustomElementConstructor | undefined {\n return defineElement(tag, make('liquid'), { id: 'webgl', text: css });\n}\n","/**\n * use-scroll-animate/components/webgl — lightweight canvas / WebGL (v3.4).\n * `<usa-shader>` (shader backgrounds), `<usa-distort>` (hover image\n * distortion), `<usa-liquid>` (ripple images) on a tiny single-quad runner\n * (`glQuad()`), with graceful fallbacks when WebGL is unavailable.\n */\nimport { defineShader, defineDistort, defineLiquid, type UsaGLElement } from './elements';\n\nexport { defineShader, defineDistort, defineLiquid };\nexport { glQuad, supportsWebGL, fragmentSource, SHADERS } from './gl';\nexport type { GLQuad } from './gl';\nexport type { UsaGLElement };\nexport { configureComponents, prefersReducedMotion } from '../base';\nexport type { ComponentsConfig, UsaElement } from '../base';\n\n/** Register every component of this category under its default tag. */\nexport function defineWebglComponents(): void {\n defineShader();\n defineDistort();\n defineLiquid();\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'usa-shader': UsaGLElement;\n 'usa-distort': UsaGLElement;\n 'usa-liquid': UsaGLElement;\n }\n}\n","import { defineElement, type UsaElement } from '../base';\nimport { createSpring, type SpringValue } from '../physics/spring';\nimport { gesture } from '../gesture/core';\nimport css from './depth.css?raw';\n\nconst FACES = ['front', 'right', 'back', 'left', 'top', 'bottom'] as const;\n/** Rotation (deg) that brings each face to the front. */\nconst ROT: Record<string, [number, number]> = { front: [0, 0], right: [0, -90], back: [0, -180], left: [0, 90], top: [-90, 0], bottom: [90, 0] };\n\n/**\n * `<usa-cube>` — a CSS 3D cube whose up-to-six element children are its faces\n * (front, right, back, left, top, bottom). Rotate with drag / swipe, arrow\n * keys, `autoplay` (ms) or `show(face | index)`; spring-driven.\n * Attributes: `size` (px, 200), `autoplay`, `perspective` (900).\n * `usa:change` (`{ index, face }`). Reduced motion: instant face switch.\n */\nexport interface UsaCubeElement extends UsaElement {\n readonly index: number;\n show(face: number | string): void;\n next(): void;\n prev(): void;\n}\n\nexport function defineCube(tag = 'usa-cube'): CustomElementConstructor | undefined {\n return defineElement(\n tag,\n (Base) =>\n class UsaCube extends Base {\n static get observedAttributes(): string[] {\n return ['size', 'autoplay'];\n }\n private _i = 0;\n private _rx!: SpringValue;\n private _ry!: SpringValue;\n private _base: [number, number] = [0, 0];\n\n get index(): number {\n return this._i;\n }\n\n private faces(): HTMLElement[] {\n return Array.from(this.children).filter((c) => c instanceof HTMLElement && !c.hasAttribute('slot')).slice(0, 6) as HTMLElement[];\n }\n\n private paint(): void {\n this.style.setProperty('--usa-cube-rx', `${this._rx.value}deg`);\n this.style.setProperty('--usa-cube-ry', `${this._ry.value}deg`);\n }\n\n show(face: number | string): void {\n const n = this.faces().length || 1;\n const i = typeof face === 'number' ? ((face % n) + n) % n : Math.max(0, FACES.indexOf(face as any));\n this._i = i;\n const [rx, ry] = ROT[FACES[i]];\n // take the shortest way round on Y\n const cur = this._ry.target;\n const ty = ry + Math.round((cur - ry) / 360) * 360;\n this._base = [rx, ty];\n if (this.reduced) {\n this._rx.jump(rx);\n this._ry.jump(ty);\n } else {\n this._rx.set(rx);\n this._ry.set(ty);\n }\n this.faces().forEach((f, j) => f.setAttribute('aria-hidden', String(j !== i)));\n this.emit('change', { index: i, face: FACES[i] });\n }\n\n next(): void {\n this.show(this._i + 1);\n }\n\n prev(): void {\n this.show(this._i - 1);\n }\n\n mount(): void {\n this.style.setProperty('--usa-cube-size', `${this.num('size', 200)}px`);\n this.style.setProperty('--usa-cube-perspective', `${this.num('perspective', 900)}px`);\n this.faces().forEach((f, j) => f.setAttribute('data-face', FACES[j]));\n if (!this.hasAttribute('tabindex')) this.tabIndex = 0;\n if (!this.hasAttribute('role')) this.setAttribute('role', 'region');\n if (!this.hasAttribute('aria-roledescription')) this.setAttribute('aria-roledescription', 'cube');\n this._rx = createSpring({ spring: 'gentle', onUpdate: () => this.paint() });\n this._ry = createSpring({ spring: 'gentle', onUpdate: () => this.paint() });\n this.show(this._i);\n this.paint();\n this.onCleanup(\n gesture(this, {\n onPan: ({ dx, dy, last }) => {\n if (this.reduced) return;\n if (!last) {\n this._ry.jump(this._base[1] + dx * 0.5);\n this._rx.jump(this._base[0] - dy * 0.5);\n return;\n }\n if (Math.abs(dx) > 40 && Math.abs(dx) >= Math.abs(dy)) return dx < 0 ? this.next() : this.prev();\n if (Math.abs(dy) > 40 && this.faces().length > 4) return this.show(dy < 0 ? 'bottom' : 'top');\n this.show(this._i);\n },\n })\n );\n this.listen(this, 'keydown', (e: KeyboardEvent) => {\n const k: Record<string, () => void> = { ArrowRight: () => this.next(), ArrowLeft: () => this.prev(), ArrowUp: () => this.show('bottom'), ArrowDown: () => this.show('top'), Home: () => this.show(0) };\n if (!k[e.key] || ((e.key === 'ArrowUp' || e.key === 'ArrowDown') && this.faces().length < 6)) return;\n e.preventDefault();\n k[e.key]();\n });\n const ms = this.num('autoplay', 0);\n if (ms > 0 && !this.reduced) {\n let paused = false;\n const id = setInterval(() => !paused && this.show((this._i + 1) % Math.min(4, this.faces().length || 1)), ms);\n this.listen(this, 'pointerenter', () => (paused = true));\n this.listen(this, 'pointerleave', () => (paused = false));\n this.listen(this, 'focusin', () => (paused = true));\n this.listen(this, 'focusout', () => (paused = false));\n this.onCleanup(() => clearInterval(id));\n }\n }\n\n unmount(): void {\n this._rx?.stop();\n this._ry?.stop();\n }\n },\n { id: 'depth', text: css }\n );\n}\n","import { clamp } from '../base';\n\nexport interface TiltReading {\n /** Left/right tilt, -1…1. */\n x: number;\n /** Front/back tilt, -1…1. */\n y: number;\n}\n\n/** Map a DeviceOrientation reading (beta/gamma degrees) to -1…1 tilt around a resting pose (pure). */\nexport function orientationToTilt(beta: number | null, gamma: number | null, range = 30, rest = 45): TiltReading {\n return {\n x: clamp((gamma ?? 0) / range, -1, 1),\n y: clamp(((beta ?? rest) - rest) / range, -1, 1),\n };\n}\n\n/** `true` when DeviceOrientation events exist. */\nexport const supportsOrientation = (): boolean => typeof window !== 'undefined' && 'DeviceOrientationEvent' in window;\n\n/**\n * Ask for motion-sensor permission where required (iOS 13+; must run inside\n * a user gesture). Resolves `true` when tilt events can be used.\n */\nexport async function requestOrientationPermission(): Promise<boolean> {\n if (!supportsOrientation()) return false;\n const D = (window as any).DeviceOrientationEvent;\n if (typeof D.requestPermission !== 'function') return true;\n try {\n return (await D.requestPermission()) === 'granted';\n } catch {\n return false;\n }\n}\n\n/**\n * Listen to device tilt (smoothed); falls back to nothing on desktops.\n * Returns a stop function.\n */\nexport function deviceTilt(cb: (t: TiltReading) => void, o: { range?: number; smooth?: number } = {}): () => void {\n if (!supportsOrientation()) return () => {};\n let cur: TiltReading = { x: 0, y: 0 };\n const k = 1 - clamp(o.smooth ?? 0.2, 0, 0.95);\n const on = (e: DeviceOrientationEvent) => {\n const t = orientationToTilt(e.beta, e.gamma, o.range ?? 30);\n cur = { x: cur.x + (t.x - cur.x) * k, y: cur.y + (t.y - cur.y) * k };\n cb(cur);\n };\n window.addEventListener('deviceorientation', on);\n return () => window.removeEventListener('deviceorientation', on);\n}\n","import { defineElement, raf, caf, clamp, type UsaElement } from '../base';\nimport { deviceTilt, requestOrientationPermission, supportsOrientation } from './core';\nimport css from './depth.css?raw';\n\n/**\n * `<usa-depth>` — depth parallax: children with `data-depth` (-1…1, 0 = the\n * screen plane) move and scale by depth as the pointer moves, the device\n * tilts (`orientation`) or the page scrolls (`scroll`).\n * Attributes: `source` (`pointer` default · `orientation` · `scroll` ·\n * space-separated mix), `strength` (px at depth 1, 40), `rotate` (max tilt\n * of the whole scene in deg, 0). `requestPermission()` for iOS motion.\n * Reduced motion: layers stay flat.\n */\nexport interface UsaDepthElement extends UsaElement {\n /** Current -1…1 input. */\n readonly tilt: { x: number; y: number };\n requestPermission(): Promise<boolean>;\n}\n\nexport function defineDepth(tag = 'usa-depth'): CustomElementConstructor | undefined {\n return defineElement(\n tag,\n (Base) =>\n class UsaDepth extends Base {\n static get observedAttributes(): string[] {\n return ['source', 'strength', 'rotate'];\n }\n private _t = { x: 0, y: 0 };\n private _id = 0;\n\n get tilt(): { x: number; y: number } {\n return { ...this._t };\n }\n\n requestPermission(): Promise<boolean> {\n return requestOrientationPermission().then((ok) => {\n if (ok) {\n this.changed('source');\n }\n return ok;\n });\n }\n\n private apply(): void {\n this._id = 0;\n const s = this.num('strength', 40);\n const r = this.num('rotate', 0);\n const { x, y } = this._t;\n this.style.setProperty('--usa-depth-x', x.toFixed(4));\n this.style.setProperty('--usa-depth-y', y.toFixed(4));\n if (r) this.style.setProperty('--usa-depth-rot', `rotateX(${(-y * r).toFixed(2)}deg) rotateY(${(x * r).toFixed(2)}deg)`);\n this.querySelectorAll<HTMLElement>('[data-depth]').forEach((el) => {\n const d = clamp(Number(el.dataset.depth) || 0, -1, 1);\n el.style.transform = `translate3d(${(x * d * s).toFixed(2)}px, ${(y * d * s).toFixed(2)}px, 0) scale(${(1 + d * 0.04).toFixed(4)})`;\n });\n }\n\n private set(x: number, y: number): void {\n this._t = { x: clamp(x, -1, 1), y: clamp(y, -1, 1) };\n if (!this._id) this._id = raf(() => this.apply());\n }\n\n mount(): void {\n if (this.reduced) return;\n const src = this.str('source', 'pointer').split(/\\s+/);\n if (src.includes('pointer')) {\n this.listen(this, 'pointermove', (e: PointerEvent) => {\n const r = this.getBoundingClientRect();\n this.set(((e.clientX - r.left) / (r.width || 1)) * 2 - 1, ((e.clientY - r.top) / (r.height || 1)) * 2 - 1);\n });\n this.listen(this, 'pointerleave', () => this.set(0, 0));\n }\n if (src.includes('orientation') && supportsOrientation()) this.onCleanup(deviceTilt((t) => this.set(t.x, t.y)));\n if (src.includes('scroll')) {\n const on = () => {\n const r = this.getBoundingClientRect();\n const vh = window.innerHeight || 1;\n this.set(this._t.x, clamp(((r.top + r.height / 2) / vh) * 2 - 1, -1, 1));\n };\n this.listen(window, 'scroll', on, { passive: true });\n on();\n }\n this.onCleanup(() => {\n caf(this._id);\n this._id = 0;\n });\n }\n\n unmount(): void {\n this._t = { x: 0, y: 0 };\n this.querySelectorAll<HTMLElement>('[data-depth]').forEach((el) => (el.style.transform = ''));\n }\n },\n { id: 'depth', text: css }\n );\n}\n","/**\n * use-scroll-animate/components/depth — 3D (v3.5).\n * `<usa-cube>` (CSS 3D cube), `<usa-depth>` (layered depth parallax driven by\n * pointer, device orientation or scroll) and `deviceTilt()`. The 3D ring\n * carousel is `<usa-carousel-3d>` in `components/cards`.\n */\nimport { defineCube, type UsaCubeElement } from './cube';\nimport { defineDepth, type UsaDepthElement } from './depth-el';\n\nexport { defineCube, defineDepth };\nexport { deviceTilt, orientationToTilt, requestOrientationPermission, supportsOrientation } from './core';\nexport type { TiltReading } from './core';\nexport type { UsaCubeElement, UsaDepthElement };\nexport { configureComponents, prefersReducedMotion } from '../base';\nexport type { ComponentsConfig, UsaElement } from '../base';\n\n/** Register every component of this category under its default tag. */\nexport function defineDepthComponents(): void {\n defineCube();\n defineDepth();\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'usa-cube': UsaCubeElement;\n 'usa-depth': UsaDepthElement;\n }\n}\n","import { prefersReducedMotion, motionScale, EASE_OUT } from '../base';\n\ntype Box = { left: number; top: number; width: number; height: number };\n\n/** FLIP keyframes from a previous box to the current one (pure). */\nexport function flipFrames(from: Box, to: Box, scale = true): Keyframe[] {\n const dx = from.left - to.left;\n const dy = from.top - to.top;\n const sx = scale && to.width ? from.width / to.width : 1;\n const sy = scale && to.height ? from.height / to.height : 1;\n return [\n { transformOrigin: '0 0', transform: `translate(${dx}px, ${dy}px) scale(${sx}, ${sy})` },\n { transformOrigin: '0 0', transform: 'none' },\n ];\n}\n\nexport interface AutoAnimateOptions {\n duration?: number;\n easing?: string;\n /** Also animate size changes (default true). */\n scale?: boolean;\n}\n\n/**\n * Auto-animate a container: children that are added fade / scale in, removed\n * ones fade out in place, and moved ones (re-sort, filter, reflow, resize)\n * glide to their new spot — no extra code at the call site. Returns\n * `{ disable, enable, stop }`. Reduced motion: changes apply instantly.\n *\n * @example\n * const ctl = autoAnimate(document.querySelector('ul'));\n * list.append(item); // animates\n */\nexport function autoAnimate(parent: HTMLElement, o: AutoAnimateOptions = {}): { enable(): void; disable(): void; stop(): void } {\n let on = true;\n const boxes = new WeakMap<Element, Box>();\n const rel = (el: Element): Box => {\n const r = el.getBoundingClientRect();\n const p = parent.getBoundingClientRect();\n return { left: r.left - p.left, top: r.top - p.top, width: r.width, height: r.height };\n };\n const snap = () => Array.from(parent.children).forEach((c) => boxes.set(c, rel(c)));\n const dur = () => (o.duration ?? 300) * motionScale();\n const timing = (): KeyframeAnimationOptions => ({ duration: dur(), easing: o.easing ?? EASE_OUT });\n const animate = (el: Element, frames: Keyframe[], t = timing()) => (typeof (el as HTMLElement).animate === 'function' ? (el as HTMLElement).animate(frames, t) : null);\n\n const mo =\n typeof MutationObserver === 'function'\n ? new MutationObserver((records) => {\n if (!on || prefersReducedMotion() || dur() <= 0) return snap();\n const added = new Set<Element>();\n for (const r of records) {\n r.addedNodes.forEach((n) => n instanceof Element && n.parentElement === parent && added.add(n));\n r.removedNodes.forEach((n) => {\n if (!(n instanceof HTMLElement) || n.isConnected) return;\n const b = boxes.get(n);\n if (!b) return;\n // put a ghost back at its old place and fade it out\n n.style.position = 'absolute';\n n.style.left = `${b.left}px`;\n n.style.top = `${b.top}px`;\n n.style.width = `${b.width}px`;\n n.style.height = `${b.height}px`;\n n.style.margin = '0';\n n.style.pointerEvents = 'none';\n if (getComputedStyle(parent).position === 'static') parent.style.position = 'relative';\n parent.appendChild(n);\n (n as any).__usaGhost = true;\n const a = animate(n, [{ opacity: 1, transform: 'none' }, { opacity: 0, transform: 'scale(0.96)' }]);\n const drop = () => {\n n.remove();\n for (const k of ['position', 'left', 'top', 'width', 'height', 'margin', 'pointerEvents'] as const) n.style[k] = '';\n };\n if (a) a.finished.then(drop, drop);\n else drop();\n });\n }\n Array.from(parent.children).forEach((c) => {\n if ((c as any).__usaGhost) return;\n if (added.has(c)) return void animate(c, [{ opacity: 0, transform: 'scale(0.96)' }, { opacity: 1, transform: 'none' }]);\n const prev = boxes.get(c);\n if (!prev) return;\n const now = rel(c);\n if (Math.abs(prev.left - now.left) + Math.abs(prev.top - now.top) + Math.abs(prev.width - now.width) + Math.abs(prev.height - now.height) < 1) return;\n animate(c, flipFrames(prev, now, o.scale !== false));\n });\n snap();\n })\n : null;\n mo?.observe(parent, { childList: true });\n const ro = typeof ResizeObserver === 'function' ? new ResizeObserver(() => snap()) : null;\n ro?.observe(parent);\n snap();\n // capture boxes right before any change in the same task (events, timers)\n const capture = () => snap();\n parent.addEventListener('pointerdown', capture, true);\n return {\n enable: () => ((on = true), snap()),\n disable: () => (on = false),\n stop: () => {\n mo?.disconnect();\n ro?.disconnect();\n parent.removeEventListener('pointerdown', capture, true);\n },\n };\n}\n\n/** Masonry placement: shortest-column-first positions for item heights (pure). */\nexport function masonryLayout(heights: number[], columns: number, columnWidth: number, gap: number): { x: number; y: number }[] & { height?: number } {\n const cols = Array(Math.max(1, columns)).fill(0);\n const out = heights.map((h) => {\n const c = cols.indexOf(Math.min(...cols));\n const pos = { x: c * (columnWidth + gap), y: cols[c] };\n cols[c] += h + gap;\n return pos;\n }) as { x: number; y: number }[] & { height?: number };\n out.height = Math.max(0, Math.max(...cols) - gap);\n return out;\n}\n\nexport interface SharedOptions {\n duration?: number;\n easing?: string;\n}\n\n/**\n * Shared-element transition between two states of the page: every element\n * with `data-shared=\"id\"` before `update()` flies to the element with the\n * same id afterwards (size and position), the rest cross-fades. Uses the\n * View Transitions API when present (with `view-transition-name` per id),\n * otherwise a FLIP fallback. Reduced motion: just runs `update()`.\n */\nexport async function sharedTransition(update: () => void | Promise<void>, root: ParentNode = document, o: SharedOptions = {}): Promise<void> {\n if (prefersReducedMotion() || typeof document === 'undefined') return void (await update());\n const collect = () => new Map(Array.from(root.querySelectorAll<HTMLElement>('[data-shared]')).map((el) => [el.dataset.shared!, el]));\n const doc = document as any;\n if (typeof doc.startViewTransition === 'function') {\n const named = (m: Map<string, HTMLElement>) => m.forEach((el, id) => (el.style.viewTransitionName = `usa-${id.replace(/[^\\w-]/g, '_')}`));\n const clear = (m: Map<string, HTMLElement>) => m.forEach((el) => (el.style.viewTransitionName = ''));\n const before = collect();\n named(before);\n let after = new Map<string, HTMLElement>();\n const vt = doc.startViewTransition(async () => {\n clear(before);\n await update();\n after = collect();\n named(after);\n });\n await vt.finished.catch(() => undefined);\n clear(after);\n return;\n }\n const before = new Map(Array.from(collect()).map(([id, el]) => [id, el.getBoundingClientRect()]));\n await update();\n const anims: Promise<unknown>[] = [];\n collect().forEach((el, id) => {\n const a = before.get(id);\n if (!a || typeof el.animate !== 'function') return;\n const b = el.getBoundingClientRect();\n if (!b.width || !b.height) return;\n anims.push(el.animate(flipFrames(a, b), { duration: (o.duration ?? 450) * motionScale(), easing: o.easing ?? EASE_OUT }).finished.catch(() => undefined));\n });\n await Promise.all(anims);\n}\n","import { defineElement, type UsaElement } from '../base';\nimport { autoAnimate, masonryLayout } from './core';\nimport css from './layout.css?raw';\n\n/**\n * `<usa-auto-animate>` — wraps `autoAnimate()`: any change to its children\n * (add, remove, re-order, filter, size) animates. Attributes `duration`\n * (300), `no-scale`. Works for lists and CSS grids alike.\n */\nexport interface UsaAutoAnimateElement extends UsaElement {\n enable(): void;\n disable(): void;\n}\n\nexport function defineAutoAnimate(tag = 'usa-auto-animate'): CustomElementConstructor | undefined {\n return defineElement(\n tag,\n (Base) =>\n class UsaAutoAnimate extends Base {\n private _c: ReturnType<typeof autoAnimate> | null = null;\n enable(): void {\n this._c?.enable();\n }\n disable(): void {\n this._c?.disable();\n }\n mount(): void {\n const c = (this._c = autoAnimate(this, { duration: this.num('duration', 300), scale: !this.flag('no-scale') }));\n this.onCleanup(() => c.stop());\n }\n },\n { id: 'layout', text: css }\n );\n}\n\n/**\n * `<usa-masonry>` — a masonry (Pinterest-style) grid: children are placed in\n * the shortest column and glide to new spots when the width, the items or\n * their sizes change. Attributes `columns` (fixed count) or `min` (min\n * column width px, 220), `gap` (16). Without JS layout support it is a\n * plain CSS multi-column flow. Reduced motion: no glide.\n */\nexport interface UsaMasonryElement extends UsaElement {\n layout(): void;\n}\n\nexport function defineMasonry(tag = 'usa-masonry'): CustomElementConstructor | undefined {\n return defineElement(\n tag,\n (Base) =>\n class UsaMasonry extends Base {\n static get observedAttributes(): string[] {\n return ['columns', 'min', 'gap'];\n }\n changed(): void {\n this.layout();\n }\n layout(): void {\n const items = Array.from(this.children).filter((c) => !(c as any).__usaGhost) as HTMLElement[];\n const w = this.clientWidth;\n if (!w) return;\n const gap = this.num('gap', 16);\n const cols = this.num('columns', 0) || Math.max(1, Math.floor((w + gap) / (this.num('min', 220) + gap)));\n const cw = (w - gap * (cols - 1)) / cols;\n items.forEach((el) => (el.style.width = `${cw}px`));\n const pos = masonryLayout(items.map((el) => el.offsetHeight), cols, cw, gap);\n items.forEach((el, i) => (el.style.transform = `translate(${pos[i].x}px, ${pos[i].y}px)`));\n this.style.height = `${pos.height}px`;\n this.style.setProperty('--usa-masonry-cols', String(cols));\n }\n mount(): void {\n this.setAttribute('data-js', '');\n this.onCleanup(() => this.removeAttribute('data-js'));\n let id = 0;\n const queue = () => {\n if (id) return;\n id = requestAnimationFrame(() => {\n id = 0;\n this.layout();\n });\n };\n if (typeof ResizeObserver === 'function') {\n const ro = new ResizeObserver(queue);\n ro.observe(this);\n Array.from(this.children).forEach((c) => ro.observe(c));\n const mo = new MutationObserver((recs) => {\n recs.forEach((r) => r.addedNodes.forEach((n) => n instanceof Element && ro.observe(n)));\n queue();\n });\n mo.observe(this, { childList: true });\n this.onCleanup(() => (ro.disconnect(), mo.disconnect()));\n }\n this.listen(this, 'load', queue, { capture: true });\n this.layout();\n }\n unmount(): void {\n this.style.height = '';\n Array.from(this.children).forEach((c) => ((c as HTMLElement).style.transform = '', (c as HTMLElement).style.width = ''));\n }\n },\n { id: 'layout', text: css }\n );\n}\n","/**\n * use-scroll-animate/components/layout — layout animation (v3.6).\n * `autoAnimate()` / `<usa-auto-animate>` (list & grid reflow),\n * `<usa-masonry>`, and `sharedTransition()` for shared-element transitions\n * (View Transitions API with a FLIP fallback).\n */\nimport { defineAutoAnimate, defineMasonry, type UsaAutoAnimateElement, type UsaMasonryElement } from './elements';\n\nexport { defineAutoAnimate, defineMasonry };\nexport { autoAnimate, masonryLayout, sharedTransition, flipFrames } from './core';\nexport type { AutoAnimateOptions, SharedOptions } from './core';\nexport type { UsaAutoAnimateElement, UsaMasonryElement };\nexport { configureComponents, prefersReducedMotion } from '../base';\nexport type { ComponentsConfig, UsaElement } from '../base';\n\n/** Register every component of this category under its default tag. */\nexport function defineLayoutComponents(): void {\n defineAutoAnimate();\n defineMasonry();\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'usa-auto-animate': UsaAutoAnimateElement;\n 'usa-masonry': UsaMasonryElement;\n }\n}\n","import { prefersReducedMotion, motionScale, EASE_OUT, EASE_SPRING, raf, now, clamp } from '../base';\n\ntype Cleanup = () => void;\n/** A pack primitive: wire one element, return a cleanup. */\ntype Effect = (el: HTMLElement, ctx: PackContext) => Cleanup | void;\n\nexport interface PackContext {\n root: HTMLElement;\n /** Index of the element among those with the same role (for staggering). */\n index: number;\n reduced: boolean;\n}\n\nconst anim = (el: Element, frames: Keyframe[], o: KeyframeAnimationOptions): Animation | null => {\n if (typeof (el as HTMLElement).animate !== 'function') return null;\n const k = motionScale();\n return (el as HTMLElement).animate(frames, { ...o, duration: ((o.duration as number) ?? 400) * k, delay: (o.delay ?? 0) * k });\n};\nconst on = (el: EventTarget, type: string, fn: (e: any) => void): Cleanup => {\n el.addEventListener(type, fn);\n return () => el.removeEventListener(type, fn);\n};\nconst io = (el: Element, cb: () => void): Cleanup => {\n if (typeof IntersectionObserver === 'undefined') return void cb() as unknown as Cleanup;\n const o = new IntersectionObserver((es) => es.some((e) => e.isIntersecting) && (o.disconnect(), cb()), { threshold: 0.15 });\n o.observe(el);\n return () => o.disconnect();\n};\n\n/** Count `el`'s number up from 0 when it enters the view (keeps prefix / suffix / decimals). */\nexport function countUp(el: HTMLElement, duration = 1200): Cleanup {\n const text = el.textContent || '';\n const m = /(-?[\\d,]*\\.?\\d+)/.exec(text);\n if (!m || prefersReducedMotion()) return () => {};\n const target = Number(m[1].replace(/,/g, ''));\n const dec = (m[1].split('.')[1] || '').length;\n const fmt = (v: number) => text.replace(m[1], v.toLocaleString('en-US', { minimumFractionDigits: dec, maximumFractionDigits: dec }));\n el.setAttribute('aria-label', text.trim());\n el.textContent = fmt(0);\n let stop = false;\n const off = io(el, () => {\n const t0 = now();\n const d = duration * motionScale() || 1;\n const step = () => {\n if (stop) return;\n const p = clamp((now() - t0) / d, 0, 1);\n el.textContent = fmt(target * (1 - Math.pow(1 - p, 3)));\n if (p < 1) raf(step);\n };\n raf(step);\n });\n return () => {\n stop = true;\n off();\n el.textContent = text;\n };\n}\n\n/**\n * Fly a copy of `from` (e.g. a product image) into `to` (the cart icon) along\n * an arc, then bump the target. Resolves when it lands. Instant under\n * reduced motion (only the bump's state change, no flight).\n */\nexport async function flyToCart(from: Element, to: Element, o: { duration?: number } = {}): Promise<void> {\n if (prefersReducedMotion() || typeof document === 'undefined') return;\n const a = from.getBoundingClientRect();\n const b = to.getBoundingClientRect();\n const ghost = from.cloneNode(true) as HTMLElement;\n ghost.setAttribute('aria-hidden', 'true');\n Object.assign(ghost.style, { position: 'fixed', left: `${a.left}px`, top: `${a.top}px`, width: `${a.width}px`, height: `${a.height}px`, margin: '0', zIndex: '2147483000', pointerEvents: 'none' });\n document.body.appendChild(ghost);\n const dx = b.left + b.width / 2 - (a.left + a.width / 2);\n const dy = b.top + b.height / 2 - (a.top + a.height / 2);\n const f = anim(ghost, [\n { transform: 'translate(0, 0) scale(1)', opacity: 1 },\n { transform: `translate(${dx * 0.5}px, ${dy * 0.5 - 80}px) scale(0.6)`, opacity: 0.9, offset: 0.5 },\n { transform: `translate(${dx}px, ${dy}px) scale(0.15)`, opacity: 0.4 },\n ], { duration: o.duration ?? 700, easing: 'cubic-bezier(0.5, 0, 0.5, 1)' });\n await f?.finished.catch(() => undefined);\n ghost.remove();\n anim(to, [{ transform: 'scale(1)' }, { transform: 'scale(1.3)' }, { transform: 'scale(1)' }], { duration: 380, easing: EASE_SPRING });\n}\n\nconst PRIMITIVES: Record<string, Effect> = {\n reveal: (el, c) => {\n if (c.reduced) return;\n el.style.opacity = '0';\n const off = io(el, () => {\n el.style.opacity = '';\n anim(el, [{ opacity: 0, transform: 'translateY(24px)' }, { opacity: 1, transform: 'none' }], { duration: 600, delay: Math.min(c.index, 8) * 70, easing: EASE_OUT, fill: 'backwards' });\n });\n return () => (off(), (el.style.opacity = ''));\n },\n lift: (el, c) => {\n if (c.reduced) return;\n const a = on(el, 'pointerenter', () => anim(el, [{ transform: 'none' }, { transform: 'translateY(-6px) scale(1.02)' }], { duration: 220, easing: EASE_OUT, fill: 'forwards' }));\n const b = on(el, 'pointerleave', () => anim(el, [{ transform: 'translateY(-6px) scale(1.02)' }, { transform: 'none' }], { duration: 260, easing: EASE_OUT, fill: 'forwards' }));\n return () => (a(), b());\n },\n press: (el, c) => (c.reduced ? undefined : on(el, 'pointerdown', () => anim(el, [{ transform: 'scale(1)' }, { transform: 'scale(0.94)' }, { transform: 'scale(1)' }], { duration: 260, easing: EASE_SPRING }))),\n 'count-up': (el) => countUp(el),\n pulse: (el, c) => {\n if (c.reduced) return;\n const a = anim(el, [{ boxShadow: '0 0 0 0 rgba(124, 92, 255, 0.55)' }, { boxShadow: '0 0 0 14px rgba(124, 92, 255, 0)' }], { duration: 1600, iterations: Infinity });\n return () => a?.cancel();\n },\n float: (el, c) => {\n if (c.reduced) return;\n const a = anim(el, [{ transform: 'translateY(0)' }, { transform: 'translateY(-8px)' }, { transform: 'translateY(0)' }], { duration: 3000, delay: c.index * 300, iterations: Infinity, easing: 'ease-in-out' });\n return () => a?.cancel();\n },\n shake: (el, c) => (c.reduced ? undefined : on(el, 'click', () => anim(el, [0, -8, 8, -6, 6, -3, 0].map((x) => ({ transform: `translateX(${x}px)` })), { duration: 420 }))),\n bump: (el, c) => (c.reduced ? undefined : on(el, 'usa:bump', () => anim(el, [{ transform: 'scale(1)' }, { transform: 'scale(1.25)' }, { transform: 'scale(1)' }], { duration: 360, easing: EASE_SPRING }))),\n 'fly-to-cart': (el, c) =>\n on(el, 'click', () => {\n const cart = c.root.querySelector('[data-role=\"cart\"]') || document.querySelector('[data-role=\"cart\"]');\n const item = el.closest('[data-role=\"product\"]')?.querySelector('img, [data-role=\"thumb\"]') || el;\n if (cart) void flyToCart(item, cart).then(() => cart.dispatchEvent(new CustomEvent('usa:added', { bubbles: true })));\n }),\n};\n\n/** The five effect packs: `data-role` → primitives. */\nexport const PACKS: Record<string, Record<string, string[]>> = {\n ecommerce: { product: ['reveal', 'lift'], 'add-to-cart': ['press', 'fly-to-cart'], cart: ['bump'], price: ['count-up'], badge: ['pulse'] },\n portfolio: { project: ['reveal', 'lift'], heading: ['reveal'], stat: ['count-up'], contact: ['press', 'pulse'] },\n dashboard: { card: ['reveal'], stat: ['count-up'], alert: ['pulse'], action: ['press'] },\n game: { button: ['press'], score: ['count-up', 'bump'], item: ['float'], hit: ['shake'], reward: ['pulse'] },\n landing: { hero: ['reveal'], feature: ['reveal', 'lift'], cta: ['press', 'pulse'], logo: ['float'], stat: ['count-up'] },\n};\n\nexport type PackName = keyof typeof PACKS;\n\n/**\n * Apply an effect pack to `root`: every descendant with a `data-role` the\n * pack knows gets its effects (staggered by index). Returns an undo function.\n * Reduced motion: only non-motion behaviour (e.g. the cart event) remains.\n *\n * @example\n * applyPack('ecommerce', document.querySelector('main'));\n * // <article data-role=\"product\">… <button data-role=\"add-to-cart\"> … <a data-role=\"cart\">\n */\nexport function applyPack(name: PackName | string, root: HTMLElement | Document = document): Cleanup {\n const pack = PACKS[name];\n if (!pack || typeof document === 'undefined') return () => {};\n const r = (root as Document).documentElement ? (root as Document).body : (root as HTMLElement);\n const reduced = prefersReducedMotion();\n const cleanups: Cleanup[] = [];\n for (const [role, fx] of Object.entries(pack)) {\n r.querySelectorAll<HTMLElement>(`[data-role=\"${role}\"]`).forEach((el, index) => {\n for (const f of fx) {\n const c = PRIMITIVES[f]?.(el, { root: r, index, reduced });\n if (c) cleanups.push(c);\n }\n });\n }\n return () => cleanups.splice(0).forEach((c) => c());\n}\n\n/** Primitive names a pack uses (for docs / tooling). */\nexport const PACK_PRIMITIVES = Object.keys(PRIMITIVES);\n","import { defineElement, type UsaElement } from '../base';\nimport { applyPack, PACKS } from './core';\n\n/**\n * `<usa-pack name=\"ecommerce\">` — applies an effect pack (`ecommerce` ·\n * `portfolio` · `dashboard` · `game` · `landing`) to its subtree:\n * descendants opt in with `data-role` (see `PACKS`). Re-applies when\n * `name` changes; undone on disconnect.\n */\nexport interface UsaPackElement extends UsaElement {\n readonly roles: string[];\n}\n\nexport function definePack(tag = 'usa-pack'): CustomElementConstructor | undefined {\n return defineElement(tag, (Base) =>\n class UsaPack extends Base {\n static get observedAttributes(): string[] {\n return ['name'];\n }\n get roles(): string[] {\n return Object.keys(PACKS[this.str('name', 'landing')] || {});\n }\n mount(): void {\n this.style.display ||= 'block';\n this.onCleanup(applyPack(this.str('name', 'landing'), this));\n }\n }\n );\n}\n","/**\n * use-scroll-animate/components/packs — effect packs (v3.9).\n * Ready-made motion for e-commerce, portfolio, dashboard, game UI and\n * landing pages: mark elements with `data-role` and apply a pack with\n * `<usa-pack name=\"…\">` or `applyPack(name, root)`. Includes `flyToCart()`\n * and `countUp()`.\n */\nimport { definePack, type UsaPackElement } from './pack-el';\n\nexport { definePack };\nexport { applyPack, flyToCart, countUp, PACKS, PACK_PRIMITIVES } from './core';\nexport type { PackName, PackContext } from './core';\nexport type { UsaPackElement };\nexport { configureComponents, prefersReducedMotion } from '../base';\nexport type { ComponentsConfig, UsaElement } from '../base';\n\n/** Register every component of this category under its default tag. */\nexport function definePacksComponents(): void {\n definePack();\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'usa-pack': UsaPackElement;\n }\n}\n","// The component categories and their default tags (no imports: safe for lazy loaders).\n/** The component categories and their default tags. */\nexport const COMPONENT_CATEGORIES = {\n reveal: ['usa-reveal', 'usa-stagger', 'usa-scroll-progress', 'usa-scrolly'],\n text: ['usa-typewriter', 'usa-split-text', 'usa-scramble', 'usa-counter', 'usa-shimmer-text', 'usa-text-rotate', 'usa-wave-text', 'usa-glitch', 'usa-gradient-text', 'usa-handwriting', 'usa-scroll-highlight'],\n interaction: ['usa-ripple', 'usa-magnetic', 'usa-tilt', 'usa-spotlight', 'usa-press', 'usa-toggle'],\n feedback: ['usa-spinner', 'usa-skeleton', 'usa-progress', 'usa-toaster', 'usa-check'],\n background: ['usa-aurora', 'usa-particles', 'usa-grain', 'usa-marquee', 'usa-acrylic', 'usa-grid-glow', 'usa-blobs', 'usa-water-ripple', 'usa-dot-network'],\n transitions: ['usa-dialog', 'usa-accordion', 'usa-view-switch'],\n physics: ['usa-spring', 'usa-draggable', 'usa-overscroll'],\n cards: ['usa-card', 'usa-card-stack', 'usa-sticky-stack', 'usa-carousel-3d'],\n click: ['usa-click', 'usa-button', 'usa-icon-morph', 'usa-like', 'usa-hold', 'usa-double-tap', 'usa-checkbox'],\n ui: ['usa-tabs', 'usa-drawer', 'usa-bottom-sheet', 'usa-pull-refresh', 'usa-fab', 'usa-navbar', 'usa-slider', 'usa-rating', 'usa-tooltip', 'usa-popover', 'usa-badge', 'usa-avatar-stack'],\n page: ['usa-cursor', 'usa-fullpage', 'usa-loading-bar', 'usa-back-to-top', 'usa-ambient', 'usa-splash', 'usa-auto-skeleton', 'usa-motion-switch'],\n timeline: ['usa-timeline'],\n gesture: ['usa-swipeable', 'usa-pinch-zoom'],\n svg: ['usa-draw', 'usa-morph', 'usa-mask-reveal', 'usa-anim-icon'],\n webgl: ['usa-shader', 'usa-distort', 'usa-liquid'],\n depth: ['usa-cube', 'usa-depth'],\n layout: ['usa-auto-animate', 'usa-masonry'],\n packs: ['usa-pack'],\n} as const;\n\nexport type ComponentCategory = keyof typeof COMPONENT_CATEGORIES;\n","/**\n * use-scroll-animate/components\n *\n * Framework-agnostic, dependency-free animated UI components built on\n * Custom Elements + CSS + the Web Animations API. They run in any browser\n * and in Windows desktop apps that render with a web view: Electron, Tauri\n * (WebView2), WinUI 3 / WPF / WinForms with WebView2, and installed PWAs.\n *\n * ```js\n * import { defineComponents } from 'use-scroll-animate/components';\n * defineComponents(); // registers every <usa-*> element\n * // or only what you use (tree-shakable):\n * import { defineTypewriter } from 'use-scroll-animate/components/text';\n * ```\n *\n * Importing has no side effects and is SSR-safe; nothing is registered\n * until a `define*()` function runs in a browser.\n *\n * @license MIT\n */\nimport { defineRevealComponents } from './reveal/index';\nimport { defineTextComponents } from './text/index';\nimport { defineInteractionComponents } from './interaction/index';\nimport { defineFeedbackComponents } from './feedback/index';\nimport { defineBackgroundComponents } from './background/index';\nimport { defineTransitionComponents } from './transitions/index';\nimport { definePhysicsComponents } from './physics/index';\nimport { defineCardComponents } from './cards/index';\nimport { defineClickComponents } from './click/index';\nimport { defineUiComponents } from './ui/index';\nimport { definePageComponents } from './page/index';\nimport { defineTimelineComponents } from './timeline/index';\nimport { defineGestureComponents } from './gesture/index';\nimport { defineSvgComponents } from './svg/index';\nimport { defineWebglComponents } from './webgl/index';\nimport { defineDepthComponents } from './depth/index';\nimport { defineLayoutComponents } from './layout/index';\nimport { definePacksComponents } from './packs/index';\nimport { adoptVariants } from './ui/variants';\nimport { canDefine } from './base';\n\nexport * from './reveal/index';\nexport * from './text/index';\nexport * from './interaction/index';\nexport * from './feedback/index';\nexport * from './background/index';\nexport * from './transitions/index';\nexport * from './physics/index';\nexport * from './cards/index';\nexport * from './click/index';\nexport * from './ui/index';\nexport * from './page/index';\nexport * from './timeline/index';\nexport * from './gesture/index';\nexport * from './svg/index';\nexport * from './webgl/index';\nexport * from './depth/index';\nexport * from './layout/index';\nexport * from './packs/index';\n\nexport { COMPONENT_CATEGORIES } from './index-tags';\nexport type { ComponentCategory } from './index-tags';\nimport { COMPONENT_CATEGORIES, type ComponentCategory } from './index-tags';\n\nconst BY_CATEGORY: Record<ComponentCategory, () => void> = {\n reveal: defineRevealComponents,\n text: defineTextComponents,\n interaction: defineInteractionComponents,\n feedback: defineFeedbackComponents,\n background: defineBackgroundComponents,\n transitions: defineTransitionComponents,\n physics: definePhysicsComponents,\n cards: defineCardComponents,\n click: defineClickComponents,\n ui: defineUiComponents,\n page: definePageComponents,\n timeline: defineTimelineComponents,\n gesture: defineGestureComponents,\n svg: defineSvgComponents,\n webgl: defineWebglComponents,\n depth: defineDepthComponents,\n layout: defineLayoutComponents,\n packs: definePacksComponents,\n};\n\n/**\n * Register every `<usa-*>` component (or only the given categories).\n * Safe to call more than once and on the server (no-op without DOM).\n */\nexport function defineComponents(categories?: ComponentCategory[]): void {\n if (canDefine()) adoptVariants();\n (categories || (Object.keys(BY_CATEGORY) as ComponentCategory[])).forEach((c) => BY_CATEGORY[c]?.());\n}\n","// IIFE/UMD build (dist/components.umd.js): registers every <usa-*> element\n// as soon as the script loads. Exposes the full API as `window.UsaComponents`.\nimport { defineComponents } from './index';\n\ndefineComponents();\nexport * from './index';\n","import { adoptStyles, raf, caf, prefersReducedMotion } from '../base';\nimport { setVariant } from '../ui/variants';\nimport css from './fluent.css?raw';\n\nexport interface FluentPresetOptions {\n /** Root to apply to (default `document.documentElement`). */\n root?: HTMLElement;\n /** Reveal highlight on interactive elements (default `true`). */\n reveal?: boolean;\n /** Reveal targets (default buttons, links, `[data-fluent-reveal]`). */\n selector?: string;\n /** Mica-style tinted window background on `<body>` (default `true`). */\n mica?: boolean;\n}\n\n/**\n * Windows 11 **Fluent preset** (v2.8): applies the `fluent` variant\n * (Segoe UI Variable, Windows accent, 8 px radii), a Mica-style tinted\n * window background, Acrylic on `.usa-acrylic` / `[data-acrylic]`, and\n * Reveal highlight (a light following the pointer on borders and\n * backgrounds of interactive elements). Ideal for WebView2 / Electron /\n * Tauri apps on Windows. Returns a function that removes it.\n * Respects reduced motion / transparency (no Reveal tracking; solid materials).\n */\nexport function fluentPreset(options: FluentPresetOptions = {}): () => void {\n if (typeof document === 'undefined') return () => undefined;\n const root = options.root || document.documentElement;\n adoptStyles('fluent-preset', css);\n setVariant('fluent', root);\n root.classList.add('usa-fluent');\n if (options.mica !== false) root.classList.add('usa-fluent-mica');\n const sel = options.selector || 'button, [role=\"button\"], a.usa-fluent-item, [data-fluent-reveal], .usa-fluent-item';\n let frame = 0;\n let last: HTMLElement | null = null;\n let ev: PointerEvent | null = null;\n const apply = () => {\n frame = 0;\n if (!ev) return;\n const t = (ev.target as Element)?.closest?.(sel) as HTMLElement | null;\n if (last && last !== t) last.removeAttribute('data-reveal');\n last = t;\n if (!t) return;\n const r = t.getBoundingClientRect();\n t.style.setProperty('--usa-reveal-x', `${ev.clientX - r.left}px`);\n t.style.setProperty('--usa-reveal-y', `${ev.clientY - r.top}px`);\n t.setAttribute('data-reveal', '');\n };\n const move = (e: PointerEvent) => {\n if (e.pointerType === 'touch') return;\n ev = e;\n if (!frame) frame = raf(apply);\n };\n const reveal = options.reveal !== false && !prefersReducedMotion();\n if (reveal) document.addEventListener('pointermove', move, { passive: true });\n return () => {\n document.removeEventListener('pointermove', move);\n caf(frame);\n last?.removeAttribute('data-reveal');\n root.classList.remove('usa-fluent', 'usa-fluent-mica');\n setVariant(null, root);\n };\n}\n"],"names":["MOTION_SCALE","off","low","normal","high","config","injectStyles","reducedMotion","motionIntensity","configureComponents","options","Object","assign","document","documentElement","style","setProperty","String","setAttribute","getMotionIntensity","motionScale","canDefine","customElements","HTMLElement","prefersReducedMotion","matchMedia","matches","injected","Set","adoptStyles","id","css","has","add","CSSStyleSheet","sheet","replaceSync","adoptedStyleSheets","createElement","textContent","head","appendChild","baseClass","applyFrame","el","frame","k","v","entries","defineElement","tag","make","BASE_CSS","text","existing","get","ctor","Base","constructor","this","_cleanups","_connected","reduced","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","getAttribute","num","n","trim","NaN","Number","isFinite","flag","setFlag","on","removeAttribute","onCleanup","listen","target","type","inView","cb","init","IntersectionObserver","io","e","isIntersecting","observe","disconnect","motion","keyframes","animate","duration","delay","emit","detail","dispatchEvent","CustomEvent","bubbles","cancelable","getBase","define","srText","s","className","raf","requestAnimationFrame","setTimeout","Date","now","performance","caf","cancelAnimationFrame","clearTimeout","EASE_OUT","EASE_SPRING","FLUENT_DECELERATE","kindOf","valid","Array","isArray","includes","clamp","min","max","Math","revealKeyframes","effect","distance","from","d","opacity","transform","filter","transformOrigin","revealFrom","to","keys","defineReveal","_anim","observedAttributes","revealed","visible","reveal","reset","threshold","rootMargin","cancel","Promise","resolve","a","easing","fill","done","onfinish","defineStagger","_anims","kids","children","frames","interval","base","anims","map","kid","i","last","readScrollProgress","window","vh","innerHeight","clientHeight","r","getBoundingClientRect","total","height","top","doc","scrollHeight","scrollY","scrollTop","defineScrollProgress","_bar","_p","_frame","progress","replaceChildren","hasAttribute","schedule","update","passive","sel","p","querySelector","abs","pct","round","defineScrolly","_active","active","steps","querySelectorAll","offset","activate","indexOf","index","silent","toggleAttribute","step","dataset","defineRevealComponents","defineTypewriter","_source","_out","_timer","_running","phrases","words","split","w","Boolean","sr","join","caret","start","stop","restart","out","speed","del","pause","loop","deleting","tick","word","slice","random","defineSplitText","units","replace","byWords","frag","createDocumentFragment","append","wordEl","parts","part","u","trigger","play","offsetWidth","GLYPHS","scrambleFrame","glyphs","rnd","floor","ch","test","defineScramble","played","t0","bucket","undefined","easeOutExpo","t","pow","defineCounter","_current","_target","_fmt","isNaN","format","locale","lang","Intl","NumberFormat","minimumFractionDigits","maximumFractionDigits","useGrouping","render","defineShimmerText","set","attr","prop","unit","removeProperty","defineTextRotate","_index","_visible","setInterval","hidden","next","clearInterval","els","prev","cur","inFrom","outTo","neutral","pick","f","fromEntries","textOf","usaText","defineWaveText","host","vis","chars","createTextNode","c","splitChars","defineGlitch","firstChild","defineGradientText","defineHandwriting","size","ceil","insertAdjacentHTML","defineScrollHighlight","_f","mode","H","lit","defineTextComponents","defineRipple","button","pointerType","ripple","clientX","clientY","key","repeat","x","y","centered","cx","width","left","cy","radius","hypot","wave","cssText","remove","defineMagnetic","strength","apply","dx","dy","toFixed","release","defineTilt","_glare","scale","persp","px","py","rect","nx","ny","defineSpotlight","items","marked","classList","color","border","definePress","_down","pressed","down","currentFrame","up","getComputedStyle","cs","defineToggle","_a","super","_internals","attachInternals","checked","disabled","sync","tabIndex","label","setFormValue","track","knob","prepend","toggle","preventDefault","force","Event","formAssociated","defineInteractionComponents","SPINNER_VARIANTS","defineSpinner","kind","variant","innerHTML","markup","defineSkeleton","_ph","loading","build","ph","bone","cls","b","col","defineProgress","_fill","m","ratio","firstElementChild","ICONS","info","success","warning","error","defineToaster","flip","mutate","before","Map","composite","enterFrames","pos","endsWith","startsWith","show","message","closed","timer","close","action","btn","onClick","dismissible","arm","hold","live","extra","_close","element","clear","PATHS","defineCheck","circle","mark","svg","draw","strokeDashoffset","defineFeedbackComponents","defineAurora","_layer","colors","blob","defineParticles","_canvas","_ctx","_ps","_w","_h","_mx","_color","_my","getContext","resize","ResizeObserver","ro","clientWidth","h","dpr","devicePixelRatio","setTransform","want","PI","vx","cos","vy","sin","run","d2","sqrt","ctx","clearRect","fillStyle","strokeStyle","ps","link","l2","lineWidth","j","globalAlpha","beginPath","moveTo","lineTo","stroke","arc","defineGrain","backgroundImage","backgroundSize","mixBlendMode","defineMarquee","_track","_hover","_size","vertical","group","syncClones","lastElementChild","clone","cloneNode","gap","measured","offsetHeight","box","getComputedTiming","axis","iterations","Infinity","currentTime","getTiming","playState","resume","defineAcrylic","tint","canvasLoop","still","defineGridGlow","defineBlobs","layer","defineWaterRipple","_drop","drop","cols","rows","Float32Array","damp","nc","nr","fillRect","defineDotNetwork","R","near","ox","oy","adoptVariants","setVariant","root","defineBackgroundComponents","FROM","modal","defineDialog","_dialog","_panel","_backdrop","_busy","_syncing","returnValue","dialog","open","syncAttrs","shadowRoot","attachShadow","shadowStyles","dlg","closest","contains","setOpenAttr","showModal","animate2","panelTo","panelFrom","getAnimations","panel","backdrop","all","finished","catch","then","defineAccordion","WeakMap","tagName","summary","parentElement","toggleItem","closedHeight","reduce","parseFloat","o","delete","startH","details","endH","overflow","defineViewSwitch","views","byName","findIndex","view","isInteger","setVisible","finish","dir","outF","inF","list","Element","defineTransitionComponents","SPRING_PRESETS","default","stiffness","damping","mass","gentle","wobbly","stiff","bouncy","slow","molasses","resolveSpring","input","velocity","precision","stepSpring","cfg","dt","nv","cache","springSamples","fps","hit","values","supportsLinearEasing","CSS","supports","springEasing","points","linearEasing","createSpring","opts","spring","running","onUpdate","onRest","api","animating","jump","configure","projectInertia","timeConstant","snapTo","best","rubberBand","dimension","constant","ENTRANCE","springEffectKeyframes","DEFAULT_PRESET","pop","defineSpring","entrance","timing","parseSnap","defineDraggable","_x","_y","_drag","dragging","limits","minX","maxX","right","minY","maxY","bottom","settled","rest","_sx","_sy","move","end","pointerId","samples","timeStamp","setPointerCapture","band","lo","hi","dim","shift","tx","ty","constrain","snap","ArrowLeft","ArrowRight","ArrowUp","ArrowDown","defineOverscroll","_off","edge","delta","scrollLeft","scrollWidth","stretch","raw","_spring","pull","deltaX","deltaY","touches","dist","definePhysicsComponents","TRACKING","defineCard","_spacer","effects","flipped","expanded","deco","interactive","setBackHidden","stopPropagation","collapse","expand","some","depth","l","finishCollapse","front","back","first","spacer","flipFrom","focus","preventScroll","sx","sy","defineCardStack","cards","layout","dragX","zIndex","rot","kk","x0","swipe","mo","MutationObserver","childList","direction","card","defineStickyStack","rects","shrink","covered","defineCarousel3d","_i","goTo","angle","tan","it","norm","_angle","find","every","paused","curIdx","defineCardComponents","PALETTE","GLYPH","star","heart","particle","shape","glyph","body","burst","count","confetti","W","innerWidth","spread","T","spin","g","shake","intensity","outline","haptic","pattern","navigator","vibrate","defineClick","_press","kb","capture","fx","gooInjected","defineButton","_status","_shapeBefore","deforms","morphTo","state","createElementNS","position","injectGoo","applyState","isOff","ev","wobble","submit","click","goo","getKeyframes","borderRadius","backgroundColor","drops","ang","after","ok","C","MORPH_ICONS","menu","plus","minus","check","morphPath","q","defineIconMorph","_from","_to","icon","_t","defineLike","liked","getPropertyValue","defineHold","_holding","dur","rewind","defineDoubleTap","lx","ly","toLowerCase","defineCheckbox","UsaCheckbox","indeterminate","defineClickComponents","place","floating","anchor","placement","fits","opposite","uid","nextId","prefix","defineTabs","selected","select","tabs","localName","panels","Home","End","moveBar","bar","fromW","offsetLeft","initial","makePanel","_return","side","stops","_pos","afterClose","dragStart","dragMove","dragEnd","hide","activeElement","initialStop","origin","lt","moved","vel","defineDrawer","defineBottomSheet","Panel","fractions","full","sort","definePullRefresh","_ind","_live","refreshing","th","refresh","onrefresh","defineFab","main","actions","defineNavbar","_last","hiddenByScroll","scroller","defineSlider","UsaSlider","_v","_id","range","setValue","fraction","user","val","bubble","fromPointer","commit","mn","mx","st","PageUp","PageDown","defineRating","UsaRating","_","preview","choose","defineTooltip","_tip","tip","definePopover","defineBadge","_el","bump","empty","defineAvatarStack","more","defineUiComponents","defineCursor","fine","dot","pts","my","goalX","goalY","kick","scrollToTarget","node","scrollTo","preset","defineFullpage","sections","secs","nav","intersectionRatio","behavior","offsetTop","defineLoadingBar","paint","loadingBar","task","defineBackToTop","async","defineAmbient","upd","canvas","dots","defineSplash","_t0","_gone","wait","exit","fade","clipPath","defineAutoSkeleton","LEVELS","KEY","setMotionIntensity","level","persist","localStorage","setItem","restoreMotionIntensity","getItem","defineMotionSwitch","labels","lastPointer","trackPointer","supportsViewTransitions","startViewTransition","setVars","pageTransition","vt","definePageComponents","supportsNativeScrub","source","globalThis","prototype","handle","native","TIMELINE_PRESETS","blur","rotate","resolvePosition","prevStart","exec","timeline","stagger","defaults","cues","settle","built","at","anim","onComplete","rate","time","kf","toEls","call","seek","scrub","smooth","engine","tl","ScrollTimeline","ViewTimeline","subject","ms","rangeStart","rangeEnd","goal","progressNow","sm","onScroll","defineTimeline","_tl","overlap","defineTimelineComponents","swipeDirection","horiz","pinchScale","startDistance","pid","gesture","press","panning","pinch","pinchScaleNow","lastTap","onPinch","onPan","event","d0","onLongPress","longPress","mid","swipeDistance","swipeVelocity","onSwipe","onDoubleTap","onTap","wheel","wheelPinch","ctrlKey","exp","touchAction","defineSwipeable","put","sign","far","_s","definePinchZoom","bound","zoomTo","_k","defineGestureComponents","NUM","pathsCompatible","interpolatePath","nb","match","ease","path","__usaMorph","drawLines","shapes","strokeDasharray","local","defineDraw","_set","defineMorph","_path","MASK_SHAPES","diamond","wipe","iris","defineMaskReveal","ANIM_ICONS","bell","arrow","translate","gear","search","download","defineAnimIcon","defineSvgComponents","SHADERS","gradient","plasma","waves","aurora","distort","liquid","fragmentSource","src","support","glQuad","gl","premultipliedAlpha","antialias","sh","createShader","shaderSource","compileShader","getShaderParameter","COMPILE_STATUS","vs","VERTEX_SHADER","fs","FRAGMENT_SHADER","prog","createProgram","attachShader","linkProgram","getProgramParameter","LINK_STATUS","useProgram","buf","createBuffer","bindBuffer","ARRAY_BUFFER","bufferData","STATIC_DRAW","loc","getAttribLocation","enableVertexAttribArray","vertexAttribPointer","FLOAT","U","getUniformLocation","uT","uR","uM","uH","uRp","tex","quad","viewport","texture","img","createTexture","bindTexture","TEXTURE_2D","pixelStorei","UNPACK_FLIP_Y_WEBGL","texParameteri","TEXTURE_WRAP_S","CLAMP_TO_EDGE","TEXTURE_WRAP_T","TEXTURE_MIN_FILTER","LINEAR","texImage2D","RGBA","UNSIGNED_BYTE","uniform1f","uniform2f","mouse","hover","uniform4fv","ripples","concat","drawArrays","TRIANGLES","dispose","deleteProgram","deleteBuffer","deleteTexture","getExtension","loseContext","_q","_c","_mouse","_hoverTo","_ripples","reason","flatMap","custom","complete","naturalWidth","crossOrigin","location","defineShader","defineDistort","defineLiquid","defineWebglComponents","FACES","ROT","defineCube","_base","faces","_rx","_ry","face","rx","ry","orientationToTilt","beta","gamma","supportsOrientation","requestOrientationPermission","D","DeviceOrientationEvent","requestPermission","deviceTilt","defineDepth","tilt","defineDepthComponents","flipFrames","autoAnimate","parent","boxes","rel","records","added","addedNodes","removedNodes","margin","pointerEvents","__usaGhost","enable","disable","masonryLayout","heights","columns","columnWidth","defineAutoAnimate","defineMasonry","cw","queue","recs","defineLayoutComponents","es","countUp","dec","fmt","toLocaleString","flyToCart","ghost","PRIMITIVES","lift","pulse","boxShadow","float","cart","item","PACKS","ecommerce","product","price","badge","portfolio","project","heading","stat","contact","dashboard","alert","game","score","reward","landing","hero","feature","cta","logo","applyPack","pack","cleanups","role","PACK_PRIMITIVES","definePack","roles","display","definePacksComponents","BY_CATEGORY","interaction","feedback","background","transitions","physics","ui","page","webgl","packs","defineComponents","categories","targets","animateEnter","mica","selector","collect","shared","named","viewTransitionName","lerp","mult","wheelMultiplier","current","onWheel","defaultPrevented","deltaMode","toaster","types"],"mappings":"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"}