ADR-0009: Componente Visual Modular - FeatureGrid | Wiki
ADR-0009: Componente Visual Modular - FeatureGrid
Este documento especifica a decisão de design sobre a implementação do componente visual FeatureGrid para o layout "Site" do gerador estático gbr_ssg.
1. Contexto e Motivação
O componente FeatureGrid renderiza uma grade de cartões com diferenciais, funcionalidades ou proposições de valor. Como o modelo de dados PageMetadata atual armazena as seções do TOML como uma lista de dicionários de texto plano (Dict(String, String)), precisamos definir uma convenção declarativa clara e previsível no TOML para codificar múltiplos itens em uma única seção sem quebrar a assinatura atual do ssg_core.
2. Decisão Arquitetural
Optamos por utilizar a **Estratégia de Chaves Indexadas Sequenciais (item_N_title e item_N_description)** dentro do dicionário da seção.
-
*Estrutura Declarativa no TOML:* No Frontmatter TOML, os cartões da grade serão declarados com o prefixo
item_N_:toml [[sections]] type = "feature_grid" title = "Por que escolher a Gleam-BR?" item_1_title = "Segurança Total" item_1_description = "Garantias em tempo de compilação sem exceções em runtime." item_2_title = "Poder da BEAM" item_2_description = "Concorrência com tolerância a falhas e alta escalabilidade." item_3_title = "Simplicidade Elegante" item_3_description = "Sintaxe limpa, previsível e sem surpresas." -
**Parsing Recursivo (
parse):** A funçãoparse(section: Dict(String, String)) -> Result(FeatureGridProps, String)irá: - Extrair o campo opcionaltitleda seção (Option(String)). - Executar uma iteração recursiva buscando as chavesitem_1_titleeitem_1_description, incrementando o índice ($i = 1, 2, 3, \dots$) até encontrar o primeiro índice ausente. - Retornar a estrutura fortemente tipadaFeatureGridProps(title: Option(String), items: List(FeatureItem)). - Se nenhum itemitem_1_...for encontrado, retorna umErrorindicando que a grade necessita de pelo menos 1 item válido. -
*Vantagens da Abordagem:* - *Zero Mudanças na Infraestrutura Core:* Preserva a assinatura
Dict(String, String)emssg_core, sem necessidade de refatorar o decodificador TOML genérico. - *Simplicidade Declarativa:* Fácil para redatores e editores entenderem e ampliarem o número de diferenciais no TOML.
3. Requisitos EARS
*Requisitos Ubíquos (Ubiquitous Requirements)*
- *UBQ-01 (Extração de Grade Indexada):* O parser do FeatureGrid DEVE iterar pelas chaves indexadas sequencialmente (item_1_..., item_2_...) e construir a lista tipada List(FeatureItem).
- *UBQ-02 (Responsividade da Grade):* O contêiner da grade DEVE aplicar regras CSS de Tailwind para adaptar o layout visual: 1 coluna em telas móbiles (grid-cols-1) e 3 colunas em telas médias e superiores (md:grid-cols-3).
- *UBQ-03 (Título Opcional da Seção):* Se a chave title estiver ausente no dicionário da seção (resolvida para None), a renderização do título principal <h2 class="..."> DEVE ser omitida silenciosamente sem afetar a exibição da grade de cartões (fail-soft).