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