SWCore / Componentes / Material Input

Material Input Componentes

Campo com label flutuante, máscara própria e validação com mensagens customizadas.

O que é

Um input mais completo que o .sw-input simples — label some pra dentro do campo quando ele ganha foco/conteúdo, com validação e máscara embutidas.

Como funciona

Injeta a label, a dica e a mensagem de erro automaticamente ao redor do input. A validação roda por regras nomeadas (sw-matinp-req, -email etc.) checadas em ordem — a primeira que falhar define a mensagem mostrada.

Exemplos

Padrão — label flutuante (sublinhado) Ao vivo
<div class="fld-mat">
  <input sw-matinp sw-matinp-label="Nome completo" sw-matinp-req autocomplete="off" readonly onfocus="this.removeAttribute('readonly')">
</div>
fld-mat-out e fld-mat-fil Ao vivo
<div class="fld-mat fld-mat-out">
  <input sw-matinp sw-matinp-label="Contorno completo (fld-mat-out)" autocomplete="off" readonly onfocus="this.removeAttribute('readonly')">
</div>
<div class="fld-mat fld-mat-fil">
  <input sw-matinp sw-matinp-label="Fundo preenchido (fld-mat-fil)" autocomplete="off" readonly onfocus="this.removeAttribute('readonly')">
</div>
fld-mat-sta (label estática) e fld-mat-ico (com ícone) Ao vivo
<div class="fld-mat fld-mat-sta">
  <input sw-matinp sw-matinp-label="Label numa linha própria" autocomplete="off" readonly onfocus="this.removeAttribute('readonly')">
</div>
<div class="fld-mat fld-mat-ico">
  <i class="swi-mail"></i>
  <input sw-matinp sw-matinp-label="Com ícone à esquerda" autocomplete="off" readonly onfocus="this.removeAttribute('readonly')">
</div>
Com máscara e validação de e-mail Ao vivo
<div class="fld-mat">
  <input sw-matinp sw-matinp-label="Telefone" sw-matinp-mask="telefone" autocomplete="off" readonly onfocus="this.removeAttribute('readonly')">
</div>
<div class="fld-mat">
  <input sw-matinp sw-matinp-label="E-mail" sw-matinp-req sw-matinp-email sw-matinp-msg-email="Digite um e-mail válido" autocomplete="off" readonly onfocus="this.removeAttribute('readonly')">
</div>
Estados visuais Ao vivo
E-mail inválido.
Letras e números, sem espaços.
API JavaScript Ao vivo

→ resultado aqui

const inst = document.querySelector('#meuInput')._swMatinp;

inst.validate()           // → true/false — executa validação
inst.getValue()           // → string com o valor atual
inst.setValue('texto')    // → preenche e valida
inst.setError('msg')      // → exibe erro manual
inst.clearError()         // → limpa estado de erro
inst.reset()               // → limpa campo e estados
Eventos Ao vivo
const inp = document.querySelector('#email');

inp.addEventListener('sw:matinp:valid',   e => console.log('Válido:', e.detail.value));
inp.addEventListener('sw:matinp:invalid', e => console.log('Inválido:', e.detail.error));
inp.addEventListener('sw:matinp:change',  e => console.log('Mudou:', e.detail.value));

Atributos

sw-matinp-label
texto da label flutuante
sw-matinp-mask
telefone, cpf, cnpj, cep, data, hora ou cartao
sw-matinp-validate
"blur" (padrão), "input" ou "change" — quando validar
sw-matinp-req / -email / -url / -minlen / -maxlen / -min / -max / -match / -regex
regras de validação, cada uma com sw-matinp-msg-* pra mensagem customizada
sw-matinp-hint
texto de dica permanente abaixo do campo

Variantes

fld-mat-out
contorno completo em vez de sublinhado
fld-mat-fil
fundo preenchido
fld-mat-sta
label estática numa linha própria, não flutua
fld-mat-ico
espaço reservado pra ícone à esquerda

Eventos

sw:matinp:change
sw:matinp:valid
sw:matinp:invalid
{ error }

API (JavaScript)

el._swMatinp.validate()
roda a validação, retorna true/false
el._swMatinp.getValue()
valor atual do campo
el._swMatinp.setValue(v)
preenche e valida
el._swMatinp.setError(msg)
exibe erro manual
el._swMatinp.clearError()
limpa o estado de erro
el._swMatinp.reset()
limpa o campo e os estados
SW.Matinp.addRule(nome, fn)
registra uma regra de validação customizada

Requisitos

  • O input precisa estar dentro de um .fld-mat (ou o módulo usa o parentElement como wrapper).

Limitações — o que ele não faz

Nenhuma.