export type Vec3 = readonly [number, number, number];
export type Quat = readonly [number, number, number, number];
export type Mat4 = readonly [
    number,
    number,
    number,
    number,
    number,
    number,
    number,
    number,
    number,
    number,
    number,
    number,
    number,
    number,
    number,
    number
];
export type NumberArray = readonly number[];
export type AnimationValue = number | boolean | string | Vec3 | Quat | NumberArray;
export type InterpolationMode = "step" | "linear" | "cubicspline";
export type Keyframe<T extends AnimationValue = AnimationValue> = {
    readonly time: number;
    readonly value: T;
    readonly interpolation?: InterpolationMode;
    readonly inTangent?: T;
    readonly outTangent?: T;
};
export type SerializedKeyframe<T extends AnimationValue = AnimationValue> = {
    readonly time: number;
    readonly value: T;
    readonly interpolation?: InterpolationMode;
    readonly inTangent?: T;
    readonly outTangent?: T;
};
export declare function validateKeyframes<T extends AnimationValue>(keyframes: readonly Keyframe<T>[]): void;
export declare function serializeKeyframe<T extends AnimationValue>(keyframe: Keyframe<T>): SerializedKeyframe<T>;
export declare function deserializeKeyframe<T extends AnimationValue>(keyframe: SerializedKeyframe<T>): Keyframe<T>;
export declare function cloneAnimationValue<T extends AnimationValue>(value: T): T;
export declare function lerpNumber(a: number, b: number, t: number): number;
export declare function lerpVec3(a: Vec3, b: Vec3, t: number): Vec3;
export declare function normalizeQuat(q: Quat): Quat;
export declare function slerpQuat(a: Quat, b: Quat, t: number): Quat;
export declare function identityMat4(): Mat4;
export declare function composeMat4(translation?: Vec3, rotation?: Quat, scale?: Vec3): Mat4;
export declare function multiplyMat4(a: Mat4, b: Mat4): Mat4;
export declare function invertTranslationMat4(matrix: Mat4): Mat4;
//# sourceMappingURL=Keyframe.d.ts.map