ModApi: Widget system & Footer
Ninguém assumiu esta issue ainda.
Avaliação
- Dificuldade
- 5/5
- Tempo estimado
- Mais de uma semana
- Facilidade para iniciantes
- 30/100
- Tipo de issue
- Funcionalidade
- Clareza
- Razoavelmente clara
- Status de atividade
- Ativa
- Stack de tecnologia
- typescript
- Domínio
- cli
Direção de pesquisa
Comece localizando os pontos de entrada cmd.ui.widget(), w.update() e cmd.ui.setStatus(), além do renderizador TUI que eles alimentam. Defina o escopo da renderização de widgets, dos badges de status, do theming compartilhado e do double-buffering antes de alterar qualquer coisa; considera-se concluído quando os comportamentos solicitados funcionarem sem flicker e puderem ser usados por mods.
Escrita pelo modelo de indexação a partir do texto da issue.
Descrição
Feature Description
Disclaimer: This message was synthesized by an AI from a long, unstructured Markdown file of notes accumulated while building real mods. Use cases have been kept intentionally simple and generic. If anything seems off or incoherent, feel free to ask for clarification.
1. cmd.ui.widget() — actually wired in the TUI
Problem: cmd.ui.widget() exists in the API and is used in community mods (e.g. David Thyresson's weather mod), but it's currently a no-op — the widget renders nowhere. The docs explicitly say: "Widgets are not wired into the TUI yet."
Use case: Any mod that wants to show persistent information above the editor (status, live counter, etc.) is currently blocked. The code exists; it just needs to be wired up.
2. w.update() — update a widget without recreating it
Problem: To update a widget's content, you have to .dispose() it and create a new one. This causes flickering and unnecessary boilerplate.
Use case: Any widget displaying live or periodically refreshed data needs to update its content without destroying and recreating the whole component.
const w = cmd.ui.widget({ render: () => ['loading...'] });
// later:
w.update(() => [`${count} items`]);
3. Structured cmd.ui.setStatus() with colored badges
Problem: setStatus() only supports plain text in the footer. No color, no icon, no badge styling.
Use case: A mod that tracks some state would benefit from a colored, iconified badge in the footer rather than unformatted text.
cmd.ui.setStatus([
{ text: 'active', color: 'green', icon: '●' },
{ text: '14 items', color: 'yellow', icon: '📦' },
]);
4. Theming / shared color palette across mods
Problem: Every mod hardcodes its own colors. There's no way to share a theme across multiple mods, or let the user customize the visual style.
Use case: An author publishing a set of related mods would want them to share a consistent visual identity without duplicating ANSI constants across every file. Users would benefit from being able to adjust colors to match their terminal theme.
#PART 2
4. Double-buffering — Flicker-free rendering
Problem: When a mod updates its display (widget refresh, status change, progress bar), the entire screen redraws character by character, causing visible flicker. This is the TUI equivalent of a 1995 web page. The user sees the screen flash on every update, which makes live data displays unusable.
Use case: A mod that updates a live counter or progress bar every second produces visible flickering that makes the interface feel broken. Double-buffering renders to an off-screen buffer first, then swaps atomically — zero flicker, smooth updates.
// Implicit — the TUI renderer handles it
// But needs to be enabled/wired at the framework level
cmd.ui.enableDoubleBuffer();
References: terminui (double-buffered by default — "renders to an off-screen buffer, then flushes to the terminal in one write"), Ratatui (full double-buffer with implicit flush — the standard for Rust TUIs), Ink (React reconciliation = implicit double-buffer via virtual DOM diffing). No modern TUI renders directly to stdout anymore. The old approach causes flicker because each character write triggers a terminal repaint.
Use Case
No response
Additional Context
No response
How important is this to you?
None
- Linguagem predominante
- Sem dados de linguagem
- Estrelas
- 4k
- Forks
- 350
- Métricas de merge de PRs
- Nenhum PR com merge em 30d
Guia de contribuição
Nenhum guia de contribuição indexado para este repositório
Primeiros passos
- Leia a issue inteira e depois o guia de contribuição do projeto.
- Comente na issue dizendo que vai assumir — evita que duas pessoas façam o mesmo trabalho.
- Faça um fork do repositório e trabalhe em uma branch.
- Abra um pull request que referencie o número da issue.
Mais de CommandCodeAI/command-code
-
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 68/100
CommandCodeAI/command-code#855 ·
-
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 78/100
CommandCodeAI/command-code#841 · 1 comentário ·
-
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 68/100
CommandCodeAI/command-code#655 · 1 comentário ·
-
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 68/100
CommandCodeAI/command-code#608 ·
-
Dificuldade 3/5 1-2 dias Facilidade para iniciantes 70/100
CommandCodeAI/command-code#893 ·
Todas as issues de CommandCodeAI/command-code
Issues semelhantes
-
Accept -c in more positions Abertaarea: compat bug
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 72/100
-
area: dogs bug priority: P3 silent failure test-code
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 88/100
-
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 84/100
phoenixframework/phoenix#6847 ·
-
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 70/100
-
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 85/100
hust-open-atom-club/hustmirror-cli#52 · 1 comentário ·