export type TimelineLoopMode = "none" | "loop" | "pingpong";
export type TimelineClipBlendMode = "replace" | "additive" | "multiply" | "mix";
export type TimelineEasingName = "linear" | "ease-in" | "ease-out" | "ease-in-out";
export interface TimelineClipConfig {
    readonly id?: string;
    readonly name: string;
    readonly startTime: number;
    readonly duration: number;
    readonly assetId?: string;
    readonly clipName?: string;
    readonly easeInDuration?: number;
    readonly easeOutDuration?: number;
    readonly easeIn?: TimelineEasingName;
    readonly easeOut?: TimelineEasingName;
    readonly speedMultiplier?: number;
    readonly blendMode?: TimelineClipBlendMode;
    readonly weight?: number;
    readonly clipInOffset?: number;
    readonly properties?: Record<string, string | number | boolean>;
}
export interface TimelineTrackConfig {
    readonly id?: string;
    readonly name: string;
    readonly type: "animation" | "selection" | "signal" | "audio" | "camera" | "generic";
    readonly muted?: boolean;
    readonly locked?: boolean;
    readonly weight?: number;
    readonly clips?: readonly TimelineClipConfig[];
    readonly properties?: Record<string, string | number | boolean>;
}
export interface TimelineModelConfig {
    readonly id?: string;
    readonly name?: string;
    readonly duration?: number;
    readonly loopMode?: TimelineLoopMode;
    readonly speed?: number;
    readonly frameRate?: number;
    readonly tracks?: readonly TimelineTrackConfig[];
}
export interface TimelineActiveClipSnapshot {
    readonly trackId: string;
    readonly trackName: string;
    readonly trackType: TimelineTrackConfig["type"];
    readonly clipId: string;
    readonly clipName: string;
    readonly localTime: number;
    readonly assetTime: number;
    readonly normalizedTime: number;
    readonly blendWeight: number;
    readonly blendMode: TimelineClipBlendMode;
}
export interface TimelineTrackSnapshot {
    readonly id: string;
    readonly name: string;
    readonly type: TimelineTrackConfig["type"];
    readonly muted: boolean;
    readonly locked: boolean;
    readonly weight: number;
    readonly clipCount: number;
}
export interface TimelineSnapshot {
    readonly id: string;
    readonly name: string;
    readonly playback: "playing" | "paused";
    readonly time: number;
    readonly normalizedTime: number;
    readonly duration: number;
    readonly loopMode: TimelineLoopMode;
    readonly speed: number;
    readonly frameRate: number;
    readonly direction: 1 | -1;
    readonly trackCount: number;
    readonly clipCount: number;
    readonly activeClipCount: number;
    readonly activeClips: readonly TimelineActiveClipSnapshot[];
    readonly tracks: readonly TimelineTrackSnapshot[];
    readonly signalEvents: readonly string[];
    readonly evidence: {
        readonly oldCodebasePort: true;
        readonly boundedTimelineAuthoring: true;
        readonly clipEasing: boolean;
        readonly clipBlending: boolean;
        readonly muteLockState: boolean;
        readonly loopPlayback: boolean;
        readonly signalMarkers: boolean;
    };
}
export declare class TimelineClip {
    readonly id: string;
    name: string;
    startTime: number;
    duration: number;
    assetId?: string;
    clipName?: string;
    easeInDuration: number;
    easeOutDuration: number;
    easeIn: TimelineEasingName;
    easeOut: TimelineEasingName;
    speedMultiplier: number;
    blendMode: TimelineClipBlendMode;
    weight: number;
    clipInOffset: number;
    readonly properties: Record<string, string | number | boolean>;
    enabled: boolean;
    constructor(config: TimelineClipConfig);
    get endTime(): number;
    contains(time: number): boolean;
    localTime(time: number): number;
    assetTime(time: number): number;
    normalizedTime(time: number): number;
    blendWeight(time: number): number;
}
export declare class TimelineTrack {
    readonly id: string;
    name: string;
    readonly type: TimelineTrackConfig["type"];
    muted: boolean;
    locked: boolean;
    weight: number;
    readonly properties: Record<string, string | number | boolean>;
    private readonly clipsInternal;
    constructor(config: TimelineTrackConfig);
    get clips(): readonly TimelineClip[];
    addClip(clip: TimelineClip, options?: {
        readonly ignoreLock?: boolean;
    }): TimelineClip;
    activeClips(time: number): readonly TimelineClip[];
    snapshot(): TimelineTrackSnapshot;
}
export declare class TimelineModel {
    readonly id: string;
    name: string;
    duration: number;
    loopMode: TimelineLoopMode;
    speed: number;
    frameRate: number;
    private readonly tracksInternal;
    private playing;
    private timeInternal;
    private directionInternal;
    private readonly emittedSignals;
    constructor(config?: TimelineModelConfig);
    get tracks(): readonly TimelineTrack[];
    get currentTime(): number;
    get isPlaying(): boolean;
    addTrack(track: TimelineTrack): TimelineTrack;
    clearTracks(): void;
    play(): void;
    pause(): void;
    stop(): void;
    seek(time: number): void;
    setNormalizedTime(value: number): void;
    tick(deltaSeconds: number): void;
    snapshot(): TimelineSnapshot;
    private wrapTime;
}
//# sourceMappingURL=TimelineModel.d.ts.map