@omnimedia/omnitool
Version:
open source video processing tools
61 lines (60 loc) • 2.65 kB
TypeScript
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 {};