Ztorrent/ui/styles.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))
)