/** Spring-driven easing, compiled to CSS `linear()` so the DOM wrapper and the * SVG blob can share one GPU-composited transition — the core of zero-lag * mirrored sync. Falls back to cubic-bezier where `linear()` is unsupported. */ export interface SpringConfig { stiffness?: number; damping?: number; mass?: number; } export type TransitionPreset = 'snappy' | 'smooth' | 'bouncy'; export type Transition = TransitionPreset | SpringConfig | { duration: number; ease?: string; }; export interface ResolvedTransition { /** ms */ duration: number; /** CSS timing function */ easing: string; } export declare const presets: Record>; /** Advance one value along a preset's spring by a WALL-CLOCK `dt` (seconds), * carrying its velocity. Returns `[position, velocity]`. * * Tuffex-only addition, not in liquid-gooey. `resolveTransition` compiles a * preset into a fixed CSS curve, and a fixed curve always starts from rest: * retarget it mid-flight and the motion restarts at zero velocity, a visible * stall. Geometry drawn frame by frame from JS (TxFusionSurface's buds, the * send split built on its geometry) has to keep its momentum through a * retarget, so it integrates the same `presets` here instead of compiling * them — one set of curves for the whole library, two ways to run it. * * This resolves the preset and steps on utils' `stepSpring`: semi-implicit * Euler, the same scheme as `observer.ts`'s private `springSteps` and * `simulate()` below, with a substep cap equal to `DT` rather than * observer's 1/60 s. The stepping lives in utils so hosts of the indicator * engine outside the components can reach it without this module. */ export declare function springSteps(position: number, velocity: number, target: number, config: TransitionPreset | SpringConfig, dt: number): [number, number]; export declare function resolveTransition(t: Transition | undefined, reducedMotion?: boolean): ResolvedTransition;