export type AuraAssetType = "model" | "texture" | "environment" | "audio";
export type AuraModelFormat = "glb" | "gltf";
export interface AuraAssetDefinition {
    readonly type: AuraAssetType;
    readonly format: AuraModelFormat | string;
    readonly url: string;
    readonly hash?: string;
    readonly bounds?: readonly number[];
    readonly source?: string;
    readonly license?: string;
}
declare const auraAssetRefBrand: unique symbol;
export type AuraAssetRef<TType extends AuraAssetType = AuraAssetType, TId extends string = string> = AuraAssetDefinition & {
    readonly kind: "aura-asset-ref";
    readonly id: TId;
    readonly type: TType;
    readonly [auraAssetRefBrand]: {
        readonly type: TType;
        readonly id: TId;
    };
};
export type AuraAssetMap<T extends Record<string, AuraAssetDefinition>> = {
    readonly [K in keyof T]: AuraAssetRef<T[K]["type"], Extract<K, string>> & T[K];
};
export declare function defineAuraAssets<const T extends Record<string, AuraAssetDefinition>>(definitions: T): AuraAssetMap<T>;
export interface ProductViewerOptions {
    readonly captureFrame?: number;
}
export interface ProductViewerScene {
    readonly kind: "aura3d-product-viewer-scene";
    readonly asset: AuraAssetRef<"model">;
    readonly options: Required<Pick<ProductViewerOptions, "captureFrame">>;
}
export interface ProductViewerSceneKit {
    readonly kind: "aura-scene-kit";
    readonly id: "productViewer";
    readonly nodes: readonly Record<string, unknown>[];
    readonly evidence: readonly string[];
    readonly acceptanceEvidence: readonly string[];
    readonly diagnostics: {
        readonly kind: "aura-scene-kit-diagnostics";
        readonly id: "productViewer";
        readonly structuralScore: 5;
        readonly problems: readonly string[];
    };
    toAppOptions(): {
        readonly scene: ProductViewerScene;
        readonly diagnostics: false;
    };
    scene(): ProductViewerScene;
    customize(next: ProductViewerOptions): ProductViewerSceneKit;
}
export interface AuraApp {
    readonly canvas: HTMLCanvasElement;
    readonly scene: ProductViewerScene;
    readonly backend: "three";
    diagnostics(): ProductViewerDiagnostics;
    screenshot(): {
        readonly mimeType: "image/png";
        readonly dataUrl: string;
        readonly width: number;
        readonly height: number;
    };
    dispose(): void;
}
export interface ProductViewerDiagnostics {
    readonly backend: "three";
    fps: number;
    drawCalls: number;
    renderSize: readonly [number, number];
    readonly warnings: readonly string[];
    errors: string[];
    readonly renderer: {
        readonly kind: "aura-renderer-diagnostics";
        readonly backend: "three-lean-product-viewer";
        runtimeStatus: "loading" | "ready" | "error";
        readonly postprocess: {
            readonly enabled: false;
            readonly actualPasses: readonly [];
        };
        readonly assets: {
            modelLoaded: boolean;
            readonly assetId: string;
            readonly assetUrl: string;
        };
    };
}
export interface AuraCreateAppOptions {
    readonly scene: ProductViewerScene;
    readonly diagnostics?: boolean;
    readonly pixelRatio?: number;
    readonly autoStart?: boolean;
    readonly resize?: boolean;
}
export type AuraAppTarget = string | HTMLElement | HTMLCanvasElement | null | undefined;
declare global {
    interface Window {
        __AURA3D_ROUTE_READY__?: unknown;
        __ENGINE_READY__?: () => boolean;
        __ENGINE_READOUT__?: () => unknown;
    }
}
export declare const sceneKits: {
    readonly productViewer: (asset: AuraAssetRef<"model">, options?: ProductViewerOptions) => ProductViewerSceneKit;
};
export declare const product: {
    readonly visualQA: (nodes: readonly Record<string, unknown>[]) => {
        score: number;
        problems: string[];
    };
};
export declare function productViewer(asset: AuraAssetRef<"model">, options?: ProductViewerOptions): ProductViewerSceneKit;
export declare function createAuraApp(target: AuraAppTarget, options: AuraCreateAppOptions): AuraApp;
export {};
//# sourceMappingURL=product-viewer-runtime.d.ts.map