import { FBXLoader } from 'three/examples/jsm/loaders/FBXLoader.js';
import { type GLTF, GLTFLoader } from 'three/examples/jsm/loaders/GLTFLoader.js';
import { OBJLoader } from 'three/examples/jsm/loaders/OBJLoader.js';
import { USDZLoader } from 'three/examples/jsm/loaders/USDZLoader.js';
import { type INeedleGltfLoader } from "./engine_gltf.js";
import { SerializationContext } from "./engine_serialization_core.js";
import { Context } from "./engine_setup.js";
import { Model, type UIDProvider } from "./engine_types.js";
import { NEEDLE_components } from "./extensions/NEEDLE_components.js";
/** @internal */
export declare class NeedleLoader implements INeedleGltfLoader {
    createBuiltinComponents(context: Context, gltfId: string, gltf: any, seed: number | UIDProvider | null, extension?: NEEDLE_components | undefined): Promise<void>;
    writeBuiltinComponentData(comp: any, context: SerializationContext): object | null;
    parseSync(context: Context, data: string | ArrayBuffer, path: string, seed: number | UIDProvider | null): Promise<Model | undefined>;
    loadSync(context: Context, url: string, sourceId: string, seed: number | UIDProvider | null, prog?: ((ProgressEvent: any) => void) | undefined): Promise<Model | undefined>;
}
export declare enum GltfLoadEventType {
    BeforeLoad = 0,
    AfterLoaded = 1,
    FinishedSetup = 10
}
export declare class GltfLoadEvent {
    context: Context;
    loader: GLTFLoader;
    path: string;
    gltf?: GLTF;
    constructor(context: Context, path: string, loader: GLTFLoader, gltf?: GLTF);
}
export type GltfLoadEventCallback = (event: GltfLoadEvent) => void;
export declare function addGltfLoadEventListener(type: GltfLoadEventType, listener: GltfLoadEventCallback): void;
export declare function removeGltfLoadEventListener(type: GltfLoadEventType, listener: GltfLoadEventCallback): void;
export declare function createLoader(url: string, context: Context): Promise<GLTFLoader | FBXLoader | USDZLoader | OBJLoader | null>;
/** Load a gltf file from a url. This is the core method used by Needle Engine to load gltf files. All known extensions are registered here.
 * @param context The current context
 * @param data The gltf data as string or ArrayBuffer
 * @param path The path to the gltf file
 * @param seed The seed for generating unique ids
 * @returns The loaded gltf object
 */
export declare function parseSync(context: Context, data: string | ArrayBuffer, path: string, seed: number | UIDProvider | null): Promise<Model | undefined>;
/**
 * Load a gltf file from a url. This is the core method used by Needle Engine to load gltf files. All known extensions are registered here.
 * @param context The current context
 * @param url The url to the gltf file
 * @param sourceId The source id of the gltf file - this is usually the url
 * @param seed The seed for generating unique ids
 * @param prog A progress callback
 * @returns The loaded gltf object
 */
export declare function loadSync(context: Context, url: string, sourceId: string, seed: number | UIDProvider | null, prog?: (ProgressEvent: any) => void): Promise<Model | undefined>;
