UNPKG

@omnimedia/omnitool

Version:

open source video processing tools

38 lines (37 loc) 1.54 kB
import { Item, VisualAnimatableItem } from "./parts/item.js"; export type Interpolation = "linear" | "ease" | "easeIn" | "easeOut" | "bounce" | "catmullRom"; export type Keyframe<Value = number> = [time: number, value: Value]; export type Keyframes<Value = number> = Keyframe<Value>[]; export type Vec2 = [x: number, y: number]; export type Transform = [position: Vec2, scale: Vec2, rotation: number]; export type TrackVec2 = { x: Keyframes; y: Keyframes; }; export type Anim<T> = { terp: Interpolation; track: T; }; export type TrackTransform = { position: TrackVec2; scale: TrackVec2; rotation: Keyframes; }; export type ScalarAnimation = Anim<Keyframes>; export type Vec2Animation = Anim<TrackVec2>; export type TransformAnimation = Anim<TrackTransform>; export type VisualAnimations = { opacity?: ScalarAnimation; transform?: TransformAnimation; }; export type VisualAnimationInput<TKey extends keyof VisualAnimations> = TKey extends "transform" ? Keyframes<Transform> : Keyframes; export type VisualAnimationValue<TKey extends keyof VisualAnimations> = TKey extends "transform" ? TransformAnimation : ScalarAnimation; export interface AnimateAction<TKey extends keyof VisualAnimations = keyof VisualAnimations> { <T extends VisualAnimatableItem>(item: T, terp: Interpolation, track: VisualAnimationInput<TKey>): T; make(terp: Interpolation, track: VisualAnimationInput<TKey>): Item.Animation; } export type TransformOptions = { position?: Vec2; scale?: Vec2; rotation?: number; };