import { type SurfaceConfig } from './surfaces'; import type { BodyNode } from './body'; export type Quaternion = readonly [number, number, number, number]; export type Point3 = readonly [number, number, number]; export type EyeMotion = 'none' | 'microSaccades' | 'shake'; export type BodyMotion = 'none' | 'slowDrift' | 'shake'; export type Expression = { id: string; semanticKey?: string; headX: number; headY: number; headZ: number; widthLeft: number; widthRight: number; heightLeft: number; heightRight: number; spacing: number; positionXLeft: number; positionXRight: number; positionYLeft: number; positionYRight: number; leftAngle: number; rightAngle: number; perspective: number; eyeMotion: EyeMotion; bodyMotion: BodyMotion; bodyColor?: string; eyeColor?: string; }; export type ExpressionNumericField = Exclude; export type AvatarPose = { expression: Expression; orientation: Quaternion; }; export type AvatarGeometry = { backPaths: string[]; frontPaths: string[]; backNodeIds: (string | null)[]; frontNodeIds: (string | null)[]; headPath: string; leftPath: string; rightPath: string; leftVisible: boolean; rightVisible: boolean; wirePaths: string[]; }; export type RenderAvatarOptions = { includeWire?: boolean; bodyNodes?: BodyNode[]; eyeOffset?: Readonly<{ x: number; y: number; }>; }; export type EyeEditorGeometry = { visible: boolean; selectionPath: string; widthGuide: string; heightGuide: string; rotationGuide: string; spacingGuide: string; center: Point3; widthHandle: Point3; heightHandle: Point3; rotateHandle: Point3; sizeHandle: Point3; spacingHandle: Point3; }; export type BodyNodeEditorGeometry = { center: Point3; axes: Record<'x' | 'y' | 'z', Point3>; rings: Record<'x' | 'y' | 'z', Point3[]>; }; export declare const RADIUS = 120; export declare const expressionFields: ExpressionNumericField[]; export declare const clamp: (value: number, min: number, max: number) => number; export declare const radians: (degrees: number) => number; export declare const normalizeQuaternion: ([w, x, y, z]: Quaternion) => Quaternion; export declare const multiplyQuaternions: ([aw, ax, ay, az]: Quaternion, [bw, bx, by, bz]: Quaternion) => Quaternion; export declare const quaternionFromAxisAngle: ([x, y, z]: Point3, angle: number) => Quaternion; export declare const quaternionFromEuler: (x: number, y: number, z: number) => Quaternion; export declare const quaternionFromVectors: (from: Point3, to: Point3) => Quaternion; export declare const quaternionToEuler: ([w, x, y, z]: Quaternion) => Point3; export declare const expressionWithOrientation: (expression: Expression, orientation: Quaternion) => Expression; export declare const slerpQuaternion: (start: Quaternion, end: Quaternion, progress: number) => Quaternion; export declare const rotateWithQuaternion: ([w, x, y, z]: Quaternion, [px, py, pz]: Point3) => Point3; export declare const axisVector: (axis: "x" | "y" | "z") => Point3; export declare const rotateExpressionAroundAxis: (expression: Expression, axis: "x" | "y" | "z", deltaDegrees: number) => Expression; export declare const rotateExpressionAroundCamera: (expression: Expression, deltaRadians: number) => Expression; export declare const rotateExpressionWithArcball: (expression: Expression, startPoint: readonly [number, number], currentPoint: readonly [number, number]) => Expression; export declare const rotationRing: (pose: AvatarPose, axis: "x" | "y" | "z", radius?: number) => Point3[]; export declare const renderBodyNodeEditor: (pose: AvatarPose, node: BodyNode, axisLength?: number, ringRadius?: number) => BodyNodeEditorGeometry; export declare const translateBodyNodeAlongLocalAxis: (node: BodyNode, axis: "x" | "y" | "z", distance: number) => BodyNode; export declare const translateBodyNodeInCameraPlane: (node: BodyNode, pose: AvatarPose, screenDeltaX: number, screenDeltaY: number) => BodyNode; export declare const rotateBodyNodeAroundLocalAxis: (node: BodyNode, axis: "x" | "y" | "z", deltaDegrees: number) => BodyNode; export declare const poseFromExpression: (expression: Expression) => AvatarPose; export declare const interpolatePose: (from: AvatarPose, to: AvatarPose, progress: number) => AvatarPose; export declare const renderEyeEditor: (pose: AvatarPose, surface: SurfaceConfig, side: -1 | 1) => EyeEditorGeometry; export declare const renderAvatar: (pose: AvatarPose, surface: SurfaceConfig, blink?: number, options?: RenderAvatarOptions) => AvatarGeometry; //# sourceMappingURL=geometry.d.ts.map