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 Repo struct {
28 Base lipgloss.Style
29 Title lipgloss.Style
30 Command lipgloss.Style
31 Body lipgloss.Style
32 Header lipgloss.Style
33 HeaderName lipgloss.Style
34 HeaderDesc lipgloss.Style
35 }
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 LogItem struct {
50 Normal struct {
51 Base lipgloss.Style
52 Hash lipgloss.Style
53 Title lipgloss.Style
54 Desc lipgloss.Style
55 Keyword lipgloss.Style
56 }
57 Active struct {
58 Base lipgloss.Style
59 Hash lipgloss.Style
60 Title lipgloss.Style
61 Desc lipgloss.Style
62 Keyword lipgloss.Style
63 }
64 }
65
66 Log struct {
67 Commit lipgloss.Style
68 CommitHash lipgloss.Style
69 CommitAuthor lipgloss.Style
70 CommitDate lipgloss.Style
71 CommitBody lipgloss.Style
72 CommitStatsAdd lipgloss.Style
73 CommitStatsDel lipgloss.Style
74 Paginator lipgloss.Style
75 }
76
77 Ref struct {
78 Normal struct {
79 Item lipgloss.Style
80 ItemTag lipgloss.Style
81 }
82 Active struct {
83 Item lipgloss.Style
84 ItemTag lipgloss.Style
85 }
86 ItemSelector lipgloss.Style
87 ItemBranch lipgloss.Style
88 Paginator lipgloss.Style
89 }
90
91 Tree struct {
92 Normal struct {
93 FileName lipgloss.Style
94 FileDir lipgloss.Style
95 FileMode lipgloss.Style
96 FileSize lipgloss.Style
97 }
98 Active struct {
99 FileName lipgloss.Style
100 FileDir lipgloss.Style
101 FileMode lipgloss.Style
102 FileSize lipgloss.Style
103 }
104 Selector lipgloss.Style
105 FileContent lipgloss.Style
106 Paginator lipgloss.Style
107 NoItems lipgloss.Style
108 }
109
110 Spinner lipgloss.Style
111
112 CodeNoContent lipgloss.Style
113
114 StatusBar lipgloss.Style
115 StatusBarKey lipgloss.Style
116 StatusBarValue lipgloss.Style
117 StatusBarInfo lipgloss.Style
118 StatusBarBranch lipgloss.Style
119 StatusBarHelp lipgloss.Style
120
121 Tabs lipgloss.Style
122 TabInactive lipgloss.Style
123 TabActive lipgloss.Style
124 TabSeparator lipgloss.Style
125}
126
127// DefaultStyles returns default styles for the UI.
128func DefaultStyles() *Styles {
129 highlightColor := lipgloss.Color("210")
130 highlightColorDim := lipgloss.Color("174")
131 selectorColor := lipgloss.Color("167")
132 hashColor := lipgloss.Color("184")
133
134 s := new(Styles)
135
136 s.ActiveBorderColor = lipgloss.Color("62")
137 s.InactiveBorderColor = lipgloss.Color("241")
138
139 s.App = lipgloss.NewStyle().
140 Margin(1, 2)
141
142 s.Header = lipgloss.NewStyle().
143 Align(lipgloss.Left).
144 Height(1).
145 PaddingLeft(1).
146 MarginBottom(1).
147 Bold(true)
148
149 s.Menu = lipgloss.NewStyle().
150 BorderStyle(lipgloss.RoundedBorder()).
151 BorderForeground(s.InactiveBorderColor).
152 Padding(1, 2).
153 MarginRight(1).
154 Width(24)
155
156 s.MenuCursor = lipgloss.NewStyle().
157 Foreground(lipgloss.Color("213")).
158 SetString(">")
159
160 s.MenuItem = lipgloss.NewStyle().
161 PaddingLeft(1).
162 Border(lipgloss.Border{
163 Left: " ",
164 }, false, false, false, true).
165 Height(3)
166
167 s.MenuLastUpdate = lipgloss.NewStyle().
168 Foreground(lipgloss.Color("241")).
169 Align(lipgloss.Right)
170
171 s.SelectorBox = lipgloss.NewStyle()
172
173 s.ReadmeBox = lipgloss.NewStyle()
174
175 s.Repo.Base = lipgloss.NewStyle()
176
177 s.Repo.Title = lipgloss.NewStyle().
178 Padding(0, 2)
179
180 s.Repo.Command = lipgloss.NewStyle().
181 Foreground(lipgloss.Color("168"))
182
183 s.Repo.Body = lipgloss.NewStyle().
184 Margin(1, 0)
185
186 s.Repo.Header = lipgloss.NewStyle().
187 Height(2).
188 Border(lipgloss.NormalBorder(), false, false, true, false).
189 BorderForeground(lipgloss.Color("238"))
190
191 s.Repo.HeaderName = lipgloss.NewStyle().
192 Bold(true)
193
194 s.Repo.HeaderDesc = lipgloss.NewStyle().
195 Faint(true)
196
197 s.Footer = lipgloss.NewStyle().
198 MarginTop(1).
199 Padding(0, 1).
200 Height(1)
201
202 s.Branch = lipgloss.NewStyle().
203 Foreground(lipgloss.Color("203")).
204 Background(lipgloss.Color("236")).
205 Padding(0, 1)
206
207 s.HelpKey = lipgloss.NewStyle().
208 Foreground(lipgloss.Color("241"))
209
210 s.HelpValue = lipgloss.NewStyle().
211 Foreground(lipgloss.Color("239"))
212
213 s.HelpDivider = lipgloss.NewStyle().
214 Foreground(lipgloss.Color("237")).
215 SetString(" • ")
216
217 s.Error = lipgloss.NewStyle().
218 MarginTop(2)
219
220 s.ErrorTitle = lipgloss.NewStyle().
221 Foreground(lipgloss.Color("230")).
222 Background(lipgloss.Color("204")).
223 Bold(true).
224 Padding(0, 1)
225
226 s.ErrorBody = lipgloss.NewStyle().
227 Foreground(lipgloss.Color("252")).
228 MarginLeft(2)
229
230 s.AboutNoReadme = lipgloss.NewStyle().
231 MarginTop(1).
232 MarginLeft(2).
233 Foreground(lipgloss.Color("242"))
234
235 s.LogItem.Normal.Base = lipgloss.NewStyle().
236 Border(lipgloss.Border{
237 Left: " ",
238 }, false, false, false, true).
239 PaddingLeft(1)
240
241 s.LogItem.Active.Base = s.LogItem.Normal.Base.Copy().
242 Border(lipgloss.Border{
243 Left: "┃",
244 }, false, false, false, true).
245 BorderForeground(selectorColor)
246
247 s.LogItem.Active.Hash = s.LogItem.Normal.Hash.Copy().
248 Foreground(hashColor)
249
250 s.LogItem.Active.Hash = lipgloss.NewStyle().
251 Bold(true).
252 Foreground(highlightColor)
253
254 s.LogItem.Normal.Title = lipgloss.NewStyle().
255 Foreground(lipgloss.Color("105"))
256
257 s.LogItem.Active.Title = lipgloss.NewStyle().
258 Foreground(highlightColor).
259 Bold(true)
260
261 s.LogItem.Normal.Desc = lipgloss.NewStyle().
262 Foreground(lipgloss.Color("246"))
263
264 s.LogItem.Active.Desc = lipgloss.NewStyle().
265 Foreground(lipgloss.Color("95"))
266
267 s.LogItem.Active.Keyword = s.LogItem.Active.Desc.Copy().
268 Foreground(highlightColorDim)
269
270 s.LogItem.Normal.Hash = lipgloss.NewStyle().
271 Foreground(hashColor)
272
273 s.LogItem.Active.Hash = lipgloss.NewStyle().
274 Foreground(highlightColor)
275
276 s.Log.Commit = lipgloss.NewStyle().
277 Margin(0, 2)
278
279 s.Log.CommitHash = lipgloss.NewStyle().
280 Foreground(hashColor).
281 Bold(true)
282
283 s.Log.CommitBody = lipgloss.NewStyle().
284 MarginTop(1).
285 MarginLeft(2)
286
287 s.Log.CommitStatsAdd = lipgloss.NewStyle().
288 Foreground(lipgloss.Color("42")).
289 Bold(true)
290
291 s.Log.CommitStatsDel = lipgloss.NewStyle().
292 Foreground(lipgloss.Color("203")).
293 Bold(true)
294
295 s.Log.Paginator = lipgloss.NewStyle().
296 Margin(0).
297 Align(lipgloss.Center)
298
299 s.Ref.Normal.Item = lipgloss.NewStyle()
300
301 s.Ref.ItemSelector = lipgloss.NewStyle().
302 Foreground(selectorColor).
303 SetString("> ")
304
305 s.Ref.Active.Item = lipgloss.NewStyle().
306 Foreground(highlightColorDim)
307
308 s.Ref.ItemBranch = lipgloss.NewStyle()
309
310 s.Ref.Normal.ItemTag = lipgloss.NewStyle().
311 Foreground(lipgloss.Color("185"))
312
313 s.Ref.Active.ItemTag = lipgloss.NewStyle().
314 Bold(true).
315 Foreground(highlightColor)
316
317 s.Ref.Active.Item = lipgloss.NewStyle().
318 Bold(true).
319 Foreground(highlightColor)
320
321 s.Ref.Paginator = s.Log.Paginator.Copy()
322
323 s.Tree.Selector = s.Tree.Normal.FileName.Copy().
324 Width(1).
325 Foreground(selectorColor)
326
327 s.Tree.Normal.FileName = lipgloss.NewStyle().
328 MarginLeft(1)
329
330 s.Tree.Active.FileName = s.Tree.Normal.FileName.Copy().
331 Bold(true).
332 Foreground(highlightColor)
333
334 s.Tree.Normal.FileDir = lipgloss.NewStyle().
335 Foreground(lipgloss.Color("39"))
336
337 s.Tree.Active.FileDir = lipgloss.NewStyle().
338 Foreground(highlightColor)
339
340 s.Tree.Normal.FileMode = s.Tree.Active.FileName.Copy().
341 Width(10).
342 Foreground(lipgloss.Color("243"))
343
344 s.Tree.Active.FileMode = s.Tree.Normal.FileMode.Copy().
345 Foreground(highlightColorDim)
346
347 s.Tree.Normal.FileSize = s.Tree.Normal.FileName.Copy().
348 Foreground(lipgloss.Color("243"))
349
350 s.Tree.Active.FileSize = s.Tree.Normal.FileName.Copy().
351 Foreground(highlightColorDim)
352
353 s.Tree.FileContent = lipgloss.NewStyle()
354
355 s.Tree.Paginator = s.Log.Paginator.Copy()
356
357 s.Tree.NoItems = s.AboutNoReadme.Copy()
358
359 s.Spinner = lipgloss.NewStyle().
360 MarginTop(1).
361 MarginLeft(2).
362 Foreground(lipgloss.Color("205"))
363
364 s.CodeNoContent = lipgloss.NewStyle().
365 SetString("No Content.").
366 MarginTop(1).
367 MarginLeft(2).
368 Foreground(lipgloss.Color("242"))
369
370 s.StatusBar = lipgloss.NewStyle().
371 Height(1)
372
373 s.StatusBarKey = lipgloss.NewStyle().
374 Bold(true).
375 Padding(0, 1).
376 Background(lipgloss.Color("206")).
377 Foreground(lipgloss.Color("228"))
378
379 s.StatusBarValue = lipgloss.NewStyle().
380 Padding(0, 1).
381 Background(lipgloss.Color("235")).
382 Foreground(lipgloss.Color("243"))
383
384 s.StatusBarInfo = lipgloss.NewStyle().
385 Padding(0, 1).
386 Background(lipgloss.Color("212")).
387 Foreground(lipgloss.Color("230"))
388
389 s.StatusBarBranch = lipgloss.NewStyle().
390 Padding(0, 1).
391 Background(lipgloss.Color("62")).
392 Foreground(lipgloss.Color("230"))
393
394 s.StatusBarHelp = lipgloss.NewStyle().
395 Padding(0, 1).
396 Background(lipgloss.Color("237")).
397 Foreground(lipgloss.Color("243"))
398
399 s.Tabs = lipgloss.NewStyle()
400
401 s.TabInactive = lipgloss.NewStyle()
402
403 s.TabActive = lipgloss.NewStyle().
404 Bold(true).
405 Foreground(lipgloss.Color("63"))
406
407 s.TabSeparator = lipgloss.NewStyle().
408 SetString("│").
409 Padding(0, 1).
410 Foreground(lipgloss.Color("238"))
411
412 return s
413}