Pular para o conteúdo
// visualizar em
salvo em todas as páginas

Field

Campo que envolve um controle de formulário com rótulo, descrição e erro, liga tudo para as tecnologias assistivas e acompanha a validade. Vem com Input, Textarea, Label e Fieldset.

Feito com Base UIPadrão HTML label + aria-describedbyComponente clienteCódigo ↗
minimal · light · #3fa34d

Enviamos notas fiscais e links de acesso para cá.

invalid
disabled

Instalação

Configure o Camaleo uma vez (Instalação) e importe o que precisar.

import { Field, FieldLabel, FieldDescription, FieldError } from "@camaleo/react";
import { Input, Textarea, Label, Fieldset, FieldsetLegend } from "@camaleo/react";

Anatomia

Um Field é uma grade com até quatro partes. O rótulo aponta para o controle, e a descrição e o erro são lidos junto com ele.

rótuloinputdescriçãoerro
[data-slot="field"][data-slot="field-label"] · [data-slot="field-description"] · [data-slot="field-error"]controle: [data-slot="input"] · [data-slot="textarea"]

Exemplos

Cada exemplo é um arquivo real que você pode copiar. Todos usam o estilo, o modo e a cor escolhidos na barra acima.

minimal · light · #3fa34d

Como está no seu documento. Ele sai na nota fiscal.

0 / 160 caracteres

Textarea com contador

Digite. Uma contagem ao vivo no FieldDescription é lida com o campo, então a pessoa ouve o limite antes de chegar nele.

Obrigatório

Digite uma letra, apague e saia. O valueMissing espera o campo ser alterado ou o formulário ser enviado, então um formulário novo nunca abre em vermelho.

Digite o endereço completo, como ana.souza@empresa.com.br.

Erro vindo do servidor

Quando o erro vem da sua API, use invalid e renderize FieldError match. O input recebe aria-invalid e a mensagem fica ligada a ele.

Letras minúsculas, números, pontos e sublinhados.

Validação própria

Digite um espaço ou apague letras. O validate devolve a mensagem, e um FieldError vazio mostra ela enquanto a pessoa digita.

Só quem é dono do workspace pode mudar.

Desativado

O disabled no Field chega ao rótulo e ao controle. Diga o motivo na descrição, senão ninguém sabe quem pode mudar.

Contato de emergência

Agrupado com fieldset

Fieldset e FieldsetLegend dão nome ao grupo, então "Nome" é anunciado como parte de "Contato de emergência".

Rótulo fora de um field

Para checkbox ou switch, envolva com Label: a linha inteira fica clicável e dá nome ao controle.

Tipos de input

O type e o autoComplete certos abrem o teclado adequado no celular e deixam o navegador preencher o valor.

Em contexto

Campos vivem em formulários. São pedaços inteiros de interface para copiar, no estilo que você escolheu.

Crie sua conta

Grátis por 14 dias. Sem cartão.

Pelo menos 8 caracteres, com um número.

Formulário de cadastroCard · Field · Input · Checkbox · Button
Endereço de entrega
Endereço de entregaFieldset · Field · Input · NativeSelect

Perfil público

Aparece no seu perfil e ao lado dos seus comentários.

Configurações do perfilCard · Field · Input · Textarea · Button

Boas práticas

Enviamos notas fiscais e links de acesso para cá.

FaçaRótulo visível acima do input.

Ele fica no lugar enquanto a pessoa digita, e o placeholder fica livre para mostrar um exemplo.

EvitePlaceholder no lugar do rótulo.

Ele some na primeira tecla, e o contraste baixo dificulta a leitura.

Use pelo menos 8 caracteres, com um número.
FaçaDiga como corrigir.

O erro diz a regra, então a pessoa sabe o que digitar.

Entrada inválida.
EviteErro genérico.

"Entrada inválida." avisa que algo está errado, mas não o que mudar.

Props

O Field recebe as props da raiz de field do Base UI. Estas são as mais usadas:

PropriedadeTipoPadrãoDescrição
disabledbooleanfalseDesativa o rótulo e o controle.
namestring—Identifica o campo no envio do formulário. Tem prioridade sobre o name do controle.
validate(value, formValues) => string | string[] | null—Devolve a(s) mensagem(ns) de erro, ou nada quando o valor é válido. Pode ser assíncrona.
validationMode"onSubmit" | "onBlur" | "onChange"'onSubmit'Quando o validate e as regras nativas rodam.
validationDebounceTimenumber0Milissegundos de espera entre chamadas do validate no modo onChange.
invalidboolean—Marca o campo como inválido, para erros que vêm do servidor ou de uma biblioteca de formulários.
dirtyboolean—Controle esses estados a partir de uma biblioteca de formulários.
touchedboolean—Controle esses estados a partir de uma biblioteca de formulários.
Aceita também todas as props da primitiva por baixo e os atributos nativos.

O FieldError recebe match: true para mostrar sempre, uma chave de ValidityState como "valueMissing" para mostrar só nesse erro, ou nada para mostrar sempre que o campo estiver inválido. O Fieldset recebe disabled. Input e Textarea recebem os atributos de <input> e <textarea>; o Label, os de <label>.

Styling hooks

Mude o visual sem copiar o componente: use os atributos ou defina os tokens num elemento pai, num estilo ou no próprio campo.

Atributos

data-slot"field" · "field-label" · "field-description" · "field-error" · "input" · "textarea"
data-invalidpresente no campo e no controle quando inválido
data-validpresente depois de uma validação aprovada
data-disabledpresente quando desativado
data-touched · data-dirtypresente depois de focado e deixado · depois de alterado
data-filled · data-focusedpresente quando tem valor · enquanto focado

Tokens que ele lê

Cor

--cml-border-control--cml-danger--cml-fg--cml-fg-muted--cml-focus-ring

Forma e tamanho

--cml-font-size-field--cml-font-size-help--cml-font-size-label--cml-gap--cml-radius-control--cml-radius-field--cml-toolbar-btn-size

Tipografia e movimento

--cml-duration-fast--cml-ease-standard--cml-font-body--cml-font-display--cml-font-field--cml-font-label--cml-font-style-help--cml-font-weight-display--cml-font-weight-error--cml-font-weight-label--cml-letter-spacing-label--cml-text-transform-label

Só deste componente

--cml-corner-shape--cml-disabled-opacity--cml-field-bg--cml-field-border-sides--cml-field-border-width--cml-field-gap--cml-field-height--cml-field-padding--cml-field-shadow--cml-placeholder-style
/* formulário mais compacto, só neste diálogo */
.quick-add [data-slot="field"] {
  --cml-field-gap: 0.25rem;
}

Acessibilidade

TabLeva o foco ao controle. Clicar no rótulo também foca.
Shift + TabVolta o foco ao controle anterior.

Relacionados

Esta página foi útil? · Editar esta página no GitHub