Initial commit
This commit is contained in:
@@ -0,0 +1,122 @@
|
||||
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)
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user