c2f-tailwind-module-migration
Skill5 starsChanged 2 months agoMITView on GitHub
LEIA ANTES de migrar um módulo do painel do Fomantic-UI para Tailwind (programa da req-219). Se não ler: o JS legado quebra só na página Tailwind, sem erro no PHP, e as responsivas se invertem.
Files
Migração de módulo do painel para Tailwind (req-219, DEC-132)
⚡ Gatilho Obrigatório
- TRIGGER: trocar páginas de um módulo do
layout-administrativo-do-gestorpara olayout-administrativo-tailwind, criar variante-tailwindde componente ou mexer na biblioteca de controles. - SKIP APENAS SE: o módulo já está todo em Tailwind e a mudança não toca HTML, JS de tela nem componentes.
- CONSEQUÊNCIA DE IGNORAR: botão sem ação, aba que não troca, modal aberto no rodapé,
grid-cols-1vencendomd:grid-cols-2, salvar com 403.
Referência viva
- Implementação completa:
admin-paginas(commits7cf44d27e435fd83c, relatóriosdd/implementation/BATCH-227.md). - Módulo Tailwind nativo:
perfil-usuario. - Biblioteca: cabeçalhos de
gestor/assets/interface/controles.jsegestor/bibliotecas/controles.php. - Contrato testado:
tests/Unit/PHP/HtmlEditorTailwindReq219Test.php. Roteiro de navegador modelo:conn2flow-site/sdd/validation/core/req219-controles-e2e.cjs.
Passo a passo por módulo
- Metadados (
<modulo>.json, pt-br e en), em cada página migrada:layout: layout-administrativo-tailwind,framework_css: tailwindcss,tailwind_bundle: true,tailwind_dependencies(os globais do painel —menu-principal-sistema-tailwind,interface-formulario-edicao-tailwindou-inclusao-tailwind,interface-carregando/alerta/delecao-modal-tailwind,interface-formulario-autorizacao-provisoria-tailwind— mais toda variante montada em runtime) etailwind_sourcespara PHP/JS que escrevem utilities. Subaversionda página eversaodo módulo. - PHP da opção:
$_GESTOR['tailwind-page-bundle'] = true;no começo da função da opção. Sem isso os sidecars dos componentes entram depois do bundle e as responsivas se invertem. - HTML da página: campos no padrão
c2fc-campo/c2fc-campo-rotulo/c2fc-campo-entrada, grade comgrid grid-cols-1 gap-4 md:grid-cols-2, chave comc2fc-chave(checkbox nativo +c2fc-chave-trilho), aviso em caixarounded-lg border … bg-sky-50. Mantenhaname,id, placeholders#…#, variáveis@[[…]]@e marcadores<!-- x < -->exatamente.data-checked="#x#"vira o atributo direto#x#(o PHP troca porchecked). O selo de status dos metadados sai porinterface_status_selo($status)(já aplicado em quase todos os módulos); outras peças escritas no PHP do módulo também mudam. - Componentes do módulo montados em runtime: crie
<id>-tailwinde escolha cominterface_componente_variante('<id>')(guarde comfunction_existsem biblioteca que roda sem ointerface). Registre no JSON do módulo (ou emresources/<lang>/components.jsonse for global) comframework_css: tailwindcss. - JS do módulo: continua funcionando pela ponte (
dropdown,checkbox,tab,modal,dimmer,popup,form,transition). Troque só o que depende de classe visual: seletores.ui.form,.x.button,.closest('.field'),$.formSubmitNormal(useform.requestSubmit()),alert/confirm/prompt(usec2fControles.dialogo). Código novo é JavaScript puro. - Modais na variante nascem com
hidden, guardamheader/content/actionse os ganchosapprove/cancel/deny; a ponte os leva aobody. Cobertura de carregamento:ui dimmer c2fc-cobertura(o JS legado liga.active). - Listagem (página raiz): a listagem Tailwind da req-220 já está em
main. Troque layout/bundle da raiz, ponhainterface-listar-tailwindnas dependências e$_GESTOR['tailwind-page-bundle'] = true;nocase 'listar'. Filtro próprio no topo vai emtabela.cabecalhocomo variante-tailwind(exemplo:lista-pagina-ou-sistema-tailwinddoadmin-paginas). O componente temid="_gestor-interface-listar", então o JS do módulo que liga filtros continua achando a lista.
Regras da casa
- Utility do Tailwind só no HTML de recurso (é o que o compilador vê). Elemento criado por JS/PHP genérico usa classe
c2fc-*emcontroles.css. - Ícones: Lucide (
<i data-lucide="nome" class="size-4">); dentro de<template>não renderiza. - Tooltips:
data-c2f-dica(odata-tooltipé CSS do Fomantic). - Não mexa em
controles.js/controles.css/controles.php,interface.phpnemhtml-editor.phpfora do seu escopo: peça no relatório ao dono da req-219. - Comentário em recurso nunca cita placeholder (
#x#,@[[x]]@): a troca pega a primeira ocorrência, dentro do comentário. - Pipeline: desde a req-219 a minificação é a etapa 1; uma rodada de
project:update-allbasta. - Validação mínima: teste PHP de contrato (variante x original, metadados, HTML sem
class="ui), Vitest se mexer em JS, roteiro Playwright no Lab (sem asset do Fomantic no documento principal —request.frame() === page.mainFrame()—, salvar sem 403, 390 px sem rolagem, nenhum.ui.modalvisível solto) e o mesmo módulo Fomantic de controle sem mudança. - Lab compartilhado: trave com
mkdir C:/Users/otavi/OneDrive/Documentos/GIT/.c2f-lab-lock(falhou = outro agente usando; espere), façagit merge origin/mainna sua branch antes doproject:update-all conn2flow-site-local(rode 2 vezes quando mudar JS) e do roteiro, e libere comrmdirao terminar. - Pendência humana vai para
conn2flow-site/sdd/PENDENCIAS-HUMANAS.md, item do roteiro único da req-219.
Escopo main e inicialização tardia por hooks (BL-028)
Leitura de campos/rótulos da tela fica restrita a main, pois o menu de busca também usa label. Não varra todos os labels do document para formar contexto de IA. Se não houver main, aguarde a montagem ou reporte ausência de contexto; não caia para o documento inteiro.
Script incluído por hook pode executar antes de o editor/componentes serem criados. Faça tentativa inicial após DOM pronto e observe main com MutationObserver (childList/subtree); use debounce/intervalo limitado para novas tentativas, sem loop apertado. Inicialização deve ser idempotente, impedir handlers/botões duplicados e desconectar observador/timer quando não forem mais necessários ou ao desmontar tela. Valide com editor criado depois do hook e abertura repetida.
A orientação histórica de duas publicações para JS não se aplica ao pipeline atual: com lock, atualize timestamps dos arquivos versionados alterados e rode project:update-all uma vez por projeto, sequencialmente. Dois projetos com a mesma origem precisam de uma rodada cada.
In this repository102 other files it gives its agents.
- AGENTS.mdAGENTS.md
- CLAUDE.mdCLAUDE.md
- cli/CLAUDE.mdCLAUDE.md
- .github/copilot-instructions.mdCopilot instructions
- .cursor/rules/sdd.mdcCursor rule
- c2f-database-testingSkill
- c2f-gd-image-safetySkill
- c2f-json-resources-syncSkill
- c2f-mdd-indexing-and-handoffsSkill
- c2f-mysql-utf8-emoji-encodingSkill
- c2f-tailwind-css-architectureSkill
- c2f-widget-developmentSkill
- c2f-agent-visual-inspectionSkill
- c2f-ai-featuresSkill
- c2f-architect-masterSkill
- c2f-database-operationsSkill
- c2f-database-testingSkill
- c2f-dev-scriptsSkill
- c2f-docker-environmentSkill
- c2f-documentation-governanceSkill
- c2f-documentationSkill
- c2f-environment-configurationSkill
- c2f-executor-agentSkill
- c2f-gd-image-safetySkill
- c2f-gestor-functionsSkill
- c2f-global-variablesSkill
- c2f-hooks-systemSkill
- c2f-html-css-pages-and-componentsSkill
- c2f-interface-v2-architectureSkill
- c2f-javascript-ajaxSkill
- c2f-json-resources-syncSkill
- c2f-mdd-indexing-and-handoffsSkill
- c2f-modelo-templatesSkill
- c2f-module-crud-scaffoldingSkill
- c2f-module-visual-assetsSkill
- c2f-multilingual-systemSkill
- c2f-mysql-utf8-emoji-encodingSkill
- c2f-payment-gatewaysSkill
- c2f-plugin-architectureSkill
- c2f-preview-modals-systemSkill
- c2f-project-pipeline-and-tasksSkill
- c2f-projects-systemSkill
- c2f-resources-systemSkill
- c2f-reviewer-agentSkill
- c2f-shell-and-windows-trapsSkill
- c2f-system-tasksSkill
- c2f-tailwind-css-architectureSkill
- c2f-tailwind-module-migrationSkill
- c2f-variables-systemSkill
- c2f-widget-developmentSkill
- continue-mdd-batchSkill
- mdd-memory-gardeningSkill
- mdd-workflowSkill
- project-validationSkill
- raise-spec-changeSkill
- review-current-batchSkill
- start-mdd-sliceSkill
- c2f-agent-visual-inspectionSkill
- c2f-ai-featuresSkill
- c2f-architect-masterSkill
- The first 60 shown.
Does it work?
Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.
Reviews can't be read right now.
Your trail
Files you open will collect here, so you can find them again.
Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.
Now do this for your own.
Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.

