import type { Detail, FaceLayer, Pose } from './model.js'; import { type Gaze } from './gaze.js'; export type Point = { x: number; y: number; }; /** Stable winding, anchor and perimeter correspondence; never align against a live blend. */ export declare function contour(points: Point[]): Point[]; export declare const traitWeight: (layers: FaceLayer[], predicate: (pose: FaceLayer['traits']) => boolean) => number; export declare function blendContours(contours: Point[][], layers: FaceLayer[]): Point[]; export declare function isLineEye(pose: Pick, side: number, detail: Detail): boolean; export declare function eyeContour(pose: Pose, r: number, side: number, blink: number, detail: Detail): Point[]; export declare function mouthGeometry(pose: Pose): { outline: Point[]; opening: Point[]; width: number; height: number; }; export declare function drawMorphEye(ctx: CanvasRenderingContext2D, pose: Pose, layers: FaceLayer[], r: number, side: number, blink: number, detail: Detail, ink: string, iris: boolean, gaze: Gaze): void; /** Find the lower contour at the drool's right-side attachment point. Using * the rendered outline keeps it attached throughout mouth-shape morphs. */ export declare function droolAnchor(outline: Point[], width: number): Point; export declare function drawDrool(ctx: CanvasRenderingContext2D, anchor: Point, amount?: number): void; export declare function drawMorphMouth(ctx: CanvasRenderingContext2D, pose: Pose, layers: FaceLayer[], ink: string): void; export declare function drawMorphBrow(ctx: CanvasRenderingContext2D, layers: FaceLayer[], r: number, side: number, ink: string, stroke?: number, length?: number): void; //# sourceMappingURL=face-morph.d.ts.map