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