resig.js
Version:
Universal reactive signal library with complete platform features: signals, animations, CRDTs, scheduling, DOM integration. Works identically across React, SolidJS, Svelte, Vue, and Qwik.
43 lines (42 loc) • 2.64 kB
TypeScript
/**
* 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;
};