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