FileDropzone e FileRow

Formulário

Área para arrastar e soltar arquivos, que também abre o seletor por clique ou teclado, e a linha de cada arquivo enviado com baixar e remover.

Substitui no Brain:fp-dropzonefp-file-rowFilesPanelAnexosDoComunicado

Enviar e listar arquivos

Arraste arquivos aqui ou clique para enviar
PDF, XLSX, DOCX, PNG ou JPG · até 20 MB por arquivo
Proposta comercial · 2026-07.pdf
412 KB · enviado hoje
"use client";

import { FileDropzone, FileRow, toast } from "@paytime/ui";
import { useState } from "react";

const KB = 1024;

export default function Example() {
  const [files, setFiles] = useState([{ name: "Proposta comercial · 2026-07.pdf", size: 412 * KB }]);
  return (
    <div className="flex max-w-xl flex-col gap-4">
      <FileDropzone
        hint="PDF, XLSX, DOCX, PNG ou JPG · até 20 MB por arquivo"
        accept=".pdf,.xlsx,.docx,image/png,image/jpeg"
        onFiles={(picked) => {
          setFiles((current) => [...current, ...picked.map((file) => ({ name: file.name, size: file.size }))]);
          toast.success(picked.length === 1 ? "Arquivo enviado" : `${picked.length} arquivos enviados`);
        }}
      />
      <div>
        {files.map((file) => (
          <FileRow
            key={file.name}
            name={file.name}
            detail={`${Math.max(1, Math.round(file.size / KB))} KB · enviado hoje`}
            onDownload={() => toast("Baixando…")}
            onRemove={() => setFiles((current) => current.filter((item) => item.name !== file.name))}
          />
        ))}
      </div>
    </div>
  );
}