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