/**
 * @license
 * Copyright 2026 Google LLC
 * SPDX-License-Identifier: Apache-2.0
 */
import { type Region } from '../output.js';
export type AnimationOptions = {
    interval: number;
    onTick: () => void;
};
/**
 * Manages scroll animations.
 * Interpolates between current scroll position and target scroll position.
 */
export declare class AnimationController {
    private readonly options;
    private readonly targetScrollTops;
    private intervalId?;
    private idleResolvers;
    constructor(options: AnimationOptions);
    /**
     * Updates the animation interval.
     */
    updateInterval(interval: number): void;
    /**
     * Returns the internal target scroll tops map.
     */
    get allTargetScrollTops(): ReadonlyMap<string | number, number>;
    /**
     * Returns true if the animation loop is running.
     */
    get isRunning(): boolean;
    /**
     * Returns a promise that resolves when the animation loop stops.
     */
    waitForIdle(): Promise<void>;
    /**
     * Sets the target scroll position for a region.
     */
    setTargetScrollTop(regionId: string | number, scrollTop: number): void;
    /**
     * Returns the target scroll top for a region.
     */
    getTargetScrollTop(regionId: string | number): number | undefined;
    /**
     * Removes the target scroll position for a region.
     */
    deleteTargetScrollTop(regionId: string | number): void;
    /**
     * Starts the animation loop if not already running.
     */
    start(): void;
    /**
     * Stops the animation loop.
     */
    stop(): void;
    /**
     * Interrupts animations and jumps all regions to their targets.
     */
    jumpToTargets(regions: Map<string | number, Region>): void;
    /**
     * Updates regions based on their targets. Returns true if any region scrolled.
     */
    updateRegions(regions: Map<string | number, Region>): {
        hasScrolled: boolean;
        canScrollMore: boolean;
    };
    /**
     * Processes one frame of animation.
     */
    private tick;
}
