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