use-scroll-animate 2.3.0 → 2.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"file":"physics.js","sources":["../../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"],"sourcesContent":["import { prefersReducedMotion, 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, 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"],"names":["css"],"mappings":"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"}
1
+ {"version":3,"file":"physics.js","sources":["../../src/components/physics/spring-effect.ts","../../src/components/physics/draggable.ts","../../src/components/physics/overscroll.ts","../../src/components/physics/index.ts"],"sourcesContent":["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"],"names":["css"],"mappings":";;;;;;;AAIO,MAAM,cAAc,GAAG,CAAC,WAAW,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,aAAa;AAGjF;AACA,MAAM,QAAQ,GAAG,IAAI,GAAG,CAAS,CAAC,WAAW,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC;AAE9D;SACgB,qBAAqB,CAAC,MAAc,EAAE,OAAO,GAAG,KAAK,EAAA;AACnE,IAAA,IAAI,OAAO;AAAE,QAAA,OAAO,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,EAAE,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,EAAE,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC;IAC9G,QAAQ,MAAM;AACZ,QAAA,KAAK,KAAK;YACR,OAAO,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,SAAS,EAAE,YAAY,EAAE,EAAE,EAAE,OAAO,EAAE,CAAC,EAAE,SAAS,EAAE,UAAU,EAAE,CAAC;AACzF,QAAA,KAAK,MAAM;YACT,OAAO,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,SAAS,EAAE,0BAA0B,EAAE,EAAE,EAAE,OAAO,EAAE,CAAC,EAAE,SAAS,EAAE,sBAAsB,EAAE,CAAC;AACnH,QAAA,KAAK,OAAO;YACV,OAAO;gBACL,EAAE,SAAS,EAAE,kBAAkB,EAAE;AACjC,gBAAA,EAAE,SAAS,EAAE,wBAAwB,EAAE,MAAM,EAAE,GAAG,EAAE;AACpD,gBAAA,EAAE,SAAS,EAAE,wBAAwB,EAAE,MAAM,EAAE,GAAG,EAAE;AACpD,gBAAA,EAAE,SAAS,EAAE,wBAAwB,EAAE,MAAM,EAAE,GAAG,EAAE;AACpD,gBAAA,EAAE,SAAS,EAAE,wBAAwB,EAAE,MAAM,EAAE,IAAI,EAAE;AACrD,gBAAA,EAAE,SAAS,EAAE,wBAAwB,EAAE,MAAM,EAAE,IAAI,EAAE;gBACrD,EAAE,SAAS,EAAE,kBAAkB,EAAE;aAClC;AACH,QAAA,KAAK,aAAa;YAChB,OAAO;gBACL,EAAE,SAAS,EAAE,kBAAkB,EAAE;AACjC,gBAAA,EAAE,SAAS,EAAE,sBAAsB,EAAE,MAAM,EAAE,GAAG,EAAE;AAClD,gBAAA,EAAE,SAAS,EAAE,sBAAsB,EAAE,MAAM,EAAE,IAAI,EAAE;AACnD,gBAAA,EAAE,SAAS,EAAE,sBAAsB,EAAE,MAAM,EAAE,GAAG,EAAE;AAClD,gBAAA,EAAE,SAAS,EAAE,wBAAwB,EAAE,MAAM,EAAE,GAAG,EAAE;gBACpD,EAAE,SAAS,EAAE,kBAAkB,EAAE;aAClC;AACH,QAAA;YACE,OAAO,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,SAAS,EAAE,YAAY,EAAE,EAAE,EAAE,OAAO,EAAE,CAAC,EAAE,SAAS,EAAE,UAAU,EAAE,CAAC;;AAE7F;AAEA,MAAM,cAAc,GAA2B,EAAE,WAAW,EAAE,QAAQ,EAAE,GAAG,EAAE,QAAQ,EAAE,IAAI,EAAE,QAAQ,EAAE;AAkBjG,SAAU,YAAY,CAAC,GAAG,GAAG,YAAY,EAAA;AAC7C,IAAA,OAAO,aAAa,CAClB,GAAG,EACH,CAAC,IAAI,KACH,MAAM,SAAU,SAAQ,IAAI,CAAA;AAA5B,QAAA,WAAA,GAAA;;YAKU,IAAA,CAAA,KAAK,GAAqB,IAAI;QAmExC;AAvEE,QAAA,WAAW,kBAAkB,GAAA;AAC3B,YAAA,OAAO,CAAC,QAAQ,EAAE,SAAS,EAAE,QAAQ,CAAC;QACxC;AAIA,QAAA,IAAI,MAAM,GAAA;YACR,OAAO,IAAI,CAAC,GAAG,CAAC,QAAQ,EAAE,WAAW,CAAC;QACxC;QACA,IAAI,MAAM,CAAC,CAAS,EAAA;AAClB,YAAA,IAAI,CAAC,YAAY,CAAC,QAAQ,EAAE,CAAC,CAAC;QAChC;QAEQ,MAAM,GAAA;AACZ,YAAA,IAAI,IAAI,CAAC,YAAY,CAAC,WAAW,CAAC,IAAI,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,IAAI,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC;AAC7F,gBAAA,OAAO,EAAE,SAAS,EAAE,IAAI,CAAC,GAAG,CAAC,WAAW,EAAE,GAAG,CAAC,EAAE,OAAO,EAAE,IAAI,CAAC,GAAG,CAAC,SAAS,EAAE,EAAE,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,CAAC,CAAC,EAAE;AAC/G,YAAA,OAAO,IAAI,CAAC,GAAG,CAAC,QAAQ,EAAE,cAAc,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,QAAQ,CAAC;QACpE;QAEA,KAAK,GAAA;YACH,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,SAAS,EAAE,MAAM,CAAC;YAC3C,MAAM,QAAQ,GAAG,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC;AAC1C,YAAA,IAAI,OAAO,KAAK,MAAM,EAAE;AACtB,gBAAA,IAAI,QAAQ;AAAE,oBAAA,IAAI,CAAC,YAAY,CAAC,YAAY,EAAE,QAAQ,CAAC;AACvD,gBAAA,IAAI,CAAC,MAAM,CAAC,CAAC,OAAO,KAAI;AACtB,oBAAA,IAAI,OAAO;wBAAE,IAAI,CAAC,IAAI,EAAE;AACnB,yBAAA,IAAI,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,QAAQ;wBAAE,IAAI,CAAC,KAAK,EAAE;AACxD,gBAAA,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC;YACzB;iBAAO;gBACL,IAAI,OAAO,KAAK,OAAO;AAAE,oBAAA,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,cAAc,EAAE,MAAM,IAAI,CAAC,IAAI,EAAE,CAAC;AAC7E,gBAAA,IAAI,OAAO,KAAK,OAAO,EAAE;AACvB,oBAAA,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,OAAO,EAAE,MAAM,IAAI,CAAC,IAAI,EAAE,CAAC;AAC7C,oBAAA,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,SAAS,EAAE,CAAC,CAAgB,KAAK,CAAC,CAAC,CAAC,GAAG,KAAK,OAAO,IAAI,CAAC,CAAC,GAAG,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC,MAAM,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;gBACtH;YACF;QACF;QAEA,OAAO,GAAA;AACL,YAAA,IAAI,CAAC,KAAK,EAAE,MAAM,EAAE;AACpB,YAAA,IAAI,CAAC,KAAK,GAAG,IAAI;QACnB;QAEA,KAAK,GAAA;AACH,YAAA,IAAI,CAAC,KAAK,EAAE,MAAM,EAAE;AACpB,YAAA,IAAI,CAAC,KAAK,GAAG,IAAI;AACjB,YAAA,IAAI,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC;AAAE,gBAAA,IAAI,CAAC,YAAY,CAAC,YAAY,EAAE,QAAQ,CAAC;QAC1E;AAEA,QAAA,MAAM,IAAI,GAAA;AACR,YAAA,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM;AAC1B,YAAA,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO;AAC5B,YAAA,IAAI,CAAC,KAAK,EAAE,MAAM,EAAE;AACpB,YAAA,IAAI,CAAC,YAAY,CAAC,YAAY,EAAE,SAAS,CAAC;YAC1C,MAAM,MAAM,GAAG,qBAAqB,CAAC,MAAM,EAAE,OAAO,CAAC;YACrD,MAAM,MAAM,GAA6B,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC;AAChE,kBAAE,YAAY,CAAC,IAAI,CAAC,MAAM,EAAE;kBAC1B,EAAE,QAAQ,EAAE,OAAO,GAAG,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,UAAU,EAAE,GAAG,CAAC,EAAE,MAAM,EAAE,UAAU,EAAE;AAC/E,YAAA,MAAM,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,GAAG,MAAM,EAAE,KAAK,EAAE,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,CAAC;AAClG,YAAA,IAAI,CAAC,KAAK,GAAG,CAAC;YACd,IAAI,CAAC,EAAE;AACL,gBAAA,IAAI;oBACF,MAAM,CAAC,CAAC,QAAQ;gBAClB;AAAE,gBAAA,MAAM;oBACN;gBACF;AACA,gBAAA,IAAI,IAAI,CAAC,KAAK,KAAK,CAAC;oBAAE;YACxB;AACA,YAAA,IAAI,CAAC,KAAK,GAAG,IAAI;AACjB,YAAA,IAAI,CAAC,YAAY,CAAC,YAAY,EAAE,MAAM,CAAC;YACvC,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,EAAE,MAAM,EAAE,CAAC;QACnC;KACD,EACH,EAAE,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAEA,KAAG,EAAE,CAC5B;AACH;;;;AClHA,MAAM,SAAS,GAAG,CAAC,CAAS,KAA8B;AACxD,IAAA,IAAI,CAAC,CAAC,CAAC,IAAI,EAAE;AAAE,QAAA,OAAO,IAAI;AAC1B,IAAA,MAAM,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,MAAM,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;IACzF,IAAI,CAAC,KAAK,CAAC,MAAM;AAAE,QAAA,OAAO,IAAI;AAC9B,IAAA,OAAO,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC;AAC3C,CAAC;AAEK,SAAU,eAAe,CAAC,GAAG,GAAG,eAAe,EAAA;AACnD,IAAA,OAAO,aAAa,CAClB,GAAG,EACH,CAAC,IAAI,KACH,MAAM,YAAa,SAAQ,IAAI,CAAA;AAA/B,QAAA,WAAA,GAAA;;YAKU,IAAA,CAAA,EAAE,GAAG,CAAC;YACN,IAAA,CAAA,EAAE,GAAG,CAAC;YAGN,IAAA,CAAA,KAAK,GAA+G,IAAI;QAkLlI;AA1LE,QAAA,WAAW,kBAAkB,GAAA;AAC3B,YAAA,OAAO,CAAC,MAAM,EAAE,UAAU,EAAE,QAAQ,CAAC;QACvC;AAQA,QAAA,IAAI,CAAC,GAAA;YACH,OAAO,IAAI,CAAC,EAAE;QAChB;AACA,QAAA,IAAI,CAAC,GAAA;YACH,OAAO,IAAI,CAAC,EAAE;QAChB;AACA,QAAA,IAAI,QAAQ,GAAA;AACV,YAAA,OAAO,CAAC,CAAC,IAAI,CAAC,KAAK;QACrB;QAEQ,MAAM,GAAA;AACZ,YAAA,IAAI,CAAC,KAAK,CAAC,SAAS,GAAG,CAAA,YAAA,EAAe,IAAI,CAAC,EAAE,CAAA,IAAA,EAAO,IAAI,CAAC,EAAE,QAAQ;AACnE,YAAA,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,cAAc,EAAE,CAAA,EAAG,IAAI,CAAC,EAAE,CAAA,EAAA,CAAI,CAAC;AACtD,YAAA,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,cAAc,EAAE,CAAA,EAAG,IAAI,CAAC,EAAE,CAAA,EAAA,CAAI,CAAC;QACxD;QAEQ,IAAI,GAAA;YACV,OAAO,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC;QACjC;;QAGQ,MAAM,GAAA;AACZ,YAAA,IAAI,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,KAAK,QAAQ,IAAI,CAAC,IAAI,CAAC,aAAa;AAAE,gBAAA,OAAO,IAAI;YACvE,MAAM,CAAC,GAAG,IAAI,CAAC,aAAa,CAAC,qBAAqB,EAAE;AACpD,YAAA,MAAM,CAAC,GAAG,IAAI,CAAC,qBAAqB,EAAE;YACtC,MAAM,EAAE,GAAG,CAAC,CAAC,IAAI,GAAG,IAAI,CAAC,EAAE;YAC3B,MAAM,EAAE,GAAG,CAAC,CAAC,GAAG,GAAG,IAAI,CAAC,EAAE;AAC1B,YAAA,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,GAAG,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,KAAK,GAAG,EAAE,GAAG,CAAC,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,GAAG,GAAG,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,MAAM,GAAG,EAAE,GAAG,CAAC,CAAC,MAAM,EAAE;QAC9G;QAEA,KAAK,GAAA;YACH,IAAI,OAAO,GAAG,CAAC;YACf,MAAM,IAAI,GAAG,MAAK;AAChB,gBAAA,IAAI,EAAE,OAAO,IAAI,CAAC,EAAE;oBAClB,OAAO,GAAG,CAAC;AACX,oBAAA,IAAI,CAAC,eAAe,CAAC,aAAa,CAAC;AACnC,oBAAA,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,EAAE,CAAC,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC;gBACjD;AACF,YAAA,CAAC;YACD,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,QAAQ,EAAE,QAAQ,CAAC;AAC3C,YAAA,IAAI,CAAC,GAAG,GAAG,YAAY,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,EAAE,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,GAAG,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;AAClH,YAAA,IAAI,CAAC,GAAG,GAAG,YAAY,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,EAAE,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,GAAG,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;AAClH,YAAA,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC;AAAE,gBAAA,IAAI,CAAC,QAAQ,GAAG,CAAC;AACrD,YAAA,IAAI,CAAC,YAAY,CAAC,sBAAsB,EAAE,WAAW,CAAC;AACtD,YAAA,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,aAAa,EAAE,CAAC,CAAe,KAAK,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AACpE,YAAA,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,aAAa,EAAE,CAAC,CAAe,KAAK,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AACnE,YAAA,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,WAAW,EAAE,CAAC,CAAe,KAAK,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;AAChE,YAAA,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,eAAe,EAAE,CAAC,CAAe,KAAK,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;AACpE,YAAA,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,SAAS,EAAE,CAAC,CAAgB,KAAK,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;YAC/D,IAAI,CAAC,MAAM,EAAE;QACf;QAEA,OAAO,GAAA;AACL,YAAA,IAAI,CAAC,GAAG,EAAE,IAAI,EAAE;AAChB,YAAA,IAAI,CAAC,GAAG,EAAE,IAAI,EAAE;AAChB,YAAA,IAAI,CAAC,KAAK,GAAG,IAAI;QACnB;AAEQ,QAAA,KAAK,CAAC,CAAe,EAAA;AAC3B,YAAA,IAAI,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,WAAW,KAAK,OAAO,IAAI,CAAC,CAAC,MAAM,KAAK,CAAC,CAAC;gBAAE;AAC5E,YAAA,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE;AACf,YAAA,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE;AACf,YAAA,IAAI,CAAC,KAAK,GAAG,EAAE,EAAE,EAAE,CAAC,CAAC,SAAS,EAAE,EAAE,EAAE,CAAC,CAAC,OAAO,EAAE,EAAE,EAAE,CAAC,CAAC,OAAO,EAAE,EAAE,EAAE,IAAI,CAAC,EAAE,EAAE,EAAE,EAAE,IAAI,CAAC,EAAE,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,SAAS,KAAK,QAAQ,GAAG,CAAC,CAAC,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE;AACvL,YAAA,IAAI;gBACF,IAAI,CAAC,iBAAiB,GAAG,CAAC,CAAC,SAAS,CAAC;YACvC;AAAE,YAAA,MAAM;;YAER;AACA,YAAA,IAAI,CAAC,YAAY,CAAC,eAAe,EAAE,EAAE,CAAC;AACtC,YAAA,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,EAAE,CAAC,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC;QACrD;AAEQ,QAAA,IAAI,CAAC,CAAe,EAAA;AAC1B,YAAA,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK;YACpB,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,SAAS,KAAK,CAAC,CAAC,EAAE;gBAAE;AAChC,YAAA,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,EAAE;YACxB,IAAI,CAAC,GAAG,IAAI,KAAK,GAAG,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,OAAO,GAAG,CAAC,CAAC,EAAE;YACrD,IAAI,CAAC,GAAG,IAAI,KAAK,GAAG,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,OAAO,GAAG,CAAC,CAAC,EAAE;AACrD,YAAA,MAAM,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE;YACvB,IAAI,CAAC,EAAE;gBACL,MAAM,IAAI,GAAG,CAAC,CAAS,EAAE,EAAU,EAAE,EAAU,EAAE,GAAW,MAAM,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,UAAU,CAAC,CAAC,GAAG,EAAE,EAAE,GAAG,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,UAAU,CAAC,CAAC,GAAG,EAAE,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC;AACpJ,gBAAA,CAAC,GAAG,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,GAAG,CAAC;AAChC,gBAAA,CAAC,GAAG,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,GAAG,CAAC;YAClC;AACA,YAAA,IAAI,CAAC,EAAE,GAAG,CAAC;AACX,YAAA,IAAI,CAAC,EAAE,GAAG,CAAC;AACX,YAAA,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,SAAS,KAAK,QAAQ,GAAG,CAAC,CAAC,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;AAClG,YAAA,IAAI,CAAC,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC;AAAE,gBAAA,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE;YAC3C,IAAI,CAAC,MAAM,EAAE;YACb,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC;QAC7B;QAEQ,QAAQ,GAAA;YACd,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,EAAE,OAAO,IAAI,EAAE;AACnC,YAAA,IAAI,CAAC,CAAC,MAAM,GAAG,CAAC;AAAE,gBAAA,OAAO,CAAC,CAAC,EAAE,CAAC,CAAC;AAC/B,YAAA,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;YACd,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC;AACzB,YAAA,MAAM,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,IAAI;AAC/B,YAAA,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,GAAG,GAAG;AAAE,gBAAA,OAAO,CAAC,CAAC,EAAE,CAAC,CAAC;AACtC,YAAA,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;QACjD;AAEQ,QAAA,GAAG,CAAC,CAAe,EAAA;AACzB,YAAA,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK;YACpB,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,SAAS,KAAK,CAAC,CAAC,EAAE;gBAAE;YAChC,IAAI,CAAC,EAAE,EAAE,EAAE,CAAC,GAAG,IAAI,CAAC,QAAQ,EAAE;AAC9B,YAAA,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,EAAE;YACxB,IAAI,IAAI,KAAK,GAAG;gBAAE,EAAE,GAAG,CAAC;YACxB,IAAI,IAAI,KAAK,GAAG;gBAAE,EAAE,GAAG,CAAC;AACxB,YAAA,IAAI,CAAC,KAAK,GAAG,IAAI;AACjB,YAAA,IAAI,CAAC,eAAe,CAAC,eAAe,CAAC;AACrC,YAAA,IAAI,EAAE,GAAG,IAAI,CAAC,EAAE;AAChB,YAAA,IAAI,EAAE,GAAG,IAAI,CAAC,EAAE;AAChB,YAAA,IAAI,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,EAAE;gBAC5B,EAAE,GAAG,CAAC;gBACN,EAAE,GAAG,CAAC;YACR;iBAAO;AACL,gBAAA,IAAI,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE;AACzC,oBAAA,EAAE,GAAG,cAAc,CAAC,EAAE,EAAE,EAAE,CAAC;AAC3B,oBAAA,EAAE,GAAG,cAAc,CAAC,EAAE,EAAE,EAAE,CAAC;gBAC7B;AACA,gBAAA,CAAC,EAAE,EAAE,EAAE,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,EAAE,EAAE,EAAE,CAAC;YACnC;AACA,YAAA,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC;YAC/C,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC;QACzB;QAEQ,SAAS,CAAC,CAAS,EAAE,CAAS,EAAA;YACpC,MAAM,IAAI,GAAG,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;YACxC,IAAI,EAAE,GAAG,MAAM,CAAC,CAAC,EAAE,IAAI,CAAC;YACxB,IAAI,EAAE,GAAG,MAAM,CAAC,CAAC,EAAE,IAAI,CAAC;AACxB,YAAA,MAAM,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE;YACvB,IAAI,CAAC,EAAE;gBACL,EAAE,GAAG,KAAK,CAAC,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC;gBAChD,EAAE,GAAG,KAAK,CAAC,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC;YAClD;AACA,YAAA,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,EAAE;YACxB,OAAO,CAAC,IAAI,KAAK,GAAG,GAAG,CAAC,GAAG,EAAE,EAAE,IAAI,KAAK,GAAG,GAAG,CAAC,GAAG,EAAE,CAAC;QACvD;QAEQ,EAAE,CAAC,CAAS,EAAE,CAAS,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,GAAG,CAAC,EAAA;AAC7C,YAAA,IAAI,CAAC,YAAY,CAAC,aAAa,EAAE,EAAE,CAAC;YACpC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,CAAC;YACnB,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,CAAC;QACrB;AAEQ,QAAA,GAAG,CAAC,CAAgB,EAAA;AAC1B,YAAA,IAAI,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC;gBAAE;YAC3B,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,EAAE,CAAC;YACjC,MAAM,IAAI,GAAG,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;AACxC,YAAA,MAAM,CAAC,GAAG,OAAO,IAAI,KAAK,QAAQ,GAAG,IAAI,GAAG,IAAI;AAChD,YAAA,MAAM,GAAG,GAAqC,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,UAAU,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE;AAC7H,YAAA,IAAI,CAAC,CAAC,GAAG,KAAK,MAAM,IAAI,CAAC,CAAC,GAAG,KAAK,QAAQ,EAAE;gBAC1C,CAAC,CAAC,cAAc,EAAE;gBAClB,IAAI,CAAC,KAAK,EAAE;gBACZ;YACF;YACA,MAAM,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC;AACpB,YAAA,IAAI,CAAC,CAAC;gBAAE;YACR,CAAC,CAAC,cAAc,EAAE;AAClB,YAAA,MAAM,CAAC,EAAE,EAAE,EAAE,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;AAC7J,YAAA,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC;QACjB;AAEA,QAAA,MAAM,CAAC,CAAS,EAAE,CAAS,EAAE,OAAO,GAAG,IAAI,EAAA;YACzC,IAAI,CAAC,OAAO,EAAE;AACZ,gBAAA,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC;AAChB,gBAAA,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC;gBAChB;YACF;AACA,YAAA,IAAI,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;QACf;QAEA,KAAK,GAAA;AACH,YAAA,IAAI,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;QACf;KACD,EACH,EAAE,EAAE,EAAE,WAAW,EAAE,IAAI,EAAEA,KAAG,EAAE,CAC/B;AACH;;;;AC/MM,SAAU,gBAAgB,CAAC,GAAG,GAAG,gBAAgB,EAAA;AACrD,IAAA,OAAO,aAAa,CAClB,GAAG,EACH,CAAC,IAAI,KACH,MAAM,aAAc,SAAQ,IAAI,CAAA;AAAhC,QAAA,WAAA,GAAA;;YAKU,IAAA,CAAA,IAAI,GAAG,CAAC;QA+ElB;AAnFE,QAAA,WAAW,kBAAkB,GAAA;AAC3B,YAAA,OAAO,CAAC,MAAM,EAAE,UAAU,CAAC;QAC7B;AAKA,QAAA,IAAI,MAAM,GAAA;YACR,OAAO,IAAI,CAAC,IAAI;QAClB;AAEQ,QAAA,GAAG,CAAC,CAAS,EAAA;AACnB,YAAA,IAAI,CAAC,IAAI,GAAG,CAAC;YACb,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,kBAAkB,EAAE,CAAA,EAAG,CAAC,CAAA,EAAA,CAAI,CAAC;AACpD,YAAA,IAAI,CAAC,eAAe,CAAC,gBAAgB,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC;QAC3D;AAEQ,QAAA,IAAI,CAAC,KAAa,EAAA;AACxB,YAAA,MAAM,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,KAAK,GAAG;AACvC,YAAA,MAAM,GAAG,GAAG,CAAC,GAAG,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,SAAS;YAChD,MAAM,GAAG,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,YAAY,IAAI,CAAC;AACjG,YAAA,OAAO,CAAC,KAAK,GAAG,CAAC,IAAI,GAAG,IAAI,CAAC,MAAM,KAAK,GAAG,CAAC,IAAI,GAAG,IAAI,GAAG,CAAC;QAC7D;AAEQ,QAAA,OAAO,CAAC,GAAW,EAAA;YACzB,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,GAAG,CAAC;YAChC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,UAAU,CAAC,GAAG,EAAE,GAAG,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC;QACrE;QAEA,KAAK,GAAA;AACH,YAAA,IAAI,CAAC,OAAO,GAAG,YAAY,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,GAAG,CAAC,QAAQ,EAAE,SAAS,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC,KAAK,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;AACpG,YAAA,MAAM,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,KAAK,GAAG;AACvC,YAAA,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,IAAI,CAAC,OAAO;;YAEvD,IAAI,IAAI,GAAG,CAAC;AACZ,YAAA,IAAI,KAAgD;YACpD,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,OAAO,EAAE,CAAC,CAAa,KAAI;AAC3C,gBAAA,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,MAAM,IAAI,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,MAAM;AAC7C,gBAAA,IAAI,GAAG,EAAE,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;oBAAE;AAClC,gBAAA,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE;gBACnB,IAAI,IAAI,CAAC;AACT,gBAAA,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC;gBAClB,YAAY,CAAC,KAAK,CAAC;AACnB,gBAAA,KAAK,GAAG,UAAU,CAAC,MAAK;oBACtB,IAAI,GAAG,CAAC;oBACR,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC;AAC5B,oBAAA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC;gBACrB,CAAC,EAAE,GAAG,CAAC;AACT,YAAA,CAAC,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;YACrB,IAAI,CAAC,SAAS,CAAC,MAAM,YAAY,CAAC,KAAK,CAAC,CAAC;;YAEzC,IAAI,KAAK,GAAG,CAAC;YACb,IAAI,MAAM,GAAG,KAAK;YAClB,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,YAAY,EAAE,CAAC,CAAa,KAAI;AAChD,gBAAA,IAAI,GAAG,EAAE;oBAAE;gBACX,MAAM,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC;AACtB,gBAAA,KAAK,GAAG,CAAC,GAAG,CAAC,CAAC,OAAO,GAAG,CAAC,CAAC,OAAO;gBACjC,MAAM,GAAG,KAAK;AACd,gBAAA,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE;AACrB,YAAA,CAAC,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;YACrB,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,WAAW,EAAE,CAAC,CAAa,KAAI;AAC/C,gBAAA,IAAI,GAAG,EAAE;oBAAE;gBACX,MAAM,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC;AACtB,gBAAA,MAAM,IAAI,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,OAAO,GAAG,CAAC,CAAC,OAAO,IAAI,KAAK;AAChD,gBAAA,IAAI,CAAC,MAAM,IAAI,IAAI,KAAK,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC;oBAAE,MAAM,GAAG,IAAI;AAC5D,gBAAA,IAAI,CAAC,MAAM;oBAAE;gBACb,IAAI,CAAC,CAAC,UAAU;oBAAE,CAAC,CAAC,cAAc,EAAE;AACpC,gBAAA,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC;AACpB,YAAA,CAAC,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;YACtB,MAAM,OAAO,GAAG,MAAK;AACnB,gBAAA,IAAI,CAAC,MAAM;oBAAE;gBACb,MAAM,GAAG,KAAK;gBACd,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC;AAC5B,gBAAA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC;AACrB,YAAA,CAAC;YACD,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,UAAU,EAAE,OAAO,CAAC;YACtC,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,aAAa,EAAE,OAAO,CAAC;QAC3C;QAEA,OAAO,GAAA;AACL,YAAA,IAAI,CAAC,OAAO,EAAE,IAAI,EAAE;AACpB,YAAA,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;QACb;KACD,EACH,EAAE,EAAE,EAAE,YAAY,EAAE,IAAI,EAAE,GAAG,EAAE,CAChC;AACH;;AC9GA;;;;;;AAMG;AA2BH;SACgB,uBAAuB,GAAA;AACrC,IAAA,YAAY,EAAE;AACd,IAAA,eAAe,EAAE;AACjB,IAAA,gBAAgB,EAAE;AACpB;;;;"}
@@ -7,6 +7,8 @@ var components_feedback = require('./components/feedback.cjs');
7
7
  var components_background = require('./components/background.cjs');
8
8
  var components_transitions = require('./components/transitions.cjs');
9
9
  var components_physics = require('./components/physics.cjs');
10
+ var components_cards = require('./components/cards.cjs');
11
+ var spring = require('./chunks/spring-CGO9Jd9b.cjs');
10
12
  var base = require('./chunks/base-CJ7XfidP.cjs');
11
13
 
12
14
  /**
@@ -38,6 +40,7 @@ const COMPONENT_CATEGORIES = {
38
40
  background: ['usa-aurora', 'usa-particles', 'usa-grain', 'usa-marquee', 'usa-acrylic'],
39
41
  transitions: ['usa-dialog', 'usa-accordion', 'usa-flip-list', 'usa-view-switch'],
40
42
  physics: ['usa-spring', 'usa-draggable', 'usa-overscroll'],
43
+ cards: ['usa-card', 'usa-card-stack', 'usa-sticky-stack', 'usa-carousel-3d'],
41
44
  };
42
45
  const BY_CATEGORY = {
43
46
  reveal: components_reveal.defineRevealComponents,
@@ -47,6 +50,7 @@ const BY_CATEGORY = {
47
50
  background: components_background.defineBackgroundComponents,
48
51
  transitions: components_transitions.defineTransitionComponents,
49
52
  physics: components_physics.definePhysicsComponents,
53
+ cards: components_cards.defineCardComponents,
50
54
  };
51
55
  /**
52
56
  * Register every `<usa-*>` component (or only the given categories).
@@ -103,23 +107,29 @@ exports.defineViewSwitch = components_transitions.defineViewSwitch;
103
107
  exports.flip = components_transitions.flip;
104
108
  exports.viewTransition = components_transitions.viewTransition;
105
109
  exports.SPRING_EFFECTS = components_physics.SPRING_EFFECTS;
106
- exports.SPRING_PRESETS = components_physics.SPRING_PRESETS;
107
- exports.createSpring = components_physics.createSpring;
108
110
  exports.defineDraggable = components_physics.defineDraggable;
109
111
  exports.defineOverscroll = components_physics.defineOverscroll;
110
112
  exports.definePhysicsComponents = components_physics.definePhysicsComponents;
111
113
  exports.defineSpring = components_physics.defineSpring;
112
- exports.linearEasing = components_physics.linearEasing;
113
- exports.projectInertia = components_physics.projectInertia;
114
- exports.resolveSpring = components_physics.resolveSpring;
115
- exports.rubberBand = components_physics.rubberBand;
116
- exports.snapTo = components_physics.snapTo;
117
- exports.spring = components_physics.spring;
118
- exports.springEasing = components_physics.springEasing;
119
114
  exports.springEffectKeyframes = components_physics.springEffectKeyframes;
120
- exports.springSamples = components_physics.springSamples;
121
- exports.stepSpring = components_physics.stepSpring;
122
- exports.supportsLinearEasing = components_physics.supportsLinearEasing;
115
+ exports.CARD_EFFECTS = components_cards.CARD_EFFECTS;
116
+ exports.defineCard = components_cards.defineCard;
117
+ exports.defineCardComponents = components_cards.defineCardComponents;
118
+ exports.defineCardStack = components_cards.defineCardStack;
119
+ exports.defineCarousel3d = components_cards.defineCarousel3d;
120
+ exports.defineStickyStack = components_cards.defineStickyStack;
121
+ exports.SPRING_PRESETS = spring.SPRING_PRESETS;
122
+ exports.createSpring = spring.createSpring;
123
+ exports.linearEasing = spring.linearEasing;
124
+ exports.projectInertia = spring.projectInertia;
125
+ exports.resolveSpring = spring.resolveSpring;
126
+ exports.rubberBand = spring.rubberBand;
127
+ exports.snapTo = spring.snapTo;
128
+ exports.spring = spring.spring;
129
+ exports.springEasing = spring.springEasing;
130
+ exports.springSamples = spring.springSamples;
131
+ exports.stepSpring = spring.stepSpring;
132
+ exports.supportsLinearEasing = spring.supportsLinearEasing;
123
133
  exports.configureComponents = base.configureComponents;
124
134
  exports.prefersReducedMotion = base.prefersReducedMotion;
125
135
  exports.COMPONENT_CATEGORIES = COMPONENT_CATEGORIES;
@@ -1 +1 @@
1
- {"version":3,"file":"components.cjs","sources":["../src/components/index.ts"],"sourcesContent":["/**\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';\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';\n\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'],\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'],\n transitions: ['usa-dialog', 'usa-accordion', 'usa-flip-list', 'usa-view-switch'],\n physics: ['usa-spring', 'usa-draggable', 'usa-overscroll'],\n} as const;\n\nexport type ComponentCategory = keyof typeof COMPONENT_CATEGORIES;\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};\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 (categories || (Object.keys(BY_CATEGORY) as ComponentCategory[])).forEach((c) => BY_CATEGORY[c]?.());\n}\n"],"names":["defineRevealComponents","defineTextComponents","defineInteractionComponents","defineFeedbackComponents","defineBackgroundComponents","defineTransitionComponents","definePhysicsComponents"],"mappings":";;;;;;;;;;;AAAA;;;;;;;;;;;;;;;;;;;AAmBG;AAiBH;AACO,MAAM,oBAAoB,GAAG;IAClC,MAAM,EAAE,CAAC,YAAY,EAAE,aAAa,EAAE,qBAAqB,EAAE,aAAa,CAAC;AAC3E,IAAA,IAAI,EAAE,CAAC,gBAAgB,EAAE,gBAAgB,EAAE,cAAc,EAAE,aAAa,EAAE,kBAAkB,EAAE,iBAAiB,CAAC;AAChH,IAAA,WAAW,EAAE,CAAC,YAAY,EAAE,cAAc,EAAE,UAAU,EAAE,eAAe,EAAE,WAAW,EAAE,YAAY,CAAC;IACnG,QAAQ,EAAE,CAAC,aAAa,EAAE,cAAc,EAAE,cAAc,EAAE,aAAa,EAAE,WAAW,CAAC;IACrF,UAAU,EAAE,CAAC,YAAY,EAAE,eAAe,EAAE,WAAW,EAAE,aAAa,EAAE,aAAa,CAAC;IACtF,WAAW,EAAE,CAAC,YAAY,EAAE,eAAe,EAAE,eAAe,EAAE,iBAAiB,CAAC;AAChF,IAAA,OAAO,EAAE,CAAC,YAAY,EAAE,eAAe,EAAE,gBAAgB,CAAC;;AAK5D,MAAM,WAAW,GAA0C;AACzD,IAAA,MAAM,EAAEA,wCAAsB;AAC9B,IAAA,IAAI,EAAEC,oCAAoB;AAC1B,IAAA,WAAW,EAAEC,kDAA2B;AACxC,IAAA,QAAQ,EAAEC,4CAAwB;AAClC,IAAA,UAAU,EAAEC,gDAA0B;AACtC,IAAA,WAAW,EAAEC,iDAA0B;AACvC,IAAA,OAAO,EAAEC,0CAAuB;CACjC;AAED;;;AAGG;AACG,SAAU,gBAAgB,CAAC,UAAgC,EAAA;IAC/D,CAAC,UAAU,IAAK,MAAM,CAAC,IAAI,CAAC,WAAW,CAAyB,EAAE,OAAO,CAAC,CAAC,CAAC,KAAK,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC;AACtG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
1
+ {"version":3,"file":"components.cjs","sources":["../src/components/index.ts"],"sourcesContent":["/**\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';\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';\n\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'],\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'],\n transitions: ['usa-dialog', 'usa-accordion', 'usa-flip-list', '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} as const;\n\nexport type ComponentCategory = keyof typeof COMPONENT_CATEGORIES;\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};\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 (categories || (Object.keys(BY_CATEGORY) as ComponentCategory[])).forEach((c) => BY_CATEGORY[c]?.());\n}\n"],"names":["defineRevealComponents","defineTextComponents","defineInteractionComponents","defineFeedbackComponents","defineBackgroundComponents","defineTransitionComponents","definePhysicsComponents","defineCardComponents"],"mappings":";;;;;;;;;;;;;AAAA;;;;;;;;;;;;;;;;;;;AAmBG;AAmBH;AACO,MAAM,oBAAoB,GAAG;IAClC,MAAM,EAAE,CAAC,YAAY,EAAE,aAAa,EAAE,qBAAqB,EAAE,aAAa,CAAC;AAC3E,IAAA,IAAI,EAAE,CAAC,gBAAgB,EAAE,gBAAgB,EAAE,cAAc,EAAE,aAAa,EAAE,kBAAkB,EAAE,iBAAiB,CAAC;AAChH,IAAA,WAAW,EAAE,CAAC,YAAY,EAAE,cAAc,EAAE,UAAU,EAAE,eAAe,EAAE,WAAW,EAAE,YAAY,CAAC;IACnG,QAAQ,EAAE,CAAC,aAAa,EAAE,cAAc,EAAE,cAAc,EAAE,aAAa,EAAE,WAAW,CAAC;IACrF,UAAU,EAAE,CAAC,YAAY,EAAE,eAAe,EAAE,WAAW,EAAE,aAAa,EAAE,aAAa,CAAC;IACtF,WAAW,EAAE,CAAC,YAAY,EAAE,eAAe,EAAE,eAAe,EAAE,iBAAiB,CAAC;AAChF,IAAA,OAAO,EAAE,CAAC,YAAY,EAAE,eAAe,EAAE,gBAAgB,CAAC;IAC1D,KAAK,EAAE,CAAC,UAAU,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,iBAAiB,CAAC;;AAK9E,MAAM,WAAW,GAA0C;AACzD,IAAA,MAAM,EAAEA,wCAAsB;AAC9B,IAAA,IAAI,EAAEC,oCAAoB;AAC1B,IAAA,WAAW,EAAEC,kDAA2B;AACxC,IAAA,QAAQ,EAAEC,4CAAwB;AAClC,IAAA,UAAU,EAAEC,gDAA0B;AACtC,IAAA,WAAW,EAAEC,iDAA0B;AACvC,IAAA,OAAO,EAAEC,0CAAuB;AAChC,IAAA,KAAK,EAAEC,qCAAoB;CAC5B;AAED;;;AAGG;AACG,SAAU,gBAAgB,CAAC,UAAgC,EAAA;IAC/D,CAAC,UAAU,IAAK,MAAM,CAAC,IAAI,CAAC,WAAW,CAAyB,EAAE,OAAO,CAAC,CAAC,CAAC,KAAK,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC;AACtG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
@@ -31,3 +31,7 @@ usa-view-switch{display:grid}usa-view-switch>*{grid-area:1 / 1;min-width:0}usa-v
31
31
  usa-draggable{display:inline-block;touch-action:none;user-select:none;-webkit-user-select:none;cursor:grab;will-change:transform;-webkit-tap-highlight-color:transparent}usa-draggable[axis="x"]{touch-action:pan-y}usa-draggable[axis="y"]{touch-action:pan-x}usa-draggable[block]{display:block}usa-draggable[data-dragging]{cursor:grabbing}usa-draggable[disabled]{cursor:default}usa-draggable:focus-visible{outline:2px solid var(--usa-accent,#7c5cff);outline-offset:3px}
32
32
  usa-overscroll{display:block;overflow:auto;overscroll-behavior:contain;-webkit-overflow-scrolling:touch}usa-overscroll[axis="x"]{overflow-y:hidden}usa-overscroll>*{transform:translate3d(0,var(--usa-overscroll,0px),0)}usa-overscroll[axis="x"]>*{transform:translate3d(var(--usa-overscroll,0px),0,0)}usa-overscroll[data-stretched]>*{will-change:transform}
33
33
  usa-spring{display:inline-block;transform-origin:50% 70%}usa-spring[block]{display:block}usa-spring[effect="drop"]{transform-origin:50% 100%}usa-spring[data-state="hidden"]{opacity:0}usa-spring[trigger="click"],usa-spring[trigger="hover"]{cursor:pointer;-webkit-tap-highlight-color:transparent}
34
+ usa-card-stack{position:relative;display:grid;touch-action:pan-y;user-select:none;-webkit-user-select:none}usa-card-stack>*{grid-area:1 / 1;transform-origin:50% 100%;transition:transform 0.35s cubic-bezier(0.34,1.3,0.64,1),opacity 0.3s ease;will-change:transform}usa-card-stack>[data-top]{cursor:grab}usa-card-stack[data-dragging]>*,usa-card-stack>[data-top]{transition:none}usa-card-stack:focus-visible{outline:2px solid var(--usa-accent,#7c5cff);outline-offset:4px;border-radius:12px}@media (prefers-reduced-motion:reduce){usa-card-stack>*{transition:none}}
35
+ usa-card{--usa-card-radius:18px;--usa-card-bg:var(--usa-surface,#1b1e27);--usa-card-glow:var(--usa-accent,#7c5cff);--usa-card-x:50%;--usa-card-y:50%;--usa-card-nx:0;--usa-card-ny:0;position:relative;display:block;border-radius:var(--usa-card-radius);isolation:isolate;-webkit-tap-highlight-color:transparent}usa-card:focus-visible{outline:2px solid var(--usa-card-glow);outline-offset:3px}usa-card[effect~="lift"]{transition:transform 0.45s cubic-bezier(0.34,1.56,0.64,1),box-shadow 0.45s ease}usa-card[effect~="lift"][data-hover],usa-card[effect~="lift"]:focus-visible{transform:translateY(-6px) perspective(900px) rotateX(calc(var(--usa-card-ny) * -4deg)) rotateY(calc(var(--usa-card-nx) * 4deg));box-shadow:0 22px 44px -18px rgb(0 0 0 / 0.55)}usa-card[effect~="glass"]{background:color-mix(in srgb,var(--usa-card-bg) 45%,transparent);border:1px solid rgb(255 255 255 / 0.16);-webkit-backdrop-filter:blur(18px) saturate(1.5);backdrop-filter:blur(18px) saturate(1.5)}usa-card[effect~="spotlight"]::before,usa-card[effect~="border-glow"]::after{content:"";position:absolute;inset:0;border-radius:inherit;pointer-events:none;opacity:0;transition:opacity 0.3s ease}usa-card[effect~="spotlight"]::before{z-index:-1;background:radial-gradient(260px circle at var(--usa-card-x) var(--usa-card-y),color-mix(in srgb,var(--usa-card-glow) 28%,transparent),transparent 70%)}usa-card[effect~="border-glow"]::after{padding:1.5px;background:radial-gradient(180px circle at var(--usa-card-x) var(--usa-card-y),var(--usa-card-glow),transparent 70%);-webkit-mask:linear-gradient(#000 0 0) content-box exclude,linear-gradient(#000 0 0);mask:linear-gradient(#000 0 0) content-box exclude,linear-gradient(#000 0 0)}usa-card[data-hover]::before,usa-card[data-hover]::after{opacity:1}@property --usa-card-angle{syntax:"<angle>";inherits:false;initial-value:0deg}usa-card[effect~="conic-border"]{border:2px solid transparent;background:linear-gradient(var(--usa-card-bg),var(--usa-card-bg)) padding-box,conic-gradient(from var(--usa-card-angle),var(--usa-card-glow),#22d3ee,#f472b6,var(--usa-card-glow)) border-box;animation:usa-card-spin 4s linear infinite}@keyframes usa-card-spin{to{--usa-card-angle:360deg}}usa-card .usa-card-sheen{position:absolute;inset:0;border-radius:inherit;overflow:hidden;pointer-events:none}usa-card .usa-card-sheen::before{content:"";position:absolute;top:0;bottom:0;width:45%;left:-60%;transform:skewX(-20deg);background:linear-gradient(90deg,transparent,rgb(255 255 255 / 0.35),transparent)}usa-card[effect~="sheen"]:hover .usa-card-sheen::before,usa-card[effect~="sheen"]:focus-visible .usa-card-sheen::before{left:130%;transition:left 0.8s cubic-bezier(0.22,1,0.36,1)}usa-card .usa-card-holo{position:absolute;inset:0;border-radius:inherit;pointer-events:none;mix-blend-mode:color-dodge;opacity:0.35;background:linear-gradient(115deg,transparent 20%,#ff7ad9 35%,#7af0ff 45%,#ffe27a 55%,transparent 70%) calc(var(--usa-card-x) * 1.4 - 20%) calc(var(--usa-card-y) * 1.4 - 20%) / 220% 220%;transition:opacity 0.3s ease}usa-card[data-hover] .usa-card-holo{opacity:0.7}usa-card[effect~="parallax-layers"] [data-depth]{transition:transform 0.25s ease-out;will-change:transform}usa-card[effect~="flip"]{perspective:1000px;display:grid}usa-card[effect~="flip"]>[data-front],usa-card[effect~="flip"]>[data-back]{grid-area:1 / 1;backface-visibility:hidden;-webkit-backface-visibility:hidden;border-radius:inherit;transition:transform 0.7s cubic-bezier(0.34,1.3,0.64,1),opacity 0.3s ease}usa-card[effect~="flip"]>[data-back]{transform:rotateY(180deg)}usa-card[effect~="flip"][axis="x"]>[data-back]{transform:rotateX(180deg)}usa-card[effect~="flip"][flipped]>[data-front],usa-card[effect~="flip"]:not([trigger="click"]):hover>[data-front]{transform:rotateY(-180deg)}usa-card[effect~="flip"][flipped]>[data-back],usa-card[effect~="flip"]:not([trigger="click"]):hover>[data-back]{transform:rotateY(0deg)}usa-card[effect~="flip"][axis="x"][flipped]>[data-front],usa-card[effect~="flip"][axis="x"]:not([trigger="click"]):hover>[data-front]{transform:rotateX(180deg)}usa-card[effect~="flip"][axis="x"][flipped]>[data-back],usa-card[effect~="flip"][axis="x"]:not([trigger="click"]):hover>[data-back]{transform:rotateX(0deg)}usa-card[effect~="flip"][trigger="click"]{cursor:pointer}usa-card[effect~="expand"]{cursor:zoom-in}usa-card[effect~="expand"]:not([expanded]) [data-detail]{display:none}usa-card[expanded]{position:fixed;inset:6vh max(4vw,calc(50vw - 420px));z-index:1000;overflow:auto;cursor:default;background:var(--usa-card-bg);box-shadow:0 30px 80px -20px rgb(0 0 0 / 0.6)}.usa-card-backdrop{position:fixed;inset:0;z-index:999;background:rgb(0 0 0 / 0.45)}@media (prefers-reduced-motion:reduce){usa-card,usa-card *,usa-card .usa-card-sheen::before{transition-duration:0.01ms !important;animation:none !important}usa-card[effect~="lift"][data-hover]{transform:none}usa-card[effect~="flip"]>[data-front],usa-card[effect~="flip"]>[data-back]{transform:none !important}usa-card[effect~="flip"][flipped]>[data-front],usa-card[effect~="flip"]:not([flipped])>[data-back]{opacity:0;visibility:hidden}usa-card[effect~="flip"]:not([trigger="click"]):hover>[data-front]{opacity:0;visibility:hidden}usa-card[effect~="flip"]:not([trigger="click"]):hover>[data-back]{opacity:1;visibility:visible}}@media (prefers-reduced-transparency:reduce),(forced-colors:active){usa-card[effect~="glass"]{background:var(--usa-card-bg);-webkit-backdrop-filter:none;backdrop-filter:none}}
36
+ usa-carousel-3d{position:relative;display:grid;place-items:center;perspective:var(--usa-c3d-perspective,1200px);transform-style:preserve-3d;touch-action:pan-y;user-select:none;-webkit-user-select:none;min-height:220px}usa-carousel-3d>*{grid-area:1 / 1;backface-visibility:hidden;transition:opacity 0.3s ease;cursor:pointer}usa-carousel-3d>[aria-current]{cursor:default}usa-carousel-3d:focus-visible{outline:2px solid var(--usa-accent,#7c5cff);outline-offset:4px;border-radius:12px}@media (prefers-reduced-motion:reduce){usa-carousel-3d{perspective:none}usa-carousel-3d>:not([aria-current]){visibility:hidden}}
37
+ usa-sticky-stack{display:grid;gap:28vh;padding-bottom:10vh}usa-sticky-stack>*{position:sticky;transform-origin:50% 0;will-change:transform}
@@ -898,6 +898,109 @@ declare global {
898
898
  }
899
899
  }
900
900
 
901
+ declare const CARD_EFFECTS: readonly ["flip", "holo", "glass", "border-glow", "conic-border", "lift", "spotlight", "sheen", "parallax-layers", "expand"];
902
+ type CardEffect = (typeof CARD_EFFECTS)[number];
903
+ /**
904
+ * `<usa-card>` — card effects, combinable: `effect="lift sheen"`.
905
+ *
906
+ * - `flip` — front/back (`[data-front]` / `[data-back]` children) flip on
907
+ * hover or `trigger="click"`, `axis="y"` (default, horizontal flip) or `x`.
908
+ * - `holo` — holographic foil that shifts with the pointer.
909
+ * - `glass` — frosted glass surface (backdrop blur).
910
+ * - `border-glow` — a glow on the border that follows the pointer.
911
+ * - `conic-border` — a rotating conic-gradient border.
912
+ * - `lift` — rises with a deeper shadow and a slight pointer tilt.
913
+ * - `spotlight` — a soft light that follows the pointer.
914
+ * - `sheen` — a light sweep across the card on hover / focus.
915
+ * - `parallax-layers` — children with `data-depth="0.2…1"` move at different depths.
916
+ * - `expand` — click to grow into a full detail view (`[data-detail]`
917
+ * content is shown), FLIP + spring; Esc, `[data-close]` or the backdrop closes.
918
+ *
919
+ * Attributes: `effect`, `axis`, `trigger`, `depth` (parallax px, 16),
920
+ * `color` (glow / spotlight colour), `flipped`, `expanded`, `disabled`.
921
+ * CSS variables: `--usa-card-x/-y` (pointer %, 0–100), `--usa-card-nx/-ny` (−1…1).
922
+ * Methods: `flip(force?)`, `expand()`, `collapse()`. Events: `usa:flip`,
923
+ * `usa:expand`, `usa:collapse`. Reduced motion: no tilt / parallax / sweep;
924
+ * flips and expansions cross-fade.
925
+ */
926
+ interface UsaCardElement extends UsaElement {
927
+ readonly effects: string[];
928
+ flipped: boolean;
929
+ readonly expanded: boolean;
930
+ flip(force?: boolean): void;
931
+ expand(): Promise<void>;
932
+ collapse(): Promise<void>;
933
+ }
934
+ declare function defineCard(tag?: string): CustomElementConstructor | undefined;
935
+
936
+ /**
937
+ * `<usa-card-stack>` — a deck of cards (its element children). The top card
938
+ * can be swiped away left or right (pointer, touch or arrow keys); the rest
939
+ * fan out behind it and move up with a spring.
940
+ *
941
+ * Attributes: `threshold` (px to dismiss, 90), `visible` (cards fanned
942
+ * behind, 3), `offset` (px between cards, 10), `loop` (swiped cards go back
943
+ * to the bottom), `disabled`. Methods: `swipe(direction)`, `top`. Events:
944
+ * `usa:swipe` (`{ direction: 'left' | 'right', card }`), `usa:empty`.
945
+ * Reduced motion: cards are removed instantly, no rotation.
946
+ */
947
+ interface UsaCardStackElement extends UsaElement {
948
+ readonly top: HTMLElement | null;
949
+ swipe(direction: 'left' | 'right'): Promise<void>;
950
+ }
951
+ declare function defineCardStack(tag?: string): CustomElementConstructor | undefined;
952
+
953
+ /**
954
+ * `<usa-sticky-stack>` — cards (element children) stick to the top while
955
+ * scrolling and the ones underneath scale down and dim as the next card
956
+ * slides over them, like a deck building up.
957
+ *
958
+ * Attributes: `top` (px from the viewport top, 80), `gap` (px each card
959
+ * peeks below the previous, 16), `scale` (how much a covered card shrinks,
960
+ * 0.06). Reduced motion: cards still stack (sticky) but do not scale.
961
+ */
962
+ interface UsaStickyStackElement extends UsaElement {
963
+ update(): void;
964
+ }
965
+ declare function defineStickyStack(tag?: string): CustomElementConstructor | undefined;
966
+
967
+ /**
968
+ * `<usa-carousel-3d>` — its element children on a 3D ring. Rotate with the
969
+ * arrow keys, a drag/swipe, the wheel (shift) or `next()` / `prev()`; the
970
+ * front item is `aria-current`. Spring-driven rotation.
971
+ *
972
+ * Attributes: `radius` (px, auto from item width), `autoplay` (ms between
973
+ * steps, pauses on hover/focus), `perspective` (px, 1200), `index`.
974
+ * Events: `usa:change` (`{ index }`). Reduced motion: a flat, instant
975
+ * switch (only the current item is shown, others dimmed).
976
+ */
977
+ interface UsaCarousel3dElement extends UsaElement {
978
+ index: number;
979
+ next(): void;
980
+ prev(): void;
981
+ goTo(i: number): void;
982
+ }
983
+ declare function defineCarousel3d(tag?: string): CustomElementConstructor | undefined;
984
+
985
+ /**
986
+ * use-scroll-animate/components/cards — card effects (v2.4).
987
+ * `<usa-card effect="flip | holo | glass | border-glow | conic-border | lift |
988
+ * spotlight | sheen | parallax-layers | expand">` (combinable),
989
+ * `<usa-card-stack>` (swipeable deck), `<usa-sticky-stack>` (stacking on
990
+ * scroll) and `<usa-carousel-3d>`.
991
+ */
992
+
993
+ /** Register every component of this category under its default tag. */
994
+ declare function defineCardComponents(): void;
995
+ declare global {
996
+ interface HTMLElementTagNameMap {
997
+ 'usa-card': UsaCardElement;
998
+ 'usa-card-stack': UsaCardStackElement;
999
+ 'usa-sticky-stack': UsaStickyStackElement;
1000
+ 'usa-carousel-3d': UsaCarousel3dElement;
1001
+ }
1002
+ }
1003
+
901
1004
  /** The component categories and their default tags. */
902
1005
  declare const COMPONENT_CATEGORIES: {
903
1006
  readonly reveal: readonly ["usa-reveal", "usa-stagger", "usa-scroll-progress", "usa-scrolly"];
@@ -907,6 +1010,7 @@ declare const COMPONENT_CATEGORIES: {
907
1010
  readonly background: readonly ["usa-aurora", "usa-particles", "usa-grain", "usa-marquee", "usa-acrylic"];
908
1011
  readonly transitions: readonly ["usa-dialog", "usa-accordion", "usa-flip-list", "usa-view-switch"];
909
1012
  readonly physics: readonly ["usa-spring", "usa-draggable", "usa-overscroll"];
1013
+ readonly cards: readonly ["usa-card", "usa-card-stack", "usa-sticky-stack", "usa-carousel-3d"];
910
1014
  };
911
1015
  type ComponentCategory = keyof typeof COMPONENT_CATEGORIES;
912
1016
  /**
@@ -915,5 +1019,5 @@ type ComponentCategory = keyof typeof COMPONENT_CATEGORIES;
915
1019
  */
916
1020
  declare function defineComponents(categories?: ComponentCategory[]): void;
917
1021
 
918
- export { COMPONENT_CATEGORIES, REVEAL_EFFECTS, SPINNER_VARIANTS, SPRING_EFFECTS, SPRING_PRESETS, configureComponents, connectedAnimation, createSpring, defineAccordion, defineAcrylic, defineAurora, defineBackgroundComponents, defineCheck, defineComponents, defineCounter, defineDialog, defineDraggable, defineFeedbackComponents, defineFlipList, defineGrain, defineInteractionComponents, defineMagnetic, defineMarquee, defineOverscroll, defineParticles, definePhysicsComponents, definePress, defineProgress, defineReveal, defineRevealComponents, defineRipple, defineScramble, defineScrollProgress, defineScrolly, defineShimmerText, defineSkeleton, defineSpinner, defineSplitText, defineSpotlight, defineSpring, defineStagger, defineTextComponents, defineTextRotate, defineTilt, defineToaster, defineToggle, defineTransitionComponents, defineTypewriter, defineViewSwitch, easeOutExpo, flip, linearEasing, prefersReducedMotion, projectInertia, readScrollProgress, resolveSpring, revealKeyframes, rubberBand, scrambleFrame, snapTo, spring, springEasing, springEffectKeyframes, springSamples, stepSpring, supportsLinearEasing, toast, viewTransition };
919
- export type { ComponentCategory, ComponentsConfig, ConnectedOptions, DialogVariant, FlipOptions, RevealEffect, SpinnerVariant, SpringConfig, SpringEffect, SpringInput, SpringPreset, SpringValue, SpringValueOptions, ToastHandle, ToastOptions, ToastType, UsaAccordionElement, UsaAcrylicElement, UsaAuroraElement, UsaCheckElement, UsaCounterElement, UsaDialogElement, UsaDraggableElement, UsaElement, UsaFlipListElement, UsaGrainElement, UsaMagneticElement, UsaMarqueeElement, UsaOverscrollElement, UsaParticlesElement, UsaPressElement, UsaProgressElement, UsaRevealElement, UsaRippleElement, UsaScrambleElement, UsaScrollProgressElement, UsaScrollyElement, UsaShimmerTextElement, UsaSkeletonElement, UsaSpinnerElement, UsaSplitTextElement, UsaSpotlightElement, UsaSpringElement, UsaStaggerElement, UsaTextRotateElement, UsaTiltElement, UsaToasterElement, UsaToggleElement, UsaTypewriterElement, UsaViewSwitchElement, ViewTransitionOptions };
1022
+ export { CARD_EFFECTS, COMPONENT_CATEGORIES, REVEAL_EFFECTS, SPINNER_VARIANTS, SPRING_EFFECTS, SPRING_PRESETS, configureComponents, connectedAnimation, createSpring, defineAccordion, defineAcrylic, defineAurora, defineBackgroundComponents, defineCard, defineCardComponents, defineCardStack, defineCarousel3d, defineCheck, defineComponents, defineCounter, defineDialog, defineDraggable, defineFeedbackComponents, defineFlipList, defineGrain, defineInteractionComponents, defineMagnetic, defineMarquee, defineOverscroll, defineParticles, definePhysicsComponents, definePress, defineProgress, defineReveal, defineRevealComponents, defineRipple, defineScramble, defineScrollProgress, defineScrolly, defineShimmerText, defineSkeleton, defineSpinner, defineSplitText, defineSpotlight, defineSpring, defineStagger, defineStickyStack, defineTextComponents, defineTextRotate, defineTilt, defineToaster, defineToggle, defineTransitionComponents, defineTypewriter, defineViewSwitch, easeOutExpo, flip, linearEasing, prefersReducedMotion, projectInertia, readScrollProgress, resolveSpring, revealKeyframes, rubberBand, scrambleFrame, snapTo, spring, springEasing, springEffectKeyframes, springSamples, stepSpring, supportsLinearEasing, toast, viewTransition };
1023
+ export type { CardEffect, ComponentCategory, ComponentsConfig, ConnectedOptions, DialogVariant, FlipOptions, RevealEffect, SpinnerVariant, SpringConfig, SpringEffect, SpringInput, SpringPreset, SpringValue, SpringValueOptions, ToastHandle, ToastOptions, ToastType, UsaAccordionElement, UsaAcrylicElement, UsaAuroraElement, UsaCardElement, UsaCardStackElement, UsaCarousel3dElement, UsaCheckElement, UsaCounterElement, UsaDialogElement, UsaDraggableElement, UsaElement, UsaFlipListElement, UsaGrainElement, UsaMagneticElement, UsaMarqueeElement, UsaOverscrollElement, UsaParticlesElement, UsaPressElement, UsaProgressElement, UsaRevealElement, UsaRippleElement, UsaScrambleElement, UsaScrollProgressElement, UsaScrollyElement, UsaShimmerTextElement, UsaSkeletonElement, UsaSpinnerElement, UsaSplitTextElement, UsaSpotlightElement, UsaSpringElement, UsaStaggerElement, UsaStickyStackElement, UsaTextRotateElement, UsaTiltElement, UsaToasterElement, UsaToggleElement, UsaTypewriterElement, UsaViewSwitchElement, ViewTransitionOptions };
@@ -898,6 +898,109 @@ declare global {
898
898
  }
899
899
  }
900
900
 
901
+ declare const CARD_EFFECTS: readonly ["flip", "holo", "glass", "border-glow", "conic-border", "lift", "spotlight", "sheen", "parallax-layers", "expand"];
902
+ type CardEffect = (typeof CARD_EFFECTS)[number];
903
+ /**
904
+ * `<usa-card>` — card effects, combinable: `effect="lift sheen"`.
905
+ *
906
+ * - `flip` — front/back (`[data-front]` / `[data-back]` children) flip on
907
+ * hover or `trigger="click"`, `axis="y"` (default, horizontal flip) or `x`.
908
+ * - `holo` — holographic foil that shifts with the pointer.
909
+ * - `glass` — frosted glass surface (backdrop blur).
910
+ * - `border-glow` — a glow on the border that follows the pointer.
911
+ * - `conic-border` — a rotating conic-gradient border.
912
+ * - `lift` — rises with a deeper shadow and a slight pointer tilt.
913
+ * - `spotlight` — a soft light that follows the pointer.
914
+ * - `sheen` — a light sweep across the card on hover / focus.
915
+ * - `parallax-layers` — children with `data-depth="0.2…1"` move at different depths.
916
+ * - `expand` — click to grow into a full detail view (`[data-detail]`
917
+ * content is shown), FLIP + spring; Esc, `[data-close]` or the backdrop closes.
918
+ *
919
+ * Attributes: `effect`, `axis`, `trigger`, `depth` (parallax px, 16),
920
+ * `color` (glow / spotlight colour), `flipped`, `expanded`, `disabled`.
921
+ * CSS variables: `--usa-card-x/-y` (pointer %, 0–100), `--usa-card-nx/-ny` (−1…1).
922
+ * Methods: `flip(force?)`, `expand()`, `collapse()`. Events: `usa:flip`,
923
+ * `usa:expand`, `usa:collapse`. Reduced motion: no tilt / parallax / sweep;
924
+ * flips and expansions cross-fade.
925
+ */
926
+ interface UsaCardElement extends UsaElement {
927
+ readonly effects: string[];
928
+ flipped: boolean;
929
+ readonly expanded: boolean;
930
+ flip(force?: boolean): void;
931
+ expand(): Promise<void>;
932
+ collapse(): Promise<void>;
933
+ }
934
+ declare function defineCard(tag?: string): CustomElementConstructor | undefined;
935
+
936
+ /**
937
+ * `<usa-card-stack>` — a deck of cards (its element children). The top card
938
+ * can be swiped away left or right (pointer, touch or arrow keys); the rest
939
+ * fan out behind it and move up with a spring.
940
+ *
941
+ * Attributes: `threshold` (px to dismiss, 90), `visible` (cards fanned
942
+ * behind, 3), `offset` (px between cards, 10), `loop` (swiped cards go back
943
+ * to the bottom), `disabled`. Methods: `swipe(direction)`, `top`. Events:
944
+ * `usa:swipe` (`{ direction: 'left' | 'right', card }`), `usa:empty`.
945
+ * Reduced motion: cards are removed instantly, no rotation.
946
+ */
947
+ interface UsaCardStackElement extends UsaElement {
948
+ readonly top: HTMLElement | null;
949
+ swipe(direction: 'left' | 'right'): Promise<void>;
950
+ }
951
+ declare function defineCardStack(tag?: string): CustomElementConstructor | undefined;
952
+
953
+ /**
954
+ * `<usa-sticky-stack>` — cards (element children) stick to the top while
955
+ * scrolling and the ones underneath scale down and dim as the next card
956
+ * slides over them, like a deck building up.
957
+ *
958
+ * Attributes: `top` (px from the viewport top, 80), `gap` (px each card
959
+ * peeks below the previous, 16), `scale` (how much a covered card shrinks,
960
+ * 0.06). Reduced motion: cards still stack (sticky) but do not scale.
961
+ */
962
+ interface UsaStickyStackElement extends UsaElement {
963
+ update(): void;
964
+ }
965
+ declare function defineStickyStack(tag?: string): CustomElementConstructor | undefined;
966
+
967
+ /**
968
+ * `<usa-carousel-3d>` — its element children on a 3D ring. Rotate with the
969
+ * arrow keys, a drag/swipe, the wheel (shift) or `next()` / `prev()`; the
970
+ * front item is `aria-current`. Spring-driven rotation.
971
+ *
972
+ * Attributes: `radius` (px, auto from item width), `autoplay` (ms between
973
+ * steps, pauses on hover/focus), `perspective` (px, 1200), `index`.
974
+ * Events: `usa:change` (`{ index }`). Reduced motion: a flat, instant
975
+ * switch (only the current item is shown, others dimmed).
976
+ */
977
+ interface UsaCarousel3dElement extends UsaElement {
978
+ index: number;
979
+ next(): void;
980
+ prev(): void;
981
+ goTo(i: number): void;
982
+ }
983
+ declare function defineCarousel3d(tag?: string): CustomElementConstructor | undefined;
984
+
985
+ /**
986
+ * use-scroll-animate/components/cards — card effects (v2.4).
987
+ * `<usa-card effect="flip | holo | glass | border-glow | conic-border | lift |
988
+ * spotlight | sheen | parallax-layers | expand">` (combinable),
989
+ * `<usa-card-stack>` (swipeable deck), `<usa-sticky-stack>` (stacking on
990
+ * scroll) and `<usa-carousel-3d>`.
991
+ */
992
+
993
+ /** Register every component of this category under its default tag. */
994
+ declare function defineCardComponents(): void;
995
+ declare global {
996
+ interface HTMLElementTagNameMap {
997
+ 'usa-card': UsaCardElement;
998
+ 'usa-card-stack': UsaCardStackElement;
999
+ 'usa-sticky-stack': UsaStickyStackElement;
1000
+ 'usa-carousel-3d': UsaCarousel3dElement;
1001
+ }
1002
+ }
1003
+
901
1004
  /** The component categories and their default tags. */
902
1005
  declare const COMPONENT_CATEGORIES: {
903
1006
  readonly reveal: readonly ["usa-reveal", "usa-stagger", "usa-scroll-progress", "usa-scrolly"];
@@ -907,6 +1010,7 @@ declare const COMPONENT_CATEGORIES: {
907
1010
  readonly background: readonly ["usa-aurora", "usa-particles", "usa-grain", "usa-marquee", "usa-acrylic"];
908
1011
  readonly transitions: readonly ["usa-dialog", "usa-accordion", "usa-flip-list", "usa-view-switch"];
909
1012
  readonly physics: readonly ["usa-spring", "usa-draggable", "usa-overscroll"];
1013
+ readonly cards: readonly ["usa-card", "usa-card-stack", "usa-sticky-stack", "usa-carousel-3d"];
910
1014
  };
911
1015
  type ComponentCategory = keyof typeof COMPONENT_CATEGORIES;
912
1016
  /**
@@ -915,5 +1019,5 @@ type ComponentCategory = keyof typeof COMPONENT_CATEGORIES;
915
1019
  */
916
1020
  declare function defineComponents(categories?: ComponentCategory[]): void;
917
1021
 
918
- export { COMPONENT_CATEGORIES, REVEAL_EFFECTS, SPINNER_VARIANTS, SPRING_EFFECTS, SPRING_PRESETS, configureComponents, connectedAnimation, createSpring, defineAccordion, defineAcrylic, defineAurora, defineBackgroundComponents, defineCheck, defineComponents, defineCounter, defineDialog, defineDraggable, defineFeedbackComponents, defineFlipList, defineGrain, defineInteractionComponents, defineMagnetic, defineMarquee, defineOverscroll, defineParticles, definePhysicsComponents, definePress, defineProgress, defineReveal, defineRevealComponents, defineRipple, defineScramble, defineScrollProgress, defineScrolly, defineShimmerText, defineSkeleton, defineSpinner, defineSplitText, defineSpotlight, defineSpring, defineStagger, defineTextComponents, defineTextRotate, defineTilt, defineToaster, defineToggle, defineTransitionComponents, defineTypewriter, defineViewSwitch, easeOutExpo, flip, linearEasing, prefersReducedMotion, projectInertia, readScrollProgress, resolveSpring, revealKeyframes, rubberBand, scrambleFrame, snapTo, spring, springEasing, springEffectKeyframes, springSamples, stepSpring, supportsLinearEasing, toast, viewTransition };
919
- export type { ComponentCategory, ComponentsConfig, ConnectedOptions, DialogVariant, FlipOptions, RevealEffect, SpinnerVariant, SpringConfig, SpringEffect, SpringInput, SpringPreset, SpringValue, SpringValueOptions, ToastHandle, ToastOptions, ToastType, UsaAccordionElement, UsaAcrylicElement, UsaAuroraElement, UsaCheckElement, UsaCounterElement, UsaDialogElement, UsaDraggableElement, UsaElement, UsaFlipListElement, UsaGrainElement, UsaMagneticElement, UsaMarqueeElement, UsaOverscrollElement, UsaParticlesElement, UsaPressElement, UsaProgressElement, UsaRevealElement, UsaRippleElement, UsaScrambleElement, UsaScrollProgressElement, UsaScrollyElement, UsaShimmerTextElement, UsaSkeletonElement, UsaSpinnerElement, UsaSplitTextElement, UsaSpotlightElement, UsaSpringElement, UsaStaggerElement, UsaTextRotateElement, UsaTiltElement, UsaToasterElement, UsaToggleElement, UsaTypewriterElement, UsaViewSwitchElement, ViewTransitionOptions };
1022
+ export { CARD_EFFECTS, COMPONENT_CATEGORIES, REVEAL_EFFECTS, SPINNER_VARIANTS, SPRING_EFFECTS, SPRING_PRESETS, configureComponents, connectedAnimation, createSpring, defineAccordion, defineAcrylic, defineAurora, defineBackgroundComponents, defineCard, defineCardComponents, defineCardStack, defineCarousel3d, defineCheck, defineComponents, defineCounter, defineDialog, defineDraggable, defineFeedbackComponents, defineFlipList, defineGrain, defineInteractionComponents, defineMagnetic, defineMarquee, defineOverscroll, defineParticles, definePhysicsComponents, definePress, defineProgress, defineReveal, defineRevealComponents, defineRipple, defineScramble, defineScrollProgress, defineScrolly, defineShimmerText, defineSkeleton, defineSpinner, defineSplitText, defineSpotlight, defineSpring, defineStagger, defineStickyStack, defineTextComponents, defineTextRotate, defineTilt, defineToaster, defineToggle, defineTransitionComponents, defineTypewriter, defineViewSwitch, easeOutExpo, flip, linearEasing, prefersReducedMotion, projectInertia, readScrollProgress, resolveSpring, revealKeyframes, rubberBand, scrambleFrame, snapTo, spring, springEasing, springEffectKeyframes, springSamples, stepSpring, supportsLinearEasing, toast, viewTransition };
1023
+ export type { CardEffect, ComponentCategory, ComponentsConfig, ConnectedOptions, DialogVariant, FlipOptions, RevealEffect, SpinnerVariant, SpringConfig, SpringEffect, SpringInput, SpringPreset, SpringValue, SpringValueOptions, ToastHandle, ToastOptions, ToastType, UsaAccordionElement, UsaAcrylicElement, UsaAuroraElement, UsaCardElement, UsaCardStackElement, UsaCarousel3dElement, UsaCheckElement, UsaCounterElement, UsaDialogElement, UsaDraggableElement, UsaElement, UsaFlipListElement, UsaGrainElement, UsaMagneticElement, UsaMarqueeElement, UsaOverscrollElement, UsaParticlesElement, UsaPressElement, UsaProgressElement, UsaRevealElement, UsaRippleElement, UsaScrambleElement, UsaScrollProgressElement, UsaScrollyElement, UsaShimmerTextElement, UsaSkeletonElement, UsaSpinnerElement, UsaSplitTextElement, UsaSpotlightElement, UsaSpringElement, UsaStaggerElement, UsaStickyStackElement, UsaTextRotateElement, UsaTiltElement, UsaToasterElement, UsaToggleElement, UsaTypewriterElement, UsaViewSwitchElement, ViewTransitionOptions };