UNPKG

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
/** * 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>;