import { ReactNode, Ref } from 'react';
import { FileAcceptDetails, FileChangeDetails, FileRejectDetails, FileUploadFileError, RejectedFile } from './useFileUploadState';
export type { FileAcceptDetails, FileChangeDetails, FileRejectDetails, FileUploadFileError, RejectedFile, };
export interface FileUploadProps {
    /**
     * Change the default rendered element for the one passed as a child, merging their props and behavior.
     */
    asChild?: boolean;
    ref?: Ref<HTMLDivElement>;
    children: ReactNode;
    className?: string;
    /**
     * Initial files to display when the component mounts (uncontrolled mode)
     */
    defaultValue?: File[];
    /**
     * Controlled files value (controlled mode)
     * When provided, the component becomes controlled
     */
    value?: File[];
    /**
     * Callback when files are accepted
     * @param details - Details about the accepted files
     */
    onFileAccept?: (details: FileAcceptDetails) => void;
    /**
     * Callback when files are rejected
     * @param details - Details about the rejected files and their errors
     */
    onFileReject?: (details: FileRejectDetails) => void;
    /**
     * Callback when files change (both accepted and rejected)
     * For controlled mode, use this to update the value prop by extracting details.acceptedFiles
     * @param details - Details about both accepted and rejected files
     */
    onFileChange?: (details: FileChangeDetails) => void;
    /**
     * Whether multiple files can be selected
     * @default true
     */
    multiple?: boolean;
    /**
     * Comma-separated list of accepted file types
     * Supports MIME types (e.g., "image/*", "image/png", "application/pdf")
     * and file extensions (e.g., ".pdf", ".doc", ".jpg")
     * @example "image/*"
     * @example ".pdf,.doc"
     * @example "image/png,image/jpeg,.pdf"
     */
    accept?: string;
    /**
     * Maximum number of files that can be uploaded
     * Files beyond this limit will be rejected
     */
    maxFiles?: number;
    /**
     * Maximum file size in bytes
     * Files larger than this will be rejected
     */
    maxFileSize?: number;
    /**
     * Minimum file size in bytes
     * Files smaller than this will be rejected
     */
    minFileSize?: number;
    /**
     * When `true`, prevents the user from interacting with the file upload
     */
    disabled?: boolean;
    /**
     * When `true`, sets the file upload to read-only mode
     */
    readOnly?: boolean;
    /**
     * The [BCP47](https://www.ietf.org/rfc/bcp/bcp47.txt) language code for the locale.
     * Used for formatting file sizes and error messages.
     * @default Browser locale or 'en' if not available
     */
    locale?: string;
}
export declare const FileUploadContext: import('react').Context<{
    inputRef: React.RefObject<HTMLInputElement | null>;
    files: File[];
    rejectedFiles: RejectedFile[];
    addFiles: (files: File[]) => void;
    removeFile: (index: number) => void;
    removeRejectedFile: (index: number) => void;
    clearFiles: () => void;
    clearRejectedFiles: () => void;
    triggerRef: React.RefObject<HTMLElement | null>;
    dropzoneRef: React.RefObject<HTMLElement | null>;
    deleteButtonRefs: React.MutableRefObject<HTMLButtonElement[]>;
    rejectedFileDeleteButtonRefs: React.MutableRefObject<HTMLButtonElement[]>;
    multiple: boolean;
    maxFiles?: number;
    maxFilesReached: boolean;
    disabled: boolean;
    readOnly: boolean;
    locale: string;
    description?: string;
    isInvalid?: boolean;
    isRequired?: boolean;
} | null>;
export declare const FileUpload: {
    ({ asChild: _asChild, children, defaultValue, value: controlledValue, onFileAccept, onFileReject, onFileChange, multiple, accept, maxFiles, maxFileSize, minFileSize, disabled: disabledProp, readOnly: readOnlyProp, locale, }: FileUploadProps): import("react/jsx-runtime").JSX.Element;
    displayName: string;
};
export declare const useFileUploadContext: () => {
    inputRef: React.RefObject<HTMLInputElement | null>;
    files: File[];
    rejectedFiles: RejectedFile[];
    addFiles: (files: File[]) => void;
    removeFile: (index: number) => void;
    removeRejectedFile: (index: number) => void;
    clearFiles: () => void;
    clearRejectedFiles: () => void;
    triggerRef: React.RefObject<HTMLElement | null>;
    dropzoneRef: React.RefObject<HTMLElement | null>;
    deleteButtonRefs: React.MutableRefObject<HTMLButtonElement[]>;
    rejectedFileDeleteButtonRefs: React.MutableRefObject<HTMLButtonElement[]>;
    multiple: boolean;
    maxFiles?: number;
    maxFilesReached: boolean;
    disabled: boolean;
    readOnly: boolean;
    locale: string;
    description?: string;
    isInvalid?: boolean;
    isRequired?: boolean;
};
