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