/**
 * Animation Core System - Categorical Animation Engine
 * Following category-theoretic principles: Animation as Functor Time → State
 */
import { Signal } from '../core/signal';
export type Time = number;
export interface AnimationState<T> {
    readonly value: T;
    readonly progress: number;
    readonly isComplete: boolean;
    readonly startTime: number;
    readonly duration: number;
    readonly elapsedTime: number;
}
export interface EasingFunction {
    (t: number): number;
}
export interface Interpolator<T> {
    (from: T, to: T, progress: number): T;
}
export interface Animation<T> {
    readonly id: string;
    readonly duration: number;
    readonly from: T;
    readonly to: T;
    readonly interpolator: Interpolator<T>;
    readonly easing: EasingFunction;
    readonly state: Signal<AnimationState<T>>;
    readonly value: Signal<T>;
    readonly progress: Signal<number>;
    readonly isComplete: Signal<boolean>;
    readonly map: <U>(f: (value: T) => U, interpolator: Interpolator<U>) => Animation<U>;
    readonly ease: (easing: EasingFunction) => Animation<T>;
    readonly start: () => void;
    readonly pause: () => void;
    readonly resume: () => void;
    readonly stop: () => void;
    readonly seek: (progress: number) => void;
    readonly onComplete: (callback: (value: T) => void) => () => void;
    readonly onUpdate: (callback: (state: AnimationState<T>) => void) => () => void;
}
export declare const easings: {
    linear: (t: number) => number;
    easeIn: (t: number) => number;
    easeOut: (t: number) => number;
    easeInOut: (t: number) => number;
    easeInQuad: (t: number) => number;
    easeOutQuad: (t: number) => number;
    easeInOutQuad: (t: number) => number;
    easeInCubic: (t: number) => number;
    easeOutCubic: (t: number) => number;
    easeInOutCubic: (t: number) => number;
    easeInQuart: (t: number) => number;
    easeOutQuart: (t: number) => number;
    easeInOutQuart: (t: number) => number;
    easeInBack: (t: number) => number;
    easeOutBack: (t: number) => number;
    easeInOutBack: (t: number) => number;
    easeInBounce: (t: number) => number;
    easeOutBounce: (t: number) => number;
    easeInOutBounce: (t: number) => number;
};
export declare const interpolators: {
    number: (from: number, to: number, t: number) => number;
    string: (from: string, to: string, t: number) => string;
    boolean: (from: boolean, to: boolean, t: number) => boolean;
    array: <T>(from: T[], to: T[], t: number, itemInterpolator: Interpolator<T>) => T[];
    object: <T_1 extends Record<string, any>>(from: T_1, to: T_1, t: number, propertyInterpolators: Record<keyof T_1, Interpolator<any>>) => T_1;
    color: (from: string, to: string, t: number) => string;
    transform: (from: string, to: string, t: number) => string;
};
export declare const animation: <T>(from: T, to: T, duration: number, interpolator: Interpolator<T>, easing?: EasingFunction) => Animation<T>;
