Hero Carousel
Em andamentoCarrossel de topo da página de eventos: cada slide é uma foto escurecida com o tipo, o título do evento, a descrição, a data e a chamada ("Saiba Mais" ou "Inscreva-se Agora"); setas e pontos trocam o slide. Não avança sozinho.
- Função
- Eventos
- Também chamado de
- carrossel de eventos, banner de eventos, destaque
- Mora em
- app/components/organisms/HeroCarousel.tsx
- Última mudança
- 2026-09-30
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.
1280px, em tamanho real
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 da página de eventos, para dois a quatro eventos em destaque.
Faça
- Passe poucos eventos — cada slide é uma parada a mais no Tab.
- Use
externalno evento com inscrição fora do site: a chamada vira "Inscreva-se Agora", abre em outra aba e diz isso ("abre em nova aba") — E74. - Deixe o
linkde fora quando o evento não tiver página: o slide fica sem chamada (E74) — erahref="#".
Evite
- Contar com o título do slide como
h1da página: desde a E75 ele éh2— a página tem oh1dela. - Lista vazia: o componente não renderiza nada.
Quando não usar. No topo da página inicial, com a busca de cursos, use o Hero. Para uma grade de eventos, o EventCard.
Anatomia
As partes, na ordem em que o olho — e o teclado — passam.
- Slide — Foto com véu escuro, sobrepostos; só o atual está visível.
- Conteúdo — Tipo (pílula vermelha), título (`h2`, E75), descrição, data e a chamada (Button `lg`).
- Setas — "Slide anterior" e "Próximo slide": o CarouselNavButton `dark` (E65) — 44px, 48px a partir de 768px, translúcidas; no hover, claras com a seta vermelha.
- Pontos — Um por slide; o atual é uma barra vermelha. Área de toque de 44px por pseudo-elemento.
Estados
Os estados que a peça tem no código, e o que muda em cada um.
| Estado | O que muda |
|---|---|
| Slide atual | Opacidade 100%, e o conteúdo sobe e aparece em sequência. |
| Outros slides | Opacidade 0 e inert: fora do Tab e da árvore de acessibilidade. |
| Um evento só | Sem setas nem pontos. |
| Evento sem `link` | Sem chamada: só o tipo, o título, a descrição e a data. |
| Ponto atual | Barra vermelha de 32px e aria-current="true". |
Comportamento
| Situação | O que acontece |
|---|---|
| Setas | Trocam o slide, dando a volta nas pontas. |
| Ponto | Vai ao slide dele. |
| Tempo | Não troca sozinho — não há temporizador. |
| Troca de slide | Anunciada numa região aria-live="polite": "Slide 2 de 3: <título>" (E75) — testado na ficha. |
Relacionados
Como usar no código
A importação e o menor uso, lidos do arquivo. O … marca as props obrigatórias.
import { HeroCarousel } from '@/app/components/organisms/HeroCarousel';
<HeroCarousel events={…} />Propriedades
Lidas do código da peça no build — não escritas à mão.
| Prop | Tipo | Padrão | Obrigatória | Descrição |
|---|---|---|---|---|
events | HeroEvent[] | — | sim | — |
rotulo | string | 'Eventos em destaque' | não | Nome do carrossel para o leitor de tela (E75). |
className | string | — | não | — |
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 |
|---|---|---|
--card | #FFFFFF | bg-card |
--foreground | #1A1A1A | bg-ink |
--ink-inverse | #FAFAFA | text-ink-inverse |
--primary | #D42B2B | bg-primary |
--primary-foreground | #FFFFFF | text-primary-foreground |
--ring-inverse | #FAFAFA | ring-ring-inverse |
Teclado
| Tecla | Faz |
|---|---|
| Tab | Passa pela chamada do slide à mostra, pelas setas e pelos pontos — medido com dois eventos: "Saiba Mais", "Slide anterior", "Próximo slide" e os dois pontos. |
| EnterEspaço | Nas setas e nos pontos, trocam o slide; na chamada, só Enter segue o link. |
Leitor de tela
O que é anunciado, e por quê.
- Os pontos se chamam "Ir para o slide N de T" e o atual tem
aria-current. - Os slides escondidos ficam
inert, como no Hero: só o título do slide à mostra é exposto — medido (1 de 2). - O carrossel se chama "Eventos em destaque" (
rotulo) comaria-roledescription="carrossel"; cada slide é um grupo "N de T" (E75).
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/organisms/HeroCarousel.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.
0298af82026-09-30E147: fechamento da Entrega 11 — REPORT.md, verificação cross-agent e o gate estático estrito
O histórico completo está no GitHub (abre em outra aba).