phase 0.3
This commit is contained in:
commit
4a94bfc4e7
52 changed files with 11653 additions and 0 deletions
182
internal/style/style.go
Normal file
182
internal/style/style.go
Normal file
|
|
@ -0,0 +1,182 @@
|
|||
package style
|
||||
|
||||
import "github.com/charmbracelet/lipgloss"
|
||||
|
||||
// Palette
|
||||
const (
|
||||
ColorSky = lipgloss.Color("#00BFFF")
|
||||
ColorRunway = lipgloss.Color("#4A4A4A")
|
||||
ColorGold = lipgloss.Color("#FFD700")
|
||||
ColorGreen = lipgloss.Color("#39D353")
|
||||
ColorRed = lipgloss.Color("#FF4444")
|
||||
ColorMuted = lipgloss.Color("#626262")
|
||||
ColorWhite = lipgloss.Color("#F5F5F5")
|
||||
ColorDark = lipgloss.Color("#1A1A2E")
|
||||
ColorPanel = lipgloss.Color("#16213E")
|
||||
ColorHighlight = lipgloss.Color("#0F3460")
|
||||
ColorAccent = lipgloss.Color("#E94560")
|
||||
ColorFuel = lipgloss.Color("#FF8C00")
|
||||
ColorPassenger = lipgloss.Color("#7EC8E3")
|
||||
ColorCash = lipgloss.Color("#FFD700")
|
||||
)
|
||||
|
||||
// Base Styles
|
||||
var (
|
||||
Bold = lipgloss.NewStyle().Bold(true)
|
||||
|
||||
Title = lipgloss.NewStyle().
|
||||
Bold(true).
|
||||
Foreground(ColorSky).
|
||||
BorderStyle(lipgloss.DoubleBorder()).
|
||||
BorderForeground(ColorSky).
|
||||
Padding(0, 2).
|
||||
Align(lipgloss.Center)
|
||||
|
||||
Subtitle = lipgloss.NewStyle().
|
||||
Foreground(ColorMuted).
|
||||
Italic(true)
|
||||
|
||||
// Panels
|
||||
Panel = lipgloss.NewStyle().
|
||||
Border(lipgloss.RoundedBorder()).
|
||||
BorderForeground(ColorHighlight).
|
||||
Padding(0, 1)
|
||||
|
||||
PanelFocused = lipgloss.NewStyle().
|
||||
Border(lipgloss.RoundedBorder()).
|
||||
BorderForeground(ColorSky).
|
||||
Padding(0, 1)
|
||||
|
||||
PanelHeader = lipgloss.NewStyle().
|
||||
Bold(true).
|
||||
Foreground(ColorSky).
|
||||
BorderStyle(lipgloss.NormalBorder()).
|
||||
BorderBottom(true).
|
||||
BorderForeground(ColorHighlight).
|
||||
MarginBottom(1)
|
||||
|
||||
// Status bar
|
||||
StatusBar = lipgloss.NewStyle().
|
||||
Background(ColorHighlight).
|
||||
Foreground(ColorWhite).
|
||||
Padding(0, 1)
|
||||
|
||||
StatusBarKey = lipgloss.NewStyle().
|
||||
Background(ColorAccent).
|
||||
Foreground(ColorWhite).
|
||||
Padding(0, 1).
|
||||
Bold(true)
|
||||
|
||||
// Resource chips
|
||||
FuelChip = lipgloss.NewStyle().
|
||||
Foreground(ColorFuel).
|
||||
Bold(true)
|
||||
|
||||
PassengerChip = lipgloss.NewStyle().
|
||||
Foreground(ColorPassenger).
|
||||
Bold(true)
|
||||
|
||||
CashChip = lipgloss.NewStyle().
|
||||
Foreground(ColorCash).
|
||||
Bold(true)
|
||||
|
||||
// Menu / list items
|
||||
MenuItem = lipgloss.NewStyle().
|
||||
Foreground(ColorWhite).
|
||||
PaddingLeft(2)
|
||||
|
||||
MenuItemSelected = lipgloss.NewStyle().
|
||||
Foreground(ColorSky).
|
||||
Bold(true).
|
||||
PaddingLeft(1).
|
||||
SetString("> ")
|
||||
|
||||
// Plane status colors
|
||||
StatusIdle = lipgloss.NewStyle().Foreground(ColorGreen)
|
||||
StatusFly = lipgloss.NewStyle().Foreground(ColorSky)
|
||||
StatusMaint = lipgloss.NewStyle().Foreground(ColorGold)
|
||||
StatusBoard = lipgloss.NewStyle().Foreground(ColorPassenger)
|
||||
StatusTaxi = lipgloss.NewStyle().Foreground(ColorFuel)
|
||||
|
||||
// Table
|
||||
TableHeader = lipgloss.NewStyle().
|
||||
Bold(true).
|
||||
Foreground(ColorSky).
|
||||
BorderStyle(lipgloss.NormalBorder()).
|
||||
BorderBottom(true).
|
||||
BorderForeground(ColorMuted)
|
||||
|
||||
TableRow = lipgloss.NewStyle().Foreground(ColorWhite)
|
||||
|
||||
TableRowAlt = lipgloss.NewStyle().
|
||||
Foreground(ColorWhite).
|
||||
Background(lipgloss.Color("#0D1B2A"))
|
||||
|
||||
// Alerts
|
||||
Success = lipgloss.NewStyle().
|
||||
Foreground(ColorGreen).
|
||||
Bold(true).
|
||||
SetString("✓ ")
|
||||
|
||||
Error = lipgloss.NewStyle().
|
||||
Foreground(ColorRed).
|
||||
Bold(true).
|
||||
SetString("✗ ")
|
||||
|
||||
Warning = lipgloss.NewStyle().
|
||||
Foreground(ColorGold).
|
||||
Bold(true).
|
||||
SetString("⚠ ")
|
||||
|
||||
Info = lipgloss.NewStyle().
|
||||
Foreground(ColorSky).
|
||||
Bold(true).
|
||||
SetString("ℹ ")
|
||||
|
||||
// Help text
|
||||
HelpKey = lipgloss.NewStyle().Foreground(ColorSky).Bold(true)
|
||||
HelpDesc = lipgloss.NewStyle().Foreground(ColorMuted)
|
||||
|
||||
// Muted / dimmed
|
||||
Muted = lipgloss.NewStyle().Foreground(ColorMuted)
|
||||
)
|
||||
|
||||
// Plane status badge
|
||||
func PlaneStatusStyle(status string) lipgloss.Style {
|
||||
switch status {
|
||||
case "idle":
|
||||
return StatusIdle
|
||||
case "flying":
|
||||
return StatusFly
|
||||
case "maintenance":
|
||||
return StatusMaint
|
||||
case "boarding":
|
||||
return StatusBoard
|
||||
case "taxiing":
|
||||
return StatusTaxi
|
||||
default:
|
||||
return Muted
|
||||
}
|
||||
}
|
||||
|
||||
// Resource bar (e.g. fuel/passenger capacity)
|
||||
func ResourceBar(current, max int, width int, color lipgloss.Color) string {
|
||||
if max == 0 {
|
||||
return ""
|
||||
}
|
||||
filled := (current * width) / max
|
||||
if filled > width {
|
||||
filled = width
|
||||
}
|
||||
bar := lipgloss.NewStyle().Foreground(color).Render(repeat("█", filled)) +
|
||||
lipgloss.NewStyle().Foreground(ColorMuted).Render(repeat("░", width-filled))
|
||||
return bar
|
||||
}
|
||||
|
||||
func repeat(s string, n int) string {
|
||||
result := ""
|
||||
for i := 0; i < n; i++ {
|
||||
result += s
|
||||
}
|
||||
return result
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue