Scroll Progress
Em andamentoBarra fina, de 4px, que se enche no vermelho de interface conforme a página rola — do topo ao fim. Só desenho, por contrato: aria-hidden na raiz (E62).
- Função
- Estado e aviso
- Também chamado de
- progresso de leitura, barra de rolagem, indicador de leitura
- Mora em
- app/components/atoms/ScrollProgress.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
No topo de artigos e páginas longas de leitura, fixada por quem usa, para mostrar quanto falta.
Faça
- Para acompanhar um painel que rola por dentro (uma gaveta, um artigo num quadro), passe o
alvo: a ref da caixa (E124). Sem ele, a barra acompanha a janela. - Com
trilha, a barra aparece já em 0%, sobre--muted; sem ela, só aparece ao rolar — o jeito da Navbar. - Posicione pelo consumidor (
fixed top-0, por exemplo): a peça não se posiciona sozinha. - Use uma por página.
Evite
- Contar com ela para informar algo a quem usa leitor de tela: é só visual.
Quando não usar. Para o progresso de uma tarefa (inscrição, carga horária), use o Progress. Em página curta, que cabe na tela, ela nem aparece.
Anatomia
As partes, na ordem em que o olho — e o teclado — passam.
- Trilha — Largura total, 4px, transparente.
- Preenchimento — No vermelho de interface, na largura toda, reduzido por `scaleX` à fração rolada.
Estados
Os estados que a peça tem no código, e o que muda em cada um.
| Estado | O que muda |
|---|---|
| Topo | Preenchimento em 0%. |
| Rolando | O preenchimento acompanha a rolagem por transform, com transição de 150ms (--duracao-rapida) só com movimento liberado. |
| Fim | Preenchimento em 100%. |
| Página sem rolagem | Fica em 0%. |
Comportamento
| Situação | O que acontece |
|---|---|
| Com `alvo` | Acompanha a rolagem da caixa: 0 no topo, metade no meio, cheia no fim — testado na ficha. A caixa que muda de altura refaz a conta. |
| Rolagem | Ouve o scroll da janela (passivo) e refaz a conta — rolado ÷ (altura do documento − altura da janela) — no máximo uma vez por quadro (requestAnimationFrame). |
| Janela ou documento mudam de tamanho | Refaz a conta no resize e quando o documento muda de altura (ResizeObserver) — uma imagem que carrega depois não deixa a barra errada. |
| Montagem | Calcula uma vez de saída, para abrir já na posição certa. |
Relacionados
Como usar no código
A importação e o menor uso, lidos do arquivo. O … marca as props obrigatórias.
import { ScrollProgress } from '@/app/components/atoms/ScrollProgress';
<ScrollProgress>…</ScrollProgress>Propriedades
Lidas do código da peça no build — não escritas à mão.
| Prop | Tipo | Padrão | Obrigatória | Descrição |
|---|---|---|---|---|
alvo | React.RefObject<HTMLElement | null> | — | não | A caixa cuja rolagem a barra acompanha (E124). Sem ele, a janela — o uso da Navbar. Com ele, um painel que rola por dentro: uma gaveta, um artigo num quadro, a prévia do styleguide. |
trilha | boolean | false | não | Mostra a trilha em --muted (E124): a barra aparece já em 0%. Sem ela, a trilha é transparente, e nada se vê antes de rolar — o padrão da Navbar, que tem o próprio fundo. |
Aceita também: React.HTMLAttributes<HTMLDivElement>.
Medidas
| Parte | Valor | Classe |
|---|---|---|
| Altura | 4px | h-1 |
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 |
|---|---|---|
--muted | #F4F6F9 | bg-muted |
--primary | #D42B2B | bg-primary |
Leitor de tela
O que é anunciado, e por quê.
- Não tem papel, nome nem valor, e a raiz é
aria-hidden(E62): o leitor de tela não anuncia nada. A informação equivalente é a própria posição na página. - Aceita
refe os atributos de<div>, como toda peça com raiz única (E62).
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/ScrollProgress.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.
6ecd5a32026-09-29E130: MarketingHero — estrutura e layout refeitos
O histórico completo está no GitHub (abre em outra aba).