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