Progress
Em andamentoBarra de progresso de uma tarefa ou etapa — preenchida até o valor, com rótulo e porcentagem opcionais —, em três alturas e cinco cores. É um role="progressbar" com valor mínimo, máximo e atual; sem value, é indeterminada, para espera sem fim conhecido (E62).
- Função
- Estado e aviso
- Também chamado de
- barra de progresso, progresso, andamento
- Mora em
- app/components/atoms/Progress.tsx
- Última mudança
- 2026-09-29
Prévia
A peça ao vivo, vinda da ficha, na largura escolhida. Em larguras fixas, ela roda num quadro do tamanho de uma tela de verdade.
Na largura da página: 0px
Variantes na ficha
Lidas da ficha no build, na ordem do palco. Cada uma abre sozinha, sem o styleguide em volta — é o endereço que o palco carrega.
Quando usar
Para mostrar quanto de uma coisa com fim conhecido já foi feito: etapas da inscrição, carga horária cumprida, vagas preenchidas.
Faça
- Dê um
label: é o nome da barra para o leitor ("Carga horária cumprida"). - Use
showValuequando o número importa. - Escolha a cor pelo significado:
warningpara prazo perto do fim,successpara concluído. - Diga de quê é o progresso: "Carga horária concluída", não "Progresso". Na determinada, a porcentagem; na indeterminada, o gerúndio com reticências: "Enviando o comprovante…" (E62).
- Use
minquando a faixa não começa em zero: 70 de 20 a 120 é 50%.
Evite
- Barra sem
labelnemaria-label: o leitor anuncia "barra de progresso" sem dizer do quê. - Valor fora da faixa esperando que apareça: o componente prende entre 0 e
max.
Quando não usar. Para quanto da página já foi lido, use o ScrollProgress. Para um valor que a pessoa escolhe, o Slider. Para a espera de um clique ("Enviando…" no próprio botão), o isLoading do Button.
Anatomia
As partes, na ordem em que o olho — e o teclado — passam.
- Rótulo — O `label` à esquerda, em `text-sm`.
- Valor — Porcentagem à direita, com `showValue`.
- Trilha — Borda `--border-interactive` sobre `--card`, cantos redondos.
- Preenchimento — Na cor da variante, até a porcentagem.
Estados
Os estados que a peça tem no código, e o que muda em cada um.
| Estado | O que muda |
|---|---|
| Tamanho | sm 6px, md 10px (padrão), lg 16px de altura. |
| Cor | primary (padrão), info, success, warning ou destructive no preenchimento. |
| Mudança de valor | O preenchimento anima a largura em 500ms. |
| Indeterminado | Sem value: um trecho de 40% corre pela trilha em 1,4s, sem porcentagem. Com movimento reduzido, não corre — a trilha fica cheia e esmaecida, para não parecer parada em 40% (E62). |
Comportamento
| Situação | O que acontece |
|---|---|
| Valor abaixo de `min` ou acima de `max` | É preso entre min (padrão 0) e max. |
| Sem `value` | Indeterminada: sem aria-valuenow, com aria-busy="true", e o showValue não aparece — conferido no teste da ficha. |
| Porcentagem | Arredondada para inteiro (Math.round). |
Relacionados
Como usar no código
A importação e o menor uso, lidos do arquivo. O … marca as props obrigatórias.
import { Progress } from '@/app/components/atoms/Progress';
<Progress>…</Progress>Propriedades
Lidas do código da peça no build — não escritas à mão.
| Prop | Tipo | Padrão | Obrigatória | Descrição |
|---|---|---|---|---|
size | 'sm' | 'md' | 'lg' | 'md' | não | Variante do cva. |
variant | 'primary' | 'info' | 'success' | 'warning' | 'destructive' | 'primary' | não | Variante do cva. |
value | number | — | não | Sem value, a barra é indeterminada (E62): para espera sem fim conhecido — envio de arquivo, processamento da matrícula. Aí o rótulo diz o que acontece, no gerúndio: "Enviando o comprovante…". |
min | number | 0 | não | Início da faixa (E62). Padrão 0. |
max | number | 100 | não | — |
label | string | — | não | — |
showValue | boolean | — | não | A porcentagem ao lado do rótulo. Não aparece na indeterminada. |
Aceita também: React.HTMLAttributes<HTMLDivElement>.
Medidas
| Parte | Valor | Classe |
|---|---|---|
| Altura `sm` | 6px | h-1.5 |
| Altura `md` | 10px | h-2.5 |
| Altura `lg` | 16px | h-4 |
Tokens de cor
Os tokens semânticos que o código da peça usa, com o valor de hoje em app/globals.css.
| Token | Valor | Usado como |
|---|---|---|
--border | #E5E5E5 | bg-border |
--border-interactive | #8C8C8C | border-border-interactive |
--card | #FFFFFF | bg-card |
--destructive | #BA0517 | bg-destructive |
--foreground | #1A1A1A | text-ink |
--info | #1D345E | bg-info |
--muted-foreground | #595959 | text-muted-foreground |
--primary | #D42B2B | bg-primary |
--success | #2E844A | bg-success |
--warning | #DD7A01 | bg-warning |
Leitor de tela
O que é anunciado, e por quê.
role="progressbar"comaria-valuenow,aria-valueminearia-valuemax; o nome vem dolabel(poraria-labelledby) ou doaria-label/aria-labelledbypassado, que vão só para a barra — nunca para o invólucro (E62).- Indeterminada: nenhum valor e
aria-busy. É assim que o leitor sabe que a espera não tem número. - Não recebe foco: é informação, não controle.
O que sustenta o estado
Esta peça usa estatico. O estado dela é o de quem já foi ouvido com leitor de tela nesses padrões — e não uma passada sobre esta peça em específico.
Falta ouvir: estatico — ver docs/a11y-screen-reader-checklist.md.
Status e recursos
| Tipo | Recurso | Status |
|---|---|---|
| Código | app/components/atoms/Progress.tsx | Disponível |
| Ficha | Storybook (abre em outra aba) | Disponível |
| Teste de acessibilidade | axe em npm run test | No gate de todo commit |
| Leitor de tela | Passada da E33 | Falta ouvir |
| Design | Figma | Desativado até a Fase 2 |
Histórico
Os últimos commits que tocaram o arquivo, lidos do git no build.
fdd10ff2026-09-29ESTADO: E109 concluida, roteiro final fechado; proximo o merge na main
O histórico completo está no GitHub (abre em outra aba).