-
Status: implemented-pending-homologation
-
Intake:
sdd/human-requests/req-139.md -
Data de abertura: 2026-08-26
-
Classificação: implementação incremental / ergonomia do CRUD e renderização do widget
galleries
Objetivo
Refinar os modos compactos do gerenciador de imagens sem alterar a ordenação ou o contrato de persistência existente, devolver acesso à edição de legenda/link por um controle em overlay e permitir escolher o corte vertical aplicado às imagens nos quatro modelos públicos da galeria.
Slice aprovado
-
Grade desktop com seis cards no modo médio e dez no pequeno, miniaturas de aproximadamente 110 px e 65 px e breakpoints responsivos preservados.
-
Highlight estável no hover e overlay de ações alinhado ao tratamento visual do
admin-arquivos, sem mudança de geometria. -
Engrenagem nos modos compactos abrindo edição rápida de legenda e configuração de link do item, atualizando
itemse o preview imediato. -
Controle global
image_position(top|center|bottom) nos três CRUDs localizados, serializado e hidratado com fallbackcenter. -
Resolução segura do valor e da classe Tailwind no backend, aplicada às imagens dos quatro templates em
pt-breene respeitada no preview/runtime do widget.
Fora do escopo
-
Alterar a ordem ou o formato dos itens persistidos, o Sortable ou o canal do picker de arquivos.
-
Criar alinhamento horizontal, posicionamento livre ou configuração por imagem.
-
Reestruturar os quatro modelos de galeria além da aplicação do alinhamento vertical.
-
Fazer commit, push ou deploy remoto.
Decisões de implementação
-
O código-fonte atual é a autoridade para nomes de campos, ciclo do preview e marcadores dos templates; divergências literais do intake serão registradas nas evidências.
-
Textos visíveis novos serão recursos localizados do módulo, nunca literais fixos no JavaScript.
-
O valor de
image_positionserá normalizado por allowlist no backend antes de virar estilo ou classe, mantendocenterpara schemas antigos ou inválidos. -
O overlay continuará fora do fluxo do card; a validação geométrica deve provar zero layout shift.
Contrato de validação
-
php -lnos PHP do módulo,node --checknos dois JavaScript e parse degalleries.json. -
Testes focados para grade/overlay/edição rápida, serialização/hidratação e resolução segura de
image_positionnos quatro templates. -
c2f resources:sync, com inspeção dos artefatos regenerados; suítes PHPUnit e Vitest verdes. -
Validação visual autônoma em galeria com 15+ fotos: densidade, geometria no hover, edição rápida, persistência no preview e corte
top|bottomno preview e no runtime público. -
Review findings-first,
git diff --checke confirmação de que nenhum commit, push ou deploy remoto foi executado.
Evidências
-
CRUD e schema: seis páginas localizadas (
adicionar,editar,clonarempt-br/en), normalização allowlist deimage_positione nove variáveis novas por idioma. -
Renderer: oito templates localizados recebem valor/classe/atributo; o widget PHP normaliza
top|center|bottome o JavaScript público aplica o corte antes da inicialização do modelo. -
Testes focados: Vitest 7/7; PHPUnit 5/5, com 74 asserções sobre normalização, globais, templates e CRUDs.
-
Suítes completas: Vitest 366/366 (25 arquivos) e PHPUnit 789/789 (3.497 asserções; 1 depreciação e 4 skips preexistentes).
-
Lint/estrutura:
node --check2/2,php -l3/3, JSON válido egit diff --checklimpo. -
c2f resources:sync: 2.678 recursos, 233/233 Tailwind em cache na rodada final, zero erros e quatro avisos preexistentes fora do módulo. -
Runtime local autenticado (
/photon/galleries/adicionar/, viewport 1920 px, 18 imagens): 6 cards/linha e thumb 110 px no médio; 10 cards/linha e thumb 65 px no pequeno; geometria idêntica antes/depois do hover; bordargb(33,133,208), sombra azul, backdroprgba(0,0,0,.55), raio 4 px e overlay absoluto comopacity:1/pointer-events:auto. -
Modal rápido: rótulos pt-BR, legenda, URL, tipo e
_blankpersistiram no mesmo item ao fechar; preview recebeu payloadstop/bottome mediu respectivamente50% 0%/50% 100%em 18 imgs. -
Screenshots:
temp/req-139-medium-overlay.png,temp/req-139-quick-settings.pngetemp/req-139-small-bottom.png; console epageerrorvazios. -
Finding do review: o primeiro CSS deixava
pointer-events:noneno contêiner mesmo no hover; corrigido paraauto, provado por teste e estilo computado. Nenhum finding restante. -
Restrição local: a base Photon não possuía galeria e estava com páginas/templates/variáveis antigos; o dry-run do atualizador avançou checksums sem aplicar as linhas. Para não usar
force-allsobre recursos do tenant, o Playwright carregou no editor o template e os rótulos versionados deste lote; o endpoint PHP real e ogalleries.widget.jsreal fizeram a renderização. O ambiente foi restaurado paraPRODUCTION(DEVELOPMENT_ENV=false). -
Nível 1 respeitado: nenhum commit, push ou deploy remoto.