Envio de arquivos
Envio de arquivos — uma área para soltar arquivos com um input de arquivo de verdade atrás de um botão, mais uma lista com o progresso, o resultado ou o erro de cada arquivo. Ela entrega os arquivos; enviar é com o seu app.
Arraste arquivos ou escolha no computador
PDF, PNG ou JPG até 10 MB
Instalação
Configure o Camaleo uma vez (Instalação) e importe a área e a lista.
import { Dropzone, FileList, FileItem } from "@camaleo/react";Anatomia
O Dropzone é um grupo com nome e um botão que abre o seletor de arquivos. Cada FileItem de um FileList tem ícone, nome, barra de progresso ou linha de detalhes, e as suas ações.
Exemplos
Cada exemplo é um arquivo real que você pode copiar. Todos usam o estilo, o modo e a cor escolhidos na barra acima. Nada sai do seu navegador: os envios são simulados com timers.
Arraste arquivos ou escolha no computador
PDF, PNG ou JPG até 10 MB
Adicione fotos do produto
PNG ou JPG até 2 MB cada
Tipos e limite de tamanho
Solte um PDF ou uma foto grande. O accept e o maxSize separam os arquivos, o onFilesRejected diz o motivo de cada um, e uma linha de status anuncia o resultado.
Arraste arquivos ou escolha no computador
PDF, PNG ou JPG até 10 MB
- capa.pngEnviado · 1,2 MB
Progresso, cancelar e remover
Adicione um arquivo. Guarde o estado do envio você mesmo e passe para status, progress e meta; a barra leva o nome do arquivo.
- ata-conselho.docxPronto para enviar · 0,8 MB
- relatorio-3tri.pdf64% · 2,4 de 3,8 MB
- capa.pngEnviado · 1,2 MB
- tour-do-site.mov
Maior que 10 MB. Corte o vídeo ou compartilhe um link.
Todos os status
O status comanda a linha: idle antes do envio, uploading com barra, done com check, error com a mensagem.
- extrato-setembro.pdf
A conexão caiu em 48%. Seu arquivo continua aqui.
Tentar de novo após erro
Clique em tentar de novo. A linha com falha guarda o arquivo e oferece o próximo passo, então ninguém precisa buscar o arquivo na pasta outra vez.
Envie seu logotipo
SVG, PNG ou JPG até 5 MB
Uma imagem
Com multiple={false} só o primeiro arquivo é entregue, e escolher de novo substitui; a linha mostra nome, tipo e tamanho.
- contrato-locacao-assinado.pdfVerificando vírus…
Progresso desconhecido
Quando o servidor não consegue medir (antivírus, conversão), passe progress={null} e diga no meta o que está acontecendo.
Arraste arquivos ou escolha no computador
Armazenamento cheio: 15 GB de 15 GB usados. Apague arquivos antigos ou mude de plano.
Desativado, com motivo
O disabled ignora arquivos soltos e desativa o botão. Use a descrição para dizer o motivo e o que fazer.
Em contexto
Enviar arquivos é parte de uma tarefa. São pedaços inteiros de interface para copiar, no estilo que você escolheu.
Foto do perfil
Aparece ao lado dos seus comentários e no diretório do time.
Solte uma foto ou escolha
PNG ou JPG quadrado até 2 MB
Importar contatos
Envie um CSV exportado do seu CRM. Colunas: nome, e-mail, empresa.
Solte seu arquivo CSV
CSV até 20 MB, um contato por linha
Boas práticas
Arraste arquivos ou escolha
PDF, PNG ou JPG até 10 MB
A pessoa confere antes de arrastar, e nenhum arquivo é recusado de surpresa.
Solte os arquivos aqui
As regras existem do mesmo jeito; a pessoa só descobre quando um arquivo falha.
- tour-do-site.mov
Maior que 10 MB. Corte o vídeo ou compartilhe um link.
O erro diz o limite e a saída, bem no arquivo.
- tour-do-site.mov
Falha no envio.
"Falha no envio." faz a pessoa tentar o mesmo arquivo de novo.
Props
<input accept>: extensões, tipos MIME, image/*.accept e no maxSize.reason: "type" | "size".Estas são as props do Dropzone; os children aparecem entre a descrição e o botão. Uma recusa é { file, reason: "type" | "size" }. O FileList recebe os atributos de <ul>; dê um aria-label a ele.
O FileItem mostra um arquivo:
error.null é indeterminado.status="error".Outros atributos de <li> também são aceitos.
Styling hooks
Mude o visual sem copiar o componente: use os atributos ou defina os tokens num elemento pai, num estilo ou na própria área.
Atributos
Tokens que ele lê
Cor
Forma e tamanho
Tipografia e movimento
Só deste componente
Acessibilidade
- Arrastar é um atalho, não o único caminho: a área sempre tem um botão de verdade e um <input type="file"> nativo.
- A área é um grupo nomeado pelo título e descrito pela descrição, então os tipos aceitos são lidos junto.
- Cada barra de progresso leva o nome do arquivo. Dê o nome do arquivo aos botões também: "Remover capa.png", não "Remover".
- Erros são texto abaixo do arquivo, não só uma borda vermelha; anuncie o que entrou ou foi recusado numa linha com role="status".