SWCore
SWCore / Componentes / Progress

Progress Componentes

Mostra quanto de algo já foi feito: barra (envio de arquivo, perfil completo) ou anel com a porcentagem no meio, que pode contar de 0 até o valor quando aparece na tela.

O que é

Serve para a pessoa ver o andamento: "Enviando 72%", "Perfil 80% completo", "Meta do mês: 64%". São duas formas: a barra (sw-prg com uma sw-prg-bar dentro) e o anel (sw-prg-circ). Espessura, cor, listras, brilho e degradê se escolhem com palavras no atributo, como no botão.

O visual da barra e do anel é CSS. O valor (0 a 100) vai no atributo sw-prg-val="72" — na barra ele vira a largura do preenchimento, no anel vira o traço. Para atualizar, troque o atributo pelo JavaScript (setAttribute('sw-prg-val', 80)) e a barra anda suavemente sozinha. O atributo e a contagem animada do anel (sw-prg-animate) precisam do swcore.min.js. Sem JS, o jeito antigo continua valendo: style="width:72%" na barra e style="--sw-prg-val:72" no anel.

Quando usar

  • Envio de arquivo ou tarefa em andamento: barra, atualizada pelo JavaScript.
  • "Seu perfil está 80% completo": barra com rótulo (sw-prg-lbl).
  • Números de painel (meta do mês, ocupação, satisfação): anel.
  • Página de "números da empresa" que anima quando a pessoa rola até ela: anel com sw-prg-animate.
  • Para a barra fina de progresso de leitura no topo da página, use sw-progresso.

Comece aqui

  1. 1

    Coloque o SWCore na página (CSS no head, JS no fim do body — o JS lê o sw-prg-val).

    <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

    Barra: a caixa sw-prg e o preenchimento sw-prg-bar, com o valor em sw-prg-val.

    Enviando fotos72%
    <div sw-prg-lbl><span>Enviando fotos</span><span>72%</span></div>
    <div sw-prg><div sw-prg-bar sw-prg-val="72"></div></div>
  3. 3

    Anel: sw-prg-circ com o valor em sw-prg-val (0 a 100) e o texto do meio num <span>.

    72%
    <div sw-prg-circ sw-prg-val="72"><span>72%</span></div>

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. Barra — espessura

Sem palavra, a barra tem 8 px de altura.

pp — fina (4 px) <div sw-prg="pp"><div sw-prg-bar sw-prg-val="40"></div></div>
Padrão (8 px) <div sw-prg><div sw-prg-bar sw-prg-val="55"></div></div>
g — grossa (14 px) <div sw-prg="g"><div sw-prg-bar sw-prg-val="70"></div></div>

2. Barra — cor do preenchimento

A cor vai na barra de dentro (sw-prg-bar), não na caixa. Sem cor, usa o degradê da cor primária do seu site.

Padrão — cor primária <div sw-prg="g"><div sw-prg-bar sw-prg-val="65"></div></div>
suc — verde (concluído) <div sw-prg="g"><div sw-prg-bar="suc" sw-prg-val="100"></div></div>
ale — amarelo (atenção) <div sw-prg="g"><div sw-prg-bar="ale" sw-prg-val="45"></div></div>
err — vermelho (crítico) <div sw-prg="g"><div sw-prg-bar="err" sw-prg-val="20"></div></div>

3. Barra — listras

strp desenha listras; anim faz as listras andarem (bom para "processando…"). Vão na caixa sw-prg; a cor segue a da barra (sw-prg-bar="suc|ale|err").

strp — listrada <div sw-prg="g strp"><div sw-prg-bar sw-prg-val="60"></div></div>
strp anim — listras andando <div sw-prg="g strp anim"><div sw-prg-bar sw-prg-val="85"></div></div>
strp + sw-prg-bar="suc" — listrada verde <div sw-prg="g strp"><div sw-prg-bar="suc" sw-prg-val="70"></div></div>

4. Anel — estilos

O anel tem 8rem por padrão. Palavras de estilo em sw-prg-circ: grad (degradê da cor primária para a secundária), glow (brilho em volta), thin/thick (traço fino/grosso). Combinam entre si.

65%
Padrão <div sw-prg-circ sw-prg-val="65"><span>65%</span></div>
75%
grad — degradê <div sw-prg-circ="grad" sw-prg-val="75"><span>75%</span></div>
80%
glow — brilho <div sw-prg-circ="glow" sw-prg-val="80"><span>80%</span></div>
50%
thin — traço fino <div sw-prg-circ="thin" sw-prg-val="50"><span>50%</span></div>
90%
thick — traço grosso <div sw-prg-circ="thick" sw-prg-val="90"><span>90%</span></div>
88%
grad glow thick — combinados <div sw-prg-circ="grad glow thick" sw-prg-val="88"><span>88%</span></div>

5. Anel — cores

suc, ale e err trocam a cor do traço; com glow, o brilho acompanha a cor.

100%
suc — verde <div sw-prg-circ="suc" sw-prg-val="100"><span>100%</span></div>
45%
ale — amarelo <div sw-prg-circ="ale" sw-prg-val="45"><span>45%</span></div>
15%
err — vermelho <div sw-prg-circ="err" sw-prg-val="15"><span>15%</span></div>
92%
suc glow — verde com brilho <div sw-prg-circ="suc glow" sw-prg-val="92"><span>92%</span></div>

6. Anel — tamanho

O tamanho é a variável --sw-prg-sz (padrão 8rem), escrita junto com o valor. O texto do meio não muda de tamanho sozinho: aumente com uma classe de texto (ex.: t-g) no <span>.

60%
--sw-prg-sz:5rem — pequeno <div sw-prg-circ sw-prg-val="60" style="--sw-prg-sz:5rem"><span class="t-pp">60%</span></div>
60%
Padrão — 8rem <div sw-prg-circ sw-prg-val="60"><span>60%</span></div>
60%
--sw-prg-sz:12rem — grande <div sw-prg-circ="grad" sw-prg-val="60" style="--sw-prg-sz:12rem"><span class="t-gg">60%</span></div>

7. Anel que conta ao aparecer

Com sw-prg-animate, o anel começa vazio e, quando 40% dele aparece na tela, enche até o valor enquanto o número do meio sobe junto. Acontece uma vez só. sw-prg-duration muda o tempo da animação — número e traço juntos (padrão 1400 ms); sw-prg-suffix troca o "%" por outro texto (use "" para número puro). Role a página para ver.

0%
sw-prg-animate <div sw-prg-circ="grad glow" sw-prg-animate sw-prg-val="72"><span>0%</span></div>
0%
sw-prg-duration="3000" — mais lento <div sw-prg-circ="suc" sw-prg-animate sw-prg-duration="3000" sw-prg-val="95"><span>0%</span></div>
0 pts
sw-prg-suffix=" pts" — outro texto <div sw-prg-circ sw-prg-animate sw-prg-suffix=" pts" sw-prg-val="87"><span>0 pts</span></div>
0
sw-prg-suffix="" — número puro <div sw-prg-circ="thick" sw-prg-animate sw-prg-suffix="" sw-prg-val="48"><span>0</span></div>

Tabela de opções

PalavraO que fazExemplo
Barra — peças
sw-prgA caixa (trilho cinza). Ocupa a largura de onde estiver.<div sw-prg>
sw-prg-barO preenchimento, dentro da caixa.<div sw-prg-bar sw-prg-val="72"></div>
sw-prg-valO valor, de 0 a 100 (sem "%"), na barra ou no anel. Trocar depois atualiza sozinho. Precisa do JS; sem JS use style="width:72%" (barra) ou style="--sw-prg-val:72" (anel).sw-prg-val="72"
sw-prg-lblLinha de rótulo acima da barra: o 1º <span> fica à esquerda, o 2º à direita.<div sw-prg-lbl><span>Envio</span><span>72%</span></div>
Barra — palavras em sw-prg
(nenhuma)Altura 8 px.
ppFina, 4 px.sw-prg="pp"
gGrossa, 14 px.sw-prg="g"
strpListrada.sw-prg="strp"
animListras andando (use junto com strp).sw-prg="strp anim"
Barra — palavras em sw-prg-bar
(nenhuma)Degradê da cor primária.
sucVerde.sw-prg-bar="suc"
aleAmarelo.sw-prg-bar="ale"
errVermelho.sw-prg-bar="err"
Anel — valor e tamanho
sw-prg-valO valor, de 0 a 100 (sem "%").sw-prg-val="72"
--sw-prg-valO mesmo valor pelo style (jeito antigo, funciona sem JS).style="--sw-prg-val:72"
--sw-prg-szLargura e altura do anel. Padrão: 8rem.style="--sw-prg-sz:12rem"
Anel — palavras em sw-prg-circ
gradTraço em degradê (primária → secundária).sw-prg-circ="grad"
glowBrilho em volta, na cor do traço.sw-prg-circ="glow"
thinTraço fino.sw-prg-circ="thin"
thickTraço grosso.sw-prg-circ="thick"
suc / ale / errCor do traço: verde, amarelo, vermelho.sw-prg-circ="suc"
Anel que conta (precisa do JS)
sw-prg-animateComeça vazio e enche até o valor quando aparece na tela.<div sw-prg-circ sw-prg-animate sw-prg-val="72">
sw-prg-durationTempo da animação (traço e número juntos), em ms. Padrão: 1400.sw-prg-duration="3000"
sw-prg-suffixTexto depois do número. Padrão: "%".sw-prg-suffix=" pts"

Receitas prontas — usos reais

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

Envio de arquivo: atualizar a barra pelo JavaScript Ao vivo
proposta-comercial.pdf0%
<div sw-prg-lbl><span>proposta-comercial.pdf</span><span id="envio-txt">0%</span></div>
<div sw-prg="g"><div sw-prg-bar id="envio-bar" sw-prg-val="0"></div></div>

<script>
  const barra = document.getElementById('envio-bar');
  const texto = document.getElementById('envio-txt');

  function atualizar(pct) {            // chame com o progresso real (0 a 100)
    barra.setAttribute('sw-prg-val', pct);
    texto.textContent = pct + '%';
    if (pct === 100) {
      barra.setAttribute('sw-prg-bar', 'suc');   // fica verde no fim
      texto.textContent = 'Enviado';
    }
  }
</script>
Cadastro: "seu perfil está 80% completo" Ao vivo
Perfil da loja80%
Falta adicionar o logotipo
<div class="bg-sur bd r-m p-3 flx f-cl gap-2">
  <div sw-prg-lbl><span>Perfil da loja</span><span>80%</span></div>
  <div sw-prg><div sw-prg-bar="suc" sw-prg-val="80"></div></div>
  <a href="/perfil/logo" sw-btn="ghost p">Falta adicionar o logotipo</a>
</div>
Painel: metas do mês em anéis que contam Ao vivo
0%
Vendas
0%
Satisfação
0%
Novos clientes
<div class="flx gap-6 f-wr j-ct t-ct">
  <div class="flx f-cl alc gap-2"><div sw-prg-circ="grad glow" sw-prg-animate sw-prg-val="64"><span>0%</span></div><span class="t-mut">Vendas</span></div>
  <div class="flx f-cl alc gap-2"><div sw-prg-circ="suc" sw-prg-animate sw-prg-val="91"><span>0%</span></div><span class="t-mut">Satisfação</span></div>
  <div class="flx f-cl alc gap-2"><div sw-prg-circ="ale" sw-prg-animate sw-prg-val="38"><span>0%</span></div><span class="t-mut">Novos clientes</span></div>
</div>
Etapas de compra (passo 2 de 4) Ao vivo
Etapa 2 de 4 — Entrega50%
<div sw-prg-lbl><span>Etapa 2 de 4 — Entrega</span><span>50%</span></div>
<div sw-prg="pp"><div sw-prg-bar sw-prg-val="50"></div></div>

API (JavaScript)

el.setAttribute("sw-prg-val", 72)
Atualiza a barra ou o anel. No anel, o número do <span> é trocado junto.
el.style.width = "72%"
Jeito antigo, sem JS: atualiza a barra (no [sw-prg-bar]).
el.style.setProperty("--sw-prg-val", 72)
Jeito antigo, sem JS: atualiza o anel. O texto do <span> você troca junto.
SW.Progress.initAll(raiz)
Liga o sw-prg-val e a contagem dos anéis sw-prg-animate dentro de raiz. Normalmente não precisa: o SWCore liga sozinho.

Precisa de quê

  • swcore.min.css — barra e anel.
  • swcore.min.js — para sw-prg-val e sw-prg-animate.

Cuidados — erros comuns

  • Colocar o valor na palavra do atributo (sw-prg="72") não funciona: o valor tem atributo próprio, sw-prg-val="72", no sw-prg-bar ou no sw-prg-circ.
  • Escrever --sw-prg-val:72%: o anel some. É número puro, sem "%".
  • Pôr a cor na caixa (sw-prg="suc"): não pinta. A cor vai na barra de dentro: sw-prg-bar="suc".
  • Barra dentro de uma linha flx sem largura: ela encolhe até sumir. Dê largura ao pai (ex.: w-fl ou f-1).
  • Usar sw-prg-animate num anel que você atualiza pelo JavaScript: a contagem é feita para rodar uma vez, na entrada. Para valores que mudam, deixe sem sw-prg-animate.

O que ele não faz

  • Não acompanha nada sozinho: quem diz o progresso é você, atualizando o sw-prg-val.
  • O texto do meio do anel não é gerado na primeira vez: sem sw-prg-animate, escreva você o número no <span> (depois, trocar o sw-prg-val atualiza o número).
  • Não tem modo "sem valor definido" (barra correndo sem parar para tempo desconhecido). O mais perto é sw-prg="strp anim" com a barra em 100%.