main
6d86999 ยท 6 months ago 26 commits
  1package ui
  2
  3import (
  4	"strings"
  5
  6	"github.com/charmbracelet/lipgloss"
  7)
  8
  9type Styles struct {
 10	Title    lipgloss.Style
 11	Subtitle lipgloss.Style
 12
 13	ActiveStatus   lipgloss.Style
 14	InactiveStatus lipgloss.Style
 15	StatusLabel    lipgloss.Style
 16
 17	SectionBorder       lipgloss.Style
 18	SectionTitle        lipgloss.Style
 19	SectionBorderActive lipgloss.Style
 20
 21	ActiveCursorPointer lipgloss.Style
 22
 23	Menu lipgloss.Style
 24
 25	AllowPolicy  lipgloss.Style
 26	DenyPolicy   lipgloss.Style
 27	RejectPolicy lipgloss.Style
 28
 29	Label lipgloss.Style
 30	Value lipgloss.Style
 31
 32	Footer    lipgloss.Style
 33	FooterKey lipgloss.Style
 34
 35	Error lipgloss.Style
 36}
 37
 38func NewStyles() Styles {
 39	var (
 40		mauve    = lipgloss.Color("#cba6f7")
 41		red      = lipgloss.Color("#f38ba8")
 42		maroon   = lipgloss.Color("#eba0ac")
 43		peach    = lipgloss.Color("#fab387")
 44		yellow   = lipgloss.Color("#f9e2af")
 45		green    = lipgloss.Color("#a6e3a1")
 46		sky      = lipgloss.Color("#89dceb")
 47		lavender = lipgloss.Color("#b4befe")
 48
 49		text     = lipgloss.Color("#cdd6f4")
 50		subtext0 = lipgloss.Color("#a6adc8")
 51		overlay2 = lipgloss.Color("#9399b2")
 52		overlay1 = lipgloss.Color("#7f849c")
 53		surface2 = lipgloss.Color("#585b70")
 54	)
 55
 56	return Styles{
 57		Title: lipgloss.NewStyle().
 58			Bold(true).
 59			Foreground(mauve).
 60			Align(lipgloss.Center),
 61
 62		Subtitle: lipgloss.NewStyle().
 63			Foreground(overlay2).
 64			Italic(true).
 65			Align(lipgloss.Center),
 66
 67		ActiveStatus: lipgloss.NewStyle().
 68			Bold(true).
 69			Foreground(green),
 70
 71		InactiveStatus: lipgloss.NewStyle().
 72			Bold(true).
 73			Foreground(red),
 74
 75		ActiveCursorPointer: lipgloss.NewStyle().
 76			Foreground(yellow).
 77			Bold(true),
 78
 79		StatusLabel: lipgloss.NewStyle().
 80			Foreground(text).
 81			Bold(true),
 82
 83		SectionBorder: lipgloss.NewStyle().
 84			Border(lipgloss.RoundedBorder()).
 85			BorderForeground(surface2),
 86
 87		SectionBorderActive: lipgloss.NewStyle().
 88			Border(lipgloss.RoundedBorder()).
 89			BorderForeground(mauve),
 90
 91		Menu: lipgloss.NewStyle().
 92			Border(lipgloss.RoundedBorder()).
 93			BorderForeground(lipgloss.Color(yellow)).
 94			Padding(1, 2),
 95
 96		SectionTitle: lipgloss.NewStyle().
 97			Bold(true).
 98			Foreground(lavender).
 99			Underline(true),
100
101		AllowPolicy: lipgloss.NewStyle().
102			Bold(true).
103			Foreground(green),
104
105		DenyPolicy: lipgloss.NewStyle().
106			Bold(true).
107			Foreground(red),
108
109		RejectPolicy: lipgloss.NewStyle().
110			Bold(true).
111			Foreground(peach),
112
113		Label: lipgloss.NewStyle().
114			Foreground(subtext0),
115
116		Value: lipgloss.NewStyle().
117			Foreground(text).
118			Bold(true),
119
120		Footer: lipgloss.NewStyle().
121			Foreground(overlay1).
122			PaddingBottom(1).
123			Align(lipgloss.Center),
124
125		FooterKey: lipgloss.NewStyle().
126			Foreground(sky).
127			Bold(true),
128
129		Error: lipgloss.NewStyle().
130			Foreground(red).
131			Bold(true).
132			Border(lipgloss.RoundedBorder()).
133			BorderForeground(maroon).
134			Padding(1, 2),
135	}
136}
137
138func GetPolicyStyle(styles Styles, policy string) lipgloss.Style {
139	switch strings.ToUpper(policy) {
140	case "ALLOW":
141		return styles.AllowPolicy
142	case "DENY":
143		return styles.DenyPolicy
144	case "REJECT":
145		return styles.RejectPolicy
146	default:
147		return styles.Value
148	}
149}