Files
Mester Gábor 2dd6519168 Initial commit
2026-03-19 07:12:03 +01:00

123 lines
3.1 KiB
Go

package tui
import (
"strings"
"github.com/charmbracelet/lipgloss"
)
// Palette (Tokyo Night inspired)
var (
colorPurple = lipgloss.Color("#7C71FF")
colorGreen = lipgloss.Color("#9ECE6A")
colorYellow = lipgloss.Color("#E0AF68")
colorRed = lipgloss.Color("#F7768E")
colorBlue = lipgloss.Color("#7AA2F7")
colorCyan = lipgloss.Color("#73DACA")
colorGray = lipgloss.Color("#565F89")
colorBorder = lipgloss.Color("#414868")
colorFg = lipgloss.Color("#C0CAF5")
)
var (
headerStyle = lipgloss.NewStyle().
Background(colorPurple).
Foreground(lipgloss.Color("#FFFFFF")).
Bold(true).
Padding(0, 2)
subHeaderStyle = lipgloss.NewStyle().
Background(lipgloss.Color("#414868")).
Foreground(colorFg).
Padding(0, 2)
footerStyle = lipgloss.NewStyle().
Foreground(colorGray)
panelStyle = lipgloss.NewStyle().
Border(lipgloss.RoundedBorder()).
BorderForeground(colorBorder)
activePanelStyle = lipgloss.NewStyle().
Border(lipgloss.RoundedBorder()).
BorderForeground(colorPurple)
folderItemStyle = lipgloss.NewStyle().
Foreground(colorPurple).
Bold(true)
selectedItemStyle = lipgloss.NewStyle().
Foreground(colorPurple).
Bold(true)
dimItemStyle = lipgloss.NewStyle().
Foreground(colorGray)
statusOKStyle = lipgloss.NewStyle().
Foreground(colorGreen).
Bold(true)
statusErrStyle = lipgloss.NewStyle().
Foreground(colorRed).
Bold(true)
labelStyle = lipgloss.NewStyle().
Foreground(colorGray)
wizardBoxStyle = lipgloss.NewStyle().
Border(lipgloss.RoundedBorder()).
BorderForeground(colorPurple).
Padding(1, 2)
hintStyle = lipgloss.NewStyle().
Foreground(colorGray).
Italic(true)
)
// envColorFor maps an environment name to its header accent colour.
// prod/production → red (danger), staging → yellow, local/dev → green, else → purple.
func envColorFor(name string) lipgloss.Color {
switch strings.ToLower(name) {
case "prod", "production", "live", "master":
return colorRed
case "staging", "stage", "uat", "preprod":
return colorYellow
case "local", "dev", "development", "test":
return colorGreen
default:
return colorPurple
}
}
// methodStyle returns a style coloured by HTTP verb.
func methodStyle(method string) lipgloss.Style {
switch method {
case "GET":
return lipgloss.NewStyle().Foreground(colorGreen).Bold(true)
case "POST":
return lipgloss.NewStyle().Foreground(colorYellow).Bold(true)
case "PUT":
return lipgloss.NewStyle().Foreground(colorBlue).Bold(true)
case "DELETE":
return lipgloss.NewStyle().Foreground(colorRed).Bold(true)
case "PATCH":
return lipgloss.NewStyle().Foreground(colorCyan).Bold(true)
default:
return lipgloss.NewStyle().Foreground(colorGray)
}
}
// statusCodeStyle colours HTTP status codes (2xx green, 3xx blue, 4xx/5xx red).
func statusCodeStyle(code int) lipgloss.Style {
switch {
case code >= 200 && code < 300:
return lipgloss.NewStyle().Foreground(colorGreen).Bold(true)
case code >= 300 && code < 400:
return lipgloss.NewStyle().Foreground(colorBlue).Bold(true)
case code >= 400:
return lipgloss.NewStyle().Foreground(colorRed).Bold(true)
default:
return lipgloss.NewStyle().Foreground(colorGray)
}
}