import { FILE_UPLOAD_ERRORS } from './constants';
export type FileUploadFileError = typeof FILE_UPLOAD_ERRORS.TOO_MANY_FILES | typeof FILE_UPLOAD_ERRORS.FILE_INVALID_TYPE | typeof FILE_UPLOAD_ERRORS.FILE_TOO_LARGE | typeof FILE_UPLOAD_ERRORS.FILE_TOO_SMALL | typeof FILE_UPLOAD_ERRORS.FILE_INVALID | typeof FILE_UPLOAD_ERRORS.FILE_EXISTS;
export interface RejectedFile {
    file: File;
    errors: FileUploadFileError[];
}
export interface FileAcceptDetails {
    files: File[];
}
export interface FileRejectDetails {
    files: RejectedFile[];
}
export interface FileChangeDetails {
    acceptedFiles: File[];
    rejectedFiles: RejectedFile[];
}
export interface UseFileUploadStateProps {
    /**
     * 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
     */
    onFileAccept?: (details: FileAcceptDetails) => void;
    /**
     * Callback when files are rejected
     */
    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
     */
    onFileChange?: (details: FileChangeDetails) => void;
    /**
     * Whether multiple files can be selected
     * @default true
     */
    multiple?: boolean;
    /**
     * Comma-separated list of accepted file types
     */
    accept?: string;
    /**
     * Maximum number of files that can be uploaded
     */
    maxFiles?: number;
    /**
     * Maximum file size in bytes
     */
    maxFileSize?: number;
    /**
     * Minimum file size in bytes
     */
    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.
     */
    locale?: string;
}
export interface UseFileUploadStateReturn {
    files: File[];
    rejectedFiles: RejectedFile[];
    addFiles: (files: File[]) => void;
    removeFile: (index: number) => void;
    removeRejectedFile: (index: number) => void;
    clearFiles: () => void;
    clearRejectedFiles: () => void;
    maxFilesReached: boolean;
}
/**
 * Hook that manages file upload state, validation, and file operations
 */
export declare function useFileUploadState({ defaultValue, value: controlledValue, onFileAccept, onFileReject, onFileChange, multiple, accept, maxFiles, maxFileSize, minFileSize, disabled, readOnly, locale, }: UseFileUploadStateProps): UseFileUploadStateReturn;
