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.
73 lines (72 loc) • 2.96 kB
TypeScript
/**
* 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>;