UI

Field

Peças base de todo campo de formulário — rótulo, texto de ajuda, mensagem de erro e caixa de grupo.

Aparece no cabeçalho do site e nas notas fiscais.

Instalação

npx shadcn@latest add @lenstech/field

Você raramente instala o Field sozinho: ele é dependência de Input, Select, Checkbox e dos demais campos, e é instalado junto com eles.

Uso

import { FieldDescription, FieldError, Label } from "@/components/ui/field"
import { Input, TextField } from "@/components/ui/input"
<TextField name="empresa" isRequired>
  <Label>Nome da empresa</Label>
  <Input />
  <FieldDescription>Aparece no cabeçalho do site.</FieldDescription>
  <FieldError>Informe o nome da empresa.</FieldError>
</TextField>

Todos os campos da biblioteca aceitam os atalhos label, description e errorMessage, que montam essas peças por você. Use as peças do Field diretamente quando precisar de um layout diferente do padrão.

A associação é automática

Dentro de um campo do React Aria (TextField, Select, ComboBox…), o Label recebe o htmlFor certo, a FieldDescription vira aria-describedby e o FieldError só aparece quando o campo está inválido. Você não precisa criar ids.

Exemplos

Obrigatório

Com isRequired e um <FieldError /> vazio, o erro exibido é a mensagem nativa do navegador ao enviar o formulário. Passe um texto como filho para personalizar.

Usaremos para avaliar sua identidade visual.

Inválido

isInvalid força o estado de erro: o rótulo, a borda e a mensagem ficam na cor destructive.

CNPJ incompleto — confira os 14 dígitos.

Desabilitado

Gerado automaticamente — não pode ser alterado.

Caixa de grupo

FieldGroup desenha a borda e o anel de foco em volta de vários elementos — útil para prefixos, sufixos e botões dentro do campo.

Letras minúsculas, números e hífen.

Quando usar

  • Use para montar campos com layout próprio (asterisco no rótulo, sufixo, contador de caracteres).
  • Não use quando os atalhos label / description / errorMessage do campo já resolvem — é menos código.
  • Para busca, prefira SearchField, que já traz ícone e botão de limpar dentro de um FieldGroup.

API

Label

Aceita todas as props do Label do React Aria. Fica com a cor destructive quando o campo está inválido e esmaecido quando desabilitado.

FieldDescription

Aceita todas as props do Text do React Aria. Já define slot="description".

FieldError

Aceita todas as props do FieldError do React Aria.

Prop

Type

FieldGroup

Aceita todas as props do Group do React Aria. Reage a foco interno, inválido e desabilitado.

inputBase

String de classes Tailwind usada por Input, Textarea e DateInput. Reaproveite em campos próprios para manter o mesmo visual.

On this page