JS Module

Custom Select Y2Sel

Select customizado com busca em tempo real, multi-select com tags, teclado acessível e sincronização total com o <select> nativo.

1. Básico

Envolva o <select> nativo com um div y2select. O JS oculta o nativo, injeta a UI e mantém os dois sincronizados. A busca vem ativada por padrão - use y2select-search="false" para remover.

2. Multi-Select com Tags

Adicione multiple no <select>. Cada item selecionado vira uma tag com botão de remoção - clique no ?- para remover ou selecione o item novamente para desmarcar.

value: ["js", "react"]

3. Estados de Validação

Adicione .is-err ou .is-ok no wrapper para indicar o estado do campo. Normalmente aplicados via JS após validação.

// Aplicar estado via JS
const wrap = document.querySelector('[y2select]');
wrap.classList.add('is-err');  // ou is-ok
wrap.classList.remove('is-err', 'is-ok');

4. Evento em Tempo Real

yd:select:change é disparado no wrapper a cada seleção. O select nativo também recebe um change padrão - formulários funcionam normalmente.

Selecione um plano para ver o evento...
document.querySelector('[y2select]')
  .addEventListener('yd:select:change', e => {
    console.log(e.detail.value);  // array com os valores selecionados
    console.log(e.detail.label);  // label do primeiro selecionado
  });

// Select nativo também dispara 'change' normalmente
document.querySelector('[name="plano"]')
  .addEventListener('change', function () {
    console.log(this.value);
  });

Quick Reference

Atributo / Classe Elemento Descrição
y2select div (wrapper) Ativa o custom select
y2select-ph="..." select Texto placeholder quando nada está selecionado
y2select-search="false" select Remove o campo de busca do dropdown
multiple select Ativa multi-seleção com tags removíveis
selected option Pré-seleciona a opção - refletido automaticamente na UI
.is-err div (wrapper) Borda vermelha - estado de erro
.is-ok div (wrapper) Borda verde - estado válido
yd:select:change evento (wrapper) detail.value (array) e detail.label (texto do 1 selecionado)