import { DropzoneOptions, DropzoneState } from './file-dropzone.types';
/**
* Headless file dropzone. Wires a hidden file input to a clickable / drag-drop
* zone, validates files (size, accepted types, count, optional custom rule),
* keeps the accepted set and optionally renders a previews list. Reflects drag
* state via `data-state="dragging"`; no visual styling in JS.
*
* Markup:
* ```html
*
*
*
Drop files or click
*
*
* ```
*/
export declare class FileDropzone {
private readonly root;
private readonly input;
private readonly zone;
private readonly list;
private readonly errorEl;
private readonly multiple;
private readonly maxFiles;
private readonly maxSize;
private readonly acceptExt;
private readonly acceptMime;
private readonly validateFn?;
private readonly previews;
private disabled;
private accepted;
private errorTimer;
private cleanups;
constructor(root: HTMLElement, options?: DropzoneOptions);
private init;
private onInputChange;
private onDragOver;
private onDragLeave;
private onDrop;
private onListClick;
private reject;
private getErrorMessage;
private setError;
clearError(): void;
private matchesAccept;
/** Returns true if the file passes every rule; otherwise emits reject. */
private validate;
private render;
/** Validate and add files to the accepted set, emitting change/reject. */
addFiles(files: FileList | File[]): void;
removeAt(index: number): void;
/** Remove a file by reference. */
removeFile(file: File): void;
clear(): void;
openDialog(): void;
setDisabled(disabled: boolean): void;
private emitChange;
get files(): File[];
getState(): DropzoneState;
on(event: string, handler: (event: E) => void): () => void;
destroy(): void;
private formatSize;
}