Esqueleto
Em andamentoO lugar de um conteúdo que ainda está chegando: a forma do cartão, da linha de texto, da foto, para a página não pular quando o conteúdo entra. Cada forma é decorativa; o EsqueletoGrupo em volta diz "Carregando" uma vez.
- Função
- Estado e aviso
- Também chamado de
- skeleton, esqueleto, placeholder de carregamento, carregando, shimmer
- Mora em
- app/components/atoms/Esqueleto.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
Quando o conteúdo leva mais de um instante para chegar e já se sabe a forma dele: a lista de cursos, o cartão da turma, o perfil de um docente.
Faça
- Para os cartões que vêm de API, use os esqueletos prontos (E157):
CourseCardEsqueleto,BlogCardEsqueleto,EventCardEsqueletoeTurmaCardEsqueleto, que têm a forma exata do cartão. - Envolva os esqueletos de um bloco num
EsqueletoGrupocom umrotuloque diga o quê ("Carregando cursos"). - Imite a forma do conteúdo: miniatura, título e duas linhas para um cartão; avatar e linha para uma pessoa.
- Troque o grupo inteiro pelo conteúdo quando ele chegar: o anúncio sai junto.
- Em lista muito longa,
animado={false}: dezenas de formas pulsando cansam.
Evite
- Dar esqueleto a peça que aparece na hora — botão, campo, aviso, modal, menu, rodapé: ela já está pronta, e o esqueleto só atrasaria a leitura. Esqueleto é para conteúdo que chega depois e tem forma previsível (revisão 4).
- Um "Carregando" por forma: o leitor de tela repetiria a mesma palavra a cada linha.
- Esqueleto que fica na tela para sempre: se a carga falhar, troque pelo Alert.
- Forma muito diferente do conteúdo: o salto que ele evitaria volta.
Quando não usar. Para uma ação que a pessoa disparou (enviar, salvar): o Button com carregamento. Para uma tarefa com progresso conhecido: o Progress. Quando não se sabe a forma do que vem: o Progress indeterminado.
Anatomia
As partes, na ordem em que o olho — e o teclado — passam.
- Forma — Um bloco em `--border`: texto (14px), título (24px, 60% da largura), avatar (40px, redondo), miniatura (16:9) e botão (44px de altura, raio do controle).
- Pulso — A opacidade vai de 1 a 0,5 e volta, em 1,6s — sem deslocamento. Parado com movimento reduzido.
- Grupo — Uma região `status` com o `rotulo` só para o leitor de tela.
Estados
Os estados que a peça tem no código, e o que muda em cada um.
| Estado | O que muda |
|---|---|
| Pulsando | O padrão, com movimento liberado. |
| Parado | Com animado={false} ou com movimento reduzido no sistema. |
Comportamento
| Situação | O que acontece |
|---|---|
| O conteúdo chega | Quem chama troca o grupo pelo conteúdo; o status some junto — testado na ficha. |
| Movimento reduzido | A animação é none: a forma fica parada, e o "Carregando" do grupo continua. |
Relacionados
Como usar no código
A importação e o menor uso, lidos do arquivo. O … marca as props obrigatórias.
import { Esqueleto } from '@/app/components/atoms/Esqueleto';
<Esqueleto>…</Esqueleto>Propriedades
Lidas do código da peça no build — não escritas à mão.
| Prop | Tipo | Padrão | Obrigatória | Descrição |
|---|---|---|---|---|
forma | 'texto' | 'titulo' | 'avatar' | 'miniatura' | 'botao' | 'texto' | não | Variante do cva. |
animado | boolean | true | não | O pulso só existe com movimento liberado (ver .esqueleto-pulsando em globals.css). |
Aceita também: React.HTMLAttributes<HTMLSpanElement>.
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 |
Leitor de tela
O que é anunciado, e por quê.
- As formas são
aria-hidden: não há o que ler nelas. - O
EsqueletoGrupoérole="status"e diz orotulouma vez. - O pulso é indicador de carregamento (exceção nomeada na trava de pausa do audit, WCAG 2.2.2): some quando o conteúdo chega, e para com movimento reduzido.
O que sustenta o estado
Esta peça usa regiaoViva. 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: regiaoViva — ver docs/a11y-screen-reader-checklist.md.
Status e recursos
| Tipo | Recurso | Status |
|---|---|---|
| Código | app/components/atoms/Esqueleto.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.
b2261802026-09-29E115: LinkDeNavegacao — o link da barra sai de dentro da Navbar
O histórico completo está no GitHub (abre em outra aba).