Label
Rótulo de campo de formulário sobre o primitivo Label do Radix, com associação nativa a inputs e textareas.
Instalação
Recebe correções por update de versão. O caminho recomendado.
npm i @trdr/ui
import { Label } from "@trdr/ui/label"Uso
import { Label } from "@trdr/ui/label"
export function Exemplo() {
return <Label />
}Props
LabelPropsestende React.ComponentPropsWithoutRef<typeof LabelPrimitive.Root>| Prop | Tipo | Descrição |
|---|---|---|
| disabled? | boolean | Reflete visualmente o estado desabilitado do campo associado. O Label do Radix nao inspeciona o campo sozinho (nem sempre e um irmao direto no DOM), entao quem compoe o formulario informa. |
| required? | boolean | Mostra o indicador de campo obrigatorio ao lado do texto. |
Label
Rótulo de campo de formulário. Não existia como componente próprio no Hub legado: o TextInput
antigo não vinha com um label embutido, então esta é uma peça nova, construída sobre o primitivo
Label do Radix (radix-ui).
Quando usar
- Sempre que um
inputoutextareaaparecer em um formulário. Rótulo não é decoração, é a forma primária de dar nome acessível a um campo. - Associe pelo par
htmlFor(nolabel) eid(no campo). É isso que faz o clique no texto focar o campo e o leitor de tela anunciar o nome certo.
Quando não usar
- Como substituto de
aria-labelem campos sem rótulo visível (busca compacta, ícone sozinho): nesses casos usearia-labeldireto no campo, semlabelvisual. - Sozinho, sem nenhum campo associado: um
labelsemhtmlFornão associa a nada e vira só um texto com a fonte errada para o que provavelmente deveria ser umtext-b3comum.
Anatomia
<label data-slot="label">
texto do rotulo
<span data-slot="label-required"> opcional, so quando required e true
</label>Props além do primitivo Radix
required: mostra um indicador visual (*) ao lado do texto. O indicador éaria-hidden: a obrigatoriedade real do campo é comunicada pelo atributorequirednoinput/textarea, não pelo asterisco, que é só reforço visual.disabled: aplica a cor de texto desabilitada no próprio rótulo. OLabeldo Radix não inspeciona o campo associado sozinho (o campo pode nem ser irmão direto no DOM), então quem compõe o formulário precisa informar esse estado explicitamente, sincronizado com odisableddo campo.
Acessibilidade
- A associação por
htmlFor/idé a peça central deste componente. Sem ela, olabelé só texto estilizado e o campo perde o nome acessível. - O indicador de obrigatório é puramente visual (
aria-hidden="true"): a semântica de obrigatoriedade vem do atributo HTMLrequiredno campo, que é o que leitores de tela e validação de formulário realmente usam. - Estilo:
text-l3(14px/600) emtext-content-secondary, o padrão de rótulo do design system.
Composição futura
O componente field, que junta label, campo, descrição e mensagem de erro em um bloco só, é de
outra etapa do projeto e não foi construído aqui. O label já expõe o que ele vai precisar: aceita
qualquer prop do Label.Root do Radix (incluindo htmlFor), mais required e disabled, o
suficiente para o field compor por cima sem precisar de mudança nesta API.
Slots e tokens
Todo elemento renderizado carrega um data-slot para estilizar partes internas sem depender de classe da biblioteca. Os tokens listados são extraídos do código fonte.
[data-slot="label"][data-slot="label-required"]4 tokens usados
text-content-disabledtext-content-errortext-content-secondarytext-l3