import * as React from "react"; export type FileUploadRejectReason = "max-files" | "max-size" | "type"; export type FileUploadItemStatus = "idle" | "uploading" | "success" | "error"; export type FileUploadRejectedFile = { file: File; reason: FileUploadRejectReason; message: string; }; export type FileUploadRejectionMessageContext = { file: File; reason: FileUploadRejectReason; maxFiles?: number; maxSize?: number; accept?: string; }; export type FileUploadRejectionMessages = Partial string)>>; export type FileUploadRenderFileState = { file: File; index: number; progress?: number; status: FileUploadItemStatus; remove: () => void; retry?: () => void; removeLabel?: string; }; export type FileUploadRenderRejectedFileState = { rejectedFile: FileUploadRejectedFile; index: number; }; type NativeFileInputProps = Omit, "type" | "value" | "onChange" | "className" | "children" | "onDragEnter" | "onDragLeave" | "onDragOver" | "onDrop">; export type FileUploadProps = NativeFileInputProps & { files?: File[]; onFilesChange?: (files: File[]) => void; rejectedFiles?: FileUploadRejectedFile[]; onRejectedFilesChange?: (files: FileUploadRejectedFile[]) => void; onDragEnter?: React.DragEventHandler; onDragLeave?: React.DragEventHandler; onDragOver?: React.DragEventHandler; onDrop?: React.DragEventHandler; buttonLabel?: React.ReactNode; dropzoneLabel?: React.ReactNode; dropzoneDescription?: React.ReactNode; dragActiveLabel?: React.ReactNode; helperText?: React.ReactNode; clearLabel?: React.ReactNode; removeLabel?: string; dropzoneAriaLabel?: string; rejectionMessages?: FileUploadRejectionMessages; maxFiles?: number; maxSize?: number; appendFiles?: boolean; showFileList?: boolean; showClearButton?: boolean; loading?: boolean; progress?: number | Record; status?: FileUploadItemStatus | Record; validateFile?: (file: File) => string | null | Promise; onRetryFile?: (file: File, index: number) => void; fileTriggerLabel?: string; renderFile?: (state: FileUploadRenderFileState) => React.ReactNode; renderRejectedFile?: (state: FileUploadRenderRejectedFileState) => React.ReactNode; renderActions?: (state: { openFileDialog: () => void; clearFiles: () => void; files: File[]; }) => React.ReactNode; className?: string; inputClassName?: string; dropzoneClassName?: string; fileListClassName?: string; fileItemClassName?: string; rejectedListClassName?: string; }; declare function formatBytes(bytes: number): string; declare function fileMatchesAccept(file: File, accept?: string): boolean; declare function getFileKey(file: File): string; declare function FileUpload({ files, onFilesChange, rejectedFiles, onRejectedFilesChange, buttonLabel, dropzoneLabel, dropzoneDescription, dragActiveLabel, helperText, clearLabel, removeLabel, dropzoneAriaLabel, rejectionMessages, maxFiles, maxSize, appendFiles, showFileList, showClearButton, loading, progress, status, validateFile, onRetryFile, fileTriggerLabel, renderFile, renderRejectedFile, renderActions, className, inputClassName, dropzoneClassName, fileListClassName, fileItemClassName, rejectedListClassName, accept, multiple, disabled, onDragEnter, onDragLeave, onDragOver, onDrop, ...props }: FileUploadProps): React.JSX.Element; export { FileUpload, fileMatchesAccept, formatBytes, getFileKey };