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