/** * FileDropzone — drag-drop + file-picker primitive, dependency-free (HTML5 * DnD). The drag mechanics, the typed-rejection shape and the browser quirks * are ported from the react-dropzone reference study (blueprint M5): nested * dragenter/dragleave target counting, empty MIME type during drag (Chrome), * and the all-or-nothing maxFiles rule. * * Boundary: this component SELECTS and VALIDATES files. Uploading (network, * progress) belongs to the consumer — compose with `Progress` for that. * Directory drops are out of scope (entries without a real File are skipped). */ import type { HTMLAttributes, ReactNode } from "react"; import type { FileRejection, ValidateFilesOptions } from "./validate.js"; export { matchesAccept, validateFiles, type FileDropzoneError, type FileDropzoneErrorCode, type FileRejection, type ValidateFilesOptions, } from "./validate.js"; export type FileDropzoneState = "idle" | "drag-over" | "drag-reject" | "disabled"; export interface FileDropzoneProps extends Omit, "onDrop" | "children">, ValidateFilesOptions { /** Accessible name for the dropzone (aria-label). */ label: string; disabled?: boolean; onFilesAccepted?: (files: File[]) => void; onFilesRejected?: (rejections: FileRejection[]) => void; /** Custom instructions content; defaults to a drag-or-click hint. */ instructions?: ReactNode; } declare const FileDropzone: import("react").ForwardRefExoticComponent>; export { FileDropzone };