UNPKG

@omnimedia/omnitool

Version:

open source video processing tools

61 lines (60 loc) 2.65 kB
import { animationPresets } from "./presets.js"; import type { Item, VisualAnimatableItem } from "../item.js"; import { visualAnimations, animatableProperties } from "./properties.js"; import type { Anim, Interpolation, Keyframes, ScalarAnimation, TrackTransform, TransformAnimation, TransformOptions, Vec2 } from "../../types.js"; export type AnimationType = "scalar" | "transform"; export type AnimationChannelType = "number"; export type AnimationUnit = "pixel" | "scale" | "degree" | "ratio"; export type AnimationChannel = { path?: string; type: AnimationChannelType; default: number; unit?: AnimationUnit; range?: readonly [min: number, max: number]; }; export type AnimationDefinition = { type: AnimationType; defaultTerp: Interpolation; channels: readonly AnimationChannel[]; }; export type MotionAnimationPresetDefinition = { type: "motion"; label: string; defaults: Required<Omit<MotionAnimationOptions, "offset">>; transform: { from: TransformOptions; to: TransformOptions; }; }; export type ScalarAnimationPresetDefinition = { type: "scalar"; label: string; defaults: Required<Omit<ScalarAnimationOptions, "offset">>; }; export type AnimationPresetDefinition = MotionAnimationPresetDefinition | ScalarAnimationPresetDefinition; export type VisualAnimationProperty = keyof typeof visualAnimations; export type AnimationProperty = keyof typeof animatableProperties; export type AnimationPreset = keyof typeof animationPresets; type AnimationPresetAction<TPreset extends AnimationPresetDefinition> = TPreset extends MotionAnimationPresetDefinition ? (options?: MotionAnimationOptions) => Anim<TrackTransform> : TPreset extends ScalarAnimationPresetDefinition ? (options?: ScalarAnimationOptions) => Anim<Keyframes> : never; export type AnimationPresetActions = { [TName in AnimationPreset]: AnimationPresetAction<(typeof animationPresets)[TName]>; }; export type AnimationPresetOptions<Value> = { duration?: number; offset?: number; from?: Value; to?: Value; terp?: Interpolation; }; export type MotionAnimationOptions = AnimationPresetOptions<Vec2>; export type ScalarAnimationOptions = AnimationPresetOptions<number>; export type PresetAnimation = ScalarAnimation | TransformAnimation; export type PresetOptions = MotionAnimationOptions | ScalarAnimationOptions; export interface PresetAnimateAction { <T extends VisualAnimatableItem>(item: T, options?: PresetOptions): T; make(options?: PresetOptions): Item.Animation; } export type PresetAnimateActions = { [TKey in AnimationPreset]: PresetAnimateAction; }; export {};