import type { AssetType, AssetManifest } from '../core/types';
import { EventBus } from '../core/EventBus';
import type { World } from '../ecs/World';
export interface AssetMetadata {
    id: string;
    name: string;
    type: AssetType;
    /** Relative path inside project. */
    path: string;
    size: number;
    mimeType: string;
    tags: string[];
    thumbnailDataUrl?: string;
    createdAt: number;
    modifiedAt: number;
}
export interface AssetFolder {
    name: string;
    path: string;
    children: (AssetFolder | AssetMetadata)[];
}
export declare class AssetManager {
    readonly events: EventBus;
    private assets;
    private blobStore;
    private objectUrls;
    register(meta: AssetMetadata, blob?: Blob): void;
    remove(id: string): void;
    get(id: string): AssetMetadata | undefined;
    getBlob(id: string): Blob | undefined;
    getAll(): AssetMetadata[];
    getByType(type: AssetType): AssetMetadata[];
    search(query: string): AssetMetadata[];
    getObjectUrl(id: string): string | null;
    private revokeObjectUrl;
    importFile(file: File, folder?: string): Promise<AssetMetadata>;
    importFiles(files: FileList | File[], folder?: string): Promise<AssetMetadata[]>;
    private inferType;
    private generateImageThumbnail;
    toManifest(): AssetManifest;
    getFolderTree(): AssetFolder;
    clear(): void;
    /** Get assets not referenced by any entity in the given world. */
    findUnused(world: World): AssetMetadata[];
}
