import * as THREE from 'three';

interface ARToolkitSource {
    ready: boolean;
    domElement: HTMLVideoElement;
    init: (onReady?: () => void, onError?: (error: unknown) => void) => void;
    onResizeElement?: () => void;
    copyElementSizeTo?: (element: HTMLElement) => void;
    dispose?: () => void;
}
interface ARToolkitContext {
    init: (onReady?: () => void) => void;
    update: (element: HTMLVideoElement) => void;
    getProjectionMatrix: () => THREE.Matrix4;
    arController?: {
        canvas?: HTMLCanvasElement;
    } | null;
}
interface ARMarkerControls {
    dispose?: () => void;
}
interface THREExNamespace {
    ArToolkitSource: new (config: Record<string, any>) => ARToolkitSource;
    ArToolkitContext: new (config: Record<string, any>) => ARToolkitContext;
    ArMarkerControls: new (context: ARToolkitContext, markerRoot: THREE.Object3D, config: Record<string, any>) => ARMarkerControls;
}
interface ARJSLoadOptions {
    three?: typeof THREE;
    forceReload?: boolean;
    locationOnly?: boolean;
}
interface ARMarkerConfig {
    type?: 'pattern' | 'barcode' | 'unknown';
    patternUrl?: string;
    barcodeValue?: number;
    changeMatrixMode?: 'modelViewMatrix' | 'cameraTransformMatrix';
}
interface ARToolkitContextConfig {
    cameraParametersUrl?: string;
    detectionMode?: 'mono' | 'mono_and_matrix' | 'color';
    maxDetectionRate?: number;
}
declare const DEFAULT_AR_ASSETS: {
    cameraParametersUrl: string;
    patternUrl: string;
};

export { type ARJSLoadOptions as A, DEFAULT_AR_ASSETS as D, type THREExNamespace as T, type ARToolkitSource as a, type ARToolkitContext as b, type ARMarkerControls as c, type ARMarkerConfig as d, type ARToolkitContextConfig as e };
