import * as React from "react";
/** A managed file entry for async upload workflows (e.g. presigned URL uploads) */
export interface ManagedFileEntry {
    /** Unique identifier for this file (e.g. temp attachment ID from backend) */
    id: string;
    /** Display file name */
    fileName: string;
    /** File size in bytes */
    fileSize: number;
    /** Upload status */
    status: "uploading" | "uploaded" | "error";
    /** Error message when status is "error" */
    error?: string;
}
export interface FileUploadProps {
    /** Currently selected file(s) — use for simple, synchronous file handling */
    value?: File | File[];
    /** Callback when files change — used with `value` for simple mode */
    onChange: (files: File | File[] | undefined) => void;
    /**
     * Managed file entries for async upload workflows.
     * When provided, the file list renders from these entries instead of `value`.
     * The dropzone still triggers `onChange` with new `File` objects so the consumer can upload them.
     */
    managedFiles?: ManagedFileEntry[];
    /** Callback to remove a managed file by its id. Required when `managedFiles` is provided. */
    onRemoveManagedFile?: (id: string) => void;
    /** Accepted MIME types (e.g., "image/*", ".pdf,.doc") */
    accept?: string;
    /** Maximum file size in bytes. Default: 10MB */
    maxSize?: number;
    /** Maximum number of files (only used when multiple=true). Default: 10 */
    maxFiles?: number;
    /** Allow multiple file selection. Default: false */
    multiple?: boolean;
    /** Primary label text. Default: "Upload Files" */
    label?: string;
    /** Description text below label. Default: "(Click Here or Drag and Drop)" */
    description?: string;
    /** Field label above the component */
    fieldLabel?: string;
    /** Whether the component is disabled */
    disabled?: boolean;
    /** Error message */
    error?: string;
    /** Additional className */
    className?: string;
    /** Custom icon element */
    icon?: React.ReactNode;
    /** Max height for the file list area (e.g., 200 or "200px"). When set, the file list scrolls independently. */
    maxListHeight?: number | string;
    /**
     * When true, files dropped anywhere in the window are routed to this component,
     * and the browser's default file-open behavior is suppressed. Use on screens/modals
     * where this is the only drop target. Default: false.
     */
    acceptWindowDrops?: boolean;
}
export declare function FileUpload({ value, onChange, managedFiles, onRemoveManagedFile, accept, maxSize, maxFiles, multiple, label, description, fieldLabel, disabled, error, className, icon, maxListHeight, acceptWindowDrops, }: FileUploadProps): import("react/jsx-runtime").JSX.Element;
//# sourceMappingURL=file-upload.d.ts.map