import { type PropertyValues, ReactiveElement } from 'lit';
declare global {
    interface HTMLElementEventMap {
        'assets-updated': CustomEvent<AssetsState>;
    }
    interface HTMLElementTagNameMap {
        'play-assets': PlayAssets;
    }
}
export type AssetsFilesystemType = 'virtual' | 'local';
type AssetsFilesystemTypeChange = {
    kind: 'filesystem-type';
    filesystemType: AssetsFilesystemType;
};
type AssetsFilesystemMountArchiveChange = {
    kind: 'mount-archive';
    archiveHandle: FileSystemFileHandle | File;
};
type AssetsFilesystemMountDirectoryChange = {
    kind: 'mount-directory';
    directoryHandle: FileSystemDirectoryHandle;
};
type AssetsFilesystemRemountArchiveChange = {
    kind: 'remount-archive';
};
type AssetsFilesystemUnmountChange = {
    kind: 'unmount';
};
export type AssetsFilesystemChange = AssetsFilesystemTypeChange | AssetsFilesystemMountArchiveChange | AssetsFilesystemMountDirectoryChange | AssetsFilesystemRemountArchiveChange | AssetsFilesystemUnmountChange;
type AssetsVirtualFileAddChange = {
    kind: 'add';
    fileHandle: FileSystemFileHandle | File;
};
type AssetsVirtualFileRemoveChange = {
    kind: 'remove';
    name: string;
};
type AssetsVirtualFileRenameChange = {
    kind: 'rename';
    oldName: string;
    newName: string;
};
type AssetsVirtualFileClearChange = {
    kind: 'clear';
};
export type AssetsVirtualFileChange = AssetsVirtualFileAddChange | AssetsVirtualFileRemoveChange | AssetsVirtualFileRenameChange | AssetsVirtualFileClearChange;
export type AssetsState = {
    readonly hasFileAccessAPI: boolean;
    readonly filesystemType: AssetsFilesystemType;
    readonly archiveFilename?: string | undefined;
    readonly directoryName?: string | undefined;
    readonly map: {
        readonly [path: string]: string;
    };
    readonly count: number;
};
export declare function emptyAssetsState(): AssetsState;
export declare class PlayAssets extends ReactiveElement {
    #private;
    allowStorage: boolean;
    assetsState: AssetsState;
    filesystemType: AssetsFilesystemType;
    protected willUpdate(changedProperties: PropertyValues<this>): void;
    onFilesystemChange(change: AssetsFilesystemChange): Promise<void>;
    onVirtualFileChange(change: AssetsVirtualFileChange): Promise<void>;
}
export {};
