1package styles
2
3import (
4 "github.com/charmbracelet/lipgloss"
5)
6
7// XXX: For now, this is in its own package so that it can be shared between
8// different packages without incurring an illegal import cycle.
9
10// Styles defines styles for the UI.
11type Styles struct {
12 ActiveBorderColor lipgloss.Color
13 InactiveBorderColor lipgloss.Color
14
15 App lipgloss.Style
16 Header lipgloss.Style
17
18 Menu lipgloss.Style
19 MenuCursor lipgloss.Style
20 MenuItem lipgloss.Style
21 MenuLastUpdate lipgloss.Style
22
23 // Selection page styles
24 SelectorBox lipgloss.Style
25 ReadmeBox lipgloss.Style
26
27 RepoTitleBorder lipgloss.Border
28 RepoNoteBorder lipgloss.Border
29 RepoBodyBorder lipgloss.Border
30
31 RepoTitle lipgloss.Style
32 RepoTitleBox lipgloss.Style
33 RepoNote lipgloss.Style
34 RepoNoteBox lipgloss.Style
35 RepoBody lipgloss.Style
36
37 Footer lipgloss.Style
38 Branch lipgloss.Style
39 HelpKey lipgloss.Style
40 HelpValue lipgloss.Style
41 HelpDivider lipgloss.Style
42
43 Error lipgloss.Style
44 ErrorTitle lipgloss.Style
45 ErrorBody lipgloss.Style
46
47 AboutNoReadme lipgloss.Style
48
49 LogItemSelector lipgloss.Style
50 LogItemActive lipgloss.Style
51 LogItemInactive lipgloss.Style
52 LogItemHash lipgloss.Style
53 LogCommit lipgloss.Style
54 LogCommitHash lipgloss.Style
55 LogCommitAuthor lipgloss.Style
56 LogCommitDate lipgloss.Style
57 LogCommitBody lipgloss.Style
58 LogCommitStatsAdd lipgloss.Style
59 LogCommitStatsDel lipgloss.Style
60 LogPaginator lipgloss.Style
61
62 RefItemSelector lipgloss.Style
63 RefItemActive lipgloss.Style
64 RefItemInactive lipgloss.Style
65 RefItemBranch lipgloss.Style
66 RefItemTag lipgloss.Style
67 RefPaginator lipgloss.Style
68
69 TreeItemSelector lipgloss.Style
70 TreeItemActive lipgloss.Style
71 TreeItemInactive lipgloss.Style
72 TreeFileDir lipgloss.Style
73 TreeFileMode lipgloss.Style
74 TreeFileSize lipgloss.Style
75 TreeFileContent lipgloss.Style
76 TreePaginator lipgloss.Style
77 TreeNoItems lipgloss.Style
78
79 Spinner lipgloss.Style
80
81 CodeNoContent lipgloss.Style
82}
83
84// DefaultStyles returns default styles for the UI.
85func DefaultStyles() *Styles {
86 s := new(Styles)
87
88 s.ActiveBorderColor = lipgloss.Color("62")
89 s.InactiveBorderColor = lipgloss.Color("241")
90
91 s.App = lipgloss.NewStyle().
92 Margin(1, 2)
93
94 s.Header = lipgloss.NewStyle().
95 Foreground(lipgloss.Color("15")).
96 Align(lipgloss.Right).
97 Height(1).
98 Bold(true)
99
100 s.Menu = lipgloss.NewStyle().
101 BorderStyle(lipgloss.RoundedBorder()).
102 BorderForeground(s.InactiveBorderColor).
103 Padding(1, 2).
104 MarginRight(1).
105 Width(24)
106
107 s.MenuCursor = lipgloss.NewStyle().
108 Foreground(lipgloss.Color("213")).
109 SetString(">")
110
111 s.MenuItem = lipgloss.NewStyle().
112 Padding(1, 2).
113 Height(4).
114 Border(lipgloss.RoundedBorder()).
115 BorderForeground(lipgloss.Color("241"))
116
117 s.MenuLastUpdate = lipgloss.NewStyle().
118 Foreground(lipgloss.Color("241")).
119 Align(lipgloss.Right)
120
121 s.SelectorBox = lipgloss.NewStyle().
122 Width(64)
123
124 s.ReadmeBox = lipgloss.NewStyle().
125 BorderForeground(s.InactiveBorderColor).
126 Padding(1).
127 MarginRight(1)
128
129 s.RepoTitleBorder = lipgloss.Border{
130 Top: "─",
131 Bottom: "─",
132 Left: "│",
133 Right: "│",
134 TopLeft: "╭",
135 TopRight: "┬",
136 BottomLeft: "├",
137 BottomRight: "┴",
138 }
139
140 s.RepoNoteBorder = lipgloss.Border{
141 Top: "─",
142 Bottom: "─",
143 Left: "│",
144 Right: "│",
145 TopLeft: "┬",
146 TopRight: "╮",
147 BottomLeft: "┴",
148 BottomRight: "┤",
149 }
150
151 s.RepoBodyBorder = lipgloss.Border{
152 Top: "",
153 Bottom: "─",
154 Left: "│",
155 Right: "│",
156 TopLeft: "",
157 TopRight: "",
158 BottomLeft: "╰",
159 BottomRight: "╯",
160 }
161
162 s.RepoTitle = lipgloss.NewStyle().
163 Padding(0, 2)
164
165 s.RepoTitleBox = lipgloss.NewStyle().
166 BorderStyle(s.RepoTitleBorder).
167 BorderForeground(s.InactiveBorderColor)
168
169 s.RepoNote = lipgloss.NewStyle().
170 Padding(0, 2).
171 Foreground(lipgloss.Color("168"))
172
173 s.RepoNoteBox = lipgloss.NewStyle().
174 BorderStyle(s.RepoNoteBorder).
175 BorderForeground(s.InactiveBorderColor).
176 BorderTop(true).
177 BorderRight(true).
178 BorderBottom(true).
179 BorderLeft(false)
180
181 s.RepoBody = lipgloss.NewStyle().
182 BorderStyle(s.RepoBodyBorder).
183 BorderForeground(s.InactiveBorderColor).
184 PaddingRight(1)
185
186 s.Footer = lipgloss.NewStyle().
187 Height(1)
188
189 s.Branch = lipgloss.NewStyle().
190 Foreground(lipgloss.Color("203")).
191 Background(lipgloss.Color("236")).
192 Padding(0, 1)
193
194 s.HelpKey = lipgloss.NewStyle().
195 Foreground(lipgloss.Color("241"))
196
197 s.HelpValue = lipgloss.NewStyle().
198 Foreground(lipgloss.Color("239"))
199
200 s.HelpDivider = lipgloss.NewStyle().
201 Foreground(lipgloss.Color("237")).
202 SetString(" • ")
203
204 s.Error = lipgloss.NewStyle().
205 Padding(1)
206
207 s.ErrorTitle = lipgloss.NewStyle().
208 Foreground(lipgloss.Color("230")).
209 Background(lipgloss.Color("204")).
210 Bold(true).
211 Padding(0, 1)
212
213 s.ErrorBody = lipgloss.NewStyle().
214 Foreground(lipgloss.Color("252")).
215 MarginLeft(2).
216 Width(52) // for now
217
218 s.AboutNoReadme = lipgloss.NewStyle().
219 MarginTop(1).
220 MarginLeft(2).
221 Foreground(lipgloss.Color("#626262"))
222
223 s.LogItemInactive = lipgloss.NewStyle().
224 MarginLeft(1)
225
226 s.LogItemSelector = s.LogItemInactive.Copy().
227 Width(1).
228 Foreground(lipgloss.Color("#B083EA"))
229
230 s.LogItemActive = s.LogItemInactive.Copy().
231 Bold(true)
232
233 s.LogItemHash = s.LogItemInactive.Copy().
234 Width(7).
235 Foreground(lipgloss.Color("#A3A322"))
236
237 s.LogCommit = lipgloss.NewStyle().
238 Margin(0, 2)
239
240 s.LogCommitHash = s.LogItemHash.Copy().
241 UnsetMarginLeft().
242 UnsetWidth().
243 Bold(true)
244
245 s.LogCommitBody = lipgloss.NewStyle().
246 MarginTop(1).
247 MarginLeft(2)
248
249 s.LogCommitStatsAdd = lipgloss.NewStyle().
250 Foreground(lipgloss.Color("#00D787")).
251 Bold(true)
252
253 s.LogCommitStatsDel = lipgloss.NewStyle().
254 Foreground(lipgloss.Color("#FD5B5B")).
255 Bold(true)
256
257 s.LogPaginator = lipgloss.NewStyle().
258 Margin(0).
259 Align(lipgloss.Center)
260
261 s.RefItemSelector = s.LogItemSelector.Copy()
262
263 s.RefItemActive = s.LogItemActive.Copy()
264
265 s.RefItemInactive = s.LogItemInactive.Copy()
266
267 s.RefItemBranch = lipgloss.NewStyle()
268
269 s.RefItemTag = lipgloss.NewStyle().
270 Foreground(lipgloss.Color("#A3A322"))
271
272 s.RefPaginator = s.LogPaginator.Copy()
273
274 s.TreeItemSelector = s.LogItemSelector.Copy()
275
276 s.TreeItemActive = s.LogItemActive.Copy()
277
278 s.TreeItemInactive = s.LogItemInactive.Copy()
279
280 s.TreeFileDir = lipgloss.NewStyle().
281 Foreground(lipgloss.Color("#00AAFF"))
282
283 s.TreeFileMode = s.LogItemInactive.Copy().
284 Width(10).
285 Foreground(lipgloss.Color("#777777"))
286
287 s.TreeFileSize = s.LogItemInactive.Copy().
288 Foreground(lipgloss.Color("252"))
289
290 s.TreeFileContent = lipgloss.NewStyle()
291
292 s.TreePaginator = s.LogPaginator.Copy()
293
294 s.TreeNoItems = s.AboutNoReadme.Copy()
295
296 s.Spinner = lipgloss.NewStyle().
297 MarginTop(1).
298 MarginLeft(2).
299 Foreground(lipgloss.Color("205"))
300
301 s.CodeNoContent = lipgloss.NewStyle().
302 SetString("No Content.").
303 MarginTop(1).
304 MarginLeft(2).
305 Foreground(lipgloss.Color("#626262"))
306
307 return s
308}