/**
 * Animation Composition System - Operadic Composition
 * Following category-theoretic principles for animation composition
 */
import { Signal } from '../core/signal';
import { Animation } from './core';
export interface ParallelAnimation<T, U> extends Animation<T & U> {
    readonly first: Animation<T>;
    readonly second: Animation<U>;
}
export interface SequentialAnimation<T, U> extends Animation<T | U> {
    readonly first: Animation<T>;
    readonly second: Animation<U>;
    readonly currentPhase: Signal<'first' | 'second' | 'complete'>;
}
export interface Timeline {
    readonly id: string;
    readonly duration: number;
    readonly progress: Signal<number>;
    readonly isComplete: Signal<boolean>;
    readonly animations: Array<{
        animation: Animation<any>;
        offset: number;
    }>;
    readonly add: <T>(animation: Animation<T>, offset?: number) => Timeline;
    readonly remove: (animationId: string) => Timeline;
    readonly start: () => void;
    readonly pause: () => void;
    readonly resume: () => void;
    readonly stop: () => void;
    readonly seek: (progress: number) => void;
}
export declare const parallel: <T, U>(anim1: Animation<T>, anim2: Animation<U>) => ParallelAnimation<T, U>;
export declare const sequence: <T, U>(first: Animation<T>, second: Animation<U>) => SequentialAnimation<T, U>;
export declare const timeline: () => Timeline;
export declare const stagger: <T>(animations: Animation<T>[], staggerDelay: number) => Timeline;
export declare const repeat: <T>(animation: Animation<T>, count: number, delay?: number) => Timeline;
