import type { IEventEmitter } from './IEventEmitter.js';
export type AnimationControllerState = 'scheduled' | 'running' | 'paused' | 'stopped';
/**
 * Animation Controller interface
 *
 * @remarks
 * This interface is used to control animations. It provides methods to start,
 * stop, pause, and restore animations. It also provides a way to wait for the
 * animation to stop.
 *
 * This interface extends the `IEventEmitter` interface, which means you can
 * listen to these events emitted by the animation controller:
 * - `animating` - Emitted when the animation finishes it's delay phase and
 *   starts animating.
 * - `stopped` - Emitted when the animation stops either by calling the `stop()`
 *    method or when the animation finishes naturally.
 */
export interface IAnimationController extends IEventEmitter {
    /**
     * Start the animation
     *
     * @remarks
     * If the animation is paused this method will resume the animation.
     */
    start(): IAnimationController;
    /**
     * Stop the animation
     *
     * @remarks
     * Resets the animation to the start state
     */
    stop(): IAnimationController;
    /**
     * Pause the animation
     */
    pause(): IAnimationController;
    /**
     * Restore the animation to the original values
     */
    restore(): IAnimationController;
    /**
     * Promise that resolves when the last active animation is stopped (including
     * when the animation finishes naturally).
     *
     * @remarks
     * The Promise returned by this method is reset every time the animation
     * enters a new start/stop cycle. This means you must call `start()` before
     * calling this method if you want to wait for the animation to stop.
     *
     * This method always returns a resolved promise if the animation is currently
     * in a stopped state.
     *
     * @returns
     */
    waitUntilStopped(): Promise<void>;
    /**
     * Current state of the animation
     *
     * @remarks
     * - `stopped` - The animation is currently stopped (at the beggining or end
     *   of the animation)
     * - `running` - The animation is currently running
     * - `paused` - The animation is currently paused
     */
    readonly state: AnimationControllerState;
}
