export type FrameCallback = (dtMs: number, nowMs: number) => void; /** Observe an element; sole writer of data-ag-offscreen. Returns unobserve (idempotent; the element stays observed while other holders remain). */ export declare function observeOffscreen(el: Element): () => void; /** Subscribe to the shared frame loop. opts.element skips cb while offscreen. */ export declare function subscribeFrame(cb: FrameCallback, opts?: { element?: Element; }): () => void; /** One-shot frame on the shared ticker (REQ-MAT-51): runs `cb` once on the next ticker frame and releases its subscription, so product code never calls requestAnimationFrame itself. Returns an idempotent cancel. Honours the ticker's hidden-document pause. */ export declare function scheduleFrame(cb: (nowMs: number) => void): () => void; export type ResolvedMotion = 'full' | 'calm' | 'none'; /** Resolved motion for the document: the attribute written by the preference store / pre-paint script wins; only when no attribute is set does the store's shared reducedMotion OS signal apply as the floor (S-12 mirror). */ export declare function resolvedMotion(d?: Document | null): ResolvedMotion; /** Notify when the resolved motion changes (store until 2d-P lands; MutationObserver on documentElement's data-ag-motion is the shipping path). */ export declare function onMotionChange(cb: (m: ResolvedMotion) => void): () => void; export interface TweenOptions { duration?: number; format?: (v: number) => string; motion?: ResolvedMotion; } export interface TweenHandle { cancel(): void; readonly finished: Promise; } /** Tween a numeric textContent through the shared ticker. Under calm/none the final value is written immediately. cancel() jumps to the final value. */ export declare function tween(el: Element, from: number, to: number, opts?: TweenOptions): TweenHandle; /** Update an aria-live=polite aria-atomic=true region once (no per-frame spam). */ export declare function announceFinal(region: Element, text: string): void; //# sourceMappingURL=ticker.d.ts.map