import * as react_jsx_runtime from 'react/jsx-runtime';
import React__default from 'react';
import { DropzoneProps, FileError } from 'react-dropzone';

type FileErrorMessage = {
    file: File;
    message: string;
};
interface FileUploaderProps extends React__default.HTMLAttributes<HTMLDivElement> {
    /**
     * Valor atual do uploader.
     * @type File[]
     * @default undefined
     * @example value={files}
     */
    value?: File[];
    /**
     * Função chamada quando o valor muda.
     * @type (files: File[]) => void
     * @default undefined
     * @example onValueChange={(files) => setFiles(files)}
     */
    onValueChange?: (files: File[]) => void;
    /**
     * Função chamada ao realizar o upload dos arquivos.
     * @type (files: File[]) => Promise<void>
     * @default undefined
     * @example onUpload={(files) => uploadFiles(files)}
     */
    onUpload?: (files: File[]) => Promise<void>;
    /**
     * Progresso do upload de cada arquivo.
     * @type Record<string, number> | undefined
     * @default undefined
     * @example progresses={{ "file1.png": 50 }}
     */
    progresses?: Record<string, number>;
    /**
     * Tipos de arquivos aceitos pelo uploader.
     * @type { [key: string]: string[] }
     * @default
     * ```ts
     * { "image/*": [] }
     * ```
     * @example accept={["image/png", "image/jpeg"]}
     */
    accept?: DropzoneProps["accept"];
    /**
     * Tamanho máximo permitido para cada arquivo (em bytes).
     * @type number | undefined
     * @default 1024 * 1024 * 2 // 2MB
     * @example maxSize={1024 * 1024 * 2} // 2MB
     */
    maxSize?: DropzoneProps["maxSize"];
    /**
     * Quantidade máxima de arquivos permitidos.
     * @type number | undefined
     * @default 1
     * @example maxFileCount={4}
     */
    maxFileCount?: DropzoneProps["maxFiles"];
    /**
     * Permite selecionar múltiplos arquivos.
     * @type boolean
     * @default false
     * @example multiple
     */
    multiple?: boolean;
    /**
     * Desabilita o uploader.
     * @type boolean
     * @default false
     * @example disabled
     */
    disabled?: boolean;
    /**
     * Função para personalizar a mensagem de erro ou executar ações quando arquivos forem rejeitados.
     * Pode retornar uma string para exibição ou void para efeitos colaterais (ex: toast).
     * @type ((errors: readonly FileError[]) => string | void) | undefined
     * @default undefined
     * @example onGetErrorMessage={(errors) => "Arquivo inválido"}
     * @example onGetErrorMessage={(errors) => toast({ title: "Erro", variant: "destructive" })}
     */
    onGetErrorMessage?: (errors: readonly FileError[]) => string | void;
    /**
     * Função chamada quando arquivos válidos são selecionados.
     * Deve retornar os arquivos que serão usados no estado.
     * @type (acceptedFiles: File[]) => File[]
     */
    onValidFile: (acceptedFiles: File[]) => File[];
    /**
     * Título exibido no componente.
     * @type string
     */
    title: string;
    /**
     * Descrição opcional exibida abaixo do título.
     * @type string | undefined
     */
    description?: string;
    /**
     * Exibe visualização dos arquivos selecionados (quando aplicável).
     * @type boolean | undefined
     * @default false
     */
    previewFiles?: boolean;
    /**
     * Indica se o uploader está em estado de carregamento.
     * @type boolean | undefined
     * @default false
     */
    isLoading?: boolean;
    /**
     * Lista de erros de arquivo para exibição personalizada.
     * @type FileErrorMessage[]
     */
    fileErrors: FileErrorMessage[];
    /**
     * Função para atualizar a lista de erros de arquivo.
     * @type React.Dispatch<React.SetStateAction<FileErrorMessage[]>>
     */
    setFileErrors: React__default.Dispatch<React__default.SetStateAction<FileErrorMessage[]>>;
    /**
     * Tipo de arquivo exibido no texto de instrução (ex: "XML", "CSV").
     * @default undefined
     * @example fileType="XML"
     */
    fileType?: string;
}
declare function FileUploader(props: FileUploaderProps): react_jsx_runtime.JSX.Element;

export { FileUploader };
export type { FileErrorMessage };
