import { Object3D } from 'three';
import { CoreObjectType, ObjectContent } from '../../geometry/ObjectContent';
import { BaseLoaderLoadOptions, CoreBaseLoader } from '../_Base';
import type { BaseGeoLoaderOutput, OnSuccess, OnProgress, OnError } from './Common';
export declare abstract class BaseGeoLoader<O extends BaseGeoLoaderOutput> {
    abstract load: (url: string, onSuccess: OnSuccess<O>, onProgress?: OnProgress, onError?: OnError) => void;
}
export declare abstract class BaseLoaderHandler<O extends BaseGeoLoaderOutput, OC extends ObjectContent<CoreObjectType>> extends CoreBaseLoader<string> {
    protected _loader: BaseGeoLoader<O> | undefined;
    reset(): void;
    load(options: BaseLoaderLoadOptions): Promise<OC[] | undefined>;
    protected _errorMessage(url: string, event: ErrorEvent): string;
    protected abstract _getLoader(options: BaseLoaderLoadOptions): Promise<BaseGeoLoader<O>>;
    protected abstract _onLoadSuccess(o: O): OC[] | Promise<OC[]>;
}
export declare abstract class BaseObject3DLoaderHandler<O extends BaseGeoLoaderOutput> extends BaseLoaderHandler<O, Object3D> {
    protected _onLoadSuccess(o: O): Object3D[] | Promise<Object3D[]>;
}
