132 lines
3.7 KiB
Go
132 lines
3.7 KiB
Go
package ui
|
|
|
|
import "github.com/charmbracelet/lipgloss"
|
|
|
|
// Color definitions (Hex palette)
|
|
const (
|
|
ColorBg = "#0b1017" // Dark slate background
|
|
ColorCardBg = "#121a24" // Dark grey cards
|
|
ColorBorder = "#2e3b4e" // Dark slate borders
|
|
ColorText = "#e0ecf6" // Light grey text
|
|
ColorSubdued = "#8c9ba5" // Subdued slate text
|
|
ColorCyan = "#00ffd2" // Bright teal/cyan accent
|
|
ColorPink = "#ff2a85" // Hot pink accent
|
|
ColorGreen = "#3cd58c" // Vibrant green (completed)
|
|
ColorYellow = "#f4b942" // Amber/yellow (downloading)
|
|
ColorRed = "#ff5555" // Bright red (error/missing)
|
|
)
|
|
|
|
var (
|
|
// Base styles
|
|
StyleBg = lipgloss.NewStyle().
|
|
Background(lipgloss.Color(ColorBg)).
|
|
Foreground(lipgloss.Color(ColorText))
|
|
|
|
StyleTitle = lipgloss.NewStyle().
|
|
Bold(true).
|
|
Foreground(lipgloss.Color(ColorCyan)).
|
|
Border(lipgloss.DoubleBorder(), true).
|
|
BorderForeground(lipgloss.Color(ColorCyan)).
|
|
Padding(0, 2).
|
|
MarginBottom(1)
|
|
|
|
StyleHeader = lipgloss.NewStyle().
|
|
Bold(true).
|
|
Foreground(lipgloss.Color(ColorPink)).
|
|
MarginBottom(1)
|
|
|
|
// Status states
|
|
StyleStatusIdle = lipgloss.NewStyle().
|
|
Bold(true).
|
|
Foreground(lipgloss.Color(ColorSubdued))
|
|
|
|
StyleStatusActive = lipgloss.NewStyle().
|
|
Bold(true).
|
|
Foreground(lipgloss.Color(ColorYellow))
|
|
|
|
StyleStatusDone = lipgloss.NewStyle().
|
|
Bold(true).
|
|
Foreground(lipgloss.Color(ColorGreen))
|
|
|
|
StyleStatusError = lipgloss.NewStyle().
|
|
Bold(true).
|
|
Foreground(lipgloss.Color(ColorRed))
|
|
|
|
// KPI Cards
|
|
StyleCard = lipgloss.NewStyle().
|
|
Background(lipgloss.Color(ColorCardBg)).
|
|
Border(lipgloss.RoundedBorder()).
|
|
BorderForeground(lipgloss.Color(ColorBorder)).
|
|
Padding(0, 1).
|
|
Align(lipgloss.Left)
|
|
|
|
StyleCardActive = StyleCard.
|
|
BorderForeground(lipgloss.Color(ColorCyan))
|
|
|
|
StyleCardTitle = lipgloss.NewStyle().
|
|
Bold(true).
|
|
Foreground(lipgloss.Color(ColorSubdued))
|
|
|
|
StyleCardValue = lipgloss.NewStyle().
|
|
Bold(true).
|
|
Foreground(lipgloss.Color(ColorText))
|
|
|
|
// Tabs
|
|
StyleTab = lipgloss.NewStyle().
|
|
Padding(0, 2).
|
|
Background(lipgloss.Color(ColorCardBg)).
|
|
Foreground(lipgloss.Color(ColorSubdued)).
|
|
Border(lipgloss.NormalBorder(), false, true, false, false).
|
|
BorderForeground(lipgloss.Color(ColorBorder))
|
|
|
|
StyleActiveTab = lipgloss.NewStyle().
|
|
Bold(true).
|
|
Padding(0, 2).
|
|
Background(lipgloss.Color(ColorCardBg)).
|
|
Foreground(lipgloss.Color(ColorCyan)).
|
|
Border(lipgloss.NormalBorder(), true, true, false, true).
|
|
BorderForeground(lipgloss.Color(ColorCyan))
|
|
|
|
StyleTabsRow = lipgloss.NewStyle().
|
|
Border(lipgloss.NormalBorder(), false, false, true, false).
|
|
BorderForeground(lipgloss.Color(ColorBorder)).
|
|
MarginBottom(1)
|
|
|
|
// Input form
|
|
StyleInputLabel = lipgloss.NewStyle().
|
|
Bold(true).
|
|
Foreground(lipgloss.Color(ColorCyan)).
|
|
Width(15)
|
|
|
|
StyleInputFocused = lipgloss.NewStyle().
|
|
Foreground(lipgloss.Color(ColorCyan)).
|
|
BorderForeground(lipgloss.Color(ColorCyan))
|
|
|
|
StyleInputUnfocused = lipgloss.NewStyle().
|
|
Foreground(lipgloss.Color(ColorSubdued)).
|
|
BorderForeground(lipgloss.Color(ColorBorder))
|
|
|
|
// Help bar
|
|
StyleHelp = lipgloss.NewStyle().
|
|
Foreground(lipgloss.Color(ColorSubdued)).
|
|
MarginTop(1)
|
|
|
|
StyleKey = lipgloss.NewStyle().
|
|
Bold(true).
|
|
Foreground(lipgloss.Color(ColorPink))
|
|
|
|
// Tables
|
|
StyleTableHeader = lipgloss.NewStyle().
|
|
Bold(true).
|
|
Foreground(lipgloss.Color(ColorCyan))
|
|
|
|
StyleTableRowSelected = lipgloss.NewStyle().
|
|
Background(lipgloss.Color(ColorBorder)).
|
|
Foreground(lipgloss.Color(ColorCyan)).
|
|
Bold(true)
|
|
|
|
// Grid colors
|
|
StylePieceCompleted = lipgloss.NewStyle().Foreground(lipgloss.Color(ColorGreen))
|
|
StylePieceDownloading = lipgloss.NewStyle().Foreground(lipgloss.Color(ColorYellow))
|
|
StylePieceMissing = lipgloss.NewStyle().Foreground(lipgloss.Color(ColorBorder))
|
|
)
|