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