123 lines
3.1 KiB
Go
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)
|
|
}
|
|
}
|