-
Status:
ready-for-intake -
Modo de Autonomia:
autonomo_monitorado(GPT-6.1 SOL — Esforço Médio) -
Lote Alvo Core:
BATCH-253(conn2flow) -
Lote Alvo Site Coordenado:
BATCH-103/REQ-109(conn2flow-site) -
Data de Criação: 2026-10-06
-
Origem: Constatação de quebra e inconsistência visual nos widgets inseridos na aba "Widgets e Métricas" do Dashboard (
[REDACTED]), onde widgets perfeitamente estilizados em páginas avulsas (exemplo:[REDACTED]) perdem folhas de estilo, tokens de cores e classes utilitárias do Tailwind ao rodar no iframe isolado. -
Repositórios Alvo:
-
Core:
conn2flowem[REDACTED] -
Site:
conn2flow-siteem[REDACTED]
-
1. Visão Geral & Diagnóstico Técnico
1.1 O Problema
Na aba "Widgets e Métricas" do Dashboard ([REDACTED]), os blocos adicionados pelo usuário são renderizados dinamicamente pelo JavaScript dentro de um <iframe> via srcdoc após uma requisição AJAX para dashboard/ com ajaxOpcao=widget-render.
Embora a execução funcional de scripts ocorra (ex.: controles avançam e mudam de slide na apresentação), o visual e o CSS estão totalmente quebrados ou desconfigurados. Em contraste, ao acessar uma página normal que renderiza o mesmo widget (ex.: [REDACTED]), a apresentação e demais widgets aparecem 100% perfeitos, com tipografia refinada, gradientes, botões, espaçamentos e cores oficiais do tema.
1.2 Causas Raízes Identificadas
-
Ausência do Compilador/Runtime Tailwind no Iframe:
-
No backend (
dashboard.php>dashboard_ajax_widget_render), o sistema tenta injetar estilos lendo o layoutlayout-iframe-tailwindcss. -
Contudo,
layout-iframe-tailwindcss.precompiled.csscontém apenas regras de reset básico (box-sizing, etc.) e um@layer components,utilities;vazio — zero classes utilitárias do Tailwind (não háflex,grid,text-center,max-w-7xl,p-6,bg-c2f-blue,rounded-2xl, etc.). -
No frontend (
dashboard.js), o iframe monta o documento HTML apenas comdata.css, jQuery e o HTML do widget. Diferente do editor visual (html-editor-interface.js) e do preview de módulos (pages-index.js), o dashboard NÃO injeta o compiladortailwindcss-browser, de modo que as dezenas de classes utilitárias do Tailwind no HTML do widget simplesmente não produzem efeito no iframe.
-
-
Omissão de Campos de Estilo e Templates no Backend (
dashboard.php):-
Na função
dashboard_ajax_widget_render:-
O select no banco na tabela do registro busca apenas
id,fields_schemaecss_compiled. Ele omite a colunacssautoral do registro (onde módulos comopresentationsarmazenam arquivos comoconn2flow.css). -
A busca na tabela
templatessó ocorre secss_compiledfor vazio e busca apenascss_precompiled, ignorando a colunacssautoral do template. -
Marcadores de tema, fontes e variáveis globais CSS (
--color-c2f-blue,--font-sans, etc.) não são passados para o iframe.
-
-
-
Inconsistência de Geometria e Estilo Estrutural do Card e Iframe (
dashboard.jse CSS):-
O card criado no DOM (
.dashboard-widget-card) não possuidisplay: flex; flex-direction: column;, fazendo com que.dashboard-widget-card-bodycomflex-1não consiga preencher a altura útil definida no card pela malha (geometry(card, widget)). -
O elemento
iframe.dashboard-widget-framenão possui regra de estilo CSS global (cai no default do navegador de 300x150 com borda embutida). -
O corpo do card possui padding fixo
p-4, que é indesejado em widgets tipo apresentação, deck de slides ou gráficos full-bleed.
-
2. Requisitos Normativos de Implementação
Bloco 1: Backend Core — Injeção Completa de Estilos em dashboard.php
-
Consulta Robusta do Registro do Widget (
dashboard_ajax_widget_render):-
Ao buscar o registro na tabela de destino (
$def['tabela']), selecionar todas as colunas de estilização disponíveis:id,fields_schema,css,css_compiled,css_precompiled(se existir) ehtml_extra_head(se existir). -
Se o registro possuir um template vinculado (
template_idnofields_schema), carregar tantocssquantocss_precompiledda tabelatemplates. -
Garantir que qualquer folha declarada pelo widget seja unificada em
data.css.
-
-
Fornecimento de Assets e Tokens de Tema:
-
Incluir no retorno AJAX (
$_GESTOR['ajax-json']['data']):-
tailwind_compiler_url: URL canônica para o scripttailwindcss-browser(dist/index.global.js), obtida viaassets_externos_urlou equivalente do core. -
theme_styles: Bloco de estilos contendo os tokens padrão do Conn2Flow (incluindo@theme { --color-c2f-blue: #1daac6; }ou classes utilitárias de base e variáveis CSS de cores/fontes). -
scripts: scripts de controlador público do widget (<modulo>.widget.js) e bibliotecas registradas no$_GESTOR['javascript-fim'].
-
-
Bloco 2: Frontend Core — Hidratação do Iframe e Geometria em dashboard.js e CSS
-
Estrutura e Dimensionamento do Card:
-
Atualizar a criação de
.dashboard-widget-card:-
Deve possuir classes estruturais completas:
dashboard-widget-card flex flex-col overflow-hidden rounded-xl border border-slate-200 bg-white shadow-sm.
-
-
Atualizar
.dashboard-widget-card-body:-
Deve ocupar
flex-1 w-full min-h-0 overflow-hidden relative. -
Para widgets full-bleed (ou widgets identificados como
presentations/ slides / decks), remover o padding interno ou aplicar classep-0para permitir que o iframe ocupe 100% da área útil do card.
-
-
Definir classes explícitas para
.dashboard-widget-frame:-
w-full h-full border-0 block min-h-0.
-
-
-
Montagem do
frame.srcdocemdashboard.js:-
Construir o documento isolado com os seguintes elementos essenciais no
<head>:-
<meta charset="utf-8">e<meta name="viewport" content="width=device-width, initial-scale=1">. -
<base href="...">com a raiz pública canônica do gestor. -
Reset e geometria base:
<style>html,body{margin:0;padding:0;width:100%;height:100%;overflow-x:hidden}body{font-family:system-ui,-apple-system,sans-serif}</style>. -
Variáveis e tokens de tema do Conn2Flow (ex: cor
#1daac6, fontes). -
Todas as folhas de estilo autorais e de templates recebidas em
data.css. -
O script do compilador
tailwindcss-browser(usando a URL de asset oficial, idêntico aohtml-editor-interface.js). -
Script do jQuery (se presente ou necessário).
-
Variável global mínima no iframe:
<script>window.gestor = { raiz: location.origin + ... };</script>.
-
-
No
<body>:-
O HTML do widget (
data.html). -
Os scripts do widget (
data.scriptsou<modulo>.widget.js).
-
-
Disparar reinicialização de ícones (
lucide.createIcons()) e inicialização do widget após o carregamento (onloaddo iframe).
-
Bloco 3: Paridade e Compatibilidade de Módulos (Core & Site)
-
Piloto: Widget
presentations:-
No Dashboard, ao adicionar uma apresentação (ex.: Conn2Flow), ela deve renderizar com:
-
Fundo escuro oficial e containers de slides com proporção correta.
-
Cores de destaque (
c2f-blue), badges de infraestrutura, tipografia e gradientes (bg-linear-to-r). -
Controles de slides (setas, pontos, contador, barra de progresso e botão de tela cheia) visíveis e operantes.
-
Transição suave entre slides sem overflow ou quebra de malha.
-
-
-
Outros Widgets do Catálogo:
-
forms-search: renderizar input de busca com lupa, autocomplete e botões com visual limpo Tailwind. -
pages-index: renderizar listagem de páginas e cards com espaçamento harmônico. -
cookie-consent,menus,galleries(quando inseridos): visual idêntico ao das páginas públicas.
-
3. Critérios de Aceite & Validação
-
[ ] Compilação:
c2f resources:syncexecuta sem erros em ambos os repositórios. -
[ ] Testes Automatizados:
npm run test(Vitest) ecomposer test(PHPUnit) passam sem falhas. -
[ ] Paridade Visual: A apresentação
conn2flowno Dashboard ([REDACTED]) exibe rigorosamente o mesmo design, cores (c2f-blue), tipografia e botões que a página avulsa[REDACTED]. -
[ ] Redimensionamento da Grade: O redimensionamento do card de widget na malha de 12 colunas mantém o conteúdo do iframe escalável e sem overflow parasitário.
-
[ ] Sem Quebra em Outros Widgets: Nenhum outro widget do catálogo perde funcionalidade ou estilo.
-
[ ] Git: Commits com caminhos específicos de arquivos alterados (sem
git add -A).