Video Player
Em andamentoVídeo do YouTube que só carrega quando alguém pede: mostra a capa com um botão de reproduzir e, no clique, troca pelo player do youtube-nocookie.com já tocando, com o foco nele.
- Função
- Conteúdo
- Também chamado de
- vídeo, player, youtube, embed
- Mora em
- app/components/molecules/VideoPlayer.tsx
- Última mudança
- 2026-10-01
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 um vídeo de apresentação do curso ou depoimento, no meio do conteúdo.
Faça
- Passe o
titledo vídeo: ele vai para o nome do botão ("Reproduzir o vídeo: …") e do player. - Aceite o
videoIdou a URL inteira do YouTube — o componente extrai o id. - Use
thumbnailUrlquando a capa automática do YouTube não servir; sem ela, a capa grande, e a média se a grande falhar (E72).
Evite
- Deixar o
titleno padrão ("Vídeo"): quem ouve não sabe o que vai tocar. - Vários na mesma dobra: cada um é um player do YouTube ao ser aberto.
Quando não usar. Para vários depoimentos em vídeo passando, use o VideoTestimonialCarousel. Para vídeo de fundo decorativo, nenhum player.
Anatomia
As partes, na ordem em que o olho — e o teclado — passam.
- Moldura — Na proporção do `aspectRatio`, cantos `rounded-2xl`, borda e sombra.
- Capa — Imagem decorativa (`alt=""`) sob um véu escuro.
- Botão de reproduzir — Círculo vermelho de 64px (80px a partir de 768px) com o ícone de play; o botão real cobre a capa inteira.
- Player — O `<iframe>` do YouTube sem cookies, depois do clique.
Estados
Os estados que a peça tem no código, e o que muda em cada um.
| Estado | O que muda |
|---|---|
| Capa | Imagem com véu; no hover, a imagem aproxima e o círculo cresce — só com movimento liberado (E72). |
| Foco | Anel ring-ring de 4px em volta da capa inteira. |
| Tocando | O player no lugar da capa, com reprodução automática e o foco. |
| Proporção | video 16:9 (padrão), wide 21:9 ou square 1:1. |
Comportamento
| Situação | O que acontece |
|---|---|
| Antes do clique | Nada do YouTube é carregado além da imagem da capa. |
| Capa grande que não existe | Troca pela média (hqdefault), que todo vídeo tem (E72) — conferido no teste da ficha. A cinza de antes fazia o player parecer quebrado. |
| Clique ou Enter na capa | Troca pelo player já tocando e leva o foco para ele — medido: o foco passa ao <iframe>. |
Relacionados
Como usar no código
A importação e o menor uso, lidos do arquivo. O … marca as props obrigatórias.
import { VideoPlayer } from '@/app/components/molecules/VideoPlayer';
<VideoPlayer videoId={…}>…</VideoPlayer>Propriedades
Lidas do código da peça no build — não escritas à mão.
| Prop | Tipo | Padrão | Obrigatória | Descrição |
|---|---|---|---|---|
aspectRatio | 'video' | 'wide' | 'square' | 'video' | não | Variante do cva. |
videoId | string | — | sim | ID do vídeo no YouTube, ou a URL completa. |
title | string | 'Vídeo' | não | — |
thumbnailUrl | string | — | não | — |
Aceita também: React.HTMLAttributes<HTMLDivElement>.
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 |
|---|---|---|
--primary | #D42B2B | bg-primaryring-primary/40shadow-primary/20shadow-primary/40 |
--foreground | #1A1A1A | bg-ink/30bg-ink/40 |
--border | #E5E5E5 | border-border |
--muted | #F4F6F9 | bg-muted |
--primary-foreground | #FFFFFF | text-primary-foreground |
--ring | var(--footer-red)), decisão da revisão 2. Se outra peça precisar
* dele como superfície, o nome vira de papel (ex.: --surface-brand-strong). */
--footer-red: #7D1B1B | ring-ring |
Teclado
| Tecla | Faz |
|---|---|
| Tab | Leva o foco à capa, "Reproduzir o vídeo: …" — medido. |
| EnterEspaço | Abre o player já tocando, com o foco nele — medido. Dali em diante, o teclado é o do player do YouTube. |
Leitor de tela
O que é anunciado, e por quê.
- O player abre com as legendas em português ligadas quando o vídeo as tem (
cc_load_policy, E145 — SC 1.2.2); vídeo sem legenda continua sem: publicar vídeo com fala exige a legenda no próprio YouTube, revisada por pessoa. - O botão se chama "Reproduzir o vídeo: <título>"; o player tem o mesmo
title. - A capa é decorativa (
alt=""): o nome está no botão.
O que sustenta o estado
Esta peça usa midia. 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: midia — ver docs/a11y-screen-reader-checklist.md.
Status e recursos
| Tipo | Recurso | Status |
|---|---|---|
| Código | app/components/molecules/VideoPlayer.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.
251416b2026-10-01E159: Testimonials — o vídeo toca dentro do cartão, YouTube e Vimeo
O histórico completo está no GitHub (abre em outra aba).