import { EventEmitter } from '../../common/EventEmitter.js';
import type { AnimationManager } from './AnimationManager.js';
import { type TimingFunction } from './utils.js';
export declare enum StopMethodFlags {
    Immediate = 0,
    Reset = 1,
    Reverse = 2
}
export type StopMethodOptions = 'reverse' | 'reset' | 'immediate';
export declare const getStopMethodFlag: (method: string | undefined) => StopMethodFlags;
export interface PlaybackSettings {
    delay: number;
    duration: number;
    easing: string | TimingFunction;
    loop: boolean;
    repeat: number;
    reverse: boolean;
    stopMethod: StopMethodOptions;
    autoPlay: boolean;
}
export declare enum PlaybackState {
    Idle = 0,
    Destroyed = 1,
    Stopped = 2,
    Finished = 3,
    Paused = 4,
    Playing = 5,
    Stopping = 6
}
export declare const PlaybackSettingsKeys: {
    delay: boolean;
    duration: boolean;
    easing: boolean;
    loop: boolean;
    repeat: boolean;
    reverse: boolean;
    stopMethod: boolean;
    autoPlay: boolean;
};
export declare function getPlaybackId(): number;
export default class Playback extends EventEmitter {
    readonly animationManager: AnimationManager;
    readonly id: number;
    delay: number;
    duration: number;
    easing: TimingFunction | undefined;
    loop: boolean;
    repeat: number;
    reverse: boolean;
    stopMethod: StopMethodFlags;
    state: PlaybackState;
    startTime: number | null;
    pauseTime: number | null;
    endTime: number | null;
    currentTime: number;
    iteration: number;
    constructor(animationManager: AnimationManager, settings?: Partial<PlaybackSettings>);
    update(currentFrameTime: number): void;
    updateValues(currentTime: number): void;
    applyStartValues(): void;
    start(): this;
    stop(): void;
    finish(): void;
}
