import { z } from "zod"; import { PropertyDescriptionTypeEnum } from "../library/types/Property.types"; /** * Bezier control point in normalized `[0, 1]` curve space. * * `time` controls the horizontal handle offset relative to the keyframe and `value` * controls the vertical easing influence used by bezier interpolation. */ export interface BezierHandle { time: number; value: number; } /** * Default incoming bezier handle used when a keyframe does not override its own incoming tangent. */ export declare const DEFAULT_HANDLE_IN: BezierHandle; /** * Default outgoing bezier handle used when a keyframe does not override its own outgoing tangent. */ export declare const DEFAULT_HANDLE_OUT: BezierHandle; /** * Value types supported by the property animator runtime and serialized keyframe model. */ export type PropertyValue = number | number[] | string | boolean; /** * Single keyframe on a property animation track. */ export interface PropertyKeyframe { time: number; value: PropertyValue; /** Incoming bezier handle (controls curve arriving at this keyframe) */ handleIn: BezierHandle; /** Outgoing bezier handle (controls curve leaving this keyframe) */ handleOut: BezierHandle; /** If true, holds this value until the next keyframe (no interpolation) */ hold?: boolean; } /** * Default interpolation metadata applied to keyframes on a track when the keyframe itself omits it. */ export interface TrackDefaults { handleIn?: BezierHandle; handleOut?: BezierHandle; hold?: boolean; } /** * Serialized animation track for one property on a clip. */ export interface PropertyTrack { property: string; type: PropertyDescriptionTypeEnum; keyframes: PropertyKeyframe[]; defaults?: TrackDefaults; customData?: Map; } /** * Runtime registration contract connecting an animatable property key to get/set accessors on a clip. */ export interface PropertyRegistration { key: string; type: PropertyDescriptionTypeEnum; get: () => PropertyValue; set: (value: PropertyValue) => void; } /** * Links a vector-style property to the scalar component properties that can be edited independently. */ export interface PropertyLink { /** The compound property key, e.g. "scale" */ compound: string; /** The component property keys in order, e.g. ["scaleX", "scaleY"] */ components: string[]; } /** * Indicates whether the property type supports continuous interpolation between adjacent keyframes. * * Non-continuous types such as booleans and strings are treated as stepped values instead. * * @param type Property description type to test. * @returns `true` when the property can be interpolated continuously. */ export declare function isContinuousType(type: PropertyDescriptionTypeEnum): boolean; /** * Zod schema for a bezier handle in serialized keyframe data. */ export declare const BezierHandleSchema: z.ZodObject<{ time: z.ZodNumber; value: z.ZodNumber; }, "strip", z.ZodTypeAny, { value: number; time: number; }, { value: number; time: number; }>; /** * Zod schema for a serialized property keyframe. */ export declare const PropertyKeyframeSchema: z.ZodObject<{ time: z.ZodNumber; value: z.ZodUnion<[z.ZodNumber, z.ZodArray, z.ZodString, z.ZodBoolean]>; handleIn: z.ZodObject<{ time: z.ZodNumber; value: z.ZodNumber; }, "strip", z.ZodTypeAny, { value: number; time: number; }, { value: number; time: number; }>; handleOut: z.ZodObject<{ time: z.ZodNumber; value: z.ZodNumber; }, "strip", z.ZodTypeAny, { value: number; time: number; }, { value: number; time: number; }>; hold: z.ZodOptional; }, "strip", z.ZodTypeAny, { value: (string | number | boolean | number[]) & (string | number | boolean | number[] | undefined); time: number; handleIn: { value: number; time: number; }; handleOut: { value: number; time: number; }; hold?: boolean | undefined; }, { value: (string | number | boolean | number[]) & (string | number | boolean | number[] | undefined); time: number; handleIn: { value: number; time: number; }; handleOut: { value: number; time: number; }; hold?: boolean | undefined; }>; /** * Zod schema for per-track default interpolation metadata. */ export declare const TrackDefaultsSchema: z.ZodObject<{ handleIn: z.ZodOptional>; handleOut: z.ZodOptional>; hold: z.ZodOptional; }, "strip", z.ZodTypeAny, { handleIn?: { value: number; time: number; } | undefined; handleOut?: { value: number; time: number; } | undefined; hold?: boolean | undefined; }, { handleIn?: { value: number; time: number; } | undefined; handleOut?: { value: number; time: number; } | undefined; hold?: boolean | undefined; }>; /** * Zod schema for a serialized property animation track. */ export declare const PropertyTrackSchema: z.ZodObject<{ property: z.ZodString; type: z.ZodNativeEnum; keyframes: z.ZodArray, z.ZodString, z.ZodBoolean]>; handleIn: z.ZodObject<{ time: z.ZodNumber; value: z.ZodNumber; }, "strip", z.ZodTypeAny, { value: number; time: number; }, { value: number; time: number; }>; handleOut: z.ZodObject<{ time: z.ZodNumber; value: z.ZodNumber; }, "strip", z.ZodTypeAny, { value: number; time: number; }, { value: number; time: number; }>; hold: z.ZodOptional; }, "strip", z.ZodTypeAny, { value: (string | number | boolean | number[]) & (string | number | boolean | number[] | undefined); time: number; handleIn: { value: number; time: number; }; handleOut: { value: number; time: number; }; hold?: boolean | undefined; }, { value: (string | number | boolean | number[]) & (string | number | boolean | number[] | undefined); time: number; handleIn: { value: number; time: number; }; handleOut: { value: number; time: number; }; hold?: boolean | undefined; }>, "many">; defaults: z.ZodOptional>; handleOut: z.ZodOptional>; hold: z.ZodOptional; }, "strip", z.ZodTypeAny, { handleIn?: { value: number; time: number; } | undefined; handleOut?: { value: number; time: number; } | undefined; hold?: boolean | undefined; }, { handleIn?: { value: number; time: number; } | undefined; handleOut?: { value: number; time: number; } | undefined; hold?: boolean | undefined; }>>; customData: z.ZodOptional, "many">>; }, "strip", z.ZodTypeAny, { type: PropertyDescriptionTypeEnum; property: string; keyframes: { value: (string | number | boolean | number[]) & (string | number | boolean | number[] | undefined); time: number; handleIn: { value: number; time: number; }; handleOut: { value: number; time: number; }; hold?: boolean | undefined; }[]; defaults?: { handleIn?: { value: number; time: number; } | undefined; handleOut?: { value: number; time: number; } | undefined; hold?: boolean | undefined; } | undefined; customData?: [string, unknown][] | undefined; }, { type: PropertyDescriptionTypeEnum; property: string; keyframes: { value: (string | number | boolean | number[]) & (string | number | boolean | number[] | undefined); time: number; handleIn: { value: number; time: number; }; handleOut: { value: number; time: number; }; hold?: boolean | undefined; }[]; defaults?: { handleIn?: { value: number; time: number; } | undefined; handleOut?: { value: number; time: number; } | undefined; hold?: boolean | undefined; } | undefined; customData?: [string, unknown][] | undefined; }>; /** * Zod schema for the serialized property animator state stored on clips. */ export declare const PropertyAnimatorSchema: z.ZodObject<{ tracks: z.ZodArray; keyframes: z.ZodArray, z.ZodString, z.ZodBoolean]>; handleIn: z.ZodObject<{ time: z.ZodNumber; value: z.ZodNumber; }, "strip", z.ZodTypeAny, { value: number; time: number; }, { value: number; time: number; }>; handleOut: z.ZodObject<{ time: z.ZodNumber; value: z.ZodNumber; }, "strip", z.ZodTypeAny, { value: number; time: number; }, { value: number; time: number; }>; hold: z.ZodOptional; }, "strip", z.ZodTypeAny, { value: (string | number | boolean | number[]) & (string | number | boolean | number[] | undefined); time: number; handleIn: { value: number; time: number; }; handleOut: { value: number; time: number; }; hold?: boolean | undefined; }, { value: (string | number | boolean | number[]) & (string | number | boolean | number[] | undefined); time: number; handleIn: { value: number; time: number; }; handleOut: { value: number; time: number; }; hold?: boolean | undefined; }>, "many">; defaults: z.ZodOptional>; handleOut: z.ZodOptional>; hold: z.ZodOptional; }, "strip", z.ZodTypeAny, { handleIn?: { value: number; time: number; } | undefined; handleOut?: { value: number; time: number; } | undefined; hold?: boolean | undefined; }, { handleIn?: { value: number; time: number; } | undefined; handleOut?: { value: number; time: number; } | undefined; hold?: boolean | undefined; }>>; customData: z.ZodOptional, "many">>; }, "strip", z.ZodTypeAny, { type: PropertyDescriptionTypeEnum; property: string; keyframes: { value: (string | number | boolean | number[]) & (string | number | boolean | number[] | undefined); time: number; handleIn: { value: number; time: number; }; handleOut: { value: number; time: number; }; hold?: boolean | undefined; }[]; defaults?: { handleIn?: { value: number; time: number; } | undefined; handleOut?: { value: number; time: number; } | undefined; hold?: boolean | undefined; } | undefined; customData?: [string, unknown][] | undefined; }, { type: PropertyDescriptionTypeEnum; property: string; keyframes: { value: (string | number | boolean | number[]) & (string | number | boolean | number[] | undefined); time: number; handleIn: { value: number; time: number; }; handleOut: { value: number; time: number; }; hold?: boolean | undefined; }[]; defaults?: { handleIn?: { value: number; time: number; } | undefined; handleOut?: { value: number; time: number; } | undefined; hold?: boolean | undefined; } | undefined; customData?: [string, unknown][] | undefined; }>, "many">; initialValues: z.ZodOptional, z.ZodString, z.ZodBoolean]>], null>, "many">>; }, "strip", z.ZodTypeAny, { tracks: { type: PropertyDescriptionTypeEnum; property: string; keyframes: { value: (string | number | boolean | number[]) & (string | number | boolean | number[] | undefined); time: number; handleIn: { value: number; time: number; }; handleOut: { value: number; time: number; }; hold?: boolean | undefined; }[]; defaults?: { handleIn?: { value: number; time: number; } | undefined; handleOut?: { value: number; time: number; } | undefined; hold?: boolean | undefined; } | undefined; customData?: [string, unknown][] | undefined; }[]; initialValues?: [string, string | number | boolean | number[]][] | undefined; }, { tracks: { type: PropertyDescriptionTypeEnum; property: string; keyframes: { value: (string | number | boolean | number[]) & (string | number | boolean | number[] | undefined); time: number; handleIn: { value: number; time: number; }; handleOut: { value: number; time: number; }; hold?: boolean | undefined; }[]; defaults?: { handleIn?: { value: number; time: number; } | undefined; handleOut?: { value: number; time: number; } | undefined; hold?: boolean | undefined; } | undefined; customData?: [string, unknown][] | undefined; }[]; initialValues?: [string, string | number | boolean | number[]][] | undefined; }>;