Esta especificação define o lote de trabalho req-019 (BATCH-019) para o Engenheiro Executor. O foco é corrigir problemas de design e layout reportados no módulo de menus, implementar o suporte a target em links personalizados, divisor visual nos separadores, a correção de resolução de imagens no módulo galleries, controles de carrossel (setas, dot pagination, autoplay) e a lógica de script dinâmico dos widgets públicos (menus.widget.js e galleries.widget.js).
1. Módulo de Menus
1.1 Interface de Criação e Edição (HTML / JS / PHP)
-
Espaçamento: Adicionar espaçamento de
margin-top: 1rem;no contêiner do botão#btn-add-item-wrapperem todos os formulários (menus-adicionar.html,menus-editar.html,menus-clonar.htmlempt-breen) para evitar que fique colado na caixa de ordenação do publicador. -
Alvo de Link Personalizado (
target):-
Adicionar o campo dropdown de seleção de target (
#custom-target) contendo as opções_self(Mesma janela) e_blank(Nova aba). -
Exibir o campo alvo (
#field-custom-target) condicionalmente apenas quando o tipo selecionado forlink-custom. -
Sincronizar o estado de salvamento desse campo no schema
selected_itemspara itens do tipolink-custom. -
Suportar a edição inline deste campo na árvore visual (dropdown
edit-target).
-
-
Rótulo no Separador:
-
Exibir o campo de Rótulo do Menu (
#field-custom-label) quando o tipo selecionado forseparadorpara permitir títulos ou textos divisores opcionais. -
Sincronizar o estado e permitir a edição inline deste rótulo na árvore visual.
-
-
Mapeamento de Variáveis:
-
Adicionar a variável
targetà funçãomenus_variaveis_template()emmenus.php.
-
1.2 Widget Renderer e Templates (menus.widget.php & Templates)
-
Novo Delimitador
item-separator:-
Em
menus.widget.php, extrair o blocoitem_separatora partir da tag<!-- item-separator < --> ... <!-- item-separator > -->. -
Na recursão
menus_render_level(), se o item for do tiposeparadore o template definiritem_separator, renderizar este bloco (passando variáveis como[[item#label]]). Caso não exista o delimitador, cair no fallback anterior.
-
-
Resolução de Link Target:
-
Repassar a variável
[[item#target]]ao renderizar os links deitemeitem-parentemmenus.widget.php(padrão_selfpara páginas e links, vazio para separadores). -
Atualizar todos os 12 templates para incluir
target="@[[item#target]]@"nas tags de link<a>.
-
-
Bloco Separador nos Templates:
-
Incluir a marcação do divisor físico
<!-- item-separator < --> ... <!-- item-separator > -->em todos os 12 templates, formatados conforme cada layout (ex:<hr class="border-t border-gray-200 my-1">em dropdown/sidebar ou uma barra/espaçador em menus horizontais).
-
-
Ajustes Visuais de Layout:
-
menus-horizontal-navbar: Aumentar o espaçamento horizontal nouldegap-6paragap-8. -
menus-mobile-hamburguer: Trocar a lógica do checkbox toggle peer por um botão interativo.menu-mobile-btne adicionar a classe.menu-mobile-listna listaulde itens para controle no JavaScript do widget. -
menus-footer-colunas: Substituir a tag<span>do título do blocoitem-parentpor uma tag<a>comhref="@[[item#url]]@"etarget="@[[item#target]]@", permitindo cliques no elemento pai que possui URL. -
menus-dropdown: Adicionar a classe.group-hover-sub-triggernolidoitem-parente.group-hover-sub-menunouldo submenu para fallback de exibição manual.
-
1.3 JavaScript do Widget (menus.widget.js)
-
Hamburger Menu: Adicionar listener de clique em
.menu-mobile-btnque alterna a exibição (classeshidden/flex) da lista.menu-mobile-listcorrespondente. -
Dropdown Hover Fallback: Implementar detecção de mouseenter/mouseleave em
.group-hover-sub-triggerque alterna a exibição (classeshidden/block) do submenu.group-hover-sub-menuadjacente, prevenindo falhas caso named groups do Tailwind CSS não sejam suportados no ambiente de destino.
2. Módulo de Galerias de Imagens
2.1 Interface Administrativa (HTML / JS)
-
Parâmetros dos Controles:
-
Nos formulários (
galleries-adicionar.html,galleries-editar.html,galleries-clonar.htmlem pt-br e en), adicionar os campos de configurações de controle: -
Exibir Setas (
show_arrows- checkbox, padrão ativo). -
Exibir Pontinhos (
show_dots- checkbox, padrão ativo). -
Slide Automático (
autoplay- checkbox, padrão inativo). -
Tempo de Transição (
autoplay_speed- input numérico, padrão 3000ms, mínimo 500ms). -
Loop Infinito (
loop- checkbox, padrão ativo). -
Hidratar esses campos a partir do schema e incluí-los na serialização e preview do snapshot em
galleries.js.
-
2.2 Resolução e Renderização Pública (galleries.widget.php)
-
Resolução da Imagem Original:
-
Em
galleries_widget_resolver_item_vars(), priorizar o campocaminho(original) sobreimgSrc(thumbnail) para montar o endereço da imagem públicaimg-src, prefixando com a url-raiz caso seja relativo. OimgSrccontinua sendo usado no painel de controle (thumbnails leves).
-
-
Parâmetros de Controle no DOM:
-
Injetar no elemento de contêiner principal da galeria atributos de dados contendo os valores parametrizados (ex:
data-autoplay="true" data-speed="3000" data-loop="true").
-
-
Controles Dinâmicos no Widget:
-
Em
galleries.widget.php, processar as regiões de controles dinâmicos: -
<!-- controls-arrows < --> ... <!-- controls-arrows > -->: Renderizado apenas seshow_arrowsfor verdadeiro. -
<!-- controls-dots < --> ... <!-- controls-dots > -->: Renderizado apenas seshow_dotsfor verdadeiro. -
<!-- dot-item < --> ... <!-- dot-item > -->: Repetido para cada imagem no lote de curadoria, injetando[[dot#index]](0, 1, 2, ...).
-
2.3 Templates de Galerias (galleries-carousel & galleries-slider)
-
Modificações de Estrutura:
-
Adicionar os delimitadores condicionais de setas e dots nos templates deslizantes.
-
Adicionar classes identificadoras para a interação com o script JS (ex:
.conn2flow-gallery,.gallery-slides-wrapper,.gallery-slide,.gallery-prev,.gallery-next,.gallery-dots,.gallery-dot).
-
2.4 JavaScript do Widget (galleries.widget.js)
-
Comportamento Interativo:
-
Para cada
.conn2flow-gallerycom múltiplos itens, inicializar a lógica do carrossel/slider: -
Ler as propriedades
data-autoplay,data-speed,data-loopno contêiner. -
Implementar a navegação suave alterando o
scrollLeftdo.gallery-slides-wrappervia animação jQuery.animate({ scrollLeft: ... }). -
Tratar cliques nas setas
.gallery-nexte.gallery-prev(fazendo wrap/loop se configurado). -
Tratar cliques nos dots
.gallery-dot, sincronizando o slide e a classe ativa do pontinho. -
Implementar e gerenciar o timer de auto-play (
setInterval), limpando e reiniciando a contagem sempre que houver intervenção manual do usuário.
-
3. Simulação no Editor HTML (html-editor-interface.js)
-
Menus:
-
Atualizar o mock
MENUS_SIM_FALLBACKpara incluir exemplos de links customizados com targets (_blank) e separadores com/sem rótulos. -
Espelhar no parser de simulação a lógica do bloco
item-separatore da variável[[item#target]].
-
-
Galerias:
-
Atualizar o parser de simulação para galleries para suportar os delimitadores de setas, dots e dot-items mockados.
-
4. Alvos de IA, Prompts de Modo, Variáveis Globais e Modos de IA
4.1 Registro do Alvo de IA em Galerias
-
Modificação em
galleries.json:-
Adicionar o bloco de configuração
ai_prompts_targetseai_modespara ambos os idiomaspt-breen. -
O alvo deve possuir
id: "galleries"e nome correspondente (Galeriasem português,Galleriesem inglês). -
O modo padrão (
ai_modes) deve possuirid: "galleries",target: "galleries",default: true,version: "1.0"e checksum vazio.
-
4.2 Criação e Atualização dos Prompts do Modo de IA
-
Arquivos do Prompt de Galerias [NEW]:
-
Criar os arquivos de prompt do modo
galleries.mdem: -
O prompt deve instruir a IA a gerar templates de carrossel, slider e grade contendo:
-
Bloco de repetição obrigatória para cada imagem:
<!-- item < --> ... <!-- item > -->. -
Bloco condicional para setas:
<!-- controls-arrows < --> ... <!-- controls-arrows > -->. -
Bloco condicional para pontinhos de paginação:
<!-- controls-dots < --> ... <!-- controls-dots > -->. -
Bloco de repetição de dots:
<!-- dot-item < --> ... <!-- dot-item > -->contendo os atributosdata-index="[[dot#index]]"e a classe ativa[[dot#active-class]]. -
Atributos do contêiner principal para autoplay e loop:
data-autoplay="[[autoplay]]",data-speed="[[autoplay_speed]]",data-loop="[[loop]]". -
Bloco condicional para galeria vazia:
<!-- no-item < --> ... <!-- no-item > -->. -
Lista de variáveis disponíveis:
[[item#img-src]],[[item#caminho]],[[item#nome]],[[item#legenda]], e as globais[[show_arrows]],[[show_dots]],[[autoplay]],[[autoplay_speed]],[[loop]].
-
-
Arquivos do Prompt de Menus [MODIFY]:
-
Atualizar os arquivos de prompt do modo
menus.mdem: -
Incluir as variáveis mais recentes na listagem:
[[item#css_classes]],[[item#children]]e[[item#target]]. -
Explicar como usar
[[item#target]]nas tags de link<a>(target="[[item#target]]"). -
Explicar o bloco de repetição recursiva
[[item#children]]para submenus aninhados em<!-- item-parent < --> ... <!-- item-parent > -->. -
Explicar o bloco de divisor/separador de menu
<!-- item-separator < --> ... <!-- item-separator > -->que pode renderizar opcionalmente o rótulo do separador usando[[item#label]].
-
4.3 Diferenciação de Variáveis Globais vs Itens no Editor HTML
-
Registros em
galleries.php:-
Atualizar
galleries_variaveis_template()para retornar as variáveis de controle adicionando a flag'global' => true: -
Array('id' => 'show_arrows', 'global' => true) -
Array('id' => 'show_dots', 'global' => true) -
Array('id' => 'autoplay', 'global' => true) -
Array('id' => 'autoplay_speed', 'global' => true) -
Array('id' => 'loop', 'global' => true) -
Manter as variáveis de item (
img-src,caminho,nome,legenda) sem a flag global.
-
-
Mapeamento em
html-editor.php:-
Na função
html_editor_publisher_controls(), processar cada variável detarget_variables. Se a flagglobalfor verdadeira, definir a string da variável notemplate_mapcomo[[var_id]](sem o prefixoitem#). Caso contrário, manter[[item#var_id]].
-
-
Substituição de Variáveis no AJAX de IA (
html-editor.php):-
Na função
html_editor_ajax_ia_requests(), adicionar no switch de$targetos casos paramenusegalleriesde modo a popular a marcação{{variables}}com a listagem exata de suas variáveis de template correspondentes (itens e globais/controles), garantindo que a IA receba a lista de placeholders válidos.
-
4.4 Resolução de Variáveis no Widget de Galerias (galleries.widget.php)
-
Substituição Global de Variáveis:
-
No renderizador público (
galleries_widget_render_inline), após renderizar os itens e montar o HTML base, realizar a substituição de todas as variáveis globais de controle no HTML resultante: -
[[show_arrows]]/@[[show_arrows]]@->($schema['show_arrows'] ?? true) ? 'true' : 'false' -
[[show_dots]]/@[[show_dots]]@->($schema['show_dots'] ?? true) ? 'true' : 'false' -
[[autoplay]]/@[[autoplay]]@->($schema['autoplay'] ?? false) ? 'true' : 'false' -
[[autoplay_speed]]/@[[autoplay_speed]]@->(int)($schema['autoplay_speed'] ?? 3000) -
[[loop]]/@[[loop]]@->($schema['loop'] ?? true) ? 'true' : 'false'
-
5. Regras e Versionamento
-
RECURSOS: Executar a rotina de atualização de recursos (
atualizacao-dados-recursos.php) para registrar novos templates, componentes de simulação, alvos/modos de IA e variáveis no banco. -
RESTRIÇÃO: Sem commits ou pushes automáticos no Git; as alterações permanecem locais no executor.