type FileSourceBase = {
    mimeType: string;
    name: string;
};
type BlobFileSource = FileSourceBase & {
    blob: Blob;
};
type LocalFileSource = FileSourceBase & {
    filePath: string;
};
type RemoteFileSource = FileSourceBase & {
    url: string;
};

interface LocalFileListBuilderType {
    addBlob(file: BlobFileSource): this;
    addBlobs(files: BlobFileSource[]): this;
    addFile(file: LocalFileSource): this;
    addFiles(files: LocalFileSource[]): this;
    addFileObject(file: File): this;
    addFileObjects(files: File[]): this;
    build(): FileList;
    buildFileArray(): File[];
}
interface RemoteFileListBuilderType {
    addBlob(file: BlobFileSource): this;
    addBlobs(files: BlobFileSource[]): this;
    addFile(file: RemoteFileSource): Promise<this>;
    addFiles(files: RemoteFileSource[]): Promise<this>;
    addFileObject(file: File): this;
    addFileObjects(files: File[]): this;
    build(): FileList;
    buildFileArray(): File[];
}
interface LocalFileBuilderType {
    addBlob(file: BlobFileSource): this;
    addFile(file: LocalFileSource): this;
    addFileObject(file: File): this;
    build(): File;
}
interface RemoteFileBuilderType {
    addBlob(file: BlobFileSource): this;
    addFile(file: RemoteFileSource): Promise<this>;
    addFileObject(file: File): this;
    build(): File;
}
interface MergeFileListBuilderType {
    addFileObjects(files: Iterable<File>): this;
    build(): FileList;
    buildFileArray(): File[];
}

declare class LocalFileListBuilder implements LocalFileListBuilderType {
    private files;
    addBlob(blob: BlobFileSource): this;
    addBlobs(blobs: BlobFileSource[]): this;
    addFile(file: LocalFileSource): this;
    addFiles(files: LocalFileSource[]): this;
    addFileObject(file: File): this;
    addFileObjects(files: Iterable<File>): this;
    build(): FileList;
    buildFileArray(): File[];
}
declare class LocalFileBuilder implements LocalFileBuilderType {
    private file;
    constructor();
    addBlob(blob: BlobFileSource): this;
    addFile(file: LocalFileSource): this;
    addFileObject(file: File): this;
    build(): File;
}

declare class RemoteFileListBuilder implements RemoteFileListBuilderType {
    private files;
    addBlob(blob: BlobFileSource): this;
    addBlobs(blobs: BlobFileSource[]): this;
    addFile(file: RemoteFileSource): Promise<this>;
    addFiles(files: RemoteFileSource[]): Promise<this>;
    addFileObject(file: File): this;
    addFileObjects(files: Iterable<File>): this;
    build(): FileList;
    buildFileArray(): File[];
}
declare class RemoteFileBuilder implements RemoteFileBuilderType {
    private file;
    constructor();
    addBlob(blob: BlobFileSource): this;
    addFile(file: RemoteFileSource): Promise<this>;
    addFileObject(file: File): this;
    build(): File;
}

declare class MergeFileListBuilder implements MergeFileListBuilderType {
    private files;
    addFileObjects(files: Iterable<File>): this;
    build(): FileList;
    buildFileArray(): File[];
}

export { type BlobFileSource, type FileSourceBase, LocalFileBuilder, LocalFileListBuilder, type LocalFileSource, MergeFileListBuilder, RemoteFileBuilder, RemoteFileListBuilder, type RemoteFileSource };
