export interface UIChallenge { time_limit_seconds: number; instruction: string; } /** * Single-view passive liveness scan UI: full-width camera, oval face guide, * one instruction line, a subtle scanning progress ring. No step-by-step * challenge list — replaces the earlier two-column "BLINK / TURN_HEAD / * OPEN_MOUTH" checklist design with a plain natural-motion scan. */ /** Minimal color contract LivenessUI needs — a subset of flow/theme.ts's * ThemeColors so this module doesn't have to import the flow layer. */ export interface LivenessUIColors { primary: string; success: string; error: string; warning: string; } export declare class LivenessUI { private root; private colors; private videoEl; private instructionEl; private confidenceRingEl; private bgOvalEl; private guideWrapEl; private scanlineEl; private overlayEl; private dotsEl; private docCaptureRoot; private scanStartMs; private scanDurationMs; private faceTracked; constructor(colors?: Partial); mount(container: HTMLElement, challenge: UIChallenge): HTMLVideoElement; /** * Resets the progress ring's clock to now. The caller (liveness.ts) mounts * the UI, then waits ~1s for camera AE/AF to settle before the detection * loop actually starts — call this again right when detection begins so * the ring's timing matches the real scan window instead of running ahead. */ startScanClock(): void; /** Advances the scan progress ring based on elapsed time in the window. */ updateScanProgress(livenessConfirmed: boolean): void; /** * Reflects whether a face is currently detected in-frame — brightens the * oval guide's glow/brackets when locked on, and dims the scan-line sweep * so the UI visibly distinguishes "searching" from "actively scanning". */ setFaceTracking(tracked: boolean): void; updateInstruction(text: string): void; showResult(status: "processing" | "failed", _verificationId?: number): Promise; showTimeout(onRetry: () => void): Promise; getVideoElement(): HTMLVideoElement | null; mountDocumentCapture(container: HTMLElement, stream: MediaStream): Promise; unmount(): void; } //# sourceMappingURL=LivenessUI.d.ts.map