SWCore

Chip Componentes

Etiqueta pequena e arredondada para tags, filtros escolhidos e seleções — com um × opcional que tira ela da tela.

O que é

É a etiqueta "Frete grátis ×" que aparece em cima da lista de produtos quando você filtra, ou as tags "PHP", "Design" de um post. Você escreve <span sw-chip> com o texto. Para mudar a cor ou o jeito, acrescenta uma classe (class="sw-chip-pri"). Se colocar um <span class="sw-chip-x">×</span> dentro, clicar no × faz o chip encolher e sumir.

O visual é CSS. O × é JavaScript do SWCore: um único "ouvinte" na página inteira percebe o clique em qualquer .sw-chip-x, avisa com o evento sw:chip:remove, faz a animação de saída e tira o chip do HTML. Por isso funciona até em chip criado depois, por código. Diferente do Botão, as variações do Chip ainda são por classe, não por palavra dentro do atributo.

Quando usar

  • Filtros ativos numa loja ou busca ("Até R$ 500 ×", "Em estoque ×") — o × tira o filtro.
  • Tags / categorias de um post, projeto ou produto.
  • Escolhas da pessoa num cadastro ("Seus interesses: Viagem, Culinária").
  • Status curto numa tabela ("Pago", "Pendente") — para número/contador pequeno, prefira o Badge.

Comece aqui

  1. 1

    Coloque o SWCore na página: o CSS no <head> e o JavaScript no fim do <body> (o JS só é preciso se você usar o ×).

    <link rel="stylesheet" href="https://swcore.sanweb.com.br/dist/2.1.0/swcore.min.css">
    
    <!-- fim do body -->
    <script src="https://swcore.sanweb.com.br/dist/2.1.0/swcore.min.js"></script>
  2. 2

    Escreva o chip. Para cor, some uma classe.

    Design
    <span sw-chip class="sw-chip-pri">Design</span>
  3. 3

    Quer que dê para remover? Coloque o × com a classe sw-chip-x. Clique nele:

    Frete grátis ×
    <span sw-chip class="sw-chip-pri">
      Frete grátis <span class="sw-chip-x" role="button" aria-label="Remover filtro">&times;</span>
    </span>

Todas as variações

Cada quadro abaixo é o componente de verdade, rodando. O código embaixo é exatamente o que está no quadro: copie e cole.

1. Cores

Sem classe de cor, o chip fica neutro (fundo da superfície e borda fina). As cores deixam o fundo levemente tingido e o texto na cor.

Neutro
Neutro (sem classe) <span sw-chip>Neutro</span>
Design
sw-chip-pri — primária <span sw-chip class="sw-chip-pri">Design</span>
Marketing
sw-chip-sec — secundária <span sw-chip class="sw-chip-sec">Marketing</span>
Pago
sw-chip-suc — sucesso (verde) <span sw-chip class="sw-chip-suc">Pago</span>
Pendente
sw-chip-ale — alerta (amarelo) <span sw-chip class="sw-chip-ale">Pendente</span>
Cancelado
sw-chip-err — erro (vermelho) <span sw-chip class="sw-chip-err">Cancelado</span>

2. Estilo, tamanho e marcado

Classes que mudam o jeito do chip. Elas se somam: class="sw-chip-sel sw-chip-pp".

Contorno
sw-chip-out — só contorno, fundo transparente <span sw-chip class="sw-chip-out">Contorno</span>
Pago Atrasado
sw-chip-out + cor — contorno colorido <span sw-chip class="sw-chip-out sw-chip-suc">Pago</span> <span sw-chip class="sw-chip-out sw-chip-err">Atrasado</span>
Selecionado
sw-chip-sel — marcado (filtro ligado) <span sw-chip class="sw-chip-sel">Selecionado</span>
Pequeno
sw-chip-pp — pequeno <span sw-chip class="sw-chip-pp">Pequeno</span>
Entregue
sw-chip-pp + cor <span sw-chip class="sw-chip-pp sw-chip-suc">Entregue</span>
Marcado pequeno
sw-chip-sel + sw-chip-pp <span sw-chip class="sw-chip-sel sw-chip-pp">Marcado pequeno</span>

3. Removível (com ×)

Coloque <span class="sw-chip-x">&times;</span> no fim. Clique: o chip encolhe e some de verdade. (Recarregue a página para ver de novo.)

Promoção ×
Neutro com × <span sw-chip>Promoção <span class="sw-chip-x" role="button" aria-label="Remover">&times;</span></span>
PHP ×
Cor com × <span sw-chip class="sw-chip-pri"> PHP <span class="sw-chip-x" role="button" aria-label="Remover">&times;</span> </span>
Até R$ 500 ×
Marcado com × <span sw-chip class="sw-chip-sel"> Até R$ 500 <span class="sw-chip-x" role="button" aria-label="Remover">&times;</span> </span>
Atrasado ×
Pequeno com × <span sw-chip class="sw-chip-pp sw-chip-err"> Atrasado <span class="sw-chip-x" role="button" aria-label="Remover">&times;</span> </span>

4. Com foto ou ícone

Um avatar (sw-avt) ou uma <img> dentro do chip encolhe sozinho para caber. Ícone swi-* entra como texto.

AN Ana Nunes
Com avatar de iniciais <span sw-chip><span sw-avt="pp">AN</span> Ana Nunes</span>
BR Beatriz ×
Com avatar e × <span sw-chip class="sw-chip-pri"> <span sw-avt="pp suc">BR</span> Beatriz <span class="sw-chip-x" role="button" aria-label="Remover">&times;</span> </span>
Aprovado
Com ícone <span sw-chip class="sw-chip-suc"><i class="swi-check"></i> Aprovado</span>
São Paulo
Com ícone de lugar <span sw-chip><i class="swi-map-pin"></i> São Paulo</span>

Tabela de opções

PalavraO que fazExemplo
Base
sw-chipAtributo que transforma o elemento em chip. Use num <span> (ou <button> se for clicável).<span sw-chip>Tag</span>
Cor (classe)
(nenhuma)Neutro: fundo da superfície, borda fina.
sw-chip-priPrimária.class="sw-chip-pri"
sw-chip-secSecundária.class="sw-chip-sec"
sw-chip-sucVerde (sucesso).class="sw-chip-suc"
sw-chip-aleAmarelo (alerta).class="sw-chip-ale"
sw-chip-errVermelho (erro).class="sw-chip-err"
Estilo / tamanho / estado (classe)
sw-chip-outSó contorno, sem fundo. Com uma cor (sw-chip-out sw-chip-suc) o contorno e o texto ficam naquela cor.class="sw-chip-out"
sw-chip-selMarcado: fundo na cor primária, texto branco.class="sw-chip-sel"
sw-chip-ppPequeno.class="sw-chip-pp"
Partes de dentro
sw-chip-xClasse do ×. Clicar remove o chip (precisa do swcore.min.js).<span class="sw-chip-x">&times;</span>
[sw-avt] / <img>Foto ou iniciais no começo do chip; ficam com 2rem.<span sw-avt>AN</span>
Estado automático
is-leavingClasse que o JS coloca durante a saída (encolhe e some). Você não escreve.

Receitas prontas — usos reais

Situações que aparecem em quase todo site. Copie a que servir.

Loja: filtros ativos em cima da lista Ao vivo
Filtros: Até R$ 500 × Frete grátis × Em estoque ×
<div class="flx f-wr alc gap-2">
  <span class="t-mut t-pp">Filtros:</span>
  <span sw-chip class="sw-chip-sel sw-chip-pp" data-filtro="preco">
    Até R$ 500 <span class="sw-chip-x" role="button" aria-label="Remover filtro">&times;</span>
  </span>
  <span sw-chip class="sw-chip-sel sw-chip-pp" data-filtro="frete">
    Frete grátis <span class="sw-chip-x" role="button" aria-label="Remover filtro">&times;</span>
  </span>
</div>

<script>
  // o × só tira o chip da tela; aqui você refaz a busca sem aquele filtro
  document.addEventListener('sw:chip:remove', (e) => {
    const filtro = e.target.dataset.filtro;
    if (filtro) console.log('tirar o filtro', filtro); // ex.: atualizar a URL e recarregar a lista
  });
</script>
Blog: tags do post Ao vivo
<div class="flx f-wr gap-2">
  <a href="/tag/seo" sw-chip class="sw-chip-pri">SEO</a>
  <a href="/tag/wordpress" sw-chip class="sw-chip-pri">WordPress</a>
  <a href="/tag/loja-virtual" sw-chip class="sw-chip-pri">Loja virtual</a>
</div>
Cadastro: escolher interesses (clique para marcar) Ao vivo
<div class="flx f-wr gap-2" id="interesses">
  <button type="button" sw-chip class="sw-chip-out" aria-pressed="false">Viagem</button>
  <button type="button" sw-chip class="sw-chip-sel" aria-pressed="true">Culinária</button>
  <button type="button" sw-chip class="sw-chip-out" aria-pressed="false">Esportes</button>
</div>

<script>
  document.getElementById('interesses').addEventListener('click', (e) => {
    const chip = e.target.closest('[sw-chip]');
    if (!chip) return;
    const marcado = chip.classList.toggle('sw-chip-sel');   // liga/desliga
    chip.classList.toggle('sw-chip-out', !marcado);
    chip.setAttribute('aria-pressed', marcado);
  });
</script>
Saber o que foi removido Ao vivo
Tag A × Tag B × Tag C ×

Removidos: nenhum

<div class="flx f-wr gap-2" id="tags">
  <span sw-chip class="sw-chip-suc">Tag A <span class="sw-chip-x" role="button" aria-label="Remover">&times;</span></span>
  <span sw-chip class="sw-chip-suc">Tag B <span class="sw-chip-x" role="button" aria-label="Remover">&times;</span></span>
</div>

<script>
  document.getElementById('tags').addEventListener('sw:chip:remove', (e) => {
    const chip = e.target;                         // o próprio [sw-chip]
    console.log('removeu:', chip.textContent.replace('×', '').trim());
  });
</script>

Eventos

sw:chip:remove
Dispara no próprio chip, logo antes da animação de saída, quando alguém clica no ×. Sobe pela página (dá para ouvir no pai ou no document). event.target é o chip.

Precisa de quê

  • swcore.min.css — o visual.
  • swcore.min.js — só para o × funcionar.
  • swcore.compl.min.css — só se usar ícone swi-*.

Cuidados — erros comuns

  • Escrever sw-chip="pri" não funciona: no Chip a cor é por classe, class="sw-chip-pri".
  • O × tem que ter a classe sw-chip-x e estar dentro do chip. Um × solto ao lado não remove nada.
  • O × só tira da tela. Se o chip representa um filtro ou uma escolha salva, ouça o sw:chip:remove e atualize a busca/o servidor.
  • Coloque role="button" e aria-label no × para quem usa leitor de tela.
  • Chip clicável (que marca/desmarca) deve ser <button type="button">, não <span> — assim funciona no teclado.

O que ele não faz

  • Não tem cor inf nem tamanhos maiores que o padrão (só o pp, menor).
  • Não dá para impedir a remoção: o sw:chip:remove avisa, mas o chip sai de qualquer jeito.
  • O × é um <span>: não recebe foco pelo Tab nem responde ao Enter.