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}