/** * Drives interpolation + follow-camera for `type="Tracking"` layers (spec: * "Routing & Tracking"). Deliberately isolated from `RuntimeCore.reconcile`'s * own internals — called as one line from that method, reusing the SAME * per-frame channel `trace`/`pulse` already ride (`runLayerEffect`/ * `patchAnimatedProps`, src/effects.ts), not a parallel animation system. * * Position/bearing come from the layer's OWN already-resolved IR props (the * compiled `getPosition` accessor, the `bearingField` name) — no new * field-resolution kernel invented for this. */ import type { RuntimeCore } from "./runtime-core"; import type { LayerIR } from "./ir"; /** Shortest-path angle interpolation — a plain lerp on raw degrees would swing the long way around at the 0/360 wrap (350° → 10° should pass through 0°, not backward through 180°). Exported for direct unit testing (the `traceProgress`/`pulseOpacity` precedent in effects.ts — "pure math, unit-testable without a clock"). */ export declare function lerpAngle(a: number, b: number, t: number): number; /** * Called once per `reconcile()`, after `RuntimeCore.lastIRs` is updated — * needs the PREVIOUS set (passed in explicitly) to detect a genuine new fix * vs. an unrelated reconcile (a sibling layer's edit, a story step) that * left this layer's `data` reference untouched. */ export declare function updateTrackingLayers(core: RuntimeCore, previousIRs: readonly LayerIR[], irs: readonly LayerIR[]): void;