import { Attachment } from "~/types";
export interface UseDragAndDropOptions {
    accept: string[];
    maxFiles: number;
    maxSize: number;
    onError?: (error: string) => void;
    onFileRemoved?: (id: string) => void;
    onFilesAdded?: (files: Attachment[]) => void;
}
export interface DragAndDropApi {
    addAttachments: (newAttachments: Attachment[]) => void;
    attachments: Attachment[];
    cleanupAbortController: (id: string) => void;
    clearAttachments: () => void;
    createAbortController: (id: string) => AbortController;
    getAbortController: (id: string) => AbortController | undefined;
    getFileById: (id: string) => File | undefined;
    handleFileInput: (e: React.ChangeEvent<HTMLInputElement>) => void;
    handlers: {
        onDragEnter: (e: React.DragEvent) => void;
        onDragLeave: (e: React.DragEvent) => void;
        onDragOver: (e: React.DragEvent) => void;
        onDrop: (e: React.DragEvent) => void;
        onPaste: (e: React.ClipboardEvent) => void;
    };
    isDragging: boolean;
    processFiles: (files: FileList | File[]) => Promise<void>;
    removeAttachment: (id: string) => void;
    setAttachmentError: (id: string, error: string) => void;
    setAttachmentUploading: (id: string) => void;
    updateAttachmentExtraData: (id: string, extraData: Record<string, unknown>) => void;
    updateAttachmentProgress: (id: string, progress: number) => void;
    updateAttachmentUrl: (id: string, url: string) => void;
}
export declare function useDragAndDrop(options: UseDragAndDropOptions): DragAndDropApi;
