import type * as THREE from "three";
/**
 * Shared fields for one model load request.
 */
interface BaseModelLoadContext {
    /** Normalized lowercase format token; same semantics as historical `endsWith` checks. */
    readonly format: string;
    readonly onProgress?: (event: ProgressEvent) => void;
    /**
     * Per-load mesh quantization (see {@link ModelConfig.quantize}). When `false` or omitted on
     * {@link ModelConfig}, loaders skip quantization; {@link Viewer3d} fills omission from {@link BaseViewer.enableQuantization}.
     */
    readonly quantize?: boolean;
}
/**
 * Context for model loading from URL.
 */
export interface ModelLoadContext extends BaseModelLoadContext {
    readonly url: string;
    readonly requestHeader?: {
        [header: string]: string;
    };
}
export interface ObjLoadContext extends ModelLoadContext {
    readonly mtlUrls?: string[];
}
/**
 * Context for model loading from memory buffer.
 */
export interface ModelLoadFromBufferContext extends BaseModelLoadContext {
    readonly data: ArrayBuffer | Uint8Array;
}
/**
 * Pluggable model loader (strategy). Built-ins and extensions share this contract.
 */
export declare abstract class BaseModelLoader {
    /** Stable id for unregister and diagnostics. */
    abstract readonly id: string;
    /** Higher runs first; use a value above built-in `0` to override built-ins. */
    readonly priority?: number;
    /**
     * Lowercase extension tokens without a leading dot (e.g. `glb`, `gltf`).
     * Aggregated by `ModelLoaderManager.getSupportedModelFormats`; default {@link match} uses suffix checks on these entries.
     */
    abstract readonly formats: readonly string[];
    /**
     * True when `format` (often a lowercased filename or extension token) ends with one of {@link formats}.
     * Override for non-suffix matching.
     */
    match(format: string): boolean;
    /**
     * When {@link ModelLoadContext.quantize} is strictly `true`, quantizes mesh
     * {@link THREE.BufferGeometry} under `scene` (see {@link GeometryUtils.applyMeshQuantizationToSceneRoot}).
     */
    protected maybeQuantizeLoadedScene(scene: THREE.Object3D, quantize?: boolean): THREE.Object3D;
    load?(ctx: ModelLoadContext): Promise<THREE.Object3D | void>;
    loadFromBuffer?(ctx: ModelLoadFromBufferContext): Promise<THREE.Object3D | void>;
    /**
     * Called by ModelLoaderManager when the active LoadingManager changes
     * (e.g. for multi-file local loads with a URL modifier).
     * Implementations should reset any cached internal loader instances.
     */
    updateManager?(manager: THREE.LoadingManager | undefined): void;
}
export {};
