export declare enum AttachmentType {
    File = "file",
    Image = "image"
}
export declare enum UploadStatus {
    Completed = "completed",
    Failed = "failed",
    Pending = "pending",
    Uploading = "uploading"
}
export interface Attachment {
    error?: string;
    extraData?: Record<string, unknown>;
    id: string;
    metadata?: {
        height?: number;
        thumbnailUrl?: string;
        type?: string;
        width?: number;
    };
    mimeType: string;
    name: string;
    size: number;
    type: AttachmentType | "image" | "file";
    uploadProgress?: number;
    uploadStatus?: UploadStatus | "pending" | "uploading" | "completed" | "failed";
    url: string;
}
export interface UploadableAttachment extends Attachment {
    error?: string;
    uploadProgress?: number;
    uploadStatus: UploadStatus;
}
export interface ImageAttachment extends Attachment {
    dimensions?: {
        height: number;
        width: number;
    };
    thumbnailUrl?: string;
    type: AttachmentType.Image;
}
export interface UploadProgress {
    loaded: number;
    percentage: number;
    progress?: number;
    total: number;
}
export interface UploadError {
    code: string;
    details?: unknown;
    message: string;
}
export interface UploadResult extends Pick<Attachment, "extraData"> {
    id: string;
    metadata?: Record<string, unknown>;
    mimeType: string;
    name: string;
    size: number;
    uploadedAt: string;
    url: string;
}
export interface UploadOptions {
    metadata?: Record<string, unknown>;
    onProgress?: (progress: UploadProgress) => void;
    signal?: AbortSignal;
}
export type UploadFunction = (file: File, options?: UploadOptions) => Promise<UploadResult>;
export type UploadByUrlFunction = (url: string, options?: UploadOptions) => Promise<UploadResult>;
export interface BatchUploadOptions extends UploadOptions {
    concurrency?: number;
    onFileComplete?: (fileId: string, result: UploadResult | UploadError) => void;
    onFileProgress?: (fileId: string, progress: UploadProgress) => void;
}
export type BatchUploadFunction = (files: File[], options?: BatchUploadOptions) => Promise<Array<UploadResult | UploadError>>;
