import { Hands } from '@mediapipe/hands';
export interface HandLandmark {
    x: number;
    y: number;
    z: number;
    visibility?: number;
}
export interface Handedness {
    score: number;
    index: number;
    label: "Left" | "Right" | string;
}
export interface DetectedHand {
    landmarks: HandLandmark[];
    worldLandmarks?: HandLandmark[];
    handedness: Handedness[];
}
export interface MediaPipeHandsResults {
    multiHandLandmarks: HandLandmark[][];
    multiHandWorldLandmarks: HandLandmark[][];
    multiHandedness: Handedness[];
    image?: HTMLImageElement | HTMLVideoElement | HTMLCanvasElement | ImageBitmap;
}
export interface HandsData {
    detectedHands: DetectedHand[];
    imageDimensions?: {
        width: number;
        height: number;
    };
}
export interface MediaPipeHandsOptions {
    staticImageMode?: boolean;
    maxNumHands?: number;
    modelComplexity?: 0 | 1;
    minDetectionConfidence?: number;
    minTrackingConfidence?: number;
    selfieMode?: boolean;
    locateFile?: (file: string, scriptPath?: string) => string;
}
export interface HandsTrackingDeviceProps {
    options?: MediaPipeHandsOptions;
    handsVersion?: string;
    onInitialLoad?: () => void;
    onHandsData?: (data: HandsData) => void;
    onError?: (error: string) => void;
    onTrackingStarted?: () => void;
    onTrackingStopped?: () => void;
    onResults?: (detectedHands: DetectedHand[], image?: HTMLImageElement | HTMLVideoElement | HTMLCanvasElement | ImageBitmap) => void;
}
export interface HandsTrackingDevice {
    isTracking: boolean;
    handsData: HandsData | null;
    error: string | null;
    startTracking: (videoElement: HTMLVideoElement) => Promise<void>;
    stopTracking: () => void;
    getHandsInstance: () => Hands | null;
}
export interface HandsTrackingControl extends HandsTrackingDevice {
    addHandsDataListener: (listener: (data: HandsData) => void) => string;
    removeHandsDataListener: (listenerId: string) => void;
    addErrorListener: (listener: (error: string) => void) => string;
    removeErrorListener: (listenerId: string) => void;
    addStartListener: (listener: () => void) => string;
    removeStartListener: (listenerId: string) => void;
    addStopListener: (listener: () => void) => string;
    removeStopListener: (listenerId: string) => void;
}
export type HandsProviderProps = HandsTrackingDeviceProps;
//# sourceMappingURL=types.d.ts.map