feat: Add charmbracelet TUI for gt feed (gt-u7dxq)
- Add bubbletea and bubbles dependencies - Create internal/tui/feed package with: - model.go: Main bubbletea model with agent tree and event stream - view.go: Rendering logic with lipgloss styling - keys.go: Vim-style key bindings (j/k, tab, /, q) - styles.go: Color palette and component styles - events.go: Event source from bd activity - Update gt feed to use TUI by default (--plain for text mode) - TUI features: agent tree by role, event stream, keyboard nav Closes gt-be0as, gt-lexye, gt-1uhmj 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
118
internal/tui/feed/styles.go
Normal file
118
internal/tui/feed/styles.go
Normal file
@@ -0,0 +1,118 @@
|
||||
// Package feed provides a TUI for the Gas Town activity feed.
|
||||
package feed
|
||||
|
||||
import "github.com/charmbracelet/lipgloss"
|
||||
|
||||
// Color palette
|
||||
var (
|
||||
colorPrimary = lipgloss.Color("12") // Blue
|
||||
colorSuccess = lipgloss.Color("10") // Green
|
||||
colorWarning = lipgloss.Color("11") // Yellow
|
||||
colorError = lipgloss.Color("9") // Red
|
||||
colorDim = lipgloss.Color("8") // Gray
|
||||
colorHighlight = lipgloss.Color("14") // Cyan
|
||||
colorAccent = lipgloss.Color("13") // Magenta
|
||||
)
|
||||
|
||||
// Styles for the feed TUI
|
||||
var (
|
||||
// Header styles
|
||||
HeaderStyle = lipgloss.NewStyle().
|
||||
Bold(true).
|
||||
Foreground(colorPrimary).
|
||||
Padding(0, 1)
|
||||
|
||||
TitleStyle = lipgloss.NewStyle().
|
||||
Bold(true).
|
||||
Foreground(lipgloss.Color("15"))
|
||||
|
||||
FilterStyle = lipgloss.NewStyle().
|
||||
Foreground(colorDim)
|
||||
|
||||
// Agent tree styles
|
||||
TreePanelStyle = lipgloss.NewStyle().
|
||||
Border(lipgloss.RoundedBorder()).
|
||||
BorderForeground(colorDim).
|
||||
Padding(0, 1)
|
||||
|
||||
RigStyle = lipgloss.NewStyle().
|
||||
Bold(true).
|
||||
Foreground(colorPrimary)
|
||||
|
||||
RoleStyle = lipgloss.NewStyle().
|
||||
Foreground(colorAccent)
|
||||
|
||||
AgentNameStyle = lipgloss.NewStyle().
|
||||
Foreground(lipgloss.Color("15"))
|
||||
|
||||
AgentActiveStyle = lipgloss.NewStyle().
|
||||
Foreground(colorSuccess)
|
||||
|
||||
AgentIdleStyle = lipgloss.NewStyle().
|
||||
Foreground(colorDim)
|
||||
|
||||
// Event stream styles
|
||||
StreamPanelStyle = lipgloss.NewStyle().
|
||||
Border(lipgloss.RoundedBorder()).
|
||||
BorderForeground(colorDim).
|
||||
Padding(0, 1)
|
||||
|
||||
TimestampStyle = lipgloss.NewStyle().
|
||||
Foreground(colorDim)
|
||||
|
||||
EventCreateStyle = lipgloss.NewStyle().
|
||||
Foreground(colorSuccess)
|
||||
|
||||
EventUpdateStyle = lipgloss.NewStyle().
|
||||
Foreground(colorPrimary)
|
||||
|
||||
EventCompleteStyle = lipgloss.NewStyle().
|
||||
Foreground(colorSuccess).
|
||||
Bold(true)
|
||||
|
||||
EventFailStyle = lipgloss.NewStyle().
|
||||
Foreground(colorError).
|
||||
Bold(true)
|
||||
|
||||
EventDeleteStyle = lipgloss.NewStyle().
|
||||
Foreground(colorWarning)
|
||||
|
||||
// Status bar styles
|
||||
StatusBarStyle = lipgloss.NewStyle().
|
||||
Background(lipgloss.Color("236")).
|
||||
Foreground(colorDim).
|
||||
Padding(0, 1)
|
||||
|
||||
HelpKeyStyle = lipgloss.NewStyle().
|
||||
Foreground(colorHighlight).
|
||||
Bold(true)
|
||||
|
||||
HelpDescStyle = lipgloss.NewStyle().
|
||||
Foreground(colorDim)
|
||||
|
||||
// Focus indicator
|
||||
FocusedBorderStyle = lipgloss.NewStyle().
|
||||
Border(lipgloss.RoundedBorder()).
|
||||
BorderForeground(colorPrimary).
|
||||
Padding(0, 1)
|
||||
|
||||
// Role icons
|
||||
RoleIcons = map[string]string{
|
||||
"mayor": "🎩",
|
||||
"witness": "👁",
|
||||
"refinery": "🏭",
|
||||
"crew": "👷",
|
||||
"polecat": "😺",
|
||||
"deacon": "🔔",
|
||||
}
|
||||
|
||||
// Event symbols
|
||||
EventSymbols = map[string]string{
|
||||
"create": "+",
|
||||
"update": "→",
|
||||
"complete": "✓",
|
||||
"fail": "✗",
|
||||
"delete": "⊘",
|
||||
"pin": "📌",
|
||||
}
|
||||
)
|
||||
Reference in New Issue
Block a user