Field
Composição padrão de rótulo, controle, descrição e erro para formulários
Field é um conjunto de componentes de composição que padroniza a estrutura de um campo de formulário: rótulo, controle, texto auxiliar e mensagem de erro. Use-o sempre que um controle (Input, Textarea, Select, Checkbox…) aparecer dentro de um formulário real.
Usaremos para contato da Uranus.
import {
Field,
FieldDescription,
FieldGroup,
FieldLabel,
Input,
} from '@uranus-workspace/design-system';
export default function FieldDefault() {
return (
<FieldGroup className="w-full max-w-md">
<Field>
<FieldLabel htmlFor="email">E-mail corporativo</FieldLabel>
<Input id="email" type="email" placeholder="voce@empresa.com.br" />
<FieldDescription>Usaremos para contato da Uranus.</FieldDescription>
</Field>
</FieldGroup>
);
}
Anatomia
- FieldGroup — contêiner vertical que controla o espaçamento entre vários
Fields. - Field — um campo individual. Aceita
orientation="vertical" | "horizontal" | "responsive". - FieldLabel — o rótulo do campo, equivalente a Label, mas com estilos extras para agrupar controles "card-like".
- FieldContent — wrapper opcional quando você precisa combinar controle + erro + descrição.
- FieldDescription — texto auxiliar secundário, abaixo do controle.
- FieldError — mensagem de erro vermelha com
role="alert". Aceitachildrenou um arrayerrors={[{ message }]}. - FieldSet + FieldLegend — para grupos semânticos (ex: um
RadioGroupinteiro). - FieldSeparator — linha divisória opcional entre campos ou seções.
Erro e descrição
Quando um campo falha na validação, marque o controle com aria-invalid="true" e adicione um FieldError dentro de um FieldContent. O FieldError já tem role="alert" e é anunciado por leitores de tela.
Informe o seu cargo na empresa.
import {
Field,
FieldContent,
FieldError,
FieldGroup,
FieldLabel,
Input,
} from '@uranus-workspace/design-system';
export default function FieldErrorExample() {
return (
<FieldGroup className="w-full max-w-md">
<Field>
<FieldLabel htmlFor="role">Cargo</FieldLabel>
<FieldContent>
<Input id="role" aria-invalid="true" defaultValue="" placeholder="CTO" />
<FieldError>Informe o seu cargo na empresa.</FieldError>
</FieldContent>
</Field>
</FieldGroup>
);
}
Uso
import {
Field,
FieldDescription,
FieldGroup,
FieldLabel,
Input,
} from '@uranus-workspace/design-system';
<FieldGroup>
<Field>
<FieldLabel htmlFor="email">Email</FieldLabel>
<Input id="email" type="email" />
<FieldDescription>Nunca compartilhamos com terceiros.</FieldDescription>
</Field>
</FieldGroup>Faça
- Use
FieldGroupcomo raiz do formulário — ele garante o ritmo vertical correto. - Combine
FieldLegend+FieldSetao redor de umRadioGroupou grupo deCheckboxes. - Coloque mensagens de erro dentro de
FieldError, nunca soltas em um<p>qualquer.
Não faça
- Não aninhe
Fields arbitrariamente — um campo, umField. - Não estilize o erro com cor apenas; o texto em si deve deixar claro o que precisa ser corrigido.
- Não esconda a descrição em um tooltip se ela for necessária para preencher o campo corretamente.
Acessibilidade
- Cada
Fieldreceberole="group", o que ajuda leitores de tela a navegar formulários longos. - O
FieldErrortemrole="alert", então mudanças de estado são anunciadas. - Associe sempre o
FieldLabelao controle viahtmlFor/id.