Label
Atom
Label nomeia o dado ou controle. Ele é parte do contrato de acessibilidade, não apenas texto pequeno.
Use Label para conectar um nome visível ao controle correspondente. Em formulários do Pulso, placeholder não substitui label.
Exemplos copiáveis
React
React
import * as React from "react"
type PulsoLabelProps = React.LabelHTMLAttributes<HTMLLabelElement> & {
required?: boolean
optional?: boolean
}
export function PulsoLabel({
children,
required,
optional,
className,
...props
}: PulsoLabelProps) {
return (
<label
className={[
"font-mono text-xs font-semibold uppercase tracking-[var(--tracking-kicker)] text-[var(--fg-muted)]",
className,
].filter(Boolean).join(" ")}
{...props}
>
{children}
{required ? <span className="text-[var(--risk-critical-text)]"> *</span> : null}
{optional ? <span className="ml-1 normal-case tracking-normal text-[var(--fg-subtle)]">opcional</span> : null}
</label>
)
}<PulsoLabel htmlFor="case-title" required>
Nome do caso
</PulsoLabel>
<input id="case-title" name="title" />Quando usar
- Campos de formulário.
- Controles com nome visível.
- Grupos quando cada controle precisa de rótulo próprio.
- Inputs que podem ter erro, descrição ou obrigatoriedade.
Quando não usar
- Como heading de seção.
- Como badge/status.
- Como placeholder visual dentro do input.
- Para texto auxiliar; use descrição do
Form Field.
Acessibilidade
htmlFordeve corresponder aoiddo controle.- Clique no label deve focar/alternar o controle.
- Obrigatoriedade deve ser indicada visualmente e semanticamente no campo.
- Label precisa continuar visível quando o campo tem valor.
Regras
- Todo campo editável precisa de label visível.
- Label deve ser curto, específico e orientado ao dado.
- Não use label para explicar consequência longa; use descrição.
- Não esconda label só para ganhar espaço em telas densas.
- Se o campo for assistido por IA, a origem aparece na descrição ou metadado, não no label.
Last updated on