Communitygithub.com

w0rxbend/tui-design-systems

Sistema de design para terminais TUI com Ratatui – tokens de tema, integridade de fundo, layout e hit-testing, fallbacks de glifos e portões de screenshot determinísticos. Use ao construir um novo painel Ratatui ou redesenhar visuais de um TUI existente.

O que é tui-design-systems?

Este skill fornece um sistema de design completo para construir ou reformar interfaces de terminal (TUIs) usando a biblioteca Ratatui, em Rust. Ele define uma arquitetura de tokens de tema que mantém as paletas planas e constantes, com uma função `blend()` para cores derivadas, garantindo que todos os widgets usem apenas tokens do tema e nunca cores literais, facilitando a troca ao vivo de temas. Inclui regras para temas sem fundo (TTY), integridade de fundo com testes de buffer de células, hit-testing acoplado ao layout para cliques precisos, suporte a glifos de bloco com fallback ASCII, e verificações determinísticas via testes de renderização e geradores de screenshot. O skill suporta plataformas como Claude Code e Cursor, e seu conteúdo em SKILL.md detalha cada regra com exemplos práticos para desenvolvedores que desejam criar dashboards visuais robustos e testáveis no terminal.

Funciona com~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/w0rxbend/dot-agents/tree/HEAD/skills/frontend/tui-design-systems

Perguntar na sua IA favorita

Abre um novo chat com esta habilidade de agente já pré-carregada.

Documentação

Sistemas de design para TUI (Ratatui)

Regras para visuais TUI novos ou reformulados com Ratatui sem quebrar o modelo de interação. Para os painéis de terminal Rust deste usuário; combinar com instruções do app local no repositório.

Quando usar

  • Nova camada visual de dashboard Ratatui (temas, painéis, badges, medidores, abas).
  • Redesenhar ou reestilizar um TUI Ratatui existente, especialmente com múltiplos temas, seletor de tema ao vivo, hit-testing com mouse ou portão de screenshot determinístico no CI.

Arquitetura de tokens

  • Manter paletas planas, constantes, poucas: uma struct de função semântica por tema, trocada por ponteiro. Derivar toda cor em camadas ou mesclada como token dessas funções com uma única blend() RGB: surface e surface_hi (painel, preenchimentos de sobreposição), track (extremidade de barra vazia), fade (cor escurecida em direção ao fundo), gradient (sequência de acento), on_color (texto legível em badge, escolhido por luminância). Uma nova paleta então reestiliza todos os componentes de uma vez, conforme necessário pelo seletor de tema ao vivo.
  • Widgets nunca nomeiam Color literal, apenas tokens do tema.
  • Proteger blend() contra extremidades não-RGB: cores ANSI não têm canais, então aproximar da extremidade mais próxima, não inventar uma.

Temas sem fundo

  • Tema com fundo Color::Reset (paleta mono/TTY) deve degradar todo preenchimento: superfícies caem para Reset, badges tornam-se texto colorido entre colchetes, extremidades de barra vazia usam cor da borda, não o track derivado (que é Reset, renderiza como cor de texto padrão do terminal). Testar que pinta apenas Reset e destaque de seleção.

Integridade de fundo

  • Percorrer toda visualização × sobreposição com teste de buffer de células: cada fundo de célula deve estar na lista branca fornecida pelo tema (lista de tokens is_background), não em lista de cores fixas. Lista fixa precisa de edição por novo token e é esquecida.
  • Clear redefine células sem repintar; o que quer que desenhe depois deve reestilizar o fundo. Preencher sobreposições com superfície elevada para que flutuem acima dos painéis.
  • O Chart do ratatui pinta a área do gráfico via Canvas cujo fundo padrão é Color::Reset. Em painel colorido, definir fundo do gráfico como o preenchimento do painel, não da página: cor da página dentro de cartão com cor de superfície é o mesmo buraco, um nível acima.

Hit testing acoplado ao layout

  • Se o hit-testing com mouse espelha o layout desenhado (tiras de abas, barras segmentadas, campos de status), alterar desenho e matemática do espelho na mesma edição. Preferir testes orientados por renderização localizando cada rótulo pela coluna desenhada; asserções de retângulo escritas à mão passam enquanto o layout real coloca o widget em outro lugar.
  • Adicionar ou alargar símbolo de destaque de lista desloca o texto de cada linha. Regiões clicáveis de linha devem ter largura total ou ser recalculadas para coincidir.

Glifos

  • Precisão sub-célula do medidor usa blocos de oitavos (U+258F..U+2589), Elementos de Bloco: apenas caminho Unicode; fallback ASCII preenche células inteiras. Gráficos Braille e sparklines também: fornecer substituto ASCII, não vazar desenho de caixa no modo --ascii.
  • Ícones de colunas alinhadas devem ser símbolos BMP de largura única. Emojis têm largura dupla, deslocando silenciosamente cada coluna posterior na linha.

Verificação

  • Redesign: alterar estilos primeiro, texto depois. Testes de renderização verificam conteúdo textual, então strings intocadas mantêm suíte verde enquanto a aparência muda.
  • Portão visual: gerador de screenshot determinístico do projeto (contador de quadros fixo, sem relógio, sem RNG). Modo de saída de texto é a revisão de layout mais rápida. Commitar imagens regeneradas com alteração de fonte para que a verificação de não-derivação do CI passe.
  • Verificar fundos no buffer de células, não na imagem renderizada: o resolvedor de imagem de Color::Reset para fundo do tema esconde exatamente os buracos que a varredura de buffer pega.
  • Manter animação orientada por contador de quadros (pulsos, piscadas) determinística para screenshots reproduzíveis.

Habilidades Relacionadas