Skip to content

Feat/lint e fase4 design system - #2

Merged
mapompeo merged 4 commits into
masterfrom
feat/lint-e-fase4-design-system
Aug 27, 2026
Merged

mapompeo merged 4 commits into
masterfrom
feat/lint-e-fase4-design-system

Conversation

@mapompeo

Copy link
Copy Markdown
Owner

No description provided.

mapompeo and others added 4 commits August 27, 2026 18:40
…tical-CSS inlining

Causa raiz: o build de produção do Angular ativa por padrão o critical
CSS inlining, que carrega o styles-*.css de forma assíncrona via
<link media="print" onload="this.media='all'">. Esse onload é um
handler inline, bloqueado pela CSP do projeto (script-src 'self', sem
unsafe-inline). Sem ele rodar, o media nunca muda pra 'all' e o CSS
global (styles.scss) nunca se aplica na tela — só some ao imprimir a
página. Sintoma visível: searchbar (e qualquer outra classe global)
caindo pro estilo nativo quadrado do navegador, com Arial no lugar de
Nunito Sans.

Confirmado ao vivo em https://mapompeo-pokedex.vercel.app/: o link da
folha de estilos tinha media="print" travado e o input .dex-search__input
computava border:2px inset (default do Chrome) em vez das regras do
styles.scss.

Fix: desliga inlineCritical na config de produção do angular.json, que
volta o <link rel="stylesheet"> a carregar do jeito normal, sem
depender de handler inline. Custo é desprezível (bundle de CSS tem só
13KB). Não enfraqueci a CSP pra não perder a proteção contra XSS.

Bônus: removida a diretiva frame-ancestors da CSP via <meta> — o
navegador já ignora ela nesse contexto (só funciona em header HTTP),
então só gerava aviso morto no console. Documentado no comentário que,
se quiser bloqueio de clickjacking de verdade, precisa configurar como
header no host de deploy.

Validado: build de produção + servido estaticamente localmente,
confirmado via DevTools que o <link> não tem mais media=print/onload e
o input renderiza com as regras corretas (border:none, Nunito Sans).

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Configura @angular-eslint/schematics (eslint.config.js + npm run lint +
builder no angular.json). Corrige tudo que apareceu:

- 2 gaps reais de acessibilidade de teclado: sprite clicável em
  pokemon-detail (tocar som) ganhou role=button/tabindex/keydown.enter+space,
  mesmo padrão já usado em team.component.html; painel de filtro de tipo em
  pokemon-list ganhou Escape (@HostListener), consistente com team e picker
  que já tinham.
- 5 pares overlay/stopPropagation (team x3, picker x1, pokemon-list x1):
  são conveniência de mouse, não controles reais — Escape + botões focáveis
  já cobrem teclado. Documentados com eslint-disable-next-line em vez de
  forçar tabindex numa div de fundo de tela inteira (que seria pior pra
  leitor de tela).
- 4 handlers de erro vazios (subscribe/catch): comentário movido pra dentro
  do corpo explicando que o interceptor global já trata (regra exige
  corpo não-vazio, comentário fora da função não conta).
- 2 no-unused-vars (_dm, _event): configurada exceção pro prefixo _, que já
  era a convenção do projeto pra parâmetro/variável propositalmente não
  usada, em vez de mudar código que já fazia sentido.
- 1 no-inferrable-types: removida anotação redundante (stage: number = 0).
- 1 no-explicit-any: mantido (array heterogêneo de DataPart<T>, unknown não
  compila por contravariância), documentado com eslint-disable + comentário.
- 2 eqeqeq (!= null): configurado allowNullOrUndefined (idioma proposital
  pra cobrir null e undefined numa checagem só; a regra certa do
  @angular-eslint/template/eqeqeq usa esse nome de opção, não o {null:
  'ignore'} da regra eqeqeq base).

Adiciona 'npm run lint' como step no CI, antes do build.

Validado:  sem apontamentos,  limpo.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
…ot-action-btn)

Migra os 3 botões compactos de ação do slot (análise/trocar/remover) pro
componente compartilhado, item que a própria Fase 3 já tinha deixado
documentado como pendente.

Precisou de 2 extensões no componente, ambas genéricas (não hacks
pontuais pro team):
- size xxs (28px/ícone 16px) — faltava esse tamanho compacto entre xs e sm.
- input dangerHover — hover fica vermelho independente do tom, pra ações
  destrutivas; ortogonal ao tom em vez de mais uma variante de cor.

Converge a opacidade do fundo translúcido pro tom on-photo já existente
(20%/35%) em vez de preservar os 25%/45% originais do CSS reinventado —
diferença de 5% de alpha, imperceptível, e é exatamente esse tipo de
inconsistência que a consolidação do design system existe pra eliminar.

Validado: build limpo, time montado e testado no navegador (hover do
botão remover fica vermelho, tooltips corretos, sem erros no console).

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
…340px)

Abaixo de 340px, nome/tipos/meta e habilidades dos dois pokémon ficam
espremidos lado a lado (metade da largura cada um). Empilha os dois
blocos verticalmente nesse limiar (literal, não bp.down — ver comentário
no arquivo sobre por quê) e vira o divisor de vertical pra horizontal.

Mantido como está, de propósito: o gráfico de barras espelhadas de
status (Estatísticas Base). Virar isso em duas barras cheias empilhadas
por pokémon é trocar a metáfora visual da comparação, não um ajuste
responsivo — fica como decisão de design em aberto, não deste commit.

Validado: build limpo, layout conferido injetando as mesmas regras via
DevTools (resize real de viewport não é confiável neste ambiente) —
empilhamento correto tanto no bloco de info quanto no de habilidades.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
@vercel

vercel Bot commented Aug 27, 2026

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated (UTC)
pokedex Ready Ready Preview Aug 27, 2026 10:06pm

@mapompeo
mapompeo merged commit 8f10946 into master Aug 27, 2026
2 of 3 checks passed
@mapompeo
mapompeo deleted the feat/lint-e-fase4-design-system branch August 27, 2026 22:07
mapompeo added a commit that referenced this pull request Aug 27, 2026
O npm ci do CI falhava com EUSAGE ('Missing: chokidar@5.0.0 from lock
file') desde o commit do ESLint (2ce2a76, PR #2) — o ng add ali rodou um
npm install que deixou o lockfile sutilmente inconsistente (script
allow-scripts pendente truncou parte da resolução de dependências
opcionais). Ficou silenciosamente quebrado em master desde então; PRs #2
e #3 também tiveram o build do CI falhando, só ninguém tinha reparado.

Fix: apaguei node_modules + package-lock.json e rodei npm install do
zero, depois validei com npm ci limpo (exatamente o que o CI roda) —
sem erro, build e lint passam.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>

This branch was successfully deployed

1 active deployment
Preview — 03063623 Deployed Aug 27, 2026 by vercel[bot]
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant