gbr/ui/theme/internal/engine
🔩 🎨 GBR: UI Theme Engine Module
engine.gleam:Interpretador obrigatório do nosso vocabulário.theme.gleam:Vocabulário semântico visual dos componentes da interface.
Olá meu amigo, aqui temos o módulo para trabalharmos com o nosso vocabulário de componentes visuais, de forma segura e padronizada. Este módulo impede que nós possamos desenvolver um novo componente na biblioteca e errar a orderm de precedencia aplicada dos nossos estilos nos componentes entre outras coisas.
Asseguramos matematicamente que nosso vocabulário seja traduzido adequadamente para outra linguagem, sem termos efeitos colaterais indesejados.
🏆🚪🔐
Types
🎨 Lista de design tokens.
- token: Tipo fantasma representando um design token.
pub type Tokens(token) =
List(token)
🔒 Nossa representação do tema utilizado.
Aqui utilizamos o padrão da programação funcional chamado Padrão Interpretador (Interpreter Pattern) ou Avaliação de AST. Aqui temos a linguagem própria da solução.
- Model + Interpreter
engine.compose: Esse é o nosso interpretador.
A Estrutura: Cada componente preenche apenas o que precisa.
- base: Tokens da base do estilo.
- design: Tokens semânticos, de aparência e estado.
- size: Tokens de tamanho.
- shape: Tokens de superfície.
- elevation: Tokens de elevação.
- stacking: Tokens de empilhamento.
- direction: Tokens de direção.
pub opaque type UIEngine(token)
Values
pub fn new(base: List(token)) -> UIEngine(token)
Criar uma nova representação do tema.
Veja mais sobre em core/theme.gleam.
- base: Atributos da base do componente visual.
- size: Atributos de tamanho do componente visual.
- shape: Atributos do formato do componente visual.
- elevation: Atributos da sensação de elevação do componente visual.
- stacking: Atributes do empilhamento do componente visual.
- cosmetics: Atributes do estilo visual do componente.
pub fn resolve(engine: UIEngine(token)) -> List(token)
Compõem o vocabulário em estilos visuais ordenados e padronizados p/ serem utilizado e convertidos à interface desejada. Nesta função estamos convertendo nosso DesignToken p/ a estrutura que nosso atual DesignToken baseado em String Typed -> List(#(String, Bool)).
Mesma assinatura dos argumentos em
lustre/attribute.classes(args)
A BLINDAGEM (O Template Method)