Input
Componente de entrada para digitar conteúdo pelo teclado: o controle de formulário mais básico.
Use quando precisar de um campo de texto com rótulo fixo em cima, ícone à esquerda, estado e mensagem de validação, e participação em formulários nativos: o
<r-input>cobre entrada de texto, senha e números.
Início rápido
Uso básico
<r-input placeholder="Digite algo"></r-input>Referência da API
Propriedades
| Propriedade | Tipo | Padrão | Descrição |
|---|---|---|---|
label | string | '' | Legenda fixa desenhada acima do campo |
placeholder | string | '' | Texto de espaço reservado, repassado ao <input> nativo |
value | string | '' | Valor do campo; refletido como atributo e repassado ao formulário |
disabled | boolean | false | Se o campo está desabilitado |
type | string | '' | Tipo nativo repassado ao controle interno (text, password, number, …) |
icon | string | '' | Nome do ícone inicial dentro do campo (desenhado como r-icon) |
name | string | '' | Nome do campo quando ele participa de um formulário |
status | string | '' | Estado de validação: error, warning |
message | string | '' | Texto de apoio ou de validação desenhado abaixo do campo |
min | string | '' | Valor mínimo; repassado ao <input> interno quando type="number" |
max | string | '' | Valor máximo; repassado ao <input> interno quando type="number" |
step | string | '' | Passo do valor; repassado ao <input> interno quando type="number" |
required | boolean | false | Repassado ao <input> interno para que a validação nativa se aplique |
sheet | string | '' | CSS injetado no shadow root |
Rótulo label
Uma legenda fixa desenhada acima do campo: sempre visível, nunca se sobrepõe ao conteúdo vizinho e não desloca o layout ao receber foco (rótulos alinhados no topo também fazem o formulário ser preenchido mais rápido do que os embutidos ou flutuantes; veja a pesquisa com rastreamento ocular de Luke Wroblewski).
<r-input label="Nome de usuário"></r-input>Espaço reservado placeholder
Comporta-se igual ao atributo placeholder nativo.
<r-input placeholder="Digite o nome de usuário"></r-input>Valor value
<r-input value="1234"></r-input>Estado desabilitado disabled
<r-input label="Nome de usuário" disabled></r-input>Ícone icon
<r-input icon="user"></r-input>Tipos de entrada type
<r-input icon="lock" type="password" placeholder="Senha"></r-input>
<r-input type="number" placeholder="Número"></r-input>Estado status
Use status sempre junto de uma message, para que o estado seja comunicado pelo texto e não só pela cor.
<r-input status="error" label="Nome de usuário" message="Este campo é obrigatório"></r-input>
<r-input status="warning" label="Nome de usuário" message="Confira este valor"></r-input>Mensagem de apoio message
Desenha texto de apoio ou de validação abaixo do campo.
<r-input label="E-mail" message="Nunca vamos compartilhar seu e-mail"></r-input>Nome do campo name
<r-input name="username" label="Nome de usuário"></r-input>Eventos
Os dois eventos são despachados como CustomEvent levando o valor atual em detail.
| Evento | Quando dispara | detail |
|---|---|---|
input | A cada tecla (espelha o input nativo) | { value: string } |
change | Ao confirmar ou perder o foco (espelha o change nativo) | { value: string } |
Evento de digitação input
const input = document.createElement('r-input');
input.setAttribute('label', 'Nome de usuário');
input.addEventListener('input', (event) => {
console.log('Digitando:', event.detail.value);
});Evento de mudança change
const input = document.createElement('r-input');
input.setAttribute('label', 'Nome de usuário');
input.addEventListener('change', (event) => {
console.log('O valor mudou:', event.detail.value);
});Associação a formulários
O r-input é um elemento personalizado associado a formulários (static formAssociated = true). Ele anexa ElementInternals e repassa seu valor via setFormValue, então o campo é recolhido por new FormData(form) quando é descendente real de um <form> nativo; defina name para dar uma chave ao valor. Veja Formulários para o auxiliar serializeForm(), que transforma um envio em um objeto simples.
<form>
<r-input name="username" label="Nome de usuário"></r-input>
</form>Reinício: um form.reset() nativo (ou um <button type="reset">) restaura o valor que o campo tinha quando se conectou pela primeira vez, implementado por formResetCallback(), um dos ganchos de ciclo de vida que o navegador chama sozinho em um elemento personalizado associado a formulários.
Validação: definir required torna um campo vazio inválido via ElementInternals.setValidity(); form.checkValidity() / form.reportValidity() enxergam isso, e enviar mostra o balão de validação nativo do navegador ancorado no campo. Campos disabled nunca bloqueiam a validação, igual a um <input> nativo. O r-input também expõe os métodos e propriedades de sempre de um campo nativo: checkValidity(), reportValidity(), validity, validationMessage.
<form>
<r-input name="username" label="Nome de usuário" required></r-input>
<button type="submit">Enviar</button>
</form>Parts CSS
Expostos por ::part() para estilização externa.
| Part | Elemento |
|---|---|
input | O invólucro do campo |
content | O controle <input> nativo interno |
label | O rótulo fixo acima do campo (existe quando há label) |
message | O texto de apoio ou validação (existe quando há message) |
r-input::part(content) {
font-size: 16px;
}Estilos
O <r-input> expõe 61 propriedades personalizadas de CSS próprias, além dos tokens semânticos que lê do tema. Defina uma em qualquer lugar de onde ela seja herdada: :root, um contêiner ou o próprio elemento:
r-input {
--ran-input-color: var(--ran-color-text-secondary);
}Partes: content · input · label · message
A lista completa está em tokens de estilo; qual usar é assunto do design system.
Boas práticas
- Rótulos: acrescente um
labelcom sentido para que o campo tenha um nome acessível. - Espaços reservados: use
placeholdercomo dica de digitação, não como substituto do rótulo. - Estado e mensagem: use
statusjunto demessagepara que o estado não seja sinalizado só pela cor. - Ícones: acrescente um
iconpertinente para o campo ser reconhecido mais rápido. - Tipos: escolha o
typeadequado ao conteúdo (text,password,number, …). - Formulários: defina
nameao recolher o valor dentro de um formulário.