componentes / formulário
Field
Conecte label, campo, ajuda e erro com ids e atributos aria.
only to reply to you, no spam.
field-default.tsx
import { Field, FieldDescription, FieldError, FieldLabel } from "@/components/ui/field";
import { Input } from "@/components/ui/input";
export default function FieldDefault() {
return (
<Field className="w-full max-w-xs" validationMode="onBlur">
<FieldLabel>email</FieldLabel>
<Input placeholder="you@example.com" required type="email" />
<FieldDescription>only to reply to you, no spam.</FieldDescription>
<FieldError match="typeMismatch">that email is not valid.</FieldError>
</Field>
);
}Instalação
$ npx shadcn@latest add https://cd-ui.vercel.app/r/field.jsonprimeira vez? configure o components.json e o tema antes: veja instalação.
Uso
import { Field, FieldError, FieldLabel } from "@/components/ui/field"
import { Input } from "@/components/ui/input"
<Field name="email">
<FieldLabel>email</FieldLabel>
<Input type="email" />
<FieldError />
</Field>API
Field
Base UI · Field.RootAgrupa as partes. Dentro de um Form com schema, valida pelo name sem configurar nada.
| prop | tipo | padrão |
|---|---|---|
nameNome do campo. Liga o valor ao form e à chave do schema. | string | - |
validateValidação própria. Se passar, tem prioridade sobre o schema. | (value) => string | string[] | null | - |
validationModeQuando validar. | "onSubmit" | "onBlur" | "onChange" | herda do Form |
disabled · invalidEstados controlados de fora. | boolean | - |
classNameClasses extras, mescladas com | string | - |
FieldLabel
Base UI · Field.Label<label> ligado ao controle.
| prop | tipo | padrão |
|---|---|---|
classNameClasses extras, mescladas com | string | - |
FieldDescription
Base UI · Field.DescriptionTexto de ajuda, ligado por aria-describedby.
| prop | tipo | padrão |
|---|---|---|
classNameClasses extras, mescladas com | string | - |
FieldError
Base UI · Field.ErrorMensagem de erro. Sem match, mostra o que a validação devolver.
| prop | tipo | padrão |
|---|---|---|
matchMostra só para um tipo de erro (ex.: | keyof ValidityState | boolean | - |
classNameClasses extras, mescladas com | string | - |
Acessibilidade
- O erro entra em
aria-describedbydo controle e o campo recebearia-invalid. - O label é ligado por
for/idautomaticamente.