/**
 * Animation-Signal Integration
 * Reactive signals that drive UI updates from animation state changes
 */
import { Signal } from '../core/signal';
import { Animation, EasingFunction, Interpolator } from './core';
export interface AnimatedSignal<T> extends Signal<T> {
    readonly animation: Signal<Animation<T> | null>;
    readonly isAnimating: Signal<boolean>;
    readonly progress: Signal<number>;
    readonly animateTo: (target: T, duration?: number, easing?: EasingFunction) => Promise<T>;
    readonly setImmediate: (value: T) => void;
    readonly stop: () => void;
}
export interface SpringConfig {
    readonly tension: number;
    readonly friction: number;
    readonly mass: number;
    readonly precision: number;
}
export interface SpringSignal<T> extends AnimatedSignal<T> {
    readonly config: Signal<SpringConfig>;
    readonly velocity: Signal<number>;
    readonly setConfig: (config: Partial<SpringConfig>) => void;
}
export declare const animatedSignal: <T>(initial: T, interpolator: Interpolator<T>, defaultDuration?: number, defaultEasing?: EasingFunction) => AnimatedSignal<T>;
export declare const springSignal: <T>(initial: T, interpolator: Interpolator<T>, config?: SpringConfig) => SpringSignal<T>;
export declare const animatedNumber: (initial: number, duration?: number, easing?: EasingFunction) => AnimatedSignal<number>;
export declare const springNumber: (initial: number, config?: Partial<SpringConfig>) => SpringSignal<number>;
export declare const animatedColor: (initial: string, duration?: number, easing?: EasingFunction) => AnimatedSignal<string>;
export declare const animatedArray: <T>(initial: T[], itemInterpolator: Interpolator<T>, duration?: number, easing?: EasingFunction) => AnimatedSignal<T[]>;
export declare const useAnimatedValue: <T>(sourceSignal: Signal<T>, interpolator: Interpolator<T>, duration?: number, easing?: EasingFunction) => AnimatedSignal<T>;
export declare const springFromSignal: <T>(sourceSignal: Signal<T>, interpolator: Interpolator<T>, config?: Partial<SpringConfig>) => SpringSignal<T>;
export declare const sequence: <T>(signal: AnimatedSignal<T>, values: T[], duration?: number, easing?: EasingFunction) => Promise<T>;
export declare const loop: <T>(signal: AnimatedSignal<T>, values: T[], duration?: number, easing?: EasingFunction, iterations?: number) => {
    stop: () => void;
};
export declare const gestureSignal: <T>(initial: T, interpolator: Interpolator<T>) => AnimatedSignal<T> & {
    readonly startGesture: (target: T) => void;
    readonly updateGesture: (progress: number) => void;
    readonly endGesture: (velocity?: number) => void;
};
