use-scroll-animate 2.2.0 → 2.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (38) hide show
  1. package/CHANGELOG.md +12 -0
  2. package/README.md +2 -1
  3. package/README_ja.md +1 -0
  4. package/README_zh.md +1 -0
  5. package/dist/chunks/{base-BiTc85p_.cjs → base-CJ7XfidP.cjs} +2 -1
  6. package/dist/chunks/{base-BiTc85p_.cjs.map → base-CJ7XfidP.cjs.map} +1 -1
  7. package/dist/chunks/{base-CFtnmfli.js → base-CuvCgqLy.js} +2 -2
  8. package/dist/chunks/{base-CFtnmfli.js.map → base-CuvCgqLy.js.map} +1 -1
  9. package/dist/components/background.cjs +1 -1
  10. package/dist/components/background.js +2 -2
  11. package/dist/components/feedback.cjs +1 -1
  12. package/dist/components/feedback.js +2 -2
  13. package/dist/components/interaction.cjs +1 -1
  14. package/dist/components/interaction.js +2 -2
  15. package/dist/components/physics.cjs +664 -0
  16. package/dist/components/physics.cjs.map +1 -0
  17. package/dist/components/physics.css +5 -0
  18. package/dist/components/physics.d.cts +216 -0
  19. package/dist/components/physics.d.ts +216 -0
  20. package/dist/components/physics.js +644 -0
  21. package/dist/components/physics.js.map +1 -0
  22. package/dist/components/reveal.cjs +1 -1
  23. package/dist/components/reveal.js +2 -2
  24. package/dist/components/text.cjs +1 -1
  25. package/dist/components/text.js +2 -2
  26. package/dist/components/transitions.cjs +1 -1
  27. package/dist/components/transitions.js +2 -2
  28. package/dist/components.cjs +22 -1
  29. package/dist/components.cjs.map +1 -1
  30. package/dist/components.css +3 -0
  31. package/dist/components.d.cts +180 -2
  32. package/dist/components.d.ts +180 -2
  33. package/dist/components.js +6 -2
  34. package/dist/components.js.map +1 -1
  35. package/dist/components.umd.js +2 -2
  36. package/dist/components.umd.js.map +1 -1
  37. package/docs/components.md +14 -0
  38. package/package.json +14 -2
@@ -0,0 +1 @@
1
+ {"version":3,"file":"physics.cjs","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":["EASE_SPRING","prefersReducedMotion","applyFrame","caf","now","raf","defineElement","css","clamp"],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ /* use-scroll-animate/components/physics */
2
+ .usa-sr{position:absolute;width:1px;height:1px;margin:-1px;padding:0;overflow:hidden;clip:rect(0 0 0 0);clip-path:inset(50%);white-space:nowrap;border:0}
3
+ 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}
4
+ 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}
5
+ 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}
@@ -0,0 +1,216 @@
1
+ /**
2
+ * use-scroll-animate/components — shared base for the `<usa-*>` custom elements.
3
+ *
4
+ * Everything here is lazy: nothing touches `window`, `document`,
5
+ * `HTMLElement` or `matchMedia` at import time, so the components can be
6
+ * imported during SSR (Next, Nuxt, Astro…) and in Electron/Tauri preload
7
+ * scripts. Classes are created the first time a `define*()` function runs.
8
+ */
9
+ interface ComponentsConfig {
10
+ /**
11
+ * Inject each component's CSS when it is defined (default `true`). Uses a
12
+ * constructable stylesheet (`document.adoptedStyleSheets`, which a strict
13
+ * `style-src` CSP does not block) and falls back to a `<style>` tag. Set
14
+ * to `false` when you load `use-scroll-animate/components.css` yourself.
15
+ */
16
+ injectStyles?: boolean;
17
+ /**
18
+ * `'user'` (default) follows `prefers-reduced-motion`; `'reduce'` always
19
+ * uses the reduced variants (e.g. a kiosk / battery-saver mode);
20
+ * `'no-preference'` ignores the OS setting (only for demos — respect your users).
21
+ */
22
+ reducedMotion?: 'user' | 'reduce' | 'no-preference';
23
+ }
24
+ /** Change global component settings (call before `define*()` for `injectStyles`). */
25
+ declare function configureComponents(options: ComponentsConfig): void;
26
+ /** `true` when animations should be reduced (OS setting or `configureComponents`). */
27
+ declare function prefersReducedMotion(): boolean;
28
+ /**
29
+ * Members shared by every `<usa-*>` element. Attribute helpers, a cleanup
30
+ * bag that is emptied on disconnect, and motion helpers that degrade to the
31
+ * final state without WAAPI or under reduced motion.
32
+ */
33
+ interface UsaElement extends HTMLElement {
34
+ /** `true` while reduced motion applies to this element. */
35
+ readonly reduced: boolean;
36
+ }
37
+
38
+ declare const SPRING_EFFECTS: readonly ["bounce-in", "pop", "drop", "jelly", "rubber-band"];
39
+ type SpringEffect = (typeof SPRING_EFFECTS)[number];
40
+ /** Keyframes of a spring effect (entrances use spring timing, attention effects fixed frames). */
41
+ declare function springEffectKeyframes(effect: string, reduced?: boolean): Keyframe[];
42
+ /**
43
+ * `<usa-spring>` — spring / bounce effects on its content.
44
+ *
45
+ * Attributes: `effect` (`bounce-in` default, `pop`, `drop`, `jelly`,
46
+ * `rubber-band`), `trigger` (`view` default, `hover`, `click`, `manual`),
47
+ * `preset` (`gentle`, `wobbly`, `stiff`, `bouncy`, …) or `stiffness` /
48
+ * `damping` / `mass`, `delay` (ms), `duration` (ms, attention effects; 900),
49
+ * `repeat` (replay every time it re-enters the view), `block`.
50
+ * Events: `usa:complete`. Reduced motion: entrances fade, attention effects do nothing.
51
+ */
52
+ interface UsaSpringElement extends UsaElement {
53
+ effect: string;
54
+ play(): Promise<void>;
55
+ reset(): void;
56
+ }
57
+ declare function defineSpring(tag?: string): CustomElementConstructor | undefined;
58
+
59
+ /**
60
+ * `<usa-draggable>` — drag its content with the pointer (mouse, touch, pen)
61
+ * or the arrow keys; physics on release.
62
+ *
63
+ * Attributes: `axis` (`both` default, `x`, `y`), `spring-back` (return to
64
+ * the origin with a spring), `inertia` (keep gliding after a flick),
65
+ * `snap` (grid size like `80`, or points like `0,120,240`), `bounds`
66
+ * (`parent` = stay inside the parent box, rubber-banding past its edges),
67
+ * `preset` (spring, default `wobbly`), `step` (arrow-key step, px, 16),
68
+ * `disabled`. Methods: `moveTo(x, y, animate?)`, `reset()`. Events:
69
+ * `usa:drag-start`, `usa:drag-end` (`{ x, y, vx, vy }`), `usa:settle`.
70
+ * Reduced motion: positions change instantly (no spring or inertia).
71
+ */
72
+ interface UsaDraggableElement extends UsaElement {
73
+ readonly x: number;
74
+ readonly y: number;
75
+ readonly dragging: boolean;
76
+ moveTo(x: number, y: number, animate?: boolean): void;
77
+ reset(): void;
78
+ }
79
+ declare function defineDraggable(tag?: string): CustomElementConstructor | undefined;
80
+
81
+ /**
82
+ * `<usa-overscroll>` — an elastic scroll container: pulling past the top or
83
+ * bottom (touch, trackpad or wheel) stretches the content with iOS-style
84
+ * rubber-band resistance and it springs back on release.
85
+ *
86
+ * Attributes: `axis` (`y` default, `x`), `max` (largest stretch in px, 120),
87
+ * `preset` (spring, default `default`), `disabled`. CSS variable
88
+ * `--usa-overscroll` holds the current offset. Reduced motion: no stretch
89
+ * (a plain scroll container with `overscroll-behavior: contain`).
90
+ */
91
+ interface UsaOverscrollElement extends UsaElement {
92
+ /** Current stretch in px (negative = pulled past the end). */
93
+ readonly offset: number;
94
+ }
95
+ declare function defineOverscroll(tag?: string): CustomElementConstructor | undefined;
96
+
97
+ /**
98
+ * Spring physics core (v2.3). A damped harmonic oscillator integrated in
99
+ * 1 ms steps: `stiffness` (k, N/m), `damping` (c) and `mass` (m). Used by
100
+ * the `<usa-spring>`, `<usa-draggable>` and `<usa-overscroll>` elements and
101
+ * exported for your own animations:
102
+ *
103
+ * - `springEasing()` turns a spring into a CSS `linear()` easing + duration
104
+ * for WAAPI / CSS (falls back to a cubic-bezier overshoot where `linear()`
105
+ * is unsupported);
106
+ * - `spring(el, keyframes, cfg)` animates with it;
107
+ * - `createSpring()` is an interruptible, velocity-preserving value for
108
+ * gestures (drag, inertia, snap).
109
+ */
110
+ interface SpringConfig {
111
+ /** Spring stiffness (default 170). Higher = faster, snappier. */
112
+ stiffness?: number;
113
+ /** Damping / friction (default 26). Lower = more bounces. */
114
+ damping?: number;
115
+ /** Mass (default 1). Higher = slower, heavier. */
116
+ mass?: number;
117
+ /** Initial velocity in progress units per second (default 0). */
118
+ velocity?: number;
119
+ /** Rest threshold (default 0.001). */
120
+ precision?: number;
121
+ }
122
+ type SpringPreset = 'default' | 'gentle' | 'wobbly' | 'stiff' | 'bouncy' | 'slow' | 'molasses';
123
+ declare const SPRING_PRESETS: Record<SpringPreset, Required<Pick<SpringConfig, 'stiffness' | 'damping' | 'mass'>>>;
124
+ type SpringInput = SpringPreset | SpringConfig | string | undefined;
125
+ /** Resolve a preset name or a partial config to a full config. */
126
+ declare function resolveSpring(input?: SpringInput): Required<SpringConfig>;
127
+ /** One integration step (semi-implicit Euler) towards `to`. Returns [x, v]. */
128
+ declare function stepSpring(cfg: Required<SpringConfig>, x: number, v: number, to: number, dt: number): [number, number];
129
+ /**
130
+ * Sample the spring from 0 to 1 at `fps` (default 60). `values` may exceed 1
131
+ * (overshoot); `duration` is the time to rest, in ms (max 10 s).
132
+ */
133
+ declare function springSamples(input?: SpringInput, fps?: number): {
134
+ values: number[];
135
+ duration: number;
136
+ };
137
+ /** `true` when CSS `linear()` easing is supported. */
138
+ declare function supportsLinearEasing(): boolean;
139
+ /**
140
+ * The spring as `{ easing, duration }` for `el.animate()` / CSS. `easing` is
141
+ * a `linear(…)` function with at most `points` stops (default 48), or a
142
+ * cubic-bezier overshoot where `linear()` is unsupported.
143
+ */
144
+ declare function springEasing(input?: SpringInput, points?: number): {
145
+ easing: string;
146
+ duration: number;
147
+ };
148
+ /** Build a CSS `linear()` easing from samples (down-sampled to `points`). */
149
+ declare function linearEasing(values: number[], points?: number): string;
150
+ /**
151
+ * Animate `el` between keyframes with spring timing (WAAPI). Under reduced
152
+ * motion the final frame is applied immediately. Returns the Animation (or
153
+ * `null` without WAAPI / under reduced motion).
154
+ */
155
+ declare function spring(el: Element, keyframes: Keyframe[], input?: SpringInput, options?: KeyframeAnimationOptions): Animation | null;
156
+ interface SpringValueOptions {
157
+ /** Start value (default 0). */
158
+ value?: number;
159
+ /** Spring config or preset (default `'default'`). */
160
+ spring?: SpringInput;
161
+ /** Called with the value every frame (and on `jump()`). */
162
+ onUpdate?: (value: number, velocity: number) => void;
163
+ /** Called when the value comes to rest at its target. */
164
+ onRest?: (value: number) => void;
165
+ }
166
+ interface SpringValue {
167
+ readonly value: number;
168
+ /** Units per second. */
169
+ readonly velocity: number;
170
+ readonly target: number;
171
+ readonly animating: boolean;
172
+ /** Animate to `target`, optionally with a new initial velocity (units/s). */
173
+ set(target: number, velocity?: number): void;
174
+ /** Jump to `value` with no animation. */
175
+ jump(value: number): void;
176
+ /** Stop where it is. */
177
+ stop(): void;
178
+ /** Change the spring config. */
179
+ configure(spring: SpringInput): void;
180
+ }
181
+ /**
182
+ * An interruptible spring-animated number: call `set()` as often as you like,
183
+ * the motion keeps its velocity (like iOS / Framer springs). Reduced motion
184
+ * jumps straight to the target.
185
+ */
186
+ declare function createSpring(opts?: SpringValueOptions): SpringValue;
187
+ /**
188
+ * Where a flick at `velocity` (units/s) comes to rest with exponential
189
+ * decay: `value + velocity · timeConstant` (default 0.325 s, iOS-like).
190
+ */
191
+ declare function projectInertia(value: number, velocity: number, timeConstant?: number): number;
192
+ /** Snap to a grid (`number`) or the nearest of a list of points. */
193
+ declare function snapTo(value: number, to: number | number[] | null | undefined): number;
194
+ /** iOS-style rubber-band resistance: how far content moves when pulled `distance` past an edge. */
195
+ declare function rubberBand(distance: number, dimension: number, constant?: number): number;
196
+
197
+ /**
198
+ * use-scroll-animate/components/physics — spring & bounce physics (v2.3).
199
+ * `<usa-spring>` (bounce-in, pop, drop, jelly, rubber-band), `<usa-draggable>`
200
+ * (spring-back, inertia, snap) and `<usa-overscroll>` (elastic edges), plus
201
+ * the spring core: `spring()`, `springEasing()`, `createSpring()`,
202
+ * `SPRING_PRESETS`, `projectInertia()`, `snapTo()`, `rubberBand()`.
203
+ */
204
+
205
+ /** Register every component of this category under its default tag. */
206
+ declare function definePhysicsComponents(): void;
207
+ declare global {
208
+ interface HTMLElementTagNameMap {
209
+ 'usa-spring': UsaSpringElement;
210
+ 'usa-draggable': UsaDraggableElement;
211
+ 'usa-overscroll': UsaOverscrollElement;
212
+ }
213
+ }
214
+
215
+ export { SPRING_EFFECTS, SPRING_PRESETS, configureComponents, createSpring, defineDraggable, defineOverscroll, definePhysicsComponents, defineSpring, linearEasing, prefersReducedMotion, projectInertia, resolveSpring, rubberBand, snapTo, spring, springEasing, springEffectKeyframes, springSamples, stepSpring, supportsLinearEasing };
216
+ export type { ComponentsConfig, SpringConfig, SpringEffect, SpringInput, SpringPreset, SpringValue, SpringValueOptions, UsaDraggableElement, UsaElement, UsaOverscrollElement, UsaSpringElement };
@@ -0,0 +1,216 @@
1
+ /**
2
+ * use-scroll-animate/components — shared base for the `<usa-*>` custom elements.
3
+ *
4
+ * Everything here is lazy: nothing touches `window`, `document`,
5
+ * `HTMLElement` or `matchMedia` at import time, so the components can be
6
+ * imported during SSR (Next, Nuxt, Astro…) and in Electron/Tauri preload
7
+ * scripts. Classes are created the first time a `define*()` function runs.
8
+ */
9
+ interface ComponentsConfig {
10
+ /**
11
+ * Inject each component's CSS when it is defined (default `true`). Uses a
12
+ * constructable stylesheet (`document.adoptedStyleSheets`, which a strict
13
+ * `style-src` CSP does not block) and falls back to a `<style>` tag. Set
14
+ * to `false` when you load `use-scroll-animate/components.css` yourself.
15
+ */
16
+ injectStyles?: boolean;
17
+ /**
18
+ * `'user'` (default) follows `prefers-reduced-motion`; `'reduce'` always
19
+ * uses the reduced variants (e.g. a kiosk / battery-saver mode);
20
+ * `'no-preference'` ignores the OS setting (only for demos — respect your users).
21
+ */
22
+ reducedMotion?: 'user' | 'reduce' | 'no-preference';
23
+ }
24
+ /** Change global component settings (call before `define*()` for `injectStyles`). */
25
+ declare function configureComponents(options: ComponentsConfig): void;
26
+ /** `true` when animations should be reduced (OS setting or `configureComponents`). */
27
+ declare function prefersReducedMotion(): boolean;
28
+ /**
29
+ * Members shared by every `<usa-*>` element. Attribute helpers, a cleanup
30
+ * bag that is emptied on disconnect, and motion helpers that degrade to the
31
+ * final state without WAAPI or under reduced motion.
32
+ */
33
+ interface UsaElement extends HTMLElement {
34
+ /** `true` while reduced motion applies to this element. */
35
+ readonly reduced: boolean;
36
+ }
37
+
38
+ declare const SPRING_EFFECTS: readonly ["bounce-in", "pop", "drop", "jelly", "rubber-band"];
39
+ type SpringEffect = (typeof SPRING_EFFECTS)[number];
40
+ /** Keyframes of a spring effect (entrances use spring timing, attention effects fixed frames). */
41
+ declare function springEffectKeyframes(effect: string, reduced?: boolean): Keyframe[];
42
+ /**
43
+ * `<usa-spring>` — spring / bounce effects on its content.
44
+ *
45
+ * Attributes: `effect` (`bounce-in` default, `pop`, `drop`, `jelly`,
46
+ * `rubber-band`), `trigger` (`view` default, `hover`, `click`, `manual`),
47
+ * `preset` (`gentle`, `wobbly`, `stiff`, `bouncy`, …) or `stiffness` /
48
+ * `damping` / `mass`, `delay` (ms), `duration` (ms, attention effects; 900),
49
+ * `repeat` (replay every time it re-enters the view), `block`.
50
+ * Events: `usa:complete`. Reduced motion: entrances fade, attention effects do nothing.
51
+ */
52
+ interface UsaSpringElement extends UsaElement {
53
+ effect: string;
54
+ play(): Promise<void>;
55
+ reset(): void;
56
+ }
57
+ declare function defineSpring(tag?: string): CustomElementConstructor | undefined;
58
+
59
+ /**
60
+ * `<usa-draggable>` — drag its content with the pointer (mouse, touch, pen)
61
+ * or the arrow keys; physics on release.
62
+ *
63
+ * Attributes: `axis` (`both` default, `x`, `y`), `spring-back` (return to
64
+ * the origin with a spring), `inertia` (keep gliding after a flick),
65
+ * `snap` (grid size like `80`, or points like `0,120,240`), `bounds`
66
+ * (`parent` = stay inside the parent box, rubber-banding past its edges),
67
+ * `preset` (spring, default `wobbly`), `step` (arrow-key step, px, 16),
68
+ * `disabled`. Methods: `moveTo(x, y, animate?)`, `reset()`. Events:
69
+ * `usa:drag-start`, `usa:drag-end` (`{ x, y, vx, vy }`), `usa:settle`.
70
+ * Reduced motion: positions change instantly (no spring or inertia).
71
+ */
72
+ interface UsaDraggableElement extends UsaElement {
73
+ readonly x: number;
74
+ readonly y: number;
75
+ readonly dragging: boolean;
76
+ moveTo(x: number, y: number, animate?: boolean): void;
77
+ reset(): void;
78
+ }
79
+ declare function defineDraggable(tag?: string): CustomElementConstructor | undefined;
80
+
81
+ /**
82
+ * `<usa-overscroll>` — an elastic scroll container: pulling past the top or
83
+ * bottom (touch, trackpad or wheel) stretches the content with iOS-style
84
+ * rubber-band resistance and it springs back on release.
85
+ *
86
+ * Attributes: `axis` (`y` default, `x`), `max` (largest stretch in px, 120),
87
+ * `preset` (spring, default `default`), `disabled`. CSS variable
88
+ * `--usa-overscroll` holds the current offset. Reduced motion: no stretch
89
+ * (a plain scroll container with `overscroll-behavior: contain`).
90
+ */
91
+ interface UsaOverscrollElement extends UsaElement {
92
+ /** Current stretch in px (negative = pulled past the end). */
93
+ readonly offset: number;
94
+ }
95
+ declare function defineOverscroll(tag?: string): CustomElementConstructor | undefined;
96
+
97
+ /**
98
+ * Spring physics core (v2.3). A damped harmonic oscillator integrated in
99
+ * 1 ms steps: `stiffness` (k, N/m), `damping` (c) and `mass` (m). Used by
100
+ * the `<usa-spring>`, `<usa-draggable>` and `<usa-overscroll>` elements and
101
+ * exported for your own animations:
102
+ *
103
+ * - `springEasing()` turns a spring into a CSS `linear()` easing + duration
104
+ * for WAAPI / CSS (falls back to a cubic-bezier overshoot where `linear()`
105
+ * is unsupported);
106
+ * - `spring(el, keyframes, cfg)` animates with it;
107
+ * - `createSpring()` is an interruptible, velocity-preserving value for
108
+ * gestures (drag, inertia, snap).
109
+ */
110
+ interface SpringConfig {
111
+ /** Spring stiffness (default 170). Higher = faster, snappier. */
112
+ stiffness?: number;
113
+ /** Damping / friction (default 26). Lower = more bounces. */
114
+ damping?: number;
115
+ /** Mass (default 1). Higher = slower, heavier. */
116
+ mass?: number;
117
+ /** Initial velocity in progress units per second (default 0). */
118
+ velocity?: number;
119
+ /** Rest threshold (default 0.001). */
120
+ precision?: number;
121
+ }
122
+ type SpringPreset = 'default' | 'gentle' | 'wobbly' | 'stiff' | 'bouncy' | 'slow' | 'molasses';
123
+ declare const SPRING_PRESETS: Record<SpringPreset, Required<Pick<SpringConfig, 'stiffness' | 'damping' | 'mass'>>>;
124
+ type SpringInput = SpringPreset | SpringConfig | string | undefined;
125
+ /** Resolve a preset name or a partial config to a full config. */
126
+ declare function resolveSpring(input?: SpringInput): Required<SpringConfig>;
127
+ /** One integration step (semi-implicit Euler) towards `to`. Returns [x, v]. */
128
+ declare function stepSpring(cfg: Required<SpringConfig>, x: number, v: number, to: number, dt: number): [number, number];
129
+ /**
130
+ * Sample the spring from 0 to 1 at `fps` (default 60). `values` may exceed 1
131
+ * (overshoot); `duration` is the time to rest, in ms (max 10 s).
132
+ */
133
+ declare function springSamples(input?: SpringInput, fps?: number): {
134
+ values: number[];
135
+ duration: number;
136
+ };
137
+ /** `true` when CSS `linear()` easing is supported. */
138
+ declare function supportsLinearEasing(): boolean;
139
+ /**
140
+ * The spring as `{ easing, duration }` for `el.animate()` / CSS. `easing` is
141
+ * a `linear(…)` function with at most `points` stops (default 48), or a
142
+ * cubic-bezier overshoot where `linear()` is unsupported.
143
+ */
144
+ declare function springEasing(input?: SpringInput, points?: number): {
145
+ easing: string;
146
+ duration: number;
147
+ };
148
+ /** Build a CSS `linear()` easing from samples (down-sampled to `points`). */
149
+ declare function linearEasing(values: number[], points?: number): string;
150
+ /**
151
+ * Animate `el` between keyframes with spring timing (WAAPI). Under reduced
152
+ * motion the final frame is applied immediately. Returns the Animation (or
153
+ * `null` without WAAPI / under reduced motion).
154
+ */
155
+ declare function spring(el: Element, keyframes: Keyframe[], input?: SpringInput, options?: KeyframeAnimationOptions): Animation | null;
156
+ interface SpringValueOptions {
157
+ /** Start value (default 0). */
158
+ value?: number;
159
+ /** Spring config or preset (default `'default'`). */
160
+ spring?: SpringInput;
161
+ /** Called with the value every frame (and on `jump()`). */
162
+ onUpdate?: (value: number, velocity: number) => void;
163
+ /** Called when the value comes to rest at its target. */
164
+ onRest?: (value: number) => void;
165
+ }
166
+ interface SpringValue {
167
+ readonly value: number;
168
+ /** Units per second. */
169
+ readonly velocity: number;
170
+ readonly target: number;
171
+ readonly animating: boolean;
172
+ /** Animate to `target`, optionally with a new initial velocity (units/s). */
173
+ set(target: number, velocity?: number): void;
174
+ /** Jump to `value` with no animation. */
175
+ jump(value: number): void;
176
+ /** Stop where it is. */
177
+ stop(): void;
178
+ /** Change the spring config. */
179
+ configure(spring: SpringInput): void;
180
+ }
181
+ /**
182
+ * An interruptible spring-animated number: call `set()` as often as you like,
183
+ * the motion keeps its velocity (like iOS / Framer springs). Reduced motion
184
+ * jumps straight to the target.
185
+ */
186
+ declare function createSpring(opts?: SpringValueOptions): SpringValue;
187
+ /**
188
+ * Where a flick at `velocity` (units/s) comes to rest with exponential
189
+ * decay: `value + velocity · timeConstant` (default 0.325 s, iOS-like).
190
+ */
191
+ declare function projectInertia(value: number, velocity: number, timeConstant?: number): number;
192
+ /** Snap to a grid (`number`) or the nearest of a list of points. */
193
+ declare function snapTo(value: number, to: number | number[] | null | undefined): number;
194
+ /** iOS-style rubber-band resistance: how far content moves when pulled `distance` past an edge. */
195
+ declare function rubberBand(distance: number, dimension: number, constant?: number): number;
196
+
197
+ /**
198
+ * use-scroll-animate/components/physics — spring & bounce physics (v2.3).
199
+ * `<usa-spring>` (bounce-in, pop, drop, jelly, rubber-band), `<usa-draggable>`
200
+ * (spring-back, inertia, snap) and `<usa-overscroll>` (elastic edges), plus
201
+ * the spring core: `spring()`, `springEasing()`, `createSpring()`,
202
+ * `SPRING_PRESETS`, `projectInertia()`, `snapTo()`, `rubberBand()`.
203
+ */
204
+
205
+ /** Register every component of this category under its default tag. */
206
+ declare function definePhysicsComponents(): void;
207
+ declare global {
208
+ interface HTMLElementTagNameMap {
209
+ 'usa-spring': UsaSpringElement;
210
+ 'usa-draggable': UsaDraggableElement;
211
+ 'usa-overscroll': UsaOverscrollElement;
212
+ }
213
+ }
214
+
215
+ export { SPRING_EFFECTS, SPRING_PRESETS, configureComponents, createSpring, defineDraggable, defineOverscroll, definePhysicsComponents, defineSpring, linearEasing, prefersReducedMotion, projectInertia, resolveSpring, rubberBand, snapTo, spring, springEasing, springEffectKeyframes, springSamples, stepSpring, supportsLinearEasing };
216
+ export type { ComponentsConfig, SpringConfig, SpringEffect, SpringInput, SpringPreset, SpringValue, SpringValueOptions, UsaDraggableElement, UsaElement, UsaOverscrollElement, UsaSpringElement };