UNPKG

use-simple-camera

Version:

Production-ready React Hooks for Camera, Video Recording, QR/Barcode Scanning, Motion Detection, and Audio Analysis. Zero dependencies, fully typed, and easy to use.

62 lines (61 loc) 1.89 kB
export type CameraErrorType = "PERMISSION_DENIED" | "NO_DEVICE_FOUND" | "CONSTRAINT_ERROR" | "UNKNOWN_ERROR" | "BROWSER_NOT_SUPPORTED"; export interface CameraError { type: CameraErrorType; message: string; originalError?: Error; } export type CameraFacingMode = "user" | "environment"; export type CameraPreset = "SD" | "HD" | "FHD" | "4K" | "Instagram"; export interface UseCameraConfig { autoStart?: boolean; defaultConstraints?: MediaStreamConstraints; mock?: boolean; autoRetry?: boolean; debug?: boolean; } export interface CameraState { isStreaming: boolean; error: CameraError | null; stream: MediaStream | null; } export interface CameraControls { zoom: number; minZoom: number; maxZoom: number; setZoom: (value: number) => Promise<void>; flash: boolean; hasFlash: boolean; setFlash: (enabled: boolean) => Promise<void>; pan: number; tilt: number; setPan: (value: number) => Promise<void>; setTilt: (value: number) => Promise<void>; focusMode: "auto" | "manual" | "continuous" | "none"; setFocusMode: (mode: "auto" | "manual" | "continuous") => Promise<void>; focusDistance: number; setFocusDistance: (value: number) => Promise<void>; supports: { zoom: boolean; flash: boolean; pan: boolean; tilt: boolean; focusMode: boolean; focusDistance: boolean; }; } export interface VideoRecorderOptions { mimeType?: string; timeLimitMs?: number; onRecordingStart?: () => void; onRecordingStop?: (blob: Blob) => void; } export interface DecoderOptions { onDetect: (code: string) => void; formats?: string[]; } export interface MotionDetectionOptions { sensitivity?: number; intervalMs?: number; onMotion?: () => void; } export type FilterType = "none" | "grayscale" | "sepia" | "contrast" | "blur";